Oppure

Loading
29/05/12 17:14
fabioser
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.

Come spiegato ci sono errori sia nella procedura di acquisizione, sia in quella per il calcolo della somma. Ringrazio anticipatamente chiunque mi sappia indicare quali sono. Ciao!!!:)
aaa
29/05/12 19:15
fabioser
Riportoin calce per chiarezza l'intero programma per il quale housato la forma ricorsiva:


program SommaDiDueListe(input,output);
label 99;
const bell=07;
type punt=^elem;
     elem= record
                 val: integer;
                 back : punt;
                 next : punt;
           end;
var p,q,s,t: punt;
    m,n : integer;

    procedure LeggiEScriviLista( var t,p : punt; k : integer);
    begin
         if k=0
         then p:=nil
         else begin
                   new(p);
                   read(p^.val);
                   new(t);
                   read(t^.val);
                   p^.back:=t;
                   write(p^.val,' ');
                   write(t^.val,' ');
                   LeggiEScriviLista(t,p^.back,k-1);
              end;
    end;{ Fine procedura LeggiEScriviLista }
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 }

{ 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
                      { Acqiusizione della prima lista }
                      write('Fornire la prima lista: ');
                      writeln;
                      LeggiEScriviLista(t,p,m);
                      writeln;
                      { Acqiusizione della seconda lista }
                      write('Fornire la seconda lista: ');
                      writeln;
                      LeggiEScriviLista(t,q,n);
                      writeln;
                      { Calcolo della lista somma s risultante }
                      writeln('La lista somma e'':');
                      writeln;
                      CalcoloSommaDiDueListe(s,p,q,m);
                 end;
     99 :
     readln;

end.





Spero ora di essere stato più chiaro...
aaa