listati per programmi in turbo pascal

fusione e solidifcazione

fonde, fonde1, fusi2, fusi3


Program fonde;
(* grafico per simulazione leggi della FUSIONE *)
(* derivato da FUSIONE1 *)
   uses crt,graph;
       var
      a,x,y,z,valore,t2:integer;


  procedure grafica;  (* attivazione comandi grafici *)
  var sc,tp:integer;stringa:string;
BEGIN
sc:=0;
tp:=0;
stringa:='c:\tp\bgi';
initgraph(sc,tp,stringa);
rectangle(1,1,630,400);
setbkcolor(black);
setcolor(white);
end;

procedure pausa; (* attesa che si prema enter *)
var ch:char;
begin
setcolor(white);
outtextxy(500,10,'premi enter ');
ch:=readkey;
setcolor(black);
outtextxy(500,10,'premi enter');
setcolor(white);
end;


procedure testo(x,y:integer;frase:string);
begin
setcolor(white);
outtextxy(x,y,frase);
end;


procedure cancellagrafo;
begin
cleardevice;
end;

procedure sosta1;
begin
delay(t2);
end;

procedure sosta2;
begin
delay(valore);
end;

procedure assi;
begin
setcolor(white);
moveto(20,100);lineto(20,300);lineto(400,300);
testo(30,100,'temperatura di fusione,solidificazione');
testo(30,320,'calore fornito a solido e liquido');
testo(200,330,'calore ceduto da liquido e solido'); pausa;
end;

procedure assi2;
begin
setcolor(white);
moveto(20,100);lineto(20,300);lineto(400,300);
rectangle(400,100,450,300);
rectangle(460,100,510,300);
bar(405,250,445,300);
setcolor(6);
bar(465,200,505,300);
testo(30,100,'temperatura di fusione');
testo(30,320,'calore fornito a solido e liquido');pausa;
moveto(1,1);
end;

procedure moto1(x,y,z:integer); (* solido *)
begin
for a:=1 to 60 do
begin
moveto(x,300);setcolor(6);lineto(x,z);sosta2;
x:=x+1;z:=z-1;
end;
end;

procedure moto2(x,y,z:integer); (* fusione *)
begin
for a:=1 to 60 do
begin
moveto(x,300);setcolor(white);lineto(x,z);sosta2;
x:=x+1;
end;
end;

procedure moto3(x,y,z:integer);
begin
for a:=1 to 60 do
begin
moveto(x,y);setcolor(6);lineto(x,z);sosta2;
x:=x+1;z:=z-1;
end;
end;

procedure moto4(x,y,z:integer);
begin
for a:=1 to 60 do
begin
moveto(x,y);setcolor(6);lineto(x,z);sosta2;
x:=x+1;z:=z+1;
end;
end;

procedure moto1a(x,y,z:integer); (* solido *)
begin
for a:=1 to 60 do
begin
moveto(x,z);setcolor(6);lineto(x,z-1);sosta2;
x:=x+1;z:=z-1;
end;
end;

procedure moto2a(x,y,z:integer); (* fusione *)
begin
for a:=1 to 60 do
begin
moveto(x,z);setcolor(white);lineto(x+1,z);sosta2;
x:=x+1;
end;
end;

procedure moto1b(x,y,z:integer); (* solido *)
begin
for a:=1 to 40 do
begin
moveto(x,z);setcolor(white);lineto(x,z-2);sosta2;
x:=x+1;z:=z-2;
end;
end;

procedure moto2b(x,y,z:integer); (* fusione *)
begin
for a:=1 to 40 do
begin
moveto(x,z);setcolor(white);lineto(x+1,z);sosta2;
x:=x+1;
end;
end;


procedure moto1c;
begin
moveto(20,300);lineto(80,200);lineto(140,200);lineto(200,150);
end;

procedure moto2c;
begin
setlinestyle(3,3,3);
moveto(20,300);lineto(120,200);lineto(220,200);lineto(300,150);sosta1;
setlinestyle(1,1,1);
end;

procedure modelli;
begin
circle(100,100,50);
circle(200,100,50);
circle(300,100,50);
circle(400,100,50);setlinestyle(1,1,1);
moveto(100,100);lineto(200,100);
setlinestyle(1,1,3);moveto(300,100);lineto(400,100);setlinestyle(1,1,1);
testo(100,20,'sostanza A');testo(100,40,' EcA = EcB ');
testo(100,60,' FaA < FaB ');
testo(300,20,'sostanza B');
testo(300,40,' EcB = EcA ');testo(300,60,' FaB > FaA ');
testo(100,90,' EcA > FaA ');testo(300,90,' EcB < FaB ');pausa;
testo(20,200,'alla temperatura T si verifica che EcA = EcB ');
testo(20,210,'se la ...................EcA > FaA la sostanza A fonde ');
moveto(100,100);setcolor(black);lineto(200,100);setcolor(white);
testo(20,220,'mentre se la .....EcB < FaB la sostanza B non fonde ');pausa;
testo(20,240,'si deve aumentare la T in modo che anche la EcB diventi');
testo(20,250,'maggiore della FaB ');pausa;
circle(100,260,50);
circle(200,260,50);
setlinestyle(1,1,1);
moveto(100,260);lineto(200,260);
testo(20,350,'nella solidificazione si libera energia dovuta ai legami');
testo(20,360,'che si formano:la temperatura rimane costante');
setlinestyle(0,0,1);
end;

procedure ipotesi;
begin
testo(20,20,'1..le particelle costituenti i corpi solidi,liquidi,gassosi');
testo(20,30,'sono animate da moti vibratori,dotate di energia cinetica Ec');
testo(20,40,'proporzionale alla temperatura Ec =kT    ');
testo(20,50,'uguale per tutte le particelle alla stessa temperatura EcA=EcB ');
pausa;
testo(20,70,'2..le particelle si attirano a causa delle forze di     ');
testo(20,80,'interazione,in funzione della diversa natura delle sostanze    ');
testo(20,90,'e dei diversi tipi di legami:ionici,covalenti,deboli..   ');
testo(20,100,'EcA = EcB ....FaA <> FaB     ');pausa;
testo(20,120,'3..un corpo solido se riceve energia aumenta la sua Ec:    ');
testo(20,130,'indicata da aumento di temperatura   ');pausa;
testo(20,150,'4..se la energia fornita permette alla Ec di superare la     ');
testo(20,160,'forza di attrazione Fa , ( Ec > Fa ) ,il corpo inizia la    ');
testo(20,170,'fusione:la energia fornita durante la fusione viene tutta   ');
testo(20,180,'utilizzata per compiere il lavoro di separazione delle   ');
testo(20,190,'particelle,e quindi la temperatura non aumenta    ');pausa;
testo(20,210,'5..terminata la fusione,altra energia fornita fa crescere    ');
testo(20,220,'energia cinetica del liquido,indicata da temperatura che    ');
testo(20,230,'riprende a crescere    ');pausa;
testo(20,250,'6..essendo diverse le FaA e FaB ,risultera necessario    ');
testo(20,260,'fornire diverse quantita di energia per raggiungere la    ');
testo(20,270,'fusione,e quindi diverse temperature in funzione di A e B   ');
testo(20,280,'es. se (FaA < FaB)  e (EcA = EcB)  e (FaA < EcA e FaB > EcB) ');
testo(20,290,'potra fondere sostanza A e non sostanza B    ');
pausa;cancellagrafo;
testo(20,20,'8..il calore necessario per fondere completamente una mole    ');
testo(20,30,'di una sostanza,varia in funzione della forza dei legami    ');
testo(20,40,'da vincere tra le diverse particelle:CALORE di FUSIONE    ');
pausa;
testo(20,60,'9..durante la SOLIDIFICAZIONE la temperatura rimane costante    ');
testo(20,70,'anche se il corpo cede calore,perche si vanno formando dei    ');
testo(20,80,'legami tra le particelle che solidificano,e tali legami    ');
testo(20,90,'liberano energia che subentra a quella ceduta   ');sosta1;
testo(20,110,'10..il calore ceduto da una mole che solidifica equivale    ');
testo(20,120,'al calore assorbito durante la fusione     ');
testo(20,130,'CALORE di FUSIONE = CALORE di SOLIDIFICAZIONE    ');
pausa;cancellagrafo;setcolor(white);
modelli;pausa;
end;


