moto della luna
lunare2,3,4,5,6,7,8,9
program lunare2; (* su disco 65,dispensa 49 \tu56\lunare2.mar *) (* variante di lunare1...zona sotto orizzonte *) (* provare a cambiare sc,tp=0,1,2,3 per scambio colore e scala *) (* fasi lunari con sole e luna mobili *) (* indicazione rotazione in gradi *) uses crt,graph; type vet=array[1..800] of byte; var sole,lunan,lunap,pquarto,uquarto:vet; tempo,orbita:integer; ore:string; procedure simula; begin writeln('simulazione alternanza fasi lunari'); writeln('moto apparente del sole e della luna :est---> ovest'); writeln('----------------------------------------------'); writeln('si visualizzano i disegni :'); writeln('terra con orizzonte ,EST,OVEST,al centro '); writeln('luna nuova,primo quarto,luna piena,ultimo quarto,sole'); writeln('------------------------------------------------'); writeln('si indica per ogni fase:'); writeln('ora del sorgere,culminazione,tramonto'); writeln; writeln('scrivi valore per velocita rotazione '); writeln('1=molto veloce....500=molto lento....prova 1'); readln(tempo); writeln('scrivi numero rotazioni per orizzonte terrestre'); writeln('1..2..3.:prova 1...'); readln(orbita); orbita:=orbita*360; (* rotazioni in gradi *) end; procedure grafica(f:integer); (* attiva pagina grafica*) (* coordinate finestra,colore sfondo e disegno *) var sc,tp:integer; stringa:string; begin sc:=2; (* 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 pausa; (* premere return per proseguire *) var ch:char; begin ch:=readkey; end; procedure testo(x,y:integer;nome:string); (* stampa legenda testo *) begin outtextxy(x,y,nome); end; procedure moto(rx,ry,dg:integer;lunad,soled:vet;ora:string);(* orbite *) var a,s,c,s1,c1:integer; rad,rad1:real; stringa:string; begin for a:=0 to orbita do begin str(a,stringa); (* stampa valore in gradi *) setwritemode(1); setcolor(2); outtextxy(20,170,stringa); setcolor(1); if a=90 then testo(2,10,'fase.......sorge..culmina..tramonta'); if a=90 then setcolor(3); if a=90 then testo(2,20,ora); if a=180 then setcolor(2); if a=180 then testo(2,20,ora); if a=270 then setcolor(3); if a=270 then testo(2,20,ora); if a=360 then setcolor(2); if a=360 then testo(2,20,ora); rad:=a*3.14/180; rad1:=(a+dg)*3.14/180; s:=trunc(-rx*sin(rad)); c:=trunc(ry*cos(rad)); s1:=trunc(-rx*sin(rad1)); c1:=trunc(ry*cos(rad1)); setcolor(2); setwritemode(1); setlinestyle(0,0,3); putimage(150+s,100+c,lunad,1); putimage(150+s1,100+c1,soled,1); delay(tempo); (* pausa rotazione *) setcolor(0); (* cancella valore in gradi *) outtextxy(20,170,stringa); putimage(150+s,100+c,lunad,1); (* cancella disco *) putimage(150+s1,100+c1,soled,1); end; outtextxy(2,20,ora); end; begin (* programma principale *) clrscr; simula; grafica(1); (* attiva pagina grafica *) setfillstyle(2,14); fillellipse(300,20,12,10); getimage(288,8,314,34,sole); setfillstyle(1,1); fillellipse(20,20,12,10); getimage(8,8,34,34,lunap); getimage(20,8,34,34,pquarto); getimage(8,8,20,34,uquarto); setfillstyle(1,0); fillellipse(20,160,12,10); getimage(8,148,34,194,lunan); setfillstyle(1,2); setcolor(2); fillellipse(150,112,16,14); (* terra *) setcolor(3); setfillstyle(1,0); (* cancella modello *) setcolor(0); sector(20,20,0,360,15,15); sector(20,160,0,360,15,15); sector(300,20,0,360,15,15); setcolor(2); setfillstyle(1,1); (* zona sotto orizzonte *) bar(1,110,319,199); testo(10,90,'est'); testo(270,90,'ovest'); testo(120,130,'meridiano'); line(1,110,319,110); (* orizzonte terra fisso *) line(150,100,150,70); (* meridiano *) ore:='novilunio.....6........12.......18'; moto(100,100,0,lunan,sole,ore); (* raggi,fase,dischi *) (* pausa;attivabile *) (* novilunio *) ore:='p quarto.....12........18.......24'; moto(100,100,90,pquarto,sole,ore); (* primo quarto *) (* pausa; *) ore:='plenilunio...18........24........6'; moto(100,100,180,sole,lunap,ore); (* plenilunio *) (* pausa; *) ore:='u quarto.....24.........6.......12'; moto(100,100,270,uquarto,sole,ore); (* ultimo quarto*) pausa; end.
program lunare3; (* su disco 65 dispensa 49 \tu56\lunare3.mar *) (* fasi lunari immobili con terra rotante *) (* indicazione rotazione in gradi *) (* indicazione ora solare *) uses crt,graph; type vet=array[1..800] of byte; var lunan,lunap,pquarto,uquarto:vet; sosta,tempo,orbita:integer; ore:string; procedure simula; begin writeln('simulazione alternanza fasi lunari'); writeln('rotazione orizzonte della terra e osservatore '); writeln('----------------------------------------------'); writeln('si visualizzano i disegni :'); writeln('raggi solari sulla destra'); writeln('terra con orizzonte rotante,al centro '); writeln('luna nuova,primo quarto,luna piena,ultimo quarto'); writeln('------------------------------------------------'); writeln('si indica per ogni fase:'); writeln('ora del sorgere,culminazione,tramonto'); writeln; writeln('scrivi valore per velocita rotazione '); writeln('1=molto veloce....500=molto lento....prova 200'); readln(tempo); writeln('scrivi numero rotazioni per orizzonte terrestre'); writeln('1..2..3..............................prova 1 '); readln(orbita); writeln('scrivi numero per sosta punti speciali '); writeln('1000...2000....5000..................prova 2000'); readln(sosta); orbita:=90+orbita*360; (* rotazioni in gradi *) end; procedure grafica(f:integer); (* attiva pagina grafica*) (* coordinate finestra,colore sfondo e disegno *) var sc,tp:integer; stringa:string; begin sc:=2; (* 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 *) rectangle(1,1,319,199); setbkcolor(f); (* colore sfondo *) end; procedure pausa; (* premere return per proseguire *) var ch:char; begin ch:=readkey; end; procedure testo(x,y:integer;nome:string); (* stampa legenda testo *) begin outtextxy(x,y,nome); end; procedure sole; (* raggi solari paralleli *) var a,b:integer; begin b:=1; setcolor(3); for a:=1 to 40 do begin line(300,b,319,b); b:=b+5; end; settextstyle(1,1,1); setcolor(2); outtextxy(300,40,'raggi solari'); end; procedure moto(x,y:integer;m:word;disco:vet;ora:string); var a,s,c,s1,c1,p2:integer; (* rotazione orizzonte terrestre *) rad,rad1:real; stringa,t1:string; begin putimage(x,y,disco,m); for a:=90 to orbita do begin str(a-90,stringa); (* stampa valore in gradi *) setwritemode(1); setcolor(2); outtextxy(20,170,stringa); if (a=90) then t1:='6'; (* orario solare *) if (a=180) then t1:='12'; if (a=270) then t1:='18'; if (a=360) then t1:='24'; if (a=450) then t1:='6'; outtextxy(260,170,t1); outtextxy(240,160,'ora solare'); if (a=90) or (a=180) or (a=270) or (a=360) or (a=450) then p2:=sosta; setcolor(1); if a=90 then testo(2,10,'fase.......sorge..culmina...tramonta'); if a=90 then setcolor(3); if a=90 then testo(2,20,ora); if a=180 then setcolor(2); if a=180 then testo(2,20,ora); if a=270 then setcolor(3); if a=270 then testo(2,20,ora); if a=360 then setcolor(2); if a=360 then testo(2,20,ora); rad:=a*3.14/180; rad1:=(a+90)*3.14/180; s:=trunc(30*sin(rad)); c:=trunc(30*cos(rad)); s1:=trunc(25*sin(rad1)); c1:=trunc(25*cos(rad1)); setcolor(2); setwritemode(1); setlinestyle(0,0,3); line(150-s,112-c,150+s,112+c); (* orizzonte *) line(150,112,150-s1,112-c1); (* osservatore *) delay(tempo); (* pausa rotazione terra *) delay(p2); (* pausa punti speciali *) line(150-s,112-c,150+s,112+c); line(150,112,150-s1,112-c1); setcolor(0); (* cancella valore in gradi *) outtextxy(20,170,stringa); outtextxy(260,170,t1); p2:=0; end; outtextxy(2,20,ora); (* cancella scritta *) putimage(x,y,disco,1); (* cancella disco*) end; begin (* programma principale *) clrscr; simula; grafica(1); (* attiva pagina grafica *) setfillstyle(1,1); fillellipse(20,20,12,10); getimage(8,8,34,34,lunap); getimage(20,8,34,34,pquarto); setfillstyle(1,0); fillellipse(20,160,12,10); getimage(8,148,34,194,lunan); setfillstyle(1,2); setcolor(2); fillellipse(150,112,16,14); (* terra *) testo(2,180,'la terra ruota da ovest verso est'); setcolor(3); sole; setfillstyle(1,0); (* cancella modello *) setcolor(0); sector(20,20,0,360,15,15); sector(20,160,0,360,15,15); pausa; setcolor(2); settextstyle(0,0,1); setcolor(3); ore:='novilunio......6......12......18'; moto(250,100,1,lunan,ore); ore:='p quarto......12......18......24'; moto(150,50,0,pquarto,ore); ore:='plenilunio....18......24.......6'; moto(50,100,0,lunap,ore); ore:='u quarto......24.......6......12'; moto(150,150,0,pquarto,ore); pausa; end.
program lunare4; (* su disco 65 dispensa 49 \tu56\lunare4.mar *) (* moto diurno del sole e della luna*) (* novilunio,quadratura,plenilunio *) uses crt,graph; type vet=array[1..800] of byte; var sole,lunan,lunap,pquarto,uquarto:vet; luogo1,luogo2,culmina:string; t,orbite:integer; procedure simula; (* introduzione a programma *) begin writeln('simulazione moto diurno del sole e della luna'); writeln('novilunio,quadratura,plenilunio '); writeln('---------------------------------------------'); writeln('premere tasto PAUSE per fermare rotazione '); writeln('premere tasto RETURN per riprendere rotazione'); writeln('---------------------------------------------'); writeln('indica velocita moto solare '); writeln('numero 1 =moto rapido '); writeln('numero 100 =moto lento '); writeln('prova prima con 1 e poi altri valori...10..20..'); readln(t); writeln('indicare numero rotazioni :1,2,3.....prova 1 '); readln(orbite); orbite:=orbite*360; clrscr; end; procedure fine; (* fine e ritorno a pascal *) begin closegraph; exit; end; procedure grafica(x1,y1,x2,y2,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 *) rectangle(x1,y1,x2,y2); (* cornice area grafica *) setbkcolor(f); (* colore sfondo *) end; procedure pausa; (* premere return per proseguire *) var ch:char; begin ch:=readkey; end; procedure testo(x,y:integer;nome:string); (* stampa legenda testo *) begin outtextxy(x,y,nome); end; procedure moto(r1,r2,g3,p1,q1,q2,cu:integer;disco1,disco2:vet;luogo1,luogo2:string); (* raggi r1,r2,q1,q2,gradi g3,figura...animazione figura*) var m,s1,c1,s2,c2:integer; rad,rad1,s,c:real; begin for m:=0 to orbite do begin rad:=m*3.14/180; rad1:=(m+g3)*3.14/180; s:=r1*sin(rad); (* disco1 *) c:=r2*cos(rad); s1:=trunc(s); c1:=trunc(c); s2:=trunc(q1*sin(rad1));(* disco2 *) c2:=trunc(q2*cos(rad1)); setwritemode(0); putimage(300+s1,200+c1,disco1,1); (* rotazione disco1 pieno singolo *) putimage(300+s2,200+c2,disco2,1); (* rotazione disco2 *) putimage(300+s1,200+c1,disco1,0); putimage(300+s2,200+c2,disco2,0); delay(t); if m=90 then outtextxy(20,p1,luogo1); if m=270 then outtextxy(480,p1,luogo2); if m=180 then outtextxy(270,cu,culmina); end; delay(500); putimage(300+s1,200+c1,disco1,1); (* cancella disco1 tramonto *) putimage(300+s2,200+c2,disco2,1); (* cancella disco 2 *) end; procedure costante; (* disegno e testo fisso *) begin setfillstyle(1,4); (* tratto e colore terra *) bar(290,250,310,200); (* terra *) setfillstyle(1,2); (* orizzonte terra *) fillellipse(300,250,40,40); line(1,210,650,210); testo(40,80,'sole'); testo(550,80,'luna'); setcolor(15); testo(250,240,'orizzonte terra'); setcolor(4); testo(270,220,'MERIDIANO'); setcolor(2); testo(210,220,'EST'); testo(390,220,'OVEST'); setcolor(15); testo(20,470,'premere return per proseguire'); setfillstyle(1,14); fillellipse(20,20,10,10); (* sole *) getimage(5,5,35,35,sole); (* vettore sole *) setfillstyle(1,15); (* luna piena*) fillellipse(500,20,10,10); getimage(485,5,515,35,lunap); setfillstyle(1,1); (* luna nuova *) fillellipse(450,20,10,10); getimage(435,5,465,35,lunan); setlinestyle(4,0,1); (* per falce luna *) setfillstyle(1,2); (* primo quarto *) sector(600,20,0,360,10,10); setfillstyle(1,1); sector(600,20,270,90,10,10); getimage(585,5,615,35,pquarto); setfillstyle(1,1); (* ultimo quarto *) sector(560,20,0,360,10,10); setfillstyle(1,2); sector(560,20,270,90,10,10); getimage(545,5,585,35,uquarto); end; procedure programma; (* contiene parte principale *) procedure scelta; (* opzione fine o riprova *) var ch:char; begin (* textmode(1);*) restorecrtmode; writeln('per rivedere,premi S,per finire premi N'); readln(ch); ch:=upcase(ch); if ch='S' then programma else fine end; begin clrscr; simula; (* introduzione a programma *) grafica(1,1,639,470,1); (* attiva pagina grafica *) costante; (* disegno sfondo fisso *) setcolor(5); testo(290,450,'LA LUNA'); setcolor(15); testo(270,290,'novilunio'); luogo1:='sorge alle 6'; luogo2:='tramonta alle 18'; culmina:='culmina alle 12'; moto(-280,190,0,400,-250,160,150,sole,lunan,luogo1,luogo2); (* animazione *) pausa; setcolor(4); testo(270,300,'primo quarto'); luogo1:='sorge alle 12'; luogo2:='tramonta alle 24 '; culmina:='culmina alle 18'; moto(-280,190,90,410,250,-160,160,sole,pquarto,luogo1,luogo2); pausa; setcolor(5); testo(270,310,'plenilunio'); luogo1:='sorge alle 18'; luogo2:='tramonta alle 6'; culmina:='culmina alle 24'; moto(-250,190,180,420,-250,160,170,lunap,sole,luogo1,luogo2); pausa; setcolor(2); testo(270,320,'ultimo quarto'); luogo1:='sorge alle 24'; luogo2:='tramonta alle 12'; culmina:='culmina alle 6'; moto(-250,190,90,430,250,-160,180,uquarto,sole,luogo1,luogo2); pausa; scelta; (* opzione fine o rivedere *) end; begin programma; (* programma principale *) end.
program lunare5; (* su disco 65 dispensa 49 \tu56\lunare5.mar *) (* moto diurno del sole e della luna*) (* novilunio,quadratura,plenilunio *) (* variante di lunare4 con stile diverso testo *) uses crt,graph; type vet=array[1..800] of byte; var sole,lunan,lunap,pquarto,uquarto:vet; luogo1,luogo2,culmina:string; t,orbite,k:integer; procedure simula; (* introduzione a programma *) begin writeln('simulazione moto diurno del sole e della luna'); writeln('novilunio,quadratura,plenilunio '); writeln('---------------------------------------------'); writeln('premere tasto PAUSE per fermare rotazione '); writeln('premere tasto RETURN per riprendere rotazione'); writeln('---------------------------------------------'); writeln('indica velocita moto solare '); writeln('numero 1 =moto rapido '); writeln('numero 100 =moto lento '); writeln('prova prima con 1 e poi altri valori...10..20..'); readln(t); writeln('indicare numero rotazioni in gradi:360,720,1080..'); readln(orbite); clrscr; end; procedure fine; (* fine e ritorno a pascal *) begin exit; end; procedure grafica(x1,y1,x2,y2,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 *) rectangle(x1,y1,x2,y2); (* cornice area grafica *) setbkcolor(f); (* colore sfondo *) end; procedure pausa; (* premere return per proseguire *) var ch:char; begin ch:=readkey; end; procedure testo(x,y:integer;nome:string); (* stampa legenda testo *) begin outtextxy(x,y,nome); end; procedure moto(r1,r2,g3,p1,q1,q2,cu:integer;disco1,disco2:vet;luogo1,luogo2:string); (* raggi r1,r2,q1,q2,gradi g3,figura...animazione figura*) var m,s1,c1,s2,c2:integer; rad,rad1,s,c:real; stringa:string; begin for m:=0 to orbite do begin rad:=m*3.14/180; rad1:=(m+g3)*3.14/180; s:=r1*sin(rad); (* disco1 *) c:=r2*cos(rad); s1:=trunc(s); c1:=trunc(c); s2:=trunc(q1*sin(rad1));(* disco2 *) c2:=trunc(q2*cos(rad1)); settextstyle(1,0,2); setwritemode(0); putimage(300+s1,200+c1,disco1,1); (* rotazione disco1 pieno singolo *) putimage(300+s2,200+c2,disco2,1); (* rotazione disco2 *) putimage(300+s1,200+c1,disco1,0); putimage(300+s2,200+c2,disco2,0); delay(t); if m=90 then outtextxy(20,p1,luogo1); if m=270 then outtextxy(470,p1,luogo2); if m=180 then outtextxy(270,cu,culmina); end; delay(500); putimage(300+s1,200+c1,disco1,1); (* cancella disco1 tramonto *) putimage(300+s2,200+c2,disco2,1); (* cancella disco 2 *) end; procedure costante; (* disegno e testo fisso *) begin setfillstyle(1,4); (* tratto e colore terra *) bar(290,250,310,200); (* terra *) setfillstyle(1,2); (* orizzonte terra *) fillellipse(300,250,40,40); line(1,210,650,210); testo(40,80,'sole'); testo(550,80,'luna'); setcolor(15); testo(250,240,'orizzonte terra'); setcolor(4); testo(270,220,'MERIDIANO'); setcolor(2); testo(210,220,'EST'); testo(390,220,'OVEST'); setcolor(15); testo(20,470,'premere return per proseguire'); setfillstyle(1,14); fillellipse(20,20,10,10); (* sole *) getimage(5,5,35,35,sole); (* vettore sole *) setfillstyle(1,15); (* luna piena*) fillellipse(500,20,10,10); getimage(485,5,515,35,lunap); setfillstyle(1,1); (* luna nuova *) fillellipse(450,20,10,10); getimage(435,5,465,35,lunan); setlinestyle(4,0,1); (* per falce luna *) setfillstyle(1,2); (* primo quarto *) sector(600,20,0,360,10,10); setfillstyle(1,1); sector(600,20,270,90,10,10); getimage(585,5,615,35,pquarto); setfillstyle(1,1); (* ultimo quarto *) sector(560,20,0,360,10,10); setfillstyle(1,2); sector(560,20,270,90,10,10); getimage(545,5,585,35,uquarto); end; procedure programma; (* contiene parte principale *) procedure scelta; (* opzione fine o riprova *) var ch:char; begin restorecrtmode; writeln('per rivedere,premi S,per finire premi N'); readln(ch); ch:=upcase(ch); if ch='S' then programma else fine end; begin clrscr; simula; (* introduzione a programma *) grafica(1,1,639,470,1); (* attiva pagina grafica *) costante; (* disegno sfondo fisso *) setcolor(5); testo(290,450,'LA LUNA'); setcolor(15); testo(270,270,'novilunio'); luogo1:='sorge alle 6'; luogo2:='tramonta alle 18'; culmina:='culmina alle 12'; moto(-280,190,0,405,-250,160,130,sole,lunan,luogo1,luogo2); (* animazione *) pausa; setcolor(4); testo(270,285,'primo quarto'); luogo1:='sorge alle 12'; luogo2:='tramonta alle 24 '; culmina:='culmina alle 18'; moto(-280,190,90,420,-250,160,145,pquarto,sole,luogo1,luogo2); pausa; setcolor(5); testo(270,305,'plenilunio'); luogo1:='sorge alle 18'; luogo2:='tramonta alle 6'; culmina:='culmina alle 24'; moto(-250,190,180,435,-250,160,160,lunap,sole,luogo1,luogo2); pausa; setcolor(2); testo(270,320,'ultimo quarto'); luogo1:='sorge alle 24'; luogo2:='tramonta alle 12'; culmina:='culmina alle 6'; moto(-250,190,90,450,250,-160,175,uquarto,sole,luogo1,luogo2); pausa; scelta; (* opzione fine o rivedere *) end; begin programma; (* programma principale *) end.
program lunare6; (* su disco 65 dispensa 49 \tu56\lunare6.mar *) (* fasi lunari immobili con terra rotante *) (* indicazione rotazione in gradi *) uses crt,graph; type vet=array[1..800] of byte; var lunan,lunap,pquarto,uquarto:vet; tempo,orbita:integer; procedure simula; begin writeln('simulazione alternanza fasi lunari'); writeln('rotazione orizzonte della terra e osservatore '); writeln('----------------------------------------------'); writeln('si visualizzano i disegni :'); writeln('raggi solari sulla destra'); writeln('terra con orizzonte rotante,al centro '); writeln('luna nuova,primo quarto,luna piena,ultimo quarto'); writeln('------------------------------------------------'); writeln('si indica per ogni fase:'); writeln('ora del sorgere,culminazione,tramonto'); writeln; writeln('scrivi valore per velocita rotazione '); writeln('1=molto veloce....500=molto lento....prova 200'); readln(tempo); writeln('scrivi numero rotazioni per orizzonte terrestre'); writeln('1..2..3.'); readln(orbita); orbita:=90+orbita*360; (* rotazioni in gradi *) end; procedure grafica(f:integer); (* attiva pagina grafica*) (* coordinate finestra,colore sfondo e disegno *) var sc,tp:integer; stringa:string; begin sc:=1; (* valore risoluzione 0,1,2,3,4,5,8,9 *) tp:=0; (* valore valido 1 - 0 palette *) stringa:='c:\scheda'; (*ica ove cercare GRAPH *) initgraph(sc,tp,stringa); (* attiva scheda grafica *) rectangle(1,1,319,199); setbkcolor(f); (* colore sfondo *) end; procedure pausa; (* premere return per proseguire *) var ch:char; begin ch:=readkey; end; procedure testo(x,y:integer;nome:string); (* stampa legenda testo *) begin outtextxy(x,y,nome); end; procedure sole; (* raggi solari paralleli *) var a,b:integer; begin b:=1; setcolor(3); for a:=1 to 40 do begin line(300,b,319,b); b:=b+5; end; settextstyle(1,1,1); setcolor(2); outtextxy(300,40,'raggi solari'); end; procedure moto; (* rotazione orizzonte terrestre *) var a,s,c,s1,c1:integer; rad,rad1:real; stringa:string; begin for a:=90 to orbita do begin str(a-90,stringa); (* stampa valore in gradi *) setwritemode(1); setcolor(2); outtextxy(20,170,stringa); setcolor(1); if a=90 then testo(2,10,'fase.......sorge..culmina..tramonta'); if a=90 then setcolor(3); if a=90 then testo(2,20,'novilunio: 6 12 18'); if a=180 then setcolor(2); if a=180 then testo(2,30,'1 quarto: 12 18 24'); if a=270 then setcolor(3); if a=270 then testo(2,40,'plenilunio: 18 24 6'); if a=360 then setcolor(2); if a=360 then testo(2,50,'2 quarto: 24 6 12'); rad:=a*3.14/180; rad1:=(a+90)*3.14/180; s:=trunc(30*sin(rad)); c:=trunc(30*cos(rad)); s1:=trunc(25*sin(rad1)); c1:=trunc(25*cos(rad1)); setcolor(2); setwritemode(1); setlinestyle(0,0,3); line(150-s,112-c,150+s,112+c); (* orizzonte *) line(150,112,150-s1,112-c1); (* osservatore *) delay(tempo); (* pausa rotazione terra *) line(150-s,112-c,150+s,112+c); line(150,112,150-s1,112-c1); setcolor(0); (* cancella valore in gradi *) outtextxy(20,170,stringa); end; end; begin (* programma principale *) clrscr; simula; grafica(1); (* attiva pagina grafica *) setfillstyle(1,1); fillellipse(20,20,12,10); getimage(8,8,34,34,lunap); putimage(50,100,lunap,0); (* lunapiena *) getimage(20,8,34,34,pquarto); putimage(150,50,pquarto,0); (* primoquarto *) putimage(150,150,pquarto,0); (* ultimoquarto *) setfillstyle(1,0); fillellipse(20,160,12,10); getimage(8,148,34,194,lunan); putimage(250,100,lunan,1); (* lunanuova *) setfillstyle(1,2); setcolor(2); fillellipse(150,112,16,14); (* terra *) setcolor(3); sole; setfillstyle(1,0); (* cancella modello *) setcolor(0); sector(20,20,0,360,15,15); sector(20,160,0,360,15,15); pausa; setcolor(2); settextstyle(0,0,1); testo(130,70,'primo quarto'); testo(130,180,'ultimo quarto'); setcolor(3); testo(10,130,'plenilunio'); testo(230,130,'novilunio'); pausa; moto; pausa; end.
program lunare7; (* su disco 65 dispensa 49 \tu56\lunare7.mar *) (* fasi lunari fisse e posizione terra luna sole *) uses crt,graph; 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 pausa; (* premere return per proseguire *) var ch:char; begin ch:=readkey; end; procedure testo(x,y:integer;nome:string); (* stampa legenda testo *) begin outtextxy(x,y,nome); end; begin (* programma principale *) clrscr; grafica(1); (* attiva pagina grafica *) setfillstyle(2,14); (* disegna sole *) fillellipse(600,200,30,30); setfillstyle(1,2); (* disegna terra verde *) fillellipse(300,200,30,30); fillellipse(400,200,20,20); (* luna nuova *) fillellipse(300,300,20,20); (* ultimoquarto *) fillellipse(300,100,20,20); (* lunapiena *) fillellipse(200,200,20,20); (* primo quarto *) setfillstyle(1,1); sector(400,200,90,270,20,20); (* luna nuova *) sector(300,300,90,270,20,20); sector(300,100,90,270,20,20); sector(200,200,90,270,20,20); pausa; setfillstyle(1,2); fillellipse(450,200,20,20); (* luna nuova *) fillellipse(300,350,20,20); (* ultimoquarto *) fillellipse(150,200,20,20); (* lunapiena *) fillellipse(300,50,20,20); (* primo quarto *) sector(150,200,0,360,20,20); setcolor(1); setfillstyle(1,1); sector(450,200,0,360,20,20); (* luna nuova *) sector(300,350,90,270,20,20); sector(300,50,90,270,20,20); setcolor(2); sector(450,200,0,360,20,20); testo(10,50,'primo quarto:12...18...24'); testo(400,150,'novilunio:6....12...18'); testo(10,250,'plenilunio:18....24...6'); testo(400,300,'ultimo quarto:24...6...12'); testo(550,250,'sole'); testo(10,370,'viene indicata la fase,ora sorgere,culminazione,tramontare'); pausa; end.
program lunare8; (* MOTO DELLA LUNA E DEL SOLE DIURNO E MENSILE *) (* su disco 65 dispensa 49 \TU56\lunare8.mar *) uses crt,graph; type vet=array[1..800] of byte; var disco1,disco2:vet; TEMPO,mese:INTEGER; procedure simula; begin writeln('simulazione moto diurno e mensile della luna e del sole '); writeln('relativamente ad un osservatore sulla terra immobile '); writeln('------------------------------------------------------- '); writeln('ipotesi e convenzioni per semplificare calcoli :'); writeln('durata del mese lunare=24 giorni'); writeln('spostamento angolare diurno della luna=15 gradi'); writeln('ore del sorgere,culminare,tramontare,multipli di 60 minuti'); writeln('--------------------------------------------------------'); writeln('si visualizza:'); writeln('disco terrestre,orizzonte,meridiano,est,ovest'); writeln('movimento disco del sole e della luna'); writeln('ora del sorgere,culminare,tramontare della luna'); writeln('successione dei giorni lunari da 0 a 24 o meno '); writeln('novilunio,primo quarto,plenilunio,ultimo quarto'); writeln('========================================================'); writeln('si deve indicare il tempo per regolare velocita movimento'); writeln('scrivere un numero come 10..100..1000.....'); writeln('PROVARE CON TEMPI LUNGHI,1000,PER VEDERE BENE LE SCRITTE'); WRITELN('PROVARE CON TEMPI CORTI,1,PER VEDERE RAPIDAMENTE '); WRITELN('TEMPO=');READLN(TEMPO); writeln('indicare numero giorni:24 per mese completo:vari minuti...'); writeln('numero minore di 24 per vedere solo alcune fasi...........'); readln(mese); 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:=1; (* 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 pausa; (* premere return per proseguire *) var ch:char; begin setcolor(14); outtextxy(300,400,'premi return,prego'); ch:=readkey; setcolor(1); outtextxy(300,400,'premi return,prego'); end; procedure testo(x,y:integer;nome:string); (* stampa legenda testo *) begin outtextxy(x,y,nome); end; procedure costante; (* disegna terra e orizzonte EST OVEST *) begin setcolor(3); line(10,200,600,200); line(300,200,300,10); testo(250,170,'meridiano osservatore'); testo(250,220,'orizzonte terrestre'); testo(10,180,'EST'); testo(500,180,'OVEST'); testo(400,40,'lunazione='); testo(60,10,'sole'); testo(500,10,'luna'); setfillstyle(1,3); fillellipse(300,200,20,20); end; procedure moto; var m,s1,c1,s2,c2,x,y,r1,r2,ora1,ora2,ora3,ora,giorni,g3,giorno:integer; rad,rad1,s,c:real; grado,h1,h2,h3:string; begin x:=300; y:=200; r1:=180; r2:=180; ora1:=5; g3:=0; for giorni:=0 to mese do begin giorno:=giorni; str(giorno,grado); setcolor(14); outtextxy(540,40,grado); ora1:=ora1+1; if (ora1<24) then ora:=ora1 else ora:=ora1-24; if (ora1<19) then ora2:=ora1+6 else ora2:=ora1-18; if (ora1<13) then ora3:=ora1+12 else ora3:=ora1-12; for m:=0 to 360 do begin rad:=m*3.14/180; s:=r1*sin(rad); c:=r2*cos(rad); s1:=-trunc(s); c1:=trunc(c); rad1:=(m+g3)*3.14/180; s2:=-trunc(r1*sin(rad1)); c2:=trunc(r2*cos(rad1)); (* putpixel(x+s1,y+c1,4); *) (* putpixel(x+s2,y+c2,2); *) str(giorno,grado); str(ora,h1); str(ora2,h2); str(ora3,h3); setcolor(4); putimage(x+s1,y+c1,disco2,1); (* luna *) putimage(x+s2,y+c2,disco1,1); (* sole *) setcolor(15); if (m=95) then testo(10,220,'la luna sorge:ore='+h1); if (m=175) then testo(230,230,'la luna culmina:ore='+h2); if (m=265) then testo(400,220,'la luna tramonta:ore='+h3); if ora1=6 then testo(200,400,'novilunio'); if ora1=12 then testo(200,400,'primo quarto'); if ora1=18 then testo(200,400,'plenilunio'); if ora1=24 then testo(200,400,'ultimo quarto'); if (m=5) or (m=95) or (m=175) or (m=265) or (m=355) then delay(TEMPO); delay(20); (* pausa prima di cancellare gradi e disco 10..50..100*) setcolor(1); putimage(x+s1,y+c1,disco2,1); putimage(x+s2,y+c2,disco1,1); (* modificare m per variare persistenza*) if (m=120) then testo(10,220,'la luna sorge:ore='+h1); if (m=200) then testo(230,230,'la luna culmina:ore='+h2); if (m=290) then testo(400,220,'la luna tramonta:ore='+h3); if ora1=6 then testo(200,400,'novilunio'); if ora1=12 then testo(200,400,'primo quarto'); if ora1=18 then testo(200,400,'plenilunio'); if ora1=24 then testo(200,400,'ultimo quarto'); end; outtextxy(540,40,grado); g3:=g3+15; (* aumento di 15 gradi al giorno sfasamento sole luna *) end; end; begin (* programma principale *) clrscr; SIMULA; grafica(1); (* attiva pagina grafica *) costante; (* disegno fisso terra *) setfillstyle(1,14); fillellipse(20,20,10,10); getimage(8,8,34,34,disco1);(* SOLE *) setfillstyle(2,2); fillellipse(400,20,10,10); getimage(388,8,434,34,disco2); (* LUNA *) moto; pausa; end.
program lunare9; (* MOTO DELLA LUNA E DEL SOLE DIURNO E MENSILE *) (* su disco 65 dispensa 49 \TU56\lunare9.mar *) (* variante di lunare8.mar *) uses crt,graph; type vet=array[1..800] of byte; var disco1,disco2:vet; TEMPO,mese:INTEGER; procedure simula; begin writeln('simulazione moto diurno e mensile della luna e del sole '); writeln('relativamente ad un osservatore sulla terra immobile '); writeln('------------------------------------------------------- '); writeln('ipotesi e convenzioni per semplificare calcoli :'); writeln('durata del mese lunare=24 giorni'); writeln('spostamento angolare diurno della luna=15 gradi'); writeln('ore del sorgere,culminare,tramontare,multipli di 60 minuti'); writeln('--------------------------------------------------------'); writeln('si visualizza:'); writeln('disco terrestre,orizzonte,meridiano,est,ovest'); writeln('movimento disco del sole e della luna'); writeln('ora del sorgere,culminare,tramontare della luna'); writeln('successione dei giorni lunari da 0 a 24 o meno '); writeln('novilunio,primo quarto,plenilunio,ultimo quarto'); writeln('========================================================'); writeln('si deve indicare il tempo per regolare velocita movimento'); writeln('scrivere un numero come 10..100..1000.....'); writeln('PROVARE CON TEMPI LUNGHI,1000,PER VEDERE BENE LE SCRITTE'); WRITELN('PROVARE CON TEMPI CORTI,1,PER VEDERE RAPIDAMENTE '); WRITELN('TEMPO=');READLN(TEMPO); writeln('indicare numero giorni:24 per mese completo:vari minuti...'); writeln('numero minore di 24 per vedere solo alcune fasi...........'); readln(mese); 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:=1; (* 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 pausa; (* premere return per proseguire *) var ch:char; begin setcolor(14); outtextxy(300,420,'premi return,prego'); ch:=readkey; setcolor(1); outtextxy(300,420,'premi return,prego'); end; procedure testo(x,y:integer;nome:string); (* stampa legenda testo *) begin outtextxy(x,y,nome); end; procedure costante; (* disegna terra e orizzonte EST OVEST *) begin setcolor(5); line(10,200,600,200); line(300,200,300,10); settextstyle(1,0,3); testo(220,140,'meridiano osservatore'); testo(220,160,'orizzonte osservatore'); testo(10,170,'EST'); testo(500,170,'OVEST'); testo(400,40,'lunazione='); testo(60,10,'sole'); testo(500,10,'luna'); setfillstyle(1,3); fillellipse(300,200,20,20); setcolor(3); bar(1,200,630,410); end; procedure moto; (* fase g3 ore sorgere culminare tramontare luna*) var m,s1,c1,s2,c2,x,y,r1,r2,ora1,ora2,ora3,ora,giorni,g3,giorno:integer; rad,rad1,s,c:real; grado,h1,h2,h3:string; begin x:=300; y:=200; r1:=180; r2:=180; ora1:=5; g3:=0; for giorni:=0 to mese do begin giorno:=giorni; str(giorno,grado); setcolor(14); outtextxy(540,40,grado); ora1:=ora1+1; if (ora1<24) then ora:=ora1 else ora:=ora1-24; if (ora1<19) then ora2:=ora1+6 else ora2:=ora1-18; if (ora1<13) then ora3:=ora1+12 else ora3:=ora1-12; for m:=0 to 360 do begin rad:=m*3.14/180; s:=r1*sin(rad); c:=r2*cos(rad); s1:=-trunc(s); c1:=trunc(c); rad1:=(m+g3)*3.14/180; s2:=-trunc(r1*sin(rad1)); c2:=trunc(r2*cos(rad1)); (* putpixel(x+s1,y+c1,4); *) (* putpixel(x+s2,y+c2,2); *) str(giorno,grado); str(ora,h1); str(ora2,h2); str(ora3,h3); setcolor(4); putimage(x+s1,y+c1,disco2,1); (* luna *) putimage(x+s2,y+c2,disco1,1); (* sole *) setcolor(15); if (m=95) then testo(10,220,'la luna sorge:ore='+h1); if (m=175) then testo(230,230,'la luna culmina:ore='+h2); if (m=265) then testo(330,220,'la luna tramonta:ore='+h3); if ora1=6 then testo(200,360,'novilunio'); if ora1=12 then testo(200,360,'primo quarto'); if ora1=18 then testo(200,360,'plenilunio'); if ora1=24 then testo(200,360,'ultimo quarto'); if (m=5) or (m=95) or (m=175) or (m=265) or (m=355) then delay(TEMPO); delay(20); (* pausa prima di cancellare gradi e disco 10..50..100*) setcolor(3); putimage(x+s1,y+c1,disco2,1); putimage(x+s2,y+c2,disco1,1); (* modificare m per variare persistenza*) if (m=120) then testo(10,220,'la luna sorge:ore='+h1); if (m=200) then testo(230,230,'la luna culmina:ore='+h2); if (m=290) then testo(330,220,'la luna tramonta:ore='+h3); if ora1=6 then testo(200,360,'novilunio'); if ora1=12 then testo(200,360,'primo quarto'); if ora1=18 then testo(200,360,'plenilunio'); if ora1=24 then testo(200,360,'ultimo quarto'); end; setcolor(1); outtextxy(540,40,grado); g3:=g3+15; (* aumento di 15 gradi al giorno sfasamento sole luna *) end; end; begin (* programma principale *) clrscr; SIMULA; grafica(1); (* attiva pagina grafica *) costante; (* disegno fisso terra *) setfillstyle(1,14); fillellipse(20,20,10,10); getimage(8,8,34,34,disco1);(* SOLE *) setfillstyle(2,2); fillellipse(400,20,10,10); getimage(388,8,434,34,disco2); (* LUNA *) moto; pausa; end.