Foros aprenderaprogramar.com
Aprender a programar => C, C++, C#, Java, Visual Basic, HTML, PHP, CSS, Javascript, Ajax, Joomla, MySql y más => Mensaje iniciado por: Hyde 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:
//--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.
-
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?
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
-
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:
#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;
}
-
Ahora tengo todo mas claro, gracias por la ayuda Cesar, me ha servido de mucho, Disculpa las molestias! Un Saludo.