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.