esercitazione a
livello didattico-liceale
con turbo pascal , su argomenti di chimica vari
calcolo formula minina e vera
Program formula; (* esempio dimostrativo calcolo formula minima e formula vera*) uses crt; const n=5; var a:array[1..n] of string[5]; (* simboli elementi *) x:array[1..n] of string[5]; (* simboli elementi *) ba:array[1..n] of integer;(* pesi atomici *) bx:array[1..n] of integer; c:array[1..n] of real; (* grammi elementi *) y:array[1..n] of real; dx:array[1..n] of real; (* moli elementi *) da:array[1..n] of real; e:array[1..n] of real; (* indici elementi *) ex:array[1..n] of real; numero,k,c1,c2,pmt,h:integer; (* indici arrotondati *) pm:array[1..n] of integer;(* pesi molecolari noti *) min:real; procedure cancella; begin clrscr; end; procedure dati; begin a[1]:='C';a[2]:='C';a[3]:='C';a[4]:='C';a[5]:='C'; x[1]:='H';x[2]:='H';x[3]:='H';x[4]:='H';x[5]:='H'; ba[1]:=12;ba[2]:=12;ba[3]:=12;ba[4]:=12;ba[5]:=12; bx[1]:=1;bx[2]:=1;bx[3]:=1;bx[4]:=1;bx[5]:=1; c[1]:=24;c[2]:=36;c[3]:=48;c[4]:=60;c[5]:=72; y[1]:=4;y[2]:=6;y[3]:=8;y[4]:=10;y[5]:=12; pm[1]:=28;pm[2]:=42;pm[3]:=56;pm[4]:=70;pm[5]:=84; end; procedure esegue; begin min:=100;k:=1; for numero :=1 to n do begin writeln('dalla analisi un composto risulta formato dai seguenti elementi'); writeln('presenti con grammi indicati'); writeln('---------------------------------------------------------------'); writeln('peso molecolare noto =',pm[k]); writeln('grammi di ',a[k],' = ',c[k]:10:6); writeln('grammi di ',x[k],' = ',y[k]:10:6); writeln('------------------------------------------'); writeln('dividere i grammi di ogni elemento per il suo peso atomico'); writeln('per ottenere il numero di moli per ogni elemento'); writeln; da[k]:=c[k]/ba[k]; dx[k]:=y[k]/bx[k]; min:=da[k]; if ((dx[k]<min) or (dx[k]=min)) then min:=dx[k]; writeln('moli di ',a[k],' = ',c[k]:10:6,' / ',ba[k],' = ',da[k]:10:6); writeln('moli di ',x[k],' = ',y[k]:10:6,' / ',bx[k],' = ',dx[k]:10:6); writeln('---------------------------------------------------------------'); writeln('premi INVIO'); readln;cancella; writeln('determinare il rapporto tra le moli degli elementi'); writeln('dividendo le moli trovate per il valore minore'); e[k]:=da[k]/min; ex[k]:=dx[k]/min; writeln('e arrotondare il risultato'); writeln; writeln('moli di ',a[k],' = ',da[k]:10:6,' / ',min:10:6,' = ',e[k]:10:6); writeln('moli di ',x[k],' = ',dx[k]:10:6,' / ',min:10:6,' = ',ex[k]:10:6); writeln('----------------------------------------------------'); c1:=round(e[k]); c2:=round(ex[k]); writeln('la formula minima risulta quindi con indici arrotondati:'); writeln; writeln(a[k],c1,x[k],c2); writeln('--------------------------------------------------------'); writeln('calcolo peso molecolare formula minima:'); pmt:=c1*ba[k]+c2*bx[k]; writeln(c1,'*',ba[k],'+',c2,'*',bx[k],' = ',pmt:10); writeln('confronta con peso molecolare noto ',pm[k]); writeln; writeln('divide peso molecolare noto per peso molecolare formula minima'); h:=pm[k] div pmt; writeln(pm[k],'/',pmt,'=',h); writeln('quoziente pesi molecolari=',h); writeln('moltiplica indici minimi per quoziente trovato'); c1:=c1*h;c2:=c2*h; writeln('scrive formula molecolare vera'); writeln(a[k],c1,x[k],c2); readln; k:=k+1; cancella; end; end; begin cancella; writeln('scopo del programma:mostrare come si risale alla formula minima'); writeln('di un composto,in funzione delle quantita di elementi trovate'); writeln('mediante la analisi chimica di una determinata quantita di'); writeln('sostanza di natura ignota'); writeln('e alla formula molecolare vera se si conosce peso molecolare vero'); writeln('premi INVIO per proseguire');readln;cancella; dati; esegue; end.