Professional Documents
Culture Documents
TPHCM 2009
LI NI U
Ngn ng lp trnh (NNLT) C/C++ l mt trong nhng ngn ng lp trnh hng i
tng mnh v ph bin hin nay do tnh mm do v a nng ca n. Khng ch cc ng
dng c vit trn C/C++ m c nhng chng trnh h thng ln u c vit hu ht
trn C/C++. C++ l ngn ng lp trnh hng i tng c pht trin trn nn tng ca C,
khng nhng khc phc mt s nhc im ca ngn ng C m quan trng hn, C++ cung
cp cho ngi s dng (NSD) mt phng tin lp trnh theo k thut mi: lp trnh hng
i tng. y l k thut lp trnh c s dng hu ht trong cc ngn ng mnh hin
nay, c bit l cc ngn ng hot ng trong mi trung Windows nh Microsoft Access,
Visual C++, VB.NET, C++.NET, C#,
Hin nay NNLT C/C++ c a vo ging dy trong hu ht cc trng i hc,
Cao ng thay th mt s NNLT c nh Pascal N c th mang nhiu tn gi khc
nh Tin hc c s, K thut lp trnh, Ngn ng lp trnh bc cao, Ti liu ny ch cp
mt phn nh n k thut lp trnh vi C++, bn cnh cng ni mt s im khc bit so
vi C. V k thut lp trnh hng i tng (trong C++) s c trang b bi mt gio
trnh khc. Tuy nhin ngn gn, trong ti liu ny tn gi C/C++ s c chng ti thay
bng C++.
Ni dung ti liu ny gm 8 chng. Phn u gm cc chng t 1 n 5 ch yu
trnh by v NNLT C++ trn nn tng ca k thut lp trnh cu trc. Cc chng cn li
(chng 6, 7 v 8) s trnh by cc cu trc c bn trong C++ l k thut ng gi (lp
v i tng), nh ngha php ton mi cho lp v lm vic vi file (sinh vin t tham
kho, ging vin ch gii thiu).
Tuy c nhiu c gng nhng do thi gian v trnh ngi vit c hn nn chc
chn khng trnh khi sai st, v vy rt mong nhn c s gp ca bn c ti liu
ny ngy cng mt hon thin hn.
MC LC
CHNG I.
I.1. CC YU T C BN ........................................................................................................................................ 9
I.1.1.
Bng k t ca C++ .................................................................................................................................... 9
I.1.2.
T kho ....................................................................................................................................................... 9
I.1.3.
Tn gi ...................................................................................................................................................... 10
I.1.4.
Ch thch trong chng trnh .................................................................................................................... 10
I.2. CC BC TO V THC HIN MT CHNG TRNH ...................................................................... 11
I.2.1.
Qui trnh vit v thc hin chng trnh ................................................................................................... 11
I.2.2.
Son tho tp tin chng trnh ngun ....................................................................................................... 11
I.2.3.
Dch chng trnh ..................................................................................................................................... 12
I.2.4.
Chy chng trnh .................................................................................................................................... 12
I.3. VO/RA TRONG C++ ....................................................................................................................................... 12
I.3.1.
Vo d liu t bn phm ........................................................................................................................... 13
I.3.2.
In d liu ra mn hnh ............................................................................................................................... 13
I.3.3.
nh dng thng tin cn in ra mn hnh .................................................................................................... 15
I.3.4.
Vo/ra trong C .......................................................................................................................................... 16
I.3.5.
In kt qu ra mn hnh .............................................................................................................................. 16
I.3.6.
Nhp d liu t bn phm ......................................................................................................................... 18
CHNG II.
II.1.
KIU D LIU N GIN ......................................................................................................................... 20
II.1.1. Khi nim v kiu d liu ......................................................................................................................... 20
II.1.2. Kiu k t ................................................................................................................................................. 21
II.1.3. Kiu s nguyn ......................................................................................................................................... 22
II.1.4. Kiu s thc .............................................................................................................................................. 22
II.2.
HNG - KHAI BO V S DNG HNG ................................................................................................... 22
II.2.1. Hng nguyn ............................................................................................................................................. 22
II.2.2. Hng thc .................................................................................................................................................. 23
a.
Dng du phy tnh ........................................................................................................................................ 23
b.
Dng du phy ng ...................................................................................................................................... 23
II.2.3. Hng k t ................................................................................................................................................. 23
a.
Cch vit hng ............................................................................................................................................... 23
b.
Mt s hng thng dng ................................................................................................................................ 23
II.2.4. Hng xu k t ........................................................................................................................................... 24
II.2.5. Khai bo hng ........................................................................................................................................... 24
II.3.
BIN - KHAI BO V S DNG BIN ....................................................................................................... 25
II.3.1. Khai bo bin ............................................................................................................................................ 25
a.
Khai bo khng khi to ................................................................................................................................ 26
b.
Khai bo c khi to ...................................................................................................................................... 26
II.3.2. Phm vi ca bin ....................................................................................................................................... 26
II.3.3. Gn gi tr cho bin (php gn)................................................................................................................. 27
II.3.4. Mt s im lu v php gn ................................................................................................................. 27
II.4.
PHP TON, BIU THC V CU LNH ................................................................................................. 28
II.4.1. Php ton .................................................................................................................................................. 28
a.
Cc php ton s hc: +, -, *, /, % ................................................................................................................. 28
b.
Cc php ton t tng, gim: i++, ++i, i--, --i ................................................................................................ 28
c.
Cc php ton so snh v lgic ...................................................................................................................... 29
II.4.2. Cc php gn ............................................................................................................................................. 30
II.4.3. Biu thc ................................................................................................................................................... 31
a.
Th t u tin ca cc php ton ................................................................................................................... 31
b.
Php chuyn i kiu ..................................................................................................................................... 32
II.4.4. Cu lnh v khi lnh ............................................................................................................................... 33
II.5.
TH VIN CC HM TON HC .............................................................................................................. 33
II.5.1. Cc hm s hc ......................................................................................................................................... 34
II.5.2. Cc hm lng gic .................................................................................................................................. 34
CHNG III.
III.1.
CU TRC R NHNH ................................................................................................................................ 37
III.1.1.
Cu lnh iu kin if ............................................................................................................................ 37
a.
ngha .......................................................................................................................................................... 37
b.
C php .......................................................................................................................................................... 37
c.
c im........................................................................................................................................................ 37
d.
V d minh ho .............................................................................................................................................. 38
III.1.2.
Cu lnh la chn switch ..................................................................................................................... 39
a.
ngha .......................................................................................................................................................... 39
b.
C php .......................................................................................................................................................... 39
c.
Cch thc hin ............................................................................................................................................... 39
d.
V d minh ho .............................................................................................................................................. 39
III.1.3.
Cu lnh nhy goto............................................................................................................................... 40
a.
ngha .......................................................................................................................................................... 40
b.
C php .......................................................................................................................................................... 41
c.
V d minh ho .............................................................................................................................................. 41
III.2.
CU TRC LP ............................................................................................................................................ 41
III.2.1.
Lnh lp for .......................................................................................................................................... 42
a.
C php .......................................................................................................................................................... 42
b.
Cch thc hin ............................................................................................................................................... 42
c.
V d minh ho .............................................................................................................................................. 42
d.
c im........................................................................................................................................................ 43
e.
Lnh for lng nhau ........................................................................................................................................ 44
III.2.2.
Lnh lp while ...................................................................................................................................... 45
a.
C php .......................................................................................................................................................... 45
b.
Thc hin ....................................................................................................................................................... 45
c.
c im........................................................................................................................................................ 45
d.
V d minh ho .............................................................................................................................................. 45
III.2.3.
Lnh lp do ... while ............................................................................................................................. 48
a.
C php .......................................................................................................................................................... 48
b.
Thc hin ....................................................................................................................................................... 48
c.
c im........................................................................................................................................................ 48
d.
V d minh ho .............................................................................................................................................. 48
III.2.4.
Li ra ca vng lp: break, continue .................................................................................................... 49
a.
Lnh break ..................................................................................................................................................... 49
b.
Lnh continue ................................................................................................................................................ 49
III.2.5.
So snh cch dng cc cu lnh lp ..................................................................................................... 50
III.3.
MNG D LIU ........................................................................................................................................... 50
III.3.1.
Mng mt chiu ................................................................................................................................... 50
a.
ngha .......................................................................................................................................................... 50
b.
Khai bo......................................................................................................................................................... 51
c.
Cch s dng ................................................................................................................................................. 52
d.
V d minh ho .............................................................................................................................................. 52
III.3.2.
Xu k t............................................................................................................................................... 54
a.
Khai bo......................................................................................................................................................... 54
b.
Cch s dng ................................................................................................................................................. 54
c.
Phng thc nhp xu (#include <iostream.h>) ............................................................................................ 55
d.
Mt s hm x l xu (#include <cstring>) ................................................................................................... 56
III.4.
a.
b.
c.
CHNG IV.
IV.1.
CON TR V S HC A CH .................................................................................................................. 68
IV.1.1.
a ch, php ton & ............................................................................................................................ 68
IV.1.2.
Con tr ................................................................................................................................................. 69
a.
ngha .......................................................................................................................................................... 69
b.
Khai bo bin con tr..................................................................................................................................... 69
c.
S dng con tr, php ton * ......................................................................................................................... 69
IV.1.3.
Cc php ton vi con tr .................................................................................................................... 70
a.
Php ton gn................................................................................................................................................. 70
b.
Php ton tng gim a ch ........................................................................................................................... 70
c.
Php ton t tng gim .................................................................................................................................. 71
d.
Hiu ca 2 con tr .......................................................................................................................................... 71
e.
Php ton so snh .......................................................................................................................................... 71
IV.1.4.
Cp pht ng, ton t cp pht, thu hi new, delete ........................................................................... 72
IV.1.5.
Con tr v mng, xu k t ................................................................................................................... 73
a.
Con tr v mng 1 chiu ................................................................................................................................ 73
b.
Con tr v xu k t ....................................................................................................................................... 74
c.
Con tr v mng hai chiu ............................................................................................................................. 74
IV.1.6.
Mng con tr ........................................................................................................................................ 76
a.
Khi nim chung ............................................................................................................................................ 76
b.
Mng xu k t ............................................................................................................................................... 76
IV.2.
HM .............................................................................................................................................................. 77
IV.2.1.
Khai bo v nh ngha hm................................................................................................................. 77
a.
Khai bo......................................................................................................................................................... 77
b.
nh ngha hm ............................................................................................................................................. 77
c.
Ch v khai bo v nh ngha hm ............................................................................................................ 79
IV.2.2.
Li gi v s dng hm........................................................................................................................ 79
IV.2.3.
Hm vi i mc nh .......................................................................................................................... 80
IV.2.4.
Khai bo hm trng tn ........................................................................................................................ 81
IV.2.5.
Bin, i tham chiu ............................................................................................................................ 82
IV.2.6.
Cc cch truyn tham i ..................................................................................................................... 83
a.
Truyn theo tham tr ...................................................................................................................................... 83
b.
Truyn theo dn tr........................................................................................................................................ 84
c.
Truyn theo tham chiu ................................................................................................................................. 86
IV.2.7.
Hm v mng d liu ........................................................................................................................... 87
a.
Truyn mng 1 chiu cho hm....................................................................................................................... 87
b.
Truyn mng 2 chiu cho hm....................................................................................................................... 88
c.
Gi tr tr li ca hm l mt mng ............................................................................................................... 90
d.
i v gi tr tr li l xu k t ..................................................................................................................... 93
e.
i l hng con tr ........................................................................................................................................ 94
IV.2.8.
Con tr hm.......................................................................................................................................... 95
a.
Khai bo......................................................................................................................................................... 95
b.
Khi to ......................................................................................................................................................... 95
c.
S dng con tr hm ...................................................................................................................................... 95
d.
Mng con tr hm .......................................................................................................................................... 96
IV.3.
QUI .......................................................................................................................................................... 97
IV.3.1.
Khi nim qui .................................................................................................................................. 97
IV.3.2.
Lp cc bi ton gii c bng qui ................................................................................................ 98
IV.3.3.
Cu trc chung ca hm qui ............................................................................................................ 98
IV.4.
T CHC CHNG TRNH ....................................................................................................................... 99
IV.4.1.
Cc loi bin v phm vi ...................................................................................................................... 99
a.
Bin cc b .................................................................................................................................................... 99
b.
Bin ngoi .................................................................................................................................................... 100
IV.4.2.
Bin vi mc ch c bit ................................................................................................................. 102
a.
Bin hng v t kho const .......................................................................................................................... 102
b.
Bin tnh v t kho static ........................................................................................................................... 103
c.
Bin thanh ghi v t kho register ............................................................................................................... 103
d.
Bin ngoi v t kho extern ....................................................................................................................... 104
IV.4.3.
Cc ch th tin x l .......................................................................................................................... 105
a.
Ch th bao hm tp tin #include .................................................................................................................. 105
b.
Ch th macro #define .................................................................................................................................. 105
c.
Cc ch th bin dch c iu kin #if, #ifdef, #ifndef ................................................................................. 106
CHNG V.
V.1.
KIU CU TRC ........................................................................................................................................ 113
V.1.1. Khai bo, khi to ................................................................................................................................... 113
V.1.2. Truy nhp cc thnh phn kiu cu trc.................................................................................................. 114
V.1.3. Php ton gn cu trc ............................................................................................................................ 115
V.1.4. Cc v d minh ho ................................................................................................................................. 116
V.1.5. Hm vi cu trc ..................................................................................................................................... 118
a.
Con tr v a ch cu trc ........................................................................................................................... 118
b.
a ch ca cc thnh phn ca cu trc ...................................................................................................... 120
c.
i ca hm l cu trc ............................................................................................................................... 120
d.
Gi tr hm l cu trc ................................................................................................................................. 124
V.1.6. Cu trc vi thnh phn kiu bit ............................................................................................................. 127
a.
Trng bit .................................................................................................................................................... 127
b.
c im...................................................................................................................................................... 127
V.1.7. Cu lnh typedef ..................................................................................................................................... 128
1.
V.2.
CU TRC T TR V DANH SCH LIN KT ..................................................................................... 128
V.2.1. Cu trc t tr ......................................................................................................................................... 129
V.2.2. Khi nim danh sch lin kt .................................................................................................................. 130
V.2.3. Cc php ton trn danh sch lin kt ..................................................................................................... 131
a.
To phn t mi ........................................................................................................................................... 131
b.
Chn phn t mi vo gia .......................................................................................................................... 131
c.
Xo phn t th i khi danh sch ................................................................................................................ 132
d.
Duyt danh sch........................................................................................................................................... 132
e.
Tm kim ..................................................................................................................................................... 132
V.3.
KIU HP................................................................................................................................................... 135
V.3.1. Khai bo .................................................................................................................................................. 135
V.3.2. Truy cp .................................................................................................................................................. 136
V.4.
CHNG VI.
VI.1.
LP TRNH C CU TRC V LP TRNH HNG I TNG ....................................................... 142
VI.1.1.
Phng php lp trnh cu trc .......................................................................................................... 142
VI.1.2.
Phng php lp trnh hng i tng ............................................................................................ 143
VI.2.
LP V I TNG ................................................................................................................................. 145
VI.2.1.
Khai bo lp ....................................................................................................................................... 145
VI.2.2.
Khai bo cc thnh phn ca lp (thuc tnh v phng thc) .......................................................... 146
a.
Cc t kha private v public ...................................................................................................................... 146
b.
Cc thnh phn d liu (thuc tnh) ............................................................................................................. 146
c.
Cc phng thc (hm thnh vin).............................................................................................................. 146
VI.2.3.
Bin, mng v con tr i tng ........................................................................................................ 147
a.
Thuc tnh ca i tng ............................................................................................................................. 148
b.
S dng cc phng thc ............................................................................................................................ 148
c.
Con tr i tng ......................................................................................................................................... 149
VI.3.
I CA PHNG THC, CON TR this .............................................................................................. 151
VI.3.1.
Con tr this l i th nht ca phng thc ..................................................................................... 151
VI.3.2.
Tham s ng vi i con tr this........................................................................................................ 151
VI.4.
VI.4.1.
Hm to (hm thit lp)...................................................................................................................... 152
a.
Cch vit hm to ........................................................................................................................................ 152
b.
Dng hm to trong khai bo ....................................................................................................................... 153
c.
Dng hm to trong cp pht b nh ........................................................................................................... 153
d.
Dng hm to biu in cc i tng hng ........................................................................................... 154
e.
V d minh ha ............................................................................................................................................ 154
VI.4.2.
Lp khng c hm to v hm to mc nh ...................................................................................... 155
a.
Nu lp khng c hm to ........................................................................................................................... 155
b.
Nu trong lp c t nht mt hm to...................................................................................................... 156
VI.4.3.
Hm to sao chp (Copy Constructor) ............................................................................................... 157
a.
Hm to sao chp mc nh ......................................................................................................................... 157
b.
Cch xy dng hm to sao chp................................................................................................................. 159
c.
Khi no cn xy dng hm to sao chp...................................................................................................... 159
d.
V d v hm to sao chp ........................................................................................................................... 161
VI.5.
HM HY (Destructor)............................................................................................................................... 163
VI.5.1.
Hm hy mc nh ............................................................................................................................. 163
VI.5.2.
Quy tc vit hm hy ......................................................................................................................... 163
VI.5.3.
Vai tr ca hm hy trong lp DT ..................................................................................................... 164
VI.6.
CC HM TRC TUYN (inline) .............................................................................................................. 164
VI.6.1.
u nhc im ca hm .................................................................................................................... 164
VI.6.2.
Cc hm trc tuyn ............................................................................................................................ 165
VI.6.3.
Cch bin dch v dng hm trc tuyn ............................................................................................. 165
VI.6.4.
S hn ch ca trnh bin dch ........................................................................................................... 166
CHNG VII.
CHNG VIII.
Cc c nh dng.............................................................................................................................................. 184
ppppp.
Nhm cn l ....................................................................................................................................... 185
d.
Nhm nh dng s nguyn ......................................................................................................................... 185
e.
Nhm nh dng s thc .............................................................................................................................. 185
f.
Nhm nh dng hin th ............................................................................................................................. 186
VIII.2.2. Cc b v hm nh dng ................................................................................................................... 186
a.
Cc b nh dng ......................................................................................................................................... 186
b.
CHNG I.
Cc yu t c bn
Mi trng lm vic ca C++
Cc bc to v thc hin mt chng trnh
Vo/ra trong C++
I.1. CC YU T C BN
Mt ngn ng lp trnh (NNLT) bc cao cho php ngi s dng (NSD) biu hin tng ca
mnh gii quyt mt vn , bi ton bng cch din t gn vi ngn ng thng thng thay v
phi din t theo ngn ng my (dy cc k hiu 0,1). Hin nhin, cc tng NSD mun trnh
by phi c vit theo mt cu trc cht ch thng c gi l thut ton hoc gii thut v theo
ng cc qui tc ca ngn ng gi l c php hoc vn phm. Trong gio trnh ny chng ta bn
n mt ngn ng lp trnh nh vy, l ngn ng lp trnh C++ v lm th no th hin cc
tng gii quyt vn bng cch vit thnh chng trnh trong C++.
Trc ht, trong mc ny chng ta s trnh by v cc qui nh bt buc n gin v c bn nht.
Thng thng cc qui nh ny s c nh dn trong qu trnh hc ngn ng, tuy nhin c mt
vi khi nim tng i h thng v NNLT C++ chng ta trnh by s lc cc khi nim c bn
. Ngi c tng lm quen vi cc NNLT khc c th c lt qua phn ny.
I.1.1. Bng k t ca C++
Hu ht cc ngn ng lp trnh hin nay u s dng cc k t ting Anh, cc k hiu thng dng v
cc con s th hin chng trnh. Cc k t ca nhng ngn ng khc khng c s dng (v d
cc ch ci ting Vit). Di y l bng k t c php dng to nn nhng cu lnh ca ngn
ng C++.
Cc ch ci la tinh (vit thng v vit hoa): a .. z v A .. Z. Cng mt ch ci nhng vit
thng phn bit vi vit hoa. V d ch ci 'a' l khc vi 'A'.
Du gch di: _
Cc ch s thp phn: 0, 1, . ., 9.
Cc k hiu ton hc: +, -, *, /, % , &, ||, !, >, <, = ...
Cc k hiu c bit khc: , ;: [ ], {}, #, du cch, ...
I.1.2. T kho
Mt t kho l mt t c qui nh trc trong NNLT vi mt ngha c nh, thng dng
ch cc loi d liu hoc kt hp thnh cu lnh. NSD c th to ra nhng t mi ch cc i
tng ca mnh nhng khng c php trng vi t kho. Di y chng ti lit k mt vi t
kho thng gp, ngha ca cc t ny, s c trnh by dn trong cc mc lin quan.
auto, break, case, char, continue, default, do, double, else, externe, float,
for, goto, if, int, long, register, return, short, sizeof, static, struct, switch,
typedef, union, unsigned, while ...
I.1.3. Tn gi
phn bit cc i tng vi nhau chng cn c mt tn gi. Hu ht mt i tng c vit ra
trong chng trnh thuc 2 dng, mt dng c sn trong ngn ng (v d cc t kho, tn cc
hm chun ...), mt s do NSD to ra dng t tn cho hng, bin, kiu, hm ... cc tn gi do
NSD t t phi tun theo mt s qui tc sau:
L dy k t lin tip (khng cha du cch) v phi bt u bng ch ci hoc gch di.
Phn bit k t in hoa v thng.
Khng c trng vi t kha.
S lng ch ci dng phn bit tn gi c th c t tu .
Ch cc tn gi c sn ca C++ cng tun th theo ng qui tc trn.
Trong mt chng trnh nu NSD t tn sai th trong qu trnh x l s b (trc khi chy chng
trnh) my s bo li (gi l li vn phm).
V d :
Mt chng trnh thng c vit mt cch ngn gn, do vy thng thng bn cnh cc cu lnh
chnh thc ca chng trnh, NSD cn c php vit vo chng trnh cc cu ghi ch, gii thch
lm r ngha hn chng trnh. Mt ch thch c th ghi ch v nhim v, mc ch, cch thc
ca thnh phn ang c ch thch nh bin, hng, hm hoc cng dng ca mt on lnh ... Cc
ch thch s lm cho chng trnh sng sa, d c, d hiu v v vy d bo tr, sa cha v sau.
C 2 cch bo cho chng trnh bit mt on ch thch:
Nu ch thch l mt on k t bt k lin tip nhau (trong 1 dng hoc trn nhiu dng)
ta t on ch thch gia cp du ng m ch thch /* (m) v */ (ng).
Nu ch thch bt u t mt v tr no cho n ht dng, th ta t du // v tr .
Nh vy // s dng cho cc ch thch ch trn 1 dng.
Nh nhc trn, vai tr ca on ch thch l lm cho chng trnh d hiu i vi ngi c,
v vy i vi my cc on ch thch s c b qua. Li dng c im ny ca ch thch i khi
tm thi b qua mt on lnh no trong chng trnh (nhng khng xo hn khi phi g
li khi cn dng n) ta c th t cc du ch thch bao quanh on lnh ny (v d khi chy th
chng trnh, g li ...), khi cn s dng li ta c th b cc du ch thch.
Ch : Cp du ch thch /* ... */ khng c php vit lng nhau, v d dng ch thch sau l
khng c php
/* y l on ch thch /* cha on ch thch ny */ nh on ch thch con */
cn phi sa li nh sau:
10
11
12
hoc:
cin >> bin_1 >> bin_2 >> bin_3 ;
Khi chy chng trnh nu gp cc cu lnh trn chng trnh s "tm dng" ch
NSD nhp d liu vo cho cc bin. Sau khi NSD nhp xong d liu, chng trnh s tip
tc chy t cu lnh tip theo sau ca cc cu lnh trn.
Cch thc nhp d liu ca NSD ph thuc vo loi gi tr ca bin cn nhp m ta gi l kiu, v
d nhp mt s c cch thc khc vi nhp mt chui k t. Gi s cn nhp di hai cnh ca
mt hnh ch nht, trong cnh di c qui c bng tn bin cd v chiu rng c qui c bi
tn bin cr. Cu lnh nhp s nh sau:
cin >> cd >> cr ;
hoc:
cout << bt_1 << bt_2 << bt_3 ;
cng ging cu lnh nhp y chng ta cng c th m rng lnh in vi nhiu hn 3 biu thc.
Cu lnh trn cho php in gi tr ca cc biu thc bt_1, bt_2, bt_3. Cc gi tr ny c th l tn
ca bin hoc cc kt hp tnh ton trn bin.
V d in cu "Chiu di l " v s 23 v tip theo l ch "mt", ta c th s dng 3 lnh sau y:
cout << "Chiu di l" ;
cout << 23 ;
cout << "mt";
13
Khi trn mn hnh s hin ra dng ch: "Chiu di l 23 mt". Nh vy trong trng hp ny
ta phi dng n ba ln du php ton << ch khng phi mt nh cu lnh trn. Ngoi ra ph
thuc vo gi tr hin c lu trong bin cd, chng trnh s in ra s chiu di thch hp ch
khng ch in c nh thnh "chiu di l 23 mt". V d nu cd c nhp l 15 th lnh trn s in
cu "chiu di l 15 mt".
Mt gi tr cn in khng ch l mt bin nh cd, cr, ... m cn c th l mt biu thc,
Thng thng ta hay s dng lnh in in cu thng bo nhc NSD nhp d liu trc
khi c cu lnh nhp. Khi trn mn hnh s hin dng thng bo ny ri mi tm dng
ch d liu nhp vo t bn phm. Nh vo thng bo ny NSD s bit phi nhp d liu,
nhp ni dung g v nh th no ... v d:
cout << "Hy nhp chiu di: "; cin >> cd;
cout << "V nhp chiu rng: "; cin >> cr;
khi my s in dng thng bo "Hy nhp chiu di: " v ch sau khi NSD nhp xong 23 ,
my s thc hin cu lnh tip theo tc in dng thng bo "V nhp chiu rng: " v ch n khi
NSD nhp xong 11 chng trnh s tip tc thc hin cc cu lnh tip theo.
Theo chun ANSI C++ 92 (ph hp vi Visual C++ 6.0 tr ln, Dev C++), ta s dng khai bo nhp xut nh sau:
#include <iostream>
using namespace std;
14
V d 2 : T cc tho lun trn ta c th vit mt cch y chng trnh tnh din tch v chu vi
ca mt hnh ch nht. chng trnh c th tnh vi cc b gi tr khc nhau ca chiu di v
rng ta cn lu gi tr ny vo trong cc bin (v d cd, cr).
#include <iostream.h>
// khai bo tp tin nguyn mu dng c cin, cout
void main()
// y l hm chnh ca chng trnh
{
float cd, cr ;
// khai bo cc bin c tn cd, cr cha di cc cnh
cout << "Hy nhp chiu di: " ; cin >> cd ;
// nhp d liu
cout << "Hy nhp chiu rng: " ; cin >> cr ;
cout << "Din tch = " << cd * cr << '\n' ;
// in kt qu
cout << "Chu vi = " << 2 * (cd + cr) << '\n';
return ; //Khi c return cng c
}
Chng trnh ny c th g vo my v chy. Khi chy n cu lnh nhp, chng trnh dng
ch nhn chiu di v chiu rng, NSD nhp cc gi tr c th, chng trnh s tip tc thc hin v
in ra kt qu. Thng qua cu lnh nhp d liu v 2 bin cd, cr NSD c th yu cu chng trnh
cho kt qu ca mt hnh ch nht bt k ch khng ch trong trng hp hnh c chiu di 23 v
chiu rng 11 nh trong v d c th trn.
I.3.3. nh dng thng tin cn in ra mn hnh
Mt s nh dng n gin c chng ti trnh by trc y. Cc nh dng chi tit v phc tp
hn s c trnh by trong cc phn sau ca gio trnh. s dng cc nh dng ny cn khai bo
file nguyn mu <iomanip.h> u chng trnh bng ch th #include <iomanip.h>2.
endl: Tng ng vi k t xung dng '\n'.
setw(n): Bnh thng cc gi tr c in ra bi lnh cout << s thng theo l tri vi
rng ph thuc vo rng ca gi tr . Phng thc ny qui nh rng dnh in ra
cc gi tr l n ct mn hnh. Nu n ln hn di thc ca gi tr, gi tr s in ra theo l
phi, trng phn tha (du cch) trc.
setprecision(n): Ch nh s ch s ca phn thp phn in ra l n. S s c lm trn
trc khi in ra.
setiosflags(ios::showpoint): Phng thc setprecision ch c tc dng trn mt dng
in. c nh cc gi tr t cho mi dng in (cho n khi t li gi tr mi) ta s
dng phng thc setiosflags(ios::showpoint).
15
cout << "CHI TIU" << endl << "=======" << endl ;
cout << setiosflags(ios::showpoint) << setprecision(2) ;
cout << "Sch v" << setw(20) << 123.456 << endl;
cout << "Thc n" << setw(20) << 2453.6 << endl;
cout << "Qun o lnh" << setw(15) << 3200.0 << endl;
getch();
// tm dng ( xem kt qu)
return ;
// kt thc thc hin hm main()
}
123.46
2453.60
3200.00
16
trong cu lnh ny c 2 biu thc cn in. Biu thc th nht l xu k t T l hc sinh gii: c
in vi khun dng %s (in xu k t) v biu thc th hai l 32.486 c in vi khun dng %0.2f
(in s thc vi 2 s l phn thp phn).
Nu gia k t % v k t nh dng c s biu th rng cn in th gi tr in ra s c
ging ct sang l phi, trng cc du cch pha trc. Nu rng m (thm du tr
pha trc) s ging ct sang l tri. Nu khng c rng hoc rng bng 0 (v d
%0.2f) th rng c t iu chnh ng bng rng ca gi tr cn in.
Du + trc rng in gi tr s km theo du (dng hoc m)
Trc cc nh dng s cn thm k t l (v d ld, lf) khi in s nguyn di long hoc s
thc vi chnh xc gp i double.
V d 4 :
void main()
{
int i = 2, j = 3 ;
17
s in ra:
Chng trnh tnh tng 2 s nguyn:
i + j = 5.
Lnh ny cho php nhp d liu vo cho cc bin bin_1, , bin_n. Trong dng nh dng
cha cc nh dng v kiu bin (nguyn, thc, k t ) c vit nh trong m t cu lnh printf.
Cc bin c vit di dng a ch ca chng tc c du & trc mi tn bin. V d cu lnh:
scanf(%d %f %ld, &x, &y, &z) ;
cho php nhp gi tr cho cc bin x, y, z trong x l bin nguyn, y l bin thc v z l bin
nguyn di (long). Cu lnh:
scanf(%2d %f %lf %3s, &i, &x, &d, s);
cho php nhp gi tr cho cc bin i, x, d, s, trong i l bin nguyn c 2 ch s, f l bin thc (
di ty ), d l bin nguyn di v s l xu k t c 3 k t. Gi s NSD nhp vo dy d liu:
12345 67abcd th cc bin trn s c gn cc gi tr nh sau: i = 12, x = 345, d = 67 v s =
abc. K t d v du enter () s c lu li trong b nh v t ng gn cho cc bin ca ln
nhp sau.
Cui cng, chng trnh trong v d 3 c vit li vi printf() v scanf() nh sau:
V d 5 :
#include <stdio.h>
// s dng cc hm printf() v scanf()
#include <conio.h>
// s dng hm getch()
void main()
{
printf("CHI TIU\n=======\n") ;
printf("Sch v %20.2f\n" , 123.456) ;
printf("Thc n %20.2f\n" , 2453.6) ;
printf(Qun o lnh %15.2f\n" , 3200.0) ;
getch();
// tm dng ( xem kt qu)
}
18
BI TP
1.
Nhng tn gi no sau y l hp l:
x
RADIUS
123variabe
one.0
tin_hoc
number#
toan tin
Radius
2.
3.
so-dem
nam2000
#include (iostream.h)
void main();
// Gii phng trnh bc 1
{
cout << Day la chng trnh: Gptb1.\nXin chao cac ban;
}
4.
5.
19
CHNG II.
II.1.
20
Loi d liu
Tn kiu
S nh
Min gi tr
K t
char
1 byte
S nguyn
unsigned char
int
1 byte
2 byte
128 .. 127
0 .. 255
unsigned int
2 byte
32768 .. 32767
0 .. 65535
S thc
short
2 byte
32768 .. 32767
long
4 byte
215 .. 215 1
float
4 byte
10 -37 . . 10 +38
double
8 byte
10 -307 . . 10 +308
21
II.2.
Hng l mt gi tr c nh no v d 3 (hng nguyn), 'A' (hng k t), 5.0 (hng thc), "Ha noi"
(hng xu k t). Mt gi tr c th c hiu di nhiu kiu khc nhau, do vy khi vit hng ta
cng cn c dng vit thch hp.
II.2.1. Hng nguyn
kiu short, int: 3, -7, ...
kiu unsigned: 3, 123456, ...
kiu long, long int: 3L, -7L, 123456L, ... (vit L vo cui mi gi tr)
Cc cch vit trn l th hin ca s nguyn trong h thp phn, ngoi ra chng cn c vit di
cc h m khc nh h c s 8 hoc h c s 16. Mt s nguyn trong c s 8 lun lun c vit
vi s 0 u, tng t vi c s 16 phi vit vi 0x u. V d ta bit 65 trong c s 8 l 101 v
trong c s 16 l 41, do 3 cch vit 65, 0101, 0x41 l nh nhau, cng biu din gi tr 65.
22
Tng qut, mt s thc x c th c vit di dng: men hoc mEn, trong m c gi l phn
nh tr, n gi l phn bc (hay m). S men biu th gi tr x = m x 10n. V d s = 3.1416 c
th c vit:
= = 0.031416e2 = 0.31416e1 = 3.1416e0 = 31.416e1 = 314.16e2 =
v
23
'\r' :
'\f' :
'\\' :
'\?' :
'\'' :
'\"' :
'\kkk'
'\xkk'
xung dng
ko trang
du \
du chm hi ?
du nhy n '
du nhy kp "
:
k t c m l kkk trong h 8
:
k t c m l kk trong h 16
V d:
cout << "Hm nay tri \t nng \a \a \a \n" ;
s in ra mn hnh dng ch "Hm nay tri" sau b mt khong cch bng mt tab (khong 8 du
cch) ri in tip ch "nng", tip theo pht ra 3 ting chung v cui cng con tr trn mn hnh s
nhy xung u dng mi.
Ch phn bit gia 2 cch vit 'A' v "A", tuy chng cng biu din ch ci A nhng
chng trnh s hiu 'A' l mt k t cn "A" l mt xu k t (do vy chng c b tr
khc nhau trong b nh cng nh cch s dng chng l khc nhau). Tng t ta khng
c vit '' (2 du nhy n lin nhau) v khng c khi nim k t "rng". ch xu rng
(khng c k t no) ta phi vit "" (2 du nhy kp lin nhau).
Tm li mt gi tr c th c vit di nhiu kiu d liu khc nhau v do cch s dng chng
cng khc nhau. V d lin quan n khi nim 3 n v c th c cc cch vit sau tuy nhin chng
hon ton khc nhau:
3
s nguyn 3 n v
3L
s nguyn di 3 n v
3.0 :
s thc 3 n v
'3'
ch s 3
"3" :
24
xut hin gi tr 50 ta u c th thay n bng sosv. Tng t C++ cng c nhng tn hng c
t sn, c gi l cc hng chun v NSD c th s dng khi cn thit. V d hng c t sn
trong C++ vi tn gi M_PI. Vic s dng tn hng thay cho hng c nhiu im thun li nh sau:
Chng trnh d c hn, v thay cho cc con s t c ngha, mt tn gi s lm NSD d
hnh dung vai tr, ni dung ca n. V d, khi gp tn gi sosv NSD s hnh dung c
chng hn, "y l s sinh vin ti a trong mt lp", trong khi s 50 c th l s sinh vin
m cng c th l tui ca mt sinh vin no .
Chng trnh d sa cha hn, v d by gi nu mun thay i chng trnh sao cho bi
ton qun l c thc hin vi s sinh vin ti a l 60, khi ta cn tm v thay th
hng trm v tr xut hin ca 50 thnh 60. Vic thay th nh vy d gy ra li v c th
khng tm thy ht cc s 50 trong chng trnh hoc thay nhm s 50 vi ngha khc
nh tui ca mt sinh vin no chng hn. Nu trong chng trnh s dng hng sosv,
by gi vic thay th tr nn chnh xc v d dng hn bng thao tc khai bo li gi tr
hng sosv bng 60. Lc trong chng trnh bt k ni no gp tn hng sosv u
c chng trnh hiu vi gi tr 60.
khai bo hng ta dng cc cu khai bo sau (C++):
const kiu tn_hng = gi_tr_hng ;
hoc trong C l:
#define tn_hng gi_tr_hng ;
V d:
#define sosv 50 ;
#define MAX 100 ;
const int sosv = 50 ;
II.3.
25
hoc hm, c ngha bt k lc no NSD thy cn thit s dng bin mi, h c quyn khai bo v
s dng n t tr i.
C php khai bo bin gm tn kiu, tn bin v c th c hay khng khi to gi tr ban u cho
bin. khi to hoc thay i gi tr ca bin ta dng lnh gn (=).
a. Khai bo khng khi to
tn_kiu tn_bin_1 ;
tn_kiu tn_bin_2 ;
tn_kiu tn_bin_3 ;
V d:
void main()
{
int i, j ;
float x ;
char c, d[100] ;
unsigned int u ;
b. Khai bo c khi to
Trong cu lnh khai bo, cc bin c th c gn ngay gi tr ban u bi php ton gn (=) theo
c php:
tn_kiu tn_bin_1 = gt_1, tn_bin_2 = gt_2, tn_bin_3 = gt_3 ;
V d:
const int n = 10 ;
void main()
{
int i = 2, j , k = n + 5; // khai bo i v khi to bng 2, k bng 15
float eps = 1.0e-6 ; // khai bo bin thc epsilon khi to bng 10-6
char c = 'Z';
// khai bo bin k t c v khi to bng 'A'
char d[100] = "Tin hc";// khai bo xu k t d cha dng ch "Tin hc"
26
Khi gp php gn chng trnh s tnh ton gi tr ca biu thc sau gn gi tr ny cho bin. V
d:
int n, i = 3;
n = 10;
cout << n <<", " << i << endl;
i = n / 2;
cout << n <<", " << i << endl;
// khi to i bng 3
// gn cho n gi tr 10
// in ra: 10, 3
// gn li gi tr ca i bng n/2 = 5
// in ra: 10, 5
Trong v d trn n c gn gi tr bng 10; trong cu lnh tip theo biu thc n/2 c tnh (bng
5) v sau gn kt qu cho bin i, tc i nhn kt qu bng 5 d trc n c gi tr l 2 (trong
trng hp ny vic khi to gi tr 2 cho bin i l khng c ngha).
Mt khai bo c khi to cng tng ng vi mt khai bo v sau thm lnh gn cho bin (v
d int i = 3 cng tng ng vi 2 cu lnh int i; i = 3) tuy nhin v mt bn cht khi to gi tr
cho bin vn khc vi php ton gn nh ta s thy trong cc phn sau.
II.3.4. Mt s im lu v php gn
Vi ngha thng thng ca php ton (ngha l tnh ton v cho li mt gi tr) th php ton gn
cn mt nhim v na l tr li mt gi tr. Gi tr tr li ca php ton gn chnh l gi tr ca biu
thc sau du bng. Li dng iu ny C++ cho php chng ta gn "kp" cho nhiu bin nhn cng
mt gi tr bi c php:
bin_1 = bin_2 = = bin_n = gt ;
Biu thc gn trn c th c vit li nh (i = (j = (k = 1))), c ngha u tin thc hin php
ton gn gi tr cho bin i chng trnh phi tnh biu thc (j = (k = 1)), tc phi tnh k = 1, y l
php ton gn, gn gi tr 1 cho k v tr li gi tr 1, gi tr tr li ny s c gn cho j v tr li gi
tr 1 tip tc gn cho i.
Ngoi vic gn kp nh trn, php ton gn cn c php xut hin trong bt k biu thc no,
iu ny cho php trong mt biu thc c php ton gn, n khng ch tnh ton m cn gn gi tr
cho cc bin, v d n = 3 + (i = 2) s cho ta i = 2 v n = 5. Vic s dng nhiu chc nng ca mt
cu lnh lm cho chng trnh gn gng hn (trong mt s trng hp) nhng cng tr nn kh
c, chng hn cu lnh trn c th vit tch thnh 2 cu lnh i = 2; n = 3 + i; s d c hn t nht
i vi cc bn mi bt u tm hiu v lp trnh.
27
II.4.
Cc php ton + (cng), (tr), * (nhn) c hiu theo ngha thng thng trong s hc.
Php ton a / b (chia) c thc hin theo kiu ca cc ton hng, tc nu c hai ton
hng l s nguyn th kt qu ca php chia ch ly phn nguyn, ngc li nu 1 trong 2
ton hng l thc th kt qu l s thc. V d:
13/5 = 2
13.0/5 = 13/5.0 = 13.0/5.0 = 2.6
// do 13 v 5 l 2 s nguyn
// do c t nht 1 ton hng l thc
// phn d ca 13/5
// phn d ca 5/13
Tng ng
Kt qu
j=j+1;i=j;
i = 16 , j = 16
i=j;j=j+1;
i = 15 , j = 16
j = ++i + 5 ;
i=i+1;j=i+5;
i = 4, j = 9
j = i++ + 5 ;
j = i + 5; i = i + 1;
i = 4, j = 8
Ghi ch: Vic kt hp php ton t tng gim vo trong biu thc hoc cu lnh (nh v d trong
phn sau) s lm chng trnh gn nhng kh hiu hn.
28
== (bng nhau), != (khc nhau), > (ln hn), < (nh hn), >= (ln hn hoc bng), <= (nh hn
hoc bng).
Hai ton hng ca cc php ton ny phi cng kiu. V d:
// nhn gi tr 1 v ng
// = 0 v sai
// = 1
// = 3 v 5<2 bng 0
// = 4 v 5>=2 bng 1
3 == 3 hoc 3 == (4 -1)
3 == 5
3 != 5
3 + (5 < 2)
3 + (5 >= 2)
Ch : cn phn bit php ton gn (=) v php ton so snh (==). Php gn va gn
gi tr cho bin va tr li gi tr bt k (l gi tr ca ton hng bn phi), trong khi php so
snh lun lun tr li gi tr 1 hoc 0.
Hai ton hng ca loi php ton ny phi c kiu lgic tc ch nhn mt trong hai gi tr "ng"
(c th hin bi cc s nguyn khc 0) hoc "sai" (th hin bi 0). Khi gi tr tr li ca php
ton l 1 hoc 0 v c cho trong bng sau:
a
a && b
a || b
!a
Tm li:
Php ton "v" ng khi v ch khi hai ton hng cng ng
Php ton "hoc" sai khi v ch khi hai ton hng cng sai
Php ton "khng" (hoc "ph nh") ng khi v ch khi ton hng ca n sai.
V d:
3 && (4 > 5)
(3 >= 1) && (7)
!1
! (4 + 3 < 7)
5 || (4 >= 6)
(5 < !0) || (4 >= 6)
Ch : vic nh gi biu thc c tin hnh t tri sang phi v s dng khi bit kt qu m
29
cho kt qu x = 0 , i = 3 , j = 4
cho kt qu y = 0 , i = 2 , j = 4
cch vit hai biu thc l nh nhau (ngoi tr hon i v tr 2 ton hng ca php ton &&). Vi
gi thit i = 2 v j = 3 ta thy c hai biu thc trn cng nhn gi tr 0. Tuy nhin cc gi tr ca i v
j sau khi thc hin xong hai biu thc ny s c kt qu khc nhau. C th vi biu thc u v ++i
< 4 l ng nn chng trnh phi tip tc tnh tip ++j > 5 nh gi c biu thc. Do vy sau
khi nh gi xong c i v j u c tng 1 (i=3, j=4). Trong khi vi biu thc sau do ++j > 5 l
sai nn chng trnh c th kt lun c ton b biu thc l sai m khng cn tnh tip ++i < 4.
C ngha chng trnh sau khi nh gi xong ++j > 5 s dng v v vy ch c bin j c tng 1, t
ta c i = 2, j = 4 khc vi kt qu ca biu thc trn. V d ny mt ln na nhc ta ch kim
sot k vic s dng cc php ton t tng gim trong biu thc v trong cu lnh.
II.4.2. Cc php gn
Php gn c iu kin:
bin = (iu_kin) ? a: b ;
iu_kin l mt biu thc logic, a, b l cc biu thc bt k cng kiu vi kiu ca bin. Php ton
ny gn gi tr a cho bin nu iu kin ng v b nu ngc li.
V d:
x = (3 + 4 < 7) ? 10: 20
x = (3 + 4) ? 10: 20
x = (a > b) ? a: b
// x = 20 v 3+4<7 l sai
// x = 10 v 3+4 khc 0, tc iu kin ng
// x = s ln nht trong 2 s a, b.
Cch vit gn ny c nhiu thun li khi vit v c chng trnh nht l khi tn bin qu di hoc
i km nhiu ch s thay v phi vit hai ln tn bin trong cu lnh th ch phi vit mt ln, iu
ny trnh vit lp li tn bin d gy ra sai st. V d thay v vit:
ngay_quoc_te_lao_dong = ngay_quoc_te_lao_dong + 365;
c th vit gn hn bi:
ngay_quoc_te_lao_dong += 365;
c th c vit li bi:
Luong[Nhanvien[3][2*i+1]] *= 290;
30
b+
vit : x = b + sqrt(delta) / 2*a; l sai
2a
// b = 5
// a = 6
31
Khi tnh ton mt biu thc phn ln cc php ton u yu cu cc ton hng phi cng kiu. V
d php gn thc hin c th gi tr ca biu thc phi c cng kiu vi bin. Trong trng
hp kiu ca gi tr biu thc khc vi kiu ca php gn th hoc l chng trnh s t ng
chuyn kiu gi tr biu thc v thnh kiu ca bin c gn (nu c) hoc s bo li. Do vy
khi cn thit NSD phi s dng cc cu lnh chuyn kiu ca biu thc cho ph hp vi kiu ca
bin.
Chuyn kiu t ng: v mt nguyn tc, khi cn thit cc kiu c gi tr thp s c
chng trnh t ng chuyn ln kiu cao hn cho ph hp vi php ton. C th php
chuyn kiu c th c thc hin theo s nh sau:
char int long int float double
V d:
int i = 3;
float f ;
f = i + 2;
trong v d trn i c kiu nguyn v v vy i+2 cng c kiu nguyn trong khi f c kiu
thc. Tuy vy php ton gn ny l hp l v chng trnh s t ng chuyn kiu cu i+2
(bng 5) sang kiu thc (bng 5.0) ri mi gn cho f.
p kiu: trong chuyn kiu t ng, chng trnh chuyn cc kiu t thp n cao, tuy
nhin chiu ngc li khng th thc hin c v n c th gy mt d liu. Do nu
cn thit NSD phi ra lnh cho chng trnh. V d:
int i;
float f = 3 ;
i=f+2;
Trong v d trn cu lnh i = f+2 thc hin c ta phi p kiu ca biu thc f+2 v thnh kiu
nguyn. C php tng qut nh sau:
(tn_kiu)biu_thc
// c php c trong C
tn_kiu(biu_thc)
hoc:
trong tn_kiu l kiu cn c chuyn sang. Nh vy cu lnh trn phi c vit li:
i = int(f + 2) ;
32
// hm sqrt(n) tr li cn bc hai ca s n
// x = 6 ?
// ng
// ng
// ng
// sai
Php p kiu: x = float(i/j) * 10 ; vn cho kt qu sai v trong du ngoc php chia i/j
vn l php chia nguyn, kt qu x vn l 0.
II.4.4. Cu lnh v khi lnh
Mt cu lnh trong C++ c thit lp t cc t kho v cc biu thc v lun lun c kt
thc bng du chm phy. Cc v d vo/ra hoc cc php gn to thnh nhng cu lnh n gin
nh:
cin >> x >> y ;
x = 3 + x ; y = (x = sqrt(x)) + 1 ;
cout << x ;
cout << y ;
Cc cu lnh c php vit trn cng mt hoc nhiu dng. Mt s cu lnh c gi l lnh c
cu trc, tc bn trong n li cha dy lnh khc. Dy lnh ny phi c bao gia cp du ngoc
{} v c gi l khi lnh. V d tt c cc lnh trong mt hm (nh hm main()) lun lun l mt
khi lnh. Mt c im ca khi lnh l cc bin c khai bo trong khi lnh no th ch c tc
dng trong khi lnh . Chi tit hn v cc c im ca lnh v khi lnh s c trnh by trong
cc chng tip theo ca gio trnh.
II.5.
TH VIN CC HM TON HC
33
II.5.1. Cc hm s hc
exp(x) : hm m, tr li gi tr e m x (ex).
sqrt(x) : tr li cn bc 2 ca x.
BI TP
6.
7.
8.
c lp - T do - Hnh phc
10. Vit chng trnh nhp vo hai s thc. In ra hai s thc vi 2 s l v cch nhau 5 ct.
11. Nhp, chy v gii thch kt qu t c ca on chng trnh sau:
#include <iostream.h>
void main()
{
char c1 = 200; unsigned char c2 = 200 ;
cout << "c1 = " << c1 << ", c2 = " << c2 << "\n" ;
cout << "c1+100 = " << c1+100 << ", c2+100 = " << c2+100 ;
}
34
3+ 3+ 3
a.
b.
2+
1
2+
1
2
c. 3a b3 2 c
b 2 4ac
2a
d.
a 2 / b 4a / bc + 1
ha =
r=
2S
;
a
S
;
p
S=
p( p a )( p b )( p c ) ;
ma =
R=
1
2b 2 + 2c 2 a 2 ;
2
ga =
2
b+c
bcp( p a ) ;
abc
;
4S
19. Tnh din tch v th tch ca hnh cu bn knh R theo cng thc:
S = 4R2 ;
V = RS/3
35
36
CHNG III.
Cu trc r nhnh
Cu trc lp
Mng d liu
Mng hai chiu
III.1.
CU TRC R NHNH
Ni chung vic thc hin chng trnh l hot ng tun t, tc thc hin tng lnh mt t cu lnh
bt u ca chng trnh cho n cu lnh cui cng. Tuy nhin, vic lp trnh hiu qu hn hu
ht cc NNLT bc cao u c cc cu lnh r nhnh v cc cu lnh lp cho php thc hin cc cu
lnh ca chng trnh khng theo trnh t tun t nh trong vn bn.
Phn ny chng ti s trnh by cc cu lnh cho php r nhnh nh vy. thng nht mi cu
lnh c trnh by v c php (tc cch vit cu lnh), cch s dng, c im, v d minh ho v
mt vi iu cn ch khi s dng lnh.
III.1.1. Cu lnh iu kin if
a. ngha
Mt cu lnh if cho php chng trnh c th thc hin khi lnh ny hay khi lnh khc ph thuc
vo mt iu kin c vit trong cu lnh l ng hay sai. Ni cch khc cu lnh if cho php
chng trnh r nhnh (ch thc hin 1 trong 2 nhnh).
b. C php
l tng ng vi
37
V d : Tnh nm nhun. Nm th n l nhun nu n chia ht cho 4, nhng khng chia ht cho 100
hoc chia ht 400. Ch : mt s nguyn a l chia ht cho b nu phn d ca php chia bng 0, tc
a%b == 0.
#include <iostream.h>
void main()
{
int nam;
cout << Nam = ; cin >> nam ;
if ((nam%4 == 0 && year%100 !=0) || nam%400 == 0)
cout << nam << "la nam nhuan ;
else
cout << nam << "la nam khong nhuan ;
}
38
Cu lnh if cho ta kh nng c la chn mt trong hai nhnh thc hin, do nu s dng
nhiu lnh if lng nhau s cung cp kh nng c r theo nhiu nhnh. Tuy nhin trong trng hp
nh vy chng trnh s rt kh c, do vy C++ cn cung cp mt cu lnh cu trc khc cho php
chng trnh c th chn mt trong nhiu nhnh thc hin, l cu lnh switch.
b. C php
thc hin cu lnh switch u tin chng trnh tnh gi tr ca biu thc iu khin (btk), sau
so snh kt qu ca btk vi gi tr ca cc biu_thc_i bn di ln lt t biu thc u tin
(th nht) cho n biu thc cui cng (th n), nu gi tr ca btk bng gi tr ca biu thc th i
u tin no th chng trnh s thc hin dy lnh th i v tip tc thc hin tt c dy lnh cn
li (t dy lnh th i+1) cho n ht (gp du ngoc ng } ca lnh switch). Nu qu trnh so snh
khng gp biu thc (nhnh case) no bng vi gi tr ca btk th chng trnh thc hin dy lnh
trong default v tip tc cho n ht (sau default c th cn nhng nhnh case khc). Trng hp
cu lnh switch khng c nhnh default v btk khng khp vi bt c nhnh case no th chng
trnh khng lm g, coi nh thc hin xong lnh switch.
Nu mun lnh switch ch thc hin nhnh th i (khi btk = biu_thc_i) m khng phi thc hin
thm cc lnh cn li th cui dy lnh th i thng thng ta t thm lnh break; y l lnh cho
php thot ra khi mt lnh cu trc bt k.
d. V d minh ho
39
switch (th)
{
case 1: case 3: case 5: case 7: case 8: case 10:
case 12: cout << "thng ny c 31 ngy" ; break ;
case 2: cout << "thng ny c 28 ngy" ; break;
case 4: case 6: case 9:
case 11: cout << "thng ny c 30 ngy" ; break;
default: cout << "Bn nhp sai thng, khng c thng ny" ;
}
Trong chng trnh trn gi s NSD nhp thng l 5 th chng trnh bt u thc hin dy lnh sau
case 5 (khng c lnh no) sau tip tc thc hin cc lnh cn li, c th l bt u t dy lnh
trong case 7, n case 12 chng trnh gp lnh in kt qu "thng ny c 31 ngy", sau gp lnh
break nn chng trnh thot ra khi cu lnh switch ( thc hin xong). Vic gii thch cng
tng t cho cc trng hp khc ca thng. Nu NSD nhp sai thng (v d thng nm ngoi phm
vi 1..12), chng trnh thy th khng khp vi bt k nhnh case no nn s thc hin cu lnh
trong default, in ra mn hnh dng ch "Bn nhp sai thng, khng c thng ny" v kt thc
lnh.
V d : Nhp 2 s a v b vo t bn phm. Nhp k t th hin mt trong bn php ton: cng, tr,
nhn, chia. In ra kt qu thc hin php ton trn 2 s a, b.
void main()
{
float a, b, c ;
// cc ton hng a, b v kt qu c
char dau ;
// php ton c cho di dng k t
cout << "Hy nhp 2 s a, b: " ; cin >> a >> b ;
cout << "v du php ton: " ; cin >> dau ;
switch (dau)
{
case '+': c = a + b ; break ;
case '': c = a - b ; break ;
case 'x': case '.': case '*': c = a * b ; break ;
case ':': case '/': c = a / b ; break ;
}
cout << setiosflags(ios::showpoint) << setprecision(4) ;
// in 4 s l
cout << "Kt qu l: " << c ;
}
Trong chng trnh trn ta chp nhn cc k t x, ., * th hin cho php ton nhn v :, / th hin
php ton chia.
III.1.3. Cu lnh nhy goto
a. ngha
Mt dng khc ca r nhnh l cu lnh nhy goto cho php chng trnh chuyn n thc hin mt
on lnh khc bt u t mt im c nh du bi mt nhn trong chng trnh. Nhn l mt
tn gi do NSD t t theo cc qui tt t tn gi. Lnh goto thng c s dng to vng lp.
Tuy nhin vic xut hin nhiu lnh goto dn n vic kh theo di trnh t thc hin chng trnh,
40
Goto <nhn> ;
V tr chng trnh chuyn n thc hin l on lnh ng sau nhn v du hai chm (:).
c. V d minh ho
m (chia 2)
n (nhn 2)
kq (khi to kq = 0)
21
11
m l, cng thm 11 vo kq = 0 + 11 = 11
10
22
m chn, b qua
44
m l, cng thm 44 vo kq = 11 + 44 = 55
88
m chn, b qua
176
III.2.
CU TRC LP
Mt trong nhng cu trc quan trng ca lp trnh cu trc l cc cu lnh cho php lp nhiu
ln mt on lnh no ca chng trnh. Chng hn trong v d v bi ton nhn theo phng
php n , lp li mt on lnh chng ta s dng cu lnh goto. Tuy nhin nh lu
41
for (dy biu thc 1 ; iu kin lp ; dy biu thc 2) { khi lnh lp; }
Cc biu thc trong cc dy biu thc 1, 2 cch nhau bi du phy (,). C th c nhiu
biu thc trong cc dy ny hoc dy biu thc cng c th trng.
iu kin lp: l biu thc lgic (c gi tr ng, sai).
Cc dy biu thc v/hoc iu kin c th trng tuy nhin vn gi li cc du chm phy
(;) ngn cch cc thnh phn vi nhau.
b. Cch thc hin
Thc hin dy biu thc 1 (thng thng l cc lnh khi to cho mt s bin),
Kim tra iu kin lp, nu ng th thc hin khi lnh lp thc hin dy biu thc 2
quay lai kim tra iu kin lp v lp li qu trnh trn cho n bc no vic kim
tra iu kin lp cho kt qu sai th dng.
Tm li, biu thc 1 s c thc hin 1 ln duy nht ngay t u qu trnh lp sau
thc hin cc cu lnh lp v dy biu thc 2 cho n khi no khng cn tho iu kin
lp na th dng.
c. V d minh ho
42
Kim tra iu kin: gi s m 0 (tc iu kin ng) for s thc hin lnh lp tc kim
tra nu m l th cng thm n vo cho kq.
Thng qua phn gii thch cch hot ng ca cu lnh for trong v d 7 c th thy cc thnh phn
ca for c th trng, tuy nhin cc du chm phy vn gi li ngn cch cc thnh phn vi
nhau. V d cu lnh for (kq = 0 ; m ; m >>= 1, n <<= 1) if (m%2) kq += n ; trong v d 7 c th
c vit li nh sau:
kq = 0;
for ( ; m ; ) { if (m%2) kq += n; m >>= 1; n <<= 1; }
43
(cu lnh kq += i++; c thc hin theo 2 bc: cng i vo kq v tng i (tng sau)).
Trong trng hp iu kin trong for cng trng chng trnh s ngm nh l iu kin lun
lun ng, tc vng lp s lp v hn ln (!). Trong trng hp ny dng vng lp trong khi
lnh cn c cu lnh kim tra dng v cu lnh break.
V d cu lnh for (i = 1 ; i <= 100 ; i ++) kq += i ; c vit li nh sau:
i = 1;
for ( ; ; )
{
kq += i++;
if (i > 100) break;
}
Tm li, vic s dng dng vit no ca for ph thuc vo thi quen ca NSD, tuy
nhin vic vit y cc thnh phn ca for lm cho vic c chng trnh tr nn d dng
hn.
e. Lnh for lng nhau
Trong dy lnh lp c th cha c lnh for, tc cc lnh for cng c php lng nhau nh cc cu
lnh c cu trc khc.
V d : Bi ton c: va g va ch b li cho trn m 100 chn. Hi c my g v my con
ch, bit tng s con l 36.
gii bi ton ny ta gi g l s g v c l s ch. Theo iu kin bi ton ta thy g c th i t 0
(khng c con no) v n ti a l 50 (v ch c 100 chn), tng t c c th i t 0 n 25. Nh
vy ta c th cho g chy t 0 n 50 v vi mi gi tr c th ca g li cho c chy t 0 n 25, ln
lt vi mi cp (g, c) c th ta kim tra 2 iu kin: g + c == 36 ? (s con) v 2g + 4c == 100 ?
(s chn). Nu c 2 iu kin u tho th cp (g, c) c th chnh l nghim cn tm. T ta c
chng trnh vi 2 vng for lng nhau, mt vng for cho g v mt vng cho c.
void main()
{
int g, c ;
for (g = 0 ; g <= 50 ; g++)
for (c = 0 ; c <= 25 ; c++)
if ((g+c == 36) && (2*g+4*c == 100)) cout << "g=" << g << ", ch=" << c ;
}
Chng trnh trn c th c gii thch mt cch ngn gn nh sau: u tin cho g = 0, thc hin
lnh for bn trong tc ln lt cho c = 0, 1, , 25, vi c=0 v g=0 kim tra iu kin, nu tho th
in kt qu nu khng th b qua, quay li tng c, cho n khi no c>25 th kt thc vng lp trong
quay v vng lp ngoi tng g ln 1, li thc hin vng lp trong vi g=1 ny (tc li cho c chy t
0 n 25). Khi g ca vng lp ngoi vt qu 50 th dng. T ta thy s vng lp ca chng
trnh l 50 x 25 = 1000 ln lp.
Ch : C th gim bt s ln lp bng nhn xt s g khng th vt qu 36 (v tng s con l 36).
44
Mt vi nhn xt khc cng c th lm gim s vng lp, tit kim thi gian chy ca chng trnh.
Bn c t ngh thm cc phng n gii khc gim s vng lp n t nht.
V d : Tm tt c cc phng n c 100 t cc t giy bc loi 10, 20 v 50.
void main()
{
int t10, t20, t50;
// s t 10, 20, 50
sopa = 0;
// s phng n
for (t10 = 0 ; t10 <= 10 ; t10++)
for (t20 = 0 ; t20 <= 5 ; t20++)
for (t50 = 0 ; t50 <= 2 ; t50++)
if (t10*10 + t20*20 + t50*50 == 100)
// nu tho th
{
sopa++;
// tng s phng n
if (t10) cout << t10 << "t 10 ;
// in s t 10 nu 0
if (t20) cout << "+" << t20 << "t 20 ;// thm s t 20 nu0
if (t50) cout << "+" << t50 << "t 50 ;// thm s t 50 nu0
cout << '\n' ;
// xung dng
}
cout << Tong so phuong an = << sopa ;
}
Khi gp lnh while chng trnh thc hin nh sau: u tin chng trnh s kim tra iu kin, nu
ng th thc hin khi lnh lp, sau quay li kim tra iu kin v tip tc. Nu iu kin sai th
dng vng lp. Tm li c th m t mt cch ngn gn v cu lnh while nh sau: lp li cc lnh
trong khi iu kin vn cn ng.
c. c im
// Cc s cn nhn v kt qu kq
45
Trong chng trnh trn cu lnh while (m) c c l "trong khi m cn khc 0 thc hin ",
ta thy trong khi lnh lp c lnh m >>= 1, lnh ny s nh hng n iu kin (m), n lc no
m bng 0 tc (m) l sai v chng trnh s dng lp.
Cu lnh while (m) cng c th c thay bng while (1) nh sau:
void main()
{
long m, n, kq;
// Cc s cn nhn v kt qu kq
cout << Nhp m v n: ; cin >> m >> n ;
kq = 0 ;
while (1) {
if (m%2) kq += n ;
m >>= 1;
n <<= 1;
if (!m) break ;
// nu m = 0 th thot khi vng lp
}
cout << m nhn n = << kq ;
}
46
hiu ca 2 s. Sau t li m hoc n bng r sao cho m > n v lp li. Vng lp dng khi m = n.
void main()
{
int m, n, r;
cout << "Nhp m, n: " ; cin >> m >> n ;
if (m < n) { int t = m; m = n; n = t; } // nu m < n th i vai tr hai s
while (m != n) {
r=m-n;
if (r > n) m = r; else { m = n ; n = r ; }
}
cout << "UCLN = " << m ;
}
Trong chng trnh trn cu lnh if (fa*fc > 0) a = c; else b = c; dng kim tra f(a) v f(c), nu
cng du (f(a)*f(c) > 0) th hm f(x) phi tri du trn on con [c, b] do t li on ny l [a,
b] ( quay li vng lp) tc t a = c v b gi nguyn, ngc li nu hm f(x) tri du trn on
con [a, c] th t li b = c cn a gi nguyn. Sau vng lp quay li kim tra di on [a, b]
(mi) nu b hn xp x th dng v ly c lm nghim xp x, nu khng th tnh li c v tip
tc qu trnh.
47
tnh f(a) v f(c) chng trnh s dng hm exp(x), y l hm cho li kt qu ex, dng hm
ny hoc cc hm ton hc ni chung, cn khai bo file nguyn mu math.h.
III.2.3. Lnh lp do ... while
a. C php
u tin chng trnh s thc hin khi lnh lp, tip theo kim tra iu kin, nu iu kin cn
ng th quay li thc hin khi lnh v qu trnh tip tc cho n khi iu kin tr thnh sai th
dng.
c. c im
2
1
1 1 1
1
= 2 + 2 + 2 + ...+ 2 , vi 2 <10 6 .
6 1 2 3
n
n
void main()
{
int n = 1; float S = 0;
do S += 1.0/(n*n) while 1.0/(n*n) < 1.0e-6;
float pi = sqrt(6*S);
cout << "pi = " << pi ;
}
48
i++;
} while (i <= n/2);
cout << n << "l s nguyn t" ;
}
Cng dng ca lnh dng thot ra khi (chm dt) cc cu lnh cu trc, chng trnh s tip tc
thc hin cc cu lnh tip sau cu lnh va thot. Cc v d minh ho bn c c th xem li trong
cc v d v cu lnh switch, for, while.
b. Lnh continue
Lnh dng quay li u vng lp m khng ch thc hin ht cc lnh trong khi lnh lp.
V d : Gi s vi mi i t 1 n 100 ta cn thc hin mt lot cc lnh no tr nhng s i l s
chnh phng. Nh vy tit kim thi gian, vng lp s kim tra nu i l s chnh phng th s
quay li ngay t u thc hin vi i tip theo.
int i ;
for (i = 1; i <= 100; i++) {
if (i l s chnh phng) continue;
{
// dy lnh khc
.
.
.
}
}
49
III.3.
MNG D LIU
50
// khng khi to
// c khi to
// c khi to
Tn kiu l kiu d liu ca cc thnh phn, cc thnh phn ny c kiu ging nhau.
Thnh thong ta cng gi cc thnh phn l phn t.
Cch khai bo trn ging nh khai bo tn bin bnh thng nhng thm s thnh phn
trong mng gia cp du ngoc vung [] cn c gi l kch thc ca mng. Mi tn
mng l mt bin v phn bit vi cc bin thng thng ta cn gi l bin mng.
Mt mng d liu c lu trong b nh bi dy cc lin tip nhau. S lng bng
vi s thnh phn ca mng v di (byte) ca mi cha thng tin ca mi
thnh phn. u tin c nh th t bi 0, tip theo bi 1, v tip tc cho n ht.
Nh vy nu mng c n thnh phn th cui cng trong mng s c nh s l n - 1.
Dng khai bo th 2 cho php khi to mng bi dy gi tr trong cp du {}, mi gi tr
cch nhau bi du phy (,), cc gi tr ny s c gn ln lt cho cc phn t ca mng
bt u t phn t th 0 cho n ht dy. S gi tr c th b hn s phn t. Cc phn t
mng cha c gi tr s khng c xc nh cho n khi trong chng trnh n c gn
mt gi tr no .
Dng khai bo th 3 cho php vng mt s phn t, trng hp ny s phn t c xc
nh bi s gi tr ca dy khi to. Do nu vng mt c dy khi to l khng c
php (chng hn khai bo int a[] l sai).
V d:
long L[100] ;
51
char dong[80] ;
c. Cch s dng
i.
ii.
Tuy mi mng biu din mt i tng nhng chng ta khng th p dng cc thao tc
ln ton b mng m phi thc hin thao tc thng qua tng thnh phn ca mng. V d
chng ta khng th nhp d liu cho mng a[10] bng cu lnh:
cin >> a ;
// sai
m phi nhp cho tng phn t t a[0] n a[9] ca a. D nhin trong trng hp ny
chng ta phi cn n lnh lp for:
int i ;
for (i = 0 ; i < 10 ; i++) cin >> a[i] ;
// sai
khc phc nhc im ny, trong cc chng sau C++ cung cp mt kiu d liu
mi gi l lp, v cho php NSD c th nh ngha ring php cng cho 2 mng tu , khi
c th vit mt cch n gin v quen thuc c = a + b cng 2 phn s.
d. V d minh ho
52
// a cha ti a 50 s
53
III.3.2. Xu k t
Mt xu k t l mt dy bt k cc k t (k c du cch) do vy n c th c lu bng mng k
t. Tuy nhin my c th nhn bit c mng k t ny l mt xu, cn thit phi c k t kt
thc xu, theo qui c l k t c m 0 (tc '\0') ti v tr no trong mng. Khi xu l dy k t
bt u t phn t u tin (th 0) n k t kt thc xu u tin (khng k cc k t cn li trong
mng).
0
\0
\0
\0
\0
\0
// khng khi to
// c khi to
// c khi to
// xu h tn cha ti a 25 k t
// di mng = 9
b. Cch s dng
Tng t nh cc mng d liu khc, xu k t c nhng c trng nh mng, tuy nhin chng
cng c nhng im khc bit. Di y l cc im ging v khc nhau .
54
55
V d : Nhp mt ngy thng dng M (mm/dd/yy), i sang ngy thng dng Vit Nam ri in ra
mn hnh.
void main()
{
char US[9], VN[9] = " / / " ;
cin.getline(US, 9) ;
VN[0] = US[3]; VN[1] = US[4] ;
VN[3] = US[0]; VN[4] = US[1] ;
VN[6] = US[6]; VN[7] = US[7] ;
cout << VN << endl ;
}
d. Mt s hm x l xu (#include <cstring>)
strcpy(s, t) ;
Gn ni dung ca xu t cho xu s (thay cho php gn = khng c dng). Hm s sao chp ton b
ni dung ca xu t (k c k t kt thc xu) vo cho xu s. s dng hm ny cn m bo di
ca mng s t nht cng bng di ca mng t. Trong trng hp ngc li k t kt thc xu s
khng c ghi vo s v iu ny c th gy treo my khi chy chng trnh.
V d:
char s[10], t[10] ;
t = "Face" ;
s=t;
strcpy(t, "Face") ;
strcpy(s, t) ;
cout << s << " to " << t ;
// khng c dng
// khng c dng
// c, gn "Face" cho t
// c, sao chp t sang s
// in ra: Face to Face
strncpy(s, t, n) ;
// copy 5 k t "Steve" vo s
// t du kt thc xu
56
// ngy
// thng
// nm
strcat(s, t);
Ni mt bn sao ca t vo sau s (thay cho php +). Hin nhin hm s loi b k t kt thc xu s
trc khi ni thm t. Vic ni s m bo ly c k t kt thc ca xu t vo cho s (nu s ch) v
vy NSD khng cn thm k t ny vo cui xu. Tuy nhin, hm khng kim tra xem liu di
ca s c ch ni thm ni dung, vic kim tra ny phi do NSD m nhim. V d:
char a[100] = "Mn", b[4] = "ti";
strcat(a, v );
strcat(a, b);
cout << a
// Mn v ti
strncat(s, t, n);
// s = "Nh vua"
// s = "Nh cha"
strcmp(s, t);
strncmp(s, t) ;
strcmpi(s, t) ;
57
// 0 (v s = t)
strupr(s);
// HA NOI
// HA NOI (s cng thnh in hoa)
strlwr(s);
Hm i xu s thnh in thung, kt qu tr li l xu s.
V d:
char s[10] = "Ha Noi" ;
cout << strlwr(s) ;
cout << s ;
// ha noi
// ha noi (s cng thnh in thng)
strlen(s) ;
Hm tr gi tr l di ca xu s.
V d:
char s[10] = "Ha Noi" ;
cout << strlen(s) ;
// 5
// di ti a l 99 k t
// nhp xu s
// chy t u n cui xu
58
cin.getline(s, 100);
int i=0;
while ((t[i] = s[i]) != '\0') i++;
cout << t << endl ;
// nhp xu s
// copy c du kt thc xu '\0'
// nhp xu s
59
getch();
}
} while (solan < 3);
}
III.4.
thun tin trong vic biu din cc loi d liu phc tp nh ma trn hoc cc bng biu c
nhiu ch tiu, C++ a ra kiu d liu mng nhiu chiu. Tuy nhin, vic s dng mng nhiu
chiu rt kh lp trnh v vy trong mc ny chng ta ch bn n mng hai chiu. i vi mng
mt chiu m thnh phn, nu mi thnh phn ca n li l mng mt chiu n phn t th ta gi
mng l hai chiu vi s phn t (hay kch thc) mi chiu l m v n. Ma trn l mt minh ho
cho hnh nh ca mng hai chiu, n gm m dng v n ct, tc cha m x n phn t, v hin nhin
cc phn t ny c cng kiu. Tuy nhin, v mt bn cht mng hai chiu khng phi l mt tp hp
vi m x n phn t cng kiu m l tp hp vi m thnh phn, trong mi thnh phn l mt mng
mt chiu vi n phn t. im nhn mnh ny s c gii thch c th hn trong cc phn trnh
by v con tr ca chng sau.
0
0
1
2
Hnh trn minh ho hnh thc mt mng hai chiu vi 3 dng, 4 ct. Thc cht trong b nh tt c
12 phn t ca mng c sp lin tip theo tng dng ca mng nh minh ho trong hnh di
y.
dng 0
dng 1
dng 2
a. Khai bo
60
Khng s dng cc thao tc trn ton b mng m phi thc hin thng qua tng phn t
ca mng.
V d:
Khai bo 2 ma trn 4 hng 5 ct A, B cha cc s nguyn:
int A[3][4], B[3][4] ;
Khai bo c khi to:
int A[3][4] = { {1,2,3,4}, {3,2,1,4}, {0,1,1,0} };
vi khi to ny ta c ma trn:
1
61
Ghi ch: Khi lm vic vi mng (1 chiu, 2 chiu) do thi quen chng ta thng tnh ch s t 1
(thay v 0), do vy trong mng ta c th b qua hng 0, ct 0 bng cch khai bo s hng v ct tng
ln 1 so vi s hng, ct thc t ca mng v t c th lm vic t hng 1, ct 1 tr i.
V d : Nhn 2 ma trn. Cho 2 ma trn A (m x n) v B (n x p). Tnh ma trn C = A x B, trong C
c kch thc l m x p. Ta lp vng lp tnh tng phn t ca C. Gi tr ca phn t C ti hng i, ct
j chnh l tch v hng ca hng i ma trn A vi ct j ma trn B. trnh nhm ln ta qui c b
cc hng, ct 0 ca cc ma trn A, B, C (tc cc ch s c tnh t 1 tr i).
#include <iostream.h>
#include <iomanip.h>
void main()
{
float A[10][10], B[10], C[10][10] ;
int m, n, p ;
// s hng, ct ca ma trn
int i, j, k ;
// cc ch s trong vng lp
clrscr();
cout << "Nhp s hng v ct ca 2 ma trn: " ; cin >> m >> n >> p;
// Nhp ma trn A
for (i=1; i<=m; i++)
for (j=1; j<=n; j++)
{
cout << "A[" << i << "," << j << "] = " ; cin >> A[i][j] ;
}
// Nhp ma trn B
for (i=1; i<=n; i++)
for (j=1; j<=p; j++)
{
cout << "B[" << i << "," << j << "] = " ; cin >> B[i][j] ;
}
62
// Tnh ma trn C = A x B
for (i=1; i<=m; i++)
for (j=1; j<=p; j++)
{
C[i][j] = 0; for (k=1; k<=n; k++) C[i][j] += A[i][k]*B[k][j] ;
}
// In kt qu
cout << "Ma trn kt qu\n" ;
cout << setiosflags(ios::showpoint) << setprecision(2) ;
for (i=1; i<m; i++)
for (j=1; j<n; j++)
{
if (j==1) cout << endl;
cout << setw(6) << a[i][j] ;
}
}
63
BI TP
Lnh r nhnh
26. Nhp mt k t. Cho bit k t c phi l ch ci hay khng.
27. Nhp vo mt s nguyn. Tr li s nguyn : m hay dng, chn hay l ?
28. Cho n = x = y v bng: a. 1
b. 2
c. 3
d. 4
3x + x
f(x) = x
e +4
b.
x 2 +1
f ( x ) = 3x + 5
2
x + 2 x 1
, x>0
, x0
, x 1
, 1< x <1
, x 1
ax + by = c
dx + ey = f
Lnh lp
36. Gi tr ca i bng bao nhiu sau khi thc hin cu trc for sau:
for (i = 0; i < 100; i++);
37. Gi tr ca x bng bao nhiu sau khi thc hin cu trc for sau:
for (x = 2; i < 10; x+=3) ;
38. Bn b sung g vo lnh for sau:
for ( ; nam < 1997 ; ) ;
khi kt thc nam c gi tr 2000.
39. Bao nhiu k t X c in ra mn hnh khi thc hin on chng trnh sau:
for (x = 0; x < 10; x ++) for (y = 5; y > 0; y --) cout << X;
64
40. Nhp vo tui cha v tui con hin nay sao cho tui cha ln hn 2 ln tui con. Tm xem bao
nhiu nm na tui cha s bng ng 2 ln tui con (v d 30 v 12, sau 6 nm na tui cha l
36 gp i tui con l 18).
41. Nhp s nguyn dng N. Tnh:
c. S1 =
d. S 2 =
1 + 2 + 3 + .. . + N
N
12 + 2 2 + 3 2 + ... + N 2
S2 =
3 + 3 + 3 + .. . + 3
1
2+
n du chia
1
2+
n du cn
1
2+. . .
1
2
1 1
3 5
g. 1 + + + .. . +
1
< 2.101999 .
2n 1
2
1 1 1
1
1
i. S pi theo cng thc Euler:
= 2 + 2 + 2 + ...+ 2 dng lp khi 2 <10 6 .
6 1 2 3
n
n
x1 x 2
xn
xn
j. e theo cng thc: e = 1 + +
+ ... +
dng lp khi
< 10 6 .
1! 2!
n!
n!
x
k. sin x = x
x3 x5
x 2 n +1
x 2 n +1
+ + .. . + ( 1 ) n
, dng lp khi
< 10 6 .
3! 5!
( 2n + 1 )!
( 2n + 1 )!
65
l.
a (a>0)
theo
cng
thc:
n=0
a
sn = 2
( s n 1 + a ) / 2 s n 1 n > 0
dng
khi
s n s n 1 <10 6 .
50. In ra m ca phm bt k c nhn. Chng trnh lp cho n khi nhn ESC thot.
51. Bng phng php chia i, hy tm nghim xp x ( chnh xc 106) ca cc phng trnh
sau:
m. ex 1.5 = 0, trn on [0, 1].
n. x2x 1 = 0, trn on [0, 1].
o. a0xn + a1xn-1 + ... + an = 0, trn on [a, b]. Cc s thc ai, a, b c nhp t bn phm sao
cho f(a) v f(b) tri du.
Mng
52. Nhp vo dy n s thc. Tnh tng dy, trung bnh dy, tng cc s m, dng v tng cc s
v tr chn, v tr l trong dy. Tm phn t gn s trung bnh nht ca dy.
53. Tm v ch ra v tr xut hin u tin ca phn t x trong dy.
54. Nhp vo dy n s. Hy in ra s ln nht, b nht ca dy.
55. Nhp vo dy s. In ra dy c sp xp tng dn, gim dn.
56. Cho dy c sp tng dn. Chn thm vo dy phn t x sao cho dy vn sp xp tng
dn.
57. Hy nhp vo 16 s nguyn. In ra thnh 4 dng, 4 ct.
58. Nhp ma trn A v in ra ma trn i xng ca n.
59. Cho mt ma trn nguyn kch thc m*n. Tnh:
Tng tt c cc phn t ca ma trn.
Tng tt c cc phn t dng ca ma trn.
Tng tt c cc phn t m ca ma trn.
Tng tt c cc phn t chn ca ma trn.
Tng tt c cc phn t l ca ma trn.
60. Cho mt ma trn thc kch thc m*n. Tm:
S nh nht, ln nht (km ch s) ca ma trn.
S nh nht, ln nht (km ch s) ca tng hng ca ma trn.
S nh nht, ln nht (km ch s) ca tng ct ca ma trn.
S nh nht, ln nht (km ch s) ca ng cho chnh ca ma trn.
S nh nht, ln nht (km ch s) ca ng cho ph ca ma trn.
61. Nhp 2 ma trn vung cp n A v B. Tnh A + B, A B, A * B v A2 - B2.
66
Xu k t
62. Hy nhp mt xu k t. In ra mn hnh o ngc ca xu .
63. Nhp xu. Thng k s cc ch s '0', s ch s '1', , s ch s '9' trong xu.
64. In ra v tr k t trng u tin t bn tri (phi) mt xu k t.
65. Nhp xu. In ra tt cc cc v tr ca ch 'a' trong xu v tng s ln xut hin ca n.
66. Nhp xu. Tnh s t c trong xu. In mi dng mt t.
67. Nhp xu h tn, in ra h, tn di dng vit hoa.
68. Thay k t x trong xu s bi k t y (s, x, y c c vo t bn phm)
69. Xo mi k t x c trong xu s (s, x c c vo t bn phm). (Gi : nn xo ngc t cui
xu v u xu).
70. Nhp xu. Khng phn bit vit hoa hay vit thng, hy in ra cc k t c mt trong xu v s
ln xut hin ca n (v d xu Trach Van Doanh c ch a xut hin 3 ln, c(1), d(1),
h(2), n(2), o(1), r(1), t(1), (2), space(4)).
67
CHNG IV.
HM V CHNG TRNH
Con tr v s hc a ch
Hm
qui
T chc chng trnh
CON TR V S HC A CH
IV.1.
Tm li, cn nh:
68
int x;
long y;
// in a ch cc bin x, y
char s[9];
// khai bo mng k t s
cout << a;
// in a ch mng s
// in a ch k t s[2]
650 651
658
\0
x
y
s
Bin x chim 2 byte nh, c a ch l 200, bin y c a ch l 500 v chim 4 byte
nh. Xu s chim 9 byte nh ti a ch 650. Cc byte nh ca mt bin l lin nhau.
Cc php ton lin quan n a ch c gi l s hc a ch. Tuy nhin, chng ta vn khng c
php thao tc trc tip trn cc a ch nh t bin vo a ch ny hay khc (cng vic ny do
chng trnh dch m nhim), hay vic cng, tr hai a ch vi nhau l v ngha Cc thao tc
c php trn a ch vn phi thng qua cc bin trung gian cha a ch, c gi l bin con tr.
IV.1.2. Con tr
a. ngha
69
195
196
197
198
199
200
p
201
202
p+1
Nh vy, php ton tng, gim con tr cho php lm vic thun li trn mng. Nu con tr ang tr
n mng (tc ang cha a ch u tin ca mng), vic tng con tr ln 1 n v s dch chuyn
70
con tr tr n phn t th hai, T ta c th cho con tr chy t u n cui mng bng cch
tng con tr ln tng n v nh trong cu lnh for di y.
V d :
int a[100] = { 1, 2, 3, 4, 5, 6, 7 }, *p, *q;
p = a; cout << *p ;
p += 5; cout << *p ;
q = p - 4 ; cout << *q ;
for (int i=0; i<100; i++) cout << *(p+i) ;
p++, p--, ++p, --p: tng t p+1 v p-1, c ch n tng (gim) trc, sau.
V d : V d sau minh ho kt qu kt hp php t tng gim vi ly gi tr ni con tr tr n. a l
mt mng gm 2 s, p l con tr tr n mng a. Cc lnh di y c qui c l c lp vi
nhau (tc lnh sau khng b nh hng bi lnh trc, i vi mi lnh p lun lun tr n phn t
u (a[0]) ca a.
int a[2] = {3, 7}, *p = a;
(*p)++ ;
// tng (sau) gi tr ni p tr tng a[0] thnh 4
++(*p) ;
// tng (trc) gi tr ni p tr tng a[0] thnh 4
*(p++) ;
// ly gi tr ni p tr (3) v tng tr p (tng sau), p a[1]
*(++p) ;
// tng tr p (tng trc), p a[1] v ly gi tr ni p tr (7)
Ch :
Cc php ton t tng gim cng l mt ngi, mc u tin ca chng l cao hn cc php ton hai
ngi khc v cao hn php ly gi tr (*). C th:
*p++
*++p
++*p
*(p++)
*(++p)
++(*p)
Cc php ton so snh cng c p dng i vi con tr, thc cht l so snh gia a ch ca hai
71
ni c tr bi cc con tr ny. Thng thng cc php so snh <, <=, >, >= ch p dng cho hai
con tr tr n phn t ca cng mt mng d liu no . Thc cht ca php so snh ny chnh l
so snh ch s ca 2 phn t c tr bi 2 con tr .
V d :
float a[100], *p, *q ;
p=a;
// p tr n mng (tc p tr n a[0])
q = &a[3] ;
// q tr n phn t th 3 (a[3]) ca mng
cout << (p < q) ;
// 1
cout << (p + 3 == q) ;
// 1
cout << (p > q - 1) ;
// 0
cout << (p >= q - 2) ;
// 0
for (p=a ; p < a+100; p++) cout << *p ; // in ton b mng a
// cp pht 1 phn t
p = new <kiu>[n] ;
// cp pht n phn t
V d:
int *p ;
p = new int;
p = float int[100] ;
float *p ;
int n ;
cout << "S lng cn cp pht = "; cin >> n;
p = new double[n];
if (p == NULL) {
cout << "Khng b nh" ;
exit(0) ;
}
Ghi ch: lnh exit(0) cho php thot khi chng trnh, s dng lnh ny cn khai
bo file tiu <process.h>.
gii phng b nh cp pht cho mt bin (khi khng cn s dng na) ta s
dng cu lnh delete.
delete p ;
v gii phng ton b mng c cp php thng qua con tr p ta dng cu lnh:
delete[] p ;
// p l con tr tr n mng
Vic cho con tr tr n mng cng tng t tr n cc bin khc, tc gn a ch ca mng (chnh
l tn mng) cho con tr. Ch rng a ch ca mng cng l a ch ca thnh phn th 0 nn a+i
s l a ch thnh phn th i ca mng. Tng t, nu p tr n mng a th p+i l a ch thnh
phn th i ca mng a v do *(p+i) = a[i] = *(a+i).
73
Ch khi vit *(p+1) = *(a+1) ta thy vai tr ca p v a trong biu thc ny l nh nhau, cng truy
cp n gi tr ca phn t a[1]. Tuy nhin khi vit *(p++) th li khc vi *(a++), c th vit p++ l
hp l cn a++ l khng c php. L do l tuy p v a cng th hin a ch ca mng a nhng p
thc s l mt bin, n c th thay i c gi tr cn a l mt hng, gi tr khng c php thay
i. V d vit x = 3 v sau c th tng x bi x++ nhng khng th vit x = 3++.
V d : In ton b mng thng qua con tr.
int a[5] = {1,2,3,4,5}, *p, i;
1: p = a; for (i=1; i<=5; i++) cout << *(p+i);
// p khng thay i
// thay i p
hoc:
Trong phng n 1, con tr p khng thay i trong sut qu trnh lm vic ca lnh for, truy
nhp n phn t th i ca mng a ta s dng c php *(p+i).
i vi phng n 2 con tr s dch chuyn dc theo mng a bt u t a ch a (phn t u tin)
n phn t cui cng. Ti bc th i, p s tr vo phn t a[i], do ta ch cn in gi tr *p.
kim tra khi no p t n phn t cui cng, ta c th so snh p vi a ch cui mng chnh l a
ch u mng cng thm s phn t trong a v tr 1 (tc a+4 trong v d trn).
b. Con tr v xu k t
t=s;
nhng:
char *s = new char[30], *t ;
strcpy(s, "Hello") ;
t = new char[30];
// trong trng hp ny phi cp b nh cho t v
strcpy(t, s) ;
// c ch strcpy sao chp sang ni dung ca s.
c. Con tr v mng hai chiu
d hiu vic s dng con tr tr n mng hai chiu, chng ta nhc li v mng 2 chiu thng
qua v d. Gi s ta c khai bo:
74
a+1
tuy nhin a khng c xem l mng 1 chiu vi 6 phn t m c quan nim nh mng mt
chiu gm 2 phn t, mi phn t l 1 b 3 s thc. Do a ch ca mng a chnh l a ch ca
phn t u tin a[0][0], v a+1 khng phi l a ch ca phn t tip theo a[0][1] m l a ch ca
phn t a[1][0]. Ni cch khc a+1 cng l tng a ch ca a ln mt thnh phn, nhng 1 thnh
phn y c hiu l ton b mt dng ca mng.
Mt khc, vic ly a ch ca tng phn t (float) trong a thng l khng chnh xc. V d: vit
&a[i][j] (a ch ca phn t dng i ct j) l c i vi mng nguyn nhng li khng ng i
vi mng thc.
T cc tho lun trn, php gn p = a l d gy nhm ln v p l con tr float cn a l a ch mng
(1 chiu). Do vy trc khi gn ta cn p kiu ca a v kiu float. Tm li cch gn a ch ca a
cho con tr p c thc hin nh sau:
Cch sai:
p=a;
Cc cch ng:
p = (float*)a;
p = a[0];
p = &a[0][0];
hoc
T truy nhp n phn t a[i][j] thng qua con tr p ta nn s dng cch vit sau:
p = (float*)a;
cin >> *(p+i*n+j) ;
cout << *(p+i*n+j);
V d sau y cho php nhp v in mt mng 2 chiu m*n (m dng, n ct) thng qua
con tr p. Nhp lin tip m*n s vo mng v in thnh ma trn m dng, n ct.
void main()
{
75
Ch : vic ly a ch phn t a[i][j] ca mng thc a l khng chnh xc. Tc: vit p = &a[i][j] c
th dn n kt qu sai.
IV.1.6. Mng con tr
a. Khi nim chung
L trng hp ring ca mng con tr ni chung, trong kiu c th l char. Mi thnh phn
mng l mt con tr tr n mt xu k t, c ngha cc thao tc tin hnh trn *a[i] nh i vi mt
xu k t.
V d : Nhp vo v in ra mt bi th.
void main()
{
char *dong[100];
// khai bo 100 con tr k t (100 dng)
int i, n;
cout << "so dong = "; cin >> n ; // nhp s dng thc s
cin.ignore();
// loi du trong lnh cin trn
for (i=0; i<n; i++)
{
dong[i] = new char[80];
// cp b nh cho dng i
cin.getline(dong[i],80);
// nhp dng i
}
for (i=0; i<n; i++) cout << dong[i] << endl; // in kt qu
76
IV.2.
HM
Hm l mt chng trnh con trong chng trnh ln. Hm nhn (hoc khng) cc i s v tr li
(hoc khng) mt gi tr cho chng trnh gi n. Trong trng hp khng tr li gi tr, hm hot
ng nh mt th tc trong cc NNLT khc. Mt chng trnh l tp cc hm, trong c mt hm
chnh vi tn gi main(), khi chy chng trnh, hm main() s c chy u tin v gi n hm
khc. Kt thc hm main() cng l kt thc chng trnh.
Hm gip cho vic phn on chng trnh thnh nhng mun ring r, hot ng c lp vi ng
ngha ca chng trnh ln, c ngha mt hm c th c s dng trong chng trnh ny m cng
c th c s dng trong chng trnh khc, d cho vic kim tra v bo tr chng trnh. Hm c
mt s c trng:
C 3 cch truyn gi tr: Truyn theo tham tr, tham bin v tham tr.
IV.2.1. Khai bo v nh ngha hm
a. Khai bo
Mt hm thng lm chc nng: tnh ton trn cc tham i v cho li gi tr kt qu, hoc ch n
thun thc hin mt chc nng no , khng tr li kt qu tnh ton. Thng thng kiu ca gi
tr tr li c gi l kiu ca hm. Cc hm thng c khai bo u chng trnh. Cc hm
vit sn c khai bo trong cc file nguyn mu *.h. Do , s dng c cc hm ny, cn c
ch th #include <*.h> ngay u chng trnh, trong *.h l tn file c th c cha khai bo ca
cc hm c s dng (v d s dng cc hm ton hc ta cn khai bo file nguyn mu math.h).
i vi cc hm do NSD t vit, cng cn phi khai bo. Khai bo mt hm nh sau:
<kiu gi tr tr li> <tn hm>(d/s kiu i) ;
Thng thng chng trnh c r rng chng ta nn trnh lm dng cc ngm nh. V d
trong khai bo cong(int, int); nn khai bo r c kiu hm (trong trng hp ny kiu hm ngm
nh l int) nh sau : int cong(int, int);
b. nh ngha hm
77
Hm c tr v gi tr
dy lnh ca hm ;
return (biu thc tr v);
// c th nm u trong dy lnh.
}
Danh sch tham i hnh thc cn c gi ngn gn l danh sch i gm dy cc i
cch nhau bi du phy, i c th l mt bin thng, bin tham chiu hoc bin con tr,
hai loi bin sau ta s trnh by trong cc phn ti. Mi i c khai bo ging nh khai
bo bin, tc l cp gm <kiu i> <tn i>.
Vi hm c tr li gi tr cn c cu lnh return km theo sau l mt biu thc. Kiu ca
gi tr biu thc ny chnh l kiu ca hm c khai bo phn tn hm. Cu lnh
return c th nm v tr bt k trong phn cu lnh, tu thuc mc ch ca hm. Khi
gp cu lnh return chng trnh tc khc thot khi hm v tr li gi tr ca biu thc
sau return nh gi tr ca hm.
V d : V d sau nh ngha hm tnh lu tha n (vi n nguyn) ca mt s thc bt k. Hm ny c
hai u vo (i thc x v s m nguyn n) v u ra (gi tr tr li) kiu thc vi chnh xc gp
i l xn.
double luythua(float x, int n)
{
int i ;
double kq = 1 ;
for (i=1; i<=n; i++) kq *= x ;
return kq;
}
// bin ch s
// lu kt qu
Hm khng tr v gi tr
Hm main() thng thng c hoc khng c gi tr tr v cho h iu hnh khi chng trnh chy
xong, v vy ta thng khai bo kiu hm l int main() hoc void main() v cu lnh cui cng
trong hm thng l return 1 hoc return. Trng hp b qua t kho void nhng trong thn hm
khng c cu lnh return (ging phn ln v d trong gio trnh ny) chng trnh s ngm hiu
78
Danh sch i trong khai bo hm c th cha hoc khng cha tn i, thng thng ta
ch khai bo kiu i ch khng cn khai bo tn i, trong khi dng u tin ca nh
ngha hm phi c tn i y .
Cui khai bo hm phi c du chm phy (;), trong khi cui dng u tin ca nh ngha
hm khng c du chm phy.
79
// xo mn hnh n ln
void main()
// tnh gi tr 2x3 - 5x2 - 4x + 1
{
float x ;
// tn bin c th trng vi i ca hm
double f ;
// lu kt qu
cout << "x = " ; cin >> x
f = 2*luythua(x,3) - 5*luythua(x,2) - 4*x + 1;
xmh(100);
// xo tht sch mn hnh 100 ln
cout << setprecision(2) << f << endl ;
}
80
// v ng thng AB
// v tam gic ABC
// v t gic ABCD
K thut chng tn ny cn p dng c cho cc ton t. Trong phn lp trnh hng i tng, ta s
thy NSD c php nh ngha cc ton t mi nhng vn ly tn c nh +, -, *, /
IV.2.5. Bin, i tham chiu
Mt bin c th c gn cho mt b danh mi, v khi ch no xut hin bin th cng tng
ng nh dng b danh v ngc li. Mt b danh nh vy c gi l mt bin tham chiu,
ngha thc t ca n l cho php "tham chiu" ti mt bin khc cng kiu ca n, tc s dng bin
khc nhng bng tn ca bin tham chiu.
Ging khai bo bin bnh thng, tuy nhin trc tn bin ta thm du v (&). C th tm phn
bin thnh 3 loi: bin thng vi tn thng, bin con tr vi du * trc tn v bin tham chiu
vi du &.
<kiu bin> &<tn bin tham chiu> = <tn bin c tham chiu>;
C php khai bo ny cho php ta to ra mt bin tham chiu mi v cho n tham chiu n bin
c tham chiu (cng kiu v phi c khai bo t trc). Khi bin tham chiu cn c gi
l b danh ca bin c tham chiu. Ch khng c c php khai bo ch tn bin tham chiu m
khng km theo khi to.
82
V d:
int hung, dung ;
int &ti = hung;
int &teo = dung;
// 7
in ra gi tr 7 nhng thc cht y khng phi l ni dung ca bin teo, ni dung ca teo l a ch
ca dung, khi cn in teo, chng trnh s tham chiu n dung v in ra ni dung ca dung (7). Cc
hot ng khc trn teo cng vy (v d teo++), thc cht l tng mt n v ni dung ca dung
(ch khng phi ca teo). T cch t chc ca bin tham chiu ta thy chng ging con tr nhng
thun li hn ch khi truy cp n gi tr ca bin c tham chiu (dung) ta ch cn ghi tn bin
tham chiu (teo) ch khng cn thm ton t (*) trc nh trng hp dng con tr. im khc
bit ny c ch khi c s dng truyn i cho cc hm vi mc ch lm thay i ni dung ca
bin ngoi. T tng ny c trnh by r rng hn trong mc 6 ca chng.
Ch :
Tuy ging con tr nhng khng dng c cc php ton con tr cho bin tham chiu.
Ni chung ch nn dng trong truyn i cho hm.
IV.2.6. Cc cch truyn tham i
C 3 cch truyn tham i thc s cho cc tham i hnh thc trong li gi hm. Trong cch ta
dng cho n thi im hin nay c gi l truyn theo tham tr, tc cc i hnh thc s nhn
cc gi tr c th t li gi hm v tin hnh tnh ton ri tr li gi tr. d hiu cc cch truyn
i chng ta s xem qua cch thc chng trnh thc hin vi cc i khi thc hin hm.
a. Truyn theo tham tr
83
// 2, 5 (x, y vn khng i)
Thc s sau khi chy xong chng trnh ta thy gi tr ca x v y vn khng thay i
!?.
Nh gii thch trong mc trn (gi hm luythua), vic u tin khi chng trnh thc hin mt
hm l to ra cc bin mi (cc nh mi, c lp vi cc nh x, y c sn) tng ng vi cc
tham i, trong trng hp ny cng c tn l x, y v gn ni dung ca x, y (ngoi hm) cho x, y
(mi). V vic cui cng ca chng trnh sau khi thc hin xong hm l xo cc bin mi ny. Do
vy ni dung ca cc bin mi thc s l c thay i, nhng khng nh hng g n cc bin x, y
c. Hnh v di y minh ho cch lm vic ca hm swap, trc, trong v sau khi gi hm.
Trc
84
Trong
Sau
x'
y'
Cc bin tm b
xo khi chy xong
hm
Nh vy hm swap cn c vit li sao cho vic thay i gi tr khng thc hin trn cc bin tm
m phi thc s thc hin trn cc bin ngoi. Mun vy thay v truyn gi tr ca cc bin ngoi
cho i, by gi ta s truyn a ch ca n cho i, v cc thay i s phi thc hin trn ni dung
ca cc a ch ny. chnh l l do ta phi s dng con tr lm tham i thay cho bin
thng. C th hm swap c vit li nh sau:
void swap(int *p, int *q)
{
int t;
t = *p ;
*p = *q ;
*q = t ;
}
// khai bo bin tm t
// t gi tr ca t bng ni dung ni p tr ti
// thay ni dung ni p tr bng ni dung ni q tr
// thay ni dung ni q tr ti bng ni dung ca t
Ngoi hm swap trnh by, y ta a thm v d thy s cn thit phi c hm cho php
thay i bin ngoi. V d hm gii phng trnh bc 2 rt hay gp trong cc bi ton khoa hc k
thut. Tc cho trc 3 s a, b, c nh 3 h s ca phng trnh, cn tm 2 nghim x1, x2 ca n.
Khng th ly gi tr tr li ca hm lm nghim v gi tr tr li ch c 1 trong khi ta cn n 2
nghim. Do vy ta cn khai bo 2 bin "ngoi" trong chng trnh cha cc nghim, v hm phi
lm thay i 2 bin ny (tc cha gi tr nghim gii c). Nh vy hm c vit cn phi c 5
i, trong 3 i a, b, c i din cho cc h s, khng thay i v 2 bin x1, x2 i din cho
nghim, 2 i ny phi c khai bo dng con tr. Ngoi ra, phng trnh c th v nghim, 1
nghim hoc 2 nghim do vy hm s tr li gi tr l s nghim ca phng trnh, trong trng hp
1 nghim (nghim kp), gi tr nghim s c cho vo x1.
V d : Di y l mt dng n gin ca hm gii phng trnh bc 2.
int gptb2(float a, float b, float c, float *p, float *q)
{
float d ;
// cha
d = (b*b) - 4*a*c ;
85
if (d < 0) return 0 ;
else if (d == 0) { *p = -b/(2*a) ; return 1 ; }
else {
*p = (-b + sqrt(d))/(2*a) ;
*q = (-b - sqrt(d))/(2*a) ;
return 2 ;
}
}
Trn y chng ta trnh by cch xy dng cc hm cho php thay i gi tr ca bin ngoi. Mt
c trng d nhn thy l cch vit hm tng i phc tp. Do vy C++ pht trin mt cch vit
khc da trn i tham chiu v vic truyn i cho hm c gi l truyn theo tham chiu.
c. Truyn theo tham chiu
86
i vi dn tr).
Tm li, i vi hm vit theo tham chiu ch thay i i (l cc tham chiu) cn li mi ni
khc u vit n gin nh cch vit truyn theo tham tr.
V d : i gi tr 2 bin
void swap(int &x, int &y)
{
int t = x; x = y; y = t;
}
Tham chiu
Dn tr
Khai bo i
void swap(int &x, int &y) void swap(int *x, int *y)
Cu lnh
t = x; x = y; y = t;
t = x; x = y; y = t;
t = *x; *x = *y; *y = t;
Li gi
swap(a, b);
swap(a, b);
swap(&a, &b);
Tc dng
a, b khng thay i
a, b c thay i
a, b c thay i
Thng thng chng ta hay xy dng cc hm lm vic trn mng nh vect hay ma trn cc phn
t. Khi tham i thc s ca hm s l cc mng d liu ny. Trong trng hp ny ta c 2 cch
khai bo i. Cch th nht i c khai bo bnh thng nh khai bo bin mng nhng khng
cn c s phn t km theo, v d:
int x[];
float x[];
Cch th hai khai bo i nh mt con tr kiu phn t mng, v d:
int *p;
float *p
// n: s phn t
87
{
int i;
for (i=0; i<n; i++) cin >> x[i];
}
void in(int *p, int n)
{
int i;
for (i=0; i<n; i++) cout << *(p+i);
}
void main()
{
int a[10] ;
nhap(a,7);
in(a,3);
}
k = *(p + i*n + j)
i = k/n
j = k%n
88
float t = 0;
int i, j ;
for (i=0; i<m; i++)
for (j=0; j<n; j++) t += x[i][j] ;
return t;
}
void main()
{
float a[8][10], b[5][7] ;
int i, j, ma, na, mb, nb;
cout << "nhp s dng, s ct ma trn a: " ; cin >> ma >> na;
for (i=0; i<ma; i++)
// nhp ma trn a
for (j=0; j<na; j++)
{ cout << "a[" << i << "," << j << "] = " ; cin >> a[i][j] ; }
cout << "nhp s dng, s ct ma trn b: " ; cin >> mb >> nb;
for (i=0; i<mb; i++)
// nhp ma trn b
for (j=0; j<nb; j++)
{ cout << "b[" << i << "," << j << "] = " ; cin >> b[i][j] ; }
cout << tong(a, ma, na);
// in tng cc s trong ma trn
cout << tong(b, mb, nb);
// sai v s ct ca b khc 10
}
89
Xu hng chung l chng ta xem mng (1 hoc 2 chiu) nh l mt dy lin tip cc s trong b
nh, tc mt ma trn l mt i con tr tr n thnh phn ca mng. i vi mng 2 chiu m*n
khi truyn i a ch ca ma trn cn phi p kiu v kiu con tr. Ngoi ra bc chy k ca con
tr (t 0 n m*n-1) tng ng vi cc to ca phn t a[i][j] trong mng nh sau:
k = *(p + i*n + j)
i = k/n
j = k%n
90
// n s phn t ca vect
// xin cp pht b nh
91
return c;
}
void main()
{
int i, n, a[10], b[10], c[10] ;
cout << "n = " ; cin >> n;
for (i=0; i<n; i++) cin >> a[i] ;
for (i=0; i<n; i++) cin >> b[i] ;
c = congvt(a, b, n);
for (i=0; i<n; i++) cout << c[i] ;
}
// nhp s phn t
// nhp vect a
// nhp vect b
// in kt qu
// z lu kt qu
// nhp s phn t
// nhp vect a
// nhp vect b
// in kt qu
V d : Nhn 2 ma trn kch thc m*n v n*p. Hai ma trn u vo v ma trn kt qu (kch thc
m*p) u c khai bo di dng con tr v l i ca hm nhanmt(). Nhc li, trong li gi hm
a ch ca 3 mng cn c p kiu v (int*) ph hp vi cc con tr tham i.
void nhanmt(int *x, int *y, int *z, int m, int n, int p)
// z lu kt qu
{
int i, j, k ;
for (i=0; i<m; i++)
for (j=0; j<p; j++)
{
*(z+i*p+j) = 0;
// tc z[i][j] = 0
for (k=0; k<n; k++)
*(z+i*p+j) += *(x+i*n+k)**(y+k*p+j) ; // tc z[i][j] += x[i][k]*y[k][j]
92
}
}
void main()
{
int a[10][10], b[10][10], c[10][10] ;
// khai bo 3 mng a, b, c
int m, n, p ;
// kch thc cc mng
cout << "m, n, p = " ; cin >> m >> n >> p ;
// nhp s phn t
for (i=0; i<m; i++)
// nhp ma trn a
for (j=0; j<n; j++) {
cout << "a[" << i << "," << j << "] = " ;
cin >> a[i][j] ; }
for (i=0; i<n; i++)
// nhp ma trn b
for (j=0; j<p; j++) {
cout << "b[" << i << "," << j << "] = " ; cin >> b[i][j] ; }
nhanmt((int*)a, (int*)b, (int*)c, m, n, p);
// gi hm
for (i=0; i<m; i++)
// in kt qu
{
for (j=0; j<p; j++) cout << c[i][j] ;
cout << endl;
}
}
d. i v gi tr tr li l xu k t
// hm tr li h
// cp b nh cha h
// i dng ti du cch u tin
// copy i k t ca hoten vo kq
// hm tr li tn
// cp b nh cha tn
93
int i=strlen(hoten);
while (hoten[i] != '\40') i--;
// i dng ti du cch cui cng
strncpy(kq, hoten+i+1, strlen(hoten)-i-1) ;
// copy tn vo kq
return kq;
}
void tachht(char* hoten, char* ho, char* ten)
{
int i=0;
while (hoten[i] != '\40') i++;
// i dng ti du cch u tin
strncpy(ho, hoten, i) ;
// copy i k t ca hoten vo ho
i=strlen(hoten);
while (hoten[i] != '\40') i--;
// i dng ti du cch cui cng
strncpy(ten, hoten+i+1, strlen(hoten)-i-1) ; // copy tn vo ten
}
void main()
{
char ht[30], *h, *t ;
// cc bin h tn, h, tn
cout << "H v tn = " ; cin.getline(ht,30) ; // nhp h tn
h = ho(ht); t = ten(ht);
cout << "H = " << h << ", tn = " << t << endl;
tachht(ht, h, t);
cout << "H = " << h << ", tn = " << t << endl;
}
e. i l hng con tr
Theo phn truyn i cho hm ta bit thay i bin ngoi i tng ng phi c khai bo
di dng con tr. Tuy nhin, trong nhiu trng hp cc bin ngoi khng c nhu cu thay i
nhng i tng ng vi n vn phi khai bo di dng con tr (v d i l mng hoc xu k t).
iu ny c kh nng do nhm ln, cc bin ngoi ny s b thay i ngoi mun. Trong trng
hp nh vy cn thn, cc i con tr nu khng mun thay i (ch ly gi tr) cn c khai
bo nh l mt hng con tr bng cch thm trc khai bo kiu ca chng t kho const. T kho
ny khng nh bin tuy l con tr nhng n l mt hng khng thay i c gi tr. Nu trong
thn hm ta c tnh thay i chng th chng trnh s bo li. V d i hoten trong c 3 hm
trn c th c khai bo dng const char* hoten.
V d : i l hng con tr. In hoa mt xu k t
void inhoa(const char* s)
{
char *t;
strcpy(t, s);
cout << s << strupr(t);
}
void main()
{
char *s = "abcde" ;
inhoa(s);
94
// abcdeABCDE
IV.2.8. Con tr hm
Mt hm (tp hp cc lnh) cng ging nh d liu: c tn gi , c a ch lu trong b nh v c
th truy nhp n hm thng qua tn gi hoc a ch ca n. truy nhp (gi hm) thng qua a
ch chng ta phi khai bo mt con tr cha a ch ny v sau gi hm bng cch gi tn con
tr.
a. Khai bo
// khai bo con tr hm c tn l f tr n hm
// c mt tham i kiu int v cho gi tr kiu float.
void (*f)(float, int);// con tr tr n hm vi cp i (float, int).
Mt con tr hm cng ging nh cc con tr, c php khi to trong khi khai bo hoc gn vi
mt a ch hm c th sau khi khai bo. Cng ging nh kiu d liu mng, tn hm chnh l mt
hng a ch tr n bn thn n. Do vy c php ca khi to cng nh php gn l nh sau:
bin con tr hm = tn hm;
trong f v tn hm c tr phi ging nhau v kiu tr li v danh sch i. Ni cch khc vi
mc ch s dng con tr f tr n hm (lp hm) no th f phi c khai bo vi kiu tr li v
danh sch i ging nh hm . V d:
float luythua(float, int);
float (*f)(float, int);
f = luythua;
// khai bo hm lu tha
// khai bo con tr f tng thch vi hm luythua
// cho f tr n hm lu tha
c. S dng con tr hm
// hm tr li x2
95
return x*x;
}
void main()
{
float (*f)(float);
f = bphuong;
cout << "Bnh phng ca 3.5 l " << f(3.5) ;
}
96
d sau minh ho cch s dng ny. Trong v d chng ta xy dng 4 hm cng, tr, nhn, chia 2 s
thc. Cc hm ny ging nhau v kiu, s lng i, Chng ta c th s dng 4 con tr hm
ring bit tr n cc hm ny hoc cng c th dng mng 4 con tr tr n cc hm ny.
Chng trnh s in ra kt qu cng, tr, nhn, chia ca 2 s nhp vo t bn phm.
V d :
void cong(int a, int b)
{ cout << a << " + " << b << " = " << a+b ; }
void tru(int a, int b)
{ cout << a << " - " << b << " = " << a-b ; }
void nhan(int a, int b)
{ cout << a << " x " << b << " = " << a*b ; }
void chia(int a, int b)
{ cout << a << ": " << b << " = " << a/b ; }
void main()
{
void (*f[4])(int, int) = {cong, tru, nhan, chia}; //khai bo, khi to 4 con tr
int m, n;
cout <<"Nhp m, n " ; cin >> m >> n ;
for (int i=0; i<4; i++) f[i](m,n);
}
IV.3.
QUI
Mt khc, n! giai tha cng c tnh thng qua (n-1)! bi cng thc truy hi
n! = 1
n! = (n-1)!n
nu n = 0
nu n > 0
97
int n;
cout << "n = " ; cin >> n;
cout << gt(n);
}
Trong hm main() gi s ta nhp 3 cho n, khi thc hin cu lnh cout << gt(3) in 3! u
tin chng trnh s gi chy hm gt(3). Do 3 0 nn hm gt(3) s tr li gi tr gt(2)*3, tc li gi
hm gt vi tham i thc s bc ny l n = 2. Tng t gt(2) = gt(1)*2 v gt(1) = gt(0)*1. Khi
thc hin gt(0) ta c i n = 0 nn hm tr li gi tr 1, t gt(1) = 1*1 = 1 v suy ngc tr li ta
c gt(2) = gt(1)*2 = 1*2 = 2, gt(3) = gt(2)*3 = 2*3 = 6, chng trnh in ra kt qu 6.
T v d trn ta thy hm qui c c im:
Chng trnh vit rt gn,
Vic thc hin gi i gi li hm rt nhiu ln ph thuc vo ln ca u vo. Chng
hn trong v d trn hm c gi n ln, mi ln nh vy chng trnh s mt thi gian
lu gi cc thng tin ca hm gi trc khi chuyn iu khin n thc hin hm c
gi. Mt khc cc thng tin ny c lu tr nhiu ln trong ngn xp s dn n trn
ngn xp nu n ln.
Tuy nhin, qui l cch vit rt gn, d vit v c chng trnh, mt khc c nhiu bi ton hu
nh tm mt thut ton lp cho n l rt kh trong khi vit theo thut ton qui th li rt d dng.
IV.3.2. Lp cc bi ton gii c bng qui
Phng php qui thng c dng gii cc bi ton c c im:
Gii quyt c d dng trong cc trng hp ring gi l trng hp suy bin hay c s,
trong trng hp ny hm c tnh bnh thng m khng cn gi li chnh n,
i vi trng hp tng qut, bi ton c th gii c bng bi ton cng dng nhng
vi tham i khc c kch thc nh hn tham i ban u. V sau mt s bc hu hn
bin i cng dng, bi ton a c v trng hp suy bin.
Nh vy trong trng hp tnh n! nu n = 0 hm cho ngay gi tr 1 m khng cn phi gi li chnh
n, y chnh l trng hp suy bin. Trng hp n > 0 hm s gi li chnh n nhng vi n gim 1
n v. Vic gi ny c lp li cho n khi n = 0.
Mt lp rt rng ca bi ton dng ny l cc bi ton c th nh ngha c di dng qui nh
cc bi ton lp vi s bc hu hn bit trc, cc bi ton UCLN, thp H Ni, ...
IV.3.3. Cu trc chung ca hm qui
Dng thc chung ca mt chng trnh qui thng nh sau:
if (trng hp suy bin)
{
trnh by cch gii
// gi nh c cch gii
}
else
// trng hp tng qut
{
gi li hm vi tham i "b" hn
}
98
Cc v d
V d : Tm UCLN ca 2 s a, b. Bi ton c th c nh ngha di dng qui nh sau:
nu a = b th UCLN = a
nu a > b th UCLN(a, b) = UCLN(a-b, b)
nu a < b th UCLN(a, b) = UCLN(a, b-a)
T ta c chng trnh qui tnh UCLN ca a v b nh sau.
int UCLN(int a, int b)
{
if (a < b) UCLN(a, b-a);
if (a == b) return a;
if (a > b) UCLN(a-b, b);
}
IV.4.
// hm tr gi tr xn
99
}
void xmh(int n)
{
int i;
for (i=1; i<=n; i++) clrscr();
}
void main()
{
float x; int n;
cout << "Nhp x v n: "; cin >> x >> n;
xmh(5);
cout << luythua(x, n);
}
// xo mn hnh n ln
// xo mn hnh 5 ln
// in xn
Qua v d trn ta thy cc bin i, i n c khai bo trong hai hm: luythua() v xmh(). kq c
khai bo trong luythua v main(), ngoi ra cc bin x v n trng vi i ca hm luythua(). Tuy
nhin, tt c khai bo trn u hp l v u c xem nh khc nhau. C th gii thch nh sau:
Tt c cc bin trn u cc b trong hm n c khai bo.
x v n trong main() c thi gian hot ng di nht: trong sut qu trnh chy chng
trnh. Chng ch mt i khi chng trnh chm dt. i x v n trong luythua() ch tm thi
c to ra khi hm luythua() c gi n v c lp vi x, n trong main(), ni cch
khc ti thi im trong b nh c hai bin x v hai bin n. Khi hm luythua chay xong
bin x v n ca n t ng bin mt.
Tng t 2 i n, 2 bin i trong luythua() v xo mn hnh cng c lp vi nhau, chng
ch c to v tn ti trong thi gian hm ca chng c gi v hot ng.
b. Bin ngoi
100
// xo mn hnh 5 ln
// in xn
Trong v d ny ta thy cc bin x, n, i u l cc bin ngoi. Khi ta mun s dng bin ngoi v d
i, th bin i s khng c khai bo trong hm s dng n. Chng hn, luythua() v xmh() u s
dng i cho vng lp for ca mnh v n khng c khai bo li trong 2 hm ny. Cc i x v n
trong luythua() l c lp vi bin ngoi x v n. Trong luythua() khi s dng n x v n (v d cu
lnh kq *= x) th y l x ca hm ch khng phi bin ngoi, trong khi trong main() khng c khai
bo v x v n nn v d cu lnh cout << luythua(x, n); l s dng x, n ca bin ngoi.
Ni chung trong 2 v d trn chng trnh u chy tt v nh nhau. Tuy nhin, vic khai bo khc
nhau nh vy c nh hng hoc gy nhm ln g cho ngi lp trnh ? Liu chng ta c nn t t
ra mt nguyn tc no trong khai bo bin ngoi v bin cc b trnh nhng nhm ln c th
xy ra. Chng ta hy xt tip cng v d trn nhng thay i mt s khai bo v tnh 23 (c th b
bt bin n) nh sau:
#include <iostream.h>
#include <iomanip.h>
float x; int i ;
float luythua(float x, int n)
{
float kq = 1;
for (i=1; i<=n; i++) kq *= x;
}
// khng dng n
void xmh()
{
for (i=1; i<=n; i++) clrscr();
}
void main()
{
x = 2;
i = 3;
101
xmh(5);
cout << luythua(x, i);
// xo mn hnh 5 ln
// in xi, kt qu x = 23 = 8 ?
vi cc bin mang tnh cht s dng chung r nt (c bit vi nhng bin kch thc
ln) m nhiu hm cng s dng chng vi mc ch ging nhau th nn khai bo chng
nh bin ngoi. iu ny tit kim c thi gian cho ngi lp trnh v khng phi khai
bo chng nhiu ln trong nhiu hm, tit kim b nh v khng phi to chng tm thi
mi khi chy cc hm, tit kim c thi gian chy chng trnh v khng phi t chc
b nh lu tr v gii phng chng. V d trong chng trnh qun l sinh vin
(chng 6), bin sinh vin c dng chung v thng nht trong hu ht cc hm (xem,
xo, sa, b sung, thng k ) nn c th khai bo chng nh bin ngoi, iu ny cng
tng tnh thng nht ca chng trnh (mi bin sinh vin l nh nhau cho mi hm con
ca chng trnh).
Tm li, nguyn tc tng qut nht l c gng to hm mt cch c lp, khp kn, khng chu nh
hng ca cc hm khc v khng gy nh hng n hot ng ca cc hm khc n mc c th.
IV.4.2. Bin vi mc ch c bit
a. Bin hng v t kho const
s dng hng c th khai bo thm t kho const trc khai bo bin. Phm vi v min tc dng
cng nh bin, c ngha bin hng cng c th dng cc b hoc ton th. Bin hng lun lun
102
c khi to trc.
C th khai bo t kho const trc cc tham i hnh thc khng cho php thay i gi tr ca
cc bin ngoi (c bit i vi vi mng v xu k t, v bn thn cc bin ny c xem nh con
tr do hm c th thay i c gi tr ca cc bin ngoi truyn cho hm ny).
V d sau th hin hng cng c th c khai bo cc phm vi khc nhau.
const int MAX = 30;
void vidu(const int *p)
{
const MAX = 10;
}
void main()
{
const MAX = 5;
// ton th
// cc b
// cc b
// cc b
Trong Turbo C, BorlandC v cc chng trnh dch khc c nhiu hng s khai bo sn trong tp tin
values.h nh MAXINT, M_PI hoc cc hng ho trong graphics.h nh WHITE, RED,
b. Bin tnh v t kho static
c khai bo bng t kho static. L bin cc b nhng vn gi gi tr sau khi ra khi hm. Phm
vi tc dng nh bin cc b, ngha l n ch c s dng trong hm khai bo n. Tuy nhin thi
gian tc dng c xem nh bin ton th, tc sau khi hm thc hin xong bin vn cn tn ti v
vn lu li gi tr sau khi ra khi hm. Gi tr ny ny c tip tc s dng khi hm c gi li,
tc bin static ch c khi u mt ln trong ln chy hm u tin. Nu khng khi to, C++ t
ng gn gi tr 0 (ngm nh = 0). V d:
int i = 1;
void bp()
{
static int lanthu = 0;
lanthu++;
i = 2 * i;
cout << "Hm chy ln th " << lanthu << ", i = " << i ;
}
void main()
{
ham();
ham();
ham();
// Hm chy ln th 1, i = 1
// Hm chy ln th 2, i = 2
// Hm chy ln th 3, i = 4
103
tng tc tnh ton C++ cho php mt s bin c t trc tip vo thanh ghi thay v b
nh. Khai bo bng t kho register ng trc khai bo bin. Tuy nhin khai bo ny ch c tc
dng i vi cc bin c kch thc nh nh bin char, int.
V d: register char c; register int dem;
d. Bin ngoi v t kho extern
Nh bit mt chng trnh c th c t trn nhiu file vn bn khc nhau. Mt bin khng
th c khai bo nhiu ln vi cng phm vi hot ng. Do vy nu mt hm s dng bin c
khai bo trong file vn bn khc th bin ny phi c khai bo vi t kho extern. T kho ny
cho php chng trnh dch tm v lin kt bin ny t bn ngoi file ang cha bin. Chng ta hy
xt v d gy li sau y v tm phng n khc phc chng.
void in();
void main()
{
int i = 1;
in();
}
void in()
{
cout << i ;
}
Li (c php) v i l bin cc b trong main(), trong in() khng nhn bit i, nu trong hoc
trc in() khai bo thm i th li ng ngha (tc chng trnh in gi tr i khc khng theo
mun ca lp trnh vin).
Gi thit khai bo li nh sau:
void in();
void main() { ... }
int i;
void in() { ... }
cch khai bo ny cng gy li v main() khng nhn bit i. Cui cng main() c th nhn bit i
th i phi c khai bo di dng bin extern. Thng thng trong trng hp ny cch khc phc
hay nht l khai bo trc main() b cc extern (khng cn thit).
Gi thit 2 chng trnh trn nm trong 2 tp tin khc nhau. lin kt (link) bin i gia 2 chng
trnh cn nh ngha tng th i trong mt v khai bo extern trong chng trnh kia.
/* program1.cpp*/
void in();
int i;
void main()
{
i = 1;
in();
}
/* program2.cpp */
void in()
104
{
extern i;
cout << i ;
}
Cho php ghp ni dung cc tp tin c khc vo chng trnh trc khi dch. Cc tp tin cn
ghp thm vo chng trnh thng l cc tp tin cha khai bo nguyn mu ca cc hng, bin,
hm c sn trong C hoc cc hm do lp trnh vin t vit. C hai dng vit ch th ny.
1: #include <tp tin>
2: #include ng dn\tp tin
Trc khi dch b tin x l s tm trong chng trnh v thay th bt k v tr xut hin no ca
tn_macro bi xu k t. Ta thng s dng macro nh ngha cc hng hoc thay cm t ny
bng cm t khc d nh hn, v d:
#define then
#define begin {
#define end }
#define MAX 100
#define TRUE 1
105
khi trong chng trnh nu c dng x = max(a, b) th n s c thay bi: x = ((a) > (b) ? (a):
(b))
Ch :
Tn macro phi c vit lin vi du ngoc ca danh sch i. V d khng vit max
(A,B).
#define bp(x) (x*x) vit sai v bp(5) ng nhng bp(a+b) s thnh (a+b*a+b) (tc
a+b+ab).
Cng tng t vit #define max(A,B) (A > B ? A: B) l sai (?) v vy lun lun bao cc
i bi du ngoc.
#define bp(x) ((x)*(x)) vit ng nhng nu gi s lp trnh vin mun tnh bnh phng
ca 2 bng on lnh sau:
int i = 1;
cout << bp(++i);
// 6
Ch th:
bit on lnh gia #if (iu kin ) v #endif ch c dch nu iu kin ng. V d:
const int M = 1;
void main() {
int i = 5;
#if M==1
cout << i ;
#endif
}
hoc:
const int M = 10;
void main() {
int i = 5;
#if M > 8
cout << i+i ;
#else
cout << i*i ;
#endif
}
Ch th #ifdef v #ifndef
Ch th ny bo cho chng trnh dch bit on lnh c c dch hay khng khi mt tn gi
c nh ngha hay cha. #ifdef c hiu l nu tn c nh ngha th dch, cn #ifndef
c hiu l nu tn cha c nh ngha th dch. nh ngha mt tn gi ta dng ch th
#define tn.
Ch th ny c bit c ch khi chn cc tp tin th vin vo s dng. Mt tp tin th vin c th
c chn nhiu ln trong vn bn do vy n c th s c dch nhiu ln, iu ny s gy ra li v
cc bin c khai bo nhiu ln. trnh vic ny, ta cn s dng ch th trn nh v d minh ho
sau: Gi s ta vit sn 2 tp tin th vin l mylib.h v mathfunc.h, trong mylib.h cha hm
max(a,b) tm s ln nht gia 2 s, mathfunc.h cha hm max(a,b,c) tm s ln nht gia 3 s thng
qua s dng hm max(a,b). Do vy mathfunc.h phi c ch th #include mylib.h s dng c
hm max(a,b).
Th vin 1. tn tp tin: MYLIB.H
int max(int a, int b)
{
return (a>b? a: b);
}
107
#include "mathfunc.h"
void main()
{
int a, b, c;
cout << "a, b, c = " ; cin >> a >> b >> c;
cout << max(a,b) << max(b,c) << max(a,c) << max(a,b,c) ;
}
Trc khi dch chng trnh, b tin x l s chn cc th vin vo trong tp tin chnh (cha
main()) trong mylib.h c chn vo 2 ln (mt ln ca tp tin chnh v mt ln ca
mathfunc.h), do vy khi dch chng trnh, C++ s bo li (do hm int max(inta, int b) c khai
bo hai ln). khc phc tnh trng ny trong mylib.h ta thm ch th mi nh sau:
// tp tin mylib.h
#ifndef _MYLIB_
#define _MYLIB_
int max(int a, int b)
{
return (a>b? a: b);
}
#endif
BI TP
Con tr
71. Hy khai bo bin k t ch v con tr kiu k t pc tr vo bin ch. Vit ra cc cch gn gi tr
A cho bin ch.
72. Cho mng nguyn cost. Vit ra cc cch gn gi tr 100 cho phn t th 3 ca mng.
73. Cho p, q l cc con tr cng tr n k t c. t *p = *q + 1. C th khng nh: *q = *p - 1 ?
74. Cho p, q l cc con tr tr n bin nguyn x = 5. t *p = *q + 1; Hi *q ?
75. Cho p, q, r, s l cc con tr tr n bin nguyn x = 10. t *q = *p + 1; *r = *q + 1; *s = *r +
1. Hi gi tr ca bin x ?
76. Chn cu ng nht trong cc cu sau:
A: a ch ca mt bin l s th t ca byte u tin my dnh cho bin .
B: a ch ca mt bin l mt s nguyn.
C: S hc a ch l cc php ton lm vic trn cc s nguyn biu din a ch ca bin
D: a v b ng
108
B: Nu x = y + z th *px = y + z
D: a, b, c ng
80. Cho khai bo float x, y, z, *px, *py; v cc lnh px = &x; py = &y; C th khng nh ?
A: Nu *px = x th *py = y
C: Nu *px = y - z th x = y - z
D: a, b, c ng
Con tr v xu k t
85. Gi s p l mt con tr kiu k t tr n xu "Tin hc". Chn cu ng nht trong cc cu sau:
A: cout << p s in ra dng "Tin hc" B: cout << p s in ra dng "Tin hc"
C: cout << p s in ra ch ci 'T'
D: b v c ng
109
Hy chn cu ng nht:
A: Chng trnh trn l hon chnh B: Cn thay len++ bi ++len
C: Cn thay st++ bi *st++
Hm
91. Chn cu sai trong cc cu sau y:
A: Hm khng tr li gi tr th khng cn khai bo kiu gi tr ca hm.
B: Cc bin c khai bo trong hm l cc b, t xo khi hm thc hin xong
C: Hm khng tr li gi tr s c kiu gi tr ngm nh l void.
D: Hm l n v c lp, khng c khai bo hm lng nhau.
92. Chn cu ng nht trong cc cu sau y:
A: Hm phi c kt thc vi 1 cu lnh return
B: Phi c t nht 1 cu lnh return cho hm
C: Cc cu lnh return c php nm v tr bt k trong thn hm
D: Khng cn khai bo kiu gi tr tr li ca hm nu hm khng c lnh return
93. Chn cu sai trong cc cu sau y:
A: S tham s thc s phi bng s tham s hnh thc trong li gi hm
B: Cc bin cc b trong thn hm c chng trnh dch cp pht b nh
C: Cc tham s hnh thc s c cp pht b nh tm thi khi hm c gi
D: Kiu ca tham s thc s phi bng kiu ca tham s hnh thc tng ng vi n trong li gi
hm
94. thay i gi tr ca tham bin, cc i ca hm cn khai bo di dng:
A: bin bnh thng v tham i c truyn theo gi tr
B: bin con tr v tham i c truyn theo gi tr
C: bin bnh thng v tham i c truyn theo a ch
D: bin tham chiu v tham i c truyn theo gi tr
110
qui
113. Nhp s nguyn dng N. Vit hm qui tnh:
p. S1 =
q. S 2 =
1 + 2 + 3 + .. . + N
N
12 + 2 2 + 3 2 + ... + N 2
S1 = 3 + 3 + 3 + ... + 3
n du cn
111
s.
S2 =
1
2+
n du chia
1
2+
1
2+. . .
1
2
115. Vit hm qui tnh n!. p dng chng trnh con ny tnh t hp chp k theo cng thc truy
hi: C(n, k) = n!/(k! (n-k)!)
116. Vit hm qui tnh s fibonaci th n. Dng chng trnh con ny tnh f(2) + f(4) + f(6) +
f(8).
117. Vit di dng qui cc hm
t. daoxau
b. UCLN
c. Fibonaci
112
d. Thp H Ni
CHNG V.
Kiu cu trc
Cu trc t tr v danh sch lin kt
Kiu hp
Kiu lit k
lu tr cc gi tr gm nhiu thnh phn d liu ging nhau ta c kiu bin mng. Thc t rt
nhiu d liu l tp cc kiu d liu khc nhau tp hp li, qun l d liu kiu ny C++ a ra
kiu d liu cu trc. Mt v d ca d liu kiu cu trc l mt bng l lch trong mi nhn s
c lu trong mt bng gm nhiu kiu d liu khc nhau nh h tn, tui, gii tnh, mc lng
V.1.
KIU CU TRC
// trong C++
113
int tu ;
int mau ;
};
hoc:
struct Phanso { int tu, mau ; }
Kiu ngy thng gm 3 thnh phn nguyn cha ngy, thng, nm.
struct Ngaythang {
int ng ;
int th ;
int nam ;
} holiday = { 1,5,2000 } ;
Khai bo cng vi cu trc Sinhvien c cc bin x, con tr p v mng CNTT1vi 60 phn t kiu
Sinhvien. Mt bin y c khai bo thm v km theo khi to gi tr {"NVA", {1,1,1980}, 1}, tc
h tn ca sinh vin y l "NVA", ngy sinh l 1/1/1980, gii tnh nam v im thi trng. y l
kiu khi to thiu gi tr, ging nh khi to mng, cc gi tr trng phi nm cui b gi tr
khi to (tc cc thnh phn b khi to khng c nm xen k gia nhng thnh phn c khi
to).V d ny cn minh ho cho cc cu trc lng nhau, c th trong kiu cu trc Sinhvien c mt
thnh phn cng kiu cu trc l thnh phn ns.
V.1.2. Truy nhp cc thnh phn kiu cu trc
truy nhp vo cc thnh phn kiu cu trc ta s dng c php: tn bin.tn thnh phn hoc tn
bin tn thnh phn i vi bin con tr cu trc. C th:
114
V d:
struct Lop {
char tenlop[10];
int siso;
};
Lop daihoc = " CNTT1", caodang ;
caodang.tenlop = daihoc.tenlop ;
caodang.siso++;
// gn tn lp cng bi tn lp hc
// tng s s lp caodang ln 1
V d:
struct Sinhvien {
char hoten[25] ;
Ngaythang ns;
int gt;
float diem ;
} x, *p, CNTT1 [60];
Sinhvien y = {"NVA", {1,1,1980}, 1} ;
y.diem = 5.5 ;
p = new Sinhvien ;
strcpy(photen, y.hoten) ;
cout << photen << y.hoten;
i vi bin mng: truy nhp thnh phn mng ri n thnh phn cu trc.
V d:
strcpy(CNTT1[1].hoten, photen) ;
CNTT1[1].diem = 7.0 ;
// gn h tn cho sv u tin ca lp
// gn im cho sv u tin
i vi cu trc lng nhau. Truy nhp thnh phn ngoi ri n thnh phn ca cu trc
bn trong, s dng cc php ton . hoc (cc php ton ly thnh phn) mt cch thch
hp.
x.ngaysinh.ng = y.ngaysinh.ng ;
x.ngaysinh.th = y.ngaysinh.th ;
x.ngaysinh.nam = y.ngaysinh.nam ;
// gn ngy,
// thng,
// nm sinh ca y cho x.
115
cin.getline(x.hoten, 25);
cin >> x.ns.ng >> x.ns.th >> x.ns.nam;
cin >> x.gt;
cin >> x.diem
cout << "Thng tin v sinh vin x l:" << endl ;
cout << "H v tn: " << x.hoten << endl;
cout << "Sinh ngy: " << x.ns.ng << "/" << x.ns.th << "/" << x.ns.nam ;
cout << "Gii tnh: " << (x.gt == 1) ? "Nam": "N ;
cout << x.diem
Tuy nhin, khc vi bin mng, i vi cu trc chng ta c th gn gi tr ca 2 bin cho nhau.
Php gn ny cng tng ng vi vic gn tng thnh phn ca cu trc. V d:
struct Sinhvien {
char hoten[25] ;
Ngaythang ns;
int gt;
float diem ;
} x, y, *p ;
cout << " Nhp d liu cho sinh vin x:" << endl ;
cin.getline(x.hoten, 25);
cin >> x.ns.ng >> x.ns.th >> x.ns.nam;
cin >> x.gt;
cin >> x.diem
y=x;
// i vi bin mng, php gn ny l khng thc hin c
p = new Sinhvien[1] ; *p = x ;
cout << "Thng tin v sinh vin y l:" << endl ;
cout << "H v tn: " << y.hoten << endl;
cout << "Sinh ngy: " << y.ns.ng << "/" << y.ns.th << "/" << y.ns.nam ;
cout << "Gii tnh: " << (y.gt = 1) ? "Nam": "N ;
cout << y.diem
Ch : khng gn b gi tr c th cho bin cu trc. Cch gn ny ch thc hin c khi khi to.
V d:
Sinhvien x = { "NVA", {1,1,1980}, 1, 7.0}, y ;
y = { "NVA", {1,1,1980}, 1, 7.0};
y = x;
// c
// khng c
// c
V.1.4. Cc v d minh ho
Di y chng ta a ra mt vi v d minh ho cho vic s dng kiu cu trc.
V d : Cng, tr, nhn chia hai phn s c cho di dng cu trc.
#include <iostream.h>
struct Phanso {
int tu ;
int mau ;
116
} a, b, c ;
void main()
{
cout << "Nhp phn s a:" << endl ;
cout << "T:"; cin >> a.tu;
cout << "Mu:"; cin >> a.mau;
cout << "Nhp phn s b:" << endl ;
cout << "T:"; cin >> b.tu;
cout << "Mu:"; cin >> b.mau;
c.tu = a.tu*b.mau + a.mau*b.tu;
c.mau = a.mau*b.mau;
cout << "a + b = " << c.tu << "/" << c.mau;
c.tu = a.tu*b.mau - a.mau*b.tu;
c.mau = a.mau*b.mau;
cout << "a - b = " << c.tu << "/" << c.mau;
c.tu = a.tu*b.tu;
c.mau = a.mau*b.mau;
cout << "a + b = " << c.tu << "/" << c.mau;
c.tu = a.tu*b.mau;
c.mau = a.mau*b.tu;
cout << "a + b = " << c.tu << "/" << c.mau;
}
// nhp a
// nhp b
// tnh v in a+b
// tnh v in a-b
// tnh v in axb
// tnh v in a/b
V d : Nhp mng CNTT1. Tnh tui trung bnh ca sinh vin nam, n. Hin danh sch ca sinh
vin c im thi cao nht.
#include <iostream.h>
void main()
{
struct Sinhvien {
char hoten[25] ;
Ngaythang ns;
int gt;
float diem ;
} x, CNTT1[60];
int i, n;
// nhp d liu
cout << "Cho bit s sinh vin: "; cin >> n;
for (i=1, i<=n, i++)
{
cout << "Nhap sinh vien thu " << i);
cout << "Ho ten: " ; cin.getline(x.hoten);
cout << "Ngy sinh: " ; cin >> x.ns.ng >> x.ns.th >>x.ns.nam ;
cout << "Gii tnh: " ; cin >> x.gt ;
cout << "im: " ; cin >> x.diem ;
117
cin.ignore();
CNTT1[i] = x ;
}
}
// Tm im cao nht
// In danh sch
{
if (CNTT1[i].diem < diemmax) continue ;
x = CNTT1[1] ;
cout << x.hoten << '\t' ;
cout << x.ns.ng << "/" << x.ns.th << "/" << x.ns.nam << '\t' ;
cout << (x.gt == 1) ? "Nam": "N" << '\t' ;
cout << x.diem << endl;
}
}
V.1.5. Hm vi cu trc
a. Con tr v a ch cu trc
Mt con tr cu trc cng ging nh con tr tr n cc kiu d liu khc, c ngha n cha a ch
ca mt bin cu trc hoc mt vng nh c kiu cu trc no . Mt con tr cu trc c khi
to bi:
Gn a ch ca mt bin cu trc, mt thnh phn ca mng, tng t nu a ch ca
mng (cng l a ch ca phn t u tin ca mng) gn cho con tr th ta cng gi l
con tr mng cu trc. V d:
118
struct Sinhvien {
char hoten[25] ;
Ngaythang ns;
int gt;
float diem ;
} x, y, *p, lop[60];
p = &x ;
pdiem = 5.0;
p = &lop[10] ;
cout << photen;
*p = y ;
(*p).gt = 2;
trong v d ny *p c th thay cho mt bin kiu sinh vin (tng ng bin x trn)
cn q c th c dng qun l mt danh sch c ti a l 60 sinh vin (tng ng
bin lop[60], v d khi *(p+10) l sinh vin th 10 trong danh sch).
119
} lop[60] ;
strcpy(lop[10].hoten, "NVA");
lop[10].gt = 1; lop[10].diem = 9.0 ;
Sinhvien *p ;
// khai bo thm bin con tr Sinh vin
p = &lop ;
// cho con tr p tr ti mng lop
cout << p[10].hoten ;
// in h tn sinh vin th 10
cout << (p+10) gt ;
// in gii tnh ca sinh vin th 10
cout << (*(p+10)).diem ;
// in im ca sinh vin th 10
120
Khai bo
struct DATE {
int ngay ;
int thang;
int nam ;
};
// S ngy ca mi thng
int n[13] = {0,31,28,31,30,31,30,31,31,30,31,30,31};
121
// ngy 1/1/2000 l th by
Hm dch mt s d sang th
char* Dich(int t)
{
char* kq = new char[10];
switch (t) {
case 0: strcpy(kq, "th by"); break;
case 1: strcpy(kq, "ch nht"); break;
case 2: strcpy(kq, "th hai"); break;
case 3: strcpy(kq, "th ba"); break;
case 4: strcpy(kq, "th t"); break;
case 5: strcpy(kq, "th nm"); break;
case 6: strcpy(kq, "th su"); break;
}
return kq;
}
Hm main()
void main()
{
DATE d;
cout << "Nhap ngay thang nam: " ;
cin >> d.ngay >> d.thang >> d.nam ;
cout << "Ngy " << d.ngay << "/" << d.thang << "/" << d.nam ;
cout << " l " << Dich(Thu(d));
}
Khai bo.
struct Sinhvien {
char hoten[25] ;
Ngaythang ns;
int gt;
float diem ;
};
Sinhvien lop[3];
122
Hm in thng tin v sinh vin s dng bin cu trc lm i. Trong li gi s dng bin
cu trc truyn cho hm.
void in(Sinhvien x)
{
cout << x.hoten << "\t" ;
cout << x.ns.ng << "/" << x.ns.th << "/" << x.ns.nam << "\t" ;
cout << x.gt << "\t";
cout << x.diem << endl;
}
Hm nhp thng tin v sinh vin s dng con tr sinh vin lm i. Trong li gi s dng
a ch ca mt cu trc truyn cho hm.
void nhap(Sinhvien *p)
{
cin.ignore();
cout << "H tn: "; cin.getline(photen, 25) ;
cout << "Ngy sinh: ";
cin >> (pns).ng >> (pns).th >> (pns).nam ;
cout << "Gii tnh: "; cin >> (pgt) ;
cout << "im: "; cin >> (pdiem) ;
}
Hm nhapds nhp thng tin ca mi sinh vin trong mng, s dng con tr mng Sinhvien
lm tham i hnh thc. Trong li gi s dng tn mng truyn cho hm.
void nhapds(Sinhvien *a)
{
int sosv = sizeof(lop) / sizeof(Sinhvien) -1;
// b phn t 0
123
Hm suads cho php sa thng tin ca sinh vin trong mng, s dng con tr mng
Sinhvien lm tham i hnh thc. Trong li gi s dng tn mng truyn cho hm.
void suads(Sinhvien *a)
{
int chon;
cout << "Chn sinh vin cn sa: " ; cin >> chon ; cin.ignore();
sua(a[chon]) ;
}
Hm inds hin thng tin ca mi sinh vin trong mng, s dng hng con tr mng
Sinhvien lm tham i hnh thc. Trong li gi s dng tn mng truyn cho hm.
void hien(const Sinhvien *a)
{
int sosv = sizeof(lop) / sizeof(Sinhvien) -1;
for (int i=1; i<=sosv; i++) in(a[i]) ;
}
// b phn t 0
d.
Gi tr hm l cu trc
l mt bin cu trc.
l mt con tr cu trc.
124
{
Sophuc kq;
kq.thuc = x.thuc + y.thuc ;
kq.ao = x.ao + y.ao ;
return kq;
}
Hm tr 2 s phc, tr li mt s phc
Hm chnh
void main()
{
Sophuc x, y, z ;
cout << "x = " ; cin >> x.thuc >> x.ao ;
cout << "y = " ; cin >> y.thuc >> y.ao ;
cout << "x + y = " ; In(Cong(x,y)) ;
cout << "x - y = " ; In(Tru(x,y)) ;
}
V d : Chng trnh nhp v in thng tin v mt lp cng sinh vin c im cao nht lp.
// nh cp pht vng nh
125
Hm chnh
void main()
{
int i;
int sosv = sizeof(lop)/sizeof(Sinhvien)-1; // b thnh phn th 0
for (i=1; i<=sosv; i++) lop[i] = *nhap();
// nhp danh sch lp
for (i=1; i<=sosv; i++) in(lop[i]);
// in danh sch lp
Sinhvien &b = svmax();
// khai bo tham chiu b v cho
// tham chiu n sv c im max
in(b);
// in sinh vin c im max
}
126
Thng thng cc trng trong mt cu trc thng s dng t nht l 2 byte tc 16 bit. Trong
nhiu trng hp mt s trng c th ch cn n s bit t hn, v d trng gioitinh thng thng
ch cn n 1 bit lu tr. Nhng trng hp nh vy ta c th khai bo kiu bit cho cc trng
ny tit kim b nh. Tuy nhin, cch khai bo ny t c s dng tr khi cn thit phi truy
nhp n mc bit ca d liu trong cc chng trnh lin quan n h thng.
Mt trng bit l mt khai bo trng int v thm du: cng s bit n theo sau, trong 0 n < 15.
V d do ln ca ngy khng vt qu 31, thng khng vut qu 12 nn 2 trng ny trong cu
trc ngy thng c th khai bo tit kim hn bng 5 v 4 bit nh sau:
struct Date {
int ng: 5;
int th: 4;
int nam;
};
b. c im
mi mt bin cu trc theo khai bo trn gm 2 byte, b qua khng s dng byte thp
v trng x chim byte (8 bit) cao.
Khng cho php ly a ch ca thnh phn kiu bit.
Khng th xy dng c mng kiu bit.
Khng c tr v t hm mt thnh phn kiu bit. V d nu b l mt thnh phn ca
bin cu trc x c kiu bit th cu lnh sau l sai:
return x.b ;
// sai
Tit kim b nh
Dng trong kiu union ly cc bit ca mt t (xem v d trong phn kiu hp).
127
V.2.
// in 2 2 2
// in 50
Thng thng khi thit k chng trnh chng ta cha bit c s lng d liu cn dng l bao
nhiu khai bo s bin cho ph hp. c bit l bin d liu kiu mng. S lng cc thnh phn
ca bin mng cn phi khai bo trc v chng trnh dch s b tr vng nh c nh cho cc bin
ny. Do buc phi khai bo trc s lng thnh phn nn kiu mng thng dn n hoc l lng
ph b nh (khi chng trnh khng dng ht) hoc l khng cha d liu (khi chng trnh
cn cha d liu vi s lng thnh phn ln hn).
khc phc tnh trng ny C++ cho php cp pht b nh ng, ngha l s lng cc thnh phn
khng cn phi khai bo trc. Bng ton t new chng ta c th xin cp pht vng nh theo nhu
cu mi khi chy chng trnh. Tuy nhin, cch lm ny dn n vic d liu ca mt danh sch s
khng cn nm lin tc trong b nh nh i vi bin mng. Mi ln xin cp pht bi ton t new,
chng trnh s tm mt vng nh ang ri bt k cp pht cho bin v nh vy d liu s nm
ri rc trong b nh. T , d dng qun l trt t ca mt danh sch cc d liu, mi thnh
phn ca danh sch cn phi cha a ch ca thnh phn tip theo hoc trc n (iu ny l khng
cn thit i vi bin mng v cc thnh phn ca chng sp xp lin tc, k nhau). T , mi
thnh phn ca danh sch s l mt cu trc, ngoi cc thnh phn cha thng tin ca bn thn,
chng cn phi c thm mt hoc nhiu con tr tr n cc thnh phn tip theo hay ng trc.
Cc cu trc nh vy c gi l cu trc t tr v cc thnh phn con tr trong cu trc ny s tr
128
// nh ngha tn cu trc
V d:
typedef struct Sv Sinhvien ;
// lu phi c t kho struct
struct Sv
{
char hoten[30] ;
// thnh phn cha thng tin
float diem ;
// thnh phn cha thng tin
Sinhvien *tiep ;
// thnh phn con tr cha a ch tip theo
};
Cch 2:
struct <tn cu trc>
{
cc thnh phn cha thng tin ;
<tn cu trc> *con tr ;
};
typedef <tn cu trc> <tn kiu> ;
// nh ngha tn cu trc t tr
V d:
struct Sv
{
char hoten[30] ;
float diem ;
Sv *tiep ;
};
typedef Sv Sinhvien ;
Cch 3:
typedef struct <tn kiu>
// nh ngha tn cu trc t tr
{
cc thnh phn cha thng tin ;
<tn kiu> *con tr ;
};
V d:
129
Cch 4:
struct <tn kiu>
{
cc thnh phn cha thng tin ;
<tn kiu> *con tr ;
};
V d:
struct Sinhvien
{
char hoten[30] ;
float diem ;
Sinhvien *tiep ;
};
Trong cc cch trn ta thy 2 cch khai bo cui cng l n gin nht. C++ quan
nim cc tn gi ng sau cc t kho struct, union, enum l cc tn kiu (d khng c t
kho typedef), do vy c th s dng cc tn ny khai bo.
V.2.2. Khi nim danh sch lin kt
Danh sch lin kt l mt cu trc d liu cho php th hin v qun l danh sch bng cc cu trc
lin kt vi nhau thng qua cc con tr trong cu trc. C nhiu dng danh sch lin kt ph thuc
vo cc kt ni, v d:
Danh sch lin kt n, mi cu trc cha mt con tr tr n cu trc tip theo hoc
trc . i vi danh sch con tr tr v trc, cu trc u tin ca danh sch s tr v
hng con tr NULL, cu trc cui cng c nh du bi con tr last l con tr tr vo
cu trc ny. i vi danh sch con tr tr v cu trc tip theo, cu trc u s c
nh du bng con tr head v cu trc cui cng cha con tr NULL.
Danh sch lin kt kp gm 2 con tr, mt tr n cu trc trc v mt tr n cu trc
sau, 2 u ca danh sch c nh du bi cc con tr head, last.
Danh sch lin kt vng gm 1 con tr tr v sau (hoc trc), hai u ca danh sch
c ni vi nhau to thnh vng trn. Ch cn mt con tr head nh du u danh
sch.
Do trong cu trc c cha cc con tr tr n cu trc tip theo v/hoc cu trc ng trc nn t
mt cu trc ny chng ta c th truy cp n mt cu trc khc (trc v/hoc sau n). Kt hp vi
cc con tr nh du 2 u danh sch (head, last) chng ta s d dng lm vic vi bt k phn t
no ca danh sch. C th k mt s cng vic thng thc hin trn mt danh sch nh: b sung
phn t vo cui danh sch, chn thm mt phn t mi, xo mt phn t ca danh sch, tm kim,
sp xp danh sch, in danh sch
130
Hnh v bn di minh ho mt danh sch lin kt n qun l sinh vin, thng tin cha trong mi
phn t ca danh sch gm c h tn sinh vin, im. Ngoi ra mi phn t cn cha con tr tiep
ni vi phn t tip theo ca n. Phn t cui cng ni vi cu trc rng (NULL).
head
NVA
9.0
TTB
7.5
PHT
4.0
NULL
hoc gn vo cui danh sch bng cch cho con tr tiep ca phn t cui danh sch
(ang tr vo NULL) tr vo phn t mi. Nu danh sch c con tr last ch vo
cui danh sch th last c iu chnh tr vo phn t mi. Nu danh sch khng
c con tr last th tm c phn t cui chng trnh phi duyt t u, bt u t
con tr head cho n khi gp phn t tr vo NULL, l phn t cui ca danh sch.
head
MOI
0.0
NVA
9.0
TTB
7.5
PHT
4.0
NULL
131
u
0.0
i
9.0
i+1
7.5
cui
4.0
NULL
Vic xo mt phn t ra khi danh sch rt n gin bi ch vic thay i cc con tr. C th gi s
cn xo phn t th i ta ch cn cho con tr tiep ca phn t th i-1 tr ("vng qua" phn t th i)
vo phn t th i+1. Nh vy by gi khi chy trn danh sch n phn t th i-1, phn t tip theo
l phn t th i+1 ch khng cn l phn t th i. Ni cch khc phn t th i khng c ni bi
bt k phn t no nn n s khng thuc danh sch. C th thc hin cc bc nh sau:
Cho con tr p chy n phn t th i-1.
t phn t th i vo bin x.
Cho con tr tiep ca phn t th i-1 tr vo phn t th i+1 bng cch t tiep = x.tiep.
Gii phng b nh c tr bi x bng cu lnh delete x.
i-1
0.0
i
9.0
i+1
7.5
cui
4.0
NULL
Xa phn t th i
d. Duyt danh sch
Duyt l thao tc i qua tng phn t ca danh sch, ti mi phn t chng trnh thc hin mt
cng vic g trn phn t m ta gi l thm phn t . Mt php thm c th n gin l hin
ni dung thng tin ca phn t ra mn hnh chng hn. duyt danh sch ta ch cn cho mt
con tr p chy t u n cui danh sch n khi phn t cui c con tr tiep = NULL th dng.
Cu lnh cho con tr p chuyn n phn t tip theo ca n l:
p = p tiep ;
e. Tm kim
Cho mt danh sch trong mi phn t ca danh sch u cha mt trng gi l trng kho,
thng l cc trng c kiu c s hoc kt hp ca mt s trng nh vy. Bi ton t ra l tm
132
trn danh sch phn t c gi tr ca trng kho bng vi mt gi tr cho trc. Tin trnh thc
hin nhim v thccht cng l bi ton duyt, trong thao tc "thm" chnh l so snh trng
kho ca phn t vi gi tr cho trc, nu trng nhau ta in kt qu v dng, Nu duyt ht m
khng c phn t no c trng kho trng vi gi tr cho trc th xem danh sch khng cha gi
tr ny.
Ngoi cc thao tc trn, ni chung cn nhiu cc thao tc quen thuc khc tuy nhin chng ta khng
trnh by y v n khng thuc phm vi ca gio trnh ny.
Di y l mt v d minh ho cho cc cu trc t tr, danh sch lin kt v mt vi thao tc trn
danh sch lin kt thng qua bi ton qun l sinh vin.
Khai bo
struct DATE
{
int day, month, year;
};
struct Sinhvien {
char hoten[31];
DATE ns;
float diem;
Sinhvien *tiep ;
};
Sinhvien *dau = NULL, *cuoi = NULL;
Sinhvien *cur = NULL;
int sosv = 0;
// ngy, thng, nm
// cu trc t tr
// Cc con tr ti u v cui ds
// Con tr ti sv hin ti
// S sv ca danh sch
133
Xo sinh vin th n.
void Xoa(int n)
// Xo sinh vin th n
{
if (sosv==1&&n==1) { delete dau ; dau = cuoi = NULL; sosv--; return; }
if (n==1) { cur = dau; dau = cur->tiep; delete cur; sosv--; return; }
Sinhvien *truoc, *sau;
truoc = dau;
sau = dau -> tiep;
for (int i=1; i<n-1; i++) truoc = truoc->tiep;
cur = truoc->tiep; sau = cur->tiep; truoc->tiep = sau;
delete cur ;
sosv --;
}
134
void Taods()
// To danh sch
{
int tiep = 1;
while (tiep) {
Bosung();
cout << "Tiep (0/1) ? " ; cin >> tiep ;
}
}
Hm chnh.
void main()
{
Taods();
Inds();
}
V.3.
KIU HP
V.3.1. Khai bo
Ging nh cu trc, kiu hp cng c nhiu thnh phn nhng cc thnh phn ca chng s dng
chung nhau mt vng nh. Do vy kch thc ca mt kiu hp l di ca trng ln nht v
vic thay i mt thnh phn s nh hng n tt c cc thnh phn cn li.
union <tn kiu> {
Danh sch cc thnh phn;
};
135
V.3.2. Truy cp
C php truy cp n cc thnh phn ca hp cng tng t nh kiu cu trc, tc cng s dng
ton t ly thnh phn (du chm . hoc cho bin con tr kiu hp).
Di y l mt v d minh ho vic s dng khai bo kiu hp tch byte thp, byte cao ca mt
s nguyn.
V d :
void main()
{
union songuyen {
int n;
unsigned char c[2];
} x;
cout << "Nhp s nguyn: " ; cin >> x.n ;
cout << "Byte thp ca x = " << x.c[0] << endl ;
cout << "Byte cao ca x = " << x.c[1] << endl;
}
V.4.
KIU LIT K
C th gn cc gi tr nguyn lin tip (tnh t 0) cho cc tn gi c th bng kiu lit k theo khai
bo sau y:
enum tn_kiu { d/s tn cc gi tr };
136
V d:
enum Bool {false, true};
khai bo kiu mi t tn Bool ch nhn 1 trong 2 gi tr t tn false v true, trong false ng vi
gi tr 0 v true ng vi gi tr 1. Cch khai bo kiu enum trn cng tng ng vi dy cc
macro sau:
#define false 0
#define true 1
hoc:
Tuy nhin khng th gn cc gi tr nguyn trc tip cho cc bin enum m phi thng
qua p kiu. V d:
Ok = 0;
// sai
Ok = Bool(0) ;
// ng
hoc Ok = false ;
// ng
BI TP
119. C th truy nhp thnh phn ca cu trc thng qua con tr nh sau (vi p l con tr cu trc
v a l thnh phn ca cu trc):
A: (*p).a
B: *pa
C: a v b sai
D: a v b ng
120. Cho khai bo struct T {int x; float y;} t, *p, a[10]; Cu lnh no trong cc cu sau l khng
hp l:
(1) p = &t;
(4) p = &a
A: 1, 2 v 3
B: 4, 5 v 6
C: 1, 3 v 5
D: 2, 4 v 6
137
A: S1 v S2 ng
B: S2 v S3 ng
C: S3 v S1 ng
D: C 3 cng ng
138
union {
unsigned x;
unsigned char y[2];
} z = {0xabcd};
B: 0xcd, 0xab
C: 0xabcd, 0
D: 0, 0xabcd
Gi tr ca z.x bng:
A: 513
B: 258
130. Xt on lnh:
union U {
139
int x; char y;
} u;
u.x = 0; u.y = 200;
Tm gi tr ca u.x + u.y ?
A: 122
B: 144
C: 200
D: 400
131. Cho s phc di dng cu trc gm 2 thnh phn l thc v o. Vit chng trnh nhp 2 s
phc v in ra tng, tch, hiu, thng ca chng.
132. Cho phn s di dng cu trc gm 2 thnh phn l t v mu. Vit chng trnh nhp 2 phn
s, in ra tng, tch, hiu, thng ca chng di dng ti gin.
133. Tnh s ngy qua k t u nm cho n ngy hin ti. Qui c ngy c khai bo di
dng cu trc v n gin mt nm bt k c tnh 365 ngy v thng bt k c 30 ngy.
134. Nhp mt ngy thng nm di dng cu trc. Tnh chnh xc (k c nm nhun) s ngy
qua k t ngy 1/1/1 cho n ngy .
135. Tnh khong cch gia 2 ngy thng bt k.
136. Hin th ca mt ngy bt k no , bit rng ngy 1/1/1 l th hai.
137. Hin th ca mt ngy bt k no , ly ngy th hin ti lm chun.
138. Vit chng trnh nhp mt mng sinh vin, thng tin v mi sinh vin gm h tn v ngy
sinh (kiu cu trc). Sp xp mng theo tui v in ra mn hnh
139. biu din s phc c th s dng nh ngha sau:
typedef struct {
D: Sinh vin 1, 2 v 3
140
m=
x1 + x2 + ...+ xn
n
141
CHNG VI.
LP V I TNG
VI.1.
Xy dng 2 hm:
142
{
return sqrt(pow(x[i]-x[j],2)+pow(y[i]-y[j],2));
}
void nhapsl(int n)
{
int i;
for (i=1; i<=n; ++i)
{
cout<<\n Nhap toa do x, y cua diem thu<<i<< : ";
cin>>x[i]>>y[i];
}
}
void main()
{
int n, i, j, imax,jmax;
float d, dmax;
cout<<''\n So diem N= '';
cin>>n;
nhapsl(n);
dmax=do_dai(1,2);imax=1; jmax=2;
for(i=1; i<=n-1; ++i)
for (j=i+1; j<=n; ++j)
{
d=do_dai(i,j);
if (d>dmax)
{
dmax=d;
imax=i; jmax=j;
}
}
cout<<''\nDoan thang lon nhat co do dai bang: "<< dmax;
cout<<''\n Di qua 2 diem co chi so la "<< imax<<" va ''<<jmax;
}
143
Bin nguyn n l s im ca dy
Nhp to mt im
144
void main()
{
daydiem p;
p.nhapsl();
int n,i,j,imax,jmax;
float d,dmax;
n = p.n;
dmax=p.do_dai(1,2);imax=1; jmax=2;
for (i=1;i<=n-1;++i)
for (j=i+1;j<=n;++j)
{
d=p.do_dai(i,j);
if (d>dmax)
{
dmax=d;
imax=i; jmax=j;
}
}
cout<<\n Doan thang lon nhat co do dai bang: <<dmax;
cout<<''\n Di qua 2 diem co chi so la "<< imax<<" va <<jmax;
}
VI.2.
LP V I TNG
Trong lp trnh hng i tng, lp (class) l mt khi nim rt quan trng, n cho php gii quyt
cc vn phc tp ca vic lp trnh. Mt lp n (c nh ngha nh struct, union, hoc class)
bao gm cc hm v d liu c lin quan. Cc hm ny l cc hm thnh phn (member functon)
hay cn l phng thc (method), th hin tc ng ca lp c th c thc hin trn d liu ca
chnh lp (data member).
Cng ging nh cu trc, lp c th xem nh mt kiu d liu. V vy lp cn gi l kiu i tng
v lp c dng khai bo cc bin, mng i tng (nh th dng kiu int khai bo cc bin
mng nguyn).
Nh vy t mt lp c th to ra (bng cch khai bo) nhiu i tng (bin, mng) khc nhau. Mi
i tng c vng nh ring ca mnh v v vy ta cng c th quan nim lp chnh l tp hp cc
i tng cng kiu.
VI.2.1. Khai bo lp
khai bo mt lp, ta s dng t kho class nh sau:
class tn_lp
{
// Khai bo cc thnh phn d liu (thuc tnh)
// Khai bo cc phng thc (hm)
};
145
Thuc tnh ca lp c th l cc bin, mng, con tr c kiu chun (int, float, char, char*, long,...)
hoc kiu ngoi chun nh ngha trc (cu trc, hp, lp,...). Thuc tnh ca lp khng th c
kiu ca chnh lp , nhng c th l con tr ca lp ny, v d:
class A
{
A x;
A* p ;
};
Khi khai bo cc thnh phn d liu v phng thc c th dng cc t kho private v public
quy nh phm vi s dng ca cc thnh phn ny. Trong t kha private qui nh cc thnh
phn (c khai bo vi t kha ny) ch c s dng bn trong lp (trong thn cc phng thc
ca lp). Cc hm bn ngoi lp (khng phi l phng thc ca lp) khng c php s dng cc
thnh phn ny. c trng ny th hin tnh che giu thng tin trong ni b ca lp, n c
cc thng tin ny cn phi thng qua chnh cc thnh phn hm ca lp . Do vy thng tin c tnh
ton vn cao v vic x l thng tin (d liu) ny mang tnh thng nht hn v hu nh d liu
trong cc lp u c khai bo vi t kha ny. Ngc li vi private, cc thnh phn c khai
bo vi t kha public c php s dng c bn trong v bn ngoi lp, iu ny cho php trong
chng trnh c th s dng cc hm ny truy nhp n d liu ca lp. Hin nhin nu cc
thnh phn d liu khai bo l privte th cc thnh phn hm phi c t nht mt vi hm c
khai bo dng public chng trnh c th truy cp c, nu khng ton b lp s b ng kn v
iu ny khng gip g cho chng trnh. Do vy cch khai bo lp tng i ph bin l cc thnh
phn d liu c dng private v thnh phn hm di dng public. Nu khng quy nh c th
(khng dng cc t kho private v public) th C++ hiu l private.
b. Cc thnh phn d liu (thuc tnh)
c khai bo nh khai bo cc thnh phn trong kiu cu trc hay hp. Bnh thng cc thnh
phn ny c khai bo l private bo m tnh giu kn, bo v an ton d liu ca lp khng
cho php cc hm bn ngoi xm nhp vo cc d liu ny.
c. Cc phng thc (hm thnh vin)
146
// Honh (ct)
// Tung (hng)
// Mu
Cc phng thc:
Nhp d liu mt im
Hin th mt im
Lp im c xy dng nh sau:
#include <iostream.h>
class DIEM
{
private:
int x, y, m ;
public:
void nhapsl() ;
void hien() ;
};
void DIEM::nhapsl()
{
cout <<"\n Nhap hoanh do (cot) va tung do (hang) cua diem: '';
cin >> x >> y ;
cout << ''\n Nhap ma mau cua diem: '';
cin >> m ;
}
void DIEM::hien()
{
cout<<Diem ("<<x<<, "<<y<<);
}
+ Trong c 2 phng thc (d vit trong hay vit ngoi nh ngha lp) u c
php truy nhp n cc thuc tnh x, y v m ca lp.
+ Cc phng thc vit bn trong nh ngha lp (nh phng thc an() ) c vit
nh mt hm thng thng.
+ Khi xy dng cc phng thc bn ngoi lp, cn dng thm tn lp v ton t
phm vi :: t ngay trc tn phng phc quy nh r y l phng thc ca
lp no.
VI.2.3. Bin, mng v con tr i tng
Nh ni trn, mt lp (sau khi nh ngha) c th xem nh mt kiu i tng v c th dng
khai bo cc bin, mng i tng. Cch khai bo bin, mng i tng cng ging nh khai
bo bin, mng cc kiu khc (nh int, float, cu trc, hp,...), theo mu sau:
147
Cng ging nh hm, mt phng thc c s dng thng qua li gi. Tuy nhin trong li gi
phng thc bao gi cng phi c tn i tng ch r phng thc thc hin trn cc thuc tnh
ca i tng no.
V d li gi sau s thc hin nhp s liu vo cc thnh phn d1.x, d1.y v d1.m: d1.nhapsl(); Cu
lnh sau s thc hin nhp s liu vo cc thnh phn d[3].x, d[3].y v d[3].m: d[3].nhapsl() ;
Chng ta s minh ha cc iu ni trn bng mt chng trnh n gin s dng lp DIEM nhp
3 im, ri hin cc im va nhp. Trong chng trnh a vo hm kd_do_hoa() dng khi
ng h ho.
#include <conio.h>
#include <iostream.h>
#include <graphics.h>
class DIEM
{
private:
int x, y, m ;
148
public:
void nhapsl();
void hien();
};
void DIEM::nhapsl()
{
cout << "\n Nhap hoanh do (cot) va tung do (hang) cua DIEM: '' ;
cin>> x >> y ;
cout << " \n Nhap ma tran cua diem: " ;
cin >> m ;
}
void DIEM::hien()
{
cout<<Diem ("<<x<<, "<<y<<);
}
void main()
{
DIEMd1, d2, d3 ;
d1.nhapsl(); d2.nhapsl(); d3.nhapsl();
d1.hien(); d2.hien(); d3.hien();
}
c. Con tr i tng
// p1 cha a ch ca d2 , hay p1 tr ti d2
// p2 tr ti u mng d
// To mt t v cha a ch ca n vo p3
s dng thuc tnh ca i tng thng qua con tr, ta vit nh sau:
Tn_con_tr Tn_thuc_tnh
149
150
VI.3.
Do :
this x chnh l d1.x
this y chnh l d1.y
this m chnh l d1.m
151
VI.4.
HM TO (Constructor)
Hm to khng c kt qu tr v.
Hm to c th c i hoc khng c i.
// honh (ct) ca im
// tung (hng) ca im
// mu ca im
152
// Gi ti hm to khng i.
// Gi ti hm to c i.
// Gi ti hm to c i.
// Gi ti hm to khng i 20 ln
// Gi ti hm to c i s
// Kt qu q x = 40, q y = 20, q m = 4
DIEM_DH *r = new DIEM_DH ;
//Gi ti hm to khng i s
// Kt qu r x = 0, r y = 0, r m = 1
+ Khi cp pht b nh cho mt dy i tng khng cho php dng tham s khi
gn, v d:
int n = 30;
153
// Gi ti hm to khng i s 30 ln.
+ biu din mt hng i tng (hay cn gi: i tng hng) chng ta phi
dng ti hm to. Mu vit nh sau:
Tn_lp(danh sch tham s) ;
Chng trnh sau y minh ha cch xy dng hm to v cch s dng hm to trong khai
bo, trong cp pht b nh v trong vic biu din cc hng i tng.
#include <iostream.h>
#include <iomanip.h>
class DIEM_DH
{
private:
int x, y, m;
public:
// Hm bn dng in i tng DIEM_DH
friend void in(DIEM_DH d)
{
cout <<"\n '' << d.x << '' ''<< d.y<<" " << d.m ;
}
// Phng thc dng in i tng DIEM_DH
void in()
{
cout <<''\n '' << x << '' ''<< y<<" " << m ;
}
// Hm to khng i
DIEM_DH()
{
x = y = 0;
m = 1;
154
}
// Hm to c i, i m1 c gi tr mc nh l 15 (mu trng)
DIEM_DH(int x1, int y1, int m1 = 15);
};
// Xy dng hm to
DIEM_DH::DIEM_DH(int x1, int y1, int m1)
{
x = x1; y = y1; m = m1;
}
void main()
{
DIEM_DH d1;
// Gi ti hm to khng i
DIEM_DH d2(200, 200, 10);
// Gi ti hm to c i
DIEM_DH*d;
d = new DIEM_DH(300, 300);
// Gi ti hm to c i
in(d1);
//Gi hm bn in()
d2.in();
//Gi phng thc in()
in(*d);
// Gi hm bn in()
DIEM_DH(2, 2, 2).in();
// Gi phng thc in()
DIEM_DH t[3];
// 3 ln gi hm to khng i
DIEM_DH*q;
// Gi hm to khng i
int n;
cout << "\n N = "; cin >> n;
q = new DIEM_DH[n+1];
// (n+1) ln gi hm to khng i
for (int i = 0; i< = n; ++i)
q[i] = DIEM_DH(300+i, 200+i, 8); //(n+1) ln gi hm to c i
for (i = 0; i< = n; ++i)
q[i].in();
// Gi phng thc in()
for (i = 0; i< = n; ++i)
DIEM_DH(300+i, 200+i, 8).in(); // Gi phng thc in()
}
VI.4.2. Lp khng c hm to v hm to mc nh
a. Nu lp khng c hm to
155
public:
// Phng thc
void in() { cout <<"\n '' << x << '' ''<< y<<'' " << m ; }
};
void main()
{
DIEM_DH d;
d.in();
DIEM_DH *p;
p = new DIEM_DH[10];
d.in();
for (int i = 0; i<10; ++i) (p+i)->in();
}
b. Nu trong lp c t nht mt hm to
156
157
158
+ Nhn xt: Hm to sao chp trong v d trn khng khc g hm to sao chp mc
nh.
+ Khi lp khng c cc thuc tnh kiu con tr hoc tham chiu, th dng hm to
sao chp mc nh l .
+ Khi lp c cc thuc tnh con tr hoc tham chiu, th hm to sao chp mc nh
cha p ng c yu cu.
V d:
class DT
{
private:
int n; // Bac da thuc
double *a; // Tro toi vung nho chua cac he so da thuc a0, a1, ...
public:
DT() { this->n0; this->a = NULL; }
DT(int n1)
{
this->n = n1;
this->a = new double[n1+1];
}
friend ostream& operator << (ostream& os, const DT &d);
friend istream& operator>> (istream& is, DT &d);
159
...
};
/* Nhp i tng d, gm: nhp mt s nguyn dng v gn cho d.n, cp pht vng nh
cho d.a, nhp cc h s ca a thc v cha vo vng nh c cp pht */
DT u(d);
160
{
if (d.a! = NULL) delete d.a;
cout << " \n Bac da thuc: " ;
cin >> d.n;
d.a = new double[d.n+1];
cout << ''Nhap cac he so da thuc:\n" ;
for (int i = 0 ; i< = d.n ; ++i)
{
cout << "He so bac "<< i << " = " ;
is >> d.a[i] ;
}
return is;
}
void main()
{
DT d;
cout <<"\n Nhap da thuc d " ; cin >> d;
DT u(d);
cout << "\n Da thuc d "<< d ;
cout << "\n Da thuc u " << u ;
cout <<"\n Nhap da thuc d " ; cin >> d;
cout << "\nDa thuc d " << d;
cout <<"\n Da thuc u " << u ;
cout <<"\n Nhap da thuc u " ; cin >> u;
cout << "\n Da thuc d "<< d ;
cout << "\n Da thuc u " << u ;
}
d. V d v hm to sao chp
161
162
VI.5.
HM HY (Destructor)
163
+ i: Hm hy khng c i
V d c th xy dng hm hy cho lp DT (a thc) nh sau:
class DT
{
private:
int n; // Bac da thua
double *a; // Tro toi vung nho chua cac he so da thuc a0, a1 , ...
public:
~DT()
{
this n = 0;
delete this a;
}
...
};
+ Cc hm to
+ Cc ton t nhp >>, xut <<
+ Cc hm ton t thc hin cc php tnh +, -, *, /
Tuy nhin vn cn thiu hm hy gii phng vng nh m i tng kiu DT (cn hy) ang
qun l.
Chng ta hy phn tch cc khim khuyt ca chng trnh ny:
+ Khi chng trnh gi ti mt phng thc ton t thc hin cc php tnh cng,
tr, nhn a thc, th mt i tng trung gian c to ra. Mt vng nh c cp
pht v giao cho n (i tng trung gian) qun l.
+ Khi thc hin xong php tnh s ra khi phng thc. i tng trung gian b xo,
tuy nhin ch vng nh ca cc thuc tnh ca i tng ny c gii phng. Cn
vng nh (cha cc h s ca a thc) m i tng trung gian ang qun l th
khng h b gii phng. Nh vy s vng nh b chim dng v ch s tng ln.
Nhc im trn d dng khc phc bng cch a vo lp DT hm hy trong mc 3 trn.
VI.6.
chc mt cch khoa hc d kim sot, d pht hin li, d pht trin v m rng.
Th hai l gim c kch thc chng trnh, v mi on chng trnh thc hin
nhim v ca hm c thay bng mt li gi hm.
Tuy nhin hm cng c nhc im l lm chm tc chng trnh do phi thc hin mt s thao
tc c tnh th tc mi khi gi hm nh: cp pht vng nh cho cc iv bin cc b, truyn d
liu ca cc tham s cho cc i, gii phng vng nh trc khi thot khi hm.
Cc hm trc tuyn trong C++ c kh nng khc phc c cc nhc im ni trn.
VI.6.2. Cc hm trc tuyn
bin mt hm thnh trc tuyn ta vit thm t kho inline vo trc khai bo nguyn mu hm.
Nu khng dng nguyn mu th vit t kho ny trc dng u tin ca nh ngha hm.
V d :
inline float f(int n, float x);
float f(int n, float x)
{
// Cc cu lnh trong thn hm
}
hoc
inline float f(int n, float x)
{
// Cc cu lnh trong thn hm
}
Ch : Trong mi trng hp, t kho inline phi xut hin trc cc li gi hm th trnh bin dch
mi bit cn x l hm theo kiu inline.
V d hm f trong chng trnh sau s khng phi l hm trc tuyn v t kho inline vit sau li
gi hm:
#include <iostream.h>
void main()
{
int s ;
s = f(5,6);
cout << s ;
}
inline int f(int a, int b)
{
return a*b;
}
165
Cch 2:S dng khai bo nguyn mu. Khi t kho inline t trc nguyn mu.
Ch : Khng c t inline trc nh ngha hm. Trong chng trnh di y nu t inline
166
trc nh ngha hm th hu qu nh sau: Chng trnh vn dch thng, nhng khi chy th chng
trnh b qun v khng thot i c.
#include <iostream.h>
inline void dtcvhcn(int a, int b, int &dt, int &cv);
void main()
{
int a[20],b[20],cv[20],dt[20],n;
cout << "\n So hinh chu nhat: '' ;
cin >> n;
for (int i=1; i<=n; ++i)
{
cout <<"\n Nhap 2 canh cua hinh chu nhat thu " << i << ": ";
cin >> a[i] >> b[i];
dtcvhcn(a[i],b[i],dt[i], cv[i]);
}
for (i=1; i<=n; ++i)
{
cout << "\n Hinh chu nhat thu "<< i << '' : '';
cout << "\n Do dai 2 canh= '' << a[i] << '' va '' << b[i] ;
cout <<"\n Dien tich= " << dt[i] ;
cout << "\n Chu vi= '' << cv[i] ;
}
}
void dtcvhcn(int a, int b, int&dt, int &cv)
{
dt=a*b;
cv=2*(a+b);
}
167
CHNG VII.
Hm bn
nh ngha php ton cho lp
VII.1.
HM BN (Friend function)
VII.1.1.
Hm bn
Cch 2: Dng t kha friend xy dng hm trong nh ngha lp. Mu vit nh sau:
class A
{
private:
// Khai bo cc thuc tnh
public:
168
// Xy dng cc hm bn ca lp A
void f1(...)
{
...
}
double f2(...)
{
...
}
A f3(...)
{
...
}
...
};
VII.1.2.
Tnh cht ca hm bn
Cch dng:
SP u, u1, u2;
u = u1.cong(u2);
169
Phng n 2: Dng hm bn
class SP
{
private:
double a; // Phn thc
double b; // Phn o
public:
friend SP cong(SP u1 , SP u2)
{
SP u:
u.a = u1.a + u2.a ;
u.b = u1.b + u2.b ;
return u;
}
};
Cch dng
SP u, u1, u2;
u = cong(u1, u2);
Phng n ny khng c chp nhn, trnh bin dch s bo li trong thn hm khng c quyn
truy xut n cc thuc tnh ring (private) a, b ca cc i tng u, u1 v u2 thuc lp SP.
VII.1.3.
Hm bn ca nhiu lp
170
// Khai bo trc lp A
// Khai bo trc lp B
class C;
// Khai bo trc lp C
// nh ngha lp A
class A
{
// Khai bo f l bn ca A
friend void f(...) ;
};
// nh ngha lp B
class B
{
// Khai bo f l bn ca B
friend void f(...) ;
};
// nh ngha lp C
class C
{
// Khai bo f l bn ca C
friend void f(...) ;
};
// Xy dng hm f
void f(...)
{
...
}
Ni dung chng trnh l nhp mt ma trn vung cp n v mt vc t cp n, sau thc hin php
nhn ma trn vi vc t va nhp.
#include <iostream.h>
#include <cmath>
class VT;
class MT;
class VT
{
private:
int n;
double x[20]; // Toa do cua diem
public:
void nhapsl();
171
172
y.x[i] = 0;
for (int j = 1; j< = n; ++j)
y.x[i] = a.a[i][j]*x.x[j];
}
return y;
}
void in(const VT &x)
{
cout << "\n";
for (int i = 1; i< = x.n; ++i)
cout << x.x[i] << " ";
}
void in(const MT &a)
{
for (int i = 1; i< = a.n; ++i)
{
cout << "\n " ;
for (int j = 1; j< = a.n; ++j)
cout << a.a[i][j] << " ";
}
}
void main()
{
MT a; VT x, y;
a.nhapsl();
x.nhapsl();
y = tich(a, x);
clrscr();
cout << "\n Ma tran A:";
in(a);
cout << "\n Vec to x: " ;
in(x);
cout << "\n Vec to y = Ax: " ;
in(y);
}
VII.2.
173
VII.2.1.
Tn hm ton t
VII.2.2.
Cc i ca hm ton t
// p1 + p2
// p1 - p2
// p1 *p2
// p1/p2
VII.2.3.
Thn ca hm ton t
174
return y;
}
a. Cch dng hm ton t
C 2 cch dng:
Cch 1: Dng nh mt hm thng thng bng cch vit li gi
V d:
PS p, q, u, v ;
u = operator+(p, q) ;
v = operator-(p, q) ;
// u = p + q
// v= p - q
// u = p + q
//v = p - q
Ch : Khi dng cc hm ton t nh php ton ca C++ ta c th kt hp nhiu php ton vit
cc cng thc phc tp. Cng cho php dng du ngoc trn quy nh th t thc hin cc php
tnh. Th t u tin ca cc php tnh vn tun theo cc quy tc ban u ca C++. Chng hn cc
php * v / c th t u tin cao hn so vi cc php + v b. Cc v d v nh ngha chng ton t
V d : Trong v d ny ngoi vic s dng cc hm ton t thc hin 4 php tnh trn phn s,
cn nh ngha chng cc php ton << v >> xut v nhp phn s.
Hm operator<< c 2 i kiu ostream& v PS (Phn s). Hm tr v gi tr kiu ostream& v c
khai bo nh sau:
ostream& operator<< (ostream& os, PS p);
175
176
177
178
{
return (d1 + (-d2));
}
DT operator*(DT d1 , DT d2)
{
DT d;
int k, i, j;
k = d.n = d1.n + d2.n ;
for (i=0;i<=k;++i) d.a[i] = 0;
for (i=0 ;i<= d1 .n ;++i)
for (j=0 ;j<= d2.n ;++j)
d.a[i+j] += d1 .a[i]*d2.a[j];
return d;
}
double operator^(DT d, double x)
{
double s=0.0 , t=1.0;
for (int i=0 ;i<= d.n ;++i)
{
s += d.a[i]*t;
t *= x;
}
return s;
}
void main()
{
DT p,q,r,s,f;
double x,g;
cout <<"\n Nhap da thuc P '' ;cin >> p;
cout <<"\n Nhap da thuc Q '' ;cin >> q;
cout <<"\n Nhap da thuc R '' ;cin >> r;
cout <<"\n Nhap da thuc S '' ;cin >> s;
cout << "\n Nhap so thuc x: '' ;cin >> x;
f = -(p+q)*(r-s);
g = f^x;
cout << "\n Da thuc f "<< f ;
cout << "\n x = '' << x;
cout << "\n f(x) = '' << g;
}
179
CHNG VIII.
Nhp/xut vi cin/cout
nh dng
In ra my in
Lm vic vi File
Nhp/xut nh phn
Trong C++ c sn mt s lp chun cha d liu v cc phng thc phc v cho cc thao tc
nhp/xut d liu ca NSD, thng c gi chung l stream (dng). Trong s cc lp ny, lp c
tn ios l lp c s, cha cc thuc tnh nh dng vic nhp/xut v kim tra li. M rng (k
tha) lp ny c cc lp istream, ostream cung cp thm cc ton t nhp/xut nh >>, << v cc
hm get, getline, read, ignore, put, write, flush Mt lp rng hn c tn iostream l tng hp ca
2 lp trn. Bn lp nhp/xut c bn ny c khai bo trong cc file tiu c tn tng ng (vi
ui *.h). S tha k ca 4 lp trn c th hin qua hnh v di y.
ios
istream
ostream
iostream
i tng ca cc lp trn c gi l cc dng d liu. Mt s i tng thuc lp iostream
c khai bo sn (chun) v c gn vi nhng thit b nhp/xut c nh nh cc i tng cin,
cout, cerr, clog gn vi bn phm (cin) v mn hnh (cout, cerr, clog). iu ny c ngha cc ton
t >>, << v cc hm k trn khi lm vic vi cc i tng ny s cho php NSD nhp d liu
thng qua bn phm hoc xut kt qu thng qua mn hnh.
nhp/xut thng qua cc thit b khc (nh my in, file trn a ), C++ cung cp thm cc lp
ifstream, ofstream, fstream cho php NSD khai bo cc i tng mi gn vi thit b v t
nhp/xut thng qua cc thit b ny.
Trong chng ny, chng ta s xt cc i tng chun cin, cout v mt s ton t, hm nhp xut
c trng ca lp iostream cng nh cch to v s dng cc i tng thuc cc lp ifstream,
ofstream, fstream lm vic vi cc thit b nh my in v file trn a.
VIII.1.
NHP/XUT VI CIN/COUT
Nh nhc trn, cin l dng d liu nhp (i tng) thuc lp istream. Cc thao tc trn i
tng ny gm c cc ton t v hm phc v nhp d liu vo cho bin t bn phm.
180
VIII.1.1.
Ton t ny cho php nhp d liu t mt dng Input_stream no vo cho mt danh sch cc
bin. C php chung nh sau:
Input_stream >> bin1 >> bin2 >>
cu lnh ny cho php nhp d liu t bn phm cho cc bin. Cc bin ny c th thuc cc kiu
chun nh : kiu nguyn, thc, k t, xu k t. Ch 2 c im quan trng ca cu lnh trn.
Lnh s b qua khng gn cc du trng (du cch <>, du Tab, du xung dng ) vo
cho cc bin (k c bin xu k t).
v ch cn nhp d liu vo t bn phm mt ln chung cho c 3 lnh (mi d liu nhp cho mi
bin phi cch nhau t nht mt du trng)
V d : Nhp d liu cho cc bin
int a;
float b;
char c;
char *s;
cin >> a >> b >> c >> s;
181
VIII.1.2.
Cc hm nhp k t v xu k t
a. Nhp k t
182
xu rng.
khc phc tnh trng ny chng ta c th s dng mt trong cc cu lnh nhp k t "nhc"
du enter cn "ri vi" ra khi b m. C th s dng cc cu lnh sau :
// c mt k t trong b m
//c n k t trong b m (vi n=1)
cin.get();
cin.ignore(n);
cin.getline(s, n, fchar): Phng thc ny hot ng hon ton tng t phng thc
cin.get(s, n, fchar), tuy nhin n c th khc phc "li enter" ca cu lnh trn. C th
hm sau khi gn ni dung nhp cho bin s s xa k t enter khi b m v do vy NSD
khng cn phi s dng thm cc cu lnh ph tr (cin.get(), cin.ignore(1)) loi enter ra
khi b m.
cu lnh ny cho php in kt qu ca cc biu thc ra mn hnh. Kiu d liu ca cc biu thc c
th l s nguyn, thc, k t hoc xu k t.
VIII.2.
NH DNG
Cc gi tr in ra mn hnh c th c trnh by di nhiu dng khc nhau thng qua
183
a. Ch nh rng cn in
cout.width(n) ;
// rng thc ca a l 2, ca b l 3
// chim 2 ct mn hnh
// t rng gi tr in tip theo l 7
// b in trong 7 ct vi 4 du cch ng trc
Kt qu in ra s l: 12<><><><>345
b. Ch nh k t chn vo khong trng trc gi tr cn in
cout.fill(ch) ;
// rng thc ca a l 4, ca b l 7
// chim 4 ct mn hnh
// t rng gi tr in tip theo l 10
// t chnh xc n 2 s l
// b in trong 10 ct vi 4 du cch ng trc
Kt qu in ra s l: 12.3<><><><>345.68
2. Cc c nh dng
Mt s cc qui nh v nh dng thng c gn lin vi cc "c". Thng thng nu nh dng
ny c s dng trong sut qu trnh chy chng trnh hoc trong mt khong thi gian di trc
khi g b th ta "bt" cc c tng ng vi n. Cc c c bt s c tc dng cho n khi c vi
184
Cc c trong danh sch c vit cch nhau bi php ton hp bit (|). V d lnh cout.setf(ios::left
| ios::scientific) s bt cc c ios::left v ios::scientific. Phng thc cout.unsetf(ios::right |
ios::fixed) s tt cc c ios::right | ios::fixed.
Di y l danh sch cc c cho trong iostream.h.
ppppp. Nhm cn l
// rng thc ca a l 4, ca b l 8
// chim 4 ct mn hnh
// t rng gi tr in tip theo l 10
// du * lm k t n
// t chnh xc n 2 s l
// bt c ios::left
// kt qa: 12.3345.68***
// bt c ios::right
// kt qa: 12.3***345.68
// bt c ios::internal
// kt qa: 12.3***345.68
c in thnh
123.250
185
123.2599
123.2
c in thnh
c in thnh
123.260
123.200
nu fixed bt + showpoint tt :
123.2500
123.2599
123.2
c in thnh
c in thnh
c in thnh
123.25
123.26
123.2
nu scientific bt + showpoint bt :
12.3
2.32599
324
c in thnh
c in thnh
c in thnh
1.230e+01
2.326e+00
3.240e+02
nu scientific bt + showpoint tt :
12.3
2.32599
324
f.
c in thnh
c in thnh
c in thnh
1.23e+01
2.326e+00
3.24e+02
Cc b v hm nh dng
// tng t ios::dec
// tng t ios::dec
// tng t ios::hex
// xut k t xung dng ('\n')
// y ton b d liu ra dng xut
V d :
cout.setf(ios::showbase) ;
// cho php in cc k t biu th c s
cout.setf(ios::uppercase) ;
// di dng ch vit hoa
int a = 171; int b = 32 ;
cout << hex << a << endl << b ; // in 0xAB v 0x20
b. Cc hm nh dng (#include <iomanip.h>)
setw(n)
// tng t cout.width(n)
setprecision(n)
// tng t cout.precision(n)
setfill(c)
// tng t cout.fill(c)
setiosflags(l)
// tng t cout.setf(l)
186
resetiosflags(l)
VIII.3.
// tng t cout.unsetf(l)
IN RA MY IN
hoc :
Mayin << "Din tch HCN = " << cd * cr << endl;
Mayin << "Chu vi HCN = " << 2*(cd + cr) << endl << flush;
VIII.4.
LM VIC VI FILE
Lm vic vi mt file trn a cng c quan nim nh lm vic vi cc thit b khc ca my tnh
(v d nh lm vic vi my in vi i tng Mayin trong phn trn hoc lm vic vi mn hnh
vi i tng chun cout). Cc i tng ny c khai bo thuc lp ifstream hay ofstream ty
thuc ta mun s dng file c hay ghi.
Nh vy, s dng mt file d liu u tin chng ta cn to i tng v gn cho file ny. to
i tng c th s dng cc hm to c sn trong hai lp ifstream v ofstream. i tng s c
gn vi tn file c th trn a ngay trong qu trnh to i tng (to i tng vi tham s l tn
file) hoc cng c th c gn vi tn file sau ny bng cu lnh m file. Sau khi gn mt i
tng vi file trn a, c th s dng i tng nh i vi Mayin hoc cin, cout. iu ny c
ngha trong cc cu lnh in ra mn hnh ch cn thay t kha cout bi tn i tng mi d liu cn
in trong cu lnh s c ghi ln file m i tng i din. Cng tng t nu thay cin bi tn i
tng, d liu s c c vo t file thay cho t bn phm. to i tng dng cho vic ghi ta
khai bo chng vi lp ofstream cn dng cho vic c ta khai bo chng vi lp ifstream.
VIII.4.1.
To i tng gn vi file
187
+ Cch 1:
<Lp> i_tng;
i_tng.open(tn_file, ch_);
Lp l mt trong hai lp ifstream v ofstream. i tng l tn do NSD t t. Ch l cch thc
lm vic vi file (xem di). Cch ny cho php to trc mt i tng cha gn vi file c th
no. Sau dng tip phng thc open ng thi m file v gn vi i tng va to.
V d:
// to i tng c tn f c hoc
// to i tng c tn f ghi
// m file Baitap v gn vi f
ifstream f;
ofstream f;
f.open("Baitap");
+ Cch 2:
Sau khi m file v gn vi i tng f, mi thao tc trn f cng chnh l lm vic vi file Baitap.
Trong cc cu lnh trn c cc ch qui nh cch thc lm vic ca file. Cc ch ny gm
c:
ios::binary : quan nim file theo kiu nh phn. Ngm nh l kiu vn bn.
c th ch nh cng lc nhiu ch bng cch ghi chng lin tip nhau vi ton t hp bit |. V d
m file bi tp nh mt file nh phn v ghi tip theo vo cui file ta dng cu lnh:
ofstream f("Baitap", ios::binary | ios::app);
VIII.4.2.
Sau khi ng file (v gii phng mi lin kt gia i tng v file) c th dng i tng gn
v lm vic vi file khc bng phng thc open nh trn.
V d : c mt dy s t bn phm v ghi ln file. File c xem nh file vn bn (ngm nh), cc
s c ghi cch nhau 1 du cch.
#include <iostream.h>
#include <fstream.h>
188
void main()
{
ofstream f;
int x;
f.open("DAYSO");
for (int i = 1; i<=10; i++) {
cin >> x;
f << x << ' ';
}
f.close();
}
V d : Chng trnh sau nhp danh sch sinh vin, ghi vo file 1, c ra mng, sp xp theo tui v
in ra file 2. Dng u tin trong file ghi s sinh vin, cc dng tip theo ghi thng tin ca sinh vin
gm h tn vi rng 24 k t, tui vi rng 4 k t v im vi rng 8 k t.
#include <iostream.h>
#include <iomanip.h>
#include <fstream.h>
#include <cstdlib>
struct Sv {
char *hoten;
int tuoi;
double diem;
};
class Sinhvien {
int sosv ;
Sv *sv;
public:
Sinhvien() {
sosv = 0;
sv = NULL;
}
void nhap();
void sapxep();
void ghifile(char *fname);
void docfile(char *fname);
};
void Sinhvien::nhap()
{
int n;
cout << "\nSo sinh vin: ";
cin >> n;
this->sosv = n;
this->sv = new Sv[n+1];// B phn t th 0
for (int i = 1; i <= n; i++) {
cout << "\nNhp sinh vin th: " << i << endl;
189
190
VIII.4.3.
Khi c hoc ghi, con tr file s chuyn dn v cui file. Khi con tr cui file, phng thc eof()
s tr li gi tr khc khng. Do c th s dng phng thc ny kim tra ht file hay cha.
Chng trnh sau cho php tnh di ca file Baitap. File cn c m theo kiu nh phn.
#include <iostream.h>
#include <fstream.h>
#include <cstdlib>
void main()
{
clrscr();
long dodai = 0;
char ch;
ifstream f("Baitap", ios::in | ios::binary) ;
if (f.bad()) {
cout << "File Baitap khng c";
exit(1);
}
while (!f.eof()) {
f.get(ch));
dodai++;
}
cout << " di ca file = " << dodai;
}
VIII.4.4.
hoc
fstream f ;
f.open("Data", ios::in | ios::out) ;
VIII.4.5.
Cc phng thc sau cho php lm vic trn i tng ca dng xut (ofstream).
i_tng.seekp(n) ; Di chuyn con tr n byte th n (cc byte c tnh t 0)
191
ios::beg : t u file
V d : Chng trnh nhp v in danh sch sinh vin trn ghi/c ng thi.
#include <iostream.h>
#include <iomanip.h>
#include <fstream.h>
#include <cstdlib>
void main() {
int stt ;
char *hoten, *fname, traloi;
int tuoi;
float diem;
fstream f;
cout << "Nhp tn file: "; cin >> fname;
f.open(fname, ios::in | ios::out | ios::noreplace) ;
if (f.bad()) {
cout << "Tp tin c. Ghi (C/K)?" ;
cin.get(traloi) ;
if (toupper(traloi) == 'C') {
f.close() ;
f.open(fname, ios::in | ios::out | ios::trunc) ;
} else exit(1);
}
stt = 0;
f << setprecision(1) << setiosflags(ios::showpoint) ;
// nhp danh sch
while (1) {
stt++;
cout << "\nNhp sinh vin th " << stt ;
cout << "\nH tn: "; cin.ignore() ; cin.getline(hoten, 25);
if (hoten[0] = 0) break;
cout << "\nTui: "; cin >> tuoi;
cout << "\nim: "; cin >> diem;
f << setw(24) << hoten << endl;
192
VIII.5.
NHP/XUT NH PHN
VIII.5.1.
a. File vn bn
Thng tin lu trong file c xem nh dy byte bnh thng. M kt thc file c chn l -1, c
nh ngha l EOF trong stdio.h. Cc thao tc trn file nh phn thng c ghi tng byte mt,
khng quan tm ngha ca byte.
Mt s cc thao tc nhp/xut s c hiu qu khc nhau khi m file di cc dng khc nhau.
V d : gi s ch = 10, khi f << ch s ghi 2 byte 10,13 ln file vn bn f, trong khi lnh ny
ch khi 1 byte 10 ln file nh phn.
Ngc li, nu f la file vn bn th f.getc(ch) s tr v ch 1 byte 10 khi c c 2 byte 10, 13 lin
tip nhau.
Mt file lun ngm nh di dng vn bn, do vy ch nh file l nh phn ta cn s dng c
ios::binary.
193
VIII.5.2.
c, ghi k t
put(c);
// ghi k t ra file
get(c);
// c k t t file
V d : Sao chp file 1 sang file 2. Cn sao chp v ghi tng byte mt do vy chnh xc ta s m
cc file di dng nh phn.
#include <iostream.h>
#include <fstream.h>
#include <cstdlib>
void main()
{
clrscr();
fstream fnguon("DATA1", ios::in | ios::binary);
fstream fdich("DATA2", ios::out | ios::binary);
char ch;
while (!fnguon.eof()) {
fnguon.get(ch);
fdich.put(ch);
}
fnguon.close();
fdich.close();
}
VIII.5.3.
c, ghi dy k t
gcount();
V d : Chng trnh sao chp file trn c th s dng cc phng thc mi ny nh sau:
#include <iostream.h>
#include <fstream.h>
#include <cstdlib>
void main()
{
fstream fnguon("DATA1", ios::in | ios::binary);
fstream fdich("DATA2", ios::out | ios::binary);
char buf[2000] ;
int n = 2000;
while (n) {
fnguon.read(buf, 2000);
n = fnguon.gcount();
fdich.write(buf, n);
}
fnguon.close();
fdich.close();
}
194
BI TP
147. Vit chng trnh m s dng ca mt file vn bn.
148. Vit chng trnh c in tng k t ca file vn bn ra mn hnh, mi mn hnh 20 dng.
149. Vit chng trnh tm xu di nht trong mt file vn bn.
150. Vit chng trnh ghp mt file vn bn th hai vo file vn bn th nht, trong tt c ch
ci ca file vn bn th nht phi i thnh ch in hoa.
151. Vit chng trnh in ni dung file ra mn hnh v cho bit tng s ch ci, tng s ch s
xut hin trong file.
152. Cho 2 file s thc ( c sp tng dn). In ra mn hnh dy s xp tng dn ca c 2 file.
(Cn to c 2 file d liu ny bng Editor ca C++).
153. Vit hm nhp 10 s thc t bn phm vo file INPUT.DAT. Vit hm c cc s thc t file
trn v in tng bnh phng ca chng ra mn hnh.
154. Vit hm nhp 10 s nguyn t bn phm vo file vn bn tn INPUT.DAT. Vit hm c cc
s nguyn t file trn v ghi nhng s chn vo file EVEN.DAT cn cc s l vo file
ODD.DAT.
155. Nhp bng chng trnh 2 ma trn s nguyn vo 2 file vn bn. Hy to file vn bn th 3
cha ni dung ca ma trn tch ca 2 ma trn trn.
156. T chc qun l file sinh vin (H tn, ngy sinh, gii tnh, im) vi cc chc nng : Nhp,
xem, xa, sa, tnh im trung chung.
157. Thng tin v mt nhn vin trong c quan bao gm : h v tn, ngh nghip, s in thoi, a
ch nh ring. Vit hm nhp t bn phm thng tin ca 7 nhn vin v ghi vo file
INPUT.DAT. Vit hm tm trong file INPUT.DAT v in ra thng tin ca 1 nhn vin theo s
in thoi c nhp t bn phm.
195
196