esercizi di chimica con turbo pascal 1.1 su mac

 

Program stechi1;
 (* problemi di stechiometria solo con GRAMMI non MOLI o LITRI *) 
 
   VAR cr1,cr2,cp1,cp2,pr1,pr2,pp1,pp2:integer;
       tr1,tr2,tp1,tp2,xr1,xr2,xp1,xp2,gr1,gr2,gp1,gp2:real;
          a:integer;
     
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 PESI MOLECOLARI e COEFFICIENTI stechiometrici');
writeln('CALCOLA prodotto tra coefficiente e peso molecolare G = c * pm ');
writeln;
end;
procedure testo2;
begin
writeln('passa a chiedere MASSA nota in grammi ');
end;
procedure testo3;
begin
writeln('------------------------------------------------');
writeln('calcola grammi di sostanze richieste e ottenute ');
end;
procedure datir1;
begin
write('peso atomico o molecolare reattivo1   ');readln(pr1);
write('coefficiente stechiometrico reattivo1 ');readln(cr1);
tr1:=pr1*cr1;
writeln('grammi totali =',tr1:0:8);
end;
procedure datir2;
begin
write('peso atomico o molecolare reattivo2   ');readln(pr2);
write('coefficiente stechiometrico reattivo1 ');readln(cr2);
tr2:=pr2*cr2;writeln('grammi totali =',tr2:0:8);
end;
procedure datip1;
begin
write('peso atomico o molecolare prodotto1   ');readln(pp1);
write('coefficiente stechiometrico prodotto1 ');readln(cp1);
tp1:=pp1*cp1;writeln('grammi totali =',tp1:0:8);
end;
procedure datip2;
begin
write('peso atomico o molecolare prodotto2   ');readln(pp2);
write('coefficiente stechiometrico prodotto2 ');readln(cp2);
tp2:=pp2*cp2;writeln('grammi totali =',tp2:0:8);
end;
procedure massar1;
begin
write('grammi reattivo1     ');readln(gr1);
end;
procedure massar2;
begin
write('grammi reattivo2     ');readln(gr2);
end;
procedure massap1;
begin
write('grammi prodotto1     ');readln(gp1);
end;
procedure massap2;
begin
write('grammi prodotto2    ');readln(gp2);
end;
procedure calcola1;
begin
testo3;
xr2:=gr1*tr2/tr1;
xp1:=gr1*tp1/tr1;
writeln('grammi reattivo2 necessari  xr2:=gr1*tr2/tr1; ',xr2:8:5);
writeln('grammi prodotto1 ottenuti   xp1:=gr1*tp1/tr1; ',xp1:8:5);
end;
procedure calcola2;
begin
testo3;
xr1:=gr2*tr1/tr2;
xp1:=gr2*tp1/tr2;
writeln('grammi reattivo1 necessari  xr1:=gr2*tr1/tr2; ',xr1:8:5);
writeln('grammi prodotto1 ottenuti   xp1:=gr2*tp1/tr2; ',xp1:8:5);
end;
procedure calcola3;
begin
testo3;
xr1:=gp1*tr1/tp1;
xr2:=gp1*tr2/tp1;
writeln('grammi reattivo1 necessari  xr1:=gp1*tr1/tp1; ',xr1:8:5);
writeln('grammi reattivo2 necessari  xr2:=gp1*tr2/tp1; ',xr2:8:5);
end;
procedure calcola4;
begin
testo3;
xp1:=gr1*tp1/tr1;
xp2:=gr1*tp2/tr1;
writeln('grammi prodotto1 ottenuti xp1:=gr1*tp1/tr1;  ',xp1:8:5);
writeln('grammi prodotto2 ottenuti xp2:=gr1*tp2/tr1;  ',xp2:8:5);
end;
procedure calcola5;
begin
testo3;
xr1:=gp1*tr1/tp1;
xp2:=gp1*tp2/tp1;
writeln('grammi reattivo necessari  xr1:=gp1*tr1/tp1; ',xr1:8:5);
writeln('grammi prodotto2 ottenuti  xp2:=gp1*tp2/tp1; ',xp2:8:5);
end;
procedure calcola6;
begin
testo3;
xr1:=gp2*tr1/tp2;
xp1:=gp2*tp1/tp2;
writeln('grammi reattivo1 necessari xr1:=gp2*tr1/tp2; ',xr1:8:5);
writeln('grammi prodotto2 ottenuti  xp1:=gp2*tp1/tp2; ',xp1:8:5);
end;
procedure calcola7;
begin
testo3;
xr2:=gr1*tr2/tr1;
xp1:=gr1*tp1/tr1;
xp2:=gr1*tp2/tr1;
writeln('grammi reattivo2 necessari xr2:=gr1*tr2/tr1; ',xr2:8:5);
writeln('grammi prodotto1 ottenuti  xp1:=gr1*tp1/tr1; ',xp1:8:5);
writeln('grammi prodotto2 ottenuti  xp2:=gr1*tp2/tr1; ',xp2:8:5);
end;
procedure calcola8;
begin
testo3;
xr1:=gr2*tr1/tr2;
xp1:=gr2*tp1/tr2;
xp2:=gr2*tp2/tr2;
writeln('grammi reattivo1 necessari xr1:=gr2*tr1/tr2; ',xr1:8:5);
writeln('grammi prodotto1 ottenuti  xp1:=gr2*tp1/tr2; ',xp1:8:5);
writeln('grammi prodotto2 ottenuti  xp2:=gr2*tp2/tr2; ',xp2:8:5);
end;
procedure calcola9;
begin
testo3;
xr1:=gp1*tr1/tp1;
xr2:=gp1*tr2/tp1;
xp2:=gp1*tp2/tp1;
writeln('grammi reattivo1 necessari xr1:=gp1*tr1/tp1; ',xr1:8:5);
writeln('grammi reattivo2 necessari xr2:=gp1*tr2/tp1; ',xr2:8:5);
writeln('grammi prodotto2 ottenuti  xp2:=gp1*tp2/tp1; ',xp2:8:5);
end;
procedure calcola10;
begin
testo3;
xr1:=gp2*tr1/tp2;
xr2:=gp2*tr2/tp2;
xp1:=gp2*tp1/tp2;
writeln('grammi reattivo1 necessari xr1:=gp2*tr1/tp2; ',xr1:8:5);
writeln('grammi reattivo2 necessari xr2:=gp2*tr2/tp2; ',xr2:8:5);
writeln('grammi prodotto2 ottenuti  xp1:=gp2*tp1/tp2; ',xp1:8:5);
end;
procedure pro1;
begin
testo1;datir1;datir2;datip1;testo2;massar1;calcola1;pausa;
end;
procedure pro2;
begin
testo1;datir1;datir2;datip1;testo2;massar2;calcola2;pausa;
end;
procedure pro3;
begin
testo1;datir1;datir2;datip1;testo2;massap1;calcola3;pausa;
end;
procedure pro4;
begin
testo1;datir1;datip1;datip2;testo2;massar1;calcola4;pausa;
end;
procedure pro5;
begin
testo1;datir1;datip1;datip2;testo2;massap1;calcola5;pausa;
end;
procedure pro6;
begin
testo1;datir1;datip1;datip2;testo2;massap2;calcola6;pausa;
end;
procedure pro7;
begin
testo1;datir1;datir2;datip1;datip2;testo2;massar1;calcola7;pausa;
end;
procedure pro8;
begin
testo1;datir1;datir2;datip1;datip2;testo2;massar2;calcola8;pausa;
end;
procedure pro9;
begin
testo1;datir1;datir2;datip1;datip2;testo2;massap1;calcola9;pausa;
end;
procedure pro10;
begin
testo1;datir1;datir2;datip1;datip2;testo2;massap2;calcola10;pausa;
end;
procedure scelta;  (* procedura con scelta opzioni e uscita *)
var s,sn:string;opzione:integer;
begin
clearscreen;
writeln('seleziona opzione possibili tipi di problemi:');
writeln('masse solo in grammi...non in moli o volumi  ');
writeln('---------------------------------------------');
writeln('SINTESI.1,2,3..DECOMPOSIZIONE 4,5,6..COMBINAZIONE 7,8,9,10 ');
writeln('1...gA + xB ---> yAB :noti grammi di A  ,calcola grammi di B,AB');
writeln('2...xA + gB ---> yAB :noti grammi di B  ,calcola grammi di A,AB');
writeln('3...xA + yB ---> gAB :noti grammi di AB ,calcola grammi di A,B');
writeln('4...gAB ---> xA + yB :noti grammi di AB ,calcola grammi di A,B');
writeln('5...xAB ---> gA + yB :noti grammi di A  ,calcola grammi di AB,B');
writeln('6...xAB ---> yA + gB :noti grammi di B  ,calcola grammi di A,AB');
writeln('7...gA + xB ---> yC + zD :noti gA ,calcola grammi B,C,D ');
writeln('8...xA + gB ---> yC + zD :noti gB ,calcola grammi A,C,D ');
writeln('9...xA + yB ---> gC + zD :noti gC ,calcola grammi A,B,D ');
writeln('10..xA + yB ---> zC + gD :noti gD ,calcola grammi A,B,C ');
writeln('15...fine ');
writeln('scelta =');readln(opzione);
clearscreen;
case opzione of
1:pro1;
2:pro2;
3:pro3;
4:pro4;
5:pro5;
6:pro6;
7:pro7;
8:pro8;
9:pro9;
10:pro10;
15:fine;
end;
writeln('altra operazione?Esperimenti?:premi S...fine:premi N '); readln(sn);
if sn='S' then scelta ;
end;
begin            (* programma di lancio *)
clearscreen;
scelta;
end.

