6.5 KiB
Tomar Decisões: Processador de Notas dos Estudantes
Objetivos de Aprendizagem
Neste exercício, vais praticar os conceitos de tomada de decisão desta lição construindo um programa que processa as notas dos estudantes de diferentes sistemas de avaliação. Vais usar declarações if...else, operadores de comparação e operadores lógicos para determinar quais os estudantes que passam nas suas disciplinas.
O Desafio
Trabalhas numa escola que recentemente se fundiu com outra instituição. Agora, precisas de processar as notas dos estudantes de dois sistemas de avaliação completamente diferentes e determinar quais os estudantes que estão a passar. Esta é uma oportunidade perfeita para praticar a lógica condicional!
Compreender os Sistemas de Avaliação
Primeiro Sistema de Avaliação (Numérico)
- As notas são números de 1 a 5
- Nota de aprovação: 3 e acima (3, 4 ou 5)
- Nota de reprovação: abaixo de 3 (1 ou 2)
Segundo Sistema de Avaliação (Notas por Letras)
- As notas são letras:
A,A-,B,B-,C,C- - Notas de aprovação:
A,A-,B,B-,C,C-(todas as notas listadas são de aprovação) - Nota: Este sistema não inclui notas de reprovação como
DouF
O Teu Trabalho
Dada a seguinte array allStudents que representa todos os estudantes e as suas notas, constrói uma nova array studentsWhoPass contendo todos os estudantes que passam de acordo com os seus respetivos sistemas de avaliação.
let allStudents = [
'A', // Nota com letra - aprovado
'B-', // Nota com letra - aprovado
1, // Nota numérica - reprovado
4, // Nota numérica - aprovado
5, // Nota numérica - aprovado
2 // Nota numérica - reprovado
];
let studentsWhoPass = [];
Abordagem Passo a Passo
- Configura um ciclo para percorrer cada nota na array
allStudents - Verifica o tipo da nota (é um número ou uma string?)
- Aplica as regras apropriadas de cada sistema de avaliação:
- Para números: verifica se a nota >= 3
- Para strings: verifica se é uma das letras válidas de aprovação
- Adiciona as notas de aprovação à array
studentsWhoPass
Técnicas de Código Úteis
Usa estes conceitos de JavaScript da lição:
- operador typeof:
typeof grade === 'number'para verificar se é uma nota numérica - Operadores de comparação:
>=para comparar notas numéricas - Operadores lógicos:
||para verificar múltiplas condições de notas por letras - Declarações if...else: para lidar com os diferentes sistemas de avaliação
- Métodos de array:
.push()para adicionar notas de aprovação à nova array
Resultado Esperado
Quando executares o teu programa, studentsWhoPass deverá conter: ['A', 'B-', 4, 5]
Por que estas notas passam:
'A'e'B-'são notas válidas por letras (todas as notas por letras neste sistema correspondem a aprovação)4e5são notas numéricas >= 31e2reprovam porque são notas numéricas < 3
Testar a Tua Solução
Testa o teu código com diferentes cenários:
// Teste com diferentes combinações de notas
let testGrades1 = ['A-', 3, 'C', 1, 'B'];
let testGrades2 = [5, 'A', 2, 'C-', 4];
// A sua solução deve funcionar com qualquer combinação de notas válidas
Desafios Bónus
Depois de completares o exercício básico, experimenta estas extensões:
- Adicionar validação: Verificar notas inválidas (como números negativos ou letras inválidas)
- Contar estatísticas: Calcular quantos estudantes passam vs. reprovam
- Conversão de notas: Converter todas as notas para um único sistema numérico (A=5, B=4, C=3, etc.)
Rubrica
| Critério | Exemplar (4) | Proficiente (3) | A Desenvolver (2) | Iniciante (1) |
|---|---|---|---|---|
| Funcionalidade | Programa identifica corretamente todas as notas de aprovação de ambos os sistemas | Programa funciona com pequenos problemas ou casos extremos | Programa funciona parcialmente mas com erros lógicos | Programa tem erros significativos ou não funciona |
| Estrutura de Código | Código limpo, bem organizado com lógica adequada de if...else | Boa estrutura com declarações condicionais apropriadas | Estrutura aceitável com algumas falhas organizacionais | Estrutura pobre, difícil de seguir a lógica |
| Uso de Conceitos | Usa eficazmente operadores de comparação, operadores lógicos e declarações condicionais | Bom uso dos conceitos da lição com pequenas lacunas | Algum uso dos conceitos da lição mas faltam elementos chave | Uso limitado dos conceitos da lição |
| Resolução de Problemas | Demonstra clara compreensão do problema e abordagem elegante para a solução | Boa abordagem de resolução de problemas com lógica sólida | Resolução adequada do problema com alguma confusão | Abordagem pouco clara, não demonstra compreensão |
Diretrizes para Submissão
- Testa o teu código rigorosamente com os exemplos fornecidos
- Adiciona comentários explicando a tua lógica, especialmente para as declarações condicionais
- Verifica que a saída corresponde aos resultados esperados:
['A', 'B-', 4, 5] - Considera casos extremos como arrays vazias ou tipos de dados inesperados
💡 Dica Profissional: Começa simples! Faz primeiro funcionar a funcionalidade básica e depois adiciona funcionalidades mais sofisticadas. Lembra-te, o objetivo é praticar a lógica de tomada de decisões com as ferramentas que aprendeste nesta lição.
Aviso Legal: Este documento foi traduzido utilizando o serviço de tradução por IA Co-op Translator. Embora nos esforcemos para assegurar a precisão, por favor, tenha em conta que traduções automáticas podem conter erros ou imprecisões. O documento original na sua língua nativa deve ser considerado a fonte oficial. Para informações cruciais, recomenda-se a tradução profissional humana. Não nos responsabilizamos por quaisquer mal-entendidos ou interpretações erradas decorrentes da utilização desta tradução.