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

    [Pascal]Calcolo della somma di due interi rappresentati mediante liste semplici

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

  2. #2
    Moderatore di Programmazione L'avatar di alka
    Registrato dal
    Oct 2001
    residenza
    Reggio Emilia
    Messaggi
    24,333
    Originariamente inviato da serfabio
    Qualcuno di voi può dirmi se è corretta o meno, poiche il compilatore che uso Dev-Pascal mi chiude la finestra al momento del calcolo?
    Cioè, gli utenti del forum dovrebbero prendere il tuo programma, compilarlo, eseguirlo e verificare se è corretto perché tu non inserisci un'attesa in coda per controllare il risultato?
    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
    No, semplicemente per il fatto che trovo difficoltà nel verificare la correttezza del programma a tempo di esecuzione (mentre il programma risulta compilato correttamente), chiedevo l'aiuto di qualcuno più esperto tra voi nel forum, che mi confermasse solo l'esattezza della mia soluzione ed in caso contrario (bontà sua ...se vuole) indicarmi gli errori nella procedura di calcolo. Tutto quì. Forse approfitto degli utenti del forum in qualche modo, facendo ciò? Mi sembra di rimanere nei termini del regolamento....

  4. #4
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,472
    Quello che hai scritto è

    "poiche il compilatore che uso Dev-Pascal mi chiude la finestra al momento del calcolo"

    e quindi anche io pensavo che tu potessi sapere se il programma è corretto a patto di non fare chiudere la finestra ...
    No MP tecnici (non rispondo nemmeno!), usa il forum.

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

    Moderazione

    Originariamente inviato da serfabio
    No, semplicemente per il fatto che trovo difficoltà nel verificare la correttezza del programma a tempo di esecuzione (mentre il programma risulta compilato correttamente), chiedevo l'aiuto di qualcuno più esperto tra voi nel forum, che mi confermasse solo l'esattezza della mia soluzione ed in caso contrario (bontà sua ...se vuole) indicarmi gli errori nella procedura di calcolo. Tutto quì. Forse approfitto degli utenti del forum in qualche modo, facendo ciò? Mi sembra di rimanere nei termini del regolamento....
    No, non sei nei termini del regolamento, come ti era già stato indicato in questa discussione, che è del tutto identica a questa (siamo al terzo duplicato) e in cui ti erano già state date indicazioni sulle modalità con cui si conducono le discussioni, e sul fatto che non poni un problema specifico e continui ad aprire periodicamente thread duplicati sulle stesse tematiche.

    Ti rinnovo quindi per l'ennesima volta quello che peraltro ti ho già detto e ribadito nella discussione segnalata sopra.
    MARCO BREVEGLIERI
    Software and Web Developer, Teacher and Consultant

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

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 © 2024 vBulletin Solutions, Inc. All rights reserved.