Club Delphi  
    Paypal   FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Internet
Registrarse FAQ Miembros Calendario Guía de estilo Buscar Temas de Hoy Marcar Foros Como Leídos

Colaboración Paypal con ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 23-10-2007
Avatar de Delphius
[Delphius] Delphius is offline
Miembro Premium
 
Registrado: jul 2004
Ubicación: Salta, Argentina
Posts: 5.582
Poder: 28
Delphius Va camino a la fama
karen08,
Bienvenido/a a ClubDelphi.

Como recién te ingresas, te recomiendo una lectura a la guia de estilo. Sobre todo considerando el hecho de que pides una "tarea" de mala manera. Aqui no hacemos las cosas con urgencia. Espero que sepas entender que aqui ayudamos desinteresadamente y empleamos el tiempo libre que dispongamos para ofrecer dicha ayuda.

Con respecto a tu pregunta, ¿Podrías detallar y profundizar más tu pregunta? No te cobramos por la cantidad de palabras. No logro entender y captar tu problema.

Saludos,
__________________
Delphius
[Guia de estilo][Buscar]
Responder Con Cita
  #2  
Antiguo 23-10-2007
karen08 karen08 is offline
Miembro
 
Registrado: oct 2007
Posts: 11
Poder: 0
karen08 Va por buen camino
Question punteros en delphi

hola
disculpa por lo anterior....

solo que necesito saber como resover un ejercicio en delphi utilizando punteros, este consiste en que el programa debe mostrar el abesedario completo en una lista en un lis box
Responder Con Cita
  #3  
Antiguo 23-10-2007
Avatar de Delphius
[Delphius] Delphius is offline
Miembro Premium
 
Registrado: jul 2004
Ubicación: Salta, Argentina
Posts: 5.582
Poder: 28
Delphius Va camino a la fama
karen08,
No es por malo... ¿Puedes indicar si lo que deseas es emplear una lista (estructura de datos abstracta) para mostrar el abecedario o por el contrario deseas mostrar en un ListBox? O en un tercer caso... ¿tienes una lista (la estructura de datos) y deseas mostrar dicha lista en un ListBox?

Como te dije, no te cobramos por las palabras. Cuanto más nos puedas decir mejor y es para ti y más fácil para nosotros tratar de encontrar una solución a los problemas.

Si tienes hecho ya un código sería bueno que lo expongas. Para que el código sea entendible, al copiarlo aquí encierralo entre las etiquetas DELPHI. Algo así:
[ DELPHI ] (sin los espacios)
aqui viene tu código...
[ /DELPHI ] (sin los espacios)

Si encuentro un moderador le pido que mueva este hilo a Varios que es el lugar indicado en donde tratar el tema. ¿Te parece?

Saludos,
__________________
Delphius
[Guia de estilo][Buscar]
Responder Con Cita
  #4  
Antiguo 23-10-2007
karen08 karen08 is offline
Miembro
 
Registrado: oct 2007
Posts: 11
Poder: 0
karen08 Va por buen camino
Question punteros en delphi

Cita:
Empezado por karen08 Ver Mensaje
hola
disculpa por lo anterior....

solo que necesito saber como resover un ejercicio en delphi utilizando punteros, este consiste en que el programa debe emplear una lista (estructura de datos abstracta)mostrar el abesedario completo en una lista en un lis box
while primernodo <>nil then
if primernodo^.letras> nuevonodo^.letras then
begin
nuevo^.putsig(primernodo)
primernodo:=nuevonodo;
Responder Con Cita
  #5  
Antiguo 23-10-2007
Avatar de Delphius
[Delphius] Delphius is offline
Miembro Premium
 
Registrado: jul 2004
Ubicación: Salta, Argentina
Posts: 5.582
Poder: 28
Delphius Va camino a la fama
karen08, ese código no basta para saber donde tienes el problema. Debes proporcionar mayor información.

Se que cada uno tiene sus tiempos y sus prisas, pero con prisas y exponer menos que lo mínimo para poder ver tu problema no solucionas nada.

