Главная | Обратная связь | Поможем написать вашу работу!
МегаЛекции

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

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 <тип>

Здесь

< имя типа > -- правильный идентификатор;
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 Все авторские права принадлежат авторам лекционных материалов. Обратная связь с нами...