Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
TP_теория и практикум.doc
Скачиваний:
10
Добавлен:
20.08.2019
Размер:
861.7 Кб
Скачать

Типизированные файлы

Длина любого компонента типизированного файла строго постоянна, что даёт возможность доступа к каждому компоненту. Перед первым обращением к процедурам ввода – вывода указатель файла стоит в его начале и указывает на первый компонент с номером 0. После каждого чтения или записи указатель сдвигается к следующему компоненту файла. Если этих переменных в списке несколько, указатель будет смещаться после каждой операции обмена данными между переменными и дисковым файлом.

Такой способ доступа называется последовательным. В Турбо – Паскале имеется также возможность организации прямого доступа к компонентам типизированного файла (процедура Seck).

Существует ряд процедур и функций для работы с типизированными файлами.

Процедура Read (файловая переменная, список ввода).

Обеспечивает чтение очередных компонентов типизированного файла.

Здесь «список ввода» - содержит одну или более переменных такого же типа, что и компоненты файла.

Ссылочные типы (указатели) Статические и динамические переменные

До настоящего времени мы вели разговор о типах данных, служащих для представления так называемых статических переменных.

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

Все объекты, описанные в разделе переменной, являются статическими. То есть их можно проконтролировать при статическом анализе текста программы, без ее выполнения (F9). Во время компиляции программы каждой статической переменной ставится в соответствие адрес ячейки памяти. Этот адрес в дальнейшем не меняется.

Далеко не каждую задачу можно решить, используя только статические переменные.

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

Опишем клиента так:

Type Person = record

……..

……..

end{of record};

Эта запись – информация о клиенте, она может содержать любые необходимые сведения, например, фамилию, имя, отчество, возраст, марку автомобиля, характеристику неисправности, и т.д. и т. п.

Пусть заказчик предполагает длину очереди до const N = …; тогда описание самой очереди будет иметь вид:

Var L: array [1…N] of Person;

A: Person; {описание рабочей, или оперативной переменной}

I, J, K: byte; {или word, в зависимости от величены N индексы очереди}

C: integer; {или chart критерий выбора процедуры}

Программа должна обеспечивать выполнение опреций типа:

  • Поставит в очередь,

  • Обслужить, то есть изъять из очереди,

  • Показать список очереди.

Обозначения: I – первый ожидающий обслуживания,

J – последнее свободное место в очереди.

Пишем программу:

Begin

I: =1; J:=1;{очередь пуста}

B: = False; {признак пустоты очереди}

Repeart

Write (‘операция: 1 – добавить,

2 –изъять,

3 – показать,

0 – конец работы’);

readln(c);

case c of

1: dobavit; {добавить}

2: izyat; {изъять}

3: perat; {печать}

0: exit; {выход}

end {of case}

until c = 0

end.

Теперь нужно написать три процедуры, что не составить трудности, и задача будет решена.

Итак, задача решена и довольно красиво, но остаются вопросы:

  • что делать, если кто-то желает покинуть очередь изнутри, не дождавшись обслуживания,

  • как поставить «своего» клиента внутрь очереди,

  • что делать, если значение N наперед не известно?

Ответы на эти вопросы чрезвычейно просты, если воспользоваться новым для нас видом переменных – динамическим.

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

Динамические переменные не описываются явно и прямой доступ к ним по имени невозможен.

Адреса ячеек памяти, где они будут созданы, непредсказуемы и поэтому анализу не подлежат.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]