5-dars: 2D massiv (matritsa)
Dars haqida
Davomiyligi: 90 daqiqa Maqsad: Talaba 2D (ikki o'lchovli) massivlar bilan ishlay olishi, matritsalarni boshqara olishi va asosiy amallarni bajara olishi kerak.
1. 2D massiv nima?
2D massiv — qator va ustun shaklidagi massiv (jadval).
int matrix[3][4] = {
{1, 2, 3, 4},
{5, 6, 7, 8},
{9, 10, 11, 12}
}; Ustun 0 Ustun 1 Ustun 2 Ustun 3
Qator 0: 1 2 3 4
Qator 1: 5 6 7 8
Qator 2: 9 10 11 122. E'lon qilish
int arr[3][4]; // 3 qator, 4 ustun
int arr[3][4] = {{1,2,3,4}, {5,6,7,8}, {9,10,11,12}};
int arr[3][4] = {1,2,3,4,5,6,7,8,9,10,11,12}; // ham bo'ladi
int arr[3][4] = {0}; // hammasi 0
int arr[][3] = {{1,2,3}, {4,5,6}}; // qator soni avtomatik3. Element'ga kirish
int matrix[3][4];
matrix[1][2] = 10; // qator 1, ustun 2
printf("%d\n", matrix[0][0]); // birinchi
printf("%d\n", matrix[2][3]); // oxirgi4. Sikl bilan
int matrix[3][4] = {{1,2,3,4}, {5,6,7,8}, {9,10,11,12}};
// Chiqarish
for (int i = 0; i < 3; i++) { // qator
for (int j = 0; j < 4; j++) { // ustun
printf("%d ", matrix[i][j]);
}
printf("\n");
}Natija:
1 2 3 4
5 6 7 8
9 10 11 125. To'ldirish
int matrix[5][5];
for (int i = 0; i < 5; i++) {
for (int j = 0; j < 5; j++) {
matrix[i][j] = i * 5 + j + 1;
}
}Natija:
1 2 3 4 5
6 7 8 9 10
11 12 13 14 15
16 17 18 19 20
21 22 23 24 256. Matritsa amallari
Qo'shish
A + B = C (bir xil o'lchamli matritsalar):
void add_matrix(int A[3][3], int B[3][3], int C[3][3]) {
for (int i = 0; i < 3; i++) {
for (int j = 0; j < 3; j++) {
C[i][j] = A[i][j] + B[i][j];
}
}
}Ayirish
C[i][j] = A[i][j] - B[i][j];Skalar ko'paytirish
void scalar_mult(int A[3][3], int k) {
for (int i = 0; i < 3; i++) {
for (int j = 0; j < 3; j++) {
A[i][j] *= k;
}
}
}7. Matritsa ko'paytmasi
A (m×n) × B (n×p) = C (m×p):
void multiply(int A[3][3], int B[3][3], int C[3][3]) {
for (int i = 0; i < 3; i++) {
for (int j = 0; j < 3; j++) {
C[i][j] = 0;
for (int k = 0; k < 3; k++) {
C[i][j] += A[i][k] * B[k][j];
}
}
}
}3 ta sikl — O(n³).
8. Transpose — qator va ustunlarni almashtirish
void transpose(int A[3][3], int T[3][3]) {
for (int i = 0; i < 3; i++) {
for (int j = 0; j < 3; j++) {
T[j][i] = A[i][j];
}
}
}Original: Transpose:
1 2 3 1 4 7
4 5 6 2 5 8
7 8 9 3 6 99. Diagonal yig'indi
int main_diagonal_sum(int A[3][3]) {
int sum = 0;
for (int i = 0; i < 3; i++) {
sum += A[i][i];
}
return sum;
}
int anti_diagonal_sum(int A[3][3], int n) {
int sum = 0;
for (int i = 0; i < n; i++) {
sum += A[i][n - 1 - i];
}
return sum;
}10. Qator/ustun yig'indisi
int row_sum(int A[3][4], int row) {
int sum = 0;
for (int j = 0; j < 4; j++) {
sum += A[row][j];
}
return sum;
}
int col_sum(int A[3][4], int col) {
int sum = 0;
for (int i = 0; i < 3; i++) {
sum += A[i][col];
}
return sum;
}11. Identity matrix (birlik matritsa)
Diagonal — 1, qolgani — 0:
1 0 0
0 1 0
0 0 1void make_identity(int A[3][3], int n) {
for (int i = 0; i < n; i++) {
for (int j = 0; j < n; j++) {
A[i][j] = (i == j) ? 1 : 0;
}
}
}12. Eng katta element va uning joyi
void find_max(int A[3][3], int *value, int *row, int *col) {
*value = A[0][0];
*row = 0;
*col = 0;
for (int i = 0; i < 3; i++) {
for (int j = 0; j < 3; j++) {
if (A[i][j] > *value) {
*value = A[i][j];
*row = i;
*col = j;
}
}
}
}Pointer'lar bilan bir nechta qiymat qaytarish — keyingi darslarda.
13. Funksiyaga 2D massiv
void print_matrix(int A[3][4], int rows, int cols) {
for (int i = 0; i < rows; i++) {
for (int j = 0; j < cols; j++) {
printf("%4d ", A[i][j]);
}
printf("\n");
}
}Muhim: C'da 2D massivni funksiyaga uzatish — ustun soni majburiy.
void func(int arr[][4], int rows); // OK
void func(int arr[3][4], int rows); // OK (qatori e'tiborsiz)
void func(int arr[][], int rows); // XATO14. To'liq misol: 9x9 ko'paytirish jadvali
#include <stdio.h>
int main(void) {
int table[9][9];
// To'ldirish
for (int i = 0; i < 9; i++) {
for (int j = 0; j < 9; j++) {
table[i][j] = (i + 1) * (j + 1);
}
}
// Chiqarish
printf(" ");
for (int j = 1; j <= 9; j++) printf("%4d", j);
printf("\n");
printf(" ");
for (int j = 0; j < 9; j++) printf("----");
printf("\n");
for (int i = 0; i < 9; i++) {
printf("%2d |", i + 1);
for (int j = 0; j < 9; j++) {
printf("%4d", table[i][j]);
}
printf("\n");
}
return 0;
}Natija:
1 2 3 4 5 6 7 8 9
-------------------------------
1 | 1 2 3 4 5 6 7 8 9
2 | 2 4 6 8 10 12 14 16 18
...
9 | 9 18 27 36 45 54 63 72 8115. 3D va undan ortiq
int cube[2][3][4]; // 3D — 2*3*4 = 24 elementFoydalanish — kam, lekin mavjud.
Misol: shaxmat doskasi (2D), volumetric data (3D), tensor (4D — neural network).
Darsdagi topshiriqlar
1 — Birinchi 2D
first-2d.c — 3x3 matritsa yarating, to'ldiring, chiqaring.
2 — Ko'paytirish jadvali
Dars matnidagi 9x9 jadval.
3 — Matritsa amallari
matrix-ops.c:
void add_matrix(int A[3][3], int B[3][3], int C[3][3]);
void sub_matrix(int A[3][3], int B[3][3], int C[3][3]);
void scalar_mult(int A[3][3], int k);
void multiply(int A[3][3], int B[3][3], int C[3][3]);
void transpose(int A[3][3], int T[3][3]);Hammasini yozing va sinab ko'ring.
4 — Diagonal va yig'indi
diagonal.c:
- Asosiy diagonal yig'indisi
- Antidiagonal yig'indisi
- Har qator yig'indisi
- Har ustun yig'indisi
- Umumiy yig'indi
5 — Spiral matrix
spiral.c — 5x5 matritsani spiral bo'yicha to'ldirish:
1 2 3 4 5
16 17 18 19 6
15 24 25 20 7
14 23 22 21 8
13 12 11 10 9Murakkab vazifa — kamida 30 daqiqa o'ylab.
6 — Maze
maze.c — 10x10 labirint (0 va 1):
int maze[10][10] = {
{0,1,0,0,0,0,1,0,0,0},
{0,1,0,1,1,0,1,0,1,0},
// ...
};Chiqaring — 1 o'rniga #, 0 o'rniga . bilan.
7 — Tic-tac-toe board
tictactoe.c — 3x3 doskani chizing:
char board[3][3] = {
{'X', 'O', 'X'},
{' ', 'X', 'O'},
{'O', ' ', 'X'}
}; X | O | X
-----------
| X | O
-----------
O | | XKim yutdi tekshiruv funksiyasini ham yozing.
8 — Image (greyscale)
image.c — 10x10 "rasm" — har piksel 0-9:
int image[10][10] = {0};
// Diagonal chiziq
for (int i = 0; i < 10; i++) image[i][i] = 9;
// Aylanada doira (taxminiy)
for (int i = 0; i < 10; i++) {
for (int j = 0; j < 10; j++) {
// markazdan masofa
int dx = i - 5, dy = j - 5;
int dist = dx*dx + dy*dy;
if (dist >= 9 && dist <= 16) image[i][j] = 5;
}
}Chiqaring — har raqam mos belgisi bilan (0 → , 5 → #, 9 → █).
9 — Statistics
stats-2d.c:
5x5 matritsa (random qiymatlar). Topish:
- Eng katta element va joyi
- Eng kichik element va joyi
- O'rtacha
- Yig'indi
- Toq va juftlar soni
10 — GitHub
$ mkdir 5-oy-dars-5
$ git add . && git commit -m "feat: dars 5 - 2D arrays" && git pushLug'at
| Termin | Izoh |
|---|---|
| 2D array | Ikki o'lchovli massiv |
| Matrix | Matritsa |
| Row | Qator |
| Column | Ustun |
| Diagonal | Diagonal |
| Transpose | Qator/ustun almashish |
| Identity matrix | Birlik matritsa |
| Multidimensional | Ko'p o'lchovli |