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

лабы / Laba_varik1_6

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

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

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

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

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

Лабораторная работа №6

«Программная реализация

алгоритмов решения сложных задач»

по одноимённой теме 5

по дисциплине

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

Выполнил:

Проверил:

Москва, 2021 г.

  1. Индивидуальное задание.

Вариант 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

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