Academia.eduAcademia.edu
Владимир ПАРОНДЖАНОВ УЧИСЬ ПИСАТЬ, ЧИТАТЬ И ПОНИМАТЬ АЛГОРИТМЫ АЛГОРИТМЫ ДЛЯ ПРАВИЛЬНОГО МЫШЛЕНИЯ Основы алгоритмизации Москва 2012 УДК 004.438ДРАКОН:004.021 ББК 32.973.26-018.2 П18 П18 Паронджанов В. Д. Учись писать, читать и понимать алгоритмы. Алгоритмы для правильного мышления. Основы алгоритмизации. – М.: ДМК Пресс, 2012. – 520 с.: ил. 272 ISBN 978-5-94074-800-7 Излагаются новые полезные для практики идеи и достижения, помогающие легко и быстро освоить алгоритмы. Дается систематизированное изложение основных понятий и методов алгоритмизации. Книга содержит общедоступный практический курс, позволяющий существенно ускорить разработку, анализ и проверку алгоритмов, облегчить проектирование сложной деятельности. Ведется наглядное обучение на примерах. Читатель быстро привыкает к самостоятельному осмысленному составлению алгоритмов. Использованы доходчивые и привлекательные чертежи алгоритмов (дракон-схемы), значительно облегчающие усвоение материала. Книга богато иллюстрирована. Почти триста наглядных схем и рисунков, выполненных по принципу «Посмотрел – и сразу понял!», окажут читателю неоценимую помощь. Книга предназначена для начинающих и профессионалов, а также для самостоятельного изучения. УДК 004.438ДРАКОН:004.021 ББК 32.973.26-018.2 Все права защищены. Любая часть этой книги не может быть воспроизведена в какой бы то ни было форме и какими бы то ни было средствами без письменного разрешения владельцев авторских прав. ISBN 978-5-94074-800-7 © Паронджанов В. Д., 2012 © Оформление, издание ДМК Пресс, 2012 СОДЕРЖАНИЕ Введение ........................................................................6 Часть I. Алгоритмы (облегченный материал для первого знакомства) ......................................................13 Глава 1. Алгоритмы – это очень просто! .......................................................15 Глава 2. Алгоритмы и процедурные знания ................................................23 Часть II. Алгоритмический язык ДРАКОН и удобные чертежи алгоритмов (дракон-схемы) ................35 Глава 3. Иконы и макроиконы языка ДРАКОН ........................................37 Глава 4. Алгоритмическая структура «силуэт» .........................................41 Глава 5. Алгоритмическая структура «примитив» ...................................56 Глава 6. Сравним силуэт и примитив ............................................................67 Глава 7. Как улучшить понятность алгоритмов? .......................................78 Глава 8. Простые цикличные алгоритмы ...................................................113 Глава 9. Особенности цикличных алгоритмов ........................................124 Глава 10. Сложные цикличные алгоритмы. Структура «цикл в цикле» ..................................................................................140 Глава 11. Логические формулы, используемые в алгоритмах ............153 Глава 12. Что такое эргономичный текст?..................................................184 Глава 13. Алгоритмы реального времени ...................................................205 Глава 14. Параллельные алгоритмы .............................................................222 Глава 15. Дракон-схемы и блок-схемы ........................................................242 Глава 16. Коротко о программировании .....................................................255 Часть III. Алгоритмы практической жизни (примеры) ...267 Глава 17. Алгоритмы в медицине ..................................................................269 Глава 18. Алгоритмы в промышленности ..................................................277 Глава 19. Алгоритмы в торговле ....................................................................286 4 СОДЕРЖАНИЕ Глава 20. Алгоритмы бухгалтерского учета ...............................................293 Глава 21. Алгоритмы в атомной энергетике ..............................................301 Глава 22. Алгоритмы в биологии ...................................................................312 Глава 23. Алгоритмы в сельском хозяйстве ...............................................325 Глава 24. Алгоритмы в средней школе.........................................................331 Глава 25. Алгоритмы государственного и муниципального управления ........................................................................................344 Часть IV. Математические алгоритмы (примеры) ..........349 Глава 26. Простые математические алгоритмы .......................................351 Глава 27. Алгоритмы с массивами ................................................................356 Глава 28. Алгоритмы поиска данных ...........................................................360 Глава 29. Рекурсивные алгоритмы ...............................................................365 Часть V. Заключительные рекомендации по созданию дракон-схем................................369 Глава 30. Рекомендации по использованию алгоритмических структур «силуэт» и «примитив» ..............................................371 Глава 31. Как улучшить понятность веток? ...............................................377 Часть VI. Конструктор алгоритмов и формальное описание языка .............................................393 Глава 32. Конструктор алгоритмов (помощник человека) ...................395 Глава 33. Графический синтаксис языка ДРАКОН ................................416 Часть VII. Теоретические основы языка ДРАКОН ............425 Глава 34. Исчисление икон ..............................................................................427 Глава 35. Метод Ашкрофта-Манны и алгоритмическая структура «силуэт»..........................................................................436 Глава 36. Визуальный структурный подход к алгоритмам и программам (шампур-метод) ...................................................449 Часть VIII. Какую роль играют алгоритмы в человеческой культуре? ............................473 Глава 37. Алгоритмическое мышление .......................................................475 Глава 38. Алгоритмы и улучшение работы ума .......................................480 Глава 39. Алгоритмическое мышление и две группы людей ...............488 Глава 40. Как ликвидировать алгоритмическую неграмотность? ......493 Глава 41. Необходимость культурных изменений ..................................497 СОДЕРЖАНИЕ 5 Алгоритмы должны быть понятными (вместо заключения) ..................................504 Литература ..................................................................508 Основная литература по языку ДРАКОН .........................514 Применение языка ДРАКОН в ракетно-космической отрасли ......................................................515 Предметный указатель.................................................516 ВВЕДЕНИЕ ЧТО МЫ ЗНАЕМ ОБ АЛГОРИТМАХ? Многие думают, что алгоритмы нужны только программистам и математикам. Это не так. Алгоритмы могут пригодиться всем или почти всем. Начиная от врача и агронома и кончая топ-менеджером. Почему? Потому что мы живем в мире алгоритмов, хотя зачастую не догадываемся об этом. Современная цивилизация – это цивилизация алгоритмов. Они окружают нас повсюду. К сожалению, большинство людей не умеют читать, писать и понимать алгоритмы. Впрочем, это дело поправимое. Прочитав книгу, вы быстро получите нужные знания. Как известно, один рисунок стоит тысячи слов. К вашим услугам – четкие, кристально ясные и забавные рисунки. Сделанные так, чтобы читатель «посмотрел – и сразу понял!». Они помогут легко открыть заветную дверь в увлекательное царство алгоритмов. В ЧЕМ ПРОБЛЕМА? Трудность в том, что алгоритмы, как правило, очень сложны. Понять их непросто. Нужно изрядно попотеть, затратить много труда и времени. А нельзя ли найти обходную дорогу и сэкономить время? Конечно, можно! Секрет в том, что алгоритмы надо сделать дружелюбными. Это позволит превратить головоломки в наглядные алгоритмы-картинки, обеспечивающие быстрое и глубокое понимание. Глубина понимания сложных проблем – как раз то, чего всем нам (от студента до министра) ой как не хватает! Почему алгоритмы трудны для понимания? Потому, что существующий способ записи алгоритмов (принятый во всем мире) выбран неудачно. Он устарел и превратился в досадное препятствие. Он удовлетворяет требованиям математической строгости, но не учитывает требования науки о человеческих факторах – эргономики. Этот устаревший способ упускает из виду психофизиологические характеристики человека-алгоритмиста. И тем самым затрудняет и замедляет работу с алгоритмами. 7 ВВЕДЕНИЕ ЛЕГКИЕ ДЛЯ ПОНИМАНИЯ И УДОБНЫЕ ДЛЯ РАБОТЫ В книге излагается новый взгляд на алгоритмы. Мы покажем, что алгоритмы должны быть не только правильными, но и дружелюбными. То есть легкими для понимания и удобными для работы. Этой благородной цели служат эргономичные алгоритмические языки. Они создают повышенный интеллектуальный комфорт, увеличивают продуктивность труда. С их помощью вы научитесь легко и быстро, затратив минимум усилий, решать сложнейшие проблемы. Вы сможете проектировать сложную деятельность и бизнес-процессы. Формализовать свои профессиональные знания. И составлять алгоритмы самостоятельно, без помощи программистов. Алгоритмы – важная часть человеческой культуры. Умение составлять алгоритмы позволяет улучшить работу ума. Несколько преувеличивая, можно сказать: «Алгоритмы – вторая грамотность!». БЛОК-СХЕМЫ АЛГОРИТМОВ Существует несколько способов для записи алгоритмов. Широкую известность получили блок-схемы алгоритмов. Они используются в системе образования для первоначального ознакомления с алгоритмами (см. например, [1–3]). Международная организация стандартизации ISO выпустила стандарт на блок-схемы ISO 5807–85 [4]. Ему соответствует отечественный стандарт ГОСТ 19.701–90 [5]. Тем не менее, многие специалисты убеждены, что блок-схемы – это вчерашний день. Можно сказать, что блок-схемы постигла печальная участь. Истина в том, что они обладают поистине удивительными достоинствами, которые остаются нераскрытыми. Без преувеличения можно сказать, что блок-схемы алгоритмов – это бесценный бриллиант, который по воле мачехи-судьбы до сих пор не огранен и не вставлен в золотую оправу. Хотя имеются отдельные попытки приспособить блок-схемы к современным нуждам (язык UML и др.), однако в целом блок-схемы явно оказались на обочине бурно развивающегося процесса визуализации алгоритмов. А их громадные потенциальные возможности фактически не используются. Данная книга посвящена блок-схемам. В ней изложен новый подход к решению проблемы блок-схем. Наш труд можно рассматривать как дальнейшее развитие плодотворной идеи изобретателя блок-схем Джона фон Неймана. 8 ВВЕДЕНИЕ Мы покажем, что именно блок-схемы могут придать алгоритмам новую чарующую силу, небывалую наглядность и другие полезные свойства. ДРАКОН-СХЕМЫ И ЯЗЫК «ДРАКОН» Блок-схемы нужно значительно улучшить, сделать математически строгими и эргономически привлекательными. Во избежание путаницы мы присвоили новым блок-схемам название «дракон-схемы». Дракон-схемы отличаются от традиционных блок-схем, как небо от земли. Они позволяют построить семейство дружелюбных алгоритмических языков под общим названием ДРАКОН (Дружелюбный Русский Алгоритмический язык, Который Обеспечивает Наглядность) [6, 7]. Визуальный язык ДРАКОН обладает уникальными эргономическими характеристиками. Он позволяет легко и быстро создавать дружелюбные и наглядные алгоритмы. ДРАКОН – оружие интеллекта. Он помогает ясно и четко мыслить. И значительно облегчает творческий процесс создания алгоритмов, делая его доступным для широкого круга работников. КТО РАЗРАБОТАЛ ЯЗЫК ДРАКОН? Язык ДРАКОН разработан совместными усилиями Федерального космического агентства России (Научно-производственный центр автоматики и приборостроения им. академика Н. А. Пилюгина, г. Москва) и Российской академии наук (Институт прикладной математики им. академика М. В. Келдыша, г. Москва). ДРАКОН РОДИЛСЯ В КОСМИЧЕСКОЙ КОЛЫБЕЛИ ДРАКОН возник как обобщение опыта работ по созданию космического корабля «Буран». На базе ДРАКОНа построена автоматизированная Технология проектирования алгоритмов и программ под названием «ГРАФИТ-ФЛОКС». Она успешно используется во многих крупных ракетно-космических проектах: «Морской старт», «Фрегат», «Протон-М» и др. ДРАКОН В СИСТЕМЕ ОБРАЗОВАНИЯ В 1996 году Государственный комитет по высшему образованию Российской Федерации включил изучение языка ДРАКОН в программу курса информатики высшей школы. Этот факт нашел отражение в официальном документе Госкомвуза под названием: 9 ВВЕДЕНИЕ «Примерная программа дисциплины «Информатика» для направлений: 510000 – Естественные науки и математика 540000 – Образование 550000 – Технические науки 560000 – Сельскохозяйственные науки Издание официальное. М.: Госкомвуз, 1996. – 21 с. Авторы программы: Кузнецов В. С., Падалко С. Н., Паронджанов В. Д., Ульянов С. А. Научные редакторы: Падалко С. Н., Паронджанов В. Д.» [8]. Примечание. Этот документ официально узаконил изучение языка ДРАКОН в системе образования. ЧТО ТАКОЕ ЭРГОНОМИЧНЫЙ? В этой книге важную роль играет слово «эргономичный». Что оно означает? Чтобы не тратить лишних слов, мы сочиним краткий словарик, который, хотя и нарушает все каноны научной строгости, зато вполне понятен новичкам. Словарик Эргономика – наука о том, как превратить сложную и трудную работу в простую, легкую и приятную. Когнитивная эргономика – наука о том, как облегчить и улучшить умственную работу. Эргономичный – дружелюбный, легкий для понимания, удобный для работы. Эргономичный алгоритм – дружелюбный, легкий для понимания алгоритм. Эргономичный алгоритмический язык – дружелюбный, легкий для понимания и удобный в работе алгоритмический язык. Эргономизация алгоритма – превращение недружелюбного алгоритма в дружелюбный. Эргономизация алгоритмического языка – превращение недружелюбного алгоритмического языка в дружелюбный. 10 ВВЕДЕНИЕ ЦЕЛЬ КНИГИ Наша цель – научить читателя самостоятельно создавать дружелюбные, то есть легкие для понимания алгоритмы. И показать, что это простое и даже приятное дело. На многочисленных примерах читатель убедится, что дружелюбные алгоритмы имеют огромные преимущества. Чем понятнее алгоритм, тем легче уяснить его смысл. Чем прозрачнее смысл, тем лучше взаимопонимание между людьми. Чем меньше ошибок, тем выше производительность труда при разработке алгоритмов. Чем меньше усилий затрачивают алгоритмисты, тем быстрее они выполняют свою работу. АЛГОРИТМИЗАЦИЯ И ПРОГРАММИРОВАНИЕ В этой книге мы не будем касаться вопросов программирования. И сосредоточим внимание исключительно на алгоритмах. Алгоритмизация и программирование – разные вещи. Подчеркнем главное. Число людей, которым необходимо знать алгоритмы, во много раз превышает число людей, которым надо знать программирование. Разумеется, современное общество нуждается в программистах. Но обучение программистов должно быть не массовым, а экономически обоснованным. И наоборот, обучение алгоритмизации должно быть очень широким или даже массовым. Потому что алгоритмы нужны не только программистам, но и многим другим людям. В обществе знаний во многих случаях возникает необходимость формализовать собственные процедурные профессиональные знания специалистов. Отсюда проистекает Вывод. Умение читать, писать и понимать алгоритмы – настоятельная необходимость. Такое умение должно стать частью профессиональной культуры специалистов почти всех специальностей. Эта мысль проходит красной нитью через всю книгу. СОДЕРЖАНИЕ КНИГИ Книга состоит из восьми частей. Часть I (главы 1, 2) носит вводный характер. Приводятся забавные примеры алгоритмов, описывающих бытовую человеческую деятельность. ВВЕДЕНИЕ 11 В части II (главы 3–16) изложен эргономичный алгоритмический язык ДРАКОН. Рассмотрены графический алфавит языка, алгоритмические структуры «силуэт» и «примитив». Представлены математические методы, позволяющие улучшить понятность алгоритмов. Показан богатый ассортимент визуальных (графических) цикличных алгоритмов, визуальная логика, системы реального времени и параллельные алгоритмы. Для удобства читателя изложение основных идей дается на наглядных примерах. Часть III (главы 17–25) содержит большое число алгоритмов на языке ДРАКОН, взятых из практической жизни. Примеры демонстрируют универсальность языка, показывают широкий спектр его возможностей для различных отраслей и предметных областей. Сюда относятся медицина, промышленность, сельское хозяйство, торговля и многое другое. В части IV (главы 26–29) читатель вкратце знакомится с математическими алгоритмами. Примеры демонстрируют работу с массивами, поиск данных и др. В части V (главы 30, 31) даются заключительные рекомендации по созданию дракон-схем. Даны рекомендации по использованию алгоритмических структур «силуэт» и «примитив». Описывается метод дробления веток, позволяющий улучшить понятность алгоритмической структуры «силуэт». В части VI (главы 32, 33) описывается компьютерная программа «конструктор алгоритмов». Она представляет собой рабочий инструмент, помогающий человеку придумывать и конструировать алгоритмы. Приводится формальное описание языка ДРАКОН. Часть VII (главы 34–36) – наиболее сложная часть книги. Здесь даны теоретические основы языка ДРАКОН. Часть VIII (главы 37–41) посвящена социальным, гуманитарным и культурным аспектам алгоритмизации. Обсуждается вопрос: как ликвидировать алгоритмическую неграмотность? ГДЕ СКАЧАТЬ КОНСТРУКТОР АЛГОРИТМОВ? Ответ дан на стр. 414. В ДОБРЫЙ ПУТЬ! Прочитав книгу, читатель сможет легко ориентироваться в империи алгоритмов. И убедиться, что язык ДРАКОН – удобное средство, помогающее создавать наглядные и понятные алгоритмы. Конструктор алгоритмов – надежный помощник человека. Он умело подсказывает, как нужно составлять алгоритмы. Кроме того, он осуществляет 100%-е автоматическое доказательство правильности дракон-схем, гарантируя принципиальную невозможность ошибок визуального синтаксиса. Иными словами, конструктор алгоритмов полностью исключает ошибки графического синтаксиса. 12 ВВЕДЕНИЕ Безошибочное проектирование графики дракон-схем – важный шаг вперед, повышающий производительность труда при практической работе. По мнению специалистов, управляющая графика ДРАКОНа является мощным инструментом, причем ее мощь легка в освоении и легко применима на практике. Часть I АЛГОРИТМЫ (ОБЛЕГЧЕННЫЙ МАТЕРИАЛ ДЛЯ ПЕРВОГО ЗНАКОМСТВА) Глава 1 АЛГОРИТМЫ – ЭТО ОЧЕНЬ ПРОСТО! §1. ПЕРВОЕ ЗНАКОМСТВО С АЛГОРИТМОМ Предположим, мать говорит сыну: «Сходи в булочную. Купи батон белого и батон черного». Слова матери – алгоритм, показанный на рис. 1. Данный алгоритм нельзя признать удачным. Он не отвечает на вопрос: что делать, если в магазине нет хлеба. Чтобы исправить оплошность, нужно придумать другой алгоритм, который учитывает реальные условия. Предположим, в булочной черный хлеб водится всегда, а с белым случаются перебои. В таком случае мать могла бы сказать: «Купи батон белого и батон черного. Если белого не будет, возьми два черного». Словесная формулировка этого алгоритма показана на рис. 2, а блок-схема – на рис. 3. К последнему алгоритму тоже можно придраться. Как быть, если в продаже нет черного хлеба? Чтобы учесть все варианты, мать должна дать сыну более сложную инструкцию: «Сходи за хлебом. Один батон белого и один черного. 16 ЧАСТЬ 1. АЛГОРИТМЫ (ОБЛЕГЧЕННЫЙ МАТЕРИАЛ ДЛЯ ПЕРВОГО ЗНАКОМСТВА) Белого не будет – купи два черного. И наоборот. А если никакого нет, обойдемся». Соответствующая блок-схема показана на рис. 4. ГЛАВА 1. АЛГОРИТМЫ – ЭТО ОЧЕНЬ ПРОСТО! 17 §2. СРАВНЕНИЕ АЛГОРИТМОВ Взглянем на три алгоритма на рис. 1, 3, 4. Какой из них следует считать хорошим, а какой – плохим? Алгоритм считается хорошим, если он правильно работает при всех реальных условиях. В противном случае алгоритм считается плохим. 18 ЧАСТЬ 1. АЛГОРИТМЫ (ОБЛЕГЧЕННЫЙ МАТЕРИАЛ ДЛЯ ПЕРВОГО ЗНАКОМСТВА) Применим это правило к нашим алгоритмам. Легко видеть, что только один алгоритм (рис. 4) будет работать при любых условиях. В самом деле, если в булочной есть и белый, и черный хлеб, воображаемый «бегунок» побежит от начала к концу алгоритма по левой вертикальной линии. Если белый есть, а черного нет, бегунок помчится чуть правее – через икону «Купи два батона белого». Если белого нет, а черный есть, бегунок побежит еще правее – через икону «Купи два батона черного». Наконец, если в булочной вообще нет хлеба, бегунок выберет крайний правый путь – через икону «Хлеба нет. Придется идти домой с пустыми руками». Что же мы узнали? Алгоритм на рис. 4 – хороший алгоритм, так как он выполняет свою работу при любых условиях. И наоборот, алгоритмы на рис. 1 и 3 – это плохие, «неполноценные» алгоритмы. Можно сказать и по-другому. Алгоритм на рис. 4 – правильный, безошибочный, работоспособный алгоритм. А схемы на рис. 1 и 3 не отвечают на вопрос: что делать, если в булочной нет хлеба. Значит, эти алгоритмы неработоспособны; они содержат ошибку. На рис. 4 ошибка исправлена. §3. ЧТО ТАКОЕ ДРАКОН-СХЕМЫ? ЗАЧЕМ НУЖНЫ ИКОНЫ? Блок-схемы, нарисованные по правилам языка ДРАКОН, называются дракон-схемы. Они состоят из простых рамок – икон, соединенных между собой. На рис. 1 таких икон семь. Верхняя называется «заголовок». Та, что пониже – «комментарий». Следующие четыре – «действие». А самая нижняя – «конец». Что такое «Заголовок» Овальная икона, расположенQ ная в самом начале схемы. Внутри нее пишут название алгоритма Что такое «Действие» Прямоугольная икона, внутри которой пишут команды алгоритма Что такое «Комментарий» Прямоугольная икона с двойной рамкой, внутри которой пишут не команды, а пояснения 19 ГЛАВА 1. АЛГОРИТМЫ – ЭТО ОЧЕНЬ ПРОСТО! Что такое «Конец» Маленькая овальная икона, расположенная в самом конце алгоритма. Внутри нее пишут слово «Конец» §4. АЛГОРИТМ Каждый человек, находясь на работе, ведет себя отнюдь не случайно. Он стремится к четко определенной цели и выполняет нужные для этого действия. Таким образом, любую работу (за исключением сложных творческих операций) можно рассматривать как хорошо определенный каскад действий, то есть алгоритм. Нетрудно заметить, что алгоритмы окружают нас повсюду. Алгоритм – последовательность шагов, ведущих к цели. Можно сказать и по-другому. Алгоритм – последовательность команд, помогающих решить задачу. Что такое алгоритм Это последовательность действий, ведущих к поставленной цели Команды алгоритма можно записать по-разному, например: • в виде дракон-схемы; • в виде текста. Чтобы убедиться в этом, взгляните на рис. 5. 20 ЧАСТЬ 1. АЛГОРИТМЫ (ОБЛЕГЧЕННЫЙ МАТЕРИАЛ ДЛЯ ПЕРВОГО ЗНАКОМСТВА) §5. КАЖДАЯ КОМАНДА АЛГОРИТМА ДОЛЖНА ВЫПОЛНЯТЬСЯ ТОЧНО И ОДНОЗНАЧНО Рассмотрим алгоритм на рис. 6. Предположим, алгоритм выполняет робот. Робот – типичный буквоед. Обычно педантов и буквоедов не любят. Но в мире алгоритмов свои законы. Там буквоеды в большом почете. Чтобы робот понял алгоритм, каждая команда должна быть написана «побуквоедски». Точно и однозначно. На рис. 6 алгоритм написан именно так – точно и однозначно. Там ясно сказано – надо купить килограмм картошки и кочан капусты. Это значит, что любые другие покупки запрещены. А что мы видим на рис. 7? Тут ситуация иная. Команда «Купи продукты» – плохая, неоднозначная команда. Ее невозможно исполнить. Потому что нигде не сказано, какие именно продукты нужно купить. Такие умолчания в алгоритмах недопустимы. Они рассматриваются, как ошибки. Выполните упражнение на рис. 8. §6. ИКОНА «ВОПРОС» В верхней части рис. 9 изображена икона «вопрос». Она называется так потому, что внутри нее пишут «да-нетный вопрос». То есть вопрос, на который можно ответить либо «да», либо «нет». Все другие ответы запрещены. ГЛАВА 1. АЛГОРИТМЫ – ЭТО ОЧЕНЬ ПРОСТО! 21 Вот примеры да-нетных вопросов: утюг сломался? Вася купил хлеб? Поезд пришел? Преступника арестовали? Тетя приехала? «Спартак» выиграл? Эта лужа больше, чем та? На улице температура выше нуля? Икона «вопрос» имеет один вход сверху и два выхода: вниз и вправо. Выход влево запрещен и никогда не используется. Бывают случаи, когда нужно выбрать одно действие из двух. В этом случае удобно использовать икону «вопрос». При ответе «да» выполняется одно действие, при «нет» – другое. Икона «вопрос» нужна, чтобы сделать в алгоритме развилку. В этом легко убедиться, взглянув на рис. 9. 22 ЧАСТЬ 1. АЛГОРИТМЫ (ОБЛЕГЧЕННЫЙ МАТЕРИАЛ ДЛЯ ПЕРВОГО ЗНАКОМСТВА) Иногда в алгоритме надо сделать не одну, а много развилок. Для этого используют несколько икон «Вопрос» (рис. 4). Что такое «Вопрос» x x Ромб, у которого отрезаны верхний и нижний углы. Внутри фигуры пишут даQнетный вопрос, то есть вопрос, на который можно ответить либо «да», либо «нет». §6. ВЫВОДЫ 1. Умение выразить свою мысль в виде алгоритма имеет много преимуществ. Такое умение пригодится почти каждому – ведь оно делает интеллект более гибким и эффективным. 2. Алгоритмы играют огромную роль в жизни общества. Они оказывают заметное влияние на эффективность экономики, уровень жизни, а также на умственное развитие цивилизации. Глава 2 АЛГОРИТМЫ И ПРОЦЕДУРНЫЕ ЗНАНИЯ §1. ПРОЦЕДУРНЫЕ И ДЕКЛАРАТИВНЫЕ ТЕКСТЫ Давайте совершим экскурсию в библиотеку. На полках стоят тысячи книг. Толстых и тонких. Художественных и научных. Всяких. Все тексты в книгах можно разделить на две части: • процедурные, • декларативные. Чтобы уяснить, чем они различаются, обратимся к таблице 1. Таблица 1 Это процедурный текст Скинь мантилью, ангел милый, И явись, как яркий день! Сквозь чугунные перилы Ножку дивную продень! Это декларативный текст По синим волнам океана, Лишь звезды блеснут в небесах, Корабль одинокий несется, Несется на всех парусах. Текст в левом столбце при желании можно превратить в набор команд: 1. Скинь мантилью. 2. Явись, как ясный день. 3. Продень ножку сквозь перила. Текст в правом столбце такому преобразованию не поддается. Его невозможно превратить в команды. Рассмотрим еще один пример (табл. 2). Таблица 2 Это процедурный текст Сходи к бабушке, возьми у нее телевизор и отнеси в ремонт. Это декларативный текст Телевизор был старый, покрытый толстым слоем пыли. Видимо, им уже давно не пользовались. 24 ЧАСТЬ 1. АЛГОРИТМЫ (ОБЛЕГЧЕННЫЙ МАТЕРИАЛ ДЛЯ ПЕРВОГО ЗНАКОМСТВА) Левый текст без труда превращается в команды: 1. Сходи к бабушке. 2. Возьми у нее телевизор. 3. Отнеси его в ремонт. Правый текст имеет принципиально иную логическую структуру. Как ни старайся, как ни хитри, а в команды его не превратишь! Если текст содержит достоверные и обоснованные сведения, такие сведения называются знанием. Что такое процедурные знания Что такое декларативные знания Это знания о действиях, планах, процессах и инструкциях, которые можно легко превратить в последовательность команд Это описания различных фактов и явлений, которые невозможно превратить в последовательность команд §2. КАК ПРЕВРАТИТЬ ПРОЦЕДУРНОЕ ЗНАНИЕ В АЛГОРИТМ? В верхней части рис. 10 находится текст, содержащий процедурное знание. Это знание можно превратить в дракон-схему (алгоритм). Пробежим взглядом по схеме сверху вниз. Мы обнаружим, что алгоритм нарисован не хаотично, а упорядоченно. Тут действует Правило. Чем ниже нарисована икона, тем позже выполняется записанная в ней команда. (Для краткости: «Чем ниже – тем позже»). Данное правило выполняется во всех алгоритмах. Здесь нас поджидает сюрприз. Переведем взгляд со схемы на исходный текст. Налицо разительный контраст – в тексте данное правило не соблюдается! Таким образом, алгоритм сильно отличается от исходного текста. В чем отличие? А вот в чем – порядок записи команд коренным образом изменился. Это хорошо видно на рис. 11. Первая команда текста (Сходи к бабушке) в алгоритме стала не пер• вой, а второй. команда текста (возьми у нее телевизор) переехала совсем в • Вторая другое место. ГЛАВА 2. АЛГОРИТМЫ И ПРОЦЕДУРНЫЕ ЗНАНИЯ 25 команда текста (и отнеси его в ремонт) стала предпослед• Третья ней. Четвертая команда текста (На случай, если бабушки не будет дома) • сохранила свое место – осталась четвертой. наконец, самое удивительное! Последняя команда текста (возьми • Ис собой ключ от ее квартиры) перескочила из конца в начало. В алгоритме она стала самой первой. Как можно объяснить эти чудесные превращения? Ответ довольно прост. Исходный текст, представленный на рис. 10 и 11, написан на естественном языке. В этом языке закон «Чем ниже – тем позже» не действует. А в алгоритме ситуация обратная. Там этот закон – святая святых и обязательно исполняется. Отсюда вытекает Правило преобразования процедурного текста в алгоритм Чтобы превратить процедурное знание, записанное на естественном языке, в дракон-схему, необходимо: исходный текст на фрагменты, чтобы в каждом фраг• расчленить менте содержалась одна команда; команды в виде упорядоченной последовательности • записать согласно принципу «Чем ниже – тем позже»; • добавить иконы «заголовок» и «конец»; необходимости внести дополнительные команды, устраняю• при щие пробелы исходного текста и превращающие дракон-схему в логически законченный алгоритмический рассказ. Примечание. На рис. 10 и 11 дополнительными командами являются: в дверь. • Позвони Открой дверь своим ключом. • Войди в квартиру. • §3. МАТЕМАТИЧЕСКИЕ И «БЫТОВЫЕ» АЛГОРИТМЫ Во многих учебниках описаны математические алгоритмы. Это хорошо, но мало. Разумеется, студенты должны назубок знать математику. Но в жизни бывают неожиданности. Некоторые студенты, овладев математикой, затрудняются составлять алгоритмы, в которых отсутствуют математические формулы. Чтобы избежать подобных неприятностей, студенты должны уметь распознавать «нематематические» алгоритмы, которые постоянно встречаются в жизни. 26 ЧАСТЬ 1. АЛГОРИТМЫ (ОБЛЕГЧЕННЫЙ МАТЕРИАЛ ДЛЯ ПЕРВОГО ЗНАКОМСТВА) ГЛАВА 2. АЛГОРИТМЫ И ПРОЦЕДУРНЫЕ ЗНАНИЯ 27 28 ЧАСТЬ 1. АЛГОРИТМЫ (ОБЛЕГЧЕННЫЙ МАТЕРИАЛ ДЛЯ ПЕРВОГО ЗНАКОМСТВА) Такие алгоритмы можно условно назвать «бытовыми». Приведем пример. Перед нами стихотворение Генриха Гейне. Вставай, слуга! Коня седлай! Чрез рощи и поля Скачи скорее ко двору Дункана-короля. Зайди в конюшню там и жди. И, если кто войдет, Спроси: «Которую Дункан Дочь замуж выдает?» Коль чернобровую – лети Во весь опор назад. Коль ту, что с русою косой, Спешить не надо, брат. Тогда ступай на рынок ты, Купи веревку там, Вернися шагом и молчи – Я догадаюсь сам. Это стихотворение легко превращается в алгоритм (рис. 12). Там же виден кусочек декларативного знания, которое записано в иконе «комментарий» – («Я догадаюсь сам»). §4. ЧТО ТАКОЕ ПЕРЕКЛЮЧАТЕЛЬ? Схема на рис. 13 позволяет сделать в алгоритме развилку на три направления. Для этого используются две иконы «вопрос». Однако задачу можно решить и по-другому – с помощью переключателя (рис. 14). Переключатель – разветвление алгоритма на несколько тропинок, которые потом сливаются в одну. Переключатель – сложная структура. Она строится из простых кирпичиков. Такими кирпичиками служат иконы «выбор» и «вариант». Зачем они нужны? Икона «выбор» содержит вопрос, имеющий несколько ответов. Каждый ответ пишут в отдельной рамочке – иконе «вариант». Пример 1. На рис. 12 в иконе «вариант» записан вопрос: «Какую дочь Дункан выдает замуж?». На этот вопрос есть два ответа, записанные в иконах «вариант»: • чернобровую; • с русою косой. ГЛАВА 2. АЛГОРИТМЫ И ПРОЦЕДУРНЫЕ ЗНАНИЯ 29 30 ЧАСТЬ 1. АЛГОРИТМЫ (ОБЛЕГЧЕННЫЙ МАТЕРИАЛ ДЛЯ ПЕРВОГО ЗНАКОМСТВА) 31 ГЛАВА 2. АЛГОРИТМЫ И ПРОЦЕДУРНЫЕ ЗНАНИЯ Пример 2. На рис. 14 картина иная. На первый взгляд там нет вопроса. Однако на самом деле вопрос есть, правда неявный. Чтобы убедиться, слово «светофор» прочитаем так: «Какой сигнал светофора сейчас горит?». На этот вопрос есть три ответа: • зеленый, • желтый, • красный. Попробуем описать, как работает переключатель. Описание всегда начинается со слова «если». Вот примеры. Дункан выдает замуж чернобровую дочь – лети во весь опор • Если назад. Дункан выдает замуж дочь с русою косой – ступай на рынок, • Если купи веревку, вернись шагом и молчи (рис. 12). светофор зеленый – жми на газ. • Если Если светофор желтый – притормози. • Если светофор красный – стой (рис. 14). • Дополнительный пример показан на рис. 15. x Что такое переключатель x Это часть алгоритма, имеющая один вход и один выход, внутри которой алгоритм разветвляется на несколько дорожек Переключатель строится с помощью икон «выбор» и «вариант» Что такое «выбор» Что такое «вариант» x x Икона, которую рисуют в начале переключателя В ней пишут вопрос, имеюQ щий два и более ответов Икона переключателя, в которой пишут ответ на вопрос §5. БЛОК-СХЕМЫ АЛГОРИТМОВ Блок-схема – чертеж алгоритма, описывающий последовательность действий с помощью графических фигур и соединительных линий. Это поучительная часть истории алгоритмов. 32 ЧАСТЬ 1. АЛГОРИТМЫ (ОБЛЕГЧЕННЫЙ МАТЕРИАЛ ДЛЯ ПЕРВОГО ЗНАКОМСТВА) На рис. 16 показаны наиболее употребительные фигуры, используемые при вычерчивании блок-схем. Они соответствуют международному стандарту ISO 5807–85 и отечественному ГОСТ 19.701-90. Хотя стандарты на блок-схемы считаются действующими, фактически они давно устарели. С появлением дракон-схем блок-схемы полностью потеряли свое значение, так как они во всех отношениях уступают дракон-схемам. (Подробнее см. главу 15). §6. АНАЛОГИ ДРАКОН-СХЕМ Аналогами дракон-схем являются блок-схемы алгоритмов, диаграммы Насси-Шнейдермана, псевдокод (язык описания алгоритмов) и др. Другим аналогом дракон-схем служат диаграммы поведения (behaviour diagrams) ГЛАВА 2. АЛГОРИТМЫ И ПРОЦЕДУРНЫЕ ЗНАНИЯ 33 34 ЧАСТЬ 1. АЛГОРИТМЫ (ОБЛЕГЧЕННЫЙ МАТЕРИАЛ ДЛЯ ПЕРВОГО ЗНАКОМСТВА) языка UML, в частности, диаграмма деятельности (activity diagram), диаграмма состояний (UML state machine diagram) и некоторые диаграммы взаимодействия (interaction diagrams), например, диаграмма синхронизации (timing diagram). §7. ВЫВОДЫ 1. Знания, выраженные с помощью любого письменного языка, можно разбить на две части: процедурные знания; декларативные знания. 2. Правильно записанные процедурные знания всегда можно превратить в алгоритм. 3. Учащиеся должны уметь: писать, читать и понимать алгоритмы; распознавать алгоритмы, которые встречаются в окружающей жизни, и записывать их. 4. Блок-схемы алгоритмов безнадежно устарели. Пользоваться ими недопустимо. Вместо них следует использовать дракон-схемы. • • • • Часть II АЛГОРИТМИЧЕСКИЙ ЯЗЫК ДРАКОН И УДОБНЫЕ ЧЕРТЕЖИ АЛГОРИТМОВ (ДРАКОН-СХЕМЫ) Глава 3 ИКОНЫ И МАКРОИКОНЫ ЯЗЫКА ДРАКОН §1. ПРЕИМУЩЕСТВА ДРАКОН-СХЕМ Чем же отличаются дракон-схемы от блок-схем? Хотя блок-схемы порою действительно улучшают понятность алгоритмов, однако это происходит не всегда, причем степень улучшения невелика. Кроме того, есть немало случаев, когда неудачно выполненные блок-схемы запутывают дело и затрудняют понимание. В отличие от них дракон-схемы отличаются безупречной ясностью, прозрачностью, четкостью. Они обеспечивают быстроту и легкость понимания по принципу: «Посмотрел – и сразу понял!». Благодаря использованию формальных и неформальных приемов дракон-схемы дают возможность изобразить любой, сколь угодно сложный алгоритм в наглядной и доходчивой форме. Это позволяет значительно сократить интеллектуальные усилия персонала, необходимые для разработки и проверки алгоритмов. И последнее. Блок-схемы не обеспечивают автоматическое преобразование алгоритма в машинный код. Дракон-схемы, напротив, отличаются математической строгостью. Они пригодны для автоматического получения кода и исполнения его на компьютере. §2. ИКОНЫ Чтобы графический язык стал гибким и выразительным, нужно тщательно спроектировать алфавит языка, сделать его стандартным и эргономичным. Графоэлементы (графические буквы) языка ДРАКОН называются иконами (рис. 17). В языке ДРАКОН 26 икон. Столь богатый алфавит обладает большой выразительной силой. Он позволяет изобразить алгоритмы любой сложности, включая параллельные процессы и процессы реального времени. И обеспечить максимальную наглядность и понятность полученной картинки. 38 ЧАСТЬ 2. АЛГОРИТМИЧЕСКИЙ ЯЗЫК ДРАКОН И УДОБНЫЕ ЧЕРТЕЖИ АЛГОРИТМОВ ГЛАВА 3. ИКОНЫ И МАКРОИКОНЫ ЯЗЫКА ДРАКОН 39 §3. МАКРОИКОНЫ Подобно тому, как буквы объединяются в слова, иконы объединяются в составные иконы – макроиконы (рис. 18). Макроиконы – это составные алгоритмические структуры. 40 ЧАСТЬ 2. АЛГОРИТМИЧЕСКИЙ ЯЗЫК ДРАКОН И УДОБНЫЕ ЧЕРТЕЖИ АЛГОРИТМОВ Соединяя иконы и макроиконы по определенным правилам, можно строить разнообразные алгоритмы. Примеры алгоритмов в изобилии представлены на страницах книги. §4. ШАМПУР-БЛОК Что такое шампурQблок x x Это часть драконQсхемы, имеющая один вход сверху и один выход снизу Вход и выход шампурQблока всегда расположены на одной вертикали Примерами шампур-блоков являются иконы И3, И5–И10, И12–И16, И18, И20, И21 (рис. 17) и макроиконы 2–20 (рис. 18). §5. КАКИЕ ИКОНЫ И МАКРОИКОНЫ НАМ УЖЕ ЗНАКОМЫ? Взглянем на рис. 17. Попытаемся найти иконы, которые нам уже встречались. В главах 1 и 2 мы видели иконы И1 (заголовок), И2 (конец), И3 (действие), И4 (вопрос), И5 (выбор), И6 (вариант), И21 (комментарий). Глядя на рис. 18, мы можем опознать две макроиконы: развилку и переключатель. Остальные иконы и макроиконы мы пока не знаем. Они будут описаны в следующих главах. §6. ВЫВОДЫ 1. 2. 3. 4. Графический алфавит языка ДРАКОН содержит 26 икон. Иконы объединяются в составные иконы – макроиконы. В языке ДРАКОН имеется 20 макроикон. При построении дракон-схем используются иконы и макроиконы. Глава 4 АЛГОРИТМИЧЕСКАЯ СТРУКТУРА «СИЛУЭТ» §1. ОСНОВНАЯ СТРУКТУРА ЯЗЫКА ДРАКОН Конструкция «силуэт» – чрезвычайно мощный инструмент. Она обеспечивает большие удобства для пользователя. Данная конструкция не имеет аналогов в других алгоритмических языках. Основным элементом силуэта является «ветка». С нее-то мы и начнем. §2. ЗАЧЕМ НУЖНА ВЕТКА? Когда принцесса Анна развелась с маркизом Ришелье, возник спор о разделе имущества. Судья потребовал указать: какие покупки принцесса сделала до замужества, а какие после. А теперь забудем об этой семейной драме и сравним между собой рис. 19 и 20. Легко видеть, что рис. 19 не позволяет ответить на вопрос судьи. Зато рис. 20, наоборот, содержит нужную информацию. Более того, алгоритм на рис. 20 нарочно нарисован так, что покупки, сделанные до и после замужества, четко разделены на два столбика. Такой прием называется делением алгоритма на смысловые части. А сами части называются ветками. Разберем еще один пример. На рис. 21 представлен алгоритм «Поход за грибами», содержащий довольно большую последовательность действий. Иной раз такая последовательность может оказаться чрезмерно длинной и утомительной для чтения. Можно ли облегчить восприятие и анализ подобных «длиннющих» алгоритмов? Можно ли сделать «долговязый» алгоритм обозримым и удобным для быстрого понимания? Да, можно. Чтобы облегчить работу читателя и сделать алгоритм эргономичным, надо заблаговременно разрезать «длинную кишку» и разбить ее на смысловые части. Сделать это нетрудно. «Поход за грибами» (рис. 21) – это алгоритмический рассказ, в котором можно выделить три крупных куска, три самостоятельных темы: 42 ЧАСТЬ 2. АЛГОРИТМИЧЕСКИЙ ЯЗЫК ДРАКОН И УДОБНЫЕ ЧЕРТЕЖИ АЛГОРИТМОВ ГЛАВА 4. АЛГОРИТМИЧЕСКАЯ СТРУКТУРА «СИЛУЭТ» 43 44 ЧАСТЬ 2. АЛГОРИТМИЧЕСКИЙ ЯЗЫК ДРАКОН И УДОБНЫЕ ЧЕРТЕЖИ АЛГОРИТМОВ и завтрак. • Подъем Подготовка вещей. • Лесная добыча. • Каждую тему можно нарисовать в виде ветки. Результат изображен на рис. 22. Названия новых икон приведены в таблице. Икона Название иконы Пояснение Имя ветки Обозначает начало ветки Адрес Обозначает конец любой ветки, кроме последней Вопрос. Где начало и конец у первой ветки на рис. 22? Ответ. Начало – икона «Подъем и завтрак». Конец – «Подготовка вещей». Между началом и концом размещается тело ветки. Оно содержит команды «Встань пораньше» и «Позавтракай». ГЛАВА 4. АЛГОРИТМИЧЕСКАЯ СТРУКТУРА «СИЛУЭТ» 45 Более сложный пример показан на рис. 25. Здесь мы видим четыре ветки: к ловле. • Подготовка Ожидание клева. • Рыбацкая работа. • Обратная дорога. • Зачем нужна ветка? Чтобы помочь алгоритмисту разбить алгоритм на смысловые части. И, что очень важно, дать частям удобные названия, которые пишут в иконе «имя ветки». Разделение проблемы на N смысловых частей реализуется путем разбиения алгоритма на N веток. Ветка – составной оператор языка ДРАКОН, который не имеет аналогов в известных языках. Это смысловая часть алгоритма, которая содержит: икону «имя ветки» (в ней пишут название смысловой части) x Что такое ветка x x x тело ветки, состоящее из команд одну или несколько икон «адрес» (в любой ветке, кроме последней) икону «конец» (в последней ветке) Икона «имя ветки» очень похожа на икону «вариант». С непривычки их можно перепутать. Чтобы избежать досадных ошибок, сравните иконы на рис. 23 и 24. 46 ЧАСТЬ 2. АЛГОРИТМИЧЕСКИЙ ЯЗЫК ДРАКОН И УДОБНЫЕ ЧЕРТЕЖИ АЛГОРИТМОВ §3. ВХОД И ВЫХОДЫ ВЕТКИ Ветка имеет один вход. И один или несколько выходов. Входом служит икона «имя ветки», содержащая название ветки. Визуальный оператор «имя ветки» не выполняет никаких действий. Это всего лишь метка, объявляющая название смысловой части алгоритма. Исполнение дракон-схемы всегда начинается с крайней левой ветки (рис. 20, 22, 25). Выходом из ветки служит икона «адрес», в которой записывается имя следующей по порядку исполнения ветки. Икона «адрес» – это замаскированный оператор перехода (gоtо). Однако он передает управление не куда угодно, а только на начало выбранной ветки. Вход в ветку возможен только через ее начало. Выход из последней ветки осуществляется через икону «конец». §4. ЧТО ТАКОЕ ШАПКА? Многие алгоритмы чрезвычайно сложны. Чтобы разобраться в тонкостях такого алгоритма, нужно прилагать большие усилия и тратить много времени. Подобную практику следует признать порочной. Алгоритмы можно и нужно сделать легкими для восприятия (эргономичными). Для этого надо давать читателю маленькие, но умные подсказки, проглотив которые, он мог бы легко сориентироваться в задаче и быстро понять материал. Одной из таких подсказок служит шапка. Название объясняется тем, что шапка находится вверху, «на голове» у алгоритма. Что такое шапка Это верхняя часть драконQсхемы (рис. 25, 25а), которая включает заголовок алгоритма и комплект икон «имя ветки» Назначение шапки – помочь читателю мгновенно (за несколько секунд или минут) сориентироваться в задаче и, расчленив ее на части, увидеть структуру алгоритма (рис. 25а). Причем увидеть не в фигуральном смысле слова, не с помощью воображения, не духовным оком, а своими двумя глазами – на бумаге или экране. ГЛАВА 4. АЛГОРИТМИЧЕСКАЯ СТРУКТУРА «СИЛУЭТ» 47 48 ЧАСТЬ 2. АЛГОРИТМИЧЕСКИЙ ЯЗЫК ДРАКОН И УДОБНЫЕ ЧЕРТЕЖИ АЛГОРИТМОВ §5. ТРИ «ЦАРСКИХ» ВОПРОСА Сталкиваясь с новой незнакомой задачей, мы желаем получить ответ на три царских (наиболее важных) вопроса: 1. Как называется задача? 2. Из скольких частей она состоит? 3. Как называется каждая часть? Именно с этих вопросов начинается наше знакомство с любой задачей при рациональном подходе к делу. Эргономическая хитрость состоит в том, что шапка, угадывая тайное желание читателя, дает ему подсказку – ответ на все царские вопросы. Вот ответы для рис. 22. задача? (Читаем заголовок алгоритма). • Как называется Поход за грибами. она состоит? (Считаем иконы «имя ветки»). • Из сколькихИзчастей трех. каждая часть? (Читаем текст в иконах «имя ветки»). • Как называется 1. Подъем и завтрак. 2. Подготовка вещей. 3. Лесная добыча. §6. ТРЕХЭТАПНЫЙ МЕТОД ИЗУЧЕНИЯ АЛГОРИТМА Дополнительные удобства связаны с тем, что шапка занимает «парадное» место в верхней части чертежа. А названия смысловых частей помещены внутри особых рамок уникальной формы, которые легко отыскать взглядом. Благодаря этому шапка моментально приковывает к себе внимание читателя без всяких усилий с его стороны. Поэтому человеку не прихо- ГЛАВА 4. АЛГОРИТМИЧЕСКАЯ СТРУКТУРА «СИЛУЭТ» 49 дится рыскать глазами по темным закоулкам алгоритма, пытаясь выудить нужную информацию. Таким образом, ДРАКОН предоставляет читателю эффективный трехэтапный метод познания незнакомой или забытой проблемы. На первом этапе, анализируя шапку, читатель узнает назначение алгоритма и его деление на смысловые части (ветки). На втором – осуществляет углубленный анализ каждой ветки. На третьем производит разбор взаимодействия веток. §7. КАК РАБОТАЕТ СИЛУЭТ? Правило. Выполнить алгоритм – значит пройти путь от начала до конца алгоритма. Применим это правило к рис. 22. Будем считать, что существует воображаемый бегунок, который при работе алгоритма пробегает алгоритмическую дорожку от иконы «заголовок» до иконы «конец». Как работает алгоритм-силуэт? Выехав из иконы «заголовок», бегунок мчится вниз по крайней левой ветке. Он движется через станции (рис. 22): и завтрак. • Подъем пораньше. • Встань • Позавтракай. • Подготовка вещей. Икона «адрес» – последняя станция первой ветки. Куда ехать дальше? Ответ содержится внутри самой иконы. Эта икона потому и зовется «адрес», что сообщает адрес (название) следующей станции. В данном случае она говорит: следующая станция называется «Подготовка вещей». Из рис. 22 видно, что данная станция находится в начале второй ветки. Но как бегунок доберется туда? По какой линии? Ответ прост. Выехав из иконы «адрес», бегунок сворачивает налево и попадает в точку А (рис. 22). Потом движется вверх к точке Б. Затем едет направо по стрелке и въезжает в верхнюю икону «Подготовка вещей». Дальше все происходит аналогично. Бегунок скользит вниз по второй ветке. Добравшись до иконы «адрес», узнает адрес следующей станции («Лесная добыча»). Затем огибает схему по линии АВ, попадает в начало третьей ветки и спускается по ней до конца. На этом выполнение алгоритма заканчивается. §8. В ЧЕМ СЕКРЕТ ИКОНЫ «АДРЕС»? Сейчас мы поступим, как чеховский злоумышленник – будем разбирать рельсы. Имеются в виду линии, окаймляющие алгоритм на рис. 22. Сотрем 50 ЧАСТЬ 2. АЛГОРИТМИЧЕСКИЙ ЯЗЫК ДРАКОН И УДОБНЫЕ ЧЕРТЕЖИ АЛГОРИТМОВ линию АБ. Уберем также горизонтальные линии (шины), проходящие через точки А и Б. Результат представлен на рис. 26. Как будет работать силуэт после этих исправлений? К нашему удивлению, отсутствие рельсов никак не сказывается на работе алгоритма. В этом легко убедиться. Выехав из иконы «заголовок», бегунок движется вниз по крайней левой ветке. Опустившись до конца ветки, бегунок попадает в икону «адрес». Казалось бы, это тупик. Рельсы кончились, и дальше ехать некуда. Но это не так. Ведь в иконе «адрес» записан адрес следующей станции («Подготовка вещей»). Зная адрес, бегунок прыгнет туда, куда нужно – в начало второй ветки. И поедет вниз. Добравшись до конца второй ветки, он совершит второй прыжок. И попадет в третью ветку. И так далее. Таким образом, икона «адрес А» – это команда «Прыгни в начало ветки А». Или, выражаясь по-научному, «Передай управление в начало ветки А». Проще говоря, данная команда передает приказ: «Брось данную ветку и начни выполнять ветку А». (Выполнять ветку – значит исполнять записанные в ней команды). ГЛАВА 4. АЛГОРИТМИЧЕСКАЯ СТРУКТУРА «СИЛУЭТ» Что такое икона «Адрес» A 51 Это команда, передающая управление в начало ветки А Переходя от рис. 22 к рис. 26, мы для упрощения стёрли несколько линий. Теперь мы убедились, что для работы алгоритма они совершенно не нужны. Маршрут бегунка определяют не они, а указания, записанные в иконе «адрес». Тем не менее, указанные линии не следует удалять по эргономическим соображениям. Дело в том, что обрамляющие линии зрительно «склеивают» разрозненные куски алгоритма. Они превращают их в приятный для глаза целостный зрительно-смысловой образ. И наоборот, устранение скрепляющих линий приводит к тому, что схема зрительно рассыпается на части, что сбивает с толку читателя (рис. 26). §9. КАК СЛЕДУЕТ РАСПОЛАГАТЬ ВЕТКИ В ПОЛЕ ЧЕРТЕЖА? Ветки упорядочены двояко: логически и пространственно. Логическая последовательность исполнения веток определяется метками, записанными в иконах «адрес». Однако логический порядок – это еще не все. Очень важно правильно расположить ветки в пространстве. Но как это сделать? Давайте мысленно перетасуем ветки на как колоду карт (рис. 26). И расположим их на чертеже в произвольном порядке. Легко сообразить, что подобное «перепутывание» веток никак не отразится на работе алгоритма. Ведь очередность работы веток зависит только от команд «адрес». И совсем не зависит от расположения веток на листе бумаги. Словом, сколько ветки ни тасуй, получим тот же самый алгоритм. Здесь есть тонкость. Перестановка веток не отражается на правильности алгоритма. Однако алгоритм должен быть не только правильным, но и понятным, эргономичным. Хаотичное расположение веток затрудняет понимание. А это недопустимо. Поэтому нужно обязательно упорядочить ветки в пространстве чертежа. Удобнее всего расположить их слева направо в той последовательности, в какой они включаются в работу. Для этого служит правило: «Чем правее, тем позже». Оно означает: чем правее находится ветка, тем позже она работает. Отсюда вытекает эргономическая Рекомендация. Чтобы схема была наглядной и удобной для восприятия, ветки должны быть упорядочены слева направо согласно принципу: «Более правая ветка работает позже, чем любая ветка, расположенная левее нее». 52 ЧАСТЬ 2. АЛГОРИТМИЧЕСКИЙ ЯЗЫК ДРАКОН И УДОБНЫЕ ЧЕРТЕЖИ АЛГОРИТМОВ Алгоритм, нарисованный согласно правилу «чем правее – тем позже», считается хорошим, эргономичным (рис. 22). Схемы, где это правило нарушается, объявляются плохими. Их использование запрещено. В разрешенных (эргономичных) алгоритмах имеет место следующий порядок работы (рис. 22, 25): работает крайняя левая ветка, последней – крайняя правая; • первой ветки передают управление друг другу слева направо • остальные (при этом может случиться так, что некоторые ветки будут пропущены); образуется так называемый «веточный цикл». Это происхо• иногда дит, когда в иконе «адрес» указано имя собственной или одной из левых веток. На рис. 25 веточный цикл помечен черными треугольниками. §10. ТРИ ТИПА ВЕТОК Различают три типа веток: одноадресная, многоадресная и безадресная. Одноадресная ветка содержит только одну икону адрес. Например, на рис. 22 имеются две одноадресные ветки. Многоадресная ветка содержит две или более икон адрес. Рассмотрим рис. 25. Первая ветка одноадресная. Вторая ветка имеет два адреса: работа. • Рыбацкая • Обратная дорога. Третья ветка содержит четыре адреса (четыре иконы адрес): • Ожидание клева. • Обратная дорога. • Ожидание клева. • Обратная дорога. Таким образом, силуэт «Рыбная ловля» имеет две многоадресных ветки: двухадресную и четырехадресную. Рассмотрим еще один случай. Безадресная ветка – ветка, содержащая икону конец и не содержащая икону адрес. Последняя ветка силуэта почти всегда безадресная (рис. 20, 22, 25). Исключением являются бесконечные алгоритмы, в которых отсутствует икона конец (рис. 140, 148). §11. ПЕРЕСЕЧЕНИЯ ЛИНИЙ ЗАПРЕЩЕНЫ Традиционные блок-схемы чаще всего имеют неформальную и неудобную для человека форму, похожую на спагетти. Изображенные на них ГЛАВА 4. АЛГОРИТМИЧЕСКАЯ СТРУКТУРА «СИЛУЭТ» 53 хитросплетения блоков, соединенные хаосом линий, больше напоминают «кучу мусора», нежели регулярную структуру. Язык ДРАКОН выгодно отличается тем, что его графический узор имеет строгое математическое и эргономическое обоснование. Он подчиняется жестким и тщательно продуманным правилам. Среди них особое место занимает Правило. Пересечения и обрывы соединительных линий запрещены. При вычерчивании обычных блок-схем допускаются два типа пересечений: явное, изображенное крестом линий; неявное, выполняемое с помощью так называемых соединителей. • • Как известно, соединитель используется для обрыва линии и продолжения ее в другом месте для избежания излишних пересечений. В языке ДРАКОН все перечисленные ухищрения (пересечения, обрывы, внутренние соединители) по эргономическим соображениям считаются вредными и категорически запрещены. Причина в том, что они засоряют поле чертежа ненужными деталями, создают визуальные помехи для глаз и отвлекают внимание от главного. §12. ВНЕШНИЕ СОЕДИНИТЕЛИ Следует различать внутренние и внешние соединители. Первые были описаны в §11. Внешние соединители Это иконы, обозначающие переход горизонтальных шин силуэта с листа на лист Зачем нужен такой переход? Чем сложнее алгоритм, тем больше веток в силуэте. Увеличение числа веток приводит к выходу за пределы бумажного листа. Каждый силуэт имеет две горизонтальные шины – верхнюю и нижнюю (см. рис. 22 и 25). Если алгоритм размещается на двух, трех или четырёх листах большого формата (например, А1), шины вытягиваются по горизонтали. И переходят с листа на лист. В местах перехода устанавливаются внешние соединители. Такие соединители подробно описаны в главе 30. 54 ЧАСТЬ 2. АЛГОРИТМИЧЕСКИЙ ЯЗЫК ДРАКОН И УДОБНЫЕ ЧЕРТЕЖИ АЛГОРИТМОВ §13. ЧТО ТАКОЕ ПОНЯТНОСТЬ АЛГОРИТМА? Многие алгоритмисты жалуются, что свой собственный алгоритм они с трудом понимают через полгода, а то и через месяц. А если речь идет о чужом алгоритме? Тогда становится совсем тяжко. Нередко бывает легче написать свой алгоритм, нежели разобраться в том, что делает чужой. Поэтому среди требований, предъявляемых к современным алгоритмическим языкам, на первое место все чаще выходит понятность алгоритмов. Понятность алгоритма Это свойство алгоритма минимизиQ ровать интеллектуальные усилия, необходимые для его понимания человеком при зрительном восприяQ тии текста алгоритма Понятность программы Это свойство программы минимизиQ ровать интеллектуальные усилия, необходимые для ее понимания человеком при зрительном восприяQ тии текста программы §14. ЭРГОНОМИЧНЫЙ АЛГОРИТМ Эргономичный алгоритм – алгоритм, удовлетворяющий критерию сверхвысокого понимания. Преимущество эргономичных алгоритмов в том, что они намного понятнее, яснее, нагляднее и доходчивее, чем обычные. Если алгоритм непонятный, в нем трудно или даже невозможно заметить затаившуюся ошибку. И наоборот, чем понятнее алгоритм, тем легче найти дефект. Поэтому более понятный, эргономичный алгоритм намного лучше обычного. Лучше в том смысле, что он облегчает выявление ошибок, а это очень важно. Ведь чем больше ошибок удастся обнаружить при проверке за столом, тем больше вероятность, что вновь созданный алгоритм окажется правильным, безошибочным, надежным. Кроме того, эргономичные алгоритмы удобны для изучения, их проще объяснить другому человеку. Все в алгоритме понятно и ясно, Если он сделан эргономично. Эргономично – это прекрасно! Эргономично – значит отлично! ГЛАВА 4. АЛГОРИТМИЧЕСКАЯ СТРУКТУРА «СИЛУЭТ» 55 §15. ВЫВОДЫ Приведем сводку эргономических правил, позволяющих улучшить когнитивное качество дракон-схем и сделать алгоритмы более понятными. 1. В иконе «заголовок» запрещается писать слово «начало». Вместо этого следует указать понятное и точное название алгоритма. 2. Разбейте сложный алгоритм на части, каждую часть изобразите в виде ветки. Дайте частям доходчивые и четкие названия и запишите их в иконах «имя ветки». 3. Вход в ветку возможен только через ее начало. 4. В иконе «адрес» разрешается писать имя одной из веток. Другие надписи запрещены. 5. Ветки следует располагать в пространстве согласно правилу: чем правее, тем позже. Наличие веточного цикла модифицирует это правило. 6. В иконе «конец» следует писать слово «Конец». 7. Соединительные линии могут идти либо горизонтально, либо вертикально. Наклонные линии не допускаются. 8. Пересечения линий запрещены. 9. Обрывы линий запрещены. 10. Внутренние соединители запрещены. Глава 5 АЛГОРИТМИЧЕСКАЯ СТРУКТУРА «ПРИМИТИВ» §1. ЧТО ТАКОЕ ПРИМИТИВ? В языке ДРАКОН есть два логически законченных алгоритмических чертежа. (о котором шла речь выше); • силуэт примитив. • Примитив Это составная алгоритмическая структура, у которой иконы «заголовок» и «конец» лежат на одной вертикали Примеры примитивов показаны на рис. 1, 3, 4–8, 10–12, 15, 19, 21. §2. ЧТО ТАКОЕ ШАМПУР? x Шампур x Это вертикальная линия, соединяющая иконы «заголовок» и «конец» Между ними на этой же линии помещается одна или несколько других икон Образно говоря, шампур пронизывает иконы примитива (возможно, не все) подобно тому, как настоящий шампур пронизывает кусочки шашлыка (рис. 27). ГЛАВА 5. АЛГОРИТМИЧЕСКАЯ СТРУКТУРА «ПРИМИТИВ» 57 Правило шампура. Выход иконы «заголовок» и вход иконы «конец» должны лежать на одной вертикали. Если это правило выполняется, дракон-схема становится упорядоченной, эргономичной, легкой для чтения (рис. 27). И наоборот, нарушение данного правила делает схему корявой, изломанной, неудобной для глаза (рис. 28). 58 ЧАСТЬ 2. АЛГОРИТМИЧЕСКИЙ ЯЗЫК ДРАКОН И УДОБНЫЕ ЧЕРТЕЖИ АЛГОРИТМОВ §3. ЧТО ТАКОЕ ГЛАВНЫЙ МАРШРУТ? Маршрут – это путь, ведущий от начала до конца алгоритма. На рис. 1 показан неразветвленный алгоритм. В нем всего один маршрут. В разветвленном алгоритме на рис. 4 таких маршрутов четыре. Если тропинок несколько, среди них можно выделить главный и побочные маршруты. Главный маршрут алгоритма Это путь от начала до конца алгоритма, который ведет к наибольшему успеху Например, на рис. 4 главный маршрут проходит по левой вертикали. Этот маршрут позволяет сыну выполнить поручение матери наилучшим образом и в полном объеме – купить один батон белого и один черного. Остальные три маршрута на рис. 4 ведут либо к частичному успеху (удалось купить только белый хлеб или только черный), либо к полной неудаче (никакого хлеба нет). §4. ПРАВИЛО ГЛАВНОГО МАРШРУТА Рассмотрим задачу. В запутанном лабиринте, соединяющем начало и конец сложного алгоритма, нужно выделить один-единственный маршрут – царскую дорогу, «путеводную нить». С ней можно зрительно сравнивать все прочие маршруты, чтобы легко сориентироваться в задаче и не заблудиться в путанице развилок. Путеводная нить должна быть визуально легко различима. Бросив беглый взгляд на дракон-схему, мы должны обнаружить четкие ориентиры, позволяющие сразу и безошибочно увидеть «царский» маршрут и упорядоченные относительно него остальные маршруты. Для этого вводится Правило главного маршрута. Главный маршрут алгоритма должен идти по шампуру. Это значит, что царский маршрут не может оказаться где-то на задворках дракон-схемы, где его днем с огнем не сыскать. Нет, он всегда должен находиться на самом почетном месте – на крайней левой вертикали. Соблюдение этого правила делает схему зрительно упорядоченной, предсказуемой и интуитивно ясной. Если правило главного маршрута по каким-то причинам оказалось нарушенным (рис. 30), нужно поменять местами слова «да» и «нет» в развилках, а также присоединенные к ним гирлянды икон. Действуя таким путем, всегда можно добиться, чтобы на царском пути оказался тот выход иконы «вопрос», который ведет к наибольшему успеху (рис. 29). ГЛАВА 5. АЛГОРИТМИЧЕСКАЯ СТРУКТУРА «ПРИМИТИВ» 59 §5. ПОБОЧНЫЕ МАРШРУТЫ НЕЛЬЗЯ РИСОВАТЬ КАК ПОПАЛО Что такое побочный маршрут Это любой маршрут разветвленного алгоритма за исключением главного Правило побочных маршрутов. Побочные маршруты алгоритма нужно рисовать справа от шампура по принципу: «Чем правее – тем хуже». Это значит: чем правее нарисован побочный маршрут, тем более неприятную ситуацию он описывает. Вот пример из жизни. «О, Господи! Я, кажется, потерял деньги!» Кому случалось делать подобное открытие, знает, что степень огорчения зависит от потерянной суммы. Рассмотрим пять возможных ситуаций и дадим им оценку. 60 ЧАСТЬ 2. АЛГОРИТМИЧЕСКИЙ ЯЗЫК ДРАКОН И УДОБНЫЕ ЧЕРТЕЖИ АЛГОРИТМОВ Ситуация 1 2 3 4 5 Я ничего не потерял Я потерял 100 рублей Я потерял 500 рублей Я потерял 1000 рублей Я потерял всю получку Оценка Хорошо Плохо Очень плохо Совсем плохо Хуже некуда На рис. 31 показана дракон-схема, описывающая эту грустную историю. По каждой вертикали идет свой маршрут. Самая первая, крайняя слева вертикаль – это шампур. По ней идет главный маршрут, имеющий оценку «хорошо», потому что все деньги целы. Чуть правее находится вторая вертикаль (потеряны 100 рублей) с оценкой «плохо». Еще правее идет третья вертикаль (пропали 500 рублей) с оценкой «очень плохо». И так далее. Крайняя справа – пятая вертикаль описывает самую скверную ситуацию, когда потеряна вся получка. Таким образом, четыре побочных маршрута, идущие по вертикалям 2, 3, 4, 5 расположены не случайно, а со смыслом. Они выстроены слева направо по принципу: «Чем правее, тем хуже». Чтобы алгоритм был понятным, он должен быть стройным, красивым, упорядоченным, то есть эргономичным. Он не должен содержать непредсказуемые и хаотичные хитросплетения линий и икон. Язык ДРАКОН был разработан, в частности, потому, что традиционные блок-схемы алгоритмов, с эргономической точки зрения, не выдерживают критики. Они напоминают непроходимые джунгли, в которых легко запутаться и почти ничего нельзя понять. ДРАКОН выгодно отличается тем, что его графический узор подчиняется жестким и тщательно продуманным правилам, которые дисциплинируют мышление, облегчают умственный труд. Чтобы убедиться в этом, взглянем еще разок на рис. 31 и проведем взглядом по всем вертикалям слева направо. Мы обнаружим не хаос, а строгий порядок. Потому что маршруты нарисованы не как попало, а по правилам. В результате чертеж алгоритма обретает четкую зрительно-смысловую структуру, которая облегчает работу мысли. Читая такую схему, человек не станет плутать в потемках, так как при ее составлении использовано мудрое Правило. Все хорошее – слева, все плохое – справа. Про такой алгоритм можно сказать: «Все ясно, как на ладони!». ГЛАВА 5. АЛГОРИТМИЧЕСКАЯ СТРУКТУРА «ПРИМИТИВ» 61 62 ЧАСТЬ 2. АЛГОРИТМИЧЕСКИЙ ЯЗЫК ДРАКОН И УДОБНЫЕ ЧЕРТЕЖИ АЛГОРИТМОВ §6. ЧТО ДЕЛАТЬ, ЕСЛИ ПРИНЦИП «ЧЕМ ПРАВЕЕ, ТЕМ ХУЖЕ» НЕ РАБОТАЕТ? Из физики известно: если начальная скорость ракеты меньше 7,8 километров в секунду, она непременно упадет на Землю. Если же разогнать ее чуть сильнее, но не больше 11,2 километров в секунду, она станет спутником Земли. При дальнейшем увеличении скорости ракета станет спутником Солнца. А если скорость превысит 16,4 километра в секунду, ракета навсегда простится с Солнечной системой и умчится в безбрежные просторы космоса. Алгоритм этой задачи показан на рис. 32. Мы знаем, что каждой вертикальной линии на дракон-схеме соответствует свой маршрут, причем вертикали следует рисовать не хаотично, а упорядоченно. До сих пор мы пользовались правилом «Чем правее, тем хуже». Однако на рис. 32 оно не имеет смысла. Поэтому выбрано другое правило «Чем правее, тем больше скорость ракеты». Чтобы понять смысл правила, проведем взглядом по схеме слева направо. Мы увидим, что от маршрута к маршруту скорость неуклонно возрастает. Первый слева маршрут самый медленный. На втором маршруте скорость больше. На третьем – еще больше. Наконец, четвертый (самый правый) маршрут описывает ситуацию, когда ракета с огромной скоростью улетает за пределы Солнечной системы. §7. КАК РИСОВАТЬ ПОБОЧНЫЕ МАРШРУТЫ? Правило. Смещение вправо от главного маршрута должно быть не произвольным и хаотичным, а продуманным и логичным. Например, при решении математических задач вертикали можно расположить в порядке увеличения или уменьшения математической величины (числа), соответствующей этим вертикалям. Можно придумать и другие правила, позволяющие сделать схему упорядоченной. Для разных задач могут понадобиться разные правила (рис. 33). Но у всех правил есть общая черта. В схеме должен быть не хаос, а порядок. Здесь действует Правило хорошей хозяйки. Если постараться, порядок всегда можно навести. ГЛАВА 5. АЛГОРИТМИЧЕСКАЯ СТРУКТУРА «ПРИМИТИВ» 63 64 ЧАСТЬ 2. АЛГОРИТМИЧЕСКИЙ ЯЗЫК ДРАКОН И УДОБНЫЕ ЧЕРТЕЖИ АЛГОРИТМОВ ГЛАВА 5. АЛГОРИТМИЧЕСКАЯ СТРУКТУРА «ПРИМИТИВ» 65 §8. ГДЕ ДОЛЖНА НАХОДИТЬСЯ ИКОНА «КОНЕЦ»? В примитиве икона конец должна размещаться ниже всех других икон (рис. 33а). 66 ЧАСТЬ 2. АЛГОРИТМИЧЕСКИЙ ЯЗЫК ДРАКОН И УДОБНЫЕ ЧЕРТЕЖИ АЛГОРИТМОВ §9. ВЫВОДЫ 1. В языке ДРАКОН используются две основные алгоритмические структуры: силуэт; примитив. 2. Следует различать: главный маршрут; побочные маршруты. 3. Главный маршрут идет по шампуру. 4. Побочные маршруты находятся справа от главного. Они располагаются слева направо по принципу: «чем правее, тем хуже». 5. Если указанный принцип нельзя применить, побочные маршруты должны подчиняться правилу: «смещение вправо от главного маршрута должно быть не произвольным, а упорядоченным». • • • • Глава 6 СРАВНИМ СИЛУЭТ И ПРИМИТИВ §1. ЧТО ЛУЧШЕ: СИЛУЭТ ИЛИ ПРИМИТИВ? Напомним определения понятий, о которых читатель уже мог догадаться, глядя на рис. 19 и 20. Силуэт – дракон-схема, разделенная на ветки. Примитив – дракон-схема, не имеющая веток. Сравним между собой силуэт и примитив. Какая схема лучше, легче для понимания? Чтобы уяснить суть дела, возьмем один и тот же алгоритм «Поездка на автобусе». Изобразим его двумя способами: в виде силуэта (рис. 34) и в виде примитива (рис. 35). Легко сообразить, что силуэт обладает серьезными преимуществами. В самом деле, примитив на рис. 35 не позволяет увидеть деление задачи на смысловые части. Иное дело рис. 34. Тут сразу ясно – алгоритм состоит из четырех частей: • Поиск автобуса. • Ожидание посадки. • Посадка в автобус. • Поездка. Таким образом, в силуэте смысловые части алгоритма четко выделены. Они зрительно и пространственно разнесены в поле чертежа, делая его более понятным. А в примитиве смысловые части не выделены и перемешаны (все в одной куче), что затрудняет чтение и анализ сложных алгоритмов. Правило. Примитив рекомендуется применять, если драконсхема очень простая (примитивная) и содержит не более десятка икон. В остальных случаях выгоднее использовать силуэт. 68 ЧАСТЬ 2. АЛГОРИТМИЧЕСКИЙ ЯЗЫК ДРАКОН И УДОБНЫЕ ЧЕРТЕЖИ АЛГОРИТМОВ ГЛАВА 6. СРАВНИМ СИЛУЭТ И ПРИМИТИВ 69 70 ЧАСТЬ 2. АЛГОРИТМИЧЕСКИЙ ЯЗЫК ДРАКОН И УДОБНЫЕ ЧЕРТЕЖИ АЛГОРИТМОВ Нарушение этого правила обычно чревато неприятностями, ибо мешает читателю выявить сущность решаемой проблемы. Например, алгоритм на рис. 35 выглядит громоздким и неоправданно сложным для восприятия. Это вызвано тем, что он содержит 19 икон, однако изображен в виде примитива. Криминал в том, что схема на рис. 35 не позволяет читателю мгновенно (за несколько секунд) распознать зрительно-смысловую структуру алгоритма. В самом деле, из скольких частей состоит решаемая задача? Глядя на рис. 35, ответить на этот вопрос довольно трудно. А быстро ответить – невозможно. Положение в корне меняется, когда мы смотрим на рис. 34, где тот же самый алгоритм изображен в виде силуэта. Тут деление алгоритма на части само бросается в глаза. Однако это не все. Не менее важно, что запутанность зрительного рисунка полностью исчезла. Схема приобрела новое эстетическое (эргономическое) качество: элегантность, ясность и прозрачность. Таким образом, в сложных случаях силуэт позволяет существенно уменьшить интеллектуальные усилия, затрачиваемые на понимание алгоритма. В силуэте крупные структурные части алгоритма (ветки) четко выделены, образуя легко узнаваемый, стабильный, предсказуемый и целостный зрительный образ. В этой главе рекомендации по использованию силуэта и примитива даны в упрощенном виде. Окончательные рекомендации изложены в главе 30. §2. ГЛАВНЫЙ МАРШРУТ СИЛУЭТА Выше мы узнали, как упорядочить маршруты примитива. Теперь настала очередь силуэта. Что такое шампур ветки Это вертикаль, соединяющая икону «имя ветки» с иконой «адрес», а если у ветки несколько выходов – с левым из них Каждая ветка силуэта имеет свой шампур. Например, на рис. 34 четыре ветки. Следовательно, этот силуэт имеет четыре шампура. Для ветки сохраняют силу оба «царских» правила: главный маршрут ветки должен идти по шампуру ветки; побочные маршруты ветки следует упорядочить слева направо по какому-либо критерию. • • 71 ГЛАВА 6. СРАВНИМ СИЛУЭТ И ПРИМИТИВ Предположим, в качестве критерия выбран принцип «Чем правее, тем хуже». В этом случае для каждой ветки действует Правило. Чем правее (чем дальше от шампура данной ветки) расположена очередная вертикаль, тем менее успешные действия она выполняет. Например, на рис. 34 ветка «Посадка в автобус» имеет три вертикали. Левая вертикаль (главный маршрут) описывает наибольший успех, так как вы будете ехать в автобусе сидя. Правая вертикаль означает наименьший успех, поскольку вы вышли из автобуса и поездка откладывается. Средняя вертикаль (расположенная выше иконы «Есть желание ехать стоя?») занимает промежуточное положение. В зависимости от ответа (да или нет) может быть либо частичный успех (вы будете ехать, но не сидя, а стоя), либо неудача, поскольку вы выходите из автобуса несолоно хлебавши. Это последовательное соединение главных маршрутов поочередно работающих веток (веточные циклы для простоты не рассматриваются) Главный маршрут силуэта Таким образом, ДРАКОН позволяет читателю быстро увидеть главный маршрут любого, сколь угодно сложного и разветвленного алгоритма. Кроме того, смещение всех побочных маршрутов относительно «царского» оказывается не случайным, а осмысленным и предсказуемым, то есть легким для восприятия. §3. ШАМПУР ВЕТКИ Мы уже знаем, что каждая ветка имеет шампур. Рассмотрим тему подробнее. Чтобы ветка была красивой (эргономичной), следует применить Правило. Левый маршрут каждой ветки должен идти по прямой вертикальной линии – шампуру ветки. Например, шампур первой ветки на рис. 25 найти очень легко. Он идет через иконы: к ловле. • Подготовка Накопай червей. • Возьми удочку. • 72 ЧАСТЬ 2. АЛГОРИТМИЧЕСКИЙ ЯЗЫК ДРАКОН И УДОБНЫЕ ЧЕРТЕЖИ АЛГОРИТМОВ до места ловли. • Доберись Насади червяка. • Ожидание клева. • Найти шампур второй ветки несколько труднее, так как ветка разветвленная – в ней три маршрута. Надо отыскать самый левый из них и убедиться, что он идет по вертикали. На рис. 25 видно, что шампур второй ветки бежит через иконы: клева. • Ожидание Забрось удочку. • Клюнула? Да. • Подсекай. • • Рыбацкая работа. Запомните x x x В примитиве только один шампур. А в сиQ луэте их несколько. Каждая ветка имеет свой шампур. В силуэте число шампуров равно числу веток (см. примеры на рис. 22, 25, 34). §4. В КАКОМ ПОРЯДКЕ РАСПОЛАГАЮТСЯ ИКОНЫ «АДРЕС» В ДВУХАДРЕСНОЙ ВЕТКЕ? Рассмотрим двухадресную ветку, то есть ветку, имеющую две иконы адрес. Какую из них следует рисовать слева, а какую – справа? На этот счет (при отсутствии веточного цикла) имеется рекомендация: (на шампуре ветки) рисуйте икону адрес, кото• Слева рая указывает на ветку, которая должна выполняться • РАНЬШЕ. Справа рисуйте икону адрес, указывающую на ветку, которая будет выполняться ПОЗЖЕ. Можно сказать короче. «Порядок расположения икон адрес должен соответствовать порядку выполнения веток». §5. ПОРЯДОК ИКОН «АДРЕС» И ПОРЯДОК ВЕТОК ПРИ НАЛИЧИИ ВЕТОЧНОГО ЦИКЛА Дракон-схема должна быть упорядоченной. В ней должен господствовать порядок. Порядок хорош тем, что устраняет путаницу. И создает комфортные условия для умственной работы. ГЛАВА 6. СРАВНИМ СИЛУЭТ И ПРИМИТИВ 73 Обратимся к рис. 35а. Ветка «Наклейка кафеля» трехадресная. В ней три иконы адрес: кафеля; • наклейка доставка плиток; • уборка. • Обратите внимание на расположение этих икон по горизонтали. Примечательно, что оно полностью совпадает с расположением трех веток (2-й, 3-й и 4-й). Желательно, чтобы порядок икон адрес совпадал с расположением веток. К сожалению, это не всегда возможно. Тем не менее, мы не должны упускать даже малейшую возможность навести порядок. Эту мысль подытоживает Рекомендация. Желательно, чтобы порядок расположения икон адрес в многоадресной ветке совпадал с расположением веток, на которые ссылаются эти адреса. Вот пример. Предположим, что на рис. 35а в ветке «Наклейка кафеля» мы, ради эксперимента, поменяли местами иконы «вопрос»: плитки приклеены; • все запас плиток кончился. • Это приведет к «плохому» расположению адресов: кафеля; • наклейка уборка; • доставка плиток. • И наоборот, вернув иконы «вопрос» на место, мы добьемся желаемого результата. Порядок икон «адрес» будет совпадать с расположением веток. §6. КАК ОПИСАТЬ СИЛУЭТ С ПОМОЩЬЮ ТЕКСТОВОГО ЯЗЫКА (ПСЕВДОКОДА)? Дорогой читатель! Это трудный параграф. При желании его вполне можно опустить. Алгоритмы можно описывать по-разному. Например, с помощью текста (рис. 36) или с помощью графического языка ДРАКОН. Язык ДРАКОН имеет два лица: текстовое и визуальное. В этой книге описан графический (визуальный) ДРАКОН. Текстовый язык не рассматривается. Но есть исключение. Если книга попадется программисту, у него наверняка возникнет вопрос. Как преобразовать графический язык ДРАКОН в текстовую форму? В этом параграфе дан ответ, предназначенный для программистов. 74 ЧАСТЬ 2. АЛГОРИТМИЧЕСКИЙ ЯЗЫК ДРАКОН И УДОБНЫЕ ЧЕРТЕЖИ АЛГОРИТМОВ ГЛАВА 6. СРАВНИМ СИЛУЭТ И ПРИМИТИВ 75 На рис. 36 видно, что для описания веток в текстовый язык (псевдокод) пришлось внести ряд изменений. В частности, появились два новых текстовых оператора, отсутствующие в традиционных языках: ВЕТКА АДРЕС < идентификатор ветки > < идентификатор ветки > Оператор текстового языка ВЕТКА объявляет название ветки (записываемое на графическом языке внутри иконы «имя ветки»). Оператор АДРЕС безусловно передает управление на текстовый оператор ВЕТКА, имя которой записано справа от оператора АДРЕС. Сравнивая две формы языка ДРАКОН (графическую и текстовую), можно заметить, что соответствующие алгоритмы (рис. 34 и 36) эквивалентны1. Однако графический язык, несомненно, более нагляден и доходчив. Второе преимущество состоит в том, что графика позволяет полностью исключить избыточные (паразитные) элементы. Такими элементами в текстовом языке оказываются почти все ключевые слова: АЛГОРИТМ, ВЕТКА, АДРЕС, ЕСЛИ, ИНАЧЕ, ЦИКЛ ЖДАТЬ, ПЕРЕХОД НА, КОММЕНТАРИЙ, КОНЕЦ ВЕТКИ, КОНЕЦ ЕСЛИ, КОНЕЦ ЦИКЛА, КОНЕЦ, а также метки. Повторим еще раз: в данной книге текстовая форма языка ДРАКОН не используется. §7. ГРАФИЧЕСКИЙ И ТЕКСТОВЫЙ СИНТАКСИС ДРАКОНА ДРАКОН – графический (визуальный) язык, в котором используются два типа элементов: фигуры (иконы), • графические текстовые надписи, • тоэлементы). расположенные внутри или снаружи икон (текс- Следовательно, синтаксис ДРАКОНа распадается на две части. Графический (визуальный) синтаксис охватывает алфавит икон, правила их размещения в поле чертежа и правила связи икон с помощью соединительных линий. Графический синтаксис описан в главе 33. Текстовый синтаксис задает алфавит символов, правила их комбинирования и привязку к иконам. (Привязка необходима потому, что внутри разных икон используются разные типы выражений). Оператор языка ДРАКОН 1 Это икона или комбинация икон, взятые вместе с текстовыми надписями Два алгоритма называются эквивалентными, если они дают одинаковые результаты для одних и тех же исходных данных. 76 ЧАСТЬ 2. АЛГОРИТМИЧЕСКИЙ ЯЗЫК ДРАКОН И УДОБНЫЕ ЧЕРТЕЖИ АЛГОРИТМОВ ГЛАВА 6. СРАВНИМ СИЛУЭТ И ПРИМИТИВ 77 Одновременное использование графики и текста говорит о том, что ДРАКОН адресуется не только к словесно-логическому мышлению автора и читателя алгоритма. Сверх того, он активизирует интуитивное, образное, правополушарное мышление, стимулируя его не написанным, а именно нарисованным алгоритмом, то есть алгоритмом-картинкой. §8. ВЫВОДЫ 1. Силуэт – дракон-схема, разделенная на ветки. 2. Примитив – дракон-схема, не имеющая веток. 3. Шампур ветки – это вертикаль, соединяющая икону «имя ветки» с иконой «адрес», а если у ветки несколько выходов – с левым из них. 4. Главный маршрут ветки должен идти по шампуру ветки. 5. Побочные маршруты ветки следует упорядочить слева направо по какому-либо критерию. 6. Чем правее (чем дальше от шампура данной ветки) расположена очередная вертикаль, тем менее успешные действия она выполняет. 7. Главный маршрут силуэта – последовательное соединение главных маршрутов поочередно работающих веток. 8. Левый маршрут каждой ветки должен идти по прямой вертикальной линии – шампуру ветки. 9. В примитиве только один шампур. А в силуэте их несколько. 10. Каждая ветка имеет свой шампур. 11. В силуэте число шампуров равно числу веток. 12. Синтаксис языка ДРАКОН распадается на две части. 13. Графический синтаксис охватывает алфавит икон, правила их размещения в поле чертежа и правила связи икон с помощью соединительных линий. 14. Текстовый синтаксис задает алфавит символов, правила их комбинирования и привязку к иконам. Глава 7 КАК УЛУЧШИТЬ ПОНЯТНОСТЬ АЛГОРИТМОВ §1. ВВЕДЕНИЕ Наша цель – сделать алгоритмы понятными, приятными для глаза, эргономичными. Для этого надо действовать не вслепую, а использовать специальные методы. В этой главе будут изложены математические методы, позволяющие приблизиться к намеченной цели. Глава делится на три части. Сначала мы рассмотрим понятия «развилка», «плечо развилки», «формула маршрута». После этого расскажем о математике. А затем на многочисленных примерах покажем, что математические приемы действительно позволяют улучшить понятность дракон-схем. §2. ЧТО ТАКОЕ РАЗВИЛКА? x Развилка x Это часть драконQсхемы, внутри которой маршрут сначала раздваивается, а затем соединяется в точке слияния. Развилка имеет один вход сверху и один выход снизу, лежащие на одной вертикали (рис. 37). В состав развилки входят четыре элемента: «вопрос», • икона левое плечо, • правое плечо, • точка слияния. • ГЛАВА 7. КАК УЛУЧШИТЬ ПОНЯТНОСТЬ АЛГОРИТМОВ? 79 §3. ЧТО ТАКОЕ ПЛЕЧО РАЗВИЛКИ? Суть дела ясна из примера на рис. 37. Левое плечо – это маршрут от нижнего выхода иконы «вопрос» (точка А) до точки слияния Д. Оно содержит ответ «да», три иконы и соединительные линии. Правое плечо – это путь от правого выхода до точки слияния. На рис. 37 оно содержит ответ «нет» и линию БВГД. Чем отличается икона «вопрос» от развилки? Ответ дан на рис. 38. Правило. У развилки два плеча, левое и правое. 80 ЧАСТЬ 2. АЛГОРИТМИЧЕСКИЙ ЯЗЫК ДРАКОН И УДОБНЫЕ ЧЕРТЕЖИ АЛГОРИТМОВ §4. МАРШРУТЫ И ФОРМУЛЫ МАРШРУТОВ Что такое маршрут Это графический путь от начала до конца алгоритма, проходящий через иконы и соединительные линии. На рис. 39 представлена схема «Охота на мамонта». Заменим текст внутри икон буквами. Вместо «Охота на мамонта» запишем букву А, вместо «Поймай мамонта» – букву Б и т. д. В результате получим буквенную дракон-схему на рис. 39 (справа). Буквенные схемы удобно использовать для описания маршрутов. Маршрут можно описать с помощью формулы, которая представляет собой последовательность букв, обозначающих иконы. Все иконы, включая одинаковые, обозначаются разными буквами. Линейный (неразветвленный) алгоритм имеет только один маршрут и одну формулу. Например, схема на рис. 39 (справа) описывается формулой АБВГД §5. МАРШРУТЫ РАЗВЕТВЛЕННОГО АЛГОРИТМА Разветвленный алгоритм имеет несколько (два и более) маршрутов. У каждого маршрута своя, отличная от других формула. В формулах раз- ГЛАВА 7. КАК УЛУЧШИТЬ ПОНЯТНОСТЬ АЛГОРИТМОВ? 81 ветвленных алгоритмов наряду с буквами, обозначающими иконы, используются слова «да» и «нет», отделяемые пробелами. Примеры формул показаны на рис. 40, 41. §6. НАБОР МАРШРУТОВ Что такое набор маршрутов x x Это множество маршрутов данного алгоритма. Набор маршрутов и набор формул — одно и то же. В разных алгоритмах разное число маршрутов. На рис. 40 два маршрута, на рис. 41 – три. Чтобы написать набор маршрутов данного алгоритма, необходимо: алгоритм в буквенную форму; • преобразовать для каждого маршрута буквенного алгоритма написать формулу • маршрута. Совокупность таких формул – это и есть набор маршрутов данного алгоритма. 82 ЧАСТЬ 2. АЛГОРИТМИЧЕСКИЙ ЯЗЫК ДРАКОН И УДОБНЫЕ ЧЕРТЕЖИ АЛГОРИТМОВ §7. РАВНОСИЛЬНЫЕ АЛГОРИТМЫ Равносильные алгоритмы Это алгоритмы, имеющие одинаковый набор маршрутов (одинаковый набор формул) Как доказать, что алгоритмы X и Y равносильны? Для этого нужно: набор маршрутов алгоритма X; • определить набор маршрутов алгоритма Y; • определить • убедиться, что два набора формул совпадают. Рассмотрим пример на рис. 42 и 43. На рис. 42 видно, что два изображенных на нем алгоритма имеют один и тот же смысл, так как они выполняют одни и те же действия. Докажем, что эти алгоритмы равносильны. Для этого преобразуем их в буквенную форму (рис. 43). Затем для каждого алгоритма составим набор маршрутов. Для левого алгоритма эта работа выполняется так. Сначала пишем формулу маршрута, идущего по шампуру: Маршрут 1. А да В да Г ГЛАВА 7. КАК УЛУЧШИТЬ ПОНЯТНОСТЬ АЛГОРИТМОВ? 83 Затем, двигаясь вправо от шампура, поочередно описываем маршруты: Маршрут 2. А да В нет Г Маршрут 3. А нет После этого повторяем эти действия для правого алгоритма. В заключение сравниваем наборы маршрутов левого и правого алгоритмов на рис. 43. И убеждаемся, что они совпадают (с точностью до порядка записи формул). Отсюда вытекает, что дракон-схемы на рис. 42 равносильны, что и требовалось доказать. §8. РОКИРОВКА x Что такое рокировка x Это преобразование алгоритма, при котором левое и правое плечи развилки меняются местами. При этом слова «да» и «нет» также меняются местами 84 ЧАСТЬ 2. АЛГОРИТМИЧЕСКИЙ ЯЗЫК ДРАКОН И УДОБНЫЕ ЧЕРТЕЖИ АЛГОРИТМОВ Пример рокировки показан на рис. 44. Формальное преобразование алгоритма X в алгоритм Y называется равносильным, если алгоритмы X и Y равносильны. Сказанное означает, что рокировка является равносильным преобразованием алгоритмов. Что такое рокировка? Это плеч перестановка! §9. ТЕОРЕМА РОКИРОВКИ Теорема. Если к визуальному алгоритму X применить операцию «рокировка», получим визуальный алгоритм Y, эквивалентный алгоритму X. Это значит, что рокировка – эквивалентное преобразование алгоритма1. Можно сказать и по другому. При рокировке смысл алгоритма не меняется. Визуальная формула рокировки показана на рис. 45. 1 Два алгоритма называются эквивалентными, если они дают одинаковые результаты для одних и тех же исходных данных. Пример: два алгоритма на рис. 44 эквивалентны. ГЛАВА 7. КАК УЛУЧШИТЬ ПОНЯТНОСТЬ АЛГОРИТМОВ? 85 §10. РОКИРОВКА МОЖЕТ УЛУЧШИТЬ ЭРГОНОМИЧНОСТЬ АЛГОРИТМОВ Полученный результат чрезвычайно важен. Ведь рокировка позволяет улучшить наглядность и эргономичность алгоритмов. Давайте посмотрим, как это делается. На рис. 46 показана «плохая» дракон-схема. Согласно правилу главный маршрут (жирная линия) должен быть прямым, как стрела, и идти точно по шампуру. А он вместо этого превратился в ломаную-переломаную линию, которая делает невообразимые скачки и путает читателя. Чтобы исправить ошибку, нужно три раза сделать рокировку. Первый раз делаем рокировку в развилке «В меню есть ваш любимый салат?». Это позволяет пустить главный маршрут по шампуру на верхнем участке. Однако внизу главный маршрут по-прежнему совершает неоправданные зигзаги. Затем делаем рокировку в развилке «Борщ очень вкусный?». Тем самым улучшаем среднюю часть схемы. Нам осталось выпрямить главный маршрут на нижнем участке. Для этого переставляем плечи у развилки «Жаркое как подошва?». В результате трех рокировок неэргономичная схема на рис. 46 превратилась в хорошую (эргономичную) схему на рис. 47. Подведем итоги. Выпрямляя главный маршрут, мы делаем алгоритм более наглядным и легким для понимания. Главный маршрут – путеводная нить алгоритма, позволяющая быстрее уяснить суть дела и не заблудиться в хороводе развилок. 86 ЧАСТЬ 2. АЛГОРИТМИЧЕСКИЙ ЯЗЫК ДРАКОН И УДОБНЫЕ ЧЕРТЕЖИ АЛГОРИТМОВ ГЛАВА 7. КАК УЛУЧШИТЬ ПОНЯТНОСТЬ АЛГОРИТМОВ? 87 88 ЧАСТЬ 2. АЛГОРИТМИЧЕСКИЙ ЯЗЫК ДРАКОН И УДОБНЫЕ ЧЕРТЕЖИ АЛГОРИТМОВ А теперь – самое главное. Мы осуществили «выпрямление» главного маршрута не случайно, не по принципу «что хочу, то и ворочу!», а на основании строгого математического закона – закона рокировки. Напомним суть закона: рокировка – равносильное преобразование алгоритма. При рокировке смысл алгоритма не меняется. Закон рокировки придает нашим эргономическим действиям (позволяющим выпрямить «кривой» главный маршрут) математическую строгость и точность. §11. ЕЩЕ ОДИН ПРИМЕР РОКИРОВКИ На рис. 48–51 представлены четыре схемы, на которых описана история с хрустальной вазой. На всех схемах изображен один и тот же алгоритм. Однако схемы выглядят по-разному. Зададим вопрос, какие из них начерчены правильно, а какие нет? Сначала нужно найти главный маршрут. В развилке «Хрустальная ваза свалилась на пол?» главный маршрут идет через «нет». Потому что, когда вещи падают, это плохо. А когда не падают – хорошо. Значит, две схемы – на рис. 48 и 49 – нарисованы неверно. В чем ошибка? Согласно правилу, главный маршрут должен идти по шампуру. А он вместо этого петлят по задворкам, как заяц. Проверим правило побочных маршрутов. На рис. 48–51 их два. Один описывает ситуацию, когда ваза упала, но уцелела. Во втором случае она разбилась. Первой ситуации выставим оценку «плохо», второй – «очень плохо». Отсюда делаем вывод, что на рис. 50 маршруты не упорядочены. Значит, схема нарисована неверно. Почему? Потому что самый плохой маршрут (с оценкой «очень плохо») должен быть крайним справа. А он по ошибке затесался в середину. Таким образом, правильно нарисована только одна, самая последняя схема (см. рис. 51). В ней нет ни одной ошибки. Главный маршрут идет по шампуру, и все маршруты упорядочены по правилу «Чем правее, тем хуже». Чтобы превратить плохую схему на рис. 48 в хорошую на рис. 51, достаточно сделать всего две рокировки в обеих развилках. Мы еще раз убедились, что преобразование «рокировка» позволяет улучшить эргономичность алгоритмов. Сделаем оговорку. Этот вывод относится только к смысловым алгоритмам (где можно указать главный маршрут). Он совершенно неприменим к буквенным алгоритмам (где понятие главного маршрута теряет силу). Отсюда вытекает, что применение рокировки к буквенным схемам на рис. 40, 41, 43 бессмысленно, так как в данном случае рокировка не влияет на эргономичность. ГЛАВА 7. КАК УЛУЧШИТЬ ПОНЯТНОСТЬ АЛГОРИТМОВ? 89 90 ЧАСТЬ 2. АЛГОРИТМИЧЕСКИЙ ЯЗЫК ДРАКОН И УДОБНЫЕ ЧЕРТЕЖИ АЛГОРИТМОВ ГЛАВА 7. КАК УЛУЧШИТЬ ПОНЯТНОСТЬ АЛГОРИТМОВ? 91 92 ЧАСТЬ 2. АЛГОРИТМИЧЕСКИЙ ЯЗЫК ДРАКОН И УДОБНЫЕ ЧЕРТЕЖИ АЛГОРИТМОВ ГЛАВА 7. КАК УЛУЧШИТЬ ПОНЯТНОСТЬ АЛГОРИТМОВ? 93 §12. ВЕРТИКАЛЬНОЕ ОБЪЕДИНЕНИЕ Иногда бывает, что в дракон-схеме иконы повторяются. Например, на рис. 52 икона «Отдай мотоцикл в ремонт и впредь будь умнее» встречается три раза. Это плохо. Навязчивые повторения раздражают читателя, которому приходится тратить лишнее время и несколько раз читать одно и то же. К счастью, некоторые повторы можно устранить. Такая возможность появляется, если одинаковые иконы находятся рядом, причем их выходы соединены между собой (рис. 52). В этом случае действует Правило. Повторы запрещены. Устранение повторов производится с помощью вертикальной линии (рис. 53) и называется вертикальным объединением. При этом несколько икон объединяются в одну. Это делается так: выделяются две или более одинаковых икон, выходы которых присоединены к горизонтальной линии; входы упомянутых икон объединяются вертикальной линией, удаляются все одинаковые иконы, кроме крайней левой. • • • Теорема. Если к визуальному алгоритму X применить операцию «вертикальное объединение», получим визуальный алгоритм Y, эквивалентный алгоритму X. §13. ГОРИЗОНТАЛЬНОЕ ОБЪЕДИНЕНИЕ Рассмотрим задачу на рис. 54, где также имеются повторы, подлежащие устранению. Сначала устраним повторение иконы «Съешь кашу» и получим схему на рис. 55. В данном случае для исключения повторов используется не вертикальная, а горизонтальная линия (рис. 55). Соответствующая операция называется горизонтальное объединение. При этом несколько икон также объединяются в одну. Для этого нужно: выделить две или более одинаковых икон, выходы которых присоединены к горизонтальной линии; объединить входы упомянутых икон горизонтальной линией, удалить все одинаковые иконы, кроме крайней левой. • • • Затем исключим повторение развилки «Есть можно?» Окончательный результат показан на рис. 56. Легко заметить, что схема на рис. 56 более удобна и занимает меньше места, чем исходная схема на рис. 54. Самое главное, она стала проще и намного понятнее. Теорема. Если к визуальному алгоритму X применить операцию «горизонтальное объединение», получим визуальный алгоритм Y, эквивалентный алгоритму X. 94 ЧАСТЬ 2. АЛГОРИТМИЧЕСКИЙ ЯЗЫК ДРАКОН И УДОБНЫЕ ЧЕРТЕЖИ АЛГОРИТМОВ ГЛАВА 7. КАК УЛУЧШИТЬ ПОНЯТНОСТЬ АЛГОРИТМОВ? 95 96 ЧАСТЬ 2. АЛГОРИТМИЧЕСКИЙ ЯЗЫК ДРАКОН И УДОБНЫЕ ЧЕРТЕЖИ АЛГОРИТМОВ ГЛАВА 7. КАК УЛУЧШИТЬ ПОНЯТНОСТЬ АЛГОРИТМОВ? 97 98 ЧАСТЬ 2. АЛГОРИТМИЧЕСКИЙ ЯЗЫК ДРАКОН И УДОБНЫЕ ЧЕРТЕЖИ АЛГОРИТМОВ 99 ГЛАВА 7. КАК УЛУЧШИТЬ ПОНЯТНОСТЬ АЛГОРИТМОВ? §14. ВИЗУАЛЬНЫЕ ФОРМУЛЫ ОБЪЕДИНЕНИЯ Формулы объединения показаны на рис. 57 и 58. На этих формулах для примера расставлены слова «да» и «нет». Следует иметь в виду, что это всего лишь один из возможных примеров расстановки. Возле каждой иконы «вопрос» указанные слова могут быть записаны любым из двух способов: внизу, «нет» вправо; • «да» «нет» внизу, «да» вправо. • На рис. 59 и 60 показан еще один пример вертикального объединения. Согласно традиционному подходу схема на рис. 60 считается запрещенной. Но с точки зрения графического языка ДРАКОН дело обстоит иначе: схема на рис. 60 разрешена к применению. Совместное использование вертикального и горизонтального объединения в некоторых случаях позволяет существенно упростить дракон-схемы (см. пример на рис. 61 и 62). §15. КАК УСТРАНИТЬ ПЕРЕСЕЧЕНИЯ ЛИНИЙ? На рис. 63 в точке Х линии пересекаются. Это очень плохо! Ведь пересечение – визуальная помеха. Она затрудняет восприятие и анализ алгоритмов. Обилие пересечений сбивает читателя с толку. Практика показывает: пересечение линий – это источник опасности, который может привести к ошибке. Поэтому, как мы уже знаем, в языке ДРАКОН действует Правило. Пересечения линий запрещены. Существуют специальные приемы позволяющие устранить пересечения. Самый простой из них показан на рис. 63 и 64. §16. ДОКАЗАТЕЛЬСТВО РАВНОСИЛЬНОСТИ АЛГОРИТМОВ Покажем, что схемы на рис. 63 (где есть пересечение) и 64 (где нет пересечений) равносильны. На рис. 63 имеются три маршрута: Номер маршрута Формула маршрута Маршрут 1 А да Б нет В Маршрут 2 А нет Г Маршрут 3 А да Б да Д 100 ЧАСТЬ 2. АЛГОРИТМИЧЕСКИЙ ЯЗЫК ДРАКОН И УДОБНЫЕ ЧЕРТЕЖИ АЛГОРИТМОВ ГЛАВА 7. КАК УЛУЧШИТЬ ПОНЯТНОСТЬ АЛГОРИТМОВ? 101 102 ЧАСТЬ 2. АЛГОРИТМИЧЕСКИЙ ЯЗЫК ДРАКОН И УДОБНЫЕ ЧЕРТЕЖИ АЛГОРИТМОВ ГЛАВА 7. КАК УЛУЧШИТЬ ПОНЯТНОСТЬ АЛГОРИТМОВ? 103 Легко убедиться, что схема на рис. 64 имеет точно такие же маршруты. Совпадение маршрутов говорит о том, что на обеих схемах представлен один и тот же набор маршрутов. Значит, схемы на рис. 63 и 64 равносильны. §17. КАКАЯ ОШИБКА ПОДСТЕРЕГАЕТ НАС ПРИ ОБЪЕДИНЕНИИ? На рис. 65 (слева) икона Е повторяется три раза. На первый взгляд кажется, что две иконы Е можно убрать с помощью операции «горизонтальное объединение». Действуя подобным образом, получим результат на рис. 65 (в центре). Мы допустили грубую ошибку! Вспомним, что при рисовании дракон-схем пересечения запрещены. А у нас получилось, что две линии пересекаются в точке X. Отсюда следует: разрешается объединять не любые одинаковые иконы, а только соседние. Обратите внимание: на рис. 65 (слева) из трех одинаковых икон Е только две правые являются соседними. А третья (крайняя левая) отделена от них иконой Ж. Поэтому она не может участвовать в объединении. Правильный ответ показан справа на рис. 65. §18. ЧТО ДЕЛАТЬ, ЕСЛИ ЭРГОНОМИЧЕСКИЕ ТРЕБОВАНИЯ ПРОТИВОРЕЧАТ ДРУГ ДРУГУ? До сих пор мы рассматривали простейшие случаи, когда различные эргономические требования не вступали в конфликт. Однако конфликты возможны. Вот два эргономических критерия, которые могут противоречить друг другу: правило главного и побочных маршрутов, минимизация числа вертикалей. • • Чтобы исключить конфликт, следует соблюдать Принцип. Правило маршрутов имеет более высокий приоритет, нежели стремление уменьшить число вертикалей. В качестве иллюстрации сравним равносильные схемы на рис. 66 и 67. По критерию «минимизация числа вертикалей» выигрывает схема на рис. 66. У нее на одну вертикаль меньше. А как насчет порядка в маршрутах? Попробуем разобраться. На рис. 66 правило маршрутов грубо нарушено, причем сразу в двух местах. Во-первых, главный маршрут (когда человек здоров) не совмещен с шампуром. Во-вторых, маршруты не упорядочены слева направо. 104 ЧАСТЬ 2. АЛГОРИТМИЧЕСКИЙ ЯЗЫК ДРАКОН И УДОБНЫЕ ЧЕРТЕЖИ АЛГОРИТМОВ ГЛАВА 7. КАК УЛУЧШИТЬ ПОНЯТНОСТЬ АЛГОРИТМОВ? 105 Действительно, самое тяжелое заболевание (когда человек вынужден лечь в больницу) находится на средней вертикали. Это неправильно, так как слева и справа от нее находятся более легкие недомогания. Таким образом, правило «Чем правее, тем хуже» не соблюдается. Поэтому схему на рис. 66 нельзя признать эргономичной. Чтобы исправить недостаток, необходимо выполнить: разъединение в точке С (эта операция обратна верти• вертикальное кальному объединению); развилки «Заболел?», • рокировку рокировку развилки «Врач помог?». • В итоге получим безукоризненно четкую схему на рис. 67. Здесь все маршруты упорядочены по принципу «Чем правее – тем хуже». В самом деле, левая вертикаль означает, что дела идут хорошо, ибо человек здоров. Значит, главный маршрут идет по шампуру. Вторая вертикаль описывает легкое недомогание, которое можно снять таблеткой. Третья вертикаль говорит: самочувствие ухудшилось, нужен врач. Наконец, четвертая (крайняя правая) вертикаль означает, что дела совсем плохи – пришлось лечь в больницу. Как уже упоминалось, схема на рис. 67 тоже не без греха – в ней на одну вертикаль больше, чем на рис. 66. Тем не менее, мы признаем ее наилучшей, поскольку выполняется более приоритетное правило маршрутов. §19. КАК УБРАТЬ «НЕУСТРАНИМОЕ» ПЕРЕСЕЧЕНИЕ ЛИНИЙ? Мы знаем, что некоторые пересечения удалить очень легко. Иногда для этого достаточно слегка подвинуть линии (рис. 63 и 64). Но так бывает не всегда. На рис. 68 (слева) показан «трудный орешек». Как же быть в этом случае? Как устранить досадную помеху? Ответ дает Правило. Чтобы убрать неустранимое (без введения дополнительных переменных) пересечение линий в блок-схеме, надо превратить блок-схему в дракон-схему силуэт. На рис. 68 (справа) изображен силуэт, который, как нетрудно убедиться, эквивалентен примитиву (слева) и вместе с тем не содержит ни одного пересечения.2 Таким образом, язык ДРАКОН позволяет устранить любое пересечение соединительных линий, используя строгие математические методы. Отсутствие визуальных помех (пересечений) создает дополнительные удобства для читателя, делает дракон-схему прозрачной, облегчает понимание. 2 Использованный нами прием опирается на классический метод АшкрофтаМанны [1]. 106 ЧАСТЬ 2. АЛГОРИТМИЧЕСКИЙ ЯЗЫК ДРАКОН И УДОБНЫЕ ЧЕРТЕЖИ АЛГОРИТМОВ ГЛАВА 7. КАК УЛУЧШИТЬ ПОНЯТНОСТЬ АЛГОРИТМОВ? 107 §20. ИКОНА «ВСТАВКА» КАК ЭРГОНОМИЧЕСКИЙ ПРИЕМ Желательно (но вовсе не обязательно), чтобы дракон-схема целиком размещалась на одном листе бумаги. А если она слишком большая и вылезает за рамки прокрустова ложа? Тогда можно взять бумагу побольше, например формата А1. А если схема громадная и все равно не помещается? На этот случай предусмотрены специальные приемы, позволяющие уменьшить габариты драконсхемы и разрубить ее на куски. Эти приемы позволяют разместить дракон-схему на листах желаемого размера. Рассмотрим проблему на «миниатюрном» примере. Предположим, линейный алгоритм состоит из 12 икон, а бумажный лист небольшой, так что на нем можно разместить по вертикали не более 8 икон. Как быть? На рис. 69 и 70 показаны два варианта решения проблемы. Алгоритм на рис. 69 не годится, так как на участке АВ бегунок движется вверх. Этот вариант придется отбросить, потому что нарушено Правило. Движение вверх запрещено. Преодолеть затруднение можно двумя способами: 108 ЧАСТЬ 2. АЛГОРИТМИЧЕСКИЙ ЯЗЫК ДРАКОН И УДОБНЫЕ ЧЕРТЕЖИ АЛГОРИТМОВ конструкцию «силуэт»; • применить разделить алгоритм на части. • Первый способ мы уже знаем (рис. 68), поэтому рассмотрим второй. Для этого удалим из алгоритма несколько связанных по смыслу икон. А вместо них нарисуем икону-заместитель, которая называется вставка (рис. 70). Вставка нужна, чтобы напомнить об изъятых иконах. Вставка занимает мало места – намного меньше, чем выброшенные иконы. Поэтому алгоритм становится короче. Разумеется, выброшенные иконы не пропадают. Они образуют новый алгоритм – процедуру (рис. 70). Обратите внимание: икона-вставка и процедура имеют одинаковое название «Собери рыбацкое снаряжение». Мы использовали прием «Разрежь великана». В результате длинный исходный алгоритм (рис. 69) распался на два коротких (рис. 70). Икона-вставка – это команда «Передай управление в процедуру» (рис. 71). Икона «конец» процедуры означает: «Верни управление в основной алгоритм». При этом управление возвращается в точку, расположенную после иконы-вставки. На языке программистов икона-вставка – это оператор «Вызов процедуры». §21. ЧТО ТАКОЕ ПОДСТАНОВКА? Операция «подстановка» связана с использованием иконы вставки. Она выполняется за три шага. Шаг 1. Из дракон-схемы удаляем фрагмент, имеющий один вход и один выход. Шаг 2. Вместо него подставляем икону вставка с именем Х. Шаг 3. К удаленному фрагменту добавляем икону заголовок с тем же именем Х и икону конец. В результате получаем процедуру. Два алгоритма на рис. 69 и 70 неравносильны, их формулы не совпадают. В самом деле, на рис. 69 мы видим 12 икон, а на рис. 70 – 15 икон (см. также рис. 71). Вместе с тем нетрудно убедиться, что подстановка – эквивалентное преобразование алгоритмов, так как исходный и преобразованный алгоритмы дают одинаковые результаты для одних и тех же исходных данных. Попутно заметим, что равносильные алгоритмы всегда эквивалентны (обратное неверно). Таким образом, операция «подстановка» представляет собой эквивалентное (но не равносильное) преобразование алгоритмов. §22. ЭПОХА ПОНЯТНЫХ АЛГОРИТМОВ Мы рассмотрели ряд операций, позволяющих выполнить эквивалентное преобразование алгоритмов (при котором смысл алгоритма не меняется). ГЛАВА 7. КАК УЛУЧШИТЬ ПОНЯТНОСТЬ АЛГОРИТМОВ? 109 110 ЧАСТЬ 2. АЛГОРИТМИЧЕСКИЙ ЯЗЫК ДРАКОН И УДОБНЫЕ ЧЕРТЕЖИ АЛГОРИТМОВ ГЛАВА 7. КАК УЛУЧШИТЬ ПОНЯТНОСТЬ АЛГОРИТМОВ? 111 К их числу относятся: рокировка, вертикальное объединение, горизонтальное объединение и подстановка. Подчеркнем еще раз, что эти операции являются математически строгими. С другой стороны, они позволяют улучшить понятность алгоритмов. Отсюда следует важный Вывод. Понятность (эргономичность) алгоритмов можно повысить с помощью строгих математических методов. Попытаемся заглянуть в будущее. Можно предположить, что мы находимся на пороге новой эпохи – эпохи понятных алгоритмов. Впервые в истории во всем мире сложные алгоритмы станут легкими для понимания. Это значит, что будет реализована заветная мечта многих дальновидных специалистов. Вместо нынешних, уму непостижимых, алгоритмических джунглей повсюду засияют волшебным светом удивительно наглядные описания алгоритмов и процессов. Перед нашими восхищенными очами откроется новый мир – мир дружелюбных алгоритмов, в котором будет царить необыкновенная легкость и глубина понимания. Можно предположить, что дальнейшее развитие теории и практики эргономичных алгоритмов проложит путь ко всеобщей алгоритмической грамотности (в тех пределах, в которых подобная задача в принципе может быть решена). §23. ВЫВОДЫ 1. Развилка – часть дракон-схемы, внутри которой маршрут сначала раздваивается, а затем соединяется в точке слияния. 2. У развилки два плеча, левое и правое. 3. Маршрут – это графический путь от начала до конца алгоритма, проходящий через иконы и соединительные линии. 4. Маршрут можно описать с помощью формулы, которая представляет собой последовательность букв, обозначающих иконы. 5. Набор маршрутов – это множество маршрутов данного алгоритма. Набор маршрутов и набор формул – одно и то же. 6. Равносильные алгоритмы – это алгоритмы, имеющие одинаковый набор маршрутов (одинаковый набор формул). 7. Рокировка – преобразование алгоритма, при котором левое и правое плечи развилки меняются местами. 8. Формальное преобразование алгоритма X в алгоритм Y называется равносильным, если алгоритмы X и Y равносильны. 9. Рокировка является равносильным преобразованием алгоритмов. 112 ЧАСТЬ 2. АЛГОРИТМИЧЕСКИЙ ЯЗЫК ДРАКОН И УДОБНЫЕ ЧЕРТЕЖИ АЛГОРИТМОВ 10. Если к визуальному алгоритму X применить операцию «рокировка», получим визуальный алгоритм Y, эквивалентный алгоритму X. 11. Рокировка позволяет улучшить наглядность и эргономичность алгоритмов. 12. Вертикальное объединение – операция, при которой несколько одинаковых икон объединяются в одну с помощью вертикальной линии. 13. Вертикальное объединение является равносильным преобразованием алгоритмов. 14. Горизонтальное объединение – операция, при которой несколько одинаковых икон объединяются в одну с помощью горизонтальной линии. 15. Горизонтальное объединение является равносильным преобразованием алгоритмов. 16. Если к визуальному алгоритму X применить операцию «вертикальное объединение» (или «горизонтальное объединение»), получим визуальный алгоритм Y, эквивалентный алгоритму X. 17. Вертикальное объединение и горизонтальное объединение позволяют улучшить наглядность и эргономичность алгоритмов. 18. Чтобы убрать неустранимое (без введения дополнительных переменных) пересечение линий в блок-схеме, надо превратить блоксхему в дракон-схему силуэт. 19. Описанные в данной главе математические методы позволяют значительно увеличить понятность алгоритмов для человеческого зрительного восприятия и человеческого мышления. Глава 8 ПРОСТЫЕ ЦИКЛИЧНЫЕ АЛГОРИТМЫ §1. КАКИЕ БЫВАЮТ АЛГОРИТМЫ? Различают три типа алгоритмов: линейные, разветвленные и цикличные. Линейные алгоритмы – алгоритмы, в которых нет ни разветвлений, ни повторяющихся (цикличных) участков. Примеры показаны на рис. 1, 5–8, 19–22, 39, 69, 70. Разветвленные алгоритмы – алгоритмы, в которых есть разветвления, но нет повторяющихся (цикличных) участков. Примеры представлены на рис. 4, 9, 11–15, 27, 29–33, 46–56, 59–62, 67. Цикличные алгоритмы (сокращенно циклы) – алгоритмы, в которых есть повторяющиеся (цикличные) участки. Нам уже встречались такие алгоритмы на рис. 25, 33а–35. Пришла пора рассмотреть данную тему более детально. §2. ОБЗОР ЦИКЛОВ ЯЗЫКА ДРАКОН В языке ДРАКОН имеется следующий ассортимент циклов: цикл; • обычный веточный • цикл ДЛЯ;цикл; • переключающий цикл; • цикл ЖДАТЬ. • Первые четыре цикла рассмотрены в этой и следующей главе, цикл ЖДАТЬ – в главе 13. §3. ОБЫЧНЫЙ ЦИКЛ Термин «обычный цикл» обозначает три типа циклов: • цикл ДО (do–while), 114 ЧАСТЬ 2. АЛГОРИТМИЧЕСКИЙ ЯЗЫК ДРАКОН И УДОБНЫЕ ЧЕРТЕЖИ АЛГОРИТМОВ ПОКА (while–do), • цикл гибридный цикл (do–while–do). • Отличить их очень легко. У цикла ДО вопрос рисуют внизу, а действие вверху (рис. 72). У цикла ПОКА – все наоборот (рис. 73). Гибридный цикл – это «помесь» цикла ДО и цикла ПОКА (рис. 74). Вопрос вверху – наверняка Перед нами цикл ПОКА. У цикла ДО, наоборот, Вопрос внизу сидит, как крот. Взглянем на рис. 18, макроикона 4. В этой макроиконе две точки ввода. Если ввести икону «действие» в верхнюю точку ввода, получим цикл ДО (рис. 72). Если – в правую, получим цикл ПОКА (рис. 73). Если заполнить обе точки, образуется гибридный цикл (рис. 74). §4. ЦИКЛИЧНЫЕ АЛГОРИТМЫ Цикличные алгоритмы – вещь довольно сложная. Поэтому мы будем рассказывать о них на самых простых бытовых примерах, не избегая юмористических приемов. Как говорил великий Блез Паскаль, «предмет математики настолько серьезен, что полезно не упускать случая сделать его немного занимательным». Теперь о главном. Существующие циклы, используемые во всем мире, имеют серьезный недостаток. Они накладывают на творческую мысль алгоритмиста неоправданные ограничения. Графика позволяет снять многие из этих ограничений. В результате алгоритмическая мысль становится более естественной и плодотворной. ГЛАВА 8. ПРОСТЫЕ ЦИКЛИЧНЫЕ АЛГОРИТМЫ 115 §5. РАССКАЗ О ЗМЕЕ ГОРЫНЫЧЕ (ЦИКЛ «ДО») Предположим, у Змея Горыныча три головы. Чтобы победить Змея, Илья Муромец должен отсечь злодею все головы. То есть три раза исполнить команду «Отруби голову» (рис. 75). Если у Змея пять голов, эту команду придется повторить пять раз (рис. 76). А если у Змея сто или тысяча голов? Тогда – если действовать в лоб – придется написать подряд сто или тысячу команд. Ясно, что это нелепый путь. Чтобы изложить алгоритм подобным образом, никакой бумаги не хватит! Чтобы не писать слишком много одинаковых команд, нужно использовать цикл. Цикл – это повторяющееся исполнение одних и тех же команд. Фокус в том, что команда в алгоритме записывается один раз, а исполняется много раз – столько, сколько нужно. Как работает цикл? Предположим, у Змея только одна голова, которую мы победили с помощью команды 1 (рис. 77). В этом случае на вопрос 2: «У Змея Горыныча остались живые головы?» – отвечаем «нет», и алгоритм заканчивается. Если же у Змея есть уцелевшие головы, отвечаем «да» и, проходя через стрелку, снова попадаем на вход иконы 1. После чего рубим следующую голову. Еще раз задаем вопрос 2. Если у Змея по-прежнему остались головы, отвечаем «да» и вновь возвращаемся на вход иконы 1. Таким образом, исполнение команд 1 и 2 может продолжаться и сто, и двести, и тысячу раз – до тех пор, пока наш алгоритм (управляющий «роботом» Ильей Муромцем) не отсечет у Змея все головы до последней – см. также рис. 78. Цикличный алгоритм Это алгоритм, в котором команды записываются один раз, а выполняются многократно §6. ЦИКЛ СО СДОБНЫМИ ПЛЮШКАМИ (ЦИКЛ «ПОКА») Однажды Карлсон, который живет на крыше, нашел кошелек и открыл его (рис. 79). А что случилось дальше? Здесь возможны варианты. Вариант 1. Кошелек оказался пустым. Поэтому Карлсону не удалось купить плюшку. Вариант 2. В кошельке всего одна денежка, так что Карлсон смог купить только одну плюшку. Вариант 3. В кошельке целая куча монет. Поэтому Карлсон купил гору плюшек и наелся до отвала. Таким образом, цикл на рис. 79 может: • ни разу не выполняться; 116 ЧАСТЬ 2. АЛГОРИТМИЧЕСКИЙ ЯЗЫК ДРАКОН И УДОБНЫЕ ЧЕРТЕЖИ АЛГОРИТМОВ ГЛАВА 8. ПРОСТЫЕ ЦИКЛИЧНЫЕ АЛГОРИТМЫ 117 118 ЧАСТЬ 2. АЛГОРИТМИЧЕСКИЙ ЯЗЫК ДРАКОН И УДОБНЫЕ ЧЕРТЕЖИ АЛГОРИТМОВ ГЛАВА 8. ПРОСТЫЕ ЦИКЛИЧНЫЕ АЛГОРИТМЫ 119 один раз; • выполняться выполняться много раз (два и более). • Такой цикл имеет специальное название – «цикл ПОКА». Рассмотрим подробнее. Цикл на рис. 79 начинается с вопроса: «В кошельке есть денежки?». Если денег нет, из иконы «вопрос» бегунок выходит через «нет», и алгоритм сразу заканчивается. Следовательно, действие «Возьми из кошелька денежку» не выполняется ни разу. Если же деньги есть, бегунок выходит через «да» и начинает кружить по маршруту АБВГДЕЖА. При этом выполняются действия, образующие тело цикла: • Возьми из кошелька денежку. • Купи себе плюшку. • Съешь плюшку. Когда деньги кончатся, бегунок выходит из иконы «вопрос» через «нет». И алгоритм заканчивается. §7. ОСОБЕННОСТЬ ЦИКЛА «ДО» В цикле ДО действие выполняется до вопроса. Это значит, что бегунок сначала пробегает через одну или несколько икон «действие», потом – через икону «вопрос». Например, в цикле на рис. 77 сначала выполняется действие «Отруби голову Змею Горынычу». И только после этого возникает вопрос: «У Змея Горыныча остались живые головы?». Такая же картина на рис. 80. В начале цикла выполняются два действия: одну доску. • Покрась Шагни вправо на ширину доски. • И лишь затем задается вопрос: «Все доски покрашены?». При ответе «нет» описанные два действия выполняются снова и снова. Когда все доски будут покрашены, бегунок выходит из иконы «вопрос» через «да». И алгоритм заканчивает работу. §8. СРАВНЕНИЕ ЦИКЛОВ «ПОКА» И «ДО» В цикле ПОКА иная картина. Действие либо вообще не выполняется, либо выполняется после вопроса. Бегунок сначала движется через икону «вопрос», а затем (если ответ благоприятный) – через икону «действие» (рис. 79). Рассмотрим противоположный пример, связанный с циклом ДО (рис. 77). Невозможно представить, чтобы на битву с Ильей Муромцем изначально прибыл Змей-инвалид, у которого нет ни одной головы. Поэтому можно быть уверенным, что до начала сражения, по крайней 120 ЧАСТЬ 2. АЛГОРИТМИЧЕСКИЙ ЯЗЫК ДРАКОН И УДОБНЫЕ ЧЕРТЕЖИ АЛГОРИТМОВ ГЛАВА 8. ПРОСТЫЕ ЦИКЛИЧНЫЕ АЛГОРИТМЫ 121 122 ЧАСТЬ 2. АЛГОРИТМИЧЕСКИЙ ЯЗЫК ДРАКОН И УДОБНЫЕ ЧЕРТЕЖИ АЛГОРИТМОВ мере, одна голова у Змея непременно есть. Следовательно, Илья Муромец обязательно отсечет Змею хотя бы одну голову. Этот пример подтверждает, что в цикле ДО действие выполняется, как минимум, один раз. В цикле ДО действие обязательно выполняется хотя бы один раз. А в цикле ПОКА при некоторых условиях действие может ни разу не выполняться. §9. УСЛОВИЕ ПРОДОЛЖЕНИЯ И ОКОНЧАНИЯ ЦИКЛА Уже говорилось, что в иконе «вопрос» записан да-нетный вопрос. То есть логическая переменная величина, принимающая значение «да» или «нет». На рис. 79 (внизу) показаны два важных условия. Условие продолжения цикла Это условие, при котором цикл продолжает работать Условие окончания цикла Это условие, при котором цикл заканчивает работу Условие продолжения цикла соответствует правому выходу иконы «вопрос». Условие окончания цикла – нижнему. Условие окончания цикла может помечаться как словом «нет», так и словом «да». То же самое относится и к условию продолжения цикла. Пример 1. На рис. 79 условие продолжения цикла имеет вид: В кошельке есть денежки? = да Когда деньги кончатся, логическая переменная изменит свое значение с «да» на «нет». В этот момент условие продолжения цикла исчезнет. И появится условие окончания цикла: В кошельке есть денежки? = нет Пример 2. На рис. 80 условие продолжения цикла имеет вид: Все доски покрашены? = нет Когда все доски будут покрашены, логическая переменная изменит свое значение с «нет» на «да». В этот момент условие продолжения цикла исчезнет. И появится условие окончания цикла: 123 ГЛАВА 8. ПРОСТЫЕ ЦИКЛИЧНЫЕ АЛГОРИТМЫ Все доски покрашены? = да Сравнивая примеры 1 и 2 (рис. 79 и 80), можно сформулировать Правило. В правой части условия (подчиняясь логике задачи) алгоритмист по своему усмотрению может ставить как «да», так и «нет». §10. ВЫВОДЫ 1. Различают три типа алгоритмов: линейные, разветвленные и цикличные. 2. В языке ДРАКОН имеются следующие циклы: обычный цикл; веточный цикл; цикл ДЛЯ; переключающий цикл; цикл ЖДАТЬ. 3. Термин «обычный цикл» обозначает три типа циклов: цикл ДО; цикл ПОКА; гибридный цикл. 4. Существующие циклы, используемые во всем мире, имеют недостаток. Они накладывают на творческую мысль алгоритмиста ограничения. Язык ДРАКОН позволяет снять многие из этих ограничений. В результате алгоритмическая мысль становится более естественной и плодотворной. 5. Условие продолжения цикла – условие, при котором цикл продолжает работать. 6. Условие окончания цикла – условие, при котором цикл заканчивает работу. 7. У обычного цикла условие продолжения цикла соответствует правому выходу иконы «вопрос». 8. У обычного цикла условие окончания цикла соответствует нижнему выходу иконы «вопрос». 9. Условие окончания цикла может помечаться как словом «нет», так и словом «да». То же самое относится и к условию продолжения цикла. • • • • • • • • Глава 9 ОСОБЕННОСТИ ЦИКЛИЧНЫХ АЛГОРИТМОВ §1. ВВЕДЕНИЕ В этой главе освещаются следующие вопросы: • досрочный выход из цикла; • веточный цикл; • цикл ДЛЯ; • переключающий цикл. §2. ВХОДЫ И ВЫХОДЫ ЦИКЛИЧНОГО АЛГОРИТМА Цикл (цикличный алгоритм) имеет только один вход. А выходов может быть несколько. Один выход цикла называется основным, остальные – досрочными. Начнем с изучения досрочных выходов. §3. ДОСРОЧНЫЙ ВЫХОД ИЗ ЦИКЛА «ПОКА» Карлсон, который живет на крыше, может съесть очень много плюшек. Наверное, штук сто. Или даже двести. Но не больше! Иначе он просто лопнет. А теперь предположим, что в кошельке, на его счастье (или беду), оказалось пятьсот монет. Зададим вопрос: как в этой ситуации будет работать алгоритм на рис. 79? Бедный Карлсон! Ему не позавидуешь. Алгоритм заставит его съесть пятьсот плюшек. Все до единой! И он наверняка умрет от обжорства. Почему? Потому что из цикла на рис. 79 нельзя выйти раньше времени. Вспомним – в кошельке пятьсот монет. Значит каждая команда цикла из кошелька денежку. • Возьми Купи себе плюшку. • Съешь плюшку. • ГЛАВА 9. ОСОБЕННОСТИ ЦИКЛИЧНЫХ АЛГОРИТМОВ 125 будет исполнена ровно пятьсот раз. И лишь затем на вопрос: «В кошельке есть денежки?» – мы получим ответ «нет» и сможем уйти из цикла. Отсюда следует вывод. Чтобы спасти Карлсона, нужно организовать досрочный выход из цикла. Для этого в алгоритм нужно ввести дополнительную команду-вопрос: «Карлсон уже наелся?» (рис. 81). Что это даст? Допустим, в кошельке пятьсот монет, а Карлсон может съесть всего двадцать плюшек. После того как цикл повторится двадцать раз, на вопрос: «Карлсон уже наелся?» – будет получен ответ «да». И мы благополучно выйдем из цикла. Обратите внимание. Цикл на рис. 81 имеет не один, а два выхода: основной и досрочный. Через первый мы выходим, когда в кошельке кончились деньги. Через второй – когда Карлсон наелся. §4. ДОСРОЧНЫЙ ВЫХОД ИЗ ЦИКЛА «ДО» Папино слово – закон! А папа сказал: сегодня нужно покрасить забор. На рис. 80 показан случай, когда все идет по плану и работа успешно доводится до конца. Однако в жизни вечно случается то одно, то другое. Например, ни с того ни с сего кончилась краска. Этот случай представлен на рис. 82. Алгоритм на рис. 82 имеет два выхода из цикла: основной (забор удалось покрасить) и досрочный (забор остался недокрашенным). Однако, что значит «кончилась краска»? Одно дело, если краски нет в ведре – тогда ее можно взять в сарае. И совсем другое, если в сарае краски тоже нет. Последний случай показан на рис. 83. Жизнь полна неожиданностей. Кому охота красить дурацкий забор, если все нормальные люди уже играют в футбол? Этот полезный для футбола и вредный для забора случай отражен на рис. 84. Данный алгоритм интересен тем, что в нем три выхода из цикла: основной и два досрочных. В первом случае забор будет покрашен как надо. Во втором дело не ладится из-за нехватки краски. В третьем – из-за любви к футболу. Повторенье – мать ученья. Давайте еще раз повторим Правило. В цикле всего один вход. А выходов может быть много. Один выход – основной, остальные – досрочные. §5. ОСОБЕННОСТИ ОБЫЧНОГО ЦИКЛА Рассмотрим циклы ДО и ПОКА в общем виде. Анализируя рисунки 72–84, можно сделать следующие замечания. оператор «обычный цикл» имеет один вход и один или • Визуальный несколько выходов. с одним выходом представляет собой шампур-блок (вход и • Цикл выход находятся на одной вертикали). 126 ЧАСТЬ 2. АЛГОРИТМИЧЕСКИЙ ЯЗЫК ДРАКОН И УДОБНЫЕ ЧЕРТЕЖИ АЛГОРИТМОВ ГЛАВА 9. ОСОБЕННОСТИ ЦИКЛИЧНЫХ АЛГОРИТМОВ 127 128 ЧАСТЬ 2. АЛГОРИТМИЧЕСКИЙ ЯЗЫК ДРАКОН И УДОБНЫЕ ЧЕРТЕЖИ АЛГОРИТМОВ ГЛАВА 9. ОСОБЕННОСТИ ЦИКЛИЧНЫХ АЛГОРИТМОВ 129 130 ЧАСТЬ 2. АЛГОРИТМИЧЕСКИЙ ЯЗЫК ДРАКОН И УДОБНЫЕ ЧЕРТЕЖИ АЛГОРИТМОВ цикл имеет более одного выхода, основной выход, как прави• Если ло, размещается на главной вертикали. Дополнительные (досроч- • • • • • ные) – справа от нее. Шампур цикла проходит через икону «вопрос». Тело цикла ПОКА находится справа от шампура. Тело цикла ДО находится на шампуре. Петля цикла находится правее главной вертикали и закручена против часовой стрелки. Икона «вопрос» задает условие цикла, которое распадается на две части: условие продолжения цикла и условие окончания цикла (рис. 79). §6. ВЕТОЧНЫЙ ЦИКЛ Циклы, описанные выше, могут использоваться как в примитиве, так и в силуэте. В этом параграфе речь пойдет о веточном цикле, который встречается только в силуэте. Веточный цикл x x Это повторное исполнение одной или нескольких веток Чтобы построить веточный цикл, нужно написать в иконе «адрес» название данной ветки (или более левой ветки) На рис. 80 изображен цикличный алгоритм «Покраска забора». Можно ли нарисовать его в виде силуэта? Да, можно. Результат показан на рис. 85. Во второй ветке слово «Покраска» встречается дважды: вверху и внизу. Это значит, что перед нами веточный цикл. Бегунок, доехав до адреса «Покраска», тут же вернется к началу ветки и будет «утюжить» ее вновь и вновь. Цикличное движение по ветке «Покраска» будет продолжаться, пока выполняется условие продолжения цикла: Все доски покрашены? = нет Когда Том Сойер кончит красить забор, появится условие окончания цикла: Все доски покрашены? = да После этого бегунок, проходя через икону «вопрос», повернет направо и через адрес «Завершение» попадет в ветку «Завершение». На этом алгоритм закончит работу (рис. 85). Другой пример веточного цикла показан на рис. 86. ГЛАВА 9. ОСОБЕННОСТИ ЦИКЛИЧНЫХ АЛГОРИТМОВ 131 132 ЧАСТЬ 2. АЛГОРИТМИЧЕСКИЙ ЯЗЫК ДРАКОН И УДОБНЫЕ ЧЕРТЕЖИ АЛГОРИТМОВ §7. СЛОЖНЫЕ ВЕТОЧНЫЕ ЦИКЛЫ Как и любой цикл, веточный цикл может иметь основной и досрочный выходы (рис. 87 и 88). Веточный цикл можно использовать в сочетании с циклами ДО и ПОКА. Например, на рис. 89 изображена конструкция «цикл в цикле». Внутри веточного цикла «Покраска» находится цикл ДО, содержащий иконы: кисть в краску. • Обмакни Сделай мазок по доске. • Покраска доскикистью закончена? • Вопрос. Зачем нужны маленькие черные треугольники в иконах «Покраска» и «Покупка плюшек» (рис. 85–89)? Ответ. Это флажки. Они привлекают внимание и позволяют легко заметить веточный цикл даже при беглом взгляде. §8. ЦИКЛ ДЛЯ На рис. 90 и 91 показаны два варианта решения простой математической задачи. В первом случае используется цикл ДО, во втором – цикл ДЛЯ. Цикл ДЛЯ – составной графический оператор (рис. 18, макроикона 6). Он содержит иконы «начало цикла ДЛЯ» и «конец цикла ДЛЯ» (рис. 17, иконы И12 и И13), между которыми располагаются одна или несколько других икон. Внутри иконы «начало цикла ДЛЯ» указываются переменная цикла, ее начальное и конечное значения и шаг. Правила записи этих величин определяется выбранным вариантом текстового синтаксиса. На рис. 91 изображен вариант, по умолчанию принимающий, что шаг равен 1. §9. ПЕРЕКЛЮЧАЮЩИЙ ЦИКЛ Переключатель позволяет создать особый тип цикла – переключающий цикл (рис. 18, макроикона 5). Для этого нужно мысленно оторвать выход правой ветви переключателя, загнуть его вверх и присоединить стрелку в нужное место (рис. 92). На рис. 93 изображен цикл с переключателем, однако это не переключающий цикл, а обычный. Как их отличить? В первом случае переключатель имеет два выхода, во втором – только один. Есть еще одно отличие. Если вверх загибается выход иконы «вопрос» – это обычный цикл (ДО, ПОКА или гибридный). А если кверху идет выход переключателя – перед нами переключающий цикл. ГЛАВА 9. ОСОБЕННОСТИ ЦИКЛИЧНЫХ АЛГОРИТМОВ 133 134 ЧАСТЬ 2. АЛГОРИТМИЧЕСКИЙ ЯЗЫК ДРАКОН И УДОБНЫЕ ЧЕРТЕЖИ АЛГОРИТМОВ ГЛАВА 9. ОСОБЕННОСТИ ЦИКЛИЧНЫХ АЛГОРИТМОВ 135 136 ЧАСТЬ 2. АЛГОРИТМИЧЕСКИЙ ЯЗЫК ДРАКОН И УДОБНЫЕ ЧЕРТЕЖИ АЛГОРИТМОВ ГЛАВА 9. ОСОБЕННОСТИ ЦИКЛИЧНЫХ АЛГОРИТМОВ 137 138 ЧАСТЬ 2. АЛГОРИТМИЧЕСКИЙ ЯЗЫК ДРАКОН И УДОБНЫЕ ЧЕРТЕЖИ АЛГОРИТМОВ §10. КОГДА В ИКОНЕ «ИМЯ ВЕТКИ» ПИШУТ СЛОВО «ЗАВЕРШЕНИЕ» ИЛИ «ВЫХОД»? Рассмотрим случай, когда в последней ветке силуэта находятся только две иконы: «имя ветки» и «конец». В этом случае в иконе «имя ветки» пишут слово Завершение (рис. 86, 87). Или Выход. Если в последней ветке (кроме икон «имя ветки» и «конец») нарисованы одна или несколько икон «комментарий», в иконе «имя ветки» также пишут Завершение (рис. 85, 89). Или Выход. Правило. При описанных условиях запрещается заменять слово Завершение (или Выход) каким-либо другим словом. Если же в последней ветке (кроме икон имя ветки и конец) находится икона, отличная от комментария, вместо слова Завершение (или Выход) пишут слово, обозначающее содержание ветки. Например, на рис. 88 использовано слово Уборка. ГЛАВА 9. ОСОБЕННОСТИ ЦИКЛИЧНЫХ АЛГОРИТМОВ 139 §11. ВЫВОДЫ 1. Обычный цикл имеет один вход. И один или несколько выходов. 2. Первый выход цикла называется основным, остальные – досрочными. 3. Цикл с одним выходом представляет собой шампур-блок (вход и выход находятся на одной вертикали). 4. Если цикл имеет более одного выхода, основной выход, как правило, размещается на главной вертикали. Дополнительные (досрочные) – справа от нее. 5. Шампур цикла проходит через икону «вопрос». 6. Тело цикла ПОКА находится справа от шампура. 7. Тело цикла ДО находится на шампуре. 8. Петля цикла находится правее главной вертикали и закручена против часовой стрелки. 9. Икона «вопрос» задает условие цикла, которое распадается на две части: условие продолжения цикла и условие окончания цикла 10. Веточный цикл – это повторное исполнение одной или нескольких веток. 11. Чтобы построить веточный цикл, нужно написать в иконе «адрес» название данной ветки (или более левой ветки). 12. Веточный цикл используется только в силуэте. 13. Как и любой цикл, веточный цикл может иметь основной и досрочный выходы. 14. В веточном цикле в иконах «имя ветки» и «адрес» используются маленькие черные треугольники (флажки). 15. Флажки привлекают внимание и позволяют легко заметить веточный цикл даже при беглом взгляде. 16. Если в силуэте есть два веточных цикла, то, чтобы их различить, используют два разных маркера (см. ниже рис. 183 и 184). 17. Если в последней ветке силуэта находятся только иконы: «имя ветки», «конец» и, возможно, «комментарий», в иконе «имя ветки» пишут слово Завершение. Или Выход. Глава 10 СЛОЖНЫЕ ЦИКЛИЧНЫЕ АЛГОРИТМЫ. СТРУКТУРА «ЦИКЛ В ЦИКЛЕ» §1. ВВЕДЕНИЕ Русская матрешка – игрушка с секретом. Откроешь одну – в ней прячется другая. Откроешь вторую – а в ней еще одна. Между прочим, цикл тоже можно спрятать внутри другого цикла. Получается структура «цикл в цикле», очень похожая на матрешку в матрешке. §2. ЦИКЛ «ДО» ВНУТРИ ЦИКЛА «ДО» Рассмотрим графическую конструкцию «цикл внутри другого цикла». Пусть это будет цикл ДО внутри цикла ДО. На рис. 80 есть команда «Покрась одну доску». Взглянем на нее «под микроскопом». Чтобы покрасить доску, надо сделать несколько операций: макнуть кисть в краску, сделать мазок, потом еще и еще – до тех пор, пока вся доска не станет окрашенной. Эти действия можно изобразить в виде цикла (рис. 94). (Рис. 94 находится слева от рис. 95). Что же мы сделали? Команду «Покрась одну доску» мы превратили в цикличный алгоритм на рис. 94. Передвинем этот цикл вправо и вставим его в рис. 95. Мы получили конструкцию «цикл в цикле». Этот алгоритм работает так. Предположим, забор красит Том Сойер. Сначала Том выполняет две команды (рис. 95): ведро с краской и кисть. • Возьми Подойди к левому краю забора. • Дальше нужно покрасить самую первую доску. Для этого Том исполняет команды, содержащиеся в цикле ДО (2): кисть в краску. • Обмакни Сделай мазок по доске. • Покраска доскикистью окончена? • ГЛАВА 10. СЛОЖНЫЕ ЦИКЛИЧНЫЕ АЛГОРИТМЫ. СТРУКТУРА «ЦИКЛ В ЦИКЛЕ» 141 Если не окончена, Том продолжает красить до тех пор, пока не будет выполнено условие окончания цикла ДО (2): Покраска доски окончена? = да Рассмотрим числовой пример. Допустим, чтобы покрасить одну доску, нужно семь раз макнуть кисть в краску и сделать семь мазков. Значит цикл ДО (2) будет выполнен ровно семь раз. После этого Том выполняет команды цикла ДО (1): вправо на ширину доски. • Шагни Все доски покрашены? • Если нет (не все доски покрашены), Том примется за следующую доску. Давайте проследим маршрут. Из иконы «Все доски покрашены?» выходим через «нет» направо. По стрелке попадаем на вход цикла ДО (1). Затем Том начинает красить вторую доску. Он семь раз макнет кисть и сделает семь мазков. Разделавшись со второй доской, Том шагнет вправо на ширину доски и возьмется за третью доску. И так далее – пока весь забор не будет покрашен (рис. 95). §3. ЦИКЛ «ДО» ВНУТРИ ЦИКЛА «ПОКА» В алгоритме на рис. 79 заменим икону «Съешь плюшку» на цикл ДО, состоящий из икон «Откуси кусок плюшки» и «Плюшка съедена?» (рис. 96). В итоге снова получим цикл в цикле. Цикл ПОКА, построенный с помощью иконы «В кошельке есть денежки?», является внешним. В нем «прячется» внутренний цикл ДО (рис. 96). При выполнении цикла ДО бегунок кружит по внутренней петле ВИКЛВ. За это время Карлсон откусывает один кусок плюшки, потом другой и так далее. Когда он покончит с первой плюшкой, будет выполнено условие окончания цикла ДО. Плюшка съедена? = да После этого маршрут бегунка меняется. Если в кошельке по-прежнему есть деньги, бегунок побежит по внешней петле ЖАБВГДЕЖ. Предположим, в кошельке 50 монет, а Карлсон съедает плюшку за три приема. Это значит, что каждая команда цикла ПОКА будет выполнена 50 раз, а каждая команда цикла ДО – 150 раз. (Чтобы съесть 50 плюшек, откусив каждую 3 раза, нужно сделать 50 × 3 = 150 «откусываний»). §4. ЦИКЛ «ПОКА» ВНУТРИ ЦИКЛА «ДО» Рассмотрим алгоритм на рис. 97. Предположим, старый пасечник Микола решил собрать мед во всех ульях своей пасеки. Сначала Микола выполняет две команды (рис. 97): 142 ЧАСТЬ 2. АЛГОРИТМИЧЕСКИЙ ЯЗЫК ДРАКОН И УДОБНЫЕ ЧЕРТЕЖИ АЛГОРИТМОВ ГЛАВА 10. СЛОЖНЫЕ ЦИКЛИЧНЫЕ АЛГОРИТМЫ. СТРУКТУРА «ЦИКЛ В ЦИКЛЕ» 143 144 ЧАСТЬ 2. АЛГОРИТМИЧЕСКИЙ ЯЗЫК ДРАКОН И УДОБНЫЕ ЧЕРТЕЖИ АЛГОРИТМОВ защитную маску против пчел. • Надень Зайди на пасеку. • Дальше нужно взять мед в самом первом улье. Для этого Микола забирает мед из первого улья, делая это поочередно, порцию за порцией. При этом он исполняет команды, содержащиеся в цикле ПОКА (2): из данного улья собран полностью? • Мед Собери следующую порцию меда из данного улья. • При выполнении цикла ПОКА (2) бегунок кружит по внутренней петле. За это время Микола берет одну порцию меда, потом другую и т. д. Когда он покончит с первым ульем, будет выполнено условие окончания цикла ПОКА (2). Мед из данного улья собран полностью? = да После этого Микола выполняет команды: к следующему улью. • Переходи Мед из всех ульев собран полностью? • Если нет (если еще остались полные ульи) Микола продолжает обходить пасеку, улей за ульем. Когда он покончит с последним ульем будет выполнено условие окончания цикла ДО (1): Мед из всех ульев собран полностью? = да Предположим, на пасеке 30 ульев, причем из каждого улья Микола достает 6 порций меда. Это значит, что каждая команда цикла ДО будет выполнена 6 раз, а каждая команда цикла ПОКА – 180 раз. (Чтобы обойти 30 ульев, взяв из каждого 6 порций, нужно собрать 30 × 6 = 180 порций меда). §5. ЦИКЛ «ПОКА» ВНУТРИ ЦИКЛА «ПОКА» Рассмотрим алгоритм на рис. 98. Это рассказ о том, как Ваня получал деньги и тратил их на еду. Сначала Ваня выполняет две команды (рис. 98): • Зайди в банк. • Проверь свой счет. Прежде всего, Ваня интересуется: «На счете есть деньги?». Если нет, то история заканчивается. Потому как на нет и суда нет. Если же деньги есть, выполняется условие продолжения цикла ПОКА (1): На счете есть деньги? = да ГЛАВА 10. СЛОЖНЫЕ ЦИКЛИЧНЫЕ АЛГОРИТМЫ. СТРУКТУРА «ЦИКЛ В ЦИКЛЕ» 145 146 ЧАСТЬ 2. АЛГОРИТМИЧЕСКИЙ ЯЗЫК ДРАКОН И УДОБНЫЕ ЧЕРТЕЖИ АЛГОРИТМОВ В этом случае Ваня выполняет команды: со счета часть денег. • Сними Купи себе еду на неделю. • Затем начинает работу цикл ПОКА (2). Если еда есть, выполняется условие продолжения цикла ПОКА (2): На сегодня еда есть? = да Поэтому Ваня выполняет команды: • Позавтракай. • Пообедай. • Поужинай. Когда наступит следующий день, на вопрос «На сегодня еда есть?» следует ответ «да». При выполнении цикла ПОКА (2) бегунок кружит по внутренней петле семь раз (то есть в течение недели). Когда неделя кончится, еда тоже кончится (поскольку еда была куплена ровно на неделю). Бегунок выходит из иконы «вопрос» через нет. И попадает на вход внешнего цикла ПОКА (1). Перед Ваней вновь возникает вопрос «На счете есть деньги?». И так далее. §6. КАК ВСТАВИТЬ ЦИКЛ «ДО» В ЦИКЛ «ПОКА» В ОБЩЕМ ВИДЕ На рис. 99 показано построение абстрактной (буквенной) конструкции «цикл ДО в цикле ПОКА». Слева на рис. 99 изображен буквенный цикл ПОКА. Найдите икону С и превратите ее в цикл ДО. Для этого внутрь иконы С вставьте цикл ДО (в центре). Затем переместите цикл ДО внутрь цикла ПОКА. Результат показан на рис. 99 (справа). Таким образом, три схемы на рис. 99 отвечают на вопрос: как вставить цикл ДО внутрь цикла ПОКА. §7. СТРУКТУРА «ЦИКЛ В ЦИКЛЕ» На рис. 100 представлены четыре варианта структуры «цикл в цикле». ДО (2) внутри цикла ДО (1); • цикл цикл (2) внутри цикла ПОКА (1); • цикл ДО ПОКА внутри цикла ДО (1); • цикл ПОКА (2) (2) внутри цикла ПОКА (1). • Внешний цикл обозначен цифрой 1, внутренний – цифрой 2. 1-й вариант показан на рис. 95 (Покраска забора). ГЛАВА 10. СЛОЖНЫЕ ЦИКЛИЧНЫЕ АЛГОРИТМЫ. СТРУКТУРА «ЦИКЛ В ЦИКЛЕ» 147 148 ЧАСТЬ 2. АЛГОРИТМИЧЕСКИЙ ЯЗЫК ДРАКОН И УДОБНЫЕ ЧЕРТЕЖИ АЛГОРИТМОВ 2-й вариант – на рис. 96 (Карлсон нашел кошелек). 3-й вариант – на рис. 97 (Сбор меда на пасеке). 4-й вариант – на рис. 98 (Деньги и еда). Рис. 100 очень важен – он задает правила графического синтаксиса, используемые при создании конструкции «цикл в цикле». Обратите внимание. Эти правила не надо учить и запоминать. Почему? Потому что правила «помнит» и выполняет компьютерная программа, которая называется «конструктор алгоритмов». Об этом подробно рассказано в главе 32. Памятка В любых дракон-схемах (в том числе, в циклах) запрещается использовать пересечение линий. Этот запрет выполняется автоматически – с помощью «конструктора алгоритмов». Рисунки в этой книге подтверждают это правило. Пересечения линий нигде и никогда не используются. §8. ТРОЙНАЯ СТРУКТУРА «ЦИКЛ В ЦИКЛЕ» На рис. 101 показаны три цикла ДО, вставленные друг в друга. При этом используются следующие обозначения: 1 – внешний цикл ДО. 2 – средний цикл ДО. Он находится внутри внешнего цикла ДО. 3 – внутренний цикл ДО. Он находится внутри среднего цикла ДО. На рис. 102 представлены три цикла ПОКА, помещенные друг в друга. Приведем обозначения: 1 – внешний цикл ПОКА. 2 – средний цикл ПОКА. Он находится внутри внешнего цикла ПОКА. 3 – внутренний цикл ПОКА. Он находится внутри среднего цикла ПОКА. §9. ТРОЙНАЯ СТРУКТУРА «ЦИКЛ В ЦИКЛЕ». ПОКАЗАНЫ ДОСРОЧНЫЕ ВЫХОДЫ И ВЕТОЧНЫЙ ЦИКЛ В заключение рассмотрим задачу повышенной трудности. На дракон-схеме необходимо показать три основных и три досрочных выхода, а именно: досрочный выход из цикла ПОКА (1); основной выход из цикла ПОКА (1); досрочный выход из цикла ПОКА (2); основной выход из цикла ПОКА (2); досрочный выход из цикла ПОКА (3); основной выход из цикла ПОКА (3); • • • • • • ГЛАВА 10. СЛОЖНЫЕ ЦИКЛИЧНЫЕ АЛГОРИТМЫ. СТРУКТУРА «ЦИКЛ В ЦИКЛЕ» 149 150 ЧАСТЬ 2. АЛГОРИТМИЧЕСКИЙ ЯЗЫК ДРАКОН И УДОБНЫЕ ЧЕРТЕЖИ АЛГОРИТМОВ ГЛАВА 10. СЛОЖНЫЕ ЦИКЛИЧНЫЕ АЛГОРИТМЫ. СТРУКТУРА «ЦИКЛ В ЦИКЛЕ» 151 152 ЧАСТЬ 2. АЛГОРИТМИЧЕСКИЙ ЯЗЫК ДРАКОН И УДОБНЫЕ ЧЕРТЕЖИ АЛГОРИТМОВ Поставленная задача решена на рис. 103. Там изображена тройная структура «цикл в цикле» для цикла ПОКА. Эту конструкцию можно назвать так: «Цикл ПОКА (3) внутри цикла ПОКА (2) внутри цикла ПОКА (1). Для каждого из циклов 1 (внешний), 2 (средний) и 3 (внутренний) показаны основной и досрочный выходы. Внешний цикл построен с использованием веточного цикла (рис. 103). §10. ВЫВОДЫ 1. В главе рассмотрены четыре варианта структуры «цикл в цикле»: цикл ДО внутри цикла ДО; цикл ДО внутри цикла ПОКА; цикл ПОКА внутри цикла ДО; цикл ПОКА внутри цикла ПОКА. 2. Рис. 100 задает правила графического синтаксиса, используемые при создании конструкции «цикл в цикле». 3. Эти правила не надо учить и запоминать. Потому что правила «помнит» и выполняет программа «конструктор алгоритмов». • • • • Глава 11 ЛОГИЧЕСКИЕ ФОРМУЛЫ, ИСПОЛЬЗУЕМЫЕ В АЛГОРИТМАХ §1. ВИЗУАЛИЗАЦИЯ ЛОГИЧЕСКОЙ ФУНКЦИИ «И» – Где можно купить щенка? – В нашем городке они продаются на рынке, но сегодня рынок закрыт. К тому же щенков продают не каждый день. Щенки довольно дорогие и какие-то невзрачные – не знаю, понравятся ли они вам. Упростим рассказ. Будем считать, что покупка щенка возможна в том и только в том случае, когда выполняются три условия (рис. 104): • у покупателя есть деньги (Q); • щенки есть в продаже (R); • щенок понравился (S). В итоге получаем логическую функцию Х=Q и R и S где Х означает «Можно купить щенка» (рис. 104). §2. ЖЕЛАТЕЛЬНО ИЗБЕГАТЬ СЛОЖНЫХ ВЫРАЖЕНИЙ В традиционных алгоритмических языках значениями логических переменных считаются пары (ИСТИНА, ЛОЖЬ) или (1, 0). С эргономической точки зрения, такой подход нельзя признать удачным. В самом деле, использование таких сложных слов, как ИСТИНА и ЛОЖЬ или таинственных цифр 1 и 0 в примере о щенках (как и в любом другом конкретном примере) является неоправданным. Оно не содействует пониманию сути дела, а наоборот, затемняет картину. Ненужную сложность следует решительно устранить. В качестве значений логических переменных и логических функций гораздо лучше выбрать простые и ясные слова «да» и «нет». Смысл этих слов не требует пояснений. Он понятен любому. Даже ребенок знает, что такое «да» и «нет». 154 ЧАСТЬ 2. АЛГОРИТМИЧЕСКИЙ ЯЗЫК ДРАКОН И УДОБНЫЕ ЧЕРТЕЖИ АЛГОРИТМОВ ГЛАВА 11. ЛОГИЧЕСКИЕ ФОРМУЛЫ, ИСПОЛЬЗУЕМЫЕ В АЛГОРИТМАХ Логическая переменная величина 155 Это переменная величина, которая принимает два значения: «да» и «нет» Исходя из этого, в языке ДРАКОН используются ключевые слова «да» и «нет». А логические функции, переменные и выражения рассматриваются как да-нетные вопросы или утверждения. Правило. В языке ДРАКОН логические термины ИСТИНА, ЛОЖЬ, 1, 0 считаются нежелательными и, как правило, не используются. §3. ЛОГИЧЕСКАЯ ФУНКЦИЯ «И» x Логическая функция И x Это функция, которая приниQ мает значение «да», если все логические переменные имеют значение «да». В остальных случаях функция принимает значение «нет» (рис. 104). §4. АЛГОРИТМЫ, ИСПОЛЬЗУЮЩИЕ ФУНКЦИЮ «И» На рис. 105 приведены два примера алгоритмов. Слева описан рассказ о покупке щенков. Справа тот же самый алгоритм представлен в абстрактной математической форме. Попытайтесь в правом алгоритме найти и выделить логическую функцию «И». Полученный результат пригодится при анализе рис. 106. §5. ДВА СПОСОБА ЗАПИСИ ФУНКЦИИ «И» На языке ДРАКОН существуют два способа записи функции И: текстовый и визуальный (графический). В первом случае используют одну икону «вопрос», внутри которой пишут логическое выражение, состоящее из логических переменных, соединенных знаками логической операции И (рис. 106, слева). В другом случае на одной вертикали рисуют N икон «вопрос», где N – число логических переменных. Причем в каждой иконе записывают одну логическую переменную (рис. 106, справа). 156 ЧАСТЬ 2. АЛГОРИТМИЧЕСКИЙ ЯЗЫК ДРАКОН И УДОБНЫЕ ЧЕРТЕЖИ АЛГОРИТМОВ ГЛАВА 11. ЛОГИЧЕСКИЕ ФОРМУЛЫ, ИСПОЛЬЗУЕМЫЕ В АЛГОРИТМАХ 157 §6. КАКОЙ СПОСОБ ЛУЧШЕ: ТЕКСТОВЫЙ ИЛИ ВИЗУАЛЬНЫЙ? Визуальная формула на рис. 106 показывает, что оба способа эквивалентны. Для практического использования рекомендуется визуальный способ, так как он более нагляден и позволяет быстрее найти ошибку в сложном алгоритме. Следует подчеркнуть, что текстовый способ не является запрещенным. Но пользоваться им следует с осторожностью и лишь в тех случаях, когда пользователь убежден в своих способностях гарантировать отсутствие ошибок. Опыт показывает, что большинство людей выбирают визуальный способ как более легкий. Однако подготовленные специалисты, знакомые с основами математической логики, иногда предпочитают текстовый метод. Таким людям можно посоветовать освоить оба метода. §7. СРАВНЕНИЕ МАТЕМАТИЧЕСКОЙ ФОРМУЛЫ И ДРАКОН-СХЕМЫ На рис. 107 приведена математическая формула «И» и равносильная ей дракон-схема «И». Какую из них следует предпочесть? Какая является более понятной? Более эргономичной? Слева представлена традиционная формула, понятная далеко не всем. Формула справа, написанная на языке ДРАКОН, намного легче для понимания. Она становится еще более наглядной, если заменить абстрактные буквы Q, R, S, B на конкретные производственные понятия. Например (рис. 108): Q = норма подачи топлива; R = норма зажигания; S = норма электропитания; B = включить двигатель. • • • • Два объекта на рис. 107 (текстовый слева и графический справа) математически эквивалентны. Это значит, что дракон-схема является математической формулой. Отсюда вытекает, что математические формулы бывают не только текстовые, но и графические (визуальные). И последнее. Анализируя формулу слева на рис. 107, приходится вникать в сложные подробности, например: Х = [Q & R & S = да] = [(Q = да) & (R = да) & (S = да)] Дракон-схема (рис. 107, справа) хороша тем, что полностью избавляет читателя от подобной ненужной работы. На рис. 107 и 108 вместо знака «И» использован знак «&» (конъюнкция). Оба знака имеют одинаковый смысл и обозначают одно и то же. Далее мы будем использовать оба знака. 158 ЧАСТЬ 2. АЛГОРИТМИЧЕСКИЙ ЯЗЫК ДРАКОН И УДОБНЫЕ ЧЕРТЕЖИ АЛГОРИТМОВ ГЛАВА 11. ЛОГИЧЕСКИЕ ФОРМУЛЫ, ИСПОЛЬЗУЕМЫЕ В АЛГОРИТМАХ 159 §8. ЛОГИЧЕСКАЯ СВЯЗКА «И» Знак «И» имеет еще одно название – логическая связка И. Почему связка? Потому что знак «И» связывает между собой логические переменные. Например, на рис. 104 описана логическая функция X = Q и R и S. В этой формуле логическая связка «И» повторяется два раза. Она связывает между собой три логические переменные Q, R, S. §9. ВИЗУАЛИЗАЦИЯ ЛОГИЧЕСКОЙ ФУНКЦИИ «ИЛИ» Пете не повезло – он заболел. Что с ним случилось? На этот счет может быть много ответов. Но медициной мы заниматься не будем. Ограничимся логикой. Для простоты будем считать, что Петя болен, если выполняется хотя бы одно из трех условий (рис. 109): грипп (L); • уу Пети Пети (M); • у Пети ангина ушиб (N). • В итоге получаем логическую функцию Х = L или M или N где Х означает «Петя заболел» (рис. 109). §10. ЛОГИЧЕСКАЯ ФУНКЦИЯ «ИЛИ» x Логическая функция ИЛИ x Это функция, которая принимает значение «да», если хотя бы одна логическая переменная имеет значение «да». Функция принимает значение «нет», если ВСЕ логические переменные имеют значение «нет» (рис. 109). §11. АЛГОРИТМЫ, ИСПОЛЬЗУЮЩИЕ ФУНКЦИЮ «ИЛИ» На рис. 110 приведены два примера алгоритмов. Слева рассказ о Петиных недугах. Справа тот же самый алгоритм представлен в абстрактной математической форме. Попытайтесь в правом алгоритме найти и выделить логическую функцию «ИЛИ». Полученный результат пригодится при анализе рис. 111. 160 ЧАСТЬ 2. АЛГОРИТМИЧЕСКИЙ ЯЗЫК ДРАКОН И УДОБНЫЕ ЧЕРТЕЖИ АЛГОРИТМОВ ГЛАВА 11. ЛОГИЧЕСКИЕ ФОРМУЛЫ, ИСПОЛЬЗУЕМЫЕ В АЛГОРИТМАХ 161 162 ЧАСТЬ 2. АЛГОРИТМИЧЕСКИЙ ЯЗЫК ДРАКОН И УДОБНЫЕ ЧЕРТЕЖИ АЛГОРИТМОВ §12. ДВА СПОСОБА ЗАПИСИ ФУНКЦИИ «ИЛИ» На языке ДРАКОН существуют два способа записи функции ИЛИ: текстовый и визуальный (графический). В первом случае используют одну икону «вопрос», внутри которой пишут логическое выражение, состоящее из логических переменных, соединенных знаками логической операции ИЛИ (рис. 111, слева). В другом случае лесенкой рисуют N икон «вопрос», где N – число логических переменных. Причем в каждой иконе записывают одну логическую переменную (рис. 111, справа). §13. КАКОЙ СПОСОБ ЛУЧШЕ: ТЕКСТОВЫЙ ИЛИ ВИЗУАЛЬНЫЙ? Визуальная формула на рис. 111 показывает, что оба способа эквивалентны. Для практического использования рекомендуется визуальный способ. Он более нагляден и позволяет быстрее понять суть сложного алгоритма. Следует подчеркнуть: ДРАКОН не запрещает работать с левой формулой. Но тем, для кого она трудна, он предлагает более гуманный и легкий вариант. §14. СРАВНЕНИЕ МАТЕМАТИЧЕСКОЙ ФОРМУЛЫ И ДРАКОН-СХЕМЫ На рис. 112 приведена математическая формула и равносильная ей дракон-схема. Слева – традиционная текстовая формула, понятная узкому кругу математиков и программистов. Справа – «демократическая» графическая формула, записанная на языке ДРАКОН. Она понятна значительно более широкому кругу работников. Как показывает практика, правая формула доступна даже тем людям, которые испытывают непреодолимые затруднения при работе со сложной левой формулой. Анализируя формулу слева на рис. 112, нередко приходится вникать в сложные подробности, например: Х = [L ∨ M ∨ N = да] = [(L = да) ∨ (N = да) ∨ (N = да)] Дракон-схема (рис. 112, справа) хороша тем, что избавляет читателя от подобной ненужной работы. В §14 и на рис. 112 вместо знака «ИЛИ» использован знак «∨» (дизъюнкция). Оба знака имеют одинаковый смысл и обозначают одно и то же. Далее мы будем использовать оба знака. ГЛАВА 11. ЛОГИЧЕСКИЕ ФОРМУЛЫ, ИСПОЛЬЗУЕМЫЕ В АЛГОРИТМАХ 163 §15. ЛОГИЧЕСКАЯ СВЯЗКА «ИЛИ» Знак «ИЛИ» имеет еще одно название – логическая связка ИЛИ. Почему связка? Потому что знак «ИЛИ» связывает между собой логические переменные. Например, на рис.109 описана логическая функция X = L или M или N. В этой формуле логическая связка «ИЛИ» повторяется два раза. Она связывает между собой три логические переменные L, M, N. §16. ЛОГИЧЕСКАЯ ФУНКЦИЯ «НЕ» x Логическая функция НЕ x x Это функция W = Z, где логичесQ кие переменные Z и W принимают инверсные значения, то есть удовлетворяют условиям: если Z = да, то W = нет; если Z = нет, то W = да. Иллюстрация приведена на рис. 113. 164 ЧАСТЬ 2. АЛГОРИТМИЧЕСКИЙ ЯЗЫК ДРАКОН И УДОБНЫЕ ЧЕРТЕЖИ АЛГОРИТМОВ ГЛАВА 11. ЛОГИЧЕСКИЕ ФОРМУЛЫ, ИСПОЛЬЗУЕМЫЕ В АЛГОРИТМАХ 165 §17. ЛОГИЧЕСКОЕ ОТРИЦАНИЕ ЖЕЛАТЕЛЬНО УСТРАНИТЬ ИЗ ДРАКОН-СХЕМ Как известно, логическое отрицание представляет определенную трудность для понимания. В связи с этим Эдвард Йодан советует: «Если это возможно, избегайте отрицаний в булевых [логических] выражениях. Представляется, что их понимание представляет трудность для многих программистов» [1]. Поясним. В похожие ловушки часто попадают не только программисты. Подобные трудности испытывают и многие другие люди. К счастью, от этой неприятности можно избавиться. Ниже будет показано, что логическое отрицание (и кое-что еще) можно безболезненно изъять из графических логических выражений. §18. КАК УБРАТЬ ЗНАКИ «И», «ИЛИ», «НЕ» ИЗ ИКОНЫ ВОПРОС? Эргономика позволяет сделать алгоритмы (дракон-схемы) более легкими, удобными для понимания. Глядя на эргономичную дракон-схему, человек может сказать: «Посмотрел – и сразу понял!». «Взглянул – и мигом во всем разобрался!». Многие люди испытывают трудности, когда видят, что внутри икон вопрос записаны сложные логические формулы, содержащие знаки И, ИЛИ, НЕ. Таким людям можно помочь, устранив эти «неприятные» знаки. Теорема. Дракон-схему, содержащую внутри икон «вопрос» логические знаки И, ИЛИ, НЕ, всегда можно преобразовать в эквивалентную дракон-схему, не содержащую указанных знаков. Доказательство представлено на рис. 114. Этот рисунок содержит практические приемы, которые нужно запомнить. Ниже даны пояснения в виде трех вопросов и трех ответов. Вопрос 1. Как удалить из иконы вопрос логическое отрицание НЕ (верхнюю черту) – см. рис. 114, слева вверху. Ответ 1. Удалите из иконы вопрос верхнюю черту и поменяйте местами слова «да» и «нет» (рис. 114, справа вверху). Вопрос 2. Как удалить из иконы вопрос логический знак И (рис. 114, слева, чуть ниже). Ответ 2. Вместо одной иконы вопрос со знаком И нарисуйте две иконы вопрос: не содержащие знак И; расположенные на одной вертикали; • • 166 ЧАСТЬ 2. АЛГОРИТМИЧЕСКИЙ ЯЗЫК ДРАКОН И УДОБНЫЕ ЧЕРТЕЖИ АЛГОРИТМОВ словом «да» у нижнего выхода • помеченные (рис. 114, справа, чуть ниже). Вопрос 3. Как удалить из иконы вопрос логический знак ИЛИ (рис. 114, слева, внизу). Ответ 3. Вместо одной иконы вопрос со знаком ИЛИ нарисуйте две иконы вопрос: не содержащие знак ИЛИ; расположенные лесенкой; помеченные словом «да» у нижнего выхода (рис. 114, справа внизу). • • • Логические знаки И, ИЛИ, НЕ всегда можно убрать из драконсхем. §19. ЛОГИЧЕСКИЙ ФРАГМЕНТ ДРАКОН-СХЕМЫ Фрагмент дракон-схемы называется логическим, если он имеет один вход, два выхода и содержит только иконы «вопрос». Примеры логических фрагментов показаны на рис. 106, 111, 114–116. §20. СТАНДАРТНАЯ И НЕСТАНДАРТНАЯ ДРАКОН-СХЕМА «И» ДЛЯ ДВУХ ЛОГИЧЕСКИХ ПЕРЕМЕННЫХ Стандартная дракон-схема «И» для двух логических переменных – это схема, которая содержит две иконы вопрос: расположенные на одной вертикали; помеченные словом «да» у нижнего выхода; в каждой иконе вопрос содержится одна переменная. • • • Стандартная схема «И» представлена на рис. 115, слева. Нестандартная дракон-схема «И» для двух логических переменных – это схема, которая получена с помощью рокировки схемы «И» (рис. 115, справа). Стандартная и нестандартная схемы «И» равносильны. Они описывают один и тот же алгоритм. §21. ОТЛИЧИЯ МЕЖДУ СТАНДАРТНОЙ И НЕСТАНДАРТНОЙ СХЕМАМИ «И» Укажем отличия между схемами. В стандартной схеме «И» обе иконы «вопрос» лежат на • шампуре (рис. 115, слева). В нестандартной «И» иконы «вопрос» расположе• ны лесенкой (рис.схеме 115, справа). ГЛАВА 11. ЛОГИЧЕСКИЕ ФОРМУЛЫ, ИСПОЛЬЗУЕМЫЕ В АЛГОРИТМАХ 167 В стандартной схеме нижние выходы икон «вопрос» по• мечены словом «да» (рис. 115, слева). В нестандартной – словом «нет» (рис. 115, справа). • В стандартной схеме левый выход считается главным, • правый – инверсным. В нестандартной все наоборот. Левый выход ин• версный, а правыйсхеме – главный. стандартной схеме главный выход лежит на шампуре • иВ обозначается буквой Х. Инверсный выход находится • справа от шампура и обозначается буквой Х (рис. 115, слева). В нестандартной схеме, наоборот, главный выход расположен справа от шампура. Инверсный – лежит на шампуре (рис. 115, справа). В реальных дракон-схемах буквы Х и Х обычно не пишут, а подразумевают. §22. СТАНДАРТНАЯ И НЕСТАНДАРТНАЯ ДРАКОН-СХЕМА «ИЛИ» ДЛЯ ДВУХ ЛОГИЧЕСКИХ ПЕРЕМЕННЫХ Стандартная дракон-схема «ИЛИ» для двух логических переменных – это схема, которая содержит две иконы вопрос: расположенные лесенкой; помеченные словом «да» у нижнего выхода; в каждой иконе вопрос содержится одна переменная. • • • Стандартная схема «ИЛИ» представлена на рис. 116, слева Нестандартная дракон-схема «ИЛИ» для двух логических переменных – это схема, которая получена с помощью рокировки схемы «ИЛИ» (рис. 116, справа). Стандартная и нестандартная схемы «ИЛИ» равносильны. Они описывают один и тот же алгоритм. §23. ОТЛИЧИЯ МЕЖДУ СТАНДАРТНОЙ И НЕСТАНДАРТНОЙ СХЕМАМИ «ИЛИ» Укажем отличия между схемами «ИЛИ». В стандартной схеме «ИЛИ» две иконы «вопрос» распо• ложены лесенкой (рис. 116, слева). В нестандартной схеме «ИЛИ» обе иконы «вопрос» ле• жат на шампуре (рис. 116, справа). 168 ЧАСТЬ 2. АЛГОРИТМИЧЕСКИЙ ЯЗЫК ДРАКОН И УДОБНЫЕ ЧЕРТЕЖИ АЛГОРИТМОВ В стандартной схеме нижние выходы икон «вопрос» по• мечены словом «да» (рис. 116, слева). • В нестандартной – словом «нет» (рис. 116, справа). В стандартной схеме левый выход считается главным, • правый – инверсным. В нестандартной схеме все наоборот. Левый выход ин• версный, а правый – главный. стандартной схеме главный выход лежит на шампуре • иВ обозначается буквой Х. Инверсный выход находится • справа от шампура и обозначается буквой Х (рис. 116, слева). В нестандартной схеме, наоборот, главный выход расположен справа от шампура. Инверсный – лежит на шампуре (рис. 116, справа). В реальных дракон-схемах буквы Х и Х обычно не пишут, а подразумевают. §24. ОБОБЩЕНИЕ Обобщим материал, представленный в §21 и §23. Обратите внимание: отличия показаны в желтых рамках. В зеленых рамках отличий НЕТ. Отсюда вытекает правило: Главный выход Х для стандартных схем И и ИЛИ находится на шампуре. Инверсный выход Х для нестандартных схем И и ИЛИ находится на шампуре. В заключение приведем теорему, которая справедлива для любого логического фрагмента. Теорема. Если главный выход логического фрагмента есть результат вычисления логической функции Х, то инверсный выход вычисляет логическое отрицание Х. ГЛАВА 11. ЛОГИЧЕСКИЕ ФОРМУЛЫ, ИСПОЛЬЗУЕМЫЕ В АЛГОРИТМАХ 169 170 ЧАСТЬ 2. АЛГОРИТМИЧЕСКИЙ ЯЗЫК ДРАКОН И УДОБНЫЕ ЧЕРТЕЖИ АЛГОРИТМОВ ГЛАВА 11. ЛОГИЧЕСКИЕ ФОРМУЛЫ, ИСПОЛЬЗУЕМЫЕ В АЛГОРИТМАХ 171 §25. КАНОНИЧЕСКАЯ ДРАКОН-СХЕМА Это эргономичная драконQсхема, выполняющая логические операции, которая: Каноническая драконQсхема x x x способна описать любую логическую функцию; не содержит логических знаков И, ИЛИ, НЕ; не содержит повторяющихся частей, которые можно удалить с помощью равносильных преобразований. §26. ЧЕМ РАЗЛИЧАЮТСЯ КАНОНИЧЕСКАЯ И СТАНДАРТНАЯ ДРАКОН-СХЕМА? Стандартная схема – жестко определенное понятие. Ее графическая форма и все ее элементы заданы. Они заданы логической формулой. Например, формула X = Q и R однозначно задает стандартную схему «И» для двух переменных Q, R, показанную на рис. 115, слева. Каноническая схема – понятие гибкое. Эта схема может менять свою графическую форму и входящие в нее элементы. В основе любой схемы (и канонической, и стандартной) лежит логическая формула. Стандартная схема может описывать ОДНУЕДИНСТВЕННУЮ формулу. В отличие от нее, каноническая схема может описывать не одну-единственную, а ЛЮБУЮ логическую формулу. В самом деле, напишите любую логическую формулу. Для выбранной вами формулы можно начертить соответствующую ей каноническую схему. §27. ПРИВЕДЕНИЕ ДРАКОН-СХЕМЫ К КАНОНИЧЕСКОМУ ВИДУ Теорема. Дракон-схему можно преобразовать к каноническому виду с помощью цепочки равносильных преобразований. Рассмотрим приведение к каноническому виду для четырех частных случаев (рис. 117–120). В первом примере используются три преобразования (рис. 117): логического отрицания; • удаление рокировка; • удаление логической связки И. • 172 ЧАСТЬ 2. АЛГОРИТМИЧЕСКИЙ ЯЗЫК ДРАКОН И УДОБНЫЕ ЧЕРТЕЖИ АЛГОРИТМОВ На рис. 117 видно, что в данном случае каноническая схема совпадает со стандартной схемой «И» для двух переменных. Во втором примере используются преобразования (рис. 118): удаление логического отрицания; рокировка; удаление логической связки ИЛИ. Этот пример демонстрирует, что каноническая схема совпадает со стандартной схемой «ИЛИ» для двух переменных. Всегда ли так бывает? Всегда ли каноническая схема совпадает со стандартной? Нет, не всегда. Чтобы убедиться в этом, рассмотрим еще два примера. Во третьем примере используются четыре преобразования (рис. 119): удаление логического отрицания; рокировка; удаление логической связки И; удаление логического отрицания. Анализ рисунка 119 свидетельствует, что в данном случае каноническая схема отличается от стандартной. В самом деле, в стандартной схеме «И» нижний выход иконы В помечен словом «да». А в канонической – указанный выход помечен словом «нет». Следовательно, каноническая и стандартная схемы – разные вещи. Во четвертом примере используются три преобразования (рис. 120): удаление логической связки «И»; удаление логического отрицания; рокировка. Рис. 120 показывает, что и в этом случае каноническая схема отличается от стандартной. В самом деле, в стандартной схеме «ИЛИ» нижний выход иконы А помечен словом «да». А в канонической – указанный выход помечен словом «нет». Следовательно, каноническая и стандартная схемы отличаются друг от друга. На рис. 121 представлены упражнения, которые помогут читателю закрепить материал. • • • • • • • • • • §28. СТАНДАРТНЫЕ И НЕСТАНДАРТНЫЕ ДРАКОН-СХЕМЫ «И», «ИЛИ» ДЛЯ ТРЕХ ЛОГИЧЕСКИХ ПЕРЕМЕННЫХ Выше, на рис. 115 и 116 мы изучили стандартные и нестандартные драконсхемы для двух логических переменных. Для схемы И переменные были обозначены буквами Q и R. Для схемы ИЛИ – буквами L и M. Теперь рассмотрим ту же задачу для трех логических переменных (рис. 122). Для схемы И переменные обозначены буквами Q, R, S. Для схемы ИЛИ – буквами L, M, N. Сравните рис. 122 с рис. 115 и 116. Выявите сходство и отличия. Нарисуйте аналогичные рисунки для четырех логических переменных. ГЛАВА 11. ЛОГИЧЕСКИЕ ФОРМУЛЫ, ИСПОЛЬЗУЕМЫЕ В АЛГОРИТМАХ 173 174 ЧАСТЬ 2. АЛГОРИТМИЧЕСКИЙ ЯЗЫК ДРАКОН И УДОБНЫЕ ЧЕРТЕЖИ АЛГОРИТМОВ ГЛАВА 11. ЛОГИЧЕСКИЕ ФОРМУЛЫ, ИСПОЛЬЗУЕМЫЕ В АЛГОРИТМАХ 175 176 ЧАСТЬ 2. АЛГОРИТМИЧЕСКИЙ ЯЗЫК ДРАКОН И УДОБНЫЕ ЧЕРТЕЖИ АЛГОРИТМОВ ГЛАВА 11. ЛОГИЧЕСКИЕ ФОРМУЛЫ, ИСПОЛЬЗУЕМЫЕ В АЛГОРИТМАХ 177 178 ЧАСТЬ 2. АЛГОРИТМИЧЕСКИЙ ЯЗЫК ДРАКОН И УДОБНЫЕ ЧЕРТЕЖИ АЛГОРИТМОВ §29. ВИЗУАЛИЗАЦИЯ СЛОЖНЫХ ЛОГИЧЕСКИХ ФУНКЦИЙ Рассмотрим функцию Х = ( A и B и C ) или (D и E и F) (1) На рис. 123 показан визуальный способ записи этой функции. На рисунке видно, что формула (1) разбивается на три части: А и B и С; DиЕиF операция «ИЛИ». Функция А и B и С изображается с помощью трех икон А, B, С, расположенных на одной вертикали. Аналогично рисуют функцию D и Е и F. Связка ИЛИ реализуется с помощью линий, объединяющих нижние выходы икон С и F в точке K (рис. 123). В формуле (1) некоторые члены записаны без логического отрицания (А, В, D, Е), другие – с отрицанием (B, F ). Члены без отрицания превращаются в иконы А, В, D, Е, у которых нижний выход помечен словом «да». Членам с отрицанием соответствуют иконы В и F, где нижний выход помечен словом «нет» (рис. 123). Другие примеры алгоритмов, вычисляющих сложные логические функции, представлены на рис. 124, 125. • • • §30. КОГДА ЛУЧШЕ ИСПОЛЬЗОВАТЬ СТАНДАРТНУЮ СХЕМУ, А КОГДА – НЕСТАНДАРТНУЮ? На рис. 126 представлен алгоритм проверки приборов – но не весь, а только его правая часть. Левая часть алгоритма опущена, о чем говорят две линии обрыва. Ветка «Контроль приборов» двухадресная. В ней две иконы адрес. Слева нарисована икона адрес «завершение», справа – «контроль электросети». Здесь есть ошибка. Иконы адрес перепутаны местами. Слева должна стоять икона адрес «контроль электросети», справа – «завершение» В чем причина ошибки? Как ее исправить? Сначала сделаем пояснение. В ветке «Контроль приборов» проверяются три прибора: синий, зеленый и желтый. Если испортился (отказал) хотя бы один прибор из трех, это значит, что хотя бы из одной иконы вопрос выходим через «да». В результате происходит отбой системы, и алгоритм заканчивает работу (рис. 126). Если же все три прибора исправны (нет ни одного отказа), то из всех икон вопрос выходим через «нет». Затем запускается ветка «Контроль электросети». Производится проверка трех сетей (синей, зеленой и желтой). После этого алгоритм завершается. Теперь расскажем об ошибке. Выше (глава 6, §4) приведена рекомендация для двухадресных веток. Напомним ее. ГЛАВА 11. ЛОГИЧЕСКИЕ ФОРМУЛЫ, ИСПОЛЬЗУЕМЫЕ В АЛГОРИТМАХ 179 180 ЧАСТЬ 2. АЛГОРИТМИЧЕСКИЙ ЯЗЫК ДРАКОН И УДОБНЫЕ ЧЕРТЕЖИ АЛГОРИТМОВ ГЛАВА 11. ЛОГИЧЕСКИЕ ФОРМУЛЫ, ИСПОЛЬЗУЕМЫЕ В АЛГОРИТМАХ 181 182 ЧАСТЬ 2. АЛГОРИТМИЧЕСКИЙ ЯЗЫК ДРАКОН И УДОБНЫЕ ЧЕРТЕЖИ АЛГОРИТМОВ ГЛАВА 11. ЛОГИЧЕСКИЕ ФОРМУЛЫ, ИСПОЛЬЗУЕМЫЕ В АЛГОРИТМАХ 183 СЛЕВА (на шампуре ветки) рисуйте икону адрес, которая указывает на ветку, которая должна выполняться РАНЬШЕ. СПРАВА рисуйте икону адрес, указывающую на ветку, которая будет выполняться ПОЗЖЕ. Сформулируем эту мысль иначе. Порядок пространственного расположения адресов (слева направо) должен соответствовать порядку выполнения веток во времени (слева направо). Ошибка состоит в том, что на рис. 126 это правило нарушено. Чтобы устранить недостаток, надо сделать рокировку в белом фрагменте. Теперь мы можем ответить на вопрос, поставленный в заголовке параграфа. Особенность данной рокировки в том, что стандартная схема ИЛИ превращается в нестандартную. После рокировки две иконы адрес на рис. 127 расположились так, как нужно: «контроль электросети» и «завершение». Они передают управление на две ветки: контроль электросети (эта ветка работает раньше); завершение (эта ветка работает позже). • • Таким образом, замена стандартной схемы ИЛИ на нестандартную (в данном случае) дает полезный эффект, а именно, позволяет выполнить правило «Порядок расположения адресов должен соответствовать порядку выполнения веток». §31. ВЫВОДЫ 1. В алгоритмах со сложной логикой часто используются условные операторы с логическими выражениями. Опыт показывает, что такие операторы во многих случаях трудны для понимания, что нередко приводит к ошибкам. 2. В языке ДРАКОН используются визуальные логические выражения, позволяющие при желании полностью исключить логические знаки И, ИЛИ, НЕ из условных операторов. 3. Визуализация логических формул во многих практически важных случаях заметно облегчает их понимание и уменьшает вероятность ошибок. Глава 12 ЧТО ТАКОЕ ЭРГОНОМИЧНЫЙ ТЕКСТ? §1. МОЖНО ЛИ СДЕЛАТЬ ЛОГИЧЕСКИЕ ВЫРАЖЕНИЯ ЭРГОНОМИЧНЫМИ? Одна из основных целей языка ДРАКОН – улучшение понятности алгоритмов. До сих пор мы решали эту задачу методом визуализации, превращая часть текста в эргономичный графический образ. А как должна выглядеть другая часть текста – та, что не подлежит визуализации? Имеется в виду текст, который записывается внутри икон Можно ли этот текст сделать более ясным и доходчивым? Более эргономичным? Поставленный вопрос слишком обширен и сложен. Поэтому сузим тему и ограничимся частной задачей. Как следует записывать идентификаторы логических переменных и логические выражения, чтобы сделать их более понятными? §2. ПРИМЕР ДЛЯ ИССЛЕДОВАНИЯ ЭРГОНОМИЧНОСТИ ЛОГИЧЕСКИХ ВЫРАЖЕНИЙ Чтобы прояснить вопрос, желательно иметь под рукой какой-нибудь пример, на котором мы будем «проигрывать» различные методы улучшения эргономичности. Предположим, нужно создать алгоритм, управляющий автомобилем-роботом, проезжающим через перекресток со светофором в условиях реального дорожного движения. Примем соглашение, что робот движется только по прямой, и выберем самый простой алгоритм управления (рис. 128). ГЛАВА 12. ЧТО ТАКОЕ ЭРГОНОМИЧНЫЙ ТЕКСТ? 185 Логический признак, разрешающий (или запрещающий) роботу ехать вперед, имеет идентификатор «Можно.ехать.через.перекресток». Будем считать, что данный признак принимает значение «да» в трех случаях: зеленый сигнал светофора (и нет помех для движения); • горит желтый сигнал загорелся, когда робот уже выехал на перекресток • (и нет помех для движения); светофор сломался нет ни зеленого, ни желтого, ни красного сигна• ла (и нет помех для–движения). В остальных случаях признак имеет значение «нет», которое запрещает роботу движение через перекресток. §3. МОДЕЛЬ ДВИЖЕНИЯ РОБОТА Пусть Y = Можно.ехать.через.перекресток Выделим на рис. 128 фрагмент, который вычисляет логическую функцию Y. То есть формирует признак «Можно.ехать.через.перекресток». Эта часть изображена в белом прямоугольнике на рис. 129. Можно доказать, что указанный фрагмент всегда можно заменить на одну икону «вопрос» согласно формуле на рис. 130. Эта формула позволяет преобразовать алгоритм на рис. 129 в алгоритм на рис. 131. Алгоритм на рис. 131 имеет две особенности: полностью соответствует алгоритму на рис. 128 и 129; • он он • представляет названный алгоритм в сжатой форме. Фактически рис. 131 – это наиболее простая модель движения робота. §4. ОБОЗНАЧЕНИЯ ЛОГИЧЕСКИХ ПЕРЕМЕННЫХ Введем обозначения, показанные на рис. 132, которым соответствуют очевидные равенства: Y = Можно.ехать.через.перекресток (1) А = Зеленый.сигнал.светофора (2) В = Желтый.сигнал.светофора (3) С = Красный.сигнал.светофора (4) D = Робот.выехал.на.перекресток (5) Е = Помехи.для.движения (6) Если принять указанные условия и обозначения, логическая функция Y задается формулой Y = (A & ┐E) ∨ (B & D & ┐E) ∨ (┐A & ┐B & ┐C & ┐E) (7) В §4 и на рис. 132 для операции «НЕ» вместо верхней черты «–» использован знак «┐». Оба знака имеют одинаковый смысл и обозначают одно и то же. Далее мы будем использовать оба знака. 186 ЧАСТЬ 2. АЛГОРИТМИЧЕСКИЙ ЯЗЫК ДРАКОН И УДОБНЫЕ ЧЕРТЕЖИ АЛГОРИТМОВ ГЛАВА 12. ЧТО ТАКОЕ ЭРГОНОМИЧНЫЙ ТЕКСТ? 187 188 ЧАСТЬ 2. АЛГОРИТМИЧЕСКИЙ ЯЗЫК ДРАКОН И УДОБНЫЕ ЧЕРТЕЖИ АЛГОРИТМОВ ГЛАВА 12. ЧТО ТАКОЕ ЭРГОНОМИЧНЫЙ ТЕКСТ? 189 §5. ПЛАН ИЗУЧЕНИЯ ПРОБЛЕМЫ Пример, представленный на рис. 128–132, позволяет приступить к делу. Ниже мы рассмотрим несколько вариантов записи логических выражений и сравним их между собой с точки зрения эргономики. Будем считать, что движением робота управляет бортовой компьютер. Глазами робота являются пять датчиков, формирующих логические сигналы А, В, С, D, E. Эти сигналы сообщают компьютеру информацию, необходимую для управления движением робота через перекресток. §6. ЛОГИЧЕСКОЕ ВЫРАЖЕНИЕ С АБСТРАКТНЫМИ ИДЕНТИФИКАТОРАМИ Произведем эквивалентное преобразование алгоритма на рис. 131. Учитывая (1), заменим идентификатор «Можно.ехать.через. перекресток» буквой Y. Затем вместо Y подставим логическое выражение из формулы (7). В итоге получим алгоритм на рис. 133. Некоторые математики, скорее всего, похвалят этот алгоритм. Они, возможно, скажут, что с математической точки зрения выражение в иконе «вопрос» является компактным, лаконичным, изящным и обозримым. К сожалению, подобная позиция не учитывает эргономических соображений и является устаревшей. Недостаток формулы (7) и алгоритма на рис. 133 состоит в том, что идентификаторы А, В, С, D, Е не смысловые, а абстрактные. Они оставляют наши знания о предметной области за пределами алгоритмического текста. Чем это плохо? Люди, которые прекрасно знают прикладную задачу, но не знают или забыли обозначения (1)–(6), например заказчики, постановщики задач, не могут понять эти обозначения. Они воспринимают идентификаторы А, В, С, D, Е и составленные из них формулы как бессмысленный набор символов. Следовательно, эти люди лишаются возможности принять участие в проверке правильности алгоритмов. И внести свой вклад в устранение ошибок. Чтобы обнаружить ошибку в логическом выражении, необходимо хорошо понимать его смысл. Чтобы уяснить суть логического выражения на рис. 133, человек вынужден помнить не только смысловые понятия, но и абстрактные идентификаторы. Он должен твердо знать соответствие между ними. Это создает двойную нагрузку на память человека-алгоритмиста. Из-за этого возникают дополнительные и ничем не оправданные трудности при поиске и выявлении ошибок. 190 ЧАСТЬ 2. АЛГОРИТМИЧЕСКИЙ ЯЗЫК ДРАКОН И УДОБНЫЕ ЧЕРТЕЖИ АЛГОРИТМОВ Для большинства специалистов, знающих прикладную задачу, логическое выражение на рис. 133 не дает никакой подсказки о смысле (семантике) логических переменных. Это логическое выражение фактически представляет собой загадочный набор иероглифов. Оно служит типичным примером эргономической неряшливости традиционных методов математического описания прикладных задач. Вывод. В прикладных задачах использование абстрактных идентификаторов в логических выражениях эргономически недопустимо. §7. ЛОГИЧЕСКОЕ ВЫРАЖЕНИЕ С КОРОТКИМИ СМЫСЛОВЫМИ ИДЕНТИФИКАТОРАМИ Абстрактные идентификаторы использовались на первом этапе развития программирования. Сегодня в прикладных программах они встречаются гораздо реже, уступив место так называемым мнемоническим именам. Мнемоническое имя – это короткий смысловой идентификатор, который в большинстве случаев имеет длину не более 6 или 8 символов. Преобладание 8-символьных идентификаторов характерно для второго этапа развития языков программирования. Вот типичная рекомендация того периода: «Не оправдано применение имен, подобных Х или I, тогда как имена МАХ или NEXT передают смысл гораздо точнее» [1]. Сходную мысль высказывает Дени Ван Тассел: «Имена переменных должны быть выбраны так, чтобы наилучшим образом определять те величины, которые они представляют. Например, в операторе X = Y + Z имена переменных выбраны неудачно, поскольку совсем не использована мнемоника. Такая запись оператора: PRICE = COST + PROFIT намного лучше» [2]. Последуем совету. Продолжая наш пример с автомобилем-роботом, заменим абстрактные идентификаторы на мнемонические имена согласно таблице. Абстрактный идентификатор Y A B C D E Мнемоническое имя Можнех Зелсиг Желсиг Красиг Робнапер Помдвиж ГЛАВА 12. ЧТО ТАКОЕ ЭРГОНОМИЧНЫЙ ТЕКСТ? 191 192 ЧАСТЬ 2. АЛГОРИТМИЧЕСКИЙ ЯЗЫК ДРАКОН И УДОБНЫЕ ЧЕРТЕЖИ АЛГОРИТМОВ На рис. 134 показан алгоритм, полученный в результате такой замены. Можно ли назвать логическое выражение на рис. 134 эргономичным? Очевидно, что мнемонические имена лучше абстрактных. Они были придуманы с благородной целью – облегчить запоминание понятий, чтобы формальное имя создавало намек на содержательную сторону дела. Увы! Говорить намеками – вовсе не значит говорить понятно. Причина неудачи в том, что длина идентификатора 8 символов слишком мала. Она явно недостаточна для хорошего, ясного и доходчивого описания сложных понятий. Поэтому при создании 8-символьных идентификаторов приходится экономить каждый символ и часто использовать невразумительные слова-обрубки, такие, как Зелсиг (зеленый сигнал светофора), Красиг (красный сигнал светофора) и т. д. В самом деле, глядя на идентификатор «Робнапер» (рис. 134) мало кто догадается, что речь идет о признаке «Робот.выехал.на.перекресток». Сравнивая логические выражения на рис. 133 и 134, можно сказать, что в последнем случае понятность алгоритма, если и увеличилась, то ненамного. Таким образом, 8-символьные смысловые идентификаторы не могут обеспечить требуемое улучшение эргономических характеристик логических выражений. §8. ЛОГИЧЕСКОЕ ВЫРАЖЕНИЕ С ДЛИННЫМИ СМЫСЛОВЫМИ ИДЕНТИФИКАТОРАМИ Для третьего этапа развития алгоритмических языков характерен переход к длинным смысловым идентификаторам, содержащим до 32 символов. Увеличение длины идентификатора до 32 символов позволяет получить два важных эргономических преимущества: Во многих (хотя и не во всех) случаях появляется возможность отказаться от сокращений и использовать полные слова; Для разграничения слов, входящих в состав идентификатора, можно ввести эргономичные разделители, например точку или нижнюю черту. • • Пример логического выражения, в котором используются идентификаторы с точками-разделителями и полными (несокращенными) словами, представлен на рис. 135. Легко видеть, что такая запись более понятна, чем предыдущие примеры. Тем не менее, есть одно «но». §9. ГЛАВНЫЙ ВОПРОС УСЛОВНОГО ОПЕРАТОРА На рис. 131 задан вопрос «Можно.ехать.через.перекресток?», который объясняет принцип разветвления алгоритма. При ответе «да» выполняется команда «Ехать.вперед». При ответе «нет» действия отсутствуют. Данный вопрос играет ключевую роль. Если его удалить, алгоритм становится непонятным. В связи с этим целесообразно ввести новое понятие, выявляющее суть проблемы. ГЛАВА 12. ЧТО ТАКОЕ ЭРГОНОМИЧНЫЙ ТЕКСТ? 193 194 ЧАСТЬ 2. АЛГОРИТМИЧЕСКИЙ ЯЗЫК ДРАКОН И УДОБНЫЕ ЧЕРТЕЖИ АЛГОРИТМОВ Главный вопрос условного оператора – это ясный и понятный текст, записанный в иконе «вопрос» с помощью одного идентификатора. А теперь взглянем на рис. 133–135. Нетрудно заметить, что в иконе «вопрос» записана масса любопытных подробностей, однако интересующий нас вопрос отсутствует. Он бесследно исчез. Логические выражения на рис. 133–135 имеют важный недостаток. В них нет главного вопроса. Нет ключа, объясняющего сущность алгоритма! Налицо парадокс. Логические выражения не дают явной информации о том, на какой именно вопрос мы отвечаем «да» или «нет». Более того, они не позволяют читателю легко и быстро восстановить формулировку главного вопроса. И даже не стимулируют у него стремления к получению подобной информации. Не будет преувеличением сказать, что перечисленные логические выражения затуманивают суть дела. Потому что отсутствие главного вопроса ничем нельзя компенсировать. В итоге алгоритмы на рис. 133–135 оказываются непонятными, эргономически неприемлемыми. Вывод 1. Использование эргономически правильных длинных смысловых идентификаторов является необходимым, но не достаточным условием для построения эргономичного логического текста. Вывод 2. Вторым условием является использование главного вопроса условного оператора. §10. ВИЗУАЛЬНЫЕ ПОМЕХИ ЗАСОРЯЮТ ЗРИТЕЛЬНУЮ СЦЕНУ НЕНУЖНОЙ ИНФОРМАЦИЕЙ В традиционных языках для значений логических переменных используют слова TRUE и FALSE, ИСТИНА и ЛОЖЬ, 1 и 0. Однако логико-эргономические исследования показывают, что указанные обозначения являются избыточными. Они могут быть безболезненно и с пользой для дела исключены из алгоритмического текста. Стремление «уничтожить» лишние обозначения объясняется эргономическими причинами. Известно, что все ненужные записи являются визуальными помехами, которые засоряют текст алгоритма и путают читателя. Язык ДРАКОН позволяет решить задачу двумя способами: ГЛАВА 12. ЧТО ТАКОЕ ЭРГОНОМИЧНЫЙ ТЕКСТ? 195 рамочного логического выражения; • сс помощью помощью визуального логического выражения. • §11. УСТРАНЕНИЕ ВИЗУАЛЬНЫХ ПОМЕХ С ПОМОЩЬЮ РАМОЧНОГО ЛОГИЧЕСКОГО ВЫРАЖЕНИЯ В общем случае идентификатор главного вопроса может оказаться неопределенным. Чтобы устранить этот недочет, надо заранее присвоить ему нужное значение. Для этого можно использовать, например, процедуру под названием «Формирование.признака» (рис. 136). Рассмотрим случай, когда процедура строится с помощью рамочного логического выражения (рис. 137). В этом случае применяют икону «действие», внутри которой записывают оператор присваивания. Графический оператор на рис. 137 означает, что идентификатору «Можно.ехать.через.перекресток» присваивается некоторое значение. Какое именно? Ответ таков. Нужно вычислить рамочное логическое выражение, записанное в трех рамках, соединенных знаками ИЛИ. Результатом вычисления будет «1» или «0». Таким образом, цель достигнута, хотя обозначения «1» и «0» в тексте алгоритма отсутствуют (рис. 137). §12. ПРАВИЛА ЗАПИСИ РАМОЧНЫХ ЛОГИЧЕСКИХ ВЫРАЖЕНИЙ Увеличение длины идентификаторов приводит к тому, что традиционная горизонтальная запись логических выражений становится невозможной. В связи с этим применяется вертикальная запись, пример которой показан на рис. 137. Вертикальный логический текст на языке ДРАКОН пишут в соответствии со следующими правилами. В иконе «действие» размещают один оператор присваивания. В верхней строке пишут идентификатор логической переменной и знак присваивания. Ниже пишут логическое выражение, причем каждая конъюнкция заключается в прямоугольную рамку. Для операций И, ИЛИ, НЕ используют обозначения &, ИЛИ, ┐ соответственно. Используют идентификаторы длиной до 32 символов. Первые символы всех идентификаторов располагают на одной вертикали. Знак логического отрицания ┐ пишут слева от идентификатора внутри рамки. Все знаки отрицания (если они есть) помещают на одной вертикали. • • • • • • • • 196 ЧАСТЬ 2. АЛГОРИТМИЧЕСКИЙ ЯЗЫК ДРАКОН И УДОБНЫЕ ЧЕРТЕЖИ АЛГОРИТМОВ ГЛАВА 12. ЧТО ТАКОЕ ЭРГОНОМИЧНЫЙ ТЕКСТ? 197 конъюнкции & записывают справа от идентификатора внут• Знаки ри рамки. знаки & пишут на одной вертикали. • Все Вертикальные линии рамок располагают на одной вертикали. • Знаки присваивания := и знаки ИЛИ помещают на одной вертикали. • §13. ЗРИТЕЛЬНАЯ СЦЕНА РАМОЧНОГО ЛОГИЧЕСКОГО ВЫРАЖЕНИЯ Взглянем на икону «действие» как на зрительную сцену (рис. 137). В ней можно увидеть четыре столбца, разделенные воображаемыми вертикальными линиями. Назовем столбцы зрительными зонами. Каждая зона имеет строго определенное назначение. В 1-й зоне пишут знаки логического отрицания ┐ (если они есть). Во 2-й зоне пишут идентификаторы. В 3-й зоне пишут знаки конъюнкции &. В 4-й зоне пишут знак присваивания := и знаки ИЛИ. • • • • В итоге зрительная сцена приобретает четкую регулярную структуру. Она разделена на 4 зоны, в каждой из которых должна находиться заранее определенная информация. Благодаря горизонтальным рамкам и вертикальным зрительным зонам зрительная сцена становится не хаотичной, а предсказуемой, упорядоченной и удобной для чтения. §14. УСТРАНЕНИЕ ВИЗУАЛЬНЫХ ПОМЕХ С ПОМОЩЬЮ ВИЗУАЛЬНОГО ЛОГИЧЕСКОГО ВЫРАЖЕНИЯ Рассмотрим случай, когда процедура «Формирование.признака» строится с помощью визуального логического выражения (рис. 138). В этом случае применяют икону «полка» (рис. 17, икона И10). На верхнем этаже полки пишут зарезервированное предложение «Установить признак» или «Снять признак». На нижнем этаже указывают идентификатор признака «Можно.ехать.через.перекресток» (рис. 138). Рассмотрим еще два примера оператора «полка»: 198 ЧАСТЬ 2. АЛГОРИТМИЧЕСКИЙ ЯЗЫК ДРАКОН И УДОБНЫЕ ЧЕРТЕЖИ АЛГОРИТМОВ Левый оператор говорит, что логической переменной «Норма.насоса» присваивается значение 1. Правый оператор означает, что переменной «Норма.насоса» присваивается значение 0. Легко видеть, что в этих операторах (как и в операторах на рис. 138) используется та же хитрость, что и на рис. 137. Логической переменной присваивается значение 1 или 0, хотя обозначения 1 и 0 в тексте алгоритма нигде не встречаются! §15. ОБСУЖДЕНИЕ Ранее мы пришли к выводу, что алгоритм на рис. 135 является эргономически неудачным. Каким образом можно его исправить? Вопрос отнюдь не прост. По-видимому, в разных ситуациях он может приводить к разным ответам. В связи с этим изложенные ниже соображения и советы имеют не обязательный, а всего лишь рекомендательный характер. Их нужно рассматривать как один из возможных способов решения проблемы. иконе «вопрос» не следует записывать логическое выражение, в • Вособенности сложное. Вместо него рекомендуется поместить один- • • • единственный идентификатор, содержащий ясную и четкую словесную формулировку главного вопроса. В общем случае указанный идентификатор может оказаться неопределенным. Чтобы исключить эту неприятность, необходимо заблаговременно присвоить ему нужное значение. Для этого существуют два метода: рамочный и визуальный. В рамочном методе используется рамочное логическое выражение, записанное в иконе «действие». Производится вычисление рамочного выражения. Результат присваивается идентификатору главного вопроса (рис. 137). В визуальном методе применяется визуальное логическое выражение и два оператора «Установить признак» и «Снять признак», записанные в иконах «полка» (рис. 138). В отличие от рамочного при визуальном методе вычисление логического выражения как таковое отсутствует. Визуальное выражение разветвляет процесс и приводит его в одну из двух точек (Y или Y на рис. 138). В первой точке выполняется оператор «Установить признак», во второй – «Снять признак». Алгоритмы на рис. 137 и 138 эквивалентны. Инструментальные программы языка ДРАКОН должны обеспечить автоматический перевод рамочного алгоритма (рис. 137) в визуальный (рис. 138) и наоборот. Предоставление такой услуги пользователю создает для него дополнительный комфорт. Пользователь получает возможность сравнить две формы представления логических знаний и выбрать ту, которая ему больше по душе. ГЛАВА 12. ЧТО ТАКОЕ ЭРГОНОМИЧНЫЙ ТЕКСТ? 199 200 ЧАСТЬ 2. АЛГОРИТМИЧЕСКИЙ ЯЗЫК ДРАКОН И УДОБНЫЕ ЧЕРТЕЖИ АЛГОРИТМОВ Поскольку вкусы автора алгоритма и его читателей могут отличаться, каждый из них может получить листинг (чертеж) алгоритма в том виде, который лично ему больше нравится. В итоге каждый реализует свое право на индивидуальное предпочтение той или иной формы представления знаний. §16. ЕЩЕ РАЗ О ВИЗУАЛЬНЫХ ПОМЕХАХ Специальные обозначения для значений логических переменных как принадлежность алгоритмического языка – это анахронизм, который следует исключить из языка как совершенно не нужное и даже вредное «архитектурное излишество». Чтобы оправдать этот вывод, сравним два выражения в условном операторе (10) и (11): (Норма 1 = 1) & (Норма 2 = 1) & (Авария = 0), то... (10) Если Норма 1 & Норма 2 & Авария, то.... (11) Формула (10) читается так: Если признак «Норма 1» равен единице и признак «Норма 2» равен единице и признак «Авария» равен нулю, то… (10а) Формула (11) читается так: Если есть признак «Норма 1» и есть признак «Норма 2» и нет признака «Авария», то… (11а) Фраза (11а) намного понятнее. По своему лексическому строю, эта фраза соответствует обычным речевым оборотам, которыми пользуются специалисты предметной области, не являющиеся программистами. Она точно отражает суть дела и доступна всем работникам. В отличие от нее фраза (10а) содержит искусственные и нарочитые вкрапления «равен единице» и «равен нулю», появление которых неоправданно удлиняет текст и затрудняет восприятие. В итоге предложение становится непонятным для всех, кроме программистов. §17. ОСОБЕННОСТИ РАБОТЫ С ДЛИННЫМИ (ЭРГОНОМИЧНЫМИ) ИДЕНТИФИКАТОРАМИ Предположим, что желательная длина формального смыслового идентификатора составляет примерно 32 символа. Желательно, чтобы конкретные идентификаторы в зависимости от сложности понятия имели длину не менее 25 и не более 32 символов. ГЛАВА 12. ЧТО ТАКОЕ ЭРГОНОМИЧНЫЙ ТЕКСТ? 201 Чтобы исключить ошибки при ручном вводе столь длинных идентификаторов в компьютер, целесообразно ввести запрет повторного ввода. Это значит, что идентификатор вводится в систему только один раз и запоминается в базе данных. При необходимости повторного ввода осуществляется копирование из базы данных. Такой способ требует наличия специальных инструментальных средств, но гарантирует идентичность всех копий одного и того же идентификатора. Предположение об оптимальности 32-символьных идентификаторов согласуется с анализом истории развития алгоритмических языков, который обнаруживает отчетливую тенденцию: от абстрактных кодов и имен к 6- или 8-символьным мне• переход моническим именам; • затем – переход к 32-символьным смысловым идентификаторам. Вместе с тем многие специалисты, следуя устоявшимся привычкам, «застряли» на этапе 8-символьных имен. Суть в том, что опыт использования новых возможностей, связанных с появлением 32-символьных имен пока еще относительно невелик. Между тем, эргономические перспективы, открывающиеся с увеличением длины имен до 32 символов, обещают существенно изменить наши прежние представления и привычки. Благодаря этому замечательному нововведению язык формальных идентификаторов по своей доходчивости значительно приближается к естественному человеческому языку, что отчетливо видно на рис. 137 и 138. §18. ТЕОРЕМА Материалы этой главы показывают, что справедлива Теорема. Если некоторый фрагмент дракон-схемы имеет один вход, два выхода и содержит только иконы «вопрос» (две и более), причем внутри каждой иконы записан один идентификатор, этот фрагмент всегда можно заменить на одну икону вопрос, внутри которой записан один идентификатор. Иллюстрацией являются рис. 129–131. §19. ОПЕРАТОР «ПОЛКА» Оператор «полка» может выполнять разные функции. Функция 1. На верхнем этаже полки пишут ключевое предложение «Установить признак» или «Снять признак». На нижнем этаже указывают идентификатор признака. Этот случай мы уже описали (см. примеры в §14 и рис. 138). 202 ЧАСТЬ 2. АЛГОРИТМИЧЕСКИЙ ЯЗЫК ДРАКОН И УДОБНЫЕ ЧЕРТЕЖИ АЛГОРИТМОВ Функция 2. Предположим, нужно срочно выйти из алгоритма. Причем, не из данного алгоритма (из процедуры), а из вызывающего алгоритма. Или даже из алгоритма более высокого уровня. Как это сделать? Ответ дает икона полка. На верхнем этаже пишем ключевое слово «Выход». На нижнем – имя вызывающего (или более высокого алгоритма). В результате управление передается на один или несколько уровней наверх. Для решения задачи на дракон-схеме добавляются икона полка, икона адрес «завершение» и икона имя ветки «Завершение» (рис. 139). Таким образом, оператор полка обеспечивает: прекращение работы данного алгоритма (процедуры); немедленный выход из вызывающего алгоритма или алгоритма более высокого уровня. • • При этом надо четко различать: работу алгоритма; • фактическую эргономичное изображение дракон-схемы. • Фактически полка с надписью «Выход» играет роль конца работы. Иными словами (см. рис. 139), маршрут, доходя до полки, ОБРЫВАЕТСЯ. Происходит выход из алгоритма, но не через икону конец, а через икону полка. Полка играет роль конца. Но с эргономической точки зрения, такие «обрывы» нежелательны. Потому что у дракон-схемы будет нарисован не один конец, а несколько. Фактически алгоритм может иметь несколько концов. Неприятность в том, что глядя на схему, человеку трудно воспринимать алгоритм, имеющий несколько концов. Такой алгоритм похож на елку, увешанную «концами», как елочными игрушками. Подобная зрительная сцена распыляет внимание и мешает сосредоточиться на главном. Поэтому, с эргономической точки зрения, желательно создать видимость того, что у схемы всего один конец. Это нетрудно сделать. Рис. 139 наглядно показывает, что бегунок, двигаясь к концу алгоритма, пробегает через иконы: ГЛАВА 12. ЧТО ТАКОЕ ЭРГОНОМИЧНЫЙ ТЕКСТ? 203 полка с надписью «Выход»; • икона икона «завершение»; • икона адрес имя ветки • икона конец. «завершение»; • Возможно, читатель возразит. Дескать, такая схема не отвечает фактическому положению дел и дезориентирует. С этим возражением нельзя согласиться. На рисунке 139 показано все, что нужно, для исчерпывающего понимания алгоритма. Кроме того, соблюдается эргономическое Правило. Дракон-схема имеет только один конец. Подытожим сказанное. Изложим функции полки в общем виде. На верхнем этаже полки пишут ключевое слово (нужно указать перечень ключевых слов и их семантику). На нижнем этаже пишут значение, соответствующее ключевому слову. §20. ВЫВОДЫ 1. В этой главе предложен двухэтапный метод эргономизации логических выражений. 2. На первом этапе производится разделение логических записей на две части, из которых одна подлежит визуализации, а другая сохраняется в текстовом виде. 204 ЧАСТЬ 2. АЛГОРИТМИЧЕСКИЙ ЯЗЫК ДРАКОН И УДОБНЫЕ ЧЕРТЕЖИ АЛГОРИТМОВ 3. На втором этапе производится эргономизация обеих частей: визуальной и текстовой. 4. Эргономизация текстовой части включает, в частности, следующие приемы: оптимизацию длины и правил записи идентификаторов; выбор альтернативы: логическое выражение или идентификатор главного вопроса; исключение обозначений для значений логических переменных; сравнительный анализ визуальной и рамочной форм записи и выбор одной из них. • • • • Глава 13 АЛГОРИТМЫ РЕАЛЬНОГО ВРЕМЕНИ §1. ВВЕДЕНИЕ Можно ли в алгоритмах изображать время? Как это сделать? В данной главе изложен ответ на эти вопросы. Давайте посмотрим, как работает светофор. Самый обычный светофор, который стоит на перекрестке и регулирует уличное движение. Алгоритм управления светофором показан на рис. 140. Шапка алгоритма представлена на рис. 141. Как известно, шапка позволяет получить ответ на три «царских» (наиболее важных) вопроса: 1. Как называется задача? 2. Из скольких частей она состоит? 3. Как называется каждая часть? Вот ответы для рис. 141. Как называется задача? (Читаем заголовок алгоритма). Управление светофором. Из скольких частей она состоит? (Считаем иконы «имя ветки»). Из трех. Как называется каждая часть? (Читаем текст в иконах «имя ветки»). 1. Управление зеленым светом. 2. Управление красным светом. 3. Ночной режим. • • • На рис. 140 первая ветка начинается с команды ВКЛЮЧИТЬ ЗЕЛЕНЫЙ (имеется в виду «Включить зеленый сигнал светофора»). Вторая команда – икона «пауза». Она изображается перевернутой трапецией. Команда «пауза» отсчитывает время, записанное внутри иконы. Когда отсчет времени закончен, запускается следующая (после паузы) команда. 206 ЧАСТЬ 2. АЛГОРИТМИЧЕСКИЙ ЯЗЫК ДРАКОН И УДОБНЫЕ ЧЕРТЕЖИ АЛГОРИТМОВ Рассмотрим три команды, записанные в первой ветке: Включить зеленый. Пауза 2 минуты. Выключить зеленый. Что означают эти команды? Они говорят, что зеленый свет будет гореть ровно 2 минуты, а затем погаснет. Рассмотрим следующие три команды: Включить желтый. Пауза 10 секунд. Выключить желтый. Смысл этой тройки команд очевиден. Желтый свет будет гореть 10 секунд, затем погаснет. Вторая ветка называется «Управление красным светом». Прочитаем три команды во второй ветке: Включить красный. Пауза 2 минуты. Выключить красный. Это значит: красный свет будет гореть 2 минуты, а потом погаснет. Читаем следующие команды: Включить желтый. Пауза 10 секунд. Выключить желтый. Смысл ясен: желтый свет будет гореть 10 секунд, после чего погаснет. Обобщим сказанное и опишем последовательность смены сигналов светофора: зеленый горит 2 минуты; желтый горит 10 секунд; красный горит 2 минуты; желтый горит 10 секунд. После этого последовательность все время повторяется. На рис. 140 в иконах «пауза» использована избыточная запись: Пауза 2 минуты. Пауза 10 секунд. Это можно и нужно записать короче. Слово «Пауза» опускают. Вместо «10 секунд» пишут «10с». И т. д. Алгоритм на рис. 140 работает в двух режимах, которые постоянно чередуются: • • • • • • • • • • • • • • • • • • режим; • дневной ночной режим. • Ночной режим описан в третьей ветке. Ночью красный и зеленый сигналы светофора отключаются. Вместо них всю ночь мерцает желтый мигающий. ГЛАВА 13. АЛГОРИТМЫ РЕАЛЬНОГО ВРЕМЕНИ 207 §2. БЕСКОНЕЧНЫЕ АЛГОРИТМЫ Алгоритмы, которые мы рассматривали во всех предыдущих главах, обязательно имели конец. Проще говоря, они непременно заканчивались, то есть прекращали работу с помощью иконы «конец». Однако на рис. 140 икона «конец» отсутствует. Это значит, что в данном случае мы имеем дело с бесконечным алгоритмом. x x Бесконечный алгоритм Это алгоритм, который работает все время, круглосуточно. В таком алгоритме специально преQ дусмотрен бесконечный цикл. Выход из бесконечного цикла не предусQ мотрен. Разумеется, прекращение работы алгоритма возможно. Оно происходит в результате внешней причины. Например, при выключении питания, при поломке оборудования и т. д. Тем не менее, мы воочию убедились, что алгоритм, управляющий светофором, не имеет конца. Он работает круглосуточно. Потому что дорожное движение – бесконечный процесс. Который, как и сама жизнь, никогда не останавливается. §3. СПИСОК ОПЕРАТОРОВ РЕАЛЬНОГО ВРЕМЕНИ В языке ДРАКОН имеется пять икон реального времени (рис. 17, иконы И16–И20): пауза; период; пуск таймера; синхронизатор (по таймеру); параллельный процесс. Три из них (пауза, пуск таймера и параллельный процесс) – простые операторы. Две другие иконы (период и синхронизатор) служат «кирпичиками» для построения составных операторов и вне последних не используются. Икона «период» является принадлежностью цикла ЖДАТЬ (рис. 18 макроикона 7). Икона «синхронизатор» служит для образования тринадцати составных операторов (рис. 18, макроиконы 8–20). Назначение операторов поясним, как всегда, на примерах. • • • • • §4. ОПЕРАТОРЫ ВВОДА-ВЫВОДА В языке ДРАКОН предусмотрены два визуальных оператора ввода-вывода: «вывод» (рис. 17, икона И14) и «ввод» (рис. 17, икона И15). Они не от- 208 ЧАСТЬ 2. АЛГОРИТМИЧЕСКИЙ ЯЗЫК ДРАКОН И УДОБНЫЕ ЧЕРТЕЖИ АЛГОРИТМОВ ГЛАВА 13. АЛГОРИТМЫ РЕАЛЬНОГО ВРЕМЕНИ 209 носятся к операторам реального времени и рассматриваются здесь только потому, что встречаются в ближайшем примере. На рис. 17 видно, что иконы ввода-вывода имеют мнемоническую форму. Икона И14 содержит полую стрелку, направленную наружу, что символизирует «вывод», а икона И15 – стрелку, направленную внутрь (ввод). Оба оператора «двухэтажные». На верхнем этаже пишется ключевое слово или ключевая фраза. На нижнем (в прямоугольнике) – содержательная информация, подлежащая вводу и выводу (рис. 142, 143). §5. ОПЕРАТОР «ПАУЗА» Предположим, управляющий компьютер должен выдать серию электрических команд, которые по линиям связи передаются в исполнительные органы и вызывают срабатывание электромеханических реле. В результате происходит открытие трубопровода, включение насоса и другие операции, необходимые для функционирования управляемого объекта. Такая ситуация может встретиться во многих системах управления реального времени. Например, при заправке топливом космических ракет, на атомных электростанциях, нефтеперерабатывающих заводах и т. д. Рассмотрим пример. Предположим, управляющий компьютер должен: выдать команду ОТКРЫТЬ.ТРУБОПРОВОД; подождать две минуты; выдать две команды: ВКЛЮЧИТЬ.НАСОС и ОТКРЫТЬ.ЗАСЛОНКУ; подождать 45 секунд; выдать команду ПОДАЧА.ТОПЛИВА; подождать три минуты; выдать команду ПУСК.АГРЕГАТА. • • • • • • • Соответствующий алгоритм представлен на рис. 142. Задержка выдачи команд реализуется с помощью иконы «пауза». Внутри последней указывается время необходимой задержки. Например, 2мин (2 минуты), 45с (45 секунд) и т. д. Если говорить более точно, верхний оператор «пауза» на рис. 142 работает так. После выдачи команды ОТКРЫТЬ.ТРУБОПРОВОД в управляющем компьютере запускается программный счетчик времени на 2 минуты. По истечении этого времени компьютер выдает в линию связи команды ВКЛЮЧИТЬ.НАСОС и ОТКРЫТЬ.ЗАСЛОНКУ. §6. ОПЕРАТОРЫ «ПУСК ТАЙМЕРА» И «СИНХРОНИЗАТОР» Вернемся еще раз к задаче, описанной в предыдущем параграфе, и слегка изменим ее. Будем считать, что разработчик управляемого объекта хочет 210 ЧАСТЬ 2. АЛГОРИТМИЧЕСКИЙ ЯЗЫК ДРАКОН И УДОБНЫЕ ЧЕРТЕЖИ АЛГОРИТМОВ ГЛАВА 13. АЛГОРИТМЫ РЕАЛЬНОГО ВРЕМЕНИ 211 указать время выдачи команд не по принципу «задержка после предыдущей команды», а по принципу секундомера. Это значит, что все времена отсчитываются от единого начального момента (совпадающего с пуском секундомера). Исходя из этого, сформулируем задачу управляющего компьютера. Он должен: «секундомер», то есть обнулить и запустить таймер; • включить выдать команду ОТКРЫТЬ.ТРУБОПРОВОД; • когда таймер отсчитает две минуты, выдать пару команд ВКЛЮ• ЧИТЬ.НАСОС и ОТКРЫТЬ.ЗАСЛОНКУ; таймер отсчитает 2 минуты 45 секунд, выдать команду ПО• когда ДАЧА.ТОПЛИВА; таймер отсчитает 5 минут 45 секунд, выдать команду ПУСК. • когда АГРЕГАТА. Описанный алгоритм изображен на рис. 143. В нем используются операторы «пуск таймера» и «синхронизатор», совместная работа которых обеспечивает нужный эффект. Оператор «пуск таймера» порождает, обнуляет и запускает таймер и присваивает ему имя А. Оператор «синхронизатор» задерживает выполнение размещенного справа от него визуального оператора до наступления момента, указанного в иконе «синхронизатор». Например, синхронизатор А = 2мин45с на рис. 143 задерживает выдачу команды ПОДАЧА.ТОПЛИВА до момента, когда таймер А отсчитает 2 минуты 45 секунд. Сравнивая алгоритмы на рис. 142 и 143, можно заметить, что они почти эквивалентны. Почему почти? Чтобы разобраться, рассмотрим идеальный случай. Предположим, что время, необходимое для выдачи одной команды равно нулю. Имеется в виду, что перечисленные ниже команды выдаются за время, равное нулю: • ОТКРЫТЬ.ТРУБОПРОВОД; • ВКЛЮЧИТЬ.НАСОС; • ОТКРЫТЬ.ЗАСЛОНКУ; • ПОДАЧА.ТОПЛИВА; • ПУСК.АГРЕГАТА. В этом случае оба алгоритма будут выдавать команды синхронно. Однако в действительности идеальные случаи встречаются далеко не всегда. Иногда бывает, что время выдачи одной команды больше нуля. В таком случае алгоритмы работают по-разному. 212 ЧАСТЬ 2. АЛГОРИТМИЧЕСКИЙ ЯЗЫК ДРАКОН И УДОБНЫЕ ЧЕРТЕЖИ АЛГОРИТМОВ Практика показывает, что в некоторых ситуациях предпочтительным является принцип паузы (когда используется икона «пауза»). А в других – принцип таймера (когда используются иконы «пуск таймера» и «синхронизатор»). Оба инструмента оказываются в равной степени необходимыми и полезными. §7. АЛГОРИТМ РЕАЛЬНОГО ВРЕМЕНИ На рис. 144 представлен более сложный алгоритм, в котором применяются операторы «пауза», «пуск таймера» и «синхронизатор». В средней ветке изображена икона «пауза» с надписью 2мин48с. Это означает, что после завершения процедуры ВОЛШЕБНЫЙ РЕМОНТ ТАРЕЛКИ отсчитывается пауза длительностью 2 минуты 48 секунд. И только после этого производится снятие признака АВАРИЯ ТАРЕЛКИ. Еще одна 4-секундная пауза предусмотрена в левой ветке. В правой ветке есть икона «пуск таймера» с надписью А = 0. Данный оператор порождает, обнуляет и запускает таймер А. В той же ветке установлены три иконы «синхронизатор по таймеру» с надписями А = 3мин, А = 5мин и А = 8мин. При этом вызов процедуры ВКЛЮЧИТЬ ТЕЛЕПОРТАЦИЮ произойдет не сразу, а только после того, как таймер А отсчитает 3 минуты. Соответственно включение в работу процедур ОТКЛЮЧИТЬ ГРАВИТАЦИЮ и ВЫХОД ИЗ АСТРАЛЬНОГО ТЕЛА будет задержано до тех пор, пока таймер А не примет значения 5 и 8 минут соответственно. На рис. 144 видно, что оператор «пуск таймера» можно применять двумя способами: совместно с иконой «синхронизатор» (этот случай мы • во-первых, обсудили); • во-вторых, совместно с иконой «вопрос». Последний случай рассмотрен в следующем параграфе. §8. ЦИКЛ ЖДАТЬ Предположим, нужно в течение 3 минут ждать появления хотя бы одного из двух признаков ЛЕВЫЙ ДВИГАТЕЛЬ В НОРМЕ и ПРАВЫЙ ДВИГАТЕЛЬ В НОРМЕ. При наступлении этого события (появлении одного из признаков) необходимо включить плазменный реактор. Если же названные признаки отсутствуют, по истечении трех минут следует включить фотонный двигатель. Для решения задачи на рис. 144 используются два оператора: ГЛАВА 13. АЛГОРИТМЫ РЕАЛЬНОГО ВРЕМЕНИ 213 214 ЧАСТЬ 2. АЛГОРИТМИЧЕСКИЙ ЯЗЫК ДРАКОН И УДОБНЫЕ ЧЕРТЕЖИ АЛГОРИТМОВ таймера Т, отсчитывающего три минуты; • пуск цикл ЖДАТЬ. • В состав последнего входит икона «период» и три иконы «вопрос». В последних размещены надписи: ДВИГАТЕЛЬ В НОРМЕ? • ЛЕВЫЙ ПРАВЫЙ • Т > 3мин. ДВИГАТЕЛЬ В НОРМЕ? • Последний оператор проверяет: значение таймера Т больше трех минут? Если оба признака отсутствуют, а значение таймера не превышает 3 минут, опрос условий периодически повторяется. При этом период опроса указывается в иконе «период». В данном примере он равен 4 секундам. На рис. 144 видно,что цикл ЖДАТЬ закончится в момент обнаружения одного из ожидаемых признаков, а если они не появятся, – через 3 минуты. §9. ЦИКЛ «ЖДАТЬ» В ОБЩЕМ ВИДЕ В общем виде цикл ЖДАТЬ показан на рис. 145. Он позволяет организовать режим ожидания признаков В, С, D, ..., Е. первым появится признак В, выполняется действие F. • Если Если • твие G.В отсутствует и первым придет признак С, реализуется дейсЕсли В и С отсутствуют и первым будет D, выполняется H. И так • далее. • Операторы А и L обычно не используются. ожидания нескольких признаков (когда система • Задача должна по-разному реагировать на каждый признак) яв- • ляется типичной при разработке систем реального времени. Цикл ЖДАТЬ – удобное средство для решения подобных задач. §10. ОПЕРАТОР «ПЕРИОД» Сравнивая макроиконы 4 и 7 на рис. 18 (обычный цикл и цикл ЖДАТЬ), мы видим, что они очень похожи. Поэтому во избежание путаницы нужно иметь какой-то различительный признак. Эту функцию выполняет икона «период». Если она есть в петле цикла – перед нами цикл ЖДАТЬ. Если нет – обычный цикл. ГЛАВА 13. АЛГОРИТМЫ РЕАЛЬНОГО ВРЕМЕНИ 215 Человек, который стоит на остановке и ждет появления трамвая, воспринимает ожидание как нечто непрерывное. Однако алгоритм реального времени организует ожидание как дискретный процесс и запускает цикл ЖДАТЬ периодически. Отсюда вытекает, что период – важная характеристика цикла ЖДАТЬ. Как работает оператор «период»? Поясним на примере. На рис. 144 цикл ЖДАТЬ «крутится» по своей петле с периодичностью 4 секунды, пока не выполнится одно из трех условий. После чего произойдет выход из цикла. Таким образом, оператор «период» задает период повторения цикла ЖДАТЬ. §11. ОПЕРАТОР «ПАРАЛЛЕЛЬНЫЙ ПРОЦЕСС» Пусть заданы два алгоритма А и В, причем А – основной алгоритм, а В – вспомогательный. Алгоритмы А и В могут работать последовательно (рис. 146) или параллельно (рис. 147). Чтобы организовать последовательную работу, необходимо в драконсхеме основного алгоритма А нарисовать икону-вставку с надписью В. В этом случае алгоритм В называется процедурой. Например, на рис. 144 в основном алгоритме ПРОВЕРКА ЛЕТАЮЩЕЙ ТАРЕЛКИ имеется процедура ПРОВЕРКА ДВИГАТЕЛЕЙ. Эти алгоритмы действуют последовательно. Основной алгоритм передает управление процедуре ПРОВЕРКА ДВИГАТЕЛЕЙ и прекращает работу. Возобновление работы алгоритма ПРОВЕРКА ЛЕТАЮЩЕЙ ТАРЕЛКИ произойдет только тогда, когда процедура ПРОВЕРКА ДВИГАТЕЛЕЙ закончится. В общем виде ситуация показана на рис. 146. Отличие параллельного режима состоит в том, что после начала вспомогательного алгоритма В основной алгоритм А не прекращает работу и действует одновременно с алгоритмом В (рис. 147). 216 ЧАСТЬ 2. АЛГОРИТМИЧЕСКИЙ ЯЗЫК ДРАКОН И УДОБНЫЕ ЧЕРТЕЖИ АЛГОРИТМОВ Чтобы организовать параллельную работу, нужно в драконсхеме основного алгоритма А нарисовать икону «параллельный процесс» (рис. 17, икона И20). Икона «параллельный процесс» двухэтажная. На верхнем этаже пишут ключевое слово, обозначающее команду, изменяющую состояние параллельного процесса, например, «Пуск», «Останов» и т. д. На нижнем этаже помещают идентификатор (название) параллельного процесса. Обратимся к примеру на рис. 144. В правой ветке находятся два оператора управления параллельными процессами. После окончания процедуры ВЫХОД ИЗ АСТРАЛЬНОГО ТЕЛА производится останов параллельного процесса ШАБАШ ЗЛЫХ ДУХОВ и пуск процесса ШАБАШ ДОБРЫХ ДУХОВ. При этом предполагается, что до начала алгоритма ПРОВЕРКА ЛЕТАЮЩЕЙ ТАРЕЛКИ некий третий алгоритм выдал команду «Пуск» и запустил параллельный процесс ШАБАШ ЗЛЫХ ДУХОВ. Последний работает одновременно с алгоритмом ПРОВЕРКА ЛЕТАЮЩЕЙ ТАРЕЛКИ вплоть до момента выдачи команды «Останов» (см. последнюю ветку на рис. 144). Указанная команда ликвидирует параллельный процесс ШАБАШ ЗЛЫХ ДУХОВ. В этот момент одновременная работа заканчивается. Однако следующая команда «Пуск» запускает другой параллельный процесс – ШАБАШ ДОБРЫХ ДУХОВ, который начинает работать одновременно с алгоритмом ПРОВЕРКА ЛЕТАЮЩЕЙ ТАРЕЛКИ. §12.ОСОБЕННОСТИ ОПЕРАТОРОВ РЕАЛЬНОГО ВРЕМЕНИ Операторы реального времени – это формальные операторы языка ДРАКОН. Однако их можно использовать и при неформальном изображении алгоритмов. Например, для построения наглядных «картинок», позволяющих легко объяснить ту или иную идею, относящуюся к системам реального времени. Примеры таких картинок представлены на рис. 140 и 148. При этом в цикле ЖДАТЬ икону «период» обычно опускают, чтобы не загромождать рисунок (см. последнюю ветку на рис. 140). Однако если длительность периода нужна для понимания, икону «период» можно сохранить (рис. 148). ГЛАВА 13. АЛГОРИТМЫ РЕАЛЬНОГО ВРЕМЕНИ 217 218 ЧАСТЬ 2. АЛГОРИТМИЧЕСКИЙ ЯЗЫК ДРАКОН И УДОБНЫЕ ЧЕРТЕЖИ АЛГОРИТМОВ ГЛАВА 13. АЛГОРИТМЫ РЕАЛЬНОГО ВРЕМЕНИ 219 §13. ОПЕРАТОР «ПРИСВОИТЬ» Рассмотрим выражение X = X + 1. Что означает знак = в этом выражении? Предположим, что знак = означает равно. Мы сразу придем к противоречию. Действительно, если вычесть X из обеих частей уравнения, получим 0=1 что неверно. Дело в том, что в алгоритмах в выражении X = X + 1 знак = означает не «равно», а «присвоить». Оператор «присвоить» X = X + 1 означает, что переменная X в левой части выражения увеличивает свое значение на 1. Во избежание путаницы для оператора «присвоить» вместо знака = используют знак «:=» (двоеточие и равно). Говорят, что выражение X := А присваивает переменной X в левой части то значение, которое записано в правой части (А). Например, X := 157 означает: переменной Х присвоить значение 157. В этой главе мы уже несколько раз использовали оператор «присвоить». Например, на рис. 143 таймеру А присвоено значение 0 (А := 0). На рис. 144 обнулены два таймера Т := 0 и А := 0. На рис. 148 имеются пять операций присваивания: Секунды := 0 Минуты := 0 Минуты := Минуты + 1 Часы := 0 Часы := Часы + 1 • • • • • §14. НЕСКОЛЬКО ВХОДОВ В ДРАКОН-АЛГОРИТМ Дракон-алгоритм может иметь более одного входа. Чтобы организовать дополнительный вход, нужно поместить икону «заголовок» над иконой «имя ветки», как показано на рис. 144 справа. Таким образом, любая ветка может быть объявлена дополнительным входом. Однако есть исключение. Если несколько веток образуют веточный цикл, вход разрешается только в начало цикла. Остальные ветки конструкции «веточный цикл» не могут являться входами в алгоритм. Разумеется, созданием нескольких входов в алгоритм не следует злоупотреблять. Этот прием следует использовать лишь в особых случаях. §15. КРАТКОЕ СООБЩЕНИЕ ДЛЯ ПРОГРАММИСТОВ На рис. 140, 142–145 показаны операторы реального времени: «пауза», «пуск таймера», «синхронизатор», «период», а также цикл ЖДАТЬ. Эти операторы нарисованы внутри алгоритмов. Поэтому может создаться впе- 220 ЧАСТЬ 2. АЛГОРИТМИЧЕСКИЙ ЯЗЫК ДРАКОН И УДОБНЫЕ ЧЕРТЕЖИ АЛГОРИТМОВ чатление, что они реализуются этими алгоритмами (то есть прикладными программами реального времени). Но это не так. На самом деле перечисленные операторы реализуются совместно: программой реального времени; • прикладной дракон-диспетчером, • ального времени. входящим в состав операционной системы реКогда в прикладной программе встречается оператор «пауза», происходят события, не показанные на наших рисунках. А именно, выход из прикладной программы и передача управления в дракон-диспетчер (с одновременной передачей параметра, записанного в иконе «пауза»). Получив параметр, диспетчер отсчитывает время, указанное в паузе. Когда время истечет, диспетчер возвращает управление в прикладную программу – в точку, расположенную после иконы «пауза». Иными словами, всякий раз, когда на рисунке алгоритма изображена пауза происходят два события: • выход из прикладной программы (в начале паузы); • вход в прикладную программу (в конце паузы). Рассмотрим еще один пример – оператор «период». Длительность периода отсчитывает не прикладная программа на рис. 144, а дракон-диспетчер, входящий в состав операционной системы реального времени. Оператор «период» означает выход из прикладной программы. Управление переходит к дракон-диспетчеру (с одновременной передачей параметра 4с). Через каждые 4 секунды дракон-диспетчер передает управление в начало цикла ЖДАТЬ (точка Z на рис. 144). Если все три условия дают ответ «нет», оператор «период» возвращает управление в дракон-диспетчер. Таким образом, функционирование цикла ЖДАТЬ обеспечивается совместными усилиями прикладной программы и дракондиспетчера. Этот вывод относится ко всем операторам реального времени. На рисунках показаны алгоритмы, которые имеют одно начало (один вход) и один конец (один выход). В действительности программы реального времени имеют много входов и много выходов. Дополнительные входы и выходы появляются всякий раз, когда в алгоритм добавляется оператор пауза или период. Но эти дополнительные входы и выходы на рисунках не показаны. Они не показаны из эргономических соображений – чтобы не загромождать рисунок. ГЛАВА 13. АЛГОРИТМЫ РЕАЛЬНОГО ВРЕМЕНИ 221 §16. ВЫВОДЫ 1. Наличие операторов реального времени резко расширяет изобразительные возможности языка ДРАКОН и позволяет использовать его при проектировании и разработке не только информационных, но и управляющих систем. Это обстоятельство существенно увеличивает область применения языка. 2. Дополнительным преимуществом является лаконичность выразительных средств, их универсальность. В языке всего пять икон реального времени, однако их алгоритмическая мощь – в сочетании с другими возможностями языка – позволяет охватить обширный спектр задач, связанных с созданием алгоритмов и программ для управляющих систем. 3. Важную роль играет эргономичность операторов реального времени. Как и другие операторы языка ДРАКОН, они имеют визуальный характер. Это позволяет сделать операции реального времени более наглядными и легкими для понимания по сравнению с традиционной текстовой записью. 4. Четыре иконы (пауза, период, пуск таймера и синхронизатор) – «близкие родственники» в том смысле, что внутри каждой из них указывается значение времени. Эта родственная связь находит свое эргономическое отражение в том, что перечисленные операторы имеют визуальное «фамильное сходство». Все они построены (с вариациями) на основе одной и той же геометрической фигуры – перевернутой равнобедренной трапеции. Глава 14 ПАРАЛЛЕЛЬНЫЕ АЛГОРИТМЫ §1. ВВЕДЕНИЕ Параллельные процессы играют важную роль в технике и многих других областях. Определение параллельного процесса дано на рис. 147. Икона «параллельный процесс» показана на рис. 17, фигура И20. Краткое описание процесса дано в §11 главы 13 (см. также рис. 144). В данной главе следующие выражения рассматриваются как синонимы: процесс; • параллельный процесс; • параллельный алгоритм. • §2. ПАРАЛЛЕЛЬНЫЕ ПРОЦЕССЫ В АЛГОРИТМЕ «ПРОВЕРКА АГРЕГАТА И РАКЕТЫ» На рис. 149 изображены 15 параллельных процессов: вызывающий алгоритм ПРОВЕРКА АГРЕГАТА И РАКЕТЫ; 14 вызываемых алгоритмов, каждый из которых обозначен иконой «параллельный процесс» (7 алгоритмов в первой ветке и 7 – во второй). • • Все вызываемые процессы запускаются сигналом ПУСК. Момент запуска точно определен оператором синхронизатор. Например, процесс КОНТРОЛЬ ПРИБОРОВ запускается в момент 103с (103 секунды). Параллельные процессы могут заканчиваться двумя способами: команде «Останов» (см. пример на рис. 144, правая ветка); • по без команды «Останов», то есть естественным пу• тем,использования когда каждый процесс решит свою задачу и достигнет конца. ГЛАВА 14. ПАРАЛЛЕЛЬНЫЕ АЛГОРИТМЫ 223 На рис. 149 показан случай, когда все вызываемые процессы заканчиваются естественным путем. Поэтому команда ОСТАНОВ не используется. §3. ВРЕМЕННАЯ ДИАГРАММА ПАРАЛЛЕЛЬНЫХ ПРОЦЕССОВ На рис. 150 показана временная диаграмма, иллюстрирующая алгоритм на рис. 149. В верхней строке темным цветом выделен вызывающий алгоритм. Он имеет самую большую длительность. Ниже расположены вызываемые процессы. В самом верху указано время запуска всех процессов по таймеру. Процессы имеют разную длительность, потому что каждый процесс выполняет задачу за разное время. §4. ПАРАЛЛЕЛЬНЫЕ ПРОЦЕССЫ В АЛГОРИТМЕ «ПРОВЕРКА ВОЗДУШНОГО СНАЙПЕРА» На рис. 149 показан упрощенный случай. Одна и та же операция повторяется 14 раз. 14 синхронизаторов задают 14 моментов времени, определяющих запуск 14 параллельных процессов. На рис. 151 показан более сложный случай. Наряду с таймером, синхронизатором и процессами применяются следующие иконы: вывод, вставка, вопрос и полка. В первой ветке имеются 4 синхронизатора. Два из них запускают процессы ЗАПРАВКА УСКОРИТЕЛЯ и АННИГИЛЯЦИЯ КВАРКОВ. Третий включает процедуру ЗАЩИТА НЕБЕСНОГО ЭКРАНА. Четвертый выдает команду НЕЙТРОННЫЙ ЗАЛП. Используются не только синхронизаторы, но и две паузы длительностью 5 секунд каждая. Первая пауза задерживает пуск процесса ЗАЩИТА АТОМНЫХ ЯДЕР. Вторая задерживает выдачу команды БЛОКИРОВКА ШИФРА. Во второй ветке выполняются операции: через синхронизатор (момент 319 секунд по таймеру) запускается процесс РАСКРУТКА ЭЛЕКТРОНОВ; устанавливаются два признака НЕТ НОРМЫ и ВКЛЮЧЕН РЕВЕРС; применяются две иконы вопрос: ПЕРЕХОД НА МАЛУЮ ТЯГУ? и КОНТРОЛЬ УРОВНЯ? выдается команда ВКЛЮЧИТЬ КАРУСЕЛЬ; запускается процесс ДЕРЖАТЬ УРОВЕНЬ; и т.д. • • • • • • В алгоритме на рис. 151 используются пять вызываемых параллельных процессов. 224 ЧАСТЬ 2. АЛГОРИТМИЧЕСКИЙ ЯЗЫК ДРАКОН И УДОБНЫЕ ЧЕРТЕЖИ АЛГОРИТМОВ ГЛАВА 14. ПАРАЛЛЕЛЬНЫЕ АЛГОРИТМЫ 225 226 ЧАСТЬ 2. АЛГОРИТМИЧЕСКИЙ ЯЗЫК ДРАКОН И УДОБНЫЕ ЧЕРТЕЖИ АЛГОРИТМОВ ГЛАВА 14. ПАРАЛЛЕЛЬНЫЕ АЛГОРИТМЫ 227 В первой ветке (через синхронизаторы) запускаются два процесса. Во второй ветке применяются три процесса. Один запускается через синхронизатор. Второй – через иконы пауза и вопрос. Третий – через более сложную схему. §5. КОМАНДЫ УПРАВЛЕНИЯ ПАРАЛЛЕЛЬНЫМИ ПРОЦЕССАМИ Команды управления пишут на верхнем этаже иконы «параллельный процесс». Ниже представлен перечень команд управления: Пуск Останов Стоп Рестарт Осуществляет пуск параллельного процесса Осуществляет останов параллельного процесса Осуществляет приостановку параллельного процесса Осуществляет повторный пуск приостановленного параллельного процесса §6. АЛЬТЕРНАТИВНЫЙ СПОСОБ ИЗОБРАЖЕНИЯ ПАРАЛЛЕЛЬНЫХ ПРОЦЕССОВ На рис. 152 показан алгоритм «Последний этап строительства дома». Можно сказать, что этот алгоритм нарисован «на другом языке». Вводятся новые обозначения и правила. 1. Жирная горизонтальная линия обозначает начало нескольких параллельных процессов. 2. Треугольник означает, что происходит прием сигналов от N параллельных процессов и их обработка. 3. Сигнал на выходе треугольника появится только тогда, когда: входы треугольника поступят (не обязательно одновременно) • на N процессов; 228 ЧАСТЬ 2. АЛГОРИТМИЧЕСКИЙ ЯЗЫК ДРАКОН И УДОБНЫЕ ЧЕРТЕЖИ АЛГОРИТМОВ из N процессов не только начнется, но и закончится. • каждый Иначе говоря, выходной сигнал треугольника возникнет в тот момент, когда завершится последний из N процессов; 4. Выходной сигнал треугольника разрешает выполнение действия, находящегося после треугольника. Завершение всех процессов на входе треугольника позволяет выполнить действие на его выходе. §7. ЖИРНЫЕ ЛИНИИ НА РИС. 152 На рис. 152 изображены три жирные параллельные линии. Каждая символизирует начало параллельных процессов. Верхняя жирная линия обозначает начало четырех процессов: электролинии. • Подводка Закупка электропроводов. • Монтаж электрощита. • Закупка водопроводных труб. • Средняя жирная линия указывает на начало следующих процессов: электропроводки. • Прокладка Устройство крыши. • Установка окон. • Прокладка водопровода. • Нижняя жирная линия «начинает» процессы: электроламп. • Установка Отделочные работы. • §8. ТРЕУГОЛЬНИКИ НА РИС. 152 На рис. 152 показаны четыре треугольника: Левый верхний треугольник выполняет две функции: три процесса и дожидается, когда кончится послед• контролирует ний из них; • разрешает начать действие «Прокладка электропроводки». Можно сказать иначе. Прокладка электропроводки начнется только после того, как закончатся процессы: электролинии. • Подводка электропроводов. • Закупка • Монтаж электрощита. ГЛАВА 14. ПАРАЛЛЕЛЬНЫЕ АЛГОРИТМЫ 229 Правый верхний треугольник выполняет две функции: два процесса и дожидается, когда кончится послед• контролирует ний из них; • разрешает начать действие «Прокладка водопровода». Другими словами, «Прокладка водопровода» начнется лишь тогда, когда закончатся процессы: электрощита. • Монтаж Закупка водопроводных труб. • Оставшиеся два треугольника работают аналогично. §9. ВРЕМЕННАЯ ДИАГРАММА ПАРАЛЛЕЛЬНЫХ ПРОЦЕССОВ ПРИ СТРОИТЕЛЬСТВЕ ДОМА Циклограмма процесса «Последний этап строительства дома» показана на рис. 153. Вспомним, что на вход левого верхнего треугольника (рис. 152) поступают сигналы трех процессов: Подводка электролинии. Закупка электропроводов. Монтаж электрощита. • • • На циклограмме изображен частный случай, когда названные три процесса: пересекаются; • не расположены таком порядке: • 1) Закупка…2)вПодводка… 3) Монтаж… В этом случае окончание процесса «Монтаж электрощита» разрешает начать процесс «Прокладка электропроводки», как показано на рис. 153. §10. ОБРАБОТКА ИНФОРМАЦИИ, ВЫПОЛНЯЕМАЯ СХЕМОЙ «ТРЕУГОЛЬНИК» Уже говорилось, что любой треугольник на рис. 152 выполняет операции по обработке информации. О каких операциях идет речь? Выделим на рис. 152 фрагмент, содержащий левый верхний треугольник и присоединенные к нему процессы. Поместим этот фрагмент на рис. 154 и исследуем его. Алгоритм, реализуемый треугольником, показан на рис. 155. Он состоит из двух веток. Первая ветка проверяет, что все три входных процесса НАЧАЛИ работать. Вторая – что все входные процессы КОНЧИЛИ работу. 230 ЧАСТЬ 2. АЛГОРИТМИЧЕСКИЙ ЯЗЫК ДРАКОН И УДОБНЫЕ ЧЕРТЕЖИ АЛГОРИТМОВ ГЛАВА 14. ПАРАЛЛЕЛЬНЫЕ АЛГОРИТМЫ 231 232 ЧАСТЬ 2. АЛГОРИТМИЧЕСКИЙ ЯЗЫК ДРАКОН И УДОБНЫЕ ЧЕРТЕЖИ АЛГОРИТМОВ 233 ГЛАВА 14. ПАРАЛЛЕЛЬНЫЕ АЛГОРИТМЫ Рассмотрим первую ветку. Три процесса могут образовать 6 комбинаций (перестановок). Перечислим все 6 комбинаций. 1) Подводка линии 2) Закупка проводов 3) Монтаж щита 1) Подводка линии 3) Монтаж щита 2) Закупка проводов 2) Закупка проводов 1) Подводка линии 3) Монтаж щита 2) Закупка проводов 3) Монтаж щита 1) Подводка линии 3) Монтаж щита 1) Подводка линии 2) Закупка проводов 3) Монтаж щита 2) Закупка проводов 1) Подводка линии Первая ветка разветвляется на 6 маршрутов. Каждый маршрут описывает одну из 6 комбинаций. Вторая ветка имеет точно такую же структуру. В начале первой ветки имеется цикл ЖДАТЬ. В исходном положении все три процесса не работают. Цикл ЖДАТЬ поочередно опрашивает эти процессы. И определяет, какой процесс ПЕРВЫМ начнет работать (рис. 155). Предположим, что первым включился в работу процесс «Монтаж электрощита». Из иконы вопрос «Монтаж…» выходим через «да» и попадаем в следующий цикл ЖДАТЬ. Этот цикл поочередно опрашивает ДВА процесса («Закупка проводов», «Подводка линии»). И определяет, какой из них ПЕРВЫМ начнет работать (рис. 155). Предположим, первым начал работу процесс «Закупка проводов». Из иконы вопрос «Закупка …» выходим через «да» и попадаем в следующий цикл ЖДАТЬ. Этот цикл периодически опрашивает ОДИН процесс («Подводка линии»). И «терпеливо» ждет, когда он вступит в работу (рис. 155). Когда ожидание увенчается успехом, из иконы вопрос «Подводка линии» выходим через «да». Это означает, что мы прошли первую ветку по маршруту: Монтаж щита Закупка проводов Подводка линии В итоге мы приходим в икону адрес, которая отсылает нас в начало второй ветки. §11. МОМЕНТ ПЕРЕХОДА ИЗ ПЕРВОЙ ВЕТКИ ВО ВТОРУЮ НА РИС. 155 Вспомним логику работы алгоритма на рис. 155. Первая ветка проверяет, что все три входных процесса НАЧАЛИ работать. Вторая – что все входные процессы КОНЧИЛИ работу. Мы мысленно остановились в тот момент, когда первая ветка алгоритма завершила работу. 234 ЧАСТЬ 2. АЛГОРИТМИЧЕСКИЙ ЯЗЫК ДРАКОН И УДОБНЫЕ ЧЕРТЕЖИ АЛГОРИТМОВ ГЛАВА 14. ПАРАЛЛЕЛЬНЫЕ АЛГОРИТМЫ 235 236 ЧАСТЬ 2. АЛГОРИТМИЧЕСКИЙ ЯЗЫК ДРАКОН И УДОБНЫЕ ЧЕРТЕЖИ АЛГОРИТМОВ Зададим вопрос. В каком состоянии в этот момент находятся интересующие нас процессы? 1. Мы знаем, что все три процесса НАЧАЛИ работать. 2. Мы знаем, что процесс «Подводка линии» продолжает работать. 3. Нам не известно состояние процессов «Монтаж щита» и «Закупка проводов». Возможно, они продолжают работать. Однако возможно, что они уже КОНЧИЛИ работу. При разработке алгоритма второй ветки следует учесть худший случай. Худшим является случай, когда все три процесса продолжают работать (то есть ни один из них не кончил работу). Алгоритм второй ветки разработан с учетом такой возможности. §12. ОБРАБОТКА ИНФОРМАЦИИ ВО ВТОРОЙ ВЕТКЕ НА РИС. 155 Задача второй ветки – определить, что все три процесса ЗАКОНЧИЛИ работу. Вторая ветка работает, как первая. Только надписи «да» и «нет» всюду меняются местами. В начале второй ветки имеется цикл ЖДАТЬ. В исходном положении, по крайней мере, один процесс работает. Однако, может быть и так, что все три процесса продолжают работать. Цикл ЖДАТЬ поочередно опрашивает три процесса и определяет, какой процесс первым кончил работать (рис. 155). Предположим, что первым кончил работу процесс «Закупка проводов». Из иконы вопрос «Закупка …» выходим через «нет» и попадаем в следующий цикл ЖДАТЬ. Этот цикл поочередно опрашивает ДВА процесса («Подводка линии», «Монтаж щита»). И определяет, какой из них первым кончит работать (рис. 155). Дальше вторая ветка работает аналогично первой. Когда вторая ветка определит, что три процесса закончились (см. точку Z на рис. 155), производится Пуск процесса «Прокладка электропроводки». На этом алгоритм завершается. В схеме на рис. 155 используются 20 циклов ЖДАТЬ. Для простоты икона «период» не показана. §13. РАЗДЕЛЕНИЕ И СЛИЯНИЕ ПРОЦЕССОВ x Пункт разделения (concurrent fork) x Обозначает разделение одного процесса на несколько паралQ лельных процессов Обозначает разделение одного маршрута на несколько паралQ лельных маршрутов 237 ГЛАВА 14. ПАРАЛЛЕЛЬНЫЕ АЛГОРИТМЫ На рис. 152 пункт разделения обозначается жирной линией. Пункт слияния (concurrent join) x x Обозначает слияние параллельных процессов в один процесс Обозначает слияние нескольких параллельных маршрутов в один маршрут На рис. 152 пункт слияния обозначен треугольником. Таким образом, на рис. 152 пункт разделения и пункт слияния имеют разные обозначения. Зачем нужны разные обозначения? Чтобы подчеркнуть, что в пункте слияния (в треугольнике) производится сложная обработка информации. Всегда ли нужно это подчеркивать? Нет, не всегда. Бывают случаи (и их немало), когда акцент на обработке информации в треугольнике является неуместным. В такой ситуации целесообразно убрать треугольник. И ввести единое обозначение (жирная горизонтальная линия) и для пункта разделения, и для пункта слияния. Пример показан на рис. 155а. Если удалить треугольники на рис. 152, получим рис. 155б. Нетрудно заметить, что удаление треугольников упрощает схему и устраняет лишние изломы линий. Поэтому рис. 155б является более простым и удобным, чем рис. 152. §14. НЕДОСТАТОК РИСУНКА 155а На рис. 155а имеются две совершенно одинаковые жирные линии: верхняя и нижняя. Это обстоятельство скрывает от читателя тот факт, что эти линии выполняют принципиально разные функции: линия выполняет простейшую функцию, символизируя • верхняя начало параллельных процессов; линия, напротив, выполняет очень сложную функцию. • нижняя Она реализует алгоритм обработки информации, показанный на рис. 155. Если необходимо сделать акцент на обработке информации, надо пункт слияния изображать в виде треугольника, как на рис. 154. Если же такой акцент не нужен, треугольник следует убрать. И рис. 154 заменить на рис. 155а. 238 ЧАСТЬ 2. АЛГОРИТМИЧЕСКИЙ ЯЗЫК ДРАКОН И УДОБНЫЕ ЧЕРТЕЖИ АЛГОРИТМОВ ГЛАВА 14. ПАРАЛЛЕЛЬНЫЕ АЛГОРИТМЫ 239 240 ЧАСТЬ 2. АЛГОРИТМИЧЕСКИЙ ЯЗЫК ДРАКОН И УДОБНЫЕ ЧЕРТЕЖИ АЛГОРИТМОВ §15. СРАВНЕНИЕ ЯЗЫКОВ В данной книге все алгоритмы нарисованы на языке ДРАКОН. Но в этой главе (§§6–9, 13, 14) мы отошли от этого принципа. При описании строительства дома использован другой язык (назовем его «язык Z»). Последний значительно удобнее для изображения параллельных процессов типа «строительство дома». В §§10–12 мы снова вернулись к ДРАКОНу. Потому что язык Z принципиально не может описать обработку информации в схеме треугольника. А язык ДРАКОН решает эту задачу точно и подробно. Подведем итоги. Для разных задач нужны разные языки. В тех случаях, когда детали не нужны, когда требуется укрупненное и наглядное описание параллельных процессов, в некоторых случаях (но, разумеется, не всегда) язык Z оказывается более удобным. Язык ДРАКОН можно расширить, включив в его состав элементы языка Z. §16. ВЫВОДЫ 1. На языке ДРАКОН параллельный процесс запускается командой Пуск. 2. На языке ДРАКОН параллельные процессы могут заканчиваться двумя способами: командой Останов; без использования команды Останов, когда каждый процесс выполнит свою задачу и достигнет конца. 3. На языке ДРАКОН предусмотрены четыре команды управления параллельными процессами: Пуск, Останов, Стоп, Рестарт. 4. Рассмотрен альтернативный способ изображения параллельных процессов с помощью языка Z. 5. Язык Z – это условное название икон, обозначающих пункты разделения параллельных процессов (concurrent fork) и пункты слияния параллельных процессов (concurrent join). 6. Язык Z имеет две иконы: жирную линию и треугольник. 7. На языке Z начало нескольких параллельных процессов обозначается жирной линией. 8. На языке Z конец параллельных процессов обозначается: либо треугольником (если нужно подчеркнуть, что в треугольнике выполняется сложная обработка информации); либо жирной линией (если акцент на обработке информации не нужен). • • • • ГЛАВА 14. ПАРАЛЛЕЛЬНЫЕ АЛГОРИТМЫ 241 9. Выходной сигнал треугольника возникает в тот момент, когда завершится последний из N параллельных процессов. 10. Завершение всех процессов на входе треугольника позволяет выполнить действие на его выходе. 11. Икона «треугольник» выполняет обработку информации по сложному алгоритму. Этот алгоритм нельзя описать на языке Z, но можно описать на языке ДРАКОН. 12. Для разных задач нужны разные языки. В тех случаях, когда детали не нужны, когда требуется укрупненное и наглядное описание параллельных процессов, в некоторых случаях язык Z оказывается более удобным. 13 Язык ДРАКОН целесообразно расширить и включить в его состав иконы языка Z. Глава 15 ДРАКОН-СХЕМЫ И БЛОК-СХЕМЫ §1. КРАСОТА АЛГОРИТМОВ Алгоритм, представленный в письменном виде, предназначен для зрительного восприятия человеком. Следовательно, алгоритм представляет собой зрительную сцену. Или, если угодно, – зрительный образ, зрительную картину. Красота алгоритма – это красота его зрительного образа, в частности, красота дракон-схемы. Алгоритм можно назвать красивым (эргономичным) в том случае, если процесс зрительного восприятия, понимания и постижения алгоритма протекает с максимальной скоростью, наименьшими усилиями и максимальным эстетическим наслаждением. Чем красивее алгоритм, тем быстрее и легче можно его понять. Отсюда вытекает, что красота и элегантность алгоритмов открывают путь к экономии умственных усилий. Но не только. Чем красивее зрительные образы частей алгоритма, чем изящнее они соединены в общую (алгоритмическую) картину, тем приятнее на них смотреть. Чем точнее и элегантнее зрительный «пейзаж» обнажает глубинный смысл алгоритма, тем плодотворнее мышление. Чем больше красоты, тем глубже понимание алгоритмов. Тем скорее течет наша алгоритмическая мысль. Тем легче мы постигаем суть дела. Тем быстрее и качественнее протекает важнейший производственный процесс, играющий немалую роль в мировой экономике, – процесс массовой разработки алгоритмов и программ. И наоборот, если зрительный образ алгоритма кажется некрасивым, неприятным, отталкивающим и запутанным, процесс понимания и обду- ГЛАВА 15. ДРАКОН-СХЕМЫ И БЛОК-СХЕМЫ 243 мывания неизбежно замедляется, что снижает производительность умственного труда. ДРАКОН – графический язык, язык зрительных образов. С учетом сказанного можно уточнить: ДРАКОН – язык красивых (эргономичных) зрительных образов. Но красота ДРАКОНа – не самоцель. Она позволяет ощутимо повысить производительность труда при создании алгоритмов. Мы исходим из того, что зрительные образы алгоритмов следует сознательно проектировать. Для этой цели можно (в разумных пределах) использовать средства художественного конструирования. Уместно напомнить слова видного психолога Бориса Ломова: «Средства художественного конструирования в конечном счете направлены на то, чтобы вызвать тот или иной эффект у работающего человека… Применяя средства художественного конструирования, мы создаем положительные эмоции, облегчаем операцию приема информации человеком, улучшаем концентрацию и переключение внимания, повышаем скорость и точность действий. Короче говоря, мы пользуемся этими средствами для управления поведением человека в широком смысле слова, для управления его психическим состоянием» и умственной работоспособностью [1]. §2. ДРАКОН-СХЕМА ДОЛЖНА БЫТЬ ЛАКОНИЧНОЙ Правило лаконичности. Зрительный образ алгоритма должен быть лаконичным. Все ненужные, лишние детали должны быть отсечены. Поясним. Дракон-схема должна содержать лишь те элементы, которые необходимы для сообщения читателю существенной информации, точного понимания ее смысла и стимулирования правильных решений и разумных действий. Пустые украшения, избыточные, затемняющие детали должны быть удалены из схемы алгоритма. Характеризуя это правило, Ф. Эшфорд пишет: «Бесполезно стремиться направить внимание на важнейшие характеристики, если они окружены лишними, не относящимися к ним визуальными раздражителями, мешающими восприятию главного» [2]. 244 ЧАСТЬ 2. АЛГОРИТМИЧЕСКИЙ ЯЗЫК ДРАКОН И УДОБНЫЕ ЧЕРТЕЖИ АЛГОРИТМОВ §3. СЛЕДУЕТ ИЗБЕГАТЬ НЕОПРАВДАННЫХ ИЗЛОМОВ СОЕДИНИТЕЛЬНЫХ ЛИНИЙ Существуют «вредные» мелочи, которые затрудняют понимание драконсхемы. Одна из них – ненужные изломы соединительных линий. Правило устранения изломов. Чтобы алгоритм был удобным для чтения, количество изломов соединительных линий должно быть минимальным. Из двух схем лучше та, где число изломов меньше. Сравним две схемы на рис. 156 и 157. На рис. 156 показана обычная блок-схема, заимствованная из технической литературы [3]. На рис. 157 изображена эквивалентная ей дракон-схема. Эти рисунки позволяют выявить различия между неприглядной блок-схемой и красивой дракон-схемой. С точки зрения правил, рождающих алгоритмическую красоту, блок-схема на рис. 156 имеет следующие недостатки. Неоправданно большое число изломов линий (в блок-схеме 12 изломов, а в дракон-схеме только 4). Большое число «паразитных» элементов: 14 стрелок и 3 кружка, которые в дракон-схеме отсутствуют (поскольку они совершенно не нужны и представляют собой визуальные помехи, затемняющие суть дела). • • Мы рассмотрели два эргономических правила (правило лаконичности и правило минимизации изломов). И убедились, что в дракон-схеме они строго соблюдаются, а в блок-схеме грубо нарушены. §4. СРАВНИТЕЛЬНЫЙ АНАЛИЗ ДВУХ СХЕМ Обратимся снова к рис. 156 и 157. Мы сделали лишь первый шаг к устранению графических недочетов. На рис. 156 осталось еще немало «грязи», которую необходимо отмыть. Итак, продолжим наш критический анализ. Блок-схема на рис. 156 имеет следующие недостатки. обозначения развилки используется ромб, который занимает • Для слишком много места. Ромб не позволяет поместить внутри необ- • ходимое количество удобочитаемого текста, состоящего из строк равной длины. В дракон-схеме верхний и нижний углы ромба «отпилены». Поэтому схема становится компактной и удобной как для записи текста, так и для чтения. Функционально однородные иконы Д, Е, Ж, И хаотично разбросаны по всей площади чертежа, занимая три разных горизонтальных уровня (что путает читателя). В дракон-схеме они расположены на ГЛАВА 15. ДРАКОН-СХЕМЫ И БЛОК-СХЕМЫ 245 246 • • • ЧАСТЬ 2. АЛГОРИТМИЧЕСКИЙ ЯЗЫК ДРАКОН И УДОБНЫЕ ЧЕРТЕЖИ АЛГОРИТМОВ одном уровне, что служит для читателя наглядной подсказкой об их функциональной однородности. Ромбы имеют выход влево, что разрушает шампур и не позволяет применить правило главного маршрута. В дракон-схеме выход влево не допускается. Икона Д и ее вертикаль расположены слева от шампура (в драконсхеме это запрещено). Ниже икон Ж и И находятся три уровня горизонтальных линий, которые имеют «паразитный» характер. В дракон-схеме три уровня сведены в одну линию, что делает схему более наглядной и компактной. Да, конечно, каждое из этих улучшений является незначительным и не делает погоды. Но когда мелкие улучшения исчисляются тысячами и становятся массовыми, ситуация может измениться. Количество переходит в качество. В этом случае облегчение умственного труда может стать значительным. §5. КРИТИКА ТРАДИЦИОННЫХ БЛОК-СХЕМ Цивилизация не может жить без чертежей, не может жить и без алгоритмов. Блок-схемы алгоритмов очень важны для понимания тайн современного производства и управления. Однако многие преподаватели и разработчики алгоритмов создают алгоритмических «уродцев», на которые неприятно смотреть. По их мнению, красота и алгоритм несовместимы. К счастью, в последнее время появились алгоритмические «мятежники», которые называют традиционные блок-схемы алгоритмов [4] «мусорными блок-схемами». Потому что изображенные на этих схемах хитросплетения блоков, соединенные хаосом рваных линий, больше напоминают кучу мусора, нежели регулярную структуру. Образчик подобного мусора представлен на рис. 158 [5]. Этот «мусорный» алгоритм мы подвергли «косметической операции» в «салоне алгоритмической красоты». И превратили в изящную дракон-схему (рис. 159). Сравним что было и что стало. Схема на рис. 158 имеет множество изъянов. Слева от иконы Ж есть пересечение линий (в дракон-схеме пересе• чения запрещены). иконы Е имеется линия под углом 45° (в дракон-схеме на• Возле клонные линии не допускаются). Д, Е и Ж имеют более одного входа (в дракон-схеме это за• Иконы прещено). В, Д, Е, Ж имеют входы сбоку, что придает схеме неряшли• Иконы вый вид. В дракон-схеме вход разрешается только сверху, что упорядочивает алгоритм и создает в нем четкую ориентацию «сверху вниз»). ГЛАВА 15. ДРАКОН-СХЕМЫ И БЛОК-СХЕМЫ 247 шампур, так как выход иконы «заголовок» и вход ико• Отсутствует ны «конец» не лежат на одной вертикали. Исчезновение шампура означает, что в схеме отсутствует зрительный остов, художественно-композиционная главная вертикаль. Тем самым уничтожается основа для выделения главного маршрута. Блок-схема на рис. 158, как и предыдущая (рис. 156), по всем параметрам проигрывает дракон-схеме. Мы убедились, что алгоритмическая красота достигается благодаря совокупному действию многих правил, каждое из которых, взятое по отдельности, выглядит скромным и будничным. §6. РАЗРЫВ ШАМПУРА – СЕРЬЕЗНАЯ ОШИБКА Разорванный шампур резко искажает зрительный образ дракон-схемы и может повлечь за собой большие неприятности. Между тем еще совсем недавно блок-схема цикла с разорванным шампуром не только не осуждалась, а наоборот, была рекомендована стандартом ANSI (Американский национальный институт стандартов). На рис. 160 представлена схема, взятая из источника [6], где она характеризуется как «стандартная блок-схема ANSI». Сравнение этой схемы с эквивалентной дракон-схемой на рис. 161 позволяет выявить многочисленные дефекты: Ниже иконы G имеет место разрыв шампура (нарушено правило, • согласно которому один из путей, идущих от входа к выходу, дол- • • • • • • • • жен проходить по главной вертикали). Икона G имеет два входа (в дракон-схеме разрешается только один вход). Икона G имеет вход сбоку (в дракон-схеме это запрещено). У иконы G выход находится слева (в дракон-схеме он должен быть снизу). Две петли обратной связи обычного цикла находятся слева от шампура и закручены по часовой стрелке (в дракон-схеме они расположены справа от шампура и закручены против часовой стрелки). Используются неудобные ромбы (в дракон-схеме их заменяют эргономичные иконы «вопрос»). Ромб L имеет выход слева (в дракон-схеме он должен быть справа). Используются 12 стрелок, из которых 10 – паразитные (в драконсхеме всего 2 стрелки). Имеется один избыточный излом линии (в блок-схеме 9 изломов, в дракон-схеме только 8). Таким образом, американская блок-схема, как и предыдущие примеры, по всем параметрам проигрывает дракон-схеме. 248 ЧАСТЬ 2. АЛГОРИТМИЧЕСКИЙ ЯЗЫК ДРАКОН И УДОБНЫЕ ЧЕРТЕЖИ АЛГОРИТМОВ ГЛАВА 15. ДРАКОН-СХЕМЫ И БЛОК-СХЕМЫ 249 250 ЧАСТЬ 2. АЛГОРИТМИЧЕСКИЙ ЯЗЫК ДРАКОН И УДОБНЫЕ ЧЕРТЕЖИ АЛГОРИТМОВ §7. ГРАФИЧЕСКИЙ АНАЛИЗ ЦИКЛА «ПОКА» На рис. 162–165 изображены блок-схема и дракон-схема цикла ПОКА. Сравним их между собой [7, 8]. На блок-схеме (рис. 162) можно указать следующие недочеты: Между иконами E и K имеет место разрыв шампура (нарушено пра• вило, согласно которому один из путей, идущих от входа к выходу, • • • • • • должен проходить по главной вертикали). Ниже иконы Е через разрыв шампура проходят две нежелательные горизонтальные линии Две петли обратной связи циклов ПОКА закручены по часовой стрелке (в дракон-схеме они закручены против часовой стрелки). Используются неудобные ромбы (в дракон-схеме их заменяют эргономичные иконы «вопрос»). Используются 8 стрелок, из которых 6 – паразитные (в дракон-схеме всего 2 стрелки). Имеется два избыточных излома линии (в блок-схеме 10 изломов, в дракон-схеме только 8). В блок-схемах отсутствует графическая стандартизация циклов. В дракон-схемах стандартизация циклов строго соблюдается. Об этом можно судить по рис. 163 и 165. Голубая заливка окружает внутренний цикл ПОКА. Белая заливка окружает внешний цикл ПОКА. Сравнивая рис. 162–165, легко убедиться, что дракон-схемы во всех отношениях превосходят блок-схемы. §8. ШАМПУР КАК «КОМПОЗИЦИОННЫЙ ЦЕНТР» ЗРИТЕЛЬНОЙ КАРТИНЫ АЛГОРИТМА В живописи есть понятие композиционный центр картины. Так называют основное место картины, центр внимания, смысловое ядро произведения, которое невольно притягивает к себе взгляд зрителя. Вернемся к зрительному образу дракон-схемы алгоритма. Аналогом композиционного центра можно считать шампур примитива (и шампуры веток силуэта). Роль шампура в зрительно-смысловой структуре алгоритма очень велика. Он выполняет роль главной вертикали зрительной картины алгоритма. Шампур должен быстро и естественно привлечь к себе внимание читателя, правильно сориентировать его в структуре алгоритма. И тем самым облегчить восприятие и понимание существа дела. ГЛАВА 15. ДРАКОН-СХЕМЫ И БЛОК-СХЕМЫ 251 252 ЧАСТЬ 2. АЛГОРИТМИЧЕСКИЙ ЯЗЫК ДРАКОН И УДОБНЫЕ ЧЕРТЕЖИ АЛГОРИТМОВ ГЛАВА 15. ДРАКОН-СХЕМЫ И БЛОК-СХЕМЫ 253 Отсутствие шампура делает зрительный образ алгоритма «бесформенным», лишенным композиционного центра. В этом случае читатель лишается необходимых зрительных ориентиров, что заметно затрудняет чтение алгоритма. Введение шампура в структуру алгоритма можно рассматривать как полезное средство, заметно облегчающее труд алгоритмистов. §9. ВЫВОДЫ 1. Дракон-схемы имеют два принципиальных отличия от блок-схем. Дракон-схемы подчиняются: строгим математическим правилам; когнитивно-эргономическим правилам. 2. Красота алгоритма – это красота его зрительного образа, в частности, красота дракон-схемы. 3. Алгоритм можно назвать красивым (эргономичным) в том случае, если процесс зрительного восприятия и понимания алгоритма протекает с максимальной скоростью, наименьшими усилиями и максимальным эстетическим наслаждением. 4. Красота способствует более быстрому и глубокому пониманию алгоритмов. Чем больше красоты, тем легче мы постигаем суть дела. Тем быстрее и качественнее протекает важный производственный процесс, играющий немалую роль в мировой экономике, – процесс массовой разработки алгоритмов и программ. 5. Зрительный образ алгоритма должен быть лаконичным. Все ненужные, лишние детали должны быть отсечены. 6. Дракон-схема должна содержать лишь те элементы, которые необходимы для сообщения читателю существенной информации, точного понимания ее смысла и стимулирования правильных решений и разумных действий. 7. Чтобы дракон-схема была удобной для чтения, количество изломов соединительных линий должно быть минимальным. 8. В зрительно-смысловой структуре алгоритма шампур играет важную роль. Шампур должен быстро и естественно привлечь к себе внимание читателя, правильно сориентировать его в структуре алгоритма. 9. При отсутствии шампура уничтожается основа для выделения главного маршрута. 10. Разрыв или отсутствие шампура делает зрительный образ алгоритма «бесформенным», лишенным композиционного центра. В этом случае читатель лишается необходимых зрительных ориентиров, что затрудняет чтение алгоритма. • • 254 ЧАСТЬ 2. АЛГОРИТМИЧЕСКИЙ ЯЗЫК ДРАКОН И УДОБНЫЕ ЧЕРТЕЖИ АЛГОРИТМОВ 11. Алгоритмическая красота дракон-схем достигается благодаря совокупному действию многих правил, каждое из которых, взятое по отдельности, выглядит скромным и будничным. 12. В данной главе указаны эргономические недостатки блок-схем и описаны парные им достоинства дракон-схем. 13. Наиболее важным дефектом блок-схем является недостаток выразительных средств. Алгоритмическая структура «силуэт», являющаяся основным и наиболее мощным инструментом языка ДРАКОН, принципиально не может быть выражена в виде блок-схем. 14. Изложенные в данной книге теоретические обоснования, сравнительный анализ дракон-схем и блок-схем, а также многочисленные примеры убедительно доказывают, что блок-схемы не имеют будущего. Блок-схемы безнадежно устарели. Пользоваться ими недопустимо. Вместо них следует использовать дракон-схемы. Глава 16 КОРОТКО О ПРОГРАММИРОВАНИИ §1. ВВЕДЕНИЕ Книга посвящена алгоритмам. Вопросы программирования в ней не рассматриваются. Данная глава является исключением. Цель главы – пояснить связь между языком Дракон и программированием. Язык Дракон можно присоединить к некоторым языкам программирования и получить так называемые гибридные языки: язык Дракон + язык Си = гибридный язык Дракон-Си язык Дракон + язык Дельфи = гибридный язык Дракон-Дельфи язык Дракон + язык Си# = гибридный язык Дракон-Си# язык Дракон + язык Джава = гибридный язык Дракон-Джава язык Дракон + язык Питон = гибридный язык Дракон-Питон язык Дракон + язык Перл = гибридный язык Дракон-Перл язык Дракон + язык Руби = гибридный язык Дракон-Руби язык Дракон + язык Ада = гибридный язык Дракон-Ада язык Дракон + язык Оберон = гибридный язык Дракон-Оберон и др. В качестве примера рассмотрим гибридный язык Дракон-Си. И превратим программы на языке Си в программы на гибридном языке ДраконСи. В этом случае Си называется целевым языком. Пояснения даны на рис. 166 и 167. §2. КАК ИЗОБРАЗИТЬ ОПЕРАТОР ЯЗЫКА СИ «IF–ELSE» НА ЯЗЫКЕ ДРАКОН-СИ В первом примере на рис. 166 рассмотрен оператор if–else. В средней графе показана программа на языке Си, в которой используется этот оператор. 256 ЧАСТЬ 2. АЛГОРИТМИЧЕСКИЙ ЯЗЫК ДРАКОН И УДОБНЫЕ ЧЕРТЕЖИ АЛГОРИТМОВ А в правой графе изображена математически эквивалентная ей программа на языке Дракон-Си. В чем сходство этих программ? Некоторые выражения из программы на языке Си без изменения перекочевали в дракон-программу. Вот пример: • а>=0 (а больше нуля) В правой графе это выражение помещено в иконе вопрос, которая снабжена выходами «да» и «нет». Еще пример: • x=f1; • y=f2; В правой графе эти два оператора присваивания помещены в левую икону действие, присоединенную к выходу «да». (Заметим, что на языке Си присваивание обозначается знаком =). Еще один пример: • x=r1; • y=r2; В правой графе эти операторы помещены в правую икону действие, присоединенную к выходу «нет». На этом сходство программ кончается. Укажем отличия. В си-программе мы видим два ключевых слова if, else, четыре фигурных скобки и две круглые скобки. В дракон-программе они исчезают и превращаются в чертеж. Благодаря этому схема приобретает важное качество – наглядность. §3. КАК ИЗОБРАЗИТЬ ОПЕРАТОР ЯЗЫКА СИ «IF–ELSEIF–ELSE» НА ЯЗЫКЕ ДРАКОН-СИ? Во 2-м примере на рис. 166 рассмотрен оператор if–elseif–else. Рядом показаны эквивалентные программы на языках Си и Дракон-Си. В обеих программах названный оператор записан в текстовой и графической форме соответственно. В чем сходство двух программ? Ниже указаны выражения, записанные в си-программе, которые без изменения переносятся в дракон-программу: x<b x=b x<c x=c x=d • • • • • ГЛАВА 16. КОРОТКО О ПРОГРАММИРОВАНИИ 257 Эти выражения на схеме помещаются в две иконы вопрос и три иконы действие. Перечислим отличия. В си-программе имеются три ключевых слова if, elseif, else, две круглые скобки и три точки с запятой. В дракон-программе они отсутствуют, превращаясь в чертеж. Чертеж отчетливо показывает пространственную структуру программы. Благодаря этому зрительное восприятие структуры заметно улучшается. §4. КАК ИЗОБРАЗИТЬ КЛЮЧЕВЫЕ СЛОВА «SWITCH, CASE, BREAK, DEFAULT» НА ЯЗЫКЕ ДРАКОН-СИ? В 3-м примере на рис. 166 представлены ключевые слова switch, case, break, default. Ниже представлен список выражений, которые не изменяются. В неизменном виде они переходят из си-программы в дракон-программу (в иконы выбор, вариант и действие): n 1 2 default x=a x=b x=c • • • • • • • В си-программе видим большое количество избыточных слов и текстовых символов: (два раза), • switch case 1, • case 2, • break, • две фигурные скобки, • две круглые скобки, • две косые скобки, • три двоеточия, • пять точек с запятой, • две звездочки. • Нужны ли все эти символы? Нет, не нужны! В дракон-программе эти знаки исчезают. Они превращаются в приятный для глаза графический образ, пригодный для быстрого симультанного (панорамного) восприятия. 258 ЧАСТЬ 2. АЛГОРИТМИЧЕСКИЙ ЯЗЫК ДРАКОН И УДОБНЫЕ ЧЕРТЕЖИ АЛГОРИТМОВ §5. КАК ИЗОБРАЗИТЬ ЦИКЛ «WHILE» НА ЯЗЫКЕ ДРАКОН-СИ? В 4-м примере на рис. 166 рассмотрен цикл while (ПОКА). В средней графе показан цикл while на языке Си. В правой графе – эквивалентный ему графический цикл ПОКА на языке Дракон-Си. Перечислим выражения, которые без изменений перемещаются в дракон-программу (в иконы вопрос и действие): n++<50 x=z+n; x=z–n; • • • В си-программе имеются избыточные элементы: • while (два раза); круглые скобки; • две две скобки; • две фигурные косые скобки; • две звездочки. • В дракон-программе эти «паразитные» знаки отсутствуют, превращаясь в чертеж. Чертеж наглядно показывает маршруты и петлю обратной связи цикла. §6. КАК ИЗОБРАЗИТЬ ЦИКЛ «DO–WHILE» НА ЯЗЫКЕ ДРАКОН-СИ? В 5-м примере на рис. 167 рассмотрен цикл do-while (ДО). В средней графе показан цикл do-while на языке Си. В правой графе – эквивалентный ему графический цикл ДО на языке Дракон-Си. Укажем выражения, которые без изменения переносятся в драконпрограмму (в иконы действие и вопрос): y=p–a; y=p+a; n-->b • • • Как и в предыдущих случаях, в си-программе имеются избыточные элементы: (два раза); • do while (два раза); • две круглые • две фигурныескобки; скобки; • две косые скобки; • две звездочки. • ГЛАВА 16. КОРОТКО О ПРОГРАММИРОВАНИИ 259 В дракон-программе эти знаки исчезают, потому что на чертеже они не нужны. Чертеж гораздо лучше, чем текст, показывает структуру цикла. Примеры 6 и 7 на рис. 167 можно анализировать по аналогии. §7. КАК ПОСТРОИТЬ ГИБРИДНЫЙ ЯЗЫК ДРАКОН-СИ? Чтобы построить язык Дракон-Си, надо по определенным правилам соединить графический синтаксис Дракона с текстовым синтаксисом языка Си. Из последнего следует удалить все элементы, функции которых реализуются визуальными операторами Дракона. Любой гибридный язык (например, Дракон-Си) почти полностью сохраняет концепцию, структуру, типы данных и другие особенности целевого языка (например, Си). При этом в строго определенном числе случаев текстовая нотация целевого языка заменяется на графическую. Такой прием позволяет существенно улучшить эргономический облик целевого языка. §8. ПРЕОБРАЗОВАНИЕ ИЗ ГРАФИКИ В ИСХОДНЫЙ ТЕКСТ И ОБЪЕКТНЫЙ КОД Предположим, нужно построить систему визуального программирования на гибридном языке Дракон-Си. Задачу можно решить, например, с помощью трех программ: дракон-конструктор, дракон-транслятор, компилятор языка Си. • • • Пользователь с помощью дракон-конструктора рисует на экране компьютера программу на языке Дракон-Си (рис. 166, 167, правая графа). Дракон-транслятор преобразует выходные коды конструктора в исходный текст языка Си (рис. 166, 167, средняя графа). Стандартный компилятор Си превращает исходный текст Си в объектный код. §9. ОСОБЕННОСТИ ЯЗЫКА ДРАКОН-СИ Чтобы лучше уяснить особенности языка Дракон-Си, произведем мысленно обратное преобразование. Как видно из рис. 166 и 167, при преобразовании текстовой программы в визуальную исходный текст Си-программы разбивается на две части. 260 ЧАСТЬ 2. АЛГОРИТМИЧЕСКИЙ ЯЗЫК ДРАКОН И УДОБНЫЕ ЧЕРТЕЖИ АЛГОРИТМОВ ГЛАВА 16. КОРОТКО О ПРОГРАММИРОВАНИИ 261 262 ЧАСТЬ 2. АЛГОРИТМИЧЕСКИЙ ЯЗЫК ДРАКОН И УДОБНЫЕ ЧЕРТЕЖИ АЛГОРИТМОВ Операторы присваивания, условные выражения и т. д. почти без изменения переносятся в визуальную программу и размещаются внутри ее икон. Остальные текстоэлементы языка Си (которые можно назвать удаляемыми или «паразитными») становятся ненужными. Они превращаются в графические линии и ключевые слова «да» и «нет» (yes и no). Рис. 166 и 167 показывают, что список удаляемых (паразитных) элементов языка Си оказывается внушительным. Он включает все ключевые слова в примерах 1–7 кроме default, все фигурные, круглые и косые скобки, двоеточия, метки, комментарии в примерах 3–5, и, кроме того, точки с запятой в примерах 2, 3, 7 и отчасти 6. §10. ПРОГРАММА ОБРАБОТКИ МАССИВОВ НА ЯЗЫКЕ ДРАКОН На рис. 168 и 169 даны примеры программ, в которых имеются операции с массивами. Для описания данных используется икона «полка». На верхнем этаже полки пишут ключевое слово «данные». На нижнем – собственно данные. МАССИВ ВЕЩ Вес.кролика [100] Эта запись означает, что задан одномерный массив с именем «Вес.кролика», содержащий 100 элементов, каждый из которых является вещественным числом (ВЕЩ). Основным элементом обеих программ служит цикл ДЛЯ. В иконе «начало цикла ДЛЯ» в верхней строке пишут слово «Цикл» и после пробела односимвольное имя (алиас), обозначающее переменную цикла (буква k на рис. 168, 169). В нижней строке указывают диапазон ее изменения, например, от k = 1 до 100 В иконе «конец цикла ДЛЯ» делают запись Конец цикла k Или в общем виде Конец цикла <переменная цикла> Смысл операторов, организующих обработку массивов, пояснен в комментариях на рис. 168 и 169. ГЛАВА 16. КОРОТКО О ПРОГРАММИРОВАНИИ 263 §11. ПЕРЕМЕННАЯ ЦИКЛА В ДРАКОН-ПРОГРАММЕ Что означает переменная цикла k на рис. 168 и 169? Каков ее физический смысл в данной программе? Многие программисты забывают (или не считают нужным) ответить на этот вопрос. В результате смысл буквы k остается неясным, а сама программа нередко становится непонятной. Чтобы этого не случилось, можно применить эргономический прием. В иконе «начало цикла ДЛЯ» в средней строке следует написать формализованный комментарий, например k ≡ Номер.кроличьей.клетки Знак тождественного равенства ≡ показывает, что после него следует имя-комментарий, то есть комментарий, который пишется по правилам записи идентификаторов. Эргономическое преимущество формализованного комментария включает два момента. позволяет устранить традиционную «забывчивость» програм• Он мистов и доходчиво объяснить читателю смысл абстрактного идентификатора. Дескать, k – это номер кроличьей клетки. размещается на поле чертежа именно там, где нужно • Объяснение (в иконе «начало цикла ДЛЯ»). Это значит, что читатель получает ответ моментально – в ту самую секунду, когда он впервые увидел алиас k и в его голове забрезжил вопрос: а что такое k? В итоге непонятный символ k превращается в понятный текст«Номер. кроличьей.клетки». §12. СЕМЕЙСТВО ДРАКОН-ЯЗЫКОВ Дракон – не один язык, а целое семейство, которое может включать практически неограниченное число дракон-языков. Все гибридные языки дракон-семейства имеют одинаковый графический синтаксис. Это обеспечивает зрительное сходство дракон-схем различных гибридных языков. Каждый гибридный язык семейства отличается тем, что имеет свой собственный текстовый синтаксис. Строгое разграничение графического и текстового синтаксиса позволяет в максимальной степени расширить сферу применения гибридных языков, обеспечивая гибкость и универсальность выразительных средств языков семейства. При этом единообразие правил графического синтаксиса гибридных языков обеспечивает их концептуальное единство. А разнообразие текстовых правил (то есть возможность выбора любого текстового синтаксиса) определяет гибкость языков и легкую настройку на различные предметные и иные области. См. также главу 6, §7. 264 ЧАСТЬ 2. АЛГОРИТМИЧЕСКИЙ ЯЗЫК ДРАКОН И УДОБНЫЕ ЧЕРТЕЖИ АЛГОРИТМОВ ГЛАВА 16. КОРОТКО О ПРОГРАММИРОВАНИИ 265 §13. КАК ПОСТРОИТЬ ГИБРИДНЫЙ ЯЗЫК ПРОГРАММИРОВАНИЯ В ОБЩЕМ СЛУЧАЕ? Чтобы построить гибридный язык, нужно выполнить 5 шагов. Шаг 1. Выбрать целевой язык (например, язык Си). Шаг 2. Использовать графический синтаксис языка Дракон в качестве графического синтаксиса гибридного языка Дракон-Си. Шаг 3. Использовать синтаксис целевого языка (синтаксис языка Си) в качестве текстового синтаксиса гибридного языка Дракон-Си. Шаг 4. Удалить из текстового синтаксиса гибридного языка ДраконСи все элементы, которые заменяются управляющей графикой ДРАКОНа. Шаг 5. Создать транслятор из дракон-схемы в исходный код языка Си. Примечание. Язык Си выбран для примера. Вместо него можно подставить любой целевой язык. При использовании гибридных языков исходным текстом программы считается дракон-схема и только она. Пример. Предположим, пользователь работает в связке Дракон-конструктор – Транслятор Дракон-Си – Keil. Понятно, что исходником служит дракон-схема. При отладке программы не следует вносить исправления в промежуточные текстовые Си-файлы. Все исправления нужно вносить в исходный код, то есть в дракон-схему. Петр Приклонский сообщает: «Я уже больше года работаю на связке Дракон-конструктор – DrakonToC – Keil. И ни в коем случае не позволяю себе править промежуточные текстовые Си-файлы. Исходник – это драконсхема!» [1] Подробнее см. [2]. §14. ДВА ЭТАПА РАЗВИТИЯ ЯЗЫКОВ ПРОГРАММИРОВАНИЯ С точки зрения человеческого фактора, в истории развития языков программирования можно выделить два этапа. На первом этапе появились языки высокого уровня, которые (по сравнению с ассемблером) сделали исходный текст программы более понятным и удобным для человека. И значительно увеличили производительность труда программистов. На втором этапе (который, по-видимому, только начинается) некоторые языки высокого уровня смогут работать в сочетании с языком Дракон, образуя гибридные языки. При этом функция исходного кода программы переходит к дракон-схемам. Это позволит отказаться от текстовых управляющих структур, используемых в языках высокого уровня, и заменить их на управляющую графику Дракона. 266 ЧАСТЬ 2. АЛГОРИТМИЧЕСКИЙ ЯЗЫК ДРАКОН И УДОБНЫЕ ЧЕРТЕЖИ АЛГОРИТМОВ Что это даст? Исходный код программы станет еще более понятным и удобным для человека. И, следовательно, еще больше увеличится производительность труда программистов. §15. ПЛАН РАЗВИТИЯ И ЧАСТИЧНОЙ УНИФИКАЦИИ ЯЗЫКОВ ПРОГРАММИРОВАНИЯ Опыт использования языка Дракон и гибридных языков позволяет предложить план развития и частичной унификации языков высокого уровня из трех пунктов. 1. Использовать графический синтаксис языка Дракон в качестве стандарта, позволяющего осуществить частичную унификацию языков высокого уровня. 2. Текстовый синтаксис следует заимствовать из целевого языка. При этом следует удалить все элементы текстового синтаксиса, которые заменяются управляющей графикой Дракона. 3. Преобразовать языки высокого уровня в гибридные языки. Как показывают первые опыты подобной работы, переход от языков высокого уровня к гибридным языкам программирования свидетельствует о заметном повышении производительности труда программистов. §16. ВЫВОДЫ 1. Язык Дракон можно присоединить к некоторым языкам программирования и получить так называемые гибридные языки: язык Дракон + язык Си = гибридный язык Дракон-Си язык Дракон + язык Дельфи = гибридный язык Дракон- Дельфи язык Дракон + язык Джава = гибридный язык Дракон-Джава язык Дракон + язык Си# = гибридный язык Дракон-Си# язык Дракон + язык Питон = гибридный язык Дракон-Питон язык Дракон + язык Перл = гибридный язык Дракон-Перл язык Дракон + язык Руби = гибридный язык Дракон-Руби язык Дракон + язык Ада = гибридный язык Дракон-Ада язык Дракон + язык Tcl = гибридный язык Дракон-Tcl язык Дракон + язык Оберон = гибридный язык Дракон-Оберон язык Дракон + язык Ассемблер = гибридный язык Дракон-Ассемблер и т. д. 2. Гибридный язык почти полностью сохраняет концепцию, структуру, типы данных и другие особенности целевого языка. В строго определенном числе случаев текстовая нотация целевого языка заменяется на графическую нотацию Дракона. Такой прием позволяет улучшить эргономический облик гибридного языка и повысить производительность труда программистов. Часть III АЛГОРИТМЫ ПРАКТИЧЕСКОЙ ЖИЗНИ (ПРИМЕРЫ) Глава 17 АЛГОРИТМЫ В МЕДИЦИНЕ §1. ЯЗЫК ДРАКОН ПОЗВОЛЯЕТ ПРЕДСТАВЛЯТЬ ПРОЦЕДУРНЫЕ МЕДИЦИНСКИЕ ЗНАНИЯ В УДОБНОЙ ФОРМЕ В предыдущей части (главы 1–16) мы вкратце познакомились с языком ДРАКОН. В этой части (главы 17–25) перейдем к практике. Мы рассмотрим большое число примеров из самых различных областей деятельности. И покажем, что ДРАКОН позволяет наглядно изображать алгоритмы, можно сказать, в любых ситуациях. Что это дает? Поскольку процесс создания алгоритмов оказывается чрезвычайно легким, он становится доступным практически для любого человека. С появлением ДРАКОНа специалисты приобретают новые возможности: могут выражать свои знания на своем родном про• они фессиональном языке, но в формализованном графическом виде; могут рисовать алгоритмы с большой скоростью, ко• они торая раньше считалась невозможной; одного специалиста благодаря ДРАКОНу стано• мысли вятся понятными другим специалистам. В итоге люди получает мощное средство профессионального общения. Начнем с медицины. И покажем, что ДРАКОН легко отображает процедурные медицинские задачи (медицинские алгоритмы). 270 ЧАСТЬ 3. АЛГОРИТМЫ ПРАКТИЧЕСКОЙ ЖИЗНИ (ПРИМЕРЫ) ГЛАВА 17. АЛГОРИТМЫ В МЕДИЦИНЕ 271 272 ЧАСТЬ 3. АЛГОРИТМЫ ПРАКТИЧЕСКОЙ ЖИЗНИ (ПРИМЕРЫ) ГЛАВА 17. АЛГОРИТМЫ В МЕДИЦИНЕ 273 274 ЧАСТЬ 3. АЛГОРИТМЫ ПРАКТИЧЕСКОЙ ЖИЗНИ (ПРИМЕРЫ) §2. ИЗМЕРЕНИЕ КРОВЯНОГО ДАВЛЕНИЯ Медики редко произносят слово «алгоритм». А жаль! – ведь алгоритмы составляют значительную часть медицинских знаний. На рис. 170 представлен знакомый почти каждому пример – измерение кровяного давления. Пояснение Артериальное давление – это давление внутри кровеносных сосудов (артерий), обеспечивающих продвижение крови по кровеносной системе. Оно измеряется в миллиметрах ртутного столба. Артериальное давление считается нормальным, если верхнее (систолическое) давление равно 120 мм. ртутного столба. А нижнее (диастолическое) давление равно 80 мм. ртутного столба. Если давление систематически повышается, это плохо для здоровья. Давление считается повышенным, когда верхнее давление превышает 140 мм. рт. столба. Или когда нижнее давление превышает 90 мм. рт. столба. Алгоритм на рис. 170 получен путем точного воспроизведения инструкции для врачей, подготовленной комитетом США по профилактической медицине [1]. Обычной практикой является однократное измерение артериального давления. Но американские медики рекомендуют измерять давление не один, а два раза. Если разница между двумя измерениями меньше 5 мм рт. столба, результат считается достоверным. Если же разница превышает указанную величину, врачи рекомендуют аннулировать результат, как недостоверный. И повторить измерение еще раз. Медицинский алгоритм на рис. 170 в точности отражает американские рекомендации. §3. ПЕРВАЯ ПОМОЩЬ ПРИ ХИМИЧЕСКОМ ОЖОГЕ ГЛАЗА Ожог – это повреждение тканей, вызванное тепловым, химическим, электрическим или радиационным воздействием. Химические ожоги органов зрения вызваны прямым действием химических веществ: кислот, щелочей и других химических агентов (клеи, красители и пр.). В общем случае ожоги глаз могут быть вызваны как твердыми веществами, так и жидкостями. На рис. 171 изображена первая помощь при химическом ожоге глаз. Дракон-схема составлена на основании «Практического руководства для врачей общей (семейной) практики» [2]. Деление алгоритма на три ветки показывает, что первая помощь при химическом ожоге состоит из трех этапов: ГЛАВА 17. АЛГОРИТМЫ В МЕДИЦИНЕ 275 глаз водой; • промывание промывание нейтрализатором; • лекарственнаяглазобработка. • Содержание каждой ветки позволяет дать целостную картину проблемы. И, сверх того, указать точную последовательность действий, выполняемых при оказании первой помощи пострадавшему глазу. §4. АЛГОРИТМЫ В МЕДИЦИНЕ Процесс обследования, диагностики и лечения часто представляет собой некоторую последовательность действий. Следовательно, его можно рассматривать как алгоритм. Алгоритмические описания часто встречаются во многих медицинских руководствах. Сюда относятся описания иммунологических методов, клиническая лабораторная диагностика, микробиологические инструкции по идентификации микроорганизмов и многое другое. К сожалению, форма представления этих алгоритмов далека от совершенства. Этот недостаток вносит серьезные затруднения в процесс распространения медицинских знаний. И неблагоприятно отражается на разработке новых методов лечения. Можно предположить, что учебные альбомы и компьютерные библиотеки медицинских алгоритмов (дракон-схем) могли бы принести ощутимую пользу в медицинских научных исследованиях. А также в системе медицинского образования и во врачебной практике. Кроме того, дракон-схемы могут существенно облегчить взаимопонимание медиков между собой и со специалистами смежных профессий. В частности, с медицинскими программистами. §5.ВЫВОДЫ 1. Важным недостатком современной медицины является отсутствие эффективных способов описания процедурных медицинских знаний. Процедурные знания — это знания о точной последовательности процессов и действий, например: процессов, протекающих в организме человека, действий, выполняемых медицинским персоналом. 2. В медицинской литературе доминирует текст и некачественные рисунки. Правила создания подобных рисунков достались врачам в наследство от предыдущих эпох, что существенно тормозит фиксацию, понимание и передачу медицинских знаний. • • 276 ЧАСТЬ 3. АЛГОРИТМЫ ПРАКТИЧЕСКОЙ ЖИЗНИ (ПРИМЕРЫ) 3. Чтобы сделать новый мощный прорыв в развитии медицины, необходимы не только новые медицинские знания, но и новые способы описания знаний. 4. Визуализация медицинских знаний и разработка новых методов описания знаний представляют собой самостоятельное направление научных исследований в области медицины. 5. Язык ДРАКОН – новое средство, пригодное для описания структуры медицинской деятельности и медицинских алгоритмов. Оно позволяет выявить и обнажить логические инварианты деятельности, сделать их явными, зримыми, доступными для всех врачей и студентов-медиков. 6. Язык ДРАКОН кардинальным образом облегчает труд формализации процедурных медицинских знаний и повышает его производительность. 7. Широкомасштабное внедрение языка ДРАКОН для описания процедурных медицинских знаний позволит сделать эти знания намного более ясными, понятными, доходчивыми. Не исключено, что продуманное использование языка ДРАКОН в перспективе позволит сократить сроки медицинского образования. И получить другие важные преимущества. Глава 18 АЛГОРИТМЫ В ПРОМЫШЛЕННОСТИ §1. ДВА ТИПА АЛГОРИТМОВ Современная промышленность – царство алгоритмов. Эти алгоритмы можно разделить на две части: автоматически с помощью компьютеров, • выполняемые вручную или с помощью различных механизмов. • выполняемые (Имеются в виду алгоритмы, описывающие структуру человеческой деятельности и технологических процессов). §2. АЛГОРИТМ И ДЕЯТЕЛЬНОСТЬ. В ЧЕМ СХОДСТВО И В ЧЕМ РАЗЛИЧИЕ? Математические алгоритмы и человеческая деятельность не разделены китайской стеной. У них есть нечто общее. Но что именно? Не претендуя на строгость (в данном случае она не нужна), можно сделать два замечания. Алгоритм Это последовательность информационQ ных действий, ведущая к поставленной цели Деятельность Это последовательность информационQ ных и физических действий, ведущая к поставленной цели Таким образом, отличие состоит в том, что в алгоритме физические действия являются запрещенными, а в деятельности – разрешенными. Примерами физических действий служат: транспортировка груза, нагрев детали, пуск ракеты, зашивание раны и т. д. 278 ЧАСТЬ 3. АЛГОРИТМЫ ПРАКТИЧЕСКОЙ ЖИЗНИ (ПРИМЕРЫ) §3. КЛАССИЧЕСКИЕ АЛГОРИТМЫ Сначала рассмотрим классические (математические) алгоритмы, затем – неклассические алгоритмы, описывающие структуру деятельности. На рис. 90 и 91 изображены математические алгоритмы. Они вычисляют факториал. На рис. 90 факториал вычисляется с помощью цикла ДО. На рис. 91 – с помощью цикла ДЛЯ. На рис. 140 представлен алгоритм «Управление светофором». В данном случае результатом алгоритма являются не числа, а процесс управления уличным движением. Если светофор установлен на бойком месте, он должен работать круглосуточно, не останавливаясь ни на секунду. Поэтому управляющий светофором компьютер и «живущий» в нем алгоритм работают непрерывно, безостановочно. На рис. 148 показан еще один алгоритм, который «замурован» в крохотном компьютере, спрятанном в электронных ручных часах. Он вычисляет время в часах, минутах и секундах. Этот алгоритм постоянно обновляет результаты вычислений, чтобы часы не отстали от жизни. §4. НЕКЛАССИЧЕСКИЕ АЛГОРИТМЫ Перейдем к анализу неклассических алгоритмов. На рис. 172 изображена проверка самолета. При такой проверке часть операций выполняется автоматически, часть – вручную. Является ли проверка самолета алгоритмом? С классической точки зрения – нет. Потому что кое-что делается вручную. Примером таких операций на рис. 172 являются ремонтные работы: двигателей; • ремонт ремонт • ремонт крыльев; • ремонт шасси системы; • ремонт топливной бортовых систем; • ремонт системы пожаротушения; • ремонт электрооборудования. • противоречие. С одной стороны, необходимо • Возникает иметь целостную картину проверки самолета, включающую все операции: и автоматические, и ручные. другой стороны, программисты обычно исключают из • Срассмотрения ручные операции. Потому что компьютер не участвует в их реализации. В итоге алгоритмисты и программисты делают себя «полуслепыми», отказываясь анализировать ручные операции, без которых работа промышленности становится невозможной. ГЛАВА 18. АЛГОРИТМЫ В ПРОМЫШЛЕННОСТИ 279 Почему алгоритмисты допускают эту ошибку? Потому что они привыкли иметь дело только с классическими алгоритмами. Как разрешить противоречие? Надо расширить понятие алгоритма, чтобы оно охватывало не только компьютерные операции, но и человеческую деятельность. Еще один пример. На рис. 174 изображена технология изготовления сиропа и маринада. Здесь показаны не информационные, а физические действия. Их выполняет не компьютер, а различные технологические установки и агрегаты: мешкоопрокидыватель, вибросито, магнитная ловушка, бункер-накопитель и т. д. Технология, показанная на рис. 174, спроектирована, реализована и эксплуатируется человеком. Следовательно, она является человеческой деятельностью. С точки зрения математики, схема на рис. 174 не является алгоритмом, ибо она не удовлетворяет классическому определению алгоритма [1]. Чтобы избежать путаницы, мы называем подобные схемы неклассическими алгоритмами. §5. ИЗГОТОВЛЕНИЕ ФРУКТОВЫХ КОНСЕРВОВ На рис. 174 представлен технологический процесс изготовления фруктовых консервов из косточковых плодов. Эргономичная графика обладает серьезными преимуществами по сравнению с текстовым описанием технологических процессов. Она позволяет за короткое время (буквально за считанные минуты) составить подробное представление о технологических операциях и последовательности их выполнения. Реальный технологический процесс может быть очень сложным. Обычно его описывают как головной процесс, содержащий большое число вставок. Например, в процессе на рис. 173 показана вставка «Изготовление сиропа и маринада», раскрытая на рис. 174. §6. ДРАКОН И ТЕХНОЛОГИЧЕСКИЕ ПРОЦЕССЫ Дракон-схемы технологических процессов могут найти применение в следующих случаях: создание наглядных плакатов, дающих целостное представление о процессе во всей его многосложности и используемых в качестве демонстрационных материалов. При этом в иконе «комментарий» могут помещаться чертежи, фотографии, схемы установок, станков, сетей трубопроводов и другого оборудования; выпуск технологической документации; проектирование и моделирование технологических процессов; создание визуальной базы данных о техпроцессах; • • • • 280 ЧАСТЬ 3. АЛГОРИТМЫ ПРАКТИЧЕСКОЙ ЖИЗНИ (ПРИМЕРЫ) ГЛАВА 18. АЛГОРИТМЫ В ПРОМЫШЛЕННОСТИ 281 282 ЧАСТЬ 3. АЛГОРИТМЫ ПРАКТИЧЕСКОЙ ЖИЗНИ (ПРИМЕРЫ) ГЛАВА 18. АЛГОРИТМЫ В ПРОМЫШЛЕННОСТИ 283 284 ЧАСТЬ 3. АЛГОРИТМЫ ПРАКТИЧЕСКОЙ ЖИЗНИ (ПРИМЕРЫ) ГЛАВА 18. АЛГОРИТМЫ В ПРОМЫШЛЕННОСТИ 285 экспертных систем для проектирования технологических • создание процессов, а также тренажеров для эксплуатационников; альбомов и каталогов технологических процессов для • изготовление обучения или рекламы. Можно рекомендовать формат бумажной страницы альбома А3, имея в виду, что оригинал-макеты альбомов готовятся на принтере формата А3. §7.ВЫВОДЫ 1. Человеческие знания делятся на процедурные и декларативные. 2. Процедурные знания тесно связаны с человеческой деятельностью и трудовыми процессами. Они выявляют, закрепляют в сознании и объективируют структуру деятельности. 3. В настоящее время отсутствуют эффективные и эргономичные способы описания человеческой деятельности (работы). Язык ДРАКОН позволяет устранить этот пробел. 4. Процедурные знания охватывают классические и неклассические алгоритмы. 5. Язык ДРАКОН позволяет единообразно, стандартным способом описать оба типа алгоритмов (классические и неклассические). 6. При проектировании сложных промышленных объектов желательно и даже обязательно иметь целостный взгляд на проблему, показывающий все ее аспекты. На этом пути возникает трудность. В силу сложившихся привычек программисты обычно делят проблему на две части: алгоритм, который можно превратить в компьютерную программу; операции, выполняемые вручную или с помощью механизмов. Последние невозможно превратить в программу. Поэтому многие программисты считают, что эта часть дела их не касается. 7. В результате у проектировщиков сложных промышленных объектов нередко возникает не целостный взгляд на проблему, а кусочнорваный, что порождает неоптимальные или ошибочные решения. 8. Одной из причин этого недостатка является отсутствие языковых средств, помогающих разработчикам вырабатывать целостное видение проблемы. 9. Язык ДРАКОН позволяет устранить этот недостаток. Он дает разработчикам надежные средства, позволяющие изображать не кусочно-рваную, а целостную картину любых промышленных (и не только промышленных) алгоритмических процессов. • • Глава 19 АЛГОРИТМЫ В ТОРГОВЛЕ §1. РАЗНООБРАЗИЕ ТОРГОВЫХ АЛГОРИТМОВ В торговле используется огромное количество разнообразных алгоритмов. Примерами являются алгоритмы оптовой и розничной торговли для частных и бюджетных предприятий, бухгалтерские расчеты, управление складскими операциями. Сюда же можно отнести обработку платежных поручений, расчет зарплаты, управление персоналом и многое другое. Все эти операции можно изобразить на языке ДРАКОН. ДРАКОН представляет процедурные аспекты торговой деятельности в наиболее ясной и понятной форме. Понятной всем участникам торгового процесса – от рядового бухгалтера до руководителя торговой фирмы. §2. ПРОДАЖА ДЕТСКИХ ИГРУШЕК На рис. 175 представлен алгоритм «Продажа детских игрушек». Суть дела поясним на примере. Оптовый покупатель желает закупить 1000 детских игрушек, например, куклу Барби. Возможны три ситуации: на складе продавца 5000 кукол Барби. В этом случае заявка оптовика будет удовлетворена полностью; на складе, увы, всего лишь 90 кукол Барби. Тут возможны варианты. Оптовик либо берет то, что есть (покупает 90 кукол), либо отказывается от товара; на складе нет ни одной куклы. Стало быть, сделка сорвалась. • • • Силуэт состоит их четырех веток: оформление заказа; выставление счета; отмена заказа на игрушки; завершение. • • • • 287 ГЛАВА 19. АЛГОРИТМЫ В ТОРГОВЛЕ Первая ветка (оформление заказа) полностью отражает описанные выше ситуации. Она имеет три иконы адрес: счета; • выставление отмена заказа • завершение. на игрушки; • Вспомним рекомендацию из §5 главы 6: Желательно, чтобы порядок расположения икон «адрес» в многоадресной ветке совпадал с пространственным расположением веток, на которые ссылаются эти адреса. На рис. 175 эта рекомендация выполнена. Действительно, порядок расположения икон адрес в первой ветке совпадает с расположением веток, на которые ссылаются эти адреса. Вторая ветка (выставление счета) содержит действия: сколько стоит заказ; • рассчитать, выставить счет покупателю; • покупатель согласен оплатить счет?; • и т. д. • Третья говорит об отмене заказа на игрушки. §3. ПРОДАЖА АВИАБИЛЕТОВ В следующем алгоритме речь идет о продаже авиабилетов (рис. 176). Данный алгоритм отчасти похож на предыдущий. Отличие в том, что продажа игрушек описана упрощенно (популярно), а продажа авиабилетов изложена профессиональным языком. Эта разница хорошо видна в таблице. Продажа игрушек Дать заявку на склад на нужное число игрушек Нужное число игрушек есть на складе? На складе есть хоть сколько-то игрушек? Сообщить клиенту, что игрушек очень мало Клиент согласен купить то, что есть? Отменить заказ на игрушки Продажа авиабилетов Дать заявку на нужное число билетов Нужное число билетов зарезервировано? Число билетов > 0? Сообщить клиенту о частичном выполнении заявки Клиент согласен на частичное выполнение заявки? Отменить резервирование билетов 288 ЧАСТЬ 3. АЛГОРИТМЫ ПРАКТИЧЕСКОЙ ЖИЗНИ (ПРИМЕРЫ) ГЛАВА 19. АЛГОРИТМЫ В ТОРГОВЛЕ 289 290 ЧАСТЬ 3. АЛГОРИТМЫ ПРАКТИЧЕСКОЙ ЖИЗНИ (ПРИМЕРЫ) ГЛАВА 19. АЛГОРИТМЫ В ТОРГОВЛЕ 291 292 ЧАСТЬ 3. АЛГОРИТМЫ ПРАКТИЧЕСКОЙ ЖИЗНИ (ПРИМЕРЫ) §4. ПОКУПКА ТОВАРОВ ПО БЕЗНАЛИЧНОМУ РАСЧЕТУ Рассмотрим покупку товаров по безналичному расчету (рис. 177). Силуэт состоит из четырех веток : торговой операции; • выбор покупка с предоплатой; • покупка товаров товаров • завершение. без предоплаты; • Первая ветка выбирает один из двух видов торговых операций. Вторая ветка описывает покупку товаров с предоплатой. Третья – покупку без предоплаты. Мы показали наиболее простые примеры. В реальной торговой практике встречаются очень сложные и чрезвычайно разнообразные алгоритмы. §5.ВЫВОДЫ 1. Торговля, как человеческая деятельность, требует высокого уровня взаимопонимания между заказчиками и разработчиками программных комплексов, обслуживающих торговые операции. 2. Между тем должное взаимопонимание является труднодостижимой целью. 3. Недостаточное взаимопонимание значительно снижает производительность труда и нередко влечет за собой упущенную выгоду. 4. Причина состоит в том, что сегодня отсутствуют наглядные языковые средства: пригодные для эффективного описания алгоритмов, используемых в торговой деятельности, способные обеспечить быстрое взаимопонимание между заказчиками и разработчиками программных комплексов торгового назначения. 5. Отсутствие удобного языка для описания торговых алгоритмов является болевой точкой торговли. 6. Нынешний «торговый язык» отстал от жизни и превратился в тормоз развития отрасли. 7. Язык ДРАКОН позволяет устранить недостаток и добиться значительного повышения производительности труда в этой области. • • Глава 20 АЛГОРИТМЫ БУХГАЛТЕРСКОГО УЧЕТА1 §1. ПРОБЛЕМА НЕПОНИМАНИЯ В СИСТЕМАХ БУХГАЛТЕРСКОГО УЧЕТА В современные системы бухгалтерского учета закладывается все больше сложных правил анализа и обработки информации. Эти правила очень трудно объяснить бухгалтеру, потому что они представляют собой длинные цепочки анализа и принятия решения. При внедрении бухгалтерских программ очень часто возникает проблема НЕПОНИМАНИЯ. Если бухгалтер не понимает, как программа формирует проводки, у него возникает недоверие. Недоверие порождает неумение и нежелание использовать программу. §2. ВНЕДРЕНИЕ ПРОГРАММ БУХГАЛТЕРСКОГО УЧЕТА Наша фирма «Инженеры информации» занимается внедрением программы 1С-Бухгалтерия. Программа поставляется в типовой конфигурации, которая содержит наиболее распространенные в бухгалтерском учете документы. Эти документы при заполнении формируют по заданным правилам бухгалтерские проводки. Проводки формируются в разных вариантах. Результат проводки зависит от остатков и оборотов бухгалтерских счетов в разные моменты времени. Трудность в том, что схема учета, принятая на предприятии, часто отличается от схемы учета, заложенной в стандартной конфигурации. Задача нашей фирмы – объяснить бухгалтеру схему учета, принятую в типовой конфигурации программы «1С-Бухгалтерия». Бухгалтер должен увидеть отличия своей схемы учета от типовой конфигурации. И принять решение о доработке типовой конфигурации. 1 Эта глава написана А.Н. Шилиным. 294 ЧАСТЬ 3. АЛГОРИТМЫ ПРАКТИЧЕСКОЙ ЖИЗНИ (ПРИМЕРЫ) §3. КАК МЫ ИСПОЛЬЗОВАЛИ ЯЗЫК ДРАКОН Мы долго искали метод доступного и наглядного изображения правил, заложенных в программу бухгалтерского учета. Несколько лет назад нам встретилась книга «В. Д. Паронджанов. Как улучшить работу ума. Новые средства для образного представления знаний, развития интеллекта и взаимопонимания. М.: Радио и связь, 1998. – 352 с.». В ней описан язык визуального отображения информации ДРАКОН. Он был разработан при создании вычислительной системы космического корабля «Буран» и сейчас применяется при проектировании ракетной техники. и описания языка ДРАКОН напоминают блок• Методы схемы. Но в нем есть то, что отсутствует в блок-схемах. язык ДРАКОН заложена система правил, которые • Вулучшают восприятие информации. Оформление блоксхем по этим правилам делает их понятным любому человеку. Раньше (до знакомства с ДРАКОНом) мы были вынуждены описывать работу документов в текстовом виде с использованием текстовых алгоритмических конструкций. См. пример на рис. 178. §4. ДРАКОН-СХЕМА, ОПИСЫВАЮЩАЯ РАБОТУ ДОКУМЕНТА «ПРИХОДНЫЙ КАССОВЫЙ ОРДЕР» ДРАКОН позволил перейти от текста к графике. Пример дракон-схемы показан на рис. 179. Легко видеть, что содержание текста (рис. 178) и схемы (рис. 179) полностью совпадает. Основные предложения в тексте и надписи на рисунке не отличаются. Исчезли лишь ключевые слова: Если, Тогда, Конец Если и т.д. Вместо них появились линии, отражающие ход управления программой. Сравнивая две формы представления алгоритма, легко убедиться, что дракон-схема намного удобнее. Благодаря схеме изложение мысли приобрело наглядность и доходчивость, свойственные графике. Отметим важную особенность. В документе на рис. 178 обработка счета 62 (взаиморасчеты с покупателями) слишком объемна. Если показать ее в тексте полностью, из-за большого объема будет потеряна ясность и наглядность. Поэтому обработка счета 62 выделена в отдельную процедуру, которая на рис. 178 указана одной фразой «Обработка счета 62». В текстовой форме процедура приведена на рис. 180. Соответствующая ей дракон-схема показана на рис. 181. ГЛАВА 20. АЛГОРИТМЫ БУХГАЛТЕРСКОГО УЧЕТА 295 §5. СРАВНЕНИЕ ТЕКСТА И ДРАКОН-СХЕМЫ Ясно, что схема на рис. 181 намного наглядней, чем текст. Почему? Правила языка ДРАКОН заставляют разбивать графическую информацию на отдельные обособленные блоки. Двумерное пространство графики позволяет наглядно расположить эти блоки и показать связь между ними. тексте мы используем практически одно измерение – • Ввертикаль. А в дракон-схеме информация эффективно • разворачивается в двух измерениях – вертикальном и горизонтальном. Это очень важно, потому что система «глаз–мозг» лучше воспринимает панорамную информацию. §6. ДРАКОН РЕШАЕТ ПРОБЛЕМУ ВЗАИМОПОНИМАНИЯ Когда мы только начинали использовать в своей работе дракон-схемы, то опасались, что бухгалтеры нас не поймут, настраивались на долгие объяснения. К нашему удивлению, вопросов о внутреннем устройстве драконсхем практически не было. Многие бухгалтеры, глядя на дракон-схемы, сразу же выделяли существенные для себя проблемы. И тут же начинали объяснять, что их не устраивает. И какие изменения следует внести, чтобы учесть особенности конкретного производства. Очень быстро устанавливалась атмосфера взаимного понимания решаемой задачи. специалист, занимающийся автоматизацией, зна• Любой ет, как трудно понять: что именно хочет заказчик. языка ДРАКОН дало нам возможность пре• Применение одолеть непонимание и недоверие бухгалтеров при внедрении программ «1С». Кроме того, мы используем язык ДРАКОН для проектирования задач бухгалтерского учета. То есть, применяем дракон-схемы, записывая новую информацию при постановке задач «с нуля». Подведем итоги. После нескольких лет проблем и трудностей, которые мы испытывали при обучении бухгалтеров и внедрении бухгалтерских программ, нам удалось, наконец, найти нужную методику работы. Теперь в наших руках есть набор правил и процедур языка ДРАКОН, с помощью которых можно ясно и полно описать нашу работу. Самое главное, мы добились, что бухгалтер стал понимать суть работы программы «1С». Язык ДРАКОН решил для нас с заказчиком важнейшую проблему взаимопонимания. 296 ЧАСТЬ 3. АЛГОРИТМЫ ПРАКТИЧЕСКОЙ ЖИЗНИ (ПРИМЕРЫ) ГЛАВА 20. АЛГОРИТМЫ БУХГАЛТЕРСКОГО УЧЕТА 297 298 ЧАСТЬ 3. АЛГОРИТМЫ ПРАКТИЧЕСКОЙ ЖИЗНИ (ПРИМЕРЫ) ГЛАВА 20. АЛГОРИТМЫ БУХГАЛТЕРСКОГО УЧЕТА 299 300 ЧАСТЬ 3. АЛГОРИТМЫ ПРАКТИЧЕСКОЙ ЖИЗНИ (ПРИМЕРЫ) §7. ВЫВОДЫ 1. В современных системах бухгалтерского учета применяются сложные правила анализа и обработки информации. 2. Эти правила зачастую трудно объяснить бухгалтеру, потому что они представляют собой длинные цепочки анализа и принятия решения. При внедрении бухгалтерских программ нередко возникает проблема непонимания. 3. Если бухгалтер не понимает, как программа формирует проводки, у него возникает недоверие. Недоверие порождает неумение и нежелание использовать программу. 4. Язык ДРАКОН позволяет решить данную проблему. 5. В язык заложена система правил, которые улучшают восприятие информации. Оформление схем по этим правилам делает их понятным любому человеку. 6. Благодаря дракон-схемам изложение мысли приобрело наглядность и доходчивость, свойственные графике. 7. В тексте мы используем практически одно измерение – вертикаль. А в дракон-схеме информация эффективно разворачивается в двух измерениях – вертикальном и горизонтальном. Это важно, потому что система «глаз–мозг» лучше воспринимает панорамную информацию. Глава 21 АЛГОРИТМЫ В АТОМНОЙ ЭНЕРГЕТИКЕ §1. АЛГОРИТМЫ ДЛЯ ОПИСАНИЯ СЛОЖНЫХ ПРОЦЕССОВ За последние сто лет сложность труда скачкообразно изменилась. Труд стал во много раз сложнее, разнообразнее, многограннее. Чтобы подготовка к сложному труду была эффективной, во многих (хотя и не во всех) случаях необходимо иметь описание предстоящей работы. Такое описание должно быть очень хорошим. Это значит – доступным, удобным, легким для понимания. Существуют ли такие описания? Нет, не существуют! Сделаем оговорку. Описания, конечно, есть, и их довольно много. Но они, как правило, имеют низкое качество. Имеющиеся описания изложены трудным, непонятным (текстовым) языком. Они непригодны для эффективного обучения, так как требуют слишком большого времени для понимания. Это значит, что производительность понимания слишком мала. До последнего времени этой проблеме (проблеме хороших описаний) не уделялось должного внимания. Следствием подобного пренебрежения являются значительные экономические и интеллектуальные потери. В связи с этим можно сделать несколько замечаний. Существующие способы описания сложных процессов отстали от жизни и не удовлетворяют современным требованиям. Во многих случаях сложные процессы можно рассматривать как алгоритмы. Чтобы организовать производство хороших описаний для сложных процессов, нужно иметь эргономичный алгоритмический язык. Язык, доступный для широкого круга специалистов, не знакомых с алгоритмами. • • • 302 ЧАСТЬ 3. АЛГОРИТМЫ ПРАКТИЧЕСКОЙ ЖИЗНИ (ПРИМЕРЫ) качестве такого языка целесообразно использовать язык ДРАКОН. • ВШирокое применение дракон-схем для описания структуры слож• ной деятельности и наукоемких процессов позволит заметно повысить продуктивность умственного труда. §2. ЧРЕЗВЫЧАЙНО СЛОЖНЫЕ АЛГОРИТМЫ Иногда высказывают мнение, что ДРАКОН хорошо описывает простые задачи и непригоден для изображения сложных проблем. Это неверно. ДРАКОН специально сконструирован, чтобы облегчить описание и решение широкого спектра задач, включая самые сложные. Более того, чем сложнее проблема, тем больше выигрыш от использования языка ДРАКОН. Одной из подобных задач является проектирование ядерного реактора. Ясно, что это грандиозная, запредельная по сложности проблема. Если изобразить сложную проблему на языке ДРАКОН, наблюдается следующий неожиданный эффект. Хорошо знакомая задача на глазах преображается и предстает перед нашим изумленным взором в совершенно новом свете. Она резко упрощается и становится ясной, четкой, обозримой. Конечно, все это не надо понимать слишком буквально. Сложность есть сложность, и полностью избавиться от нее невозможно. Тем не менее, одна из основных идей когнитивной эргономики в том и заключается, чтобы – в пределах возможного – устранить неоправданную сложность. И представить громоздкую и трудную задачу в максимально удобной и наглядной форме. По принципу: «Посмотрел – и сразу понял!». «Взглянул – и сразу стало ясно!». §3. ДРАКОН И СЛОЖНОСТЬ Язык ДРАКОН способен упростить и сделать наглядной сложнейшую задачу проектирования ядерного реактора. Прежде всего, необходимо получить целостный взгляд на проблему. Для этого служит специальная фигура – шапка. Она задает смысловой костяк алгоритма. Изюминка в том, что шапка делает человеку ценные подсказки, облегчающие работу ума. Как известно, шапка (рис. 182) позволяет получить ответ на три «царских» (наиболее важных) вопроса: 1. Как называется задача? 2. Из скольких частей она состоит? 3. Как называется каждая часть? ГЛАВА 21. АЛГОРИТМЫ В АТОМНОЙ ЭНЕРГЕТИКЕ 303 Вот ответы для рис. 183. Как называется задача? (Читаем заголовок алгоритма). Проектирование ядерного реактора. Из скольких частей она состоит? (Считаем иконы «имя ветки»). Из шести. Как называется каждая часть? (Читаем текст в иконах «имя ветки»). выбор схемно-конструктивных решений; расчетный анализ стационарных режимов; расчетный анализ систем безопасности; расчетный анализ аварий; расчетный анализ элементов реактора; расчет радиационной защиты. Сколько времени нужно, чтобы впитать эту информацию? Минуту? Две? Три? Пять? Шапка дает общее представление, без деталей. Благодаря шапке читатель получает ориентировку о проблеме практически мгновенно. Причем, что очень важно, время ориентировки почти не зависит от сложности задачи и составляет считанные минуты. Из шапки мы узнали заголовки веток. После этого, как всегда, приступаем к двум стандартным операциям: изучению содержания веток, анализу их взаимодействия. Чтобы выполнить эти операции и тщательно изучить алгоритм на рис. 183, читателю вряд ли потребуется больше, чем пятнадцать–двадцать минут. (Речь, разумеется, идет о специалистах или студентах, а не о человеке с улицы). • • • • • • • • • • • 304 ЧАСТЬ 3. АЛГОРИТМЫ ПРАКТИЧЕСКОЙ ЖИЗНИ (ПРИМЕРЫ) ГЛАВА 21. АЛГОРИТМЫ В АТОМНОЙ ЭНЕРГЕТИКЕ 305 306 ЧАСТЬ 3. АЛГОРИТМЫ ПРАКТИЧЕСКОЙ ЖИЗНИ (ПРИМЕРЫ) ГЛАВА 21. АЛГОРИТМЫ В АТОМНОЙ ЭНЕРГЕТИКЕ 307 308 ЧАСТЬ 3. АЛГОРИТМЫ ПРАКТИЧЕСКОЙ ЖИЗНИ (ПРИМЕРЫ) ГЛАВА 21. АЛГОРИТМЫ В АТОМНОЙ ЭНЕРГЕТИКЕ 309 310 ЧАСТЬ 3. АЛГОРИТМЫ ПРАКТИЧЕСКОЙ ЖИЗНИ (ПРИМЕРЫ) §4. ВАЖНАЯ РОЛЬ ВСТАВОК Алгоритм на рис. 183 содержит большое число вставок (процедур). Например, во второй ветке есть вставка «Расчет стационарных параметров 1-го контура ядерного реактора». А в четвертой – вставка «Расчет реактивностных аварий ядерного реактора». Эти вставки раскрыты на рис. 184 и 185. Рис. 183–185 убедительно демонстрируют, что любой, сколь угодно сложный алгоритм можно изобразить с помощью простого и единообразного приема – декомпозиции. Декомпозиция алгоритма – разбиение алгоритма на несколько уровней иерархии (которые похожи на этажи в многоэтажной пирамиде). Поскольку мы ведем речь об эргономичных (наглядных) алгоритмах, уместно использовать термин эргономичная декомпозиция алгоритма. Верхний уровень иерархии (верхний этаж) показан на рис. 183. Его можно рассматривать как вершину гигантской пирамиды, откуда открывается взгляд на проблему с высоты птичьего полета. Там же перечисляются все алгоритмы второго уровня, которые в нашей воображаемой пирамиде расположены на один шаг ближе к земле. Рассматривая алгоритмы второго уровня (примеры которых показаны на рис. 184 и 185), легко заметить, что в них указываются алгоритмы третьего уровня, которые находятся еще ближе «к земле». То есть дают более детальное знакомство с проблемой. Постепенно спускаясь с вершины пирамиды к ее основанию, мы наблюдаем последовательное разбиение (декомпозицию) сложной проблемы на все более мелкие и подробные детали. В конечном итоге (когда мы спустимся «на уровень земли») эти детали дадут исчерпывающее и полное описание нашего алгоритма. При необходимости его можно дополнить справочником, содержащим определения всех использованных понятий. Важным достоинством является тот факт, что язык ДРАКОН не зависит от уровня иерархии. Он используется и на самом верху, и у основания пирамиды. Благодаря этому достигается резкое упрощение алгоритмов любой сложности. В итоге особо сложная («уму непостижимая») проблема превращается в относительно простую, ясную и наглядную. До сих пор практически отсутствовали эффективные эргономичные изобразительные средства, позволяющие одновременно решать две задачи: когнитивную формализацию и визуализацию больших алгоритмов. По этой причине целостный взгляд на большой алгоритм, как на детерминированный многоступенчатый процесс, имеющий начало и конец, по сути дела был недоступен широкому кругу специалистов и учащихся. ГЛАВА 21. АЛГОРИТМЫ В АТОМНОЙ ЭНЕРГЕТИКЕ 311 Раньше целостный взгляд на проблему оставался достоянием узкой группы элитных специалистов, которые «все держат в голове». Из-за этого остальным участникам сложного проекта вынужденно отводилась незавидная роль винтиков творческого коллектива, которые должны знать свой «шесток». И которым «не положено» иметь целостное панорамное видение процесса во всей его многосложности. Язык ДРАКОН позволяет сделать важный шаг к устранению этого недостатка. Он дает возможность более эффективно организовать совместную работу участников сложного проекта. И более разумно использовать интеллектуальные ресурсы их коллективного мозга. Хорошая (эргономичная) графика упорядочивает сложный текст и структурирует его. Она разбивает огромную словесную глыбу на маленькие порции, которые можно проглотить легко и с удовольствием. В результате читатель получает долгожданную помощь, так как алгоритм становится более легким для понимания. §5.ВЫВОДЫ 1. Чтобы обеспечить эффективное выполнение сложной наукоемкой работы, необходимо иметь ее описание. 2. Существующие способы описания особо сложных трудовых процессов отстали от жизни и не удовлетворяют современным требованиям. 3. Чтобы организовать производство хороших описаний для особо сложных трудовых процессов, нужно иметь специальный алгоритмический язык. Язык, доступный для широкого круга специалистов, не знакомых с алгоритмами. 4. Можно предположить, что широкое применение дракон-схем для описания структуры особо сложной деятельности и наукоемких трудовых процессов позволит значительно улучшить работу ума и повысить эффективность развития общества. В этой главе описан метод эргономичной декомпозиции, позволяющий строить сложные алгоритмы. Наряду с ним можно использовать еще один метод – метод многостраничных силуэтов, который будет описан в главе 30. Глава 22 АЛГОРИТМЫ В БИОЛОГИИ §1. РУКОТВОРНЫЕ И НЕРУКОТВОРНЫЕ АЛГОРИТМЫ До сих пор мы рассуждали об алгоритмах, которые придуманы человеком. Но существуют и иные процессы, к созданию которых человек не имеет никакого отношения. Имеются в виду нерукотворные алгоритмы, созданные природой в ходе естественного развития. В результате миллиардов лет эволюции на Земле образовалась жизнь. И связанные с нею естественные алгоритмы. Планета Земля – царство жизни. В каждом живом организме происходят процессы невообразимой сложности, необходимые для поддержания жизни. Рассматривая жизнь с точки зрения молекулярной биологии, генетики и других биологических наук, мы сталкиваемся со сложнейшими процессами, которые можно и нужно назвать алгоритмами. Алгоритмы существуют всюду, где есть жизнь. Они ухитряются жить в каждом живом существе, в каждой живой клетке – от холерного вибриона до незабудки и слона. Какова роль человека в естественных алгоритмических процессах? Она очевидна. Человек не проектирует, не творит и не создает эти алгоритмы. Он всего лишь изучает их. Человечество заинтересовано в том, чтобы биологические науки продвигались вперед быстрыми темпами. От чего зависит скорость познания естественных алгоритмов? В частности, от формы представления алгоритмических процессов. ГЛАВА 22. АЛГОРИТМЫ В БИОЛОГИИ 313 К сожалению, представители биологических наук не владеют эффективными способами записи естественных алгоритмов. Нынешний биологический язык отстал от жизни и превратился в тормоз развития науки. §2. ВИЗУАЛИЗАЦИЯ БИОЛОГИЧЕСКИХ АЛГОРИТМОВ Чем глубже человеческий разум проникает в тайны живой материи, тем яснее становится, что живые существа во многих случаях ведут себя как информационные биомашины, перерабатывающие информацию с помощью биоалгоритмов. Опыт показывает, что биологические алгоритмы очень похожи на самые обычные алгоритмы, с которыми мы постоянно сталкиваемся в технике. А раз так, язык ДРАКОН может стать удобным средством для выражения и накопления знаний об алгоритмических процессах, протекающих в живых организмах. В качестве примера рассмотрим алгоритм работы человеческого сердца. Отрывок из школьного учебника «Наше сердце постоянно в работе… Оно работает непрерывно 70– 80 лет и более. В чем секрет его неутомимости?... Во многом это объясняется особенностями работы сердца. Оно последовательно сокращается и расслабляется с короткими промежутками для отдыха. В одном сердечном цикле можно выделить три фазы. Во время первой фазы, которая у взрослого человека длится 0,1 с, сокращаются предсердия, а желудочки находятся в расслабленном состоянии. За ней следует вторая фаза (она более продолжительная – 0,3 с): желудочки сокращаются, а предсердия расслаблены. После этого наступает третья, заключительная фаза – пауза, во время которой происходит общее расслабление сердца. Ее продолжительность 0,4 с. Весь сердечный цикл занимает 0,8 с. Вы видите, что в течение одного сердечного цикла предсердия тратят на работу 12,5% времени сердечного цикла, а желудочки 37,5%. Остальное время, а это 50%, сердце отдыхает. В этом секрет долголетия сердца, удивительной его работоспособности. Небольшие промежутки отдыха, следующие за каждым сокращением, дают возможность сердечной мышце отдохнуть и восстановить силы» [1]. Работа сердца очень сложна. Поэтому мы выбрали лишь малую часть работы нашего главного насоса. И изобразили ее в виде упрощенного алгоритма (рис. 186). 314 ЧАСТЬ 3. АЛГОРИТМЫ ПРАКТИЧЕСКОЙ ЖИЗНИ (ПРИМЕРЫ) ГЛАВА 22. АЛГОРИТМЫ В БИОЛОГИИ 315 §3. КАК РАЗМНОЖАЮТСЯ ЖАБЫ Рассмотрим еще один пример. Для начала приведем цитату из известной биологической книги, описывающую алгоритм размножения жаб. «Рассмотрим изменения, происходящие в организме жабы в сезон размножения. Глаза жабы воспринимают свет и передают эту информацию в мозг, который определяет, что продолжительность светового дня увеличивается. Гипоталамус направляет в гипофиз соответствующие рилизингфакторы. Гипофиз начинает выделять в кровь различные гормоны… Когда семенники и яичники «обнаруживают» их присутствие в крови, они начинают увеличиваться в размерах, продуцировать гаметы, а также выделять собственные гормоны и среди них – половые: тестостерон и эстроген. Реагируя на половые гормоны, мозг посылает нервные импульсы к мышцам – животное начинает поиск места для размножения и брачного партнера. Так, благодаря сложному взаимодействию органов чувств, нервов, мозга, мышц и эндокринных желез животное адекватно реагирует на смену сезона – наступление весны» [2]. Описание этого алгоритма на языке ДРАКОН показано на рис. 187. Чтобы не утомлять читателя громоздкими биологическими терминами, мы упростили алгоритм. А в комментариях дали необходимые пояснения. Следует подчеркнуть, что реальные биологические алгоритмы исключительно сложны. Традиционная для биологической литературы текстовая форма представления алгоритмических знаний вносит неоправданные трудности для читателей и является устаревшей. §4. КИШЕЧНАЯ ПАЛОЧКА И ФАГ ЛЯМБДА Рассмотрим более сложный пример биологического алгоритма. Бактериофаг (сокращенно фаг) – это вирус, который пожирает бактерии. Таких вирусов очень много. Один из них, фаг λ (фаг лямбда), при некоторых условиях уничтожает бактерии, которые живут в кишечнике. Эти бактерии называются «кишечная палочка». Фаг и бактерия похожи на карлика и великана. Фаг крохотный, а бактерия громадная. И, тем не менее, победа всегда достается фагу. Фаг похож на клизму с острым концом. Этим кинжалом он легко протыкает стенку бедной бактерии. В шаре «клизмы» находится главное оружие фага – его генетический код. Через роковой прокол, этот 316 ЧАСТЬ 3. АЛГОРИТМЫ ПРАКТИЧЕСКОЙ ЖИЗНИ (ПРИМЕРЫ) ГЛАВА 22. АЛГОРИТМЫ В БИОЛОГИИ 317 318 ЧАСТЬ 3. АЛГОРИТМЫ ПРАКТИЧЕСКОЙ ЖИЗНИ (ПРИМЕРЫ) код, подобно диверсанту со взрывчаткой, проникает внутрь бактерии и «взрывает» ее. Рассмотрим эту историю подробнее. §5. ДВА СПОСОБА ВЗАИМОДЕЙСТВИЯ ФАГА И БАКТЕРИИ В начале фаг прокалывает оболочку бактерии (рис. 188). Затем генетический код фага через образовавшуюся дырку проскальзывает внутрь бактерии (рис. 189). Дальнейшие события в бактериальной клетке могут развиваться двумя путями. §6. РАЗМНОЖЕНИЕ ФАГОВ И ГИБЕЛЬ БАКТЕРИИ В первом случае внутри клетки происходит интенсивное размножение фагов. Этот процесс идет очень быстро. Примерно через 45 минут происходит гибель бактерии. Внутри бактерии скапливается огромное число фаговых частиц. Эти частицы в буквальном смысле разрывают бактериальную клетку. Из лопнувшей бактерии высвобождаются около 100 фагов (рис. 190). Алгоритм пожирания бактерии фагами показан на рис. 192 [3]. §7. ГИБЕЛЬНОЕ ДЕЙСТВИЕ УЛЬТРАФИОЛЕТОВОГО ИЗЛУЧЕНИЯ Во втором случае в дело вступают тормозящие вещества. Они запрещают размножение фагов. Вместо этого генетический код фага замирает и «прячется» внутри генетического кода бактерии. На рис. 191 показана ситуация, когда фаг становится пассивным. Он не размножается. Не причиняет бактерии никакого вреда. В этот период бактерия спокойно размножается. И спрятанный в ней фаг пассивно размножается вместе с нею. Если же в