aula 103

Como gerar números aleatórios para preencher um vetor com as funções rand() e srand()?

Seja muito bem vindo à aula de número 103 do nosso curso gratuito de programação com a linguagem C.

Ficar digitando números pelo teclado para testar nossos programas pode ser bem trabalhoso, especialmente com vetores maiores.

Uma função muito útil é a função rand() que vamos conhecer nesta aula.

Esta função serve para gerar valores aleatórios. Assim, ao fazermos uma repetição para preencher um vetor lendo valores do teclado, podemos apenas gerar valores para preencher nosso vetor, assim:

for(i = 0; i < tam; i++)
   vet[i] = rand();

Contudo, ao executar o programa algumas vezes, você irá perceber que são gerados sempre os mesmos valores. Por que isso ocorre?

A verdade é que não é possível gerar números completamente aleatórios, gerar números “do nada”. Precisamos partir de algo, de algum valor inicial.

Quem escreveu essa função definiu algum valor inicial que é utilizado para a geração dos números. São gerados sempre os mesmos valores porque é utilizado sempre esse valor padrão chamado de semente ou “seed” em inglês.

Para que seja gerada uma sequência diferente em cada execução, precisamos informar nossa semente, um valor que seja diferente em cada execução do nosso programa.

Um valor muito útil como semente é a hora do computador que será diferente em cada execução do programa, mesmo que em milésimos de segundos.

Para utilizar a hora do computador como semente, basta utilizar a função srand() uma única vez, como a seguir:

srand(time(null));

A função srand() altera a semente padrão pela nova semente recebida como parâmetro entre o par de parênteses.

Para obter a hora atual do computador, precisamos da biblioteca time.h. É esta biblioteca que possui a função que irá nos retornar a hora do computador: time(null).

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

int main() {

    int i;
    int num2[10];

    srand(time(NULL));

    for(i = 0; i < 10; i++)
        num2[i] = rand();

    printf("\n\n");
    for(i = 0; i < 10; i++)
        printf("%d ", num2[i]);
    printf("\n\n");

    return 0;
}

Deixe um comentário

17 + 7 =

Wagner Gaspar

Capixaba de São Gabriel da Palha, Espírito Santo. Bacharel em Ciência da Computação pela Universidade Federal do Amazonas e mestre em informática pela Universidade Federal do Espírito Santo.