reaziomi con pile
program pila4; (* esempi schematizzazione pile e ricerca polarita *) (* programma completo con controllo dati inseriti *)
const k=13; s1='/';s2='//'; re='riduzione';ox='ossidazione';red='redox'; fre='------->>> ';
var n:array[1..k] of string; va:array[1..k] of integer; en:array[1..k] of real; a,v1,v2,vn,vc,rs:integer; e1,e2,anodo,catodo:string; en1,en2:real; sp1,sp2,spx1,spx2,s,f,q:string; c1,c2,a1,a2,a3,a4,a5,a6,a7,a8:integer;
procedure datipile; begin n[1]:='Zn';va[1]:=2;en[1]:=-0.76; n[2]:='Cu';va[2]:=2;en[2]:=0.34; n[3]:='Fe';va[3]:=2;en[3]:=-0.44; n[4]:='Sn';va[4]:=2;en[4]:=-0.14; n[5]:='Ni';va[5]:=2;en[5]:=-0.24; n[6]:='Pb';va[6]:=2;en[6]:=-0.13; n[7]:='Co';va[7]:=2;en[7]:=-0.28; n[8]:='Li';va[8]:=1;en[8]:=-3.02; n[9]:='K';va[9]:=1;en[9]:=-2.92; n[10]:='Na';va[10]:=1;en[10]:=-2.71; n[11]:='Ag';va[11]:=1;en[11]:=0.80; n[12]:='Cd';va[12]:=2;en[12]:=-0.40; n[13]:='H';va[13]:=1;en[13]:=0.00; end;
procedure fine; begin writeln('premi enter'); readln; end;
procedure pausa; begin writeln('premi ENTER ');readln; end;
procedure cerca1; (* cerca primo simbolo e dati in archivio *) begin datipile; for a:=1 to k do if e1=n[a] then begin en1:=en[a];v1:=va[a];end; end;
procedure cerca2; (* cerca secondo simbolo e dati in archivio *) begin datipile; for a:=1 to k do if e2=n[a] then begin en2:=en[a];v2:=va[a];end; end;
procedure polarita; (* assegna polarita *) begin writeln('anodo o polo negativo = ',anodo:8,' ossidazione '); writeln('catodo o polo positivo = ',catodo:8,' riduzione '); pausa; end;
procedure schema1; (* disegna schema della pila *) begin sp1:='+';sp2:='++'; if ((vn=1) and (vc=1)) then begin spx1:=sp1;spx2:=sp1;end else if ((vn=2) and (vc=2)) then begin spx1:=sp2;spx2:=sp2;end else if ((vn=1) and (vc=2)) then begin spx1:=sp1;spx2:=sp2;end else if ((vn=2) and (vc=1)) then begin spx1:=sp2;spx2:=sp1;end; writeln(anodo,s1,anodo,spx1,s2,catodo,spx2,s1,catodo); pausa; end;
procedure annulla; (* evita inserimento simboli non accettabili *) begin v1:=10;v2:=10; end;
procedure reazioni; (* scrive semireazioni e redox bilanciate *) begin sp1:='+';sp2:='++';q:=' '; if ((vn=1) and (vc=1)) then begin spx1:=sp1;spx2:=sp1;c1:=1;c2:=1;a1:=1;a2:=1;a3:=1;a4:=1; a5:=1;a6:=1;a7:=1;a8:=1;end else if ((vn=2) and (vc=2)) then begin spx1:=sp2;spx2:=sp2;c1:=2;c2:=2;a1:=1;a2:=1;a3:=1;a4:=1; a5:=1;a6:=1;a7:=1;a8:=1;end else if ((vn=1) and (vc=2)) then begin spx1:=sp1;spx2:=sp2;c1:=2;c2:=2;a1:=2;a2:=2;a3:=1;a4:=1; a5:=2;a6:=1;a7:=2;a8:=1;end else if ((vn=2) and (vc=1)) then begin spx1:=sp2;spx2:=sp1;c1:=2;c2:=2;a1:=1;a2:=1;a3:=2;a4:=2; a5:=1;a6:=2;a7:=1;a8:=2;end;
writeln(a1,q,anodo,'':12,' - ',c1,'e ',fre:8,a2,q,anodo,spx1,'':12,ox:8); writeln(a3,q,catodo,spx2,'':12,' + ',c2,'e ',fre:8,a4,q,catodo,'':12,re:8); writeln('-------------------------------------------------------------'); writeln(a5,q,anodo,'':12,' + ',a6,q,catodo,spx2,'':2,fre:8,a7,q,anodo,spx1,'':12,' + ',a8,q,catodo,'':4,red:8); pausa; end;
procedure tensione; (* calcola tensione pila *) begin writeln('differenza potenziale pila = Eo(+) - Eo(-) '); writeln(abs(en1-en2):8:2); pausa; end;
procedure simboli; (* stampa tabella simboli e valenze archiviati *) begin datipile; for a:=1 to k do write(n[a],'.',va[a],'..'); writeln; end;
procedure pro1; (* stampa tabella dati archiviati *) begin datipile; writeln('simbolo':10,'valenza':15,'elettronegativita':20); for a:=1 to k do begin writeln(n[a]:10,va[a]:15,en[a]:20:2); end; pausa; end;
procedure pro2; (* programma ricerca ed elaborazione *) label salta; begin writeln('elementi disponibili in archivio dati per scelta simboli '); simboli; write('simbolo primo elettrodo ');readln(e1); cerca1; if (v1=10) then begin writeln('dati non corretti ');goto salta;end; write('simbolo secondo elettrodo ');readln(e2); cerca2; if (v2=10) then begin writeln('dati non corretti ');goto salta;end; writeln('stampa simboli elementi,valenza,elettronegativita '); writeln('simbolo':12,'valenza':12,'volt':12,'simbolo':12,'valenza':12,'volt':12); writeln(e1:12,v1:12,en1:12:2,e2:12,v2:12,en2:12:2); pausa; if en1<en2 then begin anodo:=e1;catodo:=e2;vn:=v1;vc:=v2;end else begin anodo:=e2;catodo:=e1;vn:=v2;vc:=v1;end; polarita; (* determina e stampa poli della pila *) schema1; (* stampa schema pila *) reazioni ;(* stampa semireazioni e redox bilanciate*) tensione; (* calcola e stampa tensione della pila *) annulla; (* evita inserimento simboli non accettabili *) salta: (* uscita in caso di dati non accettabili *) end;
procedure scelta; (* menu opzioni *) var ancora:string; begin clearscreen; writeln('seleziona opzione '); writeln('1...tabella simboli,potenziali,valenze '); writeln('2...schema pile,polarita,semireazioni,redox '); writeln('9...fine '); write('opzione=');readln(rs); clearscreen; case rs of 1:pro1; 2:pro2; 9:fine; end; writeln('----------------------------'); writeln('altro problema:scrivi s...fine:scrivi f ');readln(ancora); if ancora ='s' then scelta else fine; end;
begin (* programma principale *) clearscreen; writeln('programma:schemi pile ,ricerca polarita,reazioni redox'); writeln('---------------------------------------------------'); writeln('premi enter');readln; scelta; end.