Linguagem C Básico Aula 05: Condições múltiplas e Ifs encadeados

 Ifs encadeados

Entendendo a questão

    Em muitas situações o direcionamento do fluxo dos dados não poderá ser feito testando apenas uma condição. Haverá casos em que mais de uma condição deverá ser analisada para que sigamos em uma direção ou outra. Em alguns casos, após seguir um fluxo seremos obrigados fazer outro teste condicional. 

    Pois bem, essa aula é sobre essas situações, mas não se preocupe, pois começaremos com situações básicas e só então abordaremos as mais complexas.

Condições duplas

    Condições duplas são testes lógicos onde duas condições são especificados na expressão matemática e precisam ser analisadas para uma decisão. Existem casos onde as duas condições precisam ser satisfeitas para que o teste seja verdadeiro, como também existem casos onde se uma única condição for verdadeira a outra nem precisará ser analisada. Vejamos alguns exemplos.

    Voltando ao nosso velho programinha de cálculo de médias, para que um aluno seja aprovado ou não muitas vezes se considera também a frequência de curso e não somente a média obtida. Assim, muitas escolas consideram que para ser aprovado o aluno precisa ter media maior ou igual a cinco e um frequência superior a 75%. Veja que nesse caso as duas condições precisam ser satisfeitas. 

    Este é um exemplo clássico de uma dupla condição onde utilizamos o operador E que na linguagem C é representado por &&. Em Portugol essa condição seria descrita dessa forma:

                se (media>=5 e frequencia>=75){
                escreva("Aprovado")
                }
                senao{
                escreva("Reprovado")
}

    Em Linguagem C teríamos o mesmo raciocínio:

                if (media>=5 && frequencia>=75){
                 printf("Aprovado");
                }
                else{
                 printf("Reprovado")
}

    Assim, reaproveitando o programa da aula passada temos:

  1. #include <stdio.h>

  2. int main()
  3. {
  4.     float nota1,nota2,media;
  5.     int frequencia;
  6.     printf("Digite a nota1: "); 
  7.     scanf("%f",&nota1);  
  8.     printf("Digite a nota2: ");
  9.     scanf("%f",&nota2);
  10.     printf("Digite a %% de Frequência: ");
  11.     scanf("%d",&frequencia);
  12.     media=(nota1+nota2)/2;
  13.     printf("Média Final: %.1f\n",media); 
  14.     if (media>=5 && frequencia>=75){
  15.         printf("Aluno foi Aprovado!");
  16.     }
  17.     else{
  18.         printf("Aluno foi Reprovado!");
  19.     }
  20.     return 0;
  21. }

    Experimente acessar o GDB Online para copiar+colar o código acima e prestar a atenção na linha 11. Aproveite para fazer alguns testes com diferentes notas e frequências. A propósito: Digite apenas um número inteiro de 0 a 100 para frequência, sem digitar o símbolo de porcentagem.

    Se você fez os testes deve ter reparado que apareceu a frase "Digite a % de Frequência: " com um único símbolo de porcentagem, apesar da nossa linha 11 do código apresentar %%. A explicação para isso é que se você quer que apareça um único símbolo de % em uma string, deverá digitar %% porque o primeiro será entendido como um especificador de formatação.

Ifs encadeados

    São situações onde, após um IF/ELSE direcionar o fluxo do programa, precisamos fazer uso de outros IFs para tomar novas decisões. Na prática é um IF dentro do outro ou dentro do ELSE. Isso fica melhor explicado quando vemos um problema típico sendo resolvido, por isso vamos voltar ao nosso programa de notas.

    Já sabemos que só será aprovado quem tiver média maior ou igual a cinco e uma frequência maior ou igual a setenta e cinco. No entanto podemos ter pessoas reprovadas pelo critério de nota ou pelo critério de frequência. 

  Digamos que a nossa escola decidiu que aqueles que tiveram média inferior a cinco, mas frequentaram mais de setenta e cinco porcento do curso devam ir para recuperação restando a reprovação apenas para aqueles que reprovaram por nota e por falta. 

    Vamos aproveitar o que vimos no curso de algoritmos e fazer um fluxograma para representar a situação:

Fluxograma com Ifs encadeados
Fluxograma com Ifs encadeados

    Repare que eu tenho dois losangos, por tanto tenho dois pontos onde se toma uma decisão para  seguir com o fluxo. Isso nos diz que teremos duas condições no algoritmo. Uma analisa quem foi aprovado e a outra analisa quem irá ou não para a recuperação. 

    Assim, nosso programa poderia ser escrito dessa forma:

  1. #include <stdio.h>

  2. int main()
  3. {
  4.     float nota1,nota2,media;
  5.     int frequencia;
  6.     printf("Digite a nota1: "); 
  7.     scanf("%f",&nota1);  
  8.     printf("Digite a nota2: ");
  9.     scanf("%f",&nota2);
  10.     printf("Digite a %% de Frequência: ");
  11.     scanf("%d",&frequencia);
  12.     media=(nota1+nota2)/2;
  13.     printf("Média Final: %.1f\n",media); 
  14.     if (media>=5 && frequencia>=75){
  15.         printf("Aluno foi Aprovado!");
  16.     }
  17.     else{
  18.         if (frequencia>=75){
  19.             printf("Aluno para recuperação!");
  20.         }
  21.         else{
  22.             printf("Aluno foi Reprovado por frequência!");
  23.         }
  24.     }
  25.     return 0;
  26. }

    Repare que eu destaquei em rosa o segundo IF dentro do primeiro ELSE para melhor visualizá-lo, mas durante a codificação é a indentação, isto é, o espaçamento mais a direita em relação ao primeiro, que melhor explica essa hierarquia.

    Existem também outras situações de condições múltiplas e até múltiplos ifs encadeados, mas eu prefiro evoluir um pouco mais no nosso curso falando de laços para depois mostrar exemplos mais uteis.


Próxima Aula                                                                                                                        Aula Anterior

Referências

DAMAS, L. Linguagem C. Rio de Janeiro: LTC Editora, 2007.

GBD ONLINE. C for Beginners. Disponível em: <https://learn.onlinegdb.com/c_for_beginners> Acesso em 05 ago. 2024.

GBD ONLINE. C Programming Examples Disponível em: <https://learn.onlinegdb.com/c_program_examples> Acesso em 05 ago. 2024.

W3SCHOOLS. C Tutorial. Disponível em: <https://www.w3schools.com/c/index.php> Acesso em 05 ago. 2024.