Вступ до 3D-масивів на C

Масив - це група елементів з однаковим (однорідним) типом даних. Він також називається похідним типом даних. Як уже зазначалося, 3D-масив збільшує простір експоненціально, і для розміщення елемента в масиві додається додаткове положення. У цій темі ми збираємось дізнатись про 3D-масиви в C.

Наприклад, розгляньте 4-х рівневу будівлю з безліччю слотів для паркування велосипедів. Отже, тут, щоб отримати ідеальні напрямки слота велосипеда, який припаркований, нам потрібно вказати номер рівня з номером рядків та стовпців. Коли ви просто повідомте масив, рядок 7 та колонку 4, на якому рівні він шукає? Цей 3D-масив призначений лише для зберігання більшої кількості даних та представлення позицій.

Як ми можемо їх визначити та реалізувати? Подальше, давайте розберемося в цих поняттях.

Синтаксис:

В C розмірні масиви можна оголосити так:

Таким чином, ми можемо оголосити тривимірний масив як:

Значення наведеного подання можна зрозуміти як:

  1. Пам'ять, виділена змінній c, є типом даних int.
  2. Загальна ємність, яку може утримувати цей масив, становить 2 * 3 * 4, що дорівнює 24 елементам.
  3. Дані представлені у вигляді 2 масивів з 3 рядками та 4 колонками кожен.
Стовпці
c (0) Масив Рядкиc (0) (0)c (0) (1)c (0) (2)c (0) (3)
c (1) (0)c (1) (1)c (1) (2)c (1) (3)
c (2) (0)c (2) (1)c (2) (2)c (2) (3)
Стовпці
c (1) Масив Рядкиc (0) (0)c (0) (1)c (0) (2)c (0) (3)
c (1) (0)c (1) (1)c (1) (2)c (1) (3)
c (2) (0)c (2) (1)c (2) (2)c (2) (3)

До даних всередині масиву можна отримати доступ через вищезазначене представлення. У представленні 3D-масивів перший квадратний дужок являє собою рівень масиву, який слід врахувати, другий - кількість рядків, а третій - кількість стовпців.

Індексне представлення масиву для першого елемента завжди починається з нуля і закінчується розміром-1. Так, наприклад, якщо кількість рядків дорівнює 3, то представлення індексу для доступу до даних у рядках буде 0, 1 та 2. Така ж логіка застосовується і для індексів рівня масивів та індексів стовпців. Для поданого подання, щоб отримати дані 1- го рівня масиву з 2- м рядком 3- го стовпця, ми можемо отримати доступ за допомогою c (0) (1) (2).

Ініціалізація 3D-масивів у C

Ми можемо ініціалізувати 3D-масив, схожий на 2-D масив.

Як було сказано вище, загальна кількість елементів, які можуть бути поміщені в масив, буде мати масив1 * arraysize2 * arraysize3. Ось це 2 * 4 * 3, що дає 24.

Вставка елементів:

Подібно до 2D масиву, для вставки елементів у тривимірний масив нам потрібно вставляти дані в рівні, рядки та стовпці. Отже, для цього ми використовуємо поняття петель. У описаному вище процесі ініціалізації даних у масиві ми заздалегідь визначили значення.

Тут елементи можуть бути динамічно вставлені користувачем відповідно до вимог. Нижче наведено приклад коду для вставки елементів.

Код:

#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. Значення, яке потрібно вставити.

Для оновлення даних у масиві за допомогою деталей елементів спочатку нам потрібно знайти цей елемент у масиві, зрозуміти його положення, а потім замінити старий елемент на новий.

Тут ми навели нижче два приклади оновлення елемента 3D-масиву.

По-перше, переглянемо приклад, коли положення елементу, що підлягає оновленню, вже відоме.

Код

#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. І вихід, як очікувалося, чи не так?

Видалення елементів

Після концепцій вставки та оновлення даних усередині 3D-масиву, давайте тепер подивимося, як ми можемо видалити цілий рядок із масиву.

Ми написали програму в простому форматі, щоб поняття різних операцій можна було легко зрозуміти.

Код:

#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 ++;
)

ще
(
для (k = 0; k <3; k ++)
(
printf ("\ t% d", c (i) (j) (k));
)
)
printf ("\ n");
)
printf ("\ n");
)
)

Значення масиву приймає динамічно. Наступні кроки:

  1. Попросив користувача ввести число (індекс) рядка, який потрібно видалити.
  2. Використання для циклу ітерації рівнів масивів, рядків та стовпців. Ми порівнюємо, чи збігаються чи ні рядковий номер та номер введення користувача.
  3. Якщо вони відповідають і якщо номер рядка менше розміру масиву, ми друкуємо наступний рядок. Інше, ми друкуємо рядок таким, яким він є.
  4. Тут, оскільки у нас не було жодної умови щодо рівня масиву, вказаний номер рядка видаляється з обох рівнів масиву.

Вихід такий:

Що робити, якщо ми даємо номер рядка за межами межі масиву?

Він не знайде рядок для видалення та виходу з програми, надрукувавши весь масив.

Як уже відомо, ми навіть можемо динамічно оголошувати значення кількості рядків і стовпців і відповідно записувати програму.

Це не виглядає просто і легко вивчити?

Як вправу, ви можете спробувати видалити певний елемент для 3d-масиву зараз?

Висновок

У цьому розділі ми дізналися основні операції над тривимірними масивами.

3D-масив містить безліч наборів 2-D масивів. Як ми бачили шахову дошку як приклад 2D-масиву, якщо ми розмістили багато шахових дощок разом, 3D-масив може допомогти нам спочатку вибрати шахову дошку, з якою ви хочете пограти, а потім перейти до рядків і стовпців цієї шахової дошки.

Спробуйте вирішити основні операції 3d-масивів і весело вивчайте C.

Рекомендовані статті

Це посібник з 3D-масивів у C. Тут ми обговорюємо ініціалізацію 3D-масиву, схожого на 2D-масив та елементи масиву. Ви також можете переглянути наступну статтю, щоб дізнатися більше -

  1. Масиви в R
  2. Типи даних у MATLAB
  3. Як створити масиви в C #?
  4. Як визначаються 3D-масиви в Java?
  5. Масиви в PHP