Program gas5; (* esempi problemi sui GAS INTERATTIVO con valutazione*) (* dati da inserire da libro o foglio *) uses memtypes,quickdraw,OSintf,tooLIntf,fixmath;
const r=0.082; v1='volume in litri-------------='; p1='pressione in atmosfere------='; t1='temperatura in kelvin-------='; g1='massa in grammi-------------='; m1='peso molecolare-------------='; tipo1='calcola pressione in atmosfere e in mmHg '; tipo2='calcola volume in litri e in cc.'; tipo3='calcola temperatura in kelvin e centigradi'; tipo4='calcola massa in grammi e Kg e numero moli'; tipo5='calcola peso molecolare del gas '; ris1='pressione in atmosfere-- ='; ris2='pressione in mmHg--------='; ris3='volume in litri----------='; ris4='volume in cc-------------='; ris5='massa in grammi----------='; ris6='massa in Kg--------------='; ris7='temperatura in kelvin----='; ris8='temperatura in centigradi='; ris9='peso molecolare----------='; ris10='numero di moli----------=';
VAR ris,rip,nmoli,numoli,dx1,dx2,dx3:real; p,v,g,t,hg,tc,tk,cc,Kg,pm1:real; a,esatte,errate,totale,pm:integer; tipo:string;
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:=2; 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 spiega1; begin writeln('----------------------------------------------------------'); writeln('confronta con risultato atteso e passaggi da eseguire'); writeln('trasformo gradi centigradi in kelvin :K = 273 +C = ',tk:0:3); 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('----------------------------------------------------------'); end;
procedure spiega2; begin writeln('----------------------------------------------------------'); writeln('confronta con risultato atteso e passaggi da eseguire'); writeln('trasformo gradi centigradi in kelvin :K = 273 +C = ',tk:0:3); 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('----------------------------------------------------------'); end;
procedure dati(tipo,v1,t1,g1,p1,ris1,ris2:string); begin writeln(tipo); writeln('usando i dati assegnati:R = 0.082 '); writeln('formula generale PV=mRT/PM '); writeln('---------------------------------------------------------'); write(v1);readln(v); write(t1);readln(t); write(g1);readln(g); write(m1);readln(pm); end;
procedure pressione; begin tk:=tc+273; writeln('----------------------------------------------------------'); writeln('scrivi il risultato ottenuto o scrivi 0 se non lo sai'); write(ris1);readln(ris); write(ris2);readln(rip); p:=(g*R*tk)/(pm*v);hg:=p*760; analisi2(p,ris,hg,rip); pausa;cancella; end;
procedure volume; begin writeln('scrivi il risultato ottenuto o scrivi 0 se non lo sai'); write(ris3);readln(ris); write(ris4);readln(rip); v:=(g*R*tk)/(pm*p);cc:=v*1000; analisi2(v,ris,cc,rip); pausa;cancella; end;
procedure gradi(tipo:string); begin writeln(tipo); writeln('usando i dati assegnati:R = 0.082 '); writeln('formula generale PV=mRT/PM '); writeln('---------------------------------------------------------'); write('volume in litri ----------------=');readln(v); write('pressione in atmosfere P -------=');readln(p); write('massa in grammi---------------=');readln(g); write('peso molecolare-----------------=');readln(pm); 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('----------------------------------------------------------'); 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(tipo:string); begin writeln(tipo); writeln('usando i dati assegnati:R = 0.082 '); writeln('formula generale PV=mRT/PM '); write('volume in litri ------------------=');readln(v); write('pressione in atmosfere P ---------=');readln(p); write('temperatura in kelvin------------ =');readln(t); write('peso molecolare-------------------=');readln(pm); 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('----------------------------------------------------------'); 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(tipo:string); begin writeln(tipo); writeln('usando i dati assegnati:R = 0.082 '); writeln('formula generale PV=mRT/PM '); writeln('---------------------------------------------------------'); write('volume in litri ------------------=');readln(v); write('pressione in atmosfere P ---------=');readln(p); writeln('temperatura in kelvin---------- =');readln(t); writeln('massa in grammi ---------- =');readln(g); 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;cancella; end;
procedure pro1; begin dati(tipo1,v1,t1,g1,m1,ris1,ris2);pressione;spiega1; end;
procedure pro2; begin dati(tipo2,p1,t1,g1,m1,ris3,ris4);volume;spiega2; end;
procedure pro3; begin tipo:='calcolare la temperatura in gradi kelvin e centigradi'; gradi(tipo); end;
procedure pro4; begin tipo:='calcolare la massa in grammi e in Kg e numero di MOLI'; massa(tipo);; end;
procedure pro5; begin tipo:='calcolare peso molecolare '; mole(tipo); 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('9...fine '); writeln('scelta =');readln(opzione);clearscreen; case opzione of 1:pro1;2:pro2;3:pro3;4:pro4;5:pro5; 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.