Club Delphi  
    Paypal   FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Varios
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Coloboración Paypal con ClubDelphi

 
 
Herramientas Buscar en Tema Desplegado
  #2  
Antiguo 20-11-2004
Avatar de Lepe
[Lepe] Lepe is offline
Miembro Premium
 
Registrado: may 2003
Posts: 7.424
Poder: 31
Lepe Va por buen camino
En principio hay otras técnicas que evitan el uso de punteros, como el TobjectList. Pero si necesitas eso...

Tapunt, yo le cambiaría el nombre, es decir, PTnodo = ^Tnodo
con esta nomenclatura es mas claro,
Tnodo es un Tipo de datos
PTNodo es un Puntero al Tipo de datos Nodo


type

TApunt=^TNodo;
TNodo=record
Info: String;
Liga: TApunt;
end;

var
Inicio, Fin: TApunt; // aqui declaro las variables de tipo apuntador, pues cuando lo hago, ¿ya apuntan a nil? SI, Delphi lo inicializa a nil al declarar la variable.

  • procedure Agregar(Elem: String);

    Var Aux: TApunt; // Aux es un apuntador al nodo que se creará? SI
    begin

    New(Aux); // aqui, el nodo se puede llamar de otro modo, por ejemplo p? es decir que fuera: New(p);NO VER EJEMPLO
    Aux^.Liga:=Nil;

    Aux^.Info:=Elem;

    if Inicio=Nil then Inicio:=Aux // aqui, con Inicio:=Aux digo que inicio apunta a aux? EXACTO
    else Fin^.Liga:=Aux;

    Fin:=Aux; //por lo tanto, aqui digo que fin apunta a aux...SIP
    end;




    Puedes hacerte un esquema grafico para aclararte un poco

    Código:
      
     Tnodo
      
     -------------
      
      | info	  |
      
      | Liga	  |
      
      -------------
      
      
      
      Pointer
      
      ------
      
      |   |
      
      ------
      
      
      
      Tapunt
      
      ------			------------- 
      
      | ---------------->	| info	 | 
      
      ------			| Liga	 |
      
      			-------------
De esta forma, estas viendo que Tapunt está compuesto por un tipo Pointer + un Tipo Registro.

Aux es una variable, imagina que delphi reserva espacio para esa variable en la posicion 100 de la memoria.
  • Código:
      
     direccion	nombre de	contenido 
      
      de memoria	la variable	de la memoria
      
      
      
      0				ocupada por windows
      
      100		Aux		inicialmente NIL
      
      150				ocupada por windows
      
      200				--libre--
    Cuando haces New(Aux) se reserva espacio para guardar el nodo, y se hace al conjunto completo:

    - Reserva espacio para el registro ( supongamos en la posicion 200)

    - Modifica el contenido de aux para que apunte a esa zona de memoria recien creada.

    Código:
      
      
      
      direccion	nombre de	contenido 
      
      de memoria	la variable	de la memoria
      
      
      
      0				ocupada por windows
      
      100		Aux		200
      
      150				ocupada por windows
      
      200		aux^		el nodo recien creado


    de tal forma que cuando dices:

    Código Delphi [-]
      
      aux^.info:= 'elemento'



    - Primero, va a aux, Delphi sabe Aux está en la posición 100

    - lee el contenido de Aux (200)

    - Como encuentra el operador ^. lo que hace es ir a la posicion de memoria 200 y tratar esa porcion de memoria como si fuera un registro

    - Accede al campo infoy le asigna la cadena 'elemento'.



    Lo que si puedes hacer es extraer el registro de la lista, de esta forma:

    Código Delphi [-]
      
      var 
      
          Aux:TApunt;
      
          Reg: TNodo;
      
      begin
      
      if Inicio <> nil then
      
      begin
      
         Reg := inicio^;
      
         showMessage(reg.elemento);
      
      end;

    Mira atentamente de qué tipo es cada variable.



    Espero te ayude.




Última edición por Lepe fecha: 20-11-2004 a las 14:44:53.
Responder Con Cita
 



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


La franja horaria es GMT +2. Ahora son las 07:14:26.


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