You are on page 1of 73

Bé c«ng nghiÖp

Trêng cao ®¼ng c«ng nghiÖp hµ néi

---  ---

®Ò c¬ng chi tiÕt


m«n häc

kü thuËt lËp tr×nh


(Tµi liÖu gi¶ng d¹y)

Biªn so¹n: ThS. NguyÔn M¹nh Cêng


(lu hµnh néi bé)

Hµ néi – 8/2004

§Ò c¬ng chi tiÕt


M«n häc: Kü thuËt lËp tr×nh
Tµi liÖu tham kh¶o
1. Ng«n ng÷ lËp tr×nh C++ - GS. TS. Ph¹m v¨n Êt.
§Ò c¬ng chi tiÕt Kü thuËt lËp tr×nh

2. C++ vµ lËp tr×nh Híng ®èi tîng - GS. TS. Ph¹m v¨n Êt.
3. Kü thuËt lËp tr×nh - NguyÔn TiÕn Huy – TrÇn H¹nh Nhi.
4. Ng«n ng÷ lËp tr×nh C++ - Ng« Trung ViÖt.
….
Ch¬ng I. Giíi thiÖu vÒ ng«n ng÷ lËp tr×nh C++

1. M«i trêng lËp tr×nh C++


Ng«n ng÷ lËp tr×nh C++ lµ mét sù më réng cña ng«n ng÷ lËp tr×nh C,
trong ®ã, chñ yÕu ®a thªm vµo ng«n ng÷ C kh¶ n¨ng lËp tr×nh híng ®èi tîng
vµ lo¹i bá nh÷ng phøc t¹p kh«ng cÇn thiÕt cña ng«n ng÷ .
§Ó vµo m«i trêng so¹n th¶o ch¬ng tr×nh cña C++ ta thùc hiÖn:
+ Cµi ®Æt ch¬ng tr×nh so¹n th¶o m· lÖnh C++ vµo m¸y tÝnh.
+ Vµo th môc TC30\ BIN, chän TC.Exe.
Khi ®ã, m«i trêng so¹n th¶o C++ ®· s½n sµng.
- C¸c thao t¸c khi so¹n th¶o ch¬ng tr×nh:
[1]. Më mét file míi: Chän File\ New hoÆc bÊm phÊm F3 sau ®ã gâ tªn file
vµo.
[2]. Lu file: Chän File\ Save hoÆc bÊm phÝm F2. NÕu file cha ®îc ®Æt tªn
bëi ngêi lËp tr×nh h·y ®Æt tªn.
[3]. Më mét file cã s½n: Chän File\ Open hoÆc bÊm phÝm F3. Chän file cÇn
më vµ bÊm Enter.
[4]. So¹n th¶o ch¬ng tr×nh: Ch¬ng tr×nh ®îc so¹n th¶o trong cöa sæ so¹n th¶o.
Nãi chung, khi so¹n th¶o thêng thùc hiÖn nh÷ng thao t¸c sau:
- Di chuyÓn con trá: dïng c¸c phÝm mòi tªn, phÝm Page Up, Page Down.
phÝm Home ®a con trá vÒ ®Çu dßng, phÝm End ®a con trá vÒ cuèi dßng.
- Sao chÐp:
Gi÷ Shift vµ phÝm mòi tªn ®Ó b«i ®en ®o¹n cÇn sao chÐp.
§a con trá tíi n¬i ®Æt ®o¹n sao chÐp vµ bÊm tæ hîp phÝm Ctrl + K + C
®Ó d¸n.
- Di chuyÓn khèi: NÕu bÊm tæ hîp phÝm Ctrl + K + V sÏ cho phÐp di
chuyÓn ®o¹n m· ®îc b«i ®en.

Biªn so¹n: NguyÔn M¹nh Cêng Trang 1


§Ò c¬ng chi tiÕt Kü thuËt lËp tr×nh

- Bá b«i ®en khèi: §a con trá lªn trªn ®o¹n b«i ®en vµ bÊm tæ hîp phÝm
Ctrl + K + K ®Ó bá b«i ®en
Chó ý: Kh¸c víi ng«n ng÷ Pascal, ng«n ng÷ C++ cã ph©n biÖt ch÷ hoa
vµ ch÷ thêng.
§Ó ghi c¸c dßng chó thÝch, sö dông dÊu // t¹i ®Çu dßng hoÆc ®Æt
®o¹n chó thÝch nh sau: /* ®o¹n chó thÝch */
[5]. DÞch ch¬ng tr×nh: BÊm phÝm F9 ®Ó dÞch ch¬ng tr×nh. NÕu ch¬ng
tr×nh cã lçi, ch¬ng tr×nh dÞch sÏ b¸o lçi. Ch¬ng tr×nh chØ thùc thi ®îc nÕu
kh«ng cã lçi.
[6]. Thùc thi ch¬ng tr×nh: BÊm tæ hîp phÝm Ctrl + F9 ®Ó thùc thi ch¬ng
tr×nh.
[7]. §Æt ®êng dÉn tíi c¸c th viÖn: Trong mét ch¬ng tr×nh viÕt b»ng ng«n ng÷
C++ thêng sö dông c¸c hµm trong c¸c th viÖn kh¸c nhau. Th«ng thêng, c¸c th
viÖn ®Æt trong c¸c th môc TC\INCLUDE hoÆc TC\ LIB. M«i trêng lËp tr×nh
C++ tù thiÕt ®Æt ®êng dÉn tíi c¸c th viÖn nµy. Tuy nhiªn, trong trêng hîp ®-
êng dÉn bÞ thay ®æi, ta cÇn ph¶i thiÕt ®Æt l¹i.
B1: Trong Menu chÝnh, chän Option\ Directories.
B2: Trong Include, ®Æt ®êng dÉn tíi c¸c th viÖn cã ®u«i .h. Trong
Libraries, ®Æt ®êng dÉn tíi c¸c th viÖn ®u«i .lib.
2. C¸c kiÓu d÷ liÖu c¬ b¶n trong C++
Trong C++ cã sö dông mét sè kiÓu d÷ liÖu c¬ b¶n sau:
a. KiÓu sè: bao gåm
+ Sè nguyªn ng¾n int: lµ kiÓu d÷ liÖu cã ®é dµi 2 byte, dïng ®Ó khai
b¸o c¸c biÕn nguyªn cã gi¸ trÞ trong kho¶ng –32768 -> 32767
+ Sè nguyªn ng¾n kh«ng dÊu: unsign int: ®é dµi 2 byte, khai b¸o c¸c
biÕn nguyªn cã gi¸ trÞ tõ 0 tíi 65535.
+ Sè nguyªn dµi long: lµ kiÓu d÷ liÖu cã ®é dµi 4 byte, dïng khai b¸o c¸c
biÕn nguyªn cã gi¸ trÞ trong kho¶ng – 2.147.483.648 -> 2.147.483.647.

+ Sè nguyªn dµi kh«ng dÊu: unsign long: ®é dµi 4 byte, khai b¸o c¸c biÕn
cã gi¸ trÞ tõ 0 tíi 4.294.967.295.

Biªn so¹n: NguyÔn M¹nh Cêng Trang 2


§Ò c¬ng chi tiÕt Kü thuËt lËp tr×nh

+ Sè thùc (dÊu ph¶y ®éng) float: kÝch thíc 4 byte khai b¸o c¸c biÕn thùc
tõ 3.4*10-38 -> 3.4*1038.
+ Sè thùc double: kÝch thíc 8 byte, cã ph¹m vi tõ 1.7*10-308 - > 1.7*10308
+ Sè thùc (dÊu ph¶y ®éng, ®é chÝnh x¸c kÐp) dµi: long double: kÝch th-
íc 10 byte, khai b¸o c¸c biÕn tõ 3.4 * 10-4932 tíi 1.1 * 104932.
b. KiÓu ký tù: bao gåm
+ KiÓu ký tù char: khai b¸o biÕn chøa mét ký tù.
+ KiÓu con trá ký tù char *: t¬ng ®¬ng víi chuçi ký tù.
3. BiÕn vµ c¸ch khai b¸o biÕn
§Ó khai b¸o biÕn trong C++ ta dïng có ph¸p sau:
<kiÓu d÷ liÖu> <tªn biÕn> <;>
Trong ®ã:
- <KiÓu d÷ liÖu>: cã thÓ lµ mét trong c¸c kiÓu d÷ liÖu chuÈn, cã thÓ lµ
c¸c kiÓu tù ®Þnh nghÜa.
- <Tªn biÕn>: ®îc ®Æt tu©n theo quy t¾c ®Æt tªn biÕn trong ng«n ng÷
lËp tr×nh Pascal.
- C¸c biÕn c¸ch nhau bëi dÊu ph¶y, c¸c khai b¸o c¸ch nhau bëi dÊu chÊm
ph¶y.
VD: int a, b, c;
long so;
char * s;
Chó ý: cã thÓ khai b¸o biÕn t¹i bÊt kú ®©u trong ch¬ng tr×nh vµ tríc
khi sö dông.
4. CÊu tróc mét ch¬ng tr×nh ®¬n gi¶n
Mét ch¬ng tr×nh ®¬n gi¶n trong C++ thêng cã cÊu tróc nh sau:
//Khai b¸o c¸c th viÖn sö dông trong ch¬ng tr×nh.
#include <Tªn th viÖn>
….
main() //tªn hµm chÝnh
{
// NhËp d÷ liÖu
// TÝnh to¸n
// In c¸c kÕt qu¶

Biªn so¹n: NguyÔn M¹nh Cêng Trang 3


§Ò c¬ng chi tiÕt Kü thuËt lËp tr×nh

}
VD1. xÐt ®o¹n tr×nh sau:
#include <conio.h>
#include <stdio.h>
#include <iostream.h>
main()
{
clrscr();
int a, b; //khai b¸o hai biÕn nguyªn a, b
cout<<”nhËp sè nguyªn a “;
cin>>a;
cout<<“nhËp sè nguyªn b”;
cin>>b;
int c;
c = a+b;
cout<<”Tæng cña a + b lµ “<<c;
getch();
return 0;
}
Trong vÝ dô trªn, ta cã:
- C¸c c©u lÖnh #include <tªn th viÖn.h>: khai b¸o mét sè th viÖn sÏ sö
dông. C¸c th viÖn nµy cã chøa s½n c¸c hµm sÏ sö dông trong ch¬ng tr×nh.
Ch¼ng h¹n th viÖn iostream.h chøa c¸c hµm cout, cin…
- Tõ khãa main() ®Ó b¾t ®Çu th©n ch¬ng tr×nh chÝnh.
- C¸c ký tù {, } ®Ó b¾t ®Çu vµ kÕt thóc mét khèi lÖnh trong ch¬ng
tr×nh. C¸c ký tù nµy t¬ng tù c¸c tõ khãa nµy Begin vµ End trong Pascal.
- clrscr(); lµ mét lêi gäi hµm xãa mµn h×nh. Hµm n·y ®· cã s½n trong th
viÖn stdio.h. CÇn lu ý c¸ch gäi hµm kh«ng ®èi, kh¸c víi Pascal.
- C¸c lÖnh cout, cin cã s½n trong th viÖn iostream.h cho phÐp in lªn mµn
h×nh c©u th«ng b¸o vµ nhËn gi¸ trÞ nhËp vµo tõ bµn phÝm cho hai biÕn a,
b. chóng t¬ng tù nh lÖnh Write vµ Read trong Pascal.
- LÖnh getch() cã trong th viÖn conio.h cho phÐp dõng mµn h×nh l¹i ®Ó
xem kÕt qu¶. Mµn h×nh sÏ dõng cho tíi khi mét phÝm bÊt kú ®îc bÊm.
- LÖnh return 0; dïng ®Ó chØ ra kÕt qu¶ tr¶ vÒ cña hµm.
VD2. ViÕt ch¬ng tr×nh nhËp vµo hai sè nguyªn a, b sau ®ã in ra mµn
h×nh tæng, hiÖu, tÝch, th¬ng cña hai sè nguyªn ®ã.
#include <conio.h>

Biªn so¹n: NguyÔn M¹nh Cêng Trang 4


§Ò c¬ng chi tiÕt Kü thuËt lËp tr×nh

#include <stdio.h>
#include <iostream.h>
main()
{
clrscr();
int a, b; //khai b¸o hai biÕn nguyªn a, b
cout<<”nhËp sè nguyªn a “;
cin>>a;
cout<<“nhËp sè nguyªn b”;
cin>>b;
int T, H, TI, TH;
T = a+b;
H = a-b;
TI = a*b;
TH= a/b;
cout<<”Tæng cña a + b lµ “<<T;
cout<<”HiÖu cña a + b lµ “<<H;
cout<<”TÝch cña a + b lµ “<<TI;
cout<<”Th¬ng cña a + b lµ “<<TH;
getch();
return 0;
}
Chó ý: Trong C++, th¬ng cña hai sè nguyªn lµ mét sè nguyªn.
5. C¸c lÖnh nhËp xuÊt
a. C¸c lÖnh nhËp xuÊt trong IOStream.h
- LÖnh xuÊt: Có ph¸p
cout<< <Néi dung cÇn xuÊt>;
Trong ®ã:
<<: ®îc gäi lµ to¸n tö xuÊt.
<Néi dung cÇn xuÊt>: cã thÓ lµ H»ng ký tù, H»ng x©u ký tù, BiÕn,
Hµm, ph¬ng thøc ®Þnh d¹ng.
VD: cout<<”Sin(x) = “;
cout<<Sin(x);
Chó ý: - cã thÓ sö dông liªn tiÕp nhiÒu to¸n tö xuÊt trªn mét dßng cout.
VD: cout<<”Gi¸ trÞ cña a[“<<i<<”] lµ “<<a[i];
C¸c lÖnh cout, cin chØ thÝch hîp cho viÖc nhËp xuÊt c¸c biÕn kiÓu sè.
Víi c¸c biÕn kiÓu x©u ký tù th× x©u nhËp, xuÊt ph¶i kh«ng chøa dÊu c¸ch.

Biªn so¹n: NguyÔn M¹nh Cêng Trang 5


§Ò c¬ng chi tiÕt Kü thuËt lËp tr×nh

 §Þnh d¹ng d÷ liÖu tríc khi xuÊt:


Ta cã thÓ sö dông mét trong 2 c¸ch sau:
C¸ch 1: sö dông to¸n tö ®Þnh d¹ng
cout.width(int n): chØ ®Þnh sè vÞ trÝ tèi thiÓu dµnh cho gi¸ trÞ xuÊt
lµ n vÞ trÝ.
+ NÕu gi¸ trÞ xuÊt chiÕm Ýt h¬n n vÞ trÝ th× mÆc ®Þnh lµ c¸c ký tù
trèng sÏ chÌn vµo phÝa tríc.
+ NÕu gi¸ trÞ xuÊt chiÕm nhiÒu h¬n n vÞ trÝ, sè vÞ trÝ dµnh cho gi¸
trÞ xuÊt ®ã sÏ ®îc t¨ng lªn sao võa ®ñ thÓ hiÖn gi¸ trÞ xuÊt.
cout.fill(char ch): ChØ ®Þnh ký tù ch sÏ ®îc ®iÒn vµo nh÷ng vÞ trÝ
trèng (nÕu cã).
cout.precision(int n): chØ ®Þnh ®é chÝnh x¸c cña gi¸ trÞ sè khi xuÊt lµ
n ký tù sau dÊu ph¶y.
VD:
float a = 123.4523.
nÕu muèn xuÊt a ra mµn h×nh díi d¹ng: |000123.45| ta cã thÓ ®Þnh d¹ng
nh sau:
cout.width(9);
cout.fill(‘0’);
cout.precision(2);
cout<<a;
C¸ch 2: sö dông c¸c hµm ®Þnh d¹ng:
T¬ng tù nh c¸c ph¬ng thøc ®Þnh d¹ng, c¸c hµm ®Þnh d¹ng t¬ng øng lµ:
setw(int n) – t¬ng tù nh cout.width(int n).
setfill(char ch) – t¬ng tù nh cout.fill(char ch).
setprecision(int n) – t¬ng tù nh cout.precision(int n).
C¸ch dïng: sö dông c¸c hµm ®Þnh d¹ng ngay trªn c¸c dßng cout, tríc khi
®a ra gi¸ trÞ xuÊt.
VD: Víi vÝ dô trªn, ta cã thÓ viÕt:
cout<<setw(9)<<setfill(‘0’)<<setprecision(2)<<a;
- LÖnh nhËp: Có ph¸p
cin >> <BiÕn>;

Biªn so¹n: NguyÔn M¹nh Cêng Trang 6


§Ò c¬ng chi tiÕt Kü thuËt lËp tr×nh

Trong ®ã:
>>: ®îc gäi lµ to¸n tö nhËp.
Dßng cin dïng ®Ó nhËp c¸c gi¸ trÞ (th«ng thêng lµ) tõ bµn phÝm vµo
c¸c biÕn.
VD: cout<<”NhËp gi¸ trÞ cña a”;
cin>>a;
Chó ý: cã thÓ dïng liªn tiÕp nhiÒu to¸n tö nhËp trªn mét dßng cin ®Ó
nhËp gi¸ trÞ cho nhiÒu biÕn.
cin>>a>>b>>c;
Bµi tËp vÝ dô: ViÕt ch¬ng tr×nh nhËp vµo mét sè thùc x, in ra mµn
h×nh gi¸ trÞ cña F(x) = sin2(x) + cos(x) víi ®é chÝnh x¸c 2 ch÷ sè sau dÊu
ph¶y.
#include <conio.h>
#include <math.h>
#include <iostream.h>
void main()
{
clrscr();
float x, F;
cout<<”nhËp sè thùc a “;
cin>>x
cout.precision(2);
cout<<”Gi¸ trÞ F(“<<x<<”) = “<<sin(x)*sin(x) + cos(x);
getch();
}
b. C¸c lÖnh nhËp xuÊt trong Stdio.h
LÖnh xuÊt: printf.
Có ph¸p: printf(“ chuçi cÇn xuÊt “, <BiÕn 1>, <BiÕn 2>…);
Trong ®ã: “ Chuçi cÇn xuÊt” cã thÓ lµ:
- H»ng ký tù, h»ng x©u ký tù: Lµ c¸c ký tù cÇn in lªn mµn h×nh.
- C¸c ®Æc t¶ hay ký tù ®¹i diÖn, bao gåm:
%d: ®¹i diÖn cho biÕn nguyªn.
%f: ®¹i diÖn cho biÕn thùc.
%c: ®¹i diÖn cho biÕn kiÓu ký tù (mÆc ®Þnh).

Biªn so¹n: NguyÔn M¹nh Cêng Trang 7


§Ò c¬ng chi tiÕt Kü thuËt lËp tr×nh

