listati su altezza sole

altezza1....2,3,4,5,6,7,8,9,


program altezza1;
(* altezza del sole in funzione di latitudine e declinazione *)
(* su disco 65 dispensa 49 \tu55\altezza1.mar *)

uses crt;
     var provare: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;
 writeln('valori per latitudine  :interi da -90 a 0 a 90 ');
 writeln('valori per declinazione:interi da -23 a 23     ');
 writeln;
 writeln('premi return,prego');
 readln;
end;

procedure alto(prove:integer);
var altezza,lat,dec1,conta:integer;
    sp:string;

begin
sp:='...................................';
for conta:=1 to prove do
begin
 write('latitudine.  -90..0..90...=');readln(lat);
 write('declinazione.-23..0..23...=');readln(dec1);
 writeln('-------------------------------------------');
textcolor(14);
 altezza:=90-LaT+dec1;
 if (lat>0) and (lat<dec1) then altezza:=180-(90-lat+dec1);
 if (lat<0) and (lat>dec1) then altezza:=180-(90+lat-dec1);
 if (lat<0) and (lat<dec1) then altezza:=90+lat-dec1;
 if (lat=0) then altezza:=90 - abs(dec1);
 writeln('latitudine.....',lat);
 writeln('declinazione...',dec1);
 writeln('altezza sole...',altezza);
 writeln(sp);
end;
end;

 begin                    (* programma principale *)
 clrscr;
 simula;
 write('indica numero prove 1...10..90=');readln(provare);
 alto(provare);
 writeln('premi return,prego');readln;
 end.

program altezza2;
(* altezza del sole in funzione di latitudine e declinazione *)
(* su disco 65 dispensa 49 \tu55\altezza2.mar *)

uses crt;

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 variabile e declinazione costante');
 writeln;
 writeln('valori per latitudine  :interi da -90 a 0 a 90 ');
 writeln('valori per declinazione:interi da -23 a 23     ');
 writeln;
 writeln('premi return,prego');
 readln;
end;

procedure alto;
var altezza,lat,lat1,lat2,dec1:integer;
    sp:string;

begin
sp:='...........';
 write(' declinazione costante-23..0.+23...=');readln(dec1);
 write('latitudine iniziale.  -90..0..90...=');readln(lat1);
 write('latitudine finale .... 90..0.-90...=');readln(lat2);
 writeln('-------------------------------------------');
textcolor(14);
writeln('latitudine...declinazione...altezza');
writeln;
for lat:=lat1 to lat2 do
 begin
 altezza:=90-LaT+dec1;
 if (lat>0) and (lat<dec1) then altezza:=180-(90-lat+dec1);
 if (lat<0) and (lat>dec1) then altezza:=180-(90+lat-dec1);
 if (lat<0) and (lat<dec1) then altezza:=90+lat-dec1;
 if (lat=0) then altezza:=90 - abs(dec1);
 writeln(lat,sp,dec1,sp,altezza);
 if (lat/10 = int(lat/10)) then delay(1000)
 else delay(1);  (* pausa per vedere valori indicati *)
end;
end;

 begin                    (* programma principale *)
 clrscr;
 simula;
 alto;
 writeln('premi return,prego');readln;
 end.

 


program altezza3;
(* altezza del sole in funzione di latitudine e declinazione *)
(* su disco 65 dispensa 49 \tu55\altezza3.mar *)

uses crt;

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('valori per latitudine  :interi da -90 a 0 a 90 ');
 writeln('valori per declinazione:interi da -23 a 23     ');
 writeln;
 writeln('premi return,prego');
 readln;
end;

procedure alto;
var altezza,dec1,dec2,lat,dec:integer;
    sp:string;

begin
sp:='...........';
 write('latitudine costante   90...0...-90...=');readln(lat);
 write('declinazione iniziale.  -23..0..23...=');readln(dec1);
 write('declinazione finale......23..0.-23...=');readln(dec2);
 writeln('-------------------------------------------');
textcolor(14);
writeln('latitudine...declinazione...altezza');
writeln;
for dec:=dec1 to dec2 do
 begin
 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);
 writeln(lat,sp,dec,sp,sp,altezza);
 if (dec/10 = int(dec/10)) then delay(2000)
 else delay(1);  (* pausa per vedere valori indicati *)
end;
end;

 begin                    (* programma principale *)
 clrscr;
 simula;
 alto;
 writeln('premi return,prego');readln;
 end.

program altezza4;
(* altezza del sole in funzione di latitudine e declinazione *)
(* su disco 65 dispensa 49 \tu55\altezza4.mar *)

uses crt,graph;

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 variabile e declinazione costante');
 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('PER LATITUDINE:PRIMA VALORE MINORE,poi quello MAGGIORE ');
 writeln('premi return,prego');
 readln;
 clrscr;
end;

procedure grafica(f:integer);
var sc,tp:integer;
stringa:string;
 begin
  sc:=0;
  tp:=0;
  stringa:='c:\';
  initgraph(sc,tp,stringa);
  setbkcolor(f);
 end;

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

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

