laba6
.docx
МИНИСТЕРСТВО ЦИФРОВОГО РАЗВИТИЯ, СВЯЗИ И МАССОВЫХ КОММУНИКАЦИЙ РОССИЙСКОЙ ФЕДЕРАЦИИ
Ордена Трудового Красного Знамени федеральное государственное бюджетное образовательное учреждение высшего образования
«Московский технический университет связи и информатики»
Кафедра «Информатика»
Лабораторная работа №6
«Программная реализация
алгоритмов решения сложных задач»
по теме:
«Основы алгоритмизации, базовые алгоритмические структуры и метод пошаговой детализации»
по дисциплине
«Информатика»
Выполнил: студент гр. БИН2104 Зайцева О.С.
Вариант 9
Проверил:
Москва, 2021 г.
Содержание
Индивидуальное задание. 3
Формализация и уточнение задания. 3
Разработка алгоритмов решения задачи. 3-5
Рисунки со схемами алгоритмов процедур на различных этапах метода пошаговой детализации и схемой иерархии процедур; пояснение к ним (берутся из отчёта по лабораторной работе 3).
Программный код проекта. 6-8
Результаты выполнения проекта. 8
Доказательство правильности результатов выполнения проекта. 8-9
Индивидуальное задание
Определить площадь правильной n-угольников (10-угольника; 50-угольника; 100-угольника), вписанных ы окружность радиуса R.
Формализация задания
Из условий видно, что для вычисления площади правильного n-угольника потребуется три формулы.
Сторона правильного n-угольника находится по формуле:
, - радиус вписанной окружности.
Площадь найдём по формуле:
Вводимыми исходными данными задачи являются значения переменных R (радиус описанной окружности) и n (количество сторон многоугольника), а выводимым результатом решения – значение S.
Разработка алгоритмов решения задачи.
Начнём проектирование алгоритма методом «сверху вниз».
3.1) На самом верхнем (первом) уровне алгоритм решения задачи можно укрупненно представить в виде вызова главной процедуры с именем main (рисунок 1), где Calc_S (процедура) вычисления значения S по заданным значениям переменных R и n.
Рисунок 1 – Укрупненная схема алгоритма main
3.2) На втором уровне детализируем алгоритм процедуры Calc_S, представив его в виде последовательности следующих трех процедур (рисунок 2):
Процедура вызова значений R и n с именем get_Rn;
Процедуры вычисления S с именем comp_s;
Процедуры вывода вычисленного значения площади с именем put_s.
Рисунок 2 – Результат второго уровня детализации алгоритма
3.3) Перейдём к следующему, третьему уровню детализации. Процедуры get_Rn и put_s дальнейшей детализации не требуют, так как средства ввода-вывода имеются в любом языке программирования. Поэтому на следующем уровне, третьем шаге детализируем алгоритм процедуры вычисления S comp_s (рисунок 3).
Рисунок 3 – Схема алгоритма процедуры comp_s
Для вычисления S необходимо вычислить два значения a и r.
Схема иерархии процедур для решения задачи изображена на рисунке 4.
Рисунок 4 - Схема иерархии процедур для решения задачи
Разработка программного проекта.
Чтобы избежать «двухэтажности» при разработке программного проекта, реализуем процедуру Calc_s в главной функции main.
Для решения нашей задачи создадим проект, состоящий из трёх файлов исходного кода: файлы с функциями get_Rn и put_s для ввода и вывода, файл с главной функцией main, в котором объединим все функции, участвующие в решении.
Программный код проекта представлен ниже под номерами листингов 5-7.
В первый файл с именем getput.cpp (листинг 5) запишем функции ввода исходных данных get_Rn и вывода put_s. Обе эти функции типа void, так как не имеют возвращаемого значения. Функция ввода значения R и n get_Rn имеет два входных параметра и ни одного выходного. Функция put_s имеет один выходной параметр и ни одного входного. Так как функции имеют объекты cin и cout, то в нём присутствую директивы #include <iostream> и using namespace std.
Во втором файле с именем calc.cpp (листинг 6) записаны функции, выполняющие необходимые вычисления для решения задачи. Функция formula_s определена как функция с двумя входными параметрами R, n и одним выходным параметром s.
// Файл getput.cpp
#include <iostream>
using namespace std;
// Определение функции ввода R и n
void get_Rn(double& R, double& n)
{
setlocale(LC_ALL, "rus");
cout << "Введите значение радиуса (R):";
cin >> R;
cout << "Введите кол-во сторон (n):";
cin >> n;
}
// Определение функции вывода S
void put_s(double s)
{
setlocale(LC_ALL, "rus");
cout << "Площадь =" << s << endl;
}
Листинг 5 – Программный код файла с именем get_Rn и put_s
// Файл calc.cpp
#include <cmath>
//Определение функции formula_a
double formula_a(double n, double R)
{
double PI;
PI = 3.14159265;
double a = 2 * R * sin(PI / n);
return a;
}
// Определение функции formula_r
double formula_r(double n, double R)
{
double PI;
PI = 3.14159265;
double r = R * cos(PI / n);
return r;
}
// Определение функции formula_s
double formula_s(double n, double R)
{
return 0.5 * (formula_a(n, R)) * (formula_r(n, R)) * n;
}
Листинг 6 – Программный код файла с именем calc.cpp
В третьем файле с именем main.cpp (листинг 7) находится главная функция main, программный код которой содержит только вызовы разработанный функций ввода исходных данных, решение задачи и вывода результата. В этом файле присутствуют директивы препроцессора #include <iostream>, необходимая для команды задержки закрытия консольного окна system(“Pause”). Перед определением функции main в файл включены прототипы вызываемых в ней функций get_Rn, comp_s и put_s.
// Файл main.cpp
#include <iostream>
//Прототипы вызываемых функций
void get_Rn(double&, double&);
double formula_s(double, double);
void put_s(double);
// Определение главной функции main
int main()
{
double R, n;
double s;
get_Rn(R, n);
s = formula_s(n, R);
put_s(s);
system("Pause");
return 0;
}
Листинг 7 – Программный код файла с именем main.cpp
Результаты выполнения проекта.
Протестируем проект при двух значениях входных переменных R и n: R=12 и n=4, R=10 и n=50.
Расчет на калькуляторе значение S при R=12 и n=4 даёт следующий результат: S= 288.
Расчет на калькуляторе значение S при R=10 и n=50 даёт следующий результат: S= 313.333.
Результаты выполнения проекта при R=12 и n=4 приведены на картинке 8, при R=10 и n=50 на картинке 9.
Картинка 8 – Результат выполнения проекта при R=12 и n=4
Картинка 9 – Результат выполнения проекта при R=10 и n=50
Доказательство правильности результатов выполнения проекта
Правильность результатов выполнения проекта подтверждается их совпадением с результатами контрольных вычислений
При R=12 и n=4 площадь многоугольника равна 288.
При R=10 и n=50 площадь многоугольника равна 313.3 .