лабы / Laba_varik1_5
.docxМИНИСТЕРСТВО ЦИФРОВОГО РАЗВИТИЯ, СВЯЗИ И МАССОВЫХ КОММУНИКАЦИЙ РОССИЙСКОЙ ФЕДЕРАЦИИ
Ордена Трудового Красного Знамени федеральное государственное бюджетное образовательное учреждение высшего образования
«Московский технический университет связи и информатики»
Кафедра «Информатика»
Лабораторная работа №5
«Разработка консольных проектов Visual Studio
с использованием функций VC++»
по теме
«Функции VС++ и консольные проекты
Visual Studio»
по дисциплине
«Информатика»
Выполнил:
Проверил:
Москва, 2021 г
1)Общее и индивидуальное задания на разработку программного проекта:
Создать решение (например, с именем lab5), состоящее из пяти программных проектов, для вычисления арифметического выражения:
При значениях исходных данных x = 3,59 и y = 17,53 использованием различных способов обмена данными и местоположением функций в соответствии с общим заданием.
2) Формализация и уточнение задания:
Для формализации и уточнения задания определим, что исходные данные
x, y – вещественного типа double. Результаты вычислений – переменная t также должна быть вещественного типа double. Операция вычисления t будет записываться следующим оператором VC++:
t = cos(M_PI/ 7) * (pow(sin(x - 8 * y), 2) / (2.7 * (x – M_PI)));
Вычисление t реализуем в функциях VC++ тремя различными способами в соответствии с общим заданием.
3.1)Разработка пяти программных проектов в одном решении и получение результатов их работы.
Для этого, в отличие от предыдущих лабораторных работ, при создании первого проекта необходимо поставить галочку в переключателе Создать каталог для решения. Проектам и решению необходимо дать различные имена. Решению дадим имя lab_5, а проекту – имя pr_1(Рисунок 3.1).
Рисунок 3.1 – Создание нового проекта
Далее, создадим пустой проект и добавим в него файл с пустым исходным кодом и с именем zad_1.cpp.
Реализация 1-го проекта:
Рисунок 3.2 - Схема алгоритма главной процедуры main для всех проектов
Рисунок 3.3 – Схема алгоритма процедуры func_1 с параметрами и возвращаемым значением для первого проекта
Разработаем программные коды двух функций в соответствии со схемами алгоритмов.
Программные коды разработанных функций запишем в файл с именем zad_1.cpp в следующем порядке(рисунок 3.4):
Сначала определение функции func_1 с параметрами и возвращаемым значением;
После него главную функцию main.
Рисунок 3.4 – Программный код первого проекта.
Скомпилируем файл zad_1.cpp, выполним построение решения lab_5 и выполнение проекта pr_1. Получим следующие результаты при заданных значениях исходных данных(рисунок 3.5).
Рисунок 3.5 – Результат выполнения программы
Выполним проект с помощью отладчика по шагам и проведем следующие исследования:
В функции main заменим оператор вызова функции t=func_1(x, y) на оператор t = func_1(y, x), изменив порядок фактических параметров.
В результате получим ответ: 0.022326, он отличен от предыдущего потому, как в функции с разными переменными, а следовательно и с исходными значениями, выполняются различные операции, в результате которых получается различный ответ.
Изменится ли значение переменной x в функции main, если внутри функции func_1 до оператора return z изменить значение x, например, добавить оператор x++:
Рисунок 3.6 – Изменённая функция
Ответ: результат не изменился, так-как значение x меняется после его использования, однако если разместить оператор x++; несколькими строками выше, то значение t изменится, так-как уже изменённое t будет использоваться в вычислениях.
Можно ли при вызове функции в списке фактических параметров указывать не имя переменной, а константу или выражение, например, для следующих операторов:
t = func_1(x + 2, y – 2.8);
//или
t = func_1(3.59, 17.53);
Ответ: подобная запись возможна, так-как компилятору не принципиально, вбивать ли в функцию переменные, числа или выражения.
Изменится ли результат работы проекта, если, ничего не меняя в главной функции main, изменить имена формальных параметров при определении функции func_1 следующим образом:
Рисунок 3.7 – изменённая функция
Ответ: результат работы никак не изменится, так-как названия переменных в функции func_1 никак не связанны с названиями в главной функции main.
4) Реализация 2-го проекта:
Создадим второй пустой проект с именем pr_2 в уже существующем решении. Для этого выполним команду Файл/Добавить/Создать проект. В открывшемся окне Добавить новый проект зададим имя проекта pr_2. Запишем в файл с именем zad_2.cpp программные коды разработанных в первом проекте функций (переименовав функцию func1 в func2) в следующем порядке:
Сначала программный код главной функции main;
После него определение функции func_2 с параметрами и возвращаемым значением. Перед кодом главной функции запишем прототип функции func2. Скомпилируем файл zad_2.cpp и выполним перестроение решения lab_5. Чтобы выполнить второй проект, его надо назначить запускаемым проектом. Для этого необходимо выделить в окне Обозреватель решений имя проекта pr_2 и нажать правую кнопку мыши, а затем выполнить команду Назначить запускаемым проектом (рисунок 4.1).
Рисунок 4.1 – Назначение запускаемого проекта
Выполним проект pr_2. Получим следующие результаты при заданных значениях исходных данных (рисунок 4.2).
Рисунок 4.2 – Результат выполнения проекта pr_2
5) Реализация 3-го проекта:
Создадим третий проект с именем pr_3 в уже имеющемся решении.
Разработаем алгоритм процедуры с параметрами и без возвращаемого значения.
Схема алгоритма этой процедуры func_3 представлена на рисунке 5.1.
Рисунок 5.1 - Схема алгоритма процедуры func_3 с параметрами и без возвращаемого значения для третьего проекта
Разработаем программные коды двух функций в соответствии со схемами алгоритмов. Программные коды разработанных функций запишем в файл с именем zad_3.cpp в следующем порядке (рисунок 5.2):
Объявление (прототип) функции func_3;
Определение функции main;
Определение функции func_3 с входными и выходными параметрами без возвращаемого значения, где входные данные передаются по значению, а результат вычислений возвращается через параметр по ссылке.
Рисунок 5.2 - Программный код третьего проекта
Скомпилируем файл zad_3.cpp, выполним перестроение решения lab_5 и выполнение проекта pr_3, назначив его запускаемым проектом. Получим следующие результаты при заданных значениях исходных данных (рисунок 5.10).
Рисунок 5.3 – Результаты выполнения проекта pr_3
Выполним проект с помощью отладчика по шагам, так же, как и в первом проекте, поставив точку останова после ввода исходных данных x и y на операторе вызова функции. Проследим за изменением значений всех переменных в окнах локальные и видимые.
Ответим на следующие вопросы:
Можно ли при вызове функции в списке фактических параметров записывать выражения? Например:
func3(x+2, y-0.5, z+1);
Ответ: Компилятор допускает подобную запись, в проекте выполнится вычисление t с изменёнными параметрами x и y.
изменится ли результат выполнения проекта, если при определении функции func_3 удалить знак & (операция взятия адреса) перед формальным параметром z:
void func_3(double x, double y, double t)
Ответ: Подобная запись будет некорректна, так-как при удалении знака &, компилятор зачтёт эту переменную как переменную для ввода, а не вывода данных.
3.4) Реализация 4-го проекта:
Создадим четвертый проект с именем pr_4 в уже имеющемся решении. Разработаем алгоритм процедуры без параметров и без возвращаемого значения. Схема алгоритма этой процедуры func_4 представлена на рисунке 6.1.
Рисунок 6.1 - Программный код четвертого проекта
Скомпилируем файл zad_4.cpp, выполним перестроение решения lab_5 и выполнение проекта pr_4, назначив его запускаемым проектом. Получим следующие результаты при заданных значениях исходных данных (рисунок 6.2).
Рисунок 6.2 - Результаты выполнения проекта pr_4
Выполним проект с помощью отладчика по шагам, так же, как и в первом проекте, поставив точку останова после ввода исходных данных x и y на операторе вызова функции. Проследим за изменением значений всех переменных в окнах локальные и видимые. В тело главной функции main добавим определение переменных x, y, t до оператора ввода исходных данных:
Int main()
{
double x, y, t;
}
Перестроим решение и выполним проект. Проанализируем полученные результаты и ответим на вопрос: почему и как изменились результаты выполнения проекта?
Ответ: Компилятор выдаёт ошибку, так-как теперь переменные x, y и t не глобальны, а информация о их наличии содержится только в функции main, следовательно функция func_4 не знает о их существовании.
7)Реализация 5-го проекта:
Создадим в уже имеющемся решении пятый проект с именем pr_5, состоящий из двух файлов. В первый файл с именем zad5_m.срр поместим текст функции main из второго проекта. Во второй файл с именем zad5_f.срр поместим текст функции func_2 из того же проекта. После раздельной компиляции файлов выполним их совместную компоновку (перестроение решения) и выполнение проекта. Результаты выполнения при заданных значениях исходных данных приведены на рисунке 7.1.
Рисунок 7.1 - Результаты выполнения проекта pr_5
6) Доказательство правильности результатов.
Результат выполнения всех пяти проектов одинаков и равен 0,744108. Выполним расчет арифметического выражения в калькуляторе и по горизонтальной оси получим совпадающий результат, что доказывает его правильность (рисунок 8.1).
Рисунок 8.1 – результат вычисления в калькуляторе
Список литературы:
Лекция 12.10.2021