Questo sito utilizza cookies solo per scopi di autenticazione sul sito e nient'altro. Nessuna informazione personale viene tracciata. Leggi l'informativa sui cookies.
Salve a tutti amici del forum. Ho il seguente problema da risolvere riguardo alla scrittura di una lista simmetrica in Pascal. La procedura da me elaborata infatti mi stampa la lista intera solo se è composta da un numero pari di cifre altrimenti me la tronca all'ultimo elemento. C'è qualcuno di voi che è in grado di suggerirmi dove sbaglio? ecco il codice:
Codice sorgente - presumibilmente Delphi
program ScritturaDiUnaListaSimmetrica(input,output);
label99;
const bell=07;
type punt=^elem;
elem=record
val:integer;
back : punt;
next : punt;
end;
var p,q : punt;
m :integer;
procedure LeggiEScriviLista(var p,q : punt; k :integer);
begin
if k=0
then p:=nil
elsebegin
new(p);
read(p^.val);
new(q);
read(q^.val);
p^.back:=q;
write(p^.val,' ');
write(q^.val,' ');
LeggiEScriviLista(p^.back,q,k-1);
end;
end;{ Fine procedura LeggiEScriviLista }
{ Corpo del programma }
begin
writeln('------------------------- Dati di ingresso --------------------------');
writeln;
write('Fornire la lunghezza della lista: ');
readln(m);
writeln;
if m>=20 thenbegin
writeln(chr(bell),'Errore nei dati di ingresso!- STOP -');
goto99;
end
elsebegin
write('Fornire la lista: ');
LeggiEScriviLista(p,q,m);
end;
99 :
readln;
end.
Ringraziandovi sin da ora per la collaborazione vi saluto. Ciao!
Ho letto il codice, e ho notato che la procedura LeggiEScriviLista fa troppe cose.
_ Crea due nuove istanze punt, senza concatenarli con quelli creati in precedenza.
_ Richiede l' inserimento dei dati.
_ Richiama se stessa in modo ricorsivo.
Ognuno di questi punti, andrebbe "sviluppato" con un' apposita funzione.
a) il primo puntatore p serve per memorizzare il valore k-esimo della lista, dunque và inizializzato perchè non noto. Il secondo puntatore q serve a memorizzare il valore dell'elemento puntato da p, procedendo da destra a sinistra ( ovvero leggendo al contrario la lista cioè dall'ultimo elemento scritto al primo); anch'esso và inizializzato perchè non noto, ed è legato a p dall'istruzione :
Codice sorgente - presumibilmente Plain Text
p^.back:=q;
.
Dopo seguono stampe dei valori e la chiamata ricorsiva della funzione che genera tutte le k istanze di p e q, perchè viene ripetuta k-1 volte.