Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
на печать.docx
Скачиваний:
0
Добавлен:
01.07.2025
Размер:
102.77 Кб
Скачать
  1. Типы файлов. Организация доступа к файлам. Стандартные процедуры и функции для файлов разного типа.

Файл – это область памяти на внешнем носителе в которой хранится некоторая информация. В языке Pascal файл представляет собой последовательность элементов одного типа.

По способу доступа к элементам различают файлы последовательного и прямого доступа.

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

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

Стандартные процедуры и функции над файлами:

  1. Assign(var f; st:string) – связь переменной файлового типа с файлом на диске.

  2. ReSet (var f) – открытие файла для чтения.

  3. ReWrite(var f) – открытие файла для записи.

  4. Read(var f; c1,c2…) – чтение одной или нескольких переменных из файла.

  5. Write(var f; c1,c2…) – запись одной или нескольких переменных в файл.

  6. Close(var f) – закрытие файла.

  7. EOF (var f):Boolean – определение конца файла.

Стандартные процедуры и функции обслуживания файлов:

  1. ReName(var f; name:string) – переименование файла.

  2. Erase(var f) – удаление файла.

  3. Truncate(var f) – обрезает файл, оставляя компоненты до того, на который ссылается указатель файла (кроме текстовых файлов)

Для идентификации файлов используют файловые переменные. Различают 3 типа файлов, и соответственно 3 вида описания файловых переменных:

  1. Типизированные файлы – это файлы, все компоненты которых одного типа, заданного при объявлении файловой переменной. Компоненты нумеруются с 0. Это файлы с прямым доступом.

Файловая переменная описывается как:

Type <идентификатор>=file of <тип компонента>.

Type f=file of real;

Var f1:file of integer;

f2:f;

Для работы с типизированными файлами используют специальные процедуры и функции:

  1. Read(var f;c1,c2,c3…) – осуществляется чтение очередных компонентов типизированного файла.

  2. Write(var f;c1,c2,c3…) - осуществляется запись данных в типизированный файл.

  3. Seek(var f; num:word) – осуществляется установка указателя файла на компонент файла с номером num.

  4. FileSize(var f):longint – возвращает количество компонент файла, указанного файловой переменной.

  5. FilePos(var f):longint – возвращает порядковый номер компонента, который будет обрабатываться следующей операцией ввода-вывода.

Пример: Программа, которая создает базу данных, хранящей сведения о студентах: их именах, номерах курса и групп. Чтобы завершить нажать пробел.

  1. Нетипизированные файлы – это файлы, объявленные без указания типа его компонентов. Операции чтения и записи осуществляются блоками. Это файлы с прямым доступом.

Файловая переменная описывается как:

Type <идентификатор>=file.

Type f=file;

Var f1:file;

f2:f;

Для работы с нетипизированными файлами используют специальные процедуры и функции:

  1. Для чтения и записи используются процедуры ReSet и ReWrite. Вторым параметром recsize можно указать длину записи файла в байтах.

ReSet(var f; [recsize:word]);

ReWrite(var f; [recsize:word]);

  1. BlockRead(var f : file; var Buf; kol : word; [result : word]) – осуществляет чтение блока записей из файла в буфер. Параметр Kol задает число считываемых записей. Параметр result является необязательным и содержит после вызова процедуры число действительно считанных записей.

  2. BlockWrite(var f : file; var Buf; kol : word; [result : word]) – осуществляет запись блока из буфера в файл.

Пример: Составить программу, которая создает массив целых чисел и записывает его в нетипизированный файл, а также вычисляет среднее арифметическое элементов файла.

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

Файловая переменная описывается как:

Type <идентификатор>=text.

Type f=text;

Var f1:text;

f2:f;

Для работы с текстовыми файлами используют специальные процедуры и функции:

  1. AppEnd(var f:text) – открытие файла для добавление в конец информации.

  2. Read([var f:text];v1,v2,v3…) – читает из текстового файла значения одной или более переменных.

Если параметр f не указан, то подразумевается использование стандартной файловой переменной Input. Каждый параметр v является переменной, значение которой должно быть прочитано из файла.

  1. ReadLn([var f:text];v1,v2,v3…) – выполняет процедуру Read, затем переходит к следующей строке файла.

  2. Write([var f:text]; v1,v2, v3…] ) - записывает значения одной или более переменных в текстовый файл.

  3. WriteLn([var f:text]; v1,v2, v3…] ) - выполняет процедуру Write, а затем записывает в файл метку конца строки (перевод строки).

  4. EOLn([var f]):Boolean – возвращает TRUE, если во входном текстовом файле достигнут маркер конца строки.

  5. SeekEOLn([var f]):Boolean – конец строки файла. Отличается от EOLn (f) тем, что стоящие в конце файла символы пробела и табуляции пропускаются.

  6. SeekEOF([var f]):Boolean – конец файла. Отличается от EOLn (f) тем, что стоящие в конце файла символы пробела и табуляции пропускаются.

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

  1. Основные понятия и применение динамически распределяемой памяти. Указатели.

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

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

Для работы с динамическими переменными в программе должны быть выполнены следующие действия:

• Выделение памяти под динамическую переменную;

• Инициализация указателя;

• Освобождение памяти после использования динамической переменной.

Указательэто переменная, которая в качестве своего значения содержит адрес байта памяти. Сам указатель располагается в статической памяти.

Указатель, связанный с некоторым определенным типом данных, называют типизированным указателем.

Его описание имеет вид:

<имя_переменной>: ^ <базовый-тип>;

Каждый указатель может ссылаться на величину только определенного типа, который называется базовым для указателя.

Например:

Type A= array [1..100] of integer;

TA= ^A ; //указатель на массив

Var

P1: ^integer; //переменная типа указатель на целое число

P2: ^ real; //переменная типа указатель на вещественное число

Указатель, не связанный с каким-либо конкретным типом данных, называется нетипизированным указателем.

Для описания нетипизированного указателя в Паскале существует стандартный тип pointer.