
- •Этапы жизненного цикла программы:
- •Основные характеристики программного продукта:
- •Операции над множествами:
- •Типы файлов. Организация доступа к файлам. Стандартные процедуры и функции для файлов разного типа.
- •Описание такого указателя имеет вид:
- •В Паскале определены стандартные функции для работы с указателями:
- •Структуры данных на основе указателей.
- •Полиморфизм.
- •Пример события в Object Pascal:
Типы файлов. Организация доступа к файлам. Стандартные процедуры и функции для файлов разного типа.
Файл – это область памяти на внешнем носителе в которой хранится некоторая информация. В языке Pascal файл представляет собой последовательность элементов одного типа.
По способу доступа к элементам различают файлы последовательного и прямого доступа.
Файлом последовательного доступа называют файл, к элементам которого доступ выполняется в той же последовательности, в какой они записывались. Для поиска нужного элемента в этом случае необходимо перемещать указатель обработки до тех пор, пока он не будет помещен на искомый элемент. Для таких файлов запрещено совмещение чтения и записи данных.
Файл прямого доступа – это файл, доступ к элементам которого осуществляется по их адресу (номеру). Таким образом, при поиске нужного элемента достаточно указать номер его позиции, что существенно ускоряет процесс. Для файла прямого доступа допустимо совмещение записи и считывания данных.
Стандартные процедуры и функции над файлами:
Assign(var f; st:string) – связь переменной файлового типа с файлом на диске.
ReSet (var f) – открытие файла для чтения.
ReWrite(var f) – открытие файла для записи.
Read(var f; c1,c2…) – чтение одной или нескольких переменных из файла.
Write(var f; c1,c2…) – запись одной или нескольких переменных в файл.
Close(var f) – закрытие файла.
EOF (var f):Boolean – определение конца файла.
Стандартные процедуры и функции обслуживания файлов:
ReName(var f; name:string) – переименование файла.
Erase(var f) – удаление файла.
Truncate(var f) – обрезает файл, оставляя компоненты до того, на который ссылается указатель файла (кроме текстовых файлов)
Для идентификации файлов используют файловые переменные. Различают 3 типа файлов, и соответственно 3 вида описания файловых переменных:
Типизированные файлы – это файлы, все компоненты которых одного типа, заданного при объявлении файловой переменной. Компоненты нумеруются с 0. Это файлы с прямым доступом.
Файловая переменная описывается как:
Type <идентификатор>=file of <тип компонента>.
Type f=file of real;
Var f1:file of integer;
f2:f;
Для работы с типизированными файлами используют специальные процедуры и функции:
Read(var f;c1,c2,c3…) – осуществляется чтение очередных компонентов типизированного файла.
Write(var f;c1,c2,c3…) - осуществляется запись данных в типизированный файл.
Seek(var f; num:word) – осуществляется установка указателя файла на компонент файла с номером num.
FileSize(var f):longint – возвращает количество компонент файла, указанного файловой переменной.
FilePos(var f):longint – возвращает порядковый номер компонента, который будет обрабатываться следующей операцией ввода-вывода.
Пример: Программа, которая создает базу данных, хранящей сведения о студентах: их именах, номерах курса и групп. Чтобы завершить нажать пробел.
Нетипизированные файлы – это файлы, объявленные без указания типа его компонентов. Операции чтения и записи осуществляются блоками. Это файлы с прямым доступом.
Файловая переменная описывается как:
Type <идентификатор>=file.
Type f=file;
Var f1:file;
f2:f;
Для работы с нетипизированными файлами используют специальные процедуры и функции:
Для чтения и записи используются процедуры ReSet и ReWrite. Вторым параметром recsize можно указать длину записи файла в байтах.
ReSet(var f; [recsize:word]);
ReWrite(var f; [recsize:word]);
BlockRead(var f : file; var Buf; kol : word; [result : word]) – осуществляет чтение блока записей из файла в буфер. Параметр Kol задает число считываемых записей. Параметр result является необязательным и содержит после вызова процедуры число действительно считанных записей.
BlockWrite(var f : file; var Buf; kol : word; [result : word]) – осуществляет запись блока из буфера в файл.
Пример: Составить программу, которая создает массив целых чисел и записывает его в нетипизированный файл, а также вычисляет среднее арифметическое элементов файла.
Текстовый файлы – это файлы, компонентами которых являются символьные строки переменной длины, заканчивающиеся специальным маркером конца строки. Это файлы с последовательным доступом.
Файловая переменная описывается как:
Type <идентификатор>=text.
Type f=text;
Var f1:text;
f2:f;
Для работы с текстовыми файлами используют специальные процедуры и функции:
AppEnd(var f:text) – открытие файла для добавление в конец информации.
Read([var f:text];v1,v2,v3…) – читает из текстового файла значения одной или более переменных.
Если параметр f не указан, то подразумевается использование стандартной файловой переменной Input. Каждый параметр v является переменной, значение которой должно быть прочитано из файла.
ReadLn([var f:text];v1,v2,v3…) – выполняет процедуру Read, затем переходит к следующей строке файла.
Write([var f:text]; v1,v2, v3…] ) - записывает значения одной или более переменных в текстовый файл.
WriteLn([var f:text]; v1,v2, v3…] ) - выполняет процедуру Write, а затем записывает в файл метку конца строки (перевод строки).
EOLn([var f]):Boolean – возвращает TRUE, если во входном текстовом файле достигнут маркер конца строки.
SeekEOLn([var f]):Boolean – конец строки файла. Отличается от EOLn (f) тем, что стоящие в конце файла символы пробела и табуляции пропускаются.
SeekEOF([var f]):Boolean – конец файла. Отличается от EOLn (f) тем, что стоящие в конце файла символы пробела и табуляции пропускаются.
Пример: В текстовом файле f.txt через пробел и записаны целые числа. Переписать в файл f1.txt из файла f.txt все числа, за исключением максимальных (предполагается, что их может быть несколько).
Основные понятия и применение динамически распределяемой памяти. Указатели.
Статическая переменная - описанная явным образом в программе переменная, обращение к которой осуществляется по имени. Место в памяти определяется при компиляции программы.
Динамические переменные - создаются и память для них выделяется во время выполнения программы. К динамической переменной нельзя обратиться по имени. Доступ к таким переменным осуществляется с помощью указателей и ссылок.
Для работы с динамическими переменными в программе должны быть выполнены следующие действия:
• Выделение памяти под динамическую переменную;
• Инициализация указателя;
• Освобождение памяти после использования динамической переменной.
Указатель – это переменная, которая в качестве своего значения содержит адрес байта памяти. Сам указатель располагается в статической памяти.
Указатель, связанный с некоторым определенным типом данных, называют типизированным указателем.
Его описание имеет вид:
<имя_переменной>: ^ <базовый-тип>;
Каждый указатель может ссылаться на величину только определенного типа, который называется базовым для указателя.
Например:
Type A= array [1..100] of integer;
TA= ^A ; //указатель на массив
Var
P1: ^integer; //переменная типа указатель на целое число
P2: ^ real; //переменная типа указатель на вещественное число
Указатель, не связанный с каким-либо конкретным типом данных, называется нетипизированным указателем.
Для описания нетипизированного указателя в Паскале существует стандартный тип pointer.