Программирование циклических вычислительных процессов. Краткие теоретические сведения

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

Телу цикла в программе всегда предшествует заголовок цикла , содержащий обозначение оператора цикла и выражение, определяющее (прямо или косвенно) количество итераций. Заметим, что тело цикла является операндом оператора цикла, следовательно, заголовок и тело цикла составляют неделимую структурную единицу программы. В дальнейшем, используя термин "оператор цикла ", будем иметь в виду и заголовок, и тело цикла.

Для организации циклов во всех системах программирования существуют специализированные операторы циклов , применение которых избавляет программиста от необходимости программировать циклы "вручную". MathCAD поддерживает два вида таких операторов – цикл с предопределением For (называемый также циклом со счетчиком ) и цикл с предусловием While . Описание структуры этих операторов приведено в таблице 5.

5.4.1 Оператор For

Этот оператор следует использовать в тех случаях, когда количество итераций предопределено, то есть известно заранее.

Заголовок цикла этого оператора (правый операнд) содержит переменную, называемую параметром (или счетчиком) цикла , и список значений этого параметра. Число элементов списка определяет и количество итераций – при выполнении каждой итерации параметр цикла получает очередное значение из списка, заданного в заголовке.

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

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

По завершению последней итерации будет выполняться оператор программы, следующий после оператора цикла. При этом переменная, использованная в качестве параметра завершенного цикла, сохраняет значение, которое она имела в последней реально выполненной итерации[*]. Заметим, что это значение не всегда совпадает с последним значением из списка, заданного в заголовке цикла, так как возможен "досрочный" выход из цикла при срабатывании оператора Break , включенного в тело цикла.

Список значений параметра цикла записывается в заголовке цикла после символа "Î ", обозначающего принадлежность множеству (этот символ не требуется вводить "вручную" – он будет автоматически отображен при вводе оператора For ). MathCAD допускает использование трех форм записи этого списка: прямое перечисление – элементы списка явно указываются через запятую, параметр получает значения из списка в порядке их следования; в стиле ранжированной переменной – элементы списка образуют соответствующий арифметический ряд; массив – элементы списка последовательно получают значения элементов массива в порядке следования их индексов (сначала – столбцы слева направо, затем – строки сверху вниз).

Три программы, приведенные на рисунке 21, иллюстрируют различные варианты использования оператора For .

Программа Fact(n) вычисляет факториал числа n . Оператор цикла в этой программе входит в состав составного выражения, которое, в свою очередь, является операндом условного оператора Otherwise . Параметр цикла k получает значения из целочисленного арифметического ряда.

Программа Ch(V,N,p) обрабатывает входной вектор V , заменяя в нем на значение p те элементы, индексы которых заданы элементами второго входного вектора N . В этом примере список значений параметра цикла i задан множеством элементов вектора N . Заметим, что обе эти программы осуществляют входной контроль данных и блокируют выполнение основного алгоритма в случае, если фактические аргументы программы заданы некорректно.

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

Рисунок 21 – Примеры программирования циклов For


Рисунок 22 иллюстрирует использование операторов Break и Continue в теле цикла. Как правило, эти операторы сами являются операндами условных операторов If или Otherwise .

Оператор Break ("прервать") прерывает выполнение цикла и передает управление оператору, следующему после прерванного оператора цикла. Заметим, что если оператором Break прерван вложенный цикл , выполнение внешнего цикла будет продолжено.

Оператор Continue ("продолжить") действует иначе – он прерывает только текущую итерацию цикла и передает управление заголовку этого цикла, после чего выполнение цикла продолжается со следующей итерации (если, конечно, прерванная итерация не была последней).

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

Рисунок 22 – Примеры использования операторов Break и Continue

