Como comparar um número gerado aleatorio em c

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; }

Pessoal me ajudem
Ei sei gerar numeros aleatorios com o Math.random

mas eu queria fazer o seguinte, tipo o usuario entra com 3 numeros, o computador gera 3 numeros e compara e fala se acertou ou errou

Oque eu faço?

Julio

Olá amigo!!!

Não entendi uma parte do seu problema… o usuário entra com 3 números… Tipo assim: 10,20,30???

Se for assim… tente o seguinte: [code]
public void geraNumero(){

Random random = new Random(); for (int i=0; i <= 10;i++){ numeroAleatorio = String.valueOf(random.nextInt(100)); }

// aqui vc coloca as variáveis que receberam o número digitado pelo usuário e cdompara com o numero gerado if (num1==numeroAleatorio || num2==numeroAleatorio||num3==numeroAleatorio){

JOptionPane.showMessageDialog(null, “BINGO”,“ACERTOU”,JOptionPane.INFORMATION_MESSAGE);

}[/code] Espero ter ajudado!!

Abraços

Cria um array com os 3 valores gerados pelo random.
depois vc pede para o usuario inserir 3 outros numeros… depois faça um for percorrendo um vetor e comparando!

import java.util.*; //importar as classes necessarias public class Numeros{ public void testarTresNumeros(int num1, int num2, int num3){ boolean numerosIguais = true; //fica falso se pelo menos um num for diferente int[] numeroGerado = new int[3]; //array para colocar num gerados int[] numeroEntrado = {num1, num2, num3}; //array com num entrados //gerar os numeros for(int i=0;i<3;i++){ numeroGerado[i] = (int)(Math.random()*10); // <- defina aqui a dimensão dos num } //verificar se TODOS os numeros são iguais int i=0, j=0; for(i=0; i<3;i++){ for(j=0; j<3; j++){ if(numeroEntrado[i] != numeroGerado[j]) { numerosIguais = false; j=3; i=3; } } } System.out.println("Numeros entrados: "+numeroEntrado[0]+", "+numeroEntrado[1]+", "+numeroEntrado[2]); System.out.println("Numeros gerados: "+numeroGerado[0]+", "+numeroGerado[1]+", "+numeroGerado[2]); if(numerosIguais==true) System.out.println("OS NUMEROS SÃO IGUAIS!"); else System.out.println("OS NUMEROS SÃO DIFERENTES!"); } public static void main(String[] args) throws Exception{ int num1=0, num2=0, num3=0; Scanner in; //leitura dos numeros introduzidos pelo utilizador for(int i=0; i<3; i++){ in = new Scanner(System.in); if(i==0) num1 = in.nextInt(); if(i==1) num2 = in.nextInt(); if(i==2) num3 = in.nextInt(); } //crie o objecto da classe Numeros Numeros n = new Numeros(); n.testarTresNumeros(num1, num2, num3); } }

Sorteie os numeros com a classe Random

Random rdm = new Random(); int numero = rdm.nextInt(100);//100 é o numero limite

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

Pular para a primeira mensagem não lida

Como comparar um número gerado aleatorio em c

não lida,

14 de ago. de 2014 21:49:1114/08/2014

Faça login para responder ao autor

Faça login para encaminhar

Você não tem permissão para excluir mensagens no grupo

Denunciar mensagem como abuso

Faça login para denunciar a mensagem por abuso

Mostrar mensagem original

Os endereços de e-mail são anônimos para o grupo ou a permissão para ver os endereços de e-mail dos participantes é necessária para ver a mensagem original.

para

Boa noite galera, sou novato em programação e estou adorando aprender C.

Porém estou com uma duvida que tento resolver já a um tempo e só piora cada vez que tento de novo e de novo rsrsrs. O problema é o seguinte, quero gerar números aleatórios e armazenar em um array, simples mas SEM REPETIÇÕES. Já tentei ver alguns códigos no google a fora, mas a maioria depois de alguns testes um numero se repete, ai fica fácil chegar no fórum falar que resolveu e postar algo sem que ninguém teste mais vezes. Meu código de quem esta começando (peguem leve) esta aqui conforme o link do pastebin [1].Agradeço qualquer luz que não seja algo mirabolante para um iniciante.

[1] http://pastebin.com/qA0yVsvG

ps: Adorei saber que existe uma lista de c/c++ e que se a duvida estiver algo fora dos conformes me avisem.

Como comparar um número gerado aleatorio em c

não lida,

14 de ago. de 2014 21:57:1814/08/2014

Faça login para responder ao autor

Faça login para encaminhar

Você não tem permissão para excluir mensagens no grupo

Denunciar mensagem como abuso

Faça login para denunciar a mensagem por abuso

Mostrar mensagem original

Os endereços de e-mail são anônimos para o grupo ou a permissão para ver os endereços de e-mail dos participantes é necessária para ver a mensagem original.

para

