Salve a tutti utenti ed operatori del Forum HTML.it!!!Ho un problema da risolvere e del quale ho elaborato una soluzione la quale alla verifica del compilatore si rivela non soddisfaciente. Il problema consiste nel calcolo della somma di due numeri interi di lunghezza qualsiasi, che noi supporremo il primo di lunghezza m maggiore o uguale del secondo,di lunghezza n, pertanto risulterà m>=n. Va precisato che:

1) L'intero è rappresentato da singole cifre, cominciando da destra e procedendo via via verso sinistra, ossia dalle cifre meno significative a quelle più significative (es . : 1 2 5 6 7 rappresenta 12.567):

2) Gli interi sono tutti non negativi ( la lista è cioè composta di singole cifre intere comprese ovviamente fra 0 e 9 e non negative).

3) La singola cifra deve essere rappresentata mediante un intero.

Nella soluzione da me elaborata ho pensato di acquisire e stampare le due liste con una procedura a parte, che non riporto, e poi una volta noti i dati procedere al calcolo della somma delle due liste.
Il problema sorge nell'elaborazione della procedura che ho denominato CalcoloSommaDiDueListe , e che sottopongo alla vostra cortese attenzione per una verifica, con la segnalazione di eventuali errori. Il codice commentato è il seguente (ove p,q sono le liste da sommare e s è la lista somma risultante):

codice:
procedure CalcoloSommaDiDueListe( var s : punt; p,q : punt; k : integer);
begin

     if k=0
     then s:=nil
     else begin
               { Creazione della lista somma s}
               new(s);
               { il generico valore  di s corrispondente a quello di k= 1,..,n è pari alla somma
               dei corrispettivi valori di p e q per quel k }
               s^.val:=p^.val+q^.val;
               { se la somma dei valori di p e q, p^.next.val e q^.next.val, che precedono p e q
               nella lista procedendo da destra verso sinistra è pari a 0,1,..,9 allora s^.val è
               la somma di q^.val e q^.val. Altrimenti se essa eccede la decina 'debbo riportarne
               la medesima'.}
               s^.next^.val:=p^.next^.val+q^.next^.val;
               if s^.next^.val>=10
               then begin
                         s^.next^.val:=(s^.next^.val)mod 10;
                         s^.val:=p^.val+q^.val+(s^.next^.val)div 10;
                    end;
               { Se s^.val(risultato della somma)vale 0,..,9 allora è sufficiente 'scriverlo'.
Altrimenti vale (s^.val)mod 10. A questo punto stampo s^.val }
               if s^.val<10
               then write(s^.val,' ')
               else  begin s^.val:=(s^.val)mod 10;
                           write(s^.val,' ');
                     end;
                { Stampa dell'ultimo elemento da destra verso sinistra della somma s qualora s^.val 
fosse>=10}
               if k=m
               then if s^.val>=10
                    then begin s^.back^.val:=(s^.val)div 10;
                               write(s^.back^.val,' ');
                         end;
               CalcoloSommaDiDueListe(s^.back,p^.back,q^.back,k-1);
          end;
end;{ Fine procedura CalcoloSommaDiDueListe }
Chiedo cortesemente il vostro aiuto poichè non mi riesce di procedere nella soluzione del problema. Certo dell'attenzione che vorrete porre al mio quesito saluto moderatori ed utenti.Ciao!!!