Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
книги_docv / Паронджанов Как улучшить работу ума.doc
Скачиваний:
337
Добавлен:
21.03.2015
Размер:
15.07 Mб
Скачать

Цикл Для

На рис. 49 и 50 показаны два варианта решения простой математи­ческой задачи. В первом случае используется циклДО, во втором — циклДЛЯ. ЦиклДЛЯ— составной визуальный оператор (рис. 2, макроикона 6), содержащий иконы “начало циклаДЛЯ” и “конец циклаДЛЯ”(рис. 1, иконы И12, И13), между которыми располагаются одна или несколько других икон. Внутри иконы “начало циклаДЛЯ” указываются переменная цикла, ее начальное и конечное значения и шаг. Порядок записи этих величин определяется выбранным вариантом текстового синтаксиса. На рис. 50 изображен вариант, по умолчанию принимающий, что шаг равен 1.

Веточный цикл

Циклы, описанные выше, могут использоваться как в примитиве, так и в силуэте. В этом параграфе речь пойдет о веточном цикле, который встречается только в силуэте.

Веточный циклобразуется, когда метка в иконе “адрес” указываетлибо на свою ветку, либо на ветку, которая находится левее. Например, икона-адрес “Покупка плюшек” на рис. 51 указывает на свою ветку. Внутри веточного цикла могут появляться циклы других типов. На рис. 52 изображена конструкция “цикл в цикле”, у которой внутри веточного цикла находится циклДО.

При замене примитива на эквивалентный ему силуэт гибридный цикл нередко превращается в веточный цикл. В этом легко убедиться, сравнив эквивалентные алгоритмы на рис. 41 и 53.

Главный маршрут силуэта

В этом параграфе мы продолжим изучение веточных циклов и попытаемся ответить на вопрос: как найти главный маршрут веточного цикла? Для этого нужно проанализировать понятие “главный маршрут силуэта” (рис. 54).

Линейный (неразветвленный) силуэтимеет один-единственный маршрут, который и является главным. Он проходит по шампурам всех веток и по всем иконам силуэта (рис. 54а).

Ф

ABEFGCCHIDDJKM

ормула маршрута для силуэта имеет особенность: одноименные иконы “адрес” и “имя ветки” обозначаются одной буквой, которая повторяется в формуле дважды. Например, силуэт на рис. 54аимеет формулу

где парные буквы обозначают переход с первой ветки на вторую (СС) и со второй на третью (DD).

Ветка называется одноадресной, если она имеет одну икону “адрес”. Если все ветки одноадресные, силуэт считается одноадресным.

Линейный силуэт всегда одноадресный. Однако одноадресный силуэт может быть и разветвленным. В последнем случае его главный маршрут следует по шампурам всех веток, однако он не проходит по всем иконам (рис. 54б).

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

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

  • одноветочные (если цикл помещается в одной ветке);

  • двухветочные (если цикл занимает две ветки);

  • трехветочные (цикл в трех ветках)

и т. д.

Как работает одноветочный цикл? Предположим, до начала выполнения цикла на рис. 54гимеют место условия

Предположим также, что веточный цикл выполняется два раза, после чего условие Е принимает значение “нет”. Это значит, что при третьем проходе по веткеВпроизойдет выход из цикла по пути “ЕнетС”. В такой ситуации формула главного маршрута для силуэта на рис. 54гпринимает вид:

Как выглядит главный маршрут на дракон-схеме? Ответ изображен жирной линией на рис. 54г. Мы видим, что главный маршрут как быразветвляется в иконе Е и проходит через оба ее выхода. Разумеется, это условность, которая означает следующее. Сначала (когдаЕ= да) главный маршрут идет по шампуру, затем (когда выполняется условиеокончания цикла Е = нет) главный маршрут проходит через правый выход иконыЕ.

Чтобы построить одноветочный цикл, нужно в левой иконе “адрес” записать Х, гдеХ— имя данной ветки. Для выхода из цикла следует добавить вторую икону “адрес” и записать в нейY, гдеY— имя следующей (по порядку исполнения) ветки.

Если в веточном цикле слишком много икон, он может не поместиться в одной ветке. К счастью, его можно разделить на части. Например, веточный цикл на рис. 54дсодержит пять икон:Е,F,G,H,R(иконы “имя ветки” и “адрес” не в счет). Поместим иконыЕиFв веткуВ, а иконыG,H,R— в веткуС. В результате цикл станет двухветочным. Главный маршрут силуэта с двухветочным циклом имеет разветвление в иконеR. УсловиеR= да позволяет вернуться к началу цикла. ЕслиR= нет, главный маршрут ведет нас к концу алгоритма (рис. 54д).

Таким образом, двухветочный цикл — это цикл, содержащий две ветки Х и Y, причем в ветке Х имеется икона-адрес Y, а в ветке Y — икона-адресХ.

На рис. 54епредставлена ситуация “цикл в цикле”: веточный циклСнаходится внутри веточного циклаВ. Из рисунка видно, что в этом случае главный маршрут “разветвляется” дважды: в иконахRиJ.

Если выполняется условиеR= да, происходит повторение внутреннего циклаС. При сочетании условий производится выход из циклаСи повторение внешнего циклаВ. Наконец, сочетание условий означает, что выполнение циклаВи алгоритма в целом заканчивается.

Выводы

  1. В различных текстовых языках при описании циклов применяются разные наборы ключевых слов, имеющих к тому же разную семантику. Неразбериху усугубляют отличия в логике окончания цикла. Например, в языке Си для циклов whileиdo-whileусловие окончания цикла соответствует значениюfalseили 0, условие продолжения — значениюtrueили 1. В языке Паскаль картина иная: в циклеwhile-doвыход из цикла соответствует значениюfalse, а в циклеrepeat-untilпо каким-то загадочным причинам применяется диаметрально противоположный принцип: выход из цикла производится, когда логическое выражение принимает значениеtrue. Все эти путаные правила программист обязан знать и неукоснительно выполнять.

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

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

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

  5. Визуализация циклов — весьма полезный инструмент, так как сложные вложенные циклы со многими выходами часто бывают источником трудных ошибок. Многие из них возникают из-за путаницы, связанной с устаревшей привычкой описывать циклы словами. Сегодня никто не пытается заменить конструкторские и строительные чертежи словесными описаниями. По мнению автора, текстовая форма записи циклов во многих случаях является таким же анахронизмом, как словесное описание механического чертежа или электрической схемы.