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

Ficha 06 · Avaliação integrada · teste-tipo

Mobiliza todos os conteúdos da UC · simula a ficha de avaliação sumativa
Versão · Aluno
Tempo · 90 minutos
Cotação · 200 pontos
Aluno(a)
Turma
Data
Objectivos da ficha

Instruções gerais. Esta ficha de avaliação tem 5 grupos, num total de 200 pontos. Responda às questões pela ordem que preferir, mas identifique sempre a numeração. O tempo recomendado é de 90 minutos. Pode usar a folha em branco em anexo para rascunhos.

Grupo I · Conceitos (40 pontos)

Exercício 1 · Verdadeiro ou Falso (10 pts)

Indique a veracidade (V/F) e justifique cada afirmação em uma frase curta:

1.1 Um algoritmo deve sempre produzir o mesmo resultado para a mesma entrada. ___ (2 pts) 1.2 O pseudocódigo é uma linguagem de programação. ___ (2 pts) 1.3 O símbolo do losango no fluxograma representa um cálculo. ___ (2 pts) 1.4 Inicializar um acumulador-produto a zero é correcto. ___ (2 pts) 1.5 A divisão 7 MOD 32. ___ (2 pts)

1.1 V — propriedade do determinismo. 1.2 F — não é executável por uma máquina; é uma notação semi-formal. 1.3 F — o losango representa uma decisão (pergunta com resposta binária). Cálculo é o rectângulo. 1.4 F — qualquer produto subsequente daria 0. Deve ser inicializado a 1. 1.5 F7 MOD 3 = 1 (resto da divisão). 7 DIV 3 = 2 (parte inteira).

Exercício 2 · Correspondência (15 pts)

Faça corresponder cada padrão à inicialização típica:

Padrão Inicialização
A. Contador 1. Valor especial fora do domínio
B. Acumulador-soma 2. Primeiro elemento da sequência
C. Acumulador-produto 3. ← 0
D. Máximo / Mínimo 4. ← 0
E. Sentinela 5. ← 1

A — , B — , C — , D — , E — ___

A — 3 (Contador inicia a 0) B — 4 (Soma inicia a 0) C — 5 (Produto inicia a 1) D — 2 (Máximo/mínimo iniciam com o primeiro elemento) E — 1 (Sentinela é um valor especial)

Exercício 3 · Definir conceitos (15 pts)

Defina, em uma ou duas frases, cada um dos seguintes conceitos:

a) Algoritmo

b) Estrutura repetitiva pré-teste

c) Ciclo infinito

a) Algoritmo: sequência finita, ordenada e não-ambígua de instruções que resolve um problema ou executa uma tarefa em tempo finito.

b) Estrutura repetitiva pré-teste: ciclo que avalia a condição antes de executar o bloco (ENQUANTO…FAÇA). Se a condição for inicialmente falsa, o bloco nunca é executado.

c) Ciclo infinito: iteração cuja condição de paragem nunca se torna falsa, fazendo com que o algoritmo nunca termine, violando a propriedade da finitude.

Grupo II · Avaliar expressões (20 pontos)

Exercício 4 · (20 pts)

Considere a = 8, b = 3, c = "Aulify". Indique o resultado de cada expressão:

# Expressão Resultado
4.1 a + b * 2
4.2 a DIV b
4.3 a MOD b
4.4 a / b (real)
4.5 (a + b) > 10 E (a * b) > 20
4.6 NÃO (a < b)
4.7 b ^ 3
4.8 (a = 8) OU (c = "Outro")
# Expressão Resultado
4.1 a + b * 2 14 (8 + 6)
4.2 a DIV b 2
4.3 a MOD b 2
4.4 a / b 2.666…
4.5 (a + b) > 10 E (a * b) > 20 V (11>10 e 24>20)
4.6 NÃO (a < b) V (a≥b é verdadeiro)
4.7 b ^ 3 27
4.8 (a = 8) OU (c = "Outro") V (basta a primeira ser V)

Grupo III · Trace e depuração (40 pontos)

Exercício 5 · Trace table (20 pts)

Considere o algoritmo:

LER n
total ← 0
i ← 0
ENQUANTO i < n FAÇA
   i ← i + 1
   SE i MOD 2 = 0 ENTÃO
      total ← total + i
   FIM SE
FIM ENQUANTO
ESCREVER total

Para n = 6, complete a tabela:

Iteração i (após incremento) i MOD 2 = 0 total
1 1 F 0
2 2 V
3 3
4 4
5 5
6 6

Saída: ____

O que faz este algoritmo? ________

Iteração i Cond total
1 1 F 0
2 2 V 2
3 3 F 2
4 4 V 6
5 5 F 6
6 6 V 12

Saída: 12

Função: soma os números pares entre 1 e n. Para n = 6: 2 + 4 + 6 = 12.

Exercício 6 · Encontrar o erro (20 pts)

O algoritmo seguinte é suposto contar quantas notas de uma turma são positivas (≥ 10). Identifique dois erros e proponha a versão corrigida.

LER n
positivas ← 1
PARA i DE 1 ATÉ n FAÇA
   LER nota
   SE nota > 10 ENTÃO
      positivas ← positivas + 1
   FIM SE
FIM PARA
ESCREVER positivas

Erros:

  1. Inicialização errada. positivas ← 1 deveria ser positivas ← 0 — caso contrário a contagem fica sempre 1 a mais do que devia.

  2. Condição errada. nota > 10 exclui as notas iguais a 10, que são positivas. Deve ser nota >= 10.

