Program funkcja;
uses Crt, Graph;
var
sKarta, sTryb: smallint;
A, R, C, Pixel, Fx: real;
nX, nY, nPomoc: integer;
nMaxX, nMaxY: integer;
nZakres:byte;
function FunkcjaKwadratowa(nX:real):real;
begin
FunkcjaKwadratowa:= A * nX * nX + R * nX + C;
end;
procedure Osie();
begin
Line(0, nMaxY div 2, nMaxX, nMaxY div 2);
Line(nMaxX div 2, 0, nMaxX div 2, nMaxY);
end;
procedure Grafika();
begin
InitGraph(sKarta,sTryb,);
nMaxX:= GetMaxX;
nMaxY:= GetMaxY;
nZakres:= nZakres * 2;
Pixel:= nZakres / GetMaxX;
SetColor(random(15));
end;
procedure WczytajWspolczynniki();
begin
clrscr;
writeln('Program rysujacy funkcje kwadratowa.');
writeln('Najpierw podaj wspolczynnik a: ');
read(A);
if A = 0 then
begin
writeln('Funkcja przeksztalcono na funkcje liniowa (A=0).');
delay(200);
end;
writeln('Teraz podaj wspolczynnik b: ');
read(R);
if (R = 0) and (A = 0) then
begin
writeln('Funkcja będzie funkcja stala (A i B jest rowne 0).');
delay(200);
end;
writeln('Podaj c: ');
read(C);
end;
procedure Zakres();
begin
writeln('Podaj zakres');
read(nZakres);
end;
procedure Podzial();
begin
SetColor(1);
nX:=0;
nPomoc:= nZakres * 2;
while nX < nPomoc do
begin
nX:=nX+1;
Line(nMaxX div 2 - 5, Round(nX / Pixel) - (nMaxX - nMaxY) div 2, nMaxX div 2 + 5, Round(nX / Pixel) - (nMaxX - nMaxY) div 2);
Line(Round(nX / Pixel), nMaxY div 2 - 5, Round(nX / Pixel), nMaxY div 2 + 5);
end;
end;
procedure RysujFunkcje();
begin
nX:= - nMaxX div 2;
nY:= nMaxY div 2 - round(FunkcjaKwadratowa(nX * Pixel));
MoveTo(nX, nY);
setcolor(red);
for nX:= - nMaxX div 2 to nMaxX div 2 do
begin
Fx:= FunkcjaKwadratowa(nX * Pixel);
nY:= nMaxY div 2 - round(Fx / Pixel);
LineTo(nX + nMaxX div 2, nY);
end;
end;
Begin
WczytajWspolczynniki;
Zakres;
Grafika;
Osie;
Podzial;
RysujFunkcje;
repeat until keypressed;
closegraph;
End.