Помогите с комплексным заданием на Pascal
Очень нужна помощь с заданием на Pascal к четвергу. Заранее спасибо всем, кто откликнется.
Задание: 1. Задать три точки. По двум точкам построить прямую и найти расстояние до третьей. Проиллюстрировать решение графически. 2. Ввести координаты точек из файла, записать результаты в файл. 3. Оформить программу в виде набора процедур. 4. Составить все возможные комбинации прямых и точек из десяти заданных точек, перенумеровать эти комбинации. 5. Ранжировать тройки в порядке возрастания расстояния между прямой и точкой. 6. Представить результаты в виде файла из набора записей, включающих номер комбинации, координаты характерных точек, значения расстояний. 7. Представить результаты в виде таблицы и в виде графика зависимости значения расстояния от номера комбинации. 8. Процедуры ранжирования и построения графика включить в модуль пользователя. |
Код программы:
Program ppp; Uses crt; Var T: ARRAY [1..10, 1..2] of INTEGER; i,j,k,N: INTEGER; D: Array[1..360] of real; PROCEDURE Rasst (Var X10,X11,X20,X21,X30, X31: Integer); VAR a,b,d: real; BEGIN if (X20-X10=0) then begin a:=0; b:=X11; end else begin a:=(X21-X11)/(X20-X10); b:=(X11*(X20-X10)-X10*(X21-X11))/(X20-X10); end; Writeln('priamaia: y =', a:2:0, 'x+',b:2:0); d:=Abs(a*X30-X31+b)/Sqrt(Sqr(a)+1); Writeln ('rasstoianie= ', d:2:0); {ReadLn;} end; FUNCTION Rst(Var X10,X11,X20,X21,X30, X31: Integer): REAL; Begin Rst:=Abs(((X21-X11)/(X20-X10))*X30-X31+(X11*(X20-X10)-X10*(X21-X11))/(X20-X10))/Sqrt(Sqr((X21-X11)/(X20-X10))+1); End; PROCEDURE swap(VAR x,y: real); var t:real; begin t:=x; x:=y; y:=t end; BEGIN clrscr; Writeln('tochki T1, .. , T10: '); for i:=1 to 10 do for j:=1 to 2 do Begin T[i,1]:=i; T[i,2]:=Random(I); GotoXY(i,j+1); Write(T[i,j], ' '); End; N:=0; Readln; for i:=1 to 10 do for j:=i+1 to 10 do for k:=1 to 10 do begin IF (k<>i) and (k<>j) Then begin N:=N+1; Writeln('nomer ', N); Writeln('rasstoianie megdu priamoi', '(',T[i,1],T[i,2],')','(',T[j,1],T[j,2],')','i tochkoi(',T[k,1],T[k,2], ')'); Rasst(T[i,1],T[i,1], T[j,1],T[j,2], T[k,1],T[k,2]); D[N]:=Rst(T[i,1],T[i,1], T[j,1],T[j,2], T[k,1],T[k,2]); end; end; Readln; Writeln('sortirovka:'); begin for j:=1 to 359 do for i:=1 to 360-j do if D[i]>D[i+1] then swap(D[i],D[i+1]) end; for j:=1 to 360 do Write(D[j]:2:0); Readln; END. Нужно, чтобы точки считывались из файла, Представить результаты в виде файла из набора записей, включающих номер комбинации, координаты характерных точек, значения расстояний. Представить результаты в виде графика зависимости значения расстояния от номера комбинации. |
Часовой пояс GMT +4, время: 20:36. |
Powered by vBulletin® Version 4.5.3
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.