Seu navegador não oferece leitura em voz alta. Você pode ler o guia normalmente.
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 ← tresulta em a = 8 e b = 3. - Errado:
a ← b; b ← aresulta 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
- Liste as variáveis e seus valores iniciais.
- Identifique o tipo de laço e a condição de parada.
- Simule volta por volta, atualizando a tabela.
- Teste também a condição de saída na última volta.
- 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) comdiv(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.