astronomia con pascal

esci turboastro.htm

altezza del sole in funzione di latitudini e declinazioni variabili

 

program altezza8;
(* altezza del sole in funzione di latitudine e declinazione *)
(* su disco 65 dispensa 49 \tu54\altezza8.mar *)
(* variante di altezza7.mar con scheda 9 invece di 0 *)

uses crt,graph;
var passo,totale,sosta:integer;

procedure simula;
begin
writeln('si determina la altezza del sole,indicando il valore in gradi');
writeln('in funzione della latitudine e della declinazione indicabili ');
writeln('entro campo determinato');
writeln('latitudine costante e declinazione variabile');
writeln;
writeln('grafico altezza variabile con latitudine e declinazione');
writeln;
writeln('valori per latitudine :interi da -90 a 0 a 90 ');
writeln('valori per declinazione:interi da -23 a 23 ');
writeln;
writeln('indicare passo per variazione della latitudine..');
writeln('deve essere divisore esatto di 90...:1..10..15..30..');
readln(passo);
totale:=trunc(90/passo);
writeln('indica valore per sosta tra vari disegni..1000...5000 ');
readln(sosta);
totale:=2*totale+1;
writeln('premi return,prego');
readln;
clrscr;
writeln('si visualizza la latitudine corrispondente per ogni');
writeln('variazione della declinazione nel corso annuale');
writeln('e la altezza del sole rispetto alla linea orizzontale');
writeln('NOTARE LE LATITUDINI ALLE QUALI IL SOLE RAGGIUNGE 90 GRADI');
writeln('per determinati valori della declinazione:lat -23 0 23 ');
writeln('e quelle alle quali non sorge o non tramonta per determinati');
writeln('valori della declinazione:lat 66...90..66 nord/sud');
writeln('variazione declinazione da -23 ,0,+23,0,-23 ');
writeln('secondo il corso annuale del moto apparente del sole ');
writeln('LATITUDINE VARIA DA -90 a 90 con passo da indicare ');
writeln;
writeln('premi return,prego');
readln;
clrscr;
end;

procedure grafica(f:integer);
var sc,tp:integer;
stringa:string;
begin
sc:=9; (* cambiata scheda da 0 a 9 *)
tp:=0;
stringa:='c:\scheda';
initgraph(sc,tp,stringa);
setbkcolor(f);
end;

procedure pausa;
var ch:char;
begin
setcolor(2);
outtextxy(400,190,'premi return,prego');
ch:=readkey;
setcolor(1);
outtextxy(400,190,'premi return,prego');
end;

procedure testo(x,y:integer;nome:string);
begin
outtextxy(x,y,nome);
end;

procedure alto;
var conta,n,altezza,lat,dec,x,y,x1:integer;
stringa:string;

begin
x:=300;
y:=150;
n:=0;
setcolor(5);

settextstyle(0,1,1);
testo(610,60,'altezza sole');

lat:=-90;
for conta:=1 to totale do
begin
settextstyle(0,0,1);
line(200,y-45,500,y-45);
testo(10,y-45,'altezza=45 gradi');
line(200,y,500,y);
testo(10,y,'altezza=0 gradi');
line(200,y-90,500,y-90);
testo(10,y-90,'altezza=90 gradi');
str(lat,stringa);
setcolor(2);
testo(10,y-110,'altezza massima del sole=90');
testo(10,y+20,'altezza del sole negativa:sotto orizzonte');
testo(290,y-110,'-23.0.23.0.-23');
testo(10,y+10,'latitudine='+stringa);
for dec:=-23 to 23 do (* declinazione crescente *)
begin
n:=n+1;
setcolor(14);
altezza:=90-LaT+dec;
if (lat>0) and (lat<dec) then altezza:=180-(90-lat+dec);
if (lat<0) and (lat>dec) then altezza:=180-(90+lat-dec);
if (lat<0) and (lat<dec) then altezza:=90+lat-dec;
if (lat=0) then altezza:=90 - abs(dec);
setcolor(5);
line(x+n,y,x+n,y-altezza);

end;
x1:=346;
n:=0;
begin
for dec:=23 downto -23 do
begin
setcolor(14);
altezza:=90-LaT+dec;
if (lat>0) and (lat<dec) then altezza:=180-(90-lat+dec);
if (lat<0) and (lat>dec) then altezza:=180-(90+lat-dec);
if (lat<0) and (lat<dec) then altezza:=90+lat-dec;
if (lat=0) then altezza:=90 - abs(dec);
line(x1+n,y,x1+n,y-altezza);
n:=n+1;
end;
delay(sosta);
if (lat=90) then delay(5000);
(* tra due disegni *)
setfillstyle(1,1);
bar(1,y-90,600,y+40);
n:=0;
lat:=lat+passo;
x:=300;
end;
end;
pausa;
end;

begin (* programma principale *)
clrscr;
simula;
grafica(1);
alto;
clrscr;
closegraph;
end.