- •1.Постановка задачи
- •2.Формализация и уточнение задания
- •3.Разработка пяти программных проектов в одном решение и получение результатов их работы
- •Реализация 1-го проекта:
- •Реализация 2-го проекта:
- •Реализация 3-го проекта:
- •Реализация 4-го проекта:
- •Реализация 5-го проекта:
- •4.Тестирование программы и доказательство правильности результатов
Реализация 2-го проекта:
Создадим второй пустой проект с именем pr2 в уже существующем решении. Для этого выполним команду Файл/Добавить/Создать проект. В открывшемся окне “Добавить новый проект” зададим имя проекта pr2.
Запишем в файл с именем zad2.cpp программные коды разработанных в первом проекте функций (переименовав функцию func1 в func2) в следующем порядке:
Cначала программный код главной функции main;
После него определение функции func2 с параметрами и возвращаемым значением.
#include <iostream>
#include <cmath>
#define _USE_MATH_DEFINES
#include "math.h"
using namespace std;
double func2(double a, double b); // объявление функцию
int main()
{
setlocale(LC_ALL, "rus");
double x, y, f; // переменные типа double
cout << "Введите x = ";
while (!(cin >> x)) // “защита от дурака”
{
cout << "Введите корректные данные";
cin.clear(); // Очистка потока от некорректных данных
cin.ignore(numeric_limits<streamsize>::max(), '\n'); // функция пропустит все символы в буфере до следующего символа \n
}
cout << "Введите y = ";
while (!(cin >> y))
{
cout << "Введите корректные данные ";
cin.clear(); // Очистка потока от некорректных данных
cin.ignore(numeric_limits<streamsize>::max(), '\n'); //функция пропустит все символы в буфере до следующего символа \n
}
if ((x + y) <= 0) //условие, что аргумент логарифма больше 0
{
cout << "Аргумент логарифма не может быть 0 или меньше нуля";
return 0;
}
if ((x / 8 == y)) //условие, что знаменатель не равен 0
{
cout << "Знаменатель равен 0, на 0 делить нельзя";
return 0;
}
f = func2(x, y); // вставляем функцию в main
cout << endl << "результат f = " << f << endl;
system("PAUSE");
return 0;
}
double func2(double x, double y) // определение функции
{
double f;
f = (pow(5.2, 3) * (log10(x + y) / (x - (1 / (0.45 * sin(x - 8 * y)))))) + 0.5;
return f;
}
Выполним проект pr2. Получим следующие результаты при заданных значениях исходных данных. (Рис. 5)
Рисунок 5 – Результат выполнения pr2
Проведем следующий эксперимент: закомментируем прототип функции func2 перед кодом главной функции main (Рис. 6)
Рисунок 6 – Закомментировалa прототип функции.
Как мы можем увидеть программа выдает ошибку. Связанно это с тем, что функции не была объявлена и из-за этого не может бы найдена.
Реализация 3-го проекта:
Создадим третий проект с именем pr3 в уже имеющемся решении.
Разработаем алгоритм процедуры с параметрами и без возвращаемого значения. Схема алгоритма этой процедуры func3 представлена ниже. (Рис.7)
Рисунок 7 – Схема алгоритма процедуры func3 с параметрами
и без возвращаемого значения для третьего проекта
Разработаем программные коды двух функций в соответствии со схемами алгоритмов. Программные коды разработанных функций запишем в файл с именем zad3.cpp в следующем порядке
Объявление (прототип) функции func3;
Определение функции main;
Определение функции func3 с входными и выходными параметрами без возвращаемого значения, где входные данные передаются по значению, а результат вычислений возвращается через параметр по ссылке.
#include <iostream>
#include <cmath>
#define _USE_MATH_DEFINES
#include "math.h"
using namespace std;
void func3(double, double, double&); // объявление функции
int main()
{
setlocale(LC_ALL, "rus");
double x, y, f; // вводим переменные типа double
cout << "Введите x = ";
while (!(cin >> x)) // “защита от дурака”
{
cout << "Введите корректные данные ";
cin.clear(); // Очистка потока от некорректных данных
cin.ignore(numeric_limits<streamsize>::max(), '\n'); // функция пропустит все символы в буфере до следующего символа \n
}
cout << "Введите y = ";
while (!(cin >> y))
{
cout << "Введите корректные данные ";
cin.clear(); // Очистка потока от некорректных данных
cin.ignore(numeric_limits<streamsize>::max(), '\n'); //функция пропустит все символы в буфере до следующего символа \n
}
if ((x + y) <= 0) //условие, что аргумент логарифма больше 0
{
cout << "Аргумент логарифма не может быть 0 или меньше нуля";
return 0;
}
if ((x / 8 == y)) //условие, что знаменатель не равен 0
{
cout << "Знаменатель равен 0, на 0 делить нельзя";
return 0;
}
func3(x, y, f); // вставляем функцию в main
cout << endl << "результат f = " << f << endl;
system("PAUSE");
return 0;
}
void func3(double x, double y, double& f)
{
f = (pow(5.2, 3) * (log10(x + y) / (x - (1 / (0.45 * sin(x - 8 * y)))))) + 0.5;
}
Откомпилируем файл zad3.cpp, выполним перестроение решения lab3 и выполнение проекта pr3, назначив его запускаемым проектом. Получим следующие результаты при заданных значениях исходных данных. (Риc. 8)
Рисунок 8 – Результаты проекта pr3.
Проведем следующий эксперимент: изменится ли результат выполнения проекта, если при определении функции func3 удалить знак & (операция взятия адреса) перед формальным параметром f: (Рис.9)
Рисунок 9 – Уведомления, возникающие при удалении знака & из функции func3
