Механизмы циклического процесса
С циклическим процессом могут быть связаны несколько программных механизмов. Наиболее применимы из них следующие:
· Накопитель суммы или произведения;
· Счетчик. Может быть суммирующим, вычитающим, реверсивным, с предустановкой и т.д.;
· Пороговый элемент, служит для определения минимального или максимального значения в потоке данных;
· Фиксатор события в циклическом процессе, имеющий два значения: false или true, 0 или 1.
· Триггер переключает некоторую переменную с одного значения на другое и наоборот, например с 0 на 1, в следующем цикле с 1 на 0.
Накопитель суммы представляет собой переменную, при инициализации которой присвоено нулевое значение, а накопитель произведения инициализирован единицей. В каждом цикле к накопителю добавляется очередное значение, и таким образом, по окончанию цикла накопитель будет содержать сумму всех слагаемых, а накопитель произведения будет содержать произведение всех значений, полученных в циклическом процессе. Например, сумма только положительных чисел:
// sum=sum+a; или sum+=a;
sum = 0;
for (i=0;i<n;i++) if (a[i]>=0) sum += a[i];
a[i]– переменная с очередным слагаемым.
Счетчик. Может быть суммирующим, вычитающим, реверсивным, с предустановкой и т.д. Его работа аналогична накопителю суммы, только в каждом цикле добавляется единица. Например, количество отрицательных чисел в потоке:
// count = count + 1; или count += 1; или count++;
count = 0;
for (i=0; i<n; i++) if (a[i]<0) count++;
Пороговый элемент служит для определения минимального или максимального значения в потоке данных. Начальное значение переменной, которая исполняет роль порогового элемента, обычно равно любому значению из потока данных, среди которых ищется минимальное или максимальное значение. Если значение очередного элемента в потоке данных будет больше значения порогового элемента, то пороговый элемент принимает значение текущего элемента, т.е. порог поднимается. Иначе его значение остается без изменений. По выходе из цикла значение порогового элемента будет в этом случае равно максимальному элементу из потока данных. Например, максимальное число в потоке:
PEmax = a[0];
for (i=0;i<n;i++) if (a[i]>PEmax) PEmax=a[i];
a[i]– переменная с очередным значение из потока.
Фиксатор события в циклическом процессе фиксирует некоторое событие, которое может произойти или не произойти в этом процессе. Например, появится ли в потоке данных отрицательное число или нет. Перед циклом фиксатор принимает значение false. Если в циклическом процессе произойдет событие, которое надо зафиксировать, то фиксатору придается значение true. Далее это значение остается до конца цикла. Если событие произошло, то значение фиксатора будет true, если не произошло, то фиксатор так и останется в состоянии false. В С++ иногда логические значения true и false заменяют на 1 и 0.
fix = 0;
for (i=0;i<n;i++) if (a[i]<0) fix=1;
Триггер – переменная, которая может иметь одно из двух значений, которое меняется на противоположное с каждым новым циклом. Например, сложить все числа из входного потока, каждый раз с противоположным знаком. Первое слагаемое положительное. Начальное значение триггера равно 1.
trigger=1; sum = 0;
for(i=0;i<n;i++)
{sum += trigger*a[i];trigger=-trigger;}
Эти механизмы можно использовать в одном циклическом процесс в разных сочетаниях.
В качестве примера рассмотрим реализацию решения следующей задачи: для значений функции y=f(x) на отрезке (L,R), имеющем n точек, определить среднее всех значений функции, максимальное значение функции, и определить наличие отрицательных значений функции.