Saltar para o conteúdo
Topos Uranos

Resumo

Esta aula abre a oitava e última unidade do curso, dedicada aos programas maiores. Explica seu propósito: organizar, verificar e depurar programas que já não cabem em um arquivo nem na cabeça; apresenta suas três aulas e o fio que as une, que fecha o círculo aberto na primeira aula do curso (especificar, construir, verificar); recorda o que a unidade dá por sabido, que é o curso inteiro; formula o problema que a unidade resolve, o de um programa de um só arquivo que funciona com os dados com que foi testado e cala um defeito na borda de sua especificação; antecipa a diferença entre testar e demonstrar; e mostra aonde conduz, no projeto final e em Programação em C++ II.

Objetivos de aprendizagem

  1. Descrever a sequência de conteúdos da unidade e explicar o que cada aula traz à seguinte.
  2. Recordar, com um exemplo, a diferença entre declarar e definir uma função, o contrato que a especifica e as etapas (compilação e ligação) que convertem vários arquivos em um programa.
  3. Antecipar, com um exemplo, a diferença entre testar um programa com alguns casos e demonstrar que ele é correto para todos os admissíveis.
  4. Reconhecer o que se espera saber fazer ao terminar a unidade e o curso, e distingui-lo do que se aprenderá em Programação em C++ II.

Avaliação de entrada

Antes de percorrer a unidade, convém medir o ponto de partida. Esta avaliação não é pontuada: orienta o estudo. As sete primeiras perguntas verificam o que a unidade dá por sabido (declarar e definir, a pré-condição, o contrato de uma função da unidade 6, as mensagens do ligador, os casos de uma busca binária, a tabela de rastreamento (teste de mesa) e a leitura fora de um vetor); as três seguintes tocam, na ordem das aulas, as ideias centrais da unidade, e nelas “ainda não sei” é uma resposta honesta. Cada resposta explica o ponto e nomeia a aula que o trata; as mesmas habilidades voltam a ser medidas na aula de síntese.

Avaliação de entrada

Antes de começar a unidade, meça seu ponto de partida. É uma autoavaliação breve: não recebe nota e seu resultado fica guardado apenas no seu navegador.

  1. Pergunta 1De unidades anterioresO que faz a linha int gcd(int a, int b); escrita antes de main?

  2. Pergunta 2De unidades anterioresA função toBase(n, base) tem a pré-condição “n >= 0 e 2 <= base <= 10”. Quem deve garanti-la?

  3. Pergunta 3De unidades anterioresA função binarySearch(values, target) da aula 6.4 devolve uma posição de target, ou values.size() se ele não está. Qual é sua pré-condição?

  4. Pergunta 4De unidades anterioresUm programa compila sem erros e, ao construir o executável, aparece undefined reference to `tetrahedral(int)'. Que etapa falhou?

  5. Pergunta 5De unidades anterioresQual destes conjuntos de casos põe melhor à prova uma busca binária?

  6. Pergunta 6De unidades anterioresQuanto valem a e b depois de int a{0}; int b{1}; for (int i{0}; i < 4; ++i) { const int t{a + b}; a = b; b = t; }?

  7. Pergunta 7De unidades anterioresPor que std::vector<int> v{1, 2}; std::println("{}", v[2]); para com as opções do curso e, compilado só com -O2, sem os detectores (sanitizers), pode escrever um número qualquer?

  8. Pergunta 8Um cabeçalho com guardas de inclusão define (não apenas declara) double scale(double x), sem inline, e o incluem main.cpp e report.cpp. O que acontece ao construir o programa?

  9. Pergunta 9Uma função passa em quinhentos testes automáticos escolhidos com cuidado. O que se pode afirmar?

  10. Pergunta 10Um ponto de interrupção está na linha total += k;, dentro de um laço, e o programa para ali pela terceira vez. O que indica a linha destacada?