лабы / Laba_varik12_7
.1.pdfМИНИСТЕРСТВО ЦИФРОВОГО РАЗВИТИЯ, СВЯЗИ И МАССОВЫХ КОММУНИКАЦИЙ РОССИЙСКОЙ ФЕДЕРАЦИИ
Ордена Трудового Красного Знамени федеральное государственное бюджетное образовательное учреждение высшего образования
«Московский технический университет связи и информатики»
Кафедра «Информатика»
Лабораторная работа №7 – Проект 1
«Разработка проекта, решающего задачу принадлежности или непринадлежности точки с заданными координатами геометрической фигуре»
по теме:
«Логические данные и выражения. Операторы разветвления VC++. Программная реализация базовых разветвляющихся структур и типовых алгоритмов»
по дисциплине «Информатика»
Выполнил: студент гр. БИН2104 Книгин Е.А. Вариант №12
Проверил:
Москва, 2021 г.
СОДЕРЖАНИЕ
1)ЦЕЛЬ РАБОТЫ
2)ФОРМУЛИРОВКА ЗАДАЧИ №12
3)ФОРМАЛИЗАЦИЯ ЗАДАНИЯ
4)РАЗРАБОТКА АЛГОРИТМОВ РЕШЕНИЯ ЗАДАЧИ
5)РАЗРАБОТКА ПРОГРАММНОГО КОДА ПРОЕКТА
6)ВЫПОЛНЕНИЕ РАЗРАБОТАННОГО ПРОЕКТА
7)ДОКАЗАТЕЛЬСТВО ПРАВИЛЬНОСТИ РАБОТЫ ПРОГРАММЫ
1
ЦЕЛЬ РАБОТЫ
1)Разработать проект, решающий задачу принадлежности или непринадлежности точки с заданными координатами геометрической фигуре.
2)Оформить отчет по работе.
ФОРМУЛИРОВКА ЗАДАЧИ №12
Заданы две простых фигуры: окружность с центром в точке (0, 1) радиуса 1 и треугольник с вершинами в точках (0, 0), (-1, -1), (1, -1). Попадет ли точка с координатами x, y в фигуру девочки.
ФОРМАЛИЗАЦИЯ ЗАДАНИЯ
Фигура, описанная в задаче, проиллюстрирована ниже.
(см. рис. 1)
Рисунок 1 – фигура описанная в задаче
2
Для решения задачи определим уравнения определяющие границы фигур:
1)AB: y – x = 0
2)BC: y + x = 0
3)AC: y = -1
4)И для круга уравнение будет таковым: (x-0)2 + (y-1)2 = 1
Исходя из этих уравнений, того факта, что фигуры ограничены по x и y, а также постановки задачи, мы можем понять, что для ее решения нужно чтобы выполнялась система уравнений вида:
При этом логические выражения будут иметь вид:
1)((y - x) <= 0 && (y + x) <= 0 && (y) >= -1)
2)((pow((x - 0), 2) + pow((y - 1), 2)) <= 1)
3
РАЗРАБОТКА АЛГОРИТМОВ РЕШЕНИЯ ЗАДАЧИ
Разработаны схемы трех алгоритмов. Первый алгоритм (logic1) использует стандартное разветвление и сложное логическое выражение. (см. рис. 2)
Рисунок 2 – схема алгоритма logic1
Затем, во втором алгоритме, под названием (logic2), используются вложенные разветвления с помощью операций отношения. (см. рис. 3)
4
Рисунок 3 – схема алгоритма logic2
Далее, в третьем алгоритме, под названием (logic3), используется только сложное логическое выражение. (см. рис. 4)
Рисунок 4 - схема алгоритма logic3
5
РАЗРАБОТКА ПРОГРАММНОГО КОДА ПРОЕКТА
Программный код проекта разделен на три отдельных файла: (см. рис. 5, 6, 7)
1)#pragma once
2)#include <iostream>
3)using namespace std;
4)void Input(double& x, double& y)
5){
6)setlocale(LC_ALL, «rus»);
7)cout << «Введите x = «;
8)cin >> x;
9)cout << «Введите y = «;
10)cin >> y;
11)}
12)void Output(bool a, double x, double y)
13){
14)setlocale(LC_ALL, «rus»);
15)cout << « Точка с координатами (« << x << «, « << y << «)»;
16)if (a)
17)cout << « попала в заданную область» << endl;
18)else
19)cout << « не попала в заданную область» << endl;
20)}
Рисунок 5 – программный код файла “inpoutp.h”
1)#include <iostream>
2)#include "logic.h"
3)#include "inpoutp.h"
4)using namespace std;
6)void Input(double& x, double& y);
7)void Output(bool, double, double);
8)bool logic1(double x, double y);
9)bool logic2(double x, double y);
11)void main(void)
12){
13)double x, y;
14)bool a, b, c;
15)Input(x, y);
16)cout << "Решение первой функции: \n";
17)a = logic1(x, y);
18)Output(a, x, y);
19)cout << "Решение второй функции: \n";
20)b = logic2(x, y);
21)Output(b, x, y);
22)cout << "Решение третьей функции: \n";
23)c = logic3(x, y);
24)Output(c, x, y);
25)}
Рисунок 6 – программный код файла “main.cpp”
6
1)#pragma once
2)#include <cmath>
3)bool logic1(double x, double y)
4){
5)bool p;
6)if ((y - x) <= 0 && (y + x) <= 0 && (y) >= -1)
7)p = true;
8)else
9)if ((pow((x - 0), 2) + pow((y - 1), 2)) <= 1)
10) |
p = true; |
11)else
12) |
p = false; |
13)return p;
14)}
15)bool logic2(double x, double y)
16){
17)bool p;
18)if ((y - x) <= 0)
19){
20)if ((y + x) <= 0)
21){
22) |
if (y >= -1) |
23) |
p = true; |
24)}
25)else
26) |
if ((pow((x - 0), 2) + pow((y - 1), 2)) <= 1) |
27) |
p = true; |
28) |
else |
29) |
p = false; |
30)}
31)else
32)if ((pow((x - 0), 2) + pow((y - 1), 2)) <= 1)
33) |
p = true; |
34)else
35) |
p = false; |
36)return p;
37)}
38)bool logic3(double x, double y)
39){
40)return (((y - x) <= 0 && (y + x) <= 0 && (y) >= -1) ||
41)((pow((x - 0), 2) + pow((y - 1), 2)) <= 1));
42)}
Рисунок 7 – программный код файла “logic.h”
ВЫПОЛНЕНИЕ РАЗРАБОТАННОГО ПРОЕКТА
Для выполнения программы выберем два набора точек. Одна будет попадать в заданную область (0.4, 0.6), а вторая не будет
(-1, -0.1). (см. рис. 8, 9)
7
Рисунок 8 – результат работы программы с точкой, попадающей в заданную область
Рисунок 9 – результат работы программы с точкой, не попадающей в заданную область
ДОКАЗАТЕЛЬСТВО ПРАВИЛЬНОСТИ РАБОТЫ ПРОГРАММЫ
Разработаны с тестовые исходные данные для контрольного решения, проверяющие попадание и непопадание точки с различными координатами в заданную область, и получены результаты. (см. таб. 1)
8
Таблица 1 - доказательство правильности работы программы
Исходные данные
x = 0.4 |
y = 0.6 |
x = 1 |
y = -1 |
x = -1 |
y = -0.1 |
Результат Точка попала в область Точка попала в область Точка не попала в область
При тестовых данных результаты ручного расчета и результаты вычислений с помощью нашего проекта совпадают.
9