Jump to content
  • Revista PROGRAMAR: Já está disponível a edição #60 da revista programar. Faz já o download aqui!

arjc

Gerador de números aleatórios em C

Recommended Posts

arjc

Precisava de uma funçao que me desse um numero aleatório i, entre 0 e 19.

Tenho como ponto de partida a seguinte função:

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

int secreto(int mod)
{  // Usa o gerador de números aleatórios do C
    static bool primeira_vez = true; // Variável estática - a estudar no futuro
    if (primeira_vez) {
        primeira_vez = false;
        srand(time(NULL));          // Inicializa o gerador só da primeira vez
    }
    return rand() % mod;            // Chama o gerador
}

Mas nao sei o qe alterar....

Agradecia qualquer ajuda 

:)

Share this post


Link to post
Share on other sites
pmg

A função parece bem (não testei).

Porque é que achas que ela não funciona?

Já experimentaste chamá-la com secreto(20)?

printf("%d\n", secreto(20));


What have you tried?

Não respondo a dúvidas por PM

A minha bola de cristal está para compor; deve ficar pronta para a semana.

Torna os teus tópicos mais atractivos e legíveis usando a tag CODE para colorir o código!

Share this post


Link to post
Share on other sites
NovataC

Também precisava de um programa semelhante; copiei este mas ao substituir por 20, como sugerido, dá sempre erro...e também não sei como fazer a função main:(

Há alguém mais experiente que possa ajudar?

Share this post


Link to post
Share on other sites
pmg

Qual é o erro?

No meu computador, o código funciona.


What have you tried?

Não respondo a dúvidas por PM

A minha bola de cristal está para compor; deve ficar pronta para a semana.

Torna os teus tópicos mais atractivos e legíveis usando a tag CODE para colorir o código!

Share this post


Link to post
Share on other sites
NovataC

Eu continuo a não conseguir...

Fiz assim:

int secreto(int 20)// SE TIRAR O int TB NãO DÁ

{  // Usa o gerador de números aleatórios do C

    static bool primeira_vez = true;

    if (primeira_vez) {

        primeira_vez = false;

        srand(time(NULL));         

    }

    return rand() % 20;            // Chama o gerador

}

HELP ME!!!

Share this post


Link to post
Share on other sites
Tharis

@NovataC,

não é suposto dentro dos parêntesis a seguir a int secreto estarem os parâmetros da função? Desde quando é que variáveis são feitas só por dígitos?

int secreto(int mod);

Assim estaria bem. (não sei se funciona, só estou a corrigir o header da função.

Share this post


Link to post
Share on other sites
pmg

$ cat rnd.c
#include <stdbool.h>
#include <stdlib.h>
#include <time.h>
#include <stdio.h>

int secreto(int mod)
{  // Usa o gerador de números aleatórios do C
    static bool primeira_vez = true; // Variável estática - a estudar no futuro
    if (primeira_vez) {
        primeira_vez = false;
        srand(time(NULL));          // Inicializa o gerador só da primeira vez
    }
    return rand() % mod;            // Chama o gerador
}

int main(void) {
  int k;
  for (k=0; k<100; k++) {
    printf("%d ", secreto(20));
  }
  return 0;
}

$ /usr/bin/gcc -Wextra -Wall -Wformat=2 -Wswitch-default -Wcast-align -Wpointer-arith -Wbad-function-cast -Wstrict-prototypes -Winline -Wundef -Wnested-externs -Wcast-qual -Wshadow -Wwrite-strings -ffloat-store -fno-common -lm -std=c99 -pedantic -O0 -g3 rnd.c

$ ./a.out
8 3 15 18 7 3 14 0 2 6 11 3 7 6 8 12 4 6 13 12 2 15 2 2 17 12 10 18 6 7 17 15 2 5 5 9 0 19 2 2 6 13 17 13 11 17 17 16 3 10 8 17 17 2 11 15 15 2 13 1 1 3 8 3 0 13 5 12 13 7 6 11 12 3 16 4 0 13 12 15 15 12 12 12 15 3 7 2 17 13 15 18 8 4 2 0 17 7 12 2 

$

Outra vez ... qual é o erro?


What have you tried?

Não respondo a dúvidas por PM

A minha bola de cristal está para compor; deve ficar pronta para a semana.

Torna os teus tópicos mais atractivos e legíveis usando a tag CODE para colorir o código!

Share this post


Link to post
Share on other sites
_deXter

Pessoal... A funcao secreto está bem definida, ela devolve um valor aleatório entre 0 e o parametro que lhe passarem - 1.

A única coisa que é preciso fazer é colocar uma chamada (ou quantas quiserem) a essa função com o parametro "20" (neste caso) no main e conforme quiserem fazer output ou não do inteiro devolvido, tal como o pmg demonstra no código dele.

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

×

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.