Ficha 04 · Padrões de construção
- Reconhecer padrões algorítmicos
- Aplicar contador, acumulador, máximo, mínimo, sentinela
- Combinar padrões num mesmo algoritmo
- Garantir validação de dados de entrada
Parte I · Reconhecimento
Exercício 1 · Identificar o padrão dominante
Para cada problema, identifique o(s) padrão(ões) principais (Contador, Acumulador-soma, Acumulador-produto, Máximo, Mínimo, Sentinela, Validação):
a) Somar todas as notas de uma turma. ___
b) Pedir uma idade e repetir até o valor estar entre 0 e 120. ___
c) Calcular o factorial de N. ___
d) Contar quantos alunos têm positiva. ___
e) Encontrar o aluno mais alto. ___
f) Ler temperaturas até o utilizador inserir −1000 e calcular a média. ___
a) Acumulador-soma b) Validação (REPETIR-ATÉ até intervalo válido) c) Acumulador-produto (inicializa a 1, multiplica por i) d) Contador (incrementa só se condição for satisfeita) e) Máximo f) Sentinela + Acumulador-soma + Contador (para a média)
Parte II · Aplicação directa
Exercício 2 · Acumulador-produto · factorial
Escreva um algoritmo que leia um inteiro positivo n e calcule o seu factorial (n! = 1 × 2 × 3 × … × n).
INICIO
LER n
SE n < 0 ENTÃO
ESCREVER "n tem de ser ≥ 0"
SAIR
FIM SE
fact ← 1
PARA i DE 1 ATÉ n FAÇA
fact ← fact * i
FIM PARA
ESCREVER n, "! = ", fact
FIM
Pontos críticos:
- Inicialização fact ← 1 (não 0! — seria sempre 0).
- Para n = 0, o ciclo não executa e o resultado fica 1 (0! = 1 por definição), o que é correcto.
- Para n < 0, devolvemos erro.
Exercício 3 · Máximo simples
Escreva um algoritmo que leia 5 números reais e indique o maior.
INICIO
LER primeiro
maior ← primeiro
PARA i DE 2 ATÉ 5 FAÇA
LER valor
SE valor > maior ENTÃO
maior ← valor
FIM SE
FIM PARA
ESCREVER "Maior: ", maior
FIM
Estratégia: assumir o primeiro como máximo provisório e percorrer apenas os 4 restantes (do 2.º ao 5.º). Evita a complicação de inicializar com −∞.
Exercício 4 · Mínimo e máximo simultâneos
Adapte o exercício anterior para ler n números (em vez de 5 fixos) e determinar simultaneamente o máximo e o mínimo numa só passagem.
INICIO
LER n
SE n ≤ 0 ENTÃO
ESCREVER "n tem de ser positivo"
SAIR
FIM SE
LER primeiro
maior ← primeiro
menor ← primeiro
PARA i DE 2 ATÉ n FAÇA
LER valor
SE valor > maior ENTÃO maior ← valor FIM SE
SE valor < menor ENTÃO menor ← valor FIM SE
FIM PARA
ESCREVER "Maior: ", maior, " | Menor: ", menor
FIM
Eficiência: uma só passagem pelos dados, em vez de duas separadas (uma para o máximo, outra para o mínimo).
Parte III · Sentinela e validação
Exercício 5 · Média com sentinela
Escreva um algoritmo que leia notas (valores reais) até aparecer −1 e calcule a média das notas lidas (sem contar o −1). Trate o caso de não ter sido lida nenhuma nota.
INICIO
soma ← 0
contador ← 0
ESCREVER "Insira notas (-1 para terminar):"
LER nota
ENQUANTO nota ≠ -1 FAÇA
soma ← soma + nota
contador ← contador + 1
LER nota
FIM ENQUANTO
SE contador > 0 ENTÃO
media ← soma / contador
ESCREVER "Média (", contador, " notas): ", media
SENÃO
ESCREVER "Nenhuma nota foi lida"
FIM SE
FIM
Padrão: ler antes do ciclo + ler dentro do ciclo. Protecção contra divisão por zero.
Exercício 6 · Validação de entrada
Escreva um algoritmo que peça uma nota entre 0 e 20 e que insista até o utilizador inserir um valor válido. Mostre uma mensagem de erro a cada tentativa inválida.
INICIO
REPETIR
ESCREVER "Insira a nota (0-20):"
LER nota
SE nota < 0 OU nota > 20 ENTÃO
ESCREVER "Valor fora do intervalo permitido. Tente outra vez."
FIM SE
ATÉ nota >= 0 E nota <= 20
ESCREVER "Nota registada: ", nota
FIM
Estrutura REPETIR-ATÉ é a escolha natural para validação: executa pelo menos uma vez e só sai quando a condição de validade é satisfeita.
Parte IV · Combinação de padrões
Exercício 7 · Estatísticas numa só passagem
Escreva um algoritmo que leia n notas (com n lido no início) e calcule:
- a soma;
- a média;
- o máximo;
- o mínimo;
- o número de notas positivas (≥ 10).
Todos os cálculos devem ser feitos numa só passagem pelos dados.
INICIO
LER n
SE n ≤ 0 ENTÃO
ESCREVER "n tem de ser positivo"
SAIR
FIM SE
LER primeira
soma ← primeira
maior ← primeira
menor ← primeira
positivas ← 0
SE primeira >= 10 ENTÃO positivas ← 1 FIM SE
PARA i DE 2 ATÉ n FAÇA
LER nota
soma ← soma + nota
SE nota > maior ENTÃO maior ← nota FIM SE
SE nota < menor ENTÃO menor ← nota FIM SE
SE nota >= 10 ENTÃO positivas ← positivas + 1 FIM SE
FIM PARA
media ← soma / n
ESCREVER "Soma: ", soma
ESCREVER "Média: ", media
ESCREVER "Máximo: ", maior
ESCREVER "Mínimo: ", menor
ESCREVER "Notas positivas: ", positivas, " em ", n
FIM
Padrões combinados: acumulador-soma, máximo, mínimo, contador condicional — todos no mesmo ciclo. Este é o tipo de algoritmo que se escreve com fluência quando se reconhecem os padrões.
Exercício 8 · Loja simples
Numa loja, o caixa lê continuamente o preço de cada artigo. Quando o cliente termina, o operador insere o preço 0 para indicar fim de compras.
Escreva um algoritmo que:
- Leia preços até aparecer
0; - Calcule o total a pagar;
- Mostre o número de artigos, o preço médio e o artigo mais caro.
Aplicar 10 % de desconto se o total exceder 100 €.
INICIO
total ← 0
contador ← 0
maior ← 0
ESCREVER "Insira preços (0 para terminar):"
LER preco
ENQUANTO preco ≠ 0 FAÇA
total ← total + preco
contador ← contador + 1
SE preco > maior ENTÃO maior ← preco FIM SE
LER preco
FIM ENQUANTO
SE contador = 0 ENTÃO
ESCREVER "Sem artigos"
SAIR
FIM SE
media ← total / contador
SE total > 100 ENTÃO
desconto ← total * 0.10
total ← total - desconto
ESCREVER "Desconto de 10% aplicado: -", desconto
FIM SE
ESCREVER "Artigos: ", contador
ESCREVER "Mais caro: ", maior
ESCREVER "Preço médio: ", media
ESCREVER "Total a pagar: ", total
FIM
Discussão: combina sentinela (0), acumulador-soma, contador, máximo, e selecção condicional para o desconto. Note-se que o desconto é aplicado após o ciclo, com base no total acumulado.