Перейти к содержимому
Topos Uranos

Краткое содержание

Этот урок открывает четвёртый раздел курса, посвящённый управлению потоком. Он объясняет, для чего нужен раздел: научить управлять порядком, в котором выполняются инструкции программы, с помощью ветвлений и циклов, и рассуждать об их правильности, то есть добиваться того, чтобы каждый случай был обработан, чтобы каждый цикл делал то, что должен, и чтобы он завершался; представляет четыре урока раздела и связывающую их нить; напоминает то, что раздел считает известным, прежде всего составные условия из раздела 3; формулирует задачу, которую решает раздел, задачу программы, которая вычисляет наибольший общий делитель за фиксированное число шагов и в зависимости от данных отвечает неверно или останавливается на делении на нуль; заранее представляет инвариант как инструмент, которым раздел будет обосновывать свои циклы; и показывает, куда он ведёт, в следующих разделах и в курсе «Программирование на C++ II».

Цели обучения

  1. Описывать последовательность содержания раздела и объяснять, что каждый урок даёт тому, который идёт за ним.
  2. Вспомнить составные условия из раздела 3 (логические связки, вычисление по короткой схеме и отрицание по законам де Моргана) и при необходимости повторить их.
  3. Заранее, на примере, представить инвариант как инструмент рассуждения: соотношение между переменными, которое повторение сохраняет и которое по окончании даёт результат.
  4. Понимать, что ожидается уметь по окончании раздела, и отличать это от того, чему предстоит научиться в следующих разделах.

Входная проверка

Прежде чем проходить раздел, полезно определить исходный уровень. Эта проверка является самопроверкой: она не оценивается, и её единственная цель состоит в том, чтобы направить занятия. Первые четыре вопроса касаются того, что раздел считает известным: отрицания составного условия, вычисления по короткой схеме, трассировки повторения из урока 1.1 и предела int. Следующие семь в порядке уроков касаются центральных идей раздела, и некоторые из них исходят из школьной математики: наибольшего общего делителя, записи суммы со знаком суммирования, завершения процедуры. Никто не обязан пока отвечать на них верно, а в некоторых из них «пока не знаю» является честным ответом: каждый ответ, верный или нет, объясняет суть дела и называет урок, где она разбирается. Те же умения измеряются снова в конце, в уроке итогов.

Входная проверка

Перед началом раздела оцени свою отправную точку. Это короткая самопроверка: она не оценивается, а результат хранится только в твоём браузере.

  1. Вопрос 1Из предыдущих разделовКаково отрицание условия 1 <= n && n <= 10?

  2. Вопрос 2Из предыдущих разделовПри int d{0}; и int n{5}; что происходит при вычислении d != 0 && n / d > 2?

  3. Вопрос 3Из предыдущих разделовДеление последовательными вычитаниями из урока 1.1 начинается с q=0q = 0 и r=ar = a и повторяет «пока r≥br \geq b, вычесть bb из rr и прибавить 1 к qq». Сколько раз при a=20a = 20 и b=5b = 5 выполняется тело повторения?

  4. Вопрос 4Из предыдущих разделовЧто гарантирует стандарт о значении 46341 * 46341 для 32-битного int?

  5. Вопрос 5Программа содержит цепочку ветвлений: if (score >= 50), которая выводит «Зачтено»; else if (score >= 90), которая выводит «Отлично»; и else, которая выводит «Не зачтено». Что она выводит, если score равно 95?

  6. Вопрос 6Какое из выражений ниже обозначает сумму 1+2+⋯+n1 + 2 + \cdots + n?

  7. Вопрос 7При int total{0}; что выводит std::println("{}", total); после for (int i{0}; i < 5; ++i) { total += i; }?

  8. Вопрос 8Какое соотношение между переменными выполняется всякий раз, когда вычисляется условие, в делении последовательными вычитаниями (q=0q = 0, r=ar = a; пока r≥br \geq b, rr переходит в r−br - b, а qq в q+1q + 1)?

  9. Вопрос 9Процедура начинает с произвольного целого nn (положительного, нулевого или отрицательного) и повторяет «пока n>0n > 0, вычесть 2 из nn». Завершается ли она для всякого nn?

  10. Вопрос 10Каков наибольший общий делитель чисел 84 и 36?

  11. Вопрос 11До какого делителя достаточно дойти, чтобы, перебирая делители, решить, простое ли число 101?