Студопедия — Массивы и переменные с индексами
Студопедия Главная Случайная страница Обратная связь

Разделы: Автомобили Астрономия Биология География Дом и сад Другие языки Другое Информатика История Культура Литература Логика Математика Медицина Металлургия Механика Образование Охрана труда Педагогика Политика Право Психология Религия Риторика Социология Спорт Строительство Технология Туризм Физика Философия Финансы Химия Черчение Экология Экономика Электроника

Массивы и переменные с индексами






В языке Object Pascal для хранения и обработки упорядоченных совокупностей данных различной природы (различных типов, в частности, векторов и матриц, элементами которых являются вещественные или целые числа) введено понятие массив.

Массив – это упорядоченная совокупность однотипных данных, которая характеризуется:

- своими именами;

- типом хранимых данных;

- нумерацией элементов;

- размером (числом хранимых элементов);

- размерностью.

В программе на языке Object Pascal (в дальнейшем просто в программе) каждый массив должен быть описан (объявлен) в разделе описания типов (после ключевого слова type(тип)) или в разделе описания переменных (после ключевого слова var).Описания записываются перед началом записи исполняемых операторов модуля.

Под типом в Object Pascal понимают множество допустимых значений, которые может иметь каждый элемент массива, множество допустимых операций для массива и формат внутреннего представления каждого элемента массива в памяти ПК.

Для компилятора описание типа массив определяет:

- объём памяти, который необходимо выделить для размещения всех элементов массива;

- набор допустимых операций, который программист может применять для элементов массива.

Каждое описание массива заканчивается символом “;” и иногда называется неисполняемым оператором (т.е. только представляющем информацию компилятору о массиве) или строкой программы.

Например,

- если необходимо описать вектор x(x1,x2 …,x20), элементами которого являются целые числа, следует после слова var записать:

 

var

x: array [1..20] of integer; (7.9)

- если необходимо описать две матрицы A={aij}, B={aij} (i=1,2, … 13; j=1,2, …, 21), элементами которых являются вещественные числа, то следует записать:

var

a,b: array [1..13, 1..21] of real; (7.10)

Как следует из примеров, описаниe массива начинается с записи имени (или нескольких имён, перечисленных через”,”), после которого через символ “:” записывается ключевое слово array (массив). За словом array в квадратных скобках указывается диапазон, т. е. нижняя и верхняя границы изменения индекса, разделённых символов.., с помощью которых компилятор определяет общее количество элементов массива. Запись <Нижняя граница>.. <Верхняя граница> образует тип-диапазон. Если массив двумерный (т. е. матрица), то тип-диапазон второго индекса записывается через,. За словом of (из) указывается тип элементов, образующих массив.

Трёхмерный массив (совокупность “плоских” матриц), элементами которого имеют строковый тип, можно описать:

var

massiv: array [1..20, 1..30, 1..7] of string;

В общем случае описание массивов задастся следующим образом:

var

<Список имён>: array [<Список типа-диапазон>] of <Тип>;

где: <Тип> – любой тип Object Pascal.

В памяти ПК элементы массива следуют друг за другом так, что при переходе от младших адресов к старшим наиболее быстро меняется самый правый индекс.

Иногда описания массивов производят в такой последовательности: в разделе type (тип) указывают имя типа, диапазоны изменения индексов и тип элементов массива, а затем в разделе var указывают конкретные имена массивов (переменных, имеющих тип массив).

Например, описание массивов в примерах (9), (10) можно выполнить следующим образом:

type

vector = array [1..20] of integer;

matr = array [1...13, 1...21] of real;

var

x: vector;

a, b: matr;

Доступ к элементам массива осуществляется по индексу (номеру). Этот индекс указывается в квадратных скобках сразу за именем массива (такое действие называется индексированием). Запись:

<Имя массива> [<Список индексов>]

называется переменной с индексом, где <Список индексов> – один или несколько индексов, перечисленных через ”,”.

Переменная с индексами именует значение, являющееся одним элементом массива. Элемент массива, именуемый данной переменной с индексами, определяется текущими значениями индексов этой переменной. Каждый индекс по своему смыслу принимает целочисленное значение, т.е в простейшем случае может иметь тип integer(целый).

Примеры:

1. Значением переменной а [2,3] является элемент матрицы а23;

2. Значение переменной а[i,j] определяется текущими значениями i и j;

