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)


Thut gii r nhnh v k thut ci t
Tnh ton lp v k thut ci t
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


Nhm mc ch m t r rng cc nhnh
r ca mt qui trnh x l hay ca cc
bc no trong mt thut ton cn
phi ci t.
C th c trnh by di dn vn bn
(khng cu h v hnh thc, ch cn r
rng) v ch cn phn tch r cc trng
hp logic xy ra trnh st trng hp.

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


Tnh cn bc n ca s thc x
Bng quyt nh
x0 Tnh
nh gi pow(x, 1.0/n)
n l:
= , tnh
nh gi -pow(-x, 1.0/n)
x<0
n chn:
khng tn ti

Bng quyt nh (xy ra trng lp)


x 0: Tnh
nh gi pow(x, 1.0/n)
n l
x < 0:
= , tnh
nh gi -pow(-x, 1.0/n)
x 0: Tnh
nh gi pow(x, 1.0/n)
n chn
x < 0:
khng tn ti

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


a s cc li logic ca chng trnh (do xt
khng ht hay trng lp iu kin) u pht
sinh t vic lp trnh vin suy ngh v vit
trc tip m ngun m khng phn tch k
cc trng hp xy ra.
Vic chun b k cng bng quyt nh s
gip qu trnh ci t chng trnh c d
dng hn.
Bng quyt nh ng vai tr quan trng cho
vic chun b nhng b d liu kim th
(test case) kim tra, chy th v bt li.

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


Bng d liu kim th cho bi ton tnh

Phm vi n Phm vi x n x Gi tr/kt qu mong i
0.0 1.3

n=0 Bt k 0.0 0.0


0.0 -1.3 Khng tn ti
-1.0 0.0
x=0
-20.7 0.0
-1.0 1.0 1.0
n<0
-2.0 4.0 0.5
x0
-2.0 -1.7 Khng tn ti
-3.0 -8.0 -0.5
2.0 0.0 0.0

x0 102.0 1.0 1.0

n>0 4.0 81.0 3.0


3.0 -125.0 -5.0 (khi n l)
x<0
4.0 -0.115 Khng tn ti (khi n chn)

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


Cc bi ton v ngy thng
Kim tra nm nhun
Tnh s ngy trong thng
Tm ngy hm trc, hm sau
Tnh tin in
Tnh tin nc
(Xem chi tit trong gio trnh NMLT trang
160-175)
10/7/2013 Khoa CNTT - H Khoa hc t nhin 8
chnh ca k thut qui l mt hm gi
li chnh n nhm gii quyt mt bi ton
nh hn hay x l nhng trng hp d hn.
Trong mt s tnh hung, x l r nhnh
chuyn sang mt trng hp m li qui v
trng hp gii quyt ri. Lc ny ngi
lp trnh c th gi li chnh hm ang vit
vi cc i s thch hp chuyn v nhnh
r gii quyt xong.

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


Tnh cn bc n ca s thc x
Bng quyt nh
n=0
khng tn ti
x=0

khng tn ti
n<0 1
x0 a v trng hp m = -n > 0 nh =

x0 Tnh
nh gi pow(x, 1.0/n)
n>0 n l Da vo
= ta a v trng hp x 0
x<0
n chn
khng tn ti

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


Chng trnh tnh cn bc n ca x
#include <math.h>
double sqrt_N(double x, int n, bool& errorFlag) {
double Result = 0;
errorFlag = false;
if (n == 0) {
errorFlag = true;
}
else if (n < 0) {
if (x == 0)
errorFlag = true;
else
Result = 1/sqrt_N(x, 1.0/n); // Gi qui
}

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


else {
if (x >= 0)
Result = pow(x, 1.0/n);
else {
if (n % 2 == 1)
Result = -sqrt_N(-x, n, errorFlag); // Gi qui
ele
errorFlag = true;
}
}
return Result;
}

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


Tnh thu s dng t phi nng nghip
Tnh thu thu nhp c nhn
(Xem chi tit trong gio trnh NMLT trang
182-186)

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


Tnh tng v tch cc s t 1 n n
Cch vit 1 Cch vit 2
1 void SumAndProduct(long n, void SumAndProduct(long n,
2 long& S, long& P) long& S, long& P)
3 { {
4 S = 0; P = 1; S = 0; P = 1;
5 for (int i = 1; i <= n; i++) { for (; n >= 1; n--) {
6 S += i; S += n;
7 P *= i; P *= n;
8 } }
9 } }

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


Xem trong gio trnh NMLT trang 223-245
Cc thut ton tnh tng s hay tch s
Cc thut ton m
Tm phn t nh nht hay ln nht

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


Xem trong gio trnh NMLT trang 252- 295
S nguyn t
c chung ln nht
Tnh ly tha nhanh, tnh ly tha modulo
Phn tch ra tha s nguyn t
Tnh ton s ln
Tnh ton dy truy hi
Tnh xp x
X l lp trn mng 1 chiu v 2 chiu
Sp xp theo th t

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


