esercizi di chimica con turbo pascal 1.1 su mac
Program pressio; (* grafico per simulazione pressione e equilibrio chimico *)
USES Memtypes,QuickDraw,OSIntf,ToolIntf;
VAR gPort: GrafPort; gra1,gra2,gra3,gra4,gra5,mole,mole1,cancella:rect; a,x,y,b:integer;
procedure pausa; (* attesa che si prema enter *) begin moveto(10,10);drawstring('premi enter ');readln; end;
procedure sosta; begin writeln('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 descrive; begin writeln('esperimento per mostrare come varia la pressione di un gas'); writeln('al variare del volume,restando costante la temperatura'); writeln('-----------------------------------------------------------'); writeln('a parita di altre condizioni,la pressione dipende dal numero'); writeln('di particelle presenti in un determinato volume:dipende cio '); writeln('dalla densit'); writeln('se il volume diminuisce,aumenta la densit e la pressione'); writeln('se il volume aumenta,diminuisce la densit e la pressione'); writeln('---------------------------------------------------------'); writeln('la pressione pu restare invece costante,anche se varia il'); writeln('il volume,purch vari contemporaneamente anche il numero di'); writeln('particelle presenti,mantenendo costante la densit '); writeln('----------------------------------------------------');sosta; writeln('il numero di particelle pu variare se sono interessate '); writeln('a delle reazioni chimiche che possono modificare il numero'); writeln('delle particelle dei reattivi e dei prodotti:come avviene'); writeln('in un sistema chimico,con gas in equilibrio dinamico');sosta; writeln('es. A + B <-------> AB '); writeln('si vede che due particelle A+B possono diventare una sola AB '); writeln('e viceversa una particella AB pu originarne due :A + B ');sosta; clearscreen; writeln('P costante':15,'moli varia':15, 'V varia':15,'moli costanti':15,'P varia':15); writeln; writeln('2a':15,'20':15,'10':15,'20':15,'2a':15); writeln('2a':15,'10':15,'5':15,'20':15,'4a':15); writeln('2a':15,'5':15,'2.5':15,'20':15,'8a':15); writeln;sosta; writeln('si osserva che un volume iniziale di 10 litri '); writeln('contenente 20 particelle presenta una PRESSIONE=2a'); writeln('riducendo il volume a 5 litri e poi a 2.5 litri'); writeln('si osserva che se le particelle non cambiano numero'); writeln('la pressione aumenta da 2a a 4a a 8a'); writeln('mentre invece rimane costante se il numero di particelle'); writeln('si riduce contemporaneamente alla riduzione di volume'); writeln;sosta; writeln('analogo comportamento,in senso inverso, si verifica se il volume'); writeln('passa da 2.5 litri a 5 litri a 10 litri');sosta;clearscreen; end;
procedure parti1; begin y:=110;x:=30; for a:=1 to 4 do begin for b:=1 to 5 do begin setrect(mole,x,y,x+5,y+5);paintoval(mole); x:=x+15; end;y:=y+50;x:=30;end;end;
procedure parti2; begin y:=110;x:=160; for a:=1 to 4 do begin for b:=1 to 5 do begin setrect(mole,x,y,x+5,y+5);paintoval(mole); x:=x+15; end;y:=y+25;x:=160;end;end;
procedure parti3; begin y:=110;x:=310; for a:=1 to 4 do begin for b:=1 to 5 do begin setrect(mole,x,y,x+5,y+5);paintoval(mole); x:=x+15; end;y:=y+12;x:=310;end;end;
procedure parti4; begin y:=210;x:=160; for a:=1 to 2 do begin for b:=1 to 5 do begin setrect(mole,x,y,x+5,y+5);penpat(white);paintoval(mole); setrect(mole1,x,y+5,x+5,y+10);penpat(gray);paintoval(mole1); x:=x+15; end;y:=y+50;x:=160;end;end;
procedure parti5; begin y:=210;x:=310; for a:=1 to 1 do begin for b:=1 to 5 do begin setrect(mole,x,y,x+5,y+5);penpat(white);paintoval(mole); setrect(mole1,x,y+5,x+5,y+10);penpat(gray);paintoval(mole1); setrect(mole,x,y+10,x+5,y+15);penpat(white);paintoval(mole); setrect(mole1,x,y+15,x+5,y+20);penpat(gray);paintoval(mole1); x:=x+15; end;end;end;
procedure disegna1; begin setrect(gra1,20,100,120,300);framerect(gra1); parti1; testo(20,20,'20 particelle in 10 litri :Pressione = 2 a');pausa; testo(20,310,'se il volume diminuisce,la pressione aumenta:'); setrect(gra2,150,100,250,200);framerect(gra2);parti2; testo(20,30,'20 particelle in 5 litri :Pressione = 4 a');pausa; setrect(gra4,300,100,400,150);framerect(gra4);parti3; testo(20,40,'20 particelle in 2.5 litri :Pressione = 8 a');pausa; setrect(gra3,150,200,250,300);framerect(gra3);parti4; testo(20,320,'rimane invece costante se il numero di particelle'); testo(20,330,'presenti diminuisce'); testo(40,50,'10 particelle in 5 litri :Pressione = 2 a');pausa; setrect(gra5,300,200,400,250);framerect(gra5);parti5; testo(40,60,'5 particelle in 2.5 litri :Pressione = 2 a');pausa; testo(20,340,'viceversa se il volume aumenta,la pressione diminuisce'); testo(20,350,'se non cambia il numero di particelle,mentre invece'); testo(20,360,'rimane costante se il numero di particelle aumenta'); pausa; end;
procedure pro1; begin descrive; end;
procedure pro2; begin grafica; disegna1; 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 :sistema in equilibrio e variazione pressione'); writeln('1...descrizione esperimento '); writeln('2...esecuzione esperimento variazione volume,pressione'); writeln('9...fine '); writeln('scelta =');readln(opzione);clearscreen; case opzione of 1:pro1; 2:pro2; 9:fine; end; EraseRect(gPort.portRect); writeln('altra operazione?Esperimenti?:premi S...fine:premi N '); readln(sn); if sn='S' then scelta ; end;
begin (* programma di lancio *) clearscreen; scelta; end.