Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Алгоритмы > Зачем нужны блок-схемы?


Автор: Mastodont 20.1.2010, 15:38
Приходилось слышать мнение, что блок-схемы строятся по программному коду для каких-либо целей, например, объяснения алгоритма работы программы заказчику.

А по-моему, блок-схема - это первый шаг на пути разработки программы, помогающий получить начальное представление о том, какой будет программа. Далее схема уточняется написанием псевдо-кода, по которому уже пишется программный код.

Какое ваше мнение?

Автор: kemiisto 20.1.2010, 15:51
Блок-схемы - пережиток прошлого, доструктурной эпохи. Исходный код программы, записанный на любом (почти smile) языке высокого уровня куда более нагляден. smile 

Так что только:
Цитата
Для сдачи зачетов в универе



Автор: _Y_ 20.1.2010, 20:13
Цитата(kemiisto @ 20.1.2010,  15:51)
код программы...куда более нагляден

Гы! насмешил smile  И самые наглядные коды - коды графических языков, т.е. коды, представляющие собой блок-схемы smile 

Автор: FraiDex 20.1.2010, 21:04
Если разобраться в блок-схеме, становиться понятен общий принцип работы программы, не зависимо от того на каком она языке написана. сейчас используются в основном в учебных целях.
Существует язык, который в принципе и основан на блок-схемах. Называется http://ru.wikipedia.org/wiki/%D0%94%D0%A0%D0%90%D0%9A%D0%9E%D0%9D_%28%D1%8F%D0%B7%D1%8B%D0%BA_%D0%BF%D1%80%D0%BE%D0%B3%D1%80%D0%B0%D0%BC%D0%BC%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D1%8F%29. Если кто заинтересуется, у мя есть учебник...

Автор: Pavia 20.1.2010, 22:31
Блок схемы нужны для наглядности.  Нужны для объяснения структуры крупной программы при этом на них выделяют главные интерфейсы и блоки. 

Если использовать UML или Блок схемы согласно Госту то пользы от них никакой.  Так как с таким же успехом используется представление на языке программирования, а если учесть что у языков программирования больше выразительных средств. Такие средства это классы и шаблоны, регулярные выражения. 


Цитата(Mastodont @  20.1.2010,  15:38 Найти цитируемый пост)
А по-моему, блок-схема - это первый шаг на пути разработки программы, помогающий получить начальное представление о том, какой будет программа.
 Нет. Начальное представление, а вернее парадигма  программирования выбирается волевым усилием начальства(главным архитектором). А вот что-бы объяснить взаимодействие и рисуется схема.  Но все начальное прорабатывается мысленно. Хотя не столько прорабатывается сколько выбирается случайным образом.

Цитата(Mastodont @  20.1.2010,  15:38 Найти цитируемый пост)
Далее схема уточняется написанием псевдо-кода, по которому уже пишется программный код.

Так тем более не делают лишняя трата времени. 

Автор: ~FoX~ 21.1.2010, 10:25
Цитата

Для объяснения алгоритма программы заказчику

Заказчику, за частую, в лучшем случае либо откровенно наплевать на квадратики и стрелочки, в худшем он тупой и просто не поймет что к чему... Возможности не исключают друг друга )))))
Цитата

Схема выполняется перед написанием псевдо-кода и программного кода

Откровенно говоря мне совершенно не удобно писать код/псевдокод по блоксхеме, особенно если схема не маленькая, то скорее в ней запутаешься, чем непосредственно в коде...
Цитата

Для сдачи зачетов в универе

Если мне не изменяет память лицензирование ПО и ЕСПД требуют наличия блоксхемы главного алгоритма...

Автор: SoWa 21.1.2010, 10:57
Цитата
Для объяснения алгоритма программы заказчику

Аха, так он и поймет, если Вы в блок-схеме пару тысяч строк кода нарисуете...  smile 

Вместо того, чтобы возюкаться с квадратиками и стрелочками я сперва черкаю на доске поверхностную схему пробежки данных туда-сюда(так уж повелось, клиент-серверные приложения делаю), а потом уже по надобности дописываю какие-то важные моменты, которые надо реализовать завтра, потому что сегодня оказывается уже 10 вечера и пора бы пойти домой smile

Поэтому- только для сдачи зачетов в универе.

ИМХО. Пинайте меня в зубы, всего вон два осталось  smile 

Автор: Mastodont 21.1.2010, 11:30
Цитата

