esercizi di chimica con turbo pascal 1.1 su mac

program OSSIDA;
(* determinazione numero ossidazione elementi composto INTERATTIVO *)
(* senza valutazione finale *)
const k1=64;
var n:array[1..k1] of string;
    q:array[1..k1] of integer;
    va:array[1..k1] of integer;
    s,a,d,x,n1,n2,n3,h1,h2,h3,hy,v1,v2,h2y,h2f,totale,f:integer; 
    y,e1,e2,e3:string;
    hx:real;
    fx:array[1..40] of string[15];
{$I datiy}
procedure formule;
begin
fx[1]:='Ba(OH)2';fx[2]:='Ca(NO3)2';fx[3]:='HCl';fx[4]:='HClO2';
fx[5]:='NaF';fx[6]:='H2SO4';fx[7]:='H2CO3';fx[8]:='HClO';
fx[9]:='NaNO3';fx[10]:='K2SO3';fx[11]:='ZnSO4';fx[12]:='HNO2';
fx[13]:='HClO4';fx[14]:='CaSO3';fx[15]:='KClO2';fx[16]:='CaCO3';
fx[17]:='BaSO4';fx[18]:='H2S';fx[19]:='SO3';fx[20]:='N2O5';
fx[20]:='KCl';fx[21]:='CaCl2';fx[22]:='KNO2';fx[23]:='KNO3';fx[24]:='BaCl2';
fx[25]:='KOH';fx[26]:='Ca(OH)2';fx[27]:='MgO';fx[28]:='Al(OH)3';fx[29]:='KF';
fx[30]:='N2O3';fx[31]:='H3PO4';fx[32]:='AlPO4';fx[33]:='NaOH';fx[34]:='SO3';
fx[35]:='CO2';fx[36]:='P2O3';fx[37]:='Ca(NO3)2';fx[38]:='Mg(OH)2';
fx[39]:='CaSO3';
fx[40]:='MgF2'
end;
procedure cancella;
begin
clearscreen;
end;
procedure fine;
begin
writeln('premi enter');
readln;
end;
procedure pausa;
begin
writeln('premi ENTER ');readln;
end;
procedure pro1;
begin
WRITELN('formula OSSIACIDO ',fx[f]);
writeln('scrivi simboli elementi e loro indici o numero di atomi');
 write('indice o numero atomi IDROGENO   ');readln(n1);
 write('simbolo non metallo              ');readln(e2);
 write('indice o numero atomi elemento   ');readln(n2);
 write('indice o numero atomi OSSIGENO   ');readln(n3); 
 e1:='H';e3:='O';
 h2:=n3*2-n1*1;
 writeln('-----------------------------------------------------');
 writeln('scrivi numeri ossidazione preceduti da segno + o - ');
 writeln(e1,n1,e2,n2,e3,n3);
 write('numero ossidazione di ',e1);readln(x);
 if x=+1 then writeln('esatto ') else writeln('errato:era +1 ');
 write('numero ossidazione di ',e2);readln(x);
 if x=+h2 then writeln('esatto ') else writeln('errato:era +',h2);
 write('numero ossidazione di ',e3);readln(x);
 if x=-2 then writeln('esatto ') else writeln('errato:era -2 ');
 end;
procedure pro2;
begin
writeln('formula IDROSSIDO ',fx[f]);
writeln('scrivi simboli elementi e loro indici o numero di atomi');
 write('simbolo elemento metallico       ');readln(e1);
 write('indice o numero atomi OSSIGENO   ');readln(n2);
 e2:='O';e3:='H';n1:=1;
 h1:=n2;
 writeln('-----------------------------------------------------');
 writeln(e1,e2,n2,e3,n2);
 writeln(e1,'(',e2,e3,')',n2);
 writeln('scrivi numeri ossidazione preceduti da segno + o - ');
 write('numero ossidazione di ',e1);readln(x);
 if x=+h1 then writeln('esatto ') else writeln('errato:era +',h1);
 write('numero ossidazione di ',e2);readln(x);
 if x=-2 then writeln('esatto ') else writeln('errato:era -2 ');
 write('numero ossidazione di ',e3);readln(x);
 if x=+1 then writeln('esatto ') else writeln('errato:era +1 ');
 end;
procedure pro3;
begin
writeln('formula IDRACIDO ',fx[f]);
writeln('scrivi simboli elementi e loro indici o numero di atomi');
 write('indice o numero atomi IDROGENO   ');readln(n1);
 write('simbolo radicale acido           ');readln(e2);
 e1:='H';
  WRITELN('-----------------------------------------------------');
  writeln('scrivi numeri ossidazione preceduti da segno + o - ');
   writeln(e1,n1,e2);
 write('numero ossidazione di ',e1);readln(x);
 if x=+1 then writeln('esatto ') else writeln('errato:era +1 ');
 write('numero ossidazione di ',e2);readln(x);
 if x=-n1 then writeln('esatto ') else writeln('errato:era -',n1); 
 end; 
procedure pro4;
begin
writeln('formula OSSIDO o ANIDRIDE ',fx[f]);
writeln('scrivi simboli elementi e loro indici o numero di atomi');
writeln('es.SO3....N2O5...CaO....Al2O3...');
writeln('----------------------------------------------------------------');
writeln('calcola :TOTALE cariche negative=atomi ossigeno*(-2)');
writeln('calcola :N.OSSIDAZIONE elemento =totale negative/indice elemento');
writeln('----------------------------------------------------------------');
 write('simbolo elemento                 ');readln(e1);
 write('indice o numero atomi elemento   ');readln(n1);
 write('indice o numero atomi ossigeno   ');readln(n2);
 h1:=round(n2*2/n1);
  WRITELN('-----------------------------------------------------');
  writeln('scrivi numeri ossidazione preceduti da segno + o - ');
   writeln(e1,n1,'0',n2);
 write('numero ossidazione di ',e1);readln(x);
 if x=+h1 then writeln('esatto ') else writeln('errato:era +',h1);
 write('numero ossidazione di ','0');readln(x);
 if x=-2 then writeln('esatto ') else writeln('errato:era -2'); 
 end; 
