char *RolaMoeda (void) {
int r;
r = rand () % 2;
if (r == 1) return "cara";
else return "coroa";
}
/* se o número aleatório gerado por rand() for ímpar, devolve 1, caso contrário
devolve 0 */
Este programa utiliza a função de forma satisfatória:
# include <stdio.h>
# include <stdlib.h>
# include <time.h>
# define N 4
int main ()
{
int i;
srand(time(NULL));
for (i = 0; i < N; i++)
printf ("%s\n", RolaMoeda());
return 0;
}
Esta função promete sumular o lançamento de uma moeda. Segunda a página do prof. Ffeoffiilloff existe um erro. Alguém sabe qual?
Como a funcao rand() é meio roubada, tirar % 2 nao é muito bom,
o jeito aconselhado a gerar um numero 'aleatorio' entre 0 e n , é :
x = n * ( (double) (1.0*rand()) / (double) (1.0*RAND_MAX + 1.0)) );
algo assim.
o jeito aconselhado a gerar um numero 'aleatorio' entre 0 e n , é :
x = n * ( (double) (1.0*rand()) / (double) (1.0*RAND_MAX + 1.0)) );
algo assim.
Ele não poderia , por exemplo, chamar o resultado (0,1) de cara e o (1,0) de coroa? dai ele geraria dois numeros aleatorios. Se aparecesse (0,0) ou (1,1) o programa geraria denovo, até aparecer (0,1) ou (1,0) eu acho que isso faria o programa realmente simular uma moeda.
Isso não é ineficiente não? Já pensou que para cada dois resultados afirmativos ( cara ou coroa ) espera-se dois negativos? Se você for simular o lançamento de 1 milhão de moedas você vai ter que gerar ( num caso uniforme ) 4 milhões de números pseudo-aleatórios? Melhor usar o método ruim do que fazer pelo seu método.
Se quiser algo realmente aleatório, faça o seu programa consumir o serviço de http://random.org . Para até uma quantidade de números é de graça.
Até!
Se quiser algo realmente aleatório, faça o seu programa consumir o serviço de http://random.org . Para até uma quantidade de números é de graça.
Até!
Mas ele falou de uma moeda =P
Pode ser um pouco ineficiente, mas eh uma moeda 100% honesta!! ^^
OMG!!! EP2!!! Pegadinha do mallandro?
Pode ser um pouco ineficiente, mas eh uma moeda 100% honesta!! ^^
OMG!!! EP2!!! Pegadinha do mallandro?
100% honesta não é porque os números gerados são pseudo-aleatórios. É como se você pudesse prever quantas voltas vai dar sua moeda no ar antes dela realmente cair e você verificar o resultado.
Até!
Até!