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.