procedure pro5;
label salta2,salta;
begin
writeln('formula SALE binario ',fx[f]);
writeln('scrivi simboli elementi e loro indici o numero di atomi');
writeln('es.NaCl....CaF2...CaS..');
writeln('----------------------------------------------------------------');
writeln('calcola :TOTALE cariche negative=atomi alogeno*(-1)');
writeln('calcola :TOTALE cariche negative=atomi   zolfo*(-2)');
writeln('calcola :N.OSSIDAZIONE elemento =totale negative/indice elemento');
writeln('----------------------------------------------------------------');
 write('simbolo elemento metallico       ');readln(e1);
 write('indice o numero atomi elemento   ');readln(n1);
 write('simbolo radicale acido           ');readln(e2);
 write('indice o numero atomi radicale   ');readln(n2);
 if e2='S' then h3:=2*n2 else h3:=n2;
 h1:=round(h3/n1);
 writeln('----------------------------------------------');
  begin
  writeln('scrivi numeri ossidazione preceduti da segno + o - ');
   writeln(e1,n1,e2,n2);
 write('numero ossidazione di ',e1);readln(x);
 if x=+h1 then writeln('esatto ') else writeln('errato:era +',h1);
 write('numero ossidazione di ',e2);readln(x);
 if e2='S' then goto salta2 ;
 if (x=-1)  then writeln('esatto ') else writeln('errato:era -1');goto salta;
 salta2:
 if x=-2 then writeln('esatto ')  else writeln('errato:era -2');
 end;  
 salta:
end;
procedure pro6;
begin
writeln('formula SALI OSSIGENATI ',fx[f]);
WRITELN('nel caso di metalli con piu valenze,usare solo la valenza maggiore');
WRITELN('1,2=2...2,3=3...2,4=4 essendo programma ancora incompleto ');
WRITELN('in caso contrario si avranno risposte non corrette ');
writeln('----------------------------------------------------------------');
writeln('scrivi simboli elementi e loro indici o numero di atomi');
writeln('es.NaNO3....CaSO4...Ca(NO3)2..');
 write('simbolo 1 elemento               ');readln(e1);
 write('indice o numero atomi elemento   ');readln(n1);
 writeln('cerco valenza metallo ');
 writeln('Cm =valenza*indice metallo');
 datiy;
 for a:=1 to k1 do
 if e1=n[a] then begin v1:=va[a];v2:=va[a+1];
                       h1:=va[a]*n1;hy:=va[a+1]*n1; end;
 write('simbolo 2 elemento               ');readln(e2);
 write('indice o numero atomi elemento   ');readln(n2);
 e3:='O';
 write('indice o numero atomi ossigeno   ');readln(n3);
 writeln('cariche negative Cn = -2*indice ossigeno  ');
 writeln('n.ossidazione ',e2,' (Cn-Cm)/indice elemento ',e2);
 h3:=2*n3; (* cariche negative ossigeno *)
 h2:=round((h3-h1)/n2); (* cariche positive elemento intermedio *)
 h2y:=round((h3-hy)/n2);
 if h2=(h3-h1)/n2 then h2f:=h2 else h2f:=h2y;
 writeln('-------------------------------------------------');
 writeln('scrivi i numeri di ossidazione preceduti da segno + o - ');
 writeln(e1,n1,e2,n2,e3,n3);
 writeln(e1,n1,'(',e2,e3,n3/n2:0:0,')',n2);
 write('elemento ',e1:8);readln(x);
 if x=v1 then writeln('esatto:') else writeln('errato:era ',v1);
 write('elemento ',e2:8);readln(x);
 if x=h2f then writeln('esatto:') else writeln('errato:era ',h2f);
 write('elemento ',e3:8);readln(x);
 if x=-2 then writeln('esatto:') else writeln('errato:era ',-2);
end;
procedure scelta;
var ancora:integer;
begin
cancella;
f:=0;
repeat 
cancella;
f:=f+1;
write('formula da esaminare ');writeln(fx[f]);
writeln('---------------------------------------------------------');
writeln('seleziona tipo problema ');
writeln('1...composti ternari come OSSIACIDI............H2SO4..HNO3 ');
writeln('2...composti ternari come IDROSSIDI............NaOH..Ca(OH)2');
writeln('3...composti binari come IDRACIDI..............HCl....H2S  ');
writeln('4...composti binari come OSSIDI,ANIDRIDI.......Al2O3..SO3  ');
writeln('5...composti binari come SALI di ALOGENI,ZOLFO.NaCl...CaS  ');
WRITELN('6...composti ternari come SALI OSSIGENATI......CaSO4..NaNO3');
writeln('9...fine ');
write('opzione=');readln(s);
cancella;
case s of
1:pro1;
2:pro2;
3:pro3;
4:pro4;
5:pro5;
6:pro6;
9:fine;
end;
writeln('----------------------------');
writeln('altro problema:scrivi 1...fine:scrivi 2 ');readln(ancora);
until ancora=2;
fine;
end;
begin
cancella;
formule;
repeat
write('indica numero prove da eseguire <40 ');readln(totale);
until totale<40;
writeln('programma:richiesta assegnazione numeri ossidazione elementi');
writeln('---------------------------------------------------');
writeln('premi enter');readln;
scelta;
end.