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

arjc

Gerador de números aleatórios em C

9 mensagens neste tópico

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 

:)

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

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

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

já tentei essa substituição mas dá erro ...

Fico à espera de mais esclarecimentos pff

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

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?

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

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!!!

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

@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.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

$ 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?

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

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.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!


Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.


Entrar Agora