Download as pdf or txt
Download as pdf or txt
You are on page 1of 33

Trng i hc Khoa hc T nhin

Khoa Cng ngh thng tin


B mn Cng ngh phn mm

NHP MN LP TRNH

ThS. ng Bnh Phng


dbphuong@fit.hcmus.edu.vn

MNG HAI CHIU

VC

&
BB

Ni dung

Khi nim

Khai bo

Truy xut d liu kiu mng

Mt s bi ton trn mng 2 chiu

Mng hai chiu

VC

&
BB

Ma Trn

n-1

m-1

0
An

Am,n

n-1

n-1

Mng hai chiu

VC

&
BB

Ma Trn
0

n-1

n-1

n-1

dng > ct

n-1

0
0

dng < ct

n-1

n-1

n-1

n-1

n-1

dng + ct = n-1

n-1

n-1
dng = ct

An

n-1

An

dng + ct > n-1 dng + ct < n-1


Mng hai chiu

VC

&
BB

Khai bo kiu mng 2 chiu

C php
typedef <kiu c s> <tn kiu>[<N1>][<N2>];

N1, N2: s lng phn t mi chiu


V d
typedef int MaTran[3][4];
0

0
Kiu MaTran

1
2
Mng hai chiu

VC

&
BB

Khai bo bin mng 2 chiu

C php
Tng minh
<kiu c s> <tn bin>[<N1>][<N2>];

Khng tng minh (thng qua kiu)


typedef <kiu c s> <tn kiu>[<N1>][<N2>];
<tn kiu> <tn bin>;
<tn kiu> <tn bin 1>, <tn bin 2>;

Mng hai chiu

VC

&
BB

Khai bo bin mng 2 chiu

V d
Tng minh
int a[10][20], b[10][20];
int c[5][10];
int d[10][20];

Khng tng minh (thng qua kiu)


typedef int MaTran10x20[10][20];
typedef int MaTran5x10[5][10];

MaTran10x20 a, b;
MaTran11x11 c;
MaTran10x20 d;
Mng hai chiu

VC

&
BB

Truy xut n mt phn t

Thng qua ch s
<tn bin mng>[<gi tr cs1>][<gi tr cs2>]

V d
Cho mng 2 chiu nh sau
int a[3][4];

Cc truy xut

0
1
2

Hp l: a[0][0], a[0][1], , a[2][2], a[2][3]


Khng hp l: a[-1][0], a[2][4], a[3][3]

Mng hai chiu

VC

&
BB

Gn d liu kiu mng

Khng c s dng php gn thng thng


m phi gn trc tip gia cc phn t
<bin mng ch> = <bin mng ngun>; //sai
<bin mng ch>[<gi tr cs1>][gi tr cs2] =
<gi tr>;

V d
int a[5][10], b[5][10];
b = a; // Sai
int i, j;
for (i = 0; i < 5; i++)
for (j = 0; j < 10; j++)
b[i][j] = a[i][j];
Mng hai chiu

VC

&
BB

Truyn mng cho hm

Truyn mng cho hm


Tham s kiu mng trong khai bo hm ging
nh khai bo bin mng
void NhapMaTran(int a[50][100]);

Tham s kiu mng truyn cho hm chnh l a


ch ca phn t u tin ca mng
C th b s lng phn t chiu th 2 hoc con tr.
Mng c th thay i ni dung sau khi thc hin hm.
void NhapMaTran(int a[][100]);
void NhapMaTran(int (*a)[100]);
Mng hai chiu

10

VC

&
BB

Truyn mng cho hm

Truyn mng cho hm


S lng phn t thc s truyn qua bin khc
void XuatMaTran(int a[50][100], int m, int n);
void XuatMaTran(int a[][100], int m, int n);
void XuatMaTran(int (*a)[100], int m, int n);

Li gi hm
void NhapMaTran(int a[][100], int &m, int &n);
void XuatMaTran(int a[][100], int m, int n);
void main()
{
int a[50][100], m, n;
NhapMaTran(a, m, n);
XuatMaTran(a, m, n);
}
Mng hai chiu

