esercizi di chimica con turbo pascal 1.1 su mac

Program titola2;
(* grafico per simulazione TITOLAZIONE  DIMOSTRATIVO *)
   USES Memtypes,QuickDraw,OSIntf,ToolIntf;
   
   VAR
      gPort:   GrafPort;           
      gra1,gra2,gomma,cancella:rect;
      a,x,y,b,valore,x1,y1,tempo: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,500,370);
penpat(black);
paintrect(gomma);
end;
procedure sosta1;
begin
for a:=1 to valore do write('');
end;
procedure sosta2(tempo:integer);
begin
for a:=1 to tempo do write('');
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);
setrect(gra1,105,290,195,365);paintrect(gra1);
testo(220,350,'bicchiere graduato con 40 cc. ');
testo(220,360,'di soluzione da titolare');
testo(220,370,'e un indicatore di pH ');
sosta2(tempo);
end;
procedure buretta;
begin
moveto(140,200);lineto(140,170);lineto(120,170);lineto(120,10);
lineto(180,10);lineto(180,170);lineto(160,170);lineto(160,200); 
testo(220,20,'buretta graduata con 40 cc.');
testo(220,30,'di soluzione TITOLANTE nota ');sosta2(tempo);
end;
procedure buretta2;
begin
setrect(gra1,125,12,178,168);paintrect(gra1);pausa;
end;
procedure base2(riga,y,y1:integer);
begin
x:=125;x1:=105;
for a:=1 to riga do
begin
moveto(x,y);penpat(black);lineto(178,y);
moveto(x1,y1);penpat(white);lineto(195,y1);
sosta1;
y:=y+1;y1:=y1+1;
end;
end;
procedure pro1;
begin
testo(20,20,'aggiungendo volume noto di sostanza titolante di normalita nota');
testo(20,40,'a volume noto di soluzione titolanda di normalita ignota');
testo(20,60,'si calcola la normalita ignota con la formula generale ');
testo(20,80,' N1 * V1 = N2 * V2 ------->  N2 = N1 * V1 / V2  ');
pausa;
testo(20,100,'vengono presentati alcuni esempi di titolazione con ');
testo(20,110,'BASE nota e ACIDO ignoto,visualizzando i calcoli eseguiti');
pausa;
end;
procedure graduaa;
begin
y:=210;
for a:=1 to 8 do
begin
moveto(95,y);lineto(205,y);
y:=y+20;
end;
end;
procedure graduab;
begin
y:=10;;
for a:=1 to 5 do
begin
moveto(115,y);lineto(185,y);
y:=y+40;
end;
end;
procedure aggiunge;
begin
testo(220,60,'aggiungere 10 cc.di titolante');
testo(220,70,'premendo ENTER ');
end;
procedure aggiunge2;
begin
testo(220,60,'aggiungere cc.di titolante');
testo(220,70,'premendo ENTER ');
testo(220,80,'fino a viraggio indicatore');
end;
procedure indicatore3(y1:integer);
begin
setrect(gra1,105,y1,195,365);penpat(gray);paintrect(gra1);
testo(220,260,'viraggio indicatore');
testo(220,270,'neutralizzazione completata');
end;
procedure analisi1(frase1:string);
begin
testo(220,120,frase1);
end;
procedure analisi2(frase2:string);
begin
testo(220,140,frase2);
end;
procedure pro3;
begin
titolando;buretta;graduaa;pausa;graduab;aggiunge2;buretta2;
base2(38,12,270);pausa;base2(39,50,250);pausa;base2(40,88,230);
base2(42,126,210);pausa;indicatore3(210);
analisi1('dati noti : V1=40cc    N1=1 N    V2=40cc  ');
analisi2('soluzione: N2 = N1*V1/V2 = 1 N ');pausa;
end;
procedure pro4;
begin
titolando;buretta;graduaa;pausa;graduab;aggiunge2;buretta2;
base2(38,12,270);pausa;base2(39,50,250);pausa;base2(40,88,230);
pausa;indicatore3(230);
analisi1('dati noti : V1=30cc  N1=1 N     V2=40cc  ');
analisi2('soluzione: N2 = N1*V1/V2 = 0.750 N ');pausa;
end;
procedure pro5;
begin
titolando;buretta;graduaa;pausa;graduab;aggiunge2;buretta2;
base2(38,12,270);pausa;base2(39,50,250);
pausa;indicatore3(250);
analisi1('dati noti : V1=20cc   N1=1 N    V2=40cc  ');
analisi2('soluzione: N2 = N1*V1/V2 = 0.500 N ');pausa;
end;
procedure pro6;
begin
titolando;buretta;graduaa;pausa;graduab;aggiunge2;buretta2;
base2(38,12,270);
pausa;indicatore3(270);
analisi1('dati noti : V1=10cc    N1=1 N V2=40cc  ');
analisi2('soluzione: N2 = N1*V1/V2 = 0.250 N ');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 opzione per ');
writeln('1...descrizione esperimento di titolazione');
writeln('3...titolante base forte 40 cc.,titolando acido forte:40 cc..');
writeln('4...titolante base forte 30 cc.,titolando acido forte:40 cc..');
writeln('5...titolante base forte,20 cc.,titolando acido forte:40 cc..');
writeln('6...titolante base forte 10 cc.,titolando acido forte:40 cc.');
writeln('-------------------------------------------------------------');
writeln('20...fine ');
writeln('scelta =');readln(opzione);
grafica;
case opzione of
1:pro1;
3:pro3;4:pro4;5:pro5;6:pro6;
20: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;
valore:=500;tempo:=10000;
scelta;
end.