Uvod u dvodimenzionalne nizove u C
Niz je skupina elemenata s istim (homogenim) tipom podataka. Naziva se i izvedenom vrstom podataka. Ako smatramo primitivnom vrstom podataka i dodijelimo vrijednost kao što je prikazano u nastavku,
A sada, ako želimo pohraniti novu vrijednost u varijablu a, nova vrijednost zamjenjuje staru vrijednost. Koristeći jednu primitivnu varijablu možemo pohraniti samo jednu vrijednost odjednom, ne možemo pohraniti više vrijednosti.
Za pohranu više od jednog elementa u jednoj varijabli kao što su studentske ocjene, ID-ovi zaposlenika, mobilni brojevi s velikom količinom podataka, moramo stvoriti 100 jedinstvenih varijabli, što je vrlo složen zadatak. Dakle, zato je uveden koncept Arrays.
Koncepti u 2-D nizovima u C
Mi možemo definirati nizove u
- Jedan dimenzije
- Dvaput dimenzija
I tako sve do N-dimenzija temeljenih na zahtjevu. Ali ovdje ćemo se pozabaviti dvosmjernim nizovima. Kao što ime sugerira, 2-D Nizovi mogu biti matrični prikaz podataka, koji su stvoreni za implementaciju relacijske baze podataka u obliku sličnih podataka i mogu se pohraniti u tabelarne oblike. Omogućuje jednostavno zadržavanje skupnih podataka koji se na zahtjev mogu prenijeti na bilo koji broj funkcija. Podaci u tim nizovima mogu se pristupiti putem ID-a retka i stupca.
Kako ih možemo definirati i implementirati? Gdje ih možemo koristiti? Dalje, razumemo te koncepte.
U C, dimenzijski nizovi mogu se deklarirati na sljedeći način:
Sintaksa
Na isti način možemo 2-D matricu proglasiti kao:
Značenje gornjeg prikaza može se shvatiti kao:
- Memorija dodijeljena varijabli b je tipa podataka int.
- Podaci su predstavljeni u obliku 2 reda i 3 stupca.
Podaci unutar matrice mogu se pristupiti putem gornjeg prikaza. U prikazu 2-D nizova, prvi kvadratni ugao predstavlja broj redova, a drugi je za broj stupaca. Indeksni prikaz niza za prvi element uvijek započinje s nulom i završava s veličinom-1. Varijabla matrice (ovdje b) uvijek sadrži osnovnu adresu memorijskog bloka i zove se unutarnja varijabla pointera.
Na primjer, ako je broj redaka 3, tada će indeksni prikaz pristupa podacima u redovima biti 0, 1 i 2. Ista se logika odnosi i na indekse stupaca. Za gornju predstavu, za dobivanje podataka drugog stupca trećeg stupca, možemo pristupiti putem b (1) (2).
Inicijaliziranje nizova
Imamo dvije različite metode u inicijalizaciji vrijednosti u C. Metode se razlikuju samo sintaktički.
Ispod je jedan od njih.
Drugi način inicijalizacije je sljedeći:
Općenito, preferira se prva metoda inicijalizacije jer jasno možemo razumjeti i vizualizirati redove i stupce 2-D nizova u C.
Ispod je primjer slikovnog prikaza elemenata i njihove adrese za niz b.
Elementi matrice obično se pohranjuju na uzastopna memorijska mjesta na temelju vrste podataka elemenata.
Umetanje elemenata u dvodimenzionalne nizove
Za umetanje elemenata u 2-D matrice, trebamo umetnuti podatke u oba redaka i stupaca. Dakle, za to koristimo koncept petlje. U gornjem postupku za inicijalizaciju podataka u nizu unaprijed smo definirali vrijednosti.
Ovdje elementi mogu dinamički umetnuti prema zahtjevima. Ispod je primjer koda za umetanje elemenata.
#include
int main()
(
int b(2)(3);
int i, j, num;
printf("Enter elements into 2-D array: ");
for(i=0;i<2;i++)
(
for(j=0;j<3;j++)
(
scanf("%d", &b(i)(j));
)
)
)
Kao što je vidljivo u kodu:
- Prvo izjavljujemo varijablu matrice i dimenzije polja s brojem redaka i stupaca.
- Zatim izjavljujemo dvije varijable za iteriranje elemenata u nizu.
- Zatim, za petlje se koriste. Vanjska strana petlje je za iteraciju redaka, a unutarnja petlja za stupove.
- Funkcija Scanf koristi se za čitanje podataka dok unosimo, a zatim vrijednost umetnuta u one položaje i i j.
U gornjem primjeru smo umetnuli podatke u matricu koja ima 2 reda i 3 stupca. Rezultat sljedećeg može se dobiti na sljedeći način:
Kako nismo koristili funkciju printf za prikaz izlaza, napisani program pročitao je samo unesene vrijednosti korisnika. Nakon pisanja funkcije ispisa (koristi se za petlje), izlaz će se prikazati kao:
Ažurirajte elemente u 2-D matricama
Ažuriranje elemenata u nizu može se obaviti ili određivanjem određenog elementa koji se zamjenjuje ili identificiranjem položaja na kojem se mora izvršiti zamjena. Za ažuriranje obično zahtijevamo sljedeće detalje.
- Elementi niza
- Pozicija / element, gdje ga treba umetnuti
- Vrijednost koju treba umetnuti.
Za ažuriranje podataka u nizu kroz detalje o elementima, prvo moramo potražiti taj element u nizu, razumjeti njegovu poziciju, a zatim stari element zamijeniti novim.
Ovdje smo u nastavku naveli dva primjera ažuriranja elementa 2-D matrice.
Prvo, idemo kroz primjer u kojem je položaj elementa koji se ažurira već poznat.
#include
int main()
(
int b(2)(3);
int i, j, num;
printf("Enter elements into 2-D array: ");
for(i=0;i<2;i++)
(
for(j=0;j<3;j++)
(
scanf("%d", &b(i)(j));
)
)
b(0)(2)=10;
for(i=0;i<2;i++)
(
for(j=0;j<3;j++)
(
printf("\t%d", b(i)(j));
)
printf("\n");
)
return 0;
)
U gornjem programu odabrani su element prvog reda i trećeg stupca te je ažurirana vrijednost podataka u tom položaju.
Izlaz za gore je sljedeći:
U drugom primjeru pokazat ćemo kako se element elementa može dinamički uzeti kao vrijednost koju unosi korisnik i ažurirati vrijednost elementa u tom određenom položaju.
#include
int main()
(
int b(2)(3);
int i, j, num;
printf("Enter elements into 2-D array: ");
for(i=0;i<2;i++)
(
for(j=0;j<3;j++)
(
scanf("%d", &b(i)(j));
)
)
printf("Enter the value of row and coulmn number :");
scanf("%d %d", &i, &j);
printf("Enter the number you want to update with: ");
scanf("%d", &num);
b(i)(j)=num;
for(i=0;i<2;i++)
(
for(j=0;j<3;j++)
(
printf("\t%d", b(i)(j));
)
printf("\n");
)
return 0;
)
Ovdje smo koristili funkciju scanf za čitanje vrijednosti koje je dao korisnik prema vlastitom izboru za položaj elementa na temelju brojeva redaka i stupaca.
Izlaz je sljedeći:
Možete li pokušati napisati program u ažuriranju cijelog retka matrice s vrijednostima koje unose korisnici?
Sada, kao što znamo, u 2-D nizu izjavljujemo veličinu matrice na samom početku. Svjesni smo veličine matrice, ali što ako korisnik daje slučajni broj retka i stupca izvan naše veličine?
Primjetite da, kako nismo napisali nijedan uvjet if / else ili try / catch, izlaz matrice se ne mijenja. Međutim, kôd možemo napisati koristeći gore navedene uvjete za prikaz pogrešaka za takve slučajeve.
Brisanje elemenata u dvodnevnom polju
Nakon koncepata umetanja i ažuriranja podataka unutar matrice, sada pogledajmo kako možemo izbrisati cijeli niz iz polja.
Napisali smo program u jednostavnom formatu tako da se pojam različitih operacija u dvodnevnom polju može lako razumjeti.
#include
int main()
(
int b(2)(3), i, j, num, x;
printf("Enter elements into 2-D array: ");
for(i=0;i<2;i++)
(
for(j=0;j<3;j++)
(
scanf("%d", &b(i)(j));
)
)
printf("Enter the value of row number :");
scanf("%d", &x);
for(i=0;i<2;i++)
(
if(i==x)
(
for(j=0;j<3;j++)
(
if((i+1)<2)
(
printf("\t%d", b(i+1)(j));
)
)
i++;)
else
(
for(j=0;j<3;j++)
(
printf("\t%d", b(i)(j));
)
)
printf("\n");
)
)
Slijedeći koraci:
- Vrijednosti matrice uzimaju dinamično
- Od korisnika se traži da upiše broj (indeks) retka koji mora biti izbrisan.
- Upotrebljavajući za iteraciju petlje, uspoređujemo podudaraju li se broj retka i korisnički unos ili nisu.
- Ako se podudaraju i ako je broj retka manji od veličine niza, ispisujemo sljedeći redak. Inače, tiskamo redak kakav jest.
Izlaz je sljedeći:
Što ako, dodijelim broj retka izvan granice polja?
Neće pronaći red za brisanje i napuštanje programa ispisom cijelog niza.
Kao što je već poznato, čak možemo dinamički deklarirati vrijednosti za brojeve redaka i stupaca i u skladu s tim napisati program.
Ne izgleda li to jednostavno i jednostavno za naučiti?
Možete li pokušati sada izbrisati određeni element za 2-d niz?
Zaključak
U ovom smo odjeljku naučili osnovne operacije na dvodimenzionalnim nizovima. Ova 2-d polja su korisna u stvarnom vremenu s operacijama matrice i mnogim matematičkim proračunima.
Nizovi se mogu koristiti i za prikazivanje kalendara, položaja na parkiralištu, a čak možemo i igrati šah.
Mnoge druge strukture podataka kao što su Povezani popisi, Red, Grafovi, Drveće moraju koristiti ovaj koncept dvodimenzionalnih nizova kao osnovni zahtjev za spremanje i pristup lokacijama različitih elemenata. Pokušajte riješiti osnovne operacije 2d matrica i zabavite se učeći C.
Preporučeni članci
Ovo je vodič za dvodimenzionalne nizove u C. Ovdje razgovaramo o uvodu, inicijalizaciji nizova, umetanju, ažuriranju, brisanju elemenata u dvodimatskim nizovima. Možete pogledati i sljedeće članke da biste saznali više -
- Nizovi u R
- Prednosti Array
- Nizi u C ++
- Nizovi u JavaScript-u
- Primjeri nizova u C #
- Nizovi u PHP-u