Языки второго поколения (2GL) создавались для того, чтобы облегчить
тяжёлую работу по программированию, перейдя в выражениях языка от
низкоуровневых машинных понятий ближе к тому, как обычно мыслит
программист. Эти языки появились в 1950-е годы, в частности, такие языки
как Фортран и Алгол.
Наиболее важной проблемой, с которыми столкнулись разработчики языков
второго поколения, стала задача убедить клиентов в том, что созданный
компилятором код выполняется достаточно хорошо, чтобы оправдать отказ от
программирования на ассемблере. Скептицизм по поводу возможности
создания эффективных программ с помощью автоматических компиляторов был
довольно распространён, поэтому разработчикам таких систем должны были
продемонстрировать, что они действительно могут генерировать почти такой
же эффективный код, как и при ручном кодировании, причём практически
для любой исходной задачи.
Для упрощения задачи не будем рассматривать вырожденные варианты, т.е. решаем её для случая, когда все три точки являются вершинами некоторого треугольника. Тогда эти точки и есть точки пересечения линий, на которых лежат стороны треугольника.
Воспользуемся известным уравнением прямой, проходящей через две точки с координатами (x₁;y₁) и (x₂;y₂):
Ax+By+C=0, где A=y₂-y₁, B=x₁-x₂, C=y₁x₂-x₁y₂
procedure Equation(x1,y1,x2,y2:real; var A,B,C:real);
begin
A:=y2-y1;
B:=x1-x2;
C:=y1*x2-x1*y2
end;
var
x,y,a,b,c:array[1..3] of real;
i:integer;
begin
Writeln('Введите парами чисел x,y координаты трех точек');
for i:=1 to 3 do begin
Write('Точка ',i,': '); Read(x[i],y[i])
end;
Equation(x[1],y[1],x[2],y[2],a[1],b[1],c[1]);
Equation(x[1],y[1],x[3],y[3],a[2],b[2],c[2]);
Equation(x[2],y[2],x[3],y[3],a[3],b[3],c[3]);
{ получены коэффициенты уравнений }
for i:=1 to 3 do begin
Write(a[i],'*x');
if b[i]>=0 then Write('+');
Write(b[i],'*y');
if c[i]>=0 then Write('+');
Writeln(c[i],'=0')
end
end.
<em><u>Тестовое решение:</u></em>
Введите парами чисел x,y координаты трех точек
Точка 1: 1 5
Точка 2: 5 6
Точка 3: 4 2
1*x-4*y+19=0
-3*x-3*y+18=0
-4*x+1*y+14=0