Задача 584 на Pascal
В файле хранится массив отрезков (отрезок на плоскости задается координатами начала и конца). Составить функции для определения длины отрезка, координат центра отрезка. Упорядочить данный массив по убыванию длин отрезков.
type
TOtrezok=record
x1,x2,y1,y2:real;
end;
var
f:file of TOtrezok;
Otrezok:TOtrezok;
n,i:integer;
{создаем файл} PROCEDURE SaveFile;
BEGIN
write('Введите количество отрезков: '); readln(n);
assign(f,'file.dat');
rewrite(f);
for i:=1 to n do
begin
writeln('--- ввод кооддинат отрезка №',i,' ---'); write('Введите x1='); readln(Otrezok.x1);
write('Введите y1='); readln(Otrezok.y1);
write('Введите x2='); readln(Otrezok.x2);
write('Введите y2='); readln(Otrezok.y2);
write(f,Otrezok);
end;
close(f);
writeln('Создан файл file.dat'); END; {функция возвращает длину отрезка, заданного координатами точек начала и конца} FUNCTION Dlina(const x1,y1,x2,y2:real):real;
BEGIN
Dlina:=sqrt(sqr(x1-x2)+ sqr(y1-y2));
END; {процедура для определения координат центра отрезка }
{x1,y1,x2,y2 - координаты точек начала и конца отрезка} {x,y - координаты центра отрезка }
PROCEDURE Dlina2(const x1,y1,x2,y2:real; var x,y:real);
BEGIN
x:=(x2-x1)/2+x1;
y:=(y2-y1)/2+y1;
END; {процедура сортировки }
{считывает из файла отрезки в массив и далее сортирует этот массив} PROCEDURE Sort; const max=10; {максимальное количество орезков в массиве}
var
Otrezok:array[1..max]of TOtrezok; {массив отрезков} tmp:TOtrezok;
i,j,n:integer;
x,y:real; BEGIN {считываем координаты отрезков в массив} assign(f,'file.dat');
reset(f);
i:=0;
while not eof(f) and(i<=max) do
begin
inc(i);
read(f,Otrezok[i]);
end; close(f); n:=i; {количество считанных отрезков}
{сортировка массива отрезков по их длине} for i:=1 to n-1 do
for j:=i+1 to n do
if Dlina(Otrezok[i].x1,Otrezok[i].y1,Otrezok[i].x2,Otrezok[i].y2)<
Dlina(Otrezok[j].x1,Otrezok[j].y1,Otrezok[j].x2,Otrezok[j].y2) then
begin
tmp:=Otrezok[i];
Otrezok[i]:=Otrezok[j];
Otrezok[j]:=tmp;
end; {результат сортировки выведем на экран} writeln('список отрезков после сортировки'); for i:=1 to n do
begin
Dlina2(Otrezok[i].x1,Otrezok[i].y1,Otrezok[i].x2,Otrezok[i].y2, x,y);
writeln(i,') отрезок (',Otrezok[i].x1:4:1,',',Otrezok[i].y1:4:1,',', Otrezok[i].x2:4:1,',',Otrezok[i].y2:4:1,' ) длина = ', Dlina(Otrezok[i].x1,Otrezok[i].y1,Otrezok[i].x2,Otrezok[i].y2):4:1,
' координаты центра (',x:4:2,';',y:4:2,')');
end; END;
{основная программа} BEGIN
SaveFile;
readln; Sort; readln; END. |