Что такое двумерный и одномерный массив
Работа с массивами данных.
Одномерные и двумерные массивы
Одномерные и двумерные массивы
Количество индексов элементов массива определяет размерность массива.
В данном примере будет объявлен одномерный массив А, состоящий из 10 элементов.
В данном примере будет объявлен двумерный массив М, который можно представить в виде таблицы, состоящей из 4-х строк по 5 ячеек в каждой строке.
Содержимое элементов массива при объявлении равно нулю.
Работа с массивами
После объявления массива каждый его элемент можно обработать, указав идентификатор (имя) массива и индекс элемента в квадратных скобках. Например, запись M[2] позволяет обратиться ко второму элементу массива M.
При работе с двумерным массивом указываются два индекса. Например, запись
M[3,4] делает доступным для обработки значение элемента, находящегося в третьей строке четвертого столбца массива M.
Индексированные элементы массива называются индексированными переменными и могут быть использованы так же, как и простые переменные. Например, они могут находиться в выражениях в качестве операндов или использоваться в качестве аргументов в командах.
Присваивание значений элементам массива
Третьему элементу массива А будет присвоено значение 15.
Элементу массива М, находящемуся во второй строке четвертого столбца, будет присвоено значение 25.
Ввести значение в элемент массива можно также при помощи команды СПРОСИ.
Загрузка данных в массив
Загрузить данные в массив можно при помощи команды ЗАГРУЗИ.
Примеры для одномерного массива А.
загрузи в A
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
конец загрузки
загрузи в A
1 2 3 4 5
6 7 8 9 10
11 12 13 14 15
конец загрузки
Если данных будет недостаточно, то часть элементов останется незаполненной. Если избыточно, то они отсекутся.
Пример для двумерного массива М.
загрузи в M
15 17 25 36 24 56 78 56 36 24
56 78 56 36 24 15 17 25 36 25
15 17 25 36 24 56 78 56 36 24
78 56 36 24 15 17 17 25 36 25
36 24 56 78 24 56 78 56 36 24
39 78 56 36 24 25 15 15 89 71
15 17 25 36 24 56 78 56 36 24
78 56 36 24 15 17 17 25 36 25
36 24 56 78 24 56 78 56 36 24
39 78 56 36 24 25 15 15 89 71
конец загрузки
Заполнение массива с помощью циклов
Заполнение одномерного массив.
повторить для x от 1 до 10 <
M[x] = 555
>
Заполнение двумерного массив с помощью вложенных циклов.
повторить для x от 1 до 5 <
повторить для y от 1 до 7 <
M[x,y] = 555
>
>
Заполнение массива случайными числами
Заполнить массив случайными числами можно при помощи цикла.
Пример заполнения элементов массива А псевдослучайными целыми числами в диапазоне от 10 до 99:
массив А[100]
переменная х
повторить для х от 1 до 100 <
А[х] = Int(случайное * 89) + 10
>
Вывод значений элементов массива
На экран будет выведено значение третьего элемента одномерного массива А.
Будут выведены значения всех элементов массива А.
Вывод массива в графическом виде
Необязательные параметры и взяты в скобки. Они обеспечивают отступ от начала координат (верхнего левого угла).
Замена и копирование значений в массивах
Команда для замены во всем массиве одного значения на другое.
Команда для копирования всех значений одного массива в другой массив. Количество элементов и размерность массивов должны совпадать.
Pascal | Лекция №5
Массивы
СОДЕРЖАНИЕ:
Тип в программировании – это множество, для которого оговорен некоторый набор операций над элементами – значениями, которые могут принимать переменные этого типа. Существуют четыре стандартных типа Паскаля: типы Real, Integer (это числовые множества), тип Char (множество символов), тип Boolean. Однако в Паскале имеются средства, позволяющие определять, исходя из имеющихся типов, новые типы. Различают следующие структурированные типы данных:
В данной лекции мы подробно рассмотрим массивы.
Определение массива
Массивы, как и циклы, — величайшее изобретение программирующего человечества. Массивы приходят на помощь тогда, когда приходится иметь дело с наборами однотипных и однородных данных (например, координаты точки в двумерном, трехмерном пространстве).
Массив – это упорядоченная последовательность однотипных элементов определенной длины, имеющая общее имя. Номер элемента в последовательности называется индексом. Количество элементов в массиве не может быть изменено в процессе выполнения программы. Элементы массива размещаются в памяти последовательно и нумеруются от 1 до n, где n – их количество в массиве. К каждому элементу массива имеется прямой доступ. Это означает, что для того чтобы обратиться к какому-либо элементу массива, нет нужды перебирать все его предыдущие элементы, достаточно указать номер этого элемента.
Массив имеет следующие характеристики:
Массивы могут быть одномерными и многомерными. Но мы ограничимся рассмотрением только одномерных и двумерных массивов.
Одномерные массивы – массивы, в которых элементы пронумерованы последовательно по порядку: первый элемент, второй, третий и т.д. Для обозначения элементов одномерного массива используется один индекс.
Двумерные массивы – массивы, в которых данные условно организованы в виде таблицы (матрицы), где положение каждого элемента определяется номером строки т номером столбца. Для обозначения элементов двумерного массива используются два индекса: первый индекс для обозначения номера строки, второй индекс для обозначения номера столбца.
По аналогии с математикой одномерные числовые массивы часто называют векторами, а двумерные – матрицами.
Значения индексов можно задать непосредственно числом (прямая адресация) – A(1), A(4,2) или косвенно, указав в индексе идентификатор переменной, которая позволит вычислить индекс (косвенная адресация) – A(i), A(i, j+2).
При работе с массивами в программе они должны быть объявлены (описаны), т.е. указаны имя массива, тип элементов массива, его размерность.
При обращении к элементу массива, значение индекса которого выходит за допустимые границы, появляется сообщение об ошибке.
Одномерные массивы: описание, ввод и вывод, обработка массива
Описать массив можно двумя способами.
В разделе описания переменных мы можем описать массив следующим образом:
Здесь A – название массива;
Array – служебное слово;
n1,n2 – соответственно номер первого и последнего элемента массива;
– любой из уже изученных типов.
Количество элементов массива будет равно (n2- n1+1).
означает, что полученный массив будет состоять из 20 вещественных чисел, первое из которых будет иметь номер 1, последнее – 20. Наш массив будет иметь имя Massiv.
Описание массива заключается в создании нового оригинального типа. Для того, чтобы программист мог создавать свои новы типы в Паскале существует раздел описания типов Type. Этот раздел находится между разделом описания констант и разделом описания переменных.
После этого в разделе описания переменных мы можем описать массив, который имеет созданный нами тип, например,
В данном случае мы сначала описали новый тип Mas – массив из десяти целых чисел с номерами от 10 до 19, затем описали переменную B типа Mas.
В большинстве случаев для обработки массивов используются циклы. В цикле имеется возможность поочередно перебрать все элементы массива.
Для ввода массива с клавиатуры может быть использован цикл следующего вида: пусть имеется массив с именем A, состоящий из n элементов, тогда
В этом случае пользователь вводит через пробел n элементов массива. Для ввода элементов массива с новой строки используется оператор ReadLn. Ввод данных в массив происходит следующим образом: сначала значение счетчика цикла равно 1; выполняется операция Read (A[1]); поле чего счетчик цикла становится равным 2; выполняется операция Read (A[2])… и т.д. до значения i=n включительно.
Для вывода массива на экран используется следующий цикл:
В данном случае на экран в одну строку будут выведены все n элементов массива, после чего курсор переместится на одну строку вниз.
Как уже было сказано выше, для обработки массивов используются циклы.
Пример: пусть имеется массив M, состоящий из n элементов с номерами от 1 до n. Найти сумму элементов массива, вывести ее на экран.
Двумерные массивы: описание, ввод и вывод, обработка массива
В математике очень распространено такое понятие как матрица. Матрица – это таблица из коэффициентов A=(aij). Элементы матрицы образуют столбцы и строки. Первый индекс ( i ) указывает номер строки, второй ( j ) – номер столбца, на пересечении которых находится элемент aij.
Определим некоторые действия над матрицами:
В программировании матрицы удобно представлять с помощью двумерных массивов.
Описание двумерных массивов отличается от описания одномерных массивов только тем, что мы указываем начальное и конечное значение для обоих индексов:
Здесь n1,n2 – начальное и конечное значения первого индекса;
m1,m2 – начальное и конечное значения второго индекса.
Это массив, состоящий из 10*20*30=6000 целых чисел и занимающий в памяти 6000*2=12000 байт. В Паскале нет ограничения сверху на размерность массива. Однако в каждой конкретной реализации Паскаля ограничивается объем памяти, выделяемый под массивы. В Турбо Паскале это ограничение составляет 64 Кбайта.
В Паскале не допускается употребление динамических массивов, т.е. таких, размер которых определяется в процессе выполнения. Изменение размеров массива происходит через изменение в тексте программы и повторную компиляцию. Для упрощения таких изменений удобно определять индексные параметры в разделе констант:
Теперь для изменения размеров массива Mas и всех операторов программы, связанных с этими размерами, достаточно отредактировать только одну строку в программе – раздел констант.
Для ввода и вывода двумерных массивов используются два вложенных цикла.
Для обработки двумерных массивов также используются два вложенных цикла.
Пример: найти произведение массива A на число L.
Обр-ку дв. массива см. Рапаков стр.126!
Действия над массивом как единым целым
Такие действия допустимы лишь в двух случаях:
В обоих случаях массивы должны иметь одинаковые типы (тип индексов и тип элементов).
При выполнении операции присваивания P := Q все элементы массива P станут равны соответствующим элементам массива Q.
Как уже отмечалось, в многомерных массивах переменная с индексом может обозначать целый массив. Например,
Год | Месяц | |||||||||||
1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | |
1981 | -23 | -17 | -8 | 7 | 14 | 18 | 25 | 19 | 12 | 5 | -4 | -19 |
1982 | -17 | -10 | -3 | 6 | 8 | 13 | 28 | 24 | 6 | 2 | -13 | -20 |
… | … | … | … | … | … | … | … | … | … | … | … | … |
1990 | -10 | -15 | -4 | 9 | 13 | 17 | 23 | 20 | 10 | 8 | -14 | -20 |
если в таблице H требуется, чтобы данные за 1989г. были такими же, как и за 1981г. (девятой строке присвоить значение первой строки), то это можно делать так:
А если нужно поменять местами значения этих строк, то это делается через третью переменную того же типа:
где P описана так:
Контрольные вопросы
Одномерные и двумерные массивы
Массив это пронумерованная последовательность величин одинакового типа, обозначаемая одним именем. Элементы массива располагаются в последовательных ячейках памяти, обозначаются именем массива и индексом. Каждое из значений, составляющих массив, называется его компонентой (или элементом массива).
Массив данных в программе рассматривается как переменная структурированного типа. Массиву присваивается имя, посредством которого можно ссылаться как на массив данных в целом, так и на любую из его компонент.
Вообще, массив – однородный, упорядоченный структурированный тип данных с прямым доступом к элементам.
Переменные, представляющие компоненты массивов, называются переменными с индексами в отличие от простых переменных, представляющих в программе элементарные данные. Индекс в обозначении компонент массивов может быть константой, переменной или выражением порядкового типа (целочисленный, логический, символьный, перечислимый, диапазон).
Например, A[7] седьмой элемент массива А; D[6] шестой элемент массива D.
Для размещения массива в памяти ЭВМ отводится поле памяти, размер которого определяется типом, длиной и количеством компонент массива. В языке Pascal эта информация задается в разделе описаний. Массив описывается так:
Базовый тип элементов массива может быть любым простым или структурированным, за исключением файлового.
Кроме того, массив можно объявить с использованием собственного типа:
Заполнить массив можно следующим образом:
1) с помощью оператора присваивания. Этот способ заполнения элементов массива особенно удобен, когда между элементами существует какая-либо зависимость, например, арифметическая или геометрическая прогрессии, или элементы связаны между собой рекуррентным соотношением.
Задача 1. Заполнить одномерный массив элементами, отвечающими следующему соотношению:
Другой вариант присваивания значений элементам массива заполнение значениями, полученными с помощью датчика случайных чисел.
Задача 2. Заполнить одномерный массив с помощью датчика случайных чисел таким образом, чтобы все его элементы были различны.
Над элементами массивами чаще всего выполняются такие действия, как
б) сортировка элементов в порядке возрастания или убывания;
в) подсчет элементов в массиве, удовлетворяющих заданному условию.
Задача 3. Дан линейный массив целых чисел. Подсчитать, сколько в нем различных чисел.
Задача 4. Дан линейный массив. Упорядочить его элементы в порядке возрастания.
Если два массива являются массивами эквивалентных типов, то возможно присваивание одного массива другому. При этом все компоненты присваиваемого массива копируются в тот массив, которому присваивается значение. Типы массивов будут эквивалентными, если эти массивы описываются совместно или описываются идентификатором одного и того же типа. Например, в описании типы переменных A, B эквивалентны, и поэтому данные переменные совместимы по присваиванию; тип переменных C, D также один и тот же, и поэтому данные переменные также совместны по присваиванию. Но тип переменных C, D не эквивалентен типам переменных A, B, E, поэтому, например, A и D не совместны по присваиванию. Эти особенности необходимо учитывать при работе с массивами.
При работе с массивами целесообразно использовать процедуры и функции. Вот типовые процедуры:
Задача 5. Дан линейный массив. Найти: сумму минимального и максимального элементов; количество отрицательных элементов, стоящих на чётных местах. Изменить массив, вычеркнув из него нечетные элементы.
Например, данные о планетах Солнечной системы представлены следующей таблицей:
Планета | Расст. до Солнца | Относ. обьем | Относ. масса |
---|---|---|---|
Меркурий | 57.9 | 0.06 | 0.05 |
Венера | 108.2 | 0.92 | 0.81 |
Земля | 149.6 | 1.00 | 1.00 |
Марс | 227.9 | 0.15 | 0.11 |
Юпитер | 978.3 | 1345.00 | 318.40 |
Сатурн | 1429.3 | 767.00 | 95.20 |
Их можно занести в память компьютера, используя понятие двумерного массива. Положение элемента в массиве определяется двумя индексами. Они показывают номер строки и номер столбца. Индексы разделяются запятой. Например: A[7, 6], D[56, 47].
Заполняется двумерный массив аналогично одномерному: с клавиатуры, с помощью оператора присваивания. Например, в результате выполнения программы: элементы массива примут значения A[1, 1] = 457; A[1, 2] = 457; A[2, 1] = 458; A[2, 2] = 458; A[3, 1] = 459; A[3, 2] = 459.
При описании массива задается требуемый объем памяти под двумерный массив, указываются имя массива и в квадратных скобках диапазоны изменения индексов.
При выполнении инженерных и математических расчетов часто используются переменные более чем с двумя индексами. При решении задач на ЭВМ такие переменные представляются как компоненты соответственно трех-, четырехмерных массивов и т.д.
Однако описание массива в виде многомерной структуры делается лишь из соображений удобства программирования как результат стремления наиболее точно воспроизвести в программе объективно существующие связи между элементами данных решаемой задачи. Что же касается образа массива в памяти ЭВМ, то как одномерные, так и многомерные массивы хранятся в виде линейной последовательности своих компонент, и принципиальной разницы между одномерными и многомерными массивами в памяти ЭВМ нет. Однако порядок, в котором запоминаются элементы многомерных массивов, важно себе представлять. В большинстве алгоритмических языков реализуется общее правило, устанавливающее порядок хранения в памяти элементов массивов: элементы многомерных массивов хранятся в памяти в последовательности, соответствующей более частому изменению младших индексов.
Задача 6. Заполнить матрицу порядка n по следующему образцу:
Задача 7. Дана целочисленная квадратная матрица. Найти в каждой строке наибольший элемент и поменять его местами с элементом главной диагонали.
Одномерные и двумерные массивы (таблицы)
Массив данных в программе рассматривается как переменная структурированного типа. Массиву присваивается имя, посредством которого можно ссылаться как на массив данных в целом, так и на любую из его компонент.
Переменные, представляющие компоненты массивов, называются переменными с индексами в отличие от простых переменных, представляющих в программе элементарные данные. Индекс в обозначении компонент массивов может быть константой, переменной или выражением порядкового типа.
Если за каждым элементом массива закреплен только один его порядковый номер, то такой массив называется линейным. Вообще количество индексов элементов массива определяет размерность массива. По этом признаку массивы делятся на одномерные (линейные), двумерные, трёхмерные и т.д.
Для размещения массива в памяти ЭВМ отводится поле памяти, размер которого определяется типом, длиной и количеством компонент массива. В языке Pascal эта информация задается в разделе описаний. Массив описывается так:
имя массива : Array [начальное значение индекса..конечное значение индекса] Of базовый тип;
Например,
Var B : Array [1..5] Of Real, R : Array [1..34] Of Char;
Базовый тип элементов массива может быть любым, за исключением файлового.
Заполнить массив можно следующим образом:
1) с помощью оператора присваивания. Этот способ заполнения элементов массива особенно удобен, когда между элементами существует какая-либо зависимость, например, арифметическая или геометрическая прогрессии, или элементы связаны между собой реккурентным соотношением.
Задача 1. Заполнить одномерный массив элементами, отвечающими следующему соотношению:
Задача 2. Заполнить одномерный массив с помощью датчика случайных чисел таким образом, чтобы все его элементы были различны.
Program Vvod;
Var N, I : Integer;
A : Array [1..20] Of Integer;
Begin
Write(‘Введите количество элементов массива ‘); ReadLn(N);
FOR I := 1 TO N DO
Begin
Write(‘Введите A[‘, I, ‘] ‘); ReadLn(A[I])
End.
Над элементами массивами чаще всего выполняются такие действия, как
б) сортировка элементов в порядке возрастания или убывания;
в) подсчет элементов в массиве, удовлетворяющих заданному условию.
Cумму элементов массива можно подсчитать по формуле S=S+A[I] первоначально задав S=0. Количество элементов массива можно подсчитать по формуле К=К+1, первоначально задав К=0. Произведение элементов массива можно подсчитать по формуле P = P * A[I], первоначально задав P = 1.
Задача 3. Дан линейный массив целых чисел. Подсчитать, сколько в нем различных чисел.
Задача 4. Дан линейный массив. Упорядочить его элементы в порядке возрастания.
Если два массива являются массивами эквивалентых типов, то возможно присваивание одного массива другому. При этом все компоненты присваиваемого массива копируются в тот массив,оторому присваивается значение. Типы массивов будут эквивалентными, если эти массивы описываются совместно или описываются идентификатором одного и того же типа. Например, в описании
Type Massiv = Array[1..10] Of Real;
Var A, B : Massiv; C, D : Array[1..10] Of Real; E : Array[1..10] Of Real;
типы переменных A, B эквивалентны, и поэтому данные переменные совместимы по присваиванию; тип переменных C, D также один и тот же, и поэтому данные переменные также совместны по присваиванию. Но тип переменных C, D не эквивалентен типам переменных A, B, E, поэтому, например, A и D не совместны по присваиванию. Эти особенности необходимо учитывать при работе с массивами.
При решении практических задач часто приходится иметь дело с различными таблицами данных, математическим эквивалентом которых служат матрицы. Такой способ организации данных, при котором каждый элемент определяется номером строки и номером столбца, на пересечении которых он расположен, называется двумерным массивом или таблицей.
Например, данные о планетах Солнечной системы представлены следующей таблицей:
Планета | Расст. до Солнца | Относ. обьем | Относ. масса |
Меркурий | 57.9 | 0.06 | 0.05 |
Венера | 108.2 | 0.92 | 0.81 |
Земля | 149.6 | 1.00 | 1.00 |
Марс | 227.9 | 0.15 | 0.11 |
Юпитер | 978.3 | 1345.00 | 318.40 |
Сатурн | 1429.3 | 767.00 | 95.20 |
Их можно занести в память компьютера, используя понятие двумерного массива. Положение элемента в массиве определяется двумя индексами. Они показывают номер строки и номер столбца. Индексы разделяются запятой. Например: A[7, 6], D[56, 47].
Заполняется двумерный массив аналогично одномерному: с клавиатуры, с помощью оператора присваивания. Например, в результате выполнения программы:
Program Vvod2;
Var I, J : Integer;
A : Array [1..20, 1..20] Of Integer;
Begin
FOR I := 1 TO 3 DO
FOR J := 1 TO 2 DO A[I, J] := 456 + I
End.
элементы массива примут значения A[1, 1] = 457; A[1, 2] = 457; A[2, 1] = 458; A[2, 2] = 458; A[3, 1] = 459; A[3, 2] = 459.
При описании массива задается требуемый объем памяти под двумерный массив, указываются имя массива и в квадратных скобках диапазоны изменения индексов.
При выполнении инженерных и математических расчетов часто используются переменные более чем с двумя индексами. При решении задач на ЭВМ такие переменные представляются как компоненты соответственно трех-, четырехмерных массивов и т.д.
Однако описание массива в виде многомерной структуры делается лишь из соображений удобства программирования как результат стремления наиболее точно воспроизвести в программе объективно существующие связи между элементами данных решаемой задачи. Что же касается образа массива в памяти ЭВМ, то как одномерные, так и многомерные массивы хранятся в виде линейной последовательности своих компонент, и принципиальной разницы между одномерными и многомерными массивами в памяти ЭВМ нет. Однако порядок, в котором запоминаются элементы многомерных массивов, важно себе представлять. В большинстве алгоритмических языков реализуется общее правило, устанавливающее порядок хранения в памяти элементов массивов: элементы многомерных массивов хранятся в памяти в последовательности, соответствующей более частому изменению младших индексов.
Задача 5. Заполнить матрицу порядка n по следующему образцу:
1 | 2 | 3 | . | n-2 | n-1 | n |
2 | 1 | 2 | . | n-3 | n-2 | n-1 |
3 | 2 | 1 | . | n-4 | n-3 | n-2 |
. | . | . | . | . | . | . |
n-1 | n-2 | n-3 | . | 2 | 1 | 2 |
n | n-1 | n-2 | . | 3 | 2 | 1 |
Задача 6. Дана целочисленная квадратная матрица. Найти в каждой строке наибольший элемент и поменять его местами с элементом главной диагонали.
Program Obmen;
Var N, I, J, Max,Ind, Vsp : Integer;A : Array [1..15, 1..15] Of Integer;
Begin
WRITE(‘Введите количество элементов в массиве: ‘); READLN(N);
FOR I := 1 TO N DO
FOR J := 1 TO N DO
Begin
WRITE(‘A[‘, I, ‘,’, J, ‘] ‘); READLN(A[I, J])
End;
FOR I := 1 TO N DO
Begin
Max := A[I, 1]; Ind := 1;
FOR J := 2 TO N DO
IF A[I, J] > Max THEN
Begin
Max := A[I, J]; Ind := J
End;
Vsp := A[I, I]; A[I, I] := A[I, Ind]; A[I, Ind] := Vsp
End;
FOR I := 1 TO N DO
Begin
WriteLn;
FOR J := 1 TO N Do Write(A[I, J] : 3);
End; WriteLn
End.
Контрольные вопросы и задания
- 2. Почему массив является структурированным типом данных?
- 3. Что такое размерность массива? Существуют ли ограничения на размерность массива?
- 4. Какого типа могут быть элементы массива?
- 5. Какого типа могут быть индексы элементов массива?
- 6. Какие простые типы данных относятся к порядковым?
- 7. Какими способами может быть заполнен массив? Приведите примеры.
- 8. Как определить минимальный объём памяти, отводимой под массив?
- 9. Какие действия выполняют обычно над элементами массива?
- 10. Может ли массив быть элементом массива?
- 11. В каком случае массивы совместны по присваиванию?
- 12. Пусть элементами массива A (a[1], a[2], a[3], a[4]) являются соответственно
- 14. Точно и однозначно сформулировать условие задачи, решение которой приведено в данной программе: 15. Используются ли вложенные циклы, если совершается обход только главной диагонали квадратной матрицы?