Ir ao conteúdo
  • Cadastre-se

Programa para calcular média e media de recuperação


Hugo Brasileiro

Posts recomendados

Pessoal, segue o programa que acabei de fazer: 

 

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

int main()
{
    float np1, np1t, np1tot, np2, np2t, np2tot, med, af, pass;
    printf ("Digite sua primeira np1: ");
    scanf ("%f", &np1);
    printf ("Digite sua segunda np1: ");
    scanf ("%f", &np1t);
    np1tot = (np1 + np1t) / 2;
    printf ("Sua media da np1 e: %1.f \n",np1tot);
    printf ("Digite sua primeira np2: ");
    scanf ("%f", &np2);
    printf ("Digite sua segunda np2: ");
    scanf ("%f", &np2t);
    np2tot = (np2 + np2t) / 2;
    printf ("Sua media da np2 e: %1.f \n",np2tot);
    med = (np1tot + np2tot) / 2;
    printf ("Sua media total e: %1.f \n",med);
        if (med < 4) {
                printf ("voce foi reprovado.");
        } else if ((med >= 4 && med < 8)){
                printf ("voce vai para final. \n");
                printf ("Se ja tiver feito a prova, digite sua nota:  ");
                scanf ("%f", &af);


         } if (af < 5){
                printf ("voce vai repetir a cadeira.");
          } else {
                pass = med + af;
                if (pass < 10){
            printf ("voce VAI repetir a cadeira");
        } else if ((pass >= 10)) {
            printf ("voce passou, BOAS FERIAS!");
            }
        }


    return 0;
}

 

O programa está praticamente inteiramente correto, o problema é que se eu colocar todas as notas abaixo de 4, deveria aparecer apenas "voce foi reprovado.", mas ao invés disso, aparece "voce foi reprovado.voce passou, BOAS FERIAS!"

Alguém sabe dizer porque isso está acontecendo?

Link para o comentário
Compartilhar em outros sites

@Hugo Brasileiro  Pode colocar o enunciado da questão para buscarmos a melhor solução?

Segue abaixo uma possível solução e correção de alguns erros básicos:

 

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

int main() {
  float np1, np1t, np1tot, np2, np2t, np2tot, med, af, pass;

  printf ("Digite sua primeira np1: ");
  scanf ("%f", &np1);
  printf ("Digite sua segunda np1: ");
  scanf ("%f", &np1t);
  np1tot = (np1 + np1t) / 2.0;
  printf ("Sua media da np1 e: %.1f \n", np1tot);
  printf ("Digite sua primeira np2: ");
  scanf ("%f", &np2);
  printf ("Digite sua segunda np2: ");
  scanf ("%f", &np2t);
  np2tot = (np2 + np2t) / 2.0;
  printf ("Sua media da np2 e: %.1f \n", np2tot);
  med = (np1tot + np2tot) / 2.0;
  printf ("Sua media total e: %.2f \n", med);

  if (med < 4)
    printf ("voce foi reprovado.");
  else if ( med >= 4 && med < 8) {
    printf ("voce vai para final. \n");
    printf ("Se ja tiver feito a prova, digite sua nota:  ");
    scanf ("%f", &af);
  }

  if (af < 5 ) {
    printf ("voce vai repetir a cadeira.");
  } else if (af >= 5 && med >= 4) {
    pass = med + af;
    if (pass < 10)
      printf ("voce VAI repetir a cadeira");
    else if (pass >= 10)
      printf ("voce passou, BOAS FERIAS!");
  }


    system("pause");
    return 0;
  }

 

Link para o comentário
Compartilhar em outros sites

@CiroboyBR O enunciado é o seguinte:

Na universidade, durante o semestre, tem duas avaliações: NP1 e NP2, sendo cada uma elas dividida em duas partes: trabalho e prova.

O que eu tenho que fazer é o que o programa faça a media da np1 ( trabalho + prova ) / 2, depois a media da np2 ( trabalho + prova ) / 2. Fazendo isso, tenho que calcular a media do aluno ( np1total + np2total ) / 2, onde se ela ficar abaixo de 4 o aluno será reprovado, entre 4 e 8 o aluno vai pra final, e entre 8 e 10 o aluno passa direto. Ainda no mesmo programa, tenho que pedir ao aluno a nota da avaliação final dele ( caso ele tenha ficado com media entre 4 e 8 ) e depois calcular se ele passou ou não ( a media + a avaliação final somadas tem que ser no mínimo 10, sabendo que a avaliação final não pode ter sido menor que 5. ) Eu consegui fazer o programa todo funcionar, o único problema nele é que quando a nota está abaixo de 4 aparece uma mensagem errrada: voce foi reprovado.voce passou, BOAS FERIAS!. Obviamente, deveria aparecer apenas o "voce foi reprovado." 

 

Em que eu errei? Sei que foi nos ''if'' ou ''else'' mas em qual parte?

Link para o comentário
Compartilhar em outros sites

@Hugo Brasileiro Você tinha cometido alguns pequenos erros nas impressões dos números, você usou "%1.f" ao invés de "%.1f".

Mas o erro que você relatou foi porque em um if você colocou apenas " if ( af >= 5 ), o certo seria:

else if (af >= 5 && med >= 4)



Fiquei na dúvida sobre essa parte " entre 4 e 8 o aluno vai pra final", se com média 8 pra frente o aluno passa, então esse algoritmo que te passei está correto.


Só complementando, quando for dividir números reais, não divida por inteiros, pois o resultado pode ser um inteiro. se vai dividir por uma constante, acrescente .0 a ela. ex:

np1tot = (np1 + np1t) / 2;  //errado

np1tot = (np1 + np1t) / 2.0; // certo

Link para o comentário
Compartilhar em outros sites

Visitante
Este tópico está impedido de receber novas respostas.

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...