esercizi di chimica con turbo pascal 1.1 su mac

Program titola1;
(* grafico per simulazione TITOLAZIONE DIMOSTRATIVO SEMPLICE *)
   USES Memtypes,QuickDraw,OSIntf,ToolIntf;
   
   VAR
      gPort:   GrafPort;           
      gra1,gra2,gra3,gra4,gomma,cancella:rect;
      a,x,y,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 cancellatesto;
begin
setrect(cancella,10,10,500,100);
penpat(black);
paintrect(cancella);
end;
procedure cancellagrafo;
begin
setrect(gomma,1,1,520,370);
penpat(black);
paintrect(gomma);
end;
procedure titolando;  (* bicchiere con soluzione da titolare *)
begin
moveto(100,200);
setrect(gra1,100,200,200,370);framerect(gra1);
moveto(100,200);penpat(black);lineto(200,200);penpat(white);
testo(220,350,'bicchiere graduato con 40 cc. ');
testo(220,360,'di soluzione da titolare');
testo(220,370,'e un indicatore di pH ');
pausa;
end;
procedure indicatore;
begin
setrect(gra1,105,210,195,365);penpat(gray);paintrect(gra1);
end;
procedure buretta;
begin
moveto(140,200);lineto(140,190);lineto(120,160);lineto(120,10);
lineto(180,10);lineto(180,160);lineto(160,190);lineto(160,200); 
testo(220,20,'buretta graduata con 40 cc.');
testo(220,30,'di soluzione TITOLANTE nota ');
pausa;
end;
procedure acido;
begin
y:=300;x:=110;
for a:=1 to 4 do
begin
for b:=1 to 8 do
begin
setrect(gra3,x,y,x+5,y+5);paintoval(gra3);
x:=x+10;
end;
y:=y+20;x:=110;
end;
pausa;
end;
procedure base;
begin
y:=20;x:=130;
for a:=1 to 8 do
begin
for b:=1 to 4 do
begin
setrect(gra3,x,y,x+5,y+5);penpat(gray);paintoval(gra3);
x:=x+10;
end;
y:=y+20;x:=130;
end;
pausa;
end;
procedure pro1;
begin
testo(20,20,'esempio di TITOLAZIONE di una soluzione acida o basica');
testo(20,40,'TITOLO equivale a CONCENTRAZIONE ');
testo(20,50,'TITOLAZIONE equivale a cercare la CONCENTRAZIONE ');
testo(20,60,'CONCENTRAZIONE espressa in NORMALITA ');
testo(20,70,'---------------------------------------------------');
testo(20,80,'dispositivo per titolazione:');
testo(20,90,'1-bicchiere graduato contenente volume noto di una soluzione');
testo(20,100,'della quale si cerca la normalita');
testo(20,110,'2-buretta graduata contenente soluzione di normalita nota');
testo(20,120,'---------------------------------------------------------');
pausa;
testo(20,140,'come procedere per titolare soluzione incognita ACIDA ');
testo(20,150,'con soluzione titolante nota BASICA ');
testo(20,170,'1-versare in bicchiere volume noto di soluzione acida');
testo(20,180,'da titolare e aggiungere poche gocce di INDICATORE ');
testo(20,190,'2-riempire la buretta con soluzione basica di normalita nota');
testo(20,210,'3-aprire e chiudere il rubinetto della buretta,facendo');
testo(20,220,'scendere nel bicchiere ogni volta,piccole quantita di base');
testo(20,230,'e mescolare la soluzione titolanda');
testo(20,240,'4-cessare di aggiungere base appena si nota un cambiamento');
testo(20,250,'caratteristico del COLORE dello indicatore');
testo(20,260,'che segnala il momento della completa neutralizzazione');
testo(20,270,'5-prendere nota del volume di base titolante aggiunto');
testo(20,280,'---------------------------------------------------------');
pausa;
testo(20,290,'aggiungendo la base alla soluzione acida,si verifica una');
testo(20,300,'reazione di salificazione NaOH + HCl ---> NaCl +H2O ');
testo(20,310,'che risulta completata quando gli EQUIVALENTI della BASE');
testo(20,320,'aggiunti,sono uguali agli EQUIVALENTI dello ACIDO ');
testo(20,330,'EqBASE = EqACIDO ');
testo(20,340,'EqBASE = Nbase * VolumeBase..EqACIDO = NAcido * VolumeAcido');
testo(20,350,'e quindi: Nbase * Vbase = Nacido * Vacido ');
testo(20,360,'dalla quale si ricava ,essendo noti Nbase,Vbase,Vacido ');
testo(20,370,'la normalita incognita : Nacido = Nbase * Vbase / Vacido');
pausa;cancellagrafo;
testo(20,30,'formula generalizzata per le titolazioni:');
testo(20,50,' Normalita1 * volume1  = Normalita2 * volume2 ');
pausa;
end;
procedure graduaa;
begin
y:=290;
for a:=1 to 4 do
begin
moveto(100,y);lineto(200,y);
y:=y+20;
end;
end;
procedure graduab;
begin
y:=10;;
for a:=1 to 5 do
begin
moveto(120,y);lineto(180,y);
y:=y+40;
end;
end;
(*procedure titola;
begin
y:=20;x:=130;
for a:=1 to 8 do
begin
for b:=1 to 4 do
begin
setrect(gra3,x,y,x+5,y+5);penpat(black);paintoval(gra3);
x:=x+10;
end;
y:=y+20;x:=130;
end;
pausa;
end;*)
procedure acido1(y:integer);
begin
x:=110;
for b:=1 to 8 do
begin
setrect(gra3,x,y,x+5,y+5);penpat(gray);paintoval(gra3);
x:=x+10;
end;
end;
procedure base1(y:integer);
begin
x:=130;
for a:=1 to 2 do
begin
for b:=1 to 4 do
begin
setrect(gra3,x,y,x+5,y+5);penpat(black);paintoval(gra3);
x:=x+10;
end;
y:=y+20;x:=130;
end;
end;
procedure aggiunge;
begin
testo(220,60,'aggiungere 10 cc.di titolante');
testo(220,70,'premendo ENTER ');
end;
procedure commento;
begin
cancellagrafo;
testo(20,90,'aggiungendo il titolante alla soluzione incognita');
testo(20,100,'si verifica la reazione di neutralizzazione ');
testo(20,110,'con formazione di sale e acqua NaOH + HCl ---> NaCl + H2O ');
testo(20,120,'UN INDICATORE presente in soluzione da titolare ');
testo(20,130,'indichera la completa neutralizzazione cambiando colore');
testo(20,150,'quando tutto lo acido viene  neutralizzato ');
testo(20,160,'vuol dire che gli EQUIVALENTI della BASE TITOLANTE ');
testo(20,170,'risultano uguali agli EQUIVALENTI dello ACIDO titolando');
testo(20,180,'-------------------------------------------------------');
testo(20,190,'essendo noto il volume di titolante aggiunto V1 ');
testo(20,200,'e la sua normalita N1 ,e anche il volume titolando V2');
testo(20,210,'dalla uguaglianza tra gli equivalenti N1*V1 = N2*V2 ');
testo(20,220,'si ricava la normalita o titolo della soluzione incognita');
testo(20,240,'........N2 = (N1 * V1 ) / V2......');pausa;
testo(20,250,'in questo esempio le due concentrazioni erano uguali ');
testo(20,270,'N1 = 0.5   V1 = 50 cc   V2 = 50 cc :segue che :');
testo(20,290,'..........N2 = N1 * V1 / V2  = 0.5*50/50 = 0.5 N ');
pausa;
end;
procedure pro2;
begin
testo(220,100,'titolante NaOH 0.5 N');
testo(220,300,'titolando HCl con V2 = 50 cc ');
titolando;buretta;acido;base;graduaa;pausa;graduab;aggiunge;pausa;
testo(220,150,'ogni 10 cc. di titolante aggiunto');
testo(220,160,'vengono neutralizzate molecole di HCl ');pausa;
base1(20);acido1(295);moveto(100,270);lineto(200,270);pausa;
base1(60);acido1(315);moveto(100,250);lineto(200,250);pausa;
base1(100);acido1(335);moveto(100,230);lineto(200,230);pausa;
base1(140);acido1(355);moveto(100,210);lineto(200,210);pausa;
testo(220,180,'OSSERVARE BENE prima di premere ENTER ');pausa;
indicatore;testo(220,200,'indicatore cambia colore');
testo(220,210,'segnalando neutralizzazione completata');pausa;
commento;
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 ');
writeln('1...generalita sulla TITOLAZIONE ACIDO,BASE ');
writeln('2...titolazione soluzione acida con titolante basico');
writeln('9...fine ');
writeln('scelta =');readln(opzione);
grafica;
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') or (sn='s')) then scelta ;
end;
begin            (* programma di lancio *)
clearscreen;
writeln;writeln;writeln;
writeln('generalita su titolazione ACIDO,BASE');
writeln('per maggiori dettagli e interazione,dopo aver visto questo');
writeln('cfr.altro programma attivando TITOLA2..TITOLA3 ');pausa;
scelta;
end.