СОВЕРШЕННОЕ ОРУЖИЕ КОДЕРА
Спецвыпуск Хакер, номер #004, стр. 004-106-4
Тэкс, что там дальше? А, вот, структура повторения. Так же как и структура следования, структура повторения имеет несколько реализаций. Мы рассмотрим одну - она универсальная.
ПОКА (условие)
действие.
Если условие верно - выполнить действие, а потом снова проверить, верно ли условие (если верно, еще раз выполнить действие). И так до тех пор, пока условие не станет неверным. Быстро смотрим два примера, и идем дальше. Задача один: пить пиво до тех пор, пока не будет достигнута необходимая кондиция, потом топать к толчку :).
ПОКА (чел не достиг кондиции)
пить пиво.
топать к толчку.
Чел проверяет: не дошел ли он до кондиции, если нет пьет пиво, потом опять проверят, если опять нет - опять пьет пиво. Когда он, наконец, достигает кондиции - пропускает действие "пить пиво", и выполняет следующее за структурой повторения действие - "топать к толчку". В этом алгоритме также задействована структура следования (действие "топать к толчку" следует за структурой повторения.
Задача два: напечатать все числа от 0 до 9.
установить счетчик в нуль.
ПОКА (счетчик меньше либо равно девяти)
вывести счетчик.
прибавить к счетчику единицу.
Ну тут все и так понятно. Идем дальше.
АГОРИТМ АЛГОРИТМОВ
Нда, нисходящая разработка алгоритмов с пошаговой детализацией. В общем-то, эта штука только звучит сложно. Если ты один раз поймешь, как с ней работать - считай, что ты ее навсегда освоил - остается только совершенствоваться в практике :). Ну как, готов? Тогда приступим-с. Как отмечалось выше, эта фень упрощает разработку больших и сложных алгоритмов. Смысл ее в том, что она систематизирует процесс. Короче говоря: технология нисходящей разработки алгоритмов с пошаговой детализацией - это алгоритм разработки алгоритмов. Вот сказал-то... :) А почему бы и нет? Почему у процесса катания на тачке может быть алгоритм, а у процесса разработки алгоритмов - нет? Тут, как говорится, сам Билл Гейтс велел. А теперь слушай внимательно. Вся эта технология осуществляется следующим образом: на основе условия задачи (которое нам дают работодатели, преподы, которое мы сами себе придумаем и пр.) составляется одно единственное действие, которое полностью характеризует назначение разрабатываемого алгоритма. Очень часто это действие совпадет с формулировкой задачи, и это действие называют вершиной алгоритма (скоро поймешь, почему). Например, если стоит задача: найти корни квадратного уравнения, то псевдокод вершины алгоритма решения этой задачи так и будет выглядеть:
найти корни квадратного уравнения.
Но мы ведь не можем это действие осуществить на каком-либо языке - я, во всяком случае, не знаю такой функции или оператора, которая сразу выполняет такое действие. Поэтому, нам нужен шаг детализации - мы опускаемся на один шаг с вершины и разбиваем наше действие на несколько более простых:
ввести значения x,a,b,c.
найти дискриминант.
найти корни.
вывести корни.
Но и эти действия тоже не осуществимы на известных мне языках программирования - делаем еще один шаг детализации:
ввести x.
ввести a.