Что такое индификатор в паскале абс
Перейти к содержимому

Что такое индификатор в паскале абс

  • автор:

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

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

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

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

Кроме этого, имеются переменные, определенные в блоке и связанные с некоторыми конструкциями ( for , foreach ). В этом случае действие переменной i простирается до конца соответствующей конструкции. Так, следующий код корректен:

var a: array of integer := (3,5,7);
for
i: integer := 1 to 9 do
write(a[i]);
foreach i: integer in a do
write(i);

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

var i: integer;

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

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

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

var i: integer;
begin
var i: integer; // ошибка
end.

В производных классах, напротив, можно определять члены с теми же именами, что и в базовых классах, при этом их имена скрывают соответствующие имена в базовых классах. Для обращения к одноименному члену базового класса из метода производного класса используется ключевое слово 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;

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

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

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

Если в последнем примере оба модуля — unit1 и unit2 — определяют переменные id , то рекомендуется уточнять имя переменной именем модуля, используя конструкцию ИмяМодуля . Имя:

Идентификаторы и ключевые слова

Идентификаторы служат в качестве имен программ, модулей, процедур, функций, типов, переменных и констант. Идентификатором считается любая последовательность латинских букв или цифр, начинающаяся с буквы. Буквой считается также символ подчеркивания » _ «.

Например, a1 , _h , b123 — идентификаторы, а 1a — нет.

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

and array as auto begin case class const constructor destructor div do downto else end event except extensionmethod file finalization finally for foreach function goto if implementation in inherited initialization interface is label lock loop mod nil not of operator or procedure program property raise record repeat sealed set sequence shl shr sizeof template then to try type typeof until uses using var where while with xor

Ряд слов является контекстно ключевыми (они являются ключевыми только в некотором контексте):

abstract default external forward internal on overload override params private protected public read reintroduce unit virtual write

Контекстно ключевые слова могут использоваться в качестве имен.

Некоторые ключевые слова совпадают с важнейшими именами платформы .NET. Поэтому в PascalABC.NET предусмотрена возможность использовать эти имена без конфликтов с ключевыми словами.

Первый способ состоит в использовании квалифицированного имени. Например:

В этом контексте слово Array является именем внутри пространства имен System , и конфликта с ключевым словом array нет.

Второй способ состоит в использовании специального символа & перед именем. В этом случае имя может совпадать с ключевым словом. Например:

В паскале ABC пишен «неизвестный идентификатор detect. Что делать?

Скорее всего, это сообщение означает «Обнаружен неизвестный идентификатор». Это происходит если Вы используете графические команды, но не подключили модуль GraphABC. Этот модуль подключается после названия программы, перед разделом описания переменных Var. Для подключения напишите
uses GraphABC;
Var.
begin
.

Остальные ответы

Почти так же. В смысле, что все эти переменные типа detect вообще не нужны и в PascalABC не описаны и не используются. В нем не требуется инициализация графического режима.

надо писать большими буквами DETECT, и подключать uses graph;
насчет паскаля ABC, там граф. режим сам подключается, наверно.

Просто в отмеченной красным цветом строчке ты забыл поставить пробел.
Например:
var a,b,S,P,:(пробел) integer; (либо забыл точку с запитой)

PascalABC почему компилятор обижается на идентификатор power и скобоку?

6408f20caabf4892809054.jpeg

Задали нам значит задание написать алгоритм и программу для вычисления значения выражения:
y=4*a*x -(\sqrt(5*b+x^(3)))/(6*x^(2))

переписал вроде правильно, и написал такое чудо

program yanmar;
Uses Math;
var
a, b, x, y: real;

begin
write(‘Введите значение a: ‘);
readln(a);
write(‘Введите значение b: ‘);
readln(b);
write(‘Введите значение x: ‘);
readln(x);

y := 4*a*x — sqrt((5*b+power(x,3))/(6*sqr(x)));

writeln(‘Значение выражения y = ‘, y);
end.
и после компиляции он ругается на power и вот это main.pas(14,27) Fatal: Syntax error, «)» expected but «;» found
помогите исправить код пожалуйста!!

  • Вопрос задан более года назад
  • 118 просмотров

7 комментариев

Средний 7 комментариев

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *