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

лабы / Laba_varik27_7.1

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

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

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

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

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

Лабораторная работа №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

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