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

B mn Cng ngh phn mm

Khoa Cng ngh thng tin


Trng i hc Khoa hc T nhin

K THUT LP TRNH
ThS. ng Bnh Phng
dbphuong@fit.hcmus.edu.vn

D LIU KIU CU TRC

1
&
VC
BB
Ni dung

1 Khi nim kiu cu trc (struct)

2 Khai bo & truy xut kiu cu trc

3 Kiu d liu hp nht (union)

4 Bi tp

D liu kiu cu trc


2
&
VC
BB
t vn

Thng tin 1 SV
MSSV: kiu chui
Tn SV: kiu chui
NTNS: kiu chui
Phi: kiu k t
im Ton, L, Ha: kiu s thc
Yu cu
Lu thng tin n SV?
Truyn thng tin n SV vo hm?
D liu kiu cu trc
3
&
VC
BB
t vn

Khai bo cc bin lu tr 1 SV
char mssv[8]; // 0012078
char hoten[30]; // Nguyen Van A
char ntns[9]; // 29/12/82
char phai; // n
float toan, ly, hoa;// 8.5 9.0 10.0
Truyn thng tin 1 SV cho hm
void xuat(char *mssv, char *hoten,
char *ntns, char phai, float toan, float ly, float
hoa);
D liu kiu cu trc
4
&
VC
BB
t vn

Nhn xt
t tn bin kh khn v kh qun l
Truyn tham s cho hm qu nhiu
Tm kim, sp xp, sao chp, kh khn
Tn nhiu b nh

tng
Gom nhng thng tin ca cng 1 SV thnh
mt kiu d liu mi => Kiu struct

D liu kiu cu trc


5
&
VC
BB
Khai bo kiu cu trc

C php
struct <tn kiu cu trc>
{
<kiu d liu> <tn thnh phn 1>;

<kiu d liu> <tn thnh phn n>;
};

V d
struct DIEM
{
int x;
int y;
};

D liu kiu cu trc


6
&
VC
BB
Khai bo bin cu trc

C php tng minh


struct <tn kiu cu trc>
{
<kiu d liu> <tn thnh phn 1>;

<kiu d liu> <tn thnh phn n>;
} <tn bin 1>, <tn bin 2>;

V d
struct DIEM
{
int x;
int y;
} diem1, diem2;

D liu kiu cu trc


7
&
VC
BB
Khai bo bin cu trc

C php khng tng minh


struct <tn kiu cu trc>
{
<kiu d liu> <tn thnh phn 1>;

<kiu d liu> <tn thnh phn n>;
};
struct <tn kiu cu trc> <tn bin>;
V d
struct DIEM
{
int x;
int y;
};
struct DIEM diem1, diem2;// C++ c th b struct
D liu kiu cu trc
8
&
VC
BB
S dng typedef

C php
typedef struct
{
<kiu d liu> <tn thnh phn 1>;

<kiu d liu> <tn thnh phn n>;
} <tn kiu cu trc>;
<tn kiu cu trc> <tn bin>;
V d
typedef struct
{
int x;
int y;
} DIEM;
struct DIEM diem1, diem2;
D liu kiu cu trc
9
&
VC
BB
Khi to cho bin cu trc

C php tng minh


struct <tn kiu cu trc>
{
<kiu d liu> <tn thnh phn 1>;

<kiu d liu> <tn thnh phn n>;
} <tn bin> = {<gi tr 1>,,<gi tr n>};

V d
struct DIEM
{
int x;
int y;
} diem1 = {2912, 1706}, diem2;

D liu kiu cu trc


10
&
VC
BB
Truy xut d liu kiu cu trc

c im
Khng th truy xut trc tip
Thng qua ton t thnh phn cu trc . hay
cn gi l ton t chm (dot operation)
<tn bin cu trc>.<tn thnh phn>

V d
struct DIEM
{
int x;
int y;
} diem1;
printf(x = %d, y = %d, diem1.x, diem1.y);
D liu kiu cu trc
11
&
VC
BB
Gn d liu kiu cu trc