procedure leggif;
begin

testo(20,20,'1..ogni sostanza pura fonde a una temperatura caratteristica');
testo(20,30,'2..durante la fusione,la temperatura rimane costante');
sosta1;
testo(20,40,'1..ogni sostanza pura solidifica a una temperatura caratteristica');
testo(20,50,'2..durante la solidificazione la temperatura rimane costante');
sosta1;
testo(20,70,'3..temperatura di fusione = temperatura di solidificazione');
sosta1;
end;

procedure pro1;
begin
outtextxy(20,20,'sostanze diverse A,B a parita di moli');
outtextxy(20,30,'ricevono le stesse quantita di calore');
outtextxy(20,40,'tabella delle temperature misurate');
outtextxy(20,50,'----------------------------------------');
outtextxy(20,60,'prendi nota della tabella e disegna i diagrammi Calore/Ta,Tb');
outtextxy(20,70,'cerca di esprimere le leggi osservate');pausa;
outtextxy(20,80,'------------------------------------------');
outtextxy(20,100,'calore...tB....tA    ');
outtextxy(20,110,'10.......10....15    ');
outtextxy(20,120,'20.......20....30    ');
outtextxy(20,130,'30.......30....45    ');
outtextxy(20,140,'40.......40....60    ');
outtextxy(20,150,'50.......50....60    ');
outtextxy(20,160,'60.......60....60    ');
outtextxy(20,170,'70.......70....75    ');
outtextxy(20,180,'80.......80....90    ');
outtextxy(20,190,'90.......80...105    ');
outtextxy(20,200,'100......80...120    ');
outtextxy(20,210,'110......90...135    ');
outtextxy(20,220,'120.....100...150    ');
pausa;cancellagrafo;
testo(20,200,'esperimento e curva di riscaldamento e fusione');
testo(20,230,'sostanze diverse A,B sono rifornite con la stessa energia');
testo(20,240,'1..entrambe mostrano un aumento di temperatura proporzionale');
testo(20,250,'   alla energia fornita,ma diverso per le diverse sostanze');
testo(20,260,'2..entrambe cessano di aumentare la temperatura,pur ');
testo(20,270,'   continuando ad assorbire energia termica');
testo(20,280,'3..il valore della temperatura che permane immutato varia');
testo(20,290,'   con la natura delle sostanze  tA=60...tB=80 ');
testo(20,300,'4..ad un certo punto entrambe le sostanze riprendono ad');
testo(20,310,'   aumentare la temperatura');
testo(20,320,'5..INTERPRETAZIONE e ANALISI del fenomeno ');
pausa;
end;

procedure pro2;
begin
assi2;
testo(20,20,'diagramma di riscaldamento e fusione sostanze pure diverse');
testo(20,30,'con uguale numero di moli');
testo(350,80,'sostanza A :tA=60');
moto1a(20,0,300);sosta1;moto2a(80,0,240);sosta1;moto1a(140,0,240);
pausa;testo(370,100,'sostanza B :tB=80');
moto1b(20,0,300);sosta1;moto2a(60,0,220);sosta1;moto1b(120,0,220);sosta1;
testo(20,50,'curva di riscaldamento simile in A e B ');
testo(20,60,'cambia temperatura di fusione,pendenza grafico');pausa;
cancellagrafo;
end;

procedure pro3;
begin
outtextxy(20,20,'sostanze uguali A1,A2 con diverso numero di moli');
outtextxy(20,30,'ricevono le stesse quantita di calore');
outtextxy(20,40,'tabella delle temperature misurate');pausa;
outtextxy(20,60,'calore ..tA1.....tA2');
outtextxy(20,70,'10.......10.......5');
outtextxy(20,80,'20...... 20.......10');
outtextxy(20,90,'30.......30.......15');
outtextxy(20,100,'40.......40.......20');
outtextxy(20,110,'50.......50.......25');
outtextxy(20,120,'60.......60.......30'    );
outtextxy(20,130,'70.......60.......35'    );
outtextxy(20,140,'80.......60.......40'    );
outtextxy(20,150,'90.......70.......45'    );
outtextxy(20,160,'100......80.......50'    );
outtextxy(20,170,'110......90.......55'    );
outtextxy(20,180,'120.....100.......60'    );
outtextxy(20,190,'130.....110.......60'    );
outtextxy(20,200,'140.....120.......60'    );
outtextxy(20,210,'150.....130.......60'    );
outtextxy(20,220,'160.....140.......60'    );
outtextxy(20,230,'170.....150.......60'    );
outtextxy(20,240,'180.....160.......65'    );
outtextxy(20,250,'190.....170.......70'    );
pausa;
outtextxy(20,260,'----------------------------------------');
outtextxy(20,270,'prendi nota della tabella e disegna i diagrammi Calore/tA1,tA2');
outtextxy(20,280,'cerca di esprimere le leggi osservate');
pausa;
end;


procedure pro4;
begin
assi2;
testo(20,20,'diagramma di riscaldamento e fusione sostanze pure uguali');
testo(20,30,'con diverso numero di moli A1 < A2 ');
testo(350,80,'sostanza A1 ');
moto1c;pausa;testo(400,100,'sostanza A2');
moto2c;
testo(20,340,'esprimi le tue osservazioni sui diagrammi');pausa;
testo(20,50,'curva di riscaldamento simile in A1 e A2 ');
testo(20,60,'cambia calore fornito ,pendenza grafico');
testo(20,70,'temperatura di fusione identica tA1 = tA2 ');
pausa;
end;