- Mçi biÕn cÇn ®a ra mµn h×nh cÇn cã mét ®Æc t¶ t¬ng øng t¹i vÞ trÝ
muèn ®a ra.
VD: CÇn ®a ra c¸c gi¸ trÞ cña c¸c biÕn a, b, c kiÓu nguyªn, ta viÕt:
printf (“ Gi¸ trÞ cña a b c la %d %d %d, a, b, c);
LÖnh nhËp: scanf.
Có ph¸p: scanf(“chuçi c¸c ®Æc t¶”, <&BiÕn 1>, <&biÕn 2>…);
Trong ®ã, mçi biÕn cÇn ph¶i cã mét ®Æc t¶ t¬ng øng. LÖnh scanf
nhËp gi¸ trÞ vµo c¸c biÕn th«ng qua ®Þa chØ cña biÕn.
c. C¸c lÖnh nhËp xuÊt trong Conio.h
LÖnh xuÊt: puts.
Có ph¸p: puts(p);
Trong ®ã p lµ mét con trá, trá tíi mét ký tù hoÆc h»ng x©u ký tù. NÕu p
lµ biÕn chøa 1 ký tù th× p ph¶i cã kiÓu char *, nÕu p lµ kiÓu char th× ph¶i lµ
mét m¶ng kiÓu char.
LÖnh puts sÏ ®a c¸c ký tù ®îc con trá p trá tíi lªn mµn h×nh.
VD:
char * p = “a”;
puts(p);// ®a ký tù a ra mµn h×nh
char q[100] = “Ha Noi”;
puts(q);// ®a Ha Noi ra mµn h×nh.
LÖnh nhËp: gets().
Có ph¸p: gets(p);
Trong ®ã, p lµ biÕn con trá ký tù, nh vËy, p ph¶i cã kiÓu char * . NÕu p
lµ biÕn kiÓu char th× ph¶i lµ mét biÕn m¶ng kiÓu char. (char * p hoÆc char
p[])
C¸c lÖnh gets, puts thÝch hîp cho viÖc nhËp xuÊt c¸c biÕn kiÓu x©u
ký tù.
6. BiÓu thøc trong C++
Mét biÓu thøc th«ng thêng ®îc cÊu thµnh tõ hai thµnh phÇn: c¸c to¸n tö
vµ c¸c to¸n h¹ng.
a. C¸c to¸n tö: ®îc t¹m chia lµm 3 lo¹i
C¸c to¸n tö sè häc

Biªn so¹n: NguyÔn M¹nh Cêng Trang 8


§Ò c¬ng chi tiÕt Kü thuËt lËp tr×nh

Trong C++ sö dông c¸c to¸n tö sè häc cho trong b¶ng sau:

Stt To¸n tö Ng«n ng÷ Pascal Ng«n ng÷ C++


1 Céng + +
2 Trõ - -
3 Nh©n * *
4 Chia / /
5 §ång d mod %
6 T¨ng 1 ®¬n +1 ++

7 Gi¶m 1 ®¬n -1 --

8 G¸n := =
VD:
int a, b;
int T, H, TI, TH, D;
a=8;
b=3;
T = a+b;
H = a-b;
TI = a*b;
TH = a/b;
D = a%b;
a++;
b--;
C¸c to¸n tö Logic
Trong C++ sö dông c¸c to¸n tö Logic cho trong b¶ng sau:
Stt To¸n tö Ng«n ng÷ Pascal Ng«n ng÷ C++
1 Vµ And &&
2 HoÆc Or ||
3 Phñ ®Þnh Not !
C¸c to¸n tö so s¸nh
Trong C++ sö dông c¸c to¸n tö So s¸nh cho trong b¶ng sau:
Stt To¸n tö Pascal Ng«n ng÷ C++
1 Lín h¬n > >
2 Nhá h¬n < <
3 Lín h¬n hoÆc b»ng >= >=
4 Nhá h¬n hoÆc b»ng <= <=
5 B»ng = ==
6 Kh«ng b»ng <> !=

Biªn so¹n: NguyÔn M¹nh Cêng Trang 9


§Ò c¬ng chi tiÕt Kü thuËt lËp tr×nh

b. C¸c to¸n h¹ng: cã thÓ lµ h»ng, biÕn hoÆc hµm.


VD: Trong biÓu thøc 3*X+2+sin(x), c¸c to¸n tö + vµ * ®îc sö dông.
To¸n h¹ng bao gåm: H»ng (3 vµ 2), biÕn (X) vµ hµm (sin(x)).
c. Thø tù u tiªn c¸c phÐp to¸n
Trong mét biÓu thøc cã sö dông nhiÒu to¸n tö, thø tù u tiªn c¸c to¸n tö
nh sau (theo chiÒu tõ tr¸i qua ph¶i, tõ trªn xuèng díi):
! ++ -- * / % + -
< <= > >= == != && ||
VD: ViÕt biÓu thøc to¸n häc sau b»ng ng«n ng÷ C++ (nÕu cÇn) vµ cho
biÕt thø tù thùc hiÖn c¸c phÐp to¸n.
5x 6 +2/7 + (6 mod 3)
i + j ++
(i+j)++

Biªn so¹n: NguyÔn M¹nh Cêng Trang 1


0
§Ò c¬ng chi tiÕt Kü thuËt lËp tr×nh

Ch¬ng II. C¸c cÊu tróc ®iÒu khiÓn trong C++

1. Giíi thiÖu chung


Mét phÇn rÊt quan träng trong mét ng«n ng÷ lËp tr×nh lµ c¸c cÊu tróc
®iÒu khiÓn.
Trong Pascal ta ®· lµm quen víi 3 lo¹i cÊu tróc ®iÒu khiÓn: Chän, RÏ
nh¸nh, LÆp. Ta sÏ lÇn lît xem xÐt c¸c lo¹i cÊu tróc ®iÒu khiÓn ®ã trong ng«n
ng÷ C++. Ta t¹m thêi chia c¸c cÊu tróc ®iÒu khiÓn trong C++ theo c©y thø
bËc sau:

CÊu tróc ®iÒu khiÓn

CÊu tróc CÊu tróc CÊu tróc


chän rÏ nh¸nh lÆp

CÊu tróc CÊu tróc lÆp


lÆp víi sè víi sè lÇn
lÇn lÆp lÆp kh«ng
x¸c ®Þnh x¸c ®Þnh

CÊu tróc CÊu tróc


lÆp kiÓm lÆp kiÓm
tra ®iÒu tra ®iÒu
kiÖn tr­íc kiÖn sau
2. CÊu tróc rÏ nh¸nh
Trong thùc tÕ, khi gi¶i quyÕt mét c«ng viÖc thêng ta ph¶i lùa chän
nhiÒu ph¬ng ¸n gi¶i quyÕt kh¸c nhau. Ngêi ta thêng biÓu diÔn vÊn ®Ò nµy
b»ng mÖnh ®Ò:
- [1]. NÕu … th× …;
- [2]. NÕu … th× … ngîc l¹i th×…
§Ó m« pháng hai mÖnh ®Ò ®ã, trong ng«n ng÷ lËp tr×nh C++ ®a ra
cÊu tróc rÏ nh¸nh.
CÊu tróc rÏ nh¸nh cã hai d¹ng nh trong s¬ ®å khèi díi ®©y.

Biªn so¹n: NguyÔn M¹nh Cêng Trang 1


1
§Ò c¬ng chi tiÕt Kü thuËt lËp tr×nh

BT§K BT§K ®óng?


®óng?

Thùc hiÖn Thùc hiÖn lÖnh


N
Thùc hiÖn lÖnh
Y
lÖnh1 N 2

a). M« t¶ mÖnh ®Ò [1] b) M« t¶ mÖnh ®Ó [2]

Có ph¸p:
(m« pháng mÖnh ®Ò 1)
if (<biÓu thøc ®iÒu kiÖn>)
<LÖnh>;
(M« pháng mÖnh ®Ò 2)
if (<biÓu thøc ®iÒu kiÖn>)
<LÖnh 1>;
else
<LÖnh 2>;
ý nghÜa:
[1]. nÕu <biÓu thøc ®iÒu kiÖn> nhËn gi¸ trÞ ®óng, sÏ thùc hiÖn
<LÖnh>, ngîc l¹i, bá qua lÖnh if.
[2]. nÕu <biÓu thøc ®iÒu kiÖn> nhËn gi¸ trÞ ®óng, sÏ thùc hiÖn
<LÖnh 1>, ngîc l¹i, nÕu <biÓu thøc ®iÒu kiÖn> nhËn gi¸ trÞ sai sÏ thùc hiÖn
<LÖnh 2>.
Chó ý:
- BiÓu thøc ®iÒu kiÖn ®îc ®Æt gi÷a hai dÊu ngoÆc ®¬n “(“ “)”.
- C©u lÖnh tríc else cã dÊu “;”.
- <LÖnh 1> vµ <LÖnh 2> cã thÓ lµ mét khèi lÖnh. C¸c khèi lÖnh ®îc
®Æt trong hai dÊu { }.

Biªn so¹n: NguyÔn M¹nh Cêng Trang 1


2
§Ò c¬ng chi tiÕt Kü thuËt lËp tr×nh

VD: LËp ch¬ng tr×nh nhËp vµo mét sè nguyªn. KiÓm tra tÝnh ch½n lÎ
cña sè ®ã vµ th«ng b¸o ra mµn h×nh.
#include <conio.h>
#include <stdio.h>
#include <iostream.h>
main()
{
clrscr(); int a;
cout<< “nhËp sè nguyªn a ”;
cin>>a;
if (a%2 = = 0)
cout<<”sè “<<a<<” ch½n”;
else
cout<<”sè “<<a<<” lΔ;
getch();
}
C¸c lÖnh if cã thÓ lång nhau theo nghÜa: C¸c c©u lÖnh bªn trong mét
mÖnh ®Ò if l¹i cã thÓ lµ c¸c mÖnh ®Ò if. C¸c mÖnh ®Ò if lång nhau t¬ng ®-
¬ng víi mét mÖnh ®Ò if mµ biÓu thøc ®iÒu kiÖn cña nã lµ sù kÕt hîp biÓu
c¸c biÓu thøc ®iÒu kiÖn cña c¸c mÖnh ®Ó if lång nhau theo phÐp vµ (AND).
Mçi lÖnh if ®ñ sÏ cho phÐp lùa chän 2 kh¶ n¨ng ®Ó thùc hiÖn. Trong
trêng hîp cã n kh¶ n¨ng lùa chän, ta cã thÓ sö dông n-1 lÖnh if ®ñ lång nhau.
VD: ViÕt ch¬ng tr×nh thùc hiÖn viÖc nhËp vµo sè tiÒn cña kh¸ch hµng
ph¶i tr¶. NÕu sè tiÒn tõ 300000 tíi 400000, khuyÕn m¹i 20%. NÕu sè tiÒn tõ
400000 trë lªn, khuyÕn m¹i 30%. C¸c trêng hîp kh¸c kh«ng ®îc khuyÕn m¹i.
TÝnh vµ in sè tiÒn khuyÕn m¹i cña kh¸ch lªn mµn h×nh.
#include <conio.h>
#include <stdio.h>
#include <iostream.h>
main()
{
clrscr();
int T, km;
cout<<”NhËp sè tiÒn “;
cin>>T;
if (T>=300000 && T <=400000)
km = 20*T/100;
else
if (T>40000)
km = 30*T/100;
else

Biªn so¹n: NguyÔn M¹nh Cêng Trang 1


3
§Ò c¬ng chi tiÕt Kü thuËt lËp tr×nh

km = 0;
cout<<”Sè tiÒn khuyÕn m¹i “<<km;
getch();
}
NÕu c¸c kh¶ n¨ng lµ lo¹i trõ nhau th× kh«ng khi ®ã cã thÓ sö dông c¸c
lÖnh if lång nhau hoÆc cã thÓ sö dông n lÖnh if rêi nhau cho n kh¶ n¨ng lùa
chän. Trêng hîp ngîc l¹i, th× nhÊt thiÕt ph¶i sö dông c¸c lÖnh if rêi nhau.
VD: ViÕt ch¬ng tr×nh nhËp vµo ®iÓm tæng kÕt vµ xÕp lo¹i ®¹o ®øc
cña mét sinh viªn. Sau ®ã tÝnh sè tiÒn häc bæng cho sinh viªn ®ã nh sau:
NÕu tæng kÕt >=7.00 th× ®îc 300000.
NÕu ®iÓm tæng kÕt >=9.00 vµ ®¹o ®øc = “T” th× ®îc céng thªm
100000.
XÐt ®o¹n tr×nh sau:
#include <conio.h>
#include <stdio.h>
#include <iostream.h>
main()
{
clrscr();
float tk;
char * hk;
long T;
cout<<”Nhap ®iÓm tong ket”;
cin>>tk;
cout<<”Nhap hanh kiem”;
cin>>hk;
T=0;
if (tk >= 7.0)
T = 30000;
else
if (tk>=9.0 && hk = = “T”)
T += 100000;
cout<<”Häc bæng ” <<T;
getch();
}
§o¹n tr×nh trªn sÏ cho kÕt qu¶ sai trong trêng hîp sinh viªn tæng kÕt
>=9.0 vµ ®¹o ®øc tèt. Lý do lµ sö dông hai lÖnh if lång nhau khi c¸c kh¶ n¨ng
kh«ng lo¹i trõ nhau.
§o¹n tr×nh trªn cã thÓ ®îc viÕt l¹i nh sau:
#include <conio.h>

Biªn so¹n: NguyÔn M¹nh Cêng Trang 1


4
§Ò c¬ng chi tiÕt Kü thuËt lËp tr×nh

#include <stdio.h>
#include <iostream.h>
main()
{
clrscr();
float tk;
char * hk;
long T;
cout<<”Nhap ®iÓm tong ket”;
cin>>tk;
cout<<”Nhap hanh kiem”;
cin>>hk;
T=0;
if (tk >= 7.0)
T = 30000;
if (tk>=9.0 && hk = = “T”)
T += 100000;
cout<<”Häc bæng ” <<T;
getch();
}
3. CÊu tróc chän
Trong trêng hîp cã qu¸ nhiÒu kh¶ n¨ng lùa chän vµ c¸c kh¶ n¨ng lo¹i trõ
nhau, nÕu sö dông nhiÒu lÖnh if lång nhau sÏ lµm cho ch¬ng tr×nh phøc t¹p,
khã kiÓm so¸t. V× vËy C++ cung cÊp mét cÊu tróc ®iÒu khiÓn kh¸c sö dông
trong trêng hîp nµy, ®ã lµ cÊu tróc chän.
Có ph¸p:
switch (<BiÕn nguyªn>)
{
case <GT 1><:>
LÖnh 1;
break;
case <GT 2><:>
LÖnh 2;
break;

case <GT n><:>
LÖnh n;
break;
[default:
<LÖnh mÆc ®Þnh>;]

Biªn so¹n: NguyÔn M¹nh Cêng Trang 1


5
§Ò c¬ng chi tiÕt Kü thuËt lËp tr×nh

}
ý nghÜa:
NÕu <BiÕn nguyªn> nhËn gi¸ trÞ GT1, thùc hiÖn <LÖnh 1>
NÕu <BiÕn nguyªn> nhËn gi¸ trÞ GT2, thùc hiÖn <LÖnh 2>…
NÕu <BiÕn nguyªn> nhËn gi¸ trÞ GTn, thùc hiÖn <LÖnh n>
NÕu cã thµnh phÇn [default:], thùc hiÖn <lÖnh mÆc ®Þnh> khi
biÕn nguyªn kh«ng nhËn gi¸ trÞ nµo trong c¸c gi¸ trÞ trªn.
- S¬ ®å khèi:

BiÕn = LÖnh 1
GT1

BiÕn = LÖnh 2
GT2

BiÕn = LÖnh n
GTn

LÖnh mÆc
®Þnh

Chó ý:
- LÖnh switch chØ thùc hiÖn trªn biÕn nguyªn.
- Mçi tõ kho¸ case chØ lùa chän 1 trêng hîp.
- C¸c c©u lÖnh <LÖnh 1>, <LÖnh 2>… cã thÓ lµ mét khèi lÖnh. Sau
®ã b¾t buéc ph¶i cã tõ khãa <break;> .
- Thµnh phÇn [deffault:] lµ kh«ng b¾t buéc. NÕu cã thµnh phÇn nµy,
<LÖnh mÆc ®Þnh> sÏ ®îc ®îc thùc hiÖn sau khi tÊt c¶ c¸c trêng hîp
case ®Òu kh«ng tháa m·n.

Biªn so¹n: NguyÔn M¹nh Cêng Trang 1


6
§Ò c¬ng chi tiÕt Kü thuËt lËp tr×nh

VD1: ViÕt ch¬ng tr×nh nhËp vµo mét th¸ng cña mét n¨m nµo ®ã. In sè
ngµy cña th¸ng ®ã ra mµn h×nh.
#include <conio.h>
#include <stdio.h>
#include <iostream.h>
main()
{
clrscr();
int T, N;
cout<<”NhËp th¸ng”;
cin>>T;
cout<<”NhËp n¨m “;
cin>>N;
switch (T)
{
case 1:
case 3:
case 5:
case 7:
case 8:
case 10:
case 12:
cout<<”Th¸ng cã 31 ngµy”;
break;
case 4:
case 6:
case 9:
case 11:
cout<<”Th¸ng cã 30 ngµy”;
break;
case 2:
if (N%4 = = 0)
cout<<”Th¸ng cã 28 ngµy”;
else
cout<<”Th¸ng cã 29 ngµy”;
break;
}
getch();
}
VD2: ViÕt ch¬ng tr×nh nhËp vµo m· häc vÞ (lµ mét sè nguyªn) cña mét
nh©n viªn. In ra häc vÞ t¬ng øng víi quy ®Þnh:
M· =1: Cö nh©n.
M· =2: Kü s.

Biªn so¹n: NguyÔn M¹nh Cêng Trang 1


7
§Ò c¬ng chi tiÕt Kü thuËt lËp tr×nh

M· =3: Th¹c sü.


M· =4: TiÕn sü.
C¸c m· kh¸c: Kh«ng xÕp lo¹i häc vÞ.
#include <conio.h>
#include <stdio.h>
#include <iostream.h>
main()
{
clrscr();
int M;
cout<<”NhËp m· häc vÞ”;
cin>>M;
switch (M)
{
case 1:
cout<<”Cö nh©n”;
break;
case 2:
cout<<”Kü s”;
break;
case 3:
cout<<”Th¹c sü”;
break;
case 4:
cout<<”TiÕn sü”;
break;
default:
cout<<”Kh«ng xÕp lo¹i häc vÞ”;
}
getch();
}
ChuyÓn ®æi gi÷a cÊu tróc chän vµ rÏ nh¸nh:
Víi cÊu tróc rÏ nh¸nh, c¸c biÕn trong biÓu thøc ®iÒu kiÖn cã thÓ cã
kiÓu bÊt kú. Ngîc l¹i, víi cÊu tróc chän, chØ lùa chän c¸c trêng hîp cña biÕn
nguyªn. Do vËy, viÖc chuyÓn ®æi tõ cÊu tróc chän sang cÊu tróc rÏ nh¸nh bao
giê còng thùc hiÖn ®îc, ®iÒu ngîc l¹i kh«ng ®óng.
§Ó chuyÓn ®æi mét cÊu tróc rÏ nh¸nh mµ biÓu thøc ®iÒu kiÖn cã c¸c
biÕn kh«ng ph¶i kiÓu nguyªn sang cÊu tróc chän cÇn sö dông thªm mét biÕn
nguyªn ®Ó m· ho¸ c¸c trêng hîp cña nã, sau ®ã ta ¸p dông cÊu tróc chän trªn
biÕn nguyªn nµy.

