Решенные задачи на языке Паскаль
Условие задачи прислали на e-mail.
В файле хранится массив отрезков (отрезок на плоскости задается координатами начала и конца). Составить функции для определения длины отрезка, координат центра отрезка. Упорядочить данный массив по убыванию длин отрезков.
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.