descrizione pila

esci chimicaturbo.htm

 

program pila4;
(* esempi schematizzazione pile e ricerca polarita *)
(* programma completo con controllo dati inseriti *
)
uses crt;
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
clrscr;
writeln('seleziona opzione ');
writeln('1...tabella simboli,potenziali,valenze ');
writeln('2...schema pile,polarita,semireazioni,redox ');
writeln('9...fine ');
write('opzione=');readln(rs);
clrscr;
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 *)
clrscr;
writeln('programma:schemi pile ,ricerca polarita,reazioni redox');
writeln('---------------------------------------------------');
writeln('premi enter');readln;
scelta;
end.