Алгоритм программы “Мигающий огонь”

И наконец, последнее, но самое главное – РАБОЧАЯ ДОКУМЕНТАЦИЯ.

Основа документации для любой программы – АЛГОРИТМ. Вообще-то хороший программист разрабатывает алгоритм до начала написания исходного текста. Сначала обсуждается и записывается ПОСТАНОВКА ЗАДАЧИ. Потом разрабатывается, пишется и обсуждается АЛГОРИТМ, а потом по нему пишется и отлаживается ИСХОДНЫЙ ТЕКСТ.

Помните рассказ о логических ошибках. Так вот – грамотно поставленная задача, тщательно написанный и обсуждённый c коллегами алгоритм позволяют избежать до 90% логических ошибок в исходном тексте программы.

Программа “Мигающий огонь” очень проста, поэтому написание и обсуждение алгоритма этой программы поможет нам понять основные принципы построения алгоритмов. Надо только помнить, что на самом деле программа содержит две функции – setup и loop. Поэтому у нас будет два алгоритма.

Итак – алгоритм любой функции содержит только четыре типовых элемента

  • Точка входа в алгоритм
  • Точка выхода из алгоритма
  • Блок выполнения действий
  • Блок принятия решения.

Давайте возьмём алгоритмы функций setup и loop программы “Мигающий огонь” и посмотрим, как в нём располагаются эти блоки.

Алгоритм функции SETUP программы Мигающий огоньАлгоритм функции LOOP программы Мигающий огонь

Алгоритм функции setup () очень прост – вход, выполнение единственного действия и выход.

Алгоритм функции loop () сложнее – у него нет выхода. Помните, мы говорили, что функция loop непрерывно повторяется до тех пор, пока есть электропитание или не нажата кнопка сброса.

Здесь именно так и написан алгоритм.  Есть Вход. Есть четыре действия – вывести HIGH, подождать 1 секунду, вывести LOW, подождать 1 секунду.  Но нет Выхода.

Вместо Выхода возврат к первому действию и всё повторяется сначала до бесконечности.

Вы наверняка заметили, что тут нет блоков принятия решения. Это так – ведь никаких решений принимать не приходится – знай себе включай, жди, выключай, жди. И так пока батарея не разрядится.

Но в наших будущих программах решения принимать придётся и придётся менять ход программы, в зависимости от этого решения. Поэтому пока просто поговорим об этом теоретически.

Для начала посмотрим, как рисуется блок принятия решения в алгоритмах.

Блок принятия решения в алгоритмах

Есть вход – в данном случае сверху.

Вход в блок решения это выход из какого-то другого блока.

Внутри блока записано какое-то условие и стоит знак вопроса. Условие формулируется так, чтобы на него можно было ответить либо ДА, либо НЕТ.

Давайте запомним – в алгоритмах отсутствуют – НЕ ЗНАЮ, МОЖЕТ БЫТЬ, НАДО СПРОСИТЬ У КОГО-НИБУДЬ.

Только ДА или НЕТ.

Ну, а дальше понятно, – если условие выполнено, то выходим по стрелке ДА, если условие не выполнено – по стрелке НЕТ. А к этим стрелкам подсоединяются следующие блоки алгоритма.

Возьмём пример из жизни – Вы подходите к перекрёстку для того, чтобы перебраться на другую сторону улицы. Вы смотрите на сигнал светофора и либо идёте вперёд, если сигнал разрешающий, либо стоите на тротуаре, если сигнал запрещающий.

Но всё время, пока Вы стоите, Вы поглядываете на светофор, и ждёте, когда появится разрешающий сигнал. Если постоянно поглядывать Вы не будете, то так и застрянете на перекрёстке. Посмотрим, как будет выглядеть алгоритм в этом случае.

Алгоритм на перекрёстке

Я специально не поставил, ДА и НЕТ.   Думаю, Вы сами сможете это сделать.

Кстати надеюсь, что вы понимаете, что разрешающий сигнал светофора – это только ЗЕЛЁНЫЙ.

КРАСНЫЙ И ЖЁЛТЫЙ – запрещающие сигналы.

И ещё – обратите внимание, что после блока “Стоять и Ждать” мы возвращаемся ко входу в блок принятия решения, ещё раз проверяем, какой сигнал горит в это мгновение и крутимся в этом цикле до тех пор, пока не зажжётся разрешающий сигнал светофора.  Обратная стрелка и есть то самое поглядывание на светофор, пока стоим и ждём.

На первый взгляд простой возврат к началу блока принятия решения ничего страшного не несёт – дождёмся зелёного, перейдём к блоку “Переходить улицу” и выйдем из алгоритма.  Но представьте себе, что светофор сломался или постоянно горит жёлтый.  Мы так навсегда и останемся стоять перед ним.

В программировании это называется: “Бесконечный Цикл”.

В просторечии: “Компьютер завис”.

Если мы будем допускать в своих программах такие бесконечные циклы, то наш робот в какой-то момент прекратит нормальную работу и начнёт бесконечную последовательность бессмысленных действий или просто замрёт навсегда.

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

Три задания для самостоятельной работы:

  1. Перепишите алгоритм так, чтобы учитывать не два варианта цветов – РАЗРЕШАЮЩИЙ и ЗАПРЕЩАЮЩИЙ. А три – ЗЕЛЁНЫЙ, ЖЁЛТЫЙ и КРАСНЫЙ. Небольшая подсказка – так как у нас три варианта действий, то надо будет записать в алгоритме два блока принятия решений.
  2. Перепишите алгоритм так, чтобы исключить возможность зависания (бесконечного цикла), если светофор исправен, но постоянно горит мигающий ЖЁЛТЫЙ. Так называемый ночной режим. Надо и дорогу перейти и под машину не попасть.
  3. Перепишите алгоритм так, чтобы учитывать, что не все водители автомобилей народ дисциплинированный и останавливаются на перекрёстке, когда Вам дан разрешающий сигнал. Задача та же – перейти дорогу и не попасть под машину.