Witam
Mam do zrobienia program w Pascalu, który narysuje wykres funkcji dla podanego zakresu argumentów.
Napisałem coś takiego:
program
prostokat;
uses
graph,crt;
var
gd,gm:integer;
x_max, x_min, y_max, y_min, licznik, roznica, przelicznik, roznica_x, roznica_y:real;
procedure uklad_wspolrzednych;
begin
MoveTo(GetMaxX div 2, GetMaxY div 2);
LineRel(GetMaxX div 2-40,0);
LineRel(-5, 5);
MoveRel(5, -5);
LineRel(-5, -5);
MoveRel(5, 5);
LineRel(-(GetMaxX div 2-40)*2,0);
MoveTo(GetMaxX div 2, GetMaxY div 2);
LineRel(0, GetMaxY div 2-20);
LineRel(0,-(GetMaxY div 2-20)*2);
LineRel(-5, 5);
MoveRel(5, -5);
LineRel(5, 5);
end;
function funkcja(x:real):real;
begin
funkcja:=sin(x);
end;
begin
clrscr;
writeln('Podaj definicje funkcji');
write('Argument najmniejszy='); readln(x_min);
write('Argument najwiekszy='); readln(x_max);
y_min:=funkcja(x_min);
licznik:=x_min;
while licznik<x_max do begin
if funkcja(licznik) < y_min then y_min:=funkcja(licznik);
licznik:=licznik+0.01;
end;
y_max:=funkcja(x_min);
licznik:=x_min;
while licznik<x_max do begin
if funkcja(licznik) > y_max then y_max:=funkcja(licznik);
licznik:=licznik+0.01;
end;
roznica_y:=y_max-y_min;
if (x_max>0) and (x_min>0) then roznica_x:=x_max else
if (x_max<0) and (x_min<0) then roznica_x:=abs(x_min) else
roznica_x:=(x_max-x_min);
if roznica_x>roznica_y then roznica:=roznica_x else roznica:=roznica_y;
DetectGraph(gd,gm);
InitGraph(gd,gm, 'c:\progra~1\tp\bgi');
przelicznik:=(GetMaxX-40)/2/roznica;
uklad_wspolrzednych;
licznik:=x_min;
MoveTo((GetMaxX div 2)+round(przelicznik), (GetMaxY div 2));
LineRel(0,15); LineRel(0,-30); SetTextStyle(3, 0, 2); MoveRel(-5,-30); OutText('1');
while licznik<x_max do begin
PutPixel((GetMaxX div 2)+round(licznik*przelicznik),(GetMaxY div 2)-round(funkcja(licznik)*przelicznik), green);
licznik:=licznik+0.0001;
end;
repeat until KeyPressed;
CloseGraph;
end.
Program niby działa, ale wymaga jeszcze kilku poprawek
- Co zrobić, aby wzór funkcji do narywowania wykresu wpisywać po uruchomieniu programu. Chodzi mi o coś takiego, że program wyświetli:
"Podaj wzór funkcji
f(x)="
i będzie tu można wpisać np. "sin(x)", "2x", "xx" itd. - Program obecnie nie rysuje wykresów dla funkcji 1/x, 2/x, 3/x itd. w przedziale od wartości ujemnej do dodatniej. Wpisanie do funkcji "if x=0 then funkcja(x):=0" nic nie daje. Jak można naprawić ten błąd?
Pozdrawiam