procedure alto;
var n,altezza,lat,lat1,lat2,dec1,x,y,x1,y1:integer;
    sd,sl,sh,sx:string;

begin
x:=300;
y:=200;
y1:=100;
x1:=10;
n:=0;
sx:='/';
 testo(100,10,'SCRIVI: declinazione costante-23..0.+23...=');read(dec1);
 testo(100,20,'SCRIVI: latitudine iniziale. -90..0..90...=');read(lat1);
 testo(100,30,'SCRIVI: latitudine finale ... 90..0.-90...=');read(lat2);
 IF (LAT2<=LAT1) THEN TESTO(10,400,'LAT2 > LAT1:RIPROVA PREGO:');
 IF (LAT2<=LAT1) THEN READ(LAT2);
 setcolor(5);
 TESTO(x,50,'variazione secondo latitudine crescente');
 settextstyle(0,1,1);
 testo(600,100,'altezza sole');
 settextstyle(0,0,1);
 line(10,y,600,y);
 line(10,y-90,600,y-90);
for lat:=lat1 to lat2 do
 begin
 n:=n+1;
 setcolor(14);
 altezza:=90-LaT+dec1;
 if (lat>0) and (lat<dec1) then altezza:=180-(90-lat+dec1);
 if (lat<0) and (lat>dec1) then altezza:=180-(90+lat-dec1);
 if (lat<0) and (lat<dec1) then altezza:=90+lat-dec1;
 if (lat=0) then altezza:=90 - abs(dec1);
 str(dec1,sd);
 str(lat,sl);
 str(altezza,sh);
 testo(x1,y1,sl+sx+sd+sx+sh);
 y1:=y1+10;
 if (n/30= int(n/30)) then x1:=x1+95;
 if (n/30= int(n/30)) then y1:=100;
 setcolor(5);
 line(x+lat,y,x+lat,y-altezza);
end;
end;

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

program altezza5;
(* altezza del sole in funzione di latitudine e declinazione *)
(* su disco 65 dispensa 49 \tu55\altezza5.mar *)

uses crt,graph;

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('PER declinazione:PRIMA VALORE MINORE,poi quello MAGGIORE ');
 writeln('premi return,prego');
 readln;
 clrscr;
end;

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

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

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

procedure alto;
var n,altezza,lat,dec1,dec2,dec,x,y,x1,y1:integer;
    sd,sl,sh,sx:string;

begin
x:=300;
y:=200;
y1:=100;
x1:=10;
n:=0;
sx:='/';
 testo(100,10,'SCRIVI: latitudine costante    -90..0..90..=');read(lat);
 testo(100,20,'SCRIVI: declinazione iniziale. -23..0..23..=');read(dec1);
 testo(100,30,'SCRIVI: declinazione finale ... 23..0..-23.=');read(dec2);
 IF (dec2<=dec1) THEN TESTO(10,400,'dec2 > dec1:RIPROVA PREGO:');
 IF (dec2<=dec1) THEN READ(dec2);
 setcolor(5);
 TESTO(x,50,'variazione secondo declinazione crescente');
 settextstyle(0,1,1);
 testo(600,100,'altezza sole');
 settextstyle(0,0,1);
 line(10,y,600,y);
 line(10,y-90,600,y-90);
for dec:=dec1 to dec2 do
 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);
 str(dec,sd);
 str(lat,sl);
 str(altezza,sh);
 testo(x1,y1,sl+sx+sd+sx+sh);
 y1:=y1+10;
 if (n/30= int(n/30)) then x1:=x1+95;
 if (n/30= int(n/30)) then y1:=100;
 setcolor(5);
 line(x+dec,y,x+dec,y-altezza);
end;
end;

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

program altezza6;
(* altezza del sole in funzione di latitudine e declinazione *)
(* su disco 65 dispensa 49 \tu55\altezza6.mar *)

uses crt,graph;

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('PER declinazione:PRIMA VALORE MINORE,poi quello MAGGIORE ');
 writeln('premi return,prego');
 readln;
 clrscr;
end;

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

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

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

procedure alto;
var n,altezza,lat,dec1,dec2,dec,x,y,x1,y1:integer;
    sd,sl,sh,sx:string;

begin
x:=300;
y:=200;
y1:=100;
x1:=10;
n:=0;
sx:='/';
 testo(100,10,'SCRIVI: latitudine costante    -90..0..90..=');read(lat);
 testo(100,20,'SCRIVI: declinazione iniziale. -23..0..23..=');read(dec1);
 testo(100,30,'SCRIVI: declinazione finale ... 23..0..-23.=');read(dec2);
 IF (dec2<=dec1) THEN TESTO(10,400,'dec2 > dec1:RIPROVA PREGO:');
 IF (dec2<=dec1) THEN READ(dec2);
 setcolor(5);
 TESTO(x,50,'variazione secondo declinazione crescente');
 settextstyle(0,1,1);
 testo(600,100,'altezza sole');
 settextstyle(0,0,1);
 line(10,y,600,y);
 line(10,y-90,600,y-90);
