Autor Tema: Lenguaje C: Generar un vector de números aleatorios  (Leído 86968 veces)

Hyde

  • Sin experiencia
  • *
  • Mensajes: 16
    • Ver Perfil
Lenguaje C: Generar un vector de números aleatorios
« en: 06 de Mayo 2014, 04:02 »
Hola me gustaría que me ayuden a generar un vector de 10 números con números a la zar de 0 a 29 pero que los números NO se repitan.

por ejemplo para generar los numero a la zar hice lo siguiente:

Código: [Seleccionar]
//--Cargar un vector con números aleatorios
    srand(time(0)); //se establece el número semilla
    for(x=0;x<10;x++){
      A[x]=(rand()%9)+10;//se genera el número aleatorio  entre 0 y 29
    }//for
   
    printf("\n Vector A cargado con números aleatorios entre 0 y 29 \n\n");   
    for(x=0;x<10;x++){
      printf("\n\t%d\t",A[x]);
    }

¿Como hago que no se repitan?, por ahí leí que con un While se podía, pero ¿me podrían explicar como?, Un saludo y Disculpen las molestias como verán soy novata en esto y se me hace algo difícil esto.
« Última modificación: 06 de Mayo 2014, 09:20 por César Krall »

Hyde

  • Sin experiencia
  • *
  • Mensajes: 16
    • Ver Perfil
Re:Lenguaje C: Generar un vector
« Respuesta #1 en: 06 de Mayo 2014, 04:03 »
Conseguí esto por Internet pero de todas maneras no lo entiendo. y tampoco se si esta es la respuesta para generar el numero sin que se repita?

Código: [Seleccionar]
n=0;
while (n<25){
a=round(100*rand)
i=0;
existe=0;
while (i<n & existe=0){
i=i + 1;
}
if (m(1,i)=a){
existe=1;
}//if
}//while i

if existe=0{
n = n + 1; 
m(1,n)=a; 
}//if
}//While n
« Última modificación: 06 de Mayo 2014, 04:16 por Hyde »

César Krall

  • Moderador Global
  • Experto
  • *******
  • Mensajes: 2078
  • No vales por lo que dices, sino por lo que haces
    • Ver Perfil
    • aprenderaprogramar.com
Re:Lenguaje C: Generar un vector de números aleatorios
« Respuesta #2 en: 06 de Mayo 2014, 09:23 »
El trabajo con aleatorios es más complicado de lo que parece a primera vista, entre otras cosas porque es difícil garantizar una aletoriedad uniforme. Como cosas que es necesario saber:

srand (time(NULL));   Sirve para inicializar el generador de números aleatorios
int variable = rand();   Sirve para obtener un número aleatorio entre cero y un valor muy grande


Para obtener un número aleatorio comprendido entre 0 y x escribiríamos srand()%x. El resultado de esta operación será 0, 1, 2, 3, 4, 5, 6, 7 ... x, dado que x es el resto de la división entre un número muy grande y x, este resto puede ser 0 si la división es exacta, ó 1, 2, ... hasta x.

Si escribes A[ x ]=(rand()%9)+10; el número aleatorio no será entre 0 y 29, sino entre 10 y 19

El siguiente código sirve para hacer lo que se pretende, aunque se podría mejorar:

Código: [Seleccionar]
#include <stdio.h>
#include <stdlib.h>
#include <time.h>

int main() {
    int numeroAleatorio[9]; //Indices de 0 a 9, resultan 10 numeros
    int i, j;
    int hayRepeticiones;

    srand (time(NULL));
    for (i=0; i<=9; i++) {
        numeroAleatorio[i] = rand()%29;
    }

    hayRepeticiones = 1;

//Comprobar repeticiones
    while (hayRepeticiones == 1) {
        hayRepeticiones =0;
        for (i=0; i<=9; i++) {
            for (j=i+1; j<=9; j++) {

                if (numeroAleatorio[i] == numeroAleatorio[j] && numeroAleatorio[i] !=29) { //Repetición
                    printf("Hay repeticion. Cambio de %d por %d \n", numeroAleatorio[i], numeroAleatorio[i]+1);
                    numeroAleatorio[i] = numeroAleatorio[i] +1;
                    hayRepeticiones = 1;

                }
                if (numeroAleatorio[i] == numeroAleatorio[j] && numeroAleatorio[i] ==29) { //Repetición
                    numeroAleatorio[i] = numeroAleatorio[i] -rand()%28+1;
                    printf("Hay repeticion de 29. Cambio de 29 por %d \n", numeroAleatorio[i]);
                    hayRepeticiones = 1;
                }
            }
        }
    }

    for (i=0; i<=9; i++) {
        printf("Aleatorio %d vale: %d\n", i, numeroAleatorio[i]);
    }

    return 0;

}
Responsable de departamento de producción aprenderaprogramar.com

Hyde

  • Sin experiencia
  • *
  • Mensajes: 16
    • Ver Perfil
Re:Lenguaje C: Generar un vector de números aleatorios
« Respuesta #3 en: 07 de Mayo 2014, 23:03 »
Ahora tengo todo mas claro, gracias por la ayuda Cesar, me ha servido de mucho, Disculpa las molestias! Un Saludo.

 

Sobre la educación, sólo puedo decir que es el tema más importante en el que nosotros, como pueblo, debemos involucrarnos.

Abraham Lincoln (1808-1865) Presidente estadounidense.

aprenderaprogramar.com: Desde 2006 comprometidos con la didáctica y divulgación de la programación

Preguntas y respuestas

¿Cómo establecer o cambiar la imagen asociada (avatar) de usuario?
  1. Inicia sesión con tu nombre de usuario y contraseña.
  2. Pulsa en perfil --> perfil del foro
  3. Elige la imagen personalizada que quieras usar. Puedes escogerla de una galería de imágenes o subirla desde tu ordenador.
  4. En la parte final de la página pulsa el botón "cambiar perfil".