Já fiz algo parecido um ha muito tempo atras para gerar numero para jogo da loteria, porem com randomize sempre algum número irá repetir. O meio que fiz para contornar o problema foi dar sorte na lista e comparar todos com todos para ver se tinha algum repetido, caso tivesse geraria um novo e fazia a comparação novamente até não encontrar mais números repetidos. espero ter ajudado. > -- > Antes de enviar um e-mail para o grupo leia:

> http://www.ccppbrasil.org/wiki/Lista:AntesdePerguntar

> --~--~---------~--~----~------------------------------

> [&] C & C++ Brasil - http://www.ccppbrasil.org/

> Para sair dessa lista, envie um e-mail para

>


> Para mais opções, visite http://groups.google.com/group/ccppbrasil > --~--~---------~--~----~--~-~--~---~----~------------

Como comparar um número gerado aleatorio em c

não lida,

14 de ago. de 2014 22:01:2914/08/2014

Faça login para responder ao autor

Faça login para encaminhar

Você não tem permissão para excluir mensagens no grupo

Denunciar mensagem como abuso

Faça login para denunciar a mensagem por abuso

Mostrar mensagem original

Os endereços de e-mail são anônimos para o grupo ou a permissão para ver os endereços de e-mail dos participantes é necessária para ver a mensagem original.

para

Como comparar um número gerado aleatorio em c

não lida,

14 de ago. de 2014 22:35:0014/08/2014

Faça login para responder ao autor

Faça login para encaminhar

Você não tem permissão para excluir mensagens no grupo

Denunciar mensagem como abuso

Faça login para denunciar a mensagem por abuso

Mostrar mensagem original

Os endereços de e-mail são anônimos para o grupo ou a permissão para ver os endereços de e-mail dos participantes é necessária para ver a mensagem original.

para

Não conheço nenhuma solução pronta, mas para vetores pequenos você pode sempre comparar elemento a elemento do seu vetor para ver se este número já fora sorteado. Já para vetores maiores começa a ficar custoso e pode complicar.

Tem uma solução que eu vi numa dessas maratonas de programação que mostrava um método de gerar números aleatórios que era assim:

SEED = um numero que não seja múltiplo de MAX

MAX = valor máximo a ser gerado

Valor_Random = (Valor_Random + SEED ) % MAX

Se o SEED não for múltiplo de MAX ele irá gerar valores "aleatorios" sem repetição até não ter mais possibilidades, aí ele começa a série novamente.

Valor_Random = (Valor_Random + 3333) % 444

Série gerada para valor inicial de Valor_Random = 0:
225, 6, 231, 12, 237, 18.... 221, 0, 225

Desvantagem: Aleatoriedade é bem "fraquinha"

Como comparar um número gerado aleatorio em c

não lida,

14 de ago. de 2014 23:02:4514/08/2014

Faça login para responder ao autor

Faça login para encaminhar

Você não tem permissão para excluir mensagens no grupo

Denunciar mensagem como abuso

Faça login para denunciar a mensagem por abuso

Mostrar mensagem original

Os endereços de e-mail são anônimos para o grupo ou a permissão para ver os endereços de e-mail dos participantes é necessária para ver a mensagem original.

para

Não sei como fazer, até porque no C++ foram criadas novas classes para isso.

Exemplo abaixo se quiserem ver é algo que eu escrevi enquanto estava estudando, sinceramente fui olhar e nem eu entendi, mas está bem escrito. Demostra justamente as novas engines e acho que usei distribuição também. Esse rand do C é muito fraco e você vai precisar mais do que um simples % para fazer algo realmente randomico.

https://github.com/malkaviano/CPP/blob/master/Random_int.h e .cpp

Pensando agora, deveria ter convertido em template... Coisas de aprendiz.

Essa é minha contribuição ao comentário do 'Skhaz'.

Como comparar um número gerado aleatorio em c

não lida,

15 de ago. de 2014 08:00:1515/08/2014

Faça login para responder ao autor

Faça login para encaminhar

Você não tem permissão para excluir mensagens no grupo

Denunciar mensagem como abuso

Faça login para denunciar a mensagem por abuso

Mostrar mensagem original

Os endereços de e-mail são anônimos para o grupo ou a permissão para ver os endereços de e-mail dos participantes é necessária para ver a mensagem original.

para

Outra maneira de fazer é criar um array de 25 elementos; onde cada elemento é um par de um contador (1..25) e o outro é um número aleatório qualquer... aí vc ordena o array com qqr sort que vc tiver pelo segundo elemento. O seus 1..25 vão estar então em uma ordem aleatória e com certeza não vai estar repetido.

Como comparar um número gerado aleatorio em c

não lida,

15 de ago. de 2014 08:11:0815/08/2014

Faça login para responder ao autor

Faça login para encaminhar

Você não tem permissão para excluir mensagens no grupo

Denunciar mensagem como abuso

Faça login para denunciar a mensagem por abuso

Mostrar mensagem original

Os endereços de e-mail são anônimos para o grupo ou a permissão para ver os endereços de e-mail dos participantes é necessária para ver a mensagem original.

para

Você esta sugerindo um shuffle então?

Parece interessante. Mas dai já se sabem os valores "sorteados", mesmo que não a ordem. 

