Введение в 3D-массивы в Си

Массив - это группа элементов с одинаковым (однородным) типом данных. Он также называется производным типом данных. Как уже отмечалось, трехмерный массив увеличивает пространство экспоненциально, и добавляется дополнительная позиция, чтобы найти элемент в массиве. В этой теме мы собираемся узнать о 3D-массивах в C.

Например, рассмотрим четырехуровневое здание с множеством слотов для парковки велосипедов. Итак, здесь, чтобы получить идеальное расположение слотов для припаркованного велосипеда, нам нужно указать номер уровня с номером строки и столбца. Когда вы просто указываете массив, строку 7 и столбец 4, какой уровень он ищет? Этот трехмерный массив предназначен только для хранения большего количества данных и представления позиций.

Как мы можем определить и реализовать их? Идем дальше, давайте разберемся с этими понятиями.

Синтаксис:

В C размерные массивы могут быть объявлены следующим образом:

Таким же образом, мы можем объявить трехмерный массив как:

Смысл вышеприведенного представления можно понимать как:

  1. Память, выделенная для переменной c, имеет тип данных int.
  2. Общая емкость, которую может содержать этот массив, составляет 2 * 3 * 4, что равно 24 элементам.
  3. Данные представляются в виде 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));
)
)
)
)

Как отмечено в коде:

  1. Во-первых, мы объявляем переменную массива и размеры массива с количеством уровней массива, строк и столбцов.
  2. Затем мы объявляем три переменные для перебора элементов в массиве.
  3. Затем для петли используются. Первый цикл предназначен для итерации уровней, второй - для строк, а третий - для столбцов.
  4. Функция Scanf используется для чтения данных при вводе, а затем для помещения значения, вставленного в эти позиции i, j и k.

В приведенном выше примере мы вставили данные в матрицу, имеющую 2 уровня, 4 строки и 3 столбца. Вывод следующего может быть получен, как показано ниже:

Поскольку мы не использовали функцию printf для отображения выходных данных, написанная программа считывала только введенные пользователем значения. После написания функции печати (используя для циклов) вывод будет отображаться как:

Обновить элементы:

Обновление элементов в массиве может быть выполнено либо путем указания конкретного элемента, подлежащего замене, либо путем определения позиции, в которой должна быть выполнена замена. Для обновления нам обычно требуются следующие данные.

  1. Элементы массива
  2. Позиция / элемент, где он должен быть вставлен
  3. Значение для вставки.

Для обновления данных в массиве с помощью сведений об элементе сначала нам нужно найти этот элемент в массиве, понять его положение, а затем заменить старый элемент новым элементом.

Здесь мы привели два примера обновления элемента трехмерного массива.

Во-первых, давайте рассмотрим пример, в котором положение обновляемого элемента уже известно.

Код

#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, вывод матрицы не изменится. Однако мы можем написать код с использованием вышеупомянутых условий для отображения ошибок в таких случаях.

Как последний пример, вам не интересно, что произойдет, если мы пропустим некоторые элементы между ними? Что делает моя программа?

Как отмечено в приведенном выше выводе:

  1. Мы пропустили 4 значения на входе, просто указав пробел и нажав Enter
  2. Но у нас была такая возможность войти в 4 оставшихся элемента.
  3. Затем мы указали, что последний уровень, последняя строка и последний элемент столбца должны быть изменены на 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));
)
)
Е ( «\ п»);
)
Е ( «\ п»);
)
)

Принимал значения массива динамически. Далее следуют следующие шаги:

  1. Попросил пользователя ввести номер (индекс) строки, которую нужно удалить.
  2. Использование для итерации цикла уровней массива, строк и столбцов. Мы сравниваем, совпадают ли номер строки и номер пользовательского ввода.
  3. Если они совпадают и номер строки меньше размера массива, мы печатаем следующую строку. Иначе, мы печатаем строку как есть.
  4. Здесь, поскольку у нас не было никаких условий на уровне массива, указанный номер строки удаляется с обоих уровней массива.

Вывод следующий:

Что если мы дадим номер строки за пределами массива?

Он не найдет строку для удаления и выхода из программы, напечатав весь массив.

Как уже известно, мы можем даже объявить значения для числа строк и столбцов динамически и написать программу соответствующим образом.

Разве это не выглядит простым и легким для изучения?

В качестве упражнения вы можете попробовать удалить конкретный элемент для массива 3d сейчас?

Вывод

В этом разделе мы изучили основные операции с 3-мерными массивами.

Трехмерный массив содержит множество наборов двумерных массивов. Как мы видели в шахматной доске в качестве примера двумерного массива, если бы мы поместили много шахматных досок вместе, трехмерный массив может помочь нам сначала выбрать шахматную доску, с которой вы хотите играть, а затем перейти к строкам и столбцам этой шахматной доски.

Попробуйте решить основные операции с трехмерными массивами и получите удовольствие от изучения C.

Рекомендуемые статьи

Это руководство по 3D-массивам в C. Здесь мы обсуждаем инициализацию 3D-массива, аналогичного 2D-массиву и элементам Array. Вы также можете посмотреть следующую статью, чтобы узнать больше -

  1. Массивы в R
  2. Типы данных в MATLAB
  3. Как создать массивы в C #?
  4. Как 3D-массивы определены в Java?
  5. Массивы в PHP