Instrução auxiliada por computador: variando os tipos de problemas. Modifique o programa do Exercício 5.53 de modo a permitir que o usuário escolha um tipo de problema aritmético para estudar. Uma opção 1 significa problemas de adição, 2 significa problemas de subtração, 3 significa problemas de multiplicação e 4 significa uma mistura aleatória de todos esses tipos.

Passo 1

Fala ai, blz?

Tá pronto pra mais um programinha?

Primeiro, colocamos todas as bibliotecas que vamos precisar, nesse programa foram utilizadas a , a e a . Em seguida, já fazemos os protótipos das funções que serão necessárias.

Depois, vamos para função main, nela usamos a função srand para que se possa gerar números distintos e também utilizamos um laço while para chamar a nossa função Tabuada infinitas vezes.

Passo 2

Agora vamos criar nossa função Tabuada, primeiro determinamos o seu tipo, após isso definimos as variáveis que serão essenciais dentro da função. Em seguida é impresso ao aluno a mensagem “Escolha o tipo de problema aritmético…” e depois que o aluno digita o tipo, esse é armazenado na variável tipo . Logo em seguida é impresso uma nova mensagem ao aluno, “Escolha um nível de dificuldade de 1- 3”, e a resposta do aluno é armazenada na variável nivel.

Passo 3

Utilizando o laço for para assegurar que cada usuário responda 10 perguntas do nível e com o tipo de operação já escolhidas.

Em seguida é realizado duas chamadas da função SorteiaNum em cada passada do laço for, essa função vai fornecer os números aleatórios que serão utilizados em cada operação de acordo com o nível escolhido.

calma aí que tem mais, agora utilizamos o switch para selecionar o tipo de operação que será realizada com os números obtidos. Quando o aluno digita 1 por exemplo, ele receberá 10 probleminhas envolvendo a adição, e a cada vez que ele acerta um probleminha é acrescentado uma unidade na variável acertos. Lembrando que isso é feito para as demais operações (soma, subtração e multiplicação).

Passo 4

Entretanto na opção de número 4, que consiste na mistura aleatória dos tipos de problemas aritméticos, fazemos um pouco diferente.

Chamamos novamente a função SorteiaNum, para que nossa operação aleatória envolva 3 números . Posteriormente chamamos a função OpAleatoria , que iremos já conhecer sua estrutura, e armazenamos o retorno dessa função na variável acertos.

Passo 5

Conhecendo a função SorteiaNum

Nessa função receberemos como parâmetro o nível do qual o usuário deseja que seja seu problema. Se o nível for 1, será sorteado um número entre 0 e 9. No entanto, se o nível for 2, será sorteado um número entre 0 e 99. Porém, se o nível for 3, será sorteado um número entre 0 e 999. Em seguida esse número será retornado para a função Tabuada, e armazenado nas variáveis num1, num2 e num3.

Passo 6

Conhecendo a função OpAleatoria

Essa função é executada quando o aluno opta pela opção 4, de problemas com operações aleatórias. Por isso que são passados para a função três parâmetros(num1, num2 e num3).

Nessa função utilizamos o rand para sortear números de 1 até 5, cada um desses números representará no switch um problema diferente. Caso seja o 1, então o usuário deverá realizar primeiro uma multiplicação e depois uma soma. E assim por diante, lembrando que a cada vez que o usuário digitar uma resposta certa, será acrescido uma unidade na variável acerto.

E por fim, a quantidade de acertos será retornado para função Tabuada e armazenado na variável acertos, como já vimos anteriormente.

Passo 7

Retornando para a função Tabuada

Temos o feedback para o aluno, caso ele tenha acertado 75% das perguntas independente do tipo de operação aritmética escolhida será exibido a mensagem “Parabéns, você está pronto para o próximo nível!”. Todavia, se ele acertar menos que 75%, será exibido a mensagem “Por favor, peça ajuda a seu professor.” Ufaaa, deu trabalho né? Mas o programa ficou show!

