Estruturas de seleção: switch-case

Ver Todos os Exercícios

Teoria

E aí pessoal, aqui é o Juan do Responde Aí, e hoje vamos estudar mais sobre estruturas de seleção.

Nós já vimos que podemos fazer o código seguir rumos diferentes de acordo com certas condições utilizando a estrutura i f   e l s e . Hoje vamos ver uma alternativa chamada s w i t c h   c a s e .

A estrutura switch case

Situações condicionais podem aparecer de muitas formas nos nossos códigos. Dependendo da forma que ela aparecer utilizar a estrutura i f   e l s e pode ser trabalhoso ou deixar os códigos longos e difíceis de ler.

É aí que entra em cena o astro de hoje: s w i t c h   c a s e . Essa estrutura de seleção é escrita de uma maneira diferente, e por isso pode ser mais prática em alguns casos. Saca só:

Quando o s w i t c h entra em ação, o C++ calcula o resultado da e x p r e s s ã o entre parêntesis. Depois ele olha cada um dos c a s e e se o v a l o r for igual ao resultado da expressão, o código é executado. No caso de não haver nenhuma correspondência, então o d e f a u l t é executado. O termo b r e a k indica o final de um caso.

Pra ficar mais claro, vamos ver um exemplo:

Primeiro pedimos pro usuário inserir uma letra, e guardamos a letra na variável a .

O s w i t c h começa na linha 13, e nesse exemplo a e x p r e s s ã o avaliada é simplesmente o valor da variável a .

Logo em seguida o compilador vai testar cada um dos c a s e s .   Se o usuário tiver digitado ' S ' , o c a s e da linha 15 vai ser executado.

Se o usuário digitar ' N ' o c a s e da linha 18 será executado. E se o usuário pressionar qualquer outra coisa, o d e f a u l t na linha 21 entra em ação.

Regras

Pra evitar erros na hora de construir seus códigos, vale dar uma olhada nessas regras básicas da estrutura s w i t c h   c a s e :

  • O resultado da e x p r e s s ã o tem que ser do tipo inteiro ( i n t ), caractere ( c h a r ) ou booleano ( b o o l ). Resultados de outro tipo resultam em erros.
  • Você não pode ter dois c a s e com o mesmo valor, pois isso cria uma instrução ambígua.
  • Você pode usar quantos c a s e quiser!
  • O b r e a k marca o final de cada caso. Não esqueça dele!
  • O d e f a u l t é opcional e vêm sempre no final da estrutura.

If ou switch... eis a questão:

De maneira geral, tudo que dá pra fazer com s w i t c h dá pra fazer com i f e vice versa. Porém, nem sempre é prático...

Na maioria das vezes, a estrutura i f   e l s e é mais vantajosa, e por isso é muito mais comum.

A gente costuma usar o s w i t c h quando temos uma expressão simples, mas que os resultados possam ser muito variados. Por isso, o principal uso do s w i t c h é pra criar menu de opção em programas e aplicativos.

Uma dica que pode ajudar é pensar no i f - e l s e como uma estrutura para decisões mais complexas, e pensar no s w i t c h como um painel cheio de botões.

E é isso! Pra entender melhor, o ideal é fazer uns exercícios de fixação.

Regras

If ou switch... eis a questão:

Exercícios Resolvidos

Exercício Resolvido #1

Observe o código abaixo.

O que acontece se o usuário digitar 12 ? E se o usuário digitar - 3 ?

Passo 1

E aí pessoal, essa é uma questão de analisar códigos! Então vamos lá por partes.

Na linha 6 é declarada uma variável inteira. Na linha 9, é impressa na tela uma mensagem perguntando ao usuário o valor dessa variável. E na linha 10, esse valor é atribuído à variável.

Na linha 13 começa uma estrutura s w i t c h , com a afirmação n u m >   = 0 à direita do comando s w i t c h . Com esse comando, a expressão n u m >   = 0 é avaliada e ela pode ser verdadeira ( c a s e   t r u e ) ou falsa ( c a s e   f a l s e ).

Quando o resultado da expressão é t r u e a condição da linha 15 é atendida, então e a mensagem “O numero eh positivo” é exibida.

Quando o resultado da expressão é f a l s e a condição da linha 18 é atendida, então e a mensagem “O numero eh negativo” é exibida.

Então agora vamos ver o que acontece no caso dos números 12 e -3, como o enunciado perguntou?

Passo 2

Se o usuário tiver inserido o valor 12 , então temos o caso em que a variável n u m é maior do que zero. Portanto a expressão é resolvida dessa forma:

12 >   = 0 ⇒ t r u e

Quando o resultado da expressão é t r u e a condição da linha 15 é atendida, então e a mensagem “O numero eh positivo” é exibida.

Passo 3

