Enviar um café pro programador

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

Programa que diz se você passou, ficou de recuperação ou reprovou

Vamos resolver mais um programa que foi proposto em nosso artigo, de nossa apostila C Progressivo, sobre questões envolvendo o teste condicional IF ELSE.

Clique aqui e saiba como obter seu certificado de programação C! Entre já no Mercado de Trabalho!


Programa em C

Crie um programa em C que recebe uma nota (entre 0.0 e 10.0) e checa se você passou direto, ficou de recuperação ou foi reprovado na matéria.

A regra é a seguinte:
Nota 7 ou mais: passou direto
Entre 4 e 7: tem direito de fazer uma prova de recuperação
Abaixo de 4: reprovado direto




Vamos fazer isso usando condições, testando com if e else o que foi digitado pelo usuário. No caso, a nota.
Vamos colocar if dentro de if, essa técnica se chama aninhar (nested).

Vou dar uma importante dica que você vai usar por toda sua vida de programador, que é uma das maiores lições que sei e posso passar:

"Um problema difícil nada mais é que uma série de pequenos problemas fáceis."

E qual pra transformar um problema difícil em fáceis?

Usando a técnica de Jack, o estripador: por partes. Quebre o programa.

Todo e qualquer projeto, desde esse que vou passar até os da NASA, são divididos em área, partes...na criação de um jogo, tem gente especializada até no desenho das árvores, no barulho das armas e se o eco vai ser realista.


Ok, vamos lá.

Criar um programa que recebe uma nota do usuário você já sabe, é só usar a função scanf.

Mas o nosso curso vai ser focado nas boas práticas, vamos focar em criar aplicações robustas.

O que é isso?
Vamos minimizar o máximo possível os possíveis problemas que possam aparecer quando usuário for usar o problema.

Parte 1: Tendo a certeza que o usuário vai digitar uma nota válida

Você pensou nisso? E se o energúmeno digitar 11 ou -1.1 ?
Não pode.

O primeiro passo da nossa aplicação é ter a certeza que ele vai digitar uma nota ENTRE 0.0 e 10.0!

Se for 0.0 até 10.0, ok, e se não for? Acaba o programa.
Fica assim:
        
printf("Digite sua nota [0.0 - 10.0]: " );
scanf("%f", &nota);
        
if( (nota <= 10.0) && (nota >= 0.0) )
{
   printf("Nota válida\n");
} 
else 
{
   printf("Nota inválida, fechando aplicativo");
}


O que fizemos foi certificar que a nota é menor que 10.0 E maior 0.0 !

Os dois casos precisam ser satisfeitos, por isso o operador lógico &&.

Teste. Coloque 10.1, 10.5, 21.12, -19, -0.000001, "c progressivo".

Você tem que fazer muito isso: testar.
Nas grandes empresas tem gente contratada só pra isso: testar (estagiários ou bolsistas).

Eliminada as possibilidades de notas absurdas, prossigamos.


Parte 2: 

Checando se passou direto
Vamos colocar mais um if else que vai checar se o aluno passou direto ou não.
Por hora, esqueça o código feito.

Como seria esse código pra testar se ele passou direto? Fácil:



if( nota >= 7.0 )
{
   printf("Parabens, voce passou direto. Voce deve ser programador C, por acaso estuda pela apostila C Progressivo ?\n");
}
else 
{
            printf("Nao passou direto");
}


Vamos colocar esse trecho de código abaixo daquele print que diz 'nota válida'.

Então, vamos pensar como o C pensa:

Primeiro ele recebe o resultado.

Checa se está entre 0.0 e 10.0. Se não está, pula pro else e terminou o programa.

Se estiver entre 0.0 e 10.0, diz que a nota é válida e depois faz outro teste em outro if, pra checar se a nota é maior que 7.0, se for diz passou direto, se não for diz que não passou direto.


O código ficaria assim:

     
if( (nota <= 10.0) && (nota >= 0.0) )
{
   printf("Nota válida");
         
   if( nota >= 7.0 )
   {
      printf("Parabens, voce passou direto. Voce deve ser programador C, por acaso estuda pela apostila C Progressivo ?\n");
   }
   else 
   {
      printf("Não passou direto\n");
   }
         
}
else 
{
   printf("Nota inválida, fechando aplicativo");
}

Teste.

Note que o C é um professor super rigoroso. Se tirar 6.99 não passa direto!

Parte 3: 

Checando se você ainda há esperanças
Bom, agora vamos checar se o aluno ainda pode fazer recuperação, ou seja, se a nota está entre 4.0 e é menor que 7.0.
Caso seja exatamente 7.0, passará automaticamente.
O código pra essa parte é o seguinte:


if( nota >= 4.0 )
{
    printf("Vai ter que fazer recuperacao");
}
else 
{
    printf("Reprovado. Estude C que voce ficara mais inteligente");
}