procedure pro5;
begin
assi;
testo(20,340,'processo di riscaldamento e FUSIONE');
testo(20,80,'SOLIDO riscaldato:temperatura aumenta');moto1(20,0,300);
sosta1;testo(30,200,'Tfusione');testo(10,240,'----');
testo(40,70,'FUSIONE in corso:temperatura costante');moto2(80,0,240);
sosta1;
testo(60,60,'LIQUIDO riscaldato:temperatura aumenta');moto3(140,300,240);
pausa;
testo(100,350,'processo di raffreddamento e SOLIDIFICAZIONE');
testo(100,10,'LIQUIDO cede calore:temperatura decresce');
moto4(200,300,180);sosta1;testo(30,190,'Tsolidificazione');
testo(120,20,'SOLIDIFICAZIONE in corso:temperatura costante');
moto2(260,300,240);sosta1;
testo(140,30,'SOLIDO cede calore:temperatura decresce');
moto4(320,300,240);
moveto(200,180);setcolor(white);lineto(200,300);
testo(30,280,'Solido');testo(90,230,'So+Li');testo(180,260,'Liquido');
testo(270,230,'Li+So');testo(330,280,'Solido');
pausa;cancellagrafo;
testo(20,200,'osservazioni sperimentali');
testo(20,230,'permettono di ricavare le leggi della FUSIONE,SOLIDIFICAZIONE');
leggif;pausa;cancellagrafo;
testo(20,20,'si definisce CALORE latente di FUSIONE');
testo(20,30,'il calore assorbito dalla unita di massa che si trovi alla');
testo(20,40,'temperatura di fusione,per fondere completamente:');
testo(20,50,'Calore caratteristico per ogni sostanza pura');pausa;
testo(20,120,'si definisce CALORE latente di SOLIDIFICAZIONE');
testo(20,130,'il calore ceduto dalla unita di massa che si trovi alla');
testo(20,140,'temperatura di solidificazione,per solidificare completamente:');
testo(20,150,'Calore caratteristico per ogni sostanza pura');pausa;
 testo(20,170,'Calore di fusione = Calore di solidificazione ');
 pausa;cancellagrafo;
 testo(20,20,'ripetendo esperimento con altre sostanze pure,si ottiene');
 testo(20,30,'lo stesso risultato,espresso nelle leggi precedenti');
 testo(20,40,'CAMBIA il valore della temperatura di fusione,solidificazione');
 testo(20,50,'CAMBIA il valore dei calori di fusione e solidificazione');
 testo(20,60,'in funzione delle diverse sostanze,e delle diverse forze');
 testo(20,70,'di coesione che interessano le diverse sostanze');
 pausa;cancellagrafo;
end;

procedure pro6;
begin
ipotesi;
end;

procedure pro7;
begin
testo(20,20,'fine esperimento:rivedi con calma e prepara la relazione:');
testo(20,40,'arrivederci ');pausa;
end;



procedure fine;  (* conferma uscita operazione *)
begin
outtextxy(30,30,'fine operazione:confermare :premi enter');
readln;
end;

procedure scelta;  (* procedura con scelta opzioni e uscita *)
var s,sn:string;opzione:integer;
begin
cancellagrafo;
setcolor(white);
outtextxy(20,20,'seleziona opzione per FUSIONE e SOLIDIFICAZIONE');
outtextxy(20,30,'1...sostanze DIVERSE:curva riscaldamento e fusione');
outtextxy(20,40,'2...sostanze diverse:continua precedente');
outtextxy(20,50,'3...sostanze UGUALI:curva riscaldamento e fusione ');
outtextxy(20,60,'4...sostanze uguali:continua precedente ');
outtextxy(20,70,'5...UNA sostanza:diagramma FUSIONE e SOLIDIFICAZIONE');
outtextxy(20,80,'6...interpretazione leggi della fusione e solidificazione');
outtextxy(20,90,'7...conclusione ');
outtextxy(20,100,'9...fine ');
outtextxy(20,110,'scelta =');readln(opzione);
cancellagrafo;setcolor(white);
case opzione of
1:pro1;2:pro2;3:pro3;4:pro4;5:pro5;6:pro6;7:pro7;
9:fine;
end;
cancellagrafo;
setcolor(white);
outtextxy(30,50,'altra operazione?Esperimenti?:premi S...fine:premi N ');
 readln(sn);
if ((sn='S') or (sn='s')) then scelta ;
end;

begin            (* programma di lancio *)
grafica;
t2:=20;
outtextxy(20,30,'');outtextxy(20,40,'');
outtextxy(20,60,'esempio sperimentazione su comportamento delle sostanze pure');
outtextxy(20,70,'in rapporto alla energia fornita o ceduta');
outtextxy(20,90,'FUSIONE e SOLIDIFICAZIONE ');
outtextxy(20,110,'------------------------------------------------------------');
outtextxy(20,110,'dipositivi necessari:');
outtextxy(20,120,'contenitori per sostanze da riscaldare');
outtextxy(20,130,'termometri per misurare temperature ');
outtextxy(20,140,'sorgente di calore da fornire in modo misurabile');
outtextxy(20,150,'------------------------------------------------------------');
outtextxy(20,160,'COME USARE il PROGRAMMA:attivare in modo consecutivo le varie');
outtextxy(20,170,'opzioni ,1,2,3,4,5,6,7.9..come indicato nel corso del programma');
outtextxy(20,180,'possibile anche vedere solo parti separate o con altro ordine');
outtextxy(20,190,'');pausa;cancellagrafo;
repeat
setcolor(white);
outtextxy(20,210,'indica velocita simulazione ,minore di 101 ');
outtextxy(20,220,'prova per vedere velocemente la prima volta :1 ');
outtextxy(20,230,'poi riprova lentamente con 5..10..20..50..100 ');
outtextxy(20,240,'scrivi valore scelto ');readln(valore);
until ((valore>0) and (valore<101));
scelta;
end.

Program fonde1;
(* grafico per simulazione leggi della FUSIONE *)
(* derivato da fonde *)
   uses crt,graph;
       var
      a,x,y,z,valore,t2:integer;


  procedure grafica;  (* attivazione comandi grafici *)
  var sc,tp:integer;stringa:string;
BEGIN
sc:=0;
tp:=0;
stringa:='c:\tp\bgi';
initgraph(sc,tp,stringa);
rectangle(1,1,630,400);
setbkcolor(black);
setcolor(white);
end;

procedure pausa; (* attesa che si prema enter *)
var ch:char;
begin
setcolor(white);
outtextxy(500,10,'premi enter ');
ch:=readkey;
setcolor(black);
outtextxy(500,10,'premi enter');
setcolor(white);
end;


procedure testo(x,y:integer;frase:string);
begin
setcolor(white);
outtextxy(x,y,frase);
end;


procedure cancellagrafo;
begin
cleardevice;
end;

procedure sosta1;
begin
delay(t2);
end;

procedure sosta2;
begin
delay(valore);
end;

procedure assi;
begin
setcolor(white);
setlinestyle(0,0,1);
moveto(20,100);lineto(20,300);lineto(400,300);
testo(30,100,'temperatura di fusione,solidificazione');
testo(30,320,'calore fornito a solido e liquido');
testo(200,330,'calore ceduto da liquido e solido'); pausa;
end;

procedure assi2;
begin
setcolor(white);
setlinestyle(0,0,1);
moveto(20,100);lineto(20,300);lineto(400,300);
rectangle(400,100,450,300);
rectangle(460,100,510,300);
bar(405,250,445,300);
setcolor(6);
bar(465,200,505,300);
testo(30,100,'temperatura di fusione');
testo(30,320,'calore fornito a solido e liquido');pausa;
moveto(1,1);
end;

procedure moto1(x,y,z:integer); (* solido *)
begin
setlinestyle(1,0,1);
for a:=1 to 60 do
begin
moveto(x,300);setcolor(white);lineto(x,z);sosta2;
x:=x+1;z:=z-1;
end;
end;