Mas se o usuário tiver inserido o valor - 3 , temos o caso em que a variável n u m é menor do que zero. Portanto a expressão fica:

- 3 >   = 0 ⇒ f a l s e

Dessa forma, o código dentro do primeiro c a s e é ignorado. Em seguida o código pula pra linha 18 aqui a condição é atendida, e a mensagem “O numero eh negativo” é exibida.

Resposta

Se o usuário tiver inserido o valor 12 a mensagem “O numero eh positivo” é exibida.

Se o usuário tiver inserido o valor - 3 a mensagem “O numero eh negativo” é exibida.

Exercício Resolvido #2

Um estudante escreveu um código que recebe um número entre 1 e 7, e dá como resposta o dia da semana equivalente: 1 é domingo, 2 é segunda, e assim por diante até chegar em 7 que é sábado.

Porém, o código que ele escreveu tem um erro:

  1. O que acontece se rodar o código com este erro? Por que isso ocorre?
  2. Encontre o erro e reescreva o código corrigido

Passo 1

E aí pessoal!

A questão pede pra gente rodar o código. Então vamos lá!

O programa vai pedir pra gente digitar um número, eu vou digitar o número 2 :

Olha só que estranho, ao invés de responder com “Segunda”, o programa mostra todas as os dias da semana seguinte também.

Passo 2

Vamos voltar pro programa e entender o motivo.

Primeiro, nas linhas 08 a 10 o programa pede pra gente inserir um número. No nosso caso, eu inseri o número 2.

Então, o programa avança para a linha 13, onde o s w i t c h recebe o valor que digitamos

Seguindo em frente, o programa testa a condição da linha 15, e não é correspondente

Ele pula então pra próxima condição, na linha 18. Esse c a s e é igual ao valor digitado, então o programa entra na linha 19 e imprime a mensagem “Segunda”

E é a partir daqui que os problemas começam. Não existe nenhuma mensagem de finalização do comando! Então, o programa continua entrando nas expressões seguintes.

Em outras palavras, está faltando o comando b r e a k

Passo 3

Agora que já temos o problema diagnosticado, vamos corrigi-lo. Tudo que precisamos fazer é adicionar o comando b r e a k ao final de cada c a s e

E pra deixar o programa mais elegante, vamos adicionar um comando d e f a u l t , pro caso do usuário inserir um valor que não seja de 1 a 7 , será impressa uma mensagem de “Valor invalido”

E prontinho! Questão feita!

Resposta

Exercício Resolvido #3

Codifique um programa que faça a leitura de dois números reais. A seguir o programa lê um caractere, que deve ser + ,   - , * ou / , e realiza a operação indicada pelo caractere sobre os valores lidos. O programa deve imprimir o resultado da operação realizada sobre eles, como mostra o exemplo a seguir:

Exemplo de saída: “ 4.50   +   5.00   =   9.50

Passo 1

Bora lá pessoal!

A questão pediu pra gente fazer uma calculadora que trabalha com dois números. Então, vamos começar declarando duas variáveis n u m 1 e n u m 2 do tipo f l o a t . Vamos declarar também uma outra variável f l o a t para guardar o resultado chamada r e s u l t .

Em seguida vamos precisar receber um caractere que representa a operação matemática. Então vamos declarar mais uma variável do tipo c h a r chamada o p e r c a o

Passo 2

Agora vamos pedir os valores pro usuário. Usando o c o u t vamos enviar uma mensagem pedindo cada valor, e com c i n vamos ler os valores.

Passo 3

Pra efetuar a seleção de operação podemos usar o comando s w i t c h para conferir o valor de uma variável e selecionar a operação correta.

Primeiro, vamos pedir pro usuário inserir um dos caracteres correspondentes ser + ,   - , * ou / :

E agora vamos usar a função s w i t c h para conferir o valor da variável o p e r a c a o

Tudo certo! Agora vamos criar os casos. O primeiro c a s e ocorre quando a variável o p e r a ç ã o tem o valor ' + ' . A gente executa a soma e guarda o resultado na variável r e s u l t , depois utiliza o c o u t para imprimir a operação. E finalizamos o caso utilizando o b r e a k

Depois repetimos o mesmo processo pras demais operações:

E pra finalizar a questão, vamos usar o comando d e f a u l t pro caso de o usuário inserir um caractere inválido ele receber uma mensagem de aviso:

Resposta

Exercício Resolvido #4

Faça um programa que leia um número entre 0 e 10, e escreva este número por extenso.

Passo 1

Vamos lá pessoal.

A questão não tem segredo. Vamos receber um número do usuário e em seguida vamos usar uma estrutura s w i t c h para escrever o número por extenso na tela.

Pra começar, vamos declarar a variável inteira n u m , que vai guardar o valor do número que receberemos do usuário

Passo 2

Em seguida, vamos usar o c o u t para pedir pro usuário inserir um número de 0 a 10, e com o c i n guardamos o valor na variável n u m

