Capitulo 8 - Estruturas de Repetição I
[1]Copyright © 2026 Alyce Suza.
O laço enquanto, Contadores e Acumuladores
8.1 Por que Precisamos de Repetição?
Imagine calcular a média escolar de trinta alunos sem utilizar ciclos automáticos de repetição. Você precisaria escrever mecanicamente trinta comandos de leitura individuais e trinta operações de soma sequenciais no código fonte do seu sistema. Esse cenário braçal é impraticável para turmas pequenas e absolutamente impossível caso o banco de dados exija o processamento de mil alunos cadastrados. As estruturas de repetição, tecnicamente conhecidas na literatura computacional como loops, resolvem esse gargalo de processamento de forma matemática e definitiva, permitindo que a máquina assuma o volume massivo de trabalho sem esgotar o programador.
José Augusto N. G. Manzano e Jayr Figueiredo de Oliveira. Algoritmos: Lógica para Desenvolvimento de Programação. 28. ed. Erica, 2016.
8.2 O Laço enquanto: Pré-Testado
O comando enquanto verifica a condição lógica obrigatoriamente antes de executar o bloco de instruções pela primeira vez. Se a condição inicial já for avaliada como falsa logo na largada do sistema, o computador ignora o bloco inteiro e o código interno nunca chega a ser executado. É por esta característica técnica e comportamental que ele é formalmente chamado de laço pré-testado em ciência da computação.
enquanto (condicao)
{
// conjunto de instrucoes repetidas ciclicamente enquanto a condicao for VERDADEIRA
}
O exemplo abaixo demonstra a estrutura básica construindo um contador sequencial clássico que vai da unidade um até a dezena.
programa
{
funcao inicio()
{
inteiro contador = 1 // declaracao da variavel de controle do ciclo
enquanto (contador <= 10)
{
escreva(contador, " ")
contador++ // ETAPA ESSENCIAL: atualiza a variavel de controle no laco
}
escreva("\nProcessamento finalizado!\n")
}
}
Para compreender perfeitamente a mecânica invisível da máquina durante a execução de um loop, precisamos isolar o rastreamento lógico da memória passo a passo.
| Momento do Fluxo | Ação na Memória | Decisão do Sistema |
|---|---|---|
| Início absoluto | contador = 1 |
1 <= 10? SIM, o sistema executa o bloco |
| Iteração 1 | O console imprime 1, contador = 2 |
2 <= 10? SIM, o ciclo continua |
| Iteração 5 | O console imprime 5, contador = 6 |
6 <= 10? SIM, o ciclo continua |
| Iteração 10 | O console imprime 10, contador = 11 |
11 <= 10? NÃO, o sistema sai do loop |
| Finalização | O comando escreva fora do bloco roda |
O programa termina o fluxo vital |
O controle do ciclo não se limita a somas progressivas. Você pode inverter a mecânica lógica e criar um laço perfeitamente regressivo utilizando o operador de decremento matemático.
programa
{
funcao inicio()
{
inteiro i = 10
enquanto (i >= 1)
{
escreva(i, " ")
i-- // executa o decremento removendo unidades de 10 para 1
}
escreva("\nLancamento de foguete autorizado!\n")
}
}
Também é plenamente viável controlar o passo da variável alterando o valor do incremento, saltando casas numéricas para processar apenas números pares no intervalo.
programa
{
funcao inicio()
{
inteiro n = 2
escreva("Registro de pares ate o limite de 20: ")
enquanto (n <= 20)
{
escreva(n, " ")
n = n + 2 // incrementa estritamente de 2 em 2 filtrando so os pares
}
}
}
8.3 Contadores: Contando Ocorrências
Um contador é uma variável dedicada de controle que aumenta ou diminui o seu valor numérico em uma unidade exata a cada vez que uma condição específica é atendida por dentro do ciclo de repetição. É evidente para quem sente na pele a depuração frustrante de algoritmos que esquecer de inicializar o contador com o valor zero antes da engrenagem do loop começar gera resultados fantasmas e cálculos completamente corrompidos pela sujeira residual da memória.
programa
{
funcao inicio()
{
inteiro numero, contador = 0
inteiro positivos = 0, negativos = 0, zeros = 0
inteiro i = 0
enquanto (i < 10)
{
escreva("Insira o Numero de indice ", i+1, ": ") leia(numero)
se (numero > 0) { positivos++ }
senao se (numero < 0) { negativos++ }
senao { zeros++ }
contador++
i++
}
escreva("\nContagem de Positivos confirmados: ", positivos, "\n")
escreva("Contagem de Negativos confirmados: ", negativos, "\n")
escreva("Contagem de Zeros exatos: ", zeros, "\n")
}
}
8.4 Acumuladores: Somando Valores
Diferente do contador que atua apenas adicionando unidades fixas para rastrear ocorrências, um acumulador trabalha de forma mais complexa somando valores numéricos variáveis e volumosos ao longo de todas as iterações rodadas do loop. Ele funciona conceitualmente como uma grande caixa registradora de mercado que vai guardando fielmente o valor progressivo e cumulativo das operações em andamento.
programa
{
funcao inicio()
{
real nota, soma = 0 // acumulador obrigatoriamente inicializado com zero
inteiro i = 1
enquanto (i <= 5)
{
escreva("Registre a Nota ", i, " da avaliacao: ") leia(nota)
soma = soma + nota // ACUMULA adicionando o novo valor ao montante total
i++
}
real media = soma / 5
escreva("Soma total apurada no semestre: ", soma, "\n")
escreva("Media escolar calculada globalmente: ", media, "\n")
}
}
-
Sempre execute a inicialização garantindo o valor zero antes que o loop seja acionado no código.
-
O contador deve sofrer o incremento rígido de mais um apenas quando uma condição de negócio for verdadeira.
-
O acumulador tem a função de somar o valor elástico da variável de interesse a cada volta do laço para preservar totais.
-
O cálculo estatístico de média exige a divisão do acumulador pelo contador e deve ocorrer exclusivamente depois do loop terminar, nunca aprisionado dentro dele.
8.5 Loops com Sentinela
Um valor sentinela é uma chave numérica especial e predefinida que o usuário digita no console exclusivamente para sinalizar ao sistema computacional que ele deseja interromper a inserção contínua de dados na memória. Essa estratégia arquitetural é vital quando não sabemos de forma antecipada o número exato de repetições que o programa vai exigir, delegando ao operador humano o poder absoluto de encerrar a rotina no momento adequado.
programa
{
funcao inicio()
{
real nota, soma = 0
inteiro contador = 0
escreva("Digite notas sequenciais e insira -1 para finalizar a operacao:\n")
escreva("Nota do aluno: ") leia(nota)
enquanto (nota != -1) // o valor -1 assume o papel tecnico de sentinela
{
soma = soma + nota
contador++
escreva("Nota do aluno: ") leia(nota)
}
se (contador > 0)
{
escreva("Volume de Notas efetivamente digitadas: ", contador, "\n")
escreva("Media final da instituicao: ", soma / contador, "\n")
}
senao
{
escreva("Nenhuma nota letiva foi digitada na sessao de uso.\n")
}
}
}
8.6 Exercícios do Capítulo 8
enquanto para processar e exibir todos os números classificados como ímpares no longo intervalo de um a cem.
Ao final da exibição extensa, calcule e exiba no terminal a quantidade matemática total de números ímpares que o sistema encontrou. Construa um bônus prático que também exiba a soma maciça de todos esses números agrupados.
Dica: Lembre que um número ímpar se comprova atestando numero % 2 != 0. Crie um incremento fixo de um em um e aplique o filtro de barreira condicional com a função se.
Ao término do recebimento dos dados ordene ao sistema que exiba o volume de ocorrências, a soma acumulada dos valores, a média decimal precisa, bem como a captura seletiva identificando com nitidez o maior e o menor valor digitado nas entradas. Imprima uma mensagem clara de segurança caso o operador trave o sistema sem fornecer nenhum número válido na bateria de uso.
Dica: Inicialize a memória das variáveis maior e menor obrigatoriamente atribuindo a elas o primeiro número sólido lido pelo comando de teclado, e não com zero ou fantasias genéricas preenchidas como 9999.
Construa um laço dinâmico para repetir exaustivamente o pedido de inserção desafiando o usuário a adivinhar a quantia correta. Forneça instruções interativas exibindo mensagens de que o número é muito baixo se o chute falhar pela base, ou dizendo que está muito alto caso ele exceda o limite traçado. No momento único do acerto encerre o jogo dizendo parabéns e declarando precisamente a quantia integral das tentativas desperdiçadas na caçada.
Dica: Inicialize a variável controladora de chute numérico com o marco irreal de -1, que é obviamente divergente da chave secreta, com o objetivo claro de forçar fisicamente a entrada lógica imposta pela avaliação do bloco de loop logo na primeira barreira.
Gabarito do Capítulo 8
programa
{
funcao inicio()
{
inteiro n = 1, cont = 0
real soma = 0
enquanto (n <= 100)
{
se (n % 2 != 0)
{
escreva(n, " ")
cont++
soma = soma + n
}
n++
}
escreva("\nFechamento Total de indices apurados: ", cont, " | Soma macica consolidada: ", soma, "\n")
}
}
O resultado desse laço confirma a contagem de cinquenta ímpares reais produzindo a soma cravada no limiar de 2500, o que comprova na prática as teorias aritméticas declarando que a soma reflete o quadrado da quantidade apurada globalmente nos conjuntos puros.
programa
{
funcao inicio()
{
real n, soma = 0, maior, menor
inteiro cont = 0
escreva("Digite um Numero valido ou use 0 como chave sentinela de parada: ") leia(n)
se (n == 0) { escreva("Alerta do fluxo: Nenhum numero gerencial capturado na porta.\n") }
senao
{
maior = n
menor = n
enquanto (n != 0)
{
soma = soma + n
cont++
se (n > maior) { maior = n }
se (n < menor) { menor = n }
escreva("Proximo Numero para registro: ") leia(n)
}
escreva("Estatistica de Quantidade final: ", cont, " | Soma acumulada da faixa: ", soma)
escreva(" | Media padronizada: ", soma/cont, " | Deteccao de Maior pico: ", maior, " | Deteccao de Menor piso: ", menor, "\n")
}
}
}
Inicializar o maior e o menor piso estatístico equiparando a v[0] ou o primeiro registro isolado protege a estrutura determinando que qualquer flutuação realística seja confrontada puramente com elementos fidedignos colhidos dentro do banco original e validado da rotina.
programa
{
funcao inicio()
{
const inteiro NUMERO_SECRETO = 42
inteiro chute = -1, tent = 0
escreva("Bem-vindo a logica. Adivinhe o parametro numerico isolado entre 1 e 100!\n")
enquanto (chute != NUMERO_SECRETO)
{
escreva("Chute numerico: ") leia(chute)
tent++
se (chute < NUMERO_SECRETO) { escreva("Diretriz: Valor lancado se encontra muito baixo na escala!\n") }
senao se (chute > NUMERO_SECRETO) { escreva("Diretriz: Valor excedeu a fronteira e esta muito alto!\n") }
senao { escreva("Vitoria atestada! ACERTOU na mosca consumindo exatas ", tent, " tentativas vitais!\n") }
}
}
}
O uso de condicionais puramente binárias em cenários amplos simula as origens acadêmicas e fundamentais dos algoritmos de busca mecânica, ensinando as mentes em formação a reduzirem margens numéricas de falha de forma metodológica focando no epicentro invisível do dado cobiçado.
Copyright © 2026 Alyce Suza. Todos os direitos reservados nos termos da Lei 9.610/98. O conteúdo publicado no site https://wiki.suzacybersecurity.com/ é protegido pelas diretrizes brasileiras de propriedade intelectual e a sua autoria é reconhecida desde o momento da criação técnica. O compartilhamento, a reprodução e a distribuição deste material são permitidos e incentivados apenas para finalidades educacionais, acadêmicas ou de consulta técnica, sendo estritamente vedado qualquer tipo de uso comercial. Para que a replicação seja validada e legal, você deve obrigatoriamente atribuir os devidos créditos a Alyce Suza e fornecer um link direto e acessível para a publicação original. A utilização deste material para obter lucro, monetização, venda de materiais ou qualquer vantagem financeira constitui violação de direitos autorais e está sujeita às sanções legais cabíveis, assim como alterações que modifiquem o sentido original das explicações sobre segurança da informação. Para eventuais dúvidas sobre permissões de uso, parcerias ou para reportar replicações indevidas, envie um e-mail para alycesuza@gmail.com. ↩︎