Mandar um cafézinho para o programador:


Me ajude a transformar café em código!

IF e ELSE aninhados em C++

Neste tutorial de nossa apostila de C++, vamos aprender a usar uma técnica muito importante e usada na programação, que são IF ELSE dentro de IF ELSE, aninhados.
Apostila grátis de C++
Estudar pelo PDF

IF e ELSE dentro de IF e ELSE

Vamos explicar a técnica de se aninhar IF e ELSE através de exemplos.

Crie um programa em C++ que pede dois números, e diz se são iguais ou um é maior que o outro (mostrando quem é quem).

Vamos lá, vamos armazenar os números nas variáveis: num1 e num2
O primeiro teste é o if(num1 == num2), para saber se são iguais.
Se forem, avisa e acabou o programa.

Se não for, temos duas opções:
  1. num1 é maior que num2
  2. num2 é maior que num1
Ou seja, temos que fazer mais um teste dentro do ELSE.
Vamos inserir lá dentro o teste:
if (num1 > num2)

Se ele for verdade, diz que num1 é maior que num2.
E se for falso?

Aí ele deve cair dentro de outro ELSE, desse segundo IF aninhado, entendeu?
Vamos ver como fica nosso código:
#include <iostream>
using namespace std;

int main()
{
    float num1, num2;

    cout << "Primeiro numero: ";
    cin >> num1;

    cout << "Segundo numero: ";
    cin >> num2;

    if(num1==num2)
        cout <<"São iguais" << endl;
    else
        if(num1 > num2)
            cout << num1 <<" é maior que "<<num2 << endl;
        else
            cout << num2 <<" é maior que "<<num1 << endl;

    return 0;
}
Veja que fizemos uma indentação, ou seja, demos um espaçamento de modo que cada else fique na mesma vertical do seu respectivo if.

Exemplo de IF e ELSE aninhados

Você foi contratado por um hospital para verificar se as pessoas podem doar sangue ou não.
Elas só podem doar se tiverem 18 anos ou mais e não tiverem nenhuma doença.
Faça um programa em C++ que pergunta a idade da pessoa e se ela possui alguma doença, depois diga se ela pode doar sangue ou não.

Vamos primeiro ao código:
#include <iostream>
using namespace std;

int main()
{
    int age, dis;

    cout <<"Sua idade: ";
    cin >> age;

    cout <<"Você tem alguma doença?"<<endl;
    cout <<"1. Não" << endl;
    cout <<"2. Sim" << endl;
    cin >> dis;

    if( age>=18 ){
        if(dis==1)
            cout << "Você pode doar sangue!";
        else
            cout << "Você não pode doar sangue, pois está doente";
    }else{
        cout << "Você precisa ter 18 anos ou mais para doar sangue";
    }

    return 0;
}
Bem, vamos lá.
Primeiro armazenamos a idade na variável age.
Depois, o usuário deve digitar 1 caso não tenha doença e 2 caso tenha, essa resposta ficará armazenada na variável dis.

Agora os testes.
Primeiro, verificamos se tem 18 anos ou mais. Se não tiver, cai no ELSE e avisa que precisa ter 18 anos ou mais para doar.

Se sim, se tiver 18 ou mais, vamos verificar se ele não possui doença, ou seja, se digitou 1.
Se não tiver, avisamos que pode doar.
Caso ele tenha digitado 2, avisa que pessoas doentes não podem doar sangue.

Bacana não?
Agora um teste hacker: rode o programa acima e encontre algum erro.

IF e ELSE aninhados em C++

Se você tiver menos de 16, não pode votar. De 16 até 18 é facultativo. A partir de 65 também.
De 18 até 65, é obrigatório votar.  Faça um programa em C++ que peça a idade do usuário e diga se ele é obrigado a votar, se é opcional ou se não pode votar.

Bom, vamos lá.
No primeiro IF vamos logo colocar a 'galera' que tem menos de 16 anos, elas não pode votar.

Se tiver 16 ou mais, vai pro ELSE.
Dentro desse ELSE, vamos verificar se é menor de 18 com um IF, se for, diz que é opcional.

Se não for menor, é porque tem 18 ou mais.
Vamos testar se tem menos de 65 anos, se tiver é obrigado a votar.

Se não tem menos, cai no último ELSE e a pessoa tem mais de 65 anos, votando opcionalmente.
Veja como ficou nosso código:
#include <iostream>
using namespace std;

int main()
{
    int age;

    cout <<"Sua idade: ";
    cin >> age;

    if(age < 16)
        cout << "Nâo pode votar." << endl;
    else
        if(age < 18)
            cout << "Voto facultativo." << endl;
        else
            if(age < 65)
                cout << "É obrigado a votar." << endl;
            else
                cout << "Voto facultativo." << endl;

    return 0;
}

O comando IF/ELSE IF

Crie um programa que peça a nota de uma prova para um aluno, que valia de 0.0 até 10 .
Se a nota for maior ou igual a 9, diga que ele tirou A.
Se for de 8.0 até 8.9, diga que essa pessoa tirou B.
Se for de 7.0 até 7.9, diga que ela tirou C.
Se for de 6.0 até 6.9, diga que ela tirou D.
Se for abaixo de 6.0, ela tirou F.

O primeiro teste a fazer é ver se a nota é maior ou igual a 9.0, se for, acaba no primeiro IF a execução do programa.

Se não for, vai pro ELSE.
Dentro ELSE precisamos testar com um novo IF se o valor é maior ou igual a 8.0.
Veja bem, só cai nesse IF interno se for de 8.0 até 8.9, acima disso teria caído no primeiro IF.

Se não for, vai cair dentro de um outro ELSE interno.
Dentro desse ELSE, vamos testar (IF) se é de 7.0 até 7.9

Se não for, criamos mais um ELSE e dentro dele um IF para saber se é de 6.0 até 6.9

Por fim, se não for nenhuma das opções acima, é nota F.

Vamos ver como ficou nosso código:
#include <iostream>
using namespace std;

int main()
{
    float grade;

    cout << "Sua nota ";
    cin >> grade;

    if(grade >= 9)
        cout << "Nota A"<<endl;
    else
        if(grade >=8 )
            cout << "Nota B"<<endl;
        else
            if(grade >=7 )
                cout << "Nota C"<<endl;
            else
                if(grade >=6 )
                    cout << "Nota D"<<endl;
                else
                    cout << "Nota F"<<endl;

    return 0;
}
Note que o código C++ vai 'indo' pra direita.
Imagina se tivesse mais 10 condições para testar, como ficaria nosso código?
Uma bagunça, não é verdade?

Agora se eu pegar o mesmo código e fizer isso:
#include <iostream>
using namespace std;

int main()
{
    float grade;

    cout << "Sua nota ";
    cin >> grade;

    if(grade >= 9)
        cout << "Nota A"<<endl;
    else if(grade >=8 )
        cout << "Nota B"<<endl;
    else if(grade >=7 )
        cout << "Nota C"<<endl;
    else if(grade >=6 )
        cout << "Nota D"<<endl;
    else
        cout << "Nota F"<<endl;

    return 0;
}
Não fica mais legível?
É uma boa técnica de programação, pois facilita a leitura e entendimento do código.

Um comentário:

  1. Gostei do conteúdo, mas faltou explicar melhor como exatamente funcionava o "else if". Tive que pesquisar em outros sites.

    ResponderExcluir

Ajude o C++ Progressivo

Que tal apoiar e fazer crescer o ensino da programação no Brasil ?

Ajudar nosso país a crescer e se desenvolver cada vez mais, tecnologicamente?

Clica abaixo pra saber mais!

Apoiar o Projeto Progressivo