Лабораторная работа No
.2.pdfЛабораторная работа №2 "Альтернативные действия"
ТРЕБОВАНИЯ К РЕШЕНИЮ, КОДУ И ПРОТОКОЛУ ЛАБОРАТОРНОЙ РАБОТЫ
ТРЕБОВАНИЯ К РЕШЕНИЮ ЗАДАЧИ (СРС)
Минимальные требования к решению задачи (СРС)
задача работает на всех тестах и тестировалась не более пяти раз
если входные данные не соответствуют условию задачи, то программа
должна выдавать сообщение соответствующее ошибочной ситуации (использовать макрос error_printf) и корректно завершаться. Пример №1: если радиус окружности должен быть задан в диапазоне [1, 12], то при вводе нулевого значения должно выдаваться примерно следующее сообщение "Radius out of range (выход радиуса за пределы значений)". Пример №2: прямоугольник, стороны которого параллельны осям координат, задается четырьмя вершинами; если введенные координаты не удовлетворяют заданному условию, то должно выдаваться примерно следующее сообщение "Invalid rectangle (задан неверный прямоугольник)".
все "вырожденные" случаи, если это явно не указывается в условии задачи, должны рассматриваться как неверные входные данные. Например, если отрезок задается двумя точками, то при совпадении точек отрезок вырождается в точку. В этом случае необходимо выдать сообщение об ошибочных входных данных (см. выше).
Дополнительные требования к решению задачи (СРС)
задача работает на всех тестах
Бонусы за решение задачи (СРС)
задача работает на всех тестах с первого раза
ТРЕБОВАНИЯ К РЕШЕНИЮ ЗАДАЧИ (ОТЧЕТНОЕ ЗАДАНИЕ)
задача работает на всех тестах
1
Лабораторная работа №2 "Альтернативные действия"
Бонусы за решение задачи (отчетное задание)
задача работает с первого раза
своевременность
повышенная сложность
ТРЕБОВАНИЯ К КОДУ
Минимальные требования к коду
запрещается использовать массивы и циклы;
запрещается использовать глобальные и статические переменные;
запрещается использовать операторы, изменяющие нормальный ход выполнения программы: goto, continue, break (за исключением оператора switch);
запрещается использовать оператор return, если функция не возвращает значения; если функция возвращает значение, то оператор должен использоваться только один раз;
не допускается использование одной и той же переменной для хранения разной по смыслу информации;
минимальные требования к оформлению кода.
Дополнительные требования к коду
запрещается выполнение двух и более альтернативных действий за один «прогон» программы, даже если программа выдает правильные результаты;
необходимо минимизировать кол-во анализируемых условий в условных операторах;
необходимо минимизировать размер условий, путем использования дополнительных флагов (если в условии встречается более 3 логических операций);
необходимо использовать такие типы данных, которые бы минимизировали объем используемой памяти;
дополнительные требования к оформлению кода.
ТРЕБОВАНИЯ К ПРОТОКОЛУ
Минимальные требования к протоколу
имеются все пункты протокола и они верны (в алгоритме могут отсутствовать обобщающие действия);
алгоритм должен соответствовать программе.
2
Лабораторная работа №2 "Альтернативные действия"
Дополнительные требования к протоколу
в алгоритме имеются обобщающие действия и они верны.
3
Лабораторная работа №2 "Альтернативные действия"
СПЕЦИАЛЬНЫЕ ЗНАНИЯ, НЕОБХОДИМЫЕ ДЛЯ РЕШЕНИЯ ЗАДАЧ
ПРЯМАЯ ЛИНИЯ
Общее уравнение прямой линии: A*x + B*y + C = 0
Общее уравнение прямой линии с угловым коэффициентом: y = a*x + b Уравнение прямой, проходящей через две точки A1(x1, y1) и A2(x2, y2): (y2 - y1)*(x – x1) = (x2 - x1)*(y – y1)
Условием параллельности прямых линий, заданных уравнениями y= a1*x + b1
y= a2*x + b2
служит равенство угловых коэффициентов a1 = a2
Условием перпендикулярности прямых линий, заданных уравнениями y= a1*x + b1
y= a2*x + b2
служит соотношение a1*a2 = -1
Для разыскания точки пересечения прямых линий, заданных уравнениями A1*x + B1*y + C1 = 0
A2*x + B2*y + C2 = 0
необходимо решить указанную систему уравнений.
Расстояние d от точки M1(x1, y1) до прямой линии A*x + B*y + C = 0:
d = abs((A*x1 + B*y1 +C)/sqrt(A2 + B2)), где abs(z) – модуль числа z, sqrt(v) – корень квадратный числа v
Уравнение прямой, проходящей через точку А1(x1, y1) перпендикулярно прямой A*x + B*y + C = 0:
A*(y – y1) + B*(x – x1) = 0
ТРЕУГОЛЬНИК
b |
α |
c |
|
||
|
|
h |
γ |
|
β |
|
|
|
|
a |
|
Полупериметр p = (a + b + c)/2
Радиус вписанной окружности r. Радиус описанной окружности R. Площадь треугольника S:
4
Лабораторная работа №2 "Альтернативные действия"
S= ½*h*a = ½*a*b*sinγ = sqrt(p*(p-a)*(p-b)*(p-c)) = a*b*c/(4*R) = p*r, где sqrt(v) – корень квадратный числа v
Теорема синусов: a/sinα = b/sinβ = c/sinγ = 2*R Теорема косинусов: с2 = a2 + b2 – 2*a*b*cosγ
Тип внутреннего угла (тупой, острый, прямой) можно определить по знаку косинуса этого угла.
СОВРЕМЕННЫЙ КАЛЕНДАРЬ
В современном календаре каждый год, номер которого делиться на 4 является високосным, за исключением тех номеров, которые делятся на 100 и не делятся на 400.
5
Лабораторная работа №2 "Альтернативные действия"
|
№ |
|
|
|
|
|
|
|
|
|
|
Задача |
|
|
|
Ф |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
И |
|||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
О |
|
|
|
|
|
|
|
|
|
||||||||||
|
1 |
Формулировка. Даны два отрезка: один отрезок располагается под другим |
|
||||||||||||||
|
|
(смотри рисунок). Определите видимые концы отрезков, если смотреть |
|
|
|||||||||||||
|
|
сверху. Концы отрезка должны выводиться в порядке возрастания x- |
|
|
|||||||||||||
|
|
координаты. |
|
|
|
|
|
|
|
|
|
|
|||||
|
|
Формат входных данных: [x-координата левого конца верхнего отрезка] [x- |
|||||||||||||||
|
|
координата правого конца верхнего отрезка] [x-координата левого конца |
|||||||||||||||
|
|
нижнего отрезка] [x-координата правого конца нижнего отрезка]. |
|
|
|||||||||||||
|
|
Координаты задаются целыми числами в диапазоне ±1000. Проверять порядок |
|||||||||||||||
|
|
ввода концов отрезков (сначала левый, затем - правый). Пример: 1 5 3 8 |
|||||||||||||||
|
|
Формат выходных данных: [x-координата точки] [пробел] [x-координата |
|
|
|||||||||||||
|
|
точки] и т.д. Пример: |
1 5 8 |
|
|
|
|
|
|
||||||||
|
|
1 |
|
|
|
5 |
|
|
|
|
|
|
|
|
|||
|
|
|
|
|
|
|
3 |
|
|
8 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
||
|
|
1 |
|
|
|
5 |
8 |
|
|
|
|
|
|
|
|||
|
|
Модификация: |
|
|
|
|
|
|
|
|
|
|
|||||
|
|
[0.8] |
|
|
|
|
|
|
|
|
|
|
|
|
|||
|
|
[0.8] |
|
|
|
|
|
|
|
|
|
|
|
|
|||
|
|
[0.9] |
|
|
|
|
|
|
|
|
|
|
|
|
|||
|
|
|
[1.2] |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2 |
Формулировка. |
Даны |
числа х1, y1, х2, у2, x3, у3 - координаты трех |
|
||||||||||||
|
|
вершин прямоугольника со сторонами, параллельными осям координат |
|||||||||||||||
|
|
(порядок вершин не задан). Определите координаты его четвертой вершины. |
|||||||||||||||
|
|
Формат входных данных: |
[x1] [y1] [x2] [y2] [x3] [y3]. Координаты |
|
|
||||||||||||
|
|
задаются целыми числами в диапазоне ±1000. Пример: 1 5 3 3 4 5 |
|
|
|||||||||||||
|
|
Формат выходных данных: [x-координата четвертой вершины] [пробел] [y- |
|||||||||||||||
|
|
координата четвертой вершины]. Пример: |
5 5 |
|
|
|
|
||||||||||
|
|
Модификация: |
|
|
|
|
|
|
|
|
|
|
|||||
|
|
[0.7] |
|
|
|
|
|
|
|
|
|
|
|
|
|||
|
|
[0.9] |
|
|
|
|
|
|
|
|
|
|
|
|
|||
|
|
[0.8] |
|
|
|
|
|
|
|
|
|
|
|
|
|||
|
|
[1.0] |
|
|
|
|
|
|
|
|
|
|
|
|
|||
|
|
[1.0] |
|
|
|
|
|
|
|
|
|
|
|
|
|||
|
|
[1.2] |
|
|
|
|
|
|
|
|
|
|
|
|
|||
|
3 |
Формулировка. Даны два прямоугольника, стороны которых параллельны осям |
|
||||||||||||||
|
|
координат. Каждый из них определяется координатами левого верхнего и |
|||||||||||||||
|
|
правого |
|
нижнего |
углов. |
Найдите |
площадь |
пересечения |
|
двух |
|||||||
|
|
прямоугольников. |
|
|
|
|
|
|
|
|
|||||||
|
|
Формат входных данных: [x-координата левого верхнего угла первого |
|
|
|||||||||||||
|
|
прямоугольника] [y-координата левого верхнего угла первого |
|
|
|||||||||||||
|
|
прямоугольника] [x-координата правого нижнего угла первого |
|
|
|||||||||||||
|
|
прямоугольника] [y-координата правого нижнего угла первого |
|
|
|||||||||||||
|
|
прямоугольника] [x-координата левого верхнего угла второго |
|
|
|||||||||||||
|
|
прямоугольника] [y-координата левого верхнего угла второго |
|
|
|||||||||||||
|
|
прямоугольника] [x-координата правого нижнего угла второго |
|
|
|||||||||||||
|
|
прямоугольника] [y-координата правого нижнего угла второго |
|
|
|||||||||||||
|
|
прямоугольника]. Координаты задаются целыми числами в диапазоне ±1000. |
|||||||||||||||
|
|
Пример: |
1 |
5 |
3 |
3 4 5 |
6 |
3 |
|
|
|
|
|
|
|||
|
|
Формат выходных данных: [площадь (целое число)]. Пример: 0 |
|
|
Модификация:
[0.8]
[1.0]
[1.2]
6
Лабораторная работа №2 "Альтернативные действия"
№ |
Задача |
Ф |
И |
||
|
|
О |
4Формулировка. Заданы три числа: a, b, c. Определить, могут ли они быть сторонами прямоугольного треугольника.
Формат входных данных: [a] [b] [c]. Длины сторон задаются вещественными числами в диапазоне (0, 100]. Пример: 0.001 80.09 93.4 Формат выходных данных: [признак]: 0 – треугольник не может быть получен, 1 - треугольник может быть получен. Пример: 0
Модификация:
[0.6]
[0.7]
[0.9]
[0.9]
Формулировка. Четырехугольник ABCD задан координатами своих вершин на5
|
|
плоскости: A(x_a, y_a), B(x_b, y_b), С(x_с, y_с), D(x_d, y_d). |
|||||||||||||||
|
|
Определить |
|
|
тип |
четырехугольника: |
прямоугольник, |
параллелограмм, |
|||||||||
|
|
трапеция, произвольный четырехугольник. Проверку на пересечение сторон |
|||||||||||||||
|
|
четырехугольника не выполнять. |
|
|
|
|
|||||||||||
|
|
Формат входных данных: |
|
[x_a] [y_a] [x_b] [y_b] [x_с] [y_с] [x_d] [y_d]. |
|||||||||||||
|
|
Координаты задаются целыми числами в диапазоне ±1000. Пример: 1 5 3 3 4 |
|||||||||||||||
|
|
5 |
6 |
3 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Формат выходных данных: [тип четырехугольника]: 0 – прямоугольник или |
|||||||||||||||
|
|
квадрат, 1 — параллелограмм или ромб, 2 — трапеция, 3 – произвольный |
|||||||||||||||
|
|
четырехугольник (остальные варианты). Пример: 0. Если задан не |
|||||||||||||||
|
|
четырехугольник, то выдавать сообщение об ошибочном вводе данных. |
|||||||||||||||
|
|
Модификация: |
|
|
|
|
|
|
|
|
|
|
|
||||
|
|
[0.6] |
|
|
|
|
|
|
|
|
|
|
|
|
|
||
|
|
[1.1] |
|
|
|
|
|
|
|
|
|
|
|
|
|
||
|
|
[1.2] |
|
|
|
|
|
|
|
|
|
|
|
|
|
||
|
6 |
Формулировка. |
Треугольник |
|
ABC задан |
координатами |
своих вершин на |
|
|||||||||
|
|
плоскости: A(x_a, y_a), B(x_b, y_b), С(x_с, y_с). Круги заданы |
|||||||||||||||
|
|
неравенствами |
|
|
|
|
|
|
|
|
|
|
|||||
|
|
(x - a1)2 + (y – b1)2 ≤ r12; (x – a2)2 + (y – b2)2 ≤ r22. Определить, |
|||||||||||||||
|
|
находится ли треугольник полностью внутри хотя бы одного круга или он |
|||||||||||||||
|
|
располагается вне кругов. |
|
|
|
|
|
|
|||||||||
|
|
Формат входных данных: |
|
[x_a] [y_a] [x_b] [y_b] [x_с] [y_с] [a1] [b1] |
|||||||||||||
|
|
[r1] [a2] [b2] [r2]. Координаты задаются целыми числами в диапазоне |
|||||||||||||||
|
|
±1000. Радиус окружности задается целым число в диапазоне [1, 50]. |
|||||||||||||||
|
|
Пример: |
1 |
5 |
3 |
3 4 5 |
6 |
3 |
23 |
6 |
7 |
45 |
|
|
|
||
|
|
Формат выходных данных: |
[взаимное расположение фигур]: 1 – треугольник |
||||||||||||||
|
|
внутри круга, 2 – треугольник вне кругов, 3 – другие ситуации. |
|||||||||||||||
|
|
Модификация: |
|
|
|
|
|
|
|
|
|
|
|
||||
|
|
[0.7] |
|
|
|
|
|
|
|
|
|
|
|
|
|
||
|
|
[0.7] |
|
|
|
|
|
|
|
|
|
|
|
|
|
||
|
|
[0.9] |
|
|
|
|
|
|
|
|
|
|
|
|
|
7
Лабораторная работа №2 "Альтернативные действия"
№ |
Задача |
Ф |
И |
||
|
|
О |
7Формулировка. Пройдет ли кирпич со сторонами a, b и c сквозь прямоугольное отверстие со сторонами r и s? Стороны отверстия должны быть параллельны граням кирпича. Кирпич не проходит при одинаковых
размерах кирпича и отверстия.
Формат входных данных: [a] [b] [c] [r] [s]. Размеры задаются целыми числами в диапазоне [1,100]. Пример: 1 2 3 3 2 Формат выходных данных: [проходит/не проходит]: 0 – не проходит, 1 - проходит. Пример: 1
Модификация:
[0.6]
[0.9]
[1.2]
Формулировка. Может ли шар радиуса r пройти через ромбообразное8
отверстие с диагоналями p и q? Для прохождения шара зазор между шаром и
ромбом не требуется.
Формат входных данных: [r] [p] [q]. Размеры задаются вещественными
числами в диапазоне (0,100]. Пример: 21.3 33.5 34.7 Формат выходных данных: [проходит/не проходит]: 0 – не проходит, 1 -
проходит. Пример: 1
Модификация:
[0.7]
[0.9]
[1.1]
9Формулировка. Можно ли коробку размером a×b×c упаковать в посылку
размером r×s×t? «Углом» коробку укладывать нельзя. Коробка
упаковывается при одинаковых размерах коробки и посылки.
Формат входных данных: [a] [b] [c] [r] [s] [t]. Размеры задаются целыми числами в диапазоне [1,100]. Пример: 1 2 3 3 2 1 Формат выходных данных: [упаковывается/не упаковывается]: 0 – не упаковывается, 1 - упаковывается. Пример: 1
Модификация:
[0.6]
[0.8]
[1.2]
Формулировка. Можно ли из круглой заготовки радиуса r вырезать две10
прямоугольные пластинки |
с размерами a×b и с×d? |
|
|
|
Формат |
входных данных: |
[a] [b] [c] [d] [r]. Размеры задаются |
||
вещественными числами в |
диапазоне (0,100]. Пример: |
1 |
2 3 3 4 |
|
Формат |
выходных данных: |
[можно/нельзя вырезать]: 0 |
– |
нельзя, 1 – можно. |
Пример: 0 |
|
|
|
Модификация:
[0.6]
[0.7]
[1.1]
8
Лабораторная работа №2 "Альтернативные действия"
№ |
|
|
Задача |
|
Ф |
|
|
|
И |
||
|
|
|
|
|
О |
|
|
|
|
||
11 |
Формулировка. Можно ли |
на прямоугольном участке застройки размером a и |
|
||
|
b метров разместить два дома с размерами p на q и r на s метров? Дома |
|
|||
|
можно располагать только параллельно сторонам участка. |
|
|
||
|
Формат входных данных: |
[a] [b] [p] [q] [r] [s]. Размеры задаются целыми |
|
||
|
числами в диапазоне [1,100]. Пример: 1 2 3 3 2 1 |
|
|
||
|
Формат выходных данных: |
[можно/нельзя разместить]: 0 – нельзя, 1 - |
|
||
|
можно. Пример: 0 |
|
|
|
|
|
Модификация: |
|
|
|
|
|
[0.8] |
|
|
|
|
|
[1.1] |
|
|
|
|
|
[1.2] |
|
|
|
|
12 |
Формулировка. Определите расстояние между окружностями (x - a1)2 + (y – |
|
|||
|
b1)2 = r12 и (x – a2)2 + (y – b2)2 = r22. |
|
|
||
|
Формат входных данных: |
[a1] [b1] [r1] [a2] [b2] [r2]. Координаты |
|
||
|
задаются целыми числами в диапазоне ±1000. Радиус окружности задается |
|
|||
|
целым числом в диапазоне [1,100]. Пример: 1 2 30 3 2 1 |
|
|
||
|
Формат выходных данных: |
[расстояние между окружностями]. Расстояние |
|
||
|
представляется целым числом. Если окружности пересекаются, то |
|
|
||
|
расстояние считается нулевым. Пример: 5 |
|
|
||
|
Модификация: |
|
|
|
|
|
[0.8] |
|
|
|
|
|
[1.1] |
|
|
|
|
|
[1.1] |
|
|
|
|
13 |
Формулировка. Заданы координаты вершин треугольника ABC на плоскости. |
|
|||
|
Вывести их в порядке обхода по часовой стрелке (для проверки достаточно |
|
|||
|
рассмотреть знаки внутренних углов). Обход начинать с вершины A. |
|
|||
|
Формат входных данных: |
[x_a] [y_a] [x_b] [y_b] [x_c] [y_c]. Координаты |
|
||
|
задаются целыми числами в диапазоне ±1000. Пример: 1 2 30 3 2 1 |
|
|
||
|
Формат выходных данных: |
[название первой вершины] [пробел] [название |
|
||
|
второй вершины] [пробел] [название третьей вершины]. Пример: A C B |
|
|||
|
Модификация: |
|
|
|
|
|
[0.8] |
|
|
|
|
|
[1.0] |
|
|
|
|
|
[1.1] |
|
|
|
|
14 |
Формулировка. Путник двигался t1 часов со скоростью v1 км/ч, |
затем t2 |
|
||
|
часов – со скоростью v2 км/ч и t3 часов – со скоростью v3 |
км/ч. За |
|
||
|
какое время он одолел первую половину пути? Если путник не двигался, то |
|
|||
|
рассматривать эту ситуацию как неверный ввод данных. |
|
|
||
|
Формат входных данных: |
[t1] [v1] [t2] [v2] [t3] [v3]. Скорость задается |
|
||
|
вещественными числами в диапазоне [0,7] км/ч. Время задается в формате |
|
|||
|
часы:минуты (часы задаются целым числом в диапазоне [0,4]). Пример: |
|
|||
|
1:30 2.0 3:0 3.7 |
2:0 1.0 |
2:35 |
|
|
|
Формат выходных данных: |
[время в формате часы:минуты]. Пример: |
|
||
|
Модификация: |
|
|
|
|
|
[1.0] |
|
|
|
|
|
[1.0] |
|
|
|
|
|
[1.2] |
|
|
|
|
9
Лабораторная работа №2 "Альтернативные действия"
№ |
|
|
|
Задача |
|
Ф |
|
|
|
|
И |
||
|
|
|
|
|
|
О |
|
|
|
|
|
|
|
15 |
Формулировка. Можно ехать на такси со скоростью v1 км/ч и оплатой p1 |
|
||||
|
руб/км либо идти со скоростью v2 км/ч бесплатно. Как с наименьшими |
|
||||
|
затратами преодолеть путь s за время t, если это возможно? Каковы эти |
|
||||
|
затраты? |
|
|
|||
|
Формат входных данных: [v1] [p1] [v2] [s] [t]. Скорость задается |
|
||||
|
вещественными числами в диапазоне [0,250] км/ч. Оплата задается целыми |
|
||||
|
числами в диапазоне [1,100] руб/км. Расстояние задается вещественными |
|
||||
|
числами в диапазоне [0,150] км. Время задается в формате часы:минуты |
|
||||
|
(часы задаются целым числом в диапазоне [0,4]). Пример: |
120.5 50 5.7 |
|
|||
|
6.6 1:0 |
|
|
|
||
|
Формат выходных данных: |
[время движения пешком] [пробел] |
[стоимость в |
|
||
|
руб.]. Время задается в |
формате часы:минуты (часы задаются целым числом |
|
|||
|
в диапазоне [0,4]). Стоимость указывается вещественным числом с |
|
||||
|
точностью до двух знаков. Пример: 0:10 2.35 |
|
|
|||
|
Если решения нет, то выдается сообщение «no solution». Пример: no |
|
||||
|
solution |
|
|
|||
|
Модификация: |
|
|
|||
|
[0.8] |
|
|
|
||
|
[0.8] |
|
|
|
||
|
[1.0] |
|
|
|
||
16 |
Формулировка. На шахматной доске стоят черный король и |
три белые ладьи |
|
|||
|
(ладья бьет по горизонтали и вертикали). Проверить, не находится ли |
|
||||
|
король под боем, а если есть угроза, то от кого именно. Позиция каждой |
|
||||
|
шахматной фигуры задается в обычной нотации, например, d7. |
|
||||
|
Формат входных данных: [вертикальная позиция короля] [горизонтальная |
|
||||
|
позиция короля] [вертикальная позиция первой ладьи] [горизонтальная |
|
||||
|
позиция первой ладьи] [вертикальная позиция второй ладьи] |
|
||||
|
[горизонтальная позиция второй ладьи] [вертикальная позиция третьей |
|
||||
|
ладьи] [горизонтальная позиция третьей ладьи]. Пример: |
a1b2c3d4 |
|
|||
|
Формат выходных данных: [вертикальная позиция той фигуры, которая бьет |
|
||||
|
короля] [горизонтальная позиция той фигуры, которая бьет короля] |
|
||||
|
[пробел] [вертикальная позиция той фигуры, которая бьет короля] |
|
||||
|
[горизонтальная позиция той фигуры, которая бьет короля] и т.д. Фигуры |
|
||||
|
выводятся в порядке их ввода. Если король не бьется ни одной фигурой, |
|
||||
|
то выдается no solution. Пример: с3 d4 |
|
|
|||
|
Модификация: |
|
|
|||
|
|
[0.7] |
|
|
|
|
|
|
[0.6] |
|
|
|
|
|
|
[1.0] |
|
|
|
|
|
|
[1.1] |
|
|
|
|
10