Se más consciente por favor y permite a los demás que te ayudemos. Da a conocer tu código con mayor claridad, con esas líneas poco puedo decirte. Te lo pido de la mejor manera posible, ayudanos a ayudarte. Sin ver más no puedo saber donde está el problema.

Saludos,
__________________
Delphius
[Guia de estilo][Buscar]
Responder Con Cita
  #6  
Antiguo 30-10-2007
karen08 karen08 is offline
Miembro
 
Registrado: oct 2007
Posts: 11
Poder: 0
karen08 Va por buen camino
Post punteros en delphi

hola

saludos

la presente es para pedir una ayuda para resolver un problema que anteriormente habia anunciado en el club.

el problema consiste en diseñar e implementar una clase que permita crear una lista simple ordenada ascendentemente; y cada nodo debe almacenar una letra del alfabeto.

unit Uplista;
interface
type
TPclase=^TClistletras;
TClistletras=OBJECT
letras:string;
sig:TPclase;
procedure putletras(_letras:string);
procedure putsig(_sig:tpclase);
function getletras:string;
function getsig:tpclase;
constructor init;
destructor liberar;
procedure insertar(otronodo:tpclase);
end;
var
primernodo,anteriornodo,nuevonodo:tpclase;

implementation
uses Unit1;
{ TClistnum }
function TClistletras.getletras: string;
begin
Result:=letras;
end;
function TClistletras.getsig: tpclase;
begin
Result:=sig;
end;
constructor TClistletras.init;
begin
New(nuevonodo);
end;
procedure TClistletras.insertar(otronodo: tpclase);
begin
IF primernodo = NIL THEN
begin
primernodo:= otronodo;
anteriornodo:= otronodo;
anteriornodo^.sig:= nil;
End
else
Begin
anteriornodo^.sig:=otronodo;
anteriornodo:= otronodo;
anteriornodo^.sig:= nil;
End;
while primernodo <> nil do
if primernodo ^.letras > nuevonodo ^.letras then
begin
nuevonodo ^.putsig(primernodo);
primernodo:=nuevonodo;
end;
end;
destructor TClistletras.liberar;
begin
dispose(nuevonodo);
end;
procedure TClistletras.putletras(_letras: string);
begin
letras:= _letras;
end;
procedure TClistletras.putsig(_sig: tpclase);
begin
sig:= _sig;
end;

end.
Responder Con Cita
  #7  
Antiguo 30-10-2007
Avatar de Delphius
[Delphius] Delphius is offline
Miembro Premium
 
Registrado: jul 2004
Ubicación: Salta, Argentina
Posts: 5.582
Poder: 28
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
  #8  
Antiguo 30-10-2007
Avatar de Delphius
[Delphius] Delphius is offline
Miembro Premium
 
Registrado: jul 2004
Ubicación: Salta, Argentina
Posts: 5.582
Poder: 28
Delphius Va camino a la fama
Bueno. Lo prometido es deuda.
me tomé unos minutos y desarrollé un ejemplo implementando una estructura LIFO. Es decir una Cola. Lo que hice es implementar una classe TABC que viene con el código encapsulado para agregar, borrar, inicializar, etc..

¿Porqué una clase?
Pues a mi me da la impresión de que quieres intentar hacer una clase por lo de:
Código Delphi [-]
function TClistletras.getletras: string; 
//...

Me he acostumbrado a codificar en Inglés o pseudoInglés... espero que no te moleste. Agregué los comentarios que me parecieron indicados exponer.

Bueno. La unidad es como sigue:
Código Delphi [-]
unit UABC;

interface

uses
  Classes;

CONST
  //Esta cadena sirve para cargar las letras
  ABC = 'ABCDEFGHIJKLMNÑOPQRSTUVWXYZ';

