В одной из прошлых статей мы поговорили о алгоритмах и в ней же я обещал в скором времени рассказать про блок схемы. Что же, время пришло.
Давайте сначала поймем, что такое блок схемы.
Блок-схема — распространенный тип схем (графических моделей), описывающих алгоритмы или процессы, в которых отдельные шаги изображаются в виде блоков различной формы, соединенных между собой линиями, указывающими направление последовательности
Ага, то есть блок схема, это способ представления нашего алгоритма в картинках. Но зачем? Дело в том, что человеку, как существу, имеющему зрение, проще и удобнее, зачастую, воспринимать информацию, если она продублирована в виде текста или имеет какие-то графические обозначения. Если не вдаваться в подробности, то это называется зрительным восприятием. Согласитесь, если вы видите объект беседы перед собой, вам проще его воспринимать, обсуждать и т.д.
Существует несколько основных блоков. В интернете вы можете найти примерно такое описание для части из них. Цвет фона значения не имеет, и здесь он синий для большей наглядности (наверное)
Процесс- под процессом здесь понимается какое-то действие. Арифметическая или логическая операция. Что то, что приведет вас к финальному результату выполнив один пункт вашего алгоритма. Допустим “a+b” будет помещаться именно в такой блок.
Решение - немного странное название, но думаю, что вы уже догадались, что это условие. С ним мы уже сталкивались в прошлой статье по алгоритмам. Когда нам приходилось РЕШАТЬ, что делать дальше, на основе какого-то результата.
Модификация - забудьте про это слово. Это просто цикл. О циклах мы тоже говорили. Но конкретно этот цикл немного специфичный. Это обозначение цикла For, который является счетным циклом и немного отличатся от остальных. Иные циклы могут быть представлены без специального оператора, это мы с вами попробуем изобразить чуть ниже.
Предопределенный процесс - некая модификация первого блока. Что значит предопределенный? Значит определённый заранее. И тут вообще ступор, но тем не менее он именно так и называется. Говоря простым языком - это ПОДпрограмма, (метод или процедура/функция). Такого мы еще не видели.
Подпрограмма - буквально, программа в программе. То есть это некоторый кусок кода, который выделен в отдельную группу для того, чтобы не писать его каждый раз в разных частях алгоритма/программы. В дальнейшем этот кусок алгоритма/программы может быть запущен, там, где нужно. Сейчас не стоит зацикливаться, подпрограммы мы еще рассмотрим и не раз.
Ввод-вывод, это два блока которые выглядят одинаково, как правило понять, что там происходит можно по тексту внутри блока. Объединены в одну группу, потому что близки по специфике. Получение данных, вывод данных. Мы с вами уже использовали ввод, кстати говоря, когда наш робот читал название колбасы.
Пуск-останов - это те же самые начало и конец, тут думаю пояснения не требуются.
Сейчас вы в ужасе, что я почти для каждого из пунктов подобрал синонимы, и порой более логичные, и понятные. Да, дело в том, что алгоритмизация, это забытый аспект программирования. И из-за этого появляются некоторые сложности. Если что-то не развивать, оно и не разовьется. Может быть многие со мной не согласятся, но я спрошу их, как часто они видят блок схемы в курсах по программированию? Бинго. Ни где их нет.
Зачем же я вам показал отличающиеся название, от тех, что я обычно использую? Что бы вы просто не впадали в ступор если вдруг увидите останов, вместо конца. Более подробно о том, как же все-таки правильно и где какие размеры и сколько градусов углы у каждого ромбика вы можете почитать в ГОСТ 19.701-90 «Схемы алгоритмов, программ, данных и систем. Условные обозначения и правила выполнения». Мы в такие подробности вдаваться не будем, по причине того, что мы любители и нам за это не платят, но уметь строить блок-схемы и самое главное читать их, мы должны уметь.
В блок схеме, как правило каждый пункт алгоритма соответствует своему блоку, исключения могут составить блоки, которые реализуют сразу несколько пунктов, допустим цикл For. Или блоки процесса или подпроцесса, которые можно объединять в один, если захочется. Стоит сделать оговорку, что все эти блоки имеют свои размеры, и не стоит растягивать один блок процесса так, чтобы в него все влезло, а вокруг него лепить кучу маленьких.
Между собой блоки соединяются стрелочками, указывающими к какому блоку стоит перейти дальше. В блоках условия/выбора нужно указать какая из стрелочек переведет нас при каком результате. То, что написано внутри блока выбора иногда может быть представлено как вопрос. И если ответ на него да, то идем по стрелочки с надписью да, если нет, то нет. Мы немного расширим наш кругозор вариантов, когда поговорим о “логике”, лжи и истине.
Быть или не быть? Вот в чем блок-схема.... Если быть, то да, следовательно, быть. Если нет, значит нет, ну и вы поняли...
Если у кого то язык чуть не сломался когда читали что в ромбике, то вы заметили, что на самом деле там все должно быть однозначно. И по идеи стоит заменить на вопрос «Быть?» тогда все станет немного логичнее, если вы запнулись на этом месте, значит вы на верном пути в понимании процесса, если нет, то ничего страшного, все еще впереди, тем-более что об условиях я мало рассказал, пока что.
А вот так вот должна выглядеть блок-схема для нашего первого алгоритма. Не густо, но там и алгоритм без ветвлений и чего-либо еще.
Давайте не будем тратить время зря, и сразу перейдем к финальному алгоритму
Тут у нас появляется ввод (в ромбике), даже два. Первый раз, робот читает с бумажки, второй с этикетки.
На самом деле вопрос спорный, ввод это или операция. Будем считать, что это ввод, я программист я так вижу. Вообще многие из стандартов, связанных с обозначением и прочим уже устаревают, и не все из них успевают менять. Вот если допустим в недалеком будущем, полноценный ИИ решит что-то прочесть, это будет ввод или операция? Операция? То есть это не его решение что-то вложить в себя, а просто кусок кода, а то есть ввод пользователя, живого человека, это нечто иное? Слава богу прав у железок пока нет, и статьи за оскорбление чувств кибернетических организмов пока не придумали. :)
А видите условие с переходом по НЕТ, не далее, а назад. Это, по сути, тот цикл о котором мы говори. Если колбаса не та, мы возвращаемся к тому, что берем колбасу (старую он бросает на пол, тсссс, потом исправим, может быть), и снова читаем, и снова проверяем. Именно поэтому в прошлый раз я рассказал вам о ветвлениях, это, наверное, более широкое определение всем возможным переходам, будь то по условию или из-за цикла, а может быть и без условия (поговорим о том хорошо это или нет, когда встретимся с кодом на С++ или ASM).
Как вы заметили, блок схемы могут быть довольно большими, но как быть, если вдруг что-то не влезло, а вот так, например как я и сделал. Указываем одинаковые цифры в кругляшках и переходим по нему. Есть другие способы, но нам пока и этого хватит.
А теперь еще раз, зачем же это нужно? Думаю, сейчас вы наглядно видите, что смотреть за тем, куда идет выполнение нашего алгоритма, стало проще. И в некоторых довольно разветвленных алгоритмах, блок схемы помогают лучше понять, что за чем и когда выполняется. Нужно просто вести пальцем по стрелочкам и отвечать на условия, да или нет.
Блок схемы важный, но не основной этап, они скорее пригодятся тем, кто будет разбираться в вашем коде, куда важнее алгоритм, который эта блок схема представляет, поэтому думаю на сегодня хватит.
Не забывайте что каждое подобное знание дает вам преимущество перед вашими конкурентами или коллегами. Сегодня вы научились читать и создавать блок-схемы, в определенных кругах этот навык о многом говорит.
Надеюсь вам было интересно, а пока-что, до скорого.