Pascal/Turbo Pascal - Punteros y error rarisimo

 
Vista:

Punteros y error rarisimo

Publicado por Daniel Sanchez (2 intervenciones) el 13/08/2007 13:13:50
Hola a todos,
Bueno yo mi pregunta no es una duda especialmente urgente pero me ayudariais mucho si me la solucionais ya que no le encuentro yo ni pues ni de cabeza el porque hace eso... Bueno os pego el código que consiste en imprimir el abecedario al revés sin una letra... bueno yo mirando libros y mas cosas no he buscando una solución o explicación....

program pruebapuntero(input,output);

TYPE
tlista = ^tnodo;
tnodo = RECORD
datos: char;
sig: tlista
END;

VAR
letra: char;
inicio,lista,listaaux: tlista;
i: char;

procedure mostrar(lista:tlista);
VAR
inicio:tlista;
BEGIN
inicio:=listaaux;
WHILE inicio<>NIL DO BEGIN
write(inicio^.datos);
inicio:=inicio^.sig
END;
readln;
END;

procedure eliminar(VAR lista:tlista; c:char);
VAR
nuevo,
anterior,
actual: tlista;
encontrado: boolean;
BEGIN
anterior:=lista;
actual:=lista;
encontrado:=false;
WHILE not encontrado and (actual<>Nil) DO BEGIN
IF actual^.datos=c THEN
encontrado:=TRUE
ELSE BEGIN
anterior:=actual;
actual:=actual^.sig
END
END;
IF anterior=actual THEN
lista:=lista^.sig
ELSE BEGIN
anterior^.sig:=actual^.sig;
END
END;

Procedure insertar(VAR l:tlista; i:char);
BEGIN
listaaux:=lista;
new(lista);
lista^.datos:=i;
lista^.sig:=listaaux;
listaaux:=listaaux^.sig
END;

BEGIN
letra:='a';
WHILE not(letra>'z') DO BEGIN
insertar(listaaux,letra);
letra:=succ(letra)
END;
writeln;
mostrar(listaaux);
writeln;
eliminar(listaaux,'d');
mostrar(listaaux);
END.

Entonces la salida de pantalla es asi:

xwvutsrqponmlkjihgfedcba

xwvutsrqponmlkjihgfecba

Lo único que podido saber para que funcionara en la condición del while deberia ser :

WHILE not(letra>succ(suuc('z'))) DO BEGIN

¿Pero por qué ? ¿ O que le ocurre a los punteros o que se yo? Si algien me lo puedo decir me haria un gran favor.
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder