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.