Biªn so¹n: NguyÔn M¹nh Cêng Trang 1


8
§Ò c¬ng chi tiÕt Kü thuËt lËp tr×nh

4. CÊu tróc lÆp


a. Vßng lÆp víi sè lÇn lÆp x¸c ®Þnh
Lµ vßng lÆp mµ ngêi lËp tr×nh lu«n biÕt tríc sè lÇn lÆp cña lÖnh lÆp.
Trong qu¸ tr×nh lÆp, ta thêng sö dông mét biÕn ®Ó kiÓm so¸t sè lÇn
lÆp gäi lµ “BiÕn ch¹y”.
BiÕn ch¹y thêng nhËn c¸c gi¸ trÞ tõ cËn díi (n1) tíi cËn trªn (n2) vµ sè
lÇn lÆp b»ng n2 – n1.
Có ph¸p:
for (<BiÓu thøc 1>;<BiÓu thøc 2>;<BiÓu thøc 3>)
<LÖnh lÆp>;
Trong ®ã:
<BiÓu thøc 1>: th«ng thêng cã cã d¹ng: <BiÕn ch¹y> = <CËn díi>.
<BiÓu thøc 2>: th«ng thêng cã d¹ng: <BiÕn ch¹y> <To¸n tö so s¸nh>
<cËn trªn>.
<BiÓu thøc 3>: th«ng thêng lµ mét biÓu thøc ®Ó tang hoÆc gi¶m biÕn
ch¹y.
Trong C++, vßng lÆp cã sè lÇn lÆp x¸c ®Þnh còng cã nguyªn lý ho¹t
®éng t¬ng tù trong Pascal.
ý nghÜa:
B1: Thùc hiÖn <BiÓu thøc 1>
B2: KiÓm tra <BiÓu thøc 2>. NÕu sai, tho¸t khái vßng for. Ngîc
l¹i, sang B3.
B3: Thùc hiÖn <LÖnh lÆp>.
B4: Thùc hiÖn <BiÓu thøc 3>. Quay l¹i B2.
S¬ ®å khèi:
X¸c ®Þnh BT1

KiÓm tra BT2

Thùc hiÖn lÖnh


th©n vßng for

KiÓm tra BT3


Biªn so¹n: NguyÔn M¹nh Cêng Trang 1
9
§Ò c¬ng chi tiÕt Kü thuËt lËp tr×nh

Chó ý:
- C¸c biÓu thøc ®Æt c¸ch nhau bëi dÊy “;”.
- <LÖnh lÆp> cã thÓ lµ mét khèi lÖnh.
- C¸c biÓu thøc cã thÓ khuyÕt nhng c¸c dÊu “;” ph¶i ®îc gi÷ nguyªn.
VD1: ViÕt ch¬ng tr×nh tÝnh n! (n nguyªn)
C¸ch 1: C¸ch th«ng thêng
#include <conio.h>
#include <stdio.h>
#include <iostream.h>
void main()
{
clrscr();
int n; long GT=1;
cout<<”Nhap n “; cin>>n;
for (int i=2;i<=n; i++)
GT*=i;
cout<<n<<” Giai thua : “<<GT;
getch();
}

C¸ch 2: ViÕt thiÕu <biÓu thøc 3>


void main()
{
clrscr();
int n; long GT=1;
cout<<”Nhap n “; cin>>n;
for (int i=2;i<=n; )
{
GT*=i;
i++;
}
cout<<n<<” Giai thua : “<<GT;
getch();
}
C¸c c¸ch tho¸t khái vßng lÆp for.

Biªn so¹n: NguyÔn M¹nh Cêng Trang 2


0
§Ò c¬ng chi tiÕt Kü thuËt lËp tr×nh

- Tho¸t tù nhiªn: Khi <BiÓu thøc 2> nhËn gi¸ trÞ sai, ch¬ng tr×nh tù
®éng tho¸t khái vßng for vµ chuyÓn tíi lÖnh tiÕp theo.
- Tho¸t cìng bøc:
+ C¸ch 1: sö dông lÖnh break;
Khi gÆp lÖnh break; trong th©n vßng for, ch¬ng tr×nh sÏ lËp tøc tho¸t
khái vßng lÆp for vµ chuyÓn tíi lÖnh tiÕp theo bÊt kÓ <BiÓu thøc 2> vÉn
nhËn gi¸ trÞ ®óng.
+ C¸ch 2: sö dông lÖnh goto
LÖnh goto cã d¹ng: goto <Nh·n>. Trong ®ã,<Nh·n> cã d¹ng:
<Tªn nh·n> <:>
<Tªn nh·n> tuú ý ®Æt theo quy íc ®Æt tªn trong C.
Khi gÆp lÖnh goto <Nh·n>, ch¬ng tr×nh sÏ nh¶y tíi vÞ trÝ ®Æt nh·n.
NÕu nh·n ®Æt ngoµi vßng for, ch¬ng tr×nh sÏ tho¸t khái vßng for.
CÇn chó ý trong trêng hîp 2 lÖnh for lång nhau, khi ®ã lÖnh break chØ
lµm cho ch¬ng tr×nh tho¸t khái vßng for gÇn nhÊt chøa lÖnh break. Do vËy,
®Ó tho¸t khái c¶ 2 vßng for lång nhau, ta sö dông lÖnh goto.
VD2: xÐt vÝ dô 1 trong trêng hîp thiÕu biÓu thøc 1 vµ/ hoÆc biÓu
thøc 2.
C¸ch 3: ViÕt thiÕu <BiÓu thøc 2> vµ <BiÓu thøc 3> sö dông
break.
void main()
{
clrscr();
int n; long GT=1;
cout<<”Nhap n “; cin>>n;

for (int i=2;;)


{
if (i==n)
break;
GT*=i;
i++;
}
cout<<n<<” Giai thua : “<<GT;
getch();
}

Biªn so¹n: NguyÔn M¹nh Cêng Trang 2


1
§Ò c¬ng chi tiÕt Kü thuËt lËp tr×nh

C¸ch 4: ViÕt thiÕu <BiÓu thøc 2> vµ <BiÓu thøc 3> sö dông goto.

void main()
{
clrscr();
int n; long GT=1;
cout<<”Nhap n “; cin>>n;

for (int i=2;;)


{
if (i==n)
goto Ex; // nh·n lµ Ex, tªn tù ®Æt.
GT*=i;
i++;
}
Ex:
cout<<n<<” Giai thua : “<<GT;
getch();
}

C¸ch 5: ViÕt thiÕu c¶ 3 biÓu thøc.


void main()
{
clrscr();
int n; long GT=1;
cout<<”Nhap n “; cin>>n;
int i=2;
for (;;)
{
if (i==n)
break;
GT*=i;
i++;
}
cout<<n<<” Giai thua : “<<GT;
getch();
}
V× ®é phøc t¹p cña ch¬ng tr×nh tû lÖ thuËn víi sè lÖnh goto sö dông
trong ch¬ng tr×nh, v× vËy nªn h¹n chÕ sö dông goto.
VD2: Cho d·y sè nguyªn x[] = { 1, 4, 5, 7, 3, 2}. ViÕt ch¬ng tr×nh ®¶o
ngîc d·y sè trªn vµ in kÕt qu¶ lªn mµn h×nh.
§Ó gi¶i quyÕt bµi to¸n trªn, cã thÓ cã nhiÒu c¸ch. C¸ch gi¶i sau minh ho¹
c¸ch viÕt kh¸c cña c¸c biÓu thøc trong có ph¸p vßng for.

Biªn so¹n: NguyÔn M¹nh Cêng Trang 2


2
§Ò c¬ng chi tiÕt Kü thuËt lËp tr×nh

#include "conio.h"
#include "iostream.h"
#include "stdio.h"
void main()
{
clrscr();
int x[] = {1, 4, 5, 7, 3, 2}, n;
n=sizeof(x)/ sizeof(int);
for (int i=0, j=n-1; i<n/2; i++, j--)
{
int tg = x[i];
x[i]=x[j];
x[j]=tg;
}
for (i=0; i<n; i ++)
cout<<x[i]<<" ";
getch();
}
NhËn xÐt: C¸c biÓu thøc 1, 2, 3 trong có ph¸p cña vßng for cã thÓ bao
gåm mét d·y c¸c biÓu thøc con, c¸ch nhay bëi dÊu ph¶y. Khi ®ã, sù ®óng/ sai
cña biÓu thøc “mÑ” lµ sù ®óng/ sai cña biÓu thøc con ®Çu tiªn trong d·y.
Nh vËy vßng for trªn cã thÓ viÕt nh sau:
void main()
{
clrscr();
int x[] = {1, 4, 5, 7, 3, 2}, n;
n=sizeof(x)/ sizeof(int);
int tg;
for (int i=0, j=n-1; i<n/2; tg=x[i], x[i]=x[j], x[j]=tg, i++, j--)
{
}
for (i=0; i<n; i ++)
cout<<x[i]<<" ";
getch();
}
b. Vßng lÆp víi sè lÇn lÆp kh«ng x¸c ®Þnh
Trong C++, ta chia vßng lÆp víi sè lÇn lÆp kh«ng x¸c ®Þnh ra lµm hai
lo¹i:
LÆp kiÓm tra ®iÒu kiÖn tríc: Tríc tiªn, kiÓm tra biÓu thøc ®iÒu
kiÖn. NÕu biÓu thøc ®iÒu kiÖn cßn ®óng, sÏ thùc hiÖn lÖnh lÆp. NÕu biÓu
thøc ®iÒu kiÖn sai, ra khái vßng lÆp.

Biªn so¹n: NguyÔn M¹nh Cêng Trang 2


3
§Ò c¬ng chi tiÕt Kü thuËt lËp tr×nh

+ S¬ ®å khèi:

Y Thùc hiÖn lÖnh


BT§K
®óng? lÆp
N

Nh vËy: LÖnh lÆp cã thÓ kh«ng ®îc thùc hiÖn lÇn nµo.
+ Có ph¸p:
while (<BiÓu thøc ®iÒu kiÖn>)
<LÖnh lÆp>
ý nghÜa:
B1: KiÓm tra biÓu thøc ®iÒu kiÖn. NÕu biÓu thøc ®iÒu kiÖn sai,
tho¸t ra khái vßng lÆp. NÕu biÓu thøc ®iÒu kiÖn ®óng, chuyÓn qua bíc 2.
B2: Thùc hiÖn <LÖnh lÆp>. Quay l¹i B1.
Chó ý:
- BiÓu thøc ®iÒu kiÖn ph¶i ®Æt trong dÊu “(“ “)”.
- <LÖnh lÆp> cã thÓ lµ mét khèi lÖnh.
- CÇn tr¸nh c¸c trêng hîp lÆp v« h¹n.
VD1: ViÕt ch¬ng tr×nh t×m sè lòy thõa 2 ®Çu tiªn lín h¬n 1000.
#include <conio.h>
#include <stdio.h>
#include <iostream.h>
main()
{
clrscr();
int So=2;
while (So <=1000)
So *=2;
cout<<”Sè cÇn t×m lµ ”<<So;
getch();
}
VD2: ViÕt ch¬ng tr×nh nhËp vµo ®iÓm ®¹o ®øc cña mét häc sinh
(thang ®iÓm 100, nguyªn) vµ sè ngµy ®i häc muén cña häc sinh ®ã. NÕu häc

Biªn so¹n: NguyÔn M¹nh Cêng Trang 2


4
§Ò c¬ng chi tiÕt Kü thuËt lËp tr×nh

sinh ®i häc muén 1 ngµy, trõ 1 ®iÓm. TÝnh vµ in sè ®iÓm cßn l¹i cña häc
sinh.
#include <conio.h>
#include <stdio.h>
#include <iostream.h>
main()
{
clrscr();
int D, HM;
cout<<”NhËp ®iÓm ®¹o ®øc”;
cin>>D;
cout<<”NhËp sè ngµy ®i häc muén”;
cin>>HM;
while (HM>0)
{
D - -;
HM - -;
}
cout<<”§iÓm cßn l¹i “<<D;
getch();
}
LÆp kiÓm tra ®iÒu kiÖn sau: T¬ng tù nh vßng lÆp kiÓm tra ®iÒu
kiÖn tríc, chØ kh¸c ë chç biÓu thøc ®iÒu kiÖn ®îc kiÓm tra mçi khi ®· thùc
hiÖn lÖnh lÆp. Nh vËy, lÖnh lÆp lu«n ®îc thùc hiÖn Ýt nhÊt mét lÇn.
+ S¬ ®å khèi:

Thùc hiÖn lÖnh


lÆp

Y
BT§K
®óng?
N

+ Có ph¸p:
do
<LÖnh lÆp;>
while (<BiÓu thøc ®iÒu kiÖn>)
ý nghÜa:
B1: Thùc hiÖn lÖnh lÆp.

Biªn so¹n: NguyÔn M¹nh Cêng Trang 2


5
§Ò c¬ng chi tiÕt Kü thuËt lËp tr×nh

B2: KiÓm tra <BiÓu thøc ®iÒu kiÖn>. NÕu <BiÓu thøc ®iÒu kiÖn
®óng, quay l¹i B1. Ngîc l¹i, tho¸t khái vßng lÆp.
Chó ý:
- <LÖnh lÆp> cã thÓ lµ mét khèi lÖnh.
- <BiÓu thøc ®iÒu kiÖn> ph¶i ®îc ®Æt trong dÊu “(“ “)”;
- CÇn tr¸nh c¸c trêng hîp lÆp v« h¹n.
VD1: ViÕt ch¬ng tr×nh t×m sè nguyªn x ®Çu tiªn lín h¬n 5 mµ tháa m·n
sin(x) = 1
#include <conio.h>
#include <stdio.h>
#include <iostream.h>
main()
{
clrscr();
int x=0;
do
x +=1;
while (x <=5 | | sin(x) !=1)
cout<<”Sè cÇn t×m lµ ”<<x;
getch();
}
VD2: ViÕt ch¬ng tr×nh nhËp vµo mét sè nguyªn x. KiÓm tra xem sè ®ã
®· lín h¬n 10 hay cha. NÕu cha, yªu cÇu nhËp l¹i cho tíi khi sè nhËp vµo lín
h¬n 10. KiÓm tra xem sè ®ã cã ph¶i lµ sè nguyªn tè kh«ng, in kÕt luËn lªn
mµn h×nh.
#include <conio.h>
#include <stdio.h>
#include <iostream.h>
main()
{
clrscr();
int So;
cout<<”NhËp mét sè nguyªn “;
do
{
cin>>So;
if (So <=10)
cout<<”Sè kh«ng tháa m·n. NhËp l¹i : “;
}
while (So <=10)

Biªn so¹n: NguyÔn M¹nh Cêng Trang 2


6
§Ò c¬ng chi tiÕt Kü thuËt lËp tr×nh

int kt=0;
int d =2;
do
{
if (So % d ==0)
kt = 1;
d++;
}
while (d<So)
if (kt==0)
cout<<”Sè “<<So<<” Lµ sè nguyªn tè”;
else
cout<<”Sè “<<So<<” Kh«ng lµ sè nguyªn tè”;
getch();
}
cout<<”Sè cÇn t×m lµ ”<<So;
getch();
}
§Ó tho¸t khái vßng lÆp kh«ng x¸c ®Þnh, ta còng cã thÓ sö dông break
ho¨ck goto. Tuy nhiªn, c¸c trêng hîp nµy Ýt x¶y ra do ®Æc thï cña vßng lÆp.
ChuyÓn ®æi gi÷a c¸c cÊu tróc lÆp:
Tõ vßng lÆp x¸c ®Þnh (for), ta cã thÓ chuyÓn sang vßng lÆp kh«ng
x¸c ®Þnh (while hoÆc do/ while) b»ng c¸ch sö dông thªm mét biÕn ®Õm kiÓu
nguyªn trong th©n vßng lÆp kh«ng x¸c ®Þnh. Tríc khi lÆp ta khëi g¸n gi¸ trÞ
cña biÕn ®Õm nµy b»ng 0. Mçi khi thùc hiÖn mét lÇn lÆp, ta t¨ng gi¸ trÞ cña
biÕn ®Õm nµy lªn 1.
§Ó chuyÓn ®æi ngîc l¹i (tõ cÊu tróc lÆp kh«ng x¸c ®Þnh sang cÊu tróc
lÆp x¸c ®Þnh) th× nãi chung, ta ph¶i sö dông c¸c vßng for khuyÕt biÓu thøc 2,
díi d¹ng:
for (<BiÓu thøc 1> ; ; <biÓu thøc 3>)
bëi v× ta kh«ng biÕt ch¾c sè lÇn lÆp cña cÊu tróc. Khi ®ã b¾t buéc
ph¶i sö dông lÖnh break vµ goto trong th©n vßng for ®Ó tho¸t cìng bøc.
5. C¸c vÝ dô minh häa
VD1: ViÕt ch¬ng tr×nh nhËp vµo mét sè nguyªn n, sau ®ã tÝnh tæng
c¸c sè nguyªn tè thuéc ®o¹n [1..n]. Cho biÕt cã bao nhiªu sè nguyªn tè thuéc
®o¹n trªn?
#include <conio.h>
#include <stdio.h>

Biªn so¹n: NguyÔn M¹nh Cêng Trang 2


7
§Ò c¬ng chi tiÕt Kü thuËt lËp tr×nh

#include <iostream.h>
main()
{
clrscr();
int So, Tong, Dem;
cout<<”NhËp sè nguyªn”;
cin>>So;
Tong =Dem=0;
for (int i=1; i<=n; i++)
{
int Check = 0;
for (int j=2; j<n; j++)
if (i%j==0)
Check = 1;
If (Check ==0)
{
Tong +=i;
Dem++;
}
}
cout<<”Tæng c¸c sè nguyªn tè “<<Tong;
cout<<” Cã “<<Dem<<sè nguyªn tè trong ®o¹n 1..n”;
getch();
}
VD2: ViÕt ch¬ng tr×nh nhËp vµo mét sè nguyªn n vµ mét sè thùc x, sau
®ã tÝnh gi¸ trÞ biÓu thøc:
 x2 x3 xn
