
- •Определение объекта типа функции.
- •Void main ( void )
- •Void main (void) // 13
- •Проблема обмена информацией (данными) между функциями.
- •Передача информации в функцию через параметры по значению. Возврат значения одного результата из функции через возвращаемое значение.
- •Void main ( void )
- •Прототип (описание) функции. Понятие глобального объекта.
- •Void main ( void )
- •Void main ( void )
- •Void main ( void )
- •Передача параметров по ссылке.
- •Int& float& char&
- •Void countX (float a, float b, float c, float& X )
- •Void main ( void )
- •Void countX (float a, float b, float c, float& X )
- •Void main ( void )
- •Обмен данными между функциями через глобальные объекты. Функции без возвращаемого значения. Функции без параметров.
- •Void countX (void)
- •Void main ( void )
- •Смешанный обмен данными между функциями
- •Void main ( void )
- •Void countX (float c, float& X)
- •Void main ( void )
- •Программы, состоящие из двух и более файлов.
- •Void countX (float c, float& X); // описанa функция countX для расширения ее // области видимости. Ее определение
- •Void main ( void )
- •Void countX (float c, float& X)
Void main ( void )
{
сout << endl << "vvedite a, x1, x2 "; // вывод строки-подсказки
float x1, a, x2; // порядок перечисления имен объектов
// в инструкции их определения любой
cin>>a>>x1>>x2; // в инструкции-выражении порядок перечисления
// имен объектов тот, что указан в строке-подсказке
float vir1;
vir1 = countX ( x1*x1, x2, M_PI_2);
float vir2;
vir2 = countX( x2, x1 + 1.2, 0);
float x = 1./11 + a * vir1 + 1 / vir2; // обратите внимание 1./11, а не 1/11
cout << endl << "X = " << x;
getch();
}
Так выглядит ввод и вывод на экране при работе программы.
Пояснения к работе программы.
Программа начинает работать с функции main.
Первая исполняемая инструкция-выражение
сout << endl << "vvedite a, x1, x2 ";
выводит на экран подсказку.
Следующая инструкция-выражение вводит информацию с клавиатуры в три объекта a, x1, x2. Пользователь ввел a равное 1, x1 равное 2, x2 равное 3.
В инструкции-выражении
vir1 = countX ( x1*x1, x2, M_PI_2);
первым выполняется оператор ( ) вызова функции.
При вызове функции countX эта функция принимает первый фактический параметр по значению ( получает результат вычисления выражения x1*x1, равное 4) и для хранения этого значения 4 в объекте–функции countX создается локальный объект с именем а, тип которого float (т.к. первый формальный параметр в списке формальных параметров функции float a). Полученное через параметр значение 4 записывается в этот локальный объект а. Так же передаются остальные два фактических параметра – значения 3 из объекта x2 и 1.57 из константы M_PI_2. Для записи этих значений создаются локальные объекты b и c. Значения, записанные в локальные объекты а, b и c используются при вычислении значения результата 0.02 в локальном объекте х функции countX. Этот результат инструкцией return x; возвращается в точку вызова функции countX в объекте main, когда функция countX заканчивает работу и передает управление снова в функцию main.
Последним в выражении
vir1 = countX ( x1*x1, x2, M_PI_2)
выполняется оператор =
Значение 0.02, которое возвращает функция countX, оператором присвоить = копируется в область локального объекта vir1 функции main.
Все локальные объекты, определенные в функции countX, «живы», пока функция выполняет работу. Функция countX закончила работу, его локальные объекты «умерли» вместе с функцией.
При втором вызове функции countX в инструкции-выражении
vir2 = countX( x2, x1 + 1.2, 0);
первым выполняется оператор () вызова функции countX.
Эта функция получает первый фактический параметр по значению ( получает значение 3). Для хранения этого значения 3 в объекте–функции вновь создается локальный объект а, тип которого float (т.к. первый формальный параметр в списке формальных параметров функции float a). Полученное через параметр значение 3 записывается в этот локальный объект а. Так же передаются остальные два фактических параметра – значения 3.2 и 0, для них создаются локальные объекты b и c. Эти значения используются при вычислении значения -0.09 объекта х в функции countX, которое инструкцией return x; возвращается в точку вызова функции countX в объекте main для продолжения вычисления выражения:
vir2 = countX( x2, x1 + 1.2, 0)
Последним в этом выражении выполняется оператор присвоить =, который копирует в область локального объекта vir2 функции main то значение -0.09, которое вернула функция countX.
Выполняется инструкция определения объекта:
float x = 1./11 + a * vir1 + 1 / vir2;
Созданный этим оператором объект х, при создании инициализируется значением, вычисленным в выражении 1./11 + a * vir1 + 1 / vir2, тип которого float.
Обратите внимание, что значение выражения 1/11, будучи вычисленым, равно 0, его тип int, так как оба операнда этого выражения имеют тип int. А значение выражения 1./11 имеет тип float, так как один из операндов этого выражения, а именно 1. имеет тип float, поэтому результат получают в кодировке float и он равен 0.090909 (смотрите неявное преобразование типов!).
Инструкции-выражения
cout << endl << "X = " << x;
getch();
организуют вывод результата на экран и задержку.