Константы в Pascal.
Иногда, бывает так, что у нас в программе встречаются величины, которые не меняются в процессе выполнения программы (т.е. фактически они противоположность переменных). Такие величины называются константами. Константы указываются в специальном разделе, который называется Const.
В качестве констант в языке программирования Pascal могут использоваться:
- Целые числа. Они записываются со знаком или без знака и могут иметь значение от – 2 147 483 648 до + 2 147 483 647. Если константа имеет значение, выходящее за эти пределы, то в качестве значения константы необходимо использовать вещественные числа.
- Вещественные числа записываются со знаком или без знака с использованием десятичной точки или экспоненциальной части, которая начинается с символа «e», за которым следует десятичный порядок. Например, запись 3.14e5 означает 3,14*10 5 . А запись – 3.14e-4 означает – 3,14*10 -4 .
- Шестнадцатеричные числа, которые состоят из шестнадцатеричных цифр со знаком доллара «$» впереди. Диапазон шестнадцатеричных чисел — от $00000000 до $FFFFFFFF.
program number21; uses crt; Const G = 9.8; Var V, H: Real; begin clrscr; writeln (‘Введите высоту башни:’); readln (H); V:=Sqrt(2*G*H); writeln (‘Скорость падения равна ‘,V:6:3); readln end.
Строка №3. Раздел Const — это раздел, который описывает константы. Он должен находиться перед разделом Var, описывающий переменные.
Как правильно использовать константы в коде
В данном случае, в разделе описания констант мы записываем константу «G», которая будет являться именем нашей константы (имя мы придумываем сами) и указываем для нее значение 9.8. В нашей программе константа «G» будет описывать ускорение свободного падения, которое, как известно, величина постоянная и равна 9.8 м/с. Тип константы определяется автоматически.
Т.е. здесь, в отличии от раздела описания переменных Var не нужно указывать тип данных. В данном случае число 9.8 дробное, поэтому тип данных будет вещественным. Обратите внимание, что когда мы присваиваем константе какое-либо значение, то используется знак «=». Это отличает константы от переменных. Если Вы помните, то при присвоении переменной какого-либо значения используется знак «:=».
В строке №9 записываем формулу для расчета скорости свободного падения, которая, как известно, вычисляется по формуле V 2 =2gh
В появившемся окне введем высоту башни, например 10, и нажмем Enter.
Использование шестнадцатеричных чисел в качестве значения константы.
Program number22; Uses Crt; Const t = $f; Begin ClrScr; Write(t); ReadLn End.
В строке №3 записываем имя константы, которое придумываем сами. Например, назовем константу латинской буквой «t». Затем присваиваем константе значение $f. «f» в шестнадцатеричной системе счисления имеет значение 15.
В строке №6 выводим значение константы на экран.
Дополнение к материалу.
В качестве констант могут выступать не только числа. В следующих уроках вы сможете познакомиться с логическими константами, символными константами и строковыми константами.
Источник: mojainformatika.ru
То, что вы не знали о константах
Я уже не раз говорил о пользе применения констант, но решил посвятить этому вопросу отдельную статью, поскольку многие начинающие вообще не уделяют внимания константам — ну есть они и есть. А между тем.
1. Виды констант
В Lazarus/FreePascal константы бывают следующих видов:
- Обычные константы.
- Типизированные константы (не уверен, что начинающие программисты на Паскале об этом слышали, а вот для тех, кто начал с С/С++ — это самые что ни на есть обычные константы).
- Строка ресурса (а вот об этом, я почти уверен, вы даже и не слышали).
2. Объявление констант
FreePascal, как и Турбо Паскаль, поддерживает обычные и типизированные константы. Константы объявляются в разделе констант, в блоке объявления модуля, программы или класса, функции или процедуры.
program myprog; //Раздел констант в блоке объявления программы const X = 100; procedure MyProc; //Раздел констант в блоке объявления процедуры const Y = 50; begin end; var Z : WORD; //**************************************************************** // ОСНОВНАЯ ПРОГРАММА //**************************************************************** begin Z := X; Z := Y; //. Так нельзя, потому что Y — локальная константа WriteLn(‘The end. Press ENTER. ‘); ReadLn; end.
Обратите внимание на то, что при объявлении констант (как и при объявлении других сущностей), имеет значение область видимости. Поэтому в описанном выше примере компилятор выдаст ошибку (Y — это локальная константа, которая видна только внутри процедуры MyProc, а в программе эту константу компилятор “не увидит”).
3. Обычные константы
Объявления обычных констант создаются с использованием имени идентификатора, за которым следует знак “=”, а затем необязательное выражение, состоящее из допустимых комбинаций чисел, символов, логических значений или перечисляемых значений. Примерно так:
const Идентификатор = Выражение ДирективаПодсказки;
То есть объявлению константы (или раздела констант) предшествует ключевое слово const . Затем идёт Идентификатор — имя константы. А затем — Выражение , которое связывается с указанным Идентификатором. Например:
const X = 100;
Здесь Х — это Идентификатор (имя константы), а 100 — это Выражение . И теперь можно использовать эту константу, например, так:
WriteLn(X); //Выведет 100 WriteLn(100); //Выведет 100
То есть вместо обычного числа или выражения можно использовать константу, и две процедуры WriteLn в примере выше выведут одинаковое число.
Компилятор должен иметь возможность вычислять выражение в объявлении константы во время компиляции. Это означает, что большинство функций библиотеки времени выполнения нельзя использовать в объявлении константы.
Операторы, такие как +, -, *, /, not, and, or, div, mod, ord, chr, sizeof, pi, int, trunc, round, frac, odd могут быть использованы.
А вообще Выражение — это может быть любое допустимое выражение в Паскале, с учётом того, что оно может быть вычислено во время компиляции. Например, такой код не прокатит:
const XX = X * X; X = 100;
Потому что выражение XX = X * X НЕВОЗМОЖНО вычислить во время компиляции, потому как константа Х у нас объявлена ПОСЛЕ константы ХХ .
Что такое ДирективаПодсказки сегодня рассказывать не буду, потому как непосредственно к константам она отношения не имеет. Но обязательно расскажу в следующий раз.
В Паскале могут быть объявлены только константы следующих типов:
- Порядковые типы
- Множества
- Указатели (но только со значением NIL)
- Вещественные типы
- Символьные типы
- Строки
Следующие примеры являются правильными объявлениями констант:
const e = 2.7182818; //Константа вещественного типа a = 2; //Целочисленная константа c = ‘4’; //Символьная константа s = ‘This is a string’; //Строковая константа sc = chr(32); //Символьная константа ls = SizeOf(Longint); //Целочисленная константа P = NIL; //Константа-указатель SS = [1, 2]; //Множество
Присваивание значения обычной константе не допускается. Таким образом, учитывая предыдущее объявление, следующий код приведет к ошибке компилятора:
Кроме того, для строковых констант тип строки зависит от некоторых параметров компилятора. Если требуется определенный тип, следует использовать типизированную константу, как описано в следующем разделе.
4. Типизированные константы
Иногда необходимо указать тип константы, например для констант сложных (комплексных) структур, или когда значение константы надо изменить во время выполнения программы. Типизированные константы можно использовать для хранения массивов, записей, процедур.
Определение типизированных констант довольно простое:
const Идентификатор : Тип = Значение;
const TC : WORD = 200; //Типизированная константа
А потом в программе можно сделать так:
TC := 500; //Значение типизированной константы можно изменять !
То есть в отличие от обычных констант, типизированным константам может быть присвоено значение во время выполнения. Это старая концепция Turbo Pascal, которая в Lazarus/FreePascal была заменена поддержкой инициализированных переменных.
Поддержка присваивания значений типизированным константам управляется директивой , то есть она (поддержка) может быть отключена. Однако она включена по умолчанию (для совместимости с Turbo Pascal). Инициализированные переменные всегда разрешены.
ПРИМЕЧАНИЕ: Следует подчеркнуть, что типизированные константы инициализируются автоматически при запуске программы. Это также верно для локальных типизированных констант и инициализированных переменных. Локальные типизированные константы также инициализируются при запуске программы. Если их значение было изменено во время предыдущих вызовов функции, они сохранят измененное значение, то есть они не инициализируются при каждом вызове функции.
ВАЖНО!
Типизированные константы, в отличие от инициализированных переменных, можно объявлять локально в подпрограммах. Пример:
function MyFunc(n : byte) : byte; const Y = 50; //Так можно var IP = 100; //А так нельзя . begin Result := n + Y; end;
4.1. Константы-массивы
Константу-массив можно объявить, заключив значения элементов массива в скобки и разделив их запятыми. Значениями элементов массива могут быть только константные выражения. Пример:
//Константа — одномерный массив const M : array[0..7] of WORD = (0, 1, 2, 3, 4, 5, 6, 7); //Константа — двумерный массив const MM : array[1..2, 1..3] of WORD = ((1, 2, 3), (4, 5, 6));
С одномерным массивом, думаю, вопросов не возникнет. А двумерный массив-константа, созданный в примере, будет содержать такие значения:
MM[1, 1] = 1; MM[1, 2] = 2; MM[1, 3] = 3; MM[2, 1] = 4; MM[2, 2] = 5; MM[2, 3] = 6;
Теперь и с этим, надеюсь, всё понятно.
4.2. Константы-записи
Чтобы определить константу-запись, надо определить значение каждого поля так:
Присваивания значений полям разделяются точками с запятой (;). Значения должны быть константными выражениями. Поля должны быть перечислены в том же порядке, в каком они следуют в объявлении записи. Значение для поля-тэга (если такое присутствует) должно быть установлено. Если запись имеет вариантную часть, то значение может быть установлено только для варианта, определенного полем-тэгом.
//Константа-запись (объявление записи) type TKvadrat = record x1 : WORD; y1 : WORD; x2 : WORD; y2 : WORD; end; //Константа-запись (заполнение записи) const Kvadrat : TKvadrat = (x1 : 0; y1 : 0; x2 : 150; y2 : 100);
4.3. Процедурные константы
Процедурная константа должна содержать идентификатор процедуры или функции, который совместим с типом константы. Пример:
function MyFunc(n : byte) : byte; //Раздел констант в блоке объявления подпрограммы const Y = 50; begin Result := n + Y; end; type TFuncType = function(n : byte) : byte; const MyFunction : TFuncType = MyFunc;
Теперь вы можете использовать процедурную константу MyFunction в программе вместо функции MyFunc :
WriteLn(MyFunction(5));
Зачем вообще нужны такие извращения? Поверьте на слово — иногда это удобно. Но это отдельная тема — как-нибудь расскажу подробнее.