
3) Реализация 3-го проекта:
3.1) Создадим третий проект с именем Project_3 в уже имеющемся решении.
3.2) Разработаем алгоритм процедуры с параметрами и без возвращаемого значения. Схема алгоритма этой процедуры func3 представлена на рисунке 18.
Рисунок 18 – Схема алгоритма процедуры func3 с параметрами
и без возвращаемого значения для третьего проекта
3.3) Разработаем программные коды двух функций в соответствии со схемами алгоритмов. Программные коды разработанных функций запишем в файл с именем ex3.cpp в следующем порядке:
объявление (прототип) функции func3;
определение функции main;
определение функции func3 с входными и выходными параметрами без возвращаемого значения, где входные данные передаются по значению, а результат вычислений возвращается через параметр по ссылке.
#include
<iostream> #include
<cmath> using
namespace
std; double
numb(double
nu) { while
(true) { if
(cin.fail()) { cin.clear(); cin.ignore(1000,
'\n'); cout
<<
"Ошибка!
Введенные
данные не являются числом\n"; cout
<<
"Повторите
ввод: "; cin
>>
nu; } else { return
nu; } } } double
zero(double
z) { while
(true) {
if
((z
== 0)) { cout
<<
"Ошибка!
При
данном значении знаменатель обращается
в ноль\n"; cout
<<
"Повторите
ввод: "; cin
>>
z; numb(z); } else { return
z; }
} } void
func3(double,
double,
double&);
int
main() { setlocale(LC_ALL,
"rus"); double
x, y, d;
cout
<<
"Введите
х
= "; cin
>>
x; numb(x);//проверка
является ли введенный х числом
zero(x);//проверка
на обращение знаменателя в ноль
cout
<<
"Введите
y = "; cin
>>
y; numb(y);//проверка
является ли введенный у числом
zero(y);//проверка
на обращение знаменателя в ноль } void
func3(double
a,
double
b,
double&
d) { d
= ((a
* b
* b
- sqrt(abs(a
* a
- 2.5 * pow(10, -3) * b)))
/ (2 * sin(a
* b))
+ 0.5); }
func3(x,
y, d); cout
<<
endl <<
"Вещественное
d = "
<<
d <<
endl; system("PAUSE"); return
0;
} void
func3(double
a,
double
b,
double&
d) { d
= (a
* b
* b
- sqrt(abs(a
* a
- 2.5 * pow(10, -3) * b)))
/ (2 * sin(a
* b))
+ 0.5; }
3.4) Откомпилируем файл ex3.cpp, выполним перестроение решения ProjectLab3 и выполнение проекта Project_3, назначив его запускаемым проектом. Получим следующие результаты при заданных значениях исходных данных (рис. 19).
Рисунок 19 – Результат выполнения проекта
3.5) Проведем следующие эксперименты:
Проверим, можно ли при вызове функции в списке фактических параметров записывать выражения? Например:
func3(x+2, y-0.5, d+1);
При попытке выполнения программы произошла ошибка (рис.20).
Это связано с тем, что мы пытаемся изменить переменную, которая передается по ссылке.
Рисунок 7 – Список возникших ошибок
Проверим, изменится ли результат выполнения проекта, если при определении функции func3 удалить знак & (операция взятия адреса) перед формальным параметром d:
void
func3(double
a,
double
b,
double
d)
Список ошибок после запуска программы представлен на рисунке 21.
Рисунок 21 – Список ошибок после удаления знака & перед формальным параметром d
Данная ошибка вызвана отсутствием операции взятия адреса и, в следствие этого, не происходит выделения ячейки памяти под параметр d.