[C con Clase] rand () y srand () en c

Samuel Porras samuelporras en gmail.com
Mie Mayo 27 18:36:21 CEST 2009


Si la aplicación te dice siempre el mismo numero al abrir el programa es 
porque necesitas la función srand(semilla) en el main para que cambie de 
número, por ejemplo yo pondría:


#include <stdio.h>
#include <stdlib.h>

int calcular_indice (int n)
{
    return (int)( rand()*(n/(RAND_MAX+1.0)) + 0.5 );
}

int main ()
{
    srand(time(0)); //Al principio porque sino te dará siempre el mismo número prueba a ver...
    int array[5] = { 2,5,9,4,1 }; 
    int valor;
    valor = array[ calcular_indice(5) ]; 
    printf("%i \n", valor);
    system("pause");
    return 0;
}

Un cordial saludo ^^


Diego escribió:
> De verdad muchas gracias a todos por contribuir a responder mi consulta ;), 
> ahora ahi algo que escribio Steven Davidson, que no entendi la implementacion de este:
>
>   
>> Si no existe, entonces crea un array con todos los números que quieres y usa 
>> 'rand()' para generar números enteros a modo de índice para seleccionar 
>> cada número guardado en el array. Por ejemplo, 
>>
>> int array[5] = { 2,5,9,4,1 }; 
>> valor_generado = array[ calcular_indice(5) ]; 
>> donde, 
>>
>> int calcular_indice( int n ) 
>> { 
>>   return (int)( rand()*(n/(RAND_MAX+1.0)) + 0.5 ); 
>> }
>>     
>
> No comprendo bien la implementacion de ésta, osea seria:
>
> int calcular_indice (int n)
> {
>     return (int)( rand()*(n/(RAND_MAX+1.0)) + 0.5 );
> }
>
>
> int main ()
> {
>     int array[5] = { 2,5,9,4,1 }; 
>     valor = array[ calcular_indice(5) ]; 
>     return 0;
> }
>
> Bueno yo en windows con el Dev c++ probe este codigo:
>
> #include <stdio.h>
> #include <stdlib.h>
>
> int calcular_indice (int n)
> {
>     return (int)( rand()*(n/(RAND_MAX+1.0)) + 0.5 );
> }
>
> int main ()
> {
>     int array[5] = { 2,5,9,4,1 }; 
>     int valor;
>     valor = array[ calcular_indice(5) ]; 
>     printf("%i \n", valor);
>     system("pause");
>     return 0;
> }
>
> Y siempre me arroja 2 xD!, comprendo que con calcular_indice(5) le estamos pasando el total de elementos del array a la funcion, pero siempre me arroja 2
> Probe el mismo codigo en linux (ubuntu), logicamente sin el system("pause"); xD! y siempre me arroja 1 xD!, haber si alguien puede decirme por que me ocurre esto por favor
>
> gracias
> _______________________________________________
> Lista de correo Cconclase Cconclase en listas.conclase.net
> http://listas.conclase.net/mailman/listinfo/cconclase_listas.conclase.net
> Bajas: http://listas.conclase.net/index.php?gid=2&mnu=FAQ
>
>   




Más información sobre la lista de distribución Cconclase