esercizi di chimica con turbo pascal 1.1 su mac
Program bolle; (* grafico per simulazione leggi della EBOLLIZIONE e CONDENSAZIONE *)
USES Memtypes,QuickDraw,OSIntf,ToolIntf;
VAR gPort: GrafPort; cancella,gra1,gra2,gomma:rect; a,x,y,z,valore,b: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,0,0,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 ebollizione,condensazione'); testo(30,320,'calore fornito a liquido e vapore'); testo(200,330,'calore ceduto da vapore e liquido'); 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 ebollizione'); testo(30,320,'calore fornito a liquido e vapore');pausa; moveto(1,1); end;
procedure moto1(x,y,z:integer); (* liquido *) 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); (* ebollizione *) 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); (* ebollizione *) 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); (* liquido *) 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); (* ebollizione *) 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 bolle '); moveto(125,125);penpat(black);lineto(225,125);penpat(white); testo(20,220,'mentre se la .....EcB < FaB la sostanza B non bolle ');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 condensazione 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 liquidi'); 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 liquido 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,'vaporizzazione:la energia fornita durante la ebollizione 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 ebollizione,altra energia fornita fa crescere '); testo(20,220,'energia cinetica del vapore,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,'ebollizione,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 bollire sostanza A e non sostanza B '); pausa;cancellagrafo; testo(20,20,'8..il calore necessario per bollire 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 EBOLLIZIONE '); sosta1; testo(20,60,'9..durante la CONDENSAZIONE 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 condensano,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 condensa equivale '); testo(20,120,'al calore assorbito durante la ebollizione '); testo(20,130,'CALORE di EBOLLIZIONE = CALORE di CONDENSAZIONE '); pausa;cancellagrafo;penpat(white); modelli;pausa; end;
procedure leggif; begin testo(20,20,'1..ogni sostanza pura bolle a una temperatura caratteristica'); testo(20,30,'2..durante la ebollizione,la temperatura rimane costante'); sosta1; testo(20,40,'1..ogni sostanza pura condensa a una temperatura caratteristica'); testo(20,50,'2..durante la condensazione la temperatura rimane costante'); sosta1; testo(20,60,'3..temperatura di ebollizione = temperatura di condensazione'); sosta1; testo(20,70,'4..la temperatura aumenta se aumenta la pressione esterna'); sosta1; testo(20,80,'5..alla temperatura di ebollizione,la tensioneVA=pressione esterna'); sosta1; end;
procedure tabella; begin cancellagrafo; 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); end;
procedure analizza; begin cancellagrafo; testo(20,200,'esperimento e curva di riscaldamento ed ebollizione'); 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 '); 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; tabella;pausa;analizza;pausa;tabella;pausa; end;
procedure pro2; begin assi2; testo(20,20,'diagramma di riscaldamento ed ebollizione 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 ebollizione,pendenza grafico');pausa; cancellatesto; end;
procedure tabella2; begin 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'); 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; tabella2;pausa;cancellagrafo; end;
procedure pro4; begin assi2; testo(20,20,'diagramma di riscaldamento ed ebollizione 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 ebollizione identica tA1 = tA2 '); pausa; cancellatesto; end;
procedure pro5; begin assi;cancellatesto;avviso; testo(20,340,'processo di riscaldamento e EBOLLIZIONE'); testo(20,80,'LIQUIDO riscaldato:temperatura aumenta');moto1(20,0,300); sosta1;testo(30,200,'Tebollizione');testo(10,240,'----'); testo(40,70,'EBOLLIZIONE in corso:temperatura costante');moto2(80,0,240); sosta1; testo(60,60,'VAPORE riscaldato:temperatura aumenta');moto3(140,300,240); pausa;cancellatesto;avviso; testo(100,350,'processo di raffreddamento e CONDENSAZIONE'); testo(100,60,'VAPORE cede calore:temperatura decresce'); moto4(200,300,180);sosta1;testo(30,190,'Tcondensazione'); testo(120,70,'CONDENSAZIONE in corso:temperatura costante'); moto2(260,300,240);sosta1; testo(140,80,'LIQUIDO cede calore:temperatura decresce'); moto4(320,300,240); moveto(200,180);penpat(white);lineto(200,300); testo(30,280,'liquido');testo(90,270,'Li+Va');testo(180,260,'vapore'); testo(270,270,'Li+Va');testo(330,280,'liquido'); pausa;cancellatesto;testo(20,20,'osservazioni sperimentali'); testo(20,30,'permettono di ricavare le leggi di :EBOLLIZIONE,CONDENSAZIONE'); pausa;cancellatesto; leggif;pausa;cancellatesto; testo(20,20,'si definisce CALORE di EBOLLIZIONE'); testo(20,30,'il calore assorbito dalla unita di massa che si trovi alla'); testo(20,40,'temperatura di ebollizione,per bollire completamente:'); testo(20,50,'Calore caratteristico per ogni sostanza pura');pausa; cancellatesto; testo(20,20,'si definisce CALORE latente di CONDENSAZIONE'); testo(20,30,'il calore ceduto dalla unita di massa che si trovi alla'); testo(20,40,'temperatura di condensazione,per condensare completamente:'); testo(20,50,'Calore caratteristico per ogni sostanza pura');pausa; cancellatesto; testo(20,20,'Calore di ebollizione = Calore di condensazione '); 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 ebolizione,conden.ne'); testo(20,50,'CAMBIA il valore dei calori di ebollizione e condensazione'); 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,10,'durante il riscaldamento,le molecole superficiali che '); testo(20,20,'posseggono energia sufficiente a staccarsi dal liquido'); testo(20,30,'evaporano nello ambiente esterno');pausa; testo(20,40,'le molecole che si trovano internamente al liquido'); testo(20,50,'evaporano entro piccole bolle di aria facendole gonfiare'); testo(20,60,'e generando una tensione di vapore che aumenta con la'); testo(20,70,'temperatura');pausa; testo(20,80,'le bollicine piene di vapore si staccano e salgono in '); testo(20,90,'superficie per spinta idrostatica:qui giunte,se la tensione'); testo(20,100,'supera o uguaglia la pressione esterna,possono liberare'); testo(20,110,'il vapore contenuto al loro interno'); testo(20,130,'EBOLLIZIONE interessa tutta la massa del liquido,e avviene'); testo(20,140,'in modo evidente,tumultuoso,ad una temperatura ben definita'); testo(20,150,'alla temperatura alla quale la TENSIONE del VAPORE '); testo(20,160,'uguaglia la pressione esterna');pausa; testo(20,170,'risulta quindi evidente che se la pressione esterna aumenta'); testo(20,180,'deve aumentare anche la tensione di vapore,e quindi la'); testo(20,190,'temperatura di ebollizione,e viceversa se la pressione '); testo(20,200,'decresce:EBOLLIZIONE sotto pressione o sotto vuoto ');pausa; testo(20,250,'fine esperimento:rivedi con calma e prepara la relazione:'); testo(20,260,'arrivederci ');pausa; end;
procedure tensione; begin testo(20,20,'se un liquido chiuso in un recipiente viene riscaldato'); testo(20,30,'si nota che il livello del liquido inizialmente decresce '); testo(20,40,'per effetto della evaporazione:ma ad un certo punto il '); testo(20,50,'livello rimane costante:la evaporazione e la condensazione'); testo(20,60,'avvengono alla stessa velocita:equilibrio dinamico');pausa; testo(20,80,'il vapore che sovrasta il liquido (VAPORE SATURO) esercita'); testo(20,90,'una PRESSIONE sul liquido stesso (TENSIONE di VAPORE SATURO)'); testo(20,110,'tale TENSIONE dipende dal tipo di liquido evaporante');pausa; testo(20,130,'se forniamo altro calore,il liquido riprende ad evaporare'); testo(20,140,'fino a raggiungere un nuovo stato di equilibrio con una'); testo(20,150,'nuova TENSIONE di VAPORE SATURO');pausa; testo(20,160,'-------------------------------------------------------'); testo(20,170,'conclusione:ogni sostanza presenta un propria TENSIONE di'); testo(20,180,'VAPORE SATURO che aumenta con la TEMPERATURA '); end;
procedure moto5(y3,n:integer); begin for a:=1 to n do begin moveto(105,y3);penpat(black);lineto(145,y3); for b:=1 to 1000 do write(''); y3:=y3+1; end; end;
procedure moto6(y3,n:integer); begin for a:=1 to n do begin moveto(205,y3);penpat(black);lineto(245,y3); for b:=1 to 1000 do write(''); y3:=y3+1; end; end;
procedure gtensione; begin setrect(gra1,100,100,150,300);framerect(gra1); setrect(gra1,105,200,145,300);paintrect(gra1); setrect(gra2,200,100,250,300);framerect(gra2); setrect(gra2,205,200,245,300);paintrect(gra2); testo(120,120,'vaporeA'); testo(230,120,'vaporeB'); testo(100,320,'sostanza A'); testo(250,320,'sostanza B'); testo(20,20,'tA = 50 gradi '); testo(20,30,'tensioneVA = 0.2 atmosfere '); testo(250,20,'tB = 50 gradi '); testo(250,30,'tensioneVB = 0.1 atmosfere '); moto5(200,20);pausa; moto6(200,10);pausa; testo(20,50,'tA = 60 gradi '); testo(250,50,'tB = 60 gradi '); testo(20,60,'tensioneVA = 0.4 atmosfere '); testo(250,60,'tensioneVB = 0.2 atmosfere '); moto5(220,20);pausa; moto6(210,10);pausa; testo(20,70,'tA = 100 gradi '); testo(250,70,'tB = 100 gradi '); testo(20,80,'tensioneVA = 1 atmosfere '); testo(250,80,'tensioneVB = 0.5 atmosfere '); moto5(240,20);pausa; moto6(220,10);pausa; penpat(white); moveto(300,100);lineto(300,300);lineto(500,300); moveto(300,300);lineto(450,200); moveto(300,300);lineto(450,250); testo(350,100,'tensione vapore'); testo(300,310,'temperatura'); testo(450,180,'A');testo(450,230,'B'); testo(20,330,'notare che a 100 gradi tensioneVA = 1 atmosfera'); testo(20,340,'notare che a parita di temperatura la tensione di vapore'); testo(20,350,'varia con la natura della sostanza ');pausa; end;
procedure pro8; begin tensione;pausa;cancellagrafo; gtensione;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 prima la opzione 8 per notizie su TENSIONE di VAPORE'); writeln('1...sostanze DIVERSE:curva riscaldamento ed ebollizione'); writeln('2...sostanze diverse:continua precedente'); writeln('3...sostanze UGUALI:curva riscaldamento ed ebollizione '); writeln('4...sostanze uguali:continua precedente '); writeln('5...UNA sostanza:diagramma EBOLLIZIONE e CONDENSAZIONE'); writeln('6...interpretazione leggi della EBOLLIZIONE e CONDENSAZIONE'); writeln('7...conclusione '); writeln('8...TENSIONE di VAPORE '); 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; 8:pro8; 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('EBOLLIZIONE,CONDENSAZIONE '); 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('INTRODURRE LIQUIDO o LIQUIDI diversi nei contenitori'); writeln('inserire termometri in LIQUIDO o LIQUIDI diversi'); writeln('somministrare calore e misurare energia fornita'); writeln('------------------------------------------------------------'); writeln('COME USARE il PROGRAMMA:attivare in modo consecutivo le varie'); writeln('opzioni ,8..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.