ayuda; array de cinco elementos, utilizar rand() para variar su valor.

Iniciado por socorroz, 14 Julio 2017, 18:15 PM

0 Miembros y 1 Visitante están viendo este tema.

socorroz

hola quiero hacer que un array de 5 elementos utilice la función rand() para que sus elementos cambien de valor de acuerdo a un rango.

Los tres primeros elementos del array para el abecedario (a-z),
los dos últimos elementos del array para números del 1 al 9.

El rango es de acuerdo a la tabla ascii, a-z(97 a 122), 0-9(48 al 57).

El problema es que no logro que la función rand() obedezca a éste rango, siempre sale un caracter
fuera de éste a pesar que pienso que la utilización de la función es la correcta.

En síntesis lo que quiero es restringir dos rangos de la tabla ascii, uno para el abecedario y otro para los números del 1 al 9 sin embargo rand() no obedece al rango.



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

#define SIZE    5

int main( void )
{
    size_t i;
    unsigned int randomabc, randomnum;
   
    int abcdario[ SIZE ] = { 0, 0, 0, 0, 0 };
 
   
    srand( time( NULL ) );
       
    // randomize
    for ( i = 0; i < SIZE; ++i )
    {
        // construccion del rango aleatorio a-z(97,122), 0-9(48,57).
        randomabc = 97 + rand() % 122;
        randomnum = 48 + rand() % 57;
       
        if ( i < 3 )
        {
            abcdario[ i ] = randomabc;
    }
   
        if ( i >= 3 )
        {
            abcdario[ i ] = randomnum;
        }
       
        // al final utilizo %c para convertir el entero al caracter
        printf( "%c,", abcdario[ i] );
    }   
}   
 


agradezco su ayuda!!  :P


MAFUS

lim_inferior + rand() % (lim_superior - lim_inferior)
Si solo pones el límite superior después del módulo te podría dar ese límite y además le sumarías el límite inferior, con lo que saldrías de rango.

socorroz

bien entonces veo que le restaste el valor mínimo porque el intervalo se estaba pasando del rango límite superior es decir estaba agregando además el valor mínimo. Bueno eso era todo, el pequeño código funciona!! Muchas Gracias por tu ayuda!!   :)

Serapis

A menudo cuando tenemos una tabla restringida a x caracteres, es mucho mejor generar un array justo con esos caracteres

// el array de letras, sería así:
ArrayL(0) = 65  //----> "A"
ArrayL(1)= 66  // ----> "B"
...
ArrayL(25)= 90 // ----> "Z"

// el array de números, sería así:
ArrayN(0) = 48  // ----> "0"
ArrayN(0) = 49  // ----> "1"
...
ArrayN(9)= 57 // ----> "9"


Ahora solo tiene que elegir un valor entre 0 y 25 para las letras, y entre 0 y 9 para los números. Cada array contiene el valor numérico en la tabla ASCII para cada carácter.

Finalmente haz dos bucles, uno para elegir la letra al azar para los 3 primeros caracteres, y otro para elegir los números en las 2 posiciones finales:
Bucle para Letra de 0 a 2
   Palabra(Letra) = ArrayL(Azar(0,25))
Fin Bucle

Bucle para Numero de 3 a 4
    Palabra(Numero) = ArrayN(Azar(0,9))
Fin Bucle

Mostrar Palabra