Estruturas de seleção: if-else
Teoria
E aí pessoal, aqui é o Juan do Responde Aí, e hoje vamos começar as estruturas de controle em C++
Tomando decisões.
Na vida, estamos cercados por momentos de tomada de decisão
Em programação não é diferente.
Imagine que eu diga pra você fazer um programa para controlar um carro autônomo, você vai precisar informar que: “Se o sinal estiver vermelho, o carro deve parar. Se estiver amarelo, o carro deve desacelerar. Se estiver verde, deve seguir em frente”
Ou imagine o sistema de uma faculdade que diz: “Se a média do aluno é maior que 7, então ele está aprovado. Se a média é menor que 7, então está reprovado”.
Esses são exemplos de tomadas de decisão, que ocorrem quando o resultado do nosso código deve se adaptar às entradas do usuário ou variações do mundo real.
A forma mais comum de executar tomadas de decisão é usando estruturas de seleção. Hoje vamos estudar a estrutura .
O comando if
O é o principal comando de seleção. Em bom português significa “se”! Basicamente, o comando executa um pedaço de código se uma determinada condição for verdadeira.
Pra usar o comando temos que usar a seguinte estrutura:
Simples assim! Usamos o comando , entre parêntesis escrevemos a condição que deve ser testada, e entre as chaves escrevemos o código que será executado.
A condição pode ser qualquer expressão booleana cujo o resultado final seja (verdadeiro) ou (falso)
Então vamos ver um exemplo. Vamos fazer um código que exibe uma mensagem pro usuário caso a média dele seja maior ou igual a 7.
Nas linhas 08 e 09 a gente recebe o valor da média do usuário.
Nas linhas 11 a 14 aplicamos o comando e estabelecemos a condição de que o valor da média deve ser maior ou igual a 7 .
No Exemplo 1 o usuário inseriu o valor , logo a condição é verdadeira e a mensagem “Aluno aprovado” é exibida. No Exemplo 2 o usuário inseriu o valor , portanto a condição é falsa, e por isso a mensagem não é exibida.
Depois que passar pelo comando o programa continua seu fluxo normal e atinge a linha 16 que exibe a mensagem “Obrigado por usar o programa”.
Sacou? O comando só afeta o código que fica entre as chaves da estrutura!
O comando else
No caso do exemplo anterior, quando a condição é falsa o programa ignora o código entre as chaves e simplesmente continua a execução normal.
Mas e se a gente quiser inserir a mensagem “Aluno reprovado” sempre que a condição não for atendida? Pra isso existe o comando , ele executa um bloco de código sempre que as condições anteriores não forem atendidas! Traduzindo, significa “caso contrário”.
Pra utilizar o basta colocá-lo logo após fechar as chaves do comando anterior.
Note que o comando não precisa de parêntesis, precisa só do par de chaves, já que a condição dele sempre é que as condições anteriores não sejam atendidas.
Vamos voltar pro exemplo anterior. Vamos imprimir uma mensagem de “Aluno reprovado” quando a nota for menor que :
Nas linhas 08 e 09 a gente recebe o valor da média do usuário.
Nas linhas 11 a 18 construímos a estrutura onde uma mensagem será exibida se o valor da média for maior ou igual a 7 , e caso contrário uma mensagem diferente será exibida.
No Exemplo 1 o usuário inseriu o valor , logo a condição é verdadeira e a mensagem “Aluno aprovado” é exibida, o comando else é ignorado e o programa pula direto pra linha 20.
No Exemplo 2 o usuário inseriu o valor , portanto a condição é falsa, dessa forma o comando é ativado e a mensagem “Aluno reprovado” é exibida. Depois o programa continua seu fluxo normal e atinge a linha 20.
Sacou? O comando só é ativado quando o comando não é ativado.
O é a estrutura de seleção mais comum em qualquer linguagem de programação, eles estão por toda parte!
O comando else if
O comando é usando quando queremos adicionar múltiplas condições no nosso código. Olha só como ele é usado:
O só pode ser utilizado depois de um comando . Além disso você pode usá-lo quantas vezes quiser! Se você tiver 10 condições pra testar, por exemplo, use o comando no início, e use o comando nove vezes seguidas.
Vamos voltar pro exemplo. Imagine que na universidade um aluno é aprovado com média 7, mas se ficar com media maior ou igual a 4 ele tem direito a fazer a recuperação. E se ficar com media menor que 4 será reprovado:
Nas linhas 08 e 09 a gente recebe o valor da média do usuário. Nas linhas 11 a 22 construímos uma estrutura .
No Exemplo 1 o usuário inseriu o valor , logo a condição do é verdadeira e a mensagem “Aluno aprovado” é exibida. Os demais comandos da estrutura são ignorados e o programa pula direto pra linha 24.
No Exemplo 2 o usuário inseriu o valor , tornando a condição do falsa, porém a condição do é verdadeira, dessa forma a mensagem “Aluno de recuperacao” é exibida. O comando é ignorado, e o programa pula para a linha 24.
Já no Exemplo 3 o usuário inseriu o valor, tornando as duas condições falsas, dessa forma o comando é ativado e a mensagem “Aluno reprovado” é exibida. Depois o programa continua seu fluxo normal e atinge a linha 24.
Estruturas de decisão aninhadas.
No vocabulário de programação, aninhar significa “colocar uma coisa dentro da outra”. Quando a gente fala de aninhados queremos dizer que vamos colocar uma estrutura dentro das chaves de outra estrutura .
Pra clarear, vamos voltar ao nosso exemplo da universidade. Como já dissemos, média maior ou igual é aprovado. Média maior ou igual a resulta em recuperação. E média menor que é reprovado direto. Vamos agora fazer o seguinte: pros alunos que estiverem de recuperação vamos perguntar qual foi a nota da prova de recuperação. Se essa nota for maior que o aluno é aprovado, caso contrário ele será reprovado.
Eita... esse código ficou grandinho. Mas não se preocupe que ele não morde.
É basicamente o mesmo código de antes, mas com algumas modificações. Primeiro, a gente adicionou uma variável pra guardar a nota da recuperação do aluno.
Em seguida a gente ampliou o conteúdo dentro do . Além de imprimir a frase “Aluno de recuperação”, agora também vamos receber o valor da nota de recuperação nas linhas 18 e 19. E pra completar adicionamos um aninhado, que responde que o aluno foi aprovado se tiver tirado ou mais na recuperação, e diz que foi reprovado caso contrário, linhas 21 a 28.
Estruturas aninhadas são muito uteis, e você vai usar bastante enquanto estiver programando. Mas use com atenção, para não deixar seu código confuso e evitar erros.
Evitando erros comuns
Um erro muito comum entre iniciantes é achar que usar dois s teria o mesmo efeito que usar seguido de . Olhe os dois códigos abaixo.
Notou a diferença? Quando usamos duas expressões tudo que importa é se a condição é verdadeira ou falsa. Logo, se as duas condições são atendidas, os dois ’s serão executados.
Já quando temos um seguido de um , se o primeiro comando for verdadeiro o segundo não será executado.
As duas formas estão corretas, mas são usadas com objetivos diferentes! Pra evitar erros a dica é você pensar: “como meu código deve reagir se eu tiver mais de uma condição verdadeira?”.
Quando você usa múltiplos ’s o programa vai executar todos os blocos com condição verdadeira. Quando usamos um seguido de vários ’s o programa só vai executar o primeiro código com condição verdadeira.
E por hoje é isso pessoal. Vamos fazer uns exercícios de fixação.
O comando if
O comando else
O comando else if
Estruturas de decisão aninhadas.
Evitando erros comuns
Exercícios Resolvidos
Exercício Resolvido #1
Lista de Exercícios – Instituto Federal Catarinense – Questão 04
As maçãs custam cada se forem compradas menos do que uma dúzia, e se forem compradas pelo menos doze. Escreva um programa que leia o número de maçãs compradas, calcule e escreva o valor total da compra.
Passo 1
Vamos lá pessoal.
A questão quer que a gente calcule o valor total que uma pessoa paga por maçãs. Porém, vamos ter que decidir o valor de 1 maçã, que muda de acordo com a quantidade comprada. Ou seja, vamos precisar usar a estrutura .
Uma boa forma de começar essa questão é pensando em quais são as entradas e as saídas do programa.
A entrada é a quantidade de maçã e é um número inteiro. Então vamos criar uma variável do tipo chamada que representa a quantidade de maçãs.
A saída é o valor total gasto em reais e esse valor não é necessariamente um número inteiro. Então vamos criar pra ele uma variável chamada .
Passo 2
Agora vamos usar o para pedir a quantidade de frutas pro usuário, e usar o para guardar o valor inserido na variável .
Passo 3
Show! Agora vamos calcular o valor gasto.
Lembre-se que a maçã custa se você comprar menos de maçãs, e custa se você comprar maçãs ou mais. Pra resolver isso, vamos usar a estrutura
- Se a quantidade de maçãs for maior ou igual a 12, cada maçã custa :
- Caso contrário cada maçã custa :
Vamos usar o comando com a condição , na linha 16. Assim só vamos entrar pra fazer o cálculo dentro do quando a variável for maior ou igual a 12. Quando isso acontecer, dentro das chaves vamos usar a expressão pra calcular o valor total pago.
Vamos usar o comando , que significa os casos restantes que não entraram no da linha 16, ou seja, quando . Nesses casos, dentro das chaves calculamos o total pago com a expressão .
Passo 4
Pra finalizar, é só a gente imprimir o valor calculado pro usuário usando o
Resposta
Exercício Resolvido #2
Elaboração Própria
Uma equação do segundo grau do tipo .
Faça um programa que receba os valores de , e e calcule as raízes da equação.
Passo 1
E aí pessoal, vamos resolver esse programinha. Pra começar vamos entender a questão e pensar nas necessidades do programa.
Primeiro de tudo, a gente certamente vai precisar incluir as funções matemáticas do C++: .
A questão afirma que vamos precisar receber três variáveis do usuário. Então vamos declarar as variáveis , e , do tipo para possibilitar valores reais de até 4 casas decimais.
O objetivo da questão é encontrar as raízes da equação de segundo grau, então vamos relembrar a Fórmula de Bháskara:
Então vamos precisar de uma variável para guardar o valor de e duas variáveis para conter as raízes da equação. Então vamos declarar as variáveis , e do tipo float.
Passo 2
Agora vamos receber os valores do usuário. Com o informamos o que queremos, e com o recebemos os valores do usuário.
Passo 3
Agora é hora da matemágica!
Primeiro vamos calcular o . Pra isso vamos usar a função para elevar ao quadrado.
Show! Mas a gente não pode esquecer que dependendo do valor de a equação pode ter duas, uma ou nenhuma solução. Pra resolver isso iremos usar a estrutura
- No primeiro caso, se a equação tem duas soluções. Vamos iniciar um comando para quando vamos calcular as duas raízes da equação e logo em seguida vamos imprimir a saída pro usuário.
- Se a equação não tem solução. Vamos então usar o comando com a condição . Então quando o delta for negativo vamos imprimir uma mensagem informando que a equação não tem solução.
- E o último caso é quando a equação tem uma solução. Como é a única opção restante, podemos usar o comando . Nesse caso vamos calcular apenas o valor de , e vamos imprimir uma mensagem na tela informando que e têm o mesmo valor.
E prontinho! Questão resolvida!
Resposta
Exercício Resolvido #3
UFRN – Lista de Exercícios de Algoritmos Condicionais
O IMC – Índice de Massa Corporal é um critério da Organização Mundial de Saúde para dar uma indicação sobre a condição de peso de uma pessoa adulta. A fórmula é:
Elabore um algoritmo que leia o peso e a altura de um adulto e mostre sua condição de acordo com a tabela abaixo.
Passo 1
E aí pessoal! Prontos pra mais um exercício? Então vamos nessa!
Pra começo de conversa, a questão nos dá uma formula que envolve potenciação. Então vamos adicionar
Em seguida vamos precisar receber o e do usuário, e calcular o . Então vamos criar variáveis do tipo para guardar esses valores
Passo 2
Agora vamos usar o para informar que o usuário deve inserir o peso e altura, e com o vamos armazenar cada valor na variável adequada.
Passo 3
Em seguida, vamos calcular o IMC.
Para transcrever essa expressão pra C++ vamos usar a função , saca só:
Passo 4
E é agora que a mágica acontece! Vamos usar a estrutura condicional para saber em qual categoria o IMC se encaixa. As opções são:
- SE o IMC for menor que 18.5 ENTÃO está abaixo do peso
- CASO CONTRÁRIO SE o IMC for menor que 25 ENTÃO peso normal
- CASO CONTRÁRIO SE o IMC for menor que 30 ENTÃO acima do peso
- CASO CONTRÁRIO ENTÃO obeso
Vamos transcrever para o C++ da seguinte forma:
E é isso! Questão concluída!
Resposta
Exercício Resolvido #4
UFRN – DCA800 – Lista de Exercício de Aprendizagem 2
Leia a velocidade máxima permitida em uma avenida e a velocidade com que o motorista estava dirigindo nela e calcule a multa que uma pessoa vai receber, sabendo que são pagos: a) 50 reais se o motorista estiver ultrapassar em até 10km/h a velocidade permitida (ex.: velocidade máxima: 50km/h; motorista a 60km/h ou a 56km/h); b) 100 reais, se o motorista ultrapassar de 11 a 30 km/h a velocidade permitida. c) 200 reais, se estiver acima de 31km/h da velocidade permitida
Passo 1
Vamos lá pessoal. Essa questão é um pouco grandinha. Mas basicamente, ela quer que a gente calcule o quanto o motorista ultrapassou a velocidade permitida, e depois use uma estrutura de seleção pra dizer qual é o valor de multa adequado.
Pra começar, vamos pensar: quais são as entradas do programa? A velocidade máxima permitida na via e a velocidade do carro! Então vamos criar duas variáveis do tipo chamadas e .
Passo 2
Agora vamos usar a função para pedir que o usuário insira os valores, e com a função vamos guardar o valor nas variáveis
Passo 3
Com os valores em mãos, vamos utilizar a estrutura para determinar a multa adequada.
A primeira situação possível é quando o motorista está dentro da velocidade permitida! Ou seja, se a velocidade do carro for menor que a velocidade permitida não haverá multa.
Vamos escrever isso em código
A segunda condição possível é quando o carro ultrapassa velocidade permitida por ou menos, então a multa é de cinquenta reais:
Vamos continuar. A terceira condição descrita pela questão é quando o carro ultrapassa velocidade permitida até , e nesse caso a multa é de cem reais:
E a última condição possível é quando é quando o carro ultrapassa velocidade permitida por mais de , e nessa situação o motorista veloz ficará furioso ao receber uma multa de duzentos reais:
Resposta
Exercício Resolvido #5
Unesp Sorocaba – Exercícios de laboratório com if-else
Dados três segmentos de reta , e , se:
estes podem formar um triângulo. Faça um programa que dados os valores dos segmentos de reta , e , verifica se pode ser construído um triângulo com estes segmentos.
Passo 1
Vamos lá pessoal. A questão pode parecer difícil, mas vocês vão ver que é de boas!
A questão está pedindo pra gente testar a condição de existência dos triângulos. Se é pra testar uma condição, então já sabemos que provavelmente vamos usar um nessa questão.
Mas antes disso, temos que receber três valores reais do usuário, que representam os lados do triângulo. Então vamos criar as variáveis , e do tipo .
Passo 2
Agora vamos usar o para informar que o usuário deve inserir o valor de cada lado do triângulo, e com o vamos armazenar cada valor na variável adequada.
Passo 3
Agora vamos pra parte bonita da questão :-)
Pra que o triângulo exista, três condições devem ser respeitadas simultaneamente.
Pra escrever a expressão acima em C++ vamos usar o operador , e vamos usar os parêntesis para garantir que as somas e as comparações sejam executadas primeiro. Dessa forma:
Passo 4
Então vamos criar uma estrutura que teste a expressão que desenvolvemos.
Vão existir duas situações possíveis:
- SE (a+b>c) E (a+c>b) E (b+c>a) ENTÃO o triângulo existe.
- CASO CONTRÁRIO ENTÃO o triângulo não existe.
Transcrevendo em C++ temos o seguinte algoritmo:
E prontinho! Questão resolvida.
Resposta
Exercício Resolvido #6
Adaptado de Unesp Sorocaba – Exercícios de laboratório com if-else
Dado os lados e de um triângulo, se , o triângulo formado com estes segmentos é equilátero. Se ou ou , o triângulo é chamado isósceles. E se o triângulo é chamado escaleno.
Faça um programa que recebe os três lados de um triângulo e classifique o triângulo.
Passo 1
A questão está pedindo pra gente verificar qual é a categoria de um triângulo de acordo com o tamanho dos lados. Pra isso a gente vai ter que testar as condições de cada classificação. E se é pra testar condições, então já sabemos vamos usar um .
Mas antes disso, temos que receber três valores reais do usuário, que representam os lados do triângulo. Então vamos criar as variáveis , e do tipo .
Passo 2
Agora vamos usar o para informar que o usuário deve inserir o valor de cada lado do triângulo, e com o vamos armazenar cada valor na variável adequada.
Passo 3
Agora vamos para as condições de classificação 😎. A primeira condição que vamos construir é para o triângulo equilátero, que deve satisfazer a seguinte condição: . Porém no C++ não da pra comparar as três variáveis de uma vez só. O que podemos fazer é repartir essa igualdade da seguinte forma: .
Vamos construir a estrutura da seguinte forma:
- SE E E ENTÃO O triângulo é equilátero.
- MAS CASO SE OU OU ENTÃO O triângulo é isóscele.
Transcrevendo para C++ teremos: . Pelas regras de associatividade e precedência, sabemos que os operadores de igualdade serão executados primeiro, e só depois são executadas as operações lógicas E .
Passo 4
Agora vamos testar se o triângulo é isóscele.
Importante: a gente só vai testar se o triângulo é isóscele no caso de ele não ser equilátero! A gente vai usar uma condição , pois caso o triângulo seja equilátero, ele não será testado como isósceles. Assim, só vamos testar triângulos que já sabemos que ao menos um dos lados é diferente.
Um triângulo é isóscele se só dois dos seus lados forem iguais: ou ou . Mas como já sabemos que um dos lados é diferentes, podemos verificar se ao menos dois lados são iguais:
.
Vamos construir a estrutura da seguinte forma:
Transcrevendo para C++ teremos:
Passo 4
E o último caso é quando todos os lados são diferentes entre si. Porém esse é o último caso possível. Então só precisamos utilizar uma estrutura e está tudo resolvido:
E prontinho. Com isso finalizamos nosso código.
Resposta
Exercício Resolvido #7
Adaptado de UEMS – Algoritmos e Estruturas de Dados I – Lista de Exercícios de Estrutura Condicional – Profa. Mercedes R. Gonzales Márquez
Num determinado Estado, para transferências de veículos, o DETRAN cobra uma taxa de 1% para carros fabricados antes de 1990 e uma taxa de 1.5% para os fabricados de 1990 em diante, taxa que incide sobre o valor de tabela do carro.
Escreva um código que lê o ano e o preço do carro e a seguir calcula e imprime imposto a ser pago.
Passo 1
Vamos nessa, pessoal!
Como sempre, vamos começar o nosso programa com o cabeçalho:
A melhor forma de resolver essa questão é pensando em quais são as entradas e saídas do programa.
Nós vamos precisar receber duas variáveis: um valor do tipo inteiro que representa o ano do carro, e uma valor do real que representa o valor do carro. E como saída vamos ter um outro número real, que vai corresponder ao valor do imposto a ser pago.
Além disso, a questão nos dá duas informações, o valor da taxa de imposto de acordo com o ano do carro. Esses são valores fixos e que não podem ser alterados durante a execução do programa, então devem ser constantes:
Vamos colocar isso no nosso código dentro da função principal:
Passo 2
Agora precisamos receber do usuário dois valores, o ano e o valor do carro. Vamos usar os comandos e para solicitar que o usuário insira os valores e guardar nas variáveis apropriadas.
Passo 3
Agora vamos pra parte mais legal da questão.
Para calcular o valor do imposto vamos ter que usar a seguinte expressão:
Porém a taxa de imposto varia conforme o ano do carro. Então, precisamos verificar qual o ano do carro e com base nisso usaremos a taxa de imposto apropriada:
- SE ENTÃO taxa de imposto é
- CASO CONTRÁTRIO ENTÃO taxa de imposto é
Transcrevendo em código C++ vamos ter:
Passo 4
Belezinha. Pra finalizar é só a gente imprimir o valor do imposto calculado. Pra isso a gente usa o comando
E acabou. Agora é só correr pro abraço!
Resposta
Exercício Resolvido #8
Adaptado de UEMS – Algoritmos e Estruturas de Dados I – Lista de Exercícios de Estrutura Condicional – Profa. Mercedes R. Gonzales Márquez
Uma empresa concederá um aumento de salário aos seus funcionários, variável de acordo com o cargo, conforme a tabela abaixo.
Faça um algoritmo que leia o salário e o código de um funcionário e calcule o novo salário.Se o cargo do funcionário não estiver na tabela, ele deverá, então, receber 40% de aumento.
Imprima o cargo, o salário antigo, o novo salário e a diferença.
Passo 1
E aí pessoal. Vamos pra mais um exercício.
O que vamos precisar fazer aqui é uma estrutura condicional que vai identificar o cargo do funcionário e selecionar o aumento de salário apropriado.
Como sempre, vamos começar escrevendo o cabeçalho do código.
Agora vamos analisar as entradas e saídas do código para determinar quais variáveis vamos precisar.
O usuário vai inserir dois valores, um número inteiro que representa o código da função funcionário, e um valor real que representa o salário do funcionário.
As saídas do código vão ser o novo salário e a diferença salarial:
No código vai ficar assim:
A outra saída é um texto que imprime o nome do cargo do funcionário. Mas pra isso não vamos precisar de variável, vamos imprimir diretamente dentro da estrutura condicional.
Passo 2
Seguindo em frente, vamos receber os valores do usuário. Pra isso usamos os comando e :
Passo 3
Show. Agora vamos desenvolver a parte principal: a estrutura condicional.
Aqui vamos ter quatro situações, quando o código for 101 o aumento será de 10% e o cargo será gerente. Para calcular o aumento, é só multiplicar o salário atual por .
Quando for 102 o cargo será engenheiro e o aumento de 20%.
Caso seja o código 103 o aumento será de 30% e o cargo será técnico.
E no caso de ser inserido qualquer outro valor de código, o aumento será de 40% e o cargo será “outro”.
Passo 4
Pronto! O mais difícil já passou!
Agora que o novo salário já foi calculado, podemos calcular o valor do aumento salarial. Pra isso basta subtrair o salário novo e antigo:
Passo 5
E pra terminar a questão precisamos imprimir os resultados que obtivemos.
Usando o comando a gente consegui imprimir os resultados e uma mensagem identificadora para cada resultado:
E prontinho! Questão concluída.