[C con Clase] Generar números al azar en una matriz

Steven Davidson srd4121 en njit.edu
Vie Feb 26 16:20:20 CET 2010


Hola Cristian,

tACho XD Cristian Villota wrote:
> Hola a todos:
> 
> Primero que todo gracias por su colaboración en mi inquietud
> anterior. Bueno mi problema es que tengo creada una matriz de
> [10][10] y necesito llenarla pero con números al azar, que cada vez
> que corra el programa me muestre diferentes números, no se si exista

Sí. Existen funciones para generar números enteros no negativos 
pseudo-aleatoriamente. Te interesan las funciones estándares 'srand()' y 
'rand()' declaradas en <cstdlib>.

Invoca 'srand()' una sola vez en tu programa. Esta función "implanta un 
número semilla". Este valor inicial comienza la secuencia de valores 
pseudo-aleatorios del algoritmo usado. Para obtener una aleatoriedad 
"más aleatoria", tomamos la hora y fecha actual como el valor semilla. 
Por ejemplo,

int main()
{
   srand( time(NULL) );
   ...
}

La función estándar 'time()' está declarada en <ctime>.

Invocamos la función 'rand()', para conseguir números pseudo-aleatorios 
entre 0 y 'RAND_MAX' (ambos valores incluidos). 'RAND_MAX' es una 
constante simbólica definida en <cstdlib>.

Si quieres conseguir números en otros intervalos, cambia la escala. Por 
ejemplo,

valor = 100 + (int)(1000*rand() / (RAND_MAX+1.0) + 0.5);

De esta manera, obtendremos números entre 100 y 1000 (ambos incluidos). 
Sumamos 0.5 para realizar un redondeo.

Para más información acerca de estas funciones, sugiero que consultes la 
referencia en nuestra página yendo a: 
http://c.conclase.net/librerias/index.php?ansilib=stdlib#inicio

> una función para eso, y después copiar la primera fila en un vector
> de [10]. De antemano gracias por sus aportes.
> 

Ten presente que el array que representa una matriz no es más que un 
array de arrays. Para copiar los elementos de un array a otro, tendrás 
que acceder a cada elemento y copiarlo a su homólogo. Por ejemplo,

int vector[10];
int matriz[10][10];

for( ... )
   matriz[0][i] = vector[i];

La otra forma es usando la función estándar 'memcpy()', declarada en 
<cstring>. Por ejemplo,

memcpy( matriz[0], vector, 10 * sizeof(int) );


Espero que esto te ayude.

Steven





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