PROGRAMACIÓN EN C++ – CLASE 12

(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.


Veamos el código:

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
// 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;
}
// 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; }
// 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) y cin
    (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) y srand() (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 a del 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ón cout.
  • 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 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.

Veamos el código C++:

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
#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;
}
#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; }
#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 como rand() 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 como
    time() 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 como cout y endl
    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 main es 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 endl es 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 getline es 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 endl es 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 endl es 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.


TAREA PARA EL HOGAR

  1. 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ó.
  2. 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).