esercizi di chimica con turbo pascal 1.1 su mac

Program CROMA3;
(* cromatografia su colonna e su carta DIMOSTRATIVO *)
   USES Memtypes,QuickDraw,OSIntf,ToolIntf;
   
   VAR
      gPort:   GrafPort; 
      sagoma:EventRecord;          
      gra1,gra2,gomma,cancella:rect;
      a,b,x,y1,y2,ay2,ay1,riga,conta,x1,x2:integer;
      sfondo6:pattern;
procedure cancellatesto;
begin
setrect(cancella,1,1,500,10);
penpat(black);
paintrect(cancella);penpat(white);
end;
procedure pausa; 
begin
moveto(10,10);drawstring('premi enter ');readln;
cancellatesto;
end;
  
  procedure grafica;  
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 cancellagrafo;
begin
setrect(gomma,1,1,500,370);
penpat(black);
paintrect(gomma);
end;
procedure sosta;
begin
for a:=1 to 10000 do write('');
end;
procedure cilindro1;
begin
setrect(gra1,110,100,190,290);fillrect(gra1,gray);
moveto(80,80);lineto(100,100);lineto(100,300);lineto(118,300);
lineto(118,320);
moveto(220,80);lineto(200,100);lineto(200,300);lineto(182,300);
lineto(182,320);
moveto(20,70);
drawstring('cilindro per cromatrografia con fase fissa:amido..');
end;
procedure carta1;
begin
setrect(gra1,100,100,200,300);framerect(gra1);
setrect(gra2,110,100,190,290);paintrect(gra2);
end;
procedure cilindro2;
begin
setrect(gra1,250,100,350,300);framerect(gra1);
setrect(gra1,260,105,340,290);fillrect(gra1,gray);
moveto(250,320);drawstring('colonna per controllo:tempo= 1 ora ');
moveto(250,340);drawstring('con sostanze note A,B,C,D');
moveto(270,116);lineto(330,116);drawstring('sostanza A');
moveto(270,169);lineto(330,169);drawstring('sostanza B');
moveto(270,216);lineto(330,216);drawstring('sostanza C');
moveto(270,246);penpat(dkgray);lineto(330,246);drawstring('sostanza D');
end;
procedure carta2;
begin
setrect(gra1,250,100,350,300);framerect(gra1);
setrect(gra1,260,105,340,290);fillrect(gra1,gray);
moveto(250,320);drawstring('carta per controllo:tempo= 1 ora ');
moveto(250,340);drawstring('con sostanze note A,B,C,D');
moveto(270,116);lineto(330,116);drawstring('sostanza A');
moveto(270,169);lineto(330,169);drawstring('sostanza B');
moveto(270,216);lineto(330,216);drawstring('sostanza C');
moveto(270,246);penpat(dkgray);lineto(330,246);drawstring('sostanza D');
end;
procedure bicchiere;
begin
moveto(100,310);lineto(100,350);lineto(200,350);lineto(200,310);
moveto(20,360);drawstring('bicchiere per raccolta sostanze');
end;
procedure moto10;
label salta;
begin
setrect(gra1,110,100,190,290);fillrect(gra1,gray);
moveto(20,60);drawstring('soluzione da analizzare:ATTENDERE');
x:=120;y1:=90;y2:=90;ay2:=2;ay1:=1;riga:=16;conta:=1;
for a:=1 to riga do begin
conta:=conta+1;pensize(1,1);
setrect(gra1,110,100,190,290);fillrect(gra1,gray);
moveto(x,y1);penpat(white);lineto(180,y1);
moveto(x,y2);penpat(dkgray);lineto(180,y2);
if conta=riga  then goto salta;sosta;
if conta=13 then begin 
moveto(10,20);
drawstring('riconosciute:B , D Ignota G :tempo= 1 ora con SOLVENTE S1 ');
sosta;sosta;
testo(10,50,'bande evidenziabili se non giˆ colorate');pensize(10,10);
moveto(x,y1);penpat(white);lineto(180,y1);
moveto(x,y2);penpat(dkgray);lineto(180,y2);
moveto(x,150);lineto(180,150);
pausa;end;
if conta=15 then begin
moveto(100,40);drawstring('estrazione sostanza D ');pausa;end;
penpat(black);
moveto(180,y1);lineto(120,y1);
moveto(180,y2);lineto(120,y2);
ay1:=ay1+1;y1:=y1+ay1;x:=120;ay2:=ay2+2;y2:=y2+ay2;
end;
salta:
end;
procedure moto11;
label salta;
begin
testo(10,360,'cromatografia su carta,discendente');
setrect(gra1,110,100,190,290);fillrect(gra1,gray);
moveto(20,60);drawstring('soluzione da analizzare:ATTENDERE');
x:=120;y1:=90;y2:=90;ay2:=2;ay1:=1;riga:=13;conta:=1;
for a:=1 to riga do begin
conta:=conta+1;pensize(1,1);
setrect(gra1,110,100,190,290);fillrect(gra1,gray);
moveto(x,y1);penpat(white);lineto(180,y1);
moveto(x,y2);penpat(dkgray);lineto(180,y2);sosta;
if conta=13 then begin 
moveto(10,20);
drawstring('riconosciute:B , D  Ignota G:tempo= 1 ora con SOLVENTE S1 ');
sosta;sosta;
testo(10,50,'bande evidenziabili se non giˆ colorate');pensize(10,10);
moveto(x,y1);penpat(white);lineto(180,y1);
moveto(x,y2);penpat(dkgray);lineto(180,y2);
moveto(x,150);lineto(180,150);
pausa;end;
penpat(black);
moveto(180,y1);lineto(120,y1);
moveto(180,y2);lineto(120,y2);
ay1:=ay1+1;y1:=y1+ay1;x:=120;ay2:=ay2+2;y2:=y2+ay2;
end;
salta:
end;
procedure moto4;
label salta;
begin
setrect(gra1,110,100,190,290);fillrect(gra1,gray);
moveto(20,60);drawstring('soluzione da analizzare NOTA B :ATTENDERE');
x:=120;y1:=90;ay1:=1;riga:=13;conta:=1;
for a:=1 to riga do begin
conta:=conta+1;
setrect(gra1,110,100,190,290);fillrect(gra1,gray);
moveto(x,y1);penpat(white);lineto(180,y1);sosta;
if conta=13  then begin
moveto(10,30);
drawstring('sostanza :B spazio percorso in tempo= 1 ora  con SOLVENTE S1');
goto salta;end;
penpat(black);
moveto(180,y1);lineto(120,y1);
ay1:=ay1+1;y1:=y1+ay1;x:=120;
end;
salta:
end;
procedure moto6;
label salta;
begin
stuffhex(@sfondo6,'111111111111111111');
setrect(gra1,110,100,190,290);fillrect(gra1,sfondo6);
moveto(20,60);drawstring('soluzione da analizzare NOTA B:ATTENDERE');
x:=120;y1:=90;ay1:=1;riga:=10;conta:=1;
for a:=1 to riga do begin
conta:=conta+1;
setrect(gra1,110,100,190,290);fillrect(gra1,sfondo6);
moveto(x,y1);penpat(white);lineto(180,y1);sosta;
if conta=10  then begin
moveto(10,30);
drawstring('sostanza :B spazio percorso in tempo= 1 ora con SOLVENTE  S2 ');
goto salta;end;
penpat(black);
moveto(180,y1);lineto(120,y1);
ay1:=ay1+1;y1:=y1+ay1;x:=120;
end;
salta:
end;
procedure moto5;
label salta;
begin
setrect(gra1,110,100,190,290);fillrect(gra1,gray);
moveto(20,60);drawstring('soluzione da analizzare NOTA D :ATTENDERE');
x:=120;y2:=90;ay2:=2;riga:=13;conta:=1;
for a:=1 to riga do begin
conta:=conta+1;
setrect(gra1,110,100,190,290);fillrect(gra1,gray);
moveto(x,y2);penpat(dkgray);lineto(180,y2);sosta;
if conta=13 then begin
moveto(10,40);
drawstring('sostanza :D  spazio percorso in tempo = 1 ora con SOLVENTE S1');
goto salta;end;
penpat(black);
moveto(180,y2);lineto(120,y2);
x:=120;ay2:=ay2+2;y2:=y2+ay2;
end;
salta:
end;
procedure moto7;
label salta;
begin
stuffhex(@sfondo6,'111111111111111111');
setrect(gra1,110,100,190,290);fillrect(gra1,sfondo6);
moveto(20,60);drawstring('soluzione da analizzare NOTA D :ATTENDERE');
x:=120;y2:=90;ay2:=2;riga:=10;conta:=1;
for a:=1 to riga do begin
conta:=conta+1;
setrect(gra1,110,100,190,290);fillrect(gra1,sfondo6);
moveto(x,y2);penpat(dkgray);lineto(180,y2);sosta;
if conta=10 then begin
moveto(10,40);
drawstring('sostanza :D  spazio percorso in tempo = 1 ora con SOLVENTE S2 ');
goto salta;end;
penpat(black);
moveto(180,y2);lineto(120,y2);
x:=120;ay2:=ay2+2;y2:=y2+ay2;
end;
salta:
end;
procedure pro1;
begin
testo(20,30,'per utilizzare il programma ,seleziona in modo consecutivo');
testo(20,40,'le varie opzioni proposte nel men principale ');
testo(20,50,'2-3 per elettroforesi ');
testo(20,60,'4-5 per confrontare diversa velocitˆ sostanze note B,D');
testo(20,70,'nel solvente S1 su colonna');
testo(20,90,'6-7 per confrontare diversa velocitˆ sostanze note B,D');
testo(20,100,'nel solvente S2 su colonna');
testo(20,120,'8-9 per confrontare diversa velocitˆ sostanze note B,D');
testo(20,130,'nel solvente S1 su carta,discendente');
testo(20,160,'10 per analisi cromatografica soluzione ignota su colonna');
testo(20,170,'11 per analisi cromatografica soluzione ignota su carta');
pausa;
end;
procedure pro2;
begin
testo(20,20,'generalitˆ su analisi mediante ELETTROFORESI');
testo(20,40,'dispositivo sperimentale:');
testo(20,60,'nastro di carta o lastra con substrato adatto');
testo(20,70,'due elettrodi,catodo e anodo,collegati a batteria');
testo(20,90,'SOLUZIONE con sostanze da riconoscere,posta a distanza');
testo(20,100,'equivalente tra catodo e anodo');readln;
testo(20,120,'LE SOSTANZE,se dotate di carica elettrica');
testo(20,130,'migrano verso gli elettrodi di segno opposto');
testo(20,150,'positive verso CATODO,negative verso ANODO');
testo(20,170,'con diversa velocitˆ in funzione di vari parametri');
testo(20,200,'natura delle sostanze,segno carica positiva o negativa');
testo(20,210,'valore della carica,forma delle molecole ');
testo(20,220,'massa delle molecole,interazione con fase fissa');
testo(20,230,'solubilitˆ con il solvente,ecc. ');readln;
testo(20,250,'---------------------------------------------------------');
testo(20,260,'si confronta la posizione raggiunta dalle diverse sostanze');
testo(20,270,'(eventualmente visualizzate con opportuni accorgimenti)');
testo(20,280,'dopo un tempo determinato:es.dopo 1 ora');
testo(20,290,'con la posizione di sostanze note riportata su carte');
testo(20,300,'elettroforetiche,ottenute  in condizioni uguali a quelle');
testo(20,310,'della analisi elettroforetica della soluzione in esame');
testo(20,320,'e si verifica la corrispondenza delle sostanze trovate');
pausa;
end;
procedure tara1;
begin
setrect(gra1,100,50,400,150);framerect(gra1);
testo(100,30,'elettroforesi sostanze note per confronto');
end;
procedure tara2;
begin
setrect(gra2,100,200,400,300);framerect(gra2);
testo(100,180,'fase fissa  per analisi elettroforetica');
testo(20,250,'catodo - ');testo(420,250,'anodo +');
moveto(110,210);lineto(110,290);
moveto(390,210);lineto(390,290);
moveto(110,250);lineto(90,250);lineto(90,320);lineto(410,320);
lineto(410,250);lineto(390,250);
setrect(gra1,240,310,260,330);framerect(gra1);
moveto(160,50);lineto(160,150);testo(160,40,'A');
moveto(295,50);lineto(295,150);testo(295,40,'B');
moveto(205,50);lineto(205,150);testo(205,40,'C');
moveto(350,50);lineto(350,150);testo(350,40,'G');
moveto(140,50);lineto(140,150);testo(140,40,'H');
testo(170,340,'polo - batteria polo + ');
moveto(250,190);lineto(250,300);
testo(150,190,'posizione iniziale della soluzione');
pausa;
end;
procedure moto3;
label salta;
var conta:integer;
begin
x:=250;x1:=250;x2:=250;conta:=0;
for a:=1 to 11 do
begin
conta:=conta+1;
penpat(white);
moveto(x,210);lineto(x,290);
moveto(x2,210);penpat(gray);lineto(x2,290);
moveto(x1,210);penpat(gray);lineto(x1,290);sosta;
if conta=10 then begin
testo(20,20,'riconoscimento sostanze A,B,C ');
sosta;pensize(10,10);
moveto(x,210);lineto(x,280);
moveto(x2,210);penpat(gray);lineto(x2,280);
moveto(x1,210);penpat(gray);lineto(x1,280);
pensize(1,1);goto salta;end;
penpat(black);
moveto(x,210);lineto(x,290);
moveto(x2,210);lineto(x2,290);
moveto(x1,210);lineto(x1,290);
x:=x-10;x1:=x1+5;x2:=x2-5;
end;
salta:pausa;
end;
procedure pro3;
begin
tara1;pausa;tara2;moto3;pausa;
end;
procedure pro4; (* B nota S1*)
begin
cilindro1;pausa;
testo(20,320,'cromatografia con sostanza nota B in solvente S1 ');
testo(20,340,'misura spostamento compiuto in una ora ');
moto4;pausa;pausa;
end;
procedure pro8; (* B nota S1*)
begin
carta1;pausa;
testo(20,320,'cromatografia su carta con sostanza nota B in solvente S1 ');
testo(20,340,'misura spostamento compiuto in una ora ');
moto4;pausa;pausa;
end;
procedure pro5; (* D nota S1 *)
begin
cilindro1;pausa;
testo(20,320,'cromatografia con sostanza nota D in solvente S1 ');
testo(20,340,'misura spostamento compiuto in una ora ');
moto5;pausa;pausa;
end;
procedure pro9; (* D nota S1 *)
begin
carta1;pausa;
testo(20,320,'cromatografia su carta con sostanza nota D in solvente S1 ');
testo(20,340,'misura spostamento compiuto in una ora ');
moto5;pausa;pausa;
end;
procedure pro6; (* B nota S2 *)
begin
cilindro1;pausa;
testo(20,320,'cromatografia con sostanza nota B in solvente S2 ');
testo(20,340,'misura spostamento compiuto in una ora ');
moto6;pausa;pausa;
end;
procedure pro7; (* D nota S2 *)
begin
cilindro1;pausa;
testo(20,320,'cromatografia con sostanza nota D in solvente S2 ');
testo(20,340,'misura spostamento compiuto in una ora ');
moto7;pausa;pausa;
end;
procedure pro10; (* B,D ignote con S1 *)
begin
cilindro1;pausa;bicchiere;pausa;cilindro2;pausa;moto10;
pausa;pausa;
end;
procedure pro11; (* B,D ignote con S1 *)
begin
carta1;pausa;pausa;carta2;pausa;moto11;
pausa;
end;
procedure fine;  
begin
writeln('fine operazione:confermare :premi enter');
readln;
end;
procedure spiega;
begin
writeln;writeln;writeln;
writeln('informazioni su analisi cromatografica');
writeln('tecnica di analisi per riconoscere sostanze presenti in soluzione');
writeln('ed eventualmente estrarle separatamente dalla soluzione stessa');
writeln('-----------------------------------------------------------------');
writeln('principi di funzionamento:');
writeln('si sfrutta la diversa velocitˆ di scorrimento di sostanze diverse');
writeln('confrontate con solventi o substrati diversi,in funzione della');
writeln('diversa capacitˆ di interagire con gli stessi ');readln;
writeln('FACENDO SCORRERE una soluzione contenente sostanze diverse');
writeln('su un substrato adatto (carta,gelatina,sferette forate..) ');
writeln('si verifica un rallentamento differenziato per le diverse ');
writeln('molecole,in funzione della loro natura,e quindi dopo un tempo');
writeln('determinato,le molecole inizialmente mescolate nella soluzione');
writeln('risulteranno separate,avendo percorso spazi differenti ');readln;
writeln('OPPURE le molecole risulteranno distanziate per la diversa');
writeln('solubilitˆ in diversi tipi di solventi');readln;clearscreen;
writeln('CONFRONTANDO le posizioni raggiunte dalle varie sostanze');
writeln('con quelle raggiunte da sostanze note in condizioni simili');
writeln('si risale alla natura delle sostanze presenti in soluzione');
readln;clearscreen;
writeln('TIPI DI CROMATOGRAFIA in funzione della fase fissa o SUBSTRATO');
writeln('SU COLONNA DISCENDENTE:permette riconoscimento ed estrazione');
writeln('SU CARTA DISCENDENTE o ASCENDENTE:per riconoscimento');
writeln('altri tipi:cfr.testi...');readln;
writeln('TARATURA TABELLE CROMATOGRAFICHE:');
writeln('si esegue una cromatografia con sostanza nota in condizioni ');
writeln('sperimentali controllate e per tempo determinato:es. 1 ora');
writeln('si prende nota della distanza percorsa dalla sostanza ');
writeln('si ripete esperimento per altre sostanze note ');
writeln('si riporta in tabelle il risultato ottenuto con diversi tipi');
writeln('di substrati o di solventi ');readln;clearscreen;
writeln('altro tipo di analisi mediante ELETTROFORESI cfr.in seguito');
readln;clearscreen;
end;
procedure scelta;  
var s,sn:string;opzione:integer;
begin
clearscreen;
writeln('seleziona opzione per CROMATOGRAFIA SU COLONNA ');
writeln('1...COME USARE IL PROGRAMMA');
writeln('-------------------------------------------------------');
writeln('2...ELETTROFORESI :informazioni ');
writeln('3...ELETTROFORESI :esperimento  ');
writeln('4...cromatografia di sostanza nota B con solvente S1 su colonna');
writeln('5...cromatografia di sostanza nota D con solvente S1 su colonna' );
writeln('6...cromatografia di sostanza nota B con solvente S2 su colonna');
writeln('7...cromatografia di sostanza nota D con solvente S2 su colonna');
writeln('--------------------------------------------------------');
writeln('8...cromatografia di sostanza nota B su carta con S1 ');
writeln('9...cromatografia di sostanza nota D su carta con S1 ');
writeln('------------------------------------------------------');
writeln('10..cromatografia con sostanze ignote e solvente S1 su colonna');
writeln('11..cromatografia con sostanze ignote e solvente S1 su carta');
writeln('20...fine ');
writeln('scelta =');readln(opzione);
grafica;
case opzione of
1:pro1;2:pro2;3:pro3;
4:pro4;5:pro5;6:pro6;7:pro7;8:pro8;9:pro9;10:pro10;11:pro11;
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            
clearscreen;
spiega;readln;
scelta;
end.