Program stechi3;
 (* problemi di stechiometria solo con GRAMMI  o LITRI *) 
 
   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
clearscreen;
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;clearscreen;
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;
clearscreen;
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 *)
clearscreen;
vn:=22;
scelta;
end.

Program stechi4c;
 (* problemi di stechiometria solo con GRAMMI  o LITRI *) 
 
   VAR gn,pn,cn,tn,n,a:integer;
   cx :array[1..5] of integer;
   px :array[1..5] of integer;
   tx :array[1..5] of integer;
   txv:array[1..5] of real;
   gx :array[1..5] of real;
   vx,vn,tnv,vs: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
tnv:=vn*cn;
writeln('litri. stechiometrici sostanza nota = tnv:=vn*cn;  ',tnv:0:5);
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
txv[a]:=vn*cx[a];
writeln('volume in litri.stechiometrici sostanza ',a,'...',txv[a]:0:5);
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(vs);
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 volume;
begin
vx:=gx[n]*vn/tx[n];
writeln('volume sostanza  ',n,'...',vx:8:5);
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 litri sostanze incognite *)
begin
testo3v;
writeln('--------------------------------------------------');
for a:=1 to n do
begin
gx[a]:=vs*txv[a]/tnv;
writeln('volume sostanza gx[a]:=vs*txv[a]/tnv; ',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 pro3;
begin
dati1;dati2(n);calcola1(n);volume;pausa;
end;
procedure scelta;  (* procedura con scelta opzioni e uscita *)
label salta;
var s,sn:string;opzione:integer;
begin
clearscreen;
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;clearscreen;
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('REAGENTI e PRODOTTI in grammi,1 PRODOTTO in litri');
writeln('nota massa di una sostanza,calcola volume,massa, delle altre ');
writeln('NOTA:inserire come ultima la sostanza gassosa ');
writeln('3..aA + bB --------> cAB     ');
writeln('3..cAB     --------> aA + bB ');
writeln('3..aA + bB --------> cC + dD ');
writeln('------------------------------------------------------------');
writeln('9...fine ');
writeln('scelta =');readln(opzione);
if opzione=9 then goto salta;
writeln('scrivi numero di sostanze presenti nella reazione,oppure ');
writeln('numero di sostanze che interessano nel calcolo :massimo 5');
repeat
write('scrivi numero sostanze = :1,2,3,4,5 ');readln(n);
until ((n<6) and (n>1));
n:=n-1;
clearscreen;
case opzione of
1:pro1;
2:pro2;
3:pro3;
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 *)
clearscreen;
vn:=22.4;
scelta;
end.