Въведение в двумерни масиви в C

Масивът е група от елементи с един и същ (хомогенен) тип данни. Нарича се и вид на получените данни. Ако считаме за примитивен тип данни и присвояваме стойност, както е показано по-долу,

И сега, ако искаме да съхраним нова стойност в променлива a, новата стойност замества старата стойност. Използвайки една примитивна променлива, можем да съхраняваме само една стойност наведнъж, не можем да съхраняваме множество стойности.

За да съхраним повече от един елемент в една променлива като студентски марки, идентификационни номера на служители, мобилни номера с голямо количество данни, трябва да създадем 100 уникални променливи, което е много сложна задача. Затова е въведена концепцията за Arrays.

Концепции в 2-D масиви в C

Можем да определим масиви в

  • Single-Dimensional
  • Двойно-Dimensional

И така нататък до N-размерния въз основа на изискването. Но тук ще се занимаваме с 2-D масиви. Както подсказва името, 2-D масивите могат да представляват матрично представяне на данни, които са създадени за реализиране на релационна база данни като lookalike структура на данните и могат да се съхраняват в таблични форми. Той осигурява лекота на задържане на груповите данни, които могат да бъдат предадени на произволен брой функции въз основа на изискването. Данните в тези масиви могат да бъдат достъпни чрез идентификаторите на редове и колони.

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

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

Синтаксис

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

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

  1. Паметта, разпределена на променлива b, е от тип данни int.
  2. Данните се представят под формата на 2 реда и 3 колони.


Данните вътре в масива могат да бъдат достъпни чрез горното представяне. В представяне на двумерни масиви първата квадратна скоба представлява броя на редовете, а втората - за броя на колоните. Индексното представяне на масива за първия елемент винаги започва с нула и завършва с размер-1. Променливата на масива (тук б) винаги държи основния адрес на блока памет и се нарича вътрешна променлива на указателя.

Така например, ако броят на редовете е 3, тогава представянето на индекс за достъп до данните в редове ще бъде 0, 1 и 2. Същата логика се прилага и за индексите на колоните. За горното представяне, за да получим данните от втория ред 3 -та колона, можем да осъществим достъп чрез b (1) (2).

Инициализиране на масиви

Имаме два различни метода при инициализиране на стойностите в C. Методите се различават само синтактично.

По-долу е една от тях.

Друг начин за инициализация е следният:

По принцип първият метод на инициализация е предпочитан, тъй като можем ясно да разберем и визуализираме редовете и колоните на 2-D масиви в C.

По-долу е примерът за изобразителното представяне на елементи и техния адрес за масив b.

Елементите на масива обикновено се съхраняват в последователни места в паметта въз основа на типа данни на елементите.

Поставяне на елементи в 2-D масиви

За вмъкване на елементи в 2-D масиви, трябва да вмъкнем данните в двете редове и колони. Така че за това използваме концепцията за бримки. В горния процес за инициализиране на данните в масив, бяхме предварително задали стойностите.

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

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

Както е отбелязано в кода:

  1. Първо декларираме променливата на масива и размерите на масива с броя на редовете и колоните.
  2. След това декларираме две променливи за итерация над елементите в масива.
  3. След това, за бримки се използват. Външната част за цикъл е за итерация на редовете, а вътрешната - за колоните.
  4. Функцията Scanf се използва за четене на данните, докато въвеждаме, и след това поставяме въведената стойност в тези позиции на i и j.

В горния пример вмъкнахме данните в матрица, имаща 2 реда и 3 колони. Резултатите от следното могат да бъдат получени по-долу:

Тъй като не сме използвали функцията printf за показване на изхода, написаната програма беше чела само въведените от потребителя стойности. След като напишете функцията за печат (използвайки за контури), изходът ще се покаже като:

Актуализирайте елементи в 2-D масиви

Актуализацията на елементите в масива може да се извърши или чрез посочване на конкретен елемент, който трябва да бъде заменен, или чрез идентифициране на позиция, в която трябва да се извърши подмяната. За актуализиране обикновено изискваме следните подробности.

  1. Елементи на масив
  2. Позиция / елемент, където трябва да бъде поставен
  3. Стойността, която трябва да бъде вмъкната.

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

Ето, ние дадохме по-долу два примера за актуализиране на елемента на 2-D масив.

Първо, нека да преминем през пример, в който позицията на елемента, който ще се актуализира, вече е известна.

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

В горната програма са избрани елементът на първия ред и третата колона и стойността на данните в тази позиция е актуализирана.

Резултатът за горното е следният:

Във втория пример ще покажем как позицията на елемента може да бъде динамично приета като въведена от потребителя стойност и да актуализираме стойността на елемента в тази конкретна позиция.

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

Тук използвахме функцията scanf, за да четем стойността, дадена от потребителя според техния избор за позицията на елемент въз основа на номера на редове и колони.

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

Като упражнение можете ли да опитате да напишете програма за актуализиране на целия ред на матрицата с въведени от потребителя стойности?

Сега, както знаем, в 2-D масива декларираме размера на масива в самото начало. Ние сме наясно с размера на масива, но какво ще стане, ако потребителят даде произволен номер на ред и колона извън нашия размер на масива?

Забележете, че тъй като не бяхме написали никакви условия if / else или опитайте / улавете, изходът на матрицата не се променя. Въпреки това, можем да напишем кода, като използваме гореспоменатите условия, за да покажем грешки за такива случаи.

Изтриване на елементи в 2-D масиви

След концепциите за вмъкване и актуализиране на данните вътре в масива, нека сега да видим как можем да изтрием цял ред от масива.

Ние написахме програма в прост формат, така че понятието за различни операции в 2-d масив да бъде разбрано лесно.

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

Следващите стъпки са:

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

Резултатът е както следва:

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

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

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

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

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

заключение

В този раздел научихме основните операции върху двумерни масиви. Тези 2-d масиви са полезни в реално време с матричните операции и много математически изчисления.

Масивите могат да се използват дори за показване на календари, разположения на паркинга и дори можем да играем шах.

Много други структури от данни като свързани списъци, опашка, графики, дървета трябва да използват тази концепция за двумерни масиви като основно изискване при съхраняване и достъп до местоположенията на различни елементи. Опитайте да решите основните операции на 2d масивите и се забавлявайте да научите C.

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

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

  1. Масиви в R
  2. Предимства на масива
  3. Масиви в C ++
  4. Масиви в JavaScript
  5. Примери за масиви в C #
  6. Масиви в PHP