x   2  ..  n 1 NÕun ch½n
F=  3 3 3
 0 NÕun lÎ
#include <conio.h>
#include <stdio.h>
#include <iostream.h>
main()
{
clrscr();
int n; float x, F;
float ts, ms;
cout<<”NhËp x”;
cin>>x;
cout<<”NhËp n”;
cin>>n;
F=0;
ts=x;
ms=1;
if (n%2==0)

Biªn so¹n: NguyÔn M¹nh Cêng Trang 2


8
§Ò c¬ng chi tiÕt Kü thuËt lËp tr×nh

{
for(int i=1; i<=n; i++)
{
ts*=x;
ms*=3;
F+=ts/ms;
}
}
cout<<”Gi¸ trÞ cña biÓu thøc “<<F;
getch();
}
Ch¬ng III. Kü thuËt lËp tr×nh ®¬n thÓ

I. Giíi thiÖu
1. Kh¸i niÖm vÒ ®¬n thÓ
Khi viÕt mét ch¬ng tr×nh, chóng ta cã thÓ triÓn khai theo hai c¸ch:
C¸ch 1: Toµn bé c¸c lÖnh cña ch¬ng tr×nh ®îc viÕt trong hµm main.
C¸c lÖnh ®îc viÕt theo tr×nh tù ®Ó gi¶i quyÕt bµi to¸n ®Æt ra.
C¸ch 2: Ch¬ng tr×nh ®îc t¹o thµnh tõ nhiÒu ®¬n thÓ kh¸c nhau. C¸c
®¬n thÓ thùc hiÖn nh÷ng nhiÖm vô t¬ng ®èi ®éc lËp vµ ®îc “l¾p ghÐp” l¹i
thµnh ch¬ng tr×nh th«ng qua nh÷ng lêi gäi ®¬n thÓ trong hµm main.
u nhîc ®iÓm:
- Víi c¸ch 1: sÏ thÝch hîp khi viÕt nh÷ng ch¬ng tr×nh cã kÝch thíc nhá.
Toµn bé thuËt to¸n ®îc thÓ hiÖn trong mét ®o¹n m· tõ trªn xuèng díi. Tuy
nhiªn, c¸ch nµy kh«ng phï hîp víi c¸c ch¬ng tr×nh lín do:
+ KÝch thíc ch¬ng tr×nh cång kÒnh, khã kiÓm so¸t, chØnh söa.
+ C¸c ®o¹n m· cã thÓ lÆp ®i lÆp l¹i, ch¬ng tr×nh dµi kh«ng cÇn
thiÕt.
- Víi c¸ch 2: Ch¬ng tr×nh ®îc chia nhá thµnh c¸c ®¬n thÓ kh¾c phôc ®îc
hai nhîc ®iÓm c¬ b¶n trªn. §Æc biÖt phï hîp víi c¸c ch¬ng tr×nh cã kÝch
thíc lín.
Trong C++, ta cã hai lo¹i ®¬n thÓ sau:
[1]. C¸c líp ®èi tîng: Ch¬ng tr×nh bao gåm mét sè ®o¹n m· m« t¶ c¸c líp
c¸c ®èi tîng nµo ®ã sÏ sö dông trong ch¬ng tr×nh chÝnh. Lo¹i ®¬n thÓ nµy ®-
îc nghiªn cøu trong néi dung m«n häc “LËp tr×nh híng ®èi tîng”.

Biªn so¹n: NguyÔn M¹nh Cêng Trang 2


9
§Ò c¬ng chi tiÕt Kü thuËt lËp tr×nh

[2]. C¸c hµm: Ch¬ng tr×nh ®îc cÊu t¹o tõ c¸c hµm. Mçi hµm thùc thi
mét nhiÖm vô t¬ng ®èi ®éc lËp, trong ®ã cã mét hµm main ®ãng vai trß nh
ch¬ng tr×nh chÝnh ®Ó sö dông c¸c hµm kh¸c.
Trong ph¹m vi m«n häc, ta chØ xem xÐt c¸c ®¬n thÓ díi d¹ng c¸c hµm.
2. C¸c ®Æc trng cña hµm
Mét hµm trong C++ cã c¸c ®Æc trng sau:
- Tªn hµm: do ngêi lËp tr×nh tù ®Æt vµ cã nh÷ng ®Æc ®iÓm sau:
+ Tªn hµm thêng mang tÝnh ®¹i diÖn cho c«ng viÖc mµ hµm sÏ ®¶m
nhiÖm.
+ Tªn hµm kh«ng ®îc chøa dÊu c¸ch vµ c¸c ký tù ®Æc biÖt (trõ dÊu
g¹ch díi).
- KiÓu gi¸ trÞ tr¶ vÒ cña hµm: NÕu hµm tr¶ vÒ mét gi¸ trÞ nµo ®ã th×
gi¸ trÞ ®ã ph¶i thuéc mét kiÓu d÷ liÖu nµo ®ã mµ ta gäi lµ kiÓu gi¸ trÞ tr¶
vÒ cña hµm. KiÓu gi¸ trÞ tr¶ vÒ cña hµm cã thÓ lµ c¸c kiÓu d÷ liÖu
chuÈn.
- KiÓu vµ tªn c¸c ®èi cña hµm: NÕu hµm sö dông c¸c ®èi th× c¸c ®èi
ph¶i thuéc mét kiÓu d÷ liÖu nµo ®ã. Khi thiÕt lËp mét hµm, ta cÇn chØ ra
danh s¸ch c¸c ®èi cña hµm vµ kiÓu d÷ liÖu cña mçi ®èi.
- Th©n hµm: lµ néi dung chÝnh cña hµm, chøa toµn bé c¸c lÖnh cña
hµm.
3. Ph©n lo¹i hµm
Trong pascal, ta cã hai lo¹i ch¬ng tr×nh con: thñ tôc (procedure) vµ hµm
(function). Trong C++, chóng ta cã duy nhÊt mét lo¹i “ch¬ng tr×nh con” (mµ ta
gäi lµ ®¬n thÓ), ®ã lµ hµm.
Mét ch¬ng tr×nh trong C++ ®îc cÊu t¹o tõ c¸c hµm, trong ®ã hµm main
lµ hµm b¾t buéc ph¶i cã, ®ãng vai trß nh ch¬ng tr×nh chÝnh.
Kh¸c víi trong Pascal, tÊt c¶ c¸c hµm ®Òu tr¶ vÒ mét gi¸ trÞ nµo ®ã, c¸c
hµm trong C++ ®îc chia lµm hai lo¹i:
- Hµm kh«ng cã gi¸ trÞ tr¶ vÒ: Lµ hµm chØ cã chøc n¨ng thùc hiÖn mét
c«ng viÖc nµo ®ã mµ ta kh«ng quan t©m tíi gi¸ trÞ tr¶ vÒ cña hµm.
- Hµm cã gi¸ trÞ tr¶ vÒ: Ngoµi viÖc thùc hiÖn mét c«ng viÖc nµo ®ã, ta
cßn quan t©m tíi gi¸ trÞ thu ®îc sau khi hµm thùc thi ®Ó dïng trong nh÷ng
®o¹n tr×nh tiÕp theo.

Biªn so¹n: NguyÔn M¹nh Cêng Trang 3


0
§Ò c¬ng chi tiÕt Kü thuËt lËp tr×nh

Tïy theo nguån gèc cña hµm ngêi ta ph©n ra:


- C¸c hµm cã s½n: Lµ c¸c hµm chøa trong c¸c th viÖn cña C++, ®· ®îc
®Þnh nghÜa tõ tríc. Ngêi lËp tr×nh chØ viÖc sö dông th«ng qua c¸c chØ
thÞ: #include <Tªn th viÖn chøa hµm>.
- C¸c hµm tù ®Þnh nghÜa: Lµ c¸c hµm do ngêi lËp tr×nh tù ®Þnh
nghÜa. C¸c hµm nµy còng cã thÓ ®îc tËp hîp l¹i trong mét file .h ®Ó dïng
nh mét th viÖn cã s½n.
II. §Þnh nghÜa vµ sö dông hµm
1. §Þnh nghÜa hµm
a. CÊu tróc mét hµm:
Mét hµm thêng cã cÊu tróc nh sau:
<KiÓu hµm> <Tªn hµm> <([kiÓu ®èi] [tªn ®èi])>
{
C¸c lÖnh trong th©n hµm;
}
Trong ®ã:
- <KiÓu hµm>: lµ kiÓu gi¸ trÞ tr¶ vÒ cña hµm. NÕu hµm kh«ng cã gi¸
trÞ tr¶ vÒ, ta dïng tõ kiÓu void. Ngîc l¹i, ta thêng sö dông c¸c kiÓu chuÈn
nh int, float, double, char…
- <Tªn hµm>: do ngêi dïng tù ®Þnh nghÜa.
- <([kiÓu ®èi] [tªn ®èi])>: liÖt kª danh s¸ch c¸c ®èi cña hµm vµ kiÓu d÷
liÖu cña ®èi (nÕu cã).
VD1: hµm tÝnh n! ®îc viÕt nh sau:
long GT(int n)
{
long kq=1;
if (n==0 | | n==1)
kq=1;
else
for (int i=1; i<=n; i++)
kq *=i;
return kq;
}
Chó ý:
- Mçi ®èi cÇn ®i kÌm víi kiÓu ®èi, mçi cÆp [kiÓu ®èi] [tªn ®èi] c¸ch
nhau bëi dÊu ph¶y.

Biªn so¹n: NguyÔn M¹nh Cêng Trang 3


1
§Ò c¬ng chi tiÕt Kü thuËt lËp tr×nh

- Th©n hµm ®îc ®Æt gi÷a hai dÊu “{“ “}”.


