Visualizzazione dei risultati da 1 a 6 su 6
  1. #1
    Utente di HTML.it
    Registrato dal
    Apr 2011
    Messaggi
    52

    [PASCAL] Calcolo somma di numeri interi rappresentati mediante liste simmetriche

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

  2. #2
    Moderatore di Programmazione L'avatar di alka
    Registrato dal
    Oct 2001
    residenza
    Reggio Emilia
    Messaggi
    24,477

    Moderazione

    Originariamente inviato da serfabio
    Ho un problema da risolvere [...]
    Il problema sorge nell'elaborazione della procedura che ho denominato CalcoloSommaDiDueListe [...]
    Chiedo cortesemente il vostro aiuto poichè non mi riesce di procedere nella soluzione del problema.
    Ma il problema effettivo qual è?
    MARCO BREVEGLIERI
    Software and Web Developer, Teacher and Consultant

    Home | Blog | Delphi Podcast | Twitch | Altro...

  3. #3
    Utente di HTML.it
    Registrato dal
    Apr 2011
    Messaggi
    52
    Scusate ma si tratta della verifica della correttezza dela procedura, poichè così com'è scritta non mi calcola la somma delle due liste. Ho lasciato i commenti passo per passo in modo che chiunque voglia, può segnalarmi l'eventuale errore, in quanto io, come ho già scritto precedentemente, non riesco ad individuarlo...spero di non essere bannato per questo...dovrei rientrare nelle regole del Forum...

  4. #4
    Con queste poche informazioni io tiro ad indovinare...
    Posto che "punt" sia un puntatore a record con new(s) inizializzi la variabile, e va bene, ma poi hai s.next e s.back, che dovrebbero essere al loro volta dei puntatori, chi li inizializza ???

  5. #5
    Moderatore di Programmazione L'avatar di alka
    Registrato dal
    Oct 2001
    residenza
    Reggio Emilia
    Messaggi
    24,477
    Originariamente inviato da serfabio
    si tratta della verifica della correttezza dela procedura, poichè così com'è scritta non mi calcola la somma delle due liste.
    Ok, bastava indicarlo, altrimenti chi legge e non può avere accesso alla tua mente non può saperlo.
    MARCO BREVEGLIERI
    Software and Web Developer, Teacher and Consultant

    Home | Blog | Delphi Podcast | Twitch | Altro...

  6. #6
    Utente di HTML.it
    Registrato dal
    Apr 2011
    Messaggi
    52
    I valori di p e q delle liste da sommare, debbono intendersi acquisiti tramite due chiamate alla stessa procedura LeggiEScriviLista, progettata apposta ed esterna a quella riportata relativa alla somma, che non ho trascritto per brevità.

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.