Newsgroup: it.comp.lang.pascal
Titolo: puntatori _N2

Vi ringrazio nella risposta nell'altro post, ho studiato l'argomento e delle
cose non mi sono chiare:
ecco il codice che ho fatto ..
program lista;
uses crt;
type Tpunt = ^Trec; (*tipo puntatore del record*)
     Trec = record (*definizione struttura da usare*)
      nome:string;
      prossi: Tpunt; (*punta al prossimo   elemento*)
      preced: Tpunt  (*punta al precedente elemento*)
     end;
Var Primo:Tpunt; (*tiene traccia del primo elemento della lista*)
    scelta:byte (*scelta per il menu'*);
(*AGGIUNGE UN NUOVO ELEMENTO ALLA LISTA*)
procedure addEl(var primo:Tpunt);
var
   nuovo:Trec;
   p1,p2:Tpunt;
begin
   writeln ('inserisci il nome');
   readln (nuovo.nome);
   (*Aggiunta in testa , sposta il primo al secondo e il nuovo al primo*)
   if primo =nil then (*se il primo non punta a niente la lista S vuota*)
     begin
      new(primo);       (*nuova memoria per il primo*)
      primo^ := nuovo ; (*allocazione del primo nella memoria*)
      primo^.prossi:= nil;  (*non punta a nessun elemento*)
     end;
   if (nuovo.nome < primo^.nome) then
       begin
        new(p2);             (*nuova memoria dove spostare il primo*)
        p2^ := nuovo ;       (*traslazione del primo nella seconda
posizione*)
        p2^.prossi := primo; (*il nuovo record punta al primo*)
        primo := p2;         (*il primo elemento della lista diventa il
nuovo*)
       end
   (*aggiunta al centro, scorre i record fino a trovare la sua posizione*)
   else
      begin
      p1:= primo;(*parte dal primo a scorrere*)
      while (p1^.prossi <> nil) do (*controlla che non siamo alla fine*)
        begin
         if (nuovo.nome < p1^.prossi^.nome) then
             begin (*inserimento al centro*)
              new(p2);       (*nuova memoria per nuovo*)
              p2^ := nuovo;  (*assegnata a nuovo*)
              p2^.prossi := p1^.prossi; (*il nuovo punta al suo primo
maggior successore*)
              p1^.prossi := p2;
              exit
             end;(*end if*)
             p1:=p1^.prossi; (*incrementa il puntatore*)
        end;(*end while*)
        (*aggiunta in coda*)
        new(p2);
        p2^.prossi := nil ; (*S l'ultimo quindi non punta a niente*)
        p1^.prossi := p2
      end; (*end else*)
end;(*end procedure*)
procedure VisLs(primo:Tpunt);
var n:integer;
    p1:Tpunt;
begin
 p1 := primo;
 n := 0;
 repeat
  n := n+1;
  writeln (n,'-> ',p1^.nome);
  p1 :=p1^.prossi;
 until p1^.prossi= nil;
 readln;
end;
begin
repeat
clrscr;
writeln ('1-> AGGIUNGI ELEMENTO');
writeln ('2-> STAMPA TUTTA LA LISTA');
writeln ('3-> CANCELLA LISTA');
writeln ('9-> ESCI');
readln (scelta);
case scelta of
1:begin
  AddEl(primo);
  VisLs(primo);
  end;
2:VisLs(primo);
3:primo := nil;
end;
until (scelta = 9);
end.
*********************************************************************
1)quando inserisco alcuni valori come 'z' nella visualizzazione mi escono
due mila caratteri ASCII incomprensibili!
2)Suggerimenti ,aiuti , critiche??????????????
GRAZIE

 end;
prova a sostituire il ciclo repeat until con un while
ciao RdC
--
L'informatica è un arte
---------------------------------------------------------
 
www.pascallike.too.it
 
http://utenti.lycos.it/pascallike
 il sito sulla programmazione pascal
sorgenti, tutorial ed utility
---------------------------------------------------------