Passo 3

Agora vamos usar o s w i t c h para avaliar o valor contido na variável, e em seguida vamos usar o c a s e para rodar o código adequado.

Por exemplo, se o valor contido for zero então vamos escrever o texto “zero” na tela:

Outro exemplo, se o valor contido em n u m for 1 , então escrevemos o “Um”:

E repetimos esse processo pros outros números até o 10:

E pra deixar nossa solução mais legal, vamos adicionar o d e f a u l t , assim, se o usuário digitar um valor que não seja um número entre 0 e 10, ele recebe uma mensagem de aviso

E o programa está pronto!

Resposta

Exercício Resolvido #5

O cardápio de uma lancheria é o seguinte:

Implemente um programa que mostre o cardápio pro usuário, em seguida leia o código do item pedido, a quantidade e calcule o valor a ser pago por aquele lanche. Considere que a cada execução somente será calculado um item.

Passo 1

E aí galera. Essa questão é um pouco grande. Mas não se assusta, que é tranquilo.

A questão pede pra gente criar um menu pro usuário escolher itens. Sempre que a gente precisar criar um menu a estrutura s w i t c h é uma boa escolha. Vamos usar o s w i t c h pra permitir que o usuário escolha um item do cardápio. E em cada c a s e vamos calcular o quanto ele gastou.

Mas primeiro de tudo, vamos pensar apenas nas entradas e saídas do programa. Vamos receber dois valores do usuário:

  • A variável inteira c o d i g o , que representa o código de cada produto
  • A quantidade que o cliente comprou q t d , que também é um número inteiro

A saída é o valor a ser pago, então vamos criar a variável v a l o r do tipo f l o a t

Passo 2

Vamos desenhar o cardápio na tela pro usuário poder vê-lo.

Usando a função c o u t diversas vezes seguidas, podemos criar um cardápio visual pro usuário. E usando o caractere especial \ t podemos deixar os dados tabulados. Saca só

O resultado é parecido com isso:

Olha que bonito. Quando a gente usa a tabulação fica igual uma tabelinha mesmo.

Passo 3

Agora que o usuário pode ler o cardápio, vamos pedir pra ele escolher o pedido! Usando o c o u t e o c i n podemos pedir e armazenar as informações do usuário.

Passo 4

Agora vamos nos divertir com o s w i t c h

Primeiramente, vamos usar o comando s w i t c h para avaliar o conteúdo da variável c o d i g o . Dependendo do valor dessa variável, vamos ou não entrar em cada c a s e .

O primeiro c a s e que vamos construir é quando o valor inserido é 100 . Daí só vamos entrar nesse c a s e , se o valor for 100.

Dentro do c a s e , vamos calcular o valor gasto pelo cliente, na linha 32. Na linha 33 vamos imprimir a quantidade e o nome do pedido. Na linha 34 vamos imprimir o valor gasto. E na linha 35 vamos finalizar o c a s e com o comando b r e a k

Passo 5

Agora vamos repetir o processo descrito no passo 4 para todos os outros produtos, tomando o cuidado de calcular o valor usando o preço de cada item.

E pra fechar a questão com chave de ouro, vamos adicionar um d e f a u l t pra caso o cliente insira um valor fora do cardápio. Se não houver nenhuma correspondência com os c a s e s anteriores, o programa entra no d e f a u l t e o usuário vai receber uma mensagem de aviso dizendo que esse item não faz parte do cardápio.

E prontinho!

Resposta

Exercício Resolvido #6

Leia o código de um determinado produto e mostre sua classificação. Utilize a seguinte tabela como referência:

Passo 1

Beleza pessoal. Vamos fazer mais um exercício da hora!

A questão ta pedindo para gente desenvolver um sistema onde selecionamos uma opção e recebemos de volta uma mensagem na tela. Uma estrutura s w i t c h - c a s e vai cair bem que nem uma luva aqui.

Mas antes vamos começar o cabeçalho do programa

Só vamos precisar receber um único valor inteiro do usuário, o código. Então vamos declarar uma variável c o d i g o para conter esse valor:

Passo 2

Agora vamos receber o código do usuário. Basta usar os comandos c o u t e c i n para solicitar o valor e inseri-lo na variável.

Passo 3

Show! Vamos desenvolver a estrutura de seleção.

A estrutura s w i t c h começa avaliando o valor contido na variável c o d i g o e abrimos as chaves.

Caso o valor da variável c o d i g o   seja 1 , então é selecionada o primeiro código onde imprimimos uma mensagem informando que se trata de um “alimento não perecível”.

Caso o valor contido na variável c o d i g o seja 2 , então vamos usar o c o u t para imprimir que se trata de um “alimento perecível”:

