Módulo 14 - Lógica aplicada no mundo real

O caixa eletrônico por dentro: portões que protegem dinheiro

9 min de leitura · por Cesar Gargiulo, revisado pela equipe ValorFinal e GuardiaSec · Atualizado em 02/07/2026

O que você vai aprender

  • Desenhar o fluxo completo do caixa: senha, menu, operação e encerramento.
  • Escrever o bloqueio de senha após 3 tentativas com laço e contador.
  • Encadear as validações do saque na ordem que protege o saldo.
  • Encontrar um bug real numa condição de saque invertida.

O fluxo por trás da tela

Lá no módulo 1, você ordenou os passos de um saque num jogo e descobriu que alguns passos existem para proteger os seguintes. Este é o dia de abrir a máquina inteira. O caixa eletrônico é o exemplo perfeito de sistema do mundo real: cada tela que você vê na agência é um bloco de lógica que você já sabe escrever. A senha é um laço de validação com limite; o menu é a escolha de caminhos do módulo 8 girando dentro de um laço; o saque é uma cadeia de decisões protegendo uma variável chamada saldo.

Fluxograma do caixa eletrônico: o cartão entra, o programa pede a senha e confere com até três tentativas; senha errada três vezes bloqueia o cartão; senha correta abre o menu com saldo, saque, depósito e sair; no saque, o programa confere se o valor é válido e se há saldo suficiente antes de entregar o dinheiro e voltar ao menu.
O caminho do dinheiro: cada losango do fluxo é um portão que protege o passo seguinte.

Repare no diagrama como NENHUMA seta pula um losango. Não existe caminho da entrada do cartão direto para a entrega do dinheiro: toda rota passa pela senha e pela conferência de saldo. Essa disciplina tem nome no mundo profissional: defesa em profundidade, camadas de conferência em sequência. Se uma falhar, a próxima segura. É o mesmo raciocínio do validador da primeira aula, agora com consequências que se medem em dinheiro.

A senha com três tentativas e o saque protegido

O primeiro portão é a senha, e ele junta dois padrões seus: o laço de validação da primeira aula e o contador do módulo 9. A diferença em relação ao validador de idade é que aqui o laço tem um limite: três erros e o cartão bloqueia. A condição do ENQUANTO carrega as duas exigências de uma vez, com o operador E do módulo 7: continua pedindo senha enquanto houver tentativa sobrando E o acesso ainda não foi liberado.

tentativas <- 0
acesso <- falso
enquanto tentativas < 3 e acesso = falso faça
  escreva("Digite a senha:")
  leia(senha)
  se senha = senhaSalva então
    acesso <- verdadeiro
  senão
    tentativas <- tentativas + 1
    escreva("Senha incorreta.")
  fim
fim
se acesso = falso então
  escreva("Cartão bloqueado. Procure a sua agência.")
fim
// Errando duas vezes e acertando na terceira, acesso vira
// verdadeiro com tentativas = 2 e o menu abre normalmente.

O portão da senha: o laço termina por acerto OU por esgotamento das três tentativas.

🎮 Jogo da aula

O saque que quebraria o banco

Este trecho deveria sacar somente quando há saldo suficiente. Uma linha inverte tudo e faz o caixa entregar dinheiro que não existe. Toque na linha com o bug.

O jogo mostra por que o teste de mesa do módulo 13 não é luxo. Lendo rápido, o código do saque parece certo: tem SE, tem saldo, tem mensagem. Só a simulação com números concretos (saldo 100, saque 500) revela a inversão: o programa entregaria 500 e deixaria a conta em -400. Nos sistemas reais, toda alteração de saldo passa por revisão de outra pessoa e por testes automáticos exatamente por isso: dinheiro não perdoa condição invertida.

O menu que gira até a pessoa ir embora

Depois do portão da senha, o caixa vira um menu em laço. A cada operação concluída, a tela volta às opções, e só a escolha “sair” encerra a sessão. O esqueleto junta o laço ENQUANTO com a escada de decisões, e cada opção chama um bloco próprio, de preferência uma função, como o módulo 12 ensinou: consultarSaldo(), sacar(), depositar(). O programa principal fica curto e legível, quase um índice do sistema.

opcao <- 0
enquanto opcao <> 4 faça
  escreva("1 Saldo   2 Saque   3 Depósito   4 Sair")
  leia(opcao)
  se opcao = 1 então
    consultarSaldo()
  senão se opcao = 2 então
    sacar()
  senão se opcao = 3 então
    depositar()
  senão se opcao <> 4 então
    escreva("Opção inválida. Escolha de 1 a 4.")
  fim
fim
escreva("Sessão encerrada. Retire o seu cartão.")
// Escolhendo 1, depois 2 e depois 4: saldo na tela,
// saque executado e despedida ao sair.

O menu em laço: opção inválida não derruba o caixa, só volta para a tela de opções.

Note o último degrau da escada: uma opção fora de 1 a 4 recebe aviso e o menu gira de novo, sem travar a máquina. É a validação de entrada aplicada ao próprio menu, fechando o círculo do módulo: o caixa eletrônico inteiro é feito das suas peças. Um laço de senha, uma escada de opções, duas ou três funções e um punhado de conferências na ordem certa. A sofisticação dos sistemas reais está menos em truques secretos e mais em disciplina com os fundamentos.

Teste rápido

No caixa eletrônico, por que a conferência de saldo vem ANTES de subtrair e entregar o dinheiro?

Perguntas frequentes

Por que o limite clássico é de 3 tentativas de senha?
É um equilíbrio entre segurança e paciência: três erros são raros para o dono do cartão distraído e poucos para quem tenta adivinhar a senha na força bruta. O número exato varia por banco, mas o padrão lógico é o mesmo: laço com contador e bloqueio ao estourar o limite.
O caixa de verdade é programado assim, em meia página?
O esqueleto lógico é este, sim: portões em sequência, menu em laço, conferência antes da ação. O sistema real acrescenta camadas que fogem do escopo do curso: comunicação criptografada com o banco, controle do hardware que conta cédulas, registros de auditoria. A lógica que você escreveu é a espinha dorsal de tudo isso.
O que impede o programa de aceitar um saque de valor negativo?
A validação de entrada, de novo. Um saque de -100 passaria na conferência de saldo (é menor que qualquer saldo positivo) e SOMARIA dinheiro à conta na subtração, porque subtrair um negativo é somar. Por isso o saque confere duas coisas: valor maior que zero E saldo suficiente.
Por que usar funções para as opções do menu?
Para o programa principal caber nos olhos: um menu com o código de cada operação escrito por extenso vira um paredão ilegível. Com sacar() e depositar() separados, cada bloco se testa sozinho e o menu vira um índice. É a divisão de responsabilidades do módulo 12 aplicada num sistema de verdade.
O que acontece se a pessoa digitar uma letra em vez do número da opção?
No pseudocódigo do curso, assumimos entrada numérica; nas linguagens reais, a leitura precisa validar o tipo antes de comparar, exatamente como a primeira aula deste módulo mostrou. A regra não muda: dado de fora se confere antes de usar, inclusive o número do menu.
Esse padrão de menu serve para outros programas?
Serve para quase todo sistema interativo de texto: cadastros, agendas, controles de estoque, jogos com telas. O trio “laço até sair, escada de opções, função por operação” é um dos esqueletos mais reaproveitados da programação, e o projeto final do módulo 16 usa exatamente ele.

Fontes

Seu progresso fica salvo neste aparelho. Assinantes sincronizam entre os aparelhos.