![](../004.gif)
СОВЕРШЕННОЕ ОРУЖИЕ КОДЕРА
Спецвыпуск Хакер, номер #004, стр. 004-106-1
Ruben aka Noah (noah@inbox.ru, UIN 983332)
КАКОЕ ОТНОШЕНИЕ ИМЕЮТ АЛГОРИТМЫ К ДАВИЛКАМ БАБУЛЕК?
Самое что ни на есть прямое. И вообще, многие наши повседневные действия связаны с алгоритмами. Сейчас объясню почему. Если тебе придет в голову спросить меня, что это за хрень такая - алгоритм, я отвечу: алгоритм решения задачи - это действия, которые должны выполняться для решения этой задачи, и последовательность, в которой эти действия должны выполняться. Погоди, не швыряй журнал!!! Давай лучше попробуем разобраться с этим делом.
Ты тачку водить умеешь? Да!? Я и не сомневался :). А если не умеешь, читай дальше - любимый Х тебя всему научит. Короче, представь себе, что внизу, у твоего подъезда, прямо сейчас стоит новенькая "девятка" :). Задача такая - завести тачку и тронуться с места. Так, раз это задача - значит, должен существовать алгоритм ее решения, согласен со мной? Теперь давай вернемся к нашему определению - там, кажется, говорилось "...действия, которые должны выполняться для решения этой задачи...". А какие будут действия для нашей задачки? Давай, сам вспоминай, что мы делаем каждый раз, когда заводим тачку и трогаемся.
1. Снимаем с ручника.
2. Вставляем ключ зажигания.
3. Жмем и удерживаем педаль сцепления.
4. Переводим передачу на нейтралку.
5. Отпускаем сцепление.
6. Поворачиваем ключ.
7. Опять жмем и удерживаем сцепление.
8. Переходим на первую скорость.
9. Потихоньку жмем на педаль акселератора и одновременно отпускаем
сцепление.
Вот все действия, которые нам нужны. Но определение состояло из двух частей, там еще говорилось "... последовательность, в которой эти действия должны выполняться...". Приятель, мы с тобой просто отличные водилы, поэтому когда мы вспоминали нужные действия, интуитивно расставили их в правильной последовательности. А теперь представь себе, что я позову какого-нибудь баклана, совсем не умеющего водить тачку, и суну ему наш список действий, перемешав все пункты в нем случайным образом. Вот кора будет :) Хе-хе, например если снять с
ручника в самом конце :), или если поменять местами третье и пятое действия... - вообще чепуха получится какая-то.
Ладно, с места мы тронулись, теперь едем дальше. Немного пораскинув мозгами, ты поймешь, что задачи могут быть большими и сложными. Соответственно, алгоритмы их решения тоже будут немалыми и нелегкими :). Предыдущая задача была легкой, поэтому мы с тобой ее целиком прокрутили в голове в течении минуты. А что делать с большими-то задачами (и с большими алгоритмами)? А прикинь: если задача ДЕЙСТВИТЕЛЬНО огроменная? За один присест ее и не переваришь. Кроме того: то, что ты наварил за первый присест, надо зафиксировать на каком-то постоянном носителе информации (коим наша башка не является), а то ведь забудешь, и придется все заново делать :(. Для того, чтобы избавиться от этих проблем и облегчить процесс разработки алгоритмов, крутые лбы из не менее крутых универов придумали две совершенно необходимые каждому прогеру вещи: псевдокод и технология нисходящей разработки алгоритмов с пошаговой детализацией. Начнем с первого - оно, вроде, попроще звучит.