4. Двумерный массив
Двумерный массив представляет собой некоторую таблицу. Обращение к ячейкам этой таблицы строится по аналогии с игрой «Морской бой», т. е. чтобы назвать нужную клетку, указываем название строки и столбца.
При работе с одномерными массивами обращение к элементу массива записывается следующим образом: M[\(3\)].
Двумерный массив состоит из нескольких одномерных. Обращение к элементу двумерного массива строится из номера строки и номера столбца элемента. Рассмотрим пример массива из \(3\) строк и \(6\) столбцов.
Назовём этот массив MM. И обратимся к элементу во второй строке четвёртого столбца: MM[\(2\), \(4\)].
<имя массива>: array [ .. , .. ] of ;.имя>
В Pascal такой массив задаётся следующим образом:
var MM: array [\(1\)..\(3\), \(1\)..\(6\)] of integer;.
Напишем программу для такого массива и выведем его на экран. После begin будем присваивать вручную значение каждому элементу, тем самым заполняя массив. Вывод массива будем осуществлять при помощи цикла for, как мы это делали в предыдущих теориях, но для каждой строки должен быть свой счётчик.
Что такое двумерный массив
Все, что необходимо начинающему и опытному программисту
Двумерные массивы
На предыдущих уроках мы с вами рассмотрели одномерные массивы. Это означает, что массивы имеют одно измерение — количество элементов. Визуально такие массивы можно представить как строку элементов. Однако наш мир не ограничивается одним измерением. На этом уроке мы рассмотрим массивы, которые можно визуально представить как таблицу.
Двумерный массив — это таблица из однотипных элементов, организованная по строкам и столбцам. Местоположение каждого элемента двумерного массива (матрицы) определяется индексом (номером) строки и индексом (номером) столбца (рис. 8.8).
Рис. 8.8. Изображение двумерного массива в виде таблицы
В следующем примере мы создадим матрицу 5×4, задав значения ее элементов с помощью датчика случайных чисел, и выведем ее на экран по строкам. При этом будем использовать вложенные циклы, внешний цикл будет проходить по строкам, а внутренний — по столбцам.
Блок-схема алгоритма представлена нарис. 8.9.
Пример 8.11.
Создание матрицы 5×4, вывод ее на экран по строкам
Рис. 8.9. Блок-схема алгоритма вывода двумерного массива 5 х 4 на экран по строкам
Задание 8.9.
Написать программу, в которой:
определить матрицу 3×5;
вывести ее на экран;
определить величину максимального элемента данной матрицы и вывести на экран его значение и его позицию в матрице.
1. Для хранения однотипных данных используется структурированный тип данных — массивы (одномерные и многомерные).
2. Для описания массива необходимо указать его имя, тип данных (array), диапазон изменения индексов его элементов (в квадратных скобках) и тип элементов, из которых он состоит:
mas: array [1..20] of integer;
3. Обращение к каждому элементу массива идет по имени массива и по индексу (номеру) элемента в массиве.
4. При выполнении любых действий с массивами необходимо использовать циклы, в которых перебираются номера элементов массива.
5. При выполнении операций поиска в массиве нужно перебирать по очереди его элементы и проверять для каждого искомое условие.
6. Примером многомерного массива является двумерный массив (матрица). Обращение к элементам матрицы идет по ее имени, индексу строки и индексу столбца.
Контрольные вопросы
1. Какое условие должно выполняться, чтобы некоторое количество отдельных данных можно было объединить в один массив?
2. Что в записи А[4] = -12 является именем массива, что — индексом, а что — значением элемента?
3. Чем одномерный массив отличается от двумерного?
4. Какие необходимы действия, чтобы вывести на экран все отрицательные элементы массива?
5. Почему при поиске какого-либо элемента в массиве нельзя обойтись без цикла?
Добавить свой комментарий:
Что такое двумерный массив
Двумерный массив — это массив, в котором для определения местоположения элемента в массиве нужно указать значения двух индексов. Двумерный массив ассоциируется с таблицей. Если количество столбцов и строк массива (таблицы) одинаковое, то массив еще называют матрицей.
При объявлении двумерного массива указываем тип, размеры и имя. Массив можно создать тремя способами:
тип имя_переменной[][] = new тип[размер][размер];тип[][] имя_переменной = new тип[размер][размер];тип[] имя_переменной[] = new тип[размер][размер];
тип – базовый тип элементов массива; размер – число элементов массива. Элементы массива могут быть любого типа, допустимого в языке Java. Важный момент — размер созданного массива нельзя изменить.
Пример: объявим двумерный строковый массив с именем products (размер массива 2×4) и заполним значениями:
String products[][] = new String[2][4];
products[0][0] = «Хлеб»;
products[0][1] = «ООО ГРУП»;
products[0][2] = «5 дней»;
products[0][3] = «мука»;
products[1][0] = «Сметана»;
products[1][1] = «ИП Про»;
products[1][2] = «10 дней»;
products[1][3] = «молоко»;
Подробнее в лекции: лекция «2.2 Массивы многомерные» из «Блок 2. InMemory хранение данных — массивы».
Двумерные массивы
С позволяет создавать многомерные массивы. Простейшим видом многомерного массива является двумерный массив. Двумерный массив — это массив одномерных массивов. Двумерный массив объявляется следующим образом:
тип имя_массива[размер второго измерения][размер первого измерения];
Следовательно, для объявления двумерного массива целых с размером 10 на 20 следует написать:
Посмотрим внимательно на это объявление. В противоположность другим компьютерным языкам, где размерности массива отделяются запятой, С помещает каждую размерность в отдельные скобки.
Для доступа к элементу с индексами 3, 5 массива d следует использовать
В следующем примере в двумерный массив заносятся числа от 1 до 12, после чего массив выводится на экран.
#include
int main(void)
int t,i, num[3][4];
/* загрузка чисел */
for(t=0; t for (i=0; i num[t][i] = (t*4)+i+1;
В данном примере num[0][0] имеет значение 1, num[0][1] имеет значение 2, num[0][2] — 3 и так далее. num[2][3] имеет значение 12.
Двумерные массивы сохраняются в виде матрицы, где первый индекс отвечает за строку, а второй -за столбец. Это означает, что правый индекс изменяется быстрее левого, если двигаться по массиву в порядке расположения элементов в памяти. На рис. показано графическое представление двумерного массива в памяти. Левый индекс можно рассматривать как указатель на строку.
Число байт в памяти, требуемых для размещения двумерного массива, вычисляется следующим образом:
число байт = размер второго измерения * размер первого измерения * sizeof (базовый тип)
Предполагая наличие в системе 2-байтных целых, целочисленный массив с размерностями 10 на 5 будет занимать 10 * 5 * 2, то есть 100 байт.
Когда двумерный массив используется как аргумент функции, передается указатель на первый элемент. Функция, получающая двумерный массив, должна, как минимум, определять размер первого измерения, поскольку компилятору необходимо знать длину каждой строки для корректной индексации массива. Например, функция, получающая двумерный целочисленный массив с размерностями 5, 10, будет объявляться следующим образом:
Можно определить размер второго измерения, но это не обязательно. Компилятору нужно знать размер первого измерения для правильного выполнения операторов типа
в функции. Если длина строки не известна, невозможно узнать, где начинается следующая строка.
Краткая программа, приведенная ниже, использует двумерный массив для хранения оценок каждого студента в классах учителя. Программа предполагает, что учитель имеет три класса и в каждом классе может быть максимум 30 студентов. Обратим внимание, как осуществляется доступ к grade из каждой функции:
#include
#include
#include
#include
#define CLASSES 3
#define GRADES 30
int grade[CLASSES][GRADES];
void disp_grades(int g[] [GRADES]), enter_grades(void);
int get_grade(int num);
int main(void) /* программа для хранения оценок */
char ch;
for (;;) do printf(«(E)nter grades\n»);
printf(«(R)eport grades\n»);
printf(«(Q) uit\n»);
ch = toupper(getche());
>
while(ch!=’E’ && ch!=’R’ && ch!=’Q’);
switch(ch)
case ‘E’:
enter_grades();
break;
case ‘R’:
disp_grades(grade);
break;
case ‘Q’:
return 0;
>
>
>
/* ввод каждой оценки студентов */
void enter_grades(void)
int t, i;
for(t=0; t
>
>
/* реальный ввод оценки */
int get_grade(int num) char s [80];
printf(«enter grade for student # %d:\n», num+1);
gets (s);
return(atoi(s));
>
/* вывод оценок класса */
void disp_grades(int g[] [GRADES])
int t, i;
for(t=0; t printf(«Class # %d:\n», t+1);
for(i=0; i printf(«grade for student #%d is %d\n», i+1, g[t][i]);
>
>