procedure moto2(x,y,z:integer); (* fusione *)
begin
setlinestyle(0,0,1);
for a:=1 to 60 do
begin
moveto(x,300);setcolor(white);lineto(x,z);sosta2;
x:=x+1;
end;
end;

procedure moto3(x,y,z:integer);
begin
setlinestyle(1,0,1);
for a:=1 to 60 do
begin
moveto(x,y);setcolor(white);lineto(x,z);sosta2;
x:=x+1;z:=z-1;
end;
end;

procedure moto4(x,y,z:integer);
begin
setlinestyle(1,0,1);
for a:=1 to 60 do
begin
moveto(x,y);setcolor(white);lineto(x,z);sosta2;
x:=x+1;z:=z+1;
end;
end;

procedure moto1a(x,y,z:integer); (* solido *)
begin
setlinestyle(0,0,1);
for a:=1 to 60 do
begin
moveto(x,z);setcolor(white);lineto(x,z-1);sosta2;
x:=x+1;z:=z-1;
end;
end;

procedure moto2a(x,y,z:integer); (* fusione *)
begin
setlinestyle(0,0,1);
for a:=1 to 60 do
begin
moveto(x,z);setcolor(white);lineto(x+1,z);sosta2;
x:=x+1;
end;
end;

procedure moto1b(x,y,z:integer); (* solido *)
begin
setlinestyle(0,0,1);
for a:=1 to 40 do
begin
moveto(x,z);setcolor(white);lineto(x,z-2);sosta2;
x:=x+1;z:=z-2;
end;
end;

procedure moto2b(x,y,z:integer); (* fusione *)
begin
setlinestyle(0,0,1);
for a:=1 to 40 do
begin
moveto(x,z);setcolor(white);lineto(x+1,z);sosta2;
x:=x+1;
end;
end;


procedure moto1c;
begin
setlinestyle(0,0,1);
moveto(20,300);lineto(80,200);lineto(140,200);lineto(200,150);
end;

procedure moto2c;
begin
setlinestyle(0,0,1);
moveto(20,300);lineto(120,200);lineto(220,200);lineto(300,150);sosta1;
setlinestyle(0,0,1);
end;

procedure modelli;
begin
circle(100,100,50);
circle(200,100,50);
circle(300,100,50);
circle(400,100,50);setlinestyle(0,0,1);
moveto(100,100);lineto(200,100);
setlinestyle(0,0,3);moveto(300,100);lineto(400,100);setlinestyle(0,0,1);
testo(100,20,'sostanza A');testo(100,40,' EcA = EcB ');
testo(100,60,' FaA < FaB ');
testo(300,20,'sostanza B');
testo(300,40,' EcB = EcA ');testo(300,60,' FaB > FaA ');
testo(100,90,' EcA > FaA ');testo(300,90,' EcB < FaB ');pausa;
testo(20,200,'alla temperatura T si verifica che EcA = EcB ');
testo(20,210,'se la ...................EcA > FaA la sostanza A fonde ');
moveto(100,100);setcolor(black);lineto(200,100);setcolor(white);
testo(20,220,'mentre se la .....EcB < FaB la sostanza B non fonde ');pausa;
testo(20,240,'si deve aumentare la T in modo che anche la EcB diventi');
testo(20,250,'maggiore della FaB ');pausa;
circle(100,260,50);
circle(200,260,50);
setlinestyle(0,0,1);
moveto(100,260);lineto(200,260);
testo(20,300,'nella solidificazione si libera energia dovuta ai legami');
testo(20,320,'che si formano:la temperatura rimane costante');
setlinestyle(0,0,1);
end;

procedure ipotesi;
begin
testo(20,20,'1..le particelle costituenti i corpi solidi,liquidi,gassosi');
testo(20,30,'sono animate da moti vibratori,dotate di energia cinetica Ec');
testo(20,40,'proporzionale alla temperatura Ec =kT    ');
testo(20,50,'uguale per tutte le particelle alla stessa temperatura EcA=EcB ');
pausa;
testo(20,70,'2..le particelle si attirano a causa delle forze di     ');
testo(20,80,'interazione,in funzione della diversa natura delle sostanze    ');
testo(20,90,'e dei diversi tipi di legami:ionici,covalenti,deboli..   ');
testo(20,100,'EcA = EcB ....FaA <> FaB     ');pausa;
testo(20,120,'3..un corpo solido se riceve energia aumenta la sua Ec:    ');
testo(20,130,'indicata da aumento di temperatura   ');pausa;
testo(20,150,'4..se la energia fornita permette alla Ec di superare la     ');
testo(20,160,'forza di attrazione Fa , ( Ec > Fa ) ,il corpo inizia la    ');
testo(20,170,'fusione:la energia fornita durante la fusione viene tutta   ');
testo(20,180,'utilizzata per compiere il lavoro di separazione delle   ');
testo(20,190,'particelle,e quindi la temperatura non aumenta    ');pausa;
testo(20,210,'5..terminata la fusione,altra energia fornita fa crescere    ');
testo(20,220,'energia cinetica del liquido,indicata da temperatura che    ');
testo(20,230,'riprende a crescere    ');pausa;
testo(20,250,'6..essendo diverse le FaA e FaB ,risultera necessario    ');
testo(20,260,'fornire diverse quantita di energia per raggiungere la    ');
testo(20,270,'fusione,e quindi diverse temperature in funzione di A e B   ');
testo(20,280,'es. se (FaA < FaB)  e (EcA = EcB)  e (FaA < EcA e FaB > EcB) ');
testo(20,290,'potra fondere sostanza A e non sostanza B    ');
pausa;cancellagrafo;
testo(20,20,'8..il calore necessario per fondere completamente una mole    ');
testo(20,30,'di una sostanza,varia in funzione della forza dei legami    ');
testo(20,40,'da vincere tra le diverse particelle:CALORE di FUSIONE    ');
pausa;
testo(20,60,'9..durante la SOLIDIFICAZIONE la temperatura rimane costante    ');
testo(20,70,'anche se il corpo cede calore,perche si vanno formando dei    ');
testo(20,80,'legami tra le particelle che solidificano,e tali legami    ');
testo(20,90,'liberano energia che subentra a quella ceduta   ');sosta1;
testo(20,110,'10..il calore ceduto da una mole che solidifica equivale    ');
testo(20,120,'al calore assorbito durante la fusione     ');
testo(20,130,'CALORE di FUSIONE = CALORE di SOLIDIFICAZIONE    ');
pausa;cancellagrafo;setcolor(white);
modelli;pausa;
end;


procedure leggif;
begin

testo(20,20,'1..ogni sostanza pura fonde a una temperatura caratteristica');
testo(20,30,'2..durante la fusione,la temperatura rimane costante');
sosta1;
testo(20,40,'1..ogni sostanza pura solidifica a una temperatura caratteristica');
testo(20,50,'2..durante la solidificazione la temperatura rimane costante');
sosta1;
testo(20,70,'3..temperatura di fusione = temperatura di solidificazione');
sosta1;
end;

