esercizi di chimica con turbo pascal 1.1 su mac

program collega6;
(* problemi su ebullioscopia crioscopia pressione osmotica *)
(* INTERATTIVO DIMOSTRATIVO cfr.COLLIGA1 con RIPETIZIONE DATI ERRATI*)
(* CHIEDE ANCHE RISULTATO con VALUTAZIONE *)
const r=0.082;
var gsolvente,gsoluto,pm,k,t,dt,ts,p,vs,mo,alfa,rix,ris,dx:real;
    s,c,d,esatte,errate,totale:integer;  
    frase:string;
    da:array[1..6] of real;
    
procedure fine;
begin
writeln('premi enter');
readln;
end;
procedure cancella;
begin
clearscreen;
end;
procedure verifica;
begin
dx:=abs(rix-ris);
writeln('differenza tra risultato atteso e inserito =',dx:0:5);
if ((dx<1) or (dx=1)) then esatte:=esatte+1 else errate:=errate+1;
end;
procedure avviso;
begin
writeln;write('scrivi il risultato,poi premi ENTER : ');readln(ris);
verifica;
end;
procedure pro1;
begin
cancella;
writeln('calcola temperatura ebollizione soluzione ');writeln;
writeln(frase);
write(1:4,'  grammi solvente                    ');readln(da[1]);
write(2:4,'  grammi soluto                      ');readln(da[2]);
write(3:4,'  peso molecolare soluto             ');readln(da[3]);
write(4:4,'  costante ebullioscopica            ');readln(da[4]);
write(5:4,'  temperatura ebollizione solvente   ');readln(da[5]);
repeat
write('se devi correggere,indica quale dato:1,2,3,4,5? altrimenti 0 zero ');
readln(d);
if d<>0  then begin 
write('scrivi dato corretto =');readln(da[d]);end;
until d=0;
writeln('========================================================');
gsolvente:=da[1];gsoluto:=da[2];pm:=da[3];k:=da[4];t:=da[5];
dt:=(k*gsoluto*1000)/(pm*gsolvente);
ts:=t+dt;rix:=ts;
avviso;
writeln('tes:=to+Dte');
writeln('Dte:=(ke*gsoluto*1000)/(pm*gsolvente)');
writeln('innalzamento ebullioscopico          ',dt:8:3);
writeln('temperatura ebollizione soluzione    ',ts:8:3);
writeln;
writeln('premi enter');readln;
end;
procedure pro2;
begin
cancella;
writeln('calcola temperatura congelamento soluzione');writeln;
writeln(frase);
write(1:4,'  grammi solvente                       ');readln(da[1]);
write(2:4,'  grammi soluto                         ');readln(da[2]);
write(3:4,'  peso molecolare soluto                ');readln(da[3]);
write(4:4,'  costante crioscopica                  ');readln(da[4]);
write(5:4,'  temperatura congelamento solvente     ');readln(da[5]);
repeat
write('se devi correggere,indica quale dato:1,2,3,4,5? altrimenti 0 zero ');
readln(d);
if d<>0  then begin 
write('scrivi dato corretto =');readln(da[d]);end;
until d=0;
writeln('========================================================');
gsolvente:=da[1];gsoluto:=da[2];pm:=da[3];k:=da[4];t:=da[5];
dt:=(k*gsoluto*1000)/(pm*gsolvente);
ts:=t-dt;rix:=ts;
avviso;
writeln('tcs=to-Dtc ');
writeln('Dtc:=(kc*gsoluto*1000)/(pm*gsolvente)');;
writeln('abbassamento  crioscopico :gradi    ',dt:8:3);
writeln('temperatura congelamento soluzione  ',ts:8:3);
writeln;
writeln('premi enter');readln;
end;
procedure pro3;
begin
cancella;
writeln('calcola PESO molecolare soluto in funzione ebullioscopica ');
writeln;writeln(frase);
write(1:4,'  grammi solvente                       ');readln(da[1]);
write(2:4,'  grammi soluto                         ');readln(da[2]);
write(3:4,'  temperatura ebollizione soluzione     ');readln(da[3]);
write(4:4,'  costante ebullioscopica               ');readln(da[4]);
write(5:4,'  temperatura ebollizione  solvente     ');readln(da[5]);
repeat
write('se devi correggere,indica quale dato:1,2,3,4,5? altrimenti 0 zero ');
readln(d);
if d<>0  then begin 
write('scrivi dato corretto =');readln(da[d]);end;
until d=0;
writeln('========================================================');
gsolvente:=da[1];gsoluto:=da[2];ts:=da[3];k:=da[4];t:=da[5];
dt:=ts-t;
pm:=(k*gsoluto*1000)/(dt*gsolvente);rix:=pm;
avviso;
writeln('Dte=tes-to ');
writeln('pm:=(ke*gsoluto*1000)/(Dte*gsolvente)');
writeln('peso molecolare                     ',pm:8:3);
writeln;
writeln('premi enter');readln;
end;
procedure pro4;
begin
cancella;
writeln('calcolo PESO molecolare soluto in funzione crioscopica ');
writeln(frase);
write(1:4,'  grammi solvente                       ');readln(da[1]);
write(2:4,'  grammi soluto                         ');readln(da[2]);
write(3:4,'  temperatura congelamento soluzione    ');readln(da[3]);
write(4:4,'  costante crioscopica                  ');readln(da[4]);
write(5:4,'  temperatura congelamento  solvente    ');readln(da[5]);
repeat
write('se devi correggere,indica quale dato:1,2,3,4,5? altrimenti 0 zero ');
readln(d);
if d<>0  then begin 
write('scrivi dato corretto =');readln(da[d]);end;
until d=0;
writeln('========================================================');
gsolvente:=da[1];gsoluto:=da[2];ts:=da[3];k:=da[4];t:=da[5];
dt:=ts-t;
pm:=ABS((k*gsoluto*1000)/(dt*gsolvente));rix:=pm;
avviso;
writeln('Dtc = tcs - to ');
writeln('pm:=((kc*gsoluto*1000)/(Dtc*gsolvente))');
writeln('peso molecolare                     ',pm:8:3);
writeln;
writeln('premi enter');readln;
end;
procedure pro5;
begin
cancella;
writeln('calcola GRAMMI soluto in funzione ebullioscopica ');
writeln;writeln(frase);
write(1:4,'  grammi solvente                       ');readln(da[1]);
write(2:4,'  peso molecolare soluto                ');readln(da[2]);
write(3:4,'  temperatura ebollizione  soluzione    ');readln(da[3]);
write(4:4,'  costante ebullioscopica               ');readln(da[4]);
write(5:4,'  temperatura ebollizione   solvente    ');readln(da[5]);
repeat
write('se devi correggere,indica quale dato:1,2,3,4,5? altrimenti 0 zero ');
readln(d);
if d<>0  then begin 
write('scrivi dato corretto =');readln(da[d]);end;
until d=0;
writeln('========================================================');
gsolvente:=da[1];pm:=da[2];ts:=da[3];k:=da[4];t:=da[5];
dt:=ts-t;
gsoluto:=(dt*pm*gsolvente)/(k*1000);rix:=gsoluto;
avviso;
writeln('Dte = tes - to ');
writeln('gsoluto:=(Dte*pm*gsolvente)/(ke*1000)');;
writeln('grammi soluto                       ',gsoluto:8:3);
writeln;
writeln('premi enter');readln;
end;
procedure pro6;
begin
cancella;
writeln('calcola GRAMMI soluto in funzione crioscopica ');writeln;
writeln(frase);
write(1:4,'  grammi solvente                       ');readln(da[1]);
write(2:4,'  peso molecolare soluto                ');readln(da[2]);
write(3:4,'  temperatura congelamento  soluzione   ');readln(da[3]);
write(4:4,'  costante crioscopica                  ');readln(da[4]);
write(5:4,'  temperatura congelamento solvente     ');readln(da[5]);
repeat
write('se devi correggere,indica quale dato:1,2,3,4,5? altrimenti 0 zero ');
readln(d);
if d<>0  then begin 
write('scrivi dato corretto =');readln(da[d]);end;
until d=0;
writeln('========================================================');
gsolvente:=da[1];pm:=da[2];ts:=da[3];k:=da[4];t:=da[5];
dt:=ts-t;
gsoluto:=abs((dt*pm*gsolvente)/(k*1000));rix:=gsoluto;
avviso;
writeln('Dtc = tcs - to ');
writeln('gsoluto:=((Dtc*pm*gsolvente)/(kc*1000))');
writeln('grammi soluto                       ',gsoluto:8:3);
writeln;
writeln('premi enter');readln;
end;
procedure pro7;
begin
cancella;
writeln('calcola PRESSIONE OSMOTICA ');writeln;
writeln(frase);
write(1:4,'  litri soluzione                       ');readln(da[1]);
write(2:4,'  peso molecolare soluto                ');readln(da[2]);
write(3:4,'  temperatura soluzione gradiC          ');readln(da[3]);
write(4:4,'  grammi soluto                         ');readln(da[4]);
repeat
write('se devi correggere,indica quale dato:1,2,3,4,5? altrimenti 0 zero ');
readln(d);
if d<>0  then begin 
write('scrivi dato corretto =');readln(da[d]);end;
until d=0;
writeln('========================================================');
vs:=da[1];gsoluto:=da[4];pm:=da[2];ts:=da[3];
t:=273+ts;
p:=((gsoluto/pm)/vs)*r*t;rix:=p;
avviso;
writeln('T = 273 + ts ');
writeln('p:=((gsoluto/pm)/vs)*r*t');
writeln('pressione in atmosfere              ',p:8:3);
writeln;
writeln('premi enter');readln;
end;
procedure pro8;
begin
cancella;
writeln('calcola PRESSIONE OSMOTICA ');writeln;
writeln(frase);
write(1:4,'  concentrazione molare                 ');readln(da[1]);
write(2:4,'  temperatura soluzione gradiC          ');readln(da[2]);
write(3:4,'  particelle dissociate 1..2..3..       ');readln(da[3]);
repeat
write('se devi correggere,indica quale dato:1,2,3,4,5? altrimenti 0 zero ');
readln(d);
if d<>0  then begin 
write('scrivi dato corretto =');readln(da[d]);end;
until d=0;
writeln('========================================================');
mo:=da[1];ts:=da[2];alfa:=da[3];
t:=273+ts;
p:=alfa*mo*r*t;rix:=p;
avviso;
writeln('T = 273 + ts ');
writeln('p:=alfa*mo*r*t ');
writeln('pressione in atmosfere              ',p:8:3);
writeln;
writeln('premi enter');readln;
end;
procedure pro9;
begin
cancella;
writeln('calcola MOLARITA con pressione osmotica nota ');writeln;
writeln(frase);
write(1:4,'  pressione osmotica                    ');readln(da[1]);
write(2:4,'  temperatura soluzione gradiC          ');readln(da[2]);
write(3:4,'  numero particelle 1..2..3 ? se non sai,scrivi 1 ');readln(da[3]);
repeat
write('se devi correggere,indica quale dato:1,2,3,4,5? altrimenti 0 zero ');
readln(d);
if d<>0  then begin 
write('scrivi dato corretto =');readln(da[d]);end;
until d=0;
writeln('========================================================');
p:=da[1];ts:=da[2];alfa:=da[3];
t:=273+ts;
mo:=p/(r*t*alfa);rix:=mo;
avviso;
writeln('T = 273 + ts ');
writeln('mo:=p/(r*t*n)');
writeln('concentrazione molare               ',mo:8:3);
writeln;
writeln('premi enter');readln;
end;
procedure scelta;
var ancora:integer;
begin
cancella;
writeln('soluzione problemi grandezze colligative ');
writeln('esprimere TEMPERATURA in gradi CENTIGRADI');
writeln('esprimere MASSE in GRAMMI ');
writeln('scrivere la COSTANTE CRIOSCOPICA senza segno negativo');
writeln('seleziona tipo problema ');
writeln('1...calcola DTe ebullioscopia e temperatura ebollizione');
writeln('2...calcola DTc crioscopica e temperatura congelamento');
writeln('3...calcola PESO MOLECOLARE soluto noti valori ebullioscopici ');
writeln('4...calcola PESO MOLECOLARE soluto noti valori crioscopici ');
writeln('5...calcola GRAMMI SOLUTO in funzione ebullioscopica');
writeln('6...calcola GRAMMI SOLUTO in funzione crioscopica');
writeln('7...calcola PRESSIONE OSMOTICA=((grammi/pm)/volume)*RT ');
writeln('8...calcola PRESSIONE OSMOTICA=alfa*M*R*T ');
writeln('9...calcola MOLARITA con PRESSIONE OSMOTICA nota ');
writeln('10...fine ');
write('opzione=');readln(s);
cancella;
case s of
1:pro1;2:pro2;3:pro3;4:pro4;5:pro5;6:pro6;7:pro7;8:pro8;9:pro9;
10:fine;
end;
writeln('----------------------------');
writeln('altro problema:scrivi 1...fine:scrivi 2 ');readln(ancora);
if ancora =1 then scelta else fine;
end;
begin
cancella;
esatte:=0;errate:=0;totale:=0;
frase:='cerca su tabelle valori Kc,Ke,to,tc,pesi molecolari,se richiesti ';
writeln('funzione programma:esercizi su proprietˆ COLLIGATIVE');
writeln('POSSIBILE CORREGGERE DATI ERRATI INSERITI ');
writeln('INDICANDO QUALE DATO o QUALI DATI SONO DA MODIFICARE ');
writeln('---------------------------------------------------');
writeln('premi enter');readln;
scelta;
totale:=esatte+errate;
writeln('risposte esatte ',esatte,' su domande ',totale);
writeln('risposte errate ',errate,' su domande ',totale);
writeln('premi enter per finire ');readln;
end.