Capitulo 7 - Decisão Encadeada
[1]Copyright © 2026 Alyce Suza.
Condições complexas e casos práticos de aninhamento lógico
7.1 Decisões dentro de Decisões: Aninhamento
A construção de algoritmos robustos frequentemente exige que uma decisão só seja tomada se uma condição anterior já tiver sido validada e aceita pelo sistema. É perfeitamente possível colocar uma estrutura condicional inteira dentro do bloco de execução de outra estrutura condicional. Esta técnica é tecnicamente conhecida como aninhamento ou nesting. Neste modelo arquitetural, cada bloco condicional interno só é avaliado pelo processador se, e somente se, o bloco condicional externo for atestado como verdadeiro. Caso a condição externa seja falsa, o computador ignora completamente a existência do bloco interno, economizando processamento e evitando erros lógicos de execução prematura.
se (condicao_externa)
{
se (condicao_interna)
{
// bloco executado apenas quando AMBAS as condicoes sao verdadeiras
}
senao
{
// bloco executado quando a externa e verdadeira, mas a interna e falsa
}
}
senao
{
// bloco executado quando a externa e falsa (a interna nunca chega a ser avaliada)
}
Um exemplo clássico desta aplicação ocorre na validação acadêmica que depende de dois fatores excludentes, como a frequência e a nota técnica. O problema define que um aluno é automaticamente reprovado se acumular mais de quinze faltas, tornando a verificação da sua nota um passo completamente inútil e desnecessário neste cenário. O sistema deve verificar a nota do aluno apenas se a barreira da frequência tiver sido ultrapassada com sucesso.
programa
{
funcao inicio()
{
real nota
inteiro faltas
escreva("Nota: ") leia(nota)
escreva("Faltas: ") leia(faltas)
// Primeira verificacao restrita bloqueando pela frequencia
se (faltas > 15)
{
escreva("REPROVADO por falta.\n")
escreva("Voce teve ", faltas, " faltas (maximo permitido: 15).\n")
}
senao
{
// O sistema so verifica a nota se o aluno passou na avaliacao de frequencia
se (nota >= 6.0)
{
escreva("APROVADO! Nota: ", nota, " | Faltas: ", faltas, "\n")
}
senao
{
escreva("REPROVADO por nota. Nota: ", nota, " (minimo exigido: 6.0)\n")
}
}
}
}
7.2 Usando Operadores Lógicos para Simplificar
A complexidade visual de um código cresce exponencialmente a cada novo nível de aninhamento adicionado, dificultando a manutenção e a leitura lógica por parte do programador. Em muitos casos práticos, as decisões profundamente aninhadas podem ser reescritas e achatadas utilizando os operadores lógicos devidamente combinados. Esta refatoração torna o código infinitamente mais conciso, legível e direto ao ponto, eliminando a necessidade de ler múltiplas chaves de abertura e fechamento para compreender a regra de negócio.
// Versao construida com aninhamento estrutural (muito mais verbosa e profunda)
se (idade >= 18)
se (possuiDocumento)
escreva("Pode votar com seguranca!")
senao
escreva("Obrigatorio apresentar documento original.")
// Versao refatorada com o operador logico (substancialmente mais concisa)
se (idade >= 18 e possuiDocumento)
escreva("Pode votar com seguranca!")
A validação matemática para a existência de um triângulo perfeito é um excelente cenário para aplicar esta simplificação. A geometria dita que, para formar um triângulo válido, cada lado isolado deve ser obrigatoriamente menor que a soma dos outros dois lados restantes. Podemos resolver este problema avaliando todas as premissas em uma única linha de comando unificada.
programa
{
funcao inicio()
{
real a, b, c
escreva("Insira o Lado A: ") leia(a)
escreva("Insira o Lado B: ") leia(b)
escreva("Insira o Lado C: ") leia(c)
// A premissa basica exige que os tres lados fornecidos sejam positivos
se (a <= 0 ou b <= 0 ou c <= 0)
{
escreva("Erro logico: Os lados de um poligono devem ser estritamente positivos!\n")
}
// Verificacao unificada atestando se as medidas formam um triangulo real
senao se ((a + b > c) e (a + c > b) e (b + c > a))
{
escreva("Validacao: A figura geometrica e um triangulo valido!\n")
// Subclassificacao do tipo de triangulo encontrado
se (a == b e b == c)
{
escreva("Classificacao: EQUILATERO (contem os tres lados matematicamente iguais)\n")
}
senao se (a == b ou b == c ou a == c)
{
escreva("Classificacao: ISOSCELES (contem exatamente dois lados iguais)\n")
}
senao
{
escreva("Classificacao: ESCALENO (contem os tres lados completamente diferentes)\n")
}
}
senao
{
escreva("Validacao: As proporcoes informadas nao formam um triangulo.\n")
}
}
}
Podemos utilizar a mesma arquitetura lógica escalonada para construir um sistema completo de classificação de Índice de Massa Corporal. A primeira barreira impede que valores negativos absurdos corrompam o sistema, e a sequência encadeada garante que o paciente seja classificado na categoria médica correta sem risco de sobreposição de diagnósticos.
programa
{
funcao inicio()
{
real peso, altura, imc
escreva("Massa corporal em kg: ") leia(peso)
escreva("Altura vertical em metros: ") leia(altura)
se (peso <= 0 ou altura <= 0)
{
escreva("Alerta: Os valores parametricos inseridos sao invalidos!\n")
}
senao
{
imc = peso / (altura * altura)
escreva("Registro de IMC calculado: ", imc, "\n")
se (imc < 18.5) { escreva("Diagnostico: Abaixo do peso basal\n") }
senao se (imc < 25.0) { escreva("Diagnostico: Peso considerado normal\n") }
senao se (imc < 30.0) { escreva("Diagnostico: Categoria de Sobrepeso\n") }
senao se (imc < 35.0) { escreva("Diagnostico: Nivel de Obesidade Grau I\n") }
senao se (imc < 40.0) { escreva("Diagnostico: Nivel de Obesidade Grau II\n") }
senao { escreva("Diagnostico: Nivel de Obesidade Grau III\n") }
}
}
}
7.3 Exercícios do Capítulo 7
Aplique rigorosamente as regras da instituição estabelecendo que um registro maior que quinze faltas gera reprovação automática por ausência, tornando a nota irrelevante para o cálculo final. Apenas para os casos em que a frequência estiver dentro do aceitável, o sistema deve validar a nota exigindo uma marca igual ou superior a seis pontos para consolidar a aprovação definitiva. Exiba a situação final do aluno acompanhada do respectivo motivo limitante.
Dica técnica: O algoritmo deve sempre verificar as faltas no primeiro estágio, visto que a reprovação por limite de faltas é o critério mais grave e excludente deste cenário de negócio.
Aplique uma política de benefícios distribuindo os descontos da seguinte forma. Valores estritamente superiores a dois mil reais recebem um corte de trinta por cento. Valores acima de mil reais ganham vinte por cento. Valores passando da marca de quinhentos reais garantem dez por cento. O restante das transações não recebe qualquer tipo de subsídio.
Exiba no console de forma formatada o percentual exato alcançado, o valor monetário do desconto calculado e o montante final líquido a pagar no caixa. Construa os testes validando sempre da maior barreira para a menor, evitando que o fluxo caia prematuramente em faixas mais permissivas.
A regra oficial determina que um ano é bissexto caso seja perfeitamente divisível por quatro, e simultaneamente não seja divisível por cem, a menos que consiga ser divisível por quatrocentos.
Exiba na tela a confirmação lógica da validação e informe automaticamente quantos dias o mês de fevereiro tem especificamente no ano consultado. Utilize uma variável lógica para unificar toda a expressão em uma única avaliação limpa e eficiente.
Gabarito do Capítulo 7
programa
{
funcao inicio()
{
real nota
inteiro faltas
escreva("Digite a Nota registrada: ") leia(nota)
escreva("Digite as Faltas contadas: ") leia(faltas)
se (faltas > 15)
{
escreva("Decisao: REPROVADO sumariamente por falta excessiva. Faltas totais: ", faltas, "\n")
}
senao
{
se (nota >= 6.0) { escreva("Decisao: APROVADO com louvor! Nota alcancada: ", nota, "\n") }
senao { escreva("Decisao: REPROVADO por baixo desempenho teorico. Nota final: ", nota, "\n") }
}
}
}
Esta arquitetura comprova o valor prático do aninhamento funcional. Se as faltas passam de quinze unidades, o computador crava a reprovação imediata e abandona o fluxo de análise de notas sem desperdiçar recursos preciosos.
programa
{
funcao inicio()
{
real compra, perc = 0, desc, final
escreva("Insira o Valor total do pedido: R$ ") leia(compra)
se (compra > 2000) { perc = 0.30 escreva("Faixa de Desconto Master de 30% liberada\n") }
senao se (compra > 1000) { perc = 0.20 escreva("Faixa de Desconto Premium de 20% liberada\n") }
senao se (compra > 500) { perc = 0.10 escreva("Faixa de Desconto Basico de 10% liberada\n") }
senao { escreva("Sem enquadramento para politicas de desconto no momento\n") }
desc = compra * perc
final = compra - desc
escreva("Apuracao do Desconto gerado: R$ ", desc, "\nApuracao do Valor Final devido: R$ ", final, "\n")
}
}
Ao preencher variáveis intermediárias em vez de calcular diretamente as saídas dentro de cada bloco condicional, o código alcança um grau altíssimo de limpeza, permitindo que as equações de decréscimo e a rotina de exibição ocorram centralizadas apenas uma vez na cauda final do programa principal.
programa
{
funcao inicio()
{
inteiro ano
escreva("Forneca o Ano civil para analise tecnica: ") leia(ano)
logico bis = (ano % 4 == 0) e (nao (ano % 100 == 0) ou (ano % 400 == 0))
se (bis) { escreva(ano, " e validado como ano bissexto real. O mes de Fevereiro tem exatos 29 dias.\n") }
senao { escreva(ano, " nao e um ano bissexto. O mes de Fevereiro tem os tradicionais 28 dias.\n") }
}
}
Testando limites conhecidos, o ano 2024 passa livremente no filtro como ano bissexto. O ano 1900 fracassa pois esbarra na divisão por cem sem compensar com a divisão por quatrocentos, enquanto o icônico ano 2000 valida o status superando todas as exigências deste algoritmo cronológico clássico.
Copyright © 2026 Alyce Suza. Todos os direitos reservados nos termos da Lei 9.610/98. O conteúdo publicado no site https://wiki.suzacybersecurity.com/ é protegido pelas diretrizes brasileiras de propriedade intelectual e a sua autoria é reconhecida desde o momento da criação técnica. O compartilhamento, a reprodução e a distribuição deste material são permitidos e incentivados apenas para finalidades educacionais, acadêmicas ou de consulta técnica, sendo estritamente vedado qualquer tipo de uso comercial. Para que a replicação seja validada e legal, você deve obrigatoriamente atribuir os devidos créditos a Alyce Suza e fornecer um link direto e acessível para a publicação original. A utilização deste material para obter lucro, monetização, venda de materiais ou qualquer vantagem financeira constitui violação de direitos autorais e está sujeita às sanções legais cabíveis, assim como alterações que modifiquem o sentido original das explicações sobre segurança da informação. Para eventuais dúvidas sobre permissões de uso, parcerias ou para reportar replicações indevidas, envie um e-mail para alycesuza@gmail.com. ↩︎