Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Справочник Pascal ABC.doc
Скачиваний:
66
Добавлен:
07.11.2018
Размер:
985.6 Кб
Скачать

Область действия идентификатора

Основная программа, процедура и функция состоят из заголовка и блока. Блоком называется раздел описаний, после которого следуют операторы, заключенные в операторные скобки begin/end.

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

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

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

Идентификатор с тем же именем, определенный во вложенном пространстве имен, скрывает идентификатор, определенный во внешнем пространстве имен. Например, в коде

var i: integer;

procedure p; var i: integer; begin   i:=5; end;

значение 5 будет присвоено переменной i, описанной в процедуре p; внутри же процедуры p сослаться на глобальную переменную i невозможно.

Аналогичная ситуация имеет место и в производных классах: в них можно определять поля с теми же именами, что и в базовых классах, но тогда ссылаться на поле базового класса из метода производного класса нельзя. Однако, можно ссылаться на метод базового класса из метода производного класса, используя служебное слово inherited:

type   A=class     i: integer;     procedure p;     begin       i:=5;     end;   end;   B=class(A)     i: integer;     procedure p;     begin       i:=5;       inherited p;     end;   end;

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

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

uses unit1,unit2; begin   i:=2; end.

описание переменной i будет искаться вначале в основной программе, затем в модуле unit2, затем в модуле unit1. При этом в разных модулях могут быть описаны разные переменные i. Данная ситуация означает, что unit1 образует внешнее пространство имен, пространство имен unit2 в него непосредственно вложено, а пространство имен основной программы вложено в unit2.

Ввод и вывод. Форматы вывода

Для вывода в окно вывода используются стандартные процедуры write и writeln. Они могут вызываться как без параметров, так и со списком параметров. Параметры в списке перечисляются через запятую и должны иметь простой тип (кроме перечислимого типа и интервального типа, построенного на базе перечислимого), либо тип string, либо тип указателя. Процедура writeln после вывода своих параметров осуществляет переход на следующую строку.

В процедурах вывода write и writeln после каждого выводимого значения типа может указываться формат вывода, представляющий собой двоеточие, после которого следует целое число или выражение. Это число или выражение задает ширину поля вывода, то есть количество позиций, отводимых под выводимое значение. Если длина выводимого значения меньше ширины поля вывода, то выводимый текст дополняется слева пробелами до нужной ширины; в результате выводимое значение выравнивается по правому краю. Если длина выводимого значения больше ширины поля вывода, то формат вывода игнорируется. Вещественные и комплексные значения с форматом вывода вида :m всегда выводятся в экспоненциальной форме.

Например, если a, b - целые переменные, то при выполнении операторов

a:=-2437; b:=13555; writeln(a:6,'Привет!':9); writeln(b:1);

в окно вывода будет выведен следующий текст:

 -2437  Привет! 13555

Для вещественных и комплексных значений можно также использовать формат :m:n, где m и n - целые значения. Значение m задает ширину поля вывода, а значение n  количество знаков после десятичной точки. Например:

writeln(-14.859:10:3); // ___-14.859 writeln(-14.859:10:5); // _-14.85900 writeln(-14.859:10:2); // ____-14.86 writeln(-14.859:10:0); // _______-15 writeln(-14.859:10:7); // -14.8590000 writeln((0,1):10:1);   // _(0.0,1.0)

(здесь символом _ изображены пробелы).

Для ввода с клавиатуры используются стандартные процедуры read и readln. Они могут вызываться как без параметров, так и со списком параметров. Параметры в списке перечисляются через запятую и должны быть переменными простого типа (кроме перечислимого типа и интервального типа, построенного на базе перечислимого), либо типа string. Процедура readln после ввода пропускает данные до конца текущей строки ввода.

Процедуры write, writeln, read, readln - единственные, для которых можно указывать список параметров произвольной длины.

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

writeln(f,'abc',1,True,2.4);

Операторы PASCAL ABC