Pular para o conteúdo
Cursos

DevClub

LógicaFront-endBack-endMobile

IA Club

IA na prática
Estudar programaçãoEstudar IA

Aula 6 de 6

Projeto final: resolva, rastreie e prove o algoritmo

Construa um programa de metas com entrada, decisão e repetição, documente o teste de mesa e confira casos normais e de borda.

30 minutos · leitura + prática · nível iniciante

Ao terminar esta aula, você vai conseguir

  • Integrar entrada, decisão, repetição e funções
  • Documentar estado numa tabela de teste de mesa
  • Definir critérios objetivos para casos de borda

O projeto final reúne o curso num programa de metas semanais. A entrada é uma lista de horas estudadas e uma meta; o processamento valida, soma e decide; a saída informa total, situação e quanto falta. A entrega inclui pseudocódigo e teste de mesa, porque código rodando em um caso não prova o raciocínio.

O cenário inicial usa [1, 2, 1.5, 2.5] e meta sete. A soma é sete, então a borda deve contar como cumprida. Também testaremos abaixo da meta, lista vazia e valor negativo.

Especifique antes de implementar

Escreva o algoritmo completo:

text
RECEBER HORAS e META
SE HORAS estiver vazia
  INFORMAR erro de registros
SE alguma HORA não for número ou for negativa
  INFORMAR hora inválida
TOTAL recebe 0
PARA CADA HORA em HORAS
  TOTAL recebe TOTAL mais HORA
FIM PARA
SE TOTAL for maior ou igual a META
  DEVOLVER meta cumprida e falta zero
SENÃO
  DEVOLVER meta pendente e META menos TOTAL
FIM SE

Observe a ordem: validação acontece antes da soma. A decisão usa maior ou igual porque atingir exatamente sete satisfaz a meta. O laço altera somente TOTAL e termina quando não há mais itens.

Monte a tabela antes de executar

Para o caso inicial, registre estado depois de cada volta:

volta hora atual total depois
início 0
1 1 1
2 2 3
3 1,5 4,5
4 2,5 7

Depois do laço, 7 >= 7 é verdadeiro. A saída esperada tem total sete, situação “meta cumprida” e falta zero. A primeira divergência entre papel e programa indicará a linha a investigar.

Traduza por responsabilidade

js
function avaliarMeta(horas, meta) {
  if (horas.length === 0) throw new RangeError('Semana sem registros');
  if (!horas.every((hora) => Number.isFinite(hora) && hora >= 0)) {
    throw new TypeError('Hora inválida');
  }

  let total = 0;
  for (const hora of horas) total += hora;

  if (total >= meta) return { total, situacao: 'meta cumprida', falta: 0 };
  return { total, situacao: 'meta pendente', falta: meta - total };
}

console.log(avaliarMeta([1, 2, 1.5, 2.5], 7));

No Node v26.3.0, a saída é { total: 7, situacao: 'meta cumprida', falta: 0 }. O laboratório executa a mesma lógica pura num sandbox do navegador; ele não finge oferecer APIs do Node.

Prove com casos que mudam caminhos

Use pelo menos quatro entradas. [1, 2] com meta cinco deve ficar pendente e faltar dois. [2, 3] com meta cinco deve cumprir exatamente na borda. Lista vazia deve lançar RangeError. [2, -1] deve lançar TypeError antes da soma.

Não altere várias entradas de uma vez durante diagnóstico. Se o caso negativo falha, preserve meta e lista e troque apenas um valor. Mudança controlada associa efeito e causa.

Explique também por que Number.isFinite está na validação. Sem ele, uma string '2' poderia entrar no acumulador e transformar soma em concatenação. O projeto recupera variáveis, tipos, laços e condição na mesma fronteira.

Onde a analogia termina e o projeto começa

Meta semanal parece um placar, mas software de verdade precisa decidir persistência, fuso, edição e identidade. Esses assuntos ficam fora deste projeto para manter o foco na lógica pura. Reduzir escopo não torna a prática falsa; torna o critério verificável.

Sua entrega final precisa conter o pseudocódigo acima reescrito com seus nomes, a tabela de pelo menos três casos, o arquivo executado no Node e as saídas copiadas da execução. Termine explicando qual variável muda em cada volta, qual condição encerra e por que a borda igual à meta é aprovada.

Se você consegue modificar a regra para “cumprida somente acima da meta”, atualizar os casos e prever a nova saída antes de rodar, concluiu o percurso. O próximo passo é escolher uma linguagem como foco sem abandonar o método: pseudocódigo, previsão, execução, diferença e variação. Continue pela trilha de JavaScript para aplicar esse raciocínio em programas maiores.

Laboratório ao vivo

Projeto de metas semanais

Leia o pseudocódigo comentado, execute o programa e troque horas e meta. Registre soma, contador e situação em cada caso testado.

Pronto para testar
Resultado

Pare e pense

Qual é a primeira informação necessária para começar um teste de mesa?

Escolha uma resposta
Missão da aula

Faça sem copiar

Entregue o projeto com pseudocódigo, tabela para três entradas, saída executada e explicação do primeiro estado que mudaria em cada caso.

Fontes para consultar

Terminou a missão?

Marque apenas quando você conseguir explicar o conceito e concluir o desafio. O progresso fica salvo somente neste navegador.

Voltar ao curso e ver seu progresso →