Musze zrobic na informatyke program, ktory ma liczyc zasieg w rzucie ukosnym z kata i predkosci a nastepnie rysowac wykres. Zrobilem wszystko a problem zaczyna sie gdy zasieg jest wiekszy jak 640 bo wykres "ucieka" za monitor jak to wyskalowac? kompinowalem cos z procedura "if" ale nic sensownego mi nie wychodzilo :(
uses Crt, Graph;
var v,h,kat,rad,z,a,tg:real;
ster,tryb,y,x:integer;
zz:string;
procedure wczytaj_predkosc;
begin
repeat{procedura wczytaj predkosc}
WriteLn('Podaj predkosc paczatkowa Vo w m/s');
Readln(v);
until v>0;
end;
procedure podaj_kat;
begin
repeat{procedura podaj kat}
Writeln('Podaj kat w stopniach');
Readln(kat);
until (kat>0) and (kat<90);
end;
procedure zamien_na_radiany;
begin
rad:=kat*pi/180;{procedura zamien na radiany}
writeln('miara tego kata w radianach wynosi ', rad:2:3);
end;
procedure oblicz_zasieg;
begin
z:=(sqr(v)/9.81)*sin(2*rad);{procedura oblicz zasieg}
WriteLn('zasieg wynosi ', z:3:3);
Readln;
end;
procedure init_graph;
begin
ster:=9; tryb:=2;{procedura init graph}
initgraph(ster,tryb,'D:\tp7\tp7\BGI');
Setaspectratio(10000,10000);
end;
procedure rysuj_uklad;
begin
setcolor(red);{procedura rysuj uklad}
line(2,0,2,480); {os oy}
line(0, getmaxY, getmaxX, getmaxY); {os ox}
end;
procedure rysuj_wykres;
begin
a:=9.81/(2*sqr(v*cos(rad)));{procedura rysuj wykres}
tg:=-sin(rad)/cos(rad);
x:=0;
y:=getmaxY-1;
putpixel(x,y,white);
repeat
delay(5000);
putpixel(x,y,blue);
x:=x+1;
y:=getmaxY-1+round((a*x+tg)*x);
putpixel(x,y,yellow);
until (x>=getmaxX) or (y>=getmaxY-1);
end;
BEGIN
Clrscr;
wczytaj_predkosc;
podaj_kat;
zamien_na_radiany;
oblicz_zasieg;
init_graph;
rysuj_uklad;
rysuj_wykres;
repeat until keypressed;
closegraph;
end.