Функция SumN(V) суммирует только те элементы вектора, которые содержат скалярные данные числового типа, а остальные элементы пропускаются. Функция Inverse(V) формирует вектор, элементы которого – значения, обратные значениям соответствующих элементов исходного вектора. При этом, если очередной элемент содержит число "0" или не является скаляром числового типа, цикл прерывается . Заметим, что оператор Break в последнем примере не прерывает работы программы, а передает управление оператору Return , следующему непосредственно после оператора For .

5.4.3 Оператор While

В отличие от оператора For , заголовок оператора While (в переводе - "пока ") не содержит явных указаний на количество итераций – он содержит логическое выражение , значение которого автоматически вычисляется перед началом выполнения каждой очередной итерации[†]. Пока это выражение "истинно", итерации цикла будут продолжаться; как только после завершения очередной итерации выражение станет "ложным", следующая итерация цикла выполнена не будет, и управление получит оператор программы, следующий после оператора While .

Очевидно, что если в заголовок цикла поместить тождественно ложное логическое выражение, этот цикл не выполнит ни одной своей итерации, а если это выражение тождественно истинно, цикл будет бесконечным (последнюю ситуацию называют зацикливанием программы). Для того, чтобы избежать подобных ситуаций, в число операндов логического выражения должны быть включены одна или более переменных, изменяющих свои значения в теле цикла таким образом, чтобы цикл был конечным (для предотвращения зацикливания могут использоваться и другие средства – например, принудительный выход из цикла оператором Break ).

Примеры использования оператора While приведены на рисунке 23. Приведены три варианта решения одной и той же задачи: каждая из программ F0 , F1 и F2 возвращает индекс первого из элементов исходного вектора V , превосходящего заданное значение z .

Первая программа (пример а ) прибавляет единицу к счетчику k в теле цикла While до тех пор, пока очередной k -й элемент исходного вектора не превысит заданного значения z . После этого цикл завершается, и программа возвращает последнее измененное значение переменной k , которое и является решением задачи. Отметим, что в отличие от цикла For , счетчик k здесь необходимо обрабатывать отдельными операторами: инициализировать (то есть присваивать ему начальное значение) перед оператором цикла и изменять его значение в теле цикла.

Нетрудно заметить, что вариант а ) программы имеет существенный недостаток: он не предотвращает зацикливания программы в случае, когда задача не имеет решения, то есть когда параметр z превышает значение самого большого элемента вектора V . В этом примере зацикливания в такой ситуации реально не произойдет – но это заслуга не нашей программы, а системы MathCAD, которая проконтролирует выход индекса вектора V за пределы допустимых значений и выдаст сообщение об ошибке.

Свободным от этого недостатка является вариант б ) программы, в котором тело цикла содержит дополнительную проверку допустимости очередного значения индекса и принудительно прерывает цикл оператором Break в соответствующей ситуации с выдачей текстового сообщения.

Возможно, наиболее эффективным вариантом решения этой задачи является вариант в ), который вообще не использует оператор While . В этой программе переменная k использована только для соблюдения "чистоты стиля" – чтобы исключить обработку параметра цикла i вне оператора For .

Рисунок 23 – Примеры программирования циклов While

Цель работы:

Изучить циклические операторы for, while, do – while, научиться составлять и программировать циклические алгоритмы.

Краткие теоретические сведения

Операторы циклов применяют, когда надо повторить некоторые действия (операторы и операции) несколько раз, и такие участки алгоритмов называют циклами.

Оператор цикла for

Основная форма оператора цикла for имеет вид

for (выражение_1; выражение_2; выражение_3)

оператор;

где выражение_1 – начальное значения параметра цикла;

выражение_2 – проверка условия на продолжение цикла;

выражение_3 – изменение параметра цикла (коррекция);

оператор – простой или составной оператор языка С.

Схема работы оператора следующая: только один раз вначале вычисляется выражение_1, затем проверяется выражение_2, и если оно - «истина», то выполня­ет­ся циклический участок программы, затем производится коррекция параметра, и так до тех пор, пока выражение_2 не примет значение «ложь».

