Partilhar: WhatsApp
aulify
UC UC00245 · T. Desenv. Software, T. Multimédia, T. Inform. Gestão

Ficha 04 · Padrões de construção

Contador · acumulador · máximo / mínimo · sentinela · validação
Versão · Aluno
Tempo · 75 minutos
Cotação · 100 pontos
Aluno(a)
Turma
Data
Objectivos da ficha

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:

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:

  1. Leia preços até aparecer 0;
  2. Calcule o total a pagar;
  3. 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.