Cтраница 2
![]() |
Сопрограммы форматирования текста. [16] |
Сопрограмма PrintWord формирует из слов строки согласно имеющемуся ограничению на длину строки. [17]
Сопрограммой Qtree можно провести интересный эксперимент, изменяя значение параметра MAX QTREE NODES, определенного в разделе класса QtreeNode. [18]
Многие сопрограммы имеют вид бесконечных циклов. В тот момент, когда оканчивается выполнение любой иэ сопрограмм, завершается и вся программа. [19]
Получение сопрограмм, которые функционируют совместно с главно программой, очень сложная задача. Объясните, почему главная программа, представленная на рис. 9.25, вызывает процедуру PrintWord с помощью стандартного процедурного оператора языка Паскаль, а не оператора RESUME. Объясните, почему главная программа на языке ассемблера ( рис. 9.27 непосредственно вызывает процедуру PWRDIN, вместо того чтобы использовать связь сопрограмм. [20]
Идея сопрограмм в основном является развитием концепции подпрограмм. Соответственно подпрограммы и сопрограммы различаются по способам передачи управления. [21]
В сопрограммах процессор ( ЭВМ) переходит от обработки одной программы к другой через явные обращения к процедуре TRANSFER, Когда процессор возвращается к прерванной программе, он возобновляет работу там, где она была прервана после передачи. [22]
Чтобы изучить сопрограммы в действии, рассмотрим надуманный пример. Предположим, что мы хотим написать программу, которая переводит один код в другой. [23]
Программа для сопрограммы Е является довольно простым переложением полуформального описания, приведенного ранее. [24]
Если одна сопрограмма вызывает другую всего в одном месте, то эта последняя - не что иное, как подпрограмма; поэтому нам нужно приложение, в котором каждая сопрограмма вызывает другую по крайней мере в двух различных кестах. И даже в этом случае часто легко встраивается переключатель некоторого рода или используются некоторые свойства данных, чтобы после входа в фиксированное место в одной сопрограмме можно было разветвиться в одно из двух требуемых мест; и опять-таки не требуется ничего другого, кроме подпрограммы. Полезность сопрограмм возрастает, когда растет число обращений между ними. [25]
Для активации сопрограмм служит процедура TRANSFER. Ей требуется два параметра: дескриптор сопрограммы ( типа PROCESS) для запоминания состояния вызывающей сопрограммы и инициализированная переменная типа PROCESS, описывающая статус вызываемой. Первое обращение к процедуре TRANSFER инициализирует переменную типа PROCESS, соответствующую вызывающей программе: таким образом она в результате передачи управления становится сопрограммой. [26]
Каждая из сопрограмм, приведенных на рис. 9.25, была составлена независимо, как если бы другие сопрограммы выступали в качестве отдельных подпрограмм. [27]
На практике сопрограммы являются самым естественным средством при программировании алгоритмов ввода и вывода. Предположим, например, что сопрограмма А должна читать карты и выполнять некоторые преобразования вводимой информации, переводящие ее в последовательность элементов. Другая сопрограмма, которую мы назовем В, выполняет дальнейшую обработку этих элементов и печатает результаты; В будет периодически требовать последовательные входные элементы, получаемые в А. [28]
Предложите связь сопрограмм, аналогичную ( 1), для случая трех сопрограмм А, В, С, каждая из которых может передавать управление любой из двух других. Всякий раз, когда сопрограмма активируется, она продолжается с того места, где в последний раз была оставлена. [29]
Операция вызова сопрограммы или процесса, возобновляющая работу с точки, п которой она закончилась при предыдущем обращении. [30]