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.