Repetições: FOR / WHILE
A grande vantagem dos computadores: fazer a mesma coisa milhares de vezes sem reclamar.
FOR — quando você sabe quantas vezes
O laço FOR repete um bloco um número conhecido de vezes.
1 FOR variavel = inicio TO fim
2 ' comandos repetidos
3 NEXT variavel
DIGITE E VEJA
Programa 7.1 — Contagem de 1 a 10
USES SCREEN 1
SCREEN 1
CLS
DIM i AS BYTE
FOR i = 1 TO 10
PRINT "CONTANDO: ", i
NEXT i
PRINT "TERMINOU!"
Pulando de quantos em quantos: STEP
Por padrão, FOR aumenta a variável de 1 em 1. Para mudar isso, use STEP:
DIM i AS BYTE
FOR i = 0 TO 100 STEP 10
PRINT i ' 0, 10, 20, ..., 100
NEXT i
' Para contar de trás pra frente, use STEP negativo:
FOR i = 10 TO 1 STEP -1
PRINT i ' 10, 9, 8, ..., 1
NEXT i
ATENÇÃO
STEP negativo precisa de início > fim
FOR i = 1 TO 10 STEP -1 não roda nem uma vez — o compilador entende que você quer ir de 1 para 10 voltando, o que nunca acontece. Use 10 TO 1 STEP -1.
WHILE — enquanto a condição for verdadeira
Quando você não sabe quantas vezes precisa repetir, use WHILE:
WHILE condicao
' comandos
WEND
DIGITE E VEJA
Programa 7.2 — Dividindo até zerar
Quantas vezes 1000 pode ser dividido por 2 antes de virar zero?
USES SCREEN 1
SCREEN 1
CLS
DIM n AS WORD = 1000
DIM divisoes AS BYTE = 0
WHILE n > 0
n = n / 2
divisoes = divisoes + 1
WEND
PRINT "DIVIDIU ", divisoes, " VEZES"
ATENÇÃO
Cuidado com o laço infinito
Se a condição do WHILE nunca virar falsa, seu programa trava. Sempre inclua algo que caminhe em direção a tornar a condição falsa.
Quando usar cada um
- Use FOR quando: Sabe o número exato de iterações; vai percorrer um intervalo numérico; vai indexar um array.
- Use WHILE quando: O critério de parada é uma condição; espera um evento (tecla, colisão); está procurando algo até encontrar.
Laços aninhados
Você pode colocar um laço dentro de outro:
DIM linha AS BYTE
DIM coluna AS BYTE
FOR linha = 0 TO 4
FOR coluna = 0 TO 4
PRINT "*"
NEXT coluna
PRINT "" ' pula para a próxima linha
NEXT linha
DICA
Use nomes diferentes em cada nível
Sempre use variáveis distintas no FOR externo e no interno (ex: linha/coluna ou i/j). Nunca reuse a mesma variável em laços aninhados.
Exercícios
- 7.1 — Programa que mostra a tabuada do 7 (de 7×1 a 7×10).
- 7.2 — Use WHILE para somar todos os números de 1 a 100. Mostre o total (Dica: 5050).
- 7.3 — Mostre na tela um quadrado 8×8 de asteriscos usando dois FORs aninhados.
Resumo do capítulo
- FOR repete um número conhecido de vezes; aceita STEP.
- WHILE repete enquanto uma condição for verdadeira.
- Sempre garanta que o WHILE pode terminar — evite laços infinitos.
- Laços aninhados varrem matrizes; use variáveis diferentes em cada nível.
Contando para trás: FOR ... DOWNTO
Para uma contagem regressiva, troque TO por DOWNTO. A variável diminui a cada volta, sem precisar de STEP -1:
DIM i AS BYTE
FOR i = 10 DOWNTO 1
PRINT i
NEXT i
PRINT "FOGO!"
DICA
Forma em bloco
O laço também pode ser escrito no estilo Pascal: FOR i = 1 TO 8 DO ... END. As duas formas geram o mesmo código; use a que achar mais legível.
ATENÇÃO
LOOP e UNTIL
As palavras LOOP e UNTIL estão reservadas para uma versão futura e ainda não formam um laço. Por enquanto use WHILE ... WEND (testa antes) ou FOR.