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.