esercizi di chimica con turbo pascal 1.1 su mac

Program fusione1;
(* grafico per simulazione leggi della FUSIONE *)
   USES Memtypes,QuickDraw,OSIntf,ToolIntf;
   
   VAR
      gPort:   GrafPort;           
      cancella,gra1,gra2,gomma:rect;
      a,x,y,z,valore:integer;
      
procedure pausa; (* attesa che si prema enter *)
begin
moveto(10,10);drawstring('premi enter ');readln;
end;
  
  procedure grafica;  (* attivazione comandi grafici *)
BEGIN
   InitGraf(@thePort);      
   initfonts;
   InitCursor;
   HideCursor;
   OpenPort(@gPort); 
   textfont(9);
   textface([outline]);  
   PenPat(white);
   BackPat(Black);
   EraseRect(gPort.portRect);
   FrameRect(gPort.portRect);
end;
procedure testo(x,y:integer;frase:string);
begin 
penpat(white);
moveto(x,y);drawstring(frase);
end;
procedure avviso;
begin
moveto(200,10);
drawstring('attendere :processo in corso');
end;
procedure cancellatesto;
begin
setrect(cancella,1,1,500,80);
penpat(black);
paintrect(cancella);
end;
procedure cancellagrafo;
begin
setrect(gomma,1,1,500,370);
penpat(black);
paintrect(gomma);penpat(white);
end;
procedure sosta1;
begin
for a:=1 to valore do
write('');
end;
procedure sosta2;
begin
for a:=1 to 1000 do
write('');
end;
procedure assi;
begin
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');
end;
procedure assi2;
begin
moveto(20,100);lineto(20,300);lineto(400,300);
setrect(gra1,400,100,450,300);framerect(gra1);
setrect(gra2,460,100,510,300);framerect(gra2);
setrect(gra1,405,250,445,300);paintrect(gra1);
penpat(gray);
setrect(gra2,465,200,505,300);paintrect(gra2);
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);penpat(gray);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);penpat(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);penpat(gray);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);penpat(gray);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);penpat(gray);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);penpat(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);penpat(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);penpat(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
pensize(3,3);
moveto(20,300);lineto(120,200);lineto(220,200);lineto(300,150);sosta1;
pensize(1,1);
end;
procedure modelli;
begin
setrect(gra1,100,100,150,150);paintoval(gra1);
setrect(gra1,200,100,250,150);paintoval(gra1);
setrect(gra2,300,100,350,150);frameoval(gra2);
setrect(gra2,400,100,450,150);frameoval(gra2);
moveto(125,125);lineto(225,125);
pensize(5,5);moveto(325,125);lineto(425,125);pensize(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 ');sosta1;
testo(20,200,'alla temperatura T si verifica che EcA = EcB ');
testo(20,210,'se la ...................EcA > FaA la sostanza A fonde ');
moveto(125,125);penpat(black);lineto(225,125);penpat(white);
testo(20,220,'mentre se la .....EcB < FaB la sostanza B non fonde ');sosta1;
testo(20,240,'si deve aumentare la T in modo che anche la EcB diventi');
testo(20,250,'maggiore della FaB ');sosta1;
setrect(gra1,100,260,150,310);paintoval(gra1);
setrect(gra2,200,260,250,310);paintoval(gra2);sosta1;
moveto(125,285);lineto(225,285);
testo(20,350,'nella solidificazione si libera energia dovuta ai legami');
testo(20,360,'che si formano:la temperatura rimane costante');
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 ');  
sosta1;
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     ');sosta1;
testo(20,120,'3..un corpo solido se riceve energia aumenta la sua Ec:    ');
testo(20,130,'indicata da aumento di temperatura   ');sosta1;
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    ');sosta1;
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    ');sosta1;
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    ');
sosta1;
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;penpat(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
writeln('sostanze diverse A,B a parita di moli');
writeln('ricevono le stesse quantita di calore');
writeln('tabella delle temperature misurate');
writeln('----------------------------------------');
writeln('prendi nota della tabella e disegna i diagrammi Calore/Ta,Tb');
writeln('cerca di esprimere le leggi osservate');pausa;cancellagrafo;
writeln;
writeln(' tB ':15,' tA ':15,' Calore fornito ':20);
writeln;
writeln(' 10 ':15,' 15 ':15,' 10 ':20);
writeln(' 20 ':15,' 30 ':15,' 20 ':20);
writeln(' 30 ':15,' 45 ':15,' 30 ':20);
writeln(' 40 ':15,' 60 ':15,' 40 ':20);
writeln(' 50 ':15,' 60 ':15,' 50 ':20);
writeln(' 60 ':15,' 60 ':15,' 60 ':20);
writeln(' 70 ':15,' 75 ':15,' 70 ':20);
writeln(' 80 ':15,' 90 ':15,' 80 ':20);
writeln(' 80 ':15,' 105 ':15,' 90 ':20);
writeln(' 80 ':15,' 120 ':15,' 100 ':20);
writeln(' 90 ':15,' 135 ':15,' 110 ':20);
writeln(' 100 ':15,' 150 ':15,' 120 ':20);
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;
cancellatesto;
end;
procedure pro3;
begin
writeln('sostanze uguali A1,A2 con diverso numero di moli');
writeln('ricevono le stesse quantita di calore');
writeln('tabella delle temperature misurate');pausa;
cancellagrafo;
writeln(' tA1 ':15,' tA2 ':15,' Calore fornito ':20);
writeln(' 10 ':15,' 5 ':15,' 10 ':20);
writeln(' 20 ':15,' 10 ':15,' 20 ':20);
writeln(' 30 ':15,' 15 ':15,' 30 ':20);
writeln(' 40 ':15,' 20 ':15,' 40 ':20);
writeln(' 50 ':15,' 25 ':15,' 50 ':20);
writeln(' 60 ':15,' 30 ':15,' 60 ':20);
writeln(' 60 ':15,' 35 ':15,' 70 ':20);
writeln(' 60 ':15,' 40 ':15,' 80 ':20);
writeln(' 70 ':15,' 45 ':15,' 90 ':20);
writeln(' 80 ':15,' 50 ':15,' 100 ':20);
writeln(' 90 ':15,' 55 ':15,' 110 ':20);
writeln(' 100 ':15,' 60 ':15,' 120 ':20);
writeln(' 110 ':15,' 60 ':15,' 130 ':20);
writeln(' 120 ':15,' 60 ':15,' 140 ':20);
writeln(' 130 ':15,' 60 ':15,' 150 ':20);
writeln(' 140 ':15,' 60 ':15,' 160 ':20);
writeln(' 150 ':15,' 60 ':15,' 170 ':20);
writeln(' 170 ':15,' 65 ':15,' 180 ':20);
writeln(' 180 ':15,' 70 ':15,' 190 ':20);
writeln(' 190 ':15,' 75 ':15,' 200 ':20);
writeln('----------------------------------------');
writeln('prendi nota della tabella e disegna i diagrammi Calore/tA1,tA2');
writeln('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;
cancellatesto;
end;
procedure pro5;
begin
assi;cancellatesto;avviso;
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;cancellatesto;avviso;
testo(100,350,'processo di raffreddamento e SOLIDIFICAZIONE');
testo(100,60,'LIQUIDO cede calore:temperatura decresce');
moto4(200,300,180);sosta1;testo(30,190,'Tsolidificazione');
testo(120,70,'SOLIDIFICAZIONE in corso:temperatura costante');
moto2(260,300,240);sosta1;
testo(140,80,'SOLIDO cede calore:temperatura decresce');
moto4(320,300,240);
moveto(200,180);penpat(white);lineto(200,300);
testo(30,280,'Solido');testo(90,270,'So+Li');testo(180,260,'Liquido');
testo(270,270,'Li+So');testo(330,280,'Solido');
pausa;cancellatesto;testo(20,20,'osservazioni sperimentali');
testo(20,30,'permettono di ricavare le leggi della FUSIONE,SOLIDIFICAZIONE');
pausa;cancellatesto;
leggif;pausa;cancellatesto;
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;
cancellatesto;
testo(20,20,'si definisce CALORE latente di SOLIDIFICAZIONE');
testo(20,30,'il calore ceduto dalla unita di massa che si trovi alla');
testo(20,40,'temperatura di solidificazione,per solidificare completamente:');
testo(20,50,'Calore caratteristico per ogni sostanza pura');pausa;
cancellatesto;
 testo(20,20,'Calore di fusione = Calore di solidificazione ');
 pausa;cancellatesto;
 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;cancellatesto;
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
writeln('fine operazione:confermare :premi enter');
readln;
end;
procedure scelta;  (* procedura con scelta opzioni e uscita *)
var s,sn:string;opzione:integer;
begin
clearscreen;
writeln('seleziona opzione per FUSIONE e SOLIDIFICAZIONE');
writeln('1...sostanze DIVERSE:curva riscaldamento e fusione');
writeln('2...sostanze diverse:continua precedente');
writeln('3...sostanze UGUALI:curva riscaldamento e fusione ');
writeln('4...sostanze uguali:continua precedente ');
writeln('5...UNA sostanza:diagramma FUSIONE e SOLIDIFICAZIONE');
writeln('6...interpretazione leggi della fusione e solidificazione');
writeln('7...conclusione ');
writeln('9...fine ');
writeln('scelta =');readln(opzione);
grafica;
case opzione of
1:pro1;
2:pro2;
3:pro3;
4:pro4;
5:pro5;
6:pro6;
7:pro7;
9:fine;
end;
EraseRect(gPort.portRect);
writeln('altra operazione?Esperimenti?:premi S...fine:premi N '); readln(sn);
if ((sn='S') or (sn='s')) then scelta ;
end;
begin            (* programma di lancio *)
clearscreen;
writeln;writeln;
writeln('esempio sperimentazione su comportamento delle sostanze pure');
writeln('in rapporto alla energia fornita o ceduta');
writeln('FUSIONE e SOLIDIFICAZIONE ');
writeln('------------------------------------------------------------');
writeln('dipositivi necessari:');
writeln('contenitori per sostanze da riscaldare');
writeln('termometri per misurare temperature ');
writeln('sorgente di calore da fornire in modo misurabile');
writeln('------------------------------------------------------------');
writeln('COME USARE il PROGRAMMA:attivare in modo consecutivo le varie');
writeln('opzioni ,1,2,3,4,5,6,7.9..come indicato nel corso del programma');
writeln('possibile anche vedere solo parti separate o con altro ordine');
writeln;pausa;clearscreen;
repeat
writeln('indica velocita simulazione ,minore di 2001 ');
writeln('prova per vedere velocemente la prima volta :100 ');
writeln('poi riprova lentamente con 500,1000.. ');
write('scrivi valore scelto ');readln(valore);
until ((valore>1) and (valore<2001));
scelta;
end.