Связь и интернет Архив Программирование
   
Сделать стартовойСделать закладку            
   ПОИСК  
   
Главная / Pascal и Delphi / Иллюстрированный самоучитель по Delphi 6 / Часть II . Язык Object Pascal /
8  Perl
8  PHP
8  JavaScript
8  HTML
8  DHTML
8  XML
8  CSS
8  C / C++
8  Pascal и Delphi
8  Турбо Ассемблер
8  MySQL
8  CASE-технологии
8  Алгоритмы
8  Python
8  Обратная связь
8  Гостевая книга
Новости о мире


Типизированные константы и инициированные переменные - Программирование от RIN.RU
Типизированные константы и инициированные переменные

В Object Pascal допускается использование типизированных констант. Они задаются в разделе объявления констант следующим образом:


<идентификатор> : <тип> = <значение>


Здесь <идентификатор> - идентификатор константы; <тип> - тип константы; <значение> - значение константы.


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


Типизированная константа приобретает указанное в ее объявлении значение, т. е. инициируется, лишь один раз: к моменту начала работы программы. При повторном входе в блок (процедуру или функцию), в котором она объявлена, инициация типизированной константы не производится, и она сохраняет то значение, которое имела к моменту выхода из блока.


Типизированные константы могут быть любого типа, кроме вариантов, файлов, объектов и классов. Нельзя также объявить типизированную константу-запись, если хотя бы одно из ее полей является полем файлового типа, вариантом, объектом или классом.


Типизированную константу нельзя использовать в качестве значения при объявлении других констант или границ типа-диапазона.


Константы простых типов и типа string


Объявление таких констант обычно не вызывает трудностей, так как в качестве их значения используются нетипизированные константы или их идентификаторы.


Примеры объявлений:


type
colors = (white, red, black);
{ ----- Правильные объявления: ----- }
const
CurrCol colors = red;
Name String = 'Вирт H.' ;
Year Word = 1989;
X Real = 0.1;
Min Integer =0;
Max Integer = 10;
Days 1..31 = 1;
Answer Char = 'Y';
{----- Неправильные объявления: ----- }


Mass : array [Min..Max] of Real;
{Нельзя использовать типизированные константы в качестве границ диапазона}
a,b,c : Byte =0;
{Нельзя использовать список идентификаторов}




Константы-массивы


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


type
colors = (white, red, black) ;
const
ColStr : array [colors] of String [5] =('white', 'red', 'blak');
Vector : array [1..5] of Byte = (0,0,0,0,0);


При объявлении массива символов можно использовать то обстоятельство, что все символьные массивы и строки в Object Pascal хранятся в упакованном формате, поэтому в качестве значения массива-константы типа char допускается задание символьной строки соответствующей длины. Два следующих объявления идентичны:


const
Digit : array [0..9] of Char = ('0', '1', '2', ' 3 ', ' 4', '5', '6', '7', '8', '9');
DigChr: array [0..9] of Char = '0123456789';


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


Следующая программа выведет в компонент mmoutput три строки с монотонно увеличивающимися целыми числами:


Procedure TfmExample.bbRunClick(Sender: TObject);
var
i, j, k, 1 : Byte;
S: String;
const
Matr : array [1..3, 1..5] of Byte = (0, 1, 2, 3, 4), (5, 6, 7, 8, 9), (10,11,12,13,14));
Cube : array [0..1, 0..1, 0..2] of Integer = (((О ,1 ,2 ),(3 ,4 ,5 )), ((6 ,7 ,8 ),(9 ,10,11)));
Mas4 : array [0..1, 0..1, 0..1, 0..1] of Word = ((((О ,1 ),(2 ,3 )), ((4 ,5 ), (6 ,7 ))), (((8 ,9 ), (10,11)), ((12,13), (14,15))));


begin
S:=' ';
for i := I to 3 do for j := 1 to 5 do
S := S + IntToStr(Matr[i,j]) +' ';
mmOutput.Lines.Add(S);
S: = '';
for i := 0 to 1 do for j := 0 to 1 do
for k := 0 to 2 do
S := S + IntToStr(Matr[i,j,k]) +' ';
mmOutput.Lines.Add(S);
S:=''; for i := 0 to 1 do
for j := 0 to 1 do
for k := 0 to 1 do
for l := 0 to 1 do
S := S + IntToStr(mas4[i,j,k,l]:3);
mmOutput.Lines.Add(S) ;
end;


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


Константы-записи


Определение константы-записи имеет следующий вид:


<идентификатор> : <тип> = (<сп.знач.полей>)


Здесь <идентификатор> - идентификатор константы; <тип> - тип записи; <сп. знач. полей> - список значений полей.


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


type
Point = record
X, Y : Real
end;


Vect = array [0..1] of Point;
Month = (Jan, Feb, Mar, Apr, May, Jun, Jly, Aug, Sep, Oct, Nov, Dec) ;
Date = record
D : 1..31;
M : month;
Y : 1900..1999 end;


const
Origon : Point = (X : 0; Y : -1) ;
Line : Vector = ((X : -3.1; Y : 1.5), (X : 5.9; Y : 3.0));
SomeDay : Date = (D : 16; M : May; Y : 1997);


Поля должны указываться в той последовательности, в какой они перечислены в объявлении типа. Если в записи используется хотя бы одно поле файлового типа, такую запись нельзя объявить типизированной константой. Для записей с вариантными полями указывается только один из возможных вариантов констант. Например:


type
Forma = record
case Boolean of
True : (Birthplace : String [40]);
False : (Country : String [20];
EntryPort : String [20];
EntryDate : array [1..3] of Word;
Count : Word)
end;
const
Percon1 : Forma = (Country : 'Норвегия';
EntryPort : 'Мурманск';
EntryDate : (16, 3, 89);
Count : 12);
Percon2 : Forma = (Birthplace : 'Москва');




Константы-множества


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


type
Days = set of 1..31;
Digc = set of ' 0 ' . . ' 9 ';
Error = set of 1..24;
const
WorkDays : Days = [1..5, 8..12, 15..19, 22..26, 29, 30];
EvenDigits: Digc = ['0', '2', '4', '6', '8'];
ErrorFlag : Error= [];




Константы-указатели


Единственным значением типизированной константы-указателя может быть только nil, например:


const pR : ^Real = NIL;


Инициация переменных


Во всех 32-разрядных версиях Delphi при объявлении глобальных переменных разрешается одновременно присваивать им значения (инициировать). Речь идет о глобальных переменных, объявляемых в интерфейсной или исполняемой частях модулей (переменные, объявляемые в теле процедуры, называются локальными, их инициировать нельзя).


Инициированная переменная получает присвоенное ей значение один раз - в момент старта программы; в дальнейшем она хранит последнее присвоенное ей значение. Пример инициации переменной:


unit Unit1.


implementation
var
MyVar: Integer = 10;
end.


Инициировать переменные следует с учетом тех же ограничений и по тем же правилам, что и типизированные константы.



 8  Комментарии к статье  8 8  Обсудить в чате

 
  
  
    Copyright ©  RIN 2003 - 2004      * Обратная связь