На третьей лекции (17 октября) проходили циклы WHILE и REPEAT, встроенные процедуры INC и DEC, упомянули цикл Дейкстры и инвариант цикла, поговорили о различиях между операторами и выражениями. WHILE как оператор, задача которого — сделать данное условие ложным. Постусловие. Логические преобразования при отрицании условия (раскрытие скобок, перед которыми стоит оператором «не»). Итерация (шаг) цикла. «Подготовка к циклу» как подготовка к первой итерации цикла, условие продолжения цикла, условие окончания цикла, тело цикла, полезное действие, подготовка к следующей итерации цикла, счётчик цикла. Метод половинного деления.
Поговорили также о рекомендации Э. В. Дейкстры писать более слабые условия продолжения цикла. Например, в следующем примере не i < 11, а i # 11:
Код:
i := 1; WHILE i # 11 DO Out.Int(i, 3); INC(i) END
Это для того, чтобы ошибки в программировании приводили к краху программы и, таким образом, были бы видны. И для того, чтобы получались сильные постусловия цикла (в данном примере i = 11 — сильнее, чем i >= 11).
Цитата:
Как работает цикл WHILE
-----------------------
1) Проверяется условие.
2) Если оно истинное, то выполняется тело цикла,
затем переходим на пункт 1.
3) Если условие ложное, то цикл заканчивается
(то есть программа продолжает выполняться
со следующего оператора после всего WHILE).
Задания на практику(Используются только циклы WHILE и REPEAT и только тип INTEGER.)
1) Вывести числа от 1 до 100 с шагом 3: 1, 4, 7…
2) Даны два числа: A и B. Вывести все числа между A и B включительно. Учесть, что A может быть больше, чем B.
3) Даны две последовательности: 1, 4, 7, 10,… и 10, 12, 14,… Выводить их до тех пор, пока первая не перегонит вторую.
4) Старая задача с переводом единиц измерения, но зациклить её (спрашивать в конце: «Повторить?»)
5) Найти все числа Фибоначчи, не превосходящие 1 млн.
Два первых члена последовательности равны единице, а все остальные равны сумме двух предыдущих. 1, 1, 2, 3, 5, 8, 13…
6) Игра «Угадайка» в диапазоне от 1 до 100. Программа не более чем за 7 шагов определяет загаданное пользователем число, задавая вопросы вида: «Ваше число больше чем X?».
7) Игра «Спички». На столе лежит N спичек. Каждый игрок по очереди берёт 1, 2 или 3 спички. Кто взял последнюю — проиграл.
Найти сумму и количество цифр данного натурального числа.
9) Перевернуть заданное натуральное число задом наперёд.
10) Найти три наибольших из введённых положительных чисел. Признак конца ввода — ноль.
11) Вывести в порядке возрастания все трёхзначные числа, сумма цифр которых равна заданному числу S.
12) Имеется последовательность: 1, 2, 2, 3, 3, 3, 4, 4, 4, 4,… Какое число находится на N-ом месте?
13) Вводятся числа. Каждое следующее число не меньше предыдущего. Как только введено число, меньшее предыдущего, ввод прекращается (это число не считаем членом введённой последовательности). Вывести: а) сколько всего чисел введено, б) сколько различных чисел введено, в) каково максимальное количество повторов одного числа.