3. Для получения вещественной матрицы В={bij} (i,j=1,2,…7) каждый элемент, который равен 0 необходимо:

- в разделе описания переменных дать описание двухмерного массива с именем b и двух переменных целого типа i,j:

var

b: array [1..7,1..7] of real;

i,j: integer;

- в разделе реализации (после ключевого слова implementation (реализация)) в нужном месте записать операторы цикла, в которых оператором присваивания каждому элементу массива b присваивается значение 0.0:

for i:=1 to 7 do

for j:=1 to 7 do

b[i,j]:=0.0;

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

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

Описание (объявление) массива содержит только его имя и тип элементов, при этом компилятором не выделяется память для элементов массива.

Например;

-описание вещественного вектора а(а12,…аn) может выглядеть так:

var

a:array of real;

- описание вещественных матриц B={bij} и C={cij}(i=1,2,…m; j=1,2,…n)

может выглядеть:

var

b, c: array of array of real;

Это описание в переводе можно читать так: b и с – это массивы из массивов, элементами которых является вещественный тип.

Для выделения компилятором памяти для элементов динамических массивов следует вызвать стандартную подпрограмму SetLength операторами:

SetLength(а,10);

которая выделит для массива a место в памяти под 10 элементов и задаст нулевые значения всех элементов;

SetLength(b,7,8);

которая выделит для массива b место в памяти под 7*8=56 элементов и задаёт нулевые значения всех элементов;

SetLength(с,10,5);

которая выделит для массива с место в памяти под 10*5=50 элементов и задаст нулевые значения всех элементов;

Поскольку индексы динамического массива – всегда целые числа, начинающиеся с 0, то:

массив а содержит элементы от а[0] до а[9];

массив b содержит 7 строк с нумерацией от 0 до 6 и 8 столбцов с нумерацией от 0 до 7;

массив с содержит 10 строк с нумерацией от 0 до 9 и 5 столбцов с нумерацией от 0 до 4.

Доступ к элементам динамических массивов осуществляется так же, как и для статических массивов. Например,

  1. Значением переменной а[0] является первый элемент а1, значением а[9] – последний элемент а10 вектора a.
  2. Значением переменной b[3,6] является элемент матрицы В, находящийся на пересечении 4-ой строки и 7-го столбца, т.е. b47.
  3. Значением переменной c[3,2] является элемент c43.

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

Удалить из памяти динамический массив можно одним из 3-х способов:

-оператором присваивания:

a:=nil;

...

т.е. массиву а присвоить значение nil(ничего);

-вызвать стандартную процедуру Finalize оператором

Finalize(a);

-вызвать стандартную процедуру SetLengthоператором

SetLength(a,0);

 







Дата добавления: 2015-10-02; просмотров: 330. Нарушение авторских прав; Мы поможем в написании вашей работы!



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

Практические расчеты на срез и смятие При изучении темы обратите внимание на основные расчетные предпосылки и условности расчета...

Функция спроса населения на данный товар Функция спроса населения на данный товар: Qd=7-Р. Функция предложения: Qs= -5+2Р,где...

Аальтернативная стоимость. Кривая производственных возможностей В экономике Буридании есть 100 ед. труда с производительностью 4 м ткани или 2 кг мяса...

Выработка навыка зеркального письма (динамический стереотип) Цель работы: Проследить особенности образования любого навыка (динамического стереотипа) на примере выработки навыка зеркального письма...

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

Правила наложения мягкой бинтовой повязки 1. Во время наложения повязки больному (раненому) следует придать удобное положение: он должен удобно сидеть или лежать...

Кишечный шов (Ламбера, Альберта, Шмидена, Матешука) Кишечный шов– это способ соединения кишечной стенки. В основе кишечного шва лежит принцип футлярного строения кишечной стенки...

Принципы резекции желудка по типу Бильрот 1, Бильрот 2; операция Гофмейстера-Финстерера. Гастрэктомия Резекция желудка – удаление части желудка: а) дистальная – удаляют 2/3 желудка б) проксимальная – удаляют 95% желудка. Показания...

Ваготомия. Дренирующие операции Ваготомия – денервация зон желудка, секретирующих соляную кислоту, путем пересечения блуждающих нервов или их ветвей...

Studopedia.info - Студопедия - 2014-2024 год . (0.011 сек.) русская версия | украинская версия