Saltar al contenido
Topos Uranos

Resumen

Esta clase abre la séptima unidad del curso, dedicada al texto y a los archivos. Explica para qué sirve la unidad: enseñar a tratar el texto como dato, con su codificación real, y a hacer que un programa lea y escriba archivos sin romperse ante una entrada mal formada; presenta sus cuatro clases y el hilo que las une; recuerda lo que la unidad da por sabido, sobre todo que un carácter es, para la máquina, un número, y los vectores, los registros y las funciones de las unidades 5 y 6; formula el problema que la unidad resuelve, el de un programa de apariencia correcta que pierde datos sin avisar, se detiene en la primera línea inesperada y mide mal los nombres con tildes; anticipa que una letra no siempre ocupa un byte; y muestra adónde conduce, en la unidad 8 y en el curso Programación en C++ II.

Objetivos de aprendizaje

  1. Describir la secuencia de contenidos de la unidad y explicar qué aporta cada clase a la siguiente.
  2. Recordar la representación de los caracteres como códigos numéricos (clase 2.4) y escribir un código en binario y en hexadecimal.
  3. Anticipar, con un ejemplo, que una letra no siempre es un byte, y que por eso contar bytes no es contar letras.
  4. Reconocer qué se espera saber hacer al terminar la unidad, y distinguirlo de lo que se aprenderá en la unidad siguiente y en Programación en C++ II.

Evaluación de entrada

Antes de recorrer la unidad conviene medir el punto de partida. Esta evaluación es una autoevaluación: no se califica, y su único propósito es orientar el estudio. Las seis primeras preguntas comprueban lo que la unidad da por sabido: el código de un carácter, la escritura de un número en binario y en hexadecimal, una máscara de bits, el recorrido de un vector que filtra sus elementos, lo que ocurre cuando una lectura recibe letras en lugar de un número y la definición de un registro. Las cuatro siguientes tocan, en el orden de las clases, las ideas centrales de la unidad: lo que devuelve una búsqueda que no encuentra nada, el tamaño de una palabra con tilde, la línea vacía que aparece al mezclar dos maneras de leer y el archivo que no se pudo abrir. Nadie está obligado a acertar estas cuatro todavía, y en algunas «todavía no lo sé» es una respuesta honesta: cada respuesta, acertada o no, explica el punto y nombra la clase que lo trata. Las mismas destrezas se vuelven a medir al final, en la clase de síntesis.

Evaluación de entrada

Antes de comenzar la unidad, mide tu punto de partida. Es una autoevaluación breve: no se califica y su resultado se guarda solo en tu navegador.

  1. Pregunta 1De unidades anteriores¿Qué escribe std::println("{:d} {:d}", 'A', 'a');?

  2. Pregunta 2De unidades anteriores¿Cómo se escribe 233 en binario y en hexadecimal?

  3. Pregunta 3De unidades anteriores¿Cuánto vale 0xB1 & 0xC0?

  4. Pregunta 4De unidades anteriores¿Qué escribe 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. Pregunta 5De unidades anterioresTras int n{-1}; std::cin >> n;, el usuario escribe abc. ¿Qué vale n y qué ocurre con las lecturas siguientes?

  6. Pregunta 6De unidades anteriores¿Cuál de las definiciones siguientes declara correctamente un registro con un título y un año?

  7. Pregunta 7Si s es std::string s{"casa azul"};, ¿qué devuelve s.find("x")?

  8. Pregunta 8¿Qué escribe std::println("{}", std::string{"año"}.size()); en un programa guardado en UTF-8, como los de este curso?

  9. Pregunta 9Un programa ejecuta int age{}; std::string name{}; std::cin >> age; std::getline(std::cin, name); y el usuario escribe 36, pulsa Intro, escribe Ana y pulsa Intro. ¿Qué queda en name?

  10. Pregunta 10Un programa ejecuta std::ifstream in{"data.txt"}; int x{-1}; in >> x;, pero data.txt no existe en la carpeta desde la que se ejecuta. ¿Qué ocurre?