Return x; нет этой инструкции, ведь функция так ничего не вернет!

}

void main ( void )

{

cout<<endl<<"vvedite a, x1, x2 ";

float x1, a, x2;

cin>>a>>x1>>x2;

float vir1;

countX (x1*x1, x2,pi, M_PI_2);

float vir2;

countX(x2, x1 + 1.2, 0, vir2);

float x=1/11. + a * vir1 + 1 / vir2;

cout<< endl <<"X = "<<x;

getch();

}

Пояснения к работе программы в этом варианте.

Программа начинает работать с функции main.

Попрежнему первая исполняемая инструкция-выражение

сout << endl << "vvedite a, x1, x2 ";

выводит на экран подсказку.

Следующая инструкция-выражение вводит информацию с клавиатуры в три объекта a, x1, x2.Пользователь ввел a равное 1, x1 равное 2, x2 равное 3.

В инструкции-выражении

countX ( x1*x1, x2, M_PI_2, vir1);

выполняется оператор ( )вызова функции, где четвертым параметром, получаемым по ссылке на float,указан объект vir1.

При вызове функции countX эта функция принимает первый фактический параметр по значению ( получает результат вычисления выражения x1*x1,равное 4) и для хранения этого значения 4 в объекте–функции countX создается локальный объект с именем а, тип которого float (т.к. первый формальный параметр в списке формальных параметров функции float a). Полученное через параметр значение 4 записывается в этот локальный объект а. Так же передаются остальные два фактических параметра – значения 3 из объекта x2 и 1.57 из константы M_PI_2. Для записи этих значений создаются локальные объекты b и c. Здесь механизм тот, который уже был расмотрен. Значения, записанные в локальные объекты а, b и c используются при вычислении значения выражения (a * cos(b + c) - b * sin(a + c)) / (pow(a,3) + b * b),а полученный результат, равный 0.02, записывается в объект, имя которого х. А имя х при этом первом вызове функции именует объект vir1,так как в списке формальных параметров при вызове была сделана инициализация 4 параметра:

float& x = vir1,то есть имя х в этой фукции назначено новым именем объекта vir1.

Этот объект определен в функции main, следовательно информация вычисленная в функции countX инструкцией

x = (a * cos(b + c) - b * sin(a + c)) / (pow(a,3) + b * b);

ее оператором присвоить записывается в объект с именем х , которое именует объект vir1. Информация из области функции countX попадает в область другой функции- функции main.

Return x; нет этой инструкции, ведь функция так ничего не вернет! - student2.ru

При втором вызове функции countX в инструкции-выражении

countX( x2, x1 + 1.2, 0, vir2);

выполняется оператор () вызова функцииcountX, где четвертым параметром, получаемым по ссылке на float,указан объект vir2.

Значения, полученные в локальные объекты а, b и c при этои вызове используются при вычислении значения выражения (a * cos(b + c) - b * sin(a + c)) / (pow(a,3) + b * b),а полученный результат, равный теперь -0.09, записывается в объект, имя которого в этой функции попрежнему х. А это имя при этом новом вызове функции именует объект vir2,так как в списке формальных параметров при этом вызове была сделана инициализация 4 параметра:

float& x = vir2,то есть имя х в этой фукции будет новым именем объекта vir2.

Этот объект попрежнему определен в функции main. Таким образом информация вычисляется функцией countX винструкции

x = (a * cos(b + c) - b * sin(a + c)) / (pow(a,3) + b * b);

Оператором присвоить эта инструкция записывает результат в область памяти другой функции, в область памяти объекта vir2.

Return x; нет этой инструкции, ведь функция так ничего не вернет! - student2.ru

(Технически такой механизм передачи объекта по ссылке использует все тот же механизм передачи через параметры по значению адреса передаваемого объекта, например, vir1.Но к полученному по значению адресу объекта vir1,автоматически применяется оператор взятия объекта и таким образом, обеспечивается работа не с переданным адресом объекта, а с самим объектом, определенным в другой функции).

По ссылке можно передать объект, тип которого обязательно должен совпадать с типом, на который сделана ссылка.

Файл example3.cpp

Define _USE_MATH_DEFINES

#include <math.h>

void countX (float a, float b, float c, float& x )

{

x= (a * cos(b + c) - b * sin(a + c)) / (pow(a,3) + b * b);

}

void main ( void )

{

cout<<endl<<"vvedite a, x1, x2 ";

float x1, a;

Наши рекомендации