Poslao: 25 Okt 2007 19:02
|
offline
- Ivo M
![Male](https://www.mycity.rs/templates/simplified/images2/user-sex.gif)
- Novi MyCity građanin
- Pridružio: 17 Jan 2006
- Poruke: 19
- Gde živiš: Budva
|
U školi sam dobio zadatak od profesora fizike da ispišem program, koji iscrtava harmonijske oscilacije.
Moja skripta izgleda ovako:
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.
[/code]
|
|
|
Registruj se da bi učestvovao u diskusiji. Registrovanim korisnicima se NE prikazuju reklame unutar poruka.
|
|
Poslao: 25 Okt 2007 19:06
|
offline
- bobby
![Male](https://www.mycity.rs/templates/simplified/images2/user-sex.gif)
- Administrator
- Pridružio: 04 Sep 2003
- Poruke: 24135
- Gde živiš: Wien
|
Zadrzi real za x i y, pa ih posle unosa vrednosti u varijable pomnozi sa npr. 100, pa zaokruzi vrednost na cele brojeve, i onda pokusaj to da preneses funkciji circle.
|
|
|
|
Poslao: 25 Okt 2007 20:28
|
offline
- Ivo M
![Male](https://www.mycity.rs/templates/simplified/images2/user-sex.gif)
- Novi MyCity građanin
- Pridružio: 17 Jan 2006
- Poruke: 19
- Gde živiš: Budva
|
Uspio sam da iscrtam kada zadržim varijablu real, a onda kada se upisuju koordinate ispišemo circle(round(x), round(y), 1);
Sada se javlja problem sa petljom na kraju, jer program ne kruži nego iscrta samo jednu tačku.
Profesor je program ispisao valjda u basicu, ako može biti od koristi, evo njegove skripte:
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
On je za petlju iskoristio
128 if t<t0 then goto 100
ali u pascalu ne postoji komanda goto. Kako da je zamijenim, nekom iz pascala.
|
|
|
|
Poslao: 25 Okt 2007 21:54
|
offline
- bobby
![Male](https://www.mycity.rs/templates/simplified/images2/user-sex.gif)
- Administrator
- Pridružio: 04 Sep 2003
- Poruke: 24135
- Gde živiš: Wien
|
A, pa pogresno si iskoristio repeat...until.
Izmedju te dve naredbe treba da ide blok koji se izvrsava u petlji.
Isto vazi i za while...do naredbu.
Znaci, stavi repeat ispred linije X:=x0*sin(2*pi*NI1*T);
|
|
|
|
Poslao: 25 Okt 2007 22:08
|
offline
- Ivo M
![Male](https://www.mycity.rs/templates/simplified/images2/user-sex.gif)
- Novi MyCity građanin
- Pridružio: 17 Jan 2006
- Poruke: 19
- Gde živiš: Budva
|
Nisam baš najbolje razumio, možeš li to da mi umetneš u kod?
U međuvremenu sam pronašao komandu sličnu goto. Kod sada izgleda:
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.
Novi problem je to što mi tačkice prikazuje pojedinačno, a ne zajedno. Odnosno prikaže novu tačku tek kada pritisnem enter.
Sada je glavni problem kako da povežem tačkice.
|
|
|
|
Poslao: 25 Okt 2007 22:49
|
offline
- bobby
![Male](https://www.mycity.rs/templates/simplified/images2/user-sex.gif)
- Administrator
- Pridružio: 04 Sep 2003
- Poruke: 24135
- Gde živiš: Wien
|
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;
repeat
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;
until t>=t0;
END.
|
|
|
|
Poslao: 25 Okt 2007 23:28
|
offline
- Ivo M
![Male](https://www.mycity.rs/templates/simplified/images2/user-sex.gif)
- Novi MyCity građanin
- Pridružio: 17 Jan 2006
- Poruke: 19
- Gde živiš: Budva
|
OK, shvatio sam sada. Hvala.
Ali i dalje imam problem sa povezivanjem tačkica. Na ekranu se prikazuje samo jedna tačkica, pa kad pritisnem enter, prikaže novu, a staru izbriše. Kako da ih povežem?
|
|
|
|
Poslao: 25 Okt 2007 23:55
|
offline
- bobby
![Male](https://www.mycity.rs/templates/simplified/images2/user-sex.gif)
- Administrator
- Pridružio: 04 Sep 2003
- Poruke: 24135
- Gde živiš: Wien
|
Moracu da konsultujem par sajtova, posto Turbo Pascal i njegove unite nisam pipnuo vec vise od 10 godina
Dopuna: 25 Okt 2007 23:55
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;
initgraph(gd, gm, '..\bgi');
repeat
X:=x0*sin(2*pi*NI1*T);
y:=y0*sin(2*pi*NI2*T+fi);
x:=x1+x;
y:=y1+y;
PutPixel(x, y, 1);
if ni1<ni2 then t0:=1/ni1 else t0:=1/ni2;
dt:=t0/10000;
t:=t+dt;
until t>=t0;
closegraph;
END.
|
|
|
|
Poslao: 26 Okt 2007 13:40
|
offline
- Ivo M
![Male](https://www.mycity.rs/templates/simplified/images2/user-sex.gif)
- Novi MyCity građanin
- Pridružio: 17 Jan 2006
- Poruke: 19
- Gde živiš: Budva
|
Veliko hvala boby.
Samo da dodam, kada se stavljaju koordinate, mora da se upiše
round(x), round(y), 1, inače neće da radi.
|
|
|
|