esercitazione a
livello didattico-liceale
con turbo pascal , su argomenti di chimica vari
calcoli stechiometrici
Program stechi3; (* problemi di stechiometria solo con GRAMMI o LITRI *) uses crt; VAR gn,pn,cn,tn,n,a,vn:integer; cx :array[1..5] of integer; px :array[1..5] of integer; tx :array[1..5] of integer; gx :array[1..5] of real; procedure pausa; begin writeln('premi ENTER ');readln; end; procedure fine; (* conferma uscita operazione *) begin writeln('fine operazione:confermare :premi enter'); readln; end; procedure testo1; begin writeln('passa a chiedere sostanza nota in grammi '); writeln('peso molecolare e coefficiente stechiometrico '); end; procedure testo1v; begin writeln('passa a chiedere sostanza nota in litri. '); end; procedure testo2; begin writeln; writeln('passa a chiedere PESI MOLECOLARI e COEFFICIENTI stechiometrici'); writeln('delle sostanze incognite,in ordine,da sinistra a destra '); writeln('CALCOLA prodotto tra coefficiente e peso molecolare G = c * pm '); writeln; end; procedure testo2v; begin writeln; writeln('passa a chiedere COEFFICIENTI stechiometrici '); writeln('delle sostanze incognite,in ordine,da sinistra a destra '); writeln('CALCOLA prodotto tra coefficiente e volume molecolare G = c * vn '); writeln; end; procedure testo3; begin writeln('------------------------------------------------'); writeln('calcola grammi di sostanze richieste e ottenute '); end; procedure testo3v; begin writeln('------------------------------------------------'); writeln('calcola volume di sostanze richieste e ottenute '); end; procedure totale1; (* calcola grammi stechiometrici noti *) begin tn:=pn*cn; writeln('grammi stechiometrici sostanza nota = tn:=pn*cn; ',tn); end; procedure totale1v; (* calcola litri stechiometrici noti *) begin tn:=vn*cn; writeln('volume in litri. stechiometrici sostanza nota = tn:=vn*cn; ',tn); end; procedure totale2(n:integer); (* calcola grammi stechiometrici incognite *) begin for a:=1 to n do begin tx[a]:=px[a]*cx[a]; writeln('grammi stechiometrici sostanza ',a,'...',tx[a]); end; end; procedure totale2v(n:integer); (* calcola litri stechiometrici incognite *) begin for a:=1 to n do begin tx[a]:=vn*cx[a]; writeln('volume in litri.stechiometrici sostanza ',a,'...',tx[a]); end; end; procedure dati1; (* chiede dati sostanza nota *) begin testo1; write('grammi noti di una sostanza =');readln(gn); write('peso molecolare della sostanza= ');readln(pn); write('coefficiente stechiometrico della sostanza = ');readln(cn); totale1; end; procedure dati1v; (* chiede dati sostanza nota *) begin testo1v; write('volume in litri. noti di una sostanza =');readln(gn); write('coefficiente stechiometrico della sostanza =');readln(cn); totale1v; end; procedure dati2(n:integer); (* chiede dati incognite *) begin testo2; for a:=1 to n do begin write('peso molecolare sostanza ',a,'...');readln(px[a]); write('coefficiente sostanza ',a,'...');readln(cx[a]); end; totale2(n); end; procedure dati2v(n:integer); (* chiede dati incognite *) begin testo2v; for a:=1 to n do begin write('coefficiente sostanza ',a,'...');readln(cx[a]); end; totale2v(n); end; procedure calcola1(n:integer); (* calcola grammi sostanze incognite *) begin testo3; writeln('--------------------------------------------------'); for a:=1 to n do begin gx[a]:=gn*tx[a]/tn; writeln('grammi sostanza gx[a]:=gn*tx[a]/tn; ',a,'...',gx[a]:8:5); end; end; procedure calcola1v(n:integer); (* calcola grammi sostanze incognite *) begin testo3v; writeln('--------------------------------------------------'); for a:=1 to n do begin gx[a]:=gn*tx[a]/tn; writeln('volume sostanza gx[a]:=gn*tx[a]/tn; ',a,'...',gx[a]:8:5); end; end; procedure pro1; begin dati1;dati2(n);calcola1(n);pausa; end; procedure pro2; begin dati1v;dati2v(n);calcola1v(n);pausa; end; procedure scelta; (* procedura con scelta opzioni e uscita *) label salta; var s,sn:string;opzione:integer; begin clrscr; writeln('seleziona opzione possibili tipi di problemi:'); writeln('SINTESI.DECOMPOSIZIONE .COMBINAZIONE '); writeln('nota per inserimento dati:'); writeln('inserire prima i dati della sostanza di massa o volume noti'); writeln('inserire poi in ordine,da sinistra a destra,i dati delle altre'); writeln('sostanze,prima,seconda,terza,quarta..come richiesto'); writeln('es.nella reazione HCl + NaOH -----> NaCl + H2O '); writeln('se HCl risulta = 100 grammi '); writeln('le altre sostanze,reagenti e prodotti,sono denominate come '); writeln('NaOH=sostanza1..NaCl=sostanza2..H20=sostanza3 '); writeln('-----------------------------------------------------------'); writeln('viene inoltre chiesto di indicare il numero di sostanze '); writeln('presenti nella reazione:es.precedente = 4 '); pausa;clrscr; writeln('REAGENTI e PRODOTTI espressi in GRAMMI '); writeln('nota massa in grammi di una sostanza,calcola masse delle altre'); writeln('-------------------------------------------------------------'); writeln('1...aA + bB -------> cAB '); writeln('1...cAB -------> aA + bB '); writeln('1...aA + bB -------> cC + dD '); writeln('-------------------------------------------------------------'); writeln('REAGENTI e PRODOTTI espressi in VOLUMI in litri'); writeln('noto volume di una sostanza,calcola volumi delle altre '); writeln('2..aA + bB --------> cAB '); writeln('2..cAB --------> aA + bB '); writeln('2..aA + bB --------> cC + dD '); writeln('------------------------------------------------------------'); writeln('9...fine '); writeln('scelta =');readln(opzione); if opzione=9 then goto salta; repeat write('scrivi numero sostanze presenti nella reazione :1,2,3,5 ');readln(n); until ((n<6) and (n>1)); n:=n-1; clrscr; case opzione of 1:pro1; 2:pro2; 9:fine; end; salta: writeln('altra operazione?Esperimenti?:premi S...fine:premi N '); readln(sn); if sn='S' then scelta ; end; begin (* programma di lancio *) clrscr; vn:=22; scelta; end.