B mn Cng ngh phn mm 1 ThS. ng Bnh Phng dbphuong@fit.hcmus.edu.vn NHP MN LP TRNH HM VC & BB
2 2 Ni dung Hm Khi nim v c php 1 Tm vc 2 Tham s v li gi hm 3 quy 4 VC & BB
3 3 t vn Vit chng trnh tnh S = a! + b! + c! vi a, b, c l 3 s nguyn dng nhp t bn phm. Hm Chng trnh chnh Nhp a, b, c > 0 Tnh S = a! + b! + c! Xut kt qu S Nhp a > 0 Nhp b > 0 Nhp c > 0 Tnh s1=a! Tnh s2=b! Tnh s3=c! VC & BB
4 4 t vn 3 on lnh nhp a, b, c > 0 Hm do { printf(Nhap mot so nguyen duong: ); scanf(%d, &a); } while (a <= 0);
do { printf(Nhap mot so nguyen duong: ); scanf(%d, &b); } while (b <= 0);
do { printf(Nhap mot so nguyen duong: ); scanf(%d, &c); } while (c <= 0); VC & BB
5 5 t vn 3 on lnh tnh s1 = a!, s2 = b!, s3 = c! Hm // Tnh s1 = a! = 1 * 2 * * a s1 = 1; for (i = 2; i <= a ; i++) s1 = s1 * i;
// Tnh s2 = b! = 1 * 2 * * b s2 = 1; for (i = 2; i <= b ; i++) s2 = s2 * i;
// Tnh s3 = c! = 1 * 2 * * c s3 = 1; for (i = 2; i <= c ; i++) s3 = s3 * i; VC & BB
6 6 t vn Gii php => Vit 1 ln v s dng nhiu ln on lnh nhp tng qut, vi n = a, b, c
on lnh tnh giai tha tng qut, n = a, b, c Hm do { printf(Nhap mot so nguyen duong: ); scanf(%d, &n); } while (n <= 0); // Tnh s = n! = 1 * 2 * * n s = 1; for (i = 2; i <= n ; i++) s = s * i; VC & BB
7 7 Hm Khi nim Mt on chng trnh c tn, u vo v u ra. C chc nng gii quyt mt s vn chuyn bit cho chng trnh chnh. c gi nhiu ln vi cc tham s khc nhau. c s dng khi c nhu cu: Ti s dng. Sa li v ci tin. Hm VC & BB
8 8 Hm C php
Trong <kiu tr v> : kiu bt k ca C (char, int, long, float,). Nu khng tr v th l void. <tn hm>: theo quy tc t tn nh danh. <danh sch tham s> : tham s hnh thc u vo ging khai bo bin, cch nhau bng du , <gi tr> : tr v cho hm qua lnh return. Hm <kiu tr v> <tn hm>([<danh sch tham s>]) { <cc cu lnh> [return <gi tr>;] } VC & BB
9 9 Cc bc vit hm Cn xc nh cc thng tin sau y: Tn hm. Hm s thc hin cng vic g. Cc u vo (nu c). u ra (nu c). Hm Tn hm
u vo 1 u vo 2 u vo n u ra (nu c) Cc cng vic s thc hin VC & BB
10 10 Hm V d 1 Tn hm: XuatTong Cng vic: tnh v xut tng 2 s nguyn u vo: hai s nguyn x v y u ra: khng c
Hm void XuatTong(int x, int y) { int s; s = x + y; printf(%d cong %d bang %d\n, x, y, s); } VC & BB
11 11 Hm V d 2 Tn hm: TinhTong Cng vic: tnh v tr v tng 2 s nguyn u vo: hai s nguyn x v y u ra: mt s nguyn c gi tr x + y
Hm int TinhTong(int x, int y) { int s; s = x + y; return s; } VC & BB
12 12 Chng trnh con - Function V d 3 Tn hm: NhapXuatTong Cng vic: nhp v xut tng 2 s nguyn u vo: khng c u ra: khng c
Hm void NhapXuatTong() { int x, y; printf(Nhap 2 so nguyen: ); scanf(%d%d, &x, &y); printf(%d cong %d bang %d\n, x, y, x + y); } VC & BB
13 13 Tm vc Khi nim L phm vi hiu qu ca bin v hm. Bin: Ton cc: khai bo trong ngoi tt c cc hm (k c hm main) v c tc dng ln ton b chng trnh. Cc b: khai bo trong hm hoc khi { } v ch c tc dng trong bn thn hm hoc khi (k c khi con n). Bin cc b s b xa khi b nh khi kt thc khi khai bo n. Hm VC & BB
14 14 Tm vc Hm int a; int Ham1() { int a1; }
int Ham2() { int a2; { int a21; } }
void main() { int a3; } VC & BB
15 15 Mt s lu Thng thng ngi ta thng t phn tiu hm/nguyn mu hm (prototype) trn hm main v phn nh ngha hm di hm main. Hm void XuatTong(int x, int y); // prototype
void main() {
}
void XuatTong(int x, int y) { printf(%d cong %d bang %d\n, x, y, x + y); } VC & BB
16 16 Cc cch truyn i s Truyn Gi tr (Call by Value) Truyn i s cho hm dng gi tr. C th truyn hng, bin, biu thc nhng hm ch s nhn gi tr. c s dng khi khng c nhu cu thay i gi tr ca tham s sau khi thc hin hm. Hm void TruyenGiaTri(int x) {
x++; } VC & BB
17 17 Cc cch truyn i s Truyn a ch (Call by Address) Truyn i s cho hm dng a ch (con tr). Khng c truyn gi tr cho tham s ny. c s dng khi c nhu cu thay i gi tr ca tham s sau khi thc hin hm. Hm void TruyenDiaChi(int *x) {
*x++; } VC & BB
18 18 Cc cch truyn i s Truyn Tham chiu (Call by Reference) (C++) Truyn i s cho hm dng a ch (con tr). c bt u bng & trong khai bo. Khng c truyn gi tr cho tham s ny. c s dng khi c nhu cu thay i gi tr ca tham s sau khi thc hin hm. Hm void TruyenThamChieu(int &x) {
x++; } VC & BB
19 19 Lu khi truyn i s Lu Trong mt hm, cc tham s c th truyn theo nhiu cch. Hm void HonHop(int x, int &y) {
x++; y++; } VC & BB
20 20 Lu khi truyn i s Lu S dng tham chiu l mt cch tr v gi tr cho chng trnh. Hm int TinhTong(int x, int y) { return x + y; } void TinhTong(int x, int y, int &tong) { tong = x + y; } void TinhTongHieu(int x, int y, int &tong, int &hieu) { tong = x + y; hieu = x y; } VC & BB
21 21 Li gi hm Cch thc hin Gi tn ca hm ng thi truyn cc i s (hng, bin, biu thc) cho cc tham s theo ng th t c khai bo trong hm. Cc bin hoc tr ny cch nhau bng du , Cc i s ny c c t trong cp du ngoc n ( )
<tn hm> (<i s 1>, , <i s n>); Hm VC & BB
22 22 Li gi hm V d Hm // Cc hm c khai bo y void main() { int n = 9; XuatTong(1, 2); XuatTong(1, n); TinhTong(1, 2); int tong = TinhTong(1, 2); TruyenGiaTri(1); TruyenGiaTri(n); TruyenDiaChi(1); TruyenDiaChi(&n); TruyenThamChieu(1); TruyenThamChieu(n); } VC & BB
23 23 Li gi chng trnh con V d Hm void HoanVi(int &a, int &b);
void main() { HoanVi(2912, 1706); int x = 2912, y = 1706; HoanVi(x, y); } void HoanVi(int &a, int &b) { int tam = a; a = b; b = tam; }
VC & BB
24 24 quy Khi nim Mt chng trnh con c th gi mt chng trnh con khc. Nu gi chnh n th c gi l s quy. S ln gi ny phi c gii hn (im dng) V d Tnh S(n) = n! = 1*2**(n-1)*n Ta thy S(n) = S(n-1)*n Vy thay v tnh S(n) ta s i tnh S(n-1) Tng t tnh S(n-2), , S(2), S(1), S(0) = 1 Hm VC & BB
25 25 quy V d Hm int GiaiThua(int n) { if (n == 0) return 1; else return GiaiThua(n 1) * n; } int GiaiThua(int n) { if (n > 0) return GiaiThua(n 1) * n; else return 1; } VC & BB
26 26 Bi tp 1. Bi tp chng cu lnh iu kin v r nhnh a. Vit hm i mt k t hoa sang k t thng. b. Vit th tc gii phng trnh bc nht. c. Vit th tc gii phng trnh bc hai. d. Vit hm tr v gi tr nh nht ca 4 s nguyn. e. Vit th tc hon v hai s nguyn. f. Vit th tc sp xp 4 s nguyn tng dn. Hm VC & BB
27 27 Bi tp 2. Bi tp chng cu lnh lp. Hm nhn vo mt s nguyn dng n v thc hin: a. Tr v s o ca s . b. C phi l s i xng (Tr v True/False) c. C phi l s chnh phng. d. C phi l s nguyn t. e. Tng cc ch s l. f. Tng cc ch s nguyn t. g. Tng cc ch s chnh phng. Hm VC & BB
28 28 Bi tp 3. Bi tp chng Cu lnh lp. Hm nhn vo mt s nguyn dng n v thc hin: a. S = 1 + 2 + + n b. S = 1 2 + 2 2 + + n 2 c. S = 1 + 1/2 + + 1/n d. S = 1 * 2 * * n e. S = 1! + 2! + + n! 4. Hm tr v USCLN ca 2 s nguyn. 5. In ra n phn t ca dy Fibonacy. Hm