Имя и параметры | Процедура или функция | Типы параметров | Тип возвращаемого значения | Действие |
Assign(f,name) | процедура | f - переменная файлового типа, name - string | связывает файловую переменную f с файлом с именем name | |
Reset(f) | процедура | f - переменная файлового типа | открывает файл, ранее связанный с файловой переменной f с помощью процедуры Assign. Файл должен существовать на диске, в противном случае происходит ошибка времени выполнения. Текстовые файлы открываются только на чтение, типизированные файлы - на чтение и запись | |
Rewrite(f) | процедура | f - переменная файлового типа | создает и открывает новый файл, ранее связанный с файловой переменной f с помощью процедуры Assign. Если файл с указанным именем уже существует, то он удаляется, и вместо него создается новый файл. Текстовые файлы открываются только на запись, типизированные файлы - на чтение и запись | |
Append(f) | процедура | f - переменная типа Text | открывает текстовый файл на запись для добавления. Файловый указатель устанавливается в конец файла. | |
Close(f) | процедура | f - переменная файлового типа | закрывает файл | |
FileExists(name) | функция | name - string | boolean | возвращает True, если на диске имеется файл с именем name, в противном случае возвращает False |
CanCreateFile(name) | функция | name - string | boolean | возвращает True, если можно создать файл с именем name, в противном случае возвращает False |
Read(f,a,b,...) | процедура | f - переменная файлового типа, a,b - переменные простого типа, типа string или указатели | считывает значения из файла f в переменные a, b... Если файл типизированный, то типы переменных a, b... должны совпадать с базовым типом файла, а их значения считываются из файла в двоичном виде. Если файл текстовый, то переменные a, b... могут иметь различные типы, а их значения должны храниться в файле в текстовом виде | |
Write(f,a,b,...) | процедура | f - переменная файлового типа, a,b - выражения простого типа, типа string или указатели | записывает значения a, b... в файл f. Если файл типизированный, то типы значений a, b... должны быть совместимыми с базовым типом файла. Если файл текстовый, то значения a, b... выводятся в него в текстовом виде, при этом могут быть использованы форматы вывода | |
Readln(f,a,b,...) | процедура | f - переменная типа Text, a,b - переменные простого типа, типа string или указатели | считывает значения из текстового файла f в переменные a, b..., после чего пропускает символы до конца строки. Вызов readln(f) просто пропускает символы до конца строки | |
Writeln(f,a,b,...) | процедура | f - переменная типа Text, a,b - выражения простого типа, типа string или указатели | записывает значения a, b... в текстовый файл f, после чего записывает в него символ конца строки. Значения a, b... записываются в файл в текстовом виде, при этом могут быть использованы форматы вывода. Вызов writeln(f) просто записывает в файл символ конца строки | |
Eof(f) | функция | f - переменная файлового типа | boolean | возвращает True, если файловый указатель стоит на конце файла, и False в противном случае |
Eoln(f) | функция | f - переменная типа Text | boolean | возвращает True, если файловый указатель стоит на конце строки, и False в противном случае |
SeekEof(f) | функция | f - переменная типа Text | boolean | пропускает пробелы, символы табуляции и перехода на новую строку, после чего возвращает True, если файловый указатель стоит на конце файла, и False в противном случае |
SeekEoln(f) | функция | f - переменная типа Text | boolean | пропускает пробелы, символы табуляции, после чего возвращает True, если файловый указатель стоит на конце строки, и False в противном случае |
FileSize(f) | функция | f - переменная типа file | integer | возвращает количество элементов в типизированном файле |
FilePos(f) | функция | f - переменная типа file | integer | возвращает позицию файлового указателя в типизированном файле (нумерация элементов в типизированном файле начинается с нуля) |
Seek(f,n) | процедура | f - переменная типа file | перемещает файловый указатель в типизированном файле на n-тый элемент (нумерация начинается с нуля) | |
Truncate(f) | процедура | f - переменная типа file | удаляет все элементы типизированного файла с текущей позиции файлового указателя до конца файла | |
Rename(f,name) | процедура | f - переменная файлового типа, name - string | переименовывает файл, связанный с файловой переменной f. Файл должен быть закрыт | |
Erase(f) | процедура | f - переменная файлового типа | удаляет файл, связанный с файловой переменной f. Файл должен быть закрыт |
Процедурный тип
|
|
Переменные, предназначенные для хранения процедур и функций, называются процедурными. Тип процедурной переменной имеет вид:
procedure (список параметров)
или
function (список параметров): тип возвращаемого значения
При этом список параметров вместе с круглыми скобками могут отсутствовать. Например:
type proc= procedure (i: integer);
var
p1: proc;
p2: procedure;
f1: function: integer;
Процедурной переменной можно присвоить процедуру или функцию с совместимым типом:
procedure my(i: integer);
begin
...
end;
function f: integer;
begin
|
end;
...
p1:=my;
f1:=f;
После этого можно вызвать процедуру или функцию через эту процедурную переменную, пользуясь обычным синтаксисом вызова:
p1(5);
write(f1);
Обычно процедурные переменные передаются как параметры для реализации обратного вызова:
procedure foreach(var a: array [1..100] of real; n: integer; p: procedure (var r: real));
var i: integer;
begin
for i:=1 to n do
p(a[i]);
end;
procedure mult2(var r: real);
begin
r:=2*r
end;
procedure print(var r: real);
begin
write(r,' ');
end;
...
foreach(a,10,mult2); // умножение элементов массива на 2
foreach(a,10,print); // вывод элементов
Эквивалентность типов
В Pascal ABC два типа считаются эквивалентными (равными), если совпадают их описания. Например, после описаний
type Arr= array [1..100] of integer;
var
a: Arr;
b: array [1..100] of integer;
можно присваивать массивы друг другу:
a:=b;
В типах записей, помимо типов полей, должны совпадать имена:
type
rec1 = record i,j: integer end;
rec2 = record x,y: integer end;
...
var r1: rec1; r2: rec2;
...
r1:=r2; // ошибка!
В типах формальных параметров процедур и функций имена могут не совпадать:
type
proc1 = procedure (i: integer);
proc2 = procedure (x: integer);
...
var p1: proc1; p2: proc2;
...
p1:=p2; // все в порядке
Подобная расширенная трактовка эквивалентности (по сравнению с Borland Pascal и Borland Delphi) позволяет передавать параметры составного типа (массивы, записи, процедурный и указательный) в процедуры и функции, не определяя для этих параметров новый тип:
procedure foreach(var a: array [1..100] of real; n: integer; f: function (r: real): real);
var i: integer;
begin
for i:=1 to n do
a[i]:=f(a[i]);
end;