Mini-Projeto · Algoritmo de orçamento para uma loja de informática
Contexto
A loja de informática "Tecnorquídea" precisa de um algoritmo para o balcão de assistência técnica: o operador introduz os serviços pedidos por um cliente (diagnóstico, reparações, peças) e o algoritmo calcula o orçamento final, aplicando descontos a clientes habituais e sinalizando pedidos inválidos. Foste contratado/a para desenhar este algoritmo de raiz, seguindo o ciclo completo desta UC: definir o problema, planear as etapas, estruturar em pseudocódigo, desenhar em fluxograma, e testar e depurar.
Trabalhas individualmente ou a pares. A entrega é um dossiê técnico: não vais escrever um programa numa linguagem real, mas sim produzir e documentar todas as etapas do desenvolvimento do algoritmo.
Requisitos
Funcionais
- Definição do problema por escrito: dados de entrada, resultado esperado e restrições.
- Decomposição do problema em, no mínimo, 5 subproblemas ordenados.
- Algoritmo em pseudocódigo que:
- leia o número de serviços pedidos e, para cada um, o seu preço;
- valide que cada preço é positivo, insistindo até o operador introduzir um valor válido;
- calcule o total e o número de serviços;
- aplique um desconto de 10% se o total ultrapassar 100 € e o cliente for habitual, ou de 5% se ultrapassar 100 € e não for habitual (percentagens, preços e limite fictícios, só para o exercício);
- identifique o serviço mais caro do orçamento;
- mostre um resumo final claro (total de serviços, valor antes e depois do desconto, serviço mais caro).
- Fluxograma equivalente a, pelo menos, dois excertos representativos do algoritmo (por exemplo, a validação de preço e o cálculo do desconto).
- Pelo menos 3 casos de teste, com a respetiva trace table, incluindo um caso-limite (total exatamente igual a 100 €) e um caso de validação (preço inválido).
Não-funcionais
- Nomes de variáveis descritivos e indentação consistente no pseudocódigo.
- Mensagens de entrada e saída claras e legíveis.
- Documento organizado por etapas, na mesma ordem do ciclo de desenvolvimento.
Fases
Fase 1 · Definir o problema (2h) Escrever, por palavras próprias, os dados de entrada, o resultado esperado e as restrições do problema do orçamento.
Fase 2 · Planear as etapas (2h) Decompor o problema em subproblemas e ordená-los logicamente. Esboçar, para cada subproblema, a estrutura lógica mais adequada.
Fase 3 · Estruturar em pseudocódigo (4h) Escrever o algoritmo completo: leitura e validação dos serviços, acumulação do total, cálculo do desconto e identificação do serviço mais caro.
Fase 4 · Desenhar em fluxograma (2h) Desenhar, numa aplicação de desenho de algoritmos (draw.io, Lucidchart ou equivalente), o fluxograma de pelo menos dois excertos do algoritmo.
Fase 5 · Testar e depurar (3h) Definir casos de teste (incluindo casos-limite), construir as trace tables, executar o algoritmo à mão e corrigir os erros encontrados.
Fase 6 · Otimizar (1h) Rever o algoritmo final: eliminar redundâncias, confirmar que todos os cálculos são feitos numa só passagem sempre que possível.
Fase 7 · Apresentação (1h) Apresentar o algoritmo à turma, explicando as decisões tomadas em cada etapa e os erros encontrados e corrigidos durante o teste.
Critérios de avaliação
| Critério | Peso |
|---|---|
| Definição do problema e planeamento | 15% |
| Pseudocódigo correto e completo | 30% |
| Fluxograma coerente com o pseudocódigo | 15% |
| Testes, trace tables e depuração | 25% |
| Documentação e apresentação | 15% |
Erros comuns
- Esquecer de validar o preço, aceitando valores negativos ou zero.
- Inicializar
maiora um valor que pode nunca ser batido (por exemplo, um número muito alto), em vez de o atualizar corretamente ao longo do ciclo. - Trocar
>por>=no limite dos 100 €, dando desconto a um total de exatamente 100 €. - Não distinguir
total(antes do desconto) detotalFinal(depois do desconto) nas mensagens finais. - Testar só um caso "que corre bem" e não incluir um caso-limite (total igual a 100 €, preço inválido).
Bónus (opcional)
- Acrescentar um segundo nível de desconto: 15% para clientes habituais com total superior a 200 €.
- Calcular também o preço médio dos serviços pedidos.
- Desenhar o fluxograma completo do algoritmo, não apenas os dois excertos pedidos.
Reflexão
No dossiê final, responde: em que fase do desenvolvimento (definição, planeamento, pseudocódigo, fluxograma ou teste) encontraste o erro mais difícil de detetar, e porquê? E: se tivesses de acrescentar um novo tipo de desconto amanhã, que parte do algoritmo mudarias, e porque é que o planeamento inicial facilita ou dificulta essa mudança?