Отчёт по информационным технологиям. Отчёт ЛБ4 Сапожников Андрей ИВТ1-22. Разветвляющиеся алгоритмы. Геометрические задачи
Скачать 0.87 Mb.
|
МИНИСТЕРСТВО НАУКИ И ВЫСШЕГО ОБРАЗОВАНИЯ РФ филиал федерального государственного бюджетного образовательного учреждения высшего образования «Национальный исследовательский университет «МЭИ» в г. Смоленске Кафедра вычислительной техники Отчет по лабораторной работе № 4 по курсу: «Программирование» Тема: «Разветвляющиеся алгоритмы. Геометрические задачи» Группа: ИВТ1-22 Студент: Сапожников А.С. Преподаватель: доцент Курылев В.А. ассистент Жарков А.П. Вариант: № 22 Смоленск, 2022 г. 1. Цель работы Изучить способы записи сложных логических условий. 2. Теоретическое введение Для решения тех или иных задач не всегда достаточно просто работать с переменными, задавая им разные значения и вычисляя неизвестное. Существует большое количество ситуаций, когда на экран нужно вывести определённое значение, которое соответствует какому-либо условию, либо же выполнять программу для определённых значений. Часто приходится работать с большим количеством переменных и просто невозможно все их обозначить в программе. Именно поэтому в Си существуют конструкции ветвления. 2.1. Операторы if-else, switch В языке программирования C синтаксис оператора ветвления if-else выглядит так: if (логич_выражение) выражение1; else выражение2; Как и в других языках ветка else не является обязательной. Оператор switch. При организации множественного выбора, когда проверяется значение переменной на соответствие тому или иному значению, бывает удобно использовать не условный оператор if-else, а оператор переключения switch. Его синтаксис можно описать так: switch (целочисленная_переменная) { case константа1: операции; case константа2: операции; …. default: операции; } В скобках после слова switch может стоять не только переменная, но и выражение, результат выполнения которого возвращает целое значение (может быть символ). Константы при case также могут быть результатом выполнения выражений. Константы можно группировать в одном case (например, case 12, 13, 18). Ветка default не обязательна. 2.2. Логические операторы Как известно логическое выражение может быть сложным. Логические операторы И и ИЛИ в языке программирования C обозначаются соответственно парными знаками амперсанда (&&) и вертикальной черты (||). Их приоритет меньше, чем у простых логических операторов, поэтому простые логические операции при их объединении в сложные логические выражения можно не заключать в скобки. Оператор НЕ имеет приоритет выше, чем И, ИЛИ. Он выполняется перед ними. Обозначается (not), либо (!=). Также в Си встречается двойное равно (==), это означает сравнение значений. Пример сложного логического выражения на языке C: a > 100 && b != 0 2.3. Алгебраические способы задания геометрических фигур Очень часто в программировании с помощью алгоритмов и условий нужно решать какие-либо задачи, связанные с координатами точек, расположением фигур на плоскости. Для того чтобы работать с геометрическими фигурами и решать задачи по аналитической геометрии необходимо знать каким уравнением задаётся та или иная фигура. 3. Техническое задание Составить алгоритм и программу, проверяющую, попадает ли введенная точка с координатами (x, y) в заштрихованную фигуру (Рисунок 3). Рисунок 3 – Техническое задание 4. Анализ технического задания Рассмотрев рисунок 3, можно понять, что точка должна оказаться внутри серой области, то есть попасть в окружность, либо в треугольник. Для выполнения лабораторной работы нам необходимо вспомнить математические уравнения окружности и прямой. В процессе выполнения программы будут вводиться произвольные координаты точки (x, y), а затем будет проводиться проверка условий, в которых записаны необходимые уравнения для того, чтобы точка оказалась в серой области. Если точка принадлежит области, то в командную строку будет выводиться соответствующее сообщение. Если же точка не лежит в области, то результат будет иным. Уравнение окружности имеет вид: , где x и y координаты произвольной точки, и – координаты центра окружности, R – радиус окружности. В нашем случае центр окружности совпадает с центром координатной оси, поэтому уравнение можно упростить до следующего вида: Уравнение прямой имеет вид: , где a – угловой коэффициент между прямой и осью Ox (если a>0, то угол острый, если a<0, то угол тупой), b – смещение прямой относительно оси ординат (Если b>0, то смещение вверх. Если b<0 – вниз.). Рассмотрим прямоугольный треугольник. Угловой коэффициент , так как угол с осью тупой, а значение координаты x по модулю равно каждому значению координаты y. Прямая смещена относительно центра на b=2. Таким образом, гипотенуза прямоугольного треугольника имеет уравнение: . При этом координата x должна лежать в пределах от -1 до 2. А координата y от -1 до 2, а также должна находиться ниже гипотенузы треугольника. Теперь определим условие для окружности. По рисунку можем определить радиус – он равен 1. Чтобы точка оказалась внутри окружности должно выполняться неравенство: Для того чтобы записать общее условие в программу воспользуемся условным оператором if. Наше условие будет выглядеть так: if ((x*x+y*y)<=1 || (x>=0 && (x<=2) && (y>=0) && (y<=2) && (y<=-x+2))). 5. Блок-схема Схема программы отображена на рисунке 5. Рисунок 5 – Блок-схема программы 6. Модульная структура программы Программа состоит из одного модуля – самой программы. 7. Спецификация на программные модули Входные данные: x, y типа float – вводимые числа, которые и будут проверяться на принадлежность к закрашенной плоскости. Проверка условия – оператор if. Порядок условия таков, что программа проверяет сначала принадлежность точки к окружности. Затем ставится знак ||, что означает логическое ИЛИ. Во втором условии проверяется тот факт, находится ли точка в плоскости треугольника. Для этого берутся крайние точки, ограничивающие треугольник (по оси Ox это 0 и 2, по оси Oy это 0 и 2). Одновременно с этим должно выполняться условие того, что ордината точки лежит ниже гипотенузы треугольника. Это также записано в виде неравенства. Таким образом, должно выполниться одно из двух условий. Если первое ложно, второе может быть истинно и наоборот – В таком случае результат выполнения будет положительным и на экран в консоль будет выведено следующее сообщение: Точка попала в плоскость. Если же 2 условия не выполнятся, то результат будет ложным и в консоли будет написано: Точка не попала в плоскость. 8. Текст программы #include /* Определение попадания точки в заданную область */ int main() { float x, y; printf ("Введите x\n"); // Ввод координаты x scanf ("%f",&x); printf ("Введите y\n"); // Ввод координаты x scanf ("%f",&y); if ((x*x+y*y)<=1 || (x>=0 && (x<=2) && (y>=0) && (y<=2) && (y<=-x+2))) { // Условие для точки printf ("Точка попала в плоскость\n"); // Вывод результата при соблюдении условия return 0; } printf ("Точка не попала в плоскость\n"); // Вывод результата при несоблюдении условия return 0; } 9. Результаты тестирования Программа протестирована с несколькими значениями. Рассмотрим 8 случаев, по 2 случая на все 4 четверти, когда точка попадает и не попадает в область в четвертях. I четверть: Точка (1, 1) лежит в плоскости (рисунок 9.1). Рисунок 9.1 – Результат выполнения Точка (2, 2) не лежит в плоскости (рисунок 9.2). Рисунок 9.2 – Результат выполнения II четверть: Точка (-0.5, 0.5) лежит в плоскости (рисунок 9.3). Рисунок 9.3 – Результат выполнения Точка (-1, 1) не лежит в плоскости (рисунок 9.4). Рисунок 9.4 – Результат выполнения III четверть: Точка (-0.5, -0.5) лежит в плоскости (рисунок 9.5). Рисунок 9.5 – Результат выполнения Точка (-2, -1) не лежит в плоскости (рисунок 9.6). Рисунок 9.6 – Результат выполнения IV четверть: Точка (0,7, -0,2) лежит в плоскости (рисунок 9.7). Рисунок 9.7 – Результат выполнения Точка (2, -1) не лежит в плоскости (рисунок 9.8). Рисунок 9.8 – Результат выполнения 10. Вывод В ходе выполнения лабораторной работы были изучены операторы ветвления, основные логические операторы в языке C и алгебраические способы задания геометрических фигур. Знания были закреплены на практике путём написания программы для решения поставленной задачи.0> |