Обработка числовой последовательности — это обработка последовательности компонентов числового массива.
Введение
В некоторых задачах используется метод последовательной обработки данных. Он необходим в следующих случаях:
- Требуется получить и обработать последовательный набор компонентов начальных данных в порядке размещения их в файле на внешних носителях.
- Все компоненты последовательности требуется использовать только один раз.
Задачи такого типа называются поочерёдной обработкой данных или однопроходными. При этом нет необходимости сохранять все компоненты, хватит одной переменной, которая будет содержать текущий компонент входной последовательности. Иногда можно использовать набор переменных с текущими компонентами, к примеру, пара или три соседних. Компоненты информационных данных последовательности могут быть следующих типов:
- Числовые данные.
- Символьные данные или строки.
- Файловые записи и тому подобное.
Последовательность начальных информационных данных может быть задана следующими способами:
- Путём указания числа компонентов.
- С указанием признака окончания последовательности.
- С обработкой до окончания входного файла.
Обработка числовой последовательности
Рассмотрим три указанных выше варианта. Первый вариант, то есть задание числовой последовательности с обозначением общего количества чисел, подлежащих вводу: $n, A_1, A_2, ..., A_n$. На языке Си данную операцию можно выполнить при помощи операторов цикла while или for:
![Программа. Автор24 — интернет-биржа студенческих работ/ ](Автор24 — интернет-биржа студенческих работ)
Здесь делается предположение, что у переменной а имеется вещественный тип (float), по этой причине выбран формат %f. В случае, когда последовательность составлена из целочисленного набора типа int, необходимо указать формат %d. Процесс обработки текущего числового значения может быть линейным, то есть он состоит из набора поочерёдно выполняемых операторов, или выполняться с ветвлениями, программируемыми при посредстве оператора if.
Далее рассмотрим второй вариант, когда последовательность задана так: $A_1, A_2, ... , A_n, W$.
Где $n$ является неизвестным заранее числом, а $W$ будет признаком окончания последовательности. Участок программы на языке Си, который выполняет эту процедуру:
Рисунок 1. Программа. Автор24 — интернет-биржа студенческих работ
Здесь W является символической константой, которая определяется при посредстве директивы #define. В случае, когда а является целочисленной величиной, требуется изменить формат в операторе ввода на %d.
В третьем варианте входная последовательность $A_1, A_2, ... , A_n$ будет продолжаться до окончания входного файла. Причём значение n заранее не задано, но известно, что n, обозначающее число компонентов, может принимать только неотрицательные значения. Признак окончания последовательности в данном варианте отсутствует. В общем виде алгоритм этого действия можно представить следующим образом:
Ввод A;
while (не окончание входного файла)
{Выполнение обработки A;
Ввод A;
}
Окончание файла, если выполняется ввод значений с клавиатуры, может задаваться клавишной комбинацией Ctrl-Z и Enter. В программе на языке Си окончание входного файла возможно определить по попытке ввести данные за пределы файла. К примеру, величиной функции scanf() будет число компонентов, которые уже введены. Если не удаётся ввод ни единого компонента, то величина функции равняется константе ЕОF, которая определена в файле stdio.h и равняется минус единице. В некоторых случаях в языке Си возможно использовать только одну операцию ввода А за счёт помещения её внутрь условия цикла:
while (ввод A и A != W)
Выполнение обработки A;
или
while (ввод A и не окончание входного файла)
Выполнение обработки A;
Часть программы на языке Си:
Рисунок 2. Программа. Автор24 — интернет-биржа студенческих работ
Рассмотрим ещё один пример. Исходными данными для программы является численная последовательность, которая является конечным рядом, составленным из действительных чисел. Число компонентов в последовательности заранее не задано и возможно их достаточно большое количество. По этой причине хранить весь этот комплект в памяти нерационально. Программа будет выполнять считывание входной последовательности из стандартного ввода, пока не появится признак окончания файла, осуществлять её обработку и вывод сформированной информации. Программа для ввода последовательности на языке С++:
Рисунок 3. Программа. Автор24 — интернет-биржа студенческих работ
В данном примере выполняется операция суммирования всех вводимых чисел с запоминанием суммы в переменной sum, а текущее значение записывается в переменную х. В программе имеется цикл while (cin> >x), выполнение которого осуществляется до тех пор, пока возможно считать очередное значение в переменную х.
В варианте программы на языке Питон, для более удобного считывания очерёдности строк из файла, используется модуль fileinput. Программа, реализующая данный алгоритм на языке Питон, приведена ниже:
Рисунок 4. Программа. Автор24 — интернет-биржа студенческих работ
В данном примере вначале инициализируется модуль fileinput, а далее выполняется цикл, где переменная line проходит по каждому компоненту списка, который создала функция fileinput.input(). Данная функция выполняет генерацию списка, компонентами которого будут строчки входного файла. Далее при выполнении цикла переменная sum увеличивается на значение line, которое преобразовано к формату действительного числа с помощью функции float.
Индуктивные функции
Функция f, которая определена на множестве не бесконечных последовательностей чисел, является индуктивной, когда имеется возможность восстановления её величины на последовательности $x_1, ..., x_n$ по величине функции f на последовательности $x_1, ..., x_{n-1}$ и по значению $x_n$ . Примером индуктивной функции может служить суммарная величина всех компонентов последовательности, а также число компонентов в последовательности. Но среднее арифметическое значение всех компонентов последовательности не может считаться индуктивной функцией, поскольку если известен последний компонент последовательности и среднее арифметическое всех компонентов за исключением последнего, то вычисление средней величины начальной последовательности нельзя выполнить, так как необходимо знать общее количество компонентов.