Saltar al contenido
Topos Uranos

Resumen

Esta clase abre la cuarta unidad del curso, dedicada al control de flujo. Explica para qué sirve la unidad: enseñar a gobernar el orden en que se ejecutan las sentencias de un programa, con decisiones y con bucles, y a razonar sobre su corrección, es decir, a asegurar que cada caso se atienda, que cada bucle haga lo que debe y que termine; presenta sus cuatro clases y el hilo que las une; recuerda lo que la unidad da por sabido, sobre todo las condiciones compuestas de la unidad 3; formula el problema que la unidad resuelve, el de un programa que calcula el máximo común divisor con un número fijo de pasos y que, según los datos, responde mal o se detiene en una división por cero; anticipa el invariante como la herramienta con que la unidad justificará sus bucles; y muestra adónde conduce, en las unidades siguientes 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 las condiciones compuestas de la unidad 3 (las conectivas, el cortocircuito y la negación por las leyes de De Morgan) y repasarlas si hace falta.
  3. Anticipar, con un ejemplo, el invariante como herramienta de razonamiento: una relación entre las variables que una repetición conserva y que, al terminar, da el resultado.
  4. Reconocer qué se espera saber hacer al terminar la unidad, y distinguirlo de lo que se aprenderá en las unidades siguientes.

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 cuatro primeras preguntas comprueban lo que la unidad da por sabido: la negación de una condición compuesta, el cortocircuito, la traza de una repetición de la clase 1.1 y el límite de un int. Las siete siguientes tocan, en el orden de las clases, las ideas centrales de la unidad, y varias parten de la matemática escolar: el máximo común divisor, la notación de sumatoria, la terminación de un procedimiento. Nadie está obligado a acertarlas 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¿Cuál es la negación de la condición 1 <= n && n <= 10?

  2. Pregunta 2De unidades anterioresCon int d{0}; y int n{5};, ¿qué ocurre al evaluar d != 0 && n / d > 2?

  3. Pregunta 3De unidades anterioresLa división por restas sucesivas de la clase 1.1 empieza con q=0q = 0 y r=ar = a, y repite «mientras r≥br \geq b, restar bb de rr y sumar 1 a qq». Con a=20a = 20 y b=5b = 5, ¿cuántas veces se ejecuta el cuerpo de la repetición?

  4. Pregunta 4De unidades anterioresCon un int de 32 bits, ¿qué garantiza la norma sobre el valor de 46341 * 46341?

  5. Pregunta 5Un programa contiene la cadena de decisiones if (score >= 50), que escribe «Aprobado»; else if (score >= 90), que escribe «Excelente»; y else, que escribe «Reprobado». ¿Qué escribe con score igual a 95?

  6. Pregunta 6¿Cuál de las expresiones siguientes denota la suma 1+2+⋯+n1 + 2 + \cdots + n?

  7. Pregunta 7Con int total{0};, ¿qué escribe std::println("{}", total); después de for (int i{0}; i < 5; ++i) { total += i; }?

  8. Pregunta 8En la división por restas sucesivas (q=0q = 0, r=ar = a; mientras r≥br \geq b, rr pasa a r−br - b y qq a q+1q + 1), ¿qué relación entre las variables vale cada vez que se evalúa la condición?

  9. Pregunta 9Un procedimiento parte de un entero nn cualquiera (positivo, nulo o negativo) y repite «mientras n>0n > 0, restar 2 de nn». ¿Termina para todo nn?

  10. Pregunta 10¿Cuál es el máximo común divisor de 84 y 36?

  11. Pregunta 11Para decidir si 101 es primo probando divisores, ¿hasta qué divisor basta llegar?