esercizi di chimica con turbo pascal 1.1 su mac
Program gas2a; (* esempi problemi sui GAS INTERATTIVO con valutazione*) uses memtypes,quickdraw,OSintf,tooLIntf,fixmath;
const r=0.082;
VAR ris,rip,nmoli,numoli,dx1,dx2,dx3:real; a,esatte,errate,totale:integer;
procedure cancella; begin clearscreen; end;
procedure pausa; begin writeln('premi ENTER ');readln; end;
procedure fine; begin writeln('fine operazione:confermare :premi enter'); readln; end;
procedure analisi1(risx,ripx:real); var k:integer; begin k:=1; dx1:=abs(risx-ripx); writeln('differenza tra valore atteso e valore inserito=',dx1:0:5); if ((dx1<k) or (dx1=k)) then begin writeln('ESATTO');esatte:=esatte+1;end else begin writeln('ERRATO');errate:=errate+1;end; end;
procedure analisi2(risx,ripx,ris2,rip2:real); var k:integer; begin k:=1; dx1:=abs(risx-ripx);dx2:=abs(ris2-rip2); writeln('differenza tra valore atteso e valore inserito=',dx1:0:5); writeln('differenza tra valore atteso e valore inserito=',dx2:0:5); if (((dx1<k) or (dx1=k)) and ((dx2<k) or (dx2=k))) then begin writeln('ESATTO');esatte:=esatte+1;end else begin writeln('ERRATO');errate:=errate+1;end; end;
procedure analisi3(risx,ripx,ris2,rip2,ris3,rip3:real); var k:integer; begin k:=1; dx1:=abs(risx-ripx);dx2:=abs(ris2-rip2);dx3:=abs(ris3-rip3); writeln('differenza tra valore atteso e valore inserito=',dx1:0:5); writeln('differenza tra valore atteso e valore inserito=',dx2:0:5); writeln('differenza tra valore atteso e valore inserito=',dx3:0:5); if (((dx1<k) or (dx1=k)) and ((dx2<k) or (dx2=k)) and ((dx3<k) or (dx3=k))) then begin writeln('ESATTO');esatte:=esatte+1;end else begin writeln('ERRATO');errate:=errate+1;end; end;
procedure pressione(gas:string;pm:integer); var p,v,t,g,hg:real; tk,tc:integer; begin writeln('calcolare la pressione in atmosfere e in mmHg '); writeln('del gas indicato,usando i dati assegnati:R = 0.082 '); writeln('formula generale PV=mRT/PM '); writeln('---------------------------------------------------------'); writeln(gas); writeln('---------------------------------------------------------'); v:=random; v:=abs(v); v:=round(v/1000)+1; writeln('volume in litri ----------------=',v:0:0); t:=random; t:=abs(t); tc:=round(t/100)+1; tk:=tc+273; writeln('temperatura in gradi centigradi =',tc:0); g:=random; g:=abs(g); g:=round(g/1000)+1; writeln('massa in grammi---------------- =',g:0:0); writeln('----------------------------------------------------------'); writeln('scrivi il risultato ottenuto o scrivi 0 se non lo sai'); write('risultato atmosfere = ');readln(ris); write('risultato mmHg = ');readln(rip); p:=(g*R*tk)/(pm*v);hg:=p*760; analisi2(p,ris,hg,rip); writeln('----------------------------------------------------------'); writeln('confronta con risultato atteso e passaggi da eseguire'); writeln('trasformo gradi centigradi in kelvin :K = 273 +C = ',tk:0); writeln('----------------------------------------------------------'); writeln('cerco peso molecolare del gas indicato :PM = ',pm); writeln('----------------------------------------------------------'); writeln('*************** applico la formula P = m*R*T/PM*V = ',p:0:3); writeln('----------------------------------------------------------');
writeln('trasformo atmosfere in mmHg : Hg = atmosfere*760 = ',hg:0:3); writeln('----------------------------------------------------------'); pausa;cancella; end;
procedure volume(gas:string;pm:integer); var p,v,t,g,hg,cc:real; tk,tc:integer; begin writeln('calcolare il volume in litri e in cc. '); writeln('del gas indicato,usando i dati assegnati:R = 0.082 '); writeln('formula generale PV=mRT/PM '); writeln('---------------------------------------------------------'); writeln(gas); writeln('---------------------------------------------------------'); p:=random; p:=abs(p); p:=round(p/1000)+1; writeln('pressione in atmosfere ---------=',p:0:0); t:=random; t:=abs(t); tc:=round(t/100)+1; tk:=tc+273; writeln('temperatura in gradi centigradi =',tc:0); g:=random; g:=abs(g); g:=round(g/1000)+1; writeln('massa in grammi---------------- =',g:0:0); writeln('----------------------------------------------------------'); writeln('scrivi il risultato ottenuto o scrivi 0 se non lo sai'); write('risultato litri = ');readln(ris); write('risultato cc = ');readln(rip); v:=(g*R*tk)/(pm*p);cc:=v*1000; analisi2(v,ris,cc,rip); writeln('----------------------------------------------------------'); writeln('confronta con risultato atteso e passaggi da eseguire'); writeln('trasformo gradi centigradi in kelvin :K = 273 +C = ',tk:0); writeln('----------------------------------------------------------'); writeln('cerco peso molecolare del gas indicato :PM = ',pm); writeln('----------------------------------------------------------'); writeln('****************applico la formula V = m*R*T/PM*P = ',v:0:3); writeln('----------------------------------------------------------');
writeln('trasformo litri in cc : cc = litri*1000 = ',cc:0:3); writeln('----------------------------------------------------------'); pausa;cancella; end;
procedure gradi(gas:string;pm:integer); var p,v,t,g,hg,tc:real; begin writeln('calcolare la TEMPERATURA in gradi centigradi e kelvin '); writeln('del gas indicato,usando i dati assegnati:R = 0.082 '); writeln('formula generale PV=mRT/PM '); writeln('---------------------------------------------------------'); writeln(gas); writeln('---------------------------------------------------------'); v:=random; v:=abs(v); v:=round(v/1000)+1; writeln('volume in litri ----------------=',v:0:0); p:=random; p:=abs(p); p:=round(p/1000)+1; writeln('pressione in atmosfere P -------=',p:0:3); g:=random; g:=abs(g); g:=round(g/1000)+1; writeln('massa in grammi---------------- =',g:0:0); writeln('----------------------------------------------------------'); writeln('scrivi il risultato ottenuto o scrivi 0 se non lo sai'); write('risultato kelvin = ');readln(ris); write('risultato centigradi = ');readln(rip); t:=(p*v*pm)/(R*g);tc:=t-273; analisi2(t,ris,tc,rip); writeln('----------------------------------------------------------'); writeln('confronta con risultato atteso e passaggi da eseguire'); writeln('cerco peso molecolare del gas indicato :PM = ',pm); writeln('----------------------------------------------------------');
writeln('*****************applico la formula T = P*V*PM/R*m= ',t:0:3); writeln('----------------------------------------------------------'); writeln('trasformo gradi kelvin in centigradi :C = K - 273 = ',tc:0:3); writeln('----------------------------------------------------------'); pausa;cancella; end;
procedure massa(gas:string;pm:integer); var p,v,t,g,hg,tc,kg:real; begin writeln('calcolare la MASSA in grammi e Kg e numero di MOLI '); writeln('del gas indicato,usando i dati assegnati:R = 0.082 '); writeln('formula generale PV=mRT/PM '); writeln('---------------------------------------------------------'); writeln(gas); writeln('---------------------------------------------------------'); v:=random; v:=abs(v); v:=round(v/1000)+1; writeln('volume in litri ----------------=',v:0:0); p:=random; p:=abs(p); p:=round(p/1000)+1; writeln('pressione in atmosfere P -------=',p:0:3); t:=random; t:=abs(t); t:=round(t/100)+1; writeln('temperatura in kelvin---------- =',t:0:0); writeln('----------------------------------------------------------'); writeln('scrivi il risultato ottenuto o scrivi 0 se non lo sai'); write('risultato grammi = ');readln(ris); write('risultato Kg = ');readln(rip); write('risultato moli = ');readln(nmoli); g:=(p*v*pm)/(R*t);kg:=g/1000;numoli:=g/pm; analisi3(g,ris,Kg,rip,numoli,nmoli); writeln('----------------------------------------------------------'); writeln('confronta con risultato atteso e passaggi da eseguire'); writeln('cerco peso molecolare del gas indicato :PM = ',pm); writeln('----------------------------------------------------------'); writeln('*****************applico la formula m = P*V*PM/R*T= ',g:0:3); writeln('----------------------------------------------------------'); writeln('trasformo i grammi in Kg : Kg = grammi/1000 = ',kg:0:3); writeln('----------------------------------------------------------'); writeln('calcolo numero moli: moli = massa/PM = ',numoli:0:3); writeln('----------------------------------------------------------'); pausa;cancella; end;
procedure mole(gas:string;px:integer); var p,v,t,g,hg,tc,kg,pm:real; begin writeln('calcolare la PESO MOLECOLARE in grammi per mole'); writeln('del gas indicato,usando i dati assegnati:R = 0.082 '); writeln('formula generale PV=mRT/PM '); writeln('---------------------------------------------------------'); writeln(gas); writeln('---------------------------------------------------------'); v:=random; v:=abs(v); v:=round(v/1000); writeln('volume in litri ----------------=',v:0:0); p:=random; p:=abs(p); p:=round(p/1000)+1; writeln('pressione in atmosfere P -------=',p:0:3); t:=random; t:=abs(t); t:=round(t/100)+1; writeln('temperatura in kelvin---------- =',t:0:0); g:=random; g:=abs(g); g:=round(g/1000)+1; writeln('massa in grammi ---------- =',g:0:0); writeln('----------------------------------------------------------'); writeln('scrivi il risultato ottenuto o scrivi 0 se non lo sai'); write('risultato PM = ');readln(ris); pm:=(g*R*t)/(p*v);analisi1(pm,ris); writeln('----------------------------------------------------------'); writeln('confronta con risultato atteso e passaggi da eseguire'); writeln('***************applico la formula PM = m*R*T/P*V = ',pm:0:3); writeln('----------------------------------------------------------'); pausa;clearscreen; end;
procedure pro1; begin pressione('idrogeno H2',2 );pressione('ossigeno O2',32); pressione('cloro Cl2',70);pressione('azoto N2',28); pressione('metano CH4',16);pressione('anidride carbonica CO2 ',44); end;
procedure pro2; begin volume('idrogeno H2',2 );volume('ossigeno O2',32); volume('cloro Cl2',70);volume('azoto N2',28); volume('etilene C2H2',26);volume('anidride solforosa SO2 ',64); end;
procedure pro3; begin gradi('idrogeno H2',2 );gradi('ossigeno O2',32); gradi('cloro Cl2',70);gradi('azoto N2',28); gradi('etilene C2H2',26);gradi('anidride solforosa SO2 ',64); end;
procedure pro4; begin massa('idrogeno H2',2 );massa('ossigeno O2',32); massa('cloro Cl2',70);massa('azoto N2',28); massa('etilene C2H2',26);massa('anidride solforosa SO2 ',64); end;
procedure pro5; begin mole('idrogeno H2',2 );mole('ossigeno O2',32); mole('cloro Cl2',70);mole('azoto N2',28); mole('etilene C2H2',26);mole('anidride solforosa SO2 ',64); end;
procedure pro6; begin mole('idrogeno H2',2 );mole('ossigeno O2',32); massa('cloro Cl2',70);massa('azoto N2',28); gradi('etilene C2H2',26);gradi('anidride solforosa SO2 ',64); volume('idrogeno H2',2 );volume('ossigeno O2',32); pressione('cloro Cl2',70);pressione('azoto N2',28); end;
procedure scelta; var s,sn:string;opzione:integer; begin clearscreen; writeln('seleziona opzione :'); writeln('1...calcolo PRESSIONE:interattivo'); writeln('2...calcolo VOLUME:interattivo'); writeln('3...calcolo TEMPERATURA:interattivo'); writeln('4...calcolo MASSA e numero MOLI:interattivo'); writeln('5...calcolo PESO MOLECOLARE:interattivo'); writeln('6...calcolo PARAMETRI precedenti in modo variabile'); writeln('9...fine '); writeln('scelta =');readln(opzione);clearscreen; case opzione of 1:pro1;2:pro2;3:pro3;4:pro4;5:pro5;6:pro6; 9:fine; end; writeln('altra operazione?Esperimenti?:premi S...fine:premi N '); readln(sn); if ((sn='S') or (sn='s')) then scelta ; end;
begin cancella; esatte:=0;errate:=0; writeln('esempi proposti e commentati di problemi sui gas '); writeln('applicando la legge generale PV=nRT = gRT/PM '); writeln('e le formule derivate inverse :scrivere la risposta'); writeln('se decimali,usare 4 cifre DECIMALI'); pausa; scelta; totale:=esatte+errate; writeln('risposte esatte =',esatte ,' su domande ',totale); writeln('risposte errate =',errate ,' su domande ',totale); pausa; end.