Thomas1988 Poziom 15

Joined: 25 May 2005 Posts: 232 Location: Gniezno/Poznań
|
#1
14 Apr 2007 20:38 Rysowanie wykresu funkcji |
|
|
|
| Code: |
Program Miejsca_zerowe_funkcji_Metoda_naturalna;
uses crt, graph;
var karta, tryb, poz:integer;
x, xpocz, xkon, y, Dx, sk:real;
xS, yS:string;
function f (x: real): real;
begin
f :=x/2-sin(x);
end;
begin
karta:=detect; initGraph(karta,tryb,'');
xpocz:=-10; xkon:=8; Dx:=0.0001; sk:=(xkon-xpocz)/640;
line(0,240,639,240); line(round(-xpocz/sk),0,round(-xpocz/sk),479);
setColor(lightRed);
x:=xpocz;
repeat
x:=x+Dx;
y:=f(x);
if abs(240-y/sk)<480 then putPixel(round((x-xpocz)/sk),round(240-y/sk),yellow);
if abs(y)<1e-5 then
begin
str(x:14:10,xS); str(y:14:10,yS);
outTextXY(0,poz*10,'x ='+xS+', f(x) ='+yS);
fillEllipse(round((x-xpocz)/sk),round(240-y/sk),3,3);
poz:=poz+1;
end;
if keyPressed then exit;
until x>xkon;
readLn;
end.
|
Jak to przerobić żeby rysowało wykres funkcji kwadratowej w programie freepascla prosze o pomoc :D
|
|
spros Poziom 14

Joined: 25 Jun 2003 Posts: 187 Location: Kielce/Krakow
|
#5
26 Apr 2007 13:44 Re: Rysowanie wykresu funkcji PILNE !! |
|
|
|
1)
przy okazji dobralbym jakas sensowna wartosc Dx.
obecnie na 640 punktach jest proba rysowania cos ze 200 tys punktow. rozumiem ze to po to zeby zachowac ciaglosc przebiegu. a nie lepiej 639 lini?
2)
x:=x+Dx; to wszystko przez to sumowanie, bo Dx = 0.0001 a taka liczba nie za bardzo ma rozwiniecie binarne.
lepiej x wyznaczac jako xpocz + ilosc krokow * Dx
3) jesli chodzi o ten krok Dx i epsilon wyznaczania miejsc zerowych. moze sie okazac ze zlapie kilka punktow. np dla -0,9999, -1, -1,0001 i co wtedy? kilka razy narysuje tekst i kolo?
a moze mocniejszy nieco warunek i sprawdzic zmiane znaku wartosci funkcji? ale pozostanie problem z jednym miejscem zerowym.
coz dobrze ze to nie moj program :D
|
|