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

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

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






В языке 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; просмотров: 337. Нарушение авторских прав; Мы поможем в написании вашей работы!



Расчетные и графические задания Равновесный объем - это объем, определяемый равенством спроса и предложения...

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

Обзор компонентов Multisim Компоненты – это основа любой схемы, это все элементы, из которых она состоит. Multisim оперирует с двумя категориями...

Композиция из абстрактных геометрических фигур Данная композиция состоит из линий, штриховки, абстрактных геометрических форм...

Стресс-лимитирующие факторы Поскольку в каждом реализующем факторе общего адаптацион­ного синдрома при бесконтрольном его развитии заложена потенци­альная опасность появления патогенных преобразований...

ТЕОРИЯ ЗАЩИТНЫХ МЕХАНИЗМОВ ЛИЧНОСТИ В современной психологической литературе встречаются различные термины, касающиеся феноменов защиты...

Этические проблемы проведения экспериментов на человеке и животных В настоящее время четко определены новые подходы и требования к биомедицинским исследованиям...

Методика обучения письму и письменной речи на иностранном языке в средней школе. Различают письмо и письменную речь. Письмо – объект овладения графической и орфографической системами иностранного языка для фиксации языкового и речевого материала...

Классификация холодных блюд и закусок. Урок №2 Тема: Холодные блюда и закуски. Значение холодных блюд и закусок. Классификация холодных блюд и закусок. Кулинарная обработка продуктов...

ТЕРМОДИНАМИКА БИОЛОГИЧЕСКИХ СИСТЕМ. 1. Особенности термодинамического метода изучения биологических систем. Основные понятия термодинамики. Термодинамикой называется раздел физики...

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