Ho provato ad elaborare una versione ricorsiva della procedura CalcoloSommaDiDueListe, ma il risultato non è corretto, ovvero la finestra di dev-Pascal ( il compilatore che uso) , si chiude al momento del calcolo della somma senza fornire i dati richiesti. Ecco il programma redatto in questa nuova versione:
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; k : integer);
begin
if k=0
then s:=nil
else begin
new(s);
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;
CalcoloSommaDiDueListe( s^.back,p^.back,q^.back,k-1);
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,n);
writeln;
writeln('La lista somma e'':');
CalcoloSommaDiDueListe(s,p,q,k);
end;
99 :
readln;
end.
Ringraziando sin d'ora chiunque di voi saprà fornirmi la versione corretta del programma ( ricorsiva o no ), saluto tutti gli amici del forum. Ciao!!!