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

Nhp mn lp trnh

ThS. ng Bnh Phng (dbphuong@fit.hcmus.edu.vn)


D liu c cu trc
D liu mng vi kch thc c nh
ng dng mng trong lp trnh
Cc vn tm hiu m rng kin thc
ngh nghip
Thut ng v bi c thm ting Anh

10/7/2013 Khoa CNTT - H Khoa hc t nhin 2


Khai bo cc bin lu tr 1 SV
char mssv[8]; // 0912345
char hoten[30]; // Nguyen Van A
char ntns[9]; // 01/01/91
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);

10/7/2013 Khoa CNTT - H Khoa hc t nhin 4


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
10/7/2013 Khoa CNTT - H Khoa hc t nhin 5
C php
struct <tn kiu cu trc> {
<kiu d liu> <tn thnh phn 1>;

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

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

10/7/2013 Khoa CNTT - H Khoa hc t nhin 6


C php khai bo 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 Point2D {
int x;
int y;
} p1, p2;

10/7/2013 Khoa CNTT - H Khoa hc t nhin 7


C php khai bo 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 1>, <tn bin 2>;

V d
struct Point2D {
int x;
int y;
};
struct Point2D p1, p2; // C++ c th b t kha struct

10/7/2013 Khoa CNTT - H Khoa hc t nhin 8


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 1>, <tn bin 2>;

V d
tyepdef struct {
int x;
int y;
} Point2D;
Point2D p1, p2;

10/7/2013 Khoa CNTT - H Khoa hc t nhin 9


C php
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 2>, , <gi tr n>};

V d
struct Point2D {
int x;
int y;
} p1= {2912, 1706}, p2;

10/7/2013 Khoa CNTT - H Khoa hc t nhin 10


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 thn phn>

V d
struct Point2D {
int x, y;
} p = {2912, 1706};
void show(Point2D p) { printf(x = %d, y = %d\n, p.x, py); }

10/7/2013 Khoa CNTT - H Khoa hc t nhin 11


C 2 cch
<bin cu trc ch> = bin cu trc ngun
<bin cu trc ch>.<tn thnh phn> = <gi tr>

V d
struct Point2D {
int x, y;
} p1 = {2912, 1706}, p2;
void main() {
p2 = p1;
p2.x = p1.x;
p2.y = p1.y * 2;
}

10/7/2013 Khoa CNTT - H Khoa hc t nhin 12


Cc khai bo cn thit
#include <iostream>
using namespace std;
typedef struct {
double x, y;
} Point2D;
typedef struct {
Point2D ver[3];
} Triangle;
void inputPoint2D(Point2D& p);
void showPoint2D(Point2D p);
void gravCenter(Triangle t, Point2D& p);
void inputTriangle(Triangle& t);

10/7/2013 Khoa CNTT - H Khoa hc t nhin 13


