codice:
program SommaDiDueListe(input,output);
label 99;
const bell=07;
type punt=^elem;
elem= record
val: integer;
back : punt;
end;
var p,q,s : punt;
m,n,k : integer;
procedure LeggiEScriviLista( var p : punt; k : integer);
begin
if k=0
then p:=nil
else begin
new(p);
read(p^.val);
write(p^.val,' ');
LeggiEScriviLista(p^.back,k-1);
end;
end;{ Fine procedura LeggiEScriviLista }
procedure CalcoloSommaDiDueListe( var s : punt; p,q : punt);
var i : integer;
begin
new(s);
for i:=1 to m
do begin
s^.val:=p^.val+q^.val;
case(s^.val)of
0,1,2,3,4,5,6,7,8,9 : write(s^.val,' ');
10,11,12,13,14,15,16,17,18 : begin s^.val:=(s^.val)-10;
write(s^.val,' ');
s^.back^.val:=(p^.back^.val+q^.back^.val+1);
end
end;
p:=p^.back;
q:=q^.back;
s:=s^.back;
s^.back:=nil;
end;
if i=m then begin
case(p^.val+q^.val)of
10,11,12,13,14,15,16,17,18 : begin(s^.back^.val):=1;
write(s^.back^.val,' ');
end
end;
s^.back^.back:=nil;
end;
end;{ Fine procedura CalcoloSommaDiDueListe }
{ Corpo del programma }
begin
writeln('------------------------- Dati di ingresso --------------------------');
writeln;
write('Fornire la lunghezza della prima lista: ');
readln(m);
writeln;
write('Fornire la lunghezza della seconda lista: ');
readln(n);
writeln;
if m<n then begin
writeln(chr(bell),'Errore nei dati di ingresso!- STOP -');
goto 99;
end
else begin
write('Fornire la prima lista: ');
LeggiEScriviLista(p,m);
writeln;
write('Fornire la seconda lista: ');
LeggiEScriviLista(q,m);
writeln;
writeln('La lista somma e'':');
CalcoloSommaDiDueListe(p,q,s);
end;
99 :
readln;
end.
Tuttavia tale programma, pur risultando sintatticamente corretto, non risulta tale per quel che riguarda gli errori a tempo di esecuzione (segnatamente NON MI CALCOLA LA LISTA SOMMA!!!). Risulta evidente che l'errore si annida nella procedura CalcoloSommaDiDueListe, ma non riesco ad individuarlo. Come va riscritta correttamente tale procedura? Qualcuno di voi, amici del forum, è in grado di aiutarmi? Certo dell'attenzione che presterete al mio quesito, vi saluto e vi ringrazio. Ciao!!!