Bin c hiu thng dng trong x l lp
nh du hay ghi nhn trng thi ca
mt qu trnh tnh ton no .
Khi bin c hiu thay i gi tr th vic tnh
ton c th r nhnh mt cch ph hp.
i vi mt s trng hp th vic thay i
gi tr c hiu cng kt thc vng lp. iu
ny xy ra khi qu trnh x l p ng
c yu cu ca bi ton t ra v khng
cn cn phi tip tc lp na.

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


V d:
Khi tm phn t nh nht (gi l min) tha
iu kin K th bin c hiu s chuyn trng
thi khi gp phn t u tin tha K, lc ny
bin min mi c tc dng lu phn t nh
nht tha iu kin K.
Khi kim tra s c phi s nguyn t hay
khng th qu trnh kim tra dng lp tc khi
gp mt c s ln hn 1 v nh hn s .

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


Thng thng ci t bin c hiu, chng
ta c th dng mt bin lun l (kiu bool
trong C++ hay kiu int trong C) v khi ng
bin vi gi tr true (hay 1).
Khi tnh ton lp n mt giai on cn thit
th bin c hiu c s thnh false (hay 0).
Nu cn thit th x l lp s dng (c th
dng break trong C/C++) ngay khi bin c
hiu thay i gi tr.
10/7/2013 Khoa CNTT - H Khoa hc t nhin 20
Bt bin ca vng lp l mt biu thc,
cng thc hay mt iu kin c th qui v
mt mnh logic (l mt v t theo cc
bin ca vng lp) m lun c chn tr
ng lc bt u ca mi ln lp v sau
khi vng lp kt thc.
y l khi nim nng cao v quan trng
trong l thuyt lp trnh.

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


1 1 1
M ngun sau tnh: = + + +
1 2
double y = 1;
for (int i = 0; i < n; i++)
y *= x;

Bt bin ca vng lp trn l:


1 1 1
1 = + + +
1 2
1 1 1
1 = + + +
1 2
1 1 1
< 1 > = + + +
1 2
10/7/2013 Khoa CNTT - H Khoa hc t nhin 22
M ngun sau tnh: =
double y = 1;
for (int i = 0; i < n; i++)
y *= x;

Bt bin ca vng lp trn l:


< 0 = +1

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


Cc bt bin ca vng lp thng c s
dng trong vic chng minh tnh ng n
ca chng trnh hay kho st cht ch ng
ngha ca cc chng trnh v mt l thuyt.
y l vn khng n gin, phi kt hp
gia kin thc lp trnh v logic ton hc nn
thng khng c p dng rng ri trong
thc t m ch dng gii hn trong nghin
cu.

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


a s thut ton lp u c th qui v
cch ci t qui, tc l vit cc hm
m gi li chnh hm .
V d tnh ! = 1 2
Da vo tnh cht ! = 1 !
long Factorization(int n) {
if (n <= 0)
return 1;
return Factorization(n 1) * n; // Gi qui
}

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


1 1 1
V d tnh = + + +
1 2
1
Da vo tnh cht = 1 + v 0 =

0.
#include <math.h>
double EulerFunc(int n, int k) {
if (n <= 0 || k < 1)
return 0;
return EulerFunc(n 1, k) + 1/pow(n, k); // Gi qui
}

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


V d tnh tng n phn t ca mng a
Da vo tnh cht tng n phn t bng
tng n 1 phn t cng phn t cui cng.
double Sum(double a[], int n) {
if (n <= 0)
return 0;
return Sum(a, n 1) + a[n 1]; // Gi qui
}

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


V d tm phn t ln nht ca mng a
Da vo tnh cht tng n phn t bng
tng n 1 phn t cng phn t cui cng.
double Max(double a[], int n) {
double Result;
if (n <= 1)
return a[0];
Result = Max(a, n 1);
if (Result < a[n - 1])
Result = a[n 1];
return Result; // Gi qui
}

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


V d tnh nhanh vi n l s nguyn
2
Da vo tnh cht = 2 nu n chn v
1 2
= 2 . nu n l
double Power(double x, int n) {
double xLast;
if (n < 0) return 1/Power(x, -n);
if (n == 0) return 1;
if (n == 1) return x;
xLast = Power(x, n/2);
if (n % 2 == 0) return xLast * xLast;
else return xLast * xLast * x;
}

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


Tnh cc dy truy hi tnh sinx, cos, ex,

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


Cc phng php tnh v ng dng trong
khoa hc k thut.
Cc thut ton lp trong s hc (gii thiu
v s hc thut ton)
Mt s bi ton x l lp cha c li gii
v iu kin dng
Nhng n lc gim phc tp tnh
ton

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


code duplication: s trng lp m ngun
code reuse: ti s dng (dng li) m ngun
coditional expression: biu thc iu kin
composite number: hp s
coprime: hai s nguyn t cng nhau
counting: m
decision table: bng quyt nh
expected result: kt qu mong i
greatest common devisor (GCD): c s chung ln nht
increase, decrease: tng gim
leap year: nm nhun
loop invariant: bt bin ca vng lp
maximum, minimum: ln nht, nh nht

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


prime: s nguyn t
recursive, recursive implementation: tnh qui, ci t qui
search algorithm: thut ton tm kim
sort algorithm: thut ton sp xp
test case: b d liu kim th

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