МИНИСТЕРСТВО ЦИФРОВОГО РАЗВИТИЯ, СВЯЗИ И МАССОВЫХ КОММУНИКАЦИЙ РОССИЙСКОЙ ФЕДЕРАЦИИ
Ордена Трудового Красного Знамени федеральное государственное бюджетное образовательное учреждение высшего образования
«Московский технический университет связи и информатики»
Кафедра «Информатика»
Лабораторная работа №5
«Разработка консольных проектов Visual Studio
с использованием функций VC++»
по теме:
«Основы алгоритмизации, базовые алгоритмические структуры и метод пошаговой детализации»
по дисциплине
«Информатика»
Выполнил: студент гр. БИН2104 Зайцева О.С.
Вариант 9
Проверил:
Москва, 2021 г.
Содержание
Индивидуальное задание на разработку программного проекта…………. 3
Формализация и уточнение задания………………………………………… 3
Разработка пяти программных проектов в одном решении и получение результатов их работы……………………………………………………….. 3
3.1) Функция с параметрами и возвращаемым значением, причём определение функции должно быть записано перед функцией main…………… 4
3.2) Функция с параметрами и возвращаемым значением, причём определение функции должно быть записано после функции main…………….. 7
3.3) Фуекция с параметрами и без возвращаемого значения……………… 8
3.4) Функция без параметров и возвращаемого значения (с глобальными переменными) ………………………………………………………………………. 9
3.5) Функция с параметрами и возвращаемым значением, причём определение функции и main должны находиться в разных файлах…………… 11
Доказательство правильности результатов……………………………… 12
Индивидуальное задание на разработку программного проекта.
Индивидуальный вариант задания:
Создать решение, состоящее из пяти программных проектов, для вычисления арифметического выражения:
при значениях исходных данных x=12.678 и y=6.9 с использованием различных способов обмена данными и местоположением функции в соответствии с общим заданием.
Формализация и уточнение задания.
Исходные данные x, y являются вещественным типом double. Результатом вычисления будет являться переменная f, которая также является вещественным типом double. Операция вычисления f будет записываться следующим оператором VC++:
f = 5.2 * 5.2 * 5.2 * log10(x + y) / (x – 1.0 / (0.45 * sin(x – 8 * y))) + 0.5;
Вычисление f реализуем в функциях VC++ тремя различными способами в соответствии с общим заданием.
Разработка пяти программных проектов в одном решении и получение результатов их работы.
Создадим пять проектов в одном решении. Решению дадим имя laba5, а проекту имя pr1 (рис. 1).
Рис.1 - Создание нового проекта и решения
Далее, создадим пустой проект и добавим в него файл с пустым исходным кодом с именем zad1.cpp.
3.1) Реализация 1-го проекта:
Алгоритм главной процедуры не зависит от способа обмена данными и приведен на рисунке 2.
Рисунок 2- Схема алгоритма главной процедуры main для всех проектов
Разработаем алгоритм процедуры с параметрами и возвращаемым значением.
Схема алгоритма этой процедуры func1 представлена на рисунке 3.
Рисунок 3- схема алгоритма процедуры func1 с параметрами и возвращаемым значением для первого проекта
Разработаем программные коды двух функций в соответствии со схемами алгоритмов.
Программные коды разработанных функций запишем в файл с именем zad1.cpp в следующем порядке (рис.4)
Сначала определение функции func1 с параметрами и возвращаемым значением;
После него главную функцию main.
#include <iostream>
#include <cmath>
using namespace std;
double func1(double x, double y)
{
double f;
f = 5.2 * 5.2 * 5.2 * log10(x + y) / (x - (1.0 / 0.45 * sin(x - 8.0 * y))) + 0.5;
x++;
return f;
}
int main()
{
setlocale(LC_ALL, "rus");
double x, y, f;
cout << "Ввод x=";
cin >> x;
cout << "Ввод y=";
cin >> y;
f = func1(x, y);
cout << "при x=" << x << "\t" << "и y=" << y;
cout << endl << "Результат f=" << f << endl;
system("Pause");
return 0;
}
Рис. 4 – Программный код первого проекта
Откомментируем файл zad1.cpp, выполним построение решения laba5 и выполнение проекта pr1. Получим следующие результаты выполнения проекта (рис.5)
Рис. 5 -Результаты выполнения проекта pr1
Выполним проект с помощью отладчика по шагам и проведём следующие исследования:
в функции main заменим оператор вызова функции f=func1(x, y)
на оператор f=func1(y, x), изменив порядок фактических параметров. Заметим, что изменился результат вычисления, так как сначала мы вводим значение y, а потом x.
измениться ли значение переменной x в функции main, если внутри функции func1 до оператора return f изменить значение x, например, добавить оператор x++:
Значение переменной x в функции main не измениться, так как оператор x++ стоит после формулы, в которую уже были подставлены x и y и посчитана f
double func1(double x, double y)
{
double f;
f = 5.2 * 5.2 * 5.2 * log10(x + y) / (x - (1.0 / 0.45 * sin(x - 8.0 * y))) + 0.5;
x++;
return f;
}
измениться ли результат работы проекта, если, ничего не меняя в главной функции main, изменить имена формальных параметров при определении функции func1 следующим образом:
3.2) Реализация 2-го проекта:
Создадим втрой пустой проект с именами pr2 в существующем решении. Для этого выполним команду Файл/Добавить/Создать проект. В открывшемся окне Добавить новый проект зададим имя проекта pr2.
Запишем в файл с именем zad2.cpp программные коды разработанных в первом проекте функции в следующем порядке:
Откомпилируем файл zad2.cpp и выполним перестроение решения laba5.
Чтобы выполнить второй проект, его надо назначить запускаемым проектом. Для этого необходимо выделить в окне Обозреватель решений имя проекта pr2 и нажать правую кнопку мыши, а затем выполнить команду Назначить запускаемым проектом (риисунок 6)
Выполним проект pr2. Получим следующие результаты при заданных значениях исходных данных (рисунок 7)
3.3) Реализация 3-го проекта:
Создадим третий проект с именем pr3 в уже имеющемся решении.
Разработаем алгоритм процедуры с параметрами и без возвращаемого значения.
Схема алгоритма этой процедуры func3 представлена на рисунке 8.
Рисунок 8- Схема алгоритма процедуры func3 с параметрами и без возвращаемого значения для третьего проекта
Разработаем программные коды двух функций в соответствии со схемами алгоритмов.
Программные коды разработанных функций запишем в файл с именем zad3.cpp в следующем порядке (рисунок 9)
Объявление (прототип) функции func3;
Определение функции main;
Определение функции func3 с входными и выходными параметрами без возвращаемого значения, где входные данные передаются по значению, а результат вычислений возвращается через параметр по ссылке.
#include <iostream>
#include <cmath>
using namespace std;
/*Объяаление (прототип) функции func3*/
void func3(double, double, double&);
int main()
{
setlocale(LC_ALL, "rus");
double x, y, f;
cout << "Ввод x=";
cin >> x;
cout << "Ввод y=";
cin >> y;
cout << "При x=" << x << "\tи y=" << y << endl;
func3(x, y, f); /*Вызов функции func3*/
cout << endl << "Результат f=" << f << endl;
system("PAUSE");
return 0;
}
void func3(double x, double y, double& f)
{
f = 5.2 * 5.2 * 5.2 * log10(x + y) / (x - (1.0 / 0.45 *
sin(x - 8.0 * y))) + 0.5;
}
Рисунок 9-Программный код третьего проекта
Откомпилируем файл zad3.cpp¸выполним перестроение решения laba5 и выполнение проекта pr3, назначив его запускаемым проектом. Получим следующие результаты при заданных значениях исходных данных (рисунок 10)
Рисунок 10- Результаты выполнения проекта pr3
Выполним проект с помощью откладчика по шагам, так же, как и в первом проекте, поставив точку останова после ввода исходных данных x и y на операторе вызова функции.
Проследим за изменением значений всех переменных в окнах Локалльные и Видимые.
Ответим на следующие вопросы:
Можно ли при вызове функции в списке фактических параметров записывать выражения? Например,
Измениться ли результат выполнения проекта, если при определении функции func3 удалить знак & перед формальным параметров f:
Символ «&» записывается перед именем формального параметра для явного указания способа передачи параметра
3.4) Реализация 4-го проекта:
Создадим четвёртый проект с именем pr4 в уюе имеющемся решении.
Разработаем алгоритм процедуры без параметров и без возвращаемого значения.
Схема алгоритма этой процедуры func4 представлена на рисунке 11:
Рисунок 11- Схема алгоритма процедуры func4 без параметров и без возвращаемого значения для четвёртого проекта
Разработаем программные коды двух функций в соответствии со схемами алгоритмов.
Программные коды разработанных функций запишем в файл с именем zad4.cpp в следующем порядке (рисунок 12):
Объявление (прототип) функции func4;
Определение глобальных переменных;
Определение функции main;
Определение функции func4 без параметров и без возвращаемого значения.
#include <iostream>
#include <cmath>
using namespace std;
void func4(void);
double x, y, f;
int main()
{
setlocale(LC_ALL, "rus");
cout << "Ввод x=";
cin >> x;
cout << endl << "Ввод y=";
cin >> y;
cout << "При x=" << x << "\tи y=" << y << endl;
func4();
cout << endl << "Результат f=" << f << endl;
system("Pause");
return 0;
}
Рисунок 12- Программный код четвёртого проекта
void func4()
{
f = 5.2 * 5.2 * 5.2 * log10(x + y) / (x - (1.0 / 0.45 * sin(x - 8.0 * y))) + 0.5;
}
Откомпилируем файл zad4.cpp, выполним перестроение решения laba5 и выполнение проекта pr4, назначив его запускаемым проектом. Получим следующие результаты при заданных исходных данных (рисунок 13).
Выполним проект с помощью откладчика по шагам, так же, как и в первом проекте, поставив точку останова после ввода данных x и y на операторе вызова функции.
Проследим за изменением значений всех переменных в окнах Локальные и Видимые.
В тело главной функции main добавим определение переменных x, y, f до оператора ввода исходных данных:
Перестроим решение и выполним проект. Проанализируем полученные результаты и ответим на вопрос: почему и как изменились результаты выполнения проекта?
3.5) Реализация 5-го проекта:
Создадим в уже имеющемся решении пятый проект с именем pr5, состоящий из двух файлов. В первый файл с именем zad5_m.cpp поместим текст функции main из второго проекта. Во второй файл с именем zad5_f.cpp поместим текст функции func2 из того же проекта. После раздельной компиляции файлов выполним их совместную компанировку и выполнение проекта. Результаты выполнения при заданных значениях исходных данных приведены на рисунке 14.
Рисунок 14 - Результат выполнения проекта pr5