Salve a tutti amici del forum!!!Mi rivolgo a voi, nella speranza di trovare un aiuto nella soluzione del seguente problema; è noto come due numeri interi ( che noi supporremo tali che il primo in ingresso sia maggiore o uguale al secondo, in quanto a numero di cifre che lo caratterizzano) possano essere rappresentati mediante due liste distinte che fanno uso di record e puntatori; si vuole scrivere un programma che dati due numeri così rappresentati, calcoli e stampi la loro somma. Ho provato ad elaborare un programma, risolutore del problema sopra citato, che fa uso di due procedure, la prima scritta per acquisire le due liste e rappresentarle, la seconda per calcolare la somma degli elementi delle liste suddette. In tale calcolo bisogna tenere conto delle cifre da riportare e da sommare, quando l'addizione di due elementi delle due liste superi il valore di dieci ed inoltre occorre tenere conto del fatto che , se le due liste sono di uguale lunghezza e la somma dell'ultima coppia di elementi ( le prime due cifre dei due numeri dati da sinistra!) ha valore maggiore di dieci occorre che la lista che rappresenta la somma abbia un elemento in più e pari ad 1. La soluzione da me proposta è la seguente:

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!!!