Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

лабы / Laba_varik1_5

.docx
Скачиваний:
7
Добавлен:
10.06.2023
Размер:
961.14 Кб
Скачать

МИНИСТЕРСТВО ЦИФРОВОГО РАЗВИТИЯ, СВЯЗИ И МАССОВЫХ КОММУНИКАЦИЙ РОССИЙСКОЙ ФЕДЕРАЦИИ

Ордена Трудового Красного Знамени федеральное государственное бюджетное образовательное учреждение высшего образования

«Московский технический университет связи и информатики»

Кафедра «Информатика»

Лабораторная работа №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 – результат вычисления в калькуляторе

Список литературы:

  1. Лекция 12.10.2021

Соседние файлы в папке лабы