Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Практическая работа №3.docx
Скачиваний:
0
Добавлен:
27.01.2025
Размер:
1.13 Mб
Скачать

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);

}

Текст программы проекта 3:

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.