Newsgroup: it.comp.lang.pascal
Titolo: Lista da visualizzare

Ciao a tutti,
potreste dirmi il motivo per cui non mi  si visualizza la lista di elementi
di numero casuale ma si visualizza solo uno  degli elementi? (è forse
l'unico?).
Grazie 1000.
Daniele.
program liste (input,output);
uses crt;
type
    punt=^rec;
    rec=record
              val:integer;
              succ:punt;
              end;
var
    p,q,r,inizio1,inizio2,inizio3,a,b,c:punt;
    x,i:integer;
{crea una lista di max 10 elementi di valore max 100}
procedure crea_nuova_lista;
begin
randomize;
x:=random(11);
new(inizio1);
inizio1^.succ:=nil;
inizio1^.val:=random(100);
for i:=1 to x do
    begin
    new(c);
    c^.succ:=inizio1^.succ;
    c^.val:=random(100);
    c:=inizio1;
    end;
end;
{programma principale}
begin
     crea_nuova_lista;
     b:=inizio1;
     repeat
           begin
           writeln(b^.val);
           b:=b^.succ;
           end;
     until b=nil;
     repeat until keypressed;
end.

program liste (input,output);
uses crt;
type
    punt=^rec;
    rec=record
              val : integer;
              succ : punt;
    end;
var
    p,q,r,inizio1,inizio2,inizio3,a,b,c:punt;
    x,i:integer;
{crea una lista di max 10 elementi di valore max 100}
procedure crea_nuova_lista;
var app : punt;
begin
    randomize;
    x:=random(11);
    new(inizio1);
    app:=inizio1;
    inizio1^.succ:=nil;
    inizio1^.val:=random(100);
     for i:=1 to x do
       begin
          new(app^.succ);
          app^.succ^.val:=random(100);
          app:=app^.succ;
        end;
  app^.succ:=nil;
end;
{programma principale}
begin
     clrscr;
     crea_nuova_lista;
     b:=inizio1;
     repeat
         writeln(b^.val);
         b:=b^.succ;
     until b=nil;
     repeat until keypressed;
end.
"Daniele" <qwe...@NOSPAMMMMtiscalinet.it> ha scritto nel messaggio
news:NLcj6.13674$Uj1.2...@twister2.tin.it...


Grazie per il tuo tempestivo aiuto!!!
potresti, se ti va, indicarmi perchč sbagliavo?
la mia procedura "sulla carta" funzionava!
Daniele.

>>{Qui dovrebbe visualizzarsi girata, ma si visualizza uguale a prima}
     b:=inizio1;
     repeat
         writeln(b^.val);
         b:=b^.succ;


"Daniele" <qwe...@NOSPAMMMMtiscalinet.it> ha scritto nel messaggio
news:Z7ij6.20830$LM4.2...@twister1.tin.it...

program liste (input,output);



Il problema sta qui nel fatto che crei i nodi ci ma non li link alla lista
anzi, quando scrivi c:=inizio1 li perdi creando garbage.
new(inizio1) crea un nuovo nodo
new(c) crea un nuovo nodo
c^.succ=inizio1^.succ che č uguale a nil  (non so a che ti serviva)
c:=inizio1  perdi il nodo c perchč fai puntare c ad inizio1 quindi la tua
lista č sempre di un solo nodo e perdi sempre tutti gli altri
quando non ti viene chiesta una costruzione specifica della lista il modo
piů facile č di creare il nodo e metterlo in testa
randomize;
new(inizio);
inizio^.val:=random(100);
x:=random(11);
for i:=1 to x do
  begin
      new(c);
      c^.val:=random(100);
      c^.succ:=inizio;
      inizio:=c;
  end;
(*Utilizza le variabili locali *)
Ciao ReDiCuori
----------------------------------------------------
Pascal sul web 
www.argo-web.it/pascal/home.htm
Pascal su irc   #turbopascal
-----------------------------------------------------

Scusami se te lo dico ma penso che ti devi ripetere le liste
Una lista lineare licata con a singolo puntatore ha solitamente questa forma
:
1 - > 10 -> 13 -> 2 -->nil
Il che significa che la puoi scorrere da sinistra verso destra, per
stamparti la lista al contrario devi creare una nuova lista dove gli
elementi sono messi in ordine inverso
program stampaliste;
uses crt;
type punt=^rec;
       rec=record
              val : integer;
              succ : punt;
end;
procedure crealista(var L : punt);
begin
(*.....*)
end;
procedure revers(var L, R : punt);
var app1, app2 : punt;
begin
    app1:=L; R:=nil;
    while app1<>nil do
        begin
            new(app2);
            app2^.val:=app1^.val;
            app2^.succ:=R;
            R:=app2;
            app1:=app1^.succ;
        end;
end;
var L1, L2 : punt;
begin
    writeln('crea lista e stampa');
    crealista(L1);
    writeln('stampa lista :');
    stampalista(L1);
    revers(L1,L2);
    stampalista(L2);
end.


>>  b:=inizio2;
     repeat
         writeln(b^.val);
         b:=b^.succ;
     until b=nil;
     end;
     repeat until keypressed;
Da inserire nel programma principale.
Daniele.