procedure pro1;
begin
outtextxy(20,20,'sostanze diverse A,B a parita di moli');
outtextxy(20,30,'ricevono le stesse quantita di calore');
outtextxy(20,40,'tabella delle temperature misurate');
outtextxy(20,50,'----------------------------------------');
outtextxy(20,60,'prendi nota della tabella e disegna i diagrammi Calore/Ta,Tb');
outtextxy(20,70,'cerca di esprimere le leggi osservate');pausa;
outtextxy(20,80,'------------------------------------------');
outtextxy(20,100,'calore...tB....tA    ');
outtextxy(20,110,'10.......10....15    ');
outtextxy(20,120,'20.......20....30    ');
outtextxy(20,130,'30.......30....45    ');
outtextxy(20,140,'40.......40....60    ');
outtextxy(20,150,'50.......50....60    ');
outtextxy(20,160,'60.......60....60    ');
outtextxy(20,170,'70.......70....75    ');
outtextxy(20,180,'80.......80....90    ');
outtextxy(20,190,'90.......80...105    ');
outtextxy(20,200,'100......80...120    ');
outtextxy(20,210,'110......90...135    ');
outtextxy(20,220,'120.....100...150    ');
pausa;cancellagrafo;
testo(20,200,'esperimento e curva di riscaldamento e fusione');
testo(20,230,'sostanze diverse A,B sono rifornite con la stessa energia');
testo(20,240,'1..entrambe mostrano un aumento di temperatura proporzionale');
testo(20,250,'   alla energia fornita,ma diverso per le diverse sostanze');
testo(20,260,'2..entrambe cessano di aumentare la temperatura,pur ');
testo(20,270,'   continuando ad assorbire energia termica');
testo(20,280,'3..il valore della temperatura che permane immutato varia');
testo(20,290,'   con la natura delle sostanze  tA=60...tB=80 ');
testo(20,300,'4..ad un certo punto entrambe le sostanze riprendono ad');
testo(20,310,'   aumentare la temperatura');
testo(20,320,'5..INTERPRETAZIONE e ANALISI del fenomeno ');
pausa;
end;

procedure pro2;
begin
assi2;
testo(20,20,'diagramma di riscaldamento e fusione sostanze pure diverse');
testo(20,30,'con uguale numero di moli');
testo(350,80,'sostanza A :tA=60');
moto1a(20,0,300);sosta1;moto2a(80,0,240);sosta1;moto1a(140,0,240);
pausa;testo(370,100,'sostanza B :tB=80');
moto1b(20,0,300);sosta1;moto2a(60,0,220);sosta1;moto1b(120,0,220);sosta1;
testo(20,50,'curva di riscaldamento simile in A e B ');
testo(20,60,'cambia temperatura di fusione,pendenza grafico');pausa;
cancellagrafo;
end;

procedure pro3;
begin
outtextxy(20,20,'sostanze uguali A1,A2 con diverso numero di moli');
outtextxy(20,30,'ricevono le stesse quantita di calore');
outtextxy(20,40,'tabella delle temperature misurate');pausa;
outtextxy(20,60,'calore ..tA1.....tA2');
outtextxy(20,70,'10.......10.......5');
outtextxy(20,80,'20...... 20.......10');
outtextxy(20,90,'30.......30.......15');
outtextxy(20,100,'40.......40.......20');
outtextxy(20,110,'50.......50.......25');
outtextxy(20,120,'60.......60.......30'    );
outtextxy(20,130,'70.......60.......35'    );
outtextxy(20,140,'80.......60.......40'    );
outtextxy(20,150,'90.......70.......45'    );
outtextxy(20,160,'100......80.......50'    );
outtextxy(20,170,'110......90.......55'    );
outtextxy(20,180,'120.....100.......60'    );
outtextxy(20,190,'130.....110.......60'    );
outtextxy(20,200,'140.....120.......60'    );
outtextxy(20,210,'150.....130.......60'    );
outtextxy(20,220,'160.....140.......60'    );
outtextxy(20,230,'170.....150.......60'    );
outtextxy(20,240,'180.....160.......65'    );
outtextxy(20,250,'190.....170.......70'    );
pausa;
outtextxy(20,260,'----------------------------------------');
outtextxy(20,270,'prendi nota della tabella e disegna i diagrammi Calore/tA1,tA2');
outtextxy(20,280,'cerca di esprimere le leggi osservate');
pausa;
end;


procedure pro4;
begin
assi2;
testo(20,20,'diagramma di riscaldamento e fusione sostanze pure uguali');
testo(20,30,'con diverso numero di moli A1 < A2 ');
testo(350,80,'sostanza A1 ');
moto1c;pausa;testo(400,100,'sostanza A2');
moto2c;
testo(20,340,'esprimi le tue osservazioni sui diagrammi');pausa;
testo(20,50,'curva di riscaldamento simile in A1 e A2 ');
testo(20,60,'cambia calore fornito ,pendenza grafico');
testo(20,70,'temperatura di fusione identica tA1 = tA2 ');
pausa;
end;


procedure pro5;
begin
setlinestyle(1,0,1);
assi;
testo(20,340,'processo di riscaldamento e FUSIONE');
testo(20,80,'SOLIDO riscaldato:temperatura aumenta');moto1(20,0,300);
sosta1;testo(30,200,'Tfusione');testo(10,240,'----');
testo(40,70,'FUSIONE in corso:temperatura costante');moto2(80,0,240);
sosta1;
testo(60,60,'LIQUIDO riscaldato:temperatura aumenta');moto3(140,300,240);
pausa;
testo(100,350,'processo di raffreddamento e SOLIDIFICAZIONE');
testo(100,10,'LIQUIDO cede calore:temperatura decresce');
moto4(200,300,180);sosta1;testo(30,190,'Tsolidificazione');
testo(120,20,'SOLIDIFICAZIONE in corso:temperatura costante');
moto2(260,300,240);sosta1;
testo(140,30,'SOLIDO cede calore:temperatura decresce');
moto4(320,300,240);
moveto(200,180);setcolor(white);lineto(200,300);
testo(30,280,'Solido');testo(90,230,'So+Li');testo(180,260,'Liquido');
testo(270,230,'Li+So');testo(330,280,'Solido');
pausa;cancellagrafo;
testo(20,200,'osservazioni sperimentali');
testo(20,230,'permettono di ricavare le leggi della FUSIONE,SOLIDIFICAZIONE');
leggif;pausa;cancellagrafo;
testo(20,20,'si definisce CALORE latente di FUSIONE');
testo(20,30,'il calore assorbito dalla unita di massa che si trovi alla');
testo(20,40,'temperatura di fusione,per fondere completamente:');
testo(20,50,'Calore caratteristico per ogni sostanza pura');pausa;
testo(20,120,'si definisce CALORE latente di SOLIDIFICAZIONE');
testo(20,130,'il calore ceduto dalla unita di massa che si trovi alla');
testo(20,140,'temperatura di solidificazione,per solidificare completamente:');
testo(20,150,'Calore caratteristico per ogni sostanza pura');pausa;
 testo(20,170,'Calore di fusione = Calore di solidificazione ');
 pausa;cancellagrafo;
 testo(20,20,'ripetendo esperimento con altre sostanze pure,si ottiene');
 testo(20,30,'lo stesso risultato,espresso nelle leggi precedenti');
 testo(20,40,'CAMBIA il valore della temperatura di fusione,solidificazione');
 testo(20,50,'CAMBIA il valore dei calori di fusione e solidificazione');
 testo(20,60,'in funzione delle diverse sostanze,e delle diverse forze');
 testo(20,70,'di coesione che interessano le diverse sostanze');
 pausa;cancellagrafo;
