Salve a tutti amici del forum!!!Ho da porre una questione su di un programma elaborato in linguaggio Pascal. Si tratta di realizzare la somma di due numeri interi di lunghezza qualunque, usando liste semplici di record e puntatori. Poichè le liste sono strutture dati "inerentemente" ricorsive, ho realizzato proprio una soluzione ricorsiva del quesito che è la seguente:

codice:
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,k : integer;

procedure LeggiEScriviLista( var p : punt; k : integer);
begin
     if k=0
     then p:=nil
     else if k=n
     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^.back:=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;
                                                  write(s^.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);
                 end;
     99 :
     readln;

end.
Qualcuno di voi può dirmi se è corretta o meno, poiche il compilatore che uso Dev-Pascal mi chiude la finestra al momento del calcolo? Vorrei sapere se ciò sia dovuto al fatto che uso l'istruzione read e non readln nella procedura LeggiEScriviLista. Inoltre: la procedura CalcoloSommaDiDueListe, che ha il compito di svolgere il calcolo, è corretta anche a tempo di esecuzione? Certo dell'attenzione che vorrete prestare a questo problema ed in attesa di una risposta vi saluto tutti!!!