
лабы / Laba_varik27_7.1
.docxМИНИСТЕРСТВО ЦИФРОВОГО РАЗВИТИЯ, СВЯЗИ И МАССОВЫХ КОММУНИКАЦИЙ РОССИЙСКОЙ ФЕДЕРАЦИИ
Ордена Трудового Красного Знамени федеральное государственное бюджетное образовательное учреждение высшего образования
«Московский технический университет связи и информатики»
Кафедра «Информатика»
Лабораторная работа №7
«Программная реализация алгоритмов решения сложных задач»
По теме:
«Логические данные и выражения. Операторы разветвления VC++. Программная реализация базовых разветвляющиеся структур и типовых алгоритмов»
по дисциплине
«Информатика»
Выполнил: студент
Проверил:
Москва, 2021 г.
Оглавление
Общее задание 2
Индивидуальное задание на разработку проекта 4
Формализация и уточнение задания 4
Разработка схемы алгоритма 4
Разработка программного кода проекта 5
Выполнение разработанного проекта 9
Доказательство правильности работы программы 10
Список литературы 11
Общее задание
1) Изучите вопросы представления логического типа данных и логических
выражения, формализации, алгоритмизации и программирования алгоритмов при решении задач, использующих разветвляющиеся структуры.
2) Разработка проекта.
2.1) Выберите вариант задания из таблиц 7.1 для создания проекта:
2.2) Выполните этап формализации задачи, для которой необходимо:
• нарисовать рисунок, указанный в задании;
• выделить на рисунке заданную область;
• для выделенной области определить и записать логическое выражение с условием, зависимое от двух переменных x и y (где
[x,y] координаты точки), принимающую логическое значение
false (0) или true (1), в зависимости от попадания или не
попадания точки с координатами X, Y в выделенную область
рисунка.
• разработайте три функциональных алгоритма и соответствующие программные функции для решения поставленной задачи согласно индивидуальному заданию o использующие только сложное логические выражения;
• программный код функции ввода исходных данных;
• программный код функции вывода результатов;
• программный код главной функции main, которая вызывает
описанные выше функции для решения поставленной задачи.
2.3) Создайте консольный проект, содержащий 3 раздельно откомпилированных файла:
• файл, содержащий функцию ввода исходных данных и функцию
вывода результатов;
• файл с тремя разработанными функциями, соответствующие
разработанным функциональным алгоритмам;
• файл с главной функцией, которая должна содержать только
операторы вызова разработанных функций (ввода, 3 функции решения задачи разными способами и вывода, причем обмен данными между функциями должен осуществляться через параметры, без использования глобальных переменных.
2.4) Подготовьте тестовые исходные данные для
решения задачи.
2.5) Выполните проект и получите результаты.
2.6) Докажите правильность полученных результатов на заранее
разработанных нескольких тестовых данных.
Индивидуальное задание на разработку проекта
Вариант 27: определить, пройдет ли кирпич с ребрами a,b,c в прямоугольное отверстие со сторонами x и y.
Формализация и уточнение задания
Построим наглядно объекты в задаче (см.рис.1).
Рисунок 1 – кирпич со сторонами a, b, c и отверстие с y, x.
Разработка схемы алгоритма
Это алгоритм решения задачи, который включает в себя стандартное разветвление и сложное логическое выражение, состоящие из двенадцати неравенств (см.рис.2).
Рисунок 2 – схема алгоритма функции resh1.
Разработка программного кода проекта
Данный файл представляет собой две функции void, одна из которых принимает пользовательские значения, а вторая — выводит результаты решения задачи (листинг 1).
//Файл getPut.cpp
//Директива iostream, отвечающая за вывод и ввод данных
#include <iostream>
//Функция getXYCAB (Получение параметров)
void getXYCAB(double& x, double& y, double& c, double& a, double& b)
{
setlocale(LC_ALL, "RUS");
std::cout << "Введите кординату x = ";
std::cin >> x;
std::cout << "..А теперь координату y = ";
std::cin >> y;
std::cout << "..А теперь координату c = ";
std::cin >> c;
std::cout << "..А теперь координату a = ";
std::cin >> a;
std::cout << "..А теперь координату b = ";
std::cin >> b;
}
//Функция put (Вывод результатов)
void put(bool met1, double x, double y)
{
setlocale(LC_ALL, "RUS");
std::cout << "Прошел ли кирпич в плоскость ?\n";
if (met1)
{
std::cout << "Ответ: Да, прошел\n";
std::cout << "\n";
}
else
{
std::cout << "Ответ: Нет, не прошел\n";
std::cout << "\n";
}
}
Листинг 1. — Программный код файла getPut.cpp, отвечающий за ввод и вывод данных.
Данный файл представляет собой три функции bool разными способами решения поставленной задачи (листинг 2).
#include <cmath>
bool Resh1 (double x, double y, double c, double a, double b)
{
if (a <= x && b <= y || a <= y && b <= x || b <= x && c <= y || b <= y
&& c < x || c <= x && a <= y || c <= y && a <= x)
{
return true;
}
else
{
return false;
}
}
bool Resh2 (double x, double y, double c, double a, double b)
{
if (a <= x && b <= y)
{
return true;
}
if (a <= y && b <= x)
{
return true;
}
if (b <= x && c <= y)
{
return true;
}
if (b <= y && c < x)
{
return true;
}
if (c <= x && a <= y)
{
return true;
}
if (c <= y && a <= x)
{
return true;
}
}
bool Resh3 (double x, double y, double c, double a, double b)
{
return (a <= x && b <= y || a <= y && b <= x || b <= x && c <= y
|| b <= y && c < x || c <= x && a <= y || c <= y && a <= x);
}
Листинг 2. — Программный код файла calc.cpp, отвечающий за решение задачи.
Данный файл представляет собой главную функцию main.
//Файл main.cpp
//Директива iostream, отвечающая за вывод и ввод данных
#include <iostream>
void getXYCAB(double& , double& , double& , double& , double& );
void put(bool, double, double);
bool Resh1(double x, double y, double c, double a, double b);
bool Resh2(double x, double y, double c, double a, double b);
bool Resh3(double x, double y, double c, double a, double b);
//Главния функция main
int main()
{
double x, y, c, a, b;
bool met1, met2, met3;
getXYCAB(x, y, c, a, b);
std::cout << "[1] Решение задачи 1-ым способом:\n";
std::cout << "\n";
met1 = Resh1(x, y, c, a, b);
put(met1, x, y);
std::cout << "[2] Решение задачи 2-ым способом:\n";
std::cout << "\n";
met2 = Resh2(x, y, c, a, b);
put(met2, x, y);
std::cout << "[3] Решение задачи 3-ым способом:\n";
std::cout << "\n";
met3 = Resh3(x, y, c, a, b);
put(met3, x, y);
system("PAUSE");
}
Листинг 3 — Программный код файла main.cpp, который содержит главную функцию main.
Выполнение разработанного проекта
Ниже представлены рисунки, на которых изображен вывод в консоль правильного и неправильного результатов. На рисунке 3 представлен результат выполнения проекта, где точка с пользовательскими координатами попала в допустимую область.
Рисунок 3 – Вывод консоли с правдивыми результатами.
На рисунке 4 представлен результат выполнения проекта, где точка с пользовательскими координатами не попала в допустимую область.
Рисунок 4 - Вывод в консоль с ложными результатами.
Доказательство правильности работы программы
При тестовых данных результаты ручного расчёта и вычисления на компьютере совпадают.
Список литературы
Лабораторная работа 7