end;

procedure pro6;
begin
ipotesi;
end;

procedure pro7;
begin
testo(20,20,'fine esperimento:rivedi con calma e prepara la relazione:');
testo(20,40,'arrivederci ');pausa;
end;


procedure pro8;
begin
pro1;cancellagrafo;pro2;cancellagrafo;
cancellagrafo;pro3;cancellagrafo;
cancellagrafo;pro4;cancellagrafo;pro5;
cancellagrafo;pro6;cancellagrafo;pro7;
cancellagrafo;
end;

procedure fine;  (* conferma uscita operazione *)
begin
outtextxy(30,30,'fine operazione:confermare :premi enter');
readln;
end;

procedure scelta;  (* procedura con scelta opzioni e uscita *)
var s,sn:string;opzione:integer;
begin
cancellagrafo;
setcolor(white);
outtextxy(20,20,'seleziona opzione per FUSIONE e SOLIDIFICAZIONE');
outtextxy(20,30,'1...sostanze DIVERSE:curva riscaldamento e fusione');
outtextxy(20,40,'2...sostanze diverse:continua precedente');
outtextxy(20,50,'3...sostanze UGUALI:curva riscaldamento e fusione ');
outtextxy(20,60,'4...sostanze uguali:continua precedente ');
outtextxy(20,70,'5...UNA sostanza:diagramma FUSIONE e SOLIDIFICAZIONE');
outtextxy(20,80,'6...interpretazione leggi della fusione e solidificazione');
outtextxy(20,90,'7...conclusione ');
outtextxy(20,100,'8..serie AUTOMATICA simulazione ');
outtextxy(20,110,'9...fine ');
outtextxy(20,120,'scelta =');readln(opzione);
cancellagrafo;setcolor(white);
case opzione of
1:pro1;2:pro2;3:pro3;4:pro4;5:pro5;6:pro6;7:pro7;8:pro8;
9:fine;
end;
cancellagrafo;
setcolor(white);
outtextxy(30,50,'altra operazione?Esperimenti?:premi S...fine:premi N ');
 readln(sn);
if ((sn='S') or (sn='s')) then scelta ;
end;

begin            (* programma di lancio *)
grafica;
t2:=20;
outtextxy(20,30,'');outtextxy(20,40,'');
outtextxy(20,60,'esempio sperimentazione su comportamento delle sostanze pure');
outtextxy(20,70,'in rapporto alla energia fornita o ceduta');
outtextxy(20,90,'FUSIONE e SOLIDIFICAZIONE ');
outtextxy(20,110,'------------------------------------------------------------');
outtextxy(20,110,'dipositivi necessari:');
outtextxy(20,120,'contenitori per sostanze da riscaldare');
outtextxy(20,130,'termometri per misurare temperature ');
outtextxy(20,140,'sorgente di calore da fornire in modo misurabile');
outtextxy(20,150,'------------------------------------------------------------');
outtextxy(20,160,'COME USARE il PROGRAMMA:attivare in modo consecutivo le varie');
outtextxy(20,170,'opzioni 8,1,2,3,4,5,6,7.9..come indicato nel corso del programma');
outtextxy(20,180,'possibile anche vedere solo parti separate o con altro ordine');
outtextxy(20,190,'');pausa;cancellagrafo;
repeat
setcolor(white);
outtextxy(20,210,'indica velocita simulazione ,minore di 101 ');
outtextxy(20,220,'prova per vedere velocemente la prima volta :1 ');
outtextxy(20,230,'poi riprova lentamente con 5..10..20..50..100 ');
outtextxy(20,240,'NOTA:quando rispondi,non si vede quello che scrivi');
outtextxy(20,250,'appare solo un segnetto in alto..SCRIVI ESATTO!!!');
outtextxy(20,260,'scrivi valore scelto ');readln(valore);
until ((valore>0) and (valore<101));
scelta;
closegraph;restorecrtmode;
end.

program fusi2;
(* processo di fusione e solidificazione *)
(* disco 70 dispensa 55  con turbo pascal v.5 cfr.fusione *)

uses crt,graph;
const nota1:array[1..9] of string[70]=
  ('1.ogni sostanza pura fonde o solidifica ad una temperatura',
 '  caratteristica della sostanza considerata',
'2.temperatura di fusione = temperatura di solidificazione',
'3.durante la fusione,solidificazione,la temperatura',
'  rimane costante',
'  calore di fusione assorbito per fondere completamente',
'  unita di massa alla temperatura di fusione',
'  calore di solidificazione ceduto per solidificare',
'  completamente unita di massa a temperatura di solid.ne');


type string15=string[20];
var
    altro,sosta,f:integer;


procedure presenta;
begin
writeln('passaggi di stato :fusione e solidificazione');
writeln;
writeln('riscaldando una sostanza pura solida,si osserva un aumento');
writeln('della temperatura,che varia con la natura della sostanza,');
writeln('a parita di massa considerata');
writeln;
writeln('continuando a fornire energia si nota che la temperatura');
writeln('non aumenta piu:la sostanza inizia la fusione');
writeln('e durante tutta la fusione la temperatura rimane costante');
writeln;
writeln('quando tutta la sostanza risulta fusa,la temperatura ');
writeln('del liquido originato riprende ad aumentare se si fornisce');
writeln('altra energia.');
writeln;
writeln('il fenomeno inverso avviene con la solidificazione :');
writeln('il liquido cede calore e solidifica a temperatura costante');
writeln('temperatura che risulta uguale a quella di fusione');
writeln;
writeln('indica velocita simulazione 10=rapido...500=lento');
readln(sosta);
writeln('premi return,prego');readln;clrscr;
end;

procedure grafica(f,sc,tp:integer);   (* attiva pagina grafica*)
(* coordinate finestra,colore sfondo e disegno *)
var    stringa:string;

begin
 stringa:='c:\tp\bgi';                (* 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);
 setcolor(14);
end;

procedure testo1(x,y:integer;nome:string); (* stampa legenda testo *)
begin
 setcolor(1);
 outtextxy(x,y,nome);
 setcolor(14);
end;

procedure pausa;                (* premere return per proseguire *)
var ch:char;
begin
testo(450,440,'premi return,prego');
 ch:=readkey;
 setcolor(1);
 testo(450,440,'premi return,prego');
 setcolor(14);
end;

procedure titolo;
begin
 settextstyle(5,0,4);
 setcolor(5);
 outtextxy(20,20,'passaggi di stato ');
 settextstyle(4,0,4);
 setcolor(2);
 outtextxy(50,50,'F U S I O N E');
 testo(120,70,'e');
 setcolor(7);
 outtextxy(50,100,'solidificazione');
end;

procedure blocco1(a1,a2,c1:integer);
var h,m:integer;
begin
 m:=15;
 for h:=a1 to a2 do
  begin
   setcolor(c1);
   outtextxy(10,m,nota1[h]);
   m:=m+10; c1:=c1+1;
  end;
 end;

