|
|
|
![]() |
|
Strumenti |
![]() |
#1 |
Senior Member
Iscritto dal: Apr 2002
Città: Palermo
Messaggi: 4913
|
Pascal in Delphi:lista ordinata
Seguendo il mio libro ho scritto questo programmino che a volte non svolge a dovere il suo lavoro; sicuramente dovrei aggiustare qualcosa
nella funzione per la creazione della lista.Avete qualche consiglio? Codice:
{Il programma accetta in ingresso dei valori interi e li ordina direttamente in ordine crescente(con insertion sort).L'immissione termina con il valore zero. La lista creata viene visualizzata.} program lista_ordin; {$APPTYPE CONSOLE} uses SysUtils; type puntatore= ^elemento; //Struttura degli elemnti della lista elemento=record inf:integer; pununtatore; end; //Funzione per la creazione della lista ord.Restituisce il puntatore alla testa Function crea_lista_ordin: puntatore; var p,q: puntatore; paus: puntatore; //puntatore ausiliario x: integer; //contiene il valore da inserire begin p:=NIL; //Inizializzazione lista vuota writeln; write('Inserire primo elemento della lista(0 per terminare): '); readln(x); //Creazione del primo elemento della lista:quello in testa if x<>0 then begin new(p); p^.inf:=x; p^.pun:=NIL; write('Inserire un altro elemento nella lista(0 per terminare): '); readln(x); end; //Ciclo per la creazione degli elementi successivi while x<>0 do begin //Creazione nuovo spazio di memoria new(paus); paus^.inf:=x; //Inserimento nella lista if x<p^.inf then begin //Se il valore immesso è minore di quello che c'era paus^.pun:=p; //in testa allora, il puntatore alla testa viene paus:=p; //aggiornato (paus^.pun:=p) in maniera tale che paus end //punti adesso pure alla testa (p:=paus) else begin //Ricerca del punto di inserimento q:=p; while ((q^.pun)<>NIL) AND ((q^.pun)^.inf<x) do q:=q^.pun; //Inserimento elemento interno nella lista paus^.pun:=q^.pun; q^.pun:=paus; end; //Lettura nuovo elemento write('Inserire altro elemento nella lista(0 per terminare): '); readln(x); end; crea_lista_ordin:=p; end; (*Procedura iterativa per la visualizzazione della lista*) Procedure visualizza_lista(puntatore); begin writeln; write('punt_lista--> '); (*Ciclo di scansione della lista*) while p<>NIL do begin write(p^.inf); //visualizza il campo informazione write('---> '); p:=p^.pun; //scorri di un elemento in avanti end; write ('NIL'); end; (*Main*) var punt_listauntatore; //ci servirà da parametro attuale begin punt_lista:=crea_lista_ordin; //Chiam. dellq funz.per creare la lista visualizza_lista(punt_lista); //Chiam. della proc. per visualiz. la lista readln; end.
__________________
Sun Certified Java Programmer - Sun Certified Web Component Developer - Sun Certified Business Component Developer |
![]() |
![]() |
![]() |
Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 19:58.