Note que se não for maior ou igual a 4.0, é menor, então vai pro else.

Ora, se é menor, foi reprovado. Então o else manda mensagem de reprovação.
A pergunta é, onde vamos inserir esse código?
No else do trecho 'Não passou direto'

Então, o código completo em C fica:

Código C:
#include <stdio.h>

int main()
{
        float nota; //vai armazenar a nota

        printf("Digite sua nota [0.0 - 10.0]: " );
        scanf("%f", &nota);

        if( (nota <= 10.0) && (nota >= 0.0) )
        {
            if( nota >= 7.0 )
            {
                printf("Parabens, vocc passou direto. Voce deve ser programador C\n");
            }
            else
            {

                if( nota >= 4.0 )
                {
                    printf("Voce vai para a recuperacao\n");
                }
                else
                {
                    printf("Reprovado. Estude C que voce ficara mais inteligente\n");
                }
            }

        }
        else
        {
            printf("Nota inválida, fechando o programa C\n");
        }

}

5 comentários:

Monarquista Convicto disse...

Meu código ficou assim:

#include

int main()
{
float nota;

printf("Insira sua nota: ");
scanf("%f.2",&nota);

if((nota >= 0) && (nota <= 10))
{
if(nota >= 7.00)
printf("Parabéns, você foi aprovado!");
if((nota >= 4.00) && (nota < 7.00))
printf("Você deve fazer outra prova de recuperação.");
if(nota < 4.00)
printf("Reprovado.");
}

else
printf("o valor digitado é inválido.");

return 0;

}

Funcionou.

Unknown disse...

#include

int main()

{
float nota;

printf("Digite sua nota [0.0 - 10.0]: " );
scanf("%f", &nota);

if(( nota >= 10.0) && (nota <= 10.0))
printf("Parabens tirou nota maxima, Mesmo assim nao deixe de aprimorar seus estudos\n");
else
if( (nota <= 10.0) && (nota >= 0.0) )
{ if( nota >= 7.0 )

{
printf("Parabens, voce passou direto. Voce deve ser programador C, por acaso estuda pela apostila C Progressivo ?\n");
}
else
{
printf("Nao passou direto\n");
if( nota >= 7.0 )
{
printf("Parabens, voce passou direto. Voce deve ser programador C, por acaso estuda pela apostila C Progressivo ?\n");
}
else
{
printf("Nao passou direto\n");
}
}
}
else
{
printf("Nota inválida, fechando aplicativo");
}

}

Unknown disse...

#include

int main (){
int nota;

printf("digite a nota: \n");
scanf("%d", &nota);

if ((nota > 7 ) && nota < 11){
printf("você passou de ano");
}
if (nota >= 11){
printf("essa media não existe");
}
if ((nota < 7 ) && nota > 4 ) {
printf("vocÊ está de recuperação");
}
if (nota < 4 ){
printf("reprovado");
}

}

Leonardo disse...

Meu código ficou assim:







#include
#include

int main()
{
setlocale(LC_ALL, "Portuguese");

float nota;

printf("Insira a nota da sua prova: ");
scanf("%f", &nota);

if(nota<0)
printf("\nNota inválida\n\n");

if((nota>=0) && (nota<4))
printf("\nVocê foi reprovado\n\n");

if((nota>=4) && (nota<=7))
printf("\nVocê ficou de recuperação\n\n");

if((nota>7) && (nota<=10))
printf("\nVocê foi aprovado, parabens\n\n");

if((nota>10))
printf("\nNota inválida\n\n");

system("pause");


}

Ianrece disse...

Meu código ficou assim, fiz uma alteração ou outra, mas o resultado é o mesmo, ainda ficou digamos que "um pouco mais complexo" pois define um aluno atribui notas do primeiro e segundo "Bimestre" exemplo e calcula as notas chegando até a média.

#include

int main()
{
float nota1,nota2,resultado;

char aluno[15];

printf("\n Digite o nome do aluno \t");
scanf("%s",&aluno);

printf("\n Digite a nota 1 do aluno \t");
scanf("%f",&nota1);

printf("\n Digite a nota 2 do aluno \t");
scanf("%f",&nota2);


if((nota1 && nota2 <=10.0 ) && (nota1 && nota2 >= 0.0))
{
resultado = (nota1 + nota2)/2;
printf("\n A media das notas do aluno %s e: %.1f",aluno,resultado);

}
else
{
printf("\n Nota invalida");

}

if(resultado >=7)
{
printf("\n O aluno %s esta APRVOADO",aluno);

}
else if(resultado <6)
{
printf("\n O aluno %s esta REPROVADO",aluno);
}
else
{
printf("\n O aluno %s esta em EXAME",aluno);
}

}