type
  // estructura de un nodo
  TNode = ^Node;
  Node = record
          Character: char;
          Sig: TNode;
         end;

  // Estructura de una clase que opera con una estructura LIFO (Cola)
  // para armar un abecedario
  // Debido a la simpleza de implementar una estructura LIFO
  // se optó por este método
  // Por tanto Z será el último elemento de la pila, y A el primero

  // De forma análoga se puede conseguir mediante FIFO o una lista genérica
  TABC = class
    private
      // Nuestro TOPE
      Ftop: TNode;

      // Inicilizar cola
      procedure Init;

      // Borrar o Limpiar cola
      procedure Clear;
    public
      constructor Create;
      destructor Destroy;

      // Push = Agregar
      procedure Push(Character: char);

      // Pop = Eliminar
      function Pop: char;

      // IsEmpty = EsVacia
      function IsEmpty: boolean;

      // DevolverCaracter (no lo elimina, solo consulta)
      function GetChar: char;
  end;


implementation

procedure TABC.Push(Character: char);
var NewNode: TNode;
begin
  new(NewNode);
  NewNode.Character := Character;
  NewNode.Sig := Nil;

  if IsEmpty
     then begin
            // No tenía nodo
            // NuevoNode es el primero
            Ftop.Sig := NewNode;
          end
     else begin
            // Hay más de un nodo
            // TOPE siempre apunta al último nodo
            NewNode.Sig := FTop.Sig;
            FTop.Sig := NewNode;
          end;
end;

function TABC.Pop: char;
var OldNode: TNode;
begin
  if NOT IsEmpty
     then begin
          OldNode := FTop.Sig;

          // devolvemos el carater del elemento TOPE
          result := OldNode.Character;

          // Eliminamos el elemento tope y TOPE apunta al siguiente en la
          // cola
          FTop.Sig := OldNode.Sig;
          dispose(OldNode);
          end;
end;

constructor TABC.Create;
begin
  // reservamos el TOPE
  new(FTop);
  FTop.Sig := Nil;

  // Iniciamos la cola...
  Init;
end;

destructor TABC.Destroy;
begin
  // Borramos la cola
  Clear;

  dispose(FTop);
end;

procedure TABC.Init;
var Pos: integer;
begin
 // desde 1 hasta la longitud de la cadena ABC
 for Pos := 1 to Length(ABC) do
   // metemos en la pila el caracter Pos-ésimo de la cadena ABC
   Push(ABC[Pos]);
end;

procedure TABC.Clear;
var Node: TNode;
begin
  while NOT IsEmpty do
    Pop;
end;

function TABC.IsEmpty: boolean;
begin
  // TRUE si TOPE no apunta nada
  // FALSE en cualquier otro caso
  result := FTop.Sig = Nil;
end;

function TABC.GetChar: char;
begin
  if NOT IsEmpty
     then result := FTop.Sig.Character;
end;

end.

Un ejemplo de uso, cargando un ListBox:

Código Delphi [-]
procedure TForm1.Button1Click(Sender: TObject);
var ABCobj: TABC;
    i: integer;
begin
 ABCobj := TABC.Create;

 for i := 1 to 27 do
   ListBox1.Items.insert(0,ABCobj.pop);
 Application.ProcessMessages;

 ABCobj.Destroy;
end;

Creería que con eso puedes darte una idea de como implementarlo con otras estructuras, por ejemplo FIFO.

Si tienes dudas, avisa.
Saludos,

PD: Si algún moderador pasa por aquí, que mueva a este hilo a la sección adecuada ya que el tema no correspondería al subforo Internet.
__________________
Delphius
[Guia de estilo][Buscar]
Responder Con Cita
Respuesta


Herramientas Buscar en Tema
Buscar en Tema:

Búsqueda Avanzada
Desplegado

Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
uso de punteros David OOP 19 14-12-2009 09:48:37
Punteros davitcito Varios 2 25-04-2005 22:46:24
Hay punteros en java? Trigger JAVA 2 05-10-2004 21:28:20
Punteros rafadrover OOP 8 18-09-2003 10:09:47


La franja horaria es GMT +2. Ahora son las 17:02:51.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi