Laba_infa1 (Все ЛР)
Описание файла
Файл "Laba_infa1" внутри архива находится в папке "Labs". Документ из архива "Все ЛР", который расположен в категории "". Всё это находится в предмете "информатика" из 1 семестр, которые можно найти в файловом архиве МГТУ им. Н.Э.Баумана. Не смотря на прямую связь этого архива с МГТУ им. Н.Э.Баумана, его также можно найти и в других разделах. .
Онлайн просмотр документа "Laba_infa1"
Текст из документа "Laba_infa1"
Задача
Целочисленные координаты четырёх точек на плоскости задаются и соединяются в такой последовательности, чтобы создавался выпуклый четырёхугольник вида: квадрат, прямоугольник, параллелограмм или трапеция.
Определить вид четырёхугольника и длины его сторон.
Результаты расчётов вывести в таблицу с заголовками, которую создавать с помощью символов псевдографики.
Если введённые координаты определяют четырёхугольник другого вида, вывести сообщение об этом, а таблицу не выводить.
Блок-схема алгоритма
Обоснование типов данных
Координаты по условию целочисленные, поэтому к ним применим тип integer, но для большего количества возможных значений используем longint.
Коэффициенты в уравнении линейной функции f(x) = kx + b вычисляются при помощи деления, поэтому следует присвоить им вещественный тип single. Аналогично для сторон четырёхугольника.
Обозначение | Идентификатор | Тип данных |
Координаты y вершины | y | array [1..n] of longint |
Координаты x вершины | x | array [1..n] of longint |
Большое число, заменяющее бесконечность | infin | const |
Количество сторон четырёхугольника | n | const |
Угловые коэффициенты линейных функций сторон | k | array [1..n] of single |
Длины сторон четырёхугольника | a | array[1..n] of single |
Переменная-счётчик | i | byte |
Так как присутствует немалое количество однотипных данных, логично будет объединить их в соответствующие массивы.
Код
program laba1;
const n = 4; //количество вершин/сторон многоугольника
infin = 2147483647;
var x : array [1..n] of longint;
y : array [1..n] of longint;
k : array [1..n] of single;
a : array [1..n] of single;
i, num : integer;
begin
{Ввод координат вершин четырёхугольника}
writeln ('Please enter coordinates of vertexes');
for i := 1 to n do
readln (x[i], y[i]);
{Расчёт длин сторон и их угловых коэффициентов}
for i := 1 to n do begin
if (i < n) then begin //рассмотрение 1-3 сторон
if (x[i] <> x[i+1]) then k[i] := (y[i + 1] - y[i])/(x[i + 1] - x[i]) //угловой коэффициент для сторон, не перпендикулярных Ох
else k[i] := infin; //условие перпендикулярности стороны Ох
a[i] := sqrt(sqr(x[i + 1] - x[i]) + sqr(y[i + 1] - y[i])); //размеры сторон четырёхугольника
end
else begin //рассмотрение 4-ой стороны
a[i] := sqrt(sqr(x[1] - x[i]) + sqr(y[1] - y[i]));
if (x[1] <> x[i]) then k[i] := (y[1] - y[i])/(x[1] - x[i])
else k[i] := infin;
end;
end;
{Вычисление типа четырёхугольника}
if (k[1] = k[3]) or (k[2] = k[4]) then begin //параллельность 2 противолежащих сторон(критерий трапеции)
if (k[2] = k[4]) and (k[1] = k[3]) then begin //попарная параллельность противолежащих сторон(критерий паралеллограмма)
if (k[2] * k[1] = -1) or ((k[2] = 0) and (k[1] >= infin)) then begin //перпендикулярность сторон(критерий прямоугольника. Когда угловые коэффициенты функций при умножении друг на друга дают '-1' - они перпендикулярны)
if (a[1] = a[2]) then writeln ('This is a square') //равенство сторон(критерий квадрата)
else writeln ('This is a rectangle');
end
else writeln ('This is parallelogram');
end
else writeln ('This is trapezoid');
{Таблица} writeln(#201#205#205#205#205#205#205#205#205#205#205#205#205#205#205#205#205#205#205#205#205#205#205#205#205#205#205#205#205#203#205#205#205#205#205#205#205#205#205#205#205#205#205#205#205#205#205#205#205#205#205#205#205#205#205#205#205#205#203#205#205#205#205#205#205#205#205#205#205#205#205#205#205#205#205#205#205#205#205#205#205#205#205#205#205#205#205#203#205#205#205#205#205#205#205#205#205#205#205#205#205#205#205#205#205#205#205#205#205#205#205#205#205#205#205#205#187);
writeln(#186, 'First side':27, #32#186, 'Second Side':27, #32#186, 'Third Side':27, #32#186, 'Forth side':27, #32#186);
writeln(#186, '': 28, #186, '': 27, #32#186, '': 27, #32#186, '': 27, #32#186); writeln(#204#205#205#205#205#205#205#205#205#205#205#205#205#205#205#205#205#205#205#205#205#205#205#205#205#205#205#205#205#206#205#205#205#205#205#205#205#205#205#205#205#205#205#205#205#205#205#205#205#205#205#205#205#205#205#205#205#205#206#205#205#205#205#205#205#205#205#205#205#205#205#205#205#205#205#205#205#205#205#205#205#205#205#205#205#205#205#206#205#205#205#205#205#205#205#205#205#205#205#205#205#205#205#205#205#205#205#205#205#205#205#205#205#205#205#205#185);
writeln(#186, a[1]:27:3, #32#186, a[2]:27:3, #32#186, a[3]:27:3, #32#186, a[4]:27:3, #32#186); writeln(#200#205#205#205#205#205#205#205#205#205#205#205#205#205#205#205#205#205#205#205#205#205#205#205#205#205#205#205#205#202#205#205#205#205#205#205#205#205#205#205#205#205#205#205#205#205#205#205#205#205#205#205#205#205#205#205#205#205#202#205#205#205#205#205#205#205#205#205#205#205#205#205#205#205#205#205#205#205#205#205#205#205#205#205#205#205#205#202#205#205#205#205#205#205#205#205#205#205#205#205#205#205#205#205#205#205#205#205#205#205#205#205#205#205 #205#205#188);
end
{Если четырёхугольник не соответствует ни одному из необходимых видов, программа сообщает пользователю об этом}
else writeln ('Error: Incorrect data input. It is generic convex or concave tetragon.');
readln;
end.
Графическое представление
-
Трапеция
-
Параллелограмм
-
Прямоугольник
-
Квадрат
-
Выпуклый четырёхугольник
-
Невыпуклый четырёхуглоьник
Тестовые значения
Фигура | Вводимые данные | Результат |
Трапеция | A (-2;-2) B (4;0) C (12;0) D (12;-2) | AB = 6.325 BC = 8 CD = 2 AD = 14 |
Параллелограмм | A (0;0) B (2;5) C (6;5) D (4;0) | AB = 5.385 BC = 4 CD = 5.385 AD = 4 |
Прямоугольник | A (-5;0) B (-5;5) C (5;5) D (5;0) | AB = 5 BC = 10 CD = 5 AD =10 |
Квадрат | A (0;0) B (0;4) C (4;4) D (4;0) | AB = 4 BC = 4 CD = 4 AD = 4 |
Выпуклый четырёхугольник | A (0;0) B (4;5) C (4;20) D (-1;0) | Ошибка |
Невыпуклый четырёхугольник | A (0;0) B (-2;-2) C (1;-1) D (-2;-1) | Ошибка |