listati turbo pascal per programmi di chimica-fisica
evaporazione
evapo, vap1, vapore1.pro
Program evapo; (* leggi della EVAPORAZIONE *) uses crt,graph; const fondo:array[0..1] of fillpatterntype=((15,20,15,20,15,20,15,20), (22,33,22,33,22,33,22,33)); VAR a,t1,t2:integer; sx:string; procedure grafica; var sc,tp:integer; stringa:string; begin sc:=0; tp:=0; stringa:='c:\tp\bgi'; initgraph(sc,tp,stringa); rectangle(1,1,639,460); setbkcolor(0);setcolor(white); end; procedure cancella; begin cleardevice; end; procedure pausa; (* attesa che si prema enter *) var ch:char; begin outtextxy(400,20,'premi ENTER'); ch:=readkey; end; procedure testo(x,y:integer;frase:string); begin outtextxy(x,y,frase); end; procedure diagramma; begin moveto(50,200);lineto(50,340);lineto(400,340); moveto(50,190);outtext('vapore generato a parita di condizioni'); moveto(50,360);outtext('temperatura,superficie,aerazione'); moveto(50,340);lineto(400,200);outtext('sostanza B'); moveto(50,340);lineto(400,250);outtext('sostanza A'); moveto(300,340);lineto(300,200); moveto(70,210);outtext('V = f(T,S,A,X) '); end; procedure moto1(durata:integer); var x1,x2,y1,y2:integer; begin x1:=100;x2:=300;y1:=100;y2:=100; moveto(x1,320);outtext('liquido in A'); moveto(x2,320);outtext('liquido in B'); setfillpattern(fondo[0],7); bar(x1-5,y1,x1+95,y1+200); bar(x2-5,y1,x2+95,y1+200); setcolor(black); for a:=1 to durata do begin setlinestyle(0,0,1); moveto(x1,y1-2);lineto(x1+90,y1-2); setlinestyle(0,0,3); moveto(x2,y2-2);lineto(x2+90,y2-2);delay(t1); y1:=y1+1;y2:=y2+2; end; setcolor(white); end; procedure moto1a(durata:integer); var x1,x2,y1,y2:integer; begin x1:=100;x2:=300;y1:=100;y2:=100;setfillpattern(fondo[0],7); bar(x1-5,y1,x1+95,y1+200);setfillpattern(fondo[1],6); bar(x2-5,y1,x2+95,y1+200); moveto(x1,320);outtext('liquido in A'); moveto(x2,320);outtext('liquido in B'); setcolor(0); for a:=1 to durata do begin setlinestyle(0,0,1); moveto(x1,y1-2);lineto(x1+90,y1-2); setlinestyle(0,0,3); moveto(x2,y2-2);lineto(x2+90,y2-2);delay(t1); y1:=y1+1;y2:=y2+2; end; setcolor(7); end; procedure moto2(durata:integer); var x1,x2,y1,y2:integer; begin x1:=100;x2:=250;y1:=100;y2:=100; setfillpattern(fondo[0],7); bar(x1-5,y1,x1+95,y1+200); bar(x2-5,y1,x2+200,y2+200); moveto(x1,320);outtext('liquido in A'); moveto(x2,320);outtext('liquido in B'); setcolor(0); for a:=1 to durata do begin setlinestyle(0,0,1); moveto(x1,y1-2);lineto(x1+90,y1-2); setlinestyle(0,0,1); moveto(x2,y2-2);lineto(x2+190,y2-2);delay(t1); y1:=y1+1;y2:=y2+1; end; setcolor(7); end; procedure pro1; begin testo(20,30,'LIQUIDO in A = LIQUIDO in B'); testo(20,50,'TEMPERATURA A < TEMPERATURA B '); moto1(70); testo(20,70,'V.EVAPORAZIONE A < V.EVAPORAZIONE B '); testo(20,340,'vapore generato varia con la temperatura'); testo(20,360,'V = f(T) ');testo(50,370,sx);pausa; cancella; end; procedure pro2; begin testo(20,30,'LIQUIDO in A diverso da LIQUIDO in B'); testo(20,50,'TEMPERATURA A = TEMPERATURA B '); moto1a(70); testo(20,70,'V.EVAPORAZIONE A < V.EVAPORAZIONE B '); testo(20,340,'vapore generato varia con la natura del liquido'); testo(20,360,'V = f(x) ');testo(50,370,sx);pausa;cancella; end; procedure pro3; begin testo(20,30,'LIQUIDO in A = LIQUIDO in B'); testo(20,50,'TEMPERATURA A = TEMPERATURA B '); testo(20,70,'SUPERFICIE in A < SUPERFICIE in B '); moto2(70); testo(20,90,'V.EVAPORAZIONE A < V.EVAPORAZIONE B '); testo(20,340,'vapore generato varia con la superficie evaporante'); testo(20,360,'V = f(S) ');testo(50,370,sx);pausa;cancella; end; procedure pro4; begin testo(20,30,'LIQUIDO in A = LIQUIDO in B'); testo(20,50,'TEMPERATURA A = TEMPERATURA B '); testo(20,70,'SUPERFICIE in A = SUPERFICIE in B '); moveto(80,95);setlinestyle(1,2,4); lineto(210,95);setlinestyle(0,0,1); moto1(70); testo(20,90,'V.EVAPORAZIONE A < V.EVAPORAZIONE B '); testo(20,340,'vapore generato varia con aerazione:A chiuso,B aperto'); testo(20,360,'V = f(A) ');testo(50,370,sx);pausa;cancella; end; procedure pro5; begin testo(450,40,'ATTENDERE'); testo(20,20,'dalle osservazioni sperimentali si deduce che'); testo(20,40,'la quantita di vapore che si genera a parita di tempo'); testo(20,60,'o VELOCITA di VAPORIZZAZIONE,dipende da diversi fattori:'); delay(t2); testo(20,80,'1-aumenta se aumenta la temperatura ----------- V =f(T)'); delay(t2); testo(20,100,'2-aumenta se aumenta la superficie evaporante-- V =f(S)'); delay(t2); testo(20,120,'3-aumenta se aumenta la ventilazione ---------- V = f(A)'); delay(t2); testo(20,140,'4-a parit di condizioni,varia con la sostanza- V = f(X)'); testo(20,150,'---------------------------------------------------------'); pausa; diagramma;testo(50,370,sx);pausa;cancella; end; procedure pro6; begin testo(20,20,'per la interpretazione cfr.testo');pausa;cancella; end; procedure fine; (* conferma uscita operazione *) begin testo(10,30,'fine operazione:confermare :premi enter'); pausa;cancella;closegraph;restorecrtmode; end; procedure pro7; begin pro1;pro2;pro3;pro4;pro5;pro6; end; procedure scelta; (* procedura con scelta opzioni e uscita *) var s,sn:string;opzione:integer; begin cancella; testo(10,20,'seleziona opzione per LEGGI DELLA EVAPORAZIONE'); testo(10,30,'SELEZIONA PRIMA la 7 e poi rivedi con 1,2,3,4,5,6 '); testo(10,40,'1...evaporazione in funzione della temperatura '); testo(10,60,'2...evaporazione in funzione della natura dei liquidi '); testo(10,80,'3...evaporazione in funzione della superficie evaporante '); testo(10,100,'4...evaporazione in funzione della aerazione '); testo(10,120,'5...conclusioni:leggi della evaporazione'); testo(10,140,'6...interpretazione fenomeno '); testo(10,160,'7...ESPERIMENTO COMPLETO AUTOMATICO '); testo(10,180,'9...fine '); testo(10,200,'scelta =');moveto(100,200);readln(opzione); cancella; case opzione of 1:pro1;2:pro2;3:pro3;4:pro4;5:pro5;6:pro6;7:pro7; 9:fine; end; testo(10,390,'altra operazione?Esperimenti?:premi S...fine:premi N '); readln(sn); if ((sn='S') or (sn='s')) then scelta ; end; begin (* programma di lancio *) grafica; t1:=100;t2:=1000; sx:='prendi nota del disegno e del testo,poi ENTER'; testo(10,40,'esperimento per ricavare le leggi della evaporazione'); testo(10,60,'dispositivi necessari:'); testo(10,80,'1-recipienti con superficie uguale e diversa,chiusi e aperti'); testo(10,100,'2-termometri '); testo(10,120,'3-cronometro'); testo(10,140,'4-liquidi diversi:es.acqua,etere,alcool...'); testo(10,160,'EVAPORAZIONE:passaggio dallo stato liquido a quello di vapore'); testo(10,180,'mediante assorbimento di calore dallo ambiente esterno:'); testo(10,200,'interessa il liquido in superficie,avviene ad ogni temperatura,'); testo(10,220,'in modo impercettibile:si nota la variazione del livello del '); testo(10,240,'liquido nel recipiente che lo contiene '); pausa;cancella; scelta; closegraph; end.
program vap1; (* evaporazione dei liquidi da EVAPORA *) (* disco 65 dispensa 49 \tu53\ con turbo pascal v.5 *) uses crt,graph; type string15=string[20]; var sosta,codice,y:integer; varia:string15; procedure presenta; begin writeln('evaporazione di liquidi e leggi della evaporazione'); writeln; writeln('indica velocita dimostrazione 10=veloce...500=lento'); readln(sosta);clrscr; writeln('la evaporazione rappresenta il passaggio dallo stato liquido'); writeln('allo stato di aeriforme,mediante assorbimento di calore:'); writeln('di origine ambientale o fornito da sorgente adeguata'); writeln; writeln('esperimento:ogni processo avviene nello stesso tempo'); writeln('si considera la quantita di vapore generato,variando'); writeln('un parametro per volta:'); writeln; writeln('1..la temperatura'); writeln('2..la natura del liquido'); writeln('3..la superficie evaporante'); writeln('4..la ventilazione sopra il liquido'); writeln; writeln('premi return,prego');readln;clrscr; end; procedure leggi; begin writeln('leggi ricavate dalla osservazione'); writeln; writeln('LA QUANTITA DI VAPORE GENERATO :'); writeln('1..aumenta con la temperatura'); writeln('2..varia con la natura del liquido'); writeln('3..aumenta con la superficie evaporante'); writeln('4..aumenta con la ventilazione'); writeln; writeln('premi return,prego'); readln;clrscr; end; procedure grafica; (* attiva pagina grafica*) (* coordinate finestra,colore sfondo e disegno *) var sc,tp:integer; stringa:string; begin sc:=0; (* valore risoluzione 0,1,2,3,4,5,8,9 *) tp:=0; (* valore valido 1 - 0 palette *) 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 pausa; (* premere return per proseguire *) var ch:char; begin testo(10,400,'premi return,prego'); ch:=readkey; setcolor(1); testo(10,400,'premi return,prego'); setcolor(14); end; procedure diagramma(Y:integer;varia:string15); begin setcolor(7); testo(450,40,'vapore generato'); line(450,50,450,300); line(450,300,600,300); setcolor(7); line(450,300,600,y); setcolor(7); line(450,300,600,200); setcolor(14); testo(450,320,varia); setlinestyle(2,1,1); setcolor(7); line(550,300,550,150); setcolor(7); line(500,300,500,150); testo(500,310,'A'); testo(550,310,'B'); end; procedure cella(x1,y1,x2,y2:integer); begin setcolor(7); testo(30,20,'liquido in A'); setcolor(7); testo(210,20,'liquido in B'); setcolor(7); rectangle(x1,y1,x2,y2); end; procedure celle(codice:integer); var x1,x2:integer; begin setlinestyle(0,1,3); x1:=150; case codice of 1:begin x2:=300; varia:='temperatura';y:=200; testo(30,350,'temperatura in A minore della temperatura in B'); testo(30,340,'liquido contenuto nei due recipienti,identico'); setcolor(7); testo(30,360,'liquido evaporato aumenta con la temperatura'); end; 2:begin x2:=300; varia:='liquidi diversi';y:=100; testo(30,340,'temperatura in A uguale a temperatura in B'); testo(30,350,'liquido in A diverso da liquido in B '); setcolor(7); testo(30,360,'liquido evaporato varia con natura dei liquidi'); end; 3:begin x2:=400; varia:='diversa area';y:=200; setcolor(7); testo(30,340,'temperatura in A uguale a temperatura in B'); testo(30,350,'liquido in A uguale a liquido in B '); setcolor(7); testo(30,360,'liquido evaporato aumenta con area evaporante'); end; 4:begin x2:=300; varia:='diversa ventilazione';y:=200; testo(30,340,'temperatura in A uguale a temperatura in B'); testo(30,350,'liquido in A uguale a liquido in B'); testo(30,330,'area evaporante in A e in B sono uguali'); testo(30,60,'recipiente A chiuso..recipiente B aperto'); setcolor(7); testo(30,360,'liquido evaporato aumenta con ventilazione'); end; end; cella(50,100,x1,300); cella(200,100,x2,300); setfillstyle(1,2); bar(202,110,x2-2,297); setfillstyle(1,3); bar(52,110,148,297); testo(10,420,'il tempo impiegato per la evaporazione dei liquidi'); testo(10,430,'nei due recipienti,risulta sempre identico,costante'); end; procedure evapora(a2:integer); var n,b2:integer; begin setlinestyle(0,1,1); if (a2=398) then b2:=200 else b2:=250; setcolor(1); for n:=110 to b2 do begin line(203,n,a2,n); delay(sosta); end; diagramma(y,varia); end; procedure evapora1; var n:integer; begin setcolor(1); setlinestyle(0,1,1); for n:=110 to 200 do begin line(53,n,148,n); delay(sosta); end; end; procedure spiega; begin writeln('interpretazione del fenomeno e delle sue leggi '); writeln('secondo la teoria cinetica'); writeln; writeln('1..le particelle dei corpi sono in continuo movimento'); writeln('2..la energia cinetica delle particelle dipende :'); writeln(' dalla loro massa e dalla velocita '); writeln('3..la energia cinetica varia con la temperatura'); writeln('4..la energia cinetica media dipende dalla temperatura'); writeln('5..la interazione tra le particelle varia con la natura chimica'); writeln('6..il processo di evaporazione avviene alla superficie libera'); writeln(' del liquido,quando la energia cinetica della particelle'); writeln(' supera la interazione tra le particelle stesse'); writeln('7..quando le particelle evaporate vengono ricatturate'); writeln(' dalla fase liquida alla stessa velocita con la quale'); writeln(' evaporano,si stabilisce un equilibrio dinamico:'); writeln(' sembra che il liquido non evapori piu:si raggiunge uno'); writeln(' stato di saturazione:permettendo al vapore di allontanarsi'); writeln(' ventilando,il processo continua senza che si raggiunga'); writeln(' equilibrio dinamico'); readln;clrscr; writeln('in base a tale interpretazione si giustificano le leggi:');writeln; writeln('1..aumentando la temperatura,aumenta la evaporazione'); writeln(' perche aumenta energia cinetica delle particelle');writeln; writeln('2..aumentando la superficie,aumenta la evaporazione,'); writeln(' perche aumenta numero di particelle presenti in superficie'); writeln; writeln('3..aumentando la ventilazione,aumenta la evaporazione,'); writeln(' perche viene impedita la saturazione,equilibrio dinamico'); writeln; writeln('4..variando il liquido,varia la evaporazione,perche ,'); writeln(' a parita di energia,superficie,ventilazione,varia con'); writeln(' la natura chimica del liquido,la interazione da vincere'); writeln; writeln('arrivederci:premi return,prego'); pausa; end; begin (* programma principale *) clrscr; presenta; leggi; grafica; (* attiva pagina grafica *) celle(1); (* varia temperatura*) evapora1; evapora(298);pausa; grafica; celle(2); (* varia natura liquidi *) evapora1;evapora(298);pausa; grafica; celle(3); (* varia superficie evaporante *) evapora1;evapora(398);pausa; grafica; celle(4); (* varia ventilazione *) setcolor(1); setlinestyle(0,1,3); line(200,100,300,100); evapora1;evapora(298);pausa; textmode(2); writeln('conclusione:');writeln; leggi; spiega; closegraph;restorecrtmode; end.
program vapore; (* evaporazione dei liquidi *) (* disco 65 dispensa 49 \tu53\ con turbo pascal v.5 *) uses crt,graph; type string15=string[20]; var sosta,codice,y:integer; varia:string15; procedure presenta; begin writeln('evaporazione di liquidi e leggi della evaporazione'); writeln; writeln('indica velocita dimostrazione 10=veloce...500=lento'); readln(sosta);clrscr; writeln('la evaporazione rappresenta il passaggio dallo stato liquido'); writeln('allo stato di aeriforme,mediante assorbimento di calore:'); writeln('di origine ambientale o fornito da sorgente adeguata'); writeln; writeln('esperimento:ogni processo avviene nello stesso tempo'); writeln('si considera la quantita di vapore generato,variando'); writeln('un parametro per volta:'); writeln; writeln('1..la temperatura'); writeln('2..la natura del liquido'); writeln('3..la superficie evaporante'); writeln('4..la ventilazione sopra il liquido'); writeln; writeln('premi return,prego');readln;clrscr; end; procedure leggi; begin writeln('leggi ricavate dalla osservazione'); writeln; writeln('LA QUANTITA DI VAPORE GENERATO :'); writeln('1..aumenta con la temperatura'); writeln('2..varia con la natura del liquido'); writeln('3..aumenta con la superficie evaporante'); writeln('4..aumenta con la ventilazione'); writeln; writeln('premi return,prego'); readln;clrscr; end; procedure grafica(f:integer); (* attiva pagina grafica*) (* coordinate finestra,colore sfondo e disegno *) var sc,tp:integer; stringa:string; begin sc:=0; (* valore risoluzione 0,1,2,3,4,5,8,9 *) tp:=0; (* valore valido 1 - 0 palette *) stringa:='c:\'; (* 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 pausa; (* premere return per proseguire *) var ch:char; begin testo(10,400,'premi return,prego'); ch:=readkey; setcolor(1); testo(10,400,'premi return,prego'); setcolor(14); end; procedure diagramma(Y:integer;varia:string15); begin setcolor(4); testo(450,40,'vapore generato'); line(450,50,450,300); line(450,300,600,300); setcolor(2); line(450,300,600,y); setcolor(3); line(450,300,600,200); setcolor(14); testo(450,320,varia); setlinestyle(2,1,1); setcolor(2); line(550,300,550,150); setcolor(3); line(500,300,500,150); testo(500,310,'A'); testo(550,310,'B'); end; procedure cella(x1,y1,x2,y2:integer); begin setcolor(3); testo(30,20,'liquido in A'); setcolor(2); testo(210,20,'liquido in B'); setcolor(4); rectangle(x1,y1,x2,y2); end; procedure celle(codice:integer); var x1,x2:integer; begin setlinestyle(0,1,3); x1:=150; case codice of 1:begin x2:=300; varia:='temperatura';y:=200; testo(30,350,'temperatura in A minore della temperatura in B'); testo(30,340,'liquido contenuto nei due recipienti,identico'); setcolor(4); testo(30,360,'liquido evaporato aumenta con la temperatura'); end; 2:begin x2:=300; varia:='liquidi diversi';y:=100; testo(30,340,'temperatura in A uguale a temperatura in B'); testo(30,350,'liquido in A diverso da liquido in B '); setcolor(4); testo(30,360,'liquido evaporato varia con natura dei liquidi'); end; 3:begin x2:=400; varia:='diversa area';y:=200; setcolor(2); testo(30,340,'temperatura in A uguale a temperatura in B'); testo(30,350,'liquido in A uguale a liquido in B '); setcolor(4); testo(30,360,'liquido evaporato aumenta con area evaporante'); end; 4:begin x2:=300; varia:='diversa ventilazione';y:=200; testo(30,340,'temperatura in A uguale a temperatura in B'); testo(30,350,'liquido in A uguale a liquido in B'); testo(30,330,'area evaporante in A e in B sono uguali'); testo(30,60,'recipiente A chiuso..recipiente B aperto'); setcolor(4); testo(30,360,'liquido evaporato aumenta con ventilazione'); end; end; cella(50,100,x1,300); cella(200,100,x2,300); setfillstyle(1,2); bar(202,110,x2-2,297); setfillstyle(1,3); bar(52,110,148,297); testo(10,420,'il tempo impiegato per la evaporazione dei liquidi'); testo(10,430,'nei due recipienti,risulta sempre identico,costante'); end; procedure evapora(a2:integer); var n,b2:integer; begin setlinestyle(0,1,1); if (a2=398) then b2:=200 else b2:=250; setcolor(1); for n:=110 to b2 do begin line(203,n,a2,n); delay(sosta); end; diagramma(y,varia); end; procedure evapora1; var n:integer; begin setcolor(1); setlinestyle(0,1,1); for n:=110 to 200 do begin line(53,n,148,n); delay(sosta); end; end; procedure spiega; begin writeln('interpretazione del fenomeno e delle sue leggi '); writeln('secondo la teoria cinetica'); writeln; writeln('1..le particelle dei corpi sono in continuo movimento'); writeln('2..la energia cinetica delle particelle dipende :'); writeln(' dalla loro massa e dalla velocita '); writeln('3..la energia cinetica varia con la temperatura'); writeln('4..la energia cinetica media dipende dalla temperatura'); writeln('5..la interazione tra le particelle varia con la natura chimica'); writeln('6..il processo di evaporazione avviene alla superficie libera'); writeln(' del liquido,quando la energia cinetica della particelle'); writeln(' supera la interazione tra le particelle stesse'); writeln('7..quando le particelle evaporate vengono ricatturate'); writeln(' dalla fase liquida alla stessa velocita con la quale'); writeln(' evaporano,si stabilisce un equilibrio dinamico:'); writeln(' sembra che il liquido non evapori piu:si raggiunge uno'); writeln(' stato di saturazione:permettendo al vapore di allontanarsi'); writeln(' ventilando,il processo continua senza che si raggiunga'); writeln(' equilibrio dinamico'); readln;clrscr; writeln('in base a tale interpretazione si giustificano le leggi:');writeln; writeln('1..aumentando la temperatura,aumenta la evaporazione'); writeln(' perche aumenta energia cinetica delle particelle');writeln; writeln('2..aumentando la superficie,aumenta la evaporazione,'); writeln(' perche aumenta numero di particelle presenti in superficie'); writeln; writeln('3..aumentando la ventilazione,aumenta la evaporazione,'); writeln(' perche viene impedita la saturazione,equilibrio dinamico'); writeln; writeln('4..variando il liquido,varia la evaporazione,perche ,'); writeln(' a parita di energia,superficie,ventilazione,varia con'); writeln(' la natura chimica del liquido,la interazione da vincere'); writeln; writeln('arrivederci:premi return,prego'); pausa; end; begin (* programma principale *) clrscr; presenta; leggi; grafica(1); (* attiva pagina grafica *) celle(1); (* varia temperatura*) evapora1; evapora(298);pausa; grafica(1); celle(2); (* varia natura liquidi *) evapora1;evapora(298);pausa; grafica(1); celle(3); (* varia superficie evaporante *) evapora1;evapora(398);pausa; grafica(1); celle(4); (* varia ventilazione *) setcolor(1); setlinestyle(0,1,3); line(200,100,300,100); evapora1;evapora(298);pausa; textmode(2); writeln('conclusione:');writeln; leggi; spiega; end.