Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Otros temas > La Taberna
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

 
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 06-03-2024
Avatar de Ñuño Martínez
Ñuño Martínez Ñuño Martínez is offline
Moderador
 
Registrado: jul 2006
Ubicación: Ciudad Catedral, Españistán
Posts: 6.003
Poder: 26
Ñuño Martínez Tiene un aura espectacularÑuño Martínez Tiene un aura espectacular
Unhappy Enlaces sin punteros

¿Confundidos? Pues agárrense, que vienen curvas.

Estoy leyendo Algoritmos + Estructuras de datos = Programas, del bueno de Kiklaus Wirth, porque encontré una primera edición en inglés (como curiosidad, fue el libro que provocó que Anders Hejlsberg escribiera Turbo Pascal 1.0).

La cosa es que me he atascado con un concepto en la página 19, porque por más vueltas que le doy no entiendo qué dice. Está hablando de registros (record) y listas, y habla de que se puede crear una lista doblemente enlazada añadiendo un campo más y haciendo una suma o una resta. El texto original:



No incluye código de ejemplo. He probado varias implementaciones a ver si así lograba entender algo, pero no hay manera: no consigo que recorra toda la lista ni para atrás ni para delante. Pongo la primera que hice, que es la más naïf, para que veáis la estructura básica.
Código Delphi [-]
program RegsistrosEnlazados;
(* Intento de implementación del sistema de enlazado explicado en A+D=P.  *)

type
(* Para identificar mejor. *)
  TSexo = (Masculino, Femenino);
(* Contiene información de personas. *)
  TPersona = record
    Nombre: String;
    Sexo: TSexo;
    Link: Integer
  end;
var
(* Información (extraído del libro). *)
  Personas: array [1..10] of TPersona = (
    (Nombre: 'Carolyn';  Sexo: Femenino;  Link: 2),
    (Nombre: 'Chris';    Sexo: Masculino; Link: 2),
    (Nombre: 'Tina';     Sexo: Femenino;  Link: 5),
    (Nombre: 'Robert';   Sexo: Masculino; Link: 3),
    (Nombre: 'Jonathan'; Sexo: Masculino; Link: 3),
    (Nombre: 'Jennifer'; Sexo: Femenino;  Link: 5),
    (Nombre: 'Raytheon'; Sexo: Masculino; Link: 5),
    (Nombre: 'Mary';     Sexo: Femenino;  Link: 3),
    (Nombre: 'Anne';     Sexo: Femenino;  Link: 1),
    (Nombre: 'Mathias';  Sexo: Masculino; Link: 3)
  );

(* Elemento siguiente. *)
  function SiguienteIndice (x, y: Integer): Integer;
  begin
    SiguienteIndice := x + Personas[y].Link
  end;



(* Elemento anterior. *)
  function AnteriorIndice (x, y: Integer): Integer;
  begin
    AnteriorIndice := x - Personas[y].Link
  end;

var
  Ndx: Integer;
begin
  Ndx := 1;
  repeat
    WriteLn ('Nombre: ', Personas[Ndx].Nombre);
    Ndx := SiguienteIndice (Ndx - 1, Ndx)
  until (1 > Ndx) or (Ndx > High (Personas))
end.

De ahí he intentado varias cosas bastante más complejas, como intentar llevar la cuenta del elemento anterior (I^k-1) y el actual (i^k), pero no lo pillo.

Tampoco me va la vida en ello, pero si alguien me da una pista, o una implementación que funcione, pues se agradecerá. Yo, de momento, me paso al capítulo siguiente, que la neurona no me da para más.
__________________
Proyectos actuales --> Allegro 5 Pascal ¡y Delphi!|MinGRo Game Engine

Última edición por Ñuño Martínez fecha: 06-03-2024 a las 12:14:19. Razón: Olvidé cómo se ponía el destacado de sintaxis para Pascal/Delphi.
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

Temas Similares
Tema Autor Foro Respuestas Último mensaje
punteros pepe_baile C++ Builder 4 24-07-2016 12:19:57
Punteros kotai Varios 1 09-08-2010 17:26:34
uso de punteros David OOP 19 14-12-2009 10:48:37
C++ y los punteros marcoszorrilla La Taberna 3 02-06-2008 19:31:11
Punteros davitcito Varios 2 25-04-2005 23:46:24


La franja horaria es GMT +2. Ahora son las 01:07:52.


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