Нахождение площади прямоугольника по его вершинам - Pascal ABC
Формулировка задачи:
Здравствуйте,
необходимо найти площадь прямоугольника по его вершинам, не могу понять в чем моя ошибка?
Листинг программы
- Program Primer;
- Var a,b,X,Y,X1,Y1,X2,Y2,S:integer;
- Begin
- WriteLn('Введите координаты вершин');
- Read(X,Y,X1,Y1);
- abs(a):=SQRT(SQR(X-X1)*SQR(Y-Y1));
- WriteLn('Модуль a='abs(a));
- WriteLn('Введите координаты вершин');
- Read(X,Y,X2,Y2);
- abs(b):=SQRT(SQR(X-X2)*SQR(Y-Y2));
- WriteLn('Модуль b='abs(b));
- WriteLn('Введите длину и ширину прямоугольника');
- Read(a,b);
- S:=a*b;
- WriteLn('Площадь прямоугольника='S);
- End.
Решение задачи: «Нахождение площади прямоугольника по его вершинам»
textual
Листинг программы
- const p=0.0001;{точность сравнения длин}
- n=4; {кол.точек}
- m=6;{кол. отрезков=4 стороны+2 диагонали}
- type Point=record {тип - точка}
- x,y:real;
- end;
- {вычисление длины отрезка}
- function Dlina(a,b:Point):real;
- begin
- Dlina:=sqrt(sqr(a.x-b.x)+sqr(a.y-b.y));
- end;
- var t:array[1..n] of Point;{массив точек}
- d:array[1..m] of real;{массив длин сторон и диагоналей}
- i,j,k,l:byte;
- s:real;
- begin
- clrscr;
- writeln('Введите координаты вершин прямоугольника в произвольном порядке:');
- for i:=1 to n do
- begin
- writeln('Вершина ',i);
- write('x=');readln(t[i].x);
- write('y=');readln(t[i].y);
- end;
- writeln('Координаты:');
- write('№');
- for i:=1 to n do
- write(i:4);
- writeln;
- write('X:');
- for i:=1 to n do
- write(t[i].x:4:1);
- writeln;
- write('Y:');
- for i:=1 to n do
- write(t[i].y:4:1);
- writeln;
- writeln;
- k:=0;
- for i:=1 to n-1 do
- for j:=i+1 to n do
- begin
- k:=k+1;
- d[k]:=Dlina(t[i],t[j]);
- end;
- for i:=1 to m-1 do {сортируем длины по возрастанию}
- for j:=i+1 to m do
- if d[i]>d[j] then
- begin
- s:=d[i];
- d[i]:=d[j];
- d[j]:=s;
- end;
- {если первые 4 попарно равны и последние 2 равны и они больше первых}
- if ((abs(d[1]-d[2])<p)and(abs(d[3]-d[4])<p))
- and(abs(d[5]-d[6])<p)and(d[5]>d[4]) then
- begin
- s:=d[1]*d[3];
- write('Площадь прямоугольника=',s:0:2);
- end
- else write('Это не прямоугольник');
- end.
Объяснение кода листинга программы
- const p=0.0001; {точность сравнения длин}
- n=4; {количество точек}
- m=6; {количество отрезков=4 стороны+2 диагонали}
- type Point=record {тип - точка} x,y:real; end;
- var t:array[1..n] of Point; {массив точек}
- d:array[1..m] of real; {массив длин сторон и диагоналей}
- i,j,k,l:byte;
- s:real;
- begin
- clrscr;
- writeln('Введите координаты вершин прямоугольника в произвольном порядке:');
- for i:=1 to n do
- begin
- writeln('Вершина ',i);
- write('x=');readln(t[i].x);
- write('y=');readln(t[i].y);
- end;
- writeln('Координаты:');
- write('№');
- for i:=1 to n do
- write(i:4);
- writeln;
- write('X:');
- for i:=1 to n do
- write(t[i].x:4:1);
- writeln;
- write('Y:');
- for i:=1 to n do
- write(t[i].y:4:1);
- writeln;
- writeln;
- k:=0;
- for i:=1 to n-1 do
- for j:=i+1 to n do 1 begin
- k:=k+1;
- d[k]:=Dlina(t[i],t[j]);
- end;
- for i:=1 to m-1 do {сортируем длины по возрастанию}
- for j:=i+1 to m do
- if d[i]>d[j] then
- begin
- s:=d[i];
- d[i]:=d[j];
- d[j]:=s;
- end;
- {если первые 4 попарно равны и последние 2 равны и они больше первых}
- if ((abs(d[1]-d[2])<p)and(abs(d[3]-d[4])<p))
- and(abs(d[5]-d[6])<p)and(d[5]>d[4]) then
- begin
- s:=d[1]*d[3];
- write('Площадь прямоугольника=',s:0:2);
- end
- else write('Это не прямоугольник');
- end.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д