
1) Реализация 1-го проекта:
1.1) Разработаем алгоритм процедуры с параметрами и возвращаемым значением. Схема алгоритма этой процедуры func1 приведена на рисунке 11.
Рисунок 11 – Схема алгоритма процедуры func1 с параметрами и возвращаемым значением для первого проекта
1.2) Разработаем программные коды двух функций в соответствии со схемами алгоритмов. Программные коды разработанных функций запишем в файл с именем ex1.cpp в следующем порядке:
сначала определение функции func1 с параметрами и возвращаемым значением;
после него главную функцию main.
#include
<iostream> #include
<cmath> using
namespace
std; double
numb(double&
nu){……} double
zero(double&
z){……} double
func1(double
x,
double
y) { double
d; d
= (x
* y
* y
- sqrt(abs(x
* x
- 2.5E-3 * y)))
/ (2 * sin(x
* y))
+ 0.5; return
d; }
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);//проверка
на обращение знаменателя в ноль
d
= func1(x, y); cout
<<
endl <<
"Вещественное
d = "
<<
d <<
endl; system("PAUSE"); return
0; }
1.3) Откомпилируем файл ex1.cpp, выполним построение решения ProjectLab3 и выполнение проекта Project_1. Получим следующие результаты при заданных значениях исходных данных (рис.12).
Рисунок 12 – Результат запуска программы
1.4) Проведем следующие эксперименты, используя при необходимости пошаговую отладку:
Проверим, зависит ли результат выполнения проекта от порядка фактических параметров в функции main, заменив оператор вызова функции d=func1(x, y) на оператор d=func1(y,x).
Результат выполнения программы представлен на рисунке 13.
Рисунок 13 – Результат запуска программы
Вывод: результат выполнения проекта зависит от порядка фактических параметров, так как они передаются в функцию в том порядке, в котором записаны в скобках, и не зависят от имён формальных.
Проверим, изменится ли значение переменной x в функции main, если внутри функции funс1 до оператора return d изменить значение x, например, добавив оператор x++:
double
func1(double
x,
double
y) { double
d; d
= (x
* y
* y
- sqrt(abs(x
* x
- 2.5 * pow(10, -3) * y)))
/ (2 * sin(x
* y))
+ 0.5; x++; return
d; }
Результат запуска программы представлен на рисунке 14.
Рисунок 14 – Результат программы с добавлением оператора x++
Вывод: результат выполнения проекта не изменился, так изменение параметра х произошло после вычисления значения d.
Проверим, можно ли при вызове функции в списке фактических параметров указывать не имя переменной, а константу или выражение для следующих операторов:
d
= func1(1.3802, -1.9);
Результат запуска программы представлен на рисунке 15.
Рисунок 15 – Результат выполнения программы при указании в списке фактических параметров констант
Вывод: при вызове функции в списке фактических параметров можно указывать константы и выражения для фактических операторов.
Результат программы будет неизменным при введении любых допустимых данных, так как на вход функции мы передаём заданные числа, а не значения переменных.
Проверим, изменится ли результат работы проекта, если, ничего не меняя в главной функции main, изменить имена формальных параметров при определении функции func1 следующим образом:
double
func1(double
a,
double
b) { double
d; d
= (a
* b
* b
- sqrt(abs(a
* a
- 2.5E-3 * b)))
/ (2 * sin(a
* b))
+ 0.5; return
d; }
Результат запуска программы представлен на рисунке 16.
Рисунок 16 – Результат выполнения программы после изменения имен формальных параметров
Вывод: результат программы не изменился, так как имена формальных и фактических параметров никак не зависят друг от друга.