Вопрос 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]:
Стандартная процедура swap будет использоваться и в остальных алгоритмах сортировки для перестановки элементов (их тип мы уточнять не будем) местами:
Заметим, что если массив M — глобальный, то процедура могла бы содержать только аргументы (а не результаты). Кроме того, учитывая специфику ее ©2015 arhivinfo.ru Все права принадлежат авторам размещенных материалов.
|