C 2 cch
<bin cu trc ch> = <bin cu trc ngun>;

<bin cu trc ch>.<tn thnh phn> = <gi tr>;

V d
struct DIEM
{
int x, y;
} diem1 = {2912, 1706}, diem2;

diem2 = diem1;
diem2.x = diem1.x;
diem2.y = diem1.y * 2;

D liu kiu cu trc


12
&
VC
BB
Cu trc phc tp

Thnh phn ca cu trc l cu trc khc


struct DIEM
{
int x;
int y;
};

struct HINHCHUNHAT
{
struct DIEM traitren;
struct DIEM phaiduoi;
} hcn1;

hcn1.traitren.x = 2912;
hcn1.traitren.y = 1706;
D liu kiu cu trc
13
&
VC
BB
Cu trc phc tp

Thnh phn ca cu trc l mng


struct SINHVIEN
{
char hoten[30];
float toan, ly, hoa;
} sv1;

strcpy(sv1.hoten, Nguyen Van A);
sv1.toan = 10;
sv1.ly = 6.5;
sv1.hoa = 9;

D liu kiu cu trc


14
&
VC
BB
Cu trc phc tp

Cu trc quy (t tr)


struct PERSON
{
char hoten[30];
struct PERSON *father, *mother;
};

struct NODE
{
int value;
struct NODE *pNext;
};

D liu kiu cu trc


15
&
VC
BB
Cu trc phc tp

Thnh phn ca cu trc c kch thc theo bit


struct bit_fields
{
int bit_0 : 1;
int bit_1_to_4 : 4;
int bit_5 : 1;
int bit_6_to_15 : 10;
};

15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0

D liu kiu cu trc


16
&
VC
BB
Kch thc ca struct

V d
struct A
{
int a;
double b;
};
sizeof(A) = ???

struct B1 struct B2
{ {
int a; int a;
int b; double c;
double c; int b;
}; };
sizeof(B1) = ??? sizeof(B2) = ???
D liu kiu cu trc
17
&
VC
BB
Ch th #pragma pack

Ch th #pragma pack (n)


n = 1, 2, 4, 8, 16 (byte)
Bin ln nht ca cc thnh phn trong struct
BC n mc nh l 1
VC++ n mc nh l 8
Project settings Compile Option C/C++ Code
Generation Structure Alignment
Canh bin cho 1 cu trc
#pragma pack(push, 1)
struct MYSTRUCT { };
#pragma pack(pop)

D liu kiu cu trc


18
&
VC
BB
#pragma pack

V d: khng c #pragma pack (1)


struct A {
double a; a a a a a a a a
int b;
int c; b b b b c c c c
};
struct B {
int b; b b b b m 4B
double a; a a a a a a a a
int c;
}; c c c c m 4B
struct C {
int b; b b b b c c c c
int c;
double a; a a a a a a a a
}; D liu kiu cu trc
19
&
VC
BB
Cc lu v cu trc

Lu
Kiu cu trc c nh ngha lm khun
dng cn bin cu trc c khai bo s
dng khun dng nh ngha.
Trong C++, c th b t kha struct khi khai
bo bin (hoc s dng typedef)
Khi nhp cc bin kiu s thc trong cu trc
phi nhp thng qua mt bin trung gian.
struct DIEM { float x, y;} d1;
float temp; scanf(%f, &temp); d1.x = temp;

D liu kiu cu trc


20
&
VC
BB
Mng cu trc

Mng cu trc
Tng t nh mng vi kiu d liu c s
(char, int, float, )
struct DIEM
{
int x;
int y;
};

DIEM mang1[20];
DIEM mang2[10] = {{3, 2}, {4, 4}, {2, 7}};

D liu kiu cu trc


21
&
VC
BB
Truyn cu trc cho hm

Truyn cu trc cho hm


Ging nh truyn kiu d liu c s
Tham tr (khng thay i sau khi kt thc hm)
Tham chiu
Con tr
V d
struct DIEM { int x, y; };