11

VC

&
BB

Mt s bi ton c bn

Vit chng trnh con thc hin cc yu cu sau


Nhp mng
Xut mng
Tm kim mt phn t trong mng
Kim tra tnh cht ca mng
Tnh tng cc phn t trn dng/ct/ton ma
trn/ng cho chnh/na trn/na di
Tm gi tr nh nht/ln nht ca mng

Mng hai chiu

12

VC

&
BB

Mt s quy c

Kiu d liu
#define MAXD 50
#define MAXC 100

Cc chng trnh con


Hm void HoanVi(int x, int y): hon v gi tr
ca hai s nguyn.
Hm int LaSNT(int n): kim tra mt s c phi
l s nguyn t. Tr v 1 nu n l s nguyn
t, ngc li tr v 0.
Mng hai chiu

13

VC

&

Th tc HoanVi & Hm LaSNT

BB

void HoanVi(int &x, int &y)


{
int tam = x; x = y; y = tam;
}
int LaSNT(int n)
{
int i, dem = 0;
for (i = 1; i <= n; i++)
if (n % i == 0)
dem++;

if (dem == 2)
return 1;
else return 0;
}
Mng hai chiu

14

VC

&
BB

Nhp Ma Trn

Yu cu
Cho php nhp mng a, m dng, n ct

tng
Cho trc mt mng 2 chiu c dng ti a l MAXD,
s ct ti a l MAXC.
Nhp s lng phn t thc s m, n ca mi chiu.
Nhp tng phn t t [0][0] n [m-1][n-1].

Mng hai chiu

15

VC

&

Hm Nhp Ma Trn

BB

void NhapMaTran(int a[][MAXC], int &m, int &n)


