1. Sissejuhatus
Kahemõõtmeline massiiv (2D massiiv) C keeles on oluline andmestruktuur, mida kasutatakse paljudes programmeerimisolukordades. See võimaldab hallata ja töödelda keerulisi andmeid lihtsalt – midagi, mis on tavalise ühe mõõtmega massiivi puhul keeruline. Selles artiklis selgitatakse põhjalikult kahemõõtmelise massiivi põhitõdesid ja rakendusi, aidates nii algajatel kui ka kesktaseme programmeerijatel paremini mõista seda teemat.
2. Mis on kahemõõtmeline massiiv?
2.1 Põhimõiste
Kahemõõtmeline massiiv on massiiv, kus andmed salvestatakse kahe indeksi – ridade ja veergude – abil. C keeles defineeritakse see järgmiselt:
andmetüüp massiivi_nimi[ridade_arv][veergude_arv];
Näiteks int matrix[3][4];
deklaratsioon loob kolmerealise ja neljaveerulise täisarvude kahemõõtmelise massiivi. Seda võib kujutada kui mitut ühe mõõtmega massiivi koos.
2.2 Kahemõõtmelise massiivi kasutusvaldkonnad
Kahemõõtmelised massiivid sobivad hästi andmete haldamiseks, mis on paigutatud tabelisse, näiteks RPG kaardid või tabelarvud. Samuti kasutatakse neid pildi pikslite või mängulaua esitusel. Kahemõõtmeliste massiivide kasutamine muudab andmete haldamise tõhusaks ja parandab programmi loetavust.
3. Kahemõõtmelise massiivi deklareerimine ja initsialiseerimine
3.1 Deklareerimine
Kahemõõtmelise massiivi deklareerimise põhisinaks on järgmine:
int matrix[3][4];
See deklareerib täisarvudest koosneva massiivi, millel on 3 rida ja 4 veergu. Iga element on algväärtustamata, mistõttu tuleb olla ettevaatlik.
3.2 Initsialiseerimine
Massiivi saab initsialiseerida juba deklareerimisel:
int matrix[2][3] = {{1, 2, 3}, {4, 5, 6}};
Ülaltoodud kood loob 2 rida ja 3 veergu ning määrab igale elemendile väärtuse. Samuti võib jätta ridade arvu määramata, initsialiseerides massiivi järgnevalt:
int matrix[][3] = {{1, 2, 3}, {4, 5, 6}};
Sellisel juhul määrab kompilaator ridade arvu automaatselt vastavalt algväärtustele.
4. Elementidele ligipääs kahemõõtmelises massiivis
4.1 Elementidele ligipääsu meetod
Kahemõõtmelise massiivi konkreetsele elemendile pääseb ligi, määrates rea- ja veeruindeksi:
matrix[1][2] = 10;
Selles näites määratakse väärtus 10
teise rea ja kolmanda veeru elemendile massiivis matrix
. Indeksid algavad 0-st, nii et matrix[1][2]
tähendab teist rida ja kolmandat veergu.
4.2 Ligipääs tsüklite abil
Kõigile elementidele ligipääsemiseks kasutatakse kahte järjestikust for
-tsüklit:
for (int i = 0; i < ridade_arv; i++) {
for (int j = 0; j < veergude_arv; j++) {
printf("%d ", matrix[i][j]);
}
printf("n");
}
See kood töötleb iga massiivi elementi ja kuvab selle väärtuse. Välimine tsükkel kontrollib ridu ja sisemine tsükkel veerge.
5. Kahemõõtmelise massiivi kasutusnäited
5.1 Põhikasutusnäide
Alltoodud näites hallatakse kahe õpilase kolme õppeaine tulemusi kahemõõtmelise massiivi abil ning iga tulemus kuvatakse:
int scores[2][3] = {{72, 80, 90}, {65, 75, 85}};
for (int i = 0; i < 2; i++) {
printf("Õpilane %d tulemused:n", i + 1);
for (int j = 0; j < 3; j++) {
printf("Aine %d: %d punkti n", j + 1, scores[i][j]);
}
}
See programm kasutab kahemõõtmelist massiivi tulemuste haldamiseks ja tsüklite abil tulemuste kuvamiseks.
5.2 Dünaamiline kahemõõtmeline massiiv
Kahemõõtmelist massiivi saab luua ka dünaamilise mälukasutusega. Vaatame järgmist näidet:
int (*matrix)[3] = malloc(sizeof(int) * ridade_arv * 3);
for (int i = 0; i < ridade_arv; i++) {
for (int j = 0; j < 3; j++) {
matrix[i][j] = i * 3 + j;
}
}
free(matrix);
Siin eraldatakse mälu malloc
’i abil dünaamiliselt. Selle meetodiga saab massiivi suuruse määrata jooksvalt. Kui mälu kasutamine on lõpetatud, vabastage see free
‘ga.
6. Kahemõõtmelise massiivi laiendatud kasutus
6.1 Mitmemõõtmelised massiivid
Kahemõõtmelist kontseptsiooni laiendades saab kasutada ka kolmemõõtmelisi või veelgi keerulisemaid massiive. Näiteks kolmemõõtmeline massiiv määratakse järgmiselt:
int array[2][3][4];
Sellisel massiivil on 2×3×4 elementi ning elementidele pääseb ligi kolme indeksiga. Mitmemõõtmelised massiivid võimaldavad hallata keerukamaid andmestruktuure.
6.2 Efektiivne andmetöötlus
Kahemõõtmelised massiivid on tõhusad vahendid andmete salvestamiseks ja töötlemiseks. Näiteks saab tabelandmeid hoida 2D massiivis ja ridade/veergude kaupa töödelda – see muudab analüüsi või statistika kiireks ja mugavaks.
7. Kokkuvõte
Kahemõõtmelised massiivid on põhjalik ja võimas andmestruktuur keerukate andmete tõhusaks haldamiseks. Selles artiklis käsitlesime nende deklareerimist, initsialiseerimist, elementidele ligipääsu, kasutusnäiteid, dünaamilist mälu ja mitmemõõtmelisi massiive. Kahemõõtmeliste massiivide kasutamise õppimine aitab lahendada keerulisemaid probleeme. Järgmise sammuna proovi ühendada neid massiive ka viitadega ja rakendada veelgi keerukamaid programmeerimistehnikaid!