rivoluzione pianeti, configurazioni planetarie
pianeta1,2,3,4
program pianeta1; (* rivoluzione di tre pianeti attorno al sole *) (* con velocita decrescente da interno a esterno secondo Keplero 3 *) uses crt,graph; type vet=array[1..800] of byte; var pia1,pia2,pia3:vet; b,c,d, anni,p1,p2,p3:integer; procedure simula; begin writeln('simulazione rivoluzione planetaria'); writeln('tre pianeti a diversa distanza dal sole '); writeln('si muovono con velocita decrescenti con la distanza'); writeln('secondo la terza legge di Keplero'); writeln; writeln('indica numero rivoluzioni pianeta interno :1..2..3....'); readln(anni); writeln('indicare divisori:p1 > p2 > p3..divisori di 360 '); writeln('indicare divisore per pianeta1....es.10..20..30..PROVA 10 '); READLN(P1); WRITELN('indicare divisore per pianeta2....es.5..10.......prova 6 '); readln(p2); writeln('indicare divisore per pianeta3....es.10.15.......prova 3'); readln(p3); writeln('premi return,prego'); readln; clrscr; end; procedure grafica(f:integer); (* attiva pagina grafica*) (* coordinate finestra,colore sfondo e disegno *) var sc,tp:integer; stringa:string; begin sc:=0; (* valore risoluzione 0,1,2,3,4,5,8,9 *) tp:=0; (* valore valido 1 - 0 palette *) stringa:='c:\scheda'; (* indica ove cercare GRAPH *) initgraph(sc,tp,stringa); (* attiva scheda grafica *) setbkcolor(f); (* colore sfondo *) end; procedure testo(x,y:integer;nome:string); (* stampa legenda testo *) begin outtextxy(x,y,nome); end; procedure pausa; (* premere return per proseguire *) var ch:char; begin testo(10,400,'premi return,prego'); ch:=readkey; end; procedure disco; (* disegna dischi pianeti *) begin setfillstyle(1,2); fillellipse(20,20,10,10); getimage(8,8,34,34,pia1); setfillstyle(2,4); fillellipse(200,20,10,10); getimage(188,8,234,34,pia2); setfillstyle(3,5); fillellipse(100,20,10,10); getimage(88,8,134,34,pia3); testo(10,60,'pianeti'); testo(290,170,'sole'); line(300,50,300,400); end; procedure moto; var ch,ax,x,y,r1,r2,r3,s1,c1,s2,c2,s3,c3:integer; rad1,rad2,rad3:real; begin x:=300; y:=200; r1:=100; r2:=130; r3:=160; setfillstyle(1,14); fillellipse(300,200,20,20); while c<=anni*360 do begin rad1:=c*3.14/180; rad2:=b*3.14/180; rad3:=d*3.14/180; s1:=trunc(r1*sin(rad1)); c1:=trunc(r1*cos(rad1)); s2:=trunc(r2*sin(rad2)); c2:=trunc(r2*cos(rad2)); s3:=trunc(r3*sin(rad3)); c3:=trunc(r3*cos(rad3)); putpixel(x+s1,y+c1,2); putimage(x+s1-10,y+c1,pia1,1); putpixel(x+s2-10,y+c2,14); putimage(x+s2-10,y+c2,pia2,1); putpixel(x+s3,y+c3,14); putimage(x+s3-10,y+c3,pia3,1); delay(50); if (c/360=int(c/360)) then testo(10,350,'inizio-fine anno pianeta1'); if (b/360=int(b/360)) then testo(10,360,'inizio-fine anno pianeta2'); if (d/360=int(d/360)) then testo(10,370,'inizio-fine anno pianeta3'); if (c/360=int(c/360)) or (b/360=int(b/360)) or (d/360=int(d/360)) then delay(1000); putimage(x+s1-10,y+c1,pia1,1); putimage(x+s2-10,y+c2,pia2,1); putimage(x+s3-10,y+c3,pia3,1); setcolor(1); testo(10,350,'inizio-fine anno pianeta1'); testo(10,360,'inizio-fine anno pianeta2'); testo(10,370,'inizio-fine anno pianeta3'); setcolor(14); c:=c+p1; b:=b+p2; d:=d+p3; end; end; begin (* programma principale *) clrscr; simula; grafica(1); (* attiva pagina grafica *) disco; c:=0; d:=0; b:=0; moto; pausa; closegraph; end.
program pianeta2; (* spostamento pianeta e sua proiezione rispetto a stelle fisse*) uses crt,graph; type vet=array[1..800] of byte; var pia1:vet; c, anni:integer; procedure simula; begin writeln('simulazione rivoluzione planetaria'); writeln('posizione pianeta interno rispetto a sole e terra '); writeln('rivoluzione e visione prospettica del moto planetario'); writeln('rispetto alle stelle fisse:ipotesi di terra e sole fermi'); writeln; writeln('indica numero rivoluzioni pianeta interno :1..2..3....'); readln(anni); writeln('premi return,prego'); readln; clrscr; end; procedure grafica(f:integer); (* attiva pagina grafica*) (* coordinate finestra,colore sfondo e disegno *) var sc,tp:integer; stringa:string; begin sc:=0; (* valore risoluzione 0,1,2,3,4,5,8,9 *) tp:=0; (* valore valido 1 - 0 palette *) stringa:='c:\scheda'; (* indica ove cercare GRAPH *) initgraph(sc,tp,stringa); (* attiva scheda grafica *) setbkcolor(f); (* colore sfondo *) end; procedure testo(x,y:integer;nome:string); (* stampa legenda testo *) begin outtextxy(x,y,nome); end; procedure pausa; (* premere return per proseguire *) var ch:char; begin testo(10,400,'premi return,prego'); ch:=readkey; end; procedure disco; (* disegna dischi pianeti *) begin setfillstyle(1,2); fillellipse(20,20,10,10); getimage(8,8,34,34,pia1); testo(10,60,'pianeti'); testo(290,170,'sole'); line(300,50,300,400); setfillstyle(2,4); fillellipse(300,400,15,15); (* terra *) testo(320,430,'terra'); testo(10,200,'EST'); testo(500,200,'OVEST'); testo(10,420,'moto diretto :da OVEST verso EST '); testo(10,430,'moto retrogrado:da EST verso OVEST '); testo(150,30,'* * * * * * stelle fisse * * * * * * *'); end; procedure moto; var h,x,y,r1,r2,s1,c1,s2,c2,a,b,d:integer; rad1:real; stringa:string; begin x:=300; y:=200; r1:=100; r2:=135; setfillstyle(1,14); fillellipse(300,200,20,20); for h:=1 to anni do begin for c:=0 to 360 do begin str(c,stringa); testo(10,250,stringa); rad1:=c*3.14/180; s1:=trunc(r1*sin(rad1)); c1:=trunc(r1*cos(rad1)); s2:=trunc(r2*sin(rad1)); c2:=trunc(r2*cos(rad1)); putpixel(x+s1,y+c1,2); putpixel(x+s2,y-100,2); putimage(x+s1-10,y+c1,pia1,1); putimage(x+s2-10,y-120,pia1,1); line(x,y+200,x+s1,y+c1); (* terra pianeta*) line(x,y,x+s1,y+c1); (* sole pianeta *) if (c=70) then testo(350,300,'elongazione ovest:visibile al mattino'); if (c=290) then testo(10,300,'elongazione est:visibile alla sera'); if (c=0) then testo(200,300,'congiunzione inferiore:invisibile'); if (c=180) then testo(200,50,'congiunzione superiore:invisibile'); if (c>290) and (c<=360) then testo(50,10,'moto retrogrado'); if (c>=0) and (c<70) then testo(50,10,'moto retrogrado'); if (c>=70) and (c<=290) then testo(50,20,'moto diretto'); if (c=70) or (c=290) or (c=180) then delay(3000); if (c/360=int(c/360)) then delay(3000); putimage(x+s1-10,y+c1,pia1,1); putimage(x+s2-10,y-120,pia1,1); setcolor(1); line(x,y+200,x+s1,y+c1); line(x,y,x+s1,y+c1); testo(350,300,'elongazione ovest:visibile al mattino'); testo(10,300,'elongazione est:visibile alla sera'); testo(200,300,'congiunzione inferiore:invisibile'); testo(200,50,'congiunzione superiore:invisibile'); testo(50,10,'moto retrogrado'); testo(50,10,'moto retrogrado'); testo(50,20,'moto diretto'); testo(10,250,stringa); setcolor(14); fillellipse(300,200,20,20); line(300,50,300,430); putpixel(x+s1,y+c1,2); end; end; end; begin (* programma principale *) clrscr; simula; grafica(1); (* attiva pagina grafica *) disco; c:=0; moto; pausa; closegraph; end.
program pianeta3; (* spostamento pianeta interno e terra attorno al sole*) (* configurazioni planetarie *) uses crt,graph; type vet=array[1..800] of byte; var pia1,pia2:vet; c,d, anni,sosta,p1,p2:integer; procedure simula; begin writeln('simulazione rivoluzione planetaria'); writeln('posizione pianeta rispetto a sole e terra:configurazioni '); writeln('terra e pianeta entrambi in rivoluzione attorno al sole'); writeln; writeln('si evidenzia,senza commento scritto:'); writeln('congiunzione inferiore......sole......pianeta....terra'); writeln('congiunzione superiore......pianeta...sole.......terra '); writeln('elongazione occidentale.....elongazione orientale'); writeln; writeln('indica numero rivoluzioni 1..2..3......'); readln(anni); anni:=anni*36; (* se c modulo pianeta=10 *) writeln('indica valore per velocita....10=veloce....1000..5000 lento'); readln(sosta); writeln('indicare moduli per pianeta e terra: pianeta > terra..'); write('modulo pianeta 5 10 15 =');readln(p1); repeat write('modulo terra 10 15 20 =');readln(p2); until p2<p1; writeln('premi return,prego'); readln; clrscr; end; procedure grafica(f:integer); (* attiva pagina grafica*) (* coordinate finestra,colore sfondo e disegno *) var sc,tp:integer; stringa:string; begin sc:=0; (* valore risoluzione 0,1,2,3,4,5,8,9 *) tp:=0; (* valore valido 1 - 0 palette *) stringa:='c:\scheda'; (* indica ove cercare GRAPH *) initgraph(sc,tp,stringa); (* attiva scheda grafica *) setbkcolor(f); (* colore sfondo *) end; procedure testo(x,y:integer;nome:string); (* stampa legenda testo *) begin outtextxy(x,y,nome); end; procedure pausa; (* premere return per proseguire *) var ch:char; begin testo(10,400,'premi return,prego'); ch:=readkey; end; procedure disco; (* disegna dischi pianeti *) begin setfillstyle(1,2); fillellipse(20,20,10,10); getimage(8,8,34,34,pia1); testo(10,60,'pianeta'); testo(290,170,'sole'); setfillstyle(2,4); fillellipse(300,20,10,10); (* terra *) getimage(288,8,334,34,pia2); testo(10,420,'moto diretto :da OVEST verso EST '); testo(10,430,'moto retrogrado:da EST verso OVEST '); testo(350,10,'...... stelle fisse ......'); testo(150,10,'terra'); end; procedure moto; var r,ss,cs,ang,h,x,y,r1,r2,s1,c1,s2,c2,a,b:integer; rad,rad1,rad2:real; stringa:string; begin x:=300; y:=200; r1:=100; r2:=150; r:=190; setfillstyle(1,14); fillellipse(300,200,20,20); for b:=0 to 72 do (* stelle fisse *) begin rad:=ang*3.14/180; ss:=trunc(r*sin(rad)); cs:=trunc(r*cos(rad)); putpixel(x+ss,y+cs,15); ang:=ang+5; end; c:=0; d:=0; for h:=1 to anni do (* c:= c+10 modulo pianeta1 *) (* d:=d+5 modulo pianeta2 o terra *) begin str(c,stringa); testo(10,250,stringa); rad1:=c*3.14/180; rad2:=d*3.14/180; s1:=trunc(r1*sin(rad1)); c1:=trunc(r1*cos(rad1)); s2:=trunc(r2*sin(rad2)); c2:=trunc(r2*cos(rad2)); putpixel(x+s1,y+c1,2); putimage(x+s1-10,y+c1,pia1,1); putimage(x+s2-10,y+c2,pia2,1); line(x+s1,y+c1,x+s2,y+c2); (* terra pianeta*) line(x,y,x+s1,y+c1); (* sole pianeta *) line(x,y,x+s2,y+c2); if (h=anni) then delay(5000); delay(sosta); putimage(x+s1-10,y+c1,pia1,1); putimage(x+s2-10,y+c2,pia2,1); setcolor(1); line(x+s1,y+c1,x+s2,y+c2); line(x,y,x+s1,y+c1); line(x,y,x+s2,y+c2); testo(10,250,stringa); setcolor(14); fillellipse(300,200,20,20); putpixel(x+s1,y+c1,14); (* orbita pianeta1 *) putpixel(x+s2-10,y+c2,14); (* orbita terra *) testo(290,170,'sole'); c:=c+p1; d:=d+p2; end; end; begin (* programma principale *) clrscr; simula; grafica(1); (* attiva pagina grafica *) disco; c:=0; d:=0; moto; pausa; closegraph; end.
program pianeta4; (* spostamento pianeta esterno e terra attorno al sole*) (* configurazioni planetarie *) uses crt,graph; type vet=array[1..800] of byte; var pia1,pia2:vet; c,d, anni,sosta,p1,p2:integer; procedure simula; begin writeln('simulazione rivoluzione planetaria:pianeta esterno'); writeln('posizione pianeta rispetto a sole e terra:configurazioni '); writeln('terra e pianeta entrambi in rivoluzione attorno al sole'); writeln; writeln('si evidenzia,senza commento scritto:'); writeln('congiunzione inferiore......sole......terra....pianeta'); writeln('congiunzione superiore......pianeta...sole.......terra '); writeln('elongazione occidentale.....elongazione orientale'); writeln('quadratura occidentale.....quadratura orientale'); writeln; writeln('indica numero rivoluzioni 1..2..3......'); readln(anni); anni:=anni*36; (* se c modulo terra=10 *) writeln('indica valore per velocita....10=veloce....1000..5000 lento'); readln(sosta); writeln('indicare moduli per pianeta e terra: terra > pianeta..'); write('modulo terra 5 10 15 =');readln(p1); repeat write('modulo pianeta 10 15 20 =');readln(p2); until p2<p1; writeln('premi return,prego'); readln; clrscr; end; procedure grafica(f:integer); (* attiva pagina grafica*) (* coordinate finestra,colore sfondo e disegno *) var sc,tp:integer; stringa:string; begin sc:=0; (* valore risoluzione 0,1,2,3,4,5,8,9 *) tp:=0; (* valore valido 1 - 0 palette *) stringa:='c:\scheda'; (* indica ove cercare GRAPH *) initgraph(sc,tp,stringa); (* attiva scheda grafica *) setbkcolor(f); (* colore sfondo *) end; procedure testo(x,y:integer;nome:string); (* stampa legenda testo *) begin outtextxy(x,y,nome); end; procedure pausa; (* premere return per proseguire *) var ch:char; begin testo(10,400,'premi return,prego'); ch:=readkey; end; procedure disco; (* disegna dischi pianeti *) begin setfillstyle(1,4); fillellipse(20,20,10,10); getimage(8,8,34,34,pia2); testo(10,60,'pianeta'); testo(290,170,'sole'); setfillstyle(2,2); fillellipse(300,20,10,10); (* terra *) getimage(288,8,334,34,pia1); testo(10,420,'moto diretto :da OVEST verso EST '); testo(10,430,'moto retrogrado:da EST verso OVEST '); testo(350,10,'...... stelle fisse ......'); testo(150,10,'terra'); end; procedure moto; var r,ss,cs,ang,h,x,y,r1,r2,s1,c1,s2,c2,a,b:integer; rad,rad1,rad2:real; stringa:string; begin x:=300; y:=200; r1:=100; r2:=150; r:=190; setfillstyle(1,14); fillellipse(300,200,20,20); for b:=0 to 72 do (* stelle fisse *) begin rad:=ang*3.14/180; ss:=trunc(r*sin(rad)); cs:=trunc(r*cos(rad)); putpixel(x+ss,y+cs,15); ang:=ang+5; end; c:=0; d:=0; for h:=1 to anni do (* c:= c+10 modulo pianeta1 *) (* d:=d+5 modulo pianeta2 o terra *) begin str(c,stringa); testo(10,250,stringa); rad1:=c*3.14/180; rad2:=d*3.14/180; s1:=trunc(r1*sin(rad1)); c1:=trunc(r1*cos(rad1)); s2:=trunc(r2*sin(rad2)); c2:=trunc(r2*cos(rad2)); putpixel(x+s1,y+c1,2); putimage(x+s1-10,y+c1,pia1,1); putimage(x+s2-10,y+c2,pia2,1); line(x+s1,y+c1,x+s2,y+c2); (* terra pianeta*) line(x,y,x+s1,y+c1); (* sole pianeta *) line(x,y,x+s2,y+c2); if (h=anni) then delay(5000); delay(sosta); putimage(x+s1-10,y+c1,pia1,1); putimage(x+s2-10,y+c2,pia2,1); setcolor(1); line(x+s1,y+c1,x+s2,y+c2); line(x,y,x+s1,y+c1); line(x,y,x+s2,y+c2); testo(10,250,stringa); setcolor(14); fillellipse(300,200,20,20); putpixel(x+s1,y+c1,14); (* orbita pianeta1 *) putpixel(x+s2-10,y+c2,14); (* orbita terra *) testo(290,170,'sole'); c:=c+p1; d:=d+p2; end; end; begin (* programma principale *) clrscr; simula; grafica(1); (* attiva pagina grafica *) disco; c:=0; d:=0; moto; pausa; closegraph; end.