Въведение в 3D масиви в C

Масивът е група от елементи с един и същ (хомогенен) тип данни. Нарича се и вид на получените данни. Както вече забелязах, 3D масив увеличава пространството експоненциално и се добавя допълнителна позиция за локализиране на елемента в масива. В тази тема ще научим за 3D масиви в C.

Например, помислете за сграда на 4 нива с много слотове за паркиране на велосипеди. И така, тук, за да получим перфектните направления на слота на паркирания мотор, трябва да кажем номера на нивото с номер на ред и колона. Когато просто кажете на масива, ред 7 и колона 4, кое ниво търси? Този 3D масив е само за съхраняване на повече количества данни и представяне на позициите.

Как можем да ги определим и приложим? По-нататък, нека разберем тези понятия.

Синтаксис:

В C, размерните масиви могат да бъдат декларирани, както следва:

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

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

  1. Паметта, разпределена на променлива с, е от тип данни int.
  2. Общият капацитет, който може да притежава този масив, е 2 * 3 * 4, което е равно на 24 елемента.
  3. Данните се представят под формата на 2 масива с по 3 реда и 4 колони.
колони
c (0) Масив РедовеC (0) (0)C (0) (1)C (0) (2)C (0) (3)
в (1) (0)в (1) (1)в (1) (2)в (1) (3)
в (2) (0)в (2) (1)в (2) (2)в (2) (3)
колони
c (1) Масив РедовеC (0) (0)C (0) (1)C (0) (2)C (0) (3)
в (1) (0)в (1) (1)в (1) (2)в (1) (3)
в (2) (0)в (2) (1)в (2) (2)в (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 масива, за вмъкване на елементи в 3-D масив, трябва да вмъкнем данните в нива, редове и колони. Така че за това използваме концепцията за бримки. В горния процес за инициализиране на данните в масива бяхме предварително задали стойностите.

Тук елементите могат да бъдат динамично вмъквани от потребителя, според изискванията. По-долу е примерен код за вмъкване на елементите.

Код:

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

Като последен пример, не ви ли е любопитно какво се случва, ако пропуснем някои елементи между тях? Какво прави моята програма?

Както е отбелязано в горния резултат:

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

още
(
за (к = 0; к <3; к ++)
(
printf ("\ t% d", c (i) (j) (k));
)
)
ФОРМАТ ( "\ п");
)
ФОРМАТ ( "\ п");
)
)

Приемайте стойностите на масив динамично. Следващите стъпки са:

  1. Помоли потребителя да въведе номера (индекса) на реда, който трябва да бъде изтрит.
  2. Използва се за циклична итерация на нива, редове и колони на масив. Сравняваме дали номерът на реда и номерът за въвеждане на потребител съвпадат или не.
  3. Ако те съвпадат и ако номерът на реда е по-малък от размера на масива, отпечатваме следващия ред. Друго, ние отпечатваме реда, както е.
  4. Тук, тъй като нямахме никакво условие на нивото на масива, посоченият номер на реда се изтрива от двете нива на масива.

Изходът е както следва:

Какво става, ако дадем номера на реда извън границата на масива?

Той няма да намери реда, който да изтрие и излезе от програмата, като отпечата целия масив.

Както вече е известно, дори можем да декларираме динамично стойностите за броя на редовете и колоните и да запишем съответно програмата.

Това не изглежда просто и лесно за научаване?

Като упражнение можете ли да опитате да изтриете конкретен елемент за 3d масива сега?

заключение

В този раздел научихме основните операции върху триизмерните масиви.

3D масивът съдържа много набори от 2-D масиви. Тъй като ние видяхме шахматна дъска като пример за 2D масив, ако бяхме поставили много шахматни дъски заедно, 3D масивът може да ни помогне първо да изберем шахматната дъска, с която искате да играете, и след това да преминете към редовете и колоните на тази шахматна дъска.

Опитайте да решите основните операции на 3d масивите и се забавлявайте да научите C.

Препоръчителни статии

Това е ръководство за 3D масиви в C. Тук обсъждаме инициализирането на 3D масив, подобен на 2D масива и елементите на Array. Можете също да разгледате следната статия, за да научите повече -

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