Ciao a tutti, mi hanno assegnato qualche esercizio sulle liste.
Il primo consite nel costruire una lista ed inserire vari valori.Poi l'utente inserisce un valore da ricercare nella lista ed eventualmente lo cancella.Ho qualche problema nella funzione eliminazione.Mi potreste aiutare
codice:program lista2; {$APPTYPE CONSOLE} uses SysUtils; type puntatore= ^elemento; //Struttura degli elementi della lista elemento=record inf:integer; pun:puntatore; end; (*La funzione crea_lista2 restituisce al programma principale il riferimento al primo elem. della lista, che è di tipo puntatore al record elemento*) Function crea_lista2: puntatore; var p,paus: puntatore; (*p=punt. alla testa e paus=punt. ausiliario che*) (*permette la creazione deglie elem. succ. della lista senza perdere il punt. iniziale*) x: integer; //Lo stesso tipo del campo inf (cioè integer) begin writeln; write('Inserisci un''informazione(0 per finire): '); readln(x); if x=0 then p:=NIL //se x=0 la lista è vuota(si chiude) else begin //Creazione del primo elemento new(p); //Allocazione di spazio necessario a contenere un record di //tipo elemento p^.inf:=x; (*Si copia il valore nella parte informazione di p*) paus:=p; //Sia p che paus puntano al primo elem. della lista {Ora che abbiamo creato il rpimo elemento, si va avanti così finchè non viene inserito zero(questo è gestito dal ciclo while qui sotto} while x<>0 do begin writeln; write('Inserisci un''informazione(0 per finire): '); readln(x); if x<>0 then begin //Creazione dell'elemento successivo new(paus^.pun); (*Viene creato un nuovo elemento della lista, collegato al precedente.Il puntatore all'elem. creato da new viene assegnato al campo pun del record puntato da paus*) paus:=paus^.pun; //Viene aggiornato paus, in modo da puntare all'elem. succ. paus^.inf:=x; //La nuova informazione viene inserita nel campo corrispond. end else paus^.pun:=NIL; //Marca di fine lista end; end; crea_lista2:=p; //Viene passato al chiamante il valore di p, punt.alla testa end; Function eliminazione(p:puntatore;var ele:integer):puntatore; var paus:puntatore; //puntatore ausiliario begin write('Inserisci l''elemento da eliminare: '); readln(ele); begin paus:=p; while paus<>NIL do begin if paus^.inf<>ele then paus:=paus^.pun else dispose(paus); end; end; eliminazione:=p; end; (*Procedura ricorsiva per la visualizzazione della lista*) Procedure vis2_lista(p:puntatore); begin if p<>NIL then begin write(p^.inf); write('---> '); vis2_lista(p^.pun); end else write('NIL'); end; (*MAIN*) var punt_lista: puntatore; //puntatore alla testa della lista valore:integer; begin punt_lista:=crea_lista2; punt_lista:=eliminazione(punt_lista,valore); vis2_lista(punt_lista); readln; end.


Rispondi quotando