Например: for (k=1; k<5; k++)

printf(“\n %d”, k);

В результате выполнения этого оператора печатаются в столбик цифры от 1 до 4.

В качестве параметра цикла можно использовать переменную любого базового типа.

Например:

for(ch=’a’; ch<=’z’; ch++) // Вывод на экран букв

printf(“ %c”,ch); // латинского алфавита

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

Например :

for(k=10; k>6;k++)

printf(“бесконечный цикл \n”);

Выйти из цикла досрочно можно следующими способами:

По дополнительному условию;

Используя следующие операторы:

break; - выход из цикла, в котором находится break, управление передается на первый после цикла выполняемый оператор;

exit(int Kod); - выход из программы;

return; - выход из функции;

С помощью оператора безусловного перехода goto <метка>;

Досрочное завершение текущего циклического шага возможно при помощи дополнительного условия или оператора continue , который прерывает выполнение текущего шага цикла, т.е. пропускает операторы оставшейся части цикла и передает управление в головной оператор цикла для коррекции параметра и проверки условия.

Передавать управление извне внутрь цикла запрещается.

Любое из выражений цикла for в круглых скобках может отсутствовать, но символ «;» опускать нельзя.

Например :

for(; i<3; i++)

puts(“Hello!”);

Циклические операторы while и do–while

Основная форма циклического оператора while :

While (условие)

оператор;

где оператор

Цикл выполняется до тех пор, пока условие принимает значение «истина», т.е. выражение в скобках возвращает ненулевой результат. Это цикл с предусловием – сначала проверяется условие, затем выполняется оператор. Поэтому цикл while не выполнится ни разу, если изначально результат вычисления условия будет равен 0.

Основная форма оператора do – while :

оператор;

while (условие);

где оператор – это простой, составной или пустой оператор.

Оператор do while – оператор цикла с постусловием, т.е. сначала выполняется оператор, а затем проверяется условие на истинность. Так как в цикле do–while условие проверяется в конце цикла, то цикл будет выполнен хотя бы один раз.

В циклах типа while и do–while допустимы те же способы досрочного выхода из цикла и досрочное завершение текущего шага цикла, как и в операторе for, но в последнем случае в отличие от цикла for управление передается на проверку условия. Для предотвращения бесконечного цикла внутри циклов while и do–while нужно предусмотреть изменение переменных, входящих в условие.

Например:

for (i=1;i<=300;i++) // Печать целых чисел, кратных 5

if (i%5!=0) continue;

printf(“%5d”,i);

Примеры бесконечных циклов:

оператор;

2) while(число_не_0) // Всегда истинно!

оператор;

оператор;

while(число_не_0); // Всегда истинно!

Среди операторов цикла обязательно должно быть условие выхода.

Вложенные циклы

В случае вложенных циклов один цикл находится внутри другого, например:

