Inleiding tot 3D-arrays in C

Een array is een groep elementen met hetzelfde (homogene) gegevenstype. Het wordt ook een afgeleid gegevenstype genoemd. Zoals reeds opgemerkt, vergroot een 3D-array de ruimte exponentieel en wordt een extra positie toegevoegd om het element in de array te vinden. In dit onderwerp gaan we leren over 3D-arrays in C.

Overweeg bijvoorbeeld een gebouw met 4 verdiepingen met veel slots voor fietsenstalling. Dus, hier voor het verkrijgen van de perfecte slotrichtingen van de geparkeerde fiets, moeten we het niveau-nummer met rij- en kolomnummer vertellen. Wanneer u de array, rij 7 en kolom 4 net vertelt, naar welk niveau zoekt deze? Deze 3D-array is alleen bedoeld om meer gegevens op te slaan en de posities weer te geven.

Hoe kunnen we ze definiëren en implementeren? Laten we die concepten verder gaan.

Syntaxis:

In C kunnen dimensionele arrays als volgt worden verklaard:

Dus op dezelfde manier kunnen we de 3D-array declareren als:

De betekenis van de bovenstaande weergave kan worden opgevat als:

  1. Het geheugen dat is toegewezen aan variabele c is van het gegevenstype int.
  2. De totale capaciteit die deze array kan bevatten is 2 * 3 * 4, wat gelijk is aan 24 elementen.
  3. De gegevens worden weergegeven in de vorm van 2 arrays met elk 3 rijen en 4 kolommen.
columns
c (0) Serie rijenc (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)
columns
c (1) Serie rijenc (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)

De gegevens in de array zijn toegankelijk via de bovenstaande weergave. In de weergave van 3D-arrays vertegenwoordigt de eerste vierkante haak het niveau van de array waarmee rekening moet worden gehouden, als tweede het aantal rijen en de derde voor het aantal kolommen.

De indexweergave van de array voor het eerste element begint altijd met nul en eindigt met maat-1. Als het aantal rijen bijvoorbeeld 3 is, is de indexrepresentatie voor toegang tot de gegevens in rijen 0, 1 en 2. Dezelfde logica is ook van toepassing op het matrixniveau en de kolomindexen. Voor de bovenstaande weergave hebben we toegang tot c (0) (1) (2) om de gegevens van het 1e niveau van de array met 2e rij 3e kolom te krijgen.

3D-arrays initialiseren in C

We kunnen een 3D-array initialiseren vergelijkbaar met de 2D-array.

Zoals hierboven vermeld, zou het totale aantal elementen dat in de array kan worden geplaatst arraysize1 * arraysize2 * arraysize3 zijn. Hier is het 2 * 4 * 3, wat 24 geeft.

Elementen invoegen:

Net als bij de 2D-array moeten we voor het invoegen van elementen in een 3D-array de gegevens in niveaus, rijen en kolommen invoegen. Daarom gebruiken we het concept van lussen. In het bovenstaande proces voor het initialiseren van de gegevens in de array hadden we de waarden vooraf gedefinieerd.

Hier kunnen elementen dynamisch worden ingevoegd door de gebruiker, volgens de vereisten. Hieronder staat een voorbeeldcode voor het invoegen van de elementen.

Code:

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

Zoals waargenomen in de code:

  1. Eerst declareren we de arrayvariabele en de afmetingen van de array met het aantal niveaus van de array, rijen en kolommen.
  2. We declareren vervolgens drie variabelen voor het herhalen van de elementen in de array.
  3. Vervolgens worden lussen gebruikt. De eerste lus is voor de niveaus iteratie, de tweede is voor de rijen en de derde lus is voor de kolommen.
  4. De Scanf-functie wordt gebruikt om de gegevens te lezen tijdens het invoeren en plaatst vervolgens de ingevoegde waarde op die posities van i, j en k.

In het bovenstaande voorbeeld hebben we de gegevens ingevoegd in een matrix met 2 niveaus, 4 rijen en 3 kolommen. De output van het volgende kan als volgt worden verkregen:

Omdat we de printf-functie niet hebben gebruikt om de uitvoer weer te geven, had het geschreven programma alleen de door de gebruiker ingevoerde waarden gelezen. Na het schrijven van de afdrukfunctie (met behulp van lussen) zou de uitvoer worden weergegeven als:

Update elementen:

Het bijwerken van elementen in de reeks kan worden gedaan door een specifiek element te specificeren dat moet worden vervangen of door een positie te identificeren waar de vervanging moet worden uitgevoerd. Voor het bijwerken hebben we meestal de volgende gegevens nodig.

  1. Elementen van een array
  2. Positie / element, waar het moet worden ingevoegd
  3. De in te voegen waarde.

Voor het bijwerken van de gegevens in een array via elementdetails moeten we eerst naar dat element in de array zoeken, de positie ervan begrijpen en vervolgens het oude element vervangen door het nieuwe element.

