esercitazione a livello didattico-liceale
con turbo pascal , su argomenti di chimica vari

calcolo interattivo di formula minima

 

Program minico;
(* esempio INTERATTIVO calcolo formula minima *)
uses crt;
const n=10;
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:integer;   (* indici arrotondati *)
      min:real;
      r:array[1..n] of string[10];
      esatte,errate,totale:integer;
      fo:string[10];
      
procedure cancella;
begin
clrscr;
end;


procedure dati;
begin
a[1]:='Ca';a[2]:='Na';a[3]:='Al';a[4]:='Mg';a[5]:='Cs';
x[1]:='Cl';x[2]:='S';x[3]:='Cl';x[4]:='S';x[5]:='Cl';
ba[1]:=40;ba[2]:=23;ba[3]:=27;ba[4]:=24;ba[5]:=133;
bx[1]:=35;bx[2]:=32;bx[3]:=35;bx[4]:=32;bx[5]:=35;
c[1]:=0.9;c[2]:=46;c[3]:=54;c[4]:=48;c[5]:=4.04;
y[1]:=1.6;y[2]:=32;y[3]:=210;y[4]:=64;y[5]:=1.08;

a[6]:='Ca';a[7]:='Na';a[8]:='Al';a[9]:='Mg';a[10]:='Cs';
x[6]:='Cl';x[7]:='S';x[8]:='Cl';x[9]:='S';x[10]:='Cl';
ba[6]:=40;ba[7]:=23;ba[8]:=27;ba[9]:=24;ba[10]:=133;
bx[6]:=35;bx[7]:=32;bx[8]:=35;bx[9]:=32;bx[10]:=35;
c[6]:=0.4;c[7]:=0.46;c[8]:=540;c[9]:=0.48;c[10]:=40.04;
y[6]:=0.7;y[7]:=0.32;y[8]:=2100;y[9]:=0.64;y[10]:=10.08;

r[1]:='Ca1Cl2';r[2]:='Na2S1';r[3]:='Al1Cl3';r[4]:='Mg1S1';r[5]:='Cs1Cl1';
r[6]:='Ca1Cl2';r[7]:='Na2S1';r[8]:='Al1Cl3';r[9]:='Mg1S1';r[10]:='Cs1Cl1';
end;

procedure esegue;
begin 
min:=100;k:=1;esatte:=0;errate:=0;totale:=0;
for numero :=1 to n do
begin
  writeln('dalla analisi un composto risulta formato dai seguenti elementi');
  writeln('presenti con grammi indicati');
  writeln('---------------------------------------------------------------');
  writeln('grammi di ',a[k],' = ',c[k]:10:6);
  writeln('grammi di ',x[k],' = ',y[k]:10:6); 
  writeln('------------------------------------------');
  writeln('scrivere la formula minima es. Na1Cl1...Fe2Cl3..Ca1S1..');
  write('formula = ');readln(fo);
  if (fo=r[k]) then begin
    writeln('esatto ');esatte:=esatte+1;end
  else begin writeln('errato:confronta calcoli e risultato ');
    errate:=errate+1;end;
   writeln('---------------premi INVIO ------------');readln;cancella; 
  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('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('premi INVIO ');readln;
  k:=k+1;
  cancella;
  end;
  totale:=esatte+errate;
  writeln('esatte =',esatte);
  writeln('errate =',errate);
  writeln('totale =',totale);
  writeln('chiama insegnante per valutazione ');readln;cancella;
  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('premi INVIO per proseguire');readln;cancella;
dati;
esegue;

end.
   
      
      

 

 

 

 

 

 

ritorna