7.2. ПОТОКОВАЯ ОБРАБОТКА
297
показывает, что формирование внутреннего потока (цикла) избыточно.
Конец примера 7.2.2.
Программа из таблицы 7.5 демонстрирует использование и других типовых
приемов программирования. Перечислим некоторые из них, связанные с ци-
клической обработкой:
1. объединение циклов: вместо логически последовательного выполнения
нескольких циклов задается, когда это возможно, цикл с общими вы-
числениями;
2. чистка цикла: вынесение из цикла вычислений, которые на всех ите-
рациях оказываются одинаковыми;
3. повышение точности за счет преобразования формул для вычислений.
1
4. знакопеременное суммирование. Существует две схемы: умножение на
−1 и использование знакового флага (
F =-F;
).
7.2.2. Фильтрация потока
Вообще говоря, использование рекуррентной генерации предпочтитель-
нее по сравнению с функциональной, однако далеко не всегда это возможно.
Пример 7.2.3. Пусть требуется напечатать N первых простых чисел (т. е.
делящихся нацело только на себя и на единицу). Функциональная генера-
ция для решения задачи неприменима, так как не существует просто опи-
сываемой функции, вычисляющей простое число по его номеру. Для реше-
ния данной задачи можно воспользоваться следующим приемом: во-первых,
заменить алгоритмически трудную генерацию последовательности простых
чисел генерацией охватывающего, включающего потока (мы будем генери-
ровать нечетные числа), и во-вторых, встроить в обработку фильтрацию: ис-
ключение составных чисел. В программе
Prime_Numbers_1
фильтрация за-
дается как локальная потоковая обработка, в ходе которой проверяется, де-
лится ли анализируемое число на какое-либо из предшествующих чисел.
1
Нужно помнить, что математические эквивалентные преобразования и изоморфизмы
структур являются важнейшим компонентом культуры программиста. Переход к эквива-
лентной формулировке в математике соответствует переходу к другому представлению дан-
ных либо действий в программировании. Выигрыш, получаемый за счет того, что приме-
няется лучшая математическая формулировка, часто в порядки раз превышает выигрыш от
оптимизации самой программы.