Delphi-Help

Главная Статьи Массивы Задача 584 на Pascal

Задача 584 на Pascal

Оцените материал
(1 Голосовать)


Задача 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.
Прочитано 5818 раз

Авторизация



Счетчики