elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Introducción a la Factorización De Semiprimos (RSA)


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  Generar 6 números y ordenarlos en el mismo bucle(lenguaje C)
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Generar 6 números y ordenarlos en el mismo bucle(lenguaje C)  (Leído 2,540 veces)
NOB2014


Desconectado Desconectado

Mensajes: 366



Ver Perfil
Generar 6 números y ordenarlos en el mismo bucle(lenguaje C)
« en: 18 Septiembre 2014, 00:40 am »

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.-
Código
  1. #include<stdio.h>
  2. #include<stdlib.h>
  3. #include<time.h>
  4.  
  5. void generar();
  6.  
  7. int main(void){
  8. generar();
  9.  
  10. return 0;
  11. }
  12.  
  13. void generar(){
  14. int guardar[6], numero=0, i=0, hora = time(NULL);
  15. srand(hora);
  16.  
  17. for(; i<6; i++){
  18. numero = rand()%46;
  19. guardar[i] = numero;
  20. }
  21. }
   


Desde ya muchas gracias y muchos saludos.-
Daniel


En línea

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

Desconectado Desconectado

Mensajes: 190


Ver Perfil
Re: Generar 6 números y ordenarlos en el mismo bucle(lenguaje C)
« Respuesta #1 en: 18 Septiembre 2014, 02:25 am »

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

Código
  1. int comparar(const void * x, const void * y)
  2. {
  3.    return ( *(int*)x - *(int*)y );
  4. }
  5.  
  6. void generar(void)
  7. {
  8.    int guardar[6], numero = 0;
  9.    int i, hora = time(NULL);
  10.  
  11.    srand(hora);
  12.  
  13.    for (i = 0; i <= 6; i++)
  14.    {
  15.        numero = rand() % 46;
  16.  
  17.        guardar[i] = numero;
  18.  
  19.        qsort(guardar, i, sizeof(int), comparar);
  20.    }
  21. }
  22.  

Un Saludo


En línea

rir3760


Desconectado Desconectado

Mensajes: 1.639


Ver Perfil
Re: Generar 6 números y ordenarlos en el mismo bucle(lenguaje C)
« Respuesta #2 en: 18 Septiembre 2014, 03:56 am »

lo 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:
Código
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <time.h>
  4.  
  5. #define MAX_ELEM  46
  6.  
  7. int main(void)
  8. {
  9.   int num[MAX_ELEM];
  10.   int num_elem = sizeof num / sizeof num[0];
  11.   int i;
  12.   int j;
  13.  
  14.   srand((unsigned) time(NULL));
  15.  
  16.   for (i = 0; i < MAX_ELEM; i++)
  17.      num[i] = i;
  18.  
  19.   for (i = 0; i < 6; i++){
  20.      j = rand() % num_elem;
  21.      printf("%2d\n", num[j]);
  22.  
  23.      num[j] = num[--num_elem];
  24.   }
  25.  
  26.   return EXIT_SUCCESS;
  27. }

Un saludo
En línea

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


Desconectado Desconectado

Mensajes: 366



Ver Perfil
Re: Generar 6 números y ordenarlos en el mismo bucle(lenguaje C)
« Respuesta #3 en: 18 Septiembre 2014, 16:51 pm »

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   
En línea

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


Desconectado Desconectado

Mensajes: 1.639


Ver Perfil
Re: Generar 6 números y ordenarlos en el mismo bucle(lenguaje C)
« Respuesta #4 en: 18 Septiembre 2014, 17:30 pm »

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
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
En línea

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
Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines