07.07.2014, 17:55 | #11 (permalink) |
Member
Регистрация: 06.07.2014
Сообщений: 12
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 10
|
Код:
trg=record x1,y1,x2,y2,x3,y3:real; s, p: real; //площадь, периметр end; и, как вы сказали тоже делал, выдавал ошибку вечно |
07.07.2014, 17:55 | |
Helpmaster
Member
Регистрация: 08.03.2016
Сообщений: 0
|
Ранее на форуме были созданы похожие темы Модуль матрицы DC-DC модуль МПВ6А ИРБИС Модуль памяти |
07.07.2014, 20:47 | #12 (permalink) |
Специалист
Регистрация: 27.08.2008
Адрес: Санкт-Петербург
Сообщений: 27,807
Сказал(а) спасибо: 340
Поблагодарили 583 раз(а) в 208 сообщениях
Репутация: 113184
|
В общем, так.
Могу лишь предложить своё решение Вашей задачки, полностью отлаженное и оттестированное. Надеюсь, что поможет. 1. Основная программа: Код:
uses CRT,Sus_tre,Ploshad,Perimetr; var f1,f2:file of trg; z:trg; n,i,k,kl:integer; r1,r2:real; begin clrscr; randomize; assign(f1,'input'); rewrite(f1); assign(f2,'output'); rewrite(f2); write('Enter the number of triangles '); readln(n); for i:= 1 to n do with z do begin x1:= -1.2+2.4*random; y1:= -1.2+2.4*random; x2:= -1.2+2.4*random; y2:= -1.2+2.4*random; x3:= -1.2+2.4*random; y3:= -1.2+2.4*random; a:=Sqrt(Sqr(x1-x2)+Sqr(y1-y2)); b:=Sqrt(Sqr(x1-x3)+Sqr(y1-y3)); c:=Sqrt(Sqr(x2-x3)+Sqr(y2-y3)); p:=perm(z); s:=plos(z); write(f1,z) end; Close(f1); Reset(f1); writeln('File F1 content:'); k:=0; kl:=0; while not eof(f1) do begin read(f1,z); k:=k+1; writeln(k:2,' A (', z.x1:5:2, ', ', z.y1:5:2, ') B (', z.x2:5:2, ', ', z.y2:5:2, ') C (', z.x3:5:2, ' ', z.y3:5:2, ')'); if k mod 20 = 0 then begin writeLn('Press Enter'); readln end; if prin(z) then begin kl:= kl+1; write(f2, z); end; end; close(f1); close(f2); if kl=0 then writeLn('No triangulas lying inside the circle') else begin repeat write('Enter the perimeter search range r1<r2 '); readln(r1,r2); until r1<r2; reset(f2); writeln('Result of perimeter search:'); k:=0; while not eof(f2) do begin read(f2,z); if (z.p>=r1) and (z.p<=r2) then begin k:=k+1; writeln(k:2,' A (', z.x1:5:2, ', ', z.y1:5:2, ') B (', z.x2:5:2, ', ', z.y2:5:2, ') C (', z.x3:5:2, ' ', z.y3:5:2, ')'); writeln(' S = ', z.s:5:2, ' P = ', z.p:5:2); if k mod 20 = 0 then begin writeLn('Press Enter'); readln end; end; end; writeln('Number of triangles with perimeter inside the given range is ',k); writeln; repeat write('Enter the square search range r1<r2 '); readln(r1,r2); until r1<r2; reset(f2); writeln('Result of square search:'); k:=0; while not eof(f2) do begin read(f2,z); if (z.s>=r1) and (z.s<=r2) then begin k:=k+1; writeln(k:2,' A (', z.x1:5:2, ', ', z.y1:5:2, ') B (', z.x2:5:2, ', ', z.y2:5:2, ') C (', z.x3:5:2, ' ', z.y3:5:2, ')'); writeln(' S = ', z.s:5:2, ' P = ', z.p:5:2); if k mod 20 = 0 then begin writeLn('Press Enter'); readln end; end; end; writeln('Number of triangles with square inside the given range is ',k); close(f2); end; ReadKey end. Код:
Unit sus_tre; Interface uses crt; type trg=record x1,y1,x2,y2,x3,y3:real; a,b,c,p,s:real; end; function prin(t:trg):boolean; Implementation function prin(t:trg):boolean; begin prin:=((sqr(t.x1)+sqr(t.y1))<1) and ((sqr(t.x2)+sqr(t.y2))<1) and ((sqr(t.x3)+sqr(t.y3))<1) end; End. Код:
unit Perimetr; interface uses sus_tre; function perm(t:trg):real; implementation function perm(t:trg):real; begin perm:=t.a+t.b+t.c; end; End. Код:
unit Ploshad; interface uses sus_tre; function plos(t:trg):real; implementation function plos(t:trg):real; var p2:real; begin p2:=(t.a+t.b+t.c)/2; plos:=Sqrt(p2*(p2-t.a)*(p2-t.b)*(p2-t.c)); end; End. Кроме того, я, извините, напрочь не понял, как это Вы так лихо считаете площади треугольников. Я - по старой доброй формуле Герона. |
08.07.2014, 10:01 | #15 (permalink) |
Специалист
Регистрация: 27.08.2008
Адрес: Санкт-Петербург
Сообщений: 27,807
Сказал(а) спасибо: 340
Поблагодарили 583 раз(а) в 208 сообщениях
Репутация: 113184
|
|
Ads | |
Member
Регистрация: 31.10.2006
Сообщений: 40200
Записей в дневнике: 0
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 55070
|
Метки |
паскаль, помощь студентам |
|
|