8 класс Информатика ГДЗ учебник Босова Параграф 3.6. Алгоритмическая конструкция «повторение», Циклические алгоритмы. Глава 3. Основы алгоритмизации
Стр.133-136.
Задача 1. Примеры циклических алгоритмов
а) Повседневная жизнь:
1) Взять грязную тарелку;
2) намылить губку;
3) вымыть тарелку;
4) ополоснуть и поставить сушиться;
5) если грязная посуда ещё есть, вернуться к шагу 1, иначе закончить работу.
б) Литературный пример:
1) Старуха велит старику передать новое желание;
2) старик идёт к морю;
3) обращается к рыбке и просит исполнить желание старухи;
4) возвращается домой и сообщает результат;
5) если старуха опять недовольна, то повторить шаги 1–4, иначе цикл заканчивается.
в) Школьный предмет:
1) Инициализировать сумму: S := 0;
2) взять очередное число из списка;
3) прибавить его к сумме: S := S + число;
4) если числа в списке ещё есть, вернуться к шагу 2, иначе вывести значение S и закончить алгоритм.
Задача 2. Обход прямоугольной области Роботом
Условие. Робот находится внутри прямоугольника, вокруг которого по контуру проходит сплошная стена.
Требуется написать программу в среде «КуМир», чтобы Робот обошёл область по периметру, двигаясь вдоль стены,
и закрасил все четыре угловые клетки.
Решение (один из вариантов программы).
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
алг нач // предполагаем, что Робот стоит у стены и стена находится справа закрасить повтор 3 раз пока справа свободно вперед все закрасить направо все пока справа свободно вперед все кон |
Задача 3. Сколько лет пруд сможет «кормить» рыбаков?
Условие. В пруде имеется A тонн рыбы. Каждый год запас увеличивается на 15%, после чего из пруда вылавливают B тонн рыбы. Минимально допустимый запас – C тонн (если в пруде останется меньше C тонн, популяция уже не восстановится).
Нужно определить, сколько полных лет можно придерживаться такого плана вылова.
Идея решения. Будем «проигрывать» по годам изменение запаса рыбы:
каждый год сначала прибавляем 15% к текущему количеству, затем вычитаем B тонн.
Если после вылова в пруде остаётся не меньше C тонн, считаем год успешным и переходим к следующему.
Как только запас станет меньше C тонн, цикл заканчиваем.
Алгоритм (псевдокод).
|
1 2 3 4 5 6 7 8 9 10 11 12 13 |
ввод A, B, C years := 0 пока A >= C сделать A := A * 1.15 // годовой прирост 15% если A - B < C то выход из цикла // следующий вылов нарушит минимальный запас все A := A - B // вылов рыбы по плану years := years + 1 // очередной год плана выполнен конец пока вывод years |
По этому описанию можно построить блок-схему цикла, в которой переменная years хранит количество лет, в течение которых план вылова выполняется без нарушения нижнего порога запаса C.
Задача 4. Сколько первых членов прогрессии даёт сумму 324?
Условие. Рассматривается числовая последовательность 5, 9, 13, 17, … (арифметическая прогрессия с первым членом 5 и разностью 4).
Нужно определить, сколько первых членов этой последовательности нужно сложить, чтобы получить сумму 324.
Идея решения. Будем по очереди прибавлять элементы прогрессии к сумме:
стартуем с первого числа, затем каждый следующий член увеличиваем на 4.
Одновременно считаем, сколько чисел уже прибавили. Как только сумма станет равна 324, цикл можно завершить.
Алгоритм (псевдокод).
|
1 2 3 4 5 6 7 8 9 10 11 |
sum := 0 // текущая сумма term := 5 // текущий член последовательности count := 0 // количество сложенных членов пока sum < 324 сделать sum := sum + term // прибавляем очередной член count := count + 1 // увеличиваем счётчик term := term + 4 // получаем следующий член прогрессии конец пока вывод count |
Задача 5. Подсчёт количества цифр в натуральном числе
Задача. Нужно определить, сколько цифр содержит любое натуральное число.
Идея решения. Пока число не станет равным нулю, будем делить его на 10 (отбрасывая последнюю цифру) и увеличивать счётчик. Количество выполненных делений и будет количеством цифр.
Алгоритм (псевдокод).
|
1 2 3 4 5 6 7 8 9 |
ввод N count := 0 пока N > 0 сделать N := N div 10 // убрать последнюю цифру count := count + 1 конец пока вывод count |
Задача 6. За сколько лет вклад удвоится при 5 % годовых?
Задача. В банк внесено 10 000 рублей под 5 % годовых.
Нужно составить алгоритм, который определяет, через сколько полных лет сумма на счёте станет не меньше 20 000 рублей.
Идея решения. Будем из года в год увеличивать текущую сумму на 5 % и одновременно считать количество прошедших лет. Когда вклад достигнет или превысит значение, вдвое большее начального, цикл можно завершить.
Алгоритм (псевдокод).
|
1 2 3 4 5 6 7 8 9 |
sum := 10000 // начальный вклад years := 0 // счётчик лет пока sum < 20000 сделать sum := sum + sum * 0.05 // прибавляем 5 % к текущей сумме years := years + 1 // увеличиваем количество лет конец пока вывод years |
Задача 7. За сколько времени колония амёб вырастет до X штук?
Задача. В начале имеется одна амёба. Каждые 3 часа каждая амёба делится надвое.
Нужно составить алгоритм, который по заданному числу X определяет, через сколько часов количество амёб станет не меньше X.
Идея решения. Будем по шагам моделировать деление: на каждом шаге количество амёб умножаем на 2, а время увеличиваем на 3 часа. Как только достигнем или превысим X, остановимся.
Алгоритм (псевдокод).
|
1 2 3 4 5 6 7 8 9 10 |
ввод X n := 1 // текущее число амёб t := 0 // прошедшее время в часах пока n < X сделать n := n * 2 // амёбы делятся пополам t := t + 3 // проходит 3 часа конец пока вывод t |
Задача 8. Значения переменных после цикла
Условие. Дан алгоритм с переменными n и m.
Сначала присваиваются значения n := 1, m := 15.
Далее многократно выполняются команды:
m := m - 2;n := n * 2;
После этого проверяется условие m < 6.
Если условие истинно, алгоритм выводит значения n и m и завершается.
Если условие ложно, переход осуществляется к повторному выполнению команд
m := m - 2 и n := n * 2.
Решение.
| Шаг | m | n | Проверка условия m < 6 |
|---|---|---|---|
| Начало | 15 | 1 | — |
| 1 | 13 | 2 | 13 < 6 — нет |
| 2 | 11 | 4 | 11 < 6 — нет |
| 3 | 9 | 8 | 9 < 6 — нет |
| 4 | 7 | 16 | 7 < 6 — нет |
| 5 | 5 | 32 | 5 < 6 — да, цикл заканчивается |
Ответ: после выполнения алгоритма n = 32, m = 5.
Задача 9. Перемещения исполнителя «Чертёжник»
Условие. Исполнитель «Чертёжник» находится в произвольной точке координатной плоскости. Он выполняет алгоритмы перемещения по векторам.
а) После выполнения следующего алгоритма нужно определить, в какой точке (относительно начальной) окажется Чертёжник:
|
1 2 3 4 5 6 7 8 |
алг нач нц 6 раз сместиться на вектор (4, 6) сместиться на вектор (-2, -4) кц сместиться на вектор (-12, -12) кон |
Решение.
- За один повтор цикла суммарный сдвиг:
(4, 6) + (-2, -4) = (2, 2). - Цикл выполняется 6 раз, значит общий сдвиг от цикла:
6 · (2, 2) = (12, 12). - После цикла выполняется ещё одно перемещение:
(12, 12) + (-12, -12) = (0, 0).
Ответ к пункту а): Чертёжник вернётся в исходную точку.
б) В другом алгоритме известно, что после выполнения всех команд Чертёжник снова оказывается в исходной точке. Нужно подобрать значения параметров a и b:
|
1 2 3 4 5 6 7 8 9 10 |
алг нач нц 7 раз сместиться на вектор (0, 2) сместиться на вектор (a, 0) сместиться на вектор (0, b) сместиться на вектор (-1, 0) кц сместиться на вектор (-7, 7) кон |
Решение.
- Суммарный сдвиг за один проход цикла:
(0, 2) + (a, 0) + (0, b) + (-1, 0) =
(a - 1,b + 2). - Цикл выполняется 7 раз, значит общий сдвиг от цикла:
7 · (a — 1, b + 2) = (7(a — 1), 7(b + 2)). - После цикла выполняется дополнительное перемещение:
(7(a — 1), 7(b + 2)) + (-7, 7) =
(7(a — 2), 7(b + 3)). - Чтобы вернуться в начальную точку, нужно, чтобы оба координатных сдвига были равны нулю:
- 7(a — 2) = 0 ⇒ a — 2 = 0 ⇒ a = 2;
- 7(b + 3) = 0 ⇒ b + 3 = 0 ⇒ b = -3.
Ответ к пункту б): a = 2, b = -3.
Задача 10. Полосы на координатной сетке
Условие (переформулировка).
Нужно написать в среде КуМир программы для исполнителя «Чертёжник», которые с использованием цикла нц-раз-кц, команды сместиться в точку и переменных рисуют на сетке:
- а) прямоугольник, полностью заполненный горизонтальными отрезками;
- б) наклонный четырёхугольник, заполненный параллельными диагональными отрезками.
Решение (пример алгоритма для рисунка а).
|
1 2 3 4 5 6 7 8 9 10 11 |
алг Полосы_горизонтальные нач цел i поднять перо нц i от 0 до 9 // рисуем 10 горизонтальных полос сместиться в точку (0, i) опустить перо сместиться в точку (10, i) // длина полосы по оси X поднять перо кц кон |
Решение (пример алгоритма для рисунка б).
|
1 2 3 4 5 6 7 8 9 10 11 |
алг Полосы_наклонные нач цел i поднять перо нц i от 0 до 9 // рисуем 10 наклонных отрезков сместиться в точку (i, i + 2) // начало очередной диагонали опустить перо сместиться в точку (i + 8, i) // конец диагонали (параллельны друг другу) поднять перо кц кон |
Координаты (количество полос и их длина) можно изменять, чтобы подогнать рисунок под конкретную сетку в задании.
Задача 11. Выход Робота из коридорного лабиринта
Робот находится в начальной клетке лабиринта (отмечена ромбом) и должен выйти из лабиринта через правый выход. Требуется записать циклическую программу, в которой используется цикл нц 4 раз – кц, а внутри цикла расположены ровно 7 команд движения.
Пример решения (одна из возможных программ):
|
1 2 3 4 5 6 7 8 9 10 11 12 13 |
алг нач вверх нц 4 раз пока справа свободно вперед все вниз вправо вправо вверх кц кон |
В этой программе тело цикла содержит 7 команд. После четырёх повторений циклического фрагмента Робот последовательно обходит все препятствия и оказывается у правого выхода из лабиринта.
Задача 12. Лабиринт из вложенных квадратов (Черепаха)
Черепаха должна нарисовать на экране «лабиринт» из нескольких вложенных квадратов, как на рисунке. Напишите программу, используя цикл, чтобы квадраты постепенно увеличивались.
Решение (пример программы для рисунка б):
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 |
алг нач длина := 40 // сторона самого маленького квадрата шаг := 15 // на сколько увеличиваем сторону каждый раз нц 6 раз // рисуем 6 квадратов // рисуем квадрат со стороной длина нц 4 раз вперед(длина) направо(90) кц // переносим Черепаху к началу следующего, большего квадрата поднятьперо влево(90) назад(шаг) вправо(90) назад(шаг) опуститьперо длина := длина + 2 * шаг // следующая сторона больше кц кон |
13. Черепаха и вложенные циклы
Для исполнителя Черепаха задан алгоритм с вложенными циклами: внешний цикл несколько раз повторяет выполнение внутреннего цикла, в котором Черепаха рисует квадрат, а затем поворачивается на некоторый угол.
- Запустите программу и определите, какую фигуру строит Черепаха.
- Поэкспериментируйте с алгоритмом:
- измените длину отрезка в команде
вперёд; - измените количество повторений во внутреннем и внешнем циклах;
- замените угол поворота после квадрата (сейчас он равен 36°) на другой.
- измените длину отрезка в команде
- Опишите, как меняется изображение при каждой из модификаций.
14. Решение задачи «Произведение без умножения»
Идея. Чтобы найти произведение двух натуральных чисел x и y без операции умножения, можно сложить число x само с собой y раз.
Алгоритм (псевдокод):
|
1 2 3 4 5 6 7 8 9 |
ввод x, y z := 0 // здесь будет произведение пока y > 0 z := z + x // прибавляем x y := y - 1 // уменьшаем счётчик сложений конец пока вывод z |
После завершения цикла в переменной z будет находиться значение произведения x · y.
15. Решение задачи «Рост населения города»
Алгоритм (словесное описание):
- Задать начальное количество жителей:
N := 40000. - Задать счётчик лет:
k := 0. - Пока
k < 3, выполнять:N := N * 1.05(увеличить население на 5 %);k := k + 1.
- Вывести полученное значение
N— ожидаемое население через 3 года.
Таблица значений переменных:
| Шаг (год) | k | N (число жителей) |
|---|---|---|
| Начало | 0 | 40000 |
| После 1-го года | 1 | 40000 · 1,05 = 42000 |
| После 2-го года | 2 | 42000 · 1,05 = 44100 |
| После 3-го года | 3 | 44100 · 1,05 = 46305 |
Ответ: предполагаемое население города через 3 года — 46 305 человек.
16. Рост числа бактерий
Задача. В начале опыта есть одна бактерия. Каждую минуту каждая бактерия делится на две.
Составьте алгоритм, который вычисляет количество бактерий через 10 минут, и заполните таблицу значений переменных.
Алгоритм (словесно):
- Установить
t := 0(время в минутах). - Установить
n := 1(число бактерий в начале). - Пока
t < 10, выполнять:n := n * 2(каждая бактерия делится на две);t := t + 1.
- Вывести значение
n— количество бактерий через 10 минут.
Таблица значений переменных:
| Минута t | Количество бактерий n |
|---|---|
| 0 | 1 |
| 1 | 2 |
| 2 | 4 |
| 3 | 8 |
| 4 | 16 |
| 5 | 32 |
| 6 | 64 |
| 7 | 128 |
| 8 | 256 |
| 9 | 512 |
| 10 | 1024 |
Ответ: через 10 минут будет 1024 бактерии.
17. Обсуждение свойств алгоритмов
Вопрос: верны ли следующие утверждения?
- Короткий алгоритм может описывать длинную последовательность действий.
- Если алгоритм короткий, то он обязательно выполняется быстро.
Ответ и рассуждение:
а) Да, короткий алгоритм действительно может задавать очень длинную последовательность действий.
Это возможно благодаря использованию циклов. Например:
- Команда «повтори 1000 раз шаг вперёд» — это одна строка алгоритма, но она задаёт тысячу действий.
- В математике формула геометрической прогрессии описывает бесконечную последовательность несколькими символами.
б) Нет, длина алгоритма и скорость его выполнения не всегда совпадают.
Даже короткий алгоритм может выполняться очень долго. Например:
- Алгоритм «увеличивай число на 1, пока оно не станет равным миллиону» состоит всего из двух строк, но выполнится очень медленно.
- Поиск решения методом перебора может быть записан кратко, но занимать часы или годы.
Вывод: краткость записи не означает высокой скорости, а циклы позволяют задавать большие объёмы действий очень компактно.
| § 3.4 | § 3.5 | § 3.6 | § 4.1 | § 4.2 |
| Тестовые задания для самоконтроля — Глава 3 | ||||