лабы / Laba_varik1_6
.docxМИНИСТЕРСТВО ЦИФРОВОГО РАЗВИТИЯ, СВЯЗИ И МАССОВЫХ КОММУНИКАЦИЙ РОССИЙСКОЙ ФЕДЕРАЦИИ
Ордена Трудового Красного Знамени федеральное государственное бюджетное образовательное учреждение высшего образования
«Московский технический университет связи и информатики»
Кафедра «Информатика»
Лабораторная работа №6
«Программная реализация
алгоритмов решения сложных задач»
по одноимённой теме 5
по дисциплине
«Информатика»
Выполнил:
Проверил:
Москва, 2021 г.
Индивидуальное задание.
Вариант 1: Определите периметры правильных n – угольников (10 – угольника, 50 – угольника, 100 – угольника), вписанных в окружность заданного радиуса R.
2) Формализация задания.
Для решения задачи воспользуемся известными формулами:
Сторона правильного n-угольника a = 2 ⋅R ⋅ Sin ;
Периметр n-угольника p = n ⋅ a;
3) Разработка алгоритмов решения задач.
Начнем проектирование алгоритма методом «сверху вниз» с учетом того, что решение задачи реализуется с помощью алгоритмов простейшей линейной структуры.
3.1) На самом верхнем (первом) уровне алгоритм решения задачи можно укрупненно представить в виде вызова главного функционального алгоритма (процедуры) с именем main (рисунок 3.1), где Calc_P функциональный алгоритм (процедура) вычисления периметра P n-угольника по заданному радиусу R.
Рисунок 3.1 - Укрупненная схема алгоритма main решения Задачи 1
3.2) На следующем, втором уровне, детализируем алгоритм процедуры Calc_P(рисунок 3.2):
Рисунок 3.2 – Результат второго уровня детализации алгоритма.
3.3) На третьем уровне детализации алгоритм вычисления одной стороны n-угольника (рисунок 3.3).
Рисунок 3.3 – Результат третьего уровня детализации алгоритма.
Рисунок 3.4 – Схема иерархии процедур для решения задачи.
4) Разработка программного проекта
При разработке программного проекта внесем незначительное упрощение: избавимся от лишней “двухэтажности” и реализуем процедуру Calc_P в главной функции проекта main.
Для решения нашей задачи создадим проект, в котором будет три файла исходного кода: помимо файла с главной функцией main создадим файл с функциями vvod и vivod для ввода и вывода. Затем в третий файл объединим все остальные функции, участвующие в решении задачи.
Программный код проекта предоставлен на рисунках 4.1 – 4.2
В первый файл с именем GetPut.cpp (рисунок 6.6) запишем функции ввода исходных данных vvod и вывода результатов vivod. Функция вывода имеет тип void, так как она не должна передавать каких-либо значений программе, а должна выводить уже имеющийся результат. Она имеет 2 входных параметра – количество сторон у n-угольника, чтобы обозначить результат стороны каждого n-угольника, и сам результат выполнения программы – периметр P Функция ввода имеет тип double, так как она должна оборачиваться в результат введённых данных, сделано это для оптимизации кода. Так как функции этого файла используют объекты cin и cout, то в нем присутствуют директивы #include <iostream> .
#include <iostream>
void vivod(double P, int n)
{
setlocale(LC_ALL, "rus");
std::cout << std::endl << "Периметр " << n << "-угольника равен: " << P << std::endl;
}
double vvod()
{
setlocale(LC_ALL, "rus");
double radius;
std::cout << "Введите радиус описанного круга - ";
std::cin >> radius;
std::cout << std::endl << std::endl;
return radius;
}
Рисунок 4.1 – Программный код файла GetPut.cpp
Во второй файл с именем Calc.cpp (рисунок 4.2) запишем функции, выполняющие необходимые вычисления для решения задачи. Обе функции имеют тип double, так как должны после себя оставлять нецелочисленные результаты. Функция Calc_a, получая на вход количество сторон n-угольника и радиус описанного круга, который мы получили до этого в функции vvod(). Функция Calc_P получает на вход значение стороны n-угольника, и умножает его на количество сторон, которые он также получает на вход, в результе функция рассчитывает периметр правильного n-угольника.
#define _USE_MATH_DEFINES
#include <math.h>
double Calc_a(int n, double R)
{
return (2 * R * sin(M_PI / n));
};
double Calc_P(int n, double a)
{
return n * a;
};
Рисунок 4.2 – программный код с функциями Calc_a и Calc_P
В третьем файле с именем main.cpp (рисунок 6.8) находится главная функция main, программный код которой содержит только вызовы разработанных функций ввода исходных данных, цикл по их вызову, решения задачи и вывода результатов. В этом файле присутствует директива препроцессора #include <iostream. Перед определением главной функции main в файл включены прототипы вызываемых в ней функций.
#include <iostream>
double Calc_a(int, double);
double Calc_P(int, double);
double vvod();
void vivod(double, int);
int main()
{
double input = vvod();
for (int i = 10, c = 0; i < 101; i = i + 40 + c, c = c + 10)
{
vivod(Calc_P(i, Calc_a(i, input)), i);
}
return 0;
}
Рисунок 4.3 - Программный код файла с главной функцией main
5) Исходные данные для тестирования проекта
Протестируем проект при двух значениях входного радиуса: R = 3.22 и R = 133.7
Расчёт на калькуляторе даёт следующие результаты:
При R = 3.22:
10-угольник - 19.9007
50-угольник - 20.2485
100-угольник – 20.2285
При R = 133.7:
10-угольник – 821.985
50-угольник – 835.114
100-угольник – 835.526
6) Результаты выполнения проекта
Результаты выполнения проекта при R = 3.22 приведены на рисунке 6.1, при R = 133.7 – на рисунке 6.2
Рисунок 6.9 – Результаты выполнения проекта при R = 3.22
Рисунок 6.9 – Результаты выполнения проекта при R = 133.7
7) Доказательство правильности результатов выполнения проекта
Правильность результатов выполнения проекта подтверждается их совпадением с результатами контрольных вычислений на калькуляторе для обоих вариантов исходных данных.
Список литературы:
1)Лекция 09.11.2021