for(i=nn;i

for(j=mn;j

оператор;

где оператор – это простой, составной или пустой оператор. Внутренний цикл будет выполняться для каждого значения параметра i, удовлетворяющего условию внешнего цикла.

Пример:

for(i=1;i<10;i++) // Печать таблицы умножения

for(j=1;j<4;j++)

printf(“\n %d*%d=%2d”, i, j, i*j);

printf(“\n”);

Пример использования оператора for

Вычислить . На печать программа должна выводить промежуточные и окончательный результаты.

Текст программы может иметь вид

#include

#include

puts(“ Введите N”);

scanf(“%d”,&N);

for (s=0, k=1; k<=N; k++) // В заголовке цикла можно выпол-

{ // нять и двойное присваивание

printf(" \n k=%d s=%f ", k, s);

printf("\n ОТВЕТ: s=%f, Press any key...",s);

Варианты индивидуальных заданий

Составить программу для определения таблицы значений функции у в произвольном диапазоне [a ,b ] изменения аргумента х с произвольным шагом h . Значения a, b, h вводятся с клавиатуры. Таблица должна содержать следующие столбцы: порядковый номер, значение аргумента x , значение функции, сообщение о возрастании или убывании функции, разность двух соседних значений функции.

Определить максимальное и минимальное значения функции.

1. a=-p; b=p; h=0,4.

2. a=0,7; b=1,8; h=0,1.

3. a=-0,5; b=2,5; h=0,2.

4. a=-0,9; b=2,7; h=0,3.

5. a=-2; b=0,8; h=0,2.

6. a=-1,9; b=2,7; h=0,3.

7. a=-0,4p; b=0,4p; h=0,5.

8. a=-0,3p; b=1,3p; h= p/10.

9. a=-p/2; b= p/2; h=p/10.

10. a=-3; b=3; h=0,5.

Задание №2

Программирование ветвящихся вычислительных процессов

Цель работы

Получить навыки программирования ветвящихся вычислительных процессов. Изучить условные операторы, переменные логического типа, логические отношения и операции.

Пусть на плоскости x, y задана область D. Требуется определить «попадает» ли точка с координатами (x, y) в область D или нет. Если попадает, то необходимо вычислить функцию и переменной M, значение которой является признаком «попадания» или «непопадания», присвоить значение M=1. В противном случае вычислить и положить M=2.

Ход работы

Алгоритм решения поставленной задачи:

1. Выписать область D и выписать функции и

2. Записать уравнения, определяющие границы области

3. Подготовить 7 точек, чтобы часть точек находилась внутри D, а часть- вне ее.

4. Написать программу для выполнения поставленной задачи.

5. Для выбранных точек получить и записать результаты счета.

f 1= tg(x)/e y f 2 =

(x>0 и y>0 и X**2+Y**2<=9) или (x<0 и y>0 и y<=x+4) или (x<0 и y<0 и x>(-4) и y>(-2))

то точка принадлежит области D

1)(1;1)
2)(3;3)
3)(-1;2)
4)(-5;2)
5)(-2;-1)
6)(-5;-3)

Fortran MathCAD
x y z m c z m c
0.1573E+01 T 1.573
0.0751E+01 F 0.751
-1 -0.1211E+01 T -1.211
-5 0.083E+01 F 0.83
-2 -1 0. 394E+01 T 3.94
-5 -3 0.0282E+01 F 0.282
-3 0. 0271E+01 F 0.271

PRINT *,"X=?,Y=?";READ *,X,Y

C=(x>0..and. y>0..and.X**2+Y**2<=9).or.(x<0..and.y>0..and.y<=x+4).or.(x<0..and.y<0..and.x>(-4).and.y>(-2))

PRINT 2,X,Y,Z,C,M

2 FORMAT ("X=",F7.3,3X,"Y=",F7.3,3X,"Z=",E11.4,3X,"C=",L2,3X,"M=",I2/)

END PROGRAM LAB2

FUNCTION F1(X,Y)

F1=tan(x)/exp(x)**y

FUNCTION F2(X,Y)

F2= (sqrt(sin(2*x+3*y)**2)**1./3.)

print*,"a,b,c=?";read "(2F7.3)",a,b,c

q=a>b.and.a

ac

w=b>a.and.b

bc

e=c>a.and.c

cb

28.,558.,345. 345.0000


Задание №3

Программирование циклических вычислительных процессов

Цель работы

Получить навыки программирования циклических вычислительных процессов. Изучить циклы с шагом и циклы с условием.

1. Записать расчетные формулы для вычисления слагаемого и конечной суммы

2. Составить алгоритм вычисления с заданной точностью суммы конечного числа членов ряда в указанном диапазоне изменения параметра x с заданным шагом. Для получения шага диапазон изменения x разделить на 10.

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

точное значения суммы ряда, а также количество просуммированных членов.

Ход работы

1. Задать x0-начало цикла и xл-конец цикла

