• Matéria: Informática
  • Autor: lucicampos22
  • Perguntado 6 anos atrás

Programação linguagem C++

Alguém sabe me dizer, o porque quando vou complicar o programa, ele aparece o "aluno de recuperação" e quando mudo as notas, não aparece o aprovado ou o reprovado?
o que tem de errado nos códigos ?

#include
#include

using namespace std;
int main() {
int NOTA1, NOTA2;
double MEDIA;

cout > NOTA1 ;
cout > NOTA2 ;

MEDIA = (NOTA1 + NOTA2) / 2 ;

if ((MEDIA <=0.0)&&(MEDIA<=4.0)) {
cout << "ALUNO REPROVADO! " ;

}
else
if ((MEDIA<=4.0)&&(MEDIA<=6.0)) {

cout << "ALUNO DE RECUPERACAO! " ;

}
else
if ((MEDIA<=7.0)&&(MEDIA<=8.0)) {

cout << "ALUNO APROVADO!" ;
}
else
return 0;
}

Respostas

respondido por: thiagopokem
1

Resposta:

As condições foram feitas de forma incorreta:

Você colocou que para o aluno ser reprovado a media dele deve ser <= 0.0 e <= 4.0 então o código só executará este comando quando media atender as duas condições e este caso só irá ocorrer quando a media for menor que 0.

if ((MEDIA <=0.0)&&(MEDIA<=4.0)) {

cout << "ALUNO REPROVADO! " ;

}

O certo seria colocar apenas uma verificação:

if ((MEDIA<4.0)) {

cout << "ALUNO REPROVADO! " ;

}

Desse modo ele só verificaria se a nota do aluno é menor que 4.0, já que se ela for 4.0 o aluno irá para a recuperação.

Para o segundo enfrentamos o mesmo problema, só que agora você quer o intervalo entre 4.0 e abaixo de 6.0, pois se for 6.0 o aluno estará na média correta para ser aprovado, só que neste caso você colocou como uma das condições a media ser <= 4.0, que é justamente quando o aluno é reprovado:

else

if ((MEDIA<=4.0)&&(MEDIA<=6.0)) {

cout << "ALUNO DE RECUPERACAO! " ;

}

Para arrumar isso como estamos em estrutura encadeada bastaria colocar uma única condição:

else

if (MEDIA<6.0) {

cout << "ALUNO DE RECUPERACAO! " ;

}

Perceba que com a correção anterior você terá verificado se o número é menor que 4.0, então se ele foi para o próximo if da estrura condicional ele só pode ser maior que 4.0 . Com isso você só precisa verificar se a média é menor que 6.0, pois as pessoas que não tiraram menos que 4.0, mas tiraram abaixo de 6.0 estão de recuperação.

Já o último também temos o mesmo problema, para o aluno ser aprovado só precisaria verificar se a media dele é >= 6.0, pois significa que se ele tirou 6.0 ou acima de 6.0 ele terá sido aprovado.

else

if (MEDIA >= 6.0) {

cout << "ALUNO APROVADO!" ;

}

Código Final:

using namespace std;

int main() {

double NOTA1 = 0, NOTA2 = 0;

double MEDIA;

cout << "Digite a nota 1:\n";

cin >> NOTA1 ;

cout << "Digite a nota 2:\n";

cin >> NOTA2;

MEDIA = (NOTA1 + NOTA2) / 2 ;

if (MEDIA < 4.0) {

   cout << "ALUNO REPROVADO! " ;

}

else if (MEDIA < 6.0) {

   cout << "ALUNO DE RECUPERACAO! " ;

}

else if (MEDIA >= 6.0) {

   cout << "ALUNO APROVADO!" ;

}

return 0;

}


lucicampos22: obrogada! Eu tentei com seu codigo, mas nao complicou.. nao sei pq.
thiagopokem: Oi, encontrei o erro, desculpe não entendo a sintaxe do C++, só entendo C#, Java e um pouco de Python.
thiagopokem: O problema está na entrada de dados
thiagopokem: cout > NOTA1 ;
cout > NOTA2 ;
thiagopokem: O certo seria cin << NOTA1; cin << NOTA2;
thiagopokem: Corrigi agora, também mudei as variáveis NOTA1 e NOTA2 para double, porque elas também pode ser decimais. Lembre-se que ao passar valores decimais deve-se utilizar ponto e não vírgula. Ex. 4.5 Também é importante que você leia atentamente a explicação da estrutura condicional, só tinha que melhorar a lógica para a resolução do problema.
thiagopokem: Corrigindo de novo XD o certo seria cin >> NOTA1; cin >> NOTA2;
lucicampos22: Obrigada, eu sei cin >> mas meu teclado não mostra. rodei o programa e deu certo, troquei os sinais de > ...
Perguntas similares