E fazemos o mesmo para os casos em que a variável c o d i g o é 3 ,   4 ou 5 onde devem ser impressos “vestuário”, “higiene pessoal” e “Limpeza e utensílios domésticos”, respectivamente.

A única surpresa é quando um valor imprevisto for inserido na variável. Neste caso vamos preparar um comando d e f a u l t que informa que o valor inserido é inválido

E pronto! Com isso terminamos a questão.

Resposta

Exercício Resolvido #7

Faça um programa que calcule o “peso ideal” de um usuário de acordo com um caractere identificador de gênero biológico (“M” para Masculino ou “F” para Feminino) inserindo pelo usuário.

Peso ideal masculino: 72.7 * a l t u r a - 58

Peso ideal feminino: 6 2 . 1 * a l t u r a - 44.7

Passo 1

Vamos lá, pessoal

Nessa questão vamos precisamos selecionar o tipo de gênero pra efetuar o cálculo. Então uma boa ideia é usar a estrutura de seleção s w i t c h - c a s e .

Mas antes, vamos escrever o cabeçalho do código:

E agora vamos pensar sobre as entradas e saídas do programa. Vamos precisar receber do usuário duas variáveis: um caractere que representa o gênero, e um número real que representa a altura:

c h a r   g e n e r o f l o a t   a l t u r a

E o resultado é o peso ideal do usuário, que terá de ser armazenado numa variável:

f l o a t   p e s o _ i d e a l

No código fica assim:

Passo 2

Usando os comandos c i n e c o u t vamos receber o gênero e a altura do usuário

Passo 3

O passo seguinte é desenvolver a estrutura de seleção.

Primeiro de tudo, iniciamos o nosso s w i t c h informando que o valor a ser analisado está contido na variável g e n e r o .

Caso o gênero inserido seja o masculino, então devemos utilizar a formula

p e s o = 72.7 * a l t u r a - 58

Caso o gênero inserido seja o feminino, então devemos utilizar a outra formula

p e s o = 62.1 * a l t u r a - 44.7

E caso um valor não previsto seja inserido, então vamos enviar uma mensagem de valor inválido.

Passo 4

Pra finalizar a questão, vamos imprimir o valor de peso ideal que calculamos. Pra isso é só imprimir com o c o u t

Resposta

e

Exercício Resolvido #8

Faça um programa que o dia, o mês e o ano em formato numérico e escreva a data por extenso, conforme exemplo:

O programa deve imprimir uma mensagem se o mês for inválido.

Utilize o comando s w i t c h na implementação.

Passo 1

Vamos lá pessoal. Essa questão vai ser um pouquinho grande, mas relaxa que vai ser fácil.

O que vamos precisar fazer aqui é receber três valores inteiros do usuário, que armazenem o valor do dia, mês e ano. E em seguida vamos utilizar uma estrutura condicional s w i t c h para selecionar o nome do mês. Então, como são 12 meses, vamos precisar de pelo menos 12 c a s e (uma pra cada mês) e mais um c a s e   d e f a u l t pro caso de ser inserido um valor que não corresponda a nenhum mês.

Então vamos começar escrevendo o cabeçalho do código:

E em seguida vamos iniciar a m a i n (   ) e declarar as três variáveis inteiras necessárias:

Passo 2

Em seguida vamos precisar receber os valores do dia, mês e ano.

Pra isso vamos utilizar o c o u t para solicitar o valor, e o c i n para armazenar o valor inserido na variável adequada. Vamos fazer isso três vezes, pois precisamos receber três valores.

Passo 3

Belezinha. Agora vamos dar atenção à parte principal da questão, a estrutura s w i t c h

Vamos iniciar o s w i t c h informando que a variável a ser testada é a variável m e s . Ou seja, é o valor contido dentro da variável mês que vai decidir o que deve ser executado.

Ok, vamos agora definir os casos. Quando o valor de m e s for igual a 1 , o mês correspondente será janeiro. Então vamos exibir uma mensagem que imprima a variável d i a , escreva o mês “Janeiro” e imprima o conteúdo da variável a n o :

Mas caso o valor de m e s seja 2 , então este deve ser o mês de fevereiro. Então vamos exibir a mesma mensagem, porém com “fevereiro”:

Já quando o valor de m e s for igual a 3 , então o mês é março. Mais uma vez, vamos exibir uma mensagem que contém o valor da variável d i a , escreva o mês “Marco” e imprima o valor da variável ano:

Sacou? A gente vai repetir a mesma mensagem para todos os 12 casos, mudando apenas o valor do c a s e e o nome do mês. Então prepara esse c t r l + c e c t r l + v que vai ser útil agora.

Pronto, criamos um c a s e e para cada um dos meses do ano. Porém, precisamos nos preparar pro caso de ser inserido um valor incompatível. Então criamos uma c a s e   d e f a u l t

E prontinho! O programa está concluído.

Resposta