Newsgroup: it.comp.lang.pascal
Titolo: Rispondeteeee!!!!

Scusate ma ho un quesito che mi turba da tempo,
posso leggere una pila di oggetti in input, direttamente al contrario,
capovolta,
cioč che consideri, ad esempio, l^.valore il primo valore che ho inserito e
non l' ultimo.
Esiste un codice che corrisponde a questo, senza leggere e poi invertire, ma
direttamente leggere invertito?
Se lo avete ve ne sarei molto grato se lo postate nel NG.
Grazie
Un ultima cosa:
Potete dirmi  come posso mettere un valore di uscita in un ciclo  WHILE,
mentre utilizzo in input variabili string,
come si dichiara?
ad esempio se volessi utilizzare il punto(.).
Grazie.
program POINTER;
type lista =^elem;
elem = record
     info:string;
     next:lista;
end;
var l:lista;
    x,y,par:string;
procedure leggi(var l:lista;x:string);
var p:lista;
    i:integer;
begin
writeln('Inserire parole');
WHILE X<>............   DO
begin
readln(x);
new(p);
p^.info:=x;
p^.next:=l;
l:=p;
end;
end;
Rispondetemi sul NG

direttamente leggere invertito?
program LeggiInvertito ;
type PNodoLista = ^NodoLista ;
     NodoLista = record
                   Dato : Integer ;
                   Succ : PNodoLista ;
                 end ;
var TestaMiaLista : PNodoLista ;
     procedure InserisciElemento( var P : PNodoLista ;
                                  Dato : Integer ) ;
     begin
       if ( P = nil ) then
       begin
         New( P ) ;
         P^.Dato := Dato ;
         P^.Succ := nil ;
       end
       else
         InserisciElemento( P^.Succ, Dato ) ;
     end ;
     procedure InputElementi( var TestaLista : PNodoLista ) ;
     var N : Integer ;
     begin
       Write( 'Inserisci elemento (999 per finire) : ' ) ;
       ReadLn( N ) ;
       if ( N <> 999 ) then
       begin
         InputElementi( TestaLista ) ;
         InserisciElemento( TestaLista, N ) ;
       end ;
     end ;
     procedure ScriviLista( L : PNodoLista ) ;
     begin
       if ( L <> nil ) then
       begin
         Write( L^.Dato, '; ' ) ;
         ScriviLista( L^.Succ ) ;
       end
       else WriteLn ;
     end ;
begin
  TestaMiaLista := nil ;
  InputElementi( TestaMiaLista ) ;
  ScriviLista( TestaMiaLista ) ;
end.

"TommyGun"  in un messaggio disperato ha scritto

Risposta 1 :
   Al posti di utilizzare la pila (stack) utilizza una coda in questo modo
il primo si trova in testa e l'ultimo in coda :
   type coda = record
                     start : ^elemento;
                     end : ^elemento;
   end;
   type elemento=record;
          info : string;
          next : ^elemento;
  end;
procedure inserisci (var q : coda; e : elemento);
var ap :^elemento;
begin
     ap^.info:=elemento;
     ap^.next:=nill;
     q^.end^.next=ap;
     q^.end=ap;
end;
OPPURE una lista semplice lista :
(* si presuppone che la lista si vuota  l=nill*)
procedure leggielementi(var l : lista);
var ap : lista;
      s : string;
begin
    new(ap);
    l:=ap;
    while (S<>....) do
        begin
            readln(s);
            ap^.info:=s;
            new(ap^.next);
            ap:=ap^.next;
        end;
     ap^.next:=nill;
     (* nota : l'ultimo nodo della lista contine il valore di uscita del
ciclio *)
end;
Risposta 2:
var s : string;
begin
    s:='';
    while s<>'.' do
       readln(s)
end.
puoi inserire qualsiasi stringa di confronto, basta che rispetti le
maiuscole e le minuscole
Ciao Re Di Cuori

WHILE x<> '.'
usi gli apici per indicare che usi delle stringhe o un carattere ASCI.
NB: per indicare il simbolo apice devi scriverlo 2 volte
  ex. while x<>''''
       e per indicare una stringa vuota solo 2 apici
  ex. while x<>''
Ciao ciao :)))))))