for dec:=dec1 to dec2 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);
 str(dec,sd);
 str(lat,sl);
 str(altezza,sh);
 testo(x1,y1,sl+sx+sd+sx+sh);
 y1:=y1+10;
 if (n/30= int(n/30)) then x1:=x1+95;
 if (n/30= int(n/30)) then y1:=100;
 setcolor(5);
 line(x+dec,y,x+dec,y-altezza);
end;
x:=x+n; (* declinazione decrescente *)
for dec:=dec2 downto dec1 do
 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);
 str(dec,sd);
 str(lat,sl);
 str(altezza,sh);
 testo(x1,y1,sl+sx+sd+sx+sh);
 y1:=y1+10;
 if (n/30= int(n/30)) then x1:=x1+95;
 if (n/30= int(n/30)) then y1:=100;
 setcolor(5);
 line(x-dec,y,x-dec,y-altezza);
end;
end;

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

program altezza7;
(* altezza del sole in funzione di latitudine e declinazione *)
(* su disco 65 dispensa 49 \tu55\altezza7.mar *)

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;
end;

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

 procedure pausa;
 var ch:char;
  begin
   setcolor(2);
   outtextxy(400,450,'premi return,prego');
   ch:=readkey;
   setcolor(1);
   outtextxy(400,450,'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:=200;
n:=0;
 setcolor(5);
 testo(10,360,'si visualizza la latitudine corrispondente per ogni');
 testo(10,370,'variazione della declinazione nel corso annuale');
 testo(10,380,'e la altezza del sole rispetto alla linea orizzontale');
 testo(10,390,'NOTARE LE LATITUDINI ALLE QUALI IL SOLE RAGGIUNGE 90 GRADI');
 testo(10,400,'per determinati valori della declinazione:lat -23 0 23 ');
 testo(10,420,'e quelle alle quali non sorge o non tramonta per determinati');
 testo(10,430,'valori della declinazione:lat 66...90..66  nord/sud');
 TESTO(20,50,'variazione declinazione da -23 ,0,+23,0,-23 ');
 testo(20,60,'secondo il corso annuale del moto apparente del sole ');
 testo(20,80,'LATITUDINE VARIA DA -90  a 90 con passo da indicare  ');
 settextstyle(0,1,1);
 testo(610,100,'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,90,'altezza massima del sole=90');
testo(10,220,'altezza del sole negativa:sotto orizzonte');
testo(290,90,'-23.0.23.0.-23');
testo(10,230,'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,100,600,250);
n:=0;
lat:=lat+passo;
x:=300;
end;
end;
pausa;
end;

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

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.

program altezza9;
(* altezza del sole in funzione di latitudine e declinazione *)
(* su disco 65 dispensa 49 \tu54\altezza9.mar *)
(* variante di altezza7.mar con scheda 1 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:=1;         (* cambiata scheda da 0 a 1 *)
  tp:=2;         (* cambiata tavolozza da 0 a 2 o 3 o 1 *)
  stringa:='c:\scheda';
  initgraph(sc,tp,stringa);
  setbkcolor(f);
 end;

 procedure pausa;
 var ch:char;
  begin
   setcolor(2);
   outtextxy(10,190,'premi return,prego');
   ch:=readkey;
   setcolor(1);
   outtextxy(10,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:=150;
y:=150;
n:=0;
 setcolor(5);

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

lat:=-90;
for conta:=1 to totale do
begin
 settextstyle(0,0,1);
 line(100,y-45,300,y-45);
 testo(10,y-45,'altezza=45 gradi');
 line(100,y,300,y);
 testo(10,y,'altezza=0 gradi');
 line(100,y-90,300,y-90);
 testo(10,y-90,'altezza=90 gradi');
str(lat,stringa);
setcolor(2);
testo(10,y-110,'altezza massima del sole=90');
if (altezza<0) then testo(10,y+20,'altezza sole:sotto orizzonte');
testo(145,y-100,'-23.0.23.0.-23');
testo(10,y+10,'latitudine='+stringa);
for dec:=-23 to 23 do           (* declinazione crescente *)
 begin
 n:=n+1;
 setcolor(2);
 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);
 if (altezza<0) then testo(10,y+20,'altezza sole:sotto orizzonte');
 setcolor(3);
 if (altezza=90) and(lat=0) then delay(sosta);
 line(x+n,y,x+n,y-altezza);

end;
x1:=196;
n:=0;
begin
for dec:=23 downto -23 do
 begin
 setcolor(2);
 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);
 if(altezza=90) and(lat=0) then delay(sosta);
 n:=n+1;
end;
delay(sosta);
if (lat=90) then delay(5000);
(* tra due disegni *)
setfillstyle(1,1);
bar(1,y-90,300,y+40);
n:=0;
lat:=lat+passo;
x:=150;
end;
end;
pausa;
end;

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