2. Задаем шаг h по формуле

4. Составить программу решения задач рекуррентным способом

5. Построить таблицу полученных данных

Формула ряда:

Формула точного вычисления суммы: π/4

1. x0= π/10 xk=9 π/10

3.


real:: a,b,c,eps,h,s,x,x0,xk,y,p

b=(sin*(x)*(2*n)-1+sin*((2*n-1)*x))/4*n-2

if(abs(a)

print 2,x,s,y,n; write(1,2)x,s,y,n

end do 2 format("x=",f6.3,3x,"s=",e10.3,3x,"y=",e10.3,3x,"n=",i5)

end program lab3


x S(x) y
0.314 0.324 0.785
0.565 0.622 0.785
0.817 0.979 0.785
1.068 1.404 0.785
1.319 1.43 0.785
1.57 -19.257 0.785
1.821 -533.961 0.785
2.072 -8.624E+3 0.785
2.324 -9.986E+4 0.785
2.575 -8.928E+5 0.785
2.826 -6.477E+6 0.785

1. Способы построения циклических вычислительных процессов в программах.

2. В компьютер вводится N вещественных чисел. Составить программу, выдающую на экран среднее арифметическое значение этого набора.

Введение

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

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

Программы , реализующие циклический процесс называются циклическими программами.

В организации цикла можно выделить следующие этапы:

подготовка (инициализация) цикла (И);

выполнение вычислений цикла (тело цикла) (Т);

модификация параметров (М);

проверка условия окончания цикла (У).

Порядок выполнения этих этапов, например, Т и М, может изменяться. В зависимости от расположения проверки условия окончания цикла различают циклы с нижним и верхним окончаниями. Для цикла с нижним окончанием тело цикла выполняется как минимум один раз, так как сначала производятся вычисления, а затем проверяется условие выхода из цикла.


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

Цикл называется детерминированным, если число повторений тела цикла заранее известно или определено. Цикл называется итерационным, если число повторений тела цикла заранее неизвестно, а зависит от значений параметров (некоторых переменных), участвующих в вычислениях.

Тело цикла - это многократно повторяющийся участок программы.

Параметр цикла - это переменная, которая принимает новые значения при каждом повторении цикла (циклы бывают простые и сложные).

Общий вид цикла n раз

В общем виде цикл n раз записывается так:

нц число повторений раз

Служебное слово нц (начало цикла) и кц (конец цикла) пишутся строго одно под другим и соединяются вертикальной чертой. Правее этой черты записывается повторяемая последовательность команд (тело цикла).

Число повторений – произвольное целое число.

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

Общий вид цикла пока

В общем виде цикл пока записывается так:

нц пока условие

| тело цикла (последовательность команд)

При выполнении цикла компьютер повторяет следующие действия:

а) проверяет записанное после служебного слова пока условие;

б) если условие не соблюдается, то выполнение цикла завершается и компьютер начинает выполнять команды, записанные после кц. Если же условие соблюдается, то компьютер выполняет тело цикла, снова проверяет условие и т.д.

Общий вид цикла для

нц для i от i1 до i2

| тело цикла (последовательность команд)

Здесь i – имя величины целого типа, i1, i2 – произвольные целые числа или выражения с целыми значениями. Тело цикла последовательно выполняется для i = i1, i = i1 + 1, i1 + 2, …i = i2.

Правила алгоритмического языка допускают задание любых целых i1, i2. в частности, i2 может быть меньше i1. этот случай не считается ошибочным – просто тело цикла не будет выполнено ни разу, а компьютер сразу перейдет к выполнению команд, записанных после кц.

Цикл n раз и цикл пока

Циклы n раз и пока оформляются в алгоритмическом языке почти одинаково. Это не удивительно, ведь обе эти команды задают цикл – повторяющуюся последовательность команд. Служебные слова нц и кц указывают, что исполняется цикл, а заголовок цикла задает конкретный механизм его выполнения.

