Читайте также:
|
|
Структуры управления вычислениями. В ПО реализуются алгоритмы обработки информации. В САПР эти алгоритмы обычно являются весьма сложными и характеризуются итерационностью, многоуровневой вложенностью процедур, множеством точек выбора альтернативных решений. Однако для программной реализации любых алгоритмов достаточно трех базовых структур управления: следование, цикл и ветвление.
Следование – структура из нескольких последовательно выполняемых операторов, причем этими операторами в общем случае могут быть операторы вызова подпрограмм.
Цикл – структура, назначение которой – представление многократно повторяющихся вычислительных процессов. Различают циклы с предусловием (рис. 1.8, а), с постусловием (рис. 1.8, б) и с параметром (рис. 1.8, в). Применение последней структуры предпочтительнее в случаях, когда число повторений известно заранее. Циклы с постусловием и параметром могут быть приведены к циклу с предусловием.
Ветвление – структура, предназначенная для принятия решений в ходе вычислительного процесса. Простейшими ветвлениями являются альтернативные: ЕСЛИ-ТО-ИНАЧЕ (рис. 1.9, а) и ЕСЛИ-ТО (рис. 1.9, б). В некоторых алгоритмах возникает задача выбора не из двух, а из нескольких возможностей, в этом случае удобна структура многозначное ветвление (рис. 1.9, в). Структура ЕСЛИ-ТО-ИНАЧЕ фундаментальна, через нее могут быть представлены две другие структуры управления вычислениями.
Важное свойство всех структур – наличие только одного входа и только одного выхода, как у простого оператора. Поэтому каждый прямоугольный блок на рис. 1.8–1.9, обозначающий какое-либо действие, может быть заменен любой из трех базовых структур. Возможность представления любых алгоритмов с помощью вложенных структур следования, цикла и ветвления составляет основу метода структурного программирования.
Управление ходом вычислительного процесса с помощью данных. Хотя рассмотренные выше структуры управления универсальны, в некоторых практических приложениях более удобным оказывается передать часть функций по управлению ходом вычислительного процесса данным. Рассмотрим два метода, использующих данные для управления: 1) метод таблиц решений; 2) метод конечного автомата.
Метод таблиц решений целесообразно применять в алгоритмах, характеризующихся большим количеством условий и ограниченным набором действий, выполняемых в различных сочетаниях в зависимости от условий. Табл. 1.1 – таблица решений для простейшего примера, содержащего 2 условия и 3 действия. Символ «1» в клетках таблицы для условий соответствует ситуации, когда значение данного условия истинно. Символ «*» в клетках таблицы для действий означает необходимость выполнения соответствующего действия. Таким образом, обработка таблицы при каждом вхождении заключается в нахождении столбца, соответствующего текущему сочетанию условий, и в выполнении действий, отмеченных символом «*» в этом столбце. Достоинство этого метода управления – легкая модифицируемость ПО под новые условия применения, поскольку реорганизация таблицы не требует изменений в процедурной части программного компонента.
Таблица 1.1.
Условие 1 | |||||
Условие 2 | |||||
Действие А | * | * | * | ||
Действие Б | * | * | |||
Действие В | * | * | * |
Метод конечного автомата находит широкое применение в языковых процессорах для распознавания цепочек символов. Поясним идею метода на конкретном примере. Пусть из всего множества слов конечной длины, составленных из символов алфавита {О, П, С, Т, ¿ }, допустимым является только СТОП¿, где ¿ – символ конца слова. В задачу программы-распознавателя, использующей метод конечного автомата, входит обнаружение из всего множества цепочек символов только единственной допустимой. В основе реализации конечного автомата на ЭВМ лежит таблица переходов, представленная в табл. 1.2. Ее столбцы помечены символами входного алфавита, строки – номерами состояний. Элементами таблицы являются номера новых состояний, в которые должен переходить автомат из текущего состояния при поступлении входных символов. В таблице переходов примера все пустые клетки должны быть заполнены номером 7 (для наглядности он опущен). Процедурная часть программы распознавателя должна обеспечивать поиск столбца, соответствующего очередному входному символу, и «передвигать» указатель на строку таблицы, отвечающую новому состоянию.
Работа автомата начинается с некоторого исходного состояния (помеченного номером 0). Появление на входе автомата символа С переводит его в состояние 1, любой другой символ (за исключением ¿) вызовет переход автомата в состояние 7, откуда есть выход только по символу ¿ конца строки. Таким образом, любая цепочка символов, не начинающаяся с символа С, будет распознавателем отвергнута. Из состояния 1 допускающим будет только переход в состояние 2 для символа Т, из состояния 2 – в состояние 3 для символа О. Работа распознавателя завершается обработкой символа ¿. В табл. 1.2 для состояний автомата 1–4 справа от таблицы записаны подцепочки символов, приводящие в каждое из этих состояний.
Таблица 1.2.
О | П | С | Т | ¿ | ||
С | ||||||
СТ | ||||||
СТО | ||||||
СТОП | ||||||
Опознана цепочка «СТОП» | СТОП¿ | |||||
Недопустимая цепочка |
Поскольку процедурная часть рассмотренного распознавателя может быть легко реализована как инвариантная по отношению к размерам таблицы переходов, настройка такого распознавателя на новые входной алфавит и множество допустимых цепочек символов осуществляется модификацией только таблицы переходов, т. е. содержимого некоторой структуры данных.
Среди структур управления, не относящихся к базовым, важнейшей является подпрограмма.
Подпрограмма – часть программы, обладающая именем, которое позволяет этой программе (или всякой другой) вызывать ее, чтобы заставить выполнить некоторое действие. В виде подпрограмм целесообразно программировать действия, общие для ряда программ, и универсальные алгоритмы. Подпрограммы позволяют управлять сложностью программ, допуская сжато именовать сложные последовательности действий. Подпрограмма, как и любая другая структура управления, должна иметь один вход и один выход, причем возврат управления из подпрограммы обязательно должен осуществляться в точку ее вызова.
Важными характеристиками подпрограмм (и любых компонентов ПО) являются реентерабельность и повторная используемость. Реентерабельная подпрограмма – это такая подпрограмма, к которой возможно повторное обращение до того, как она полностью окончила работу по предыдущему вхождению в нее. Одна копия реентерабельной подпрограммы может обслуживать одновременно несколько разных вызывающих подпрограмм.
Повторно используемая подпрограмма также обеспечивает возможность многократного обращения, но только в том случае, если новый вызов следует после полного завершения ее работы по предыдущему вызову. Повторно используемая подпрограмма – подпрограмма, которая не сохраняет историю своих вызовов. В ПО САПР все программные компоненты должны быть повторно используемыми.
Создание реентерабельных программ часто требует от их разработчика значительных дополнительных усилий. Поэтому такие программы в ПО САПР находят ограниченное применение – главным образом в подсистемах, допускающих одновременную работу нескольких пользователей.
К понятию реентерабельности подпрограмм близко (но не тождественно) понятие рекурсивности. Рекурсивная подпрограмма – подпрограмма, которая вызывает сама себя (либо непосредственно, либо через цепочку модулей). Многие алгоритмы автоматизированного проектирования в области структурного синтеза и параметрической оптимизации по сути рекурсивные. Самым простым примером здесь может служить метод половинного деления, используемый для одномерного поиска экстремума функций.
Дата добавления: 2015-02-16; просмотров: 87 | Поможем написать вашу работу | Нарушение авторских прав |
<== предыдущая лекция | | | следующая лекция ==> |
Нравственно-философская проблематика крыловской басни | | | Quot;Лечение солью |