Программы, как файловые процедуры


 

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

 

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

 

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

 

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

 

Определим эти понятия формально, как тип данных.

 

Множеством значений потока является множество всех последовательностей неопределенной длины < 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 – телом цикла.