Выбрать главу

Упражнения 

 1. Запишите прототип для функции с именем Perimeter, которая возвращает значение типа unsigned long int и принимает два параметра, имеющих тип unsigned short int.

unsigned long int Perimeter(unsigned short int, unsigned short int);

2. Запишите определение функции Perimeter согласно объявлению в упражнении 1. Два принимаемых ею параметра представляют длину и ширину прямоугольника, а функция возвращает его периметр (удвоенная длина плюс удвоенная ширина).

unsigned long int Perimeter(unsigned short int length, unsigned short int width)

{

   return 2*length + 2*width;

}

3. Жучки: что неправильно в этой функции?

#include <iostream.h>

void myFunc(unsigned short int x);

int main()

{

   unsigned short int x, у;

   у = myFunc(int);

   cout << "x: " << x << " у: " << у << "\n";

}

void myFunc(unsigned short int x)

{

   return (4*x);

}

Функция объявлена с использованием ключевого слова void, и поэтому она не может возвращать какое-либо значение. Кроме того, при вызове функции myFunc ей следует передать параметр x, а не int.

4. Жучки: что неправильно в этой функции?

#include <iostream.h>

int myFunc(unsigned short int x);

int main()

{

   unsigned short int x, у;

   у = myFunc(x);

   cout << "x: " << X << " у: " << у << "\n";

}

int myFunc(unsigned short int x);

{

   return (4*x);

}

Эта функция была бы идеальной, если бы не точка с запятой, поставленная в конце заголовка ее определения.

5. Напишите функцию, которая принимает два параметра типа unsigned short int и возвращает результат деления первого параметра на второй. Функция не должна выполнять операцию деления, если второе число равно нулю, но в этом случае она должна возвратить значение -1.

short int Divider(unsigned short int valOne, unsigned short int valTwo)

{

   if (valTwo == 0)

      return -1;

   else

      return valOne / valTwo;

}

6. Напишите программу, которая запрашивает у пользователя два числа и вызывает функцию, записанную при выполнении упражнения 5. Выведите результат или сообщение об ошибке, если функция возвратит значение, равное -1.

#include <iostream.h>

typedef unsigned short int USHORT;

typedef unsigned long int ULONG;

short int Divider(

unsigned short int valone,

unsigned short int valtwo);

int main()

{

   USHORT one, two;

   short int answer;

   cout << "Enter two numbers.\n Number one: ";

   cin >> one;

   cout << "Number two: ";

   cin >> two;

   answer = Divider(one, two);

   if (answer > -1)

     cout << "Answer: " << answer;

   else

     cout << "Error, can't divide by zero!";

   return 0;

}

7. Напишите программу, которая запрашивает число и показатель степени. Напишите рекурсивную функцию, которая возводит число в степень путем многократного умножения числа на самое себя, т.е. если число равно 2, а показатель степени равен 4, то эта функция должна возвратить число 16.

#include <iostream.h>

typedef unsigned short USHORT;

typedef unsigned long ULONG;

ULONG GetPower(USHORT n, USHORT power);

int main()

{

   USHORT number, power;

   ULONG answer;

   cout << "Enter a number: ";

   cin >> number;

   cout << "To what power? ";

   cin >> power;

   answer = GetPower(number,power);

   cout << number << " to the " << power << "th power is " << answer << endl;

   return 0;

}

ULONG GetPower(USHORT n, USHORT power)

{

   if(power == 1)

      return n;

   else

      return (n * GetPower(n,power-1));

}

День 6

Контрольные вопросы 

1. Что представляет собой оператор прямого доступа и для чего он используется?

Оператор точки прямого доступа представляет собой символ точки (.). Он используется для обращения к членам класса.

2. Что резервирует память — объявление или определение?

Память резервируется определениями переменных. Объявления классов не резервируют память.

3. Объявление класса является его интерфейсом или выполнением?

Объявление класса является его интерфейсом, который сообщает клиентам класса, как с ним взаимодействовать. Выполнение класса — это набор функций-членов, сохраняемых обычно в файле с расширением CPP.

4. Какова разница между открытыми (public) и закрытыми (private) данными- членами?

К открытым переменным-членам могут обращаться клиенты класса, а к закрытым могут получить доступ только функции-члены класса.

5. Могут ли функции-члены быть закрытыми?

Да. Как функции-члены, так и переменные-члены могут быть закрытыми.

6. Могут ли переменные-члены быть открытыми?

Хотя переменные-члены могут быть открытыми, но считается хорошей практикой программирования, когда переменные-члены объявляются все же закрытыми, а доступ к этим данным обеспечивается за счет открытых методов доступа.