Пример программы ТР в консольном приложении
Условие задачи Дано n точек на плоскости. Рассматривая всевозможные пары точек как концы отрезков, из отрезков, параллельных заданному направлению, выбрать отрезок максимальной длины. y ugol 3 4 1 x 2 5 n 6 …
Состав данных Имя Смысл Тип Структура Исходные данные ugol Угол, определяющий заданное направление (в градусах) вещ. простая переменная n Число точек цел. простая переменная вещ. одномерный массив x y Координаты точек Выходные данные imax Номера искомых точек цел. простая переменная jmax Промежуточные данные i Счетчик первой точки пары цел. простая переменная j Счетчик второй точки пары цел. простая переменная max Максимальная длина отрезка вещ. простая переменная L Текущая длина отрезка вещ. простая переменная u Угол текущего отрезка с осью ОХ вещ. простая переменная
Блок-схема алгоритма Начало 1 Ввод исходных данных imax=-1 max: =0; imax: =-1; i: =0 j: =i+1 1 j n-1 - 2 Обработка отрезка с концами (xi, yi) и (xj, yj) 3 j: =j+1 i: =i+1 1 Вывод “нет отрезков, параллельных заданному” Вывод imax, jmax i n-2 + Конец
Блок 2. Обработка отрезка с концами (xi, yi) и (xj, yj) 1 2 -1 Вычисление u 2 -2 + |u-ugol|<10 -6 2 -3 Вычисление L 2 -4 L>max + max: =L; imax: =i; jmax: =j 3
Блок 2 -2. Сравнение текущего угла u с заданным ugol u и ugol – вещественные данные, поэтому вместо сравнения на равенство (u = ugol) надо сравнивать на близость: |u-ugol|<10 -6
Определение угла отрезка с осью ОХ и его длины. Можно было написать функции, но мы сделаем класс! Type otr=class private x 1, y 1, x 2, y 2, dl, u: real; {координаты концов отрезка, его длина и угол с Ох в градусах} public constructor create(x 1, y 1, x 2, y 2: real); Function Get_dl: real; Function Get_u: real; //в градусах End;
Методы класса отрезок constructor otr. create(x 1, y 1, x 2, y 2: real); begin self. x 1: =x 1; self. x 2: =x 2; self. y 1: =y 1; self. y 2: =y 2; end; Function otr. Get_dl: real; begin dl: =sqrt(sqr(x 1 -x 2)+sqr(y 1 -y 2)); result: =dl; end;
Методы класса отрезок Function otr. Get_u: real; begin if abs(x 1 -x 2)<1. 0 e-6 then u: =90 else u: =arctan((y 1 -y 2)/(x 1 -x 2))/pi*180; result: =u; end;
Геометрическая иллюстрация к методам класса отрезок (x 1, y 1) dl y y 1 -y 2 u x (x 2, y 2) x 1 -x 2
Блок 2. Обработка отрезка с концами (xi, yi) и (xj, yj) Var o: otr; . . . 1 2 -1 o: =otr. create(x[i], y[i], x[j], y[j]); u: =o. Get_u Вычисление u 2 -2 + |u-ugol|<10 -6 2 -3 Вычисление L 2 -4 L>max L: =o. Get_dl + max: =L; imax: =i; jmax: =j 3 … o. destroy