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):
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!!!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 }![]()

Rispondi quotando
