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.