Здавалка
Главная | Обратная связь

Вопрос 33. Массивы в ООП-языках. Примеры использования.



Массив-это набор однотипных данных, который расположен в памяти последовательно, и имеет общее имя для доступа ко всем элементам.
Обращение в массиве происходит по индексу, т.е. вместо имени у каждого элемента мы будем вводить номер ячейки, в которой находится требуемая переменная. Массивы бывают статическими и динамическими. У статических массивов размер определяется до начала выполнения программы, а динамические массивы формируются по ходу выполнения программы.
Почему применяются статические массивы, ведь казалось бы намного интереснее формировать массивы по мере выполнения программы, когда известно необходимое количество элементов, которых нужно считать? Данная операция затратна, ведь сначала требуется найти подходящий по размеру кусок свободной памяти, а только затем начать его использовать. Но с ростом производительности компьютеров время, затраченное на данную операцию значительно уменьшилась и для промышленных разработок применяют в основном динамические массивы, а статические массивы применяют только для оптимизации и решения олимпиадных задач.

Массивы могут быть как одномерными, так и двумерными, то есть для того, чтобы получить доступ в одномерном массиве требуется введение одного индекса ; а для получения доступа в двумерном массиве- два индекса. Также помимо одномерных и двумерных существуют трехмерные и т.д. массивы, но обычно они не используются в промышленном программировании, а применяются при решении олимпиадных задач на динамику.
Давайте теперь поговорим о некоторых характеристиках массивов.
У массива можно обратиться к произвольному элементу за . Удаление и добавление одного элемента в массив требует .Таким образом массивы чаще всего применяются когда размер информации либо фиксирован, либо операции изменения размеров будут производиться достаточно редко.

Массив представляет собой набор однотипных переменных, заключенных в одну переменную. Каждая однотипная переменная в массиве называется элементом массива и имеет свой собственный числовой индекс в массиве. Чтобы представить себе суть массива, предлагаю изучить простой пример:

Предположим, существует некий набор чисел. Пусть это будет:

Все эти числа принадлежат одному типу - типу integer. Каждое число имеет свой собственный индекс, т.е. число 10 имеет индекс 0, число 71 имеет индекс 2. Возьмем другой пример:

Предположим, существует некий набор строковых переменных. Пусть это будет:

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

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

for(int i = 0; i < ar1.length; i++) {ar1[i] = Math.floor(Math.random() * 9);}for(int i = 0; i < ar1.length; i++) {System.out.print(ar1[i] + " ");}

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

Для обработки массивов всегда используются циклы типа «n раз» (for) потому, что нам заранее известно сколько раз должен повториться цикл (столько же раз, сколько элементов в массиве).

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

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

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

Метод "пузырька"

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

· если встречается более "легкий" (с меньшим значением) элемент, то они меняются местами;

· при встрече с более "тяжелым" элементом, последний становится "эталоном" для сравнения, и все следующие сравниваются с ним .

В результате наибольший элемент оказывается в самом верху массива.

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

Заметим, что при втором и последующих проходах, нет необходимости рассматривать ранее "всплывшие" элементы, т.к. они заведомо больше оставшихся. Другими словами, во время j-го прохода не проверяются элементы, стоящие на позициях выше j.

Теперь можно привести текст программы упорядочения массива M[1..N]:

begin for j:=1 to N-1 do for i:=1 to N-j do if M[i] > M[i+1] then swap(M[i],M[i+1]) end;

Стандартная процедура swap будет использоваться и в остальных алгоритмах сортировки для перестановки элементов (их тип мы уточнять не будем) местами:

procedure swap(var x,y: ...); var t: ...; begin t := x; x := y; y := t end;

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







©2015 arhivinfo.ru Все права принадлежат авторам размещенных материалов.