Program bila1; (* esempi di bilanciamento reazioni INTERATTIVO *) (* aggiungere reazioni e modificare nreazioni *) uses crt; const nreazioni=21; VAR rea :array[1..nreazioni] of string; reb :array[1..nreazioni] of string; c :array[1..nreazioni] of string; a,esatte,errate,reazioni:integer; cs,rs:string; procedure dati; begin rea[1]:='NaOH + H2SO4 ---> Na2SO4 + H2O '; reb[1]:='2NaOH + H2SO4 ---> Na2SO4 + 2H2O '; c[1]:='2,2'; rea[2]:='Ca(OH)2 + HCl ---> CaCl2 + H2O '; reb[2]:='Ca(OH)2 + 2HCl ---> CaCl2 + 2H2O '; c[2]:='2,2'; rea[3]:='Al(OH)3 + HCl ---> AlCl3 + H2O '; reb[3]:='Al(OH)3 + 3HCl ---> AlCl3 + 3H2O '; c[3]:='3,3'; rea[4]:='SO2 + O2 ----> SO3 '; reb[4]:='2SO2 + O2 ----> 2SO3 '; c[4]:='2,2'; rea[5]:='NaCl + H2SO4 -----> Na2SO4 + HCl '; reb[5]:='2NaCl + H2SO4 -----> Na2SO4 + 2HCl '; c[5]:='2,2'; rea[6]:='NaCl + HNO3 -----> NaNO3 + HCl '; reb[6]:='NaCl + HNO3 -----> NaNO3 + HCl '; c[6]:='1'; rea[7]:='Fe(OH)2 + HNO3 ----> Fe(NO3)2 + H20 '; reb[7]:='Fe(OH)2 + 2HNO3 ----> Fe(NO3)2 + 2H20 '; c[7]:='2,2'; rea[8]:='CuCl + H2SO4 ----> CuSO4 + HCl '; reb[8]:='2CuCl + H2SO4 ----> CuSO4 + 2HCl '; c[8]:='2,2'; rea[9]:='Fe2(SO3)3 + HCl ----> FeCl3 + H2SO3 '; reb[9]:='Fe2(SO3)3 + 6HCl ----> 2FeCl3 + 3H2SO3 '; c[9]:='6,2,3'; rea[10]:='Ba(NO3)2 + H2SO4 ----> BaSO4 + HNO3 '; reb[10]:='Ba(NO3)2 + H2SO4 ----> BaSO4 + 2HNO3 '; c[10]:='2'; rea[11]:='Al(NO3)3 + H2SO4 -----> Al2(SO4)3 + HNO3 '; reb[11]:='2Al(NO3)3 + 3H2SO4 -----> Al2(SO4)3 + 6HNO3 '; c[11]:='2,3,6'; rea[12]:='K20 + HCl ----> KCl + H2O '; reb[12]:='K20 + 2HCl ----> 2KCl + H2O '; c[12]:='2,2'; rea[13]:='Al2O3 + H2SO3 ----> Al2(SO3)3 + H20 '; reb[13]:='Al2O3 + 3H2SO3 ----> Al2(SO3)3 + 3H20 '; c[13]:='3,3'; rea[14]:='CO2 + H2O ----> H2CO3 '; reb[14]:='CO2 + H2O ----> H2CO3 '; c[14]:='1'; rea[15]:='Cl20 + H2O ----> HClO '; reb[15]:='Cl20 + H2O ----> 2HClO '; c[15]:='2'; rea[16]:='Cl203 + H2O ----> HClO2 '; reb[16]:='Cl203 + H2O ----> 2HClO2 '; c[16]:='2'; rea[17]:='Cl205 + H2O ----> HClO3 '; reb[17]:='Cl205 + H2O ----> 2HClO3 '; c[17]:='2'; rea[18]:='Cl207 + H2O ----> HClO4 '; reb[18]:='Cl207 + H2O ----> 2HClO4 '; c[18]:='2'; rea[19]:='Al + HCl -----> AlCl3 + H2'; reb[19]:='2Al + 6HCl -----> 2AlCl3 + 3H2 '; c[19]:='2,6,2,3'; rea[20]:='Zn + HCl -----> ZnCl2 + H2'; reb[20]:='Zn + 2HCl -----> ZnCl2 + H2 '; c[20]:='2'; end; procedure pausa; begin writeln('premi ENTER ');readln; end; procedure cancella; begin clrscr; end; procedure fine; (* conferma uscita operazione *) begin writeln('fine operazione:confermare :premi enter'); readln; end; procedure descrive; begin writeln('esercitazione per scrivere coefficienti di reazioni da bilanciare'); writeln('in modo da osservare la conservazione delle masse,secondo la '); writeln('legge di LAVOISIER '); writeln('---------------------'); writeln('es. data la reazione NaOH + H2SO4 -----> Na2SO4 + H2O '); writeln('si vede che non risulta bilanciata: si devono quindi inserire'); writeln('degli opportuni coefficienti in modo che ogni tipo di atomo '); writeln('sia presente in ugual numero,prima e dopo la reazione '); writeln; writeln('in questo esempio 2 NaOH + H2SO4 ---> Na2SO4 + 2 H2O '); writeln; pausa; end; procedure pro1; begin descrive; end; procedure pro2; begin dati; for a:=1 to reazioni do begin writeln('scrivi i coefficienti stechiometrici,separati da virgola'); writeln('se coefficiente = 1 non scriverlo ....es.2,3,2,4....2,2...'); writeln('se TUTTI i coefficienti sono uguali a 1,scrivi 1 e premi ENTER '); writeln('se non li conosci,premi ENTER ') ;writeln; writeln(rea[a]); write('scrivi i coefficienti stechiometrici ');readln(cs); if cs=c[a] then begin writeln('esatto ',reb[a]);esatte:=esatte+1;end else begin writeln('errato :era ',c[a],'...',reb[a]);errate:=errate+1;end; pausa;cancella; end; end; procedure scelta; (* procedura con scelta opzioni e uscita *) var s,sn:string;opzione:integer; begin clrscr; repeat write('scrivi numero reazioni da provare minore di ',nreazioni,'..'); readln(reazioni);until reazioni<nreazioni; a:=1; esatte:=0;errate:=0; writeln('seleziona opzione :bilanciamento reazioni'); writeln('2...bilanciamento reazioni'); writeln('9...fine '); writeln('scelta =');readln(opzione);cancella; case opzione of 2:pro2; 9:fine; end; end; begin (* programma di lancio *) cancella; pro1; scelta; writeln('fine prova:chiama insegnante per valutazione....'); writeln('risposte esatte =',esatte ,' su domande ',a-1); writeln('risposte errate =',errate ,' su domande ',a-1); if esatte<(a/2) then writeln('insufficiente') else writeln('sufficiente o discreto o buono:chiedi a insegnante'); pausa;cancella; end.