Ver Mensaje Individual
  #4 (permalink)  
Antiguo 15/04/2014, 17:17
shikamarucb
 
Fecha de Ingreso: febrero-2014
Mensajes: 107
Antigüedad: 10 años, 8 meses
Puntos: 0
Respuesta: Problema con funcion rand

Asi lo pude generar bien lo que pasaba era que si llegaba a generar un 2 y le restaba uno en la condicion del for no se cumpliria y lo que haria es generar cualquier valor por eso me salian numeros pares; igual que en el tuyo que tambn me genera numeros pares. Pero me parecio interesante tu logica.
Código C++:
Ver original
  1. #include <iostream>
  2. #include <time.h>
  3. #include <stdlib.h>
  4. using namespace std;
  5.  
  6. int main(){
  7.  int x,aux,n,*vec,i;
  8.  srand(time(NULL));
  9.  cout<<"Digite longitud del vector: ";
  10.  cin>>n;
  11.  vec=new int[n];
  12.  
  13.  for(i=0;i<n;i++){
  14.     aux=3+(rand()%92);
  15.     x=aux-1;
  16.     for(x;x>1;x--){
  17.         if(aux%x==0){
  18.             aux=3+(rand()%92);
  19.             x=aux;
  20.             }else vec[i]=aux;
  21.     }
  22.  }
  23.   for(int i=0;i<n;i++){
  24.         cout<<vec[i]<<"\n";
  25.  
  26.  }
  27. }
Cita:
Iniciado por vangodp Ver Mensaje
una idea :D
cualquier numero multiplicado por 2 es par.
Como lo mantamos...
Una forma de tener un numero siempre par:
Si me da el numero 91 (IMPAR) le divido por 2...
91 / 2
resultado 45. Ahora lo multiplico por 2
45*2
me da el 90 matando así aquel uno que era molesto y no nos aleja para nada por ejemplo del numero original por si lo queríamos números pares de 0 a 100 XDD

y para el impar solo le tienes que ver si es par. Tienes 2 opciones:
Una o no haces nada hasta que te de un par.
Otra si quieres que agilice y te de un numero par a la fuerza, si te da por ejemplo el numero 80, le sumas uno o le restas uno.
int n=80;
if( n%2 ==0 )
n = n+1;

Obien

int n=80;
if( n%2 ==0 )
n = n-1;


debes cuidar para que si por ejemplo quieres números entre 0 a 100 que no te pase ni de 0 abajo ni de 100 arriba sino seria un desastre XDD

por cierto, para números aleatorios uso:
int desde = 0;
int hasta = 100;
int aux = ( desde + rand() % (hasta - desde) );

así es como me va muy bien XDD

Ah XDD
Y debes llamar antes a srand() como te dijo vosk
srand() necesita una semilla la s es de seed que en ingles es la semilla.
srand() hace que rand() genere números según el numero que le pongas. Por ejemplo:
srand(157);
El problema es que si pones un numero fijo siempre te da los mismos números. Ahí es donde entra time(NULL) que obtiene de numero la hora del ordenador y como la hora no repite en 24horas pues a menos que ejecutes el rand() 2 veces al mismo instante cosa que es improbable por no decir imposible XDDD
Código C++:
Ver original
  1. #include <iostream>
  2. #include <ctime>
  3. #include <windows.h>
  4. using namespace std;
  5.  
  6. int aleatorio(int desde, int hasta);
  7.  
  8. int main (){
  9.     srand(time(NULL));
  10.     int num = 0;
  11.     int n = 0;
  12.    
  13.     // Poner aqui el rango de numeros que desea generar, ejemplo: desde 0 hasta 100.
  14.     int desde = 0;
  15.     int hasta = 100;
  16.  
  17.     cout << "cuantas numeros aleatorios quieres generar?: ";
  18.     cin >> num;
  19.     int box[num];
  20.  
  21.     for ( int i = 0 ; i < num ; i++ ){
  22.         n = aleatorio( desde, hasta );
  23.         Sleep (10);                    
  24.         box[i] = n; //si los quiere guardar                    
  25.         cout <<  "arreglo [" << i << "] contiene: " << box[i] << endl;  
  26.     }                                  
  27.  
  28.     cin.ignore();
  29.     return 0;
  30. }//FIN DE MAIN
  31.  
  32. int aleatorio( int desde, int hasta ) {
  33.     // rand syntax: <int> = (<numeromenor> + rand() % ( <numeromayor> - <numeromenor> ) )
  34.     int n = ( desde + rand() % (hasta - desde) );
  35.     return n;
  36. }//FIN DE ALEATORIO

Última edición por shikamarucb; 15/04/2014 a las 17:20 Razón: faltaba