Novo

Forum kao aplikacija na telefonu

Dodajte forum na početni ekran i koristite ga kao aplikaciju, sa menijem na dnu ekrana.

  • 5 odgovora
  • 3.874 pregleda

Najnovija ↓

Pascal crtanje grafika 25.10.2007. u 19:10 · pre 231 mesec #1
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.
Re: Pascal crtanje grafika 25.10.2007. u 19:29 · pre 231 mesec #2
Radi li sa :
circle(round(x), round(y), 1);

Čemu li ti služi ono petljanje na kraju programa?
Potpis
"The quieter you become, the more you are able to hear."
Blog | PowerCMS
Re: Pascal crtanje grafika 25.10.2007. u 20:21 · pre 231 mesec #3
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.
Re: Pascal crtanje grafika 25.10.2007. u 21:55 · pre 231 mesec #4
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.
Re: Pascal crtanje grafika 26.10.2007. u 00:45 · pre 231 mesec #5
Izvuci initgraph pre glavne petlje i skloni closegraph na sam kraj.
Time ćeš dobiti da ti se ne briše prethodno iscrtano.
Potpis
"The quieter you become, the more you are able to hear."
Blog | PowerCMS
Re: Pascal crtanje grafika 26.10.2007. u 13:46 · pre 231 mesec #6
Još jednom hvala mVeliki.
Radi, a uspio sam i pomoću komande repeat.
Prijavite se da biste odgovorili u ovoj temi.PrijavaRegistracija

Premeštanje teme