AnswerBun.com

Faixa de números aleatórios em C

Stack Overflow em Português Asked by João Iora on September 21, 2020

Em um certo programa, preciso gerar um valor aleatório maior que 1000 (com um limite definido por mim para até 5000 (talvez ainda seja um valor muito elevado)). Este código único é referente a um tipo de cadastro a ser realizado. Após sanar algumas dúvidas do rand() % com um professor, chegamos a este código: 1000 + rand() % rand().

Seria suficiente para o que eu quero? E como eu poderia delimitá-lo para até 5000? Esta sendo a única parte que eu não consegui implementar.

3 Answers

A função rand() gera números pseudo-aleatórios entre 0 e (possivelmente) 32767 (dependendo de implementação pode ter maior amplitude).

1001 + ( rand() % 4000 ) //os parenteses estão aí só para deixar a precedência mais visível

Você diz que precisa de número acima de 1000, então o menor número possível que a expressão deve gerar é 1001. Como a função rand() tem como valor menor o zero, basta somar 1001 para alcançar o limite inferior considerando que estamos falando de números inteiros.

Para garantir que não venha nenhum número fora da faixa, dividimos o resultado da função pela quantidade de elementos possíveis na faixa. Se vai de 1001 à 5000, temos 4000 números possíveis na faixa desejada. Assim a divisão por 4000 pegará de 0 à 3999 inclusive.

Veja funcionando no ideone. E no repl.it. Também coloquei no GitHub para referência futura.

Correct answer by Maniero on September 21, 2020

Complemento da resposta do @Maniero

A função void srand (unsigned int seed)

  • Cada elemento de uma sequência pseudo-aleatória é gerado a partir do elemento anterior.
  • Como pode ser desejável repetir uma sequência pseudo-aleatórios em C sempre usa o mesmo primeiro elemento.
  • A função void srand (unsigned int seed) permite variar esse primeiro elemento, que serve como semente da sequência.

Usando o relógio como semente

  • A biblioteca time possui uma função time cujo resultado é um número de segundos transcorridos desde um momento fixado (00:00:00 UTC de 1 de janeiro de 1970).

  • Esse número pode ser usado como seed na chamada de srand para gerar uma semente variável e imprevisível.

    • O resultado de time tem um tipo time_t e deve ser convertido em unsigned int para que possa ser usado como argumento para srand.

    • A função time também requer um argumento que ao efeito dessa aplicação pode ser passado como null

    • srando((unsigned) time(NULL))

Exemplo:

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

int main(void)
{
   int numero_randomico;
   srand((unsigned) time(NULL));
   numero_randomico = 1001+(rand())%4000;
   ...
}

Answered by Joannis on September 21, 2020

Para gerar valores inteiros aleatórios em C no intervalo [a, b):

a + rand() % (b - a)

Por exemplo, x % 5 pode ser um dos valores 0, 1, 2, 3 ou 4. Então, quando fazemos rand() % (b - a) vamos gerar um numero entre 0 e b - a - 1.

Representando por intervalos:

[0, b - a - 1]

Agora, se você somar a a ambos os extremos do intervalo:

[a, b - 1]

Que e o intervalo que você quer (talvez tomando cuidado para inserir o 1 no extremo direito).

Answered by Lucas Virgili on September 21, 2020

Add your own answers!

Related Questions

Angular NG-FOR e NG-IF

1  Asked on October 21, 2020 by leonardo-vinicius

       

Gostaria de fazer uma consulta relacional com sequelize do tipo right join

0  Asked on October 20, 2020 by fabrcio-pinheiro-dos-santos

       

Persistir objeto em CRUD JSF + CDI + JPA

1  Asked on October 14, 2020 by gleison

         

CSS: Posicionamento header e body

1  Asked on October 9, 2020 by andr-machoski

         

Soma de 3 matrizes em uma nova matriz

2  Asked on October 8, 2020 by boltju

   

Como faço para retornar para “double” do df original?

2  Asked on October 7, 2020 by thaissa

   

Git fazer comits de código instavel é má prática?

2  Asked on October 3, 2020 by andre

 

Scanner não funcionando

1  Asked on September 28, 2020 by joo-vtor

     

Retorno Valor ID C# NpgsqlCommand

2  Asked on September 24, 2020 by himorrivel

     

Como alinhar corretamente uma galeria de itens com flexbox?

1  Asked on September 23, 2020 by ivan-ferrer

     

Recarregar Node_Modules no Angular

0  Asked on September 22, 2020 by bruno-maciel

         

Faixa de números aleatórios em C

3  Asked on September 21, 2020 by joo-iora

   

fadeToggle() não funciona corretamente

0  Asked on September 21, 2020 by igor

         

Problema com Datatables em Laravel 5.2

1  Asked on September 13, 2020 by ramonvicente

   

Ask a Question

Get help from others!

© 2022 AnswerBun.com. All rights reserved. Sites we Love: PCI Database, MenuIva, UKBizDB, Menu Kuliner, Sharing RPP