09.05.2013 Views

Algoritmos y Programación en Pascal

Algoritmos y Programación en Pascal

Algoritmos y Programación en Pascal

SHOW MORE
SHOW LESS

You also want an ePaper? Increase the reach of your titles

YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.

A.2. Variables aleatorias 483<br />

En este apartado se introduce el uso del azar para resolver problemas algorítmicam<strong>en</strong>te.<br />

2 Empezaremos por resumir los mecanismos que ofrece Turbo <strong>Pascal</strong><br />

para introducir el azar <strong>en</strong> nuestros programas, así como la forma de definir<br />

otros, s<strong>en</strong>cillos y útiles; después se verá un método para simular variables aleatorias<br />

cualesquiera, para terminar dando algunos ejemplos de aplicación.<br />

A.2.1 G<strong>en</strong>eración de números aleatorios <strong>en</strong> Turbo <strong>Pascal</strong><br />

La construcción de un bu<strong>en</strong> g<strong>en</strong>erador de números seudoaleatorios no es una<br />

tarea fácil; por eso y por sus importantes aplicaciones, casi todos los l<strong>en</strong>guajes<br />

de programación incluy<strong>en</strong> algún g<strong>en</strong>erador predefinido.<br />

Para obt<strong>en</strong>er los valores aleatorios <strong>en</strong> Turbo <strong>Pascal</strong>, se emplea la función<br />

Random, que g<strong>en</strong>era un valor seudoaleatorio y que se puede utilizar de dos modos<br />

distintos:<br />

• Con un argum<strong>en</strong>to <strong>en</strong>tero y positivo 3 n, <strong>en</strong> cuyo caso el resultado es un<br />

número extraído uniformem<strong>en</strong>te del conjunto {0, . . . , n − 1}:<br />

Random(6) ❀ 2<br />

Random(6) ❀ 5<br />

Random(6) ❀ 0<br />

• Sin argum<strong>en</strong>to, <strong>en</strong> cuyo caso el resultado es un real, extraído uniformem<strong>en</strong>te<br />

del intervalo [0, . . . , 1):<br />

Random ❀ 0.78593640172<br />

Random ❀ 0.04816725033<br />

Cuando estas funciones se usan <strong>en</strong> un programa, se debe usar el procedimi<strong>en</strong>to<br />

Randomize (sin argum<strong>en</strong>tos), para “arrancar” la g<strong>en</strong>eración de números<br />

aleatorios, haci<strong>en</strong>do interv<strong>en</strong>ir información cambiante, no controlada, como determinadas<br />

variables del sistema (el reloj), de modo que las distintas ejecuciones<br />

de ese programa funcion<strong>en</strong> de difer<strong>en</strong>te modo.<br />

Como ejemplo de uso, damos el sigui<strong>en</strong>te programa, que simula el lanzami<strong>en</strong>to<br />

de un dado y de una moneda:<br />

2 Hay obviam<strong>en</strong>te una dificultad intrínseca para reproducir el azar (de naturaleza indeterminista)<br />

mediante algoritmos (que son procesos deterministas). De hecho, <strong>en</strong> la práctica sólo se<br />

consigue simular un comportami<strong>en</strong>to “apar<strong>en</strong>tem<strong>en</strong>te” aleatorio –seudoaleatorio– aunque esto es<br />

sufici<strong>en</strong>te para un gran número de aplicaciones.<br />

3 En realidad, <strong>en</strong> Turbo <strong>Pascal</strong> debe ser de tipo word (véase el apartado B.3).

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!