No caso da megasena seria inviável. Pois são seis números num range 1..60. Usando seu exemplo ficariam 6 números do 1 ao 6 só que sem ordem. 

Como comparar um número gerado aleatorio em c

não lida,

15 de ago. de 2014 08:13:1315/08/2014

Faça login para responder ao autor

Faça login para encaminhar

Você não tem permissão para excluir mensagens no grupo

Denunciar mensagem como abuso

Faça login para denunciar a mensagem por abuso

Mostrar mensagem original

Os endereços de e-mail são anônimos para o grupo ou a permissão para ver os endereços de e-mail dos participantes é necessária para ver a mensagem original.

para

Não. No meu caso seria um array de 60 elementos, de 1..60. O ponto é exatamente ter um array com cada elemento representando uma das bolas. Vc aleatoriza a ordem, e pega os 6 primeiros.

Como comparar um número gerado aleatorio em c

não lida,

15 de ago. de 2014 08:24:4215/08/2014

Faça login para responder ao autor

Faça login para encaminhar

Você não tem permissão para excluir mensagens no grupo

Denunciar mensagem como abuso

Faça login para denunciar a mensagem por abuso

Mostrar mensagem original

Os endereços de e-mail são anônimos para o grupo ou a permissão para ver os endereços de e-mail dos participantes é necessária para ver a mensagem original.

para

Entendi. Ficaria O(n). Gostei. 

Bem melhor do que iterar e verificar a cada gerado pelos atuais. 

Como comparar um número gerado aleatorio em c

não lida,

15 de ago. de 2014 09:13:2615/08/2014

Faça login para responder ao autor

Faça login para encaminhar

Você não tem permissão para excluir mensagens no grupo

Denunciar mensagem como abuso

Faça login para denunciar a mensagem por abuso

Mostrar mensagem original

Os endereços de e-mail são anônimos para o grupo ou a permissão para ver os endereços de e-mail dos participantes é necessária para ver a mensagem original.

para

Uma opção seria: int size = ...; int a = ...; int b = ...; std::random_device rd; std::mt19937 gen(rd()); std::uniform_int_distribution<> dis(a, b); std::set<int> s; int n = 0; while (n != size) { auto pair = s.insert(dis(gen)); if (pair.second) break; ++n; } std::copy(std::begin(s), std::end(s), std::ostream_iterator<int>(std::cout, " ")); Em vez de copiar pra tela você manda pra umvetor por exemplo. Vai terminar com os números aleatórios ordenados no seu vetor sem repetição. Normalmente o std::set tem um desempenho ruim e talvez você queira escrever seu próprio set ou usar alternativos. Marcelo Em 15 de agosto de 2014 09:24, Rodrigo Madera

<> escreveu:


Como comparar um número gerado aleatorio em c

não lida,

15 de ago. de 2014 14:22:1715/08/2014

Faça login para responder ao autor

Faça login para encaminhar

Você não tem permissão para excluir mensagens no grupo

Denunciar mensagem como abuso

Faça login para denunciar a mensagem por abuso

Mostrar mensagem original

Os endereços de e-mail são anônimos para o grupo ou a permissão para ver os endereços de e-mail dos participantes é necessária para ver a mensagem original.

para

On Thursday, August 14, 2014 10:49:11 PM UTC-3, Davi mendes wrote:

Boa noite galera, sou novato em programação e estou adorando aprender C.

#include <stdlib.h> // srand, rand, rand_max para gerar numeros pseudo aleatorios.            

#include <time.h>  // time usado para ALIMENTAR a SEED.

int numerosLotoFacil[MAX], i, j;                                                              

srand(time(NULL)); // srand ALIMENTA a rand. parametro é o tempo atual.                      

    {numerosLotoFacil[i] = i+1;}                                                              

    j = MAX - (rand() % (MAX - i)) -1; // gera um numero.                                     

    int tmp = numerosLotoFacil[j];                                                            

    numerosLotoFacil[j] = numerosLotoFacil[i];                                                

    numerosLotoFacil[i] = tmp;                                                                

    printf("número pseudo aleatório : %d\n", numerosLotoFacil[i]);                        


Como comparar um número gerado aleatorio em c

não lida,

15 de ago. de 2014 21:21:2815/08/2014

Faça login para responder ao autor

Faça login para encaminhar

Você não tem permissão para excluir mensagens no grupo

Denunciar mensagem como abuso

Faça login para denunciar a mensagem por abuso

Mostrar mensagem original

Os endereços de e-mail são anônimos para o grupo ou a permissão para ver os endereços de e-mail dos participantes é necessária para ver a mensagem original.

para

Como comparar um número gerado aleatorio em c

não lida,

16 de ago. de 2014 00:52:0216/08/2014

Faça login para responder ao autor

Faça login para encaminhar

Você não tem permissão para excluir mensagens no grupo

Denunciar mensagem como abuso

Faça login para denunciar a mensagem por abuso

Mostrar mensagem original

Os endereços de e-mail são anônimos para o grupo ou a permissão para ver os endereços de e-mail dos participantes é necessária para ver a mensagem original.

para