{
printf(Nhap so dong, so cot cua ma tran: );
scanf(%d%d, &m, &n);
int i, j;
for (i = 0; i < m; i++)
for (j = 0; j < n; j++)
{
printf(Nhap a[%d][%d]: , i, j);
scanf(%d, &a[i][j]);
}

Mng hai chiu

16

VC

&
BB

Xut Ma Trn

Yu cu
Cho php nhp mng a, m dng, n ct

tng
Xut gi tr tng phn t ca mng 2 chiu t dng
c 0 n dng m-1, mi dng xut gi gi tr ca ct 0
n ct n-1 trn dng .

Mng hai chiu

17

VC

&

Hm Xut Ma Trn

BB

void XuatMaTran(int a[][MAXC], int m, int n)


{
int i, j;
for (i = 0; i < m; i++)
{
for (j = 0; j < n; j++)
printf(%d , a[i][j]);
printf(\n);
}
}

Mng hai chiu

18

VC

&
BB

Tm kim mt phn t trong Ma Trn

Yu cu
Tm xem phn t x c nm trong ma trn a kch
thc mxn hay khng?

tng
Duyt tng phn ca ma trn a. Nu phn t ang
xt bng x th tr v c (1), ngc li tr v khng c
(0).

Mng hai chiu

19

VC

&
BB

Hm Tm Kim
int TimKiem(int a[][MAXC], int m, int n, int x)
{
int i, j;
for (i = 0; i < m; i++)
for (j = 0; j < n; j++)
if (a[i][j] == x)
return 1;
return 0;
}

Mng hai chiu

20

VC

&
BB

Kim tra tnh cht ca mng

Yu cu
Cho trc ma trn a kch thc mxn. Ma trn a c
phi l ma trnton cc s nguyn t hay khng?

tng
Cch 1: m s lng s ngt ca ma trn. Nu s
lng ny bng ng mxn th ma trn ton ngt.
Cch 2: m s lng s khng phi ngt ca ma
trn. Nu s lng ny bng 0 th ma trn ton ngt.
Cch 3: Tm xem c phn t no khng phi s ngt
khng. Nu c th ma trn khng ton s ngt.

Mng hai chiu

21

VC

&

Hm Kim Tra (Cch 1)

BB

int KiemTra_C1(int a[][MAXC], int m, int n)


{
int i, j, dem = 0;
for (i = 0; i < m; i++)
for (j = 0; j < n; j++)
if (LaSNT(a[i][j] == 1)
dem++;
if (dem == m * n)
return 1;
return 0;

Mng hai chiu

22

VC

&

Hm Kim Tra (Cch 2)

BB

int KiemTra_C2(int a[][MAXC], int m, int n)


{
int i, j, dem = 0;
for (i = 0; i < m; i++)
for (j = 0; j < n; j++)
if (LaSNT(a[i][j] == 0)
dem++;
if (dem == 0)
return 1;
return 0;

Mng hai chiu

23

VC

&

Hm Kim Tra (Cch 2)

BB

int KiemTra_C3(int a[][MAXC], int m, int n)


{
int i, j, dem = 0;
for (i = 0; i < m; i++)
for (j = 0; j < n; j++)
if (LaSNT(a[i][j] == 0)
return 0;
return 1;
}

Mng hai chiu

24

VC

&
BB

Tnh tng cc phn t

Yu cu
Cho trc ma trn a, kch thc mxn. Tnh tng cc
phn t trn:

Dng d, ct c
ng cho chnh, ng cho ph (ma trn vung)
Na trn/di ng cho chnh (ma trn vung)
Na trn/di ng cho ph (ma trn vung)

tng
Duyt ma trn v cng dn cc phn t c ta (dng,
ct) tha yu cu.

Mng hai chiu

25

VC

&

Hm tnh tng trn dng

BB

int TongDong(int a[][MAXC], int m, int n, int d)


{
int j, tong;
tong = 0;
for (j = 0; j < n; j++)
// Duyt cc ct
tong = tong + a[d][j];
return tong;
}

Mng hai chiu

26

VC

&

Hm tnh tng trn ct

BB

int TongCot(int a[][MAXC], int m, int c)


{
int i, tong;
tong = 0;
for (i = 0; i < m; i++)
// Duyt cc dng
tong = tong + a[i][c];
return tong;
}

Mng hai chiu

27

VC

&

Hm tnh tng ng cho chnh

BB

int TongDCChinh(int a[][MAXC], int n)


{
int i, tong;
tong = 0;
for (i = 0; i < n; i++)
tong = tong + a[i][i];
return tong;
}

Mng hai chiu

28

VC

&

Hm tnh tng trn ng cho chnh

BB

int TongTrenDCChinh(int a[][MAXC], int n)


{
int i, j, tong;
tong = 0;
for (i = 0; i < n; i++)
for (j = 0; j<n; j++)
if (i < j)
tong = tong + a[i][j];
return tong;

Mng hai chiu

29

VC

&

Hm tnh tng di ng cho chnh

BB

int TongTrenDCChinh(int a[][MAXC], int n)


{
int i, j, tong;
tong = 0;
for (i = 0; i < n; i++)
for (j = 0; j < n; j++)
if (i > j)
tong = tong + a[i][j];
return tong;

Mng hai chiu

30

VC

&

Hm tnh tng trn ng cho ph

BB

int TongDCPhu(int a[][MAXC], int n)


{
int i, tong;
tong = 0;
for (i = 0; i < n; i++)
tong = tong + a[i][n-i-1];
return tong;
}

Mng hai chiu

31

VC

&
BB

Tm gi tr ln nht ca Ma Trn

Yu cu
Cho trc ma trn a, kch thc mxn. Tm gi tr ln
nht trong ma trn a (gi l max)

tng
Gi s gi tr max hin ti l gi tr phn t u tin
a[0][0]
Ln lt kim tra cc phn t cn li cp nht max.

Mng hai chiu

32

VC

&

Hm tm Max

BB

int TimMax(int a[][MAXC], int m, int n)


{
int i, j, max;
max = a[0][0];
for (i = 0; i < m; i++)
for (j = 0; j < n; j++)
if (a[i][j] > max)
max = a[i][j];
return max;

Mng hai chiu

33

You might also like