esercizi di chimica con turbo pascal 1.1 su mac
Program gas3; (* 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; p,v,g,t,hg,tc,tk,cc,Kg,pm1: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;vx,tx,gx:real); 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:=vx; writeln('volume in litri ----------------=',v:0:3); tc:=tx; tk:=tc+273; writeln('temperatura in gradi centigradi =',tc:0:3); g:=gx; writeln('massa in grammi---------------- =',g:0:3); 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:3); 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;px,tx,gx:real); 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:=px; writeln('pressione in atmosfere ---------=',p:0:3); t:=tx; tk:=t+273; writeln('temperatura in gradi centigradi =',t:0:3); g:=gx; writeln('massa in grammi---------------- =',g:0:3); 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:3); 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;px,vx,gx: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:=vx; writeln('volume in litri ----------------=',v:0:3); p:=px; writeln('pressione in atmosfere P -------=',p:0:3); g:=gx; writeln('massa in grammi---------------- =',g:0:3); 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;px,vx,tx: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:=vx; writeln('volume in litri ----------------=',v:0:3); p:=px; writeln('pressione in atmosfere P -------=',p:0:3); t:=tx; writeln('temperatura in kelvin---------- =',t:0:3); 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;px,vx,tx,gx: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:=vx; writeln('volume in litri ----------------=',v:0:3); p:=px; writeln('pressione in atmosfere P -------=',p:0:3); t:=tx; writeln('temperatura in kelvin---------- =',t:0:3); g:=gx; writeln('massa in grammi ---------- =',g:0:3); writeln('----------------------------------------------------------'); writeln('scrivi il risultato ottenuto o scrivi 0 se non lo sai'); write('risultato PM = ');readln(ris); pm1:=(g*R*t)/(p*v);analisi1(pm1,ris); writeln('----------------------------------------------------------'); writeln('confronta con risultato atteso e passaggi da eseguire'); writeln('***************applico la formula PM = m*R*T/P*V = ',pm1:0:3); writeln('----------------------------------------------------------'); pausa;clearscreen; end;
procedure pro1; begin (* PM,volume,gradiC,grammi *) pressione('idrogeno H2',2,100,50,2000); pressione('ossigeno O2',32,200,50,2000); pressione('cloro Cl2',70,300,80,3000); pressione('azoto N2',28,120,45,2000); pressione('metano CH4',16,130,100,2000); pressione('anidride carbonica CO2 ',44,300,120,5000); end;
procedure pro2; begin (* PM,pressione,gradi,grammi *) volume('idrogeno H2',2,100,50,200); volume('ossigeno O2',32,200,50,2000); volume('cloro Cl2',70,300,80,3000); volume('azoto N2',28,120,45,2000); volume('metano CH4',16,130,100,2000); volume('anidride carbonica CO2 ',44,300,120,5000); end;
procedure pro3; begin (* PM,pressione,volume,grammi *) gradi('idrogeno H2',2,100,50,2000); gradi('ossigeno O2',32,200,50,2000); gradi('cloro Cl2',70,300,80,3000); gradi('azoto N2',28,120,45,2000); gradi('metano CH4',16,130,100,2000); gradi('anidride carbonica CO2 ',44,300,120,5000); end;
procedure pro4; begin (* PM,pressione,volume,gradi *) massa('idrogeno H2',2,100,50,20); massa('ossigeno O2',32,200,50,20); massa('cloro Cl2',70,300,80,30); massa('azoto N2',28,120,45,20); massa('metano CH4',16,130,100,20); massa('anidride carbonica CO2 ',44,300,120,50); end;
procedure pro5; begin (* PM,pressione,volume,gradi,grammi *) mole('idrogeno H2',2,100,50,60,2000); mole('ossigeno O2',32,200,50,70,2000); mole('cloro Cl2',70,300,80,80,3000); mole('azoto N2',28,120,45,90,2000); mole('metano CH4',16,130,100,40,2000); mole('anidride carbonica CO2 ',44,300,120,100,5000); end;
procedure pro6; begin pressione('idrogeno H2',2,100,200,10); volume('idrogeno H2',2,100,200,10); gradi('idrogeno H2',2,100,200,10); massa('idrogeno H2',2,100,200,10); mole('idrogeno H2',2,100,200,120,10); pressione('cloro Cl2',70,100,200,10); volume('ossigeno O2',32,100,200,10); gradi('anidride solforosa SO2',64,100,200,10); massa('anidride carbonica CO2',44,100,200,10); mole('cloro Cl2 ',70,100,200,120,10); 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.