Algoritmo ´Hadouken´
✍ Para começarmos a falar de estrutura de seleção múltipla, considere o seguinte algoritmo, contendo a instrução se/entao/senao
, que recebe um número inteiro entre 1 e 7 e exibe o dia da semana correspondente:
Observe a quantidade de se/entao/senao
… Além de possuir vários níveis de indentação, o desempenho do algoritmo pode ficar comprometido e a legibilidade se torna um pouco trabalhosa.
💡 Agora compare o algoritmo acima reescrito utilizando a estrutura de seleção múltipla escolha/caso
:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 |
algoritmo "Dias da Semana" var dia : inteiro inicio escreva("Digite um número entre 1 e 7: ") leia(dia) escolha dia caso 1 escreval("Domingo") caso 2 escreval("Segunda-feira") caso 3 escreval("Terça-feira") caso 4 escreval("Quarta-feira") caso 5 escreval("Quinta-feira") caso 6 escreval("Sexta-feira") caso 7 escreval("Sábado") outrocaso escreval("Dia inválido") fimescolha fimalgoritmo |
Sentiu a diferença? Muito mais simples, né?! Ganha-se em legibilidade e eficiência na execução do algoritmo.
👨🏫 Explicando…
A estrutura de seleção múltipla escolha/caso
permite escolher entre várias opções de ação de acordo com um valor ou condição específica. É similar a uma estrutura condicional se/senão
, mas possui a vantagem de poder avaliar mais de duas opções diferentes e apresentar um código mais enxuto.
A estrutura de seleção múltipla usa a palavra-chave escolha
seguida por uma expressão que será avaliada. Em seguida, há várias opções caso
que correspondem a diferentes valores ou condições. Se a expressão avaliada corresponder a algum dos valores especificados no caso
, as ações dentro desse caso
serão executadas. Se nenhum dos casos for satisfeito, a ação dentro da opção outrocaso
será executada.
O VisuAlg implementa (com certas variações) o comando case
do Pascal. A sintaxe é a seguinte:
1 2 3 4 5 6 7 8 9 |
escolha <expressão-de-seleção> caso <exp11>, <exp12>, ..., <exp1n> <seqüência-de-comandos-1> caso <exp21>, <exp22>, ..., <exp2n> <seqüência-de-comandos-2> ... outrocaso <seqüência-de-comandos-extra> fimescolha |
O fluxograma dessa instrução pode ser representado da seguinte maneira:

👨🏫 Exemplo
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
algoritmo "Times" var time: caractere inicio escreva ("Entre com o nome de um time de futebol: ") leia (time) escolha time caso "Flamengo", "Fluminense", "Vasco", "Botafogo" escreval ("É um time carioca.") caso "São Paulo", "Palmeiras", "Santos", "Corínthians" escreval ("É um time paulista.") outrocaso escreval ("É de outro estado.") fimescolha fimalgoritmo |
🤔 Mas quando usar se/entao/senao
ou escolha/caso
?
Enquanto escolha/caso
permite uma estrutura de seleção baseada em vários casos, o se/entao/senao
é mais adequado para uma única verificação condicional.
Portanto, a escolha entre se/entao/senao
ou escolha/caso
depende do contexto e das necessidades específicas do algoritmo a ser desenvolvido. Ambas as estruturas são úteis e podem ser utilizadas de maneira eficaz.
—
E para finalizar, veja como a estrutura condicional múltipla escolha/caso
é implementada em algumas linguagens de programação:
🖥️ Java
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 |
import java.util.Scanner; public class Main { public static void main(String[] args) { Scanner input = new Scanner(System.in); int dia; System.out.print("Digite um número entre 1 e 7: "); dia = input.nextInt(); switch (dia) { case 1: System.out.println("Domingo"); break; case 2: System.out.println("Segunda-feira"); break; case 3: System.out.println("Terça-feira"); break; case 4: System.out.println("Quarta-feira"); break; case 5: System.out.println("Quinta-feira"); break; case 6: System.out.println("Sexta-feira"); break; case 7: System.out.println("Sábado"); break; default: System.out.println("Dia inválido"); break; } } } |
🖥️ Linguagem C
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 |
#include <stdio.h> int main() { int dia; printf("Digite um número entre 1 e 7: "); scanf("%d", &dia); switch (dia) { case 1: printf("Domingo\n"); break; case 2: printf("Segunda-feira\n"); break; case 3: printf("Terça-feira\n"); break; case 4: printf("Quarta-feira\n"); break; case 5: printf("Quinta-feira\n"); break; case 6: printf("Sexta-feira\n"); break; case 7: printf("Sábado\n"); break; default: printf("Dia inválido\n"); break; } return 0; } |
🖥️ Dart
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 |
import 'dart:io'; void main() { print("Digite um número entre 1 e 7: "); int dia = int.parse(stdin.readLineSync()); switch (dia) { case 1: print("Domingo"); break; case 2: print("Segunda-feira"); break; case 3: print("Terça-feira"); break; case 4: print("Quarta-feira"); break; case 5: print("Quinta-feira"); break; case 6: print("Sexta-feira"); break; case 7: print("Sábado"); break; default: print("Dia inválido"); } } |
—
📚 Livros
-
- Introdução à linguagem Python
José Augusto N. G. Manzano
<https://amzn.to/3tS3A2Y>
- Introdução à linguagem Python
-
- Algoritmos: Lógica para Desenvolvimento de Programação de Computadores
José Augusto N. G. Manzano e Jayr Figueiredo de Oliveira
<https://amzn.to/43sGKic>
- Algoritmos: Lógica para Desenvolvimento de Programação de Computadores
—
*Atualizado em 16 de julho de 2023