- NÕu hµm cã gi¸ trÞ tr¶ vÒ th× cÇn cã c©u lÖnh <return BiÓu_thøc>
®Ó g¸n gi¸ trÞ cña BiÓu_Thøc cho tªn hµm. TuyÖt ®èi kh«ng ®îc g¸n <Tªn
hµm> = <BiÓu_Thøc>.
VD2: ViÕt hµm gi¶i ph¬ng tr×nh bËc nhÊt víi ®èi vµo lµ hai hÖ sè a,
b.
void PTBN(float a, float b)
{
if (a==0 && b==0)
cout<<”Ph¬ng tr×nh v« sè nghiÖm”;
else
if (a==0 && b!=0)
cout<<”ph¬ng tr×nh v« nghiÖm”;
else
cout<<”Ph¬ng tr×nh cã nghiÖm “<<-b/a;
}
b. C¸ch tæ chøc c¸c hµm
C¸ch 1: c¸c hµm ®Æt trong cïng mét tÖp víi ch¬ng tr×nh chÝnh.
Ch¬ng tr×nh ngoµi hµm main cßn cã c¸c hµm kh¸c th× ®îc viÕt theo
cÊu tróc sau:
#include…
….
<KiÓu hµm> <Tªn Hµm 1> <([kiÓu ®èi] [Danh s¸ch c¸c ®èi]>
{
th©n hµm 1;
}

<KiÓu hµm> <Tªn Hµm 2> <([kiÓu ®èi] [Danh s¸ch c¸c ®èi]>
{
th©n hµm 2;
}

void main()
{
Th©n hµm main;
}
HoÆc:
#include…
….
<KiÓu hµm> <Tªn Hµm 1> <([kiÓu ®èi] [Danh s¸ch c¸c ®èi]>;
<KiÓu hµm> <Tªn Hµm 2> <([kiÓu ®èi] [Danh s¸ch c¸c ®èi]>

Biªn so¹n: NguyÔn M¹nh Cêng Trang 3


2
§Ò c¬ng chi tiÕt Kü thuËt lËp tr×nh

….

void main()
{
Th©n hµm main;
}

<KiÓu hµm> <Tªn Hµm 1> <([kiÓu ®èi] [Danh s¸ch c¸c ®èi]>
{
Th©n hµm 1;
}
<KiÓu hµm> <Tªn Hµm 2> <([kiÓu ®èi] [Danh s¸ch c¸c ®èi]>
{
Th©n hµm 2;
}
….

VD1: ViÕt ch¬ng tr×nh kiÓm tra mét sè nguyªn n cã ph¶i lµ sè nguyªn tè
kh«ng, nÕu n lµ sè nguyªn tè, h·y tÝnh n!.
#include <conio.h>
#include <stdio.h>
#include <iostream.h>
int NT(int n)
{
if (n ==1 | | n ==2)
return =1;
else
{Check =0;
for (int i=2; i<n; i++)
if (n%i==0)
Check =1;
if (Check = 0)
return 1;
else
return 0;
}
}
//=================
long GT(int n)
{
long kq=1;
if (n==0 | | n==1)
kq=1;

Biªn so¹n: NguyÔn M¹nh Cêng Trang 3


3
§Ò c¬ng chi tiÕt Kü thuËt lËp tr×nh

else
for (int i=1; i<=n; i++)
kq *=i;
return kq;
}
void main()
{
int a;
cout<<”NhËp a”;
cin>>a;
if (NT(a) == 0)
cout<<”Sè “<<a<<” Kh«ng ph¶i nguyªn tè”;
else
{
cout<<”Sè “<<a<<” lµ sè nguyªn tè”;
cout<<” Giai thõa cña “<<a<<” lµ “<<GT(a);
}
getch();
}
C¸ch 2: Tæ chøc trong tÖp th viÖn:
B1: ViÕt c¸c hµm (trõ hµm main() )trong mét file sau ®ã lu díi ®Þnh
d¹ng .h. File nµy thêng ®îc gäi lµ file th viÖn. (®Ó thuËn tiÖn cho viÖc so¸t
lçi, tèt nhÊt tríc tiªn nªn tæ chøc c¸c hµm nh c¸ch 1, sau ®ã di chuyÓn toµn bé
c¸c hµm (trõ hµm main() sang mét file .h vµ lu l¹i)
B2: ViÕt hµm main() trong mét tÖp riªng. §Ó hµm main() cã thÓ sö
dông c¸c hµm viÕt trong file th viÖn ®· t¹o trong B1, cÇn thªm chØ thÞ:
#include <[ ®êng dÉn] <Tªn th viÖn.h>
Chó ý: nÕu ®Æt th viÖn trªn trong th môc TC\ Include th× trong chØ
thÞ #include kh«ng cÇn thªm ®êng dÉn. Ngîc l¹i, cÇn thªm ®Çy ®ñ ®êng dÉn
tíi file th viÖn nãi trªn.
VD: T¹o file .h víi néi dông sau, VD file “TV.h”:

int NT(int n)
{
if (n ==1 | | n ==2)
return =1;
else
{Check =0;
for (int i=2; i<n; i++)

Biªn so¹n: NguyÔn M¹nh Cêng Trang 3


4
§Ò c¬ng chi tiÕt Kü thuËt lËp tr×nh

if (n%i==0)
Check =1;
if (Check = 0)
return 1;
else
return 0;
}
}
//=================
long GT(int n)
{
long kq=1;
if (n==0 | | n==1)
kq=1;
else
for (int i=1; i<=n; i++)
kq *=i;
return kq;
}
Më mét file míi vµ viÕt hµm main():
#include <conio.h>
#include <stdio.h>
#include <iostream.h>
#include <C:\TC\BIN\ TV.h”
void main()
{
int a;
cout<<”NhËp a”;
cin>>a;
if (NT(a) == 0)
cout<<”Sè “<<a<<” Kh«ng ph¶i nguyªn tè”;
else
{
cout<<”Sè “<<a<<” lµ sè nguyªn tè”;
cout<<” Giai thõa cña “<<a<<” lµ
“<<GT(a);
}
getch();
}
Chó ý:
- C¸c file th viÖn .h kh«ng nhÊt thiÕt ph¶i cã c¸c chØ thÞ tiÒn xö lý
#include …

Biªn so¹n: NguyÔn M¹nh Cêng Trang 3


5
§Ò c¬ng chi tiÕt Kü thuËt lËp tr×nh

- Kh«ng thÓ so¸t lçi b»ng c¸ch bÊm F9 trong file th viÖn .h.
2. Sö dông hµm
Hµm ®îc sö dông th«ng qua lêi gäi cña nã. C¸ch viÕt mét lêi gäi hµm
nh sau:
<Tªn hµm> <([danh s¸ch c¸c tham sè thùc sù])>
Chó ý:
- NÕu hµm ®îc ®Þnh nghÜa cã ®èi sè th× khi gäi hµm ta ph¶i truyÒn
®Çy ®ñ c¸c tham sè cho hµm.
- C¸c tham sè ph¶i cã kiÓu trïng víi kiÓu cña ®èi sè t¬ng øng.
- NÕu hµm kh«ng cã ®èi sè th× lêi gäi hµm vÉn ph¶i sö dông dÊu () kÌm
tªn hµm: <Tªn hµm> <()>.
- NÕu hµm cã gi¸ trÞ tr¶ vÒ th× tªn hµm ®îc sö dông nh mét biÕn. Ngîc
l¹i, nÕu hµm kh«ng cã gi¸ trÞ tr¶ vÒ, tªn hµm ®îc sö dông nh mét lÖnh.
3. Ph¹m vi cña biÕn
Theo ph¹m vi ho¹t ®éng cña biÕn, ta chia ra:
- BiÕn toµn côc:
Ph¹m vi ho¹t ®éng trong toµn bé ch¬ng tr×nh, kÓ tõ vÞ trÝ khai b¸o biÕn.
VÞ trÝ khai b¸o n»m ngoµi c¸c hµm (kÓ c¶ hµm main).
NÕu ch¬ng tr×nh ®îc viÕt trªn nhiÒu tÖp, ®Ó ph¹m vi ho¹t ®éng cña biÕn
bao gåm c¶ c¸c tÖp kh¸c, ta cÇn thªm chØ danh extern vµo tríc khai b¸o biÕn.
- BiÕn côc bé:
Ph¹m vi ho¹t ®éng: NÕu biÕn ®îc khai b¸o trong th©n mét khèi nµo ®ã sÏ cã
ph¹m vi ho¹t ®éng chØ trong khèi, kÓ c¶ c¸c khèi con n»m bªn trong khèi ®ã.
+ KÕt thóc khèi, biÕn côc bé sÏ ®îc gi¶i phãng.
+ Muèn biÕn nµy tån t¹i trong suèt thêi gian ch¬ng tr×nh lµm viÖc, ta
cÇn thªm tõ khãa static tríc khai b¸o biÕn ®Ó khai b¸o biÕn díi d¹ng biÕn
tÝnh.
VD1: XÐt vÝ dô sau:
int x;
void Ham(int a)
{
cout<<”BiÕn x trong hµm “<<x;

Biªn so¹n: NguyÔn M¹nh Cêng Trang 3


6
§Ò c¬ng chi tiÕt Kü thuËt lËp tr×nh

if (a%2==0) {
int x=5;
x+=a;
cout<<”BiÕn x trong hµm “<< x;}
}
void main()
{
x=1;
int a = 2;
Ham(a);
cout<< “BiÕn x trong hµm main “<<x;
int x = 3;
cout<<”BiÕn x trong hµm main “<<x;
getch();
}
NhËn xÐt:
- BiÕn x díi d¹ng toµn côc cã ph¹m vi ho¹t ®éng trong toµn bé ch¬ng
tr×nh, kÓ tõ khi khai b¸o.
- NÕu trong mét khèi cã khai b¸o biÕn côc bé trïng tªn víi viÕn toµn côc
th× kÓ tõ khi khai b¸o, khèi ®ã sÏ sö dông biÕn côc bé mµ kh«ng sö dông
biÕn toµn côc.
4. Sö dông c¸c tham sè trong lËp tr×nh ®¬n thÓ
1. Ph©n lo¹i tham sè
NÕu hµm cã ®èi sè (tham sè h×nh thøc), khi gäi hµm ta ph¶i truyÒn c¸c
tham sè t¬ng øng cho hµm. C¸c tham sè cã thÓ lµ c¸c biÕn hoÆc c¸c h»ng gi¸ trÞ.
Cã hai lo¹i tham sè:
[1]. Tham chiÕu: Khi truyÒn tham sè díi d¹ng tham chiÕu, tham sè lµ
c¸c biÕn vµ tham sè sÏ ®îc truy cËp trùc tiÕp. Nh vËy, c¸c mét tham sè khi
truyÒn vµo mét hµm cã thÓ bÞ biÕn ®æi gi¸ trÞ cña nã.
[2]. Tham trÞ: Khi truyÒn tham sè díi d¹ng tham trÞ, tham sè sÏ kh«ng
®îc truy cËp trùc tiÕp. Hµm sÏ cÊp ph¸t mét vïng nhí míi vµ sao chÐp gi¸ trÞ
cña tham sè vµo ®ã. C¸c lÖnh trong th©n hµm sÏ thao t¸c trªn vïng nhí míi nµy.
Nh vËy, mét tham sè khi truyÒn vµo mét hµm sÏ kh«ng bÞ tham ®æi gi¸ trÞ
cña nã khi ra khái hµm.
Vïng nhí Vïng nhí
BiÕn BiÕn
cña biÕn cña biÕn
Vïng nhí
míi
Gäi hµm Thùc thi Gäi hµm Thùc thi
hµm hµm
Biªn so¹n: NguyÔn M¹nh Cêng Trang 3
7
§Ò c¬ng chi tiÕt Kü thuËt lËp tr×nh

a) truyÒn tham chiÕu b) TruyÒn tham trÞ


2. TruyÒn tham sè
NÕu ch¬ng tr×nh viÕt trong c¸c file cã phÇn më réng .h, ta cã duy nhÊt
mét c¸ch truyÒn tham sè: TruyÒn theo tham trÞ. Tõ C++3.0 trë lªn, cho phÐp
sö dông c¶ hai c¸ch truyÒn tham sè trong c¸c ch¬ng tr×nh viÕt díi d¹ng c¸c
file .CPP.
Khi biÕn truyÒn vµo hµm, nã ®îc truyÒn díi d¹ng tham trÞ. Hµm sÏ cÊp
ph¸t vïng nhí míi vµ sao chÐp gi¸ trÞ cña biÕn vµo « nhí nµy ®Ó sö dông. Nh
vËy, ra khái th©n hµm, « nhí míi ®îc cÊp ph¸t bÞ xãa ngay vµ gi¸ trÞ cña biÕn
kh«ng hÒ thay ®æi.
VD1: XÐt hµm sau:
int tang(int a)
{
a++;
}
void main()
{
int n=1;
cout<<”Gi¸ trÞ tríc khi gäi hµm “<<n;
tang(n);
cout<<”Gi¸ trÞ sau khi gäi hµm “<<n;
getch();
}
VD2: xÐt hµm sau
int Ham(int a, int b)
{
if (a%2==0){
a+=1;
b+=a;
}
cout<<”Gi¸ trÞ a trong th©n hµm “<<a;
cout<<Gi¸ trÞ b trong th©n hµm “<<b;
}

Biªn so¹n: NguyÔn M¹nh Cêng Trang 3


8
§Ò c¬ng chi tiÕt Kü thuËt lËp tr×nh

void main()
{
int a, b;
a=1;
b=2;
cout<<”Gi¸ trÞ a tríc khi gäi hµm “<<a;
cout<<”Gi¸ trÞ b tríc khi gäi hµm “<<b;
Ham(a, b);
cout<<”Gi¸ trÞ a sau khi gäi hµm “<<a;
cout<<”Gi¸ trÞ b sau khi gäi hµm “<<b;
getch();
}
5. Kü thuËt ®Ö quy
1. Kh¸i niÖm vÒ ®Ö quy
Trong C++, mét hµm cã thÓ gäi ®Õn chÝnh nã, kh¶ n¨ng nµy cña hµm
gäi lµ ®Ö quy. Khi mét hµm gäi ®Õn chÝnh nã, hµm ®îc viÕt theo kiÓu ®Ö
quy.
VD: XÐt hµm tÝnh n!. Ta cã ®Þnh nghÜa sau: n! = (n-1)! * n.
Nh vËy, gi¶ sö n=5 th× n! ®îc tÝnh nh sau:
5! = 4! * 5
= 3! * 4 * 5.
= 2! * 3 * 4 * 5.
= 1! * 2 * 3 * 4 * 5.
Víi 1! = 1, ta hoµn toµn cã thÓ tÝnh ®îc 5!. Khi ®ã, ®Ó tÝnh ®îc 5!, ta
ph¶i tÝnh 2!, 3!, 4!.
Hµm lÆp:
long GT(int n)
{
long kq=1;
if (n==0 | | n==1)
kq=1;
else
for (int i=1; i<=n; i++)
kq *=i;
return kq;
}
Hµm ®Ö quy:
long GT(int n)
{

Biªn so¹n: NguyÔn M¹nh Cêng Trang 3


9
§Ò c¬ng chi tiÕt Kü thuËt lËp tr×nh

if (n==1)
return 1;
else
return GT(n-1) * n;
}

Thùc hiÖn: Gi¶ sö n kh¸c 1. Khi ®ã, quy tr×nh thùc hiÖn nh sau:

n! = (n-1)! *n 1 * 2 *…* (n)

(n-1)! = (n-2)! * (n-1) 1 * 2 *…* (n-1)

(n-2)! = (n-3)! * (n-2) 1 * 2 *…* (n-2)

… … ….

(2)! = (1)! * 2 1*2

(1)! 1

Mçi lÇn gäi ®Ö quy, ch¬ng tr×nh thùc hiÖn nh sau:

- Lu ®Þa chØ cña dßng lÖnh gäi ®Ö quy.

- T¹o mét t¹o mét b¶n sao cña hµm, cÊp ph¸t c¸c vïng nhí míi cho c¸c biÕn
côc bé, thùc hiÖn b¶n sao nµy.

- LÊy ®Þa chØ cña dßng lÖnh gäi ®Ö quy vµ quay vÒ.

§Ó râ h¬n ta xem s¬ ®å sau:

B¾t ®Çu B¶n sao 1 B¶n sao n

Gäi ®Ö quy Gäi ®Ö quy … Gäi ®Ö quy Bá qua lÖnh


gäi ®Ö quy

KÕt thóc

Biªn so¹n: NguyÔn M¹nh Cêng Trang 4


0
§Ò c¬ng chi tiÕt Kü thuËt lËp tr×nh

Nh vËy cã bao nhiªu lêi gäi hµm th× cã bÊy nhiªu lÇn kÕt thóc hµm.
Trong trêng hîp kh«ng tån t¹i mét b¶n sao cña hµm mµ t¹i ®ã kh«ng thùc hiÖn
hiÖn lêi gäi ®Ö quy th× qu¸ tr×nh ®Ö quy sÏ kh«ng dõng ®îc (ta gäi lµ ®Ö
quy v« h¹n).

Trong vÝ dô vÒ tÝnh n!, víi n=3 vµ c«ng thøc ®Ö quy n! = n * (n-1)!,


s¬ ®å ®Ö quy cã thÓ nh sau:
B¾t ®Çu :
tÝnh 3! Hµm GT(2) Hµm GT(1)

Gäi ®Ö quy GT(2) Gäi ®Ö quy GT(1) Gäi ®Ö quy GT(0) Bá qua lÖnh
gäi ®Ö quy

KÕt thóc
Return 1*2*3 Return 1*2 Return 1

u nhîc ®iÓm cña ph¬ng ph¸p ®Ö quy:


- Ch¬ng tr×nh ng¾n gäi, dÔ hiÓu.
- Qu¸ tr×nh dÞch phøc t¹p.
- Nãi chung, tèn nhiÒu kh«ng gian nhí h¬n lÆp.

Chó ý: Lu ý tíi ®iÒu kiÖn dõng cña hµm viÕt theo kiÓu ®Ö quy.

Ph¬ng ph¸p ®Ö quy ®Æc biÖt thÝch hîp víi mét sè bµi to¸n nh duyÖt
c©y, ®å thÞ… Tuy nhiªn, nãi chung ta nªn Ýt sö dông ®Ö quy khi viÕt ch¬ng
tr×nh do c¸c nhîc ®iÓm trªn, trõ nh÷ng trêng hîp ®Æc thï.

2. ThiÕt kÕ ch¬ng tr×nh theo kiÓu ®Ö quy.

C¸c bµi to¸n ¸p dông gi¶i thuËt ®Ö quy thêng cã ®Æc ®iÓm sau:

- Bµi to¸n dÔ dµng gi¶i quyÕt trong mét sè trêng hîp riªng øng víi c¸c gi¸
trÞ ®Æc biÖt cña tham sè. Trong trêng hîp nµy, ta cã thÓ gi¶i quyÕt bµi
to¸n mµ kh«ng cÇn gäi ®Ö quy. Ta gäi trêng hîp nµy lµ trêng hîp suy biÕn.

- Trong trêng hîp tæng qu¸t, bµi to¸n cã thÓ quy vÒ bµi to¸n cïng d¹ng nh-
ng gi¸ trÞ cña tham sè thay ®æi. Vµ sau mét sè h÷u h¹n bíc biÕn ®æi ®Ö
quy, sÏ dÉn tíi trêng hîp say biÕn.

Gi¶ sö bµi to¸n tÝnh n!, dÔ dµng thÊy:

Biªn so¹n: NguyÔn M¹nh Cêng Trang 4


1
§Ò c¬ng chi tiÕt Kü thuËt lËp tr×nh

- Víi n=0 hoÆc n = 1 th× n! = 1. Khi ®ã ta kh«ng cÇn gäi ®Ö quy vÉn cã
thÓ tÝnh ®îc n!.

- Trêng hîp tæng qu¸t, n! = n* (n-1)!. Tøc lµ ®Ó tÝnh n!, ta cã thÓ quy
vÒ bµi to¸n tÝnh (n-1)!. Sau mét sè h÷u h¹n bíc biÕn ®æi, ta cã thÓ quy vÒ
bµi to¸n tÝnh 1!.

Nh vËy lµ:

- Trêng hîp suy biÕn: n=0 hoÆc n=1. C«ng thøc trong trêng hîp nµy : n! = 1;

- Trêng hîp tæng qu¸t: lµ c¸c trêng hîp cßn l¹i (n kh¸c 1 vµ n kh¸c 0) khi
®ã: n! = n* (n-1)!.

Ch¬ng tr×nh ®Ö quy ®îc thiÕt kÕ nh sau:


Bíc 1:
- X¸c ®Þnh trêng hîp suy biÕn, gi¸ trÞ cña tham sè, c«ng thøc ®Ó tÝnh
to¸n trong trêng hîp nµy.
- X¸c ®Þnh trêng hîp tæng qu¸t, gi¸ trÞ cña tham sè, c«ng thøc ®Ó tÝnh
to¸n trong trêng hîp nµy.
Bíc 2: Khung ch¬ng tr×nh cã d¹ng:
if (suy biÕn)
C«ng thøc trong trêng hîp suy biÕn.
else
C«ng thøc trong trêng hîp tæng qu¸t.

VD1: thiÕt kÕ hµm ®Ö quy tÝnh n!.


Bíc 1:
- Suy biÕn : n=0 hoÆc n = 1; C«ng thøc n! = 1;
- Tæng qu¸t: n kh¸c 0 vµ n kh¸c 1; C«ng thøc n! = n* (n-1)!.
Bíc 2:
if (n= = 0 || n= = 1)
return 1;
else
return n * GT(n-1);

Sau khi thiÕt kÕ song, viÖc lËp hµm ®Ö quy trë lªn rÊt ®¬n gi¶n.

VD2. D·y sè Catalan ®îc ph¸t biÓu ®Ö quy nh sau:


C1 = 1;

Biªn so¹n: NguyÔn M¹nh Cêng Trang 4


2
§Ò c¬ng chi tiÕt Kü thuËt lËp tr×nh

n 1

Cn = C C
i 1
i n i

H·y x©y dùng hµm ®Ö quy t×m sè CataLan thø n.


Hµm ®Ö quy ®îc thiÕt kÕ nh sau:
Bíc 1:
- Suy biÕn: n = 1; C«ng thøc suy biÕn: Cn = 1;
n 1

- Kh«ng suy biÕn: n kh¸c 1; c«ng thøc tæng qu¸t: Cn = C C


i 1
i n i

Bíc 2:
if (n = = 1)
return 1;
else
{ int C =0;
for (int i=1; i<n; i++)
C+= CataLan(i) * CataLan(n-i);
Return C;
}
Víi phÇn thiÕt kÕ trªn, hµm ®Ö quy tÝnh sè CataLan thø n ®îc viÕt
nh sau:
int CataLan(int n)
{
if (n==1)
return 1;
else
{
int C=0;
for (int i=1; i<n; i++)
C+=CataLan(i)*CataLan(n-i);
return C;
}
}
3. §Ö quy vµ c¸c d·y truy håi
Kh¸i niÖm: Mét d·y truy håi lµ d·y mµ c¸c sè h¹ng ®øng sau ®îc ®Þnh
nghÜa dùa trªn sè h¹ng ®øng tríc cña d·y.
VD: cho d·y sau:
a[1] = 1;
a[n] = a[n-1] * n;

Biªn so¹n: NguyÔn M¹nh Cêng Trang 4


3
§Ò c¬ng chi tiÕt Kü thuËt lËp tr×nh

DÔ dµng thÊy ®©y chÝnh lµ d·y c¸c giai thõa cña c¸c sè tù nhiªn: 1!, 2!,
3!, 4!…
HoÆc d·y c¸c sè Fibonacci:
A[1] = 1;
A[2] = 1;
A[n] = A[n-1] + A[n-2] (víi n>2).
Víi c¸c d·y truy håi, ta hoµn toµn cã thÓ dïng c¸c thuËt to¸n lÆp ®Ó
tÝnh. Tuy nhiªn c¸c gi¶i thuËt ®Ö quy thêng ®îc ¸p dông trªn c¸c d·y truy håi .
4. Mét sè vÝ dô vÒ ®Ö quy
VD1: USCLN cña hai sè nguyªn a, b ®îc ®Þnh nghÜa nh sau:
USCLN(a, b) = a nÕu b =0
= USCLN(b, a%b) nÕu b kh¸c 0.
ViÕt hµm lÆp vµ ®Ö quy ®Ó tÝnh USCLN cña hai sè nguyªn a, b.
Hµm lÆp:

int USCLN_Lap(int a, int b)


{
int Sodu;
while (y !=0)
{
Sodu = a%b;
a = b;
b = Sodu;
}
return a;
}
Hµm ®Ö quy:
ThiÕt kÕ:
Bíc 1:
- Suy biÕn : b=0; c«ng thøc suy biÕn: USCLN(a, b) = b;
- Kh«ng suy biÕn: b kh¸c 0; c«ng thøc tæng qu¸t: USCLN (a, b) =
USCLN(b, a%b);
Bíc 2:
if(b==0)
return a;

Biªn so¹n: NguyÔn M¹nh Cêng Trang 4


4
§Ò c¬ng chi tiÕt Kü thuËt lËp tr×nh

else
return USCLN(b, a%b)
LËp tr×nh:
Int USCLN_DQ(int a, int b)
{
if (b==0)
return a;
else
return USCLN_DQ(b, a%b);
}
VD2: C¸c sè Fibonacci ®îc ®Þnh nghÜa ®Ö quy nh sau:
F[0] = F[1] = 1;
F[i] = F[i-1] + F[i-2];
VD: 1, 1, 2, 3, 5, 8, 13…
ViÕt hµm ®Ö quy t×m sè Fibonacci thø n.
ThiÕt kÕ:
Bíc 1: Suy biÕn: n <=1; c«ng thøc suy biÕn: Fibo(n) = 1;
Kh«ng suy biÕn: n >1; c«ng thøc tæng qu¸t: Fibo(n) = Fibo(n-1) +
Fibo(n-2).
Bíc 2:
if(n<=1)
return 1;
else
return Fibo(n-1) + Fibo(n-2);
LËp tr×nh:
int Fibo(int n)
{
if(n<=1)
return 1;
else
return Fibo(n-1) + Fibo(n-2);
}

Biªn so¹n: NguyÔn M¹nh Cêng Trang 4


5
§Ò c¬ng chi tiÕt Kü thuËt lËp tr×nh

Ch¬ng IV. Kü thuËt lËp tr×nh dïng m¶ng

I. Khai b¸o vµ sö dông m¶ng


1. Kh¸i niÖm vµ ph©n lo¹i m¶ng
a. Kh¸i niÖm vÒ m¶ng
§Ó biÓu diÔn mét d·y sè hay mét b¶ng sè ta cã thÓ dïng nhiÒu biÕn,
c¸ch nµy kh«ng tiÖn lîi do c¸c nhîc ®iÓm sau:
- Ch¬ng tr×nh viÕt dµi kh«ng cÇn thiÕt.
- DÔ g©y nhÇm lÉn.
- Kh«ng kh¶ thi trong trêng hîp sè phÇn tö cña d·y, b¶ng sè qu¸ lín.
§Ó kh¾c phôc nh÷ng nhîc ®iÓm trªn, ngêi ta ®a ra mét kiÓu d÷ liÖu m¶ng.
M¶ng lµ kiÓu d÷ liÖu ®Ó khai b¸o mét tËp hîp nhiÒu phÇn tö cã cïng
kiÓu vµ chung mét tªn. Mçi phÇn tö nh vËy gäi lµ mét phÇn tö cña m¶ng.
Nãi chung, m¶ng cã c¸c ®Æc ®iÓm sau:
- Mçi phÇn tö cña m¶ng biÓu diÔn mét gi¸ trÞ.
- Mçi phÇn tö cña m¶ng ®îc ®¸nh chØ sè cho phÐp truy cËp tíi phÇn tö
®ã.
- §Ó dïng kiÓu m¶ng ta cÇn x¸c ®Þnh râ:
+ Lo¹i m¶ng: kiÓu cña mçi phÇn tö cña m¶ng (float, int, double…)
+ Tªn m¶ng(hay tªn biÕn cã kiÓu m¶ng): Tïy ý ®Æt theo quy íc ®Æt tªn
biÕn.
+ Sè chiÒu vµ kÝch thíc mçi chiÒu.
b. Ph©n lo¹i m¶ng
Dùa vao sè chiÒu cña m¶ng ngêi ta chia ra:
- M¶ng mét chiÒu: dïng ®Ó lu d·y c¸c gi¸ trÞ cïng kiÓu. ChØ sè cña
m¶ng ®îc ®¸nh tõ 0. Nh vËy ph©n tö thø i trong m¶ng ®îc ®¸nh chØ sè lµ
i-1.
VD: Mét m¶ng cã tªn lµ a. Khi ®ã:
PhÇn tö thø nhÊt cña m¶ng lµ a[0].
PhÇn tö thø 2 cña m¶ng lµ a[1]….

Biªn so¹n: NguyÔn M¹nh Cêng Trang 4


6
§Ò c¬ng chi tiÕt Kü thuËt lËp tr×nh

M¶ng hai chiÒu: Dïng ®Ó lu tr÷ mét b¶ng c¸c gi¸ trÞ cïng kiÓu. C¸c cét
vµ dßng ®îc ®¸nh chØ sè tõ 0. Nh vËy, phÇn tö t¹i dßng i, cét j ®¸nh chØ sè lµ
[i-1][j-1].
VD: Víi m¶ng hai chiÒu a ta cã:
PhÇn tö t¹i dßng 1 cét 1: a[0][0].
PhÇn tö t¹i cét 1 dßng 2: a[0][1]. …
2. Khai b¸o m¶ng
a. M¶ng mét chiÒu
Có ph¸p:
<KiÓu m¶ng> <tªn m¶ng> <[Kichs thuíc]>;
Trong ®ã:
+ <KiÓu m¶ng>: cã thÓ lµ c¸c kiÓu chuÈn nh float, int, double, long…
hoÆc kiÓu tù ®Þnh nghÜa.
+ <Tªn m¶ng> : hay tªn biÕn m¶ng, tïy ý ®Æt theo quy íc ®Æt tªn biÕn.
+ <KÝch thíc>: dïng ®Ó xc¸ ®Þnh sè phÇn tö tèi ®a cña m¶ng.
VD: float a[10];
SÏ khai b¸o mét biÕn m¶ng c¸c gi¸ trÞ kiÓu thùc, sè phÇn tö tèi ®a lµ 10.
C¸c phÇn tö ®îc ®¸nh chØ sè a[0], a[1], …, a[9].
b. M¶ng hai chiÒu:
T¬ng tù nh m¶ng mét chiÒu ta cã:
<KiÓu m¶ng> <tªn m¶ng> <[Sè dßng] [sè cét]>;
Víi <[sè dßng] [sè cét]>: chØ ra kÝch thíc mçi chiÒu cña m¶ng.
VD: double b[3][2];
SÏ khai b¸o mét m¶ng 2 chiÒu cã 3 dßng, 2 cét víi c¸c ph©n tö kiÓu
double. C¸c phÇn tö ®îc ®¸nh chØ sè nh sau:
b[0][0] b[0][1]
b[1][0] b[1][1]
b[2][0] b[2][1]
3. Sö dông m¶ng
a. LÊy ®Þa chØ c¸c phÇn tö

Biªn so¹n: NguyÔn M¹nh Cêng Trang 4


7
§Ò c¬ng chi tiÕt Kü thuËt lËp tr×nh

Víi m¶ng mét chiÒu, ta vÉn sö dông phÐp lÊy ®Þa chØ th«ng thêng
VD: ®Ó lÊy ®Þa chØ phÇn tö a[i] ta viÕt: &a[i].
Víi m¶ng hai chiÒu: nãi chung kh«ng cho phÐp lÊy ®Þa chØ cña c¸c
phÇn tö m¶ng. Nh vËy, kh«ng chÊp nhËn c¸ch viÕt: & a[i][j]. Víi C++3.0 trë
lªn, ta vÉn cã thÓ sö dông phÐp lÊy ®Þa chØ c¸c phÇn tö m¶ng thùc hai chiÒu
víi c¸c file ch¬ng tr×nh cã phÇn më réng .CPP.
b. DuyÖt m¶ng
Víi m¶ng mét chiÒu cã n phÇn tö, ®Ó duyÖt qua c¸c phÇn tö cña m¶ng
ta cã thÓ sö dông 1 vßng lÆp for sau:
for(int i=0; i<n; i++)
{
Truy cËp tíi hÇn tö cã chØ sè i;
}
VD: NhËp d÷ liÖu cho mét m¶ng gåm 10 phÇn tö nguyªn.
int a[10];
for(int i=0; i<10; i++)
{
printf(“NhËp A[%d] : “,i);
scanf(“%d”, &a[i]);
}
Víi m¶ng 2 chiÒu cã n dßng, m cét, ta cã thÓ sö dông 2 vßng for lång
nhau:
for(int i=0; j<n; i++)
for(int j=0; j<m; j++)
{
Truy cËp tíi phÇn tö cã chØ sè [i][j];
}
VD: NhËp d÷ liÖu cho m¶ng thùc 2 chiÒu 5 dßng, 3 cét:
float a[5][3];
float tg;
for(int i=0; i<5; i++)
for(int j=0; j<3; j++)
{
printf(“NhËp a[%d][%d]: “,i, j);
scanf(“%f”, &tg); a[i][j] = tg;
}

Biªn so¹n: NguyÔn M¹nh Cêng Trang 4


8
§Ò c¬ng chi tiÕt Kü thuËt lËp tr×nh

Chó ý: V× c¸c file .h trong C kh«ng chÊp nhËn phÐp lÊy ®Þa chØ c¸c
phÇn tö m¶ng hai chiÒu nªn ta kh«ng thÓ viÕt trùc tiÕp:
scanf(“%f”, &a[i][j]);
Mµ cÇn sö dông mét biÕn trung gian tg cã cïng kiÓu ®Ó lµm trung gian
trong qu¸ tr×nh nhËp d÷ liÖu. Sau ®ã, ta g¸n a[i][j] b»ng gi¸ trÞ tg võa nhËp
nµy. Tuy nhiªn, tõ C 3.0 trë lªn, vÉn cho phÐp lÊy ®Þa chØ cña phÇn tö m¶ng
2 chiÒu nh thêng.
c. VÊn ®Ò t¹o d¸ng ma trËn
§Ó t¹o gi¸ng ma trËn, ta sö dông c©u lÖnh gotoxy(). C©u lÖnh nµy cã
t¸c dông ®a con trá mµn h×nh tíi c¸c täa ®é mµn h×nh ®· chØ ra trong c¸c
tham sè ®Ó nhËp hoÆc xuÊt c¸c phÇn tö cña m¶ng.
Có ph¸p: gotoxy(X, Y);
Víi X lµ täa ®é theo ph¬ng X (cét X) cña mµn h×nh, cã gi¸ trÞ tõ 1 tíi
80.
Y lµ täa ®é theo ph¬ng Y (dßng Y) cña mµn h×nh, cã gi¸ trÞ tõ 1 tíi 25.
X
1 80

25

Y
Nh vËy, ta cã thÓ sö dông c©u lÖnh gotoxy trong vßng lÆp nh sau
for (i=0; i<n; i++)
for(j = 0; j <m; j++)
{
gotoxy(X + j *n, Y + i*m);
cout<<a[i][j];
}
Trong ®ã : X, Y lµ to¹ ®é ®Ønh tr¸i, trªn cña ma trËn; n, m lµ c¸c b íc nh¶y
theo trôc x vµ trôc y. Th«ng thêng, ta chän n = 3 vµ m = 1.
4. C¸c vÝ dô minh häa
ViÕt ch¬ng tr×nh nhËp vµo mét m¶ng n sè nguyªn. S¾p xÕp m¶ng theo
chiÒu t¨ng dÇn vµ in kÕt qu¶ ra mµn h×nh.
#include <conio.h>
#include <stdio.h>

Biªn so¹n: NguyÔn M¹nh Cêng Trang 4


9
§Ò c¬ng chi tiÕt Kü thuËt lËp tr×nh

#include <iostream.h>
void main()
{
int a[100];
int tg, n, j;
printf(“NhËp n “);
scanf(“%d”, &n);
for(int i=0; i<n; i++)
{
printf(“NhËp a[%d]: “,i);
scanf(“%d”, &a[i]);
}
for(i=0; i<n-1; i++)
for(j=i+1; j<n; j++)
if (a[i]>a[j])
{
tg=a[i];
a[i] = a[j];
a[j] = tg;
}
printf(“m¶ng sau khi s¾p”);
for (i=0; i<n; i++)
printf(“%d “, a[i]);
getch();
}
VD2: NhËp mét ma trËn sè nguyªn gåm n dßng, m cét. In ma trËn võa
nhËp vµ phÇn tö lín nhÊt ra mµn h×nh.
#include <conio.h>
#include <stdio.h>
#include <iostream.h>
void main()
{
int a[100][100];
int n, m, Max, tg;
printf(“NhËp sè dßng “);
scanf(“%d”, &n);
printf(“NhËp sè cét “);
scanf(“%d”, &m);
for(int i=0; i<n; i++)
for(int j=0; j<m; j++)
{
printf(“NhËp a[%d][%d]: “, i, j);
scanf(“%d”, &tg);
a[i][j] = tg;
}

Biªn so¹n: NguyÔn M¹nh Cêng Trang 5


0
§Ò c¬ng chi tiÕt Kü thuËt lËp tr×nh

Max = a[0][0];
for(i=0; i<n; i++)
for(j=0; j<m; j++)
{
if(a[i][j]>Max)
Max = a[i][j];
printf(“%d\n”, a[i][j]);
}
printf(“PhÇn tö lín nhÊt %d“, Max);
getch();
}
II. TruyÒn tham sè m¶ng cho hµm
Trong C++, cho phÐp viÕt c¸c hµm cã ®èi sè lµ m¶ng nh s¸c ®èi sè
th«ng thêng. Tuy nhiªn, khi truyÒn tham sè lµ m¶ng, ta thêng truyÒn thªm c¶
c¸c biÕn lµ kÝch thíc cña m¶ng.
VD1: ViÕt ch¬ng tr×nh thùc hiÖn viÖc nhËp mét d·y sè nguyªn, tÝnh
tæng c¸c phÇn tö lÎ vµ in kÕt qu¶ ®ã lªn mµn h×nh.
#include “stdio.h”

long Tong(int a[100], int n)
{
long T=0;
for (int i=0; i<n; i++)
if(a[i]%2==0)
T+=a[i];
return T;
}
void main()
{
int b[100]; int n;
cout<<”NhËp n”;
cin>>n;
for(int i=0; i<n; i++)
{
cout<<”NhËp b[“<<i<<”]”;
cin>>b[i];
cout<<”Tæng c¸c phÇn tö lÎ “<<Tong(b, n);
getch();
}
VD2: ViÕt ch¬ng tr×nh nhËp mét ma trËn n hµng, m cét. T×m phÇn tö
lín nhÊt cña ma trËn vµ in ma trËn võa nhËp cïng phÇn tö lín nhÊt ra mµn
h×nh.

Biªn so¹n: NguyÔn M¹nh Cêng Trang 5


1
§Ò c¬ng chi tiÕt Kü thuËt lËp tr×nh

#include…

double Max(double a[100][100], n, m)
{
Max = a[0][0];
for(int i=0; i<n; i++)
for(int j=0; j<m; j++)
if (a[i][j]>Max)
Max=a[i][j];
return Max;
}
void main()
{
double b[100][100]; int m, n;
cout<<”NhËp n”; cin>>n;
cout<<”NhËp m”; cin>>m;
for(int i=0; i<n; i++)
for(int j=0; j<m; j++)
{
cout<<”b[“<<i<<”]= “;
cin>>b[i][j];
}
cout<<”Ma trËn võa nhËp lµ “;
for(int i=0; i<n; i++)
for(int j=0; j<m; j++)
cout<<”b[“<<i<<”]= “<<b[i][j];
cout<<”PhÇn tö lín nhÊt : “<<Max(b, n, m);
getch();
}
III. C¸c bµi to¸n c¬ b¶n vÒ m¶ng
1. Bµi to¸n trªn m¶ng mét chiÒu.
Bµi 1: ViÕt ch¬ng tr×nh nhËp vµo m¶ng n sè nguyªn vµ mét sè nguyªn
c. Cho biÕt cã bao nhiªu sè nguyªn c trong m¶ng vµ vÞ trÝ cña nã.
Bµi 2: ViÕt ch¬ng tr×nh nhËp vµo mét m¶ng n phÇn tö nguyªn. tÝnh
tæng c¸c phÇn tö lÎ, ch½n, chia hÕt cho 3 trong m¶ng.
2. Bµi to¸n trªn m¶ng hai chiÒu.
Bµi 1: ViÕt ch¬ng tr×nh nhËp vµo 2 ma trËn A, B cïng kÝch thíc m x n
c¸c sè nguyªn. TÝnh vµ in ma trËn C = A+B.
Bµi 2: Ma trËn B gäi lµ ma trËn chuyÓn vÞ cña A nÕu B[i][j] = A[j][i].
ViÕt ch¬ng tr×nh nhËp vµo mét ma trËn A cã n dßng, m cét c¸c phÇn tö thùc.
TÝnh vµ in ra ma trËn chuyÓn vÞ cña A.

Biªn so¹n: NguyÔn M¹nh Cêng Trang 5


2
§Ò c¬ng chi tiÕt Kü thuËt lËp tr×nh

IV. C¸c gi¶i thuËt t×m kiÕm, s¾p xÕp trªn m¶ng
Bµi to¸n t×m kiÕm c¬ b¶n ®îc ph¸t biÓu nh sau:
- Cho mét m¶ng a gåm n phÇn tö vµ mét kho¸ c. H·y cho biÕt kho¸
c cã xuÊt hiÖn trong a kh«ng? NÕu cã, h·y chØ ra mét vÞ trÝ cña c trong a.
Bµi to¸n s¾p xÕp ®îc ph¸t biÓu rÊt ®¬n gi¶n:
- Cho mét m¶ng a gåm n phÇn tö. H·y s¾p xÕp m¶ng a theo thø tù
t¨ng dÇn (hoÆc gi¶m dÇn).
Víi hai bµi to¸n ®Æc thï trªn m¶ng nh trªn, viÖc t×m ra c¸c ph¬ng ph¸p
kh¸c nhau ®Ó gi¶i quyÕt lµ rÊt quan träng. Sau ®©y sÏ lÇn lît tr×nh bµy mét
sè gi¶i thuËt c¬ b¶n ®Ó gi¶i quyÕt hai bµi to¸n trªn.
1. T×m kiÕm tuÇn tù
Mét ph¬ng ph¸p ®¬n gi¶n nhÊt ®Ó gi¶i quyÕt bµi to¸n t×m kiÕm lµ
t×m kiÕm tuÇn tù. Theo ph¬ng ph¸p nµy, ta chØ cÇn duyÖt tõ ®Çu ®Õn
cuèi m¶ng. NÕu gÆp kho¸ c, sÏ in ra vÞ trÝ cña c (tøc lµ chØ sè cña phÇn tö c
trong m¶ng). Ngîc l¹i, khi duyÖt hÕt m¶ng mµ kh«ng t×m thÊy c, tøc lµ c
kh«ng xuÊt hiÖn trong m¶ng. Nh vËy, ®é phøc t¹p cña thuËt gi¶i lµ O(n).
int d=0;
×or (i =0; i< n; i++)
if (a[i]==c)
{
cout<<” VÞ trÝ t×m ®îc c “<<i+1;
d++;
}
if (d==0)
cout<<”kho¸ c kh«ng xuÊt hiÖn trong m¶ng”;
§«i khi, cÇn ph¶i n¾m ®îc tÊt c¶ c¸c vÞ trÝ xuÊt hiÖn c, ta sö dông mét
m¶ng VT[] ®ång hµnh ®Ó lu c¸c vÞ trÝ ®· t×m ®îc c. Nh vËy, thay b»ng
viÖc in vÞ trÝ t×m ®îc ra mµn h×nh, ta lu vÞ trÝ ®ã trong m¶ng VT: VT[d]
= i+1;
2. T×m kiÕm nhÞ ph©n trªn m¶ng ®îc s¾p
Ph¬ng ph¸p nµy chØ ¸p dông trªn m¶ng ®· ®îc s¾p. ý tëng cã thÓ h×nh
dung nh sau:
Gi¶ sö ta cÇn t×m kiÕm c trong mét ®o¹n tõ vÞ trÝ L tíi vÞ trÝ R trªn
mét m¶ng a ®îc s¾p:

Biªn so¹n: NguyÔn M¹nh CêngL m¶ng a R Trang 5


3
§Ò c¬ng chi tiÕt Kü thuËt lËp tr×nh

Khi ®ã, ta chia m¶ng a lµm hai phÇn bëi ®iÓm chia M: M = (L+R)/ 2

L M R
Ta ¸p dông t×m kiÕm trªn 2 nöa cña a. Tuy nhiªn, do a ®· ®îc s¾p nªn
chØ cã thÓ s¶y ra 3 trêng hîp sau:
[1]. NÕu a[M] = c th× ta ®· t×m ®îc c trong m¶ng. VÞ trÝ cña c lµ M.
[2]. NÕu a[M] > c th× c thuéc vÒ nöa tr¸i cña m¶ng a. Khi ®ã ta ¸p dông
t×m kiÕm trªn nöa tr¸i, tøc lµ tõ vÞ trÝ L tíi M-1.
[3]. NÕu a[M] < c th× c thuéc vÒ nöa ph¶i cña m¶ng a. Khi ®ã ta ¸p
dông t×m kiÕm trªn nöa ph¶i, tøc lµ tõ vÞ trÝ M+1 tíi R.
ViÖc t×m kiÕm trªn c¸c nöa cña a còng ¸p dông ph¬ng ph¸p chia ®«i t-
¬ng tù nh trªn. Nh vËy, ngay tõ ®Çu ta ¸p dông t×m kiÕm nhÞ ph©n trªn toµn
m¶ng a (L=0; R=n-1). Hµm t×m kiÕm nhÞ ph©n lÆp sau ®©y tr¶ vÒ gi¸ trÞ
-1 nÕu kh«ng t×m thÊy c trong a; ngîc l¹i, nã tr¶ vÒ vÞ trÝ cña c trong a.
int TKNP_Lap(int a[100], int n, int c)
{
int L, R, M;
L =0;
R = n-1;
do
{
M = (L+R)/2;
if (a[M] > c) L = M+1;
if (a[M] < c) R = M-1;
}
while (L<R && a[M]!=c);
if (a[M] ==c)
return M;
else
return -1;
}
Râ rµng lµ trong trêng hîp nµy, viÖc ¸p dông ®Ö quy lµ rÊt phï hîp. Sau
®©y ta xem xÐt kh¶ n¨ng ¸p dông ®Ö quy víi thiÕt kÕ sau:
B1: Suy biÕn trong trêng hîp L > R hoÆc a[M] = c. Khi ®ã
- NÕu L > R th× kh«ng t×m ®îc c trong a.
- NÕu a[M] = c th× tr¶ vÒ M lµ vÞ trÝ cña c trong a.
Ngîc l¹i, trong trêng hîp L <= R vµ a[M] ! = c. Khi ®ã:
- NÕu a[M] > c th× gäi ®Ò quy trªn ®o¹n [L, M-1]

Biªn so¹n: NguyÔn M¹nh Cêng Trang 5


4
§Ò c¬ng chi tiÕt Kü thuËt lËp tr×nh

- NÕu a[M] < c th× gäi ®Ò quy trªn ®o¹n [M+1, R].
B2:
if (L > R) return -1;
else
if (a[M] ==c) return M;
else
if (a[M] > c) return TKQD(a, n, c, L, M-1);
else return TKDQ(a, n, c, M+1, R);
Sau ®©y lµ code:
int TKNP_DQ(int a[100], int n, int c, int L, int R)
{
int M=(L+R)/2;
if (L>R) return -1;
else
if (a[M]==c) return M;
else
if (a[M] > c)
return TKNP_DQ(a, n, c, M+1, R);
else
return TKNP_DQ(a, n, c, L, M-1);
}
ThuËt to¸n t×m kiÕm ®Ö quy trªn m¶ng ®îc s¾p ®îc ®¸nh gi¸ t¬ng ®èi
tèt. §é phøc t¹p trong trêng hîp tåi nhÊt lµ O(lg (n)). Ph¬ng ph¸p nµy kh«ng
bao giê dïng nhiÒu h¬n lg(n) + 1 phÐp so s¸nh. Mét ph¬ng ph¸p t×m kiÕm
hiÖu qu¶ h¬n lµ t×m kiÕm néi suy trªn c©y (Ýt h¬n lg(lg(n)) +1 phÐp so
s¸nh) kh«ng ®îc ®Ò cËp trong bµi gi¶ng nµy.
3. S¾p xÕp næi bät
Ph¬ng ph¸p s¾p xÕp c¬ b¶n nhÊt lµ ph¬ng ph¸p næi bät quen thuéc.
Gi¶i thuËt ®ùoc tr×nh bµy nh sau:
for (i=0; i < n-1; i++)
for (j=i+1; j<n; j++)
If (a[i] > a[j])
//®æi chç a[i] cho a[j];
KÕt thóc hai vßng lÆp trªn, m¶ng ®· ®îc s¾p (t¨ng). ta cã thÓ h×nh
dung qu¸ tr×nh s¾p xÕp qua vÝ dô sau
B¾t ®Çu s¾p i = 0 3 5 2 7 4 8
HÕt 1 vßng lÆp j; i = 1; 2 5 3 7 4 8
HÕt mét vßng j; i=2; 2 3 5 7 4 8
HÕt mét vßng j; i=3; 2 3 4 7 5 8
HÕt mét vßng j; i=4; 2 3 4 5 7 8
Trong trêng hîp trung b×nh vµ trêng hîp tåi nhÊt, ph¬ng ph¸p nµy cÇn
n /2 lÇn so s¸nh vµ n2/ 2 lÇn ®æi chç.
2

Biªn so¹n: NguyÔn M¹nh Cêng Trang 5


5
§Ò c¬ng chi tiÕt Kü thuËt lËp tr×nh

4. S¾p xÕp chän


Ph¬ng ph¸p s¾p xÕp c¬ b¶n thø 2 lµ ph¬ng ph¸p chän. ý tëng cña ph¬ng
ph¸p nh sau:
- NÕu a ®îc s¾p t¨ng th× c¸c phÇn tö ®øng sau lu«n lín h¬n c¸c phÇn tö ®øng
tríc.
- X©y dùng mét m¶ng a míi b»ng c¸ch: Chän ra c¸c phÇn tö nhá nhÊt
trong a vµ ®Æt chóng theo thø tù tõ tr¸i qua ph¶i. C¸c phÇn tö ®· ®îc chän
sÏ kh«ng ®îc xÐt trong c¸c lÇn chän tiÕp theo.
B¶ng sau cho thÊy qu¸ tr×nh s¾p xÕp m¶ng a gåm 6 phÇn tö. Víi mçi b-
íc s¾p, ta tÝnh Min cña c¸c phÇn tö cßn l¹i (phÇn tö ®îc b«i ®en).
3 5 2 7 4 8 Min = 2
2 5 3 7 4 8 Min = 3
2 3 5 7 4 8 Min = 4
2 3 4 7 5 8 Min = 5
2 3 4 5 7 8 Min = 7
2 3 4 5 7 8 Min = 8
Sau ®©y lµ hµm s¾p xÕp chän
void SapChon(int a[100], int n)
{
for (int i=0; i<n-1; i++)
{
int min = i;
for (int j = i+1; j<n; j++)
if (a[j] < a[min]) min = j;
int tg = a[i];
a[i] = a[min];
a[min]=tg;
}
}
S¾p xÕp b»ng ph¬ng ph¸p chän cÇn n2/ 2 lÇn so s¸nh vµ n lÇn ho¸n vÞ.
5. S¾p xÕp chÌn
Ph¬ng ph¸p nµy xuÊt ph¸t tõ ý tëng:
- NÕu m¶ng a cã duy nhÊt 1 phÇn tö th× nã ®· ®îc s¾p.
- NÕu bæ sung mét phÇn tö n÷a vµo a th× phÇn tö bæ sung cÇn ®îc ®Æt
ë vÞ trÝ sao cho kh«ng thay ®æi tÝnh ®îc s¾p cña c¸c phÇn tö ®· cã.
Nh vËy, cã thÓ h×nh dung ph¬ng ph¸p nµy b»ng lµ viÖc x©y dùng mét
m¶ng míi b»ng c¸ch lÊy lÇn lît c¸c phÇn tö cña a vµ chÌn vµo mét m¶ng a míi
sao cho kh«ng ph¸ vì tÝnh ®îc s¾p cña c¸c phÇn tö ®· s¾p.

Biªn so¹n: NguyÔn M¹nh Cêng Trang 5


6
§Ò c¬ng chi tiÕt Kü thuËt lËp tr×nh

3 5 2 7 4 8
3 PhÇn tö ®Çu
tiªn
3 5 ChÌn 5 vµo
2 3 5 ChÌn 2 vµo
2 3 5 7 ChÌn 7 vµo
2 3 4 5 7 ChÌn 4 vµo
2 3 4 5 7 8 ChÌn 8 vµo
Ta xem xÐt qu¸ tr×nh chÌn mét phÇn tö vµo m¶ng míi (gi¶ sö chÌn 2
vµo). Khi ®ã, c¸c phÇn tö 3 vµ 5 ®· ®îc chÌn vµ qu¸ tr×nh diÔn ra nh sau:
2 Tg

B1352748B235748B335748B42357
48

B1: LÊy phÇn tö 2 (a[i] ; i = 2) ®Ó ra mét biÕn trung gian Tg.


B2: j = i-1 = 1; a[j] > Tg; dÞch chuyÓn a[j] sang ph¶i 1 vÞ trÝ.
B3: j = j -1 = 0; a[j] > Tg; dÞch chuyÓn a[j] sang ph¶i 1 vÞ trÝ.
B4: j = j -1 = -1; Lóc nµy j < 0 nªn chÌn Tg vµo a[j+1].
Nh vËy qu¸ tr×nh dÞch chuyÓn sang ph¶i sÏ kÕt thóc nÕu a[j] < = Tg
hoÆc J < 0. Khi ®ã chØ cÇn chÌn Tg vµo vÞ trÝ a[j+1].
void SapChen(int a[100], int n)
{
for (int i=1; i< n; i++)
{
int Tg = a[i]; int j = i-1;
while (a[j] > Tg && j >=0)
{ a[j+1] = a[j];
j--;
}
a[j+1]=Tg;
}
}
S¾p xÕp b»ng ph¬ng ph¸p chÌn trong trêng hîp trung b×nh cÇn n2/ 4 lÇn
so s¸nh vµ n2/ 8 lÇn ho¸n vÞ. Trêng hîp tåi nhÊt gÊp ®«i sè lÇn nµy.

Biªn so¹n: NguyÔn M¹nh Cêng Trang 5


7
§Ò c¬ng chi tiÕt Kü thuËt lËp tr×nh

6. Ph¬ng ph¸p s¾p xÕp trén


XuÊt ph¸t tõ bµi to¸n trén hai m¶ng ®îc s¾p thµnh mét m¶ng còng ®îc
s¾p, h×nh thµnh lªn ph¬ng ph¸p s¾p xÕp trÖn.
XÐt bµi to¸n trén: gi¶ sö cã hai m¶ng a (n phÇn tö) vµ b (m phÇn tö) ®·
®îc s¾p, ta cÇn trén l¹i ®Ó ®îc mét m¶ng c còng ®îc s¾p:
void Tron(int a[100], int b[100], int c[100],int n, int m)
{
int max;
if (a[n-1]>b[m-1])
max = a[n-1]+1;
else
max = b[m-1]+1;
a[n]=b[m]=max;

int i,j; i=j=0;


for (int k=0; k<m+n-1; k++)
if (a[i]<b[j])
{ c[k]=a[i];
i++;
}
else
{ c[k]=b[j];
j++;
}
}
B©y giê trë l¹i bµi to¸n s¾p xÕp trén. Gi¶ sö cã m¶ng c cha ®îc s¾p nh
h×nh sau:

NÕu ta chia m¶ng c lµm hai phÇn vµ s¾p xÕp trªn hai phÇn ®ã th× ta
thu ®îc m¶ng c cã 2 nöa c1 vµ c2 ®· ®îc s¾p d¹ng:

Cuèi cïng, dïng gi¶i thuËt trén ë trªn ®Ó trén c1 vµ c2 ®Ó thu ®îc mét
m¶ng c ®· ®îc s¾p:

ý tëng trªn cho ta mét thuËt to¸n s¾p xÕp rÊt tèt nÕu nh trªn 2 m¶ng c1
vµ c2 ta l¹i ¸p dông chia thµnh c¸c m¶ng con ®Ó s¾p xÕp vµ trén chóng vµ

Biªn so¹n: NguyÔn M¹nh Cêng Trang 5


8
§Ò c¬ng chi tiÕt Kü thuËt lËp tr×nh

cø nh vËy m·i cho tíi khi c¸c m¶ng con chØ cßn 1 phÇn tö. ¸p dông ®Ö quy
vµo c¸ch chia, s¾p xÕp, trén nµy ta thu ®îc ph¬ng ph¸p s¾p xÕp trén æn
®Þnh . kh«ng ¶nh hëng bëi thø tù ban ®Çu cña d÷ liÖu. Ph¬ng ph¸p nµy nãi
chung cÇn n.lg(n) lÇn so s¸nh ®Ó s¾p xÕp mét tËp d÷ liÖu n phÇn tö.
7. Ph¬ng ¸n s¾p xÕp QuickSort
ý tëng cña QuickSort còng lµ chia m¶ng a cÇn s¾p thµnh 2 phÇn nh ph-
¬ng ph¸p trén, tuy nhiªn ®iÓm chia ®îc tÝnh to¸n sao cho phï hîp.
®Ó x¸c ®Þnh ®îc ®iÓm chia, ta sö dông hµm Partition(L, R). Hµm nµy
sÏ sö dông ®Ó tr¶ vÒ ®iÓm chia lµm c¬ së ®Ó chia m¶ng a. NÕu ®iÓm chia
lµ i th×:
i = Partition(L, R);
Khi cã ®iÓm chia råi, ta sÏ chia a thµnh 2 nöa theo ®iÓm chia vµ ¸p
dông viÖc s¾p trªn 2 nöa, trén l¹i ®Ó thu ®îc mét m¶ng ®· ®îc s¾p. Tuy
nhiªn ®Ó s¾p trªn 2 nöa cña a, ta còng ¸p dông ph¬ng ph¸p t¬ng tù. Nh vËy,
gi¶i thuËt cã thÓ nh sau:
void QuickSort(int L, int R)
{
int i= Partition(L, R);
QuickSort(L, i-1);
QuickSort(i+1, R);
}
VÊn ®Ò cßn l¹i lµ hµm Partition x¸c ®Þnh ®iÓm chia nh thÕ nµo. Ta
cã thÓ h×nh dung ®iÒu nµy nh sau:
B1: LÊy phÇn tö cuèi cïng cña m¶ng lµm phÇn tö cÇm canh (tøc lµ a[R]).
B2: Cho i ch¹y tõ tr¸i sang cho tíi khi gÆp phÇn tö lín h¬n phÇn tö cÇm canh.
Cho j ch¹y tõ bªn ph¶i vÒ cho tíi khi gÆp phÇn tö nhë h¬n phÇn tö cÇm
canh.
B3: §¶o chç hai phÇn tö a[i] cho a[j]. Cho i, j tiÕp tôc ch¹y nh trong B2. TiÕp
tôc ®æi chç nh vËy cho tíi khi i vµ j giao nhau (tøc lµ i>=j).
B4: §æi chç a[i] cho a[j] lÇn cuèi. Khi ®ã, dÔ thÊy c¸c phÇn tö bªn tr¸i cña
a[i] ®Òu nhë h¬n a[i] vµ c¸c phÇn tö bªn ph¶i th× lín h¬n nã. §iÓm i
chÝnh lµ ®iÓm chia t×m ®îc. return i;

Biªn so¹n: NguyÔn M¹nh Cêng Trang 5


9
§Ò c¬ng chi tiÕt Kü thuËt lËp tr×nh

ThuËt to¸n nµy, thªm mét chót c¶i tiÕn sÏ lµ thuËt to¸n s¾p xÕp rÊt tèt
(trong trêng hîp d÷ liÖu bÊt kú) víi trung b×nh 2n.lg(n) phÐp so s¸nh.
ThËt vËy, gi¶i thuËt Partition cÇn duyÖt qua n phÇn tö ®Ó x¸c ®Þnh
®iÓm chia. Khi cã ®iÓm chia råi ta cÇn s¾p xÕp c¸c phÇn tö trªn 2 nöa cña
m¶ng. (mçi nöa tÝnh trung b×nh cã n/2 phÇn tö. Nh vËy tæng phÝ tæn lµ:
Cn = 2 Cn/2 + n.
Gi¶i c«ng thøc truy håi nµy cho ta ®îc ®é phøc t¹p: Cn = 2n.ln(n)

Biªn so¹n: NguyÔn M¹nh Cêng Trang 6


0
§Ò c¬ng chi tiÕt Kü thuËt lËp tr×nh

Ch¬ng V: Kü thuËt lËp tr×nh víi con trá

1. Khai b¸o vµ sö dông con trá


a. §Þa chØ cña biÕn:
Khi khai b¸o mét biÕn, m¸y tÝnh sÏ cÊp ph¸t mét vïng nhí ®Ó chøa gi¸
trÞ cña biÕn. KÝch thíc cña vïng nhí ®îc x¸c ®Þnh tïy theo kiÓu biÕn. Vïng
nhí ph¶i ®îc ®Æt tªn, ta gäi lµ tªn biÕn.
§Ó qu¶n lý biÕn nµy, vïng nhí ®îc ®¸nh ®Þa chØ, gäi lµ ®Þa chØ cña
biÕn. §Þa chØ cña biÕn lµ ®Þa chØ cña byte ®Çu tiªn trong vïng nhí cña
biÕn.
§Ó lÊy ®Þa chØ cña biÕn, ta sö dông phÐp to¸n & theo có ph¸p:
<&> <tªn biÕn>;
b. Con trá:
§«i khi, ta muèn lÊy ®Þa chØ cña c¸c biÕn. V× vËy cÇn cã c¸c biÕn
®Ó chøa c¸c ®Þa chØ nµy gäi lµ c¸c biÕn con trá.
Nh vËy, con trá lµ biÕn dïng ®Ó chøa ®Þa chØ.
C¸c biÕn cã nhiÒu kiÓu kh¸c nhau, v× vËy, ®Ó chøa ®Þa chØ cña
chóng, con trá còng cã nhiÒu kiÓu. KiÓu cña con trá trïng víi kiÓu biÕn mµ
nã sÏ chøa ®Þa chØ. VD: con trá kiÓu float dïng ®Ó chøa ®Þa chØ c¸c biÕn
kiÓu float, con trá kiÓu int dïng ®Ó chøa ®Þa chØ c¸c biÕn kiÓu int…
Mét con trá còng cÇn ph¶i ®îc khai b¸o tríc khi sö dông. Có ph¸p khai
b¸o nh sau:
<KiÓu con trá> <*> <Tªn con trá>;.
VD: c©u lÖnh int a, b, *p, *q; sÏ khai b¸o hai biÕn a, b kiÓu nguyªn vµ
hai con trá p, q kiÓu nguyªn. Hai con trá p, q cã cïng kiÓu víi hai biÕn a, b nªn
cã thÓ dïng ®Ó chøa ®Þa chØ cña hai biÕn a, b.
Khi cã con trá, ta cã thÓ sö dông c¸c phÐp lÊy ®Þa chØ th«ng thêng ®Ó
g¸n ®Þa chØ vµo con trá.
VD: c¸c c©u lÖnh p = & a; q = &b; sÏ lÊy ®Þa chØ cña hai biÕn a, b
®Ó g¸n vµo con trá p vµ q. Khi ®ã, p vµ q chøa ®Þa chØ cña hai biÕn a, b vµ
ta nãi p trá tíi a, q trá tíi b.
c. Sö dông con trá
Ta sö dông biÕn con trá nh mét biÕn th«ng thêng th«ng qua tªn biÕn.

Biªn so¹n: NguyÔn M¹nh Cêng Trang 6


1
§Ò c¬ng chi tiÕt Kü thuËt lËp tr×nh

Khi sö dông tªn con trá trong biÓu thøc th× ®Þa chØ cña vïng nhí mµ nã
trá tíi sÏ ®îc sö dông trong biÓu thøc chø kh«ng ph¶i lµ gi¸ trÞ cña vïng nhí.
Khi con trá p trá tíi biÕn a th× ®Ó sö dông gi¸ trÞ cña biÕn a nµy th«ng
qua con trá p ta viÕt *p. Nh vËy 3 c¸ch viÕt sau lµ t¬ng ®¬ng:
b = 2*a + 3;
b = 2*(*p) + 3;
*q = 2*(*p) + 3;// víi q lµ con trá trá tíi biÕn b.
VD:
void main()
{
int a, b, x, *p, *q;
cout<<”NhËp a”;
cin>>a;
p = &a;
q = &b;
b = 2*a+3;
cout<<b;
*q = 2*a +3;
cout<<b;
*q = 2*(*p) +3.
cout<<b;
getch();
}
NhËn xÐt: Khi lÊy ®îc ®Þa chØ cña biÕn chøa vµo con trá, ta cã thÓ
sö dông con trá ®Ó thay ®æi gi¸ trÞ cña biÕn mµ nã trá tíi.
§Æc biÖt, ta cã thÓ g¸n con trá p cho mét con trá q kh¸c cïng kiÓu. Khi
®ã, hai con trá p, q sÏ trá tíi cïng mét vïng nhí cña cïng mét biÕn.
VD:
void main()
{
int a, *p, *q;
a = 2;
p=&a;
cout<<*p;
q = p;
cout<<*q;
getch();
}

Biªn so¹n: NguyÔn M¹nh Cêng Trang 6


2
§Ò c¬ng chi tiÕt Kü thuËt lËp tr×nh

2. Con trá vµ hµm


C¸c hµm ®Þnh nghÜa theo c¸c c¸ch ®· häc chØ tr¶ vÒ mét gi¸ trÞ duy
nhÊt th«ng qua tªn hµm. VËy khi muèn hµm tr¶ vÒ nhiÒu gi¸ trÞ cung lóc th×
lµm thÕ nµo?
§Ó tr¶ lêi c©u hái nµy, trong c¸c hµm cã ®èi sè, ta chia ®èi sè lµm hai
lo¹i: ®èi vµo vµ ®èi ra.
- §èi vµo: Lµ c¸c ®èi sè sÏ truyÒn c¸c gi¸ trÞ vµo trong hµm ®Ó sö dông
trong th©n hµm.
- §èi ra: lµ c¸c ®èi nhËn gi¸ trÞ mµ hµm sÏ tr¶ vÒ. Nh vËy, ngoµi kh¶
n¨ng tr¶ vÒ gi¸ trÞ th«ng qua tªn hµm, hµm cßn cã thÓ tr¶ vÒ c¸c gi¸ trÞ
kh¸c th«ng qua c¸c ®èi ra.
VD: Hµm gi¶i ph¬ng tr×nh bËc hai: a, b, c lµ c¸c ®èi vµo. Hai nghiÖm
x1, x2 (nÕu cã) cã thÓ lµ c¸c ®èi ra.
C¸c ®èi ra b¾t buéc ph¶i lµ con trá.
V× c¸c ®èi ra lµ c¸c con trá nªn khi truyÒn tham sè cho c¸c ®èi ra, c¸c
tham sè ®ã ph¶i lµ c¸c ®Þa chØ.
VD: ViÕt ch¬ng tr×nh gi¶i ph¬ng tr×nh bËc hai. NÕu ph¬ng tr×nh cã
nghiÖm x1, x2 h·y tÝnh gi¸ trÞ biÓu thøc P = 2*x1 + x2.
int PTBH(int a, int b, int c, int *x1, int *x2)
{
float dt;
if (a==0)
return 0;
dt = b*b-4*a*c;
if(dt<0)
return –1;
*x1 = (-b+sqrt(dt))/(2*a);
*x2 = (-b-sqrt(dt))/(2*a);
return 1;
}
void main()
{
float a, b, c, x1, x2;
printf(“NhËp a b c”);
scanf(“%f%f%f”, &a, &b, &c);
float s = PTBH(a, b, c, &x1, &x2);
if (s==0)
cout<<”Ph¬ng tr×nh kh«ng ph¶i bËc hai”;

Biªn so¹n: NguyÔn M¹nh Cêng Trang 6


3
§Ò c¬ng chi tiÕt Kü thuËt lËp tr×nh

else
if (s==-1)
cout<<”Ph¬ng tr×nh v« nghiÖm”;
else
{
cout<<” Ph¬ng tr×nh cã hai nghiÖm”<<x1<<” vµ
“<<x2;
float P = 2* x1+x2;
cout<<”Gi¸ trÞ cña P “<<P;
}
getch();
}
NhËn xÐt:
- C¸c gi¸ trÞ tr¶ vÒ cña hµm t¹i x1 vµ x2 cã thÓ ®îc sö dông tiÕp trong
ch¬ng tr×nh.
- Ch¬ng tr×nh sö dông c¶ c¸c gi¸ trÞ tr¶ vÒ cña c¸c ®èi ra vµ cña tªn hµm.
3. Con trá vµ m¶ng
a. Con trá vµ m¶ng mét chiÒu
Nh ®· biÕt, c¸c phÇn tö cña m¶ng cã thÓ ®îc x¸c ®Þnh th«ng qua chØ
sè. VÝ dô phÇn tö thø nhÊt lµ a[0], phÇn tö thø 2 lµ a[1]…
Ta cßn cã c¸ch thø 2 ®Ó x¸c ®Þnh c¸c phÇn tö cña m¶ng, kh«ng ph¶i
th«ng qua c¸c chØ sè mµ th«ng qua con trá.
Khi khai b¸o mét m¶ng a gåm 10 phÇn tö, m¸y tÝnh sÏ cÊp ph¸t 10 « nhí
liªn tiÕp nhau.
§iÒu ®Æc biÖt lµ: ®Þa chØ cña phÇn tö ®Çu tiªn cña m¶ng ®îc chøa
trong tªn m¶ng. Nh vËy a t¬ng ®¬ng víi &a[0] vµ tªn m¶ng t¬ng ®¬ng víi mét
con trá chøa ®Þa chØ cña phÇn tö ®Çu tiªn cña m¶ng.
Ta cã:
a chøa ®Þa chØ &a[0].
a+i chøa ®Þa chØ &a[i].
Nh vËy, nÕu p lµ con trá cïng kiÓu ta cã thÓ g¸n: p = a; vµ khi ®ã:
a[i] = p[i] = *(a+i) = *(p+i);
Thay b»ng truy cËp tíi phÇn tö thø i+1 cña m¶ng qua a[i] ta cã thÓ viÕt
p[i] hoÆc *(a+i) hoÆc *(p+i).

Biªn so¹n: NguyÔn M¹nh Cêng Trang 6


4
§Ò c¬ng chi tiÕt Kü thuËt lËp tr×nh

VD1:
float a[4];
a[0] = 0;
a[1] = 1;
a[2] = 2;
a[3] = 3;
cout<<a[3];
cout<<*(a+3);
float *p;
p = a;
cout<<p[3];
cout<<*(p+3);
getch();
}
VD2: NhËp vµo mét m¶ng 4 sè nguyªn vµ tÝnh tæng cña c¸c sè ®ã.
C¸ch 1:
void main()
{
float a[4];
for (int i=0; i<4; i++)
{
cout<<”NhËp a[“<<i<<”]”;
cin>>a[i];
}
float T=0;
for(i=0; i<4; i++)
T+=*(a+i);
cout<<”Tæng b»ng”<<T;
getch();
}
C¸ch 2:
void main()
{
float a[4], *p;
for (int i=0; i<4; i++)
{
cout<<”NhËp a[“<<i<<”]”;
cin>>a[i];
}
p=a; float T=0;
for(i=0; i<4; i++)
T+=p[i];
cout<<”Tæng b»ng”<<T;

Biªn so¹n: NguyÔn M¹nh Cêng Trang 6


5
§Ò c¬ng chi tiÕt Kü thuËt lËp tr×nh

getch();
}
C¸ch 3:
void main()
{
float a[4], *p;
for (int i=0; i<4; i++)
{
cout<<”NhËp a[“<<i<<”]”;
cin>>a[i];
}
p=a;
float T=0;
for(i=0; i<4; i++)
T+=*(p+i);
cout<<”Tæng b»ng”<<T;
getch();
}
Do tªn m¶ng còng t¬ng ®¬ng víi mét con trá nªn khi p lµ mét con trá
kiÓu nguyªn, ta cã thÓ khai b¸o int *p; nhng còng cã thÓ khai b¸o nh mét m¶ng
h×nh thøc: int p[]. MÆt kh¸c, thËm chÝ ta cã thÓ sö dông con trá p nh mét
m¶ng. Hµm Sum2() sau sÏ sö dông con trá a nh mét m¶ng.
VD: ViÕt hµm tÝnh tæng c¸c phÇn tö cña m¶ng 4 phÇn tö.
double Sum1(double a[])
{
double T=0;
for(int i=0; i<4; i++)
T+=a[i];
return T;
}
double Sum2(double *a)
{double T=0;
for(int i=0; i<4; i++)
T+=a[i];
return T;
}
void main()
{
double *b;
b[0] = 1; b[1] = 3;
b[2] = 2; b[3] = 5;
cout<<”Tæng thø nhÊt”<<Sum1(b);

Biªn so¹n: NguyÔn M¹nh Cêng Trang 6


6
§Ò c¬ng chi tiÕt Kü thuËt lËp tr×nh

cout<<”Tæng thø hai”<<Sum2(b);


getch();
}
b. Con trá vµ m¶ng hai chiÒu
Khi khai b¸o m¶ng hai chiÒu A[2][3], m¸y tÝnh sÏ cÊp ph¸t vïng nhí nh
sau:
A[0][0] A[0][1] A[0][2] A[1][0] A[1][1] A[1][2]

Nh vËy, vÒ c¸ch tæ chøc bé nhí, m¶ng hai chiÒu thùc chÊt lµ m¶ng mét
chiÒu. Ta gäi lµ m¶ng cña m¶ng.
Tuy nhiªn, ta kh«ng thÓ g¸n trùc tiÕp tªn m¶ng hai chiÒu A cho mét con
trá p cïng kiÓu mµ ph¶i sö dông to¸n tö Ðp kiÓu.
Víi c¸ch hiÓu trªn, nÕu ta g¸n con trá thùc p = (float*)A th×:
p trá tíi A[0][0].
p+1 trá tíi A[0][1].
p+2 trá tíi A[0][2].
p+3 trá tíi A[1][0].
p+4 trá tíi A[1][1].
p+5 trá tíi A[1][2].
Nh vËy ta cã thÓ sö dông con trá trong qu¸ tr×nh truy cËp m¶ng hai
chiÒu. Víi m¶ng hai chiÒu, ®Ó nhËp c¸c phÇn tö m¶ng, ta chØ cÇn mét vßng
lÆp.
VD: NhËp d÷ liÖu cho m¶ng hai chiÒu th«ng qua con trá:
void main()
{
float a[2][3], *p;
p=(float*) a;
for(int i=0; i<6; i++)
scanf(“%f”, p+i);
}
HoÆc cã thÓ dïng ngay a nh lµ mét con trá víi to¸n tö Ðp kiÓu:

void main()
{
float a[2][3];

Biªn so¹n: NguyÔn M¹nh Cêng Trang 6


7
§Ò c¬ng chi tiÕt Kü thuËt lËp tr×nh

for(int i=0; i<6; i++)


scanf(“%f”, (float*)(a + i));
}

4. M¶ng con trá


M¶ng con trá còng t¬ng tù nh m¶ng th«ng thêng, chØ kh¸c ë chç, mçi
phÇn tö m¶ng lµ mét con trá. Nh vËy ta chØ sö dông m¶ng con trá ®Ó chøa
c¸c dÞa chØ chø kh«ng chøa c¸c gi¸ trÞ nh m¶ng th«ng thêng.
Khai b¸o: int a[100]: lµ khai b¸o biÕn m¶ng th«ng thêng a cã tèi ®a 100
phÇn tö. M¶ng a cã thÓ dïng ®Ó chøa mét d·y sè cã tèi ®a 100 phÇn tö.
Khai b¸o: int * a[100]: lµ khai b¸o biÕn m¶ng con trá a. M¶ng a cã tèi ®a
100 phÇn tö, mçi phÇn tö lµ mét con trá. M¶ng a cã thÓ dïng ®Ó chøa 100
®Þa chØ kh¸c nhau.
Có ph¸p khai b¸o: <KiÓu con trá> <*> <tªn biÕn m¶ng> <[sè phÇn tö tèi
®a]>;
M¶ng con trá kh«ng dïng ®éc lËp mµ nã thêng ®îc dïng kÌm víi c¸c
biÕn kh¸c (thêng lµ m¶ng). §Æc biÖt, m¶ng con trá thÝch hîp trong bµi to¸n
vÒ xö lý ma trËn tha.
XÐt bµi to¸n cã ma trËn tha: Cã n xe t¶i chuyªn chë vËt liÖu. Sè liÖu
tõng chuyÕn cña tõng xe trong ngµy ®îc cho trong b¶ng sau (VD n=4, ®¬n vÞ
TÊn)
Xe 1 Xe 2 Xe 3 Xe 4
2 3 4 2
3 4 3 3
4 5 4
3
4
3
5
Theo b¶ng sè liÖu, xe 1 chë ®îc 3 chuyÕn/ ngµy víi tæng céng 9 tÊn, xe
2 chë ®îc 2 chuyÕn víi tæng céng 7 tÊn…
VÊn ®Ò ®Æt ra lµ sö dông kiÓu d÷ liÖu nµo ®Ó lu tr÷ b¶ng sè liÖu
nµy. Ta nghÜ ngay ®Õn kiÓu m¶ng. Nh vËy m¶ng sè liÖu sÏ nh sau:

2 3 4 2

Biªn so¹n: NguyÔn M¹nh Cêng Trang 6


8
§Ò c¬ng chi tiÕt Kü thuËt lËp tr×nh

3 4 3 3
4 5 4
3
4
3
5
Ma trËn nµy l·ng phÝ rÊt nhiÒu « nhí (v× kh«ng dïng ®Õn) cã thÓ xem
nh lµ mét ma trËn tha.
§Ó kh¾c phôc ®îc tÝnh tr¹ng l·ng phÝ bé nhí, ta chuyÓn sang sö dông
m¶ng 1 chiÒu, nh vËy, m¶ng sè liÖu sÏ lµ:
2 3 4 3 4 4 3 5 2 3 4 3 4 3 5
Nh vËy sÏ tr¸nh ®îc t×nh tr¹ng l·ng phÝ bé nhí. Tuy nhiªn, mét vÊn ®Ò
kh¸c n¶y sinh lµ lµm thÕ nµo ®Ó cã ®îc sè liÖu cña xe i (i=1..4) bÊt kú.
Râ rµng ta cÇn dïng ®Õn mét m¶ng con trá ®Ó lu ®Þa chØ cña phÇn tö
®Çu tiªn trong d·y c¸c sè liÖu cña tõng xe, nh vËy th×:
2 3 4 3 4 4 3 5 2 3 4 3 4 3 5

M¶ng con trá p[]

Dùa vµo m¶ng con trá nµy ta cã thÓ lÊy ®îc th«ng tin cña tõng xe. Sau
®©y lµ code cña ch¬ng tr×nh.
#include "conio.h"
#include "iostream.h"
#include "stdio.h"
void main()
{
clrscr();
int a[100], n;
int *p[50], *q;
cout<<"Nhap n"; cin>>n;
//nhap thong tin cho n xe, ket thuc bang so 0.
p[0] =q = a;// cho con tro q vaf p[0] tro toi a[0]
for (int i=0; i<n; i++)
{
cout<<"Nhap so lieu cho xe "<<i+1<<endl;
cin>>*q;

while(*q!=0)

Biªn so¹n: NguyÔn M¹nh Cêng Trang 6


9
§Ò c¬ng chi tiÕt Kü thuËt lËp tr×nh

{
q++;
cin>>*q;
}
p[i+1]=q;
}
//xuat so lieu cua xe bay ky ra man hinh
int stt;
cout<<" can xem so lieu cua xe nao "; cin>>stt;//nhap stt thuoc [0..n-1]
for (q=p[stt-1]; q<p[stt]; q++)
cout<<*(q)<<" ";
getch();
}
5. Con trá hµm
Con trá hµm dïng ®Ó trá tíi c¸c hµm (hay chøa ®Þa chØ cña c¸c hµm).
Tuú theo d¹ng thøc cña c¸c hµm mµ ta khai b¸o con trá hµm t¬ng øng.
Hµm: <KiÓu tr¶ vÒ> <Tªn hµm> (<Danh s¸ch c¸c ®èi>);
Con trá hµm t¬ng øng: <KiÓu con trá> <(* <tªn con trá>)> <(danh s¸ch
c¸c kiÓu ®èi)>;
Trong ®ã:
<KiÓu con trá> : Ph¶i trïng víi kiÓu tr¶ vÒ cña hµm mµ nã sÏ trá tíi.
<tªn con trá>: lµ tuú ý ®Æt.
<Danh s¸ch c¸c kiÓu ®èi>: ph¶i t¬ng øng cíi c¸c kiÓu ®èi cña hµm mµ
nã sÏ trá tíi.
VD:
Hµm Con trá hµm t¬ng øng
int GT(int n); int (*p) (int)
void Check(double x, double y); void (*q) (double, double)
Khi khai b¸o con trá hµm song, ta cã thÓ cho nã trá vµo hµm t¬ng øng
b»ng c¸ch g¸n:
<tªn con trá> = <tªn hµm>;
VD: p = GT; hoÆc q = Check;
Tõ ®©y ta cã thÓ sö dông tªn con trá thay cho tªn hµm.
Trong trêng hîp khi gäi hµm, tham sè cña hµm l¹i lµ mét hµm kh¸c th×
®èi sè t¬ng øng ph¶i lµ con trá hµm.

Biªn so¹n: NguyÔn M¹nh Cêng Trang 7


0
§Ò c¬ng chi tiÕt Kü thuËt lËp tr×nh

x2 1
VD: ViÕt hµm tÝnh gi¸ trÞ cña biÓu thøc F(x) = , sau ®ã viÕt
x2 1
hµm tÝnh P(x, y) = F(x) + F(y)
include "conio.h"
#include "iostream.h"
#include "stdio.h"
float ham(float x)
{
return (x*x-1)/ (x*x+1);
}

float F(float (*p)(float),float x, float y)


{
return p(x)+p(y);
}

void main()
{
clrscr();

int x=5; int y=3;


cout<<"F la "<<F(ham, x, y);
getch();
}
x2 1
VD2: ViÕt hµm tÝnh gi¸ trÞ biÓu thøc F(x) =
x2 1
#include "conio.h"
#include "iostream.h"
#include "stdio.h"
float TS(float x)
{
return (x*x-1);
}
float MS(float x)
{
return (x*x+1);
}

float F(float (*p)(float), float (*q) (float), float x)


{
return p(x)/q(y);
}

void main()

Biªn so¹n: NguyÔn M¹nh Cêng Trang 7


1
§Ò c¬ng chi tiÕt Kü thuËt lËp tr×nh

{
clrscr();
int x=5;
cout<<"F la "<<F(TS,MS, x);
getch();
}

Biªn so¹n: NguyÔn M¹nh Cêng Trang 7


2

You might also like