Crtanje

Crtanje

offline
  • Ivo M  Male
  • 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.
offline
  • 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.



offline
  • Ivo M  Male
  • 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.

offline
  • 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);

offline
  • Ivo M  Male
  • 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.

offline
  • 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.

offline
  • Ivo M  Male
  • 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?

offline
  • 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 Smile

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.

offline
  • Ivo M  Male
  • 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.

Ko je trenutno na forumu
 

Ukupno su 559 korisnika na forumu :: 8 registrovanih, 0 sakrivenih i 551 gosta   ::   [ Administrator ] [ Supermoderator ] [ Moderator ] :: Detaljnije

Najviše korisnika na forumu ikad bilo je 3466 - dana 01 Jun 2021 17:07

Korisnici koji su trenutno na forumu:
Korisnici trenutno na forumu: goxin, Karla, Koridor, Krusarac, mackenzie, milenko crazy north, Mixelotti, zlaya011