Программы, как файловые процедуры
Традиционно, переменные в языках процедурного программирования связывают с понятием ячейки памяти, которая подразделяется на внутреннюю (оперативную) и внешнюю (файлы). Мы будем рассматривать такие хранилища информации как частный случай понятия источника и приемника потока данных, а программы – как преобразование таких потоков.
Оперативная память характеризуется высокой скоростью записи и чтения, фиксированным объемом и предназначена для временного хранения информации во время работы программы.
Файлы обеспечивают хранение больших объемов данных, предназначенных (как правило) для долговременного хранения, но обеспечивают относительно низкую скорость обмена с оперативной памятью.
Преобразование данных происходит в оперативной памяти. Перед преобразованием программы последовательно читают (копируют) входную информацию из внешнего источника, после него - записывают (копируют) результаты во внешний приемник с помощью операторов ввода-вывода – чтения и записи, соответственно.
Определим эти понятия формально, как тип данных.
Множеством значений потока является множество всех последовательностей неопределенной длины < a1,…, ai,…,an> , где ai элементы некоторого базового типа d. На каждый момент времени один из них считается текущим значением. Обозначим его через ai , а номер i назовем маркером (потока).
На входных потоках определена функция распознавания конца потока eof(f). Эта функция принимает значений true в случае, если i>n .
Оператор чтения из потока read(f,x) определяется следующим образом:
{f→<a1, …, an>, iàI, eof(f)→false}
read(f,x)
{f→<a1, …, an>, x→ai, iàI+1}
При eof(f)=true выполнение оператор read не определено.
Для файлов определен также оператор reset(f):
{} Reset(f) {ià1}
2. Иначе говоря, в любой момент времени можно возвратиться к началу файла (данные сохранятся и доступны для последующей обработки). Для потоков такой возможности может не быть (неизвестно, сохраняются ли данные); маркер принимает начальное значСоответствует определению функций разбором случаев.
Частный случай – структура укороченного условного оператора:
3. Структура цикла с предусловием
Множество трасс такой структуры описывается просто: S1(x), S1(S1(x)),… S1(S1(S1(x))),…
Результатом S(x) выполнения оператора является S1k(x), где i0 – наименьший номер такой, что условие B называют условием продолжения цикла, а оператор S – телом цикла.