потому что сегодня оказывается уже 10 вечера

Это где ты столько работаешь?  smile 

Автор: SoWa 21.1.2010, 11:56
Цитата(Mastodont @  21.1.2010,  11:30 Найти цитируемый пост)
Это где ты столько работаешь?   

Там, где мне очень нравится smile
А до дома идти всего минут семь, поэтому позволяю иногда себе такое счастье- посидеть и поработать smile
Офтоп, в общем.
По блок-схемам есть еще мысли? )

Автор: Фантом 21.1.2010, 22:11
Вариант №3, но с поправкой - для сдачи зачетов в плохом универе.

Автор: GoldFinch 22.1.2010, 13:58
в любом случае, двумерное представление алгоритма нагляднее чем одномерное представление
кто реверсил большие функции в IDA - тот знает)

Автор: Фантом 22.1.2010, 14:51
Цитата(GoldFinch @  22.1.2010,  13:58 Найти цитируемый пост)
в любом случае, двумерное представление алгоритма нагляднее чем одномерное представление

Во-первых, это. 

Во-вторых, далеко не всегда написание программы - это запись алгоритма решения. Не всякий язык программирования является императивным.  smile 

Автор: _Y_ 23.1.2010, 12:04
Прямо даже и не знаю. Ваши аргументы против блоксхем показывают что вы либо гении, либо просто не умеете пользоваться тем, чему в универе учили. Извините, но 
Цитата
в блок-схеме пару тысяч строк
 указывает именно на это. А потом в теме "Aлгоритмы" возникают посты типа "Дайте, пожалуйста, пример на C++, Java, или-еще-каком-конкретном-языке-известном-именно-вопрошающему".

Код это не алгоритм, это програмный продукт, алгоритм использующий. Алгоритм же это последовательность ключевых действий, записанная в виде обычного текста или (что гораздо лучше) в виде схемы. Вот пример чтения текстового файла в список текстовых переменных. Пример на Java, но это не важно:
Код

ArrayList<String> dataArray = new ArrayList<String>();
try {
    BufferedReader in = new BufferedReader(new FileReader("c:/path1/path2/infilename.txt"));
    String str;
    while ((str = in.readLine()) != null) {
        dataArray .add(str);
    }
    in.close();
} catch (IOException e) {
}

Здесь куча информации, к алгоритму отношения не имеющей: это и декларирование списка dataArray  и служебной переменной str, и путь к файлу, и способ чтения именно с помощью FileReader и BufferedReader, и способ выхода из цикла, и метод обработки ошибок. В общем, куча общеизвестных операций, затрудняющих восприятие. Алгоритм же должен сообщать только Ввести данные или Прочитать файл в dataArray - не больше. Максимум что нужно на схеме:
Код

  ----------
 /  файл ->  \
 \ dataArray /
  -----------

Это совсем другой уровень абстракции. Грамотно представленный алгоритм позволяет увидеть именно алгоритм, а не все и вся. 

Из этого, впрочем, следует, что блоксхемы нужно рисовать далеко не всегда, а только тогда, когда надо именно разбираться в алгоритме. Мне очень помогает, когда, например, надо сделать метод со сложными ветвлениями или разобраться в алгоритме, написанном человеком, алгоритмы излагать не умеющим.

Имеется, кстати, незаслуженно пнутый в этой ветке, язык UML. В нем куча вариантов схематических представлений. Ни один человек, видимо, не пользуется всеми. Каждый пользуется только парой-тройкой, но выбор этой пары-тройки разнится. Мы, например, широко пользуемся диаграммами классов. Нужны они для того, чтобы делить задания внутри команды разработчиков, а потом без проблем собирать код воедино. Наши менеджеры используют диаграммы взаимодействий - для работы с клиентами. Ну и т.д. Но это ОФФ поскольку обсуждаем именно блок-схемы.

Автор: Фантом 23.1.2010, 15:02
Цитата(_Y_ @  23.1.2010,  12:04 Найти цитируемый пост)

Это совсем другой уровень абстракции. Грамотно представленный алгоритм позволяет увидеть именно алгоритм, а не все и вся. 

Это правильно. Но дело в том, что блок-схемы - совсем не самый удобный вариант для представления алгоритмов. Почти всегда полезнее использовать для описания алгоритмов и прототипирования какой-либо язык (или подмножество языка).

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

