Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Shporgalka_informatika ANT I.docx
Скачиваний:
0
Добавлен:
01.05.2025
Размер:
2.54 Mб
Скачать

14 Вопрос массивы. Синтаксис и применение Массивы

На самом деле массив в PHP - это упорядоченное отображение, которое устанавливает соответствие между значением и ключом. Этот тип оптимизирован в нескольких направлениях, поэтому вы можете использовать его как собственно массив, список (вектор), хэш-таблицу (являющуюся реализацией карты), словарь, коллекцию, стэк, очередь и, возможно, что-то еще. Так как значением массива может быть другой массив PHP, можно также создавать деревья и многомерные массивы.

Объяснение этих структур данных выходит за рамки данного справочного руководства, но вы найдете как минимум один пример по каждой из них. За дополнительной информацией вы можете обратиться к соответствующей литературе по этой обширной теме.

Синтаксис Определение при помощи array()

Массив (тип array) может быть создан языковой конструкцией array(). language construct. В качестве параметров она принимает любое количество разделенных запятыми пар key =>value (ключ => значение).

Простые типы данных позволяют использовать в программе одиночные объекты -- числа, символы, строки и т.п. В Турбо Паскале могут использоваться также объекты, содержащие множество однотипных элементов. Это массивы -- формальное объединение нескольких однотипных объектов (чисел, символов, строк и т.п.), рассматриваемое как единое целое. К необходимости применения массивов мы приходим всякий раз, когда требуется связать и использовать целый ряд родственных величин. Например, результаты многократных замеров температуры воздуха в течение года удобно рассматривать как совокупность вещественных чисел, объединенных в один сложный объект -- массив измерений.      При описании массива необходимо указать общее число входящих в массив элементов и тип этих элементов. Например:

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.      В Турбо Паскале можно одним оператором присваивания передать все элементы одного массива другому массиву того же типа, например:

var

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.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]