Este es el blog que usamos como portafolios para mostrar los proyectos que hacemos en nuestro centro dentro del proyecto general CITE STEAM

lunes, 20 de enero de 2020

Programa para generar números de Bonoloto o Primitiva en C


Para acabar nuestras prácticas usando el lenguaje de programación C empleando el  bucle "while", nos propusimos realizar un programa que generara seis números aleatorios para luego probar suerte en cualquier administración de loterías en "la primitiva" o "la bonoloto".

La generación de 6 números en si no tiene ninguna dificultad, pero sí "la no repetición", es decir, los 6 números deben ser diferentes dentro del rango 1 - 49. ¿Cómo se soluciona? Parece sencillo pero tiene su inconveniente: cada número generado (a partir del segundo) debe ser chequeado para que no sea igual a cualquiera de los anteriores. Veamos la solución:

/*Incluimos 3 librerías: la primera, necesaria para todo programa en C y las otras dos son requeridas para generar números aleatorios*/
#include<stdio.h>
#include<stdlib.h>
#include<time.h>
int main()
{
    int num1,num2,num3,num4, num5, num6;
    
   /*Sin la sentencia srand siempre se generarían los mismos números en  distintas ejecuciones del programa.
    srand(time(NULL));
    
    //Generamos el primer número entre 1 y 49 y lo mostramos en pantalla
    num1=rand()%49+1;
    printf("%d", num1);
    
    //Generamos el segundo pero mientras sea igual al primero, se genera otro.
    num2=rand()%49+1;
    while(num2==num1)
    {   
         num2=rand()%49+1;        
    }
    printf("\n%d", num2);
    
    //Generamos el tercero pero mientras sea igual al primero o al segundo, se genera otro.
    num3=rand()%49+1;
    while(num3==num1 || num3==num2)
    {
         num3=rand()%49+1;   
    }
    printf("\n%d", num3);
    //Generamos el cuarto pero mientras sea igual al primero, al segundo o al tercero, se genera otro.   
    num4=rand()%49+1;
    while(num4==num1 || num4==num2 || num4==num3)
    {
         num4=rand()%49+1;        
    }
    printf("\n%d", num4);
    
    //Generamos el quinto pero mientras sea igual al primero, al segundo, al tercero o al cuarto se genera otro.
    num5=rand()%49+1;
    while(num5==num1 || num5==num2 || num5==num3 || num5==num4)
    {
         num5=rand()%49+1;        
    }
    printf("\n%d", num5);
    
   //Generamos el último pero mientras sea igual a cualquiera de los anteriores, se genera otro.
    num6=rand()%49+1;
    while(num6==num1 || num6==num2 || num6==num3 || num6==num4 || num6==num5)
    {
         num6=rand()%49+1;        
    }
    printf("\n%d", num6);
   
    return 1;
}

Así, en la ejecución del programa, se generarán 6 números diferentes dentro del rango 1 al 49 . Serán distintos en cada ejecución, a no ser que se alineen 50.000 trillones de planetas conocidos y no conocidos y se de esa circunstancia.

Es evidente que éste programa no está totalmente optimizado. En las próximas semanas trabajaremos el segundo tipo de bucle "do/while" con el cual sí que tendríamos éste programa totalmente optimizado con menos líneas de código.

De momento es todo. En unas semanas os mostraré otro programa, espero que sea de vuestro agrado. 

Saludos a tod@s.

No hay comentarios:

Publicar un comentario