2 ölçülü massivi 1 ölçülü massivə necə çevirmək olar


cavab 1:

2B massivinin 1D massivinə çevrilməsi iki növ ola bilər:

  1. Sıra müdrikdir
  2. Sütun ağıllıdır

Misal:

2B sıra:

{1, 2, 3

4, 5, 6

7, 8, 9}

1D sıra sıra müdrik:

{1, 2, 3, 4, 5, 6, 7, 8, 9}

1D sıra Sütun müdrik:

{1, 4, 7, 2, 5, 8, 3, 6, 9}

Proqram c:

  1. # daxil edin
  2. # n təyin et 3
  3. int main ()
  4. {
  5. int a [n] [n], b [n * n], c [n * n], i, j, k = 0, l = 0;
  6. printf (“\ n 2D massivinin elementlərini daxil edin:“);
  7. üçün (i = 0; i
  8. {
  9. üçün (j = 0; j
  10. {
  11. scanf (“% d”, & a [i] [j]);
  12. }
  13. }
  14. printf (“\ n Verilən 2B sıra: \ n“);
  15. üçün (i = 0; i
  16. {
  17. üçün (j = 0; j
  18. {
  19. printf (“% d”, a [i] [j]);
  20. }
  21. printf (“\ n”);
  22. }
  23. printf (“\ n Satır müdrik \ n”);
  24. üçün (i = 0; i
  25. {
  26. üçün (j = 0; j
  27. {
  28. b [k] = a [i] [j];
  29. k ++;
  30. }
  31. }
  32. printf (“\ n Sütun müdrik \ n”);
  33. üçün (i = 0; i
  34. {
  35. üçün (j = 0; j
  36. {
  37. c [l] = a [j] [i];
  38. l ++;
  39. }
  40. }
  41. }

çıxış:

2B massivinin elementlərini daxil edin: 1 2 3 4 5 6 7 8 9

2B sıra verilmişdir:

1 2 3

4 5 6

7 8 9

Sıra müdrikdir

1 2 3 4 5 6 7 8 9

Sütun ağıllıdır

1 4 7 2 5 8 3 6 9


cavab 2:

Yaxşı !! Bu suala cavab vermək üçün iki fərqli yol var:

1. 2D sıra bütün tarixini saxlayan yeni bir sıra yaratmaqla.

Bu metodun kodu aşağıda verilmişdir:

newarray [], 2D array üçün məlumatları saxlayacaq yeni dizidir. Və arr [m] [n] çevriləcək 2D massividir.

üçün (i = 0; i

{

üçün (j = 0; j

{

int mövqeyi = i * n + j;

newArr [position] = arr [i] [j];

}

}

2. 2D massivinin elementlərinə 1D şəklində daxil ola bilərik.

Nümunə: 2 m sıra [m] [n] olsun.

O zaman bu ifadələr doğrudur.

arr [0] [1] = * (arr [0] + 4)

arr [1] [2] = * ((arr +1) +2)

arr [1] [2] = * (* (arr + 1) +2)

Bu sualınıza cavab verir.

Salam !!


cavab 3:

Bu kod mənim köməyim:

# daxil edin int main (){ int arr [4] [4] = {{1,2,3,4}, {5,6,7,8}, {9,10,11,12}, {13,14,15,16}} ; int arr2 [16]; int i, j, k = 0; printf ("2D-Array \ n"); üçün (i = 0; i <4; i ++) { üçün (j = 0; j <4; j ++) { printf ("% d", arr [i] [j]); arr2 [k] = arr [i] [j]; k ++; } printf ("\ n"); } printf ("1D-Array \ n"); üçün (i = 0; i <16; i ++) printf ("% d", arr2 [i]); qayıt 0;}

Budur çıxış:


cavab 4:

Sadə bir proqram:

# daxil edin

void main ()

{

int arr2d [3] [2] = {1,2,3,4,5,6};

int arr1d [3 * 2] = {0};

int i1dIndex = 0;

printf ("Bunu 2-ci sıra kimi çap etmək: \ n \ n");

üçün (int iOuter = 0; iOuter <3; iOuter ++)

{

üçün (int iInner = 0; iInner <2; iInner ++)

{

printf ("% d", arr2d [iOuter] [iInner]);

arr1d [i1dIndex] = arr2d [iOuter] [iInner];

i1dIndex ++;

}

printf ("\ n");

}

printf ("\ nBu 1d sıra kimi çap olunur: \ n \ n");

üçün (int iIndex = 0; iIndex <(3 * 2); iIndex ++)

{

printf ("% d", arr1d [iIndex]);

}

}

Çıxış:

Bunu 2-ci sıra kimi çap etmək:

1 2

3 4

5 6

Bunu 1-ci sıra kimi çap etmək:

1 2 3 4 5 6


cavab 5:

Başlamazdan əvvəl hansı əmri yerinə yetirəcəyinizə dair ardıcıl olmalısınız (sıra müdrik və ya sütun müdrik).

Əgər sıra ağıllıdırsa

m = 0-dan maksimum cərgəyə başlayan satırları göstərir

n = 0-cu sütundan maksimum sütuna başlayan sütunları göstərir

new_position = m * n + n

üçün (int i = 0; i

üçün (int j = 0; j

int mövqeyi = i * n + j;

newArr [position] = arr [i] [j];

}

}


cavab 6:

Buketlər üçün ikisini istifadə edərək edə bilərsiniz.

Bu iki ölçülü bir sıra olduğunuzu düşünün

two_ boyut (x] [y] x * y elementlərinin matrisi kimi görünə bilər

Bunu bir ölçülü bir sıra (new_array) içərisinə qoymaq istəyirsinizsə, iki ölçülü massivdəki bütün mövqelər üzərində təkrarlamaq və bu elementləri x * y ölçüsündə ardıcıl olaraq əlavə etməyə davam etmək üçün yalnız iki buğaya ehtiyacınız var.

Buna bənzər bir şey.

new_array = int [x * y]

sayğac = 0

üçün (iteratorx == 0; iteratorx <=; iteratorx ++)

üçün (yineleyici = 0; yineleyici <= y; yineleyici ++)

new_array [counter] = iki_ölçü [iteratorx] [təkrar]

sayğac ++


cavab 7:

# "stdio.h" daxil edin

int main ()

{

int i, j, k = 0;

printf ("massivi daxil edin \ n");

int a [100] [100];

int c [100];

printf ("\ n matrisi daxil edin \ n");

üçün (i = 0; i <3; i ++)

üçün (j = 0; j <3; j ++)

scanf ("% d", & a [i] [j]);

printf ("\ n daxil edilmiş matris \ n");

üçün (i = 0; i <3; i ++)

üçün (j = 0; j <3; j ++)

printf ("a [% d] [% d]% d \ t \ t", i, j, a [i] [j]);

isə (k! = 9)

{

üçün (i = 0; i <3; i ++)

{üçün (j = 0; j <3; j ++)

{c [k] = a [i] [j];

k ++;}

}

}

printf ("\ n çevrilmiş massiv \ n" dir);

üçün (k = 0; k <9; k ++)

printf ("% d,", c [k]);

qayıt 0;

}


cavab 8:

Bütün massivi kopyalamaq üçün sadəcə memcpy istifadə edin.

# daxil edin

# ARR_COLS-ı təyin edin 5

# ARR_ROWS 4-i təyin edin

# ARR_2D_LEN təyin edin (ARR_COLS * ARR_ROWS)

int main ()

{

int arr_2d [ARR_COLS] [ARR_ROWS] = {{5,2,6,4}, {7,6,1,8}, {10,12,11,42}, {13,74,15,46}, {23,56,78,57}};

int arr_1d [ARR_2D_LEN];

memcpy (arr_1d, arr_2d, sizeof (arr_2d));

int i;

üçün (i = 0; i

printf ("% d", arr_1d [i]);

qayıt 0;

}


cavab 9:

2 ölçülü massivi 1 ölçülü massivə çevirmək üçün ya sıra sıra ilə, ya da sütun əsas qaydada gedə bilərsiniz. Sıra sıra dedikdə 2D sıra məlumatlarını 1 D sıra cərgəsində saxladığımızı demək istəyirəm.

Məsələn. (Sütun Major)

int sayı = 0;

üçün (int i = 0; i

üçün (int j = 0; j

oneDArray [count ++] = twoDArray [i] [j];

}}


cavab 10:

2D massivinin birinci sətrini oxumaq və 1D massivində saxlamaq üçün bir funksiya düzəldin.

Bunu 2B massivinin bütün satırları üçün təkrarlayın və sonunda bütün elementləri özündə cəmləşdirən 1d sıra əldə edəcəksiniz.