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.