Автор: ruX 23.1.2010, 16:07
По моему только блок схемы - действительно пережитки прошлого, в универе заставляют рисовать. Причём кто рисовал в университете, тот знает, что нужно обозначать буквально каждую строчку кода в квадратик. От такого "кода" никакой наглядности. Уходит время и в конце концов запутываешься. Эти гиганские схемы вряд ли чему научат - сколько раз я видел ситуацию, когда человек при мне за считаные минуты рисовал что то внятное, а переложить на язык не мог. Не только потому что плохо владеет языком, а из за того что мало чего-то реального в этом.
Уж не говоря о том, что невозможно отразить некоторые вещи, как уже упомянули например шаблоны. А если и получиться - опять же километровые связи между фигурами, смотря на которые врядли поймёшь сразу что имелось ввиду.

НО
Рисовать условные схемы(а не программный код) - это совсем другое. Например связи между компонентами, их зависимостями. Также просто идеально чтоб скомпоновать мысли на коленке(грубо - прямоугольники со стрелочками). В таком формате удобно с коллегами обсуждать опять же общий вид какой либо проблеммы.

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

+ добавление например пары условий приводит к сильному изменению внешнего вида блок-схемы. Код же при этом остаётся такой же читаемый

Автор: _Y_ 23.1.2010, 17:38
Цитата(Фантом @ 23.1.2010,  15:02)
что большая часть усилий тратится на красивое рисование, а не на обдумывание смысла рисуемого.

А я согласная. Когда пишешь записку, не стОит заботиться о красоте почерка. Степень красоты должна зависить от цели. Пытаешься вытащить алгоритм из чужого, еще и написанного "по гениальному наитию" кода - берешь обратную сторону старого письма, карандаш и рисуешь кое-как. Придумал новый алгоритм и готовишь публикацию в журнале - стараешься соблюсти все правила и сделать иллюстрацию красиво .

ЗЫ: Будете смеяться, но препы в универе - тоже люди. Знают они, как правило, больше студентов, но в остальном очень разные. Кто-то обращает внимание на суть, кто-то - на внешнее оформление. Кому-то просто трудно искать ошибку в вашем алгоритме, если не все правила соблюдены. Кто-то готов принять зачет в курилке - главное что ты во всем разобрался. Кто-то считает личным оскорблением, если ты пришел без галстука. smile 

Автор: nworm 24.1.2010, 00:09
Блок-схемы полезны, если нужно КОРОТКИЙ кусок алгоритма объяснить или разобрать.
Или связи какие-то между крупными блоками (например алгоритмами).

Люди картинки лучше воспринимают чем буквы.

И ещё, по-моему, картинка может восприниматься целиком, то есть когда блок-схема огромная, на простыне, то с ней только хуже.

Автор: nerezus 24.1.2010, 10:04
Цитата

Блок-схемы полезны, если нужно КОРОТКИЙ кусок алгоритма объяснить или разобрать.
 Причем если убрать их графическую составляющую, то будет видно еще лучше видно.

Но по сути это будет код на динамически-типизированном ЯП.
И останется картинкой, т.к. выравнивание сделает свое дело.

Автор: Finarfin 21.6.2010, 18:50
Если послать к чертям собачьим эти дебильные госты, то сама по себе идея визуально выражать предельно абстрактно-концептуальную мыслю - прекрасна.
Всё портят сраные госты, особенно b=1,5a. МАЛО!!!! а что не вмешается - типа в комменты, и весь лист превращается в сплошные комментарии  smile 

ГОСТ must die, свободу студентам и аспирантам!  smile 

Автор: hente 22.6.2010, 19:09
Почитал посты, и самое интересно что в каждом есть доля правды ;)
Например я и все наши в отделе программирования схематично накидываем что и как будет, так проще потом проект разбивать на более мелкие задачи! Но в то же время никогда (кроме как в универе) не чертил подробную схема совсеми логическими исходами, исключительно делал наброски чтоб не запутаться.
+ ко всему например при создании БД ЕР-модель строго обазательна (если в ней конечно больше 2х связанных таблиц), а к стате по этому поводу ведь никто не устроил опрос "нужна ли модель БД (физ. и лог-ая)" а без не никак не реализовать даже средний проект тем более передать его другом программисту.

ЗЫ: все таки для понимания и структуризации нужна блок-схема хотябы обобщенная!

Автор: hente 22.6.2010, 19:30
 smile 

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)