- •Индексы массива
- •Представление массива в памяти
- •Пользовательский тип – массив
- •Одномерные и n - мерные массивы
- •Двумерные массивы
- •Основные алгоритмы обработки одномерных массивов
- •Ввод/вывод массива
- •Поиск максимального/минимального элемента массива
- •Вставка новых элементов в массив
- •Удаление нескольких элементов массива
- •Обработка нескольких массивов
- •Проверка соседних элементов массива
- •Сортировка массива и работа с отсортированным массивом
- •Задачи совсем простые
- •Задачи простые
- •Задачи средние
- •Задачи посложнее
Пользовательский тип – массив
В программе можно определить тип массива, для того чтобы потом его использовать для определения переменных типа массива.
Пример:
Type
Arr = array[1..20] of integer; {определили тип массива целых чисел
содержащего 20 элементов}
Var
A,B: Arr; {A и B – массивы целых чисел, содержащие по 20
элементов}
Дальше с массивами A и B можно работать как с обычными массивами:
A[3]:=2; B[4]:=A[3]; и т.д.
Кроме типа массива в программе можно определить и специальный тип для индексов. Этот тип должен быть интервальным.
Пример:
Type
IndexEl = 1 .. 20; {тип индекса элемента}
Arr = array[IndexEl] of integer; {тип массива целых чисел
содержащего 20 элементов}
Var
A,B: Arr; {A и B – массивы целых чисел, содержащие по 20
элементов}
i,j: IndexEl; {переменные, используемые для указания
индекса элемента }
Одномерные и n - мерные массивы
Все массивы, которые приведены выше, называются одномерными – у элементов одномерных массивов в квадратных скобках указывается только один индекс (у таких массивов только одно измерение).
Кроме одномерных массивов могут быть и двумерные, и трехмерные, и прочие n-мерные массивы. «Мерность» массивов определяется количеством индексов, указываемых в квадратных скобках, для того чтобы определить элемент массива.
Пример:
A[7] – A – одномерный массив
S[2,-3] – S – двумерный массив
W[1,0,0] – W – трехмерный массив
Z[-1,3,4,3,0] – Z – пятимерный массив
На практике чаще всего используются одномерные массивы, реже двумерные, и значительно реже массивы больших размерностей.
Двумерные массивы
Одномерный массив можно представить в виде строки. Например, массив целых чисел можно представить строкой целых чисел, например такой: 3 2 4 1 3. Двумерный массив можно представить в виде прямоугольной таблицы, например такой:
2 3 4 5
0 4 8 3
7 1 5 3
Чтобы определить такой массив, в программе надо написать:
Var
A: array[1..3,1..4] of integer;
Здесь в массиве A первый интервал индексов - 1..3 – обозначает индекс номера строки, а второй интервал индексов – 1..4 – обозначает индекс номера столбца. Для обращения к элементу двумерного массива необходимо в квадратных скобках сначала указать номер строки, а затем номер столбца.
Например:
Writeln(A[2,3]); {будет выведено число 8}
Writeln(A[3,1]); {будет выведено число 7}
Writeln(A[1,1]); {будет выведено число 2}
Замечание: в данных методических указаниях будут рассматриваться алгоритмы обработки только одномерных массивов.
Основные алгоритмы обработки одномерных массивов
Алгоритмы обработки массивов включают в себя, как правило, последовательную обработку каждого из элементов массива. Такая последовательная обработка называется сканированием массива, и для ее реализации удобнее всего использовать цикл for. Например, фрагмент программы, выполняющий подсчет суммы элементов массива имеет такой вид:
…
S:=0; {Значение суммы S обнуляем}
For i:=1 to N do {проходим по всем N элементам массива}
S:=S+a[i]; {прибавляя к сумме S значение i-го элемента}
…
По сложившейся традиции, переменная, используемая в качестве счетчика цикла сканирования элементов массива, называется i. Если в программе требуется не одна, а две переменные-счетчики, то им дают имена i и j. Если же требуется более двух переменных-счетчиков, то первым двум дают имена i и j, а остальным, как правило, дают тоже однобуквенные имена (например k,l,z и т.д.). Все эти переменные должны иметь тип, совместимый с типом индекса элемента массива. Всего же при работе с одномерными массивами нужны:
Константы:
Const
maxN = 20; {максимальное количество элементов
в массиве}
Типы:
Type
IndexEl = 1 .. maxN; {тип индекса элемента}
arrInt = array[IndexEl] of integer; {тип массива целых чисел}
Переменные:
Var
A:arrInt; {обрабатываемый массив}
n:integer; {количество используемых элементов в массиве}
i:IndexEl; {счетчик, используемый для сканирования}
Замечание:
1. Знаком … будем обозначать, что некоторая часть исходного текста программы пропущена.
2. Если в алгоритме будут нужны еще какие-то переменные, то они будут указаны дополнительно.