Задание: На экране построить семейство кривых, заданных функцией: Y = 4.6·G·sin(x/F) + 1.9·M·cos(x+1.8); [-4 < x <4] Группа параметров G,M,F вводится с клавиатуры.
Исходный код: Program Lab10F; uses Graph,crt; type
mystring=string[32]; var i:byte; rez:word;
x,y:integer; mk,G,F,M:real;
procedure
Grafik(G,F,M:real);
var grDriver: Integer; grMode:
Integer; ErrCode: Integer; x,y,minx,miny,maxx,maxy,q:real;
nx,ny,nmaxx,nmaxy,ram:integer; s:string; begin grDriver :=
Detect; InitGraph(grDriver, grMode,'c:\lang\TP71\bgi'); {cyuda
vvesti svoy put'} ErrCode := GraphResult; if ErrCode = grOk
then begin { Do graphics } {[-4 < x <4]} minx:=-4;
maxx:=4; ram:=1; nmaxx:=getmaxx-2*ram;
nmaxy:=getmaxy-2*ram; q:=0.001; x:=minx;
maxy:=4.6*G*sin(x/F)+1.9*M*cos(x+1.8); {cyuda vvesti svoyu funkciyu}
miny:=maxy; while x<=maxx do begin
y:=4.6*G*sin(x/F)+1.9*M*cos(x+1.8); {cyuda vvesti svoyu funkciyu}
if y>maxy then maxy:=y; if y<miny then miny:=y;
x:=x+q; end; q:=0.001; {kol-vo to4ek} x:=minx;
while x<=maxx do begin
y:=4.6*G*sin(x/F)+1.9*M*cos(x+1.8); {cyuda vvesti svoyu funkciyu}
nx:=round((nmaxx*(x-minx)/(maxx-minx))+ram);
ny:=round((nmaxy*(maxy-y)/(maxy-miny))+ram);
putpixel(nx,ny,2); x:=x+q; end; y:=0;
ny:=round((nmaxy*(maxy-y)/(maxy-miny))+ram); setcolor(14);
line(ram,ny,nmaxx+ram,ny); q:=1; x:=minx; while
x<=maxx do begin
nx:=round((nmaxx*(x-minx)/(maxx-minx))+ram);
line(nx,ny-4,nx,ny+4); str(x:2:0,s);
outtextxy(nx,ny-8,s); x:=x+q; end; x:=0;
nx:=round((nmaxx*(x-minx)/(maxx-minx))+ram); setcolor(14);
line(nx,ram,nx,nmaxy+ram); q:=(maxy-miny)/10; y:=miny;
while y<=maxy do begin
ny:=round((nmaxy*(maxy-y)/(maxy-miny))+ram);
line(nx-4,ny,nx+4,ny); str(y:6:2,s);
outtextxy(nx,ny,s); y:=y+q; end;
{line(30,30,610,30); line(610,30,610,450);
line(30,30,30,450); line(30,450,610,450);}
Readln;
CloseGraph; end else Writeln('Graphics error:',
GraphErrorMsg(ErrCode)); end;
BEGIN clrscr;
write('Vvedite G= '); readln(G); write('Vvedite F= '); readln(F);
write('Vvedite M= '); readln(M); Grafik(G,F,M); END.
|