(Creado por el analista de sistemas y docente Leonel Iván Saafigueroa)
DECISIONES ALEATORIAS
La aleatoriedad se relaciona con aquellos procesos cuyo resultado no es previsible, por ejemplo: el lanzamiento de dados. En esta clase veremos de que forma lo podemos implementar en un programa que sea capaz de mostrar ese comportamiento.

Juegos como los dados, el póker, las máquinas tragamonedas y la ruleta, son alternativas lúdicas que fueron evolucionando a través de los tiempos. Al ser humano le encanta jugar, ya sea para pasar el rato o desafiar su suerte, algunos no paran hasta ganar o perderlo todo.
La computadora demostró ser una gran compañera en los juegos, la inteligencia artificial, o el aprendizaje de máquina (learning machine), son conceptos que hoy en día empiezan a ser más conocidos, ayudando a que todo sea más divertido y menos predecible.

Vamos a crear nuestro primer programa haciendo uso de una función azar(X):

El programa asigna a la variable (a) un número al azar de entre 10 posibilidades que van desde el número 0 (cero) hasta el 9 (nueve).
Analizamos el código
Algoritmo suerte // Genera un valor entre 0 y 9 para la variable "a". a = azar (10) Escribir a FinAlgoritmo
Ejecutamos el programa
Veamos el código en C++:
// ELEGIR UN NÚMERO ALEATORIO.
#include <iostream>
#include <cstdlib>
#include <ctime>
using namespace std;
int a;
int main()
{
srand(time(NULL)); // Iniciamos la semilla random con la hora.
a = rand() % 10; // Genera un valor entre 0 y 9.
cout << a << endl;
return 0;
}
Vamos a analizar línea por línea este código en C++:
Línea 2: #include <iostream>
- La primera línea incluye la biblioteca estándar para entrada y salida (
iostream) en nuestro programa. - En otras palabras, esta línea permite utilizar funciones como
cout(que imprime texto en la consola) ycin
(que lee datos de la entrada estándar).
Línea 3: #include <cstdlib>
- La segunda línea incluye la biblioteca estándar para operaciones generales (
cstdlib) en nuestro programa. - Esta biblioteca nos proporciona funciones como
rand()(que genera números aleatorios) ysrand()(que
establece la semilla para la generación de números aleatorios).
Línea 4: #include <ctime>
- La tercera línea incluye la biblioteca estándar para tiempo en nuestro programa.
- Esta biblioteca nos permite obtener la hora actual con la función
time().
Línea 6: using namespace std;
- En esta línea, estamos permitiendo que todas las funciones de la biblioteca estándar (como
cout,rand(), etc.) puedan ser utilizadas sin tener que prefixarlas con el nombre del espacio de nombres (std::). - Es como si estuviéramos diciendo: “Podés utilizar cualquier función de la biblioteca estándar sin tener que
preocuparte por su nombre completo”.
Línea 8: int a;
- En esta línea, estamos declarando una variable
adel tipo entero (int) en nuestro programa. - La variable (
a) es un contenedor que puede almacenar valores enteros.
Línea 10: int main()
- En esta línea, estamos definiendo la función principal del programa (
main()). - La función
main()es el punto de entrada del programa y se ejecutará primero cuando se invoque el programa.
Línea 12: srand(time(NULL));
- En esta línea, estamos estableciendo la semilla para la generación de números aleatorios con la función
srand(). - La función
time()devuelve la hora actual en forma de un valor entero que se utiliza como semilla. - De esta manera, cada vez que se invoque el programa, se generarán números aleatorios diferentes.
Línea 13: a = rand() % 10;
- En esta línea, estamos generando un número aleatorio entre 0 y 9 (inclusive) con la función
rand()y
almacenándolo en la variable (a). - El valor de la función
rand()se divide por 10 con el operador%para obtener el resto, que es un número
entero entre 0 y 9.
Línea 14: cout << a << endl;
- En esta línea, estamos imprimiendo el valor de la variable (
a) en la consola con la funcióncout. - El valor se imprime seguido del carácter de nuevo renglón (
endl) para hacer que el cursor avance a la
siguiente línea.
Línea 15: return 0;
- En esta línea, estamos indicando que la función
main()ha terminado exitosamente y devolviendo un valor entero de cero. - El valor de retorno de cero indica que no hubo errores en el programa.
Ahora el código en PYTHON:
import random a=random.randint(1,10) print(a)
Vamos a analizar línea por línea este código en PYTHON:
Línea 1: import random
Importa la biblioteca de números aleatorios llamada random, lo que permite utilizar funciones y variables de esta biblioteca en el programa.
Línea 2: a = random.randint(1, 10)
Se asigna un valor aleatorio entre 1 y 10 a una variable llamada (a). La función randint devuelve un número entero aleatorio entre los valores mínimo y máximo especificados (en este caso, 1 y 10).
Línea 3: print(a)
Se imprime el valor actual de la variable (a), es decir, el resultado de la asignación realizada en la línea anterior.
Ahora vamos a recordar uno de los programas que hicimos en las primeras clases pero lo vamos a condimentar con un toque de AZAR.

