Константы простых типов и типа string
Var а: array [1..10] of real; b: array [0..50] of Char; с: array [-3..4] of Boolean; Как видим, при описании массива используются зарезервированные слова ARRAY и OF (массив, из). За словом ARRAY в квaдрaтныx скобкax указывается тип-диапазон, с помощью которого компилятор oпеределяет общее число элементов массива. Тип-диапазон задается левой и правой границами изменения индекса массива так что массив А состоит из 10 элементов, массив В - из 31, а массив C - из 8 элементов. За словом OF указывается тип элементов, образующих массив. Var a: array [1..10] of Integer; b: array [0..40] of Char; c: array [-2..2] of Boolean; k: Integer; Begin b[17]:= 'F'; c[-2]:= a[1] > [2]; for k:= 1 to 10 do a[k]:= 0; ..... End. В правильно составленной программе индекс не должен выходить за пределы, определенные типом-диапазоном. Например, можно использовать элементы А[1], В[38], С[0], но нельзя А[0] или С[38]. Турбо Паскаль может контролировать использование индексов в программе на этапе компиляции и на этапе счета программы. Program Average; {Программа создает массив из N случайных целых чисел, равномерно распределенных
в диапазоне от 0 до MAX_VALUE-1, подсчитывает среднее арифметическое этих чисел, а также минимальное и максимальное из них.} Const N = 1000; {Количество элементов массива} MAX_VALUE = 100+1; {Диапазон значений случайных чисел} Var m: array [1..N] of Integer; {Массив чисел} i: Integer; {Индекс массива} max, min: Integer; {Максимальное и минимальное число} s: real; {Сумма чисел} Begin {Наполняем массив случайными числами:} for i:= 1 to N do m[i]:= random(MAX_VALUE); {Задаем начальные значения переменных:} s:= 0; max: = m[1]; min:= m[1]; {Цикл вычисления суммы всех случайных чисел и поиска минимального и максимального:} for i:= 1 to N do Begin s:= s + m [i]; if m[i] < min then min:= m[i] Else if m[i] > max then max:= m[i] end; {Вычисляем среднее значение и печатаем результат:} WriteLn('Мин = ', min, ' Макс = ', max, 'Среднее = ', s/N) End. Для создания массива используется встроенная функция RANDOM (МАХ), которая возвращает случайное целое число, равномерно распределенное в диапазоне от 0 до МАХ-1 (МАХ -- параметр обращения). Массивы в Турбо Паскале во многом схожи с аналогичными типами данных в других языках программирования. Отличительная особенность массивов заключается в том, что все их компоненты суть данные одного типа (возможно, структурированного). Эти компоненты можно легко упорядочить и обеспечить доступ к любому из них простым указанием его порядкового номера, например: Type digit = array [0..9] of char; matrix = array [byte] of single; Var m: matrix; d: digit; i: integer; Begin ..... m[17]:= ord(d[i-1])/10; ..... End. Описание типа массива задается следующим образом: <имя типа> = ARRAY [ <сп.инд.типов> ] OF <тип> Здесь < имя типа > -- правильный идентификатор; В качестве индексных типов в Турбо Паскале можно использовать любые порядковые типы, кроме LONGINT и типов-диапазонов с базовым типом LONGINT.
Var a,b: array [1..10] of real; Обычно в качестве индексного типа используется тип-диапазон, в как тип, в котором задаются границы изменения индексов. Так как тип < тип >, идущий за словом OF, -- любой тип Турбо Паскаля, то он может быть, в частности, и другим массивом, например: Type mat = array [0..5] of array [-2..2] of array [char] of byte; Такую запись можно заменить более компактной: Type mat = array [0..5,-2..2,char] of byte; Глубина вложенности структурированных типов вообще, а следовательно, и массивов -- произвольная, поэтому количество элементов в списке индексных типов (размерность массива) не ограничено, однако суммарная длина внутреннего представления любого массива, как уже говорилось, не может быть больше 65520 байт. В памяти ПК элементы массива следуют друг за другом так, что при переходе от младших адресов к старшим наиболее быстро меняется самый правый индекс массива. Если, например, Var а: array [1..2,1..2] of byte; Begin а[1,1]:= 1; а[2,1]:= 2; а[1,2]:= 3; а[2,2]:= 4; end. то в памяти последовательно друг за другом будут расположены байты со значениями 1, 3, 2, 4. Это обстоятельство может оказаться важным при использовании стандартной процедуры копирования памяти MOVE. va r a,b: array [1..5] of single; Begin ..... a:= b; ..... end. После этого присваивания все пять элементов массива А получат те же значения, что и в массиве В, Однако над массивами не определены операции отношения. Нельзя, например, записать if a = b then... Сравнить два массива можно поэлементно, например: Var a,b: array [1..5] of single; eq: Boolean; i: byte; Begin ..... eq:= true; for i:= 1 to 5 do if a[i] <> b[i] then eq:= false; if eq then ..... end. ТИПИЗИРОВАННЫЕ КОНСТАНТЫ В Турбо Паскале допускается использование типизированных констант. Они задаются в разделе объявления констант следующим образом: <идентификатор>: <тип> = <значение> Здесь < идентификатор > -- идентификатор константы;
Типизированным константам можно присваивать другие значения в ходе выполнения программы, поэтому фактически они представляют собой переменные с начальными значениями. Типизированная константа приобретает указанное в ее объявлении значение, т.е. инициируется, лишь один раз: к моменту начала работы программы. При повторном входе в блок (процедуру или функцию), в котором она объявлена, инициация типизированной константы не производится и она сохраняет то значение, которое имела к моменту выхода из блока. КОНСТАНТЫ ПРОСТЫХ ТИПОВ И ТИПА STRING Объявление таких констант обычно не вызывает трудностей, так как в качестве их значения используются нетипизированные константы или их идентификаторы. Type colors = (white, red, black); const { ----- Правильные объявления ----- } CurrCol: colors = red; name: string = 'Вирт Н.'; 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; {Нельзя использовать список идентификаторов} Var NameF: string [22] = 'prog.pas'; {Нельзя объявлять типизированную константу в разделе переменных} КОНСТАНТЫ-МАССИВЫ В качестве начального значения типизированной константы-массива используется список констант, отделенных друг от друга запятыми; список заключается в круглые скобки, например: Type colors = (white, red, black); Const ColStr: array [colors] of string [5] = ('white', 'red', 'black'); vector: array [1..5] of byte = (0,0,0,0,0); При объявлении массива символов можно использовать то обстоятельство, что все символьные массивы и строки в Турбо Паскале хранятся в упакованном формате, поэтому в качестве значения массива-константы типа 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'; При объявлении многомерных констант-массивов множество констант, соответствующих каждому измерению, заключается в дополнительные круглые скобки и отделяется от соседнего множества запятыми. В результате образуются вложенные структуры множеств, причем глубина вложения должна соответствовать количеству измерений (размерности) массива. Самые внутренние множества констант связываются с изменением самого правого индекса массива. Var i, j, k, l: byte; 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 = (((0, 1, 2), (3, 4, 5)), ((6, 7, 8), (9, 10,11))); mas4: array [0..1, 0..1, 0..1, 0..1] of word = ((((0, 1), (2, 3)), ((4, 5), (6, 7))), (((8, 9), (10,11)), ((12,13), (14,15)))); Begin for i:= 1 to 3 do for j:= 1 to 5 do Write(matr[i,j]:3); writeln; for i:= 0 to 1 do for j:= 0 to 1 do for k:= 0 to 2 do Write(cube[i,j,k]:3); writeln; for i:= 0 to 1 do for j:= 0 to 1 do for k:= 0 to 1 do for 1:= 0 to 1 do Write(mas4[i,j,k,l]:3); WriteLn end. Количество переменных в списке констант должно строго соответствоват объявленной длине массива по каждому измерению.
Воспользуйтесь поиском по сайту: ©2015 - 2024 megalektsii.ru Все авторские права принадлежат авторам лекционных материалов. Обратная связь с нами...
|