Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.

Pascal crtanje grafika

[es] :: Pascal / Delphi / Kylix :: Pascal crtanje grafika

[ Pregleda: 2852 | Odgovora: 5 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

Zorzo

Član broj: 29984
Poruke: 149
*.crnagora.net.



Profil

icon Pascal crtanje grafika25.10.2007. u 18:10 - pre 200 meseci
U školi sam dobio zadatak od profesora fizike da ispišem program, koji iscrtava harmonijske oscilacije.
Moja skripta izgleda ovako:


Code:
Program oscilacije;
USES CRT, GRAPH;

VAR

GD, GM: smallint;
 X0, Y0, ni1, ni2, fi, dt, x, y, pi,t0, t:real;
 x1, y1 : integer;


BEGIN
write('unesi amplitudu X (do 100) ');
readln(X0);
write('unesi amplitudu Y (do 100) ');
readln(Y0);
write('unesi frekfrenciju NI1 ');
readln(NI1);
write('unesi frekfrenciju NI2 ');
readln(NI2);
write('unesi pocetnu fazu u stepenima ');
readln(NI2);
pi:=3.14;
FI:=FI*PI/180;
X1:=250;
Y1:=100;
t:=0;
X:=x0*sin(2*pi*NI1*T);
y:=y0*sin(2*pi*NI2*T+fi);
x:=x1+x;
y:=y1+y;
initgraph(gd, gm, '..\bgi');
circle(x, y, 1);
readln;
closegraph;
if ni1<ni2 then t0:=1/ni1  else t0:=1/ni2;
dt:=t0/10000;
t:=t+dt;
if t>t0 then repeat until t=1000;
END.


Već duže pokušavam da provalim, ali ne uspijevam.
Glavni problem su mi varijable. Kada x i y stavim integer, neće da računa, kada stavim real, neće da crta.
 
Odgovor na temu

Miroslav Ćurčić
ex mVeliki
Novi Sad

Član broj: 19034
Poruke: 1118
*.dynamic.sbb.co.yu.



+19 Profil

icon Re: Pascal crtanje grafika25.10.2007. u 18:29 - pre 200 meseci
Radi li sa :
circle(round(x), round(y), 1);

Čemu li ti služi ono petljanje na kraju programa?
"The quieter you become, the more you are able to hear."
Blog | PowerCMS
 
Odgovor na temu

Zorzo

Član broj: 29984
Poruke: 149
213.149.125.*



Profil

icon Re: Pascal crtanje grafika25.10.2007. u 19:21 - pre 200 meseci
Konačno je kompajlirao, bez greške (kada sam stavio round(x) i (y)). Sada kad pokrenem program ubaci uvijek jedno rešenje.
To je jedna tačkica, uvijek na istom mjestu.
Da li pod petljanjem podrazumijevaš "if t>t0 then repeat until t=1000;"?
To je ponavljanje funkcije, da bi se računalo, u zavisnosti od vremena (u datom sekundu).
Naime u programu se unose konstante (amplitude, frekfrencije, početna faza). Kada ih unesemo, program treba da izračuna koordinate za prvi sekund, i da ih na grafiku predstavi tačkom. Nakon toga, računa za drugu sekundu, dobijamo druga rešenja (koordinate), i iscrtava se druga tačka, onda se računa treća sekunda, i tako u krug, dok ne dobijemo grafik.

Profesor je program ispisao valjda u basicu.
On je za petlju iskoristio komandu goto, koje nema u pascalu. Napisao je if t<t0, then goto 100. 100 je red u kome piše X:=x0*sin(2*pi*NI1*T).
Mislim (gotovo sam siguran) da je greška i kod petlje zato što mi postavlja samo jednu tačku, a ne niz (krivulju).



Ako može biti od koristi, evo program koji je on ispisao:
Code:

10     print "unesi amplitude (do 100)";
20     input x0,y0
30     print "unesi frekfrencije";
40     input ni1,ni2
50     print "unesi početnu fazu (u stepenima)";
60     input fi
61     pi:3.14
62     fi=fi*pi/180
64     x1=250 : y1=100
70     t=0
90     cls
100     X=x0*sin(2*pi*NI1*T)
110     y=y0*sin(2*pi*NI2*T+fi)
115     x=x1+x : y=y1+y
120     screen 2 : circle (x,y),0
125     if ni1<ni2 then t0=1/ni1 else t0=1/ni2
126     dt=r0/10000
127     t=dt+t
128     if t<t0 then goto 100
140     end


Dakle, treba da iscrta više tačaka (da se popravi petlja), a rešenje je uvijek isto (mislim da će da se promijeni, kad se ispravi petlja, jer je t=0 u početku, a tek u sledećem sekundu je veće od nule).
Šta predlažete za petlju?

I da, umalo da zaboravim, veliko hvala mVeliki.
 
Odgovor na temu

Zorzo

Član broj: 29984
Poruke: 149
195.66.179.*



Profil

icon Re: Pascal crtanje grafika25.10.2007. u 20:55 - pre 200 meseci
Uspio sam da pronađem komandu sličnu goto (label), koji se postavlja u dijelu koda koji treba ponavljati.
Program konačno ponavlja to što se od njega očekuje, ali ne iscrta kompletnu liniju (krivulju), nego prikazuje svaku tačku pojedinačno. A drugu tačku prikaže tek nakon što pritisnem enter, ali se prethodna briše.

Kod sada izgleda ovako:
Code:

Program fizika;
USES CRT, GRAPH;

VAR

GD, GM: smallint;
X0, Y0, ni1, ni2, fi, dt, x, y, pi,t0, t:real;
 x1, y1 : integer;
LABEL Ponovi;
BEGIN
write('unesi amplitudu X (do 100) ');
readln(X0);
write('unesi amplitudu Y (do 100) ');
readln(Y0);
write('unesi frekfrenciju NI1 ');
readln(NI1);
write('unesi frekfrenciju NI2 ');
readln(NI2);
write('unesi pocetnu fazu u stepenima ');
readln(NI2);
pi:=3.14;
FI:=FI*PI/180;
X1:=250;
Y1:=100;
t:=0;
ponovi:
X:=x0*sin(2*pi*NI1*T);
y:=y0*sin(2*pi*NI2*T+fi);
x:=x1+x;
y:=y1+y;
initgraph(gd, gm, '..\bgi');
circle(round(x), round(y), 1);
closegraph;
if ni1<ni2 then t0:=1/ni1  else t0:=1/ni2;
dt:=t0/10000;
t:=t+dt;
if t<t0 then goto  Ponovi;
END.

Dakle pitanje je kako da povežem tačkice.
 
Odgovor na temu

Miroslav Ćurčić
ex mVeliki
Novi Sad

Član broj: 19034
Poruke: 1118
*.dynamic.sbb.co.yu.



+19 Profil

icon Re: Pascal crtanje grafika25.10.2007. u 23:45 - pre 200 meseci
Izvuci initgraph pre glavne petlje i skloni closegraph na sam kraj.
Time ćeš dobiti da ti se ne briše prethodno iscrtano.
"The quieter you become, the more you are able to hear."
Blog | PowerCMS
 
Odgovor na temu

Zorzo

Član broj: 29984
Poruke: 149
*.crnagora.net.



Profil

icon Re: Pascal crtanje grafika26.10.2007. u 12:46 - pre 200 meseci
Još jednom hvala mVeliki.
Radi, a uspio sam i pomoću komande repeat.
 
Odgovor na temu

[es] :: Pascal / Delphi / Kylix :: Pascal crtanje grafika

[ Pregleda: 2852 | Odgovora: 5 ] > FB > Twit

Postavi temu Odgovori

Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.