procedure assi;
begin
 setfillstyle(2,5);
 bar(10,50,50,400);
 setfillstyle(1,5);
 bar(20,400,40,50);
 setcolor(2);
 settextstyle(3,0,2);
 line(30,50,30,400);
 testo(20,20,'temperatura in variazione');
 line(20,400,600,400);
 settextstyle(1,0,1);
 testo(20,420,'calore fornito (fusione) o ceduto(solidificazione)');
 settextstyle(0,0,0);
end;

procedure disegno1(x1,x2,y,k,c:integer);
var a,x,z1,e:integer;

begin
x:=50;z1:=1;
setcolor(c);
 outtextxy(500,120,'sostanza in');
 outtextxy(500,130,'trasformazione');
 for a:=x1 to x2 do
  begin
  putpixel(X+a,y-5,14);
  line(x+a,300,x+a,y);
  if (a<250) then setfillstyle(1,15)
   else if (a>=250) then setfillstyle(1,5);
   bar(20,y,40,y);
   if (a<100) then outtextxy(300,50,'solido in riscaldamento');
   if (a>=100) and (a<=200) then outtextxy(300,60,'solido in fusione');
   if (a>200) and (a<=250) then outtextxy(300,70,'liquido in riscaldamento');
   if (a>250) and (a<300) then outtextxy(300,80,'liquido in raffreddamento');
   if (a>=300) and (a<=400) then outtextxy(300,90,'liquido in solidificazione');
   if (a>400) then outtextxy(300,100,'solido in raffreddamento');
   if (a>50) and (a<100) then begin
   line(531,270-z1,619,270-z1); z1:=z1+2;end;
   if (a>=100) and (a<=200) then begin
   line(531,270-z1,619,270-z1); z1:=z1+1;
   outtextxy(10,180,'T.fusione= T.solidificazione');end;
   if (a>200) and (a<250) then begin
   line(531,170+z1,619,170+z1);z1:=z1+2;end;
   if (a>=250) and(a<300) then begin
   line(531,170+z1,619,170+z1);z1:=z1+2;end;
   if (a>=300) and (a<=400) then begin
   line(531,170+z1,619,170+z1);z1:=z1+1;end;
   if (a>400) and (a<500) then begin
   line(531,170+z1,619,170+z1);z1:=z1+1;end;
  sound(200+y);
  delay(sosta);
  y:=y-k;
  end;
  setcolor(14);
  line(300,300,300,150);
  setcolor(2);
  nosound;
end;

procedure disegno(x1,x2,y,k,c:integer);
var a,x:integer;

begin
x:=50;
setcolor(c);
 for a:=x1 to x2 do
  begin
  putpixel(X+a,y-5,14);
  putpixel(x+a,310,4);
  if (a<250) then setfillstyle(1,15)
   else if (a>=250) then setfillstyle(1,5);
   bar(20,y,40,y);
  sound(300+y);
  delay(sosta);
  y:=y-k;
  end;
  setcolor(14);
  line(300,300,300,150);
  setcolor(2);
  nosound;
end;

procedure disegno2;
begin
line(50,300,550,300); (* orizzontale*)
line(150,300,150,200);
line(250,300,250,200);
line(300,300,300,150);
line(350,300,350,200);
line(450,300,450,200);
end;

procedure fine;
begin
exit;
end;

procedure fonde;
begin
rectangle (530,150,620,271);
setfillstyle(1,14);
bar(531,170,619,270);
end;

procedure metalli;
begin
setcolor(2);
outtextxy(100,60,'sostanza n.1:alto punto di fusione');
line(50,300,150,200);
line(150,200,300,200);
line(300,200,350,150);
setcolor(4);
outtextxy(100,70,'sostanza n.2:basso punto di fusione');
line(50,300,150,250);
line(150,250,300,250);
line(300,250,400,150);
testo(100,80,'curve di riscaldamento e fusione simili');
testo(100,90,'temperature di fusione e calore assorbito diversi');
testo(100,100,'per sostanze di natura diversa a parita di massa');
end;


procedure programma;   (* procedura principale*)
procedure scelta;
begin
 setcolor(white);
 cleardevice;
 testo(10,40,'per altra prova:scrivi velocita 10..100..return :1 return');
 testo(10,60,'per finire :scrivi 0 e return...................:0 return');
 read(sosta);read(altro);
 if (altro=1) then programma
  else if(altro=0) then fine;
end;
begin
 grafica(1,9,0);
 titolo;
 pausa;grafica(1,9,0);
 blocco1(1,9,4);
 pausa;
 grafica(1,0,0);
 assi;
 metalli;
 pausa;
 grafica(1,0,0);assi;
 fonde;
 setcolor(2);
 testo(50,330,'solido');
 disegno(0,100,300,1,2);   (* fusione *)
 setcolor(5);
 testo(50,360,'processo di fusione');
 setcolor(4);
 testo(150,320,'solido+liquido');
 disegno(100,200,200,0,4);
 setcolor(3);
 testo(270,310,'liquido');
 disegno(200,250,200,1,3);
 pausa;
 disegno(250,300,150,-1,3);(* solidificazione *)
 setcolor(5);
 testo(350,360,'processo di solidificazione');
 setcolor(4);
 testo(350,320,'liquido+solido');
 disegno(300,400,200,0,4);
 setcolor(2);
 testo(500,330,'solido');
 disegno(400,500,200,-1,2);
 setcolor(14);
 disegno2;
 pausa;
 setcolor(2);
 testo(50,330,'solido');
 disegno1(0,100,300,1,2);   (* fusione *)
 setcolor(5);
 testo(50,360,'processo di fusione');
 setcolor(4);
 testo(150,320,'solido+liquido');
 disegno1(100,200,200,0,4);
 setcolor(3);
 testo(270,310,'liquido');
 disegno1(200,250,200,1,3);
 disegno2;
 pausa;
 disegno1(250,300,150,-1,7);(* solidificazione *)
 setcolor(4);
 testo(350,320,'liquido+solido');
 disegno1(300,400,200,0,14);
 setcolor(5);
 testo(350,360,'processo di solidificazione');
 setcolor(2);
 testo(500,330,'solido');
 disegno1(400,500,200,-1,2);
 pausa;
 scelta;
 end;

 begin           (* programma principale *)
 clrscr;
 presenta;
 programma;
 closegraph;restorecrtmode;
 pausa;
 end.

program fusi3;
(* processo di fusione e solidificazione *)
(* disco 70 dispensa 55  con turbo pascal v.5 *)

uses crt,graph;
type string15=string[20];
var
    altro,sosta,f:integer;


procedure presenta;
begin
writeln('passaggi di stato :fusione e solidificazione');
writeln;
writeln('riscaldando una sostanza pura solida,si osserva un aumento');
writeln('della temperatura,che varia con la natura della sostanza,');
writeln('a parita di massa considerata');
writeln;
writeln('continuando a fornire energia si nota che la temperatura');
writeln('non aumenta piu:la sostanza inizia la fusione');
writeln('e durante tutta la fusione la temperatura rimane costante');
writeln;
writeln('quando tutta la sostanza risulta fusa,la temperatura ');
writeln('del liquido originato riprende ad aumentare se si fornisce');
writeln('altra energia.');
writeln;
writeln('il fenomeno inverso avviene con la solidificazione :');
writeln('il liquido cede calore e solidifica a temperatura costante');
writeln('temperatura che risulta uguale a quella di fusione');
writeln;
writeln('indica velocita simulazione 10=rapido...500=lento');
readln(sosta);
writeln('premi return,prego');readln;clrscr;
end;

