Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Шпаргалка по программированию.DOC
Скачиваний:
50
Добавлен:
01.05.2014
Размер:
1.9 Mб
Скачать

Последовательности и файлы

Пусть X – произвольный алфавит (конечное множество). Рассмотрим последовательности символов из этого алфавита: x1 x2 … xn (xi  X). Пустую последовательность обозначим . Пусть:

  • (X) или для краткости просто   пространство всех конечных последовательностей над X, т. е.

(X) = {x1 x2 … xnnN0xi  X   i1..n},

при этом   ;

  • k(X) или для краткости просто k  пространство конечных последовательностей длины не менее k, т. е.

k(X) = {x1 x2 … xnn  knN0xi  X   i1..n};

таким образом,  = 0  1  2 ... .

Определим операцию postfix:   X   добавления Эл---та в конец последовательности, т. е. если   = x1 x2 … xn, то postfix(, x) = x1 x2 … xn x , а postfix(, x) = x. Иногда эту операцию удобнее записывать в инфиксной форме, используя для нее специальный знак, например «*», т. е. postfix(, x) =  * x. В этих обозначениях  * x = x1 x2 … xn x и  * x = x. Если   k, то  * x  k + 1.

Тогда конструктивно последовательность можно определить так:

1)   есть последовательность;

2) если   последовательность, то и  * x  последовательность;

3) ничто другое (кроме пп.1 и 2) не есть последовательность.

Полезно дополнительно определить следующие операции над последовательностями:

first: 1  X, rest: 1  , prefix: X    1,

и если    и   = x1 x2 … xn, то

first() = x1, rest() = x2 … xn, prefix(first(), rest()) = .

Последовательный файл (или далее просто файл) из записей типа X (file of X)  это реализация математического понятия последовательности с ограниченными способами доступа к элементам. Наглядная модель файла представлена на рис. 3.1. Положение ленты относительно головки чтения-записи определяется разбиением ее (ленты) на две части: левую L(F) и пра-

L(F)

R(F)

Лента

Головка чтения-записи

Метка конца

файла

Рис. 3.1. Наглядная модель последовательного файла

вую R(F). Кроме того, файл может находиться в одном из трех режимов: неопределенном (n), чтения (r), записи (w). Таким образом, файл можно определить как упорядоченную тройку F = (L(F), R(F), St(F)), где индикатор режимов St(F)  {nrw}. Состояние файла R(F) =  идентифицируется предописанной функцией (предикатом) Eof(F): если R(F) = , то Eof(F) = true, иначе Eof(F) = false (рис. 3.2).

F:

Eof(F) = false

F:

Eof(F) = true

Рис. 3.2. Действие функции Eof(F)

Определим основные операции над файлами.

1. Установка режима записи: Rewrite(F). Семантика этой операции задается свойством {true} Rewrite(F) {Eof(F) & (L(F) =  ) & (St(F) = w)}  и иллюстрируется на рис. 3.3.

F:

F:

Рис. 3.3. Установка режима записи Rewrite(F): слева  состояние до

операции, справа  состояние после операции

2. Запись в файл: Write(F, x). Семантика этой операции (аналога postfix) задается свойством

{(St(F) = w) & Eof(F) & (L(F) =   )}

Write(Fx);

{(St(F) = w) & Eof(F) & (L(F)=  * x )}

и иллюстрируется на рис. 3. 4.

F:

x :

F:

x:



Запись

Рис. 3.4. Запись в файл Write(Fx): слева – состояние до операции,

справа – состояние после операции

3. Установка режима чтения: Reset(F). Семантика операции задается свойством {F =   } Reset(F) {(L(F) = ) & (R(F) = ) & (St(F) = r)} и иллюстрируется на рис. 3.5.

F:

F:

Рис. 3.5. Установка режима чтения Reset(F): слева – состояние

до операции, справа – состояние после операции

F:

x:

F:

x:

Чтение

Рис. 3.6. Чтение из файла Read(Fx): слева – состояние до операции,справа –сост. после операции

4. Чтение из файла: Read(Fx). Семантика этой операции задается свойством

{(St(F) = r) & not Eof(F) & (L(F) = ) & (R(F) = )}

Read(Fx)

{(St(F) = r) & (L(F) = *first()) & (R(F) = rest()) & (x = first())}

Билет№21 Индуктив ф-ции на пространстве послед:опред,схеаа выч,Крит индуктив №21