Enviar um café pro programador

Pode me ajudar a transformar cafeína em código?

Gerando números aleatórios em C: rand, srand e seed

Você pode nunca ter ficado atento para isso, mas números aleatórios são vitais em praticamente todos os ramos da computação;

Em jogos que você joga contra os inimigos, como eles sempre aparecem em posições e lugares diferentes? Simples, eles aparecem aleatoriamente.

Quando vai jogar Age of Empires, por que o local onde sua civilização começa é sempre diferente? Simples, o local foi escolhido aleatoriamente.

E por aí vai. Se é importante e é muito usado, é óbvio que o curso C Progressivo vai ensinar, e agora, neste tutorial de C de nossa apostila.

Números aleatórios em C

À rigor,  não existem números aleatórios em Computação. Computadores não pensam ou sorteiam. Computadores obedecem a comandos. O que eles fazem é o mesmo que seus programas fazem: entram laços, loopings, testes condicionais etc (obviamente, mais complexamente, mas à rigor, fazem o mesmo).

Então, os computadores também usam algoritmos e códigos para gerarem esses números que devem ser, teoricamente, aleatórios. Porém, nunca serão totalmente aleatórios, pois são gerados por código, por funções e tarefas específicas

O que vamos falar, na verdade, é sobre números pseudo-aleatórios. São funções e algoritmos matemáticos complexos, e ainda é um tema bastante utilizado ainda hoje.
Porém, isso foge do objetivo de nossa apostila online de C.

Uma boa tentativa de deixarem os números mais aleatórios possíveis, ‘alimentar’ seu algoritmo com números diferentes. Obviamente, o código de uma função que gera números aleatórios é sempre o mesmo, mas se você fornecer números diferentes, ela vai gerar seqüencias diferentes de números aleatórios.

Esses números que fornecemos são chamados de semente, ou seed.
E vamos usar o tempo (sim, o tempo cronológico), como semente.


A função rand() - Gerando números aleatórios

Pois bem, agora que você já sabe a importância dos números aleatórios no mundo da programação, e no da computação em geral, vamos iniciar nossos estudos

Vamos iniciar mostrando uma função que é comumente usada.
Porém, não vamos usá-la na maneira padrão, pois como vamos mostrar logo mais, há alguns problemas e ajustes necessários a se fazer.

A função que gera números aleatórios em C é a rand().

Ela gera números entre 0 e RAND_MAX, onde esse RAND_MAX é um valor que pode variar de máquina pra máquina.

Pra usar a função rand(), temos que adicionar a biblioteca time.h e para saber o valor de RAND_MAX, temos que usar a função stdlib.h.

Veja um programa que gera 10 números aleatórios em C:

#include <stdio.h>
#include <stdlib.h>
#include <time.h>
 
int main(void)
{
    int i;
    printf("intervalo da rand: [0,%d]\n", RAND_MAX);
 
    for(i=1 ; i <= 10 ; i++) 
        printf("Numero %d: %d\n",i, rand());
 
}


Alimentando a rand() com a srand() : seed

Parece tudo ok, não? Veja os números gerados no exemplo passado.

Agora feche e rode o programa novamente. E de novo, de novo...notou?
(não vale enrolar! teste mesmo!)

A seqüência gerada é sempre a mesma. Para mudar isso, vamos alimentar a função rand() com uma semente, com um número, que é o tempo atual.

Assim, toda vez que rodarmos o programa, a rand() pega um número de tempo diferente e gera uma seqüencia diferente.
Para fazer isso, basta usar a função srand(), que será responsável por alimentar a rand(). Fazemos isso adicionando o comando: srand( (unsigned)time(NULL) ); antes da rand().

E agora nosso aplicativo em C gera uma seqüencia diferente toda vez que rodamos:

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

int main()
{
    int i;
    printf("intervalo da rand: [0,%d]\n", RAND_MAX);
    srand( (unsigned)time(NULL) );

    for(i=1 ; i <= 10 ; i++)
        printf("Numero %d: %d\n",i, rand());
}


Escolhendo uma faixa de números aleatórios em C

Ok, agora você é mestre nas artes de geração aleatória de números em linguagem C.
Porém, seu código gera números entre 0 e RAND_MAX.

E se você quiser gerar entre 0 e 10? Ou entre 1 e mil?
Ou entre 0.00 e 1.00?

Para escolher a faixa de valores vamos usar operações matemáticas, principalmente o operador de módulo, também conhecido como resto da divisão: %

Para fazer com que um número ‘x’ receba um valor entre 0 e 9, fazemos:
x = rand() % 10

Para fazer com que um número ‘x’ receba um valor entre 1 e 10, fazemos:
x = 1 + ( rand() % 10 )

Para fazer com que um número ‘x’ receba um valor entre 0.00 e 1.00, primeiro geramos números inteiros, entre 0 e 100:
x = rand() % 101

Para ter os valores decimais, dividimos por 100:
x = x/100;

Fácil, não?
Pois bem, com os conhecimentos adquiridos até o momento, já podemos criar um jogo em que nós mesmos poderemos jogar e mandar para os amigos.



Como criar um Jogo em linguagem C

Crie um jogo, em C, que sorteia um número entre 1 e mil.
O jogador deve tentar acertar o número sorteado.

Se ele errar, o programa deve dizer se o número sorteado é maior ou menor que o número que o jogador tentou.

Ao acertar o número sorteado, o programa deverá dizer em quantas tentativas o usuário acertou.

Você consegue pensar na melhor estratégia para esse jogo?

72 comentários:

The Ideas Factory disse...

E se eu quiser gerar números entre [-1 , 2]?

Apostila C Progressivo disse...

Olá Marcelo,

Se atente sempre aos intervalos.
Você quer gerar números entre -1 e 2, que é um intervalo de 3 números.

Gere, então, números entre: [0,3]
Depois, subtraia o resultado de -1
Terá números entre [-1, 2]

Anônimo disse...

O meu ficou assim....

#include
#include
int menu();
int tentativas();
int sorteio();

int main()
{
sorteio();
return 0;
}

int menu()
{
int a;
printf("\n\t\tGame de Tentativa e Erro\n\nTente Acertar o Numero entre 0 e 1000\nDigite um numero: ");
scanf("%d",&a);
return a;
}
int tentativas()
{
int x;
srand((unsigned)time(NULL));
x=rand()%1001;
return x;
}
int sorteio()
{
int b=0, c, d=tentativas();
do
{
c=menu();
b++;
if(cd)
{
printf("\n\nEsse Numero e MAIOR...");
getch();
system("cls||clear");
}
}while(c!=d);
printf("\n\n\tVOCE ACERTOU O NUMERO :D!!!!!\n\t %d\n\t %d Tentativas",d,b);
getch();
}

Giobrit disse...

Minha tentativa espero que gostem!
:)

#include
#include
#include
#include

//autor: Giobrit

#define cor_programa "color 17"
#define limpa_tela "cls"

int valor_sorteado,tentativas[1000],indice=-1,cont=0; //variaveis globais

void boas_vindas(){
printf(" __________________________________________________________\n");
printf("| |\n");
printf("| ->Bem vindo<- |\n");
printf("| |\n");
printf("| O objetivo deste jogo eh acertar um numero entre |\n");
printf("| 1 e 1000 no menor numero de tentativas, |\n");
printf("| |\n");
printf("| Atencao o programa indicara se a tentativa eh |\n");
printf("| maior ou menor que a resposta! |\n");
printf("| |\n");
printf("| Autor: Giobrit |\n");
printf("|__________________________________________________________|\n");
getch();
system(limpa_tela);
}

int sorteia_valor(int *valor){
srand(time(NULL));
*valor = 1+(rand()%1000);
}

void mostra_tentativas(int mostrar){
printf("%d\t",mostrar);
}

int pergunta_usuario(int *numero){

printf("\n\n\n\n Informe uma tentativa: ");
scanf("%d",&*numero);
}

void maior_menor(int ma_me){
printf("\n\n ");

if(ma_me > valor_sorteado){
printf("A sua tentativa eh maior eh o numero sorteado");
sleep(3);
}

if(ma_me < valor_sorteado){
printf("A sua tentativa eh menor eh o numero sorteado");
sleep(3);
}

}

