aula 125

Como gerar números aleatórios com a função rand() sem repetição?

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

Nesta aula irei responder uma dúvida postada na aula 104: como preencher um vetor gerando números com a função rand() sem repetição?

Ao gerar uma sequência de números aleatórios não há nenhuma garantia de que algum número na sequência não vá se repetir. Você, enquanto programador, precisa garantir que, ao sortear um valor repetido, este não seja inserido no vetor.

Seguindo esse pensamento, para cada novo valor sorteado precisamos percorrer a parte já preenchida do nosso vetor procurando pelo número que acabou se ser sorteado. Caso ele já exista, deve ser descartado e outro valor deve ser sorteado, caso contrário, pode ser inserido no vetor.

É esta lógica que iremos implementar na aula de hoje.

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

int main() {

    int i = 0, j, igual, vet[25];

    srand(time(NULL));

    do{ // faça
        vet[i] = rand() % 30; // sorteia um número
        igual = 0;
        for(j = 0; j < i; j++){ // percorre a parte do vetor já preenchida
            if(vet[j] == vet[i])
                igual = 1; // número repetido
        }

        if(igual == 0) // significa que o elemento não se repetiu
            i++;
    }while(i < 25); // enquanto não for sorteado 25 números diferentes

    for(i = 0; i < 25; i++){
        printf("%d ", vet[i]);
    }
    printf("\n\n");

    return 0;
}

Deixe um comentário

cinco × 2 =

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.