Приведите пример алгоритма, содержащего ветвление, из следующих областей: а) повседневной жизни; б) литературного произведения; в) любой изучаемой в школе предметной области.
Решение
а) Повседневная жизнь:
- Алгоритм принятия решения о прогулке:
если на улице дождь то взять зонтик иначе не брать зонтик все.
б) Литературное произведение:
- Алгоритм выбора пути у сказочного камня:
если пойти направо то найти сокровища иначе (если пойти налево) то потерять коня все.
в) Предметная область (Русский язык, Правописание приставок):
- Алгоритм правописания приставок НЕ/НИ:
если приставка под ударением то писать НЕ иначе писать НИ все.
Дополните алгоритм из Примера 5 (нахождение наибольшего из трех чисел \( A, B, C \)) таким образом, чтобы он находил наибольшее значение среди четырех величин \( A, B, C \) и \( D \).
Решение
Необходимо добавить дополнительное ветвление для сравнения текущего наибольшего значения (которое после первых трех сравнений хранится, например, в переменной \( Y \)) с четвертой величиной \( D \).
Фрагмент алгоритма после нахождения наибольшего из \( A, B, C \):
- Условие: \( D > Y \)
если \( D > Y \) то \( Y := D \) все
Полный алгоритм:
- Начало.
- Ввод \( A, B, C, D \).
- \( Y := A \).
если \( B > Y \) то \( Y := B \) все.если \( C > Y \) то \( Y := C \) все.если \( D > Y \) то \( Y := D \) все.- Вывод \( Y \).
- Конец.
Создайте алгоритм, который позволит определить, является ли треугольник со сторонами \( a, b, c \) равносторонним.
Решение
Треугольник является равносторонним, если длины всех его трех сторон равны между собой.
Алгоритм:
- Начало.
- Ввод длин сторон \( a, b, c \).
- Условие: \( (a = b) \)
и \( (b = c) \). если \( (a = b) \) и \( (b = c) \) то вывести "Треугольник равносторонний" иначе вывести "Треугольник не равносторонний" все.- Конец.
Создайте алгоритм возведения целого числа \( X \) в квадрат, если это число четное, и в куб, если оно нечетное.
Решение
Чтобы определить четность числа, можно проверить остаток от деления на 2 (\( X \mod 2 \)). Если остаток равен 0, число четное, иначе — нечетное.
Алгоритм:
- Начало.
- Ввод числа \( X \).
- Условие: \( X \mod 2 = 0 \).
если \( X \mod 2 = 0 \) то \( R := X^2 \) иначе \( R := X^3 \) все.- Вывод \( R \).
- Конец.
Какую задачу решает следующий алгоритм (см. блок-схему на стр. 116)? Переменные \( A \) и \( B \) предполагаются целочисленными.
Решение
Алгоритм подсчитывает количество положительных чисел среди двух заданных чисел \( A \) и \( B \). Переменная \( K \) инициализируется нулем (\( K := 0 \)) и увеличивается на 1 при проверке каждого числа, если оно положительное.
- Первое ветвление проверяет условие \( A > 0 \). Если оно истинно, \( K \) увеличивается на 1.
- Второе ветвление проверяет условие \( B > 0 \). Если оно истинно, \( K \) увеличивается на 1.
- В итоге, значение \( K \) будет равно 0 (если оба числа не положительны), 1 (если одно число положительно), или 2 (если оба числа положительны).
Таким образом, алгоритм определяет количество положительных чисел среди заданных величин \( A \) и \( B \).
Составьте блок-схему алгоритма, который определяет количество четных чисел среди трех заданных целых чисел \( A, B, C \).
Решение
Для решения задачи используется счетчик \( K \), инициализированный нулем. Четность каждого числа \( A, B, C \) проверяется по остатку от деления на 2. Если число четное (остаток 0), счетчик увеличивается.
Основные шаги (в виде алгоритма):
- Начало.
- Ввод \( A, B, C \).
- \( K := 0 \).
если \( A \mod 2 = 0 \) то \( K := K + 1 \) все.если \( B \mod 2 = 0 \) то \( K := K + 1 \) все.если \( C \mod 2 = 0 \) то \( K := K + 1 \) все.- Вывод \( K \).
- Конец.
Составьте блок-схему алгоритма, определяющего принадлежность точки \( x \) отрезку \( [a, b] \) (как в Примере 4), используя комбинацию из двух ветвлений (вместо одного составного условия).
Решение
Задача решается вложенными ветвлениями. Сначала проверяем, что \( x \ge a \). Если это условие истинно, переходим к проверке второго условия: \( x \le b \). Только если оба условия истинны, точка принадлежит отрезку.
Основные шаги (в виде алгоритма):
- Начало.
- Ввод \( a, b, x \).
если \( x \ge a \) тоесли \( x \le b \) то вывести "ДА" иначе вывести "НЕТ" все (Ветвление 2)
иначе вывести "НЕТ" все (Ветвление 1)- Конец.
Составьте блок-схему алгоритма для определения правописания приставок, которые оканчиваются на букву «з» или «с» (например, раз-рас-, из-ис-, воз-вос-).
Решение
Выбор конечной буквы приставки зависит от первой буквы корня: «З» пишется, если корень начинается со звонкой согласной или гласной, «С» — если с глухой согласной.
Основные шаги (в виде алгоритма):
- Начало.
- Ввод (первая буква корня).
- Условие: Первая буква корня — глухая согласная?
если первая буква корня — глухая согласная то выбрать приставку на «С» иначе выбрать приставку на «З» все.- Вывод приставки.
- Конец.
Известно, что 31 января 2022 года был понедельник. Какие значения должны быть присвоены переменной \( Y \) в алгоритме (см. фрагмент кода на стр. 117), который определяет день недели для произвольного числа (chislo) января 2022 года?
Решение
Алгоритм использует операцию взятия остатка от деления числа на 7 (\( \text{chislo} \mod 7 \)). Поскольку 31 января (31-й день) — понедельник, необходимо сопоставить остатки от деления на 7 дням недели, чтобы остаток для 31 был равен 1 (Понедельник), и т.д.
\( 31 \mod 7 = 3 \). Если остаток 3 соответствует понедельнику (1), то:
- Остаток 3 соответствует Понедельнику (1).
- Остаток 4 соответствует Вторнику (2).
- Остаток 5 соответствует Среде (3).
- Остаток 6 соответствует Четвергу (4).
- Остаток 0 (для чисел, кратных 7) соответствует Пятнице (5).
- Остаток 1 соответствует Субботе (6).
- Остаток 2 соответствует Воскресенью (7).
Таким образом, переменной \( Y \) должны быть присвоены следующие значения:
если \( \text{chislo} \mod 7 = 3 \) то \( Y := 1 \) (Понедельник)если \( \text{chislo} \mod 7 = 4 \) то \( Y := 2 \) (Вторник)если \( \text{chislo} \mod 7 = 5 \) то \( Y := 3 \) (Среда)если \( \text{chislo} \mod 7 = 6 \) то \( Y := 4 \) (Четверг)если \( \text{chislo} \mod 7 = 0 \) то \( Y := 5 \) (Пятница)если \( \text{chislo} \mod 7 = 1 \) то \( Y := 6 \) (Суббота)если \( \text{chislo} \mod 7 = 2 \) то \( Y := 7 \) (Воскресенье)
Составьте алгоритм, который определяет, какая из двух заданных точек на плоскости, \( M_1(x_1, y_1) \) или \( M_2(x_2, y_2) \), находится ближе к началу координат \( O(0, 0) \).
Решение
Расстояние от точки \( M(x, y) \) до начала координат \( O(0, 0) \) вычисляется по формуле: \( D = \sqrt{x^2 + y^2} \). Поскольку функция квадратного корня является монотонно возрастающей, достаточно сравнить квадраты расстояний: \( D_1^2 = x_1^2 + y_1^2 \) и \( D_2^2 = x_2^2 + y_2^2 \).
Алгоритм:
- Начало.
- Ввод координат \( x_1, y_1, x_2, y_2 \).
- Вычисление квадратов расстояний: \( D_1 := x_1^2 + y_1^2 \); \( D_2 := x_2^2 + y_2^2 \).
- Условие: \( D_1 < D_2 \).
если \( D_1 < D_2 \) то вывести "Точка 1 ближе" иначеесли \( D_2 < D_1 \) то вывести "Точка 2 ближе" иначе вывести "Расстояния равны" все
все.- Конец.
Составьте алгоритм, определяющий, есть ли среди цифр заданного целого трехзначного числа одинаковые цифры.
Решение
Трехзначное число \( N \) можно представить как \( N = 100a + 10b + c \), где \( a, b, c \) — его цифры. Для извлечения цифр можно использовать операции деления и взятия остатка. Одинаковые цифры есть, если \( a=b \) или \( a=c \) или \( b=c \).
Алгоритм:
- Начало.
- Ввод трехзначного числа \( N \).
- Извлечение цифр:
- \( a := N \div 100 \) (сотни)
- \( b := (N \mod 100) \div 10 \) (десятки)
- \( c := N \mod 10 \) (единицы)
- Условие: \( (a = b) \)
или \( (a = c) \) или \( (b = c) \). если \( (a = b) \) или \( (a = c) \) или \( (b = c) \) то вывести "Есть одинаковые цифры" иначе вывести "Все цифры разные" все.- Конец.
Ученик 8 класса, изучивший разветвляющиеся алгоритмы, разработал алгоритм решения линейного уравнения \( ax + b = 0 \). Он поспешил и допустил ошибки при составлении блок-схемы (см. стр. 117)...
Решение
Уравнение \( ax + b = 0 \) имеет различные решения в зависимости от коэффициентов \( a \) и \( b \):
- Случай 1: \( a \ne 0 \). Уравнение имеет единственное решение: \( x = -b/a \).
- Случай 2: \( a = 0 \). Уравнение принимает вид \( 0 \cdot x + b = 0 \), то есть \( b = 0 \).
- Подслучай 2а: \( b \ne 0 \). Уравнение \( 0 \cdot x + b = 0 \) не имеет решений (Корней нет).
- Подслучай 2б: \( b = 0 \). Уравнение \( 0 \cdot x + 0 = 0 \) истинно для любого \( x \) (Любое число).
Анализ ошибок в блок-схеме (слева направо):
- Первое ветвление (Да): Если \( b \ne 0 \) (Да), переход к проверке \( a = 0 \). Это логически неверно. При \( b \ne 0 \) нужно сначала проверить \( a \ne 0 \) или \( a = 0 \). Если \( a \ne 0 \), то \( x = -b/a \). Если \( a = 0 \) и \( b \ne 0 \), то корней нет.
- Первое ветвление (Нет): Если \( b = 0 \) (Нет), переход к проверке \( a = 0 \). Если \( a = 0 \) и \( b = 0 \), то «Любое число». Это верно. Но если \( a \ne 0 \) и \( b = 0 \), то \( x = 0 \), а алгоритм этого не учитывает и просто переходит к «Любое число».
- Вложенное ветвление (Нет): Если \( a \ne 0 \) (Нет), то должно быть решение \( x = -b/a \). Вместо этого алгоритм выводит «Корней нет».
- Вложенное ветвление (Да): Если \( a = 0 \) (Да), то должно быть «Любое число» (если \( b=0 \)) или «Корней нет» (если \( b \ne 0 \)). Алгоритм выводит «Любое число».
Правильный алгоритм (основные шаги):
- Начало.
- Ввод \( a, b \).
- Условие 1: \( a = 0 \).
если \( a = 0 \) то- Условие 2: \( b = 0 \).
если \( b = 0 \) то вывести "Любое число" иначе вывести "Корней нет" все.
иначе \( x := -b/a \); вывести \( x \) все.- Конец.
Проверьте правильность работы алгоритма, предназначенного для решения линейных уравнений вида \( \text{A}x + \text{B} = 0 \), и исправьте ошибки для следующих уравнений: 1) \( 5 \cdot x - 10 = 0 \); 2) \( 12 \cdot x = 0 \); 3) \( 0 \cdot x + 10 = 0 \); 4) \( 0 \cdot x + 0 = 0 \).
Решение
Используем исправленный алгоритм из предыдущего задания. Уравнения представлены в форме \( ax + b = 0 \).
- 1) \( 5 \cdot x - 10 = 0 \): \( a=5 \), \( b=-10 \). \( a \ne 0 \). Решение: \( x = -b/a = -(-10)/5 = 10/5 = 2 \). Верно.
- 2) \( 12 \cdot x = 0 \): \( a=12 \), \( b=0 \). \( a \ne 0 \). Решение: \( x = -b/a = -0/12 = 0 \). Верно.
- 3) \( 0 \cdot x + 10 = 0 \): \( a=0 \), \( b=10 \). \( a = 0 \), \( b \ne 0 \). Решения нет. Верно.
- 4) \( 0 \cdot x + 0 = 0 \): \( a=0 \), \( b=0 \). \( a = 0 \), \( b = 0 \). \( x \) — любое число. Верно.
Вывод: Все примеры корректно обрабатываются исправленным алгоритмом для решения линейного уравнения.
Робот находится в поле 5x5. Рядом с Роботом есть стена длиной в одну клетку. Составьте в среде КуМир (или опишите) алгоритм, который: а) Закрашивает две клетки: клетку, в которой он находится (стартовая позиция), и клетку с другой стороны от стены; б) Закрашивает клетку с другой стороны стены и возвращается назад; в) Закрашивает клетку, в которой он стоит, и «прячется» за стену.
Решение
Предполагаем, что стена находится, например, справа от Робота. Команды: закрасить, вправо, влево, если <условие> то <действие> все.
а) Закрашивает две клетки (текущую и за стеной):
закрасить (красит текущую клетку)если справа стена товправо (передвигается к стене)вправо (переходит через стену)закрасить (красит клетку за стеной)
все.
б) Закрашивает клетку за стеной и возвращается:
если справа стена товправо (к стене)вправо (через стену)закрасить (красит клетку за стеной)влево (обратно к стене)влево (обратно на стартовую позицию)
все.
в) Закрашивает текущую клетку и «прячется» за стену:
закрасить (красит текущую клетку)если справа стена товправо (переходит к стене, т.е. «прячется» за ней)
все.