На Горох
Информатика, 8 класс

§ 20. Программирование циклических алгоритмов

"Информатика", Поляков К.Ю., Еремин Е.А.

Объяснение темы В оглавлении: § 20. Программирование циклических алгоритмов

Кратко о теме

Циклический алгоритм повторяет одни и те же действия, пока не выполнено условие завершения или не закончится заданное число повторений. Циклы помогают обрабатывать числа, находить суммы и выполнять другие повторяющиеся операции без копирования одинаковых команд. Важно правильно выбрать вид цикла, задать начальные значения и проследить, чтобы управляющая переменная менялась так, чтобы цикл когда-нибудь завершился.

Объяснение темы

Текст подготовлен нейронной сетью по теме параграфа и не заменяет учебник — важные факты и формулировки сверяйте с ним.

Определения и обозначения

Циклический алгоритм — алгоритм, в котором одни и те же действия многократно повторяются. Он нужен, когда приходится выполнять похожие шаги для разных чисел или до наступления некоторого события. Вместо того чтобы записывать одну и ту же команду много раз, её помещают в цикл.

Тело цикла — последовательность команд, выполняемая при каждом повторении цикла. Например, в задаче о выводе квадратов чисел телом будут вычисление квадрата и его вывод. Выделение тела помогает понять, какие именно действия должны повторяться, а какие выполняются один раз до или после цикла.

Цикл с предусловием — цикл, в котором условие проверяется до выполнения тела, поэтому тело может не выполниться ни разу. Если при первой проверке условие ложно, программа сразу пропускает цикл. Такой порядок нужен, когда повторять действия следует только при заранее проверенном условии.

Цикл с постусловием — цикл, в котором условие проверяется после выполнения тела, поэтому тело выполняется хотя бы один раз. Сначала выполняется действие, а затем решается, повторить ли его ещё раз. Это удобно, если сначала необходимо получить или обработать данные и только после этого проверить, можно ли остановиться.

Как это устроено

У цикла есть начальная подготовка, условие продолжения, тело и изменение управляющей переменной — значения, от которого зависит ход повторений. Сначала подготовка задаёт стартовые значения, например i := 1 и сумма := 0. Затем проверяется условие, выполняется тело и меняется управляющая переменная; благодаря изменению программа может прийти к завершению. Если переменная не меняется или меняется не туда, условие может оставаться истинным всегда.

Цикл с параметром for организует повторения для заранее заданного диапазона или числа шагов. Например, если нужно пройти числа от 1 до N, параметр i последовательно получает нужные значения, а тело обрабатывает каждое из них. Направление изменения должно соответствовать границам: при движении от меньшего числа к большему параметр увеличивают, а при движении к меньшему — уменьшают. Иначе диапазон может не достигаться или цикл поведёт себя не так, как задумано.

В цикле с предусловием while программа сначала проверяет условие продолжения. Если оно истинно, выполняется тело, после чего управление возвращается к проверке; если ложно — цикл заканчивается. Такая схема подходит, когда заранее неизвестно, сколько раз повторится действие, например при чтении данных до появления нуля. Начальные значения необходимо задать до проверки, иначе программа может начать с неправильного состояния.

Цикл с постусловием repeat...until сначала выполняет тело, а затем проверяет условие остановки. Если условие после until ложно, тело повторяется; когда оно становится истинным, цикл завершается. Поэтому тело обязательно срабатывает хотя бы раз — это главное отличие от while. Такой цикл полезен, если проверка зависит от результата действия, например от только что введённого числа.

Вид цикла выбирают по тому, что известно о задаче. Если известны количество повторений или диапазон, обычно удобен for; если нужно проверять условие до каждого шага, подходит while. Когда действие обязательно должно состояться хотя бы раз, выбирают repeat...until. Перед записью кода полезно определить, где проверяется условие, что именно меняется и какое событие должно остановить повторения.

Виды циклов и условия их применения

ХарактеристикаЦикл с параметром forЦикл с предусловием whileЦикл с постусловием repeat...until
Когда использоватьИзвестны диапазон или число повторенийПовторять, пока истинно условие до телаДействие нужно выполнить хотя бы один раз
Момент проверки условияПеред очередным значением параметраДо выполнения телаПосле выполнения тела
Минимальное число выполнений телаЗависит от заданного диапазона01
Что управляет повторениемЗначения параметра и границы диапазонаИстинность условия продолженияЛожность условия остановки после until
Необходимость изменения управляющей переменнойОбычно параметр изменяется автоматическиНужно предусмотреть изменение в телеНужно изменить данные, от которых зависит проверка
Типичная ошибка при составленииНеверно задать границы или направлениеЗабыть изменение переменной и получить бесконечный циклПерепутать условие остановки

Сначала выясни, известен ли диапазон повторений, а затем посмотри, когда задача позволяет проверить условие. Проверь минимальное число выполнений тела: это помогает отличить while от repeat...until. Наконец, убедись, что параметр или данные меняются так, чтобы цикл завершился.

Разбор задач

Квадраты чисел от 1 до N

Нужно вывести квадраты всех целых чисел от 1 до N включительно. Число повторений и границы известны, поэтому удобно использовать цикл с параметром. В каждом повторении вычисляется i² для очередного значения i.

  1. Ввести N и начать цикл с i = 1.
  2. Для каждого i от 1 до N вычислить квадрат i × i.
  3. Вывести полученное значение, затем перейти к следующему i.
  4. После обработки i = N цикл закончится, потому что диапазон исчерпан.

Например, при N = 3 программа выведет 1, 4 и 9. Важно проверить, что верхняя граница включена: если закончить на N − 1, квадрат последнего числа пропадёт. Ответ: программа выводит квадраты чисел 1, 2, ..., N.

