Exercício 6: Escrever um programa no qual o usuário fornece dois valores a e b e este é passado para uma função geraNum que gera um número aleatório contido no intervalo [a, b]. Após isso, uma função adivinhaNum é tal que requisita que o usuário adivinhe qual foi o número sorteado e deve tratar três possíveis situações:
(A) Se o número que o usuário forneceu é maior do que aquele que foi sorteado, então, a mensagem “Número muito alto. Tente de Novo” aparece e uma nova leitura deve ser realizada.
(B) Se o número que o usuário forneceu é menor do que aquele que foi sorteado, então, a mensagem “Número muito baixo. Tente de Novo” aparece e uma nova leitura deve ser realizada.
© Se o número que o usuário forneceu é igual aquele que foi sorteado, então, a mensagem “Acertou. Numero de tentativas: xxx” aparece e programa pergunta se deseja continuar jogando ou não.
(A) Se o número que o usuário forneceu é maior do que aquele que foi sorteado, então, a mensagem “Número muito alto. Tente de Novo” aparece e uma nova leitura deve ser realizada.
(B) Se o número que o usuário forneceu é menor do que aquele que foi sorteado, então, a mensagem “Número muito baixo. Tente de Novo” aparece e uma nova leitura deve ser realizada.
© Se o número que o usuário forneceu é igual aquele que foi sorteado, então, a mensagem “Acertou. Numero de tentativas: xxx” aparece e programa pergunta se deseja continuar jogando ou não.
Passo 1
O enunciado pede um programa em C que sorteie um número inteiro no intervalo [a,b] e depois faça o usuário adivinhar esse número, usando funções, loops e estruturas condicionais.
Passo 2
Para gerar um número aleatório no intervalo [a,b] em C, usamos srand(time(NULL)) para inicializar o gerador e a fórmula abaixo, baseada em rand() e operação módulo:
Passo 3
Implementar a função geraNum que recebe dois inteiros a e b e retorna o valor n definido pela fórmula acima.
Passo 4
Implementar a função adivinhaNum que recebe o número sorteado, inicializa um contador de tentativas e executa um laço do…while: a cada iteração lê o palpite do usuário, incrementa o contador e compara com o número sorteado. Se o palpite for maior, exibe “Número muito alto. Tente de Novo”; se for menor, exibe “Número muito baixo. Tente de Novo”. Quando o palpite for igual, sai do laço e imprime “Acertou. Numero de tentativas: xxx”.
Passo 5
No main, chamar srand(time(NULL)), depois usar um do…while para permitir vários jogos. Em cada rodada lê a e b, chama geraNum e adivinhaNum, depois pergunta “Deseja continuar jogando? (s/n)” e repete enquanto o usuário responder ‘s’ ou ‘S’.
Resposta
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <stdlib.h>
#include <time.h>
int geraNum(int a, int b) {
return a + rand() % (b - a + 1);
}
return a + rand() % (b - a + 1);
}
void adivinhaNum(int num) {
int guess;
int tentativas = 0;
do {
printf(“Digite um numero: “);
scanf(”%d”, &guess);
tentativas++;
if (guess > num)
printf(“Numero muito alto. Tente de Novo\n”);
else if (guess < num)
printf(“Numero muito baixo. Tente de Novo\n”);
} while (guess != num);
printf(“Acertou. Numero de tentativas: %d\n”, tentativas);
}
int guess;
int tentativas = 0;
do {
printf(“Digite um numero: “);
scanf(”%d”, &guess);
tentativas++;
if (guess > num)
printf(“Numero muito alto. Tente de Novo\n”);
else if (guess < num)
printf(“Numero muito baixo. Tente de Novo\n”);
} while (guess != num);
printf(“Acertou. Numero de tentativas: %d\n”, tentativas);
}
int main() {
int a, b;
char resp;
srand(time(NULL));
do {
printf(“Informe o intervalo [a b]: “);
scanf(”%d %d”, &a, &b);
int numSorteado = geraNum(a, b);
adivinhaNum(numSorteado);
printf(“Deseja continuar jogando? (s/n): “);
scanf(” %c”, &resp);
} while (resp == ‘s’ || resp == ‘S’);
return 0;
}
int a, b;
char resp;
srand(time(NULL));
do {
printf(“Informe o intervalo [a b]: “);
scanf(”%d %d”, &a, &b);
int numSorteado = geraNum(a, b);
adivinhaNum(numSorteado);
printf(“Deseja continuar jogando? (s/n): “);
scanf(” %c”, &resp);
} while (resp == ‘s’ || resp == ‘S’);
return 0;
}