El programa nos pregunta nuestro nombre y según el resultado del AZAR: 0 (cero) o 1 (uno), nos responderá que el nombre es lindo o feo.
Analizamos el código
Algoritmo lindo_o_feo Escribir "¿Cuál es tu nombre?" Leer nombre d <- azar (2) Si d=0 Entonces Escribir "Que lindo nombre ",nombre SiNo Escribir "Que feo nombre ", nombre FinSi FinAlgoritmo
Ejecutamos el programa
Veamos el código en C++:
#include <iostream>
#include <cstdlib>
#include <ctime>
using namespace std;
int d;
string nombre;
int main()
{
cout << "¿Cuál es tu nombre?" << endl << endl;
getline(cin, nombre);
srand(time(NULL));// Iniciamos la semilla random con la hora.
d = rand() % 2; // Genera un valor entre 0 y 1.
if(d==1)
{
cout << "Que lindo nombre " << nombre << endl;
}
else
{
cout << "Que feo nombre " << nombre << endl;
}
return 0;
}
Vamos a analizar línea por línea este código en C++:
Línea 1: #include <iostream>
- Esta es la primera línea del programa y se utiliza para incluir la biblioteca estándar de entrada y salida
(<iostream>). La biblioteca estándar es una colección de funciones predefinidas que permiten interactuar con el usuario y con los archivos.
Línea 2: #include <cstdlib>
- Esta línea incluye la biblioteca estándar de funciones de cálculo (
<cstdlib>). Esta biblioteca contiene
funciones comorand()para generar números aleatorios.
Línea 3: #include <ctime>
- Esta línea incluye la biblioteca estándar de tiempos (
<ctime>). Esta biblioteca contiene funciones comotime()para obtener el tiempo actual en segundos.
Línea 5: using namespace std;
- Esta línea permite utilizar las funciones y variables de la biblioteca estándar sin tener que especificar el
nombre del espacio de nombres (std). De esta manera, podemos utilizar funciones comocoutyendl
directamente.
Línea 7: int d;
- Esta línea declara una variable entera (
int) llamada (d). La variable (d) será utilizada más adelante para
almacenar un valor aleatorio.
Línea 8: string nombre;
- Esta línea declara una variable de cadena (
string) llamada (nombre). La variable (nombre) será utilizada para almacenar el nombre del usuario.
Línea 10: int main()
- Esta es la función principal del programa. El nombre
maines una convención que indica que esta función es el punto de entrada del programa.
Línea 12: cout << "¿Cuál es tu nombre?" << endl << endl;
- Esta línea imprime un mensaje en la pantalla para pedir al usuario que ingrese su nombre.
- La función
endles utilizada para saltar a una nueva línea.
Línea 13: getline(cin, nombre);
- Esta línea lee el nombre del usuario y lo almacena en la variable (
nombre). - La función
getlinees utilizada para leer líneas de texto desde la entrada estándar (cin).
Línea 14-15: srand(time(NULL)); d = rand() % 2;
- Esta línea inicia el generador de números aleatorios con un valor basado en la hora actual.
- La función
rand()genera un número aleatorio entre 0 y 32767 (inclusive). - El operador
%es utilizado para obtener el resto de la división de este número por 2.
Línea 16-20: if(a==1) { ... } else { ... }
- Esta línea es un condicional que comprueba si el valor almacenado en la variable (
d) es igual a 1. - Si es así, se ejecuta el bloque de código dentro del primer condicional.
- De lo contrario, se ejecuta el bloque de código dentro del segundo condicional.
Línea 18: cout << "Que lindo nombre " << nombre << endl;
- Esta línea imprime un mensaje en la pantalla que dice “Que lindo nombre” seguido del nombre del usuario.
- La función
endles utilizada para saltar a una nueva línea.
Línea 22: cout << "Que feo nombre " << nombre << endl;
- Esta línea imprime un mensaje en la pantalla que dice “Que feo nombre” seguido del nombre del usuario.
- La función
endles utilizada para saltar a una nueva línea.
Línea 24: return 0;
- Esta línea indica que el programa ha terminado de ejecutarse y devuelve un valor de 0.
Ahora el código en PYTHON:
import random
print("¿Cuál es tu nombre?")
nombre = input()
d=random.randint(0,1)
if d == 1:
print(f"Que lindo nombre {nombre}")
else:
print(f"Que feo nombre {nombre}")
Vamos a analizar línea por línea este código en PYTHON:
Línea 1: print("¿Cuál es tu nombre?")
- Se imprime un mensaje en la pantalla que dice “¿Cuál es tu nombre?“.
- La función
print()se utiliza para imprimir texto en la salida estándar del programa.
Línea 2: nombre = input()
- Se lee un valor de entrada del usuario y lo almacena en la variable (
nombre). - La función
input()se utiliza para leer una cadena de caracteres desde la entrada estándar del programa.
Línea 3: d=random.randint(0,1)
- Se genera un número aleatorio entre 0 y 1 (inclusive).
- La función
randint()de la bibliotecarandomse utiliza para generar números enteros aleatorios en el rango especificado. - El valor generado es almacenado en la variable (
d).
Línea 4: if d == 1:
- Se inicia un bloque de código condicional if. Si la condición dentro del paréntesis se cumple, entonces se ejecutarán las instrucciones dentro del bloque.
- En este caso, la condición es que el valor almacenado en la variable (
d) sea igual a 1.
Línea 5: print(f"Que lindo nombre {nombre}")
- Se imprime un mensaje en la pantalla con el formato de cadena formateada (f-string).
- La expresión
{nombre}se sustituye por el valor almacenado en la variable (nombre). - En este caso, el mensaje es “Que lindo nombre [nombre del usuario]“.
Línea 6: else:
- Se inicia un bloque de código condicional else. Si la condición dentro del paréntesis no se cumple (es decir, si la condición if fue falsa), entonces se ejecutarán las instrucciones dentro del bloque.
Línea 7: print(f"Que feo nombre {nombre}")
- Se imprime un mensaje en la pantalla con el formato de cadena formateada (f-string).
- La expresión
{nombre}se sustituye por el valor almacenado en la variable (nombre). - En este caso, el mensaje es “Que feo nombre [nombre del usuario]“.
Bloque de código condicional:
- Después de la condición if y las instrucciones dentro del bloque de código condicional if, se completa el bloque de código condicional.
- Si la condición if fue verdadera (es decir, d fue igual a 1), entonces se ejecutará la instrucción print con
el mensaje de saludo. - Si la condición if fue falsa (es decir, d no fue igual a 1), entonces se ejecutará la instrucción print con el
mensaje de que el nombre es feo.
En resumen, este programa pedirá al usuario que ingrese su nombre, generará un número aleatorio y utilizará ese valor para determinar si imprimir una mensaje de saludo o una crítica sobre el nombre del usuario. Si el valor aleatorio es 1, se imprimirá el mensaje de saludo; si el valor aleatorio es 0, entonces se imprimirá la crítica sobre el nombre.
TAREA PARA EL HOGAR
- Crear un juego en donde tengamos que adivinar qué número del 1 al 10 eligió la computadora, y que nos diga si adivinamos, y si no lo hicimos nos diga cual fue el número que eligió.
- Crear un programa llamado cupido en donde nos pregunte el nombre de dos personas y luego diga al azar si estás dos personas pueden estar juntas. Otra versión del programa podría funcionar contando la cantidad de letras de cada nombre, y luego de sumarlas que su respuesta varíe dependiendo si el resultado es par o impar (con esto logramos que su respuesta sea siempre la misma para esos dos nombres).