O que são condicionais e por que elas importam
Condicionais permitem que o algoritmo escolha caminhos diferentes conforme uma condição seja verdadeira ou falsa. Em pseudocódigo essencial, a meta é deixar explícito: (1) qual condição está sendo testada, (2) quais ações acontecem em cada caso, e (3) que todos os caminhos relevantes foram considerados, inclusive casos limites.
Estrutura padronizada: SE, SENÃO SE, SENÃO
Forma básica (dois caminhos)
SE condicao ENTÃO // bloco verdadeiroSENÃO // bloco falsoFIMSERegras práticas para manter a leitura previsível:
- Use
ENTÃO,SENÃOeFIMSEpara delimitar blocos. - Coloque uma única ideia por condição (evite “condições-monstro”).
- Garanta que cada bloco tenha ações coerentes com o teste (não misture responsabilidades).
Encadeamento (múltiplos caminhos) com SENÃO SE
SE condicao1 ENTÃO // caminho 1SENÃO SE condicao2 ENTÃO // caminho 2SENÃO SE condicao3 ENTÃO // caminho 3SENÃO // caminho padrão (fallback)FIMSEComo interpretar: o algoritmo testa condicao1; se for falsa, testa condicao2; e assim por diante. O primeiro teste verdadeiro “vence” e os demais não são avaliados.
Passo a passo: construindo um encadeamento a partir de requisitos
Requisito textual: “Se a nota for maior ou igual a 7, o aluno está aprovado. Se for maior ou igual a 5, está em recuperação. Caso contrário, reprovado.”
Passo 1: identifique as faixas e a ordem correta (do mais restritivo/alto para o mais baixo).
- Ouça o áudio com a tela desligada
- Ganhe Certificado após a conclusão
- + de 5000 cursos para você explorar!
Baixar o aplicativo
Passo 2: escreva as condições sem sobreposição ambígua.
SE nota >= 7 ENTÃO status <- "APROVADO"SENÃO SE nota >= 5 ENTÃO status <- "RECUPERAÇÃO"SENÃO status <- "REPROVADO"FIMSENote que não é necessário escrever nota < 7 no segundo teste, porque o fluxo só chega nele se o primeiro falhar.
Condições compostas: E, OU e agrupamento
Condições compostas combinam testes simples. Para evitar dúvidas de precedência, use parênteses quando houver mistura de operadores.
Exemplo: elegibilidade com múltiplos critérios
Requisito: “Conceder desconto se (for estudante e tiver menos de 25 anos) ou se for idoso (60+).”
SE (ehEstudante E idade < 25) OU (idade >= 60) ENTÃO temDesconto <- VERDADEIROSENÃO temDesconto <- FALSOFIMSEBoas práticas para legibilidade em condições compostas
- Prefira condições nomeadas para reduzir complexidade visual.
- Evite negações duplas (ex.:
NÃO (NÃO autorizado)), pois aumentam erros de interpretação. - Use parênteses para deixar explícito o agrupamento, mesmo quando você “acha” que a precedência é óbvia.
Refatoração com condições nomeadas (passo a passo)
Antes (difícil de ler):
SE (NÃO bloqueado) E ((tipo = "VIP") OU (pontos >= 1000 E NÃO inadimplente)) ENTÃO liberarAcesso()SENÃO negarAcesso()FIMSEPasso 1: extraia subcondições com nomes que expressem intenção.
podeSerVIP <- (tipo = "VIP")temPontuacaoBoa <- (pontos >= 1000)estaRegular <- (NÃO inadimplente)criterioDeValor <- podeSerVIP OU (temPontuacaoBoa E estaRegular)contaAtiva <- (NÃO bloqueado)Passo 2: use as condições nomeadas no SE.
SE contaAtiva E criterioDeValor ENTÃO liberarAcesso()SENÃO negarAcesso()FIMSEO comportamento permanece o mesmo, mas a leitura fica mais próxima do requisito.
Casos limites: como pensar e como cobrir todos os caminhos
O que são casos limites
Casos limites são valores “na borda” de uma regra: exatamente no limite, logo abaixo, logo acima, ou valores especiais (zero, vazio, mínimo/máximo permitido). Eles são fontes comuns de bugs em condicionais por causa de comparações como > vs >= e por faixas que se sobrepõem ou deixam lacunas.
Checklist de cobertura de caminhos
- Exaustividade: existe um caminho para todo valor possível? Se não, inclua
SENÃOou valide antes. - Não sobreposição: dois ramos podem ser verdadeiros ao mesmo tempo? Se sim, a ordem importa e pode esconder um erro.
- Limites inclusivos/exclusivos: confirme se o limite deve ser
>=ou>,<=ou<. - Valores especiais: zero, negativo, vazio, nulo (se aplicável), máximo permitido.
- Fallback explícito: use
SENÃOpara capturar o inesperado e tratar/registrar.
Exemplo clássico: faixas numéricas sem lacunas
Requisito: “Frete: até 5 kg custa 10; acima de 5 e até 20 kg custa 25; acima de 20 kg custa 60.”
Uma implementação correta deve cobrir: 5, 5.01, 20, 20.01, e também pesos inválidos (0 ou negativos) se puderem ocorrer.
SE peso <= 0 ENTÃO ESCREVA "Peso inválido"SENÃO SE peso <= 5 ENTÃO frete <- 10SENÃO SE peso <= 20 ENTÃO frete <- 25SENÃO frete <- 60FIMSEObserve como os testes usam apenas <= em sequência, evitando buracos entre faixas.
Garantindo que todos os caminhos relevantes foram cobertos (passo a passo)
1) Liste as categorias de entrada (faixas, tipos, estados). 2) Para cada categoria, escreva um exemplo “típico” e dois limites (na borda e logo após). 3) Verifique se cada exemplo cai em exatamente um ramo. 4) Se algum exemplo não cair em ramo nenhum, adicione validação ou um SENÃO. 5) Se algum exemplo cair em mais de um ramo, ajuste a ordem ou refine as condições para ficarem mutuamente exclusivas.
Padrões úteis e armadilhas comuns
1) Evitar “SE” aninhado demais
Aninhamento profundo dificulta enxergar caminhos e casos limites. Quando possível, use SENÃO SE para faixas e categorias, ou extraia condições nomeadas.
Antes (aninhado):
SE clienteAtivo ENTÃO SE saldo >= 0 ENTÃO aprovar() SENÃO negar() FIMSESENÃO negar()FIMSEDepois (mais direto):
SE (NÃO clienteAtivo) OU (saldo < 0) ENTÃO negar()SENÃO aprovar()FIMSESe essa forma ficar difícil de ler por causa da negação, prefira condições nomeadas:
clienteElegivel <- clienteAtivo E (saldo >= 0)SE clienteElegivel ENTÃO aprovar()SENÃO negar()FIMSE2) Ordem dos testes em SENÃO SE
Quando condições se sobrepõem, a ordem define o resultado. Exemplo:
SE idade >= 18 ENTÃO categoria <- "ADULTO"SENÃO SE idade >= 60 ENTÃO categoria <- "IDOSO"SENÃO categoria <- "MENOR"FIMSEEsse código nunca classificará alguém como “IDOSO”, porque idade >= 18 captura antes. A ordem correta é testar primeiro o caso mais específico/alto:
SE idade >= 60 ENTÃO categoria <- "IDOSO"SENÃO SE idade >= 18 ENTÃO categoria <- "ADULTO"SENÃO categoria <- "MENOR"FIMSE3) “SENÃO” como proteção contra o inesperado
Quando há estados enumerados (ex.: tipo de usuário), use SENÃO para capturar valores desconhecidos. Isso ajuda a não deixar o algoritmo em silêncio em casos não previstos.
SE tipo = "ADMIN" ENTÃO permissao <- "TOTAL"SENÃO SE tipo = "EDITOR" ENTÃO permissao <- "PARCIAL"SENÃO SE tipo = "LEITOR" ENTÃO permissao <- "BÁSICA"SENÃO ESCREVA "Tipo desconhecido"FIMSEExercícios
Exercício 1: transformar requisitos textuais em condicionais
Escreva o pseudocódigo usando SE, SENÃO SE e SENÃO, cobrindo casos limites.
- a) “Se a temperatura for menor que 0, exibir ‘congelando’. Se estiver entre 0 e 25 (inclusive), exibir ‘amena’. Se for maior que 25, exibir ‘quente’.”
- b) “A senha é válida se tiver pelo menos 8 caracteres e contiver pelo menos um número. Caso contrário, é inválida.”
- c) “Um pedido pode ser enviado se estiver pago e o endereço estiver completo. Se não estiver pago, exibir ‘aguardando pagamento’. Se o endereço estiver incompleto, exibir ‘corrigir endereço’.” (Garanta que o algoritmo trate o caso em que ambos os problemas acontecem.)
Exercício 2: refatorar uma árvore de decisão confusa
Refatore para melhorar legibilidade, reduzir aninhamento e evitar negações duplas. Extraia condições nomeadas quando ajudar.
SE NÃO (NÃO cadastrado) ENTÃO SE (idade > 17 E idade < 60) OU (idade >= 60 E NÃO (NÃO documentoOk)) ENTÃO SE NÃO bloqueado ENTÃO ESCREVA "Acesso liberado" SENÃO ESCREVA "Conta bloqueada" FIMSE SENÃO ESCREVA "Não elegível" FIMSESENÃO ESCREVA "Precisa cadastrar"FIMSETarefas:
- a) Reescreva removendo negações duplas (ex.:
NÃO (NÃO x)). - b) Extraia condições como
estaCadastrado,documentoValido,faixaEtariaOk,contaAtiva. - c) Garanta que os ramos sejam mutuamente compreensíveis e que exista um caminho para cada situação relevante.
Exercício 3: checagem de casos limites
Para o requisito do frete (até 5, até 20, acima de 20), liste pelo menos 8 valores de teste incluindo limites e inválidos, e indique em qual ramo cada um cai.
| Valor de entrada | Ramo esperado |
|---|---|
| peso = 5 | ... |
| peso = 5.01 | ... |
| peso = 20 | ... |
| peso = 20.01 | ... |
| peso = 0 | ... |
| peso = -1 | ... |
| peso = 1 | ... |
| peso = 100 | ... |