Ввод чисел до нуля и сумма

Нужно вводить натуральные числа, пока пользователь не введёт ноль, и найти их сумму. Ноль служит признаком окончания и не должен прибавляться к сумме. Удобно применить while: сначала прочитать число, затем продолжать цикл, пока оно не равно нулю.

  1. Задать сумму равной нулю и ввести первое число n.
  2. Пока n ≠ 0, прибавлять n к сумме.
  3. В конце тела прочитать следующее число, чтобы условие проверило уже новое значение.
  4. Когда введён ноль, выйти из цикла и вывести сумму.

Например, для ввода 5, 2, 0 сумма равна 7. Первое число вводят до цикла, иначе while не сможет проверить условие перед первым шагом. Ответ: сумма всех введённых до нуля натуральных чисел.

Количество цифр и сумма цифр числа

Нужно найти количество цифр и сумму цифр натурального числа. Последнюю цифру можно получить остатком от деления на 10, а затем отбросить её целочисленным делением на 10. Повторяя эти действия, мы постепенно обрабатываем все разряды числа.

  1. Сохранить исходное число; установить количество цифр и сумму равными нулю.
  2. Пока n больше нуля, получить последнюю цифру: d = n mod 10.
  3. Увеличить количество на 1, прибавить d к сумме и заменить n на n div 10.
  4. Когда цифр в n не останется, вывести количество и сумму.

Для числа 352 последовательно получаются цифры 2, 5 и 3, поэтому сумма равна 10, а количество — 3. Проверяй, что число уменьшается после каждого шага: деление на 10 убирает уже обработанную цифру. Ответ: количество цифр и сумма цифр исходного числа.

Типичные ошибки

Управляющая переменная забыта или изменяется неправильно, поэтому условие продолжения остаётся истинным и цикл становится бесконечным. Такое часто происходит в while и repeat...until, когда команда изменения случайно пропущена или направлена не к границе. Проверь, меняется ли значение при каждом повторении и приближает ли оно цикл к остановке.

Условие продолжения записано наоборот: например, цикл повторяется при достижении признака окончания. Ошибку допускают, когда путают условие работы цикла и условие его остановки, особенно при переходе от while к repeat...until. Подставь в условие обычное промежуточное значение и признак завершения, чтобы проверить, когда оно должно быть истинным.

Неверные границы цикла приводят к тому, что первое или последнее значение пропускается либо обрабатывается лишний раз. Причина обычно в путанице между строгим сравнением и сравнением с равенством. Проследи вручную первое и последнее повторения и проверь, входит ли конечное значение в нужный диапазон.

Переменная-накопитель не получила начального значения или меняется не в том месте тела. Тогда сумма может начинаться с неопределённого числа либо часть значений учитывается несколько раз. До цикла задай накопителю нейтральное начальное значение, например 0 для суммы, а сложение выполняй ровно один раз для каждого нужного элемента.

Связь с другими темами

Для составления циклов нужны логические выражения, условный оператор, переменные и операции сравнения: с их помощью записывают условия продолжения или остановки. Целочисленное деление и остаток позволяют, например, обрабатывать цифры числа. Циклы применяются при обработке последовательностей, поиске элементов и вычислении сумм. Дальше эти приёмы используются в задачах с массивами, строками, вложенными циклами и более сложными алгоритмами.

Что запомнить

  • Цикл повторяет тело, пока выполняется условие продолжения.
  • Цикл с предусловием может не выполнить тело ни разу.
  • Цикл с постусловием выполняет тело хотя бы один раз.
  • Цикл с параметром удобен, когда число повторений или диапазон заранее известны.
  • У каждого цикла должно быть условие завершения.
  • Управляющая переменная должна изменяться так, чтобы цикл завершился.
  • Перед циклом нужно правильно задать начальные значения.

Частые вопросы по теме

Как выбрать между циклами for, while и repeat...until?

Выбирай for, если заранее известны число повторений или диапазон значений. while подходит, если условие нужно проверить до выполнения тела и повторения зависят от этого условия. repeat...until используй, когда тело должно выполниться хотя бы один раз, например для первого ввода данных.

Почему цикл while может не выполниться ни разу?

В while условие проверяется до входа в тело. Если оно сразу ложно, программа пропускает тело и переходит к следующей команде. Поэтому перед циклом нужно задать переменные так, чтобы условие отражало нужное начало работы.

Когда нужно использовать цикл repeat...until?

Он нужен, когда действия необходимо выполнить хотя бы один раз, а продолжение зависит от результата этих действий. Например, программа сначала запрашивает число, а затем проверяет, не введён ли ноль. Цикл заканчивается, когда условие после until становится истинным.

Как избежать бесконечного цикла?

Проверь, что условие может стать ложным для while или истинным для repeat...until. Для этого управляющая переменная должна изменяться внутри цикла в правильном направлении, а вводимые данные должны обновляться. Полезно вручную проследить несколько повторений и увидеть, что приближает алгоритм к остановке.

Почему результат программы отличается на единицу от ожидаемого?

Часто причина в том, что неверно выбраны начальное или конечное значения либо перепутаны знаки сравнения. Уточни, должны ли обрабатываться обе границы диапазона, и проверь первое и последнее повторения вручную. Для цикла с параметром отдельно проверь, сколько значений попадает в заданный диапазон.

Спросить по теме параграфа

§ 20. Программирование циклических алгоритмов

Эта же тема в других учебниках

Учебник

Оглавление →
Предмет
Информатика
Класс
8 класс
Учебник
"Информатика", Поляков К.Ю., Еремин Е.А.