Два основных подхода к разработке алгоритмов: метод «сверху вниз» (метод последовательного уточнения) и метод «снизу вверх».
Конструирование алгоритмов
Два основных подхода к разработке алгоритмов: метод «сверху вниз» (метод последовательного уточнения) и метод «снизу вверх».
Метод разработки «сверху вниз» также называют методом последовательного уточнения алгоритма или методом пошаговой детализации.
Вспомогательный алгоритм используется для оформления последовательности действий, которые необходимо выполнить несколько раз в разных местах основного алгоритма, что делает его более понятным и компактным, решая при этом некоторую подзадачу основной задачи.
Вспомогательный алгоритм — это алгоритм, целиком используемый в составе другого алгоритма для решения некоторой подзадачи основной задачи.
Формальные параметры — это имена переменных, которые указываются в определении вспомогательного алгоритма и обозначают исходные данные и/или результаты. Фактические параметры — это конкретные значения или переменные, которые используются в момент вызова вспомогательного алгоритма, замещая формальные параметры.
Конструкция, в которой один цикл полностью расположен внутри тела другого цикла, называется вложенными циклами. Она используется для организации многократного повторения последовательности команд.
Рекурсивными называются алгоритмы, которые прямо или косвенно содержат вызов самого себя как вспомогательного алгоритма.
Пример из жизни: отражение в двух параллельных зеркалах, где каждое отражение содержит в себе уменьшенное отражение другого зеркала (эффект Дросте).
Назначение вспомогательных алгоритмов:
Они удобны, когда одну и ту же последовательность действий нужно выполнить в разных местах основного алгоритма, что делает его структуру более понятной и компактной.
Процесс вызова вспомогательного алгоритма:
Сложная задача состоит из большого числа шагов и множества взаимосвязанных деталей. Человеку сложно удержать в уме и спланировать наперёд все элементарные действия, необходимые для решения, особенно если часть действий зависит от промежуточных результатов. Использование метода пошаговой детализации позволяет управлять этой сложностью, фокусируясь сначала на общих этапах, а затем постепенно их уточняя.
Метод пошаговой детализации (метод «сверху вниз») состоит в том, что исходная задача разбивается на несколько частей, каждая из которых формулируется в виде отдельного предписания (команды). Если эти предписания выходят за пределы возможностей исполнителя, они снова уточняются в виде совокупности более простых предписаний, и так далее, пока все команды не станут понятны исполнителю.
Связь заключается в использовании принципа пошаговой детализации:
Укрупнённые блоки алгоритма:
Данный алгоритм \( \text{чертеж} \) является рекурсивным, поскольку он вызывает сам себя (\( \text{чертеж}(a-5) \)).
нц 4 раз вперед (a); вправо (90) кц Черепаха рисует квадрат со стороной \( a \).Результат: Черепаха будет последовательно рисовать вложенные квадраты. Каждый следующий квадрат будет иметь сторону на \( 5 \) пикселей меньше предыдущего. Так как поворот между вызовами не предусмотрен, все квадраты будут нарисованы из одной точки и будут сориентированы одинаково, создавая эффект уходящей вглубь перспективы или многослойной рамки.
Если начать с положительного \( a \), например, \( a=100 \), квадраты будут уменьшаться: \( 100, 95, 90, \dots \). Если начать с отрицательного \( a \), например, \( a=-100 \), квадраты будут «расти» в обратную сторону: \( -100, -105, -110, \dots \) (команда вперед (a) будет означать движение назад). При \( a=-150 \) или меньше рекурсия остановится.
Для всех трех случаев (a, б, в) можно использовать вспомогательный алгоритм для закрашивания вертикального или горизонтального отрезка.
Вспомогательный алгоритм для закрашивания вертикальной линии вниз:
алг vlinia(цел dlina)
нач
нц dlina раз
закрасить
вниз
кц
вверх
кон
Примечание: В конце vlinia Робот возвращается на одну клетку вверх, чтобы не быть в самой нижней клетке.
Основной алгоритм для варианта 'a' (три вертикальные линии):
использовать Робот
алг нач
vlinia(4) // первая линия
вправо // переход
вправо
vlinia(4) // вторая линия
вправо // переход
вправо
vlinia(4) // третья линия
кон
Блок-схема алгоритма нахождения первого простого делителя (рис. 1.3):
Входное значение: \( n \) (натуральное число, \( n > 1 \)).
Инициализация делителя: \( d = 2 \).
Цикл: повторять, пока остаток от деления \( n \) на \( d \) не равен нулю (\( n \bmod d \neq 0 \)):
Выходное значение: \( d \) (первый простой делитель).
Результаты проверки:
Примечание: В соответствии с логикой алгоритма и математическими правилами, первый простой делитель числа \( 135 \) — это \( 3 \). Число \( 5 \) является вторым простым делителем (после деления \( 135 \) на \( 3 \) получаем \( 45 \), \( 45 \bmod 3 = 0 \), далее \( 15 \bmod 3 = 0 \), и только \( 5 \bmod 5 = 0 \)). Если тест \( 135 \to 5 \) должен быть верным, алгоритм должен быть другим (например, поиск наибольшего простого делителя, или условие теста ошибочно). Если следовать блок-схеме, для \( 135 \) результат будет \( 3 \).
Задали работу по теме параграфа?
Реферат, доклад или проект по параграфу: план, текст, таблицы и оформление по требованиям.
Список готовых проектов к текущему параграфу.
ВНИМАНИЕ: Представленные фрагменты из учебных материалов используются исключительно в научно-образовательных целях в объеме, оправданном поставленной целью.
Данное использование осуществляется в рамках, установленных законодательством об авторском праве (в частности, нормами о свободном использовании произведения для образовательных целей).
В соответствии с законодательством, автор и источник заимствования указаны для каждого используемого фрагмента.