Abraços, e bons estudos! :)

Resposta

#include

#include

#include

/* protótipos das funções que serão utilizadas */

void Tabuada();

int SorteiaNum(int nivel);

int OpAleatoria(int num1, int num2, int num3);

/* função main inicia a execução do programa */

int main(){

srand(time(NULL)); /* semente gerador de números aleatórios */

while(1){

Tabuada(); /* chamada da função Tabuada */

}

return 0; /* indica conclusão bem-sucedida */

} /* fim do main */

/* Essa função é utilizada para escolher números de acordo com o nível */

int SorteiaNum(int nivel){

int num;

switch(nivel){

case 1:

num = rand() % 9; /* escolhe um número entre 0 - 9 */

break;

case 2:

num = rand() % 99; /* escolhe um número entre 0 - 99 */

break;

case 3:

num = rand() % 999; /* escolhe um número entre 0 - 999 */

break;

}

return num; /* a função retorna o num para função Tabuada*/

} /* fim da função SorteiaNum */

/* A função sorteia a opção aleatória a ser realizada*/

int OpAleatoria(int num1, int num2, int num3){

int op;

int resultado;

double certo = 0;

op = 1 + rand() % 5;

switch(op){

case 1:

printf("Quanto é %d + %d * %d ?\n", num1,num2,num3);

scanf("%d", & resultado);

if((num1 + num2 * num3) == resultado){

certo++;

} /* fim do if */

break;

case 2:

printf("Quanto é %d - %d * %d ?\n", num1,num2,num3);

scanf("%d", & resultado);

if((num1 - num2 * num3) == resultado){

certo++;

}

break;

case 3:

printf("Quanto é %d + %d - %d ?\n", num1,num2,num3);

scanf("%d", & resultado);

if((num1 + num2 - num3) == resultado ){

certo++;

}

break;

case 4:

printf("Quanto é %d - %d + %d ?\n", num1,num2,num3);

scanf("%d", & resultado);

if((num1 - num2 + num3) == resultado){

certo++;

}

break;

case 5:

printf("Quanto é %d * %d * %d ?\n", num1,num2,num3);

scanf("%d", & resultado);

if((num1 * num2 * num3) == resultado){

certo++;

}

break;

}

return certo; /* retorna a quantidade de acertos para a função Tabuada */

} /* fim da função opAleatoria*/

void Tabuada(){

int tipo, nivel;

int num1,num2, num3;

int resp;

double acertos = 0;

printf("Escolha o tipo de problema aritmético.\nDigite: \n1 - Adição\n2 - Subtração\n3 - Multiplicação\n4 - Mistura Aleatória\n");

scanf("%d", & tipo);

printf("Escolha um nível de dificuldade de 1 - 3:\n");

scanf("%d", & nivel);

for(int i = 0; i

num1 = SorteiaNum(nivel);

num2 = SorteiaNum(nivel);

switch(tipo){

case 1:

printf("Quanto é %d + %d ?\n", num1, num2);

scanf("%d",& resp);

if((num1 + num2)== resp){

acertos++;

}

break;

case 2:

printf("Quanto é %d - %d ?\n", num1, num2);

scanf("%d",& resp);

if((num1 - num2) == resp){

acertos++;

}

break;

case 3:

printf("Quanto é %d x %d ?\n", num1, num2);

scanf("%d",& resp);

if((num1 * num2) == resp){

acertos++;

}

break;

case 4:

num3 = SorteiaNum(nivel);

acertos = OpAleatoria(num1, num2,num3);

break;

} /* fim do switch */

} /* fim do for */

/* dando o feedback para cada usuário sobre seu desempenho */

if(acertos / 10 >= 0.75){

printf("Parabéns, você está pronto para o próximo nível!\n");

} /* fim do if*/

else{

printf("Por favor, peça ajuda a seu professor.\n");

} /* fim do else */

}/* fim da função Tabuada */