Студопедия

КАТЕГОРИИ:


Архитектура-(3434)Астрономия-(809)Биология-(7483)Биотехнологии-(1457)Военное дело-(14632)Высокие технологии-(1363)География-(913)Геология-(1438)Государство-(451)Демография-(1065)Дом-(47672)Журналистика и СМИ-(912)Изобретательство-(14524)Иностранные языки-(4268)Информатика-(17799)Искусство-(1338)История-(13644)Компьютеры-(11121)Косметика-(55)Кулинария-(373)Культура-(8427)Лингвистика-(374)Литература-(1642)Маркетинг-(23702)Математика-(16968)Машиностроение-(1700)Медицина-(12668)Менеджмент-(24684)Механика-(15423)Науковедение-(506)Образование-(11852)Охрана труда-(3308)Педагогика-(5571)Полиграфия-(1312)Политика-(7869)Право-(5454)Приборостроение-(1369)Программирование-(2801)Производство-(97182)Промышленность-(8706)Психология-(18388)Религия-(3217)Связь-(10668)Сельское хозяйство-(299)Социология-(6455)Спорт-(42831)Строительство-(4793)Торговля-(5050)Транспорт-(2929)Туризм-(1568)Физика-(3942)Философия-(17015)Финансы-(26596)Химия-(22929)Экология-(12095)Экономика-(9961)Электроника-(8441)Электротехника-(4623)Энергетика-(12629)Юриспруденция-(1492)Ядерная техника-(1748)

Define _USE_MATH_DEFINES. #include <iostream>




Файл example3.cpp

#include <math.h>

#include <iostream>

#include <conio.h>

using namespace std;

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

{

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

// 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.

При втором вызове функции 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 .

 

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

 

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

 




Поделиться с друзьями:


Дата добавления: 2015-06-29; Просмотров: 505; Нарушение авторских прав?; Мы поможем в написании вашей работы!


Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет



studopedia.su - Студопедия (2013 - 2024) год. Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав! Последнее добавление




Генерация страницы за: 0.007 сек.