Однако у этих двух циклов есть одно существенное отличие. Начиная выполнять цикл n раз, компьютер знает, сколько раз придется повторить тело цикла. При исполнении цикла пока это не так: компьютер каждый раз проверяет условие цикла и не может заранее определить, когда выполнение закончится. Узнать количество повторений цикла пока можно только после того, как цикл завершен.

Отсюда ясно, в каких случаях какой цикл следует использовать. Если к моменту начала цикла количество повторений известно, удобно воспользоваться циклом n раз. Если же количество повторений заранее определить нельзя, необходим цикл пока.

Например, программа автоматического управления имеет структуру, изображенную на рис. 1. Модули, входящие в цикл (а также модули обработки прерываний), с одним входом и одним выходом каждый, как правило, имеют характерную особенность: модули содержат статические переменные, которым присваивается значение в текущем цикле, а анализ этих переменных выполняется в следующем цикле. Таким образом, упомянутые переменные характеризуют состояние модуля на конец текущего или начало следующего цикла программы. В дальнейшем будем рассматривать только такие модули циклических программ и обозначать их кратко МЦП.


Рис.1. Типовая структура управляющей программы с бесконечным циклом.

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

2. Фрагменты модулей циклических программ

Двухполюсным фрагментом, или просто фрагментом, будем считать участок программы с одним входом и одним выходом (включая операторы циклов) в предположении, что рассматриваемые МЦП структурированы. Простейший фрагмент включает единственный оператор. Последовательность фрагментов также является фрагментом. МЦП в свою очередь является фрагментом и состоит из последовательности фрагментов.

В предложен метод независимых фрагментов для синтеза структуры модулей, реализующих таблицы решений. При этом независимым считается такой фрагмент, который можно вставить в любом месте последовательности фрагментов модуля. Независимость местоположения такого фрагмента обусловлена тем, что анализируемые в нем данные не формируются в указанной последовательности фрагментов, а формируемые в независимом фрагменте данные не анализируются в данной последовательности фрагментов. Поэтому независимые фрагменты могут выполняться параллельно (псевдопараллельно). На рис. 2 показаны возможные варианты реализации модуля с двумя независимыми фрагментами. В вариантах “а” и “б” фрагменты переставлены местами без искажения существа программы; в варианте “в” фрагменты реализуются параллельно.


Рис.2. Варианты реализации модуля с независимыми фрагментами:

а) и б) - последовательная реализация,

в) - параллельная реализация: двойная горизонтальная линия обозначает распараллеливание программы, жирная горизонтальная черта обозначает завершение параллельных процессов.

Зависимым фрагментом является такой, местоположение которого зависит от местоположения другого (других) фрагмента в модуле. Будем различать сверху- и снизу зависимые фрагменты. Сверху-зависимый фрагмент должен быть расположен всегда ниже некоторого фрагмента, в котором формируются переменные, используемые в данном (зависимом) фрагменте. Снизу-зависимый фрагмент должен размещаться всегда выше фрагмента, в котором используются переменные, формируемые в данном фрагменте. Два зависимых фрагмента, один из которых является сверху зависимым от второго, а второй снизу зависимым от первого, будем называть взаимно зависимыми фрагментами. Их нельзя менять местами и нельзя реализовывать параллельно. На рис. 3 приведен пример модуля с взаимно зависимыми фрагментами. Между взаимно зависимыми фрагментами могут находиться другие, зависимые или не зависимые от них. Рис.3. Модуль с зависимыми фрагментами.

Фиксированным будем называть зависимый фрагмент, местоположение которого в модуле строго определено. Например, в модуле распознавания символа, введенного с клавиатуры, первым должен быть снизу зависимый фрагмент непосредственно ввода символа. Операторы “начало” и “конец” модуля есть фиксированные фрагменты.

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

  • Сергей Савенков

    какой то “куцый” обзор… как будто спешили куда то