UFLA

🎓 Aula 04

Estruturas de Repetição

Prof. Paulo Rettore

Universidade Federal de Lavras

GAC124 — Introdução aos Algoritmos

🎯 Repetir sem perder o controle

  • Executar um bloco várias vezes.
  • Escolher entre while e do-while.
  • Usar contadores, acumuladores e sentinelas.
  • Evitar repetições infinitas.

Toda repetição precisa de uma condição que possa mudar.

🔁 A ideia de um laço

1. Teste

A condição é avaliada.

2. Corpo

Os comandos são executados.

3. Atualização

Algo muda antes do próximo teste.

Pergunta-chave: o que fará a condição ficar falsa?

👀 While: testa antes

while (condicao) {
    // comandos que podem se repetir
}

Se for true

O corpo executa e o teste volta a acontecer.

Se for false

O corpo pode não executar nenhuma vez.

🚪 Do-while: executa primeiro

do {
    // comandos que se repetem
} while (condicao);

O bloco acontece pelo menos uma vez. O ponto e vírgula depois da condição é obrigatório.

🧪 Exemplo prático: while valida antes

Use while quando o corpo pode não precisar ser executado.

int nota;
cin >> nota;

while (nota < 0 || nota > 10) {
    cout << "Nota inválida. Digite novamente: ";
    cin >> nota;
}

cout << "Nota aceita: " << nota;

Se a primeira nota for válida

O laço não executa nenhuma vez. A entrada já está correta.

Se a primeira nota for inválida

O programa repete a leitura até obter um valor entre 0 e 10.

🧾 Exemplo prático: do-while mostra um menu

Use do-while quando a ação precisa acontecer pelo menos uma vez.

int opcao;

do {
    cout << "1 - Cadastrar\\n";
    cout << "2 - Listar\\n";
    cout << "0 - Sair\\n";
    cin >> opcao;
} while (opcao != 0);

cout << "Programa encerrado.";

O menu aparece antes do primeiro teste. Depois de cada escolha, a condição decide se ele será mostrado novamente.

⚖️ While ou do-while?

EstruturaQuando testa?Mínimo de execuções
whileAntes do corpoZero
do-whileDepois do corpoUma

Escolha a estrutura que representa melhor a leitura do problema.

🧮 Contadores e acumuladores

Contador

Conta quantas vezes algo acontece.

contador++

Acumulador

Guarda um resultado parcial.

soma += valor

Inicialização

Começa antes do laço.

soma = 0

int contador = 0;
int soma = 0;
while (contador < 5) {
    soma += contador;
    contador++;
}

🛑 Sentinelas encerram a entrada

Uma sentinela é um valor especial que sinaliza o fim da leitura.

int valor, soma = 0;
cin >> valor;
while (valor != -1) {
    soma += valor;
    cin >> valor;
}
cout << soma;

-1 encerra a entrada; ele não entra na soma.

🧩 Repetições aninhadas

Um laço pode estar dentro de outro. O laço interno completa suas voltas para cada volta do laço externo.

int linha = 1;
while (linha <= 3) {
    int coluna = 1;
    while (coluna <= 4) {
        cout << "* ";
        coluna++;
    }
    cout << "\n";
    linha++;
}

Use indentação e nomes que revelem qual variável controla cada laço.

📝 Desafio: soma e média

Leia valores até receber a sentinela -1. Ao final, mostre a soma e a média dos valores válidos.

  1. Crie um acumulador para a soma.
  2. Crie um contador para a quantidade.
  3. Evite dividir por zero quando nenhum valor for informado.

Antes de programar, escreva a condição de repetição e a atualização da leitura.

🧩 Prática em aula

Leia valores até receber -1 e mostre soma, quantidade e média dos valores válidos.

Gabarito orientador: Use uma sentinela, um acumulador e um contador. Se nenhum valor for informado, não divida por zero.

📚 Referências e materiais

Use estas fontes para consultas pontuais depois da aula:

Os slides completos, o Campus Virtual e o DREDD continuam sendo as fontes principais da disciplina.

📌 Resumo da aula

  • while testa antes; do-while testa depois.
  • Todo laço precisa avançar para evitar repetição infinita.
  • Contadores contam e acumuladores guardam resultados.
  • Laços aninhados resolvem problemas com mais de uma dimensão.

PRÓXIMA AULA

⏭️ Próxima aula

Modularização e passagem de parâmetros

Prof. Paulo Rettore

GAC124 — Introdução aos Algoritmos