Hier hebben we hieronder twee voorbeelden gegeven van het bijwerken van het element van een 3D-array.

Laten we eerst een voorbeeld doornemen waarvan de positie van het bij te werken element al bekend is.

Code

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

In het bovenstaande programma is het element op het eerste niveau, de eerste rij en de eerste kolom geselecteerd en is de waarde van de gegevens in die positie bijgewerkt.

De output voor bovenstaande is als volgt:

In het tweede voorbeeld laten we zien hoe de positie van het element dynamisch kan worden ingenomen als een door de gebruiker ingevoerde waarde en werken we de waarde van het element op die specifieke positie bij.

Code:

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

De output is als volgt. Hier hebben we de scanf-functie gebruikt om de door de gebruiker opgegeven waarde te lezen volgens hun keuze voor de positie van een element op basis van matrixniveau, rij- en kolomnummers.

Kun je als oefening proberen een programma te schrijven om de hele kolom van de matrix bij te werken met door de gebruiker ingevoerde waarden?

Zoals we nu weten, geven we in het 3D-array de grootte van het array aan het begin zelf aan. We zijn ons bewust van de grootte van de array, maar wat als de gebruiker een willekeurig rij- en kolomnummer buiten onze arraygrootte opgeeft?

Wat als we meer elementen invoeren dan nodig is in de array?

Merk op dat, aangezien we geen if / else-voorwaarde of try / catch-blokken hadden geschreven, de uitvoer van de matrix niet verandert. We kunnen de code echter schrijven met behulp van de bovengenoemde voorwaarden om fouten voor dergelijke gevallen weer te geven.

Ben je niet nieuwsgierig naar het laatste voorbeeld, wat gebeurt er als we tussendoor een aantal elementen overslaan? Wat doet mijn programma?

Zoals waargenomen in de bovenstaande output:

  1. We misten 4 waarden in de invoer, gewoon door ruimte te geven en op enter te drukken
  2. Maar we hadden die ruimte om de 4 resterende elementen in te voeren.
  3. Vervolgens hebben we het laatste niveau, de laatste rij en het laatste kolomelement opgegeven dat moet worden gewijzigd in 78. En de uitvoer is zoals verwacht, niet?

Elementen verwijderen

Na de concepten van invoegen en bijwerken van de gegevens in de 3D-array, laten we nu kijken hoe we een hele rij uit de array kunnen verwijderen.

We hebben een programma geschreven in een eenvoudig formaat, zodat het concept van verschillende bewerkingen gemakkelijk kan worden begrepen.

Code:

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

anders
(
voor (k = 0; k <3; k ++)
(
printf ("\ t% d", c (i) (j) (k));
)
)
printf ( “\ n”);
)
printf ( “\ n”);
)
)

De waarden van een array dynamisch overgenomen.De volgende stappen zijn:

  1. Gebruiker gevraagd het nummer (index) in te voeren van de rij die moet worden verwijderd.
  2. Gebruik voor lusherhaling van matrixniveaus, rijen en kolommen. We vergelijken of het rijnummer en het gebruikersinvoernummer overeenkomen of niet.
  3. Als ze overeenkomen en als het rijnummer kleiner is dan de grootte van de array, drukken we de volgende rij af. Anders drukken we de rij af zoals deze is.
  4. Omdat we geen voorwaarde hadden op het niveau van de array, wordt het opgegeven rijnummer verwijderd uit beide array-niveaus.

De output is als volgt:

Wat als we het rijnummer buiten de matrixgrens geven?

Het zal de rij niet vinden om te verwijderen en het programma te verlaten door de hele array af te drukken.

Zoals reeds bekend, kunnen we zelfs de waarden voor het aantal rijen en kolommen dynamisch declareren en het programma dienovereenkomstig schrijven.

Ziet dit er niet eenvoudig en gemakkelijk uit om te leren?

Kun je als oefening proberen nu een bepaald element voor de 3D-array te verwijderen?

Conclusie

In deze sectie hebben we de basisbewerkingen op driedimensionale arrays geleerd.

De 3D-array bevat veel sets 2D-arrays. Zoals we het schaakbord als een voorbeeld van een 2D-reeks hebben gezien, kan de 3D-reeks ons helpen om eerst het schaakbord te kiezen waarmee je wilt spelen en vervolgens kiezen voor de rijen en kolommen van dat schaakbord.

Probeer de basisbewerkingen van de 3D-arrays op te lossen en veel plezier met het leren van C.

Aanbevolen artikelen

Dit is een gids voor 3D-arrays in C. Hier bespreken we het initialiseren van een 3D-array vergelijkbaar met de 2D-array en elementen van Array. U kunt ook het volgende artikel bekijken voor meer informatie -

  1. Arrays in R
  2. Gegevenstypen in MATLAB
  3. Hoe maak je een arrays in C #?
  4. Hoe 3D-arrays zijn gedefinieerd in Java?
  5. Arrays in PHP