Informática

Teste de mesa em pseudocódigo: enquanto, repita e para

Boa parte das questões de lógica de programação mostra um trecho de pseudocódigo e pergunta qual é o valor final de uma variável. O método que resolve todas é o mesmo: o teste de mesa, que consiste em simular o algoritmo à mão, linha a linha, registrando o valor de cada variável numa tabela. Este guia ensina o procedimento, compara os três tipos de laço (enquanto, repita até, para) e resolve cinco algoritmos com traços conferidos por execução de programa.

Sem norma aplicável: é fundamento de programação. Para código real, veja os guias de Python: tipos, listas e laços e ordenação passo a passo.

O que é o teste de mesa

Monte uma tabela com uma coluna para cada variável (e outra para a saída, se houver). Execute o algoritmo sem pular nada: cada atribuição gera uma nova linha ou atualiza a linha corrente. Ao final, leia o valor pedido. A disciplina é: nunca calcular de cabeça o que o laço faz; sempre simular, porque as bancas escondem a armadilha na última volta.

Os três laços

Laço Quando testa a condição Executa pelo menos uma vez?
ENQUANTO (condição) FAÇA Antes de cada volta Não: se a condição já começa falsa, não executa nenhuma vez
REPITA … ATÉ (condição) Depois de cada volta Sim: o corpo roda ao menos uma vez
PARA i DE a ATÉ b PASSO p O contador é controlado pelo laço Depende dos limites

Atenção à lógica da condição: o enquanto continua enquanto a condição for verdadeira; o repita sai quando a condição de término ficar verdadeira. Ou seja, são condições de sentidos opostos.

Algoritmo 1: enquanto com condição interna

s ← 0
i ← 1
enquanto i ≤ 10 faça
    se i mod 3 = 0 então
        s ← s + i
    fim se
    i ← i + 2
fim enquanto

Qual é o valor final de s e de i? (Operador “mod” é o resto da divisão inteira.)

Volta i no teste i mod 3 s depois i depois
1 1 1 0 3
2 3 0 3 5
3 5 2 3 7
4 7 1 3 9
5 9 0 12 11

Na sexta checagem, i vale 11, e 11 ≤ 10 é falso: o laço termina. s = 12 e i = 11. A armadilha: quem responde “i = 10” esquece que o passo é 2 e que o valor final do contador passa do limite.

Algoritmo 2: repita até

x ← 10
c ← 0
repita
    x ← x − 3
    c ← c + 1
até x ≤ 0
Volta x depois c depois Condição x ≤ 0
1 7 1 falsa
2 4 2 falsa
3 1 3 falsa
4 −2 4 verdadeira, sai

Resultado: x = −2 e c = 4. Observe que o valor de x terminou abaixo de zero: a condição só é testada no fim da volta. Mesmo se x começasse em 0, o corpo executaria uma vez.

Algoritmo 3: para com passo negativo

para i de 5 até 1 passo −2 faça
    escreva i
fim para

O contador assume 5, 3, 1 e para, pois o próximo seria −1, fora do limite. A saída é 5 3 1, com três voltas. Se o passo fosse positivo (ou omitido, assumindo +1) nessa mesma faixa 5 até 1, o laço não executaria nenhuma vez.

Algoritmo 4: laços aninhados

n ← 0
para i de 1 até 3 faça
    para j de 1 até i faça
        n ← n + 1
    fim para
fim para

Para i = 1, o laço interno roda 1 vez; para i = 2, roda 2 vezes; para i = 3, roda 3 vezes. Total: 1 + 2 + 3 = 6, então n = 6. O truque dos aninhados é perceber que o limite do laço interno depende do externo.

Algoritmo 5: o MDC de Euclides

a ← 84
b ← 36
enquanto b ≠ 0 faça
    r ← a mod b
    a ← b
    b ← r
fim enquanto
Volta a no início b no início r a depois b depois
1 84 36 12 36 12
2 36 12 0 12 0

Quando b chega a 0, o laço termina, e a = 12, que é o MDC de 84 e 36. Confira: 84 = 7 × 12 e 36 = 3 × 12, e 7 e 3 não têm divisor em comum. Para o conceito matemático, veja MMC e MDC.

Armadilhas clássicas

Troca de valores

Para trocar a e b, é preciso uma variável auxiliar. Com a = 3 e b = 8:

  • Correto: t ← a; a ← b; b ← t resulta em a = 8 e b = 3.
  • Errado: a ← b; b ← a resulta em a = 8 e b = 8, porque o valor original de a foi perdido na primeira atribuição.

Soma dos dígitos

Para n = 4821, repetindo s ← s + (n mod 10); n ← n div 10 enquanto n > 0, o teste de mesa dá: n = 482 e s = 1; n = 48 e s = 3; n = 4 e s = 11; n = 0 e s = 15. Resultado: 15. O operador div é a divisão inteira.

Maior elemento

Com a lista 4, 9, 2, 7 e maior ← 4, a cada elemento v, “se v > maior então maior ← v” gera: 9 (maior = 9), 2 (continua 9), 7 (continua 9). Resultado: 9. Um erro comum é inicializar maior ← 0 quando os valores podem ser negativos.

Roteiro do teste de mesa

  1. Liste as variáveis e seus valores iniciais.
  2. Identifique o tipo de laço e a condição de parada.
  3. Simule volta por volta, atualizando a tabela.
  4. Teste também a condição de saída na última volta.
  5. Responda exatamente o que foi perguntado: valor final, número de voltas ou saída impressa.

Erros comuns

  • Trocar o sentido da condição do repita (sai quando é verdadeira).
  • Esquecer que o contador do para pode ficar fora da faixa depois do laço, a depender da linguagem.
  • Esquecer o fim da volta e já responder antes de atualizar o contador.
  • Atualizar variáveis na ordem errada dentro do corpo.
  • Confundir / (divisão real) com div (divisão inteira).

Próximos passos

Continue com pilha, fila e lista, busca sequencial e binária e recursão e pilha de chamadas.

Fontes e atualização

Sem norma aplicável. Todos os traços foram conferidos por execução de programa equivalente. A sintaxe do pseudocódigo varia conforme a banca (portugol e variantes); siga a notação do edital e veja a metodologia do site.

Leia também

Para continuar no site

Viu algo errado, desatualizado ou confuso? Relatar erro nesta página