Saltar para o conteúdo
Topos Uranos

Resumo

Esta aula abre a sétima unidade do curso, dedicada ao texto e aos arquivos. Explica para que serve a unidade: ensinar a tratar o texto como dado, com sua codificação real, e a fazer com que um programa leia e escreva arquivos sem quebrar diante de uma entrada malformada; apresenta suas quatro aulas e o fio que as une; lembra o que a unidade dá por sabido, sobretudo que um caractere é, para a máquina, um número, e os vetores, os registros e as funções das unidades 5 e 6; formula o problema que a unidade resolve, o de um programa de aparência correta que perde dados sem avisar, para na primeira linha inesperada e mede mal os nomes com acentos; antecipa que uma letra nem sempre ocupa um byte; e mostra aonde conduz, na unidade 8 e no curso 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. Lembrar a representação dos caracteres como códigos numéricos (aula 2.4) e escrever um código em binário e em hexadecimal.
  3. Antecipar, com um exemplo, que uma letra nem sempre é um byte, e que por isso contar bytes não é contar letras.
  4. Reconhecer o que se espera saber fazer ao terminar a unidade, e distingui-lo do que se aprenderá na unidade seguinte e 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 é uma autoavaliação: não se pontua, e seu único propósito é orientar o estudo. As seis primeiras perguntas verificam o que a unidade dá por sabido: o código de um caractere, a escrita de um número em binário e em hexadecimal, uma máscara de bits, o percurso de um vetor que filtra seus elementos, o que acontece quando uma leitura recebe letras em vez de um número e a definição de um registro. As quatro seguintes tocam, na ordem das aulas, as ideias centrais da unidade: o que devolve uma busca que não encontra nada, o tamanho de uma palavra com acento, a linha vazia que aparece ao misturar duas maneiras de ler e o arquivo que não pôde ser aberto. Ninguém é obrigado a acertar estas quatro ainda, e em algumas delas “ainda não sei” é uma resposta honesta: cada resposta, certa ou não, explica o ponto e nomeia a aula que o trata. As mesmas habilidades voltam a ser medidas no final, 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 escreve std::println("{:d} {:d}", 'A', 'a');?

  2. Pergunta 2De unidades anterioresComo se escreve 233 em binário e em hexadecimal?

  3. Pergunta 3De unidades anterioresQuanto vale 0xB1 & 0xC0?

  4. Pergunta 4De unidades anterioresO que escreve std::vector<int> v{4, 7, 10, 3}; std::vector<int> w{}; for (const int x : v) { if (x % 2 == 0) { w.push_back(x); } } std::println("{}", w);?

  5. Pergunta 5De unidades anterioresDepois de int n{-1}; std::cin >> n;, o usuário digita abc. Quanto vale n e o que acontece com as leituras seguintes?

  6. Pergunta 6De unidades anterioresQual das definições seguintes declara corretamente um registro com um título e um ano?

  7. Pergunta 7Se s é std::string s{"casa azul"};, o que devolve s.find("x")?

  8. Pergunta 8O que escreve std::println("{}", std::string{"año"}.size()); em um programa salvo em UTF-8, como os deste curso?

  9. Pergunta 9Um programa executa int age{}; std::string name{}; std::cin >> age; std::getline(std::cin, name); e o usuário digita 36, pressiona Enter, digita Ana e pressiona Enter. O que fica em name?

  10. Pergunta 10Um programa executa std::ifstream in{"data.txt"}; int x{-1}; in >> x;, mas data.txt não existe na pasta a partir da qual é executado. O que acontece?