Cc nh ngha hm
void inputPoint2D(Point2D& p) {
cout << + Coor X = ; cin >> p.x;
cout << + Coor Y = ; cin >> p.y;
}
void showPoint2D(Point2D p) {
cout << ( << p.x << , << p.y << (;
}
void gravCenter(Triangle t, Point2D& p) {
p.x = (t.ver[0].x + t.ver[1].x + t.ver[2].x) / 3;
p.y = (t.ver[0].y + t.ver[1].y + t.ver[2].y) / 3;
}

10/7/2013 Khoa CNTT - H Khoa hc t nhin 14


Cc nh ngha hm
void inputTriangle(Point2D& p) {
for (int i = 0; i < 3; i++) {
cout << Vertex << i + 1 << : << endl;
inputPoint2D(t.ver[i]);
}
}
void main() {
Triangle t; Point2D p;
inputTriangle(t);
gravCenter(t, p);
cout << Gravity center: ;
showPoint2D(p);
}

10/7/2013 Khoa CNTT - H Khoa hc t nhin 15


Cc khai bo cn thit
#include <iostream>
using namespace std;
typedef struct {
long num, denom;
} Fraction;
void greatestDivisor(long a, long b);
void reduce(Fraction& p);
Fraction add(Fraction p, Fraction q);
Fraction sub(Fraction p, Fraction q);
void showFraction(Fraction p);

10/7/2013 Khoa CNTT - H Khoa hc t nhin 16


Cc nh ngha hm
void greatestDivisor(long a, long b) {
// Vit nh cc v d trc
}
void reduce(Fraction& p) {
long gcd = greatestDivisor(p.num, p.denom);
p.num /= gcd; p.denom /= gcd;
}
Fraction add(Fraction p, Fraction q) {
Fraction r;
r.num = p.num * q.denom + p.denom * q.num;
r.denom = p.denom * q.denom;
return r;
}

10/7/2013 Khoa CNTT - H Khoa hc t nhin 17


Cc nh ngha hm
Fraction sub(Fraction p, Fraction q) {
q.num = -q.num;
return add(p, q);
}
void showFraction(Fraction p) {
reduce(p); // Ti gin trc khi in ra
cout << p.num << / << p.denom;
}

10/7/2013 Khoa CNTT - H Khoa hc t nhin 18


Khi nim
L mt kiu d liu c cu trc do ngi lp
trnh nh ngha.
Biu din mt dy cc bin c cng kiu. V
d: dy cc s nguyn, dy cc k t
Kch thc c xc nh ngay khi khai bo
v khng bao gi thay i.
NNLT C lun ch nh mt khi nh lin tc
cho mt bin kiu mng.

10/7/2013 Khoa CNTT - H Khoa hc t nhin 20


C php tng minh
<kiu c s> <tn bin mng>[<s phn t>];
V d
int a[100], b[200], c[100];
float d[50];
Lu
Phi xc nh <s phn t> c th (hng) khi
khai bo.
B nh s dng = <tng s phn t> *
sizeof(<kiu c s>)
L mt dy lin tc c ch s t 0 n <tng s
phn t> - 1
10/7/2013 Khoa CNTT - H Khoa hc t nhin 21
C php (khng tng minh)
typedef <kiu c s> <tn kiu mng>[<s lng phn t>];
<tn kiu mng> <tn bin mng>;

V d
typedef int Arr100int[100];
typedef int Arr200int[200];
typedef float Arr50float[50];
Arr100int a, c; // int a[100], c[100];
Arr200int b; // int b[200];
Arr50float d; // float d[50];

10/7/2013 Khoa CNTT - H Khoa hc t nhin 22


S dng mt trong 4 cch sau:
Khi to gi tr cho mi phn t ca mng
int a[4] = {2912, 1706, 1506, 1904};

Khi to gi tr cho mt s phn t u mng


int a[4] = {2912, 1706};

Khi to gi tr 0 cho mi phn t ca mng


int a[4] = {0};

T ng xc nh s lng phn t
int a[] = {2912, 1706, 1506, 1904};

10/7/2013 Khoa CNTT - H Khoa hc t nhin 23


Thng qua ch s:
<tn bin mng>[<ch s>]
V d cho mng int a[4];
Cc truy xut hp l: a[0], a[1], a[2], a[3]
Cc truy xut khng hp l: a[-1], a[4], a[5]

10/7/2013 Khoa CNTT - H Khoa hc t nhin 24


Khng c s dng php gn thng
thng m phi gn trc tip gia cc
phn t tng ng
V d
int a[3] = {1, 2, 3}, b[3];

void main() {
b = a; // sai
for (int i = 0; i < 3; i++)
b[i] = a[i];
}

10/7/2013 Khoa CNTT - H Khoa hc t nhin 25


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 (hoc s dng
con tr), s lng phn t thc s truyn
km theo.
Mng c th thay i ni dung sau khi thc
hin hm.
V d
void sort(int a[], int n);

10/7/2013 Khoa CNTT - H Khoa hc t nhin 26


Mt s thao tc c bn
Nhp/xut mng
Tm kim mt phn t trong mng
Kim tra tnh cht ca mng
Chia/gp mng
Tm gi tr nh nht/ln nht trong mng
Sp xp mng
Thm/xa/sa mt phn t trong mng

10/7/2013 Khoa CNTT - H Khoa hc t nhin 27


Mng 2 chiu ging nh mt ma trn gm
nhiu dng v nhiu ct giao nhau to
thnh cc , mi l mt phn t mng.
Mi thao tc x l trn mng 2 chiu hon
ton tng t trn mng 1 chiu.
Tm thi gii hn trong phm vi mng 2
chiu tnh (s dng v ct c nh).
(Xem trong gio trnh NMLT trang 203-221)

10/7/2013 Khoa CNTT - H Khoa hc t nhin 28


K thut dng bng tra cu trong b nh
ci tin tnh ton v x l.
K thut dng c hiu khi x l mng.
Thut ton tm kim v tnh ton trn
mng.
Thut ton xo trn, sp xp cc phn t
ca mng.

10/7/2013 Khoa CNTT - H Khoa hc t nhin 30


S dng mng kch thc bin ng.
Qui hoch ng v ng dng gii cc
bi ton ti u.
Cc thut ton chia tr.

10/7/2013 Khoa CNTT - H Khoa hc t nhin 32


array parameter(s), array argument(s): tham s mng
array size: kch thc mng
column: ct
copy: sao chp
data type declaration, data type definition: khai bo kiu d liu
dynamic array: mng ng
element: phn t
implementation: ci t (vit m ngun)
index: ch s
insert: chn vo
one-dimension array: mng mt chiu
two-dimension array: mng hai chiu
merge: trn li

10/7/2013 Khoa CNTT - H Khoa hc t nhin 34


remove, delete: xa i
row: dng
split: tch ra
static array: mng tnh
structured data: d liu c cu trc ni chung

10/7/2013 Khoa CNTT - H Khoa hc t nhin 35


Thinking in C, Bruce Eckel, E-book, 2006.
Theory and Problems of Fundamentals of
Computing with C++, John R.Hubbard,
Schaums Outlines Series, McGraw-Hill, 1998.

10/7/2013 Khoa CNTT - H Khoa hc t nhin 36

You might also like