Versão corrigida:

LER n
positivas ← 0
PARA i DE 1 ATÉ n FAÇA
   LER nota
   SE nota >= 10 ENTÃO
      positivas ← positivas + 1
   FIM SE
FIM PARA
ESCREVER positivas

Grupo IV · Construir algoritmos (60 pontos)

Exercício 7 · Algoritmo com selecção (20 pts)

Escreva um algoritmo em pseudocódigo que leia o preço de uma compra e a categoria do cliente ("Premium" ou "Regular") e calcule o valor final a pagar, aplicando:

INICIO
   LER preco
   LER categoria

   SE categoria = "Premium" ENTÃO
      desconto ← preco * 0.15
   SENÃO SE categoria = "Regular" E preco > 50 ENTÃO
      desconto ← preco * 0.05
   SENÃO
      desconto ← 0
   FIM SE

   total ← preco - desconto
   ESCREVER "Desconto: ", desconto
   ESCREVER "Total a pagar: ", total
FIM

Aceitável: estrutura SE encadeada com três casos. Validação adicional (categoria ser uma das duas opções) seria um plus.

Exercício 8 · Algoritmo com ciclo e padrão (20 pts)

Escreva um algoritmo que leia n temperaturas (reais) e calcule e mostre:

INICIO
   LER n
   SE n ≤ 0 ENTÃO
      ESCREVER "n deve ser positivo"
      SAIR
   FIM SE

   LER primeira
   soma ← primeira
   maxima ← primeira
   frios ← 0
   SE primeira < 10 ENTÃO frios ← 1 FIM SE

   PARA i DE 2 ATÉ n FAÇA
      LER temp
      soma ← soma + temp
      SE temp > maxima ENTÃO maxima ← temp FIM SE
      SE temp < 10 ENTÃO frios ← frios + 1 FIM SE
   FIM PARA

   media ← soma / n

   ESCREVER "Média: ", media
   ESCREVER "Máxima: ", maxima
   ESCREVER "Dias frios: ", frios, " em ", n
FIM

Padrões combinados: acumulador-soma, máximo, contador condicional — todos numa só passagem.

Exercício 9 · Algoritmo com sentinela (20 pts)

Numa portagem, regista-se o valor pago por cada veículo. Quando termina o turno, o operador insere −1 como sentinela.

Escreva um algoritmo que:

  1. Leia os valores até aparecer −1;
  2. Indique o número de veículos;
  3. Indique a receita total;
  4. Indique a receita média por veículo (trate o caso de zero veículos).
INICIO
   contador  0
   total  0

   ESCREVER "Insira valor (-1 para terminar):"
   LER valor

   ENQUANTO valor  -1 FAÇA
      contador  contador + 1
      total  total + valor
      LER valor
   FIM ENQUANTO

   ESCREVER "Veículos: ", contador
   ESCREVER "Receita total: ", total
   SE contador > 0 ENTÃO
      media  total / contador
      ESCREVER "Receita média: ", media
   SENÃO
      ESCREVER "Sem veículos registados"
   FIM SE
FIM

Grupo V · Representação (40 pontos)

Exercício 10 · Conversão (20 pts)

Considere o pseudocódigo:

INICIO
   LER x
   SE x > 0 ENTÃO
      ESCREVER "Positivo"
   SENÃO SE x < 0 ENTÃO
      ESCREVER "Negativo"
   SENÃO
      ESCREVER "Zero"
   FIM SE
FIM

Desenhe o fluxograma equivalente no espaço abaixo.

Descrição do fluxograma: - Terminal «INÍCIO» → seta para baixo. - Paralelogramo «LER x» → seta. - Losango «x > 0 ?»: - V → Paralelogramo «ESCREVER 'Positivo'» → converge para o fim. - F → Losango «x < 0 ?»: - V → Paralelogramo «ESCREVER 'Negativo'». - F → Paralelogramo «ESCREVER 'Zero'». - Todas as três saídas convergem para uma seta única. - Terminal «FIM».

Exercício 11 · Justificar escolha de representação (10 pts)

Numa equipa de desenvolvimento, vai produzir documentação técnica de um algoritmo com 80 instruções. Justifique, em 3-4 linhas, se usaria fluxograma ou pseudocódigo e porquê.

Pseudocódigo. Para 80 instruções, um fluxograma torna-se rapidamente ilegível: setas que se cruzam, símbolos pequenos, dificuldade em ver o fluxo global. O pseudocódigo permite indentação clara, é mais compacto, e é fácil de versionar em sistemas como Git. Reservaria fluxogramas para sub-secções específicas onde o aspecto visual realmente ajude (por exemplo, o ramo principal de decisão).

Exercício 12 · Conversão para programação real (10 pts)

Indique como traduziria as seguintes instruções de pseudocódigo para Python:

Pseudocódigo Python
LER nome
ESCREVER "Olá, ", nome
idade ← 17
SE idade >= 18 ENTÃO
PARA i DE 1 ATÉ 10 FAÇA
Pseudocódigo Python
LER nome nome = input("Nome: ")
ESCREVER "Olá, ", nome print(f"Olá, {nome}")
idade ← 17 idade = 17
SE idade >= 18 ENTÃO if idade >= 18:
PARA i DE 1 ATÉ 10 FAÇA for i in range(1, 11):

Notas: Python usa = para atribuição (não ), indentação para delimitar blocos (não palavras-chave FIM SE), e range(1, 11) exclui o limite superior (daí o 11).


FIM DA FICHA · BOM TRABALHO