[pascal]równanie sześcienne w trybie graficznym

Odpowiedz Nowy wątek
2006-10-21 10:31
0

A więc mam taki problem:
Mam napisać program, który oblicza mi wartości "y" dla "x" z podanego zakresu, zapisuje wyniki do pliku. To mam zrobione i działa, ale musze do tego dodać jeszcze wykres w trybie graficznym :/ i tu mam problem. Albo wyświetla mi 4 kropki, albo duużo kropek, z których kilka jest na swoim miejscu, tworzy wykres, ale kropki są zbyt od siebie oddalone, i obok wykresu jest duużo różnych niepotrzebnych kropek... pomóżcie coś z tym zrobić:
Tu jest ten algorytm, z którym nie mogę sobie poradzić:

initgraph(karta,tryb,'C:\TP\BGI');
line(320,0,320,640);
line(0,240,640,240);
line(310,10,320,0);
line(330,10,320,0);
line(630,230,640,240);
line(630,250,640,240);
h:=0;
for i:=1 to 16 do begin
j:=h+40;
h:=j;
line(h,235,h,245);
line(315,h,325,h);
end;
for x:=1 to 680 do begin
x:=x-320;
 y:=a*(x*x*x)+b*(x*x)+c*x+d;
 g:=y/100;
 y:=round(g);
 putpixel(x+320,y+240,red);
end;
readkey;
closegraph;

Nie wiem co tam pozmieniać, dzieliłem "y" przez 100, albo inne liczby, ale nie pomagało...
Tu dam cały kod źródłowy, jakby ktoś chciał:

program potegatrzecia;
uses crt,graph;
var karta,tryb,a,b,c,d,e,w,y,i,h,j,k,l,q,x,n: integer;
    g,t:real;
    wynik:text;

begin
clrscr;
Writeln('Podaj parametry funkcji y=ax3+bx2+cx+d');
writeln('Parametry "a, b, c" musza byc rozne od zera ');
repeat
 write('Podaj parametr A: ');read(a);
  if a=0 then writeln('A musi byc rozne od 0, wymysl inna liczbe!');
 until a<>0;
repeat
 write('Podaj parametr B: ');read(b);
  if b=0 then writeln('B musi byc rozne od 0, wymysl inna liczbe!');
 until b<>0;
repeat
 write('Podaj parametr C: ');read(c);
  if c=0 then writeln('C musi byc rozne od 0, wymysl inna liczbe!');
 until c<>0;
write('Podaj parametr D: ');read(d);
writeln('Podaj zakres liczb:');
write('Od ');read(e);write(' Do ');
repeat
readln(w);
if w<e then begin
writeln('Koniec zakresu musi byc wyzszy niz ',e);
writeln('Nie badz taki podaj nowy koniec zakresu!');
end;
until w>e;
karta:=detect;
assign(wynik,'wynik.txt');
rewrite(wynik);
writeln(wynik,'Tablica wynikow dla funkcji "y=',a,'x3+',b,'x2+',c,'x+',d,'".');
writeln(wynik,'Zakres x: od ',e,' do ',w,'.');
for q:=e to w do begin
 y:=a*(q*q*q)+b*(q*q)+c*q+d;
 writeln(wynik,'Dla x=',q,'    y=',y);
end;
close(wynik);
Writeln('Zapisano wyniki w pliku wyniki.txt');
delay(500);
initgraph(karta,tryb,'C:\TP\BGI');
line(320,0,320,640);
line(0,240,640,240);
line(310,10,320,0);
line(330,10,320,0);
line(630,230,640,240);
line(630,250,640,240);
h:=0;
for i:=1 to 16 do begin
j:=h+40;
h:=j;
line(h,235,h,245);
line(315,h,325,h);
end;
for x:=1 to 680 do begin
x:=x-320;
 y:=a*(x*x*x)+b*(x*x)+c*x+d;
 g:=y/100;
 y:=round(g);
 putpixel(x+320,y+240,red);
end;
readkey;
closegraph;
end.

Dzięki za pomoc!

Pozostało 580 znaków

2006-10-21 21:34
0

Bo nie putpixel tylko musisz zastosować MoveTo, LineTo lub DrawPoly, wtedy wykres będzie łamaną


<span style="color: blue">"Kolarstwo to jedna z najtrudniejszych dyscyplin sportu. Nawet najgorszy kolarz jest wciąż wybitnym sportowcem."
s.p. Marco Pantani
</span>

Pozostało 580 znaków

Odpowiedz
Liczba odpowiedzi na stronę

1 użytkowników online, w tym zalogowanych: 0, gości: 1, botów: 0