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