procedure grafica;   (* attiva pagina grafica*)
(* coordinate finestra,colore sfondo e disegno *)
var    stringa:string;
       sc,tp:integer;

begin
 sc:=0;tp:=0;
 stringa:='c:\tp\bgi';                (* indica ove cercare GRAPH *)
 initgraph(sc,tp,stringa);      (* attiva scheda grafica *)
 setbkcolor(0);                 (* colore sfondo *)
end;

procedure testo(x,y:integer;nome:string); (* stampa legenda testo *)
begin
 outtextxy(x,y,nome);
 setcolor(14);
end;

procedure testo1(x,y:integer;nome:string); (* stampa legenda testo *)
begin
 setcolor(1);
 outtextxy(x,y,nome);
 setcolor(14);
end;

procedure pausa;                (* premere return per proseguire *)
var ch:char;
begin
testo(450,440,'premi return,prego');
 ch:=readkey;
 setcolor(1);
 testo(450,440,'premi return,prego');
 setcolor(14);
end;

procedure leggi;
begin
testo(100,40,'1.ogni sostanza pura fonde o solidifica ad una temperatura');
testo(100,50,'  caratteristica della sostanza considerata');
testo(100,60,'2.temperatura di fusione = temperatura di solidificazione');
testo(100,70,'3.durante la fusione,solidificazione,la temperatura');
testo(100,80,'  rimane costante');
setcolor(5);
testo(100,90,'  calore di fusione assorbito per fondere completamente');
testo(100,100,'  unita di massa alla temperatura di fusione');
setcolor(3);
testo(100,110,'  calore di solidificazione ceduto per solidificare');
testo(100,120,'  completamente unita di massa a temperatura di solid.ne');
end;

procedure assi;
begin
 setfillstyle(2,5);
 bar(10,50,50,400);
 setcolor(2);
 settextstyle(3,0,2);
 line(30,50,30,400);
 testo(20,20,'temperatura in variazione');
 line(20,400,600,400);
 settextstyle(1,0,1);
 testo(20,420,'calore fornito (fusione) o ceduto(solidificazione)');
 settextstyle(0,0,0);
end;

procedure disegno1(x1,x2,y,k,c:integer);
var a,x,z1:integer;

begin
x:=50;z1:=1;
setcolor(c);
 outtextxy(530,110,'sostanza in');
 for a:=x1 to x2 do
  begin
  putpixel(X+a,y-5,14);
  line(x+a,300,x+a,y);
   if (a<100) then outtextxy(300,50,'solido in riscaldamento');
   if (a>200) and (a<=250) then outtextxy(300,60,'liquido in riscaldamento');
   if (a>250) and (a<300) then outtextxy(300,70,'liquido in raffreddamento');
   if (a>400) then outtextxy(300,80,'solido in raffreddamento');
   if (a>=100) and (a<=200) then
   begin
   line(530,270-z1,618,270-z1);
   z1:=z1+1;
   outtextxy(530,120,'fusione');
   outtextxy(10,180,'T.fusione= T.solidificazione');
   end;
   if (a>=300) and (a<=400) then
   begin
   line(530,170+z1,618,170+z1);
   z1:=z1+1;
   setcolor(1);
   outtextxy(530,120,'fusione');
   setcolor(14);
   outtextxy(510,130,'solidificazione');
   setcolor(c);
   end;

  sound(200+y);
  delay(sosta);
  y:=Y-k;
  end;
  setcolor(14);
  line(300,300,300,150);
  setcolor(2);
  nosound;
end;

procedure disegno(x1,x2,y,k,c:integer);
var a,x:integer;

begin
x:=50;
setcolor(c);
 for a:=x1 to x2 do
  begin
  putpixel(X+a,y-5,14);
  putpixel(x+a,310,4);
  sound(200+y);
  delay(sosta);
  y:=Y-k;
  end;
  nosound;
end;

procedure disegno2;
begin
line(50,300,550,300); (* orizzontale*)
line(150,300,150,200);
line(250,300,250,200);
line(300,300,300,150);
line(350,300,350,200);
line(450,300,450,200);
end;

procedure fine;
begin
exit;
end;

procedure fonde;
begin
rectangle (529,150,620,271);
setfillstyle(1,2);
bar(540,170,610,270);
end;

procedure metalli;
begin
setcolor(2);
outtextxy(100,60,'sostanza n.1:alto punto di fusione');
line(50,300,150,200);
line(150,200,300,200);
line(300,200,350,150);
setcolor(4);
outtextxy(100,70,'sostanza n.2:basso punto di fusione');
line(50,300,150,250);
line(150,250,300,250);
line(300,250,400,150);
testo(100,80,'curve di riscaldamento e fusione simili');
testo(100,90,'temperature di fusione e calore assorbito diversi');
testo(100,100,'per sostanze di natura diversa a parita di massa');
end;


procedure programma;   (* procedura principale*)
procedure scelta;
begin
  cleardevice;
 setcolor(7);
 testo(10,40,'per altra prova:scrivi velocita 10..100..return :1 return');
 testo(10,60,'per finire :scrivi 0 e return...................:0 return');
 read(sosta);read(altro);
 if (altro=1) then programma
  else if(altro=0) then fine;
end;
 begin                    (* procedura fondamentale *)
 grafica;
 leggi;
 pausa;
 grafica;
 assi;
 metalli;
 pausa;
 grafica;assi;
 fonde;
 setcolor(2);
 testo(50,330,'solido');
 disegno(0,100,300,1,2);   (* fusione *)
 setcolor(5);
 testo(50,360,'processo di fusione');
 setcolor(4);
 testo(150,320,'solido+liquido');
 disegno(100,200,200,0,4);
 setcolor(3);
 testo(270,310,'liquido');
 disegno(200,250,200,1,3);
 pausa;
 disegno(250,300,150,-1,3);(* solidificazione *)
 setcolor(5);
 testo(350,360,'processo di solidificazione');
 setcolor(4);
 testo(350,320,'liquido+solido');
 disegno(300,400,200,0,4);
 setcolor(2);
 testo(500,330,'solido');
 disegno(400,500,200,-1,2);
 setcolor(14);
 disegno2;
 pausa;
 setcolor(2);
 testo(50,330,'solido');
 disegno1(0,100,300,1,2);   (* fusione *)
 setcolor(5);
 testo(50,360,'processo di fusione');
 setcolor(4);
 testo(150,320,'solido+liquido');
 disegno1(100,200,200,0,4);
 setcolor(3);
 testo(270,310,'liquido');
 disegno1(200,250,200,1,3);
 disegno2;
 pausa;
 disegno1(250,300,150,-1,3);(* solidificazione *)
 setcolor(4);
 testo(350,320,'liquido+solido');
 disegno1(300,400,200,0,14);
 setcolor(5);
 testo(350,360,'processo di solidificazione');
 setcolor(2);
 testo(500,330,'solido');
 disegno1(400,500,200,-1,2);
 pausa;
 scelta;
 end;

 begin           (* programma principale *)
 clrscr;
 presenta;
 programma;
 closegraph;restorecrtmode;
 end.