1. Текстовый var f: text;
2. типизированный var f: file of <тип компонента>;
3. Нетипизированный var f: file;
ФУНКЦИИ для работы с файлами в Паскале
Функция |
Назначение |
Пример вызова |
Значения |
eof(file) |
условие «конец файла» |
if eof(f) then ... |
[true; false] |
eoln(file) |
условие «конец строки» |
if eoln(f) then ... |
[true; false] |
filepos(file) |
получить номер позиции для обмена |
if filepos(f) > 0 then ... |
[0;n] |
filesize(file) |
получить размер файла [количество записей] |
seek(f, filesize(f)) |
[0;n] |
ioresult |
номер ошибки ввода-вывода ({$I-}) |
if ioresult = 0 then ... |
[0;n] |
ПРОЦЕДУРЫ для работы с файлами в Паскале
Процедура |
Назначение |
Пример вызова |
Тип файла |
assign(file, имя) |
назначить файл для файловой переменной |
assign(f, ’a: text’) assign(f, path) |
Все файлы |
close(file) |
закрыть файл |
close(f) |
Все файлы |
reset(file [,длина-з.]) |
открыть файл |
reset(f) |
Все файлы |
rewrite(file [,длина-з.]) |
создать файл |
rewrite(f, 1) |
Все файлы |
append(file) |
открыть для добавления |
append(f) |
Text |
read(file, данные) |
ввод данных |
read(f, mydata) |
Все файлы |
readln(file, данные) |
ввод данных, пропуск конца строки |
readln(f, a, b, c) |
Text |
write(file, данные) |
вывод данных |
write(f, mydata) |
Все файлы |
writeln(file, данные) |
вывод данных, вывод конца строки |
writeln(f, a:10:2) |
Text |
blockread(f, данные, n, результат) |
ввод блока из n записей, результат = сколько передано |
blockread(f, a, 50,p) |
File |
blockwrite(f, данные, n, результат) |
вывод блока из n записей результат = сколько передано |
blockwrite(f, a,50,p) |
File |
seek(file, номер позиции) |
установить номер позиции для обмена [0;n], n = число записей |
seek(f, 0) |
Кроме text |
9 Тип указатель в паскале
Указатели в рассматриваемых версиях Паскаля могут быть типированными или нетипированными. Типированные указатели хранят адрес ячейки данных заявленного типа, для нетипированных указателей тип содержимого не задается.
Указатели описываются с помощью инструкций:
имя_типированного_указателя: ^тип_содержимого_ячейки;
имя_нетипированного_указателя: pointer;
В качестве типа содержимого ячейки (базового типа) может быть использован любой стандартный тип или имя нестандартного типа.
Указателю может быть присвоено значение другого указателя, причем в операторе присваивания (слева и справа от знака:=) должны участвовать указатели с одинаковым базовым типом или один из указателей должен быть нетипированным.
Допустимо сравнивать указатели одного типа на равенство и неравенство.Другие операции сравнения не допустимы.
Операция @означает взятие адреса переменной: @A – адрес переменной A (или адрес первого байта массива или структуры A). Операция^ означает взятие содержимого: ^b – содержимое ячейки с адресом b (сравните положение значка ^ с тем, что используется при объявлении указателей). ^b можно использовать точно так же, как и переменную базового для указателя b типа.
Пример.
Var C: ^integer; i:integer;
Begin C:=@i; {в ячейку С записан адрес ячейки i}
C^:=1; {в ячейку с адресом С записано значение 1}…End.
10 Основные паскаль процедура для работы с динамической памятью
• Функция Addr - возвращает результат типа Pointer, в котором содержится адрес аргумента. • Addr(X), x - любой объект программы. Возвращаемый адрес совместим с указателем любого типа. Аналогично операции @. • Функция CSeg - возвращает значения хранящееся в регистре CS (в начале работы программы в CS содержится сегмент начала кода программы), результат CSeg - слово типа Word. • Процедура Dispose(x) - возвращает в кучу фрагмент динамической памяти, зарезервированный за типизированным указателем x. • Функция DSeg - возвращает значение хранящиеся в регистре DS (в начале работы в DS - сегмент начала данных программы), результат - типа Word. • Процедура FreeMem - возвращает в кучу фрагмент динамической памяти, который ранее был зарезервирован за нетипизированным указателем. FreeMem(P, Size), P - нетипизированный указатель. Size - длина фрагмента, подлежащего освобождению. • Процедура GetMem(P, Size) - резервирует память (за одно обращение не более 65521 байт), если нет свободной памяти - ошибка времени исполнения. • Процедура Mark(Ptr) запоминает текущее значение указателя кучи HeapPtr. Ptr - указатель любого типа, в нём будет возвращено HeapPtr. Используется совместно с Release для освобождения части кучи. • Функция MaxAvail - возвращает размер (в байтах) наибольшего непрерывного свободного участка кучи. Результат типа LongInt. За один вызов New или GetMem нельзя зарезервировать значение большее, чем возвращаемое этой функцией. • Процедура New(TP) - резервирует фрагмент кучи для размещения переменной. TP - типизированный указатель (за одно обращение не более 65521байт). • Функция MemAvail - возвращает размер (в байтах) общего свободного пространства кучи. Результат типа Longint. • Функция Ofs(X) - возвращает значение типа Word, содержащее смещение адреса указанного объекта. X - выражение любого типа или имя процедуры. • Функция Ptr(Seg, Ofs) - возвращает значение типа Pointer по заданному сегменту и смещению. Значение, возвращаемое функцией, совместимо с указателем любого типа. • Процедура Release(Ptr) - освобождает участок кучи. Рtr - указатель любого типа, в котором сохранено процедурой Mark значение указателя кучи. Освобожденный участок кучи - от адреса в Ptr до конца. Одновременно уничтожается список свободных фрагментов, созданных по Dispose и FreeMem. • Функция Seg(X) - возвращает значение типа Word, содержащее сегмент адреса указанного объекта. • Функция SizeOf(X) - возвращает длину (в байтах) внутреннего представления указанного объекта. X - имя переменной, функции или типа.
11 Условный оператор языка паскаль
Сокращенный вариант:
if условие then оператор; |
Полный вариант:
if условие then оператор else оператор; |
Условный оператор в Паскале — if — служит для организации хода задачи таким образом, при котором изменяется последовательность выполнения операторов в зависимости от какого-либо логического условия. Логическое условие может принимать одно из двух значений: либо true (истина), либо false (ложь), соответственно, оно может быть либо истинным, либо ложным.
12 Паскаль-операторы повторений