Введение в 3D-массивы в Си
Массив - это группа элементов с одинаковым (однородным) типом данных. Он также называется производным типом данных. Как уже отмечалось, трехмерный массив увеличивает пространство экспоненциально, и добавляется дополнительная позиция, чтобы найти элемент в массиве. В этой теме мы собираемся узнать о 3D-массивах в C.
Например, рассмотрим четырехуровневое здание с множеством слотов для парковки велосипедов. Итак, здесь, чтобы получить идеальное расположение слотов для припаркованного велосипеда, нам нужно указать номер уровня с номером строки и столбца. Когда вы просто указываете массив, строку 7 и столбец 4, какой уровень он ищет? Этот трехмерный массив предназначен только для хранения большего количества данных и представления позиций.
Как мы можем определить и реализовать их? Идем дальше, давайте разберемся с этими понятиями.
Синтаксис:
В C размерные массивы могут быть объявлены следующим образом:
Таким же образом, мы можем объявить трехмерный массив как:
Смысл вышеприведенного представления можно понимать как:
- Память, выделенная для переменной c, имеет тип данных int.
- Общая емкость, которую может содержать этот массив, составляет 2 * 3 * 4, что равно 24 элементам.
- Данные представляются в виде 2 массивов с 3 строками и 4 столбцами в каждом.
Колонны | |||||
c (0) Array | Ряды | с (0) (0) | с (0) (1) | с (0) (2) | с (0) (3) |
с (1) (0) | с (1) (1) | с (1) (2) | с (1) (3) | ||
с (2) (0) | с (2) (1) | с (2) (2) | с (2) (3) | ||
Колонны | |||||
c (1) Array | Ряды | с (0) (0) | с (0) (1) | с (0) (2) | с (0) (3) |
с (1) (0) | с (1) (1) | с (1) (2) | с (1) (3) | ||
с (2) (0) | с (2) (1) | с (2) (2) | с (2) (3) |
К данным внутри массива можно получить доступ через представленное выше представление. В представлении трехмерных массивов первая квадратная скобка представляет уровень массива, который необходимо учитывать, вторая - количество строк, а третья - количество столбцов.
Индексное представление массива для первого элемента всегда начинается с нуля и заканчивается размером 1. Так, например, если число строк равно 3, то представление индекса для доступа к данным в строках будет 0, 1 и 2. Та же логика применима и к уровням массива, и к индексам столбцов. Для приведенного выше представления, чтобы получить данные 1- го уровня массива со 2- й строкой 3- го столбца, мы можем получить доступ с помощью c (0) (1) (2).
Инициализация 3D-массивов в C
Мы можем инициализировать трехмерный массив, аналогичный двумерному массиву.
Как упоминалось выше, общее количество элементов, которые могут быть помещены в массив, будет равным arraysize1 * arraysize2 * arraysize3. Здесь это 2 * 4 * 3, что дает 24.
Вставка элементов:
Как и в случае двумерного массива, для вставки элементов в трехмерный массив нам необходимо вставить данные в уровнях, строках и столбцах. Итак, для этого мы используем концепцию циклов. В приведенном выше процессе инициализации данных в массиве мы предварительно определили значения.
Здесь элементы могут быть динамически вставлены пользователем в соответствии с требованиями. Ниже приведен пример кода для вставки элементов.
Код:
#include
int main()
(
int c(2)(4)(3);
int i, j, k;
printf("Enter elements into 3-D array: ");
for(i=0;i<2;i++)
(
for(j=0;j<4;j++)
(
for(k=0;k<3;k++)
(
scanf("%d", &c(i)(j)(k));
)
)
)
)
Как отмечено в коде:
- Во-первых, мы объявляем переменную массива и размеры массива с количеством уровней массива, строк и столбцов.
- Затем мы объявляем три переменные для перебора элементов в массиве.
- Затем для петли используются. Первый цикл предназначен для итерации уровней, второй - для строк, а третий - для столбцов.
- Функция Scanf используется для чтения данных при вводе, а затем для помещения значения, вставленного в эти позиции i, j и k.
В приведенном выше примере мы вставили данные в матрицу, имеющую 2 уровня, 4 строки и 3 столбца. Вывод следующего может быть получен, как показано ниже:
Поскольку мы не использовали функцию printf для отображения выходных данных, написанная программа считывала только введенные пользователем значения. После написания функции печати (используя для циклов) вывод будет отображаться как:
Обновить элементы:
Обновление элементов в массиве может быть выполнено либо путем указания конкретного элемента, подлежащего замене, либо путем определения позиции, в которой должна быть выполнена замена. Для обновления нам обычно требуются следующие данные.
- Элементы массива
- Позиция / элемент, где он должен быть вставлен
- Значение для вставки.
Для обновления данных в массиве с помощью сведений об элементе сначала нам нужно найти этот элемент в массиве, понять его положение, а затем заменить старый элемент новым элементом.
Здесь мы привели два примера обновления элемента трехмерного массива.
Во-первых, давайте рассмотрим пример, в котором положение обновляемого элемента уже известно.
Код
#include
int main()
(
int c(2)(4)(3);
int i, j, k, num;
printf("Enter elements into 3-D array: ");
for(i=0;i<2;i++)
(
for(j=0;j<4;j++)
(
for(k=0;k<3;k++)
(
scanf("%d", &c(i)(j)(k));
)
)
)
c(1)(1)(1) = 85;
for(i=0;i<2;i++)
(
for(j=0;j<4;j++)
(
for(k=0;k<3;k++)
(
printf("\t%d", c(i)(j)(k));
)
printf("\n");
)
printf("\n");
)
return 0;
)
В приведенной выше программе выбран элемент на 1- м уровне, 1- й строке и 1- м столбце, и значение данных в этой позиции обновлено.
Вывод для выше выглядит следующим образом:
Во втором примере мы собираемся показать, как положение элемента может динамически приниматься как введенное пользователем значение, и обновить значение элемента в этой конкретной позиции.
Код:
#include
int main()
(
int c(2)(4)(3);
int i, j, k, num;
printf("Enter elements into 3-D array: ");
for(i=0;i<2;i++)
(
for(j=0;j<4;j++)
(
for(k=0;k<3;k++)
(
scanf("%d", &c(i)(j)(k));
)
)
)
printf("Enter the level, row and column number: ");
scanf("%d %d %d", &i, &j, &k);
printf("Enter the new number you want to update with: ");
scanf("%d", &num);
c(i)(j)(k) = num;
for(i=0;i<2;i++)
(
for(j=0;j<4;j++)
(
for(k=0;k<3;k++)
(
printf("\t%d", c(i)(j)(k));
)
printf("\n");
)
printf("\n");
)
return 0;
)
Вывод следующий. Здесь мы использовали функцию scanf для считывания значения, заданного пользователем в соответствии с его выбором для позиции элемента на основе уровня массива, номера строки и столбца.
В качестве упражнения вы можете попробовать написать программу для обновления всего столбца матрицы введенными пользователем значениями?
Теперь, как мы знаем, в массиве 3D мы объявляем размер массива в самом начале. Мы знаем о размере массива, но что если пользователь задает случайный номер строки и столбца за пределами нашего размера массива?
Что если мы введем больше элементов, чем требуется внутри массива?
Обратите внимание, что поскольку мы не написали ни одного условия if / else или блоков try / catch, вывод матрицы не изменится. Однако мы можем написать код с использованием вышеупомянутых условий для отображения ошибок в таких случаях.
Как последний пример, вам не интересно, что произойдет, если мы пропустим некоторые элементы между ними? Что делает моя программа?
Как отмечено в приведенном выше выводе:
- Мы пропустили 4 значения на входе, просто указав пробел и нажав Enter
- Но у нас была такая возможность войти в 4 оставшихся элемента.
- Затем мы указали, что последний уровень, последняя строка и последний элемент столбца должны быть изменены на 78. И результат будет таким, как ожидалось, не так ли?
Удаление элементов
После концепции вставки и обновления данных внутри трехмерного массива, давайте теперь посмотрим, как мы можем удалить всю строку из массива.
Мы написали программу в простом формате, чтобы можно было легко понять концепцию различных операций.
Код:
#include
int main()
(
int c(2)(4)(3), i, j, k, num, x;
printf("Enter elements into 3-D array: ");
for(i=0;i<2;i++)
(
for(j=0;j<4;j++)
(
for(k=0;k<3;k++)
(
scanf("%d", &c(i)(j)(k));
)
)
)
printf("Enter the value of row number to delete: ");
scanf("%d", &x);
for(i=0;i<2;i++)
(
for(j=0;j<4;j++)
(
if(j==x)
(
for(k=0;k<3;k++)
(
if((j+1)<4)
(
printf("\t%d", c(i)(j+1)(k));
)
)
j ++;
)
еще
(
для (к = 0; к <3; K ++)
(
printf («\ t% d», c (i) (j) (k));
)
)
Е ( «\ п»);
)
Е ( «\ п»);
)
)
Принимал значения массива динамически. Далее следуют следующие шаги:
- Попросил пользователя ввести номер (индекс) строки, которую нужно удалить.
- Использование для итерации цикла уровней массива, строк и столбцов. Мы сравниваем, совпадают ли номер строки и номер пользовательского ввода.
- Если они совпадают и номер строки меньше размера массива, мы печатаем следующую строку. Иначе, мы печатаем строку как есть.
- Здесь, поскольку у нас не было никаких условий на уровне массива, указанный номер строки удаляется с обоих уровней массива.
Вывод следующий:
Что если мы дадим номер строки за пределами массива?
Он не найдет строку для удаления и выхода из программы, напечатав весь массив.
Как уже известно, мы можем даже объявить значения для числа строк и столбцов динамически и написать программу соответствующим образом.
Разве это не выглядит простым и легким для изучения?
В качестве упражнения вы можете попробовать удалить конкретный элемент для массива 3d сейчас?
Вывод
В этом разделе мы изучили основные операции с 3-мерными массивами.
Трехмерный массив содержит множество наборов двумерных массивов. Как мы видели в шахматной доске в качестве примера двумерного массива, если бы мы поместили много шахматных досок вместе, трехмерный массив может помочь нам сначала выбрать шахматную доску, с которой вы хотите играть, а затем перейти к строкам и столбцам этой шахматной доски.
Попробуйте решить основные операции с трехмерными массивами и получите удовольствие от изучения C.
Рекомендуемые статьи
Это руководство по 3D-массивам в C. Здесь мы обсуждаем инициализацию 3D-массива, аналогичного 2D-массиву и элементам Array. Вы также можете посмотреть следующую статью, чтобы узнать больше -
- Массивы в R
- Типы данных в MATLAB
- Как создать массивы в C #?
- Как 3D-массивы определены в Java?
- Массивы в PHP