ruleta.pas

{ ppc386 -va -vh *.pas }
{ COMIENZO DE DESCRIPCION

  Ejemplo interesante para mostrar el uso de punteros.
  Simula una ruleta creando una lista circular de 37
  celdas enlazadas con punteros. Generando con la
  funci\'on $random$ un n\'umero pseudo-aleatorio $n$
  entre 0 y 36, se avanza en la lista $n$.

  FIN DE DESCRIPCION }

{-----+-----+-----+-----+-----+-----+-----+-----+-----+-----}
{$ Id: ruleta.pas 2002/04/05 17:50 jdelia  Exp jdelia      $}
program ruleta ;
type
  tipo_elemento = integer;
  tipo_celda	 = record
    elemento : tipo_elemento;
    sig      : ^tipo_celda;
  end;	       
var 
  a, b, c, p : ^tipo_celda;
  j, m	     : integer;
  r	     : char;
begin
  new (a); {Crea la primera celda}
  a^.elemento := 0;
  b := a; {'b' siempre apuntara a la ultima celda creada}
  for j := 0 to 36 do begin
    new (c);          {Crea celda}
    b^.sig := c;      {Enlaza con la ultima}
    b^.elemento := j; {Pone el valor en el elemento}
    b := c;           {Actualiza puntero a la ultima celda}
  end; {for}
  b^.sig := a;        {Hace el ultimo enlace}
  {Ahora vamos a lanzar un numero al azar y vamos a recorrer
   la ruleta tantos pasos como el numero que haya salido }
  r := 'y';
  randomize ;
  p := a; {'p' apunta siempre al ultimo numero que salio}
  while (r <> 'x') and (r <> 'X') do begin
    m := random (10000);
    for j := 1 to m do p := p^.sig;{Avanza m-pasos la ruleta}
    writeln ('Salio el numero: ',p^.elemento);
    writeln ('["enter" para seguir jugando, "x" para salir]');
    read (r);
  end; {while}
  for j:=1 to 36 do begin {Libera todas las celdas utilizadas}
    b := a^.sig;
    dispose (a);
    a := b;
  end; {j}
end.
{-----+-----+-----+-----+-----+-----+-----+-----+-----+-----}

Generated by GNU enscript 1.6.1.