15/05/12 9:20
fabioser
Ho provato ad elaborare una nuova versione della forma ricorsiva del programma risolutore, che è la seguente:
Grazie dell'aiuto, se avrai tempo e modo di prestarmelo, nella soluzione del mio problema.Ciao!!!
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 : punt; m,n : 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; k : integer); begin if k=0 then s:=nil else begin new(s); s^.val:=p^.val+q^.val; case (p^.next^.val+q^.next^.val)of 0,1,2,3,4,5,6,7,8,9 : s^.val:=p^.val+q^.val; 10,11,12,13,14,15,16,17,18 : s^.val:=p^.val+q^.val+1 end; 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; s^.back:=1; s^.back^.val:=1; write(s^.val,' '); write(s^.back^.val,' '); end 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 write('Fornire la prima lista: '); LeggiEScriviLista(p,m); writeln; write('Fornire la seconda lista: '); LeggiEScriviLista(q,n); writeln; write('La lista somma e'':'); CalcoloSommaDiDueListe(s,p,q,m+1); end; 99 : readln; end.
Grazie dell'aiuto, se avrai tempo e modo di prestarmelo, nella soluzione del mio problema.Ciao!!!
aaa