четверг, 4 декабря 2025 г.

Что такое вспомогательные алгоритмы и зачем они нужны? Киман. ЧГ

 

 

Что такое вспомогательные алгоритмы и зачем они нужны?

 

Представьте, что вы печете торт. Вы не готовите все тесто, крем и украшения в одной большой миске, перемешивая все вместе. Вместо этого вы действуете по шагам: сначала готовите бисквит (это один рецепт), потом крем (второй рецепт), а затем собираете торт.


В программировании тоже так. Часто одну и ту же операцию нужно выполнить много раз. Например, нарисовать несколько одинаковых треугольников для елки. Вместо того чтобы каждый раз писать одни и те же команды, можно создать «рецепт» для рисования одного треугольника. Этот «рецепт» и есть вспомогательный алгоритм (или функция).

 

Что это дает?

 

1.  Не повторяться. Написал один раз «рецепт» треугольника — и используй его много раз, просто вызывая по имени.

2.  Делить сложную задачу на части.  Большую программу, например, для рисования целого пейзажа (дом, деревья), можно поручить нескольким людям. Один пишет алгоритм для дома, другой — для дерева. Потом все части собираются в одну программу, как детали конструктора.

3.  Упрощать код. Программа становится короче, понятнее и ее легче изменять. Захотел нарисовать другую елку — не переделываешь всю программу, а просто меняешь значения на входе и начинается рисование.



Как работать с этим?

Работа с функцией (вспомогательным алгоритмом) делится на два этапа:

Создание
Использование

 

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




Создание функции (Проектируем "кухонную машину")

Все функции можно разделить на два основных вида:

 

1.  Функции без параметров всегда выполняет одно и то же действие, как заведенный механизм. Результат её работы всегда неизменен.

2.  Функции с параметрами, в отличие от первой, принимает на вход специальные настройки — параметры. Эти параметры влияют на её работу, позволяя каждый раз получать измененный результат, не меняя сам код функции.

 

Какие данные (параметры) подаются на вход:

 

Это ингредиенты для вашей машины. Они указываются в скобках при создании функции.

Пример: нарисовать_квадрат() – это функция без параметров. Она всегда рисует квадрат одного размера и одного цвета. Ей не нужны дополнительные инструкции.

·         На входе: Ничего. Скобки пустые, но они обязательны.

Пример:  нарисовать_прямоугольник(длина, ширина, цвет) – это функция с параметрами

·         На входе: Конкретные значения для каждого параметра.

·         длина (число) — например, 100

·         ширина (число) — например, 50

·         цвет (строка) — например, красный

Как это выглядит в коде (на примере Черепахи):

# Создаем функцию (нашу "машину")

def  нарисовать_прямоугольник(длина, ширина, цвет):

    turtle.color(цвет)        # Настраиваем цвет (используем параметр 'цвет')

 

    turtle.forward(длина) # Используем параметр 'длина'

    turtle.left(90)  # Поворот на 90 градусов

    turtle.forward(ширина) # Используем параметр 'ширина'

    turtle.left(90)

 

    turtle.forward(длина) # Используем параметр 'длина'

    turtle.left(90)

    turtle.forward(ширина) # Используем параметр 'ширина'

    turtle.left(90)



Мы создали машину, которая теперь "знает", как рисовать прямоугольник, но ждет от нас конкретных размеров и цвета.

 

Использование функции (Запускаем "машину" кнопкой)

Это вызов функции. Когда функция создана, мы можем использовать ее в основной программе, просто обращаясь по имени.

Вызов функции без параметров:

нарисовать_квадрат() # Просто говорим: "Функция, работай!"
 
Вызов функции с параметрами:
 
# Говорим: "Функция, нарисуй прямоугольник длиной 100, шириной 50 и красного цвета"
нарисовать_прямоугольник(100, 50, "красный")
 
# А теперь: "Нарисуй другой, длиной 200, шириной 30 и синего цвета"
нарисовать_прямоугольник(200, 30, "синий")

Итог:

Действие

Что делаем

Какие данные на входе

Создаем функцию

Проектируем «машину», описываем алгоритм

Параметры – это «настройки» машины (длина, ширина и тп.). Они – переменные, которые мы будем использовать внутри функции

Используем (вызываем) функцию

«Нажимаем кнопку на машине», чтобы получить результат

Аргументы – это конкретные значения для настроек (100, 50,  "красный"). Мы их подставляем на место параметров

 

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

 

Вопросы:

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

*   Какой прием, скорее всего, использовал второй программист, чтобы избежать повторений?

 

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

* Что в этом примере является аналогом «вспомогательного алгоритма», а что — его «вызовом»? Пример какого вида функции представлен в этом вопросе – с параметрами или без?

 

 

3. В кулинарной книге рецепт салата «Оливье» выглядит так: «1. Приготовить вареную курицу по рецепту на стр. 15. 2. Сварить яйца и картофель...». При этом на странице 15 описан подробный процесс варки курицы.

* Почему автор книги не стал каждый раз полностью переписывать инструкцию по варке курицы прямо в рецепте салата, а вынес ее в отдельный раздел?

 

 

4. Петя написал программу для Черепахи, чтобы нарисовать снеговика. Он создал три отдельных алгоритма: «нарисовать большой круг», «нарисовать средний круг» и «нарисовать маленький круг». В основной программе он трижды вызвал эти алгоритмы, чтобы расположить круги друг на друге.

* Можно ли было в этой ситуации обойтись всего одним вспомогательным алгоритмом с названием «нарисовать круг», и если да, то что нужно было добавить в его описание, чтобы он мог рисовать круги разного размера?

Комментариев нет:

Отправить комментарий

Семинар