void xuat1(int x, int y) { };


void xuat2(DIEM diem) { };
void xuat3(DIEM &diem) { };
void xuat4(DIEM *diem) { };
D liu kiu cu trc
22
&
VC
BB
Hp nht union

Khi nim
c khai bo v s dng nh cu trc
Cc thnh phn ca union c chung a ch
u (nm chng ln nhau trong b nh)
Khai bo
union <tn kiu union>
{
<kiu d liu> <tn thnh phn 1>;

<kiu d liu> <tn thnh phn 2>;
};

D liu kiu cu trc


23
&
VC
BB
So snh struct v union

V d
struct MYSTRUCT union MYUNION
{ {
char c; char c;
int n; int n;
} s; } u;

s.c = 1; s.n = 2; u.c = 1; u.n = 2;

0 1 2 3 4 0 1 2 3
01 02 00 00 00 02 00 00 00
01
c n c
n
D liu kiu cu trc
24
&
VC
BB
V d

struct trong union


union date_tag
{
char full_date[9];
struct
{
char month[2];
char break_value1;
char day[2];
char break_value2;
char year[2];
} part_date_tag;
} date = {29/12/82};

D liu kiu cu trc


25
&
VC
BB
V d

union trong struct


struct generic_tag
{
char type;
union
{
char c;
int i;
float f;
} share_tag;
};

D liu kiu cu trc


26
&
VC
BB
Bi tp

Phn s
Khai bo kiu d liu phn s (PHANSO)
Nhp/Xut phn s
Rt gn phn s
Tnh tng, hiu, tch, thng hai phn s
Kim tra phn s ti gin
Quy ng hai phn s
Kim tra phn s m hay dng
So snh hai phn s
D liu kiu cu trc
27
&
VC
BB
Bi tp

n thc
Khai bo kiu d liu n thc (DONTHUC)
Nhp/Xut n thc
Tnh tch, thng hai n thc
Tnh o hm cp 1 ca n thc
Tnh o hm cp k ca n thc
Tnh gi tr n thc ti x = x0

D liu kiu cu trc


28
&
VC
BB
Bi tp

a thc
Khai bo kiu d liu a thc (DATHUC)
Nhp/Xut a thc
Tnh tng, hiu, tch hai a thc
Tnh o hm cp 1 ca a thc
Tnh o hm cp k ca a thc
Tnh gi tr n thc ti x = x0

D liu kiu cu trc


29
&
VC
BB
Bi tp

im trong mt phng Oxy


Khai bo kiu d liu im (DIEM)
Nhp/Xut ta im
Tnh khong cch gia hai im
Tm im i xng qua gc to /trc Ox/Oy
Kim tra im thuc phn t no?
Tam gic
Khai bo kiu d lu tam gic (TAMGIAC)
Nhp/Xut tam gic
Tnh chu vi, din tch tam gic 30
D liu kiu cu trc
&
VC
BB
Bi tp

Ngy
Khai bo kiu d liu ngy (NGAY)
Nhp/Xut ngy (ngy, thng, nm)
Kim tra nm nhun
Tnh s th t ngy trong nm
Tnh s th t ngy k t ngy 1/1/1
Tm ngy trc , sau k ngy
Tnh khong cch gia hai ngy
So snh hai ngy
D liu kiu cu trc
31
&
VC
BB
Bi tp

Mng phn s
Nhp/Xut n phn s
Rt gn mi phn s
m s lng phn s m/dng trong mng
Tm phn s dng u tin trong mng
Tm phn s nh nht/ln nht trong mng
Sp xp mng tng dn/gim dn

D liu kiu cu trc


32
&
VC
BB
Bi tp

Mng im
Nhp/Xut n im
m s lng im c honh dng
m s lng im khng trng vi cc im
khc trong mng
Tm im c honh ln nht/nh nht
Tm im gn gc ta nht

D liu kiu cu trc


33

You might also like