Ver Mensaje Individual
  #8  
Antiguo 30-10-2007
Avatar de Delphius
[Delphius] Delphius is offline
Miembro Premium
 
Registrado: jul 2004
Ubicación: Salta, Argentina
Posts: 5.582
Reputación: 27
Delphius Va camino a la fama
karen08,
Mil disculpas. Me he enredado con otros asuntos y se me olvidó de esto.
Estuve buscando entre mis apuntes de lenguaje aquellos ejercicios de punteros pues creía recordar que hice uno así... pero no los encontré. Quedaron en en Limbo del viejo disco duro...

No recuerdo mucho de pilas, colas y listas con punteros... por lo que no lo tengo demasiado fresco. Se que es algo simple, es cuestión de que haga memoria... y si me das hasta mañana te puedo adelantar algo como para que veas.

No quiero hacerte alegrar demasiado. Por lo que veo a simple vista hay unos errores:

La declaración correcta para conformar los nodos es así:

Código Delphi [-]
type
TNodo = ^Nodo
Nodo = record
   Letra: char;
   Sig: TNodo;
end;

En tu código estás mezclando objetos con la declaración de los nodos.
¿Debes crear una clase que implemente dichos procedimientos y que use internamente a la lista de nodos?

Si es así, la declaración de la clase es:

Código Delphi [-]
TClase = class
private
  FList: TNodo; //FList mantendrá la lista de nodos
  FPrimero, FUltimo, FAnterior: TNodo // auxiliares... para operar
  FCuenta: integer; // puede ser util llevar la cuenta de letras
public
  function  Agregar(Letra: char): integer; //devolvería la posición
  function GetLetra(Posic: integer): char;
  constructor Create;
  destructor Destroy;
end;

Según mi percepción Lo que se debe hacer es que si se necesita armar el abecedario sólo basta con emplear Agregar() que lo que hace es insertar al final de la lista el siguiente nodo con la info necesaria, y la función GetLetra que se encargaría de regresar la letra que se encuentre en la posición Posic (siempre y cuando existan una cantidad de nodos al menos igual a Posic)

De hecho... (según entiendo yo) para el uso de la clase no tendría sentido la función Agregar. Sino más bien que en Create tranquilamente se puede conseguir armar el abecedario en forma "automática". Ya que disponder de un Agregar() puede llevarnos a algo como esto:
ABDFTRUV y como bien sabemos... esto no es el abecedario.

Es decir que lo que yo haría es mover la declaración Agregar en private y llamarla dentro de Create. Algo así:

Código Delphi [-]
constructor TClase.Create;
begin
for i := 'A' to 'Z' do
   Agregar(i);
end;

Y bueno... también debería disponer de un Eliminar, de modo que en Destroy podríamos hacer algo así:

Código Delphi [-]
while FList <> Nil do
  Eliminar;

Obviamente Eliminar debería hacerlo desde el final o el principio (según como te resulte más cómodo).

Espero que te resulte útil estos tips. Como dije... dame un tiempito y te doy una muestra sencilla.

Saludos,
__________________
Delphius
[Guia de estilo][Buscar]
Responder Con Cita