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

лабы / Laba_varik12_7

.1.pdf
Скачиваний:
10
Добавлен:
10.06.2023
Размер:
1.07 Mб
Скачать

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

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

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

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

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

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