Generar 6 números y ordenarlos en el mismo bucle(lenguaje C)

Iniciado por NOB2014, 18 Septiembre 2014, 00:40 AM

0 Miembros y 1 Visitante están viendo este tema.

NOB2014

Hola a todos.
El asunto es simple por lo menos para explicarlo, sólo que no se si se puede hacer, lo que quisiera saber es si en cada iteración además de generar los número ir ordenándolos, me parece que no quedaría del todo ordenado pero por lo menos ir intercambiando los posibles.-
El juego es de Argentina y se llama Quini6, los números a asertar son 6 y van del 0 al 45.-
En este caso no tiene mucho sentido porque el bucle se realiza sólo 6 veces, pero en el caso de generar por ejemplo 500.000 números tal vez acelere el tiempo que tardaría una manera y la otra.-
#include<stdio.h>
#include<stdlib.h>
#include<time.h>

void generar();

int main(void){
generar();

return 0;
}

void generar(){
int guardar[6], numero=0, i=0, hora = time(NULL);
srand(hora);

for(; i<6; i++){
numero = rand()%46;
guardar[i] = numero;
}
}
   


Desde ya muchas gracias y muchos saludos.-
Daniel
abraza las cosas y personas malas como si fueran tu mas preciada joya,Son tus mas grandes maestros de paciencia sabiduría y amor y cuando lo abrazas dejan de causar dolor.-

Blaster

Haciendo uso de qsort podríamos ir ordenando sucesivamente los elementos generados, mas o menos así :

Código (cpp) [Seleccionar]

int comparar(const void * x, const void * y)
{
    return ( *(int*)x - *(int*)y );
}

void generar(void)
{
    int guardar[6], numero = 0;
    int i, hora = time(NULL);

    srand(hora);

    for (i = 0; i <= 6; i++)
    {
        numero = rand() % 46;

        guardar[i] = numero;

        qsort(guardar, i, sizeof(int), comparar);
    }
}


Un Saludo

rir3760

Cita de: NOB2014 en 18 Septiembre 2014, 00:40 AMlo que quisiera saber es si en cada iteración además de generar los número ir ordenándolos
No es necesario ordenarlos después de cada iteración, puedes hacerlo una vez generados todos los números (ya tienes un ejemplo del uso de qsort cortesía de Blaster).

Lo que si debes hacer es verificar que los números no se repitan, para ello lo mas sencillo es generar primero los cuarenta y seis números almacenándolos en un array y a continuación seleccionar seis aleatoriamente, por ejemplo:
#include <stdio.h>
#include <stdlib.h>
#include <time.h>

#define MAX_ELEM  46

int main(void)
{
   int num[MAX_ELEM];
   int num_elem = sizeof num / sizeof num[0];
   int i;
   int j;
   
   srand((unsigned) time(NULL));
   
   for (i = 0; i < MAX_ELEM; i++)
      num[i] = i;
   
   for (i = 0; i < 6; i++){
      j = rand() % num_elem;
      printf("%2d\n", num[j]);
     
      num[j] = num[--num_elem];
   }
   
   return EXIT_SUCCESS;
}


Un saludo
C retains the basic philosophy that programmers know what they are doing; it only requires that they state their intentions explicitly.
--
Kernighan & Ritchie, The C programming language

NOB2014

Hola Blaster.
Muchas gracias por el aporte, funciona perfecto sólo que mi idea es ir intercambiando los números según corresponda y se vallan generando.-
Por ejemplo si guardar[0] es mayor a guardar[1] intercambiar a partir de la segunda iteración hasta finalizar, lo estoy intentando voy a ver cómo queda al finalizar el bucle, reitero no cambia el tiempo al hacerlo con 6 iteraciones, quiero experimentar con 500.000.-
Rir muy importante tú código me solucionó lo de los número repetidos, que era algo que tenía pendiente, lo voy a recorrer paso a paso para aprender algunas líneas que no me quedan claras.-   

Saludos.
Daniel   
abraza las cosas y personas malas como si fueran tu mas preciada joya,Son tus mas grandes maestros de paciencia sabiduría y amor y cuando lo abrazas dejan de causar dolor.-

rir3760

Cita de: NOB2014 en 18 Septiembre 2014, 16:51 PMmi idea es ir intercambiando los números según corresponda y se vallan generando.-
Por ejemplo si guardar[0] es mayor a guardar[1] intercambiar a partir de la segunda iteración hasta finalizar
No deberías hacerlo porque en el mejor escenario terminaras implementando el método de ordenacion por inserción y este tiene una eficiencia menor que Quicksort, mejor ordena la lista una vez hayas generado todos los valores.

Un saludo
C retains the basic philosophy that programmers know what they are doing; it only requires that they state their intentions explicitly.
--
Kernighan & Ritchie, The C programming language