int main()
{
system(cor_programa);

boas_vindas();

sorteia_valor(&valor_sorteado);


do{
system(limpa_tela);

for(cont=0;cont<=indice;cont++)
mostra_tentativas(tentativas[cont]);
indice ++;

pergunta_usuario(&tentativas[indice]);

maior_menor(tentativas[indice]);

}while(tentativas[indice]!=valor_sorteado);

system(limpa_tela);

printf("\n\n\n Parabens vc acertou em %d tentativas!!!",indice+1);

}

Caique Portela disse...

Fiz o meu da maneira que acho mais simples... não gosto de ficar usando WHILE/DO WHILE para ficar criando menus, acho desnecessário. Olhem:



#include

int random,
tentativas=0,
num;

int main()
{
srand(time(NULL));
random=(rand()%1001);

init();
}

void init()
{
printf("\t\tBem-vindo(a)! Tente sua sorte nesse incrivel jogo.\n");
printf("\t\tUm n%cmero aleatorio foi gerado, e voc%c ter%c que descobri-lo!\n\n",163,136,160);

jogo();
}

jogo()
{
printf("Digite o n%cmero que voce acha que %c o correto: ",163,130);
scanf("%d",&num);

verifica(num);
}

void verifica(int num)
{
system("clear || cls");
char *ret;
if(num == random)
{
printf("Parab%cns! Voc%c acertou o n%cmero correto em %d tentativas.",130,136,163,(tentativas+1));
}
else
{
if(num < random)
{
printf("Voc%c errou! O n%cmero correto %c maior que %d\n\n",136,163,130,num);
errou();
}
else
{
if(num > random)
{
printf("Voc%c errou! O n%cmero correto %c menor que %d\n\n",136,163,130,num);
errou();
}
}
}
}

void errou()
{
tentativas++;
jogo();
}



Obs: Está com os acentos funcionando em códigos binários da tabela ASCII.

Anônimo disse...

como gerar numeros aleatorios de 0 a 1 bilhao?

Vabilo disse...

E se eu quiser gerar numeros de 0 a 1 bilhão?

Tenho que fazer isso, porem não estou achando...

Apostila C Progressivo disse...

Gabriel, tentou usar o que ensinamos na parte "Escolhendo uma faixa de números aleatórios em C" ?

Renan disse...

E se eu quiser somar esses aleatorios? por exemplo, alguns numeros aleatorios entre 1 e 10, e quero soma-los? eu fiz como vetor mas não ta somando correto
--------------------------------
#include
#include
#include
#define RAND_MAX 1000000
main(){

int i,n,soma=0, vet[5];

printf("intervalo de rand: [0, %d]\n",RAND_MAX);
srand((unsigned)time(NULL));

for (i=1; i<6;i++){
printf("%d\n", rand()%10);
vet[i] = rand()%10;
soma = soma + vet[i];
}
printf("\n A soma dos 5 elementos: %d", soma);



}

Alexandre disse...

#include
#include

main(){


int ale;
int conta=0;
int valor=0;

srand((unsigned) time(NULL));
ale=1+rand()%10000;

printf("Bem vindo ao jogo!!!\n");
printf("Nos sortemas um numero aleatorio entre 1 e 1000. Tente acerta-lo\n");


do{
printf("Informe um numero: \n");
scanf("%d",&valor);

if(valor>ale)
printf("O numero que voce digitou e maior que o gerado\n");
else
if (valor<ale)
printf("O numero que voce digitou e menor que o gerado\n");


conta++;
}

while (valor!=ale);

printf("Parabens!! Voce acertou com %d tentativas",conta);
}

Anônimo disse...

#include
#include
#include

void main()

{

int num,x;
int tent=0;

srand(time(NULL));
x=rand()%100;

do

{
printf("\nDigite um numero: ");
scanf("%d",&num);

if (num>x)

{

printf("O numero e menor que %d\n\n",num);

}

else

{

if (num<x)

printf("O numero e maior que %d\n\n",num);

else

{

printf("\n\nACERTOU!!");
printf("\nNumero de tentativas: %d",tent);

}
}

tent++;

}

while (num!=x);

}

Unknown disse...

Muito esse site.....

Anônimo disse...

Quero que saia um tipo diferente por pessoa, mas por algum motivo esta saindo o mesmo tipo para todos:

#include
#include
#include 9
using namespace std;

/* run this program using the console pauser or add your own getch, system("pause") or input loop */

int main(int argc, char** argv) {
int x, i;
string vet[18];

vet[0] = "Bug";
vet[1] = "Rock";
vet[2] = "Steel";
vet[3] = "Flying";
vet[4] = "Fire";
vet[5] = "Dragon";
vet[6] = "Normal";
vet[7] = "Fighting";
vet[8] = "Electric";
vet[9] = "Rock";
vet[10] = "Water";
vet[11] = "Ground";
vet[12] = "Grass";
vet[13] = "Fairy";
vet[14] = "Ice";
vet[15] = "Poison";
vet[16] = "Dark";
vet[17] = "Ghost";


srand( (unsigned)time(NULL) );
x = rand() % 18;
cout<<"Player1 was the choosen of "<<vet[x]<<" type.\n";
srand( (unsigned)time(NULL) );
x = rand() % 18;
cout<<"Player2 was the choosen of "<<vet[x]<<" type.\n";
srand( (unsigned)time(NULL) );
x = rand() % 18;
cout<<"Player3 was the choosen of "<<vet[x]<<" type.\n";
srand( (unsigned)time(NULL) );
x = rand() % 18;
cout<<"Player4 was the choosen of "<<vet[x]<<" type.\n";
srand( (unsigned)time(NULL) );
x = rand() % 18;
cout<<"Player5 was the choosen of "<<vet[x]<<" type.\n";
srand( (unsigned)time(NULL) );
x = rand() % 18;
cout<<"Player6 was the choosen of "<<vet[x]<<" type.\n";

return 0;
}

Unknown disse...

Como eu defino o intervalo ? Deixa eu ser mais claro, quero gerar números entre 8 e 9. Ou Sai 8 ou sai 9, já tentei colocar rand()%(8|9) mas não geram apenas números entre oito e nove.

Apostila C Progressivo disse...

Olá Pablo,

Leia a última parte do artigo, sobre como escolher a faixa de números.

Para você definir sua faixa de números com a rand, você deve fazer algumas manipulações matemáticas.

No seu caso, gere números entre 80 e 90, e depois dividida por 10, assim terá números entre 8 e 9 com uma casa decimal.

Se quiser números com duas casas decimais, gere números entre 800 e 900 e depois divida por 100.

Anônimo disse...

Muito obrigada pelo seu texto!! Fiz aula disso em universidades ditas de primeiro mundo e a explicação não chegou aos pés da sua. PARABÉNS e obrigada novamente!

Unknown disse...

Muito obrigado ! Eu consegui resolver !

Anônimo disse...

Ou tem como fazer o programa gerar não só números mas também misturar letras tipo numa sequencia de 12 caracteres aleatórios?

Anônimo disse...

O jogo de adivinhação que eu criei ficou assim :


#include
#include
#include
#include
#include
#include
#include

#define N 5

using namespace std;

int main(){


textcolor(2);

_tsetlocale(LC_ALL, _T("portuguese_brazil"));

/* */
HANDLE hOut = GetStdHandle(STD_OUTPUT_HANDLE);
CONSOLE_CURSOR_INFO CCI;
GetConsoleCursorInfo(hOut, &CCI);
CCI.bVisible = false;
SetConsoleCursorInfo(hOut, &CCI);
/* */



/* */
system ("title JOGO DA ADIVINHAÇÃO");
system("mode con:cols=140 lines=65");
/* */

char jda[25]="JOGO DA ADIVINHAÇÃO !!!";
int cdt;

char pva[40]="PARABÉNS !!! VOCÊ ACERTOU O NOME EM";

Sleep (1500);
printf ("\n\n\t\t\tBem");
Sleep (1500);
printf (" Vindo");
Sleep (1500);
printf (" Ao");
Sleep (1500);
printf (" ...");
Sleep (2250);
clrscr();
Sleep (2700);

printf ("\n\n\n\n\n\n\n\t\t\t\t\t\t%s",jda);
Sleep (3000);
system ("cls");

for (cdt=0; cdt<6; cdt++){
printf ("\n\n\n\n\n\n\n\t\t\t\t\t\t%s",jda);
Sleep (500);
clrscr();
Sleep (500);

}

/* */
textcolor(7);
textbackground (1);
system ("color 17");
system ("color 17");

printf ("Aperte qualquer tecla para iniciar o jogo...");
system ("pause>nul");
clrscr();
/* */
/* */
char n0[15]="alex", n1[15]="alexandre", n2[15]="amanda", n3[15]="anderson", n4[15]="arthur", n5[15]="bruno", n6[15]="cleyton";
char n7[15]="daniel", n8[15]="danilo", n9[15]="erika", n10[15]="francimar", n11[15]="guilherme", n12[15]="isabella", n13[15]="jeanderson";
char n14[15]="jessica", n15[15]="lilian", n16[15]="lucas", n17[15]="luis", n18[15]="marcos", n19[15]="thayna", n20[15]="victor";
int idn;

char grupo_de_nomes [200]="\n\tAlex\t\tDaniel\t\tJessica\n\tAlexandre\tDanilo\t\tLilian\n\tAmanda\t\tErika\t\tLucas\n\tAnderson\tFrancimar\tLuis\n\tArthur\t\tGuilherme\tMarcos\n\tBruno\t\tIsabella\tThayna\n\tCleyton\t\tJeanderson\tVictor";
char aposta[30];

int i , op , jog_niv , rec_niv , op_jog_niv1;
int rec_n1=-1, rec_n2=1000000, rec_n3=1000000;

/* */

Anônimo disse...

do{
char n_c[15];
int n_ten=0;
int completou=-1;

clrscr();

printf ("\n\n\n\n\t\tMENU\n\n\n\n\t2) = RECORDES\n\n\t1) = JOGAR\n\n\t0) = FINALIZAR JOGO E PROGRAMA");
printf ("\n\n\n ");
scanf ("%i",&op);

rec_niv=-1;
jog_niv=-1;

switch (op){

case 1 :

clrscr();

while (jog_niv!=0) {

clrscr();

printf ("\n\n\tESCOLHA O NIVEL DE DIFICULDADE PARA INICIAR A JOGATINA >>\n\n\n 0) VOLTAR AO MENU PRINCIPAL\n\n 1) JOGAR NIVEL 1\n\n 2) JOGAR NIVEL 2\n\n 3) JOGAR NIVEL 3\n\n\n");
scanf ("%i",&jog_niv);
clrscr();

if (jog_niv==1){
srand (time(NULL));
int m_o_m, i1, i2, ace=0, err=0;

for (i=0; i<20; i++){

printf ("\n NIVEL 1 >>\n TENTE DESCOBRIR SE O PRÓXIMO NÚMERO SERÁ MAIOR OU MENOR QUE O ANTERIOR >> DIGITE '0' SE FOR MENOR OU '1' SE FOR MAIOR\n (OS VALORES VÃO DE 0 À 1.000)");

printf ("\n\n\tO NÚMERO É %i",i1=rand()%1001);
printf ("\nO PRÓXIMO NÚMERO SERÁ MAIOR OU MENOR QUE ELE \? = ");
scanf ("%i",&m_o_m);
i2=rand()%1001;

if (m_o_m==0){
if (i2i1){
printf ("\n\nO PRÓXIMO NÚMERO SERIA = %i\nPARABÉNS VOCÊ ACERTOU !!!",i2);
ace+=1;
err+=0;
printf ("\nACERTOS = %i\tERROS = %i",ace,err);
Sleep (3000);
clrscr();
}
else {
printf ("\n\nO PRÓXIMO NÚMERO SERIA = %i\nVOCÊ ERROU !!!",i2);
ace+=0;
err+=1;
printf ("\nACERTOS = %i\tERROS = %i",ace,err);
Sleep (3000);
clrscr();
}
}
system ("cls");
clrscr();
}
system ("cls");
clrscr();

if(ace>rec_n1){
rec_n1=ace;
}
else{
rec_n1=rec_n1;
}
clrscr();
printf ("\n\t RESULTADO FINAL");
textcolor(2);
printf ("\n\n\n ACERTOS = %i",ace);
textcolor(4);
printf ("\t ERROS = %i",err);
textcolor(7);

printf ("\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n");

system ("PAUSE");

textcolor(7);
textbackground (1);
system ("color 17");
system ("color 17");

clrscr();

}

Anônimo disse...

if (jog_niv==2) {

clrscr();

printf ("\n\n 1) INICIAR NIVEL NORMALMENTE\n\n 2) INICIAR NIVEL COM AJUDA \"MÉDIA\" (SUA TENTATIVA INICIAL VALERÁ POR 5)\n\n 3) INICIAR NIVEL COM AJUDA \"FÁCIL\" (SUA TENTATIVA INCIAL VALERÁ POR 8)\n\n");
scanf ("%i",&op_jog_niv1);

if (op_jog_niv1 == 1) {

clrscr();

printf ("\n NIVEL 2 >> TENTE DESCOBRIR QUAL DOS NOMES ABAIXO FOI SORTEADO ! DIGITE O NOME QUE VOCÊ DESEJA EM SUA TENTATIVA =\n\n\n");
printf ("%s",grupo_de_nomes);
printf ("\n\n\n ");

srand (time(NULL));
idn=rand()%21;

idn==0 ? strcpy(n_c,n0) : idn==1 ? strcpy(n_c,n1) : idn==2 ? strcpy(n_c,n2) : idn==3 ? strcpy(n_c,n3) : idn==4 ? strcpy(n_c,n4) : idn==5 ? strcpy(n_c,n5) : idn==6 ? strcpy(n_c,n6) : idn==7 ? strcpy(n_c,n7) : idn==8 ? strcpy(n_c,n8) : idn==9 ? strcpy(n_c,n9) : idn==10 ? strcpy(n_c,n10) : idn==11 ? strcpy(n_c,n11) : idn==12 ? strcpy(n_c,n12) : idn==13 ? strcpy(n_c,n13) : idn==14 ? strcpy(n_c,n14) : idn==15 ? strcpy(n_c,n15) : idn==16 ? strcpy(n_c,n16) : idn==17 ? strcpy(n_c,n17) : idn==18 ? strcpy(n_c,n18) : idn==19 ? strcpy(n_c,n19) : strcpy(n_c,n20);

while (completou!=0){

printf ("\n\n");

GetConsoleCursorInfo(hOut, &CCI);
CCI.bVisible = true;
SetConsoleCursorInfo(hOut, &CCI);

printf (" TENTATIVA %i = ",n_ten+1);

scanf("%s",&aposta);
n_ten+=1;

GetConsoleCursorInfo(hOut, &CCI);
CCI.bVisible = false;
SetConsoleCursorInfo(hOut, &CCI);

if (strcasecmp (aposta,n_c) == 0){
printf ("%s %i tentativas",pva,n_ten);
Sleep (3000);
system ("cls");

if (n_ten<rec_n2){
rec_n2=n_ten;
n_ten=0;
completou=0;
jog_niv=0;
}

else{
rec_n2=rec_n2;
n_ten=0;
completou=0;
jog_niv=0;
}

}

else {
printf (" ESTÁ ERRADO !");
}


}

}

Anônimo disse...

if (op_jog_niv1 == 2) {

clrscr();

n_ten=4;

printf ("\n NIVEL 2 >> TENTE DESCOBRIR QUAL DOS NOMES ABAIXO FOI SORTEADO ! DIGITE O NOME QUE VOCÊ DESEJA EM SUA TENTATIVA =\n\n\n");
printf ("%s",grupo_de_nomes);
printf ("\n\n\n ");

srand (time(NULL));
idn=rand()%21;


idn==0 ? strcpy(n_c,n0) : idn==1 ? strcpy(n_c,n1) : idn==2 ? strcpy(n_c,n2) : idn==3 ? strcpy(n_c,n3) : idn==4 ? strcpy(n_c,n4) : idn==5 ? strcpy(n_c,n5) : idn==6 ? strcpy(n_c,n6) : idn==7 ? strcpy(n_c,n7) : idn==8 ? strcpy(n_c,n8) : idn==9 ? strcpy(n_c,n9) : idn==10 ? strcpy(n_c,n10) : idn==11 ? strcpy(n_c,n11) : idn==12 ? strcpy(n_c,n12) : idn==13 ? strcpy(n_c,n13) : idn==14 ? strcpy(n_c,n14) : idn==15 ? strcpy(n_c,n15) : idn==16 ? strcpy(n_c,n16) : idn==17 ? strcpy(n_c,n17) : idn==18 ? strcpy(n_c,n18) : idn==19 ? strcpy(n_c,n19) : strcpy(n_c,n20);
int cdl;
cdl = strlen(n_c);

printf (" DICA : O NOME \"CONTÉM\" A LETRA '%c'",n_c[rand()%cdl]);


while (completou!=0){

printf ("\n\n");

GetConsoleCursorInfo(hOut, &CCI);
CCI.bVisible = true;
SetConsoleCursorInfo(hOut, &CCI);

printf (" TENTATIVA %i = ",n_ten+1);
scanf("%s",&aposta);
n_ten+=1;

GetConsoleCursorInfo(hOut, &CCI);
CCI.bVisible = false;
SetConsoleCursorInfo(hOut, &CCI);

if (strcasecmp (aposta,n_c) == 0){
printf ("%s %i tentativas",pva,n_ten);
Sleep (3000);
system ("cls");

if (n_ten<rec_n2){
rec_n2=n_ten;
n_ten=0;
completou=0;
jog_niv=0;
}

else{
rec_n2=rec_n2;
n_ten=0;
completou=0;
jog_niv=0;
}
}

else {
printf (" ESTÁ ERRADO !");
}


}


}

Anônimo disse...

if (op_jog_niv1 == 3){

clrscr();
n_ten=7;

printf ("\n NIVEL 2 >> TENTE DESCOBRIR QUAL DOS NOMES ABAIXO FOI SORTEADO ! DIGITE O NOME QUE VOCÊ DESEJA EM SUA TENTATIVA =\n\n\n");
printf ("%s",grupo_de_nomes);
printf ("\n\n\n ");

srand (time(NULL));
idn=rand()%21;

idn==0 ? strcpy(n_c,n0) : idn==1 ? strcpy(n_c,n1) : idn==2 ? strcpy(n_c,n2) : idn==3 ? strcpy(n_c,n3) : idn==4 ? strcpy(n_c,n4) : idn==5 ? strcpy(n_c,n5) : idn==6 ? strcpy(n_c,n6) : idn==7 ? strcpy(n_c,n7) : idn==8 ? strcpy(n_c,n8) : idn==9 ? strcpy(n_c,n9) : idn==10 ? strcpy(n_c,n10) : idn==11 ? strcpy(n_c,n11) : idn==12 ? strcpy(n_c,n12) : idn==13 ? strcpy(n_c,n13) : idn==14 ? strcpy(n_c,n14) : idn==15 ? strcpy(n_c,n15) : idn==16 ? strcpy(n_c,n16) : idn==17 ? strcpy(n_c,n17) : idn==18 ? strcpy(n_c,n18) : idn==19 ? strcpy(n_c,n19) : strcpy(n_c,n20);

printf (" DICA : O NOME \"COMEÇA\" COM A LETRA '%c'",n_c[0]);

while (completou!=0){

printf ("\n\n");

GetConsoleCursorInfo(hOut, &CCI);
CCI.bVisible = true;
SetConsoleCursorInfo(hOut, &CCI);

printf (" TENTATIVA %i = ",n_ten+1);
scanf("%s",&aposta);
n_ten+=1;

GetConsoleCursorInfo(hOut, &CCI);
CCI.bVisible = false;
SetConsoleCursorInfo(hOut, &CCI);

if (strcasecmp (aposta,n_c) == 0){
printf ("%s %i tentativas",pva,n_ten);
Sleep (3000);
system ("cls");

if (n_ten>\tDESCUBRA QUAL É O NÚMERO SORTEADO EM UM INTERVALO ENTRE 0 E 1.000");
printf ("\nDIGITE O NÚMERO QUE VOCÊ ACREDITA QUE FOI SORTEADO ENTRE 0 E 1.000 = ");
n_sor=rand()%1001;

while (ten_sor!=n_sor){



printf ("\n\n\n TENTATIVA %i = ",++ten_con);
scanf ("%i",&ten_sor);

if (ten_sorn_sor){


printf ("ERRADO !! O NÚMERO SORTEADO É MENOR QUE %i",ten_sor);

}



if (ten_sor==n_sor){

printf ("PARABÉNS !! VOCÊ ACERTOU O NÚMERO EM %i TENTATIVAS",ten_con);
}





}

if (ten_con>\n\n 3) NIVEL 3\n\n 2) NIVEL 2\n\n 1) NIVEL 1\n\n 0) VOLTAR PARA O MENU PRINCIPAL\n\n\n");
scanf ("%i",&rec_niv);

Anônimo disse...

if (rec_niv==1) {

clrscr ();

printf ("\n\tRECORDE DO NIVEL 1 >>\n\n\n");


if (rec_n1==-1){

printf (" NENHUM DADO ARMAZENADO");

printf ("\n\n\n\n\n\n\n Pressione qualquer tecla para voltar ao MENU de RECORDES...");
system ("pause>nul");
clrscr();

}

else {
printf (" %i ACERTOS",rec_n1);
printf ("\n\n\n\n\n\n\n Pressione qualquer tecla para voltar ao MENU de RECORDES...");
system ("pause>nul");
clrscr();
}



}



if (rec_niv==2) {

clrscr ();

printf ("\n\tRECORDE DO NIVEL 2 >>\n\n\n");


if (rec_n2==1000000){

printf (" NENHUM DADO ARMAZENADO");

printf ("\n\n\n\n\n\n\n Pressione qualquer tecla para voltar ao MENU de RECORDES...");
system ("pause>nul");
clrscr();

}

else {
printf (" %i TENTATIVAS",rec_n2);
printf ("\n\n\n\n\n\n\n Pressione qualquer tecla para voltar ao MENU de RECORDES...");
system ("pause>nul");
clrscr();
}
}


if (rec_niv==3) {

clrscr ();

printf ("\n\tRECORDE DO NIVEL 3 >>\n\n\n");


if (rec_n3==1000000){

printf (" NENHUM DADO ARMAZENADO");

printf ("\n\n\n\n\n\n\n Pressione qualquer tecla para voltar ao MENU de RECORDES...");
system ("pause>nul");
clrscr();

}

else {
printf (" %i TENTATIVAS",rec_n3);
printf ("\n\n\n\n\n\n\n Pressione qualquer tecla para voltar ao MENU de RECORDES...");
system ("pause>nul");
clrscr();
}
}



}



}



}


while (op!=0);

/* */
system ("cls");
textcolor(2);
textbackground(0);
system ("color 02");

Sleep (2500);
printf ("\n\n\n\n\n\n\n\n\n\n\t\t\tT");
Sleep (1500);
printf ("\tC");
Sleep (1500);
printf ("\tH");
Sleep (1500);
printf ("\tA");
Sleep (1500);
printf ("\tW");
Sleep (1500);
printf ("\t!!!");
Sleep (600);
printf (" ...");

Sleep (3000);

clrscr();
printf ("Aperte qualquer tecla para sair...");
textcolor(0);
/* */

return EXIT_SUCCESS;






}

Unknown disse...

Olá, primeiramente, excelente postagem, bem esclarecedora! (:
Mas tenho uma dúvida. Eu preciso fazer um projeto e minha profª de prog. n ensinou usar a função rand, mas eu vou precisar dela, só que o problema é o seguinte: Vou usar uma matriz 4x4, inicializando com os valores 0 (até aí tudo bem), mas em 2 posições aleatórias nessa matriz, eu preciso jogar o valor 2, mas n sei direito como fazê-lo, creio que devo usar o rand pra pegar as posições aleatórias das linhas e colunas de 0 a 3, mas n sei como. Poderia ajudar? Grato.

Unknown disse...

#include
#include
#include
#include

int main(int argc, char const *argv[]){
setlocale(LC_ALL, "Portuguese");

int numero, tentativas, numero_sorteio;

printf("Informe um número entre 1 e 1000: ");
scanf("%d", &numero);
srand( (unsigned)time (NULL) );

numero_sorteio = 1 + (rand() % 1000);

while(numero_sorteio != numero){
if(numero > numero_sorteio){

printf("O número informado é maior!!\n");
printf("Informe um número entre 1 e 1000: ");
scanf("%d", &numero);
tentativas++;

}else if(numero < numero_sorteio){

printf("O número informado é menor!!\n");
printf("Informe um número entre 1 e 1000: ");
scanf("%d", &numero);
tentativas++;

}
}
if(numero == numero_sorteio){
printf("Você acertou o número!!\nO número de tentativas foi '%d'", tentativas -1);
}
return 0;
}

Anônimo disse...

Consegui fazer um jogo de "adivinhe o numrand" bem simples na minha opnião, deu 56 linhas de código:

#include
#include
#include

int randk(int a){
srand((unsigned)time(NULL));
a = 1+(rand()% 1000);
return a;
}

int trys(int vezs,int tent,int rand){
if(tent != rand){
vezs++;
}
return vezs;
}

int relac(int tent, int rand,char relacao){
if(tent > rand){
relacao ='<';
}else{
relacao ='>';
}
return relacao;
}

int main(void){
int numero = randk(numero), vezes = 0, tentativa;
char relacao;

printf("------------------------------\n");//30 chars
printf(".=====JOGO DO NUM. RAND.=====.\n");
printf(". .\n");
printf(".Como Funciona:O Jogo lhe .\n");
printf(".dira para voce adivinhar um .\n");
printf(".numero de aleatortio de 1 a .\n");
printf(".1000 e de acordo com suas .\n");
printf(".tentativas o jogo dira se o .\n");
printf(".numero certo e maior ou .\n");
printf(".menor em relacao ao seu num;.\n");
printf("------------------------------\n");
printf("Chute Inicial:");
scanf("%d", &tentativa);

for(vezes = 1;tentativa != numero;vezes++){
printf("\nTentativas: %d;\n", vezes);
printf("O num e %c;\n", relac(tentativa, numero, relacao));
printf("Chute:");
scanf("%d", &tentativa);
printf("\n------------------------------");

if(tentativa == numero){
printf("\nGanhou!!!\nTentativas: %d;\n\n", vezes);
}
}
}

Anônimo disse...

Fiz um com base no que sei sobre programação em C (sou bem iniciante kk) e deu certo. Consegui fazer em 56 linhas. Não há parâmetros pois não gosto muito de usar.

#include
#include
#include

int randk(int a){
srand((unsigned)time(NULL));
a = 1+(rand()% 1000);
return a;
}

int trys(int vezs,int tent,int rand){
if(tent != rand){
vezs++;
}
return vezs;
}

int relac(int tent, int rand,char relacao){
if(tent > rand){
relacao ='<';
}else{
relacao ='>';
}
return relacao;
}

int main(void){
int numero = randk(numero), vezes = 0, tentativa;
char relacao;

printf("------------------------------\n");//30 chars
printf(".=====JOGO DO NUM. RAND.=====.\n");
printf(". .\n");
printf(".Como Funciona:O Jogo lhe .\n");
printf(".dira para voce adivinhar um .\n");
printf(".numero de aleatortio de 1 a .\n");
printf(".1000 e de acordo com suas .\n");
printf(".tentativas o jogo dira se o .\n");
printf(".numero certo e maior ou .\n");
printf(".menor em relacao ao seu num;.\n");
printf("------------------------------\n");
printf("Chute Inicial:");
scanf("%d", &tentativa);

for(vezes = 1;tentativa != numero;vezes++){
printf("\nTentativas: %d;\n", vezes);
printf("O num e %c;\n", relac(tentativa, numero, relacao));
printf("Chute:");
scanf("%d", &tentativa);
printf("\n------------------------------");

if(tentativa == numero){
printf("\nGanhou!!!\nTentativas: %d;\n\n", vezes);
}
}
}

Anônimo disse...

Queria saber como gerar valores aleatórios e esses valores não se repetirem quando eu executar o código. Tem algum jeito de fazer isso facilmente?

Unknown disse...

Boa noite, podiam-me ajudar? Como faço usando estas funções e um LCD 16x2 fazer aparecer um caracter especial (bomba) da direita na primeira ou segunda linha aleatoriamente mas de forma que tenha um certo espaçamento para que outro caracter especial(boneco) fuja delas.

Unknown disse...

e se eu quiser gerar numero de chaves (por exemplo 1000) do tipo com 5 numeros e duas estrelas ?

Anônimo disse...

Em um jogo são sorteados 6 itens em caixas. Mas 1 prêmio é especial que é o que eu quero pegar. Mas o prêmio tem uma pequena possibilidade de pegar o jogo me deu uma informação que os itens são gerados aleatoriamente, então alguém pode me ajudar a como ter uma maior possibilidade de pegar o item especial. Por favor me ajudem!

Unknown disse...

Como faço para gerar numeros entre -10,75 e +10,25?

Unknown disse...

Tentei compilar alguns códigos do jogo por ai e não rolou.
E vi uns código spaguethi louco ai huhauehauea

Mas vou deixar o código do meu jogo aqui porque ele ficou bem bonitinho.
Joguem pacas ai :p

#include
#include
#include

int sorteio(int i){

srand((unsigned)time(NULL));
i = rand()%1001;
return i;
}

main(){
int a,count,counter,num_sorteado,num;
char opcao;
a = 1;
count = 1;


printf("\t\t\t ADIVINHE O NUMERO!\n\n");
printf("\t\t\tO jogo funciona da seguinte maneira:\n\n");
printf(" Voce digita um numero entre 0 e 1000 ate voce acertar o numero sorteado.\n\n");
printf("\t\t\t\tBoa sorte!\n\n");

do{


if (counter == 1 ){
printf("\t\t\t\t Jogar?\n\n");
printf("\t\t\tDigite 'S'.Se nao, digite 'N': ");
}
else{
printf("\t\t\t Jogar novamente?\n\n");
printf("\t\t Digite 'S'.Se nao, digite 'N': \n\n\n\n\n\n\n\n\n\n\n\n\n");
}
scanf("%c",&opcao);

if(opcao == 'n' || opcao == 'N'){
return 0;
}
if(opcao =='s' || opcao == 'S'){
system("clear || cls");

num_sorteado = sorteio(num_sorteado);

for(count = 1;count>= 1;count++){
printf("Digite um numero: ");
scanf("%d",&num);

if(num_sorteado > num){
printf("O numero e MAIOR que %d.\n\n",num);
}
if(num_sorteado < num){
printf("O numero e MENOR que %d.\n\n",num);
}
if(num_sorteado == num){
printf("\n\n\n\n\n\n\n\n\n\n\n\n\n\t\t\tParabens! voce acertou!\n\n ");
printf("\t\tVoce utilizou %d tentativa(s) ate acertar.\n\n\n\n",count);
break;
}

}
}
counter ++;
fflush(stdin);
}while (a == 1);



}

Anônimo disse...

Eu preciso de gerar uma matriz 10x10 simulando um labirinto onde a casa com 1 nao pode ser ocupada e a com 0 pode. A casa inicial [0][0] e a chegada [9][9],
devem estar sempre com 0, as outras devem ser aleatorias, meu cod abaixo gera os mesmos numeros, ou zero ou um mas, mas preciso que sejam aleatorios ta gerando assim:

0 1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1 0

ou tudo zero.

esses 1 tem que ser aleatorios

segue cod:
void main()
{
int ret[10][10];
for(int l=0 ; l<10 ; l++)
for(int c=0 ; c<10 ; c++)
{
srand(time(NULL));//gera numero aleatorio toda vez q executar o programa
ret[l][c]=rand()%2;
ret[0][0]=0;
ret[9][9]=0;
}
for(int l=0 ; l<10; l++)
{
for(int c=0 ; c<10 ; c++)
cout<<" "<<ret[l][c];
cout<<endl;
}
system ("pause");
}

Unknown disse...

tem algum metodo para se dar um rand diferente toda vez ke se passa pelo for? tipo, em i=1, x assume um valor kualker , porem em i=2, esse valor vai ser o msm. sei ke da pra diferencia se coloka (rand()%20) +1 pra segunda vez, mas nao teria um jeito menos migué?? pk o rand(time(NULL)) so serve pra muda os valores se execudar o algoritmo novamente ne...

ministerio resgate disse...

Use #define DIM 1000000000

Marc disse...

Ola pessoal estou com uma duvida:

srand(time(NULL));
golspfc = rand()%9;
printf("Sao paulo fez %d Gols. \n", golspfc);
srand(time(NULL));
golsantos = rand()%9;

Essa e uma parte de um programa que estou desenvolvendo, bem ele sempre gera numeros iguais pára as duas variaveis, alguem sabe como resolver?

Anônimo disse...

Ele gera sempre numeros iguais alguem ajuda???

#include"stdio.h"
#include"io.h"
#include"math.h"
#include"time.h"
#include

void main(){
printf("Ola, bem vindo ao BB (Bolao do Brasileirao), nesse mini-game voce podera escolher um time e tentar acertar os resultados dele: Para continuar aperte qualquer tecla; \n");
getche();
int time_escolha, primeiraR_spfc, primeiraR_santos, golspfc, golsantos, ptsantos, ptspfc;
int primeiraR_vasco, primeiraR_fla, golvasco, golfla, ptvasco, ptfla;
int primeiraR_cor, primeiraR_pal, golcor, golpal, ptcor, ptpal;
printf("Escolha seu Time: \n");
printf("1. Sao Paulo. \n");
printf("2. Santos. \n");
printf("3. Corinthas. \n");
printf("4. Palmeiras. \n");
printf("5. Flamengo \n");
printf("6. Vasco. \n");
scanf("%d", &time_escolha);
switch(time_escolha) {
case 1:
printf("Voce escolheu o Sao Paulo, voce tem 5 rodadas, o time que somar mais pontos vence a competicao. \n");
printf("Primeira Rodada: \n");
printf("Sao paulo x Santos \n");
printf("Vasco x Flamengo \n");
printf("Corinthas x Palmeiras \n");
printf("Tente advinhar o placar do jogo Sao Paulo x Santos: \n");
printf("Sao paulo: \n");
scanf("%d", &primeiraR_spfc);
printf("Santos: \n");
scanf("%d", &primeiraR_santos);
srand( (unsigned)time(NULL) );
golspfc = rand()%5;
printf("Sao paulo fez %d Gols. \n", golspfc);
srand( (unsigned)time(NULL) );
golsantos = rand()%5;
printf("Santos fez %d Gols. \n", golsantos);
printf("O jogo no total deu: \n");
printf("Sao Paulo %d x %d Santos \n", golspfc, golsantos);
if (golsantos > golspfc){
printf("Santos venceu, tente ganhar na rpoxima vez \n");
ptsantos = 3;
ptspfc = 0;
}
if (golsantos < golspfc){
printf("Sao Paulo Venceu, Parabens voce ganhou a primeira partida \n");
ptsantos = 0;
ptspfc = 3;

}
if (golsantos == golspfc){
printf("O jogo foi duro e empatou, cada time soma 1 ponto na tabela \n");
ptsantos = 1;
ptspfc = 1;
}
if(primeiraR_santos == golsantos && primeiraR_spfc == golspfc){
printf("Voce acertou o placar do jogo Sao Paulo x Santos, parabens!! \n");
printf("1 ponto a mais adicionado ao seu clube. \n");
ptspfc = ptspfc+1;
}

Unknown disse...

Boa tarde

no meu caso os numeros repetem..
alguma solucao para isso tendo em conta que tenho de criar um programa em que aparecam numeros nao repetitivos?

obrigado

Marselha disse...

E se o intervalo tiver que ser definido pelo valor digitado pelo teclado?
No meu programa, preciso ler dois valores máximos um é o tamanho do vetor e outro o intervalo de números aleatórios.

Kalill Lameira disse...

Olá gente, seguinte, vocês sabem como gerar valores entre intervalos maiores?

eu quero que o algoritmo gere CEP's de uma cidade qualquer por exemplo:
CEP=[77000-000 ... até ...77999-999]
usando uma desssas funções, rand, srand é possivel?

obg desde já pela ajuda!

Anônimo disse...

Boa noite amigo, a função 1 + (rand()%20); está dando sempre o mesmo número..

No caso o aleatório é o 4

o código que eu estou usando é esse:

#include
#include

void main(void)
{
int magic;
int guess;

magic = 1 + (rand()%20);

printf("Adivinhe o Número Mágico:\n");
scanf ("%d", &guess);

if(guess == magic) {
printf("** Certo **\n");
printf("%d é o número mágico\n", magic);
}

else {
printf("Errado, ");
if(guess > magic) printf("Número elevado em relação ao mágico\n");
else printf("Número baixo em relação ao mágico\n");
}
}

Vitor Coutinho Fernandes disse...

#include
#include
#include


int NumRand(){ //FUNÇÃO QUE GERA NUMERO RANDOM
int random;
srand( (unsigned)time(NULL) ); //PARA GERAR NUMERO ALEATORIO
random = rand()%11; // INTERVALO DE 0 A 10
return(random); // RETORNO DA FUNÇÃO É O VALOR ALEATORIO
}

int main(void)
{
int num;
int numPlay;
int contChance=0;


printf("\t\tBEM VINDO AO JOGO DO NUMERO ALEATORIO\n");

num = NumRand();

while(numPlay != num){ // COMPARANDO VALOR DIGITADO
printf("\n\t\tDIGITE UM NUMERO ENTRE 0 E 10\n\t\t");
scanf("\t\t%d", &numPlay);
fflush(stdin);
if(numPlay< 0 || numPlay > 10){
printf("Numero escolhido esta fora do intervalo determinado, saindo do jogo...\n");
system("pause");
exit(0);
}
if(numPlay < num){
contChance++;
printf("\t\tNumero inserido %c menor que o numero gerado\n", 130);


}else if(numPlay > num)
{
contChance++;
printf("\t\tNumero inserido %c maior que numero gerado\n", 130);

}

}
if(numPlay == num){
contChance++;
printf("\t\tPARABENS! VOCE ACERTOU O NUMERO GERADO\n");
printf("\t\tE PARA ACERTAR VOCE TENTOU %d VEZES\n", contChance);
}


return 0;
}

Unknown disse...

Como fazer este “jogo de adivinhação”. Escreva um programa que crie
um número aleatório X por meio da função rand(). Este número deve ser um número inteiro
entre 0 e 500, escolhido pela máquina. Então o programa deve solicitar um número N ao
usuário e compará-lo com X.
• Se N estiver a menos de 20 casas de distancia do número X, para cima ou para baixo,
imprimir “ESTÁ ESQUENTANDO”.
• Se N estiver a menos de 5 casas de distancia do número X, imprimir “QUASE LÁ”.
• Se N for bem menor que X, o programa deve imprimir “PEQUENO DEMAIS”;
• Se N for bem maior que X, o programa deve imprimir “GRANDE DEMAIS”;
A seguir, solicite novamente um número para o usuário.
E usando comandos de repetição, refaça o processo.
CSTA Professor Diógenes Furlan UTP
Decida quantas vezes este processo deve ser repetido, testando o programa várias vezes, para
criar uma dificuldade “mediana”.
O programa termina quando
• O usuário adivinhar o número X tomado aleatoriamente, imprimindo “OK” e o número X;
• Ou se acabarem as chances, imprimindo “GAME OVER” e o número X.

Unknown disse...
Este comentário foi removido pelo autor.
Anônimo disse...

Olá? Alguém ai? rs. Eu preciso uma forma de salvar números aleatorios ou em sequencia e salvá-los em um arquivo. Só que esses números não podem se repetir, sendo na execução "atual" do programa, ou em execuções posteriores. Alguem sabe como posso fazer?

Mk Net disse...

Para quem quer que o intervalo do numero aleatório( intervalo de rand), seja definido pelo usuário basta fazer:

#include
#include
#include

int main(){
int intervalo, x;
printf("Usuario insira o invervalo:\n");
scanf("%d", &intervalo);
srand((unsigned)time(NULL));
x= rand()% intervalo; //rand varia de 0 ao valor de intervalo...

printf("O intervalo que vc escolheu para rande foi de [0,%d] e foi gerado o numero: %d\n", intervalo, x);

return 0;
}

Unknown disse...

Estou criando um algoritmo e preciso sortear um número entre "d" e 250. "d" é um valor que é calulado anteriormente no algoritmo. Achei que se usasse "x = d + ( rand() % 250 );" daria certo, mas não da. Como posso fazer isso?

Desde já obrigada!

Heudmann Lima (Face: Heudmann Lima) disse...
Este comentário foi removido pelo autor.
Heudmann Lima (Face: Heudmann Lima) disse...

+Gabriela Martins Nunes
Olá Gabriela Martins Nunes

Eu também estava com essa dúvida e criei uma lógica em cima dessa informação que dão erroneamente pra definir um limite "x = d + ( rand() % 250 )".

Dá uma olhadinha no código que fiz, este recebe do usuário um número inicial e um final, então o programa mostra 10 valores aleatórios deste intervalo. Espero que a idéia te ajude:


#include
#include
#include

int x,inicio,fim;

main(){
srand((unsigned)time(NULL));

printf("\n Valor Inicial: ");
scanf("%d",&inicio);
printf("\n Valor FINAL: ");
scanf("%d",&fim);

x=(fim-inicio)+1;

printf("\n\n 10 Valores aleatorios entre %d e %d: \n",inicio,fim);
for (int i=1; i<=10; i++)
printf("\n %d",( inicio + (rand()%x) ));
}

.................................................

No seu caso, acredito que ficaria assim:

#include
#include
#include

int d,x;

main(){
srand((unsigned)time(NULL));

d=100; //Vamos assumir q o valor do seu "d" seja 100 como exemplo
x=(250-d)+1;

printf("\n\n Valores aleatorio entre %d e 250: %d",d,( d + (rand()%x) ));
}


Espero q tenha ajudado, um grande abraço! =)

Anônimo disse...

alguem pode me ajudar nessa questão?
Crie uma função em linguagem C chamado Dado() que retorna, através de
sorteio, um número de 1 até 6. Usar a função rand(). Use a função Dado() e
lance o dado 10.000 vezes. Conte quantas vezes cada número saiu e informe
seus percentuais. A probabilidade deu certo? Ou seja, a porcentagem dos
números foi parecida?

Anônimo disse...


#include
#include
#include
#include
int main()
{
setlocale(LC_ALL,"portuguese");
int iRes,iNum,iTent=1;
srand((unsigned)time(NULL));
iNum=1+(rand()%1000);
system("color F0");
do
{
printf("========================================\n");
printf("BEM VINDO AO JOGO: BERIMBELO DA SORTE\nO NÚMERO PREMIADO FICA ENTRE 1 E 1000\nBOA SORTE\nESPERO QUE VOCÊ NÃO GANHE\n");
printf("========================================\n");
printf("Digite um número: \n");
scanf("%d",&iRes);
printf("\nVAMOS VER...\n");
printf("CHECANDO...\n");
if(iRes==iNum)
{
break;
}
if(iRes>iNum)
{
printf("Que pena, o número que você digitou é maior que o número prêmiado\n");

}
else
{
printf("Que pena, o número que você digitou é menor que o número prêmiado\n");
}
iTent++;
getch();
system("cls||clear");
}while(iRes!=iNum);
printf("\nParabéns mizeravi, quem te insinou?");
printf("\nQuantidades de tentativas até acertar: %d",iTent);
return 0;
}

Unknown disse...

Olá pessoal,

Pelo que vi, ele gera numeros aleatórios a cada execução de programa. Mas e se for preciso gerar vários números aleatórios em uma execução de programa. Por exemplo: Faça um programa que simula o lançamento de dois dados, d1 e d2, n vezes, e tem como saída o número de cada dado e a relação entre eles (>, <, =) de cada lançamento.

Tentei assim:
#include
#include
#include // necessário p/ as funções rand() e srand()
#include //necessário p/ função time()

int main(void)
{
int i, n, d1, d2;


printf("Digite o numero de lancamentos dos dados: ");
scanf("%d", &n);


for(i=1; i<=n; i++){
srand((unsigned)time(NULL));
d1 = 1 + ( rand() % 5 );
d2 = 1 + ( rand() % 5 );
}

for(i=1; i<=n; i++){
if (d1d2)
printf("Dado 1 \(%d\) > Dado 2 \(%d\)\n", d1, d2);
}

return 0;
}


Mas não dá certo, ele gera apenas um número aleatório para d1 e d2 e depois repete esses valores n vezes. Alguem tem ideia de como resolver isso?

Anônimo disse...

Fiz esse e coloquei a opçao de quando chegar a 10 tentativas, o jogo reseta e te pergunta se vc quer o codigo para acertar. (;

#include
#include
#include

// Jogo simples de acerto de numero.
void menu(t);
int main()
{
int n,c=0,random,t=1;
char o;

do
{
srand((unsigned)time(NULL));
random=1+(rand()%1000);
//printf("Numero random: %d\n",random);//A mostra de numero random.
if(c==10) //Caso voce erre 10 vezes, o numero randomizado sera mostrado na proxima rodada.
{
printf("Voce ja tentou 10 vezes, deseja ver o resultado? 'S'/'N' ?(Opcao unica)\n");
scanf(" %c",&o);
switch(o)
{
case 's':
case 'S':
printf("Numero randomico eh: %d\n",random);
c=0;
t=1;
break;
case 'n':
case 'N':
t=1;
c=0;
break;
default:
printf("Opcao invalida. Seu merda.Continua jogando sem o numero agora, otario.\n");
}
}
menu(t);
scanf("%d",&n);
t++;
c++;
if(n==0) //Definindo a desistencia do game.
printf("Encerrando programa...\n");
if(n==random) //Definindo a igualdade do seu numero com o numero randomizado.
{
printf("Parabens, voce ganhou! Na %d(a) tentativa.\n",c);
system("pause");
return 0;
}
else
{
printf("Voce errou, tente novamente!\n");
if(n>random) //Verificando se o numero eh maior ou menor
printf("O numero random eh menor que o seu numero! Tente novamente!\n");
else
printf("O numero random eh maior que o seu numero! Tente novamente!\n");
}
system("pause");
system("clear||cls");
}while(n);
}
void menu(int t)
{
printf(" _____________________________________________________________\n");
printf("// \\\\\n");
printf("// O programa vai randomizar um numero de 1 a mil, sua tarefa \\\\\n");
printf("// eh descobrir qual eh esse numero. Quando voce acertar, o \\\\\n");
printf("// game ira terminar. Boa sorte! \\\\\n");
printf("// Para desistir do game, digite '0'. \\\\\n");
printf("//_____________________________________________________________\\\\\n");
printf("// %d tentativa: ",t);
}

Anônimo disse...

É possível descobrir qual é o seed através dos números gerados aleatoriamente?

William Macedo disse...

Usando a função "time(NULL);" como seed demora um segundo no mínimo para ser gerado um número pseudo-aleatório.
Para gerar números pseudo-aleatórios seguidos eu uso a função "sleep (1);" logo após a "rand ();", para ter certeza que a semente foi modificada. O problema é que assim o meu programa fica lento demais.
Existe alguma função para substituir a "time (NULL);" e fazer isso mais rápido?

Wesley Rodrigues disse...

Fala Galera, fiz um código um tanto maior mas com a mesma finalidade, se encontrarem algum erro podem ficar a vontade para comentar, mas em todos os meus testes ele passou, Valeu demais!!

#include
#include
#include


/*Crie um jogo, em C, que sorteia um número entre 1 e mil.
O jogador deve tentar acertar o número sorteado.

Se ele errar, o programa deve dizer se o número sorteado é maior ou menor que o número que o jogador tentou.

Ao acertar o número sorteado, o programa deverá dizer em quantas tentativas o usuário acertou.*/

int main()
{
int i, x, num, xi, cont=0, cont1=0, cont2=0, contsenior=0;

printf("\nPrograma para Sortear Um Numero entre 1 e 1000\n");

srand( (unsigned)time(NULL) );

for(i=1 ; i <= 1 ; i++){
x = 1 + (rand()%1000);
}

xi = x;

printf("Informe um numero, vamos testar sua sorte hoje\t");
scanf("%d", &num);


if(num == xi){
printf("\nParabens Sortudo\nVOCE ACERTOU DE PRIMEIRA!!");
printf("\nVoce fez exatamente 1 Tentativa ate Acertar este Numero\n");

}
else{

while(num > x){
printf("\n----------VOCE ERROU----------\n");
printf("Mas a dica eh que o numero eh menor que %d\n", num);
printf("\n----------TENTE NOVAMENTE----------\n");
scanf("%d", &num);

if(num == x){
printf("\nParabens Sortudo\nAGORA VOCE ACERTOU!!");

cont++;

break;
}

cont1++;

}

while(num < x){
printf("\n----------VOCE ERROU----------\n");
printf("Mas a dica eh que o numero eh maior que %d\n", num);
printf("\n----------TENTE NOVAMENTE----------\n");
scanf("%d", &num);

if(num == x){
printf("\nParabens Sortudo\nAGORA VOCE ACERTOU!!");

cont++;

break;
}

cont2++;


}

contsenior = cont1 + cont2 + cont;

printf("\nVoce fez exatamente %d Tentativas ate Acertar este Numero\n", contsenior+1);
}

return 0;
}

isrnick disse...

Erro na explicação:

As funções rand() e srand() são da biblioteca , não da . A biblioteca só precisa ser inclusa porque a função time() também é usada.

Unknown disse...

E se eu quiser gerar, por exemplo, somente 30 números aleatórios, de 1 a 9, em uma matriz de ordem 3?
Sei que para eu gerar números aleatórios em uma matriz deve-se fazer:
for(int i = 0;i < 3; i++) {
for(intj = 0; i < 3; j++) {
matriz[i][j] = 1 + rand()%9;

Unknown disse...

O meu ficou bem simples (eu acho):

#include
#include
#include

int main(void)
{
int num,
tent=1,
chute;

printf("Em que numero de 1 a 1000 eu estou pensando?...\n");
scanf("%d", &chute);
srand ((unsigned) time (NULL));
num = (rand()%999)+1;
for(; chute!=num; tent++)
{
if(chute>num)
printf("Numero muito alto!\n");
else
printf("Numero muito baixo!\n");
scanf("%d",&chute);
}
printf("Parabens, voce acertou em %d tentativas!\n\n",tent);
return 0;
}

Benedito disse...

Muito bom o artigo! Valeu imenso cara!

Anônimo disse...

/*
* dartthvaderjed
* criação : 28/12/2018
* */

#include
#include
#include

//#define cor_program "setterm -foreground white -background black "

int main() {
//system(cor_program);

int sorteio, chute_user = 0, tentativas = 0 ;
int opcao =2 ;

printf("* Bem vindo seu otário(a) esse é um jogo da qual você jamais vencerá!\n");
printf("* E se consiguires você receberá o título de Mito(a) * hihihehehehahahaha!!!! \n\n");

do{
srand((unsigned)time(NULL));
sorteio = 1 + (rand() % 1000) ;
// entrada de dados
printf("Chute um valor entre 1 e 1000 : ");
scanf("%d", &chute_user);
tentativas += 1;

// verificando se inseto insignificante acertou
if(chute_user == sorteio)
printf("Parabéns seu animal consiguistes acerta após %d, tentativas és um verdadeiro Mito(a)!!\n", tentativas);

// verificando se o sorteio é maior ou menor que o chute
if(chute_user < sorteio)
printf("\n O número sorteado é maior, do que seu chute.\n");
else
printf("\n O número sorteado é menor, do que seu chute.\n");

// será se ele desiste?
printf("\nDeseja continuar ? [1 / 0] : ");
scanf("%d", &opcao);
if(opcao == 0){
printf("\t Esfrie seu cérebro e tente mais tarde seu inseto!");
break ;
}
system("clear"); // para GNU/Linux
// system("cls"); para Windows

}while(chute_user != sorteio);

}

Leandro Cabral disse...

Olá, eu gostaria de criar uma sequencia de bits (0 e 1), usando a função rand, será que teria como?? gostaria de feedback, desde já agradeço!

Joao disse...

#include
#include
#include

int sorteia(int a);
int main()
{
int a, b, c = 1;
a = sorteia(a);
do
{
printf("Escolha um número de 1 a 1000:\n\n");
scanf("%d", &b);


if (a == b){printf("Parabéns, você acertou!!");}
if (a != b && a < b){printf("O valor sorteado é menor que o escolhido!\n");}
if (a != b && a > b){printf("O valor sorteado é maior que o escolhido!\n");}
c++;


}while ( a != b);
printf("Numero de tentativas:%d", c);
}
int sorteia(int a)
{
srand((unsigned)time(NULL));
a = rand()%1001;
return a;
}

Anônimo disse...

Olá a todos.

Qual seria a estratégia vencedora correta?

maketo568 disse...

Vim dar o meu contributo ao exercício dado...

#include
#include
#include
#include

linha(int n){
int i;
for(i=1;i<=n;i++){
printf("*");
}
putchar('\n');
}

main()
{
int numsorte,num,i,tet=0;
setlocale(LC_ALL,"");
srand((unsigned)time(NULL));

system("color 17");
numsorte=1+(rand()%1000);
/* printf("Numero gerado ==%d\n",numsorte);*/
while(1){
printf("\nDigite um numero pra solteio:");scanf("%d",&num);
if(num==numsorte){
system("cls");
linha(30);
printf("Ganhaste!!!Parabens\n");
printf("O numero de tentativas é de %d\n",i);
printf("O numero de sorte era %2d\n",numsorte);
linha(30);
break;
}
if(num>numsorte){
printf("É maior\n");
i++;

}
else{
printf("É menor\n");
i++;
}
}

}


Wesley disse...

Aproveitando as idéias do capítulo, criei um jogo de Jokenpo em C utilizando funções, função rand, laços, etc.

#include
#include
#include
#include
int pUser=0,pComputer=0; //Variáveis globais, seu escopo abrange todo programa
int aleatorio(int a) //Função que irá gerar a opção escolhida pelo computador
{
srand((unsigned)time(NULL));
a=1+(rand()%3);
return a;
}
void Jokenpo(int a,int b) //Função que verifica quem ganhou, perdeu ou empate
{
switch (a)
{
case 1:
if(b==3)
{
printf("\n Jogador venceu!");
pUser++;
}
if(b==2)
{
printf("\n Computador venceu!");
pComputer++;
}
if(b==1)
printf("\n Empate.");
break;
case 2:
if(b==1)
{
printf("\n Jogador venceu!");
pUser++;
}
if(b==3)
{
printf("\n Computador venceu!");
pComputer++;
}
if(b==2)
printf("\n Empate");
break;
case 3:
if(b==2)
{
printf("\n Jogador venceu!");
pUser++;
}
if(b==1)
{
printf("\n Computador venceu!");
pComputer++;
}
if(b==3)
printf("\n Empate.");
break;
default:
printf("\n Opção inválida.");
}
printf("\n Placar: Jogador[%d] X [%d]Computador\n",pUser,pComputer);
}
void menu() //Função para exibir menu
{
printf("\n\t----------JOKENPO----------");
printf("\n\n 1 - Pedra");
printf("\n 2 - Papel");
printf("\n 3 - Tesoura");
printf("\n Escolha uma opção: ");
}
int main(void) //Função principal
{
int nComputer,nUser,cont;
setlocale(LC_ALL,"Portuguese");
for(cont=1;cont<=3;cont++)
{
nComputer=aleatorio(nComputer);
menu();
scanf("%d",&nUser);
system("cls||clear");
Jokenpo(nUser,nComputer);
}
return 0;
}

Nofx disse...

Sei que o post já bem antigo mais fica a pergunta mesmo assim, e se eu quiser descobrir qual foi a semente usada... tipo tenho a data/hora/minuto/segundo e tenho o resultado tipo 57 de (0/99) é possível descobrir a semente que foi usada?

Cleber Silva disse...

Poderiam me ajudar com essa atividade por favor? Eu tentei colocar o FOR mas sempre da erro no PORTUGOL STUDIO. A atividade é a seguinte:

“Desenvolva um algoritmo que receba valores aleatórios entre -20 e 10 e através de uma função preencha uma matriz de inteiros 8×3. Retorne quantas vezes aparecer o número DOIS.”

Eu consegui realizar até essa parte ,mas não consegui fazer o FOR para retornar 2 “dois”,poderia me ajudar ?

programa
{
funcao inicio()
{
inteiro matriz[8][3]
para (inteiro linha = 0; linha < 8; linha++)
{
para (inteiro coluna = 0; coluna < 3; coluna++)
{
matriz[linha][coluna] = sorteia(-20, 10)
escreva("[", matriz[linha][coluna], "]")
}
escreva ("\n")
}
}
}

Alonso M disse...

Eu copiei o código para testar. Na primeira tentativa chutei 2 e acertei kkkk

Unknown disse...

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

void print_header(void){
setlocale(LC_ALL, "portuguese");
printf("\n\t+---------------------------------------+");
printf("\n\t| ACERTANDO NÚMERO RANDÔMICO (1 À 1000) |");
printf("\n\t+---------------------------------------+\n\n\n");
}
void print_msg(int n){

printf("\t******** ACERTOU! ********\n\n");
printf("\t\t . | . \n");
printf("\t\t \n");
printf("\t\t- %3d -\n", n);
printf("\t\t \n");
printf("\t\t . | . \n");

}

int main(void)
{
print_header();

srand( (unsigned)time(NULL) );

int numCerto = 1 + (rand() % 1000);
int numEsco = -1;

do{
printf("Qual o número?\nR:");
scanf("%d",&numEsco);
printf("\n");

if (numEsco < numCerto){
printf("Errou, é maior.");
}
else if(numEsco > numCerto){
printf("Errou, é menor.");
}
printf("\n");
}
while(numCerto != numEsco);

print_msg(numCerto);

return numCerto;
}