You are on page 1of 131

Smith Nguyen Studio.

L p trnh C

Bin so n TS. Phan ng C u

Smith Nguyen Studio.

H n i, thng 01/ 2004

Smith Nguyen Studio.


l i ni u

Ti li u ny chng ti bin so n nh m m c ch h tr cc b n h c vin trong qu trnh ti p thu bi gi ng mn h c "L p trnh C". Th c ra c th g i chnh xc hn l L p trnh C trong mi tr ng C++, v mi tr ng chng ta s d ng l C++, v cc l nh cng khng hon ton l c a C m c s d ng c php c a C++ khi c n thi t; th m ch chng 13 ni v tnh ng gi, th a k v a hnh l c a C++ (chng ti vi t chng ny ch y u cc b n tham kh o v t tm hi u). Chng ti mu n nh n m nh r ng ti li u ny ch h tr cc b n, ch khng thay th bi gi ng v cc v n c trnh by m t cch tm t t, cn nhi u i u cha c gi i thch y , n u ch c m khng nghe gi ng th r t kh hi u. V d khi trnh by c php cc l nh th d u [ ] hm l nh ng g n m gi a hai d u ny l khng b t bu c, cn nh ng g n m gi a 2 d u < > l i l b t bu c ph i c. Tuy nhin d u [] l i c dng bao cc ch s trong m t m ng. V d a[i][j] l ph n t hng i, c t j c a m t m ng a 2 chi u Trong qu trnh gi ng d y chng ti s d a vo s ti p thu c a cc b n a ra cch gi i thch v cc v d minh h a ph h p. Chng ti lun s n sng l ng nghe cc ki n ng gp c a cc b n v ti li u cng nh bi gi ng, s h p tc gi a gio vin v h c vin ngy cng hi u qu hn.

H n i, thng 01/2004 ` TS. Phan ng C u

Smith Nguyen Studio.


M cl c Chng 1. T ng quan v C v C++............................................................................................................. 1

1.1. Ngn ng l p trnh v thu t ton .......................................................................................... 1 1.1.1. Ngn ng l p trnh ......................................................................................................... 1 1.1.2. Thu t ton (Algorithm) .................................................................................................. 2 1.1.3. S ra i v pht tri n c a ngn ng C .......................................................................... 2 1.2. Cc ph n t c b n trong ngn ng C ................................................................................. 3 1.2.1. B k t (character set) .................................................................................................. 3 1.2.2. Cc t kha (key words, reserved words) ....................................................................... 3 1.2.3. Tn v cch t tn (identifier)....................................................................................... 3 1.2.4. L i gi i thch (comment) ............................................................................................... 3 1.2.5. M t vi chng trnh C n gi n ................................................................................... 3 1.3. C u trc chng trnh trong C ............................................................................................ 4 1.3.1. Cc thnh ph n c a m t chng trnh C........................................................................ 4 1.3.2. So n th o v ch y m t chng trnh C .......................................................................... 4
Chng 2. H ng, bi n v m ng ...................................................................................................................... 8

2.1. Cc ki u d li u c s ......................................................................................................... 8 2.2. H ng ................................................................................................................................... 9 2.3. Ki u enum ..................................................................................................................... 10 2.4. Bi n ............................................................................................................................... 11 2.5. M ng v chu i .............................................................................................................. 12 2.6. nh ngha ki u b ng typedef ........................................................................................ 13 2.7. Kh i l nh ....................................................................................................................... 13 2.8. Vi nt v hm v chng trnh ..................................................................................... 13 2.9. Bi n, m ng t ng ....................................................................................................... 13 2.10. Bi n, m ng ngoi ......................................................................................................... 14 2.11. Ton t sizeof .............................................................................................................. 15 2.12. Bi n tnh, m ng tnh .................................................................................................... 15
Chng 3. Bi u th c ...................................................................................................................................... 16

3.1. 3.2. 3.3. 3.4. 3.5. 3.6. 3.7. 3.8. 3.9. 4.1. 4.2. 4.3. 4.4. 4.5. 4.6. 4.7. 4.8. 4.9.

Khi ni m bi u th c(expression).................................................................................... 16 Php ton s h c ............................................................................................................ 16 Cc php thao tc bit...................................................................................................... 16 Cc php ton quan h v logic ...................................................................................... 16 Php chuy n i ki u gi tr ........................................................................................... 16 Php ton tng gi m ...................................................................................................... 16 Cu l nh gn v bi u th c .............................................................................................. 16 Bi u th c i u ki n ........................................................................................................ 16 Th t u tin cc php ton .......................................................................................... 17 Hm printf ..................................................................................................................... 18 Hm scanf ..................................................................................................................... 19 a ra my in- hm fprintf ............................................................................................ 20 Dng vo stdin v cc hm nh p d li u ........................................................................ 21 Nh p /xu t s li u cho chu i v k t ............................................................................ 22 M t s hm x l chu i ................................................................................................. 22 S khc bi t gi a m ng v chu i ................................................................................... 23 Cc hm vo ra v d ch chuy n v tr trn mn hnh ....................................................... 24 Cc lu ng nh p xu t cin,cout ........................................................................................ 24

Chng 4. Vo ra .......................................................................................................................................... 18

Chng 5. Cc ton t i u khi n ............................................................................................................... 25

5.1. Nh c l i khi ni m cu l nh v kh i l nh ....................................................................... 25

Smith Nguyen Studio.


5.2. 5.3. 5.4. 5.5. 5.6. 5.6. 5.7. 5.8. 6.1. 6.2. 6.3. 6.4. 6.5. 6.6. 6.7. 6.8. 6.9. 7.1. 7.2. 7.3. 7.4. 7.5. 8.1. 8.2. 8.3. 8.4. 8.5. 8.6. 10.1. 10.3. 10.4. 10.5. Ton t if....................................................................................................................... 25 else if ............................................................................................................................. 25 Ton t switch ............................................................................................................... 25 Ton t goto v nhn ..................................................................................................... 25 Ton t for..................................................................................................................... 25 Ton t while ................................................................................................................ 26 do ... while ..................................................................................................................... 26 L nh break v l nh continue ......................................................................................... 26 Khai bo v nh ngha hm........................................................................................... 28 Cc hm void................................................................................................................. 29 L i g i hm ................................................................................................................... 30 S d ng hm assert() ki m tra i u ki n tr c ........................................................... 30 Cc i s m c nh....................................................................................................... 31 Truy n tham s cho hm ................................................................................................ 31 Hm ch ng(Overloaded function) .................................................................................. 34 Cc m u (template)........................................................................................................ 35 Hm v i cc tham s l m ng ........................................................................................ 35 Con tr v a ch .......................................................................................................... 37 Con tr v m ng m t chi u ............................................................................................ 39 Con tr t i hm .............................................................................................................. 40 Kh nng quy c a hm .............................................................................................. 41 Hm main c i (tham kh o ti li u [2], trang 198) ..................................................... 41 Ki u c u trc ................................................................................................................. 42 Truy nh p n thnh ph n c u trc ................................................................................ 43 Php gn c u trc........................................................................................................... 43 C u trc trong C++ ........................................................................................................ 43 Thnh ph n ki u fields................................................................................................... 44 Union ............................................................................................................................ 44 Ch n ki u mn hnh vn b n ........................................................................................ 50 S khc bi t gi a cc hm nh p xu t d li u ................................................................ 51 M t s hm thao tc mn hnh khc ............................................................................. 51 V d ng d ng: T o th c n trn c a s ................................................................... 52

Chng 6. Hm v c u trc chng trnh .................................................................................................. 28

Chng 7. Con tr , c p pht ng v hm ................................................................................................. 37

Chng 8. C u trc ....................................................................................................................................... 42

Chng 9. Thao tc trn t p ......................................................................................................................... 45 Chng 10. Qu n l mn hnh vn b n....................................................................................................... 50

Chng 11. h a ........................................................................................................................................ 55

11.1. Khi ni m v h a .................................................................................................... 55 11.2. phn gi i mn hnh h a ..................................................................................... 56 11.3. V hnh trong mn hnh h a .................................................................................... 57 11.4. t mu n n, mu v , mu t ....................................................................................... 57 11.5. V m t s ng v hnh c b n .................................................................................. 58 11.6. C a s (viewport) ........................................................................................................ 60 11.7. X l vn b n trn mn hnh h a............................................................................. 63 11.8. T o hnh nh chuy n ng ............................................................................................ 65
Chng 12. m thanh, m nh c .................................................................................................................. 67 Chng 13. Tnh ng gi, th a k v a hnh........................................................................................... 69

13.1. M u ........................................................................................................................ 69
Cu h i v bi t p n t p chu n b cho thi h t mn ................................................................................... 73 Ph l c. Cc chng trnh m u ................................................................................................................... 85

01. Tm c s chung l n nh t c a 2 s nguyn......................................................................... 90

Smith Nguyen Studio.


02. Chuy n i m t s th p phn sang d ng nh phn ............................................................... 90 03. Chuy n i m t s th p phn sang s c c s b t k .......................................................... 91 04. Chuy n i m t s th p phn sang s c c s 11 ............................................................... 92 05. Nh p v s p x p danh sch cc s th c ............................................................................... 92 06. o l i m t chu i k t ....................................................................................................... 93 07. M t s chong trnh quy: tnh giai th a c a m t s nguyn khng m, tnh s Fibonacci, tm c s chung l n nh t c a hai s nguyn khng m, bi ton thp H n i. ......................... 94 08. Sng Erastothen li t k cc s nguyn t khng v t qu m t s t nhin n cho tr c. ..... 95 09. Tm s l n nh t trong dy cc s th c ................................................................................. 95 10. Tm xem m t s th c x c xu t hi n trong dy s th c hay khng....................................... 96 11. Tnh gi tr a th c b c n theo phng php Horner ........................................................ 97 12. Tm t h p c a cc lo i gi y b c ......................................................................................... 98 13. Lo i tr cc d u cch th a trong chu i tn (ch l i m t d u cch) ................................. 98 14. m s ch trong chu i k t .............................................................................................. 99 15. Tnh s theo cng th c: ................................................................................................. 100 16. Nh p v in danh sch sinh vin (phin b n 1) .................................................................... 102 17. Nh p v in danh sch sinh vin (phin b n 2) .................................................................... 103 18. Nh p, s p x p v in danh sch sinh vin (phin b n 3) ...................................................... 104 19. Nh p, s p x p, tm ki m v in danh sch sinh vin (phin b n 4) ...................................... 106 20. Nh p, s p x p, tm ki m v in danh sch sinh vin (phin b n 5) ...................................... 107 21. Nh p, s p x p, tm ki m v in danh sch sinh vin (phin b n 6) ...................................... 109 22. Danh sch ci t b ng danh sch lin k t (phin b n 1) .................................................. 111 23. Danh sch ci t b ng danh sch lin k t (phin b n 2) .................................................. 114 24. Danh sch ci t trn t p (phin b n 1) ........................................................................... 117 25. Danh sch ci t trn t p (phin b n 2) ........................................................................... 120
Ti li u tham kh o ....................................................................................................................................... 125

Smith Nguyen Studio.


Chng 1. T ng quan v C v C++

1.1. Ngn ng l p trnh v thu t ton


1.1.1. Ngn ng l p trnh Trong ph n Nh p mn tin h c chng ta tm hi u Winword v Excel, l cc ph n m m ng d ng trong cng vi c so n th o vn b n v lm cc b ng tnh ton c. c i m c a cc ph n m m ng d ng l lun nh r ph m vi ng d ng v cung c p cng nhi u cng t t cc cng c hon thnh ch c nng . Tuy nhin ng i s d ng cng h u nh b b bu c trong ph m vi quy nh c a chng trnh. Ch ng h n ta kh c th dng Excel gi i m t bi ton g m nhi u b c tnh ton nh tnh nghi m g n ng m t phng trnh vi phn hay gi i m t h phng trnh tuy n tnh. M c d u cc ph n m m ng d ng ngy cng nhi u v thu c cc lnh v c nh xy d ng, thi t k , h i h a, m nh c...nhng khng th bao trm h t cc v n n y sinh trong th c t v cng phong ph. R rng khng ch nh ng chuyn gia tin h c m ngay c nh ng ng i s d ng, nh t l cc cn b k thu t, r t c n n nh ng ph n m m uy n chuy n v m m d o hn, c kh nng th c hi n c nhi u hn cc ch th c a ng i s d ng gip h gi i quy t nh ng cng vi c a d ng b ng my tnh. Ph n m m c tnh ch t nh th c g i l ngn ng l p trnh. Chnh xc hn ngn ng l p trnh l m t ngn ng nhn t o bao g m m t t p cc t v ng (m ta s g i l t kha phn bi t v i ngn ng thng th ng) v m t t p cc quy t c (g i l Syntax - c php) m ta c th s d ng bin so n cc l nh cho my tnh th c hi n. Nh ta bi t, cc nh c a my tnh ch c th bi u di n cc s 0 v 1. V v y ngn ng m my c th hi u tr c ti p l ngn ng trong cc l nh l cc dy s nh phn v do c g i l ngn ng my (machine language) . M i ngn ng khc u ph i thng d ch ho c bin d ch sang ngn ng my (Interpreter - thng d ch v cho ch y t ng l nh. Compiler - bin d ch thnh 1 chng trnh ngn ng my hon ch nh, do v y ch y nhanh hn thng d ch). C nhi u lo i ngn ng l p trnh, v h u h t cc nh khoa h c v my tnh u cho r ng khng c m t ngn ng c nh t no c kh nng ph c v cho cc yu c u c a t t c cc l p trnh vin. Theo truy n th ng, cc ngn ng l p trnh c phn lm 2 lo i: cc ngn ng b c th p v ngn ng b c cao. Ngn ng l p trnh b c th p (low-level programming language): Ngn ng my, h p ng (asembler: chng trnh d ch h p ng , assembly language: ngn ng h p ng ). H p ng l ngn ng m t b c t ngn ng my. N ch khc v i ngn ng my trong vi c s d ng cc m bi u th cc ch c nng chnh m my th c hi n. L p trnh b ng h p ng r t phi n toi: c n vi t dng m c n thi t ch th c hi n php c ng 2 con s . Cc chng trnh h p ng r t kh vi t; chng khng c c u trc ho c modun ha r rng. Chng trnh h p ng cng khng d chuy n t lo i my tnh ny sang lo i my tnh khc. Cc chng trnh ny c vi t theo cc t p l nh c th c a lo i b vi x l nh t nh. L p trnh b ng h p ng th m g n v ch y nhanh. Do h u h t cc chng trnh i u hnh h th ng u c vi t b ng h p ng . Tuy nhin do s ph c t p c a cng vi c l p trnh nn cc hng s n xu t ph n m m chuyn d ng thch vi t chng trnh b ng ngn ng C (do Bell Laboratories c a hng AT&T xy d ng) l lo i ngn ng k t h p c c u trc c a ngn ng b c cao hi n i v i t c v tnh hi u qu c a h p ng b ng cch cho php nhng cc l nh h p ng vo chng trnh. Ngn ng l p trnh b c cao: Cc ngn ng l p trnh b c cao nh Basic, Pascal, C, C++... cho php cc l p trnh vin c th di n t chng trnh b ng cc t kha v cc cu l nh g n gi ng v i ngn ng t nhin. Cc ngn ng ny d c g i l b c cao v chng gi i phng cc l p trnh vin kh i nh ng quan tm v t ng l nh s c my tnh ti n hnh nh th no, b ph n thng d ch ho c bin d ch c a chng trnh s gi i

Smith Nguyen Studio.


quy t cc chi ti t ny khi m ngu n c bi n i thnh ngn ng my. M t cu l nh trong ngn ng b c cao tng ng v i m t s l nh ngn ng my, cho nn b n c th th o chng theo ngn ng b c cao nhanh hn so v i b c th p. Tuy nhin b n cng ph i tr gi cho vi c ny. Chng trnh ngn ng my c d ch ra t m ngu n c vi t b ng ngn ng b c cao ch a r t nhi u chi ti t th a, do t c ch y s ch m hn nhi u so v i chng trnh vi t b ng h p ng . Thng th ng m t trnh bin d ch c trng th ng sinh ra s l nh m my g p 2 l n hay nhi u hn s l nh c n thi t n u vi t b ng m my. M t cch phn lo i khc c a cc ngn ng l p trnh: Ngn ng th t c (Procedural Language) v ngn ng khai bo (Declarative Language) Ngn ng th t c: L p trnh vin ph i xc nh m t th t c m my tnh s tun theo hon thnh m t cng vi c nh tr c. Th d : Basic, C, Fortran, ... Ngn ng khai bo: Ngn ng s nh ngha m t lo t cc y u t v cc quan h , ng th i cho php b n c th ti n hnh x p hng i v i nh ng k t qu xc nh. Th d : Prolog, SQL (Structured Query Language) i u then ch t trong vi c l p trnh chuyn d ng l mdun ha ngn ng - l s pht tri n sao cho nhi m v l p trnh c th phn ph i c cho cc thnh vin c a m t nhm l p trnh, v k t qu t c l cc b ph n khc nhau s ho t ng ph h p v i nhau khi nhi m v c a t ng ng i hon thnh. Ngn ng l p trnh mdun, nh Module-2 ho c ngn ng h ng i t ng nh C++, s cho php t ng l p trnh vin c th t p trung vo vi c l p m, bin d ch v g r i cc module chng trnh ring bi t, ng th i c th cho ch y (ki m tra th ) ring t ng module c a mnh. Khi t ng module ring ch y t t chng s c lin k t v i nhau m khng gy tr c tr c no. 1.1.2. Thu t ton (Algorithm)
Thu t ng Algorithm c d ch ra ti ng Vi t l thu t ton, thu t gi i ho c gi i thu t. t thu t ton l cch g i quen thu c v i nhi u ng i. y chng ti dng

Thu t ton l m t dy h u h n cc b c, m i b c m t chnh xc cc php ton ho c hnh ng c n th c hi n, gi i quy t m t v n .

hi u y ngha c a khi ni m thu t ton, chng ta nu ra 6 c trng sau y c a thu t ton:


1. Input M i thu t ton th ng c m t s d li u vo. 2. Ouput M i thu t ton th ng c m t s d li u ra. 3. Tnh xc nh (Definiteness) M i b c c m t chnh xc, ch c m t cch hi u duy nh t v n gi n c th th c hi n c. 4. Tnh d ng (Finiteness) Thu t ton ph i d ng sau m t s h u h n b c th c hi n 5. Tnh hi u qu (Effectiveness) Cc php ton trong cc b c ph i n gi n c th th c hi n c. 6. Tnh t ng qut (Generalness) Thu t ton ph i c tnh t ng qut, c th p d ng cho m t l p i t ng.

V d : Thu t ton Euclid: Tm c s chung l n nh t c a hai s t nhin m,n. Input: m,n nguyn dng Output: g l c s chung l n nh t c a m v n Phng php: 1. r= m mod n 2. N u r=0 th g:=n Ng c l i (r>0) m:=n; n:=r v quay l i b c 1. 1.1.3. S ra i v pht tri n c a ngn ng C Nm 1970 Ken Thompson sng t o ra ngn ng B dng trong mi tr ng h i u hnh UNIX trn
L p trnh C v C++ - Chng 1. T ng quan v C v C++

Smith Nguyen Studio.


my i n ton DEC PD-7. B l k t u c a c m ch vi t t t BCPL (Basic Combined Programming Language) do Martin Richards vi t. Nm 1972 Dennis Ritchie c a hng Bell Laboratories (v Ken Thompson) sng t o nn ngn ng C nh m tng hi u qu cho ngn ng B. Lc u ngn ng C khng c m i ng i a dng. Nhng sau khi D.Ritchie cho xu t b n cu n "The C Programming Language" th ngn ng C c ch v c s d ng r ng ri. Ng i ta dng C vi t h i u hnh a nhi m UNIX, O/S 2 v ngn ng Dbase. C c c i ti n qua nhi u phin b n: trnh bin d ch Turbo C t phin b n 1 n phin b n 5, Microsoft C t phin b n 1 n phin b n 6. Hi n nay, C l i c pht tri n thnh C++ v i 3 trnh bin d ch: Borland C++ (dng trong DOS v trong Windows), Visual C++ (dng trong DOS v trong Windows) v Turbo C++ (dng trong DOS). C th ni r ng hi n nay h u h t cc ph n m m ng d ng u c vi t tr c ti p ho c gin ti p b ng C ho c C++ Trong ti li u ny chng ti s gi i thi u C v m t s l nh c a C++.

1.2. Cc ph n t c b n trong ngn ng

1.2.1. B k t (character set) 1.2.2. Cc t kha (key words, reserved words) Cc t kha thng d ng trong C auto break base char continue default do double else extern float for goto if int long register return short sizeof static struct switch typedef union unsigned void public while volatile

1.2.3. Tn v cch t tn (identifier) i v i C, m i tn c n ph i khai bo tr c khi s d ng. Tn ta dy cc k t li n nhau, b t u b ng k t ho c d u g ch d i, ti p theo l cc k t , cc s ho c d u g ch d i. Ch : Tn khng ch a d u cch. C phn bi t ch hoa v ch th ng. 1.2.4. L i gi i thch (comment) L i gi i thch t m t vi tr n cu i dng: // L i gi i thch trn m t ho c nhi u dng: /* */ 1.2.5. M t vi chng trnh C n gi n Chng trnh C n gi n nh t ch y khng bo l i: Khng lm g c void main() { } Hi n cu cho //002CHAO1.cpp Hien cau chao tren man hinh #include <stdio.h> void main() {printf("\nTurbo C xin chao ban"); } Xa mn hnh r i hi n cu cho
#include <stdio.h> #include <conio.h> void main() L p trnh C v C++ - Chng 1. T ng quan v C v C++

Smith Nguyen Studio.


{clrscr(); printf("Turbo C xin chao ban!"); getch(); }

1.3. C u trc chng trnh trong C


1.3.1. Cc thnh ph n c a m t chng trnh C Ph n quan tr ng nh t khng th thi u c a m t chng trnh C l hm main(). Thng th ng hm main() c d ng void main() { //cc l nh } ho c int main() { //cc l nh return(0); } Thng th ng m t chng trnh C y c cc ph n sau: Ch d n ti n x l (preprocessor directive) - Cc bao hm (#include) - Cc v l nh (#define) Khai bo ton c c - Khai bo cc nguyn m u cho hm (function prototype) - Khai bo cc bi n ton c c Hm main() nh ngha chi ti t cc hm do ng i s d ng v a khai bo trn. Ph n " nh ngha chi ti t cc hm " c th t ngay sau ph n khai bo ton c c.

M t s hm c b n v cc t p bao hm tng ng: T p bao hm stdio.h conio.h math.h stdlib.h ctype.h string.h
iostream.h iomanip.h

Cc hm c nh ngha trong t p printf,scanf,gets getch,clrscr sqrt,abs,fabs abs,random,randomize,calloc,malloc,atof,atoi toupper,islower,isdigit strcmp,strcmpi,strcpy,strcat,strlen,strlwr,strupr


cin,cout setw,setprecision, (cout<<oct<<a<<hex<<b;)

1.3.2. So n th o v ch y m t chng trnh C a. So n th o chng trnh M i cu l nh c a C c th vi t trn m t dng hay nhi u dng nhng ph i k t thc b ng d u ; Tuy nhin khi nh p m t chu i k t m mu n chuy n sang dng khc ta ph i thm d u \ tr c khi xu ng dng.
L p trnh C v C++ - Chng 1. T ng quan v C v C++

Smith Nguyen Studio.


b. D ch v ch y chng trnh Khi nh n F9 th u tin chng trnh c d ch sang t p c ui l *.obj, sau lin k t cc t p v d ch sang t p c ui *.exe c th ch y c trong mi tr ng DOS. Khi d ch chng trnh c th xu t hi n 3 lo i l i sau y: L i c thng bo b i t kha error (l i c php): L i ny th ng x y ra do khi ta so n th o chng trnh khng tun theo ng nh ng quy t c c a C, th d int th ta g thnh Int; hay ta g thi u ngo c n, ngo c kp ch ng h n...
Sau y l m t s thng bo l i th ng g p lo i ny.

Unknown preprocessor directive Ch th ti n x l khng ng. Trong tr ng h p ny b n ph i xem l i cc l nh #include xem b n c vi t sai khng.

Declaration terminated incorrectly Khai bo k t thc khng ng. V d b n nh d u ; sau hm main nh sau: void main(); ch ng h n. Nn lu l sau tn hm khng c nh d u ; nh trn y. Sau tn hm ph i l d u { v k t thc hm l d u }.

Unexpected } Th a d u }. M i l n nh d u { th b n nn nh d u } r i sau g cc l nh vo o n gi a, nh v y trnh c tnh tr ng th a thi u d u { ho c }.

Compound statement missing } Thi u d u }.

Declaration syntax error Khai bo sai. V d b n vi t int a,b printf("Chao"); th my bo l i dng th 2. S d nh v y l v khi c qua dng th nh t khng c d u ; my cho r ng l nh cha k t thc v cn chuy n ti p sang dng th 2. Tuy nhin sang dng th 2 th my l i th y l nh khng ph h p nn bo l i dng ny. Cch vi t trn y tng ng v i cch vi t:
L p trnh C v C++ - Chng 1. T ng quan v C v C++

Smith Nguyen Studio.


int a,b printf("Chao"); V my th y r ng y l m t l nh khng ng. Cn n u ta s l i cc l nh trn l int a,b ;printf("Chao"); th my khng cn bo l i n a v n chuy n xu ng dng th khai bo ng. 2 g p d u ; v bi t l l nh int a,b; c

Undefined symbol B n s d ng m t bi n no m cha khai bo. V d b n cha khai bo bi n n nhng l i s d ng trong l nh: printf("%d",n); ch ng h n th my bo l Undefined symbol 'n'

Function ... should have a prototype V d trong l nh trn b n vi t sai l prinf("%d",n); th my bo l nguyn m u. Function 'prinf' should have a prototype. Ngha c a cu ny l: hm prinf c n ph i c

L i c thng bo b i t kha Warning (l i c nh bo): L i ny th ng x y ra do khi ta khai bo bi n nhng khng s d ng t i. V d


... is assigned a value that is never used Khai bo v gn gi tr cho bi n nhng khng s d ng. V d b n vi t cc l nh int n; n=10; nhng trong cc ph n ti p theo khng s d ng n ( hi n ra mn hnh ch ng h n, hay dng tnh gi tr c a bi n khc...) th my bo l 'n' is assigned a value that is never used tuy nhin y ch l thng bo (warning). Khi b n nh n F9 d ch chng trnh th my v n bo l success

Hai lo i l i trn y c thng bo ngay khi d ch chng trnh thnh file *.obj
L p trnh C v C++ - Chng 1. T ng quan v C v C++

Smith Nguyen Studio.


Lo i l i th 3 c th x y ra trong qu trnh lin k t: L i ny th ng x y th d khi c l i g i hm nhng hm ch m i c nguyn m u m cha c khai bo chi ti t. D ch v ch y chng trnh: N u chng trnh cha vi t xong ta c th nh n F9 d ch v s a l i. Khi chng trnh tng i hon ch nh th ta c th nh n Ctrl+F9 d ch v ch y chng trnh.

L p trnh C v C++ - Chng 1. T ng quan v

C v C++

Smith Nguyen Studio.


Chng 2. H ng, bi n v m ng

2.1. Cc ki u d li u c s
C c m t s ki u d li u c s nh sau: Ki u char (signed char) unsigned char int long unsigned int unsigned long float double long double
1. Ki u char

Mi n xc nh -128 127 0 255 -32 000 32 000 -2 t 2 t 0 65 000 04t 3.4e-38 3.4e+38 1.7e-308 1.7e+308 3.4e-4932 3.4e+4932

Kch th c(byte) 1 1 2 4 2 4 4 8 10

M t gi tr ki u char chi m m t byte v c bi u di n m t k t tng ng trong b ng ASCII. Khc v i Pascal, trong C gi tr c a bi n char c th c hi u l s . Th d n u ta khai bo char ch; th c hai cch gn ch=65 hay ch='A' cng cho m t k t qu . Khi hi n th ch n u ta dng khun d ng "%d" th c gi tr 65, cn dng khun d ng "%c" th c k t A. B ng sau y cho s khc bi t gi a char v unsigned char.
M ASCII 0 Gi tr bi n ki u char 0 Gi tr bi n ki u unsigned char 0 1 1 1 ... ... ... 127 127 127 128 -128 128 129 -127 129 ... ... ... 254 255 -2 -1 254 255

N u ta khai bo m t bi n ch c ki u k t b ng l nh char ch; v sau gn ch=200 th th c ch t ch ch nh n gi tr -56, do php th ch= = 200 s cho k t qu sai. Ni chung, c th th y r ng n u ta dng l nh gn ch=n , trong 0n255, sau dng l nh printf(%d,ch) in gi tr c a k t ch th n u n u n 127 ta s th y gi tr n trn mn hnh, cn n u 128 n 255 th ta s th y gi tr -(255-m+1) . Phn lo i k t : Cc k t c th phn lm 3 nhm: 0-31,32-126, 127-254; trong cc k t t t i u khi n, khng th nhn th y trn mn hnh. Ch :Trong chng trnh m t k t ph i c bao trong d u nhy n. Th d s cho ta ch=49, cn ch=1 l i cho ta ch bi u di n k t coa m ASCII l 1.
2. Ki u nguyn

0 n 32 l cc k

char ch='A'; ch='1'

V y c th xem ki u k t cng l m t d ng c bi t c a ki u nguyn. Khi ta dng khun d ng "%c" hi n m t s nguyn n > 255 th k t n%256 s c hi n. Th d n u n = 304 th k t ng v i m ASCII l 48 c in, t c l k t '0'.

Smith Nguyen Studio.


3. Ki u d u ph y ng

float chi m 4 byte, double chi m 8 byte.

2.2. H ng
H ng l cc i l ng (c th c tn ho c khng) m gi tr c a n khng th thay i trong qu trnh ch y chng trnh.

1. H ng k t

V d ; 'a', '1', 'B', ...


2. H ng s nguyn (h 10,8,16)

H ng int trong h 8 (Octal) c b t u b ng s 0, cn h ng int trong h 16 (Hexadecimal) b t u b ng s 0 v k t x (in th ng ho c in hoa). Th d 011 = 9 0x11 = 17 Ch . Khi hi n m t s nguyn d i d ng bt phn b ng l nh printf() ta dng khun d ng % v ch 0, cn v i d ng th p l c phn th dng % v k t x (in th ng ho c in hoa). V d printf("%o",9) ho c printf("%x",17) cho k t qu trn mn hnh l 11 printf("%o",011) ho c printf("%x",0x11) cho k t qu trn mn hnh l 11
3. float v double (s th c v s th c c chnh xc g p i)

V d ; 12.5, 36.98, ...


4. M t s h ng c s n: M_PI, M_E,... (trong math.h)

5. Cc h ng k t c bi t

'\'', '\"', '\n', '\0',... Lu : h ng '0' c m l 48, cn '\0' ng v i k t \0, c m l 0.


6. H ng xu k t

L m t dy k t b t k t trong 2 d u "", th d "Ha noi". Ch : 'a' l h ng k t g m m t byte, cn "a" l h ng xu k t g m 2 byte, 1 byte ch a k t byte cu i cng ch a k t '\0' l k t bo k t thc xu.

a,

Ch : Khi ta dng hm strlen(st) xc nh di c a chu i k t th k t '\0' khng c tnh vo di ny. Th d 3 bi n st1,st2,st3 sau y u c di l 3 char st1[]="123";
L p trnh C v C++ - Chng 2.H ng, bi n v m ng

Smith Nguyen Studio.


char st2[7]="123"; char *st="123"; Tuy nhin th c ra trong b nh lu tr m t chu i di 3 th my c n 4 v tr v m t v tr lu tr k t '\0'. Do khc v i thao tc v i m ng, khi thao tc v i chu i ta khng nn nh p s li u cho v tr cu i cng. Th d n u khai bo char st[10] th ta khng nn nh p s li u cho v tr 9. i u ny c th th y c qua v d sau: Gi s ta khai bo: char st[5]="123"; th khi chu i c di 3, 3 v tr ch a s li u l st[0]=='1', st[1]=='2', st[2]=='3'; v tr st[3]=='\0'. Cn n u ta khai bo char st[3]="012"; Th tuy my khng bo l i nhng th c ra c m t s i u khng h p l. N u ta dng hm strlen(st) ki m tra di th th y r ng di l 4 (m c d uth c ra di c a st l 3), v tr st[3] khng ph i l '\0' m l m t k t no , k t v tr st[4] m i l '\0'. Do n u ta dng l nh while(st[i]!='\0') putch(st[i]); ch ng h n th sau khi my in ra cc k t d ng. '0', '1', '2' th cn in ti p m t k t no n a r i m i

7. Tn h ng v cch gn gi tr cho h ng #define max 100 #define str "Ha Noi" const float a=10.123; const char str2[]="Hai Phong"; const char *str3="Tay Ho"; Khng nn dng const char str2[5]= "Hai Phong" ch ng h n, v c th di c a h ng v t qu di nh ngha. Ch : H ng c th l cc bi n chi m d ng b nh th d int m =10; nhng cng c th l nh ng gi tr t m th i, khng c phn ph i b nh th d M_PI, M_E, printf("\n%s","Ha Noi"); 2.3. Ki u enum Gi s ta ph i ti n hnh m t s cng vi c l p l i theo cc ngy trong tu n. Trong chng trnh ta vi t for(int i=2;i<=8;i++) [l nh] Tuy nhin theo cch ny th cc con s 2, 3, ... khng cho ta ngha g i nh l cc ngy trong tu n. C cho ta ta nh ngha bi n ki u li t k ph c v cho m c ch ny. Ta c th lm nh sau enum ngay_tt {hai, ba, tu, nam, sau, bay, chunhat}; ngay_tt i; for(i=hai;i<=chunhat;i++) {cc l nh} Gi s cc l nh l printf("%d ",i); th ta c k t qu l 0 1 2 3 4 5 6

L p trnh C v C++ - Chng 2.H ng, bi n v m ng

10

Smith Nguyen Studio.


V bi n enum th c ch t l bi n nguyn, do cc dng l nh trn c th vi t n gi n hn nh sau: enum {hai, ba, tu, nam, sau, bay, chunhat}; int i; for(i=hai;i<=chunhat;i++) [l nh] Ta c th kh i gn cc gi tr cho bi n enum. V d n u ta vi t: enum {hai=2, ba, tu, nam, sau, bay, chunhat}; th khi ta s c hai=2,ba=3,... 2.4. Bi n M i bi n ph i c khai bo tr c khi s d ng. Vi c khai bo c th c hi n theo m u sau: <Ki u bi n> <tn bi n 1>,<tn bi n 2>,...,<tn bi n n>; C th khai bo ngay khi s d ng, th d for(int i=0;i<n;i++) [cc l nh] 1. V tr c a cc khai bo Trong C++ th bi n c th khai bo t i v tr b t k trong chng trnh. 2. Kh i u cho cc bi n float a=10.123; char str2[]="Hai Phong"; char *str3="Tay Ho"; int x[] = {1,2,3}; float y[4] = {1.2, 3.2, 4.3, 6.5}; Nhng khng th vi t: float *py = {1.2, 3.2, 4.3, 6.5};//Vi t nh th ny l sai. Nhng v i chu i th l i c: char st1[]="123"; char st2[7]="123"; char *st="123"; 3. L y a ch c a bi n M i bi n c c p pht m t vng nh g m m t s byte lin ti p. a ch c a byte u tin l a ch c a bi n. a ch c a bi n c th nh n c b ng php ton &<tn bi n> Ch : Ta ch c th l y a ch c a m t bi n. Th d cc l nh sau y l sai int *p; const int m=10; pn=&m;//Dng l nh ny sai int k; p=&(k+1);//Dng l nh ny sai

Ta ch c th gn m t con tr b ng a ch c a m t bi n cng ki u v i n. V d php gn sau l sai:


L p trnh C v C++ - Chng 2.H ng, bi n v m ng

11

Smith Nguyen Studio.


int *p; const int m=10; p=&m;//Dng l nh ny sai Ph i s a l i l const int *p; const int m=10; p=&m;

4. Bi n a ch a ch c a m t bi n l s nguyn nhng ta khng th thao tc chng nh cc s nguyn thng th ng. Th d ta khng th gn int m; float x; m=&x; a ch c a m t bi n ngoi l n ch v tr c a bi n trong b nh cn mang thng tin l a ch c a bi n lo i g. Ta bi t r ng a ch c a 2 bi n nguyn lin ti p th cch nhau 2 byte, 2 s th c lin ti p cch nhau 4 byte,... c th lu tr v th c hi n cc php ton trn cc gi tr a ch , C nh ngha m t ki u bi n nguyn c bi t m gi tr c a chng l a ch c a cc bi n v g i bi n ny l con tr . Khi nh ngha con tr ta ph i ch r l con tr c a bi n lo i g. Th d khai bo m t con tr ki u nguyn ta vi t int *p; V khi ta c th gn p = &x; trong x l bi n nguyn no . 4. L y gi tr c a m t bi n thng qua a ch Gi s ta p l m t con tr . Khi *p s l gi tr c ch a trong vng b nh m p tr t i. Nh v y v i bi n x b t k th ta c *&x chnh l gi tr x. 2.5. M ng v chu i Trong ph n trn ta hi u bi n l m t vng b nh c t tn v c th lu tr m t ki u gi tr no . bi u di n nhi u gi tr ta ph i dng nhi u bi n. Tuy nhin nhi u khi s bi n l i ph thu c m t tham s no . Th d s thnh ph n c a m t vect ph thu c vo m t s n, cn s cc ph n t c a m t ma tr n l i ph thu c s hng v s c t. Trong nh ng tr ng h p ny ng i ta dng m t ki u d li u c c u trc l m ng bi u di n s li u. M ng l m t t p h p nhi u ph n t c cng m t ki u gi tr v c chung m t tn. V m t no c th coi m ng cng l bi n, nhng l bi n c c u trc ph c t p hn. nh ngha m ng Khai bo int a[10] s dnh 10 v tr lin ti p trong b nh , m i v tr g m 2 byte c th lu tr c m t s nguyn v cc v tr ny tng ng l a[0], a[1], ..., a[9] Khai bo int a[8][10] s dnh 80 v tr lin ti p trong b nh , m i v tr g m 2 byte c th lu tr c m t s nguyn v cc v tr ny tng ng l a[0][0], a[0][1], ..., a[0][9], a[1][0], a[1][1], ..., a[1][9], . . ., a[7][0], a[7][1], ..., a[7][9]. Ch : Khi ta khai bo m t m ng c kch c nh tr c, th d
L p trnh C v C++ - Chng 2.H ng, bi n v m ng

12

Smith Nguyen Studio.


int a[10]; th a l m t h ng a ch , do ta khng th gn a = < a ch >. Tuy nhin n u ta nh ngha m t bi n con tr , th d int *pn; th ta c th dng php gn cho pn. V i m t chu i char *s="123"; ch ng h n, ta c s l a ch c a bi n u tin c a chu i, t c l s[0], do *s chnh l gi tr c a s[0], cn *(s+1) l gi tr c a s[1],... 2.6. nh ngha ki u b ng typedef typedef int ng; typedef int matran[8][10]; ng x,y; matran a,b; Cc bi n x,y c ki u nguyn v a,b c ki u l ma tr n c p 8 x 10 v i cc ph n t nguyn. bo r ng m t identifier no l ki u d li u ch khng ph i l bi n, ta ch vi t nh khai bo identifier l bi n, sau thm t kha typedef pha tr c. V d l nh float a[20][20]; khai bo m t bi n a c ki u l m ng th c hai chi u c 20x20. Cn l nh typedef float a[20][20]; l i khai bo ki u d li u a l ki u m ng th c 2 chi u c c 20x20. 2.7. Kh i l nh Cc kh i l nh l ng nhau, ph m vi ho t ng c a cc bi n: Kh i l nh l t p h p cc l nh c bao trong hai d u { }. Kh i l nh c th g m nhi u kh i l nh khc. M t bi n c khai bo trong kh i l nh th mi n tc d ng c a n l kh i l nh trong cng ch a khai bo c a bi n . N u c cc bi n cng tn th bi n c khai bo sau cng s l bi n tch c c, t c l th c s tham gia trong m i php ton c tn bi n chung. 2.8. Vi nt v hm v chng trnh Khc v i Pascal, C khng cho php cc hm l ng nhau. Chng trnh c th c nhi u hm trong hm main() l thnh ph n b t bu c. 2.9. Bi n, m ng t ng 1. nh ngha Cc bi n c khai nbo bn trong thn hm (k c hm main()) c g i l bi n t ng hay c c b . 2. Ph m vi ho t ng v th i gian t n t i Bi n t ng ch t n t i trong kh i l nh m n c nh ngha V d void main() {auto int x; } Bi n t ng l ng m nh cho cc bi n c c b , do t kha auto th ng c b qua. Ch : Bi n t ng ch c khai bo trong cc hm. Sau y l v d c l nh khai bo sai: auto int i; //Dng l nh ny sai void main()
L p trnh C v C++ - Chng 2.H ng, bi n v m ng

13

Smith Nguyen Studio.


{auto int x; } l sai. 3.Kh i u cho bi n v m ng t ng Bi n ngoi (ton c c) khi khai bo th c t ng gn b ng 0 ho c r ng. Nhng v i bi n t ng khi khai bo xong m khng gn gi tr kh i u ho c gn gi tr th gi tr khng xc nh, l m t gi tr v ngha no . Khc v i C, trong C++ c th kh i u cho m ng ho c bi n, th d void main() {float a[4] = {2.3,1.5,2.6,3.8}; int b[][3] = {1,2,3,4,5,6}; int c[2][3] ={2,3,4,5,6,7}; } 2.10. Bi n, m ng ngoi 1. nh ngha Cc bi n c khai bo bn ngoi hm (k c hm main()) c g i l bi n ngoi. 2. Ph m vi ho t ng v th i gian t n t i Bi n ngoi t n t i t v tr c khai bo cho n h t chng trnh. V d :
void v1(); void v2(); void main() {clrscr(); v1(); v2(); getch(); } int i; void v1() {i=10; printf("%d",i); } void v2() { printf("%d",i); }

Chng trnh trn cho k t qu l 10 10

Cn n u ta thm l nh
printf("%d",i);

trong chng trnh main() th my s bo l i l bi n i cha c nh ngha.


L p trnh C v C++ - Chng 2.H ng, bi n v m ng

14

Smith Nguyen Studio.


Ch : N u trong m t hm no ta khai bo m t bi n cng tn v i bi n ngoi th bi n ngoi khng c tc d ng trong hm ny. Khi ta dng n bi n cng tn th bi n lun c hi u l bi n a phng. V d sau minh h a cho i u ny:
void v1();void v2();void main() {clrscr(); v1(); v2(); getch(); }int i;void v1() {int i=10; printf("\n%d",i); }void v2() {printf("\n%d",i); }

K t qu ch y chng trnh l 10 0 N u chng trnh vi t trn nhi u t p v cc t p c d ch c l p, th ph m vi s d ng c a bi n, m ng ngoi c th m r ng t t p ny sang t p khc b ng t kha extern (xem chng 11) 3. Kh i u cho bi n v m ng ngoi Bi n ngoi (ton c c) khi khai bo th c t ng gn b ng 0 ho c r ng. Quy t c khai bo v kh i u cng gi ng nh bi n t ng. Tuy nhin v i bi n t ng th sau khi khai bo bi n c th nh n m t gi tr vu v no . 2.11. Ton t sizeof sizeof(Ki u d li u) sizeof( i t ng d li u) ng d ng: int x[] = {1,2,3,4}; int n = sizeof(x)/sizeof(int);// Xc nh c c a m ng. 2.12. Bi n tnh, m ng tnh ngha c a bi n tnh c th th y r qua v d sau:
void vv() {static int i=1; printf("%d ",i++); } void main() {clrscr(); for(int j=1;j<=3;j++) vv(); getch(); }

K t qu ch y chng trnh l: 1 2 3

L p trnh C v C++ - Chng 2.H ng, bi n v m ng

15

Smith Nguyen Studio.


Chng 3. Bi u th c 3.1. Khi ni m bi u th c(expression) Bi u th c l m t gi tr c t o nn do s k t h p cc php ton v i cc h ng, bi n, ph n t m ng, hm... Nh v y b n thn cc h ng, bi n, ph n t m ng, hm cng l cc bi u th c. 3.2. Php ton s h c +, - *, / % 3.3. Cc php thao tc bit & : Php h i cc bit, v d : 3 & 5 = 0000 0000 0000 0011 & 0000 0000 0000 0101 = 1 | : Php tuy n cc bit, v d 3 | 5 =7 ^ : Php tuy n c lo i tr , v d 3 ^ 5 = 6 << :Php d ch tri (d ch dy bit k v tr v pha tri d u ph y, t c l nhn s d ch chuy n v i 2k ), v d 11 << 2 = 44 (1011 -> 101100) m<<k = m* 2k >> :Php d ch ph i (d ch dy bit k v tr v pha ph i d u ph y, t c l chia s d ch chuy n cho 2k), v d 11 >> 2 = 2 (1011 -> 10) m>>k = m/ 2k ~ : Php l y ph n b (trong chu i bit 0 -> 1 v ng c l i) 3.4. Cc php ton quan h v logic >, >=, <, <=, = =, != &&, || 3.5. Php chuy n i ki u gi tr int(a), float(b),... sqrt(float(n)); 3.6. Php ton tng gi m n++, ++n, n--, --n V d : int m,n,x,y; m=n=5; x = m++; y = ++n; printf("\n%d %d %d %d",x,y,m,n); Cho k t qu l 5 6 6 6 3.7. Cu l nh gn v bi u th c i+=2; i*=2; x*=y+3 //x=x*(y+3) 3.8. Bi u th c i u ki n
e1?e2:e3

Smith Nguyen Studio.


e1 l bi u th c logic V d : max = a>b? a:b;

Cu l nh printf("\n%8.2f",a<b?a:b); s in ra c c ti u c a hai bi n th c a v b.

3.9. Th t u tin cc php ton

L p trnh C v C++ - Chng 3.Bi u th c

17

Smith Nguyen Studio.


Chng 4. Vo ra 4.1. Hm printf int printf(const char *dk, [danh sch cc i]); i dk l con tr ki u char ch a a ch c a chu i i u khi n. 1. Chu i i u khi n g m 3 lo i k t : - Cc k t i u khi n nh: \n Xu ng dng, \t D u tab - Cc c t chuy n d ng v t o khun (g i t t l c t ) - Cc k t hi n th ra mn hnh. i v i m t s k t c bi t nh d u ', '', \ th c cch vi t c bi t hn: Tr c cc k t c thm k t \. Ph n quan tr ng v ng ch nh t trong chu i i u khi n l ph n c t sau: %[-][fw][.pp]<K t chuy n d ng> V y m t c t ph i b t u b ng d u % v k t thc b ng k t chuy n d ng. a. fw l r ng dnh cho tr ng ra. N u fw < r ng tr ng th r ng in ra b ng r ng th c t c a tr ng. N u fw b t u b ng s 0 th v tr tr ng bn tri c thay b ng cc s 0. fw c th c thay b ng d u, th d printf("%*.2f ",a); Khi r ng c a i tng ng l r ng th c t b. D u tr (-): N u c d u - th d n tri, khng c th d n ph i. c. pp ch nn dng cho s th c. pp l s ch s sau d u ch m th p phn, n u khng c th c hi u l pp=6. d. K t chuy n d ng: quy nh d ng in ra c a i t ng, th d d l s nguyn, f l s th c, o l s bt phn, x l s th p l c phn... B ng cc k t chuy n d ng K t chuy n d ng c d ho c i ld ho c li u o lo x lx f e g s V d : Ki u c a i char int long int int long int long float ho c double float ho c double float ho c double Xu k t i c hi n th nh k t s nguyn h 10 S nguyn di S nguyn khng m S nguyn khng m h 8 S nguyn khng m h 8 S nguyn khng m h 16 S nguyn khng m h 16 S th c d ng th p phn S th c d ng khoa h c. D ng khoa h c ho c th p phn tu thu c lo i no ng n hn. Khng c cc s 0 v ngha. Cc k t c d ng t ng qut nh

Smith Nguyen Studio.


Ta c n in ra dng thng tin: Nng su t tng 19.25% Trong gi tr 19.25 l gi tr c a bi n th c ns, ta vi t: printf("\nNang suat tang %5.2f%",ns); Gi s ta c n in ra Nng su t tng 19.25% trong nm 2000 Trong gi tr 19.25 l gi tr c a bi n th c ns, 2000 l gi tr c a bi n nguyn nam c th thay i tu thu c t ng tr ng h p, n u ta vi t: printf("\nNang suat tang %5.2f% trong nam %4d",ns,nam); th v m t c php l ng nhng l nh khng in ra i u ta mong mu n. Trong tr ng h p ny ta nn tch lm 2 l nh: printf("\nNang suat tang %5.2f%",ns); printf(" trong nam %4d",nam); 2. Danh sch cc i Cc i c n c phn cch nhau b i d u ph y. i c th l h ng, bi n, hm hay l k t h p c a chng b ng cc php ton. V y cc i chnh l cc bi u th c. Ni chung c bao nhiu c t th c b y nhiu i. N u s i nhi u hn s c t th cc i khng c c t tng ng s b b qua. Cn n u s i t hn s c t th my s b r i v c th d n n nh ng k t qu sai. 4.2. Hm scanf int scanf(const char *dk, [danh sch cc i]); 1. Danh sch cc i Cc i c n c phn cch nhau b i d u ph y. i ph i l m t con tr ch a a ch c a m t bi n no . V tn c a chu i k t l a ch nn khng c n d u l y a ch ng tr c tn chu i. 2. Chu i i u khi n G m cc k t c t chuy n d ng. M i c t th ng c m t i tng ng ph n c t c d ng t ng qut nh sau: %[*][dr]<K t chuy n d ng> a. N u c d u * th tr ng vo v n c c nhng gi tr c a n khng c lu trong b nh . Th d : scanf("%d%*d%d,&a,&b); V khi chng trnh ch y l nh ny ta nh p cc s 1 2 3 th ta c a=1,b=3 cn gi tr 2 th b b qua. Cch ny trong th c t t khi dng. b. dr ni chung v ng m t, n u c m t th ngha c a n c th hi u qua v d sau:
L p trnh C v C++ - Chng 4.Vo ra

19

Smith Nguyen Studio.


char a,b; scanf("%2s%3s,&a,&b); N u ta nh p dng vo l 12345678 ch ng h n th 2 k t 12 c gn cho a, 3 k t ti p theo c gn cho b, t c l 345. cc k t cn l i b b qua. Ni chung c t ch g m k t B ng cc k t chuy n d ng K t chuy n d ng c d ho c i ld ho c li u o lo x lx f ho c e lf ho c le g (Khng c) s Ki u c a i char int long int int long int long float double Xu k t i c hi n th nh k t s nguyn h 10 S nguyn di S nguyn khng m S nguyn khng m h S nguyn khng m h S nguyn khng m h S nguyn khng m h S d u ph y ng S d u ph y ng Khng c d ng ny Cc k t % v c t chuy n d ng c th ng k trong b ng sau:

8 8 16 16

Ch : K t chuy n d ng c a s nguyn khng m h 8 l ch o, s nguyn khng m h 16 l ox; nhng bi u di n s nguyn khng m h 8 b t u b ng s 0, cn s h 16 th b t u b ng s 0 v ch x. Cc dng nghing v m chnh l s khc bi t gi a hm scanf v printf. Ta c th nh p cc tr ng vo lin ti p nhau, sao cho m i tr ng cch nhau t nh t m t kho ng tr ng. Trong kho tng tr ng c hi u l d u cch, d u tab ho c d u xu ng dng. Nh v y gi a cc tr ng vo c th ch a m t s kho ng tr ng tu . Nh v y ta khng th nh p m t chu i k t c ch a kho ng tr ng. V d v hm scanf: int n;float a;double b;char st[5] scanf("%d%f%lf%s",&n,&a,&b,st); Nh v y c th th y s khc bi t c a chu i i u khi n trong hm printf v hm scanf l: chu i i u khi n trong hm printf c th co 3 thnh ph n: cc k t i u khi n, cc k t c t v cc k t hi n trn mn hnh; cn trong l nh scanf th ch c cc k t c t . 4.3. a ra my in- hm fprintf int fprintf(stdprn,const char *dk, [danh sch cc i]); T t c nh ng i u ni l nh printf u ng. Ch c m t i m khc bi t: trong l nh printf thi t b ra l mn hnh cn v i l nh fprintf th thi t b ra l my in.
L p trnh C v C++ - Chng 4.Vo ra

20

Smith Nguyen Studio.


4.4. Dng vo stdin v cc hm nh p d li u Tr c h t ta hy ch y th o n chng trnh n gi n sau:
char ca,cb; ca=cb='z'; scanf("%c",&ca); scanf("%c",&cb); printf("\n%c %c",ca,cb);

N u ta g a th l nh scanf th 2 b b qua. L nh printf ti p theo ch hi n ln mn hnh k t a m c d ta gn cb='z'. Nh v y l nh scanf th trong th c t gi tr c a cb thay i.

2 tuy c v nh khng c th c hi n, nhng

Tr c khi gi i thch hi n t ng trn y chng ti gi i thi u thm m t vi khi ni m lin quan n cc thao tc vo ra. Turbo C nh ngha m t s dng xu t nh p chu n, th c ch t l cc vng m chuyn cho cc thao tc vo ra. Cc dng ny c t tn v c th thao tc trong chng trnh.
Predefined streams automatically opened when the program is started. Name Meaning stdin Standard input device stdout Standard output device stderr Standard error output device stdaux Standard auxiliary device stdprn Standard printer

Khi g p m t l nh nh p s li u v ta b t u g t bn phm th cc k t c g i vo stdin. Chng trnh s ch cho n khi ta g phm bo hi u k t thc l nh nh p s li u th chng trnh b t u c cc k t t stdin gn cho cc tr ng nh p. N u s li u trong stdin cha th chng trnh l i d ng ta nh p ti p. Cn n u s li u c nhi u hn th chng trnh ch l y v a gn cho cc tr ng vo, ph n cn l i v n cn l i trong stdin. Khi g p l nh nh p s li u ti p theo th tr c h t chng trnh xem trong stdin c s li u khng, n u c s li u th chng trnh l y ngay cc s li u gn cho tr ng vo m i v l nh nh p s li u b b qua. Ta c c m gic l l nh khng c th c hi n nhng th c ra c th c hi n nhng c th khng nh ta mu n. Tr l i o n chng trnh trn y. Khi nh p s li u cho ca ta g a v nh n th c k t a v k t (\n, LF c m l 10) u c a vo stdin. L nh scanf c k t a t stdin nhng khng lo i k t \n ra kh i stdin. Do v y khi t i l nh scanf ti p theo th chng trnh l y ngay gi tr \n gn cho cb m khng c n ch ng i s d ng nh p s li u m i. Khi hi n ra mn hnh th k t \n khng nhn th y do ta ch th y ch a a m thi. N u by gi ta s a l i l nh printf thnh
printf("\n%d %d",ca,cb);

Ta s th y k t qu l 97 10 97 l m c a a, cn 10 l m c a \n. Turbo C kh c ph c v n ny b ng cch cung c p hm lm s ch vng m stdin nh sau: fflush(stdin);


L p trnh C v C++ - Chng 4.Vo ra

21

Smith Nguyen Studio.


Hm ny s lm s ch vng m bn phm, nh v y s xa h t h u qu c a cc thao tc nh p s li u tr c m t m t thao tc nh p s li u m i. Chng trnh trn y c th thm l nh ny tr c khi th c hi n l nh scanf th 2 nh sau:
char ca,cb; ca=cb='z'; scanf("%c",&ca); fflush(stdin); scanf("%c",&cb); printf("\n%c %c",ca,cb);

V ta khng cn g p i u b t th ng trn y n a. Sau l nh scanf th nh t my s ch ta nh p s li u cho l nh th 2. K t qu hi n ra trn mn hnh l nh ng k t ta nh p vo. C m t cch khc kh k t '\n' l trong l nh scanf th nh t thm c t %*c
scanf("%c%*c",&ca);

Khi k t

'\n' cng c c (khng lu vo bi n no c ) v b lo i kh i stdin.

Tuy nhin nh ta s th y, khng ph i l nh nh p s li u no cng ho t ng nh l nh scanf. Cng c l nh lo i b d u \n sau khi c s li u tr c . Th d trong o n chng trnh sau y n u sau khi g a th my v n ch ta nh p ti p d li u cho l nh scanf ti p theo.
char a,b; a=b='z'; cin>>a;//L nh C++, c n t i <iostream.h> cin>>b; //L nh C++ printf("\n%c %c",a,b);

4.5. Nh p /xu t s li u cho chu i v k t M t s hm thao tc trn k t v chu i:


int getc(FILE *stream); int putc(int c, FILE *stream); int getch(void);//Nh n k t tr c ti p t bn phm, k t khng hi n trn mn hnh int getche(void); //Nh n k t tr c ti p t bn phm, k t hi n trn mn hnh int putch(int ch); //Mu tu thu c vo l nh textcolor int getchar(void);//Nh n k t t stdin int putchar(int c); //Lun hi n mu en tr ng char *gets(char *s); int puts(const char *s);

Cc hm scanf, cin ch nh p c chu i khng c d u cch. Hm gets nh p c chu i ch a d u cch: Nh n dy k t t stdin cho n khi g p k t '\n'. K t '\n' b lo i kh i stdin nhng khng c t vo cu i chu i. Chu i c b sung k t k t thc '\0'. Cc hm printf, cout v puts c th hi n c cc chu i c ch a d u cch 4.6. M t s hm x l chu i strcmp(st1,st2)>0 ngha l st1>st2, phn bi t ch hoa ch th ng strcmpi(st1,st2)>0 ngha l st1>st2, khng phn bi t ch hoa ch th ng strcat(st1,st2) ghp st2 vo st1
L p trnh C v C++ - Chng 4.Vo ra

22

Smith Nguyen Studio.


char* strchr(char *s, int kt); Tm l n xu t hi n u tin c a kt trong s. N u tm th y tr v a ch c a k t tm c, n u khng tr v NULL. strcpy(st1,st2); th c ch t l gn st1=st2; strlen(st); cho di chu i st.strlwr(st) chuy n thnh ch th ng (gi ng tolower(ch) i v i k t ). strupr(st); 4.7. S khc bi t gi a m ng v chu i Tr c h t ta ch y th o n chng trnh sau y
int a[]={1,2,3}; cout<<endl<<&a; cout<<endl<<a; cout<<endl<<*a; cout<<endl; char *b="123"; cout<<endl<<&b; cout<<endl<<b; cout<<endl<<*b;

Ta c k t qu c d ng: 0x8f90fff0 0x8f90fff0 1 0x8f9fffee 123 1 Nh v y tn m ng hay tn chu i bi u th a ch c a ph n t u tin. V v y *a hay *b u cho gi tr c a ph n t u tin. Theo cch hi u ny th ng l ra &a v a ph i nh nhau, &b v b cng nh nhau. Nhng i u ny ch ng v i m ng. i v i chu i th cout<<b l i cho ton b chu i. y l i m khc bi t gi a chu i v m ng. N u v i m ng ta ch c th nh p s li u v cho hi n t ng ph n t c a m ng th n u ta cng i h i nh v y v i chu i th s lm cho cng vi c l p trnh r t r c r i. Chu i c th xem nh m ng, nhng ng th i ph i c truy xu t nh m t ph n t . Khng th thao tc v i tn ng i, tn a danh m coi nh h p thnh c a nhi u ph n t , m i ph n t l m t k t c. Chnh v v y cc nh sng t o ngn ng C ch n m t trong 2 k hi u &b v b m t k hi u dng thao tc ton b chu i. V v y khi dng l nh scanf("%s",b); ta c th nh p ton b chu i cn l nh printf("%s",b); s in ton b chu i. N u b l m ng th cc l nh trn y khng th c hi n c v my s bo l i. Ta c th kh i u cc gi tr cho chu i k t nh v d sau
char a[]="123"; L p trnh C v C++ - Chng 4.Vo ra

23

Smith Nguyen Studio.


char a1[4]="123"; char *a3="123";

Ho c khai bo v dng php gn: char *a; a="123"; Tuy nhin n u ta vi t: char a[4]; a = "123"; Th my bo l i. Nguyn nhn l v a l m ng c nh s n kch c , khng th thay i c, a khng ph i l bi n con tr nn khng th ng pha bn tri trong php gn.

4.8. Cc hm vo ra v d ch chuy n v tr trn mn hnh Hm gotoxy(cm,rn); s a con tr n v tr c t th cm v hng th Hm kbhit() nh n gi tr 1 n u c phm c b m.

rn trn mn hnh.

4.9. Cc lu ng nh p xu t cin,cout C++ cung c p cc dng (stream c ch a trong iostream.h) cin v cout nh p xu t s li u. Sau y l vi v d : float a;int m; cin>>a; cin>>m; cout<<endl<<setw(8)<<setprecision(4)<<a; cout<<'\n'<<oct<<m; cout<<'\n'<<hex<<m;

L p trnh C v C++ - Chng 4.Vo ra

24

Smith Nguyen Studio.


Chng 5. Cc ton t i u khi n 5.1. Nh c l i khi ni m cu l nh v kh i l nh 5.2. Ton t if if <bi u th c> <l nh 1> if <bi u th c> <l nh 1> else <l nh 2> Th d : if(a>b) max=a; else max=b; 5.3. else if Khi mu n th c hi n m t trong n l nh ta c th s d ng if nhh sau if <bi u th c 1> <l nh 1> else if <bi u th c 2> <l nh 2> ... else if <bi u th c n-1> <l nh n-1> else <l nh n> 5.4. Ton t switch switch<bi u th c nguyn> {case n1: <Cc l nh> case n2: <Cc l nh> ... case nk: <Cc l nh> [default: <Cc l nh>] } Cch ho t ng: N u <bi u th c nguyn> =ni th chng trnh b t u th c hi n t case ni cho n h t kh i l nh. Nh v y n u mu n thot kh i kh i l nh o n gi a th ta ph i dng l nh break. N u khng c gi tr ni no trng v i <bi u th c nguyn> th chng trnh nh y n default, ho c ra kh i l nh switch n u khng c default. 5.5. Ton t goto v nhn nhan: x+=y; ... goto nhan; 5.6. Ton t for for([cc l nh A]; [bi u th c B]; [cc l nh C]) [l nh D]; [l nh E]; Ch r ng ba ph n A, B, C cch nhau b ng d u ; cch ho t ng c a ton t for nh sau: 1. N u c [cc l nh A] th th c hi n cc l nh ny. N u ph n ny g m nhi u l nh th cc l nh cch nhau b ng d u , (ch khng ph i l d u ;), v d cc l nh A c th l int i=1, int j=2; Sau khi th c hi n cc l nh A th chuy n sang b c th 2 sau y.
L p trnh C v C++ - Chng 5. Cc ton t i u khi n

Smith Nguyen Studio.


2. Xc nh [bi u th c B], n u bi u th c ny sai th k t thc l nh for t c l chuy n sang b c 4, n u B ng th th c hi n [l nh D] sau chuy n sang b c 3 sau y. 3. Th c hi n cc l nh C, (thng th ng cc l nh ny lm thay i gi tr bi u th c B), tr l i b c 2. V d c th l i++, ho c i++, j++ 4. K t thc l nh for, t c l chuy n sang th c hi n [l nh E] ngay sau l nh for. Nh v y n u [bi u th c B] lun lun ng th vng l p s v h n. Trong tr ng h p [bi u th c B] v ng m t ch ng h n, th c hi u l bi u th c B lun lun ng. Trong ph n B c th khng ph i l m t bi u th c duy nh t, m c th c cc bi u th c cch nhau b ng d u , v d i<10, j<20 . Lc ny bi u th c B c hi u l i<10 && j<20. V d v l nh for: V d 1: Tnh t ng S = 1+2+3+...+100 int i,s; s=0; for(i=1;i<=100;i++) s=s+i; V d 2: Tnh t ng S = 1+1+2+2+3+3.+4+4 int i,s; s=0; for(i=1,j=1;i<=4, j<=4;i++,j++) s=s+i+j;

5.6. Ton t while while(<bi u th c A>) <l nh B>; [l nh C]; <bi u th c A> l bi u th c logic, th ng l m t bi u th c nh n gi tr s . N u gi tr c a n khc 0 th nh n gi tr ng, n u gi tr c a n =0 th nh n gi tr sai. Cch ho t ng: 1. N u <bi u th c A> sai th <l nh B> khng c th c hi n, chuy n sang b c 3. 2. N u <bi u th c A> ng th th c hi n <l nh B> sau quay l i b c 1. (Thng th ng <l nh B> lm thay i gi tr <bi u th c A>). 3. K t thc l nh while, chuy n sang th c hi n <l nh C> v cc l nh sau . V d 1: Tnh t ng S = 1+2+3+...+100 int i,s; s=0;i=1; while(i<=100) s+=i++;

5.7. do ... while do <l nh A> while<bi u th c B> D <bi u th c B> sai hay ng th <l nh A> t nh t c th c hi n m t l n. Do ng i ta g i l nh ny l l nh ti n tr m h u t u. 5.8. L nh break v l nh continue V d 1: Tnh t ng S =1+2+3+4+5 s=0;
K thu t l p trnh C - Chng 5.Cc ton t i u khi n

26

Smith Nguyen Studio.


i=1; for(i=1;i<=10;i++) {if(i==6) break; s=s+i; } V d 2: Tnh t ng S =1+2+3+4+5+7+8+9+10 s=0; i=1; for(i=1;i<=10;i++) {if(i==6) continue; s=s+i; } v d 1 S= 1+2+3+4+5 = 15 v d 2 S= 1+2+3+4+5+7+8+9+10 = 49

K thu t l p trnh C - Chng 5.Cc ton t i u khi n

27

Smith Nguyen Studio.


Chng 6. Hm v c u trc chng trnh 6.1. Khai bo v nh ngha hm Tng t nh m t bi n, m t hm ph i khai bo tr c khi n c g i. M t khai bo hm c 3 ph n: Ki u cho ra, tn v danh sch tham s . Hm c vai tr ngang nhau, C++ khng cho php xy d ng m t hm bn trong hm khc. V d : Khai bo hm: double power(double x, int n); Trong double l ki u cho ra, power l tn c a hm v (double x,int n) l danh sch cc tham s . Hm ny c 2 tham s l x v n. Cc tham s ny cn c g i l cc tham s hnh th c. Danh sch cc tham s c th tr ng, nhng cc d u ngo c n v n c n thi t. M t khai bo hm cn c g i l cc nguyn m u hm (prototype). Ph n ny ch a cc thng tin t i thi u m b bin d ch c n bin d ch cc l nh g i n hm. V v y trong ph n khai bo c th b b t tn cc tham s ch ng h n nh: double max(double,double); Tuy nhin n u bi n l m ng th khng th b tn bi n c. Ta ch c th vi t m t cch n gi n hn, v d int x[],float y[][10] ch ng h n. Lu l v i m ng 2 chi u ph i c thng tin v s c t. Ph n khai bo ph i v tr tr c l i g i hm trong chng trnh. Tuy nhin nh ta c th th y, ph n khai bo cha xc nh m t hm. Hm cn c ph n nh ngha n m v tr b t k trong chng trnh (t t nhin l khng ph i bn trong m t hm khc). V d : nh ngha hm: double max(double x,double y) {return (x>y?x:y); } Ch : N u nh ngha hm n m tr c l i g i n th khng c n khai bo m u n a. Trong thn hm c th khai bo cc bi n c c b . Cc bi n ny khng c trng tn v i cc tham s . Trong thn hm ta c th s d ng cc tham s m khng khai bo l i. N u ta khai bo l i th chng trnh s bo l i. Trong ph n nh ngha hm khng c b tn cc tham s nh trong ph n khai bo. N u hm c ki u cho ra th cu i thn hm ph i c l nh return <bi u th c>; trong <bi u th c> c cng ki u gi tr v i hm. Trong thn hm c th c m t ho c nhi u l nh return <bi u th c>; Khi chng trnh g p l nh ny th gi tr hm c tr v v chng trnh thot kh i hm. Tn hm cng l m t identifier, do khng c t tn hm trng v i tn bi n ho c ng c l i. Khi ta khai bo tham s l m ng m t chi u hay con tr th khi g i c th g i tham s th c l con tr ho c m ng. Th d khai bo char st[]; v char *st; l hon ton tng ng. Tuy
L p trnh C v C++ - Chng 5. Cc ton t i u khi n

Smith Nguyen Studio.


nhin v i m ng 2 chi u th khng cn ng n a. Th d o n chng trnh sau y l khng h pl :
void v(int **mm) {printf("\n%d",mm[0][0]); } void main() {clrscr(); int m[2][3]={1,2,3,4}; v(m); getch(); }

Sau y l v d ng v khai bo v g i hm: #include <malloc.h>


... void v(int **a,int m,int n) {for(int i=0;i<m;i++) {printf("\n"); for(int j=0;j<n;j++) printf("%d ",a[i][j]); } }; void main(void) {clrscr(); int m=2,n=3,i,j; int **b; b = (int**) malloc(sizeof(int*)*2); //(1) for(i=0;i<2;i++) b[i]=(int*) malloc(sizeof(int)*3); //(2) for(i=0;i<m;i++) for(j=0;j<n;j++) b[i][j]=i*3+j; v(b,2,3); getch(); }

Ch . l nh (1) c th thay b ng
b=new int* [2];

l nh (2) c th thay b ng
b[i]=new int [3];

6.2. Cc hm void void ti ng Anh c ngha l tr ng r ng, khuy t. Hm ki u void l m t hm c ki u cho ra l void. i u ny c ngha l n khng cho ra gi tr , gi ng nh procedure trong Pascal. Trong hm c th c ho c khng c l nh return; nhng l nh ny n u c th ch c d ng n gi n l return; khi chng trnh g p l nh ny th chng trnh thot kh i hm. N u khng c l nh return th chng trnh ch y n h t thn hm r i m i thot kh i hm. V d : By gi ta xt m t v d l in ra ngy trong tu n t th 2 n th 7 b ng ti ng Anh khi cho ngy b ng s , th d 2 l th 2, 3 l th 3, . . . v vi t hm b ng 2 cch: c ki u cho ra v ki u cho ra l void. Cch 1: char* weekday(int n)
L p trnh C v C++ - Chng 6.Hm v c u trc chng trnh

29

Smith Nguyen Studio.


{switch(n) {case 2: return "Monday"; case 3: return "Tuesday"; case 4: return "Wednesday"; case 5: return "Thursday"; case 6: return "Friday"; case 7: return "Saturday"; } return ; } Trong chng trnh main() ta s dng l nh printf("%s",weekday(n)) in ra cc ngy.

Cch 2: void weekday(int n) {switch(n) {case 2: printf("\n%s","Monday");break; case 3: printf("\n%s","Tuesday"); break; case 4: printf("\n%s","Wednesday"); break; case 5: printf("\n%s","Thursday"); break; case 6: printf("\n%s","Friday"); break; case 7: printf("\n%s","Saturday"); break; } return; } 6.3. L i g i hm Khi khai bo hm cc tham s c g i l tham s hnh th c. Khi s d ng hm cc tham s c thay b ng cc tham s c ki u tng ng. Khi g i hm ta khng c n ch r cc tham s c ki u g v ki u c a chng c khai bo tr c khi g i. Ch c tn c a cc tham s c thay vo cc v tr tng ng c a cc tham s hnh th c. Th d xc nh max trong 2 s a,b ta g i t=max(a,b); 6.4. S d ng hm assert() ki m tra i u ki n tr c H u h t cc hm khng th c thi t t trn t t c cc gi tr c a cc tham s . Th d hm double power(double x,int n) m chng ta s xt t i sau y ch c ngha v i x>0. i v i cc hm c tr v gi tr khc v i ki u void th i khi r t kh tm m t ki u ra tng ng v i cc tr ng h p khng thch h p. Trong cc tr ng h p ny ta c th dng hm assert() c nh ngha trong assert.h ki m tra tr c cc i u ki n. Khi i u ki n khng th a mn th chng trnh d ng th c hi n hm v km l i thng bo. V d : double power(double x,int n) {assert(x>0); double y=1.0;int m=abs(n);//N u l double th dng fabs() for(int i=0;i<m;i++) y*=x; if(n<0) y=1/y; return y; }

L p trnh C v C++ - Chng 6.Hm v c u trc chng trnh

30

Smith Nguyen Studio.


6.5. Cc i s m c nh N u ta s a l i hm nh sau double power(double x=1.0,int n=2) {assert(x>0); double y=1.0;int m=abs(n);//N u l double th dng fabs() for(int i=0;i<m;i++) y*=x; if(n<0) y=1/y; return y; } Th ta c th g i hm power() m khng c tham s . Khi tham s c hi u l cc tham s m c nh. Nh th d trn y ta c: printf("\n%f",power()); s cho k t qu l 1.

6.6. Truy n tham s cho hm 1. Truy n b ng tham tr (value parameter) (Ch r ng tn m ng l con tr do hm c tham s l m ng lun c t ng truy n theo a ch . Th m ch n u ta vi t void vv(double &a[2][3]) ch ng h n th my s bo l i. Tuy nhin n u ta nh ngha tr c typedef double kmatran[2][3]; th l i c th vi t void vv(kmtran &a);) Ta xt o n chng trnh sau: void f1(int x) {x*=3; printf("\n%d",x); } void main() {int a=1; printf("\n%d",a); f1(a); printf("\n%d",a); } K t qu trn mn hnh l: 1 3 1 M c d u trong thn hm ta thay i gi tr c a bi n x nhng khi ra kh i th chng trnh x l i l y gi tr c. Nguyn nhn l v hm c nh ngha theo ki u truy n tham tr , nn khi m t tham s c g i th khng ph i b n thn tham s m b n sao c a n c thay vo hm. Khi ra kh i hm bi n x l i c hi u l bi n tr c khi g i hm. Truy n b ng tham tr h ng (const value parameter):
L p trnh C v C++ - Chng 6.Hm v c u trc chng trnh

31

Smith Nguyen Studio.


N u hm f1 c s a l i nh sau: void f1(const int x) {x*=3; printf("\n%d",x); } Th my s bo l i. V khi khai bo ki u tham tr h ng th trong thn hm khng c php thay i gi tr c a bi n ki u tham tr h ng. 2. Truy n theo a ch Ta xt o n chng trnh sau: void f1(int *px) {*px*=3; printf("\n%d",*px); } void main() {int a=1; printf("\n%d",a); f1(&a); printf("\n%d",a); } K t qu trn mn hnh l: 1 3 3 Ngha l sau khi ra kh i chng trnh th x l y gi tr thay i trong chng trnh con. y l cch truy n tham s theo a ch . Qua cch truy n ny th chng trnh con lm vi c tr c ti p v i gi tr m tham s a ch tr t i, t c l gi tr th c s c a bi n. Do v y n u trong hm gi tr bi n b thay i th khi thot kh i hm nh ng s thay i v n c gi l i. Khi truy n tham s theo a ch ta c n ch t i nh ng i m sau: M ng ch c th truy n cho hm qua a ch , do i v i d li u ki u m ng th m i s thay i trong hm v n cn tc d ng khi ra kh i hm. C th dng 2 cch khai bo bi n <ki u d li u>* <tn bi n con tr > ho c <ki u d li u> *<tn bi n con tr > (th d int* pi ho c int *pi, trong pi l con tr ki u int). C 2 cch ny hon ton tng ng. Cch th nh t th ng c dng khi khai bo nguyn m u hm, v khi ta ch khai bo ki u c a bi n, cha c n khai no tn. Con tr khng c n ph i kh i t o khi khai bo nhng ph i kh i t o tr c khi s d ng. Khng c gn gi tr khc ki u cho con tr . Th d trong hm trn y ta khng th g i f1(2); ho c f1(&(x+1)); 3. Truy n b ng tham chi u (reference parameter): Trong C++ ng i ta cn a thm khi ni m bi n tham chi u. C th xem bi n tham chi u l m t b c ti n c a con tr . Ta hy xt o n chng trnh sau:
L p trnh C v C++ - Chng 6.Hm v c u trc chng trnh

32

Smith Nguyen Studio.


int i=10; int& j=i; j=20; printf("\n%d",i); o n chng trnh trn y s cho k t qu l 20 ngha l gi tr i b thay i m c d u trong chng trnh khng c l nh no lm thay i gi tr i. Nguyn do l v bi n j cng chi m vng b nh nh bi n i. Do m i s thay i c a i u tng ng v i thay i trn j v ng c l i. V y ta c th hnh dung m t bi n tham chi u gi ng nh b danh c a bi n khc. Ta c m y i u ch sau y v bi n tham chi u: Bi n tham chi u cng ch a a ch c a m t h c th nh cc bi n khc. Bi n tham chi u c n ph i c kh i t o khi khai bo. Th d n u ta khai bo int& i; th my s bo l i. i u ny cng d hi u, v bi n tham chi u l bi n "n theo", do ph i c kh i t o khi khai bo. T t nh t l ta kh i t o bi n tham chi u theo m t bi n khc c. Cn n u ta kh i t o b ng m t h ng, th d int &m=2; th my khng bo l i nhng c dng c nh bo Temporary used to initialize 'm' . Khng c p pht b nh ng cho bi n tham chi u. Khng dng cc php ton nh tng ho c gi m a ch i v i bi n tham chi u. M c d b n ch t c a bi n tham chi u l con tr , nhng ta c th s d ng tn bi n tham chi u truy nh p n gi tr c a n. y l i m khc bi t gi a bi n thu c ki u tham chi u v bi n ki u con tr . N u trong o n chng trnh trn ay ta s a l i l const int i=10; int& j=i; j=20; printf("\n%d",i); Th k t qu l 10 Ngha l gi tr c a i khng b thay i. i u ny c v nh mu thu n v i i u ta ni trn y l bi n j th c ra l b danh c a i m thi. Chng ti s khng i su thm v v n ny m ch mu n nh c nh c gi m t i u l ta ph i vi t cc dng l nh sao cho chng c ngha. Th d n u ta khng mu n thay i gi tr c a i th khng nn gn b danh cho n n a. Truy n tham s theo ki u tham chi u: Tr l i v n truy n tham s cho hm, n u trong chng trnh trn ta s a l i hm f1 nh sau: void f1(int &x) {x*=3; printf("\n%d",x); } void main() {int a=1; printf("\n%d",a); f1(a);
L p trnh C v C++ - Chng 6.Hm v c u trc chng trnh

33

Smith Nguyen Studio.


printf("\n%d",a); } Th k t qu trn mn hnh s l: 1 3 3 Nh v y gi tr x th c s b thay i khi ra kh i hm. L do l v khi c l i g i hm th m t bi n tham chi u n bi n x tham gia vo cc tnh ton trong thn hm, v nh v y gi tr g c c a x b thay i. N u ta khai bo cc tham s hm theo ki u tham chi u th khi g i khng c n g i theo a ch nh tr ng h p truy n theo a ch m ch c n vi t tn bi n nh trong tr ng h p truy n theo gi tr . 6.7. Hm ch ng(Overloaded function) Trong khi s p x p cc dy s ta th ng xuyn ph i i ch 2 ph n t . kh i ph i l p l i m t s l nh gi ng nhau ta nh ngha hm swap nh sau: void swap(int &x, int &y) {int tmp=x; x=y; y=tmp; } Tuy nhin hm ny ch c th i ch cho 2 s nguyn. Ta bi t r ng C khng cho php nh ngha 2 hm cng tn, v n u mu n vi t hm i ch 2 s th c ta l i ph i vi t hm khc v i tn khc. Tuy nhin vi c nh ngha ny l i h p l trong C++. Ta c th nh ngha thm 2 hm swap cho s th c float v double nh sau: void swap(float &x, float &y) {float tmp=x; x=y; y=tmp; } void swap(double &x, double &y) {double tmp=x; x=y; y=tmp; } Khi ta g i hm b ng l nh swap(a,b); ch ng h n th C++ s xem ki u c a a, b m ch n ki u hm thch h p. C++ s d ng h th ng trong cc hm c nh n bi t duy nh t b ng tn v lo i tham s c a chng. Trong qu trnh bin d ch tn hm c bi n i thnh m t tn m i thng qua qu trnh g i l "my cn tn" (name-mangling). Trong qu trnh ny, tn c a hm v danh sch cc ki u tham s c nh p chung thnh m t tn duy nh t. Th d c 2 hm f(int,int); v f(float,float); s c b bin d ch i tn thnh hai tn khc bi t nhau _f_int_int
L p trnh C v C++ - Chng 6.Hm v c u trc chng trnh

34

Smith Nguyen Studio.


_f_float_float Nh v y trong tn m i khng c s tham gia c a ki u gi tr hm. Do b bin d ch s khng c kh nng phn bi t hai hm c cng tn danh sch tham s nhng c ki u tr v khc nhau. 6.8. Cc m u (template) Trn y ta ph i nh ngha 3 hm cho th t c trao i gi tr 2 bi n. C++ c m t phng php t t hn thay i ki u ph n t m khng c n ghi r ki u ph n t khi khai bo hay nh ngha. Phng php ny c th c hi n v i m u. M u hm: Ta c th nh ngha hm swap v i m u nh sau: template <class T> void swap(T& x, T& y) {T tmp=x; x=y; y=tmp; } Khi ta g i hm swap, th d swap(a,b); th ki u c a cc tham s s c b bin d ch thay vo hm. Th d n u ki u c a a,b l float th th c ch t b bin d ch t o nh ngha hm sau y: void swap(float &x, float &y) {float tmp=x; x=y; y=tmp; } Ch : m u template <class T> ph i ng tr c ph n khai bo v c ph n nh ngha hm. 6.9. Hm v i cc tham s l m ng Trong Pascal m ng khng th xu t hi n v i khai bo tr c ti p trong ph n khai bo cc tham s hm, m ta ph i nh ngha b ng l nh type tr c. Trong C th i u c th c. Vi c dng hm c tham s l cc m ng c th c minh h a b ng 2 v d sau y: M ng 1 chi u:
void f(int x[],int); //====================== void main() {clrscr(); int n=2; int x[4]={1,2,3,4}; f(x,4); getch(); } //======================= void f(int x[],int n) {for(int i=0;i<n;i++) L p trnh C v C++ - Chng 6.Hm v c u trc chng trnh

35

Smith Nguyen Studio.


printf("\n%d",x[i]); return; }

M ng 2 chi u:
void f(int x[][2],int); //====================== void main() {clrscr(); int n=2; int x[2][2]={1,2,3,4}; f(x,n); getch(); } //======================= void f(int x[][2],int n) {for(int i=0;i<n;i++) {printf("\n"); for(int j=0;j<n;j++) printf("%d ",x[i][j]); } return; }

L p trnh C v C++ - Chng 6.Hm v c u trc chng trnh

36

Smith Nguyen Studio.


Chng 7. Con tr , c p pht ng v hm 7.1. Con tr v a ch Trong chng 2 chng ta c p n lo i bi n a ch . Trong ph n ny ta s kh o st k hn m t cht v n ny. 1. a ch v bi n con tr Lin quan n m t bi n ta c khi ni m: - Tn bi n - Ki u bi n - Gi tr c a bi n V d cu l nh float a=12.5; nh ngha m t bi n c tn l a, ki u l th c v nh n gi tr l 12.5. Ki u bi n v tn bi n sau khi nh ngha th khng th thay i, nhng gi tr c a n th c th thay i b ng cc l nh c a chng trnh. Ta bi t r ng m t bi n float chi m 4 byte b nh . Khi bi n c khai bo th 4 byte ny cng c xc nh trong b nh . Ta bi t r ng cc byte c a b nh u c nh s v s th t c a chng c g i l a ch . T t nhin a ch ny c my t ng tnh ra, ch khng nh s trn cc byte nh nh s nh. V y khi khai bo m t bi n th a ch c a n c xc nh. a ch c a cc bi n tuy l s nguyn nhng khng c nh ng v i cc s nguyn bnh th ng khc v n c m t s c th ring. a ch c a m t bi n l m t i l ng kh quan tr ng v v y ng i ta nh ngha thm ki u bi n a ch d thao tc. Cc bi n ny c g i l cc con tr , v th c ra n tr t i cc vng nh lu tr cc bi n. M c d u a ch l m t khi ni m chung cho cc bi n, nhng cc bi n con tr l i c phn lo i theo ki u bi n m n tr t i. Nh v y c bao nhiu ki u d li u th c b y nhiu ki u con tr . Cng nh b t k m t bi n no khc, m t con tr c n khai bo tr c khi s d ng. Vi c khai bo c th c hi n theo m u sau: <ki u d li u m con tr tr n>* <tn con tr >; ho c <ki u d li u m con tr tr n> *<tn con tr >; C 2 cch ny hon ton tng ng. Cch th nh t th ng c dng khi khai bo nguyn m u hm, v khi ta ch khai bo ki u c a bi n, cha c n khai bo tn. Ta cng c th dng l nh typedef nh ngha tr c m t ki u d li u con tr v khai bo bi n con tr theo m u sau: <Ki u bi n con tr > <tn con tr >; V d : typedef double* pdouble; Sau ta c th khai bo: pdouble pa,pb;

L nh
L p trnh C v C++ - Chng 7. Con tr , c p pht ng v hm

Smith Nguyen Studio.


int m, n, *p; Khai bo 2 bi n nguyn m, n v 1 bi n con tr p c ki u nguyn (t c l tr t i cc bi n nguyn). Lu r ng m c d u *p nh n gi tr nguyn nn v hnh th c c th xem l nh khai bo trn l khai bo 3 bi n nguyn m, n v *p. Tuy nhin v n c s khc bi t r t l n y: trong b nh ch dnh ch cho cc bi n m, n v con tr p. M c d u con tr ny ch n vng nh ch a gi tr nguyn, nhng vng ny cha c b o m. N u vng nh ch a *p b thay i b i chng trnh khc, v d m t ph n m m no trong Windows ch ng h n, th gi tr *p b thay i theo. Ch khi ta c p pht b nh cho cc vng con tr ch t i th cc vng ny m i c b o m. Nh v y ta th y r ng n u dng con tr ta t n hai l n b nh : b nh cho con tr v b nh chng ch t i. V con tr p=&x l hon ton c ngha. Sau php gn ny th gi tr x v *p hon ton c th thay th nhau trong cc bi u th c. Th d ta c th thay l nh y=x+3 b ng l nh y= *p +3 2. Con tr NULL Khi khai bo m cha s d ng (t c l cha gn cho con tr m t gi tr a ch no c c p pht b nh , ho c cha c p pht b nh cho con tr ) th con tr c th ch n m t vng vu v no trong b nh . Vng ny c th ch a s li u m chng trnh ang ho c s s d ng. c th a con tr cha s d ng v v tr an ton ng i ta nh ngha con tr r ng, v i tn l NULL. Con tr NULL ch v a ch 0x0, t c l byte u tin trong b nh . Ch c ch n byte ny n m ngoi b t k phn o n b nh c p pht cho m t chng trnh. 3. Hm c i l con tr Con tr c th l tham s c a m t hm. Khi g i hm nh v y th i con tr ph i l bi n con tr ho c a ch c a m t bi n no . Khi ta g i hm v i a ch c a m t bi n no v trong chng trnh ny ta dng a ch thay i gi tr bi n th l s thay i th c s , ngha l khi ra kh i hm th s thay i v n cn tc ng ln bi n. V d : Trong chng tr c ta dng ki u truy n tham s theo ki u tham chi u vi t hm trao i gi tr 2 bi n. By gi ta s vi t hm b ng cc dng bi n con tr . void swap(float *px, float *py) {float tmp=*px; *px=*py; *py=tmp; } Khi gi s trong chng trnh chnh c cc dng l nh
L p trnh C v C++ - Chng 7.Con tr , c p pht ng v hm

p c ki u a ch nguyn do n u c m t bi n nguyn x no th php gn

38

Smith Nguyen Studio.


float x=2,y=3; swap(&x,&y) Th gi tr c a x v y th c s c trao i cho nhau. B n c hy suy ngh v tr l i xem v sao n u trong hm trn ta vi t l void swap(float *px, float *py) {float* tmp=px; px=py; py=tmp; } Th th c ra ta cha trao i c cc gi tr x v y khi g i swap(&x,&y); Tuy nhin cch dng tham chi u v n n gi n hn, v v y chng ti khuyn b n c l ni chung nn dng ki u truy n tham chi u n u mu n gi l i nh ng thay i c a cc bi n trong chng trnh. 7.2. Con tr v m ng m t chi u 1. Php ton l y a ch V d sau y minh h a cho quan h gi a tn m ng v a ch m ng
void main() {clrscr(); float *px,x[]={1,2,3}; px=x; printf("\n%f",*px); printf("\n%f",*(px+1)); printf("\n%f",*(px+2)); getch(); }

K t qu l 1 2 3 Nh v y n u px = x th px+1 == &x[1], px+2 = = &x[2], ... Ch : C th vi t float y[] = {1.2, 3.2, 4.3, 6.5}; Nhng khng th vi t: float *py = {1.2, 3.2, 4.3, 6.5};//Dng l nh ny sai Nhng v i chu i th l i c: char st1[]="123"; char st2[7]="123"; char *st="123"; 2. Hm v i i l m ng m t chi u
L p trnh C v C++ - Chng 7.Con tr , c p pht ng v hm

39

Smith Nguyen Studio.


N u tham s hnh th c c a hm l m ng m t chi u c ki u l int, float, double,... th tham s t c c th l con tr c ki u int, float, double,... v ng c l i, th d void f1(int *pa,float *pb); cch khai bo ny tng ng nh khai bo sau: void f1(int pa[],float pb[]); 3. M ng, con tr v xu k t Cng gi ng nh tn m ng, xu k t l m t h ng a ch bi u th a ch u c a m ng ch a n. Tuy nhin nh chng ti ni t i, a ch u c a chu i st c truy xu t b i &st, cn st th c dng truy xu t ton b chu i. C p pht b nh : #include <stdlib.h> ... void main() {clrscr(); double *a,*b,*c; a=new double [7]; b= (double*) malloc(7*sizeof(double)); c= (double*) calloc(7,sizeof(double)); *a=15;//T c l a[0]=15; int **q; q=new int*; *q=new int; **q=10;// T c l q[0][0]=10; printf("\n%d",**q); getch(); } 7.3. Con tr t i hm Trong m t s bi ton th c t , nh t l cc bi ton kh o st cc hm s nh v th , tm nghi m,... ta th ng ph i l p chng trnh lin quan n hm s f(x), trong f(x) l m t hm s c d ng t ng qut. tnh ton trn f th ta ph i bi t d ng c a f c th , m n u ta l p trnh cho tr ng h p c th th m i l n g p m t hm m i ta l i ph i s a chng trnh, nh th r t b t ti n. C cung c p cho chng ta m t cng c gi i quy t v n ny: l con tr tr t i hm, m cch s d ng b n c c th nh n bi t c qua chng trnh sau y:
//CHIADOI.CPP /*Phuong phap chia doi de tim nghiem*/ #include <dos.h> #define epsix 1.0E-03 #define epsiy 1.0E-03 #define kmax 10 double g(double); double h(double x); int chiadoi(double (*f)(double),double &x, double a, double b, int kmax); double g(double x) {return sin(x)-x*x*cos(x); L p trnh C v C++ - Chng 7.Con tr , c p pht ng v hm

40

Smith Nguyen Studio.


} //=============================================== double h(double x) {return x*x*x-x-1; } //=============================================== //Ham de tim nghiem. int chiadoi(double (*f)(double),double &x, double a, double b, int kmax) {clrscr(); double c;int k; k=0; if(f(a)==0) {x=a;return true;} if(f(b)==0) {x=b;return true;} if(f(a)*f(b)>0) {printf("\nf(a) va f(b) khong trai dau",);delay(1000);return false;} while(b-a>epsix) {c = (a+b)/2; if(fabs(f(c))<epsiy) break;//f(c) = 0 if(f(a)*f(c)<0) b=c; else a=c; k++; if(k>kmax) {printf("\n Lap chua hoi tu sau %d buoc",k); delay(1000);return false; } } x=c; return(true); } //=============================================== void main() {double x; chiadoi(g,x,1.0,2.0,20); printf("\nNghiem la: %f",x); getch(); }

7.4. Kh nng quy c a hm Trong ph n nh ngha c a m t hm (t c l trong thn hm) c th c l i g i n chnh n. Kh nng ny c g i l kh nng quy c a hm. V d ta c th nh ngha hm tnh giai th a c a m t s t nhin nh sau: long gt(long n) {return((n==0||n==1)?1:n*gt(n-1)); }

7.5. Hm main c i (tham kh o ti li u [2], trang 198)

L p trnh C v C++ - Chng 7.Con tr , c p pht ng v hm

41

Smith Nguyen Studio.


Chng 8. C u trc 8.1. Ki u c u trc 1. nh ngha ki u c u trc C 2 cch nh ngha ki u c u trc cch 1: struct <tn ki u c u trc> {//Khai bo thnh ph n c a n }; cch 2: typedef struct <tn ki u c u trc> {//Khai bo thnh ph n c a n }; 2. Khai bo bi n c ki u c u trc Sau khi nh ngha ki u c u trc theo m t trong 2 cch trn, ta c th khai bo m t ho c nhi u bi n c ki u c u trc nh ngha gi ng nh khai bo cc bi n th c, bi n nguyn. Th d ta c n khai bo 2 bi n v1,v2 c ki u c u trc v a nh ngha, ta vi t <tn ki u c u trc> v1,v2; ho c struct <tn ki u c u trc> v1,v2; 3. K t h p nh ngha ki u v khai bo c ki u c u trc Ta c th k t h p nh ngha v khai bo cc bi n c ki u c u trc v1,v2 nh sau: struct <tn ki u c u trc> {//Khai bo thnh ph n c a n } v1,v2; Ch : Khng th vi t typedef struct <tn ki u c u trc> {//Khai bo thnh ph n c a n } v1,v2;

4. Khai bo tr c ti p cc bi n c ki u c u trc Ta c th khai bo cc bi n c ki u c u trc v1,v2 m t cch tr c ti p nh sau: struct {Khai bo thnh ph n c a n } v1,v2; Ch : V i cch v a nh ngha v a khai bo nh 3. ta c c ki u c u trc <tn ki u c u trc> v cc bi n c ki u <tn ki u c u trc> l v1,v2. Cn b ng cch 4. th ta ch c c cc bi n v1,v2. N u
L p trnh C v C++ - Chng 8. C u trc

Smith Nguyen Studio.


c n khai bo thm m t bi n v3 c ki u c u trc nh v1, v2 ta l i ph i vi t y l struct {Khai bo thnh ph n c a n } v3;

Khng th vi t typedef struct {Khai bo thnh ph n c a n } v1,v2; 8.2. Truy nh p n thnh ph n c u trc o n chng trnh sau m t cch truy nh p n thnh ph n c u trc:
void main() {clrscr(); struct ngay {int day,month,year;}; struct ns {char *ten;ngay ngsinh;int tuoi,luong;}; ns v; v.ten="Nguyen Kien Cuong"; v.ngsinh.day=10;v.ngsinh.month=7;v.ngsinh.year=99; v.tuoi=50;v.luong=500; printf("\n%s", v.ten); ns* pv; pv=&v; printf("\n%s", pv->ten); //Hoac printf("\n%s",(*pv).ten); getch(); }

8.3. Php gn c u trc Khc v i m ng, ta c th gn 2 c u trc cng ki u v i nhau. Th d n u v1 v v2 l 2 bi n c u trc c cng ki u, khi ta c th gn v1=v2; Cc v d v c u trc: S gi i thi u trong bi gi ng. 8.4. C u trc trong C++ Thnh ph n c a c u trc c th l cc hm v c g i l cc phng th c. Cc thnh ph n c a c u trc ng m nh l public(class ng m nh l private cn union lun lun l public, khng th thay i) 1. D li u thnh ph n ki u private,public Ch c cc hm thnh ph n c a l p ho c c a l p b n c th truy nh p c n cc thnh ph n ny. 2. V d v class
//STACKKE.CPP ... #define true 1 K thu t l p trnh C - Chng 8.C u trc

43

Smith Nguyen Studio.


#define false 0 #define StackLength 3 //default stack length template <class T> class Stack {private: T *a; //the stack itself: a dynamic array of T; int max; //the maximum number of elements on the stack int top; //the element at the top of stack top<=max-1 int delta; //Increment size of storage array... int grow(); //Function to increase Stack size. public: Stack(int); ~Stack(); void initialize(); int empty(); int full(); T viewtop();//return the element at the top of stack. void push(const T); T pop(); void traverse(); };

8.5. Thnh ph n ki u fields struct date {int a:8; int b:6;int c:8;int d:2;} x; Khi sizeof(date)= 3 byte 8.6. Union Cc thnh ph n c a union c c p pht m t vng nh chung.

K thu t l p trnh C - Chng 8.C u trc

44

Smith Nguyen Studio.


Chng 9. Thao tc trn t p

Chng trnh sau m t cc thao tc trn t p:


//ZFILE.CPP //===================================================================== /*Chuong trinh sau day dung, mo tep o dang nhi phan, nhu vay ky tu EOF khong dong nhat voi feof(). Ky tu EOF co the nam khoang giua tep.Neu ta mo tep o dang van ban thi chuong trinh hoat dong khong dung vi may ly do: - Khi doc duoc ky tu co ma ASCII la 10, thi chuong trinh tu dong them ma 13 vao tep f2. Nhu vay tep f2 se them 1 byte. - Khi doc duoc ky tu c==EOF thi chuong trinh cung hieu la feof(), va dung qua trinh, nhu vay chi mot phan tep duoc doc. Vi voi tep van ban thi ky tu ket thuc tep la EOF (Ky tu EOF khong duoc tinh vao do lon cua tep neu no duoc tu dong them vao cuoi tep, nhu vay tep chi co mot ky tu co do lon la 1 byte. Con neu ta doc ky tu EOF va ghi vao tep f2 sau do dong tep thi may tu dong them mot ky tu EOF nua vao cuoi tep, ky tu EOF do ta ghi vao duoc tinh vao do lon tep va co hien thi khi ta soan thao, con ky tu may them vao thi khong tinh va khong hien thi neu ta soan thao) Neu ta mo tep o dang nhi phan nhung lai thao tac nhu sau: - Neu ta thay if(feof(f1)) break; bang lenh if(c==EOF) break; thi cung sai, vi voi tep nhi phan c==EOF chua co nghia la feof(). - Neu ta thay lenh trong chuong trinh bang lenh while(!feof(f1)) fputc(fgetc(f1),f2); thi cung sai, vi sau ky tu cuoi cung feof() van nhan gia tri false do do byte sau do ung voi feof() van duoc doc va ghi sang f2. Chi sau do thi con tro tep f1 moi o vi tri feof(). Nhu vay tep f2 nhieu hon tep f1 1 byte. */ void fcopy(char *filename1,char *filename2) {FILE *f1,*f2;char c; if(!(f1=fopen(filename1,"rb"))) {printf("\n Tep %s khong ton tai",filename1);getch();exit(1);} f2=fopen(filename2,"wb"); while(true) {c=fgetc(f1); if(feof(f1)) break; fputc(c,f2); } fcloseall(); }; //================================================== //================================================== void main() {clrscr(); int mcase=2;//1-Text && Binary file, 2-Text file, 3-Binary file FILE *f;int n,m,i,j; switch(mcase) {case 1://Text and Binary Files clrscr(); f=fopen("vb.txt","wt"); fputc('A',f);fputc(EOF,f);fputc(10,f);fputc(26,f);fputc('B',f); L p trnh C v C++ - Chng 9. Thao tc trn t p

Smith Nguyen Studio.


fclose(f); f=fopen("vb.txt","rt"); while(!feof(f)) printf("%d ",fgetc(f)); fclose(f); printf("\n"); f=fopen("vb.txt","rb"); while(!feof(f)) printf("%d ",fgetc(f)); fclose(f); getch(); /*Ket qua tren man hinh 65 255 10 -1 65 255 13 10 26 66 -1 Khi ghi vao tep van ban ma 10 thi ma 13 duoc chen vao phia truoc, tuy nhien khi doc thi ma 13 duoc bo qua Neu mo tep theo kieu nhi phan thi ma 13 cung duoc doc */ clrscr(); f=fopen("vb.txt","wb"); fputc('A',f);fputc(EOF,f);fputc(10,f);fputc(26,f);fputc('B',f); fclose(f); f=fopen("vb.txt","rt"); while(!feof(f)) printf("%d ",fgetc(f)); fclose(f); printf("\n"); f=fopen("vb.txt","rb"); while(!feof(f)) printf("%d ",fgetc(f)); fclose(f); break; /*Ket qua tren man hinh 65 255 10 -1 65 255 10 26 66 -1 Khi ghi vao tep nhi phan ma 10 thi ma 13 khong duoc chen vao. Khi copy tep ta phai mo tep theo kieu nhi phan nhu chuong trinh fcopy() tren day. Lenh rewind(f),unlink(<tentep>) hay remove(<tentep>), fflush(f), fflushall(), fcloseall() cung duoc dung cho ca 2 loai. Cac ham fseek, ftell cung vay.Thi du doan chuong trinh sau cho biet so byte cua tep fseek(f,0,2); printf("\%d",ftell(f)); */ //============================================================== case 2://Text file FILE *f1,*f2;char str[256]; fcopy("AFILE.CPP","AFILE.TXT"); f1=fopen("AFILE.TXT","r"); f2=fopen("AFILE.TX","w"); while(fgets(str,255,f1)!=NULL) fputs(str,f2); //Lenh fgets() doc n-1 ky tu cua mot dong hoac ca dong vao bien str fcloseall; //Nhap so lieu vao tep van ban clrscr(); float xx,yy; cout<<"So diem quan sat n = ";cin>>n; f = fopen("DATA.TXT", "wt"); fprintf(f,"%d",n); cout<<endl<<"i x[i] y[i]"<<endl; for(i=1;i<=n;i++) {cout<<i<<" ";cin>>xx;cin>>yy;fprintf(f,"\n%10.2f%10.2f",xx,yy);} fclose(f); K thu t l p trnh C - Chng 9. Thao tc trn t p

46

Smith Nguyen Studio.


//Doc so lieu tu tep va gan cho bien x[i],y[i] n=0;//Dat lai gia tri n de dam bao la n khong phai co tu truoc f = fopen("DATA.TXT", "rt"); fscanf(f,"%d",&n); float *x=new float [n+1]; float *y=new float [n+1]; for(i=1;i<=n;i++) fscanf(f,"%f%f",&x[i],&y[i]); fclose(f); //Hien cac gia tri x[i],y[i] len man hinh clrscr(); cout<<"SO LIEU DOC TU TEP"<<endl; printf(" i x[i] y[i]"); for(i=1;i<=n;i++) printf("\n%4d%10.2f%10.2f",i,x[i],y[i]); getch(); //======================================== /* Gia su tep a.txt co dang Day la so lieu 12 13 Thi lenh sau day se cho x1=12 */ f=fopen("a.txt","wt"); fputs("Day la\n",f); fputs("so lieu\n",f); fputs("12",f); fclose(f); f=fopen("a.txt","rt"); int x1=0;char str1[256]; fgets(str1,255,f); fgets(str1,255,f); fscanf(f,"%d",&x1); cout<<x1; break; //===================================================== case 3:/*Binary file. Dung de luu tru so lieu duoc to chuc thanh tung khoi, thi du ban ghi, cac so thuc, so nguyen...*/ float aa,a[10]; cout<<"\nNhap bao nhieu so thuc?(n = )";cin>>n; for(i=0;i<n;i++) {printf("a[%d] = ",i);scanf("%f",&a[i]);}; f = fopen("A.DAT","wb");//rt: read, r+t:read and write fwrite(&n,sizeof(n),1,f); for(i=0;i<n;i++) fwrite(&a[i],sizeof(a[i]),1,f);//sizeof(float) fclose(f); f = fopen("A.DAT","r+b"); rewind(f);//fseek(f,0,0);Tro ve dau tep;fseek(f,0,2);Ve cuoi tep //fseek(f,nbytes,0);Nhay qua nbytes byte bat dau tu dau tep //fseek(f,nbytes,1);Nhay qua nbytes byte bat dau tu vi tri hien thoi //fseek(f,nbytes,2);Nhay qua nbytes byte bat dau tu cuoi tep //nbytes>0 nhay ve phia sau, <0 nhay lui ve phia truoc cout<<"\nNhap them bao nhieu so thuc?(m = )";cin>>m; fseek(f,0,2); for(i=0;i<m;i++) {cout<<"Phan tu thu "<<n+i<<" : ";cin>>aa;fwrite(&aa,sizeof(aa),1,f);}; K thu t l p trnh C - Chng 9. Thao tc trn t p

47

Smith Nguyen Studio.


//Cap nhat lai gia tri n fseek(f,0,2); n=(ftell(f)-sizeof(n))/sizeof(aa); cout<<"\nDoc phan tu thu i = (0,1,2,..,"<<n-1<<") ";cin>>i; fseek(f,sizeof(n),0);//Nhay qua doan chua n fseek(f,i*sizeof(float),1); fread(&aa,sizeof(float),1,f); cout<<"\nPhan tu thu "<<i<<" la: "<<aa; cout<<"\n\nToan bo danh sach la:"; rewind(f); fseek(f,1*sizeof(n),0); i=0; while(fread(&aa,sizeof(aa),1,f)>0) {cout<<"\nPhan tu thu "<<i++<<" la: "<<aa;} fclose(f); }//end of case getch(); }

Ch :
char *fgets(char *s, int n, FILE *stream); int fputs(const char *s, FILE *stream); Remarks: fgets reads characters from stream into the string s. It stops when it reads either n - 1 characters or a newline character, whichever comes first. fgets retains the newline character at the end of s and appends a null byte to s to mark the end of the string. fputs copies the null-terminated string s to the given output stream. It does not append a newline character, and the terminating null character is not copied.

V d v fgets() v fputs()
struct nhansu {char ten[20]; int tuoi; }; void main() {clrscr(); FILE * f=fopen("tmp.txt","wt"); int n=3,i,j; char mten[20];int mtuoi;int mluong; fprintf(f,"%d\n",n); for(i=0;i<n;i++) {cout<<endl<<"Nhap nguoi "<<i<<" : "; cout<<endl<<"Ten: ";gets(mten); cout<<"Tuoi: ";cin>>mtuoi; fputs(mten,f); fprintf(f,"\n"); fprintf(f,"%d\n",mtuoi); } fclose(f); f=fopen("tmp.txt","rt"); char s[255]; nhansu tmp[4]; fscanf(f,"%d",&n); for(i=0;i<n;i++) K thu t l p trnh C - Chng 9. Thao tc trn t p

48

Smith Nguyen Studio.


{ fgets(s,255,f); fgets(s,255,f); for(j=0;j<strlen(s)-1;j++) tmp[i].ten[j]=s[j]; tmp[i].ten[j]='\0'; fscanf(f,"%d",&tmp[i].tuoi); } for(i=0;i<n;i++) {cout<<endl<<tmp[i].ten; cout<<endl<<tmp[i].tuoi; } getch(); }

K thu t l p trnh C - Chng 9. Thao tc trn t p

49

Smith Nguyen Studio.


Chng 10. Qu n l mn hnh vn b n Trong chng ny s gi i thi u m t s hm dng qu n l mn hnh mu v t o c a s v i mu s c khc nhau nh m lm cho cc giao di n trn mn hnh p hn. Cc hm ny u n m trong t p conio.h. 10.1. Ch n ki u mn hnh vn b n 1. Hm ch n mode vn b n void textmode(int mode); M t vi mode hay dng Cc tn h ng LASTMODE C40 C80 C4350 Gi tr s -1 1 3 643 video mode vn b n tr c 16 mu, 40 c t 16 mu, 80 c t EGA 43 hng hay VGA 50 hng (80 c t)

Ch : - Mn hnh lun lun c 25 dng - Trong mode C40 cc k t c b ngang l n g p i cc k t 2. V d textmode(C40);

mode C80.

3. Cch xc nh v tr trn mn hnh H tr c t a trn mn hnh nh n i m gc trn bn tri lm g c. i m ny c t a (1,1). N u g i maxco l s c t c a mn hnh (40 ho c 80) th (maxco,1) l gc trn bn ph i, (1,25) l gc d i bn tri, (maxco,25) l gc d i bn ph i. Cc hm wherex() v hm wherey() cho v tr hi n th i c a con tr . Cc hm ny c ph m vi tc d ng ton mn hnh cho d c m t c a s no ang c kch ho t.

10.2. t mu n n v mu ch
Mu n n: void textbackground(int color); Mu ch : void textcolor(int color); B ng m cc mu n n v mu ch : Cc tn h ng BLACK (en) BLUE (xanh gia tr i) GREEN (xanh l cy) CYAN (xanh l) RED ( ) MAGENTA (tm) Gi tr s 0 1 2 3 4 5 Mu ch hay n n? C hai C hai C hai C hai C hai C hai

L p trnh C v C++ - Chng10. Qu n l mn hnh vn b n

Smith Nguyen Studio.


BROWN (nu) YELLOW (vng) WHITE (tr ng) 6 14 15 C hai Ch cho mu ch Ch cho mu ch Ch : - Cc h ng c nh ngha trong conio.h v graphics.h. - Cc hm trn y khng lm thay i mu s c c a cc c a s v cc dng ch c t tr c trn mn hnh. - Khi g p l nh textbackground th l mu c a cc c a s c xy d ng sau l nh ny v tr c l nh textbackground ti p theo. L nh textcolor ch c tc d ng i v i d li u nh p xu t b i cc l nh cprintf v cscanf. Ta xt m t chng trnh t o c a s nh sau:
#include "define_h.cpp" void main() {mot: textbackground(BLUE); hai: clrscr(); ba: textbackground(CYAN); bon: window(5,5,35,20); nam: clrscr(); sau: textcolor(YELLOW); bay: gotoxy(10,10); tam: cprintf("123"); getch(); }

Sau l nh textbackground() th n n c a mn hnh v n khng i mu. V l nh ny ch b t u c hi u l c i v i cc l nh ng sau n m khng c kh nng xa nh ng g c trn mn hnh c. Mu n l nh ny c hi u l c ta ph i xa t t c nh ng g c trn mn hnh. L nh
hai: clrscr();

xa t t c nh ng g c trn mn hnh c, v do ton b mn hnh c mu xanh da tr i. L nh th 3 t l i mu n n thnh mu xanh l, sau ta nh ngha m t c a s . Ta lu r ng sau khi nh ngha c a s th mn hnh c coi nh thu nh v c a s i v i cc l nh clrscr, gotoxy, cprintf, cscanf, cgets, cputs. V y v tr gc bn tri c a c a s by gi l (1,1). 10.3. S khc bi t gi a cc hm nh p xu t d li u Nh chng ti nh c t i trn, sau khi nh ngha c a s th cc l nh clrscr, gotoxy, cprintf, cscanf ch c ph m vi ho t ng trong c a s . Th d khi dng cprintf hi n th s li u th n u s li u vu t qu chi u di c a s th s t ng xu ng dng hi n ti p dng d i. Hm cscanf c th hi n mu nhng c nh c i m l khi ta nh p s li u th n u b sai khng th s a c nh l nh scanf. Cc l nh khc nh puts, gets, printf, scanf c ph m vi ho t ng trong c mn hnh. L nh gotoxy ch n c cc v tr trong c a s . N u mu n a con tr n v 1,24 c a mn hnh ch ng h n, ta dng l nh window(1,24,1,24); 10.4. M t s hm thao tc mn hnh khc void clreol(void); void delline(void); int wherex(void); int wherey(void); void gettextinfo(struct text_info *r);
K thu t l p trnh C - Chng 10.Qu n l mn hnh vn b n

51

Smith Nguyen Studio.


10.5. V d ng d ng: T o th c n trn c a s
//AMENU.CPP #include <conio.h> #include <dos.h> #include <iostream.h> #include <string.h> #include <stdio.h> const int menuitems=20; char *pmenu[menuitems]; void (*ham[menuitems])(void); //============================================= void nhapsl() {window(10,6,70,8); textbackground(CYAN); textcolor(BLACK); clrscr(); gotoxy(5,2); cprintf("Chuong trinh nhap so lieu"); getch(); clrscr(); } //============================================= void kiemtrasl() {window(10,6,70,8); textbackground(GREEN); textcolor(RED); clrscr(); gotoxy(4,2); cprintf("Chuong trinh kiem tra so lieu"); getch(); clrscr(); } //============================================= void inbaocao() {window(10,6,70,8); textbackground(BROWN); textcolor(YELLOW); clrscr(); gotoxy(4,2); cprintf("Chuong trinh in bao cao"); getch(); clrscr(); } //============================================= void khungdon(int x1,int y1,int x2,int y2) {int i; gotoxy(x1,y1);putch(''); for(i=x1+1;i<x2;i++) putch('');putch(''); gotoxy(x1,y2);putch(''); for(i=x1+1;i<x2;i++) putch('');putch(''); for(i=y1+1;i<y2;i++) {gotoxy(x1,i);putch(''); gotoxy(x2,i);putch(''); }; } //============================================= void khungkep(int x1,int y1,int x2,int y2) {int i; K thu t l p trnh C - Chng 10.Qu n l mn hnh vn b n

52

Smith Nguyen Studio.


gotoxy(x1,y1);putch(' '); for(i=x1+1;i<x2;i++) putch('');putch(' '); gotoxy(x1,y2);putch(' '); for(i=x1+1;i<x2;i++) putch('');putch(' '); for(i=y1+1;i<y2;i++) {gotoxy(x1,i);putch(''); gotoxy(x2,i);putch(''); }; } //============================================= void cuaso(int x1,int y1,int x2,int y2,int maunen,int mauchu) {window(x1,y1,x2,y2); textbackground(maunen); textcolor(mauchu); } //============================================= void highlight(int dong) {textbackground(WHITE); textcolor(BLACK); gotoxy(2,dong+2); cputs(pmenu[dong]); } //============================================= void clearlight(int dong) {textbackground(CYAN); textcolor(YELLOW); gotoxy(2,dong+2); cputs(pmenu[dong]); } //============================================= void menu(int n) {int maxlen=0,i;char ch; for(i=0;i<n;i++) if(strlen(pmenu[i])>maxlen) maxlen=strlen(pmenu[i]); static int dong=0; while(1) {textmode(C80); window(1,1,80,25); textbackground(BLUE); clrscr();int x1=(80-maxlen)/2,y1=(25-n)/2; cuaso(x1,y1,x1+1+maxlen,y1+1+n,CYAN,YELLOW); //De don gian cua so bat dau tu (2,2) den (2+1+maxlen,2+1+n) clrscr(); for(i=0;i<n;i++) {gotoxy(2,i+2);cputs(pmenu[i]);}//Bat dau tu cot thu 2 //Bat dau highlight(dong); ch=getch(); if(ch==27) break; switch(ch) {case 13: ham[dong]();break;//Enter case 80: if (dong<n-1) //bam _ {clearlight(dong); dong=dong+1;};break; case 72:if (dong>0) //bam _ {clearlight(dong); dong=dong-1;};break; } } } //============================================= void main() {textmode(C80); K thu t l p trnh C - Chng 10.Qu n l mn hnh vn b n

53

Smith Nguyen Studio.


window(1,1,80,25); textbackground(BLUE); clrscr(); int n=3; pmenu[0]="Nhap so lieu "; pmenu[1]="Kiem tra so lieu"; pmenu[2]="In bao cao "; ham[0]=nhapsl;ham[1]=kiemtrasl;ham[2]=inbaocao; menu(n); window(1,1,80,25); textbackground(BLUE); clrscr(); }

K thu t l p trnh C - Chng 10.Qu n l mn hnh vn b n

54

Smith Nguyen Studio.


Chng 11. h a Trong chng ny s gi i thi u m t s hm v cc ng v hnh c b n nh ng trn, cung elip, hnh qu t, ng g p khc, hnh a gic, ng th ng, hnh ch nh t, h p ch nh t,... Ngoi ra cn xt cc v n l th khc nh: x l vn b n trn mn hnh h a, k thu t t o nh di ng... Cc hm h a c khai bo trong t p graphics.h. 11.1. Khi ni m v h a Trong ch vn b n mn hnh c chia thnh cc , m i c th hi n th m t k t . Cc v tr trn mn hnh c nh s t tri sang ph i v t trn xu ng d i. Trong ch bnh th ng th mn hnh c 25 dng v 80 c t. V tr gc tri trn c t a (1,1). Hm gotoxy(int x,int y) s a con tr n v tr c t th x v hng th y. ch th , mn hnh c chia thnh nhi u ch m i m m m i i m c g i l m t pixel. S l ng ch m ty thu c vo phn gi i c a mn hnh. Khc v i ch vn b n, trong ch th , i m gc tri trn c t a l (0,0). V cng gi ng ch vn b n, cc i m c dnh s tng d n t tri qua ph i v t trn xu ng d i. i m (x,y) trong mn hnh th l i m c t x v hng y. Ng m nh mn hnh C ch vn b n. chuy n sang ch th ta ph i kh i t o ch th . Hm kh i t o ch th v cc hm x l mn hnh th c ch a trong t p "graphics.h", do trong ph n m u c a chng trnh ph i c l nh #include <graphics.h> Tr c khi c th s d ng mn hnh th ta ph i dng l nh initgraph(&gd,&gm,< ng d n>); gd = graphics driver, l b i u h p mn hnh hay cn g i l card mn hnh gm = graphics mode, l ch th < ng d n> l ng d n n th m c BGI ch a cc t p tin *bgi i u khi n h a v cc t p tin *.chr ch a cc phng ch khc nhau v cc ki u ch trn mn hnh h a. Tn cc bi n gd ho c gm c th thay i. Th d o n chng trnh sau kh i t o ch h a: #include <graphics.h> void main() {int mh=VGA, mhmode=VGAHI; initgraph(&mh,&mhmode,"\\TC\\BGI"); <Cc l nh x l mn hnh h a> } Thng th ng ta r t kh bi t l mn hnh ang s d ng l lo i g. L nh initgraph c kh nng t tm ki u mn hnh v ch thch h p n u ta t bi n gd=DETECT, h ng DETECT c gi tr b ng 0, do l nh ny tng ng l nh gd=0. o n chng trnh trn y c s a l i nh sau: #include <graphics.h> void main()
L p trnh C v C++ - Chng11. h a

Smith Nguyen Studio.


{int mh=DETECT, mhmode; initgraph(&mh,&mhmode,"\\TC\\BGI"); <Cc l nh x l mn hnh h a> } Khi ta t khng ng cc tham s , th d t sai ng d n ch ng h n, th chng trnh cng khng thng bo g c . Khi ta b t u dng ch h a th d v m t vng trn th chng trnh cng khng bo l i nh thng th ng m ch hi n dng thng bo trn mn hnh: BGI Error: Graphics not initialized (use 'initgraph') Tuy nhin ta c th ki m tra k t qu kh i t o b ng hm graphresult(). Hm graphresult()==0 c ngha l vi c kh i t o thnh cng. ch vn b n hm graphresult() cng b ng 0, do ta ch nn ki m tra hm ny sau khi dng l nh initgraph. o n chng trnh trn y c th s a l i c thm ph n ki m tra vi c kh i t o h a nh sau: #include <graphics.h> void main() {int mh=DETECT, mhmode; initgraph(&mh,&mhmode,"\\TC\\BGI"); if(graphresult()!=0) {cout<<"Khong khoi tao duoc do hoa";delay(1000);return;} <Cc l nh x l mn hnh h a> } Ta s th xa t t c cc hnh nh trn mn hnh h a b ng l nh cleardevice(); T ch h a ta c th tr v mn hnh vn b n b ng cch ng ch h a b ng l nh: closegraph(); Ch : c th g i c hm initgraph b n c n th c hi n cc b c sau y trong l n kh i t o h a u tin: Vo menu Option, Linker, Libraries, Graphics libraries v nh d u X. 11.2. phn gi i mn hnh h a Mn hnh h a g m nhi u i m nh c s p x p trn cc ng th ng n m ngang v th ng ng. Tuy nhin kch th c v s cc i m nh khng nh nhau i v i cc ki u mn hnh. Trong ki u CGA ( phn gi i th p), i m nh c kch th c l n, chi u ngang c 320 i m, chi u ng c 200 i m nh. Mn hnh VGA c phn gi i cao hn: m i hng c 640 i m nh c nh s t 0 n 639, chi u ng c 480 i m nh c nh s t 0 n 479. i m nh cng nh th s i m nh cng nhi u v nh cng m n. S mu trn mn hnh hnh th ng l 15. chng trnh c th c l p v i lo i mn hnh ang s d ng, ng i ta nh ngha cc hm sau c th nh n c s hng , s c t v s mu c c i: getmaxx() Cho gi tr honh l n nh t c a h tr c t a c a mn hnh getmaxy() Cho gi tr tung l n nh t c a h tr c t a c a mn hnh getmaxcolor() Cho gi tr mu l n nh t (th ng l =15).
K thu t l p trnh C - Chng 11. h a

56

Smith Nguyen Studio.


Ch : Cc hm getmaxx()+1, getmaxy()+1 cho s i m nh theo chi u ngang v chi u ng trong mn hnh cho d c m t viewport no ang c kch ho t. 11.3. V hnh trong mn hnh h a Mn hnh h a g m nhi u i m nh c s p x p trn cc g th ng n m ngang v th ng ng. Nguyn t c chung hi n th hnh nh trn mn hnh th l hi n cc i m v i cc mu khc nhau. t mu m t i m no ta dng hm: void putpixel(int x,int y,int color); Hm unsigned getpixel(int x,int y); tr v s hi u mu c a i m nh (x,y). N u i m nh ny cha c t mu b i cc hm v ho c hm putpixel m ch m i c t o mu b i setbkcolor th hm getpixel(x,y) s cho gi tr 0 (cho d trong th c t mu n n hay mu c a i m nh khc mu en, mu c s hi u 0). V nguyn t c ta c th dng hm putpixel v m t hnh b t k trn mn hnh. Tuy nhin vi c v theo ki u ny t n r t nhi u cng s c, do ng i ta nh ngha nhi u hm tr gip v cc ng v cc hnh c b n. 11.4. t mu n n, mu v , mu t 1. Mu n n Mu n n l mu lm n n trn ta v cc hnh. Ta c th t mu n n b ng l nh void setbkcolor(int color); L nh ny g n gi ng v i l nh textbackground trong ch vn b n, nhng c m y i m khc bi t: l nh textbackground(int color) th khi l nh c th c hi n nh ng g c trn mn hnh c khng b nh h ng. N u ta nh ngha m t c a s th l nh ny ch c tc d ng trn c a s . Cn l nh setbkcolor(int color) th c tc d ng ngay khi c th c hi n, v ph m vi tc d ng c a n l c mn hnh, cho d ta c nh ngha m t c a s b ng l nh viewport. 2. Mu nt v ch n mu nt v ta dng l nh void setcolor(int color); Khc v i l nh setbkcolor, l nh ny ch c tc d ng i v i cc l nh v sau n. Nh v y ta c th v nhi u mu khc nhau trn mn hnh. 3. Ki u t v mu t ch n ki u t v mu t cc mi n do ta ch n, ta dng l nh void setfillstyle(int pattern, int color); 4. B ng m mu v b ng ki u t(pattern) Sau y l b ng m mu th ng dng c a gi i mu (pallette) ng m nh
K thu t l p trnh C - Chng 11. h a

57

Smith Nguyen Studio.


Tn h ng BLACK BLUE GREEN CYAN RED MAGENTA BROWN LIGHTGRAY DARKGRAY LIGHTBLUE LIGHTGREEN LIGHTCYAN LIGHTRED LIGHTMAGENTA YELLOW WHITE Gi tr s 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 Mu hi n th en Xanh da tr i Xanh l cy Xanh l Tm Nu Xm nh t Xm s m Xanh da tr i nh t Xanh l cy nh t Xanh l nh t nh t Tm nh t Vng Tr ng

Ta c th thay i gi i mu b ng l nh setpalette(int <mu c>, int <mu m i>) Cc m u t (pattern) th ng dng Tn h ng EMPTY_FILL SOLID_FILL LINE_FILL LTSLASH_FILL SLASH_FILL BKSLASH_FILL LTBKSLASH_FILL HATCH_FILL XHATCH_FILL INTERLEAVE_FILL WIDE_DOT_FILL CLOSE_DOT_FILL USER_FILL Gi tr s 0 1 2 3 4 5 6 7 8 9 10 11 12 M t Mu n n Mu c --/// /// m \\\ m \\\ g ch bng nh t g ch bng ch nh t ng t qu ng d u ch m tha D u ch m dy

11.5. V m t s ng v hnh c b n 1.Chuy n con tr void moveto(int x,int y);// Chuy n con tr n v tr (x,y) 2. ng th ng void line(int x1,int y1, int x2, int y2); void lineto(int x,int y); //o n th ng t v tr hi n t i c a con ch y n i m (x,y). 3. ng trn v ellipse void circle(int x,int y, int r);//Tm (x,y) bn knh r void arc(int x, int y, int gocdau, int goccuoi, int r);//V m t cung trn void pieslice(int x, int y, int gocdau, int goccuoi, int r);
K thu t l p trnh C - Chng 11. h a

58

Smith Nguyen Studio.


//V m t hnh qu t, t c l hnh c bao b i cung trn. void ellipse(int x, int y, int gocdau, int goccuoi, int xr, int yr); //V m t cung ellipse. xr v yr l bn knh tr c ngang v bn knh tr c ng. 4. ng v hnh ch nh t void rectangle(int x1,int y1, int x2, int y2);// ng ch nh t void bar(int x1,int y1, int x2, int y2);//Hnh ch nh t void bar3d(int x1,int y1, int x2, int y2,int depth, int top); //Hnh h p ch nh t 3 chi u. M t tr c l (x1,y1,x2,y2), depth l b r ng hay chi u su c a h p v pha sau, top=0 l khng c n p, top=1 l c n p. 5. T mu m t mi n V i l nh v hnh, th d v hnh qu t (pieslice), hnh ch nh t (bar), ... th bn trong hnh c t mu do l nh setfillstyle xc nh. Cn v i nh ng ng nh ng trn, ng ch nh t m ta mu n t mu bn trong th ph i dng l nh void floodfill(int x,int y, int bordercolor); L nh ny s t mu mi n ch a i m (x,y) ( c g i l i m gieo) v i mu do l nh setfillstyle xc nh, cho n khi g p ranh gi i c mu l bordercolor. Nh v y n u khng c m t ng khp kn no bao i m (x,y) th c mn hnh c t mu. V d v v hnh v t mu:
#include <graphics.h> #include <stdlib.h> #include <stdio.h> #include <conio.h> #include <dos.h> void main(void) {int mh=0,mhmode; initgraph(&mh,&mhmode,"\\tc\\bgi"); setbkcolor(GREEN); setcolor(RED); setfillstyle(SLASH_FILL,MAGENTA); pieslice(480,250,90,360,45); delay(500); arc(100,150,0,90,45); delay(500); ellipse(480,150,0,340,100,30); delay(500); circle(300,155,50); delay(1000); setfillstyle(SOLID_FILL,YELLOW); /*To mau YELLOW cho vung co diem gieo (300,155) cho den khi gap duong bien mau RED, do chinh la duong tron vua ve*/ floodfill(300,155,RED); delay(1000); K thu t l p trnh C - Chng 11. h a

59

Smith Nguyen Studio.


cleardevice(); setfillstyle(SOLID_FILL,BROWN); rectangle(30,100,130,200); bar(150,100,250,200); bar3d(160,250,260,350,40,1); setfillstyle(SLASH_FILL,BROWN); bar3d(360,250,460,350,40,0); setviewport(300,200,getmaxx(),getmaxy(),1); delay(1500); cleardevice();//Xoa toan bo man hinh, khong chi viewport getch(); closegraph(); }

11.6. C a s (viewport) viewport l m t vng ch nh t trn mn hnh t a nh window trong textmode (m t s i m khc bi t chng ti ni trn). thi t l p viewport ta dng hm void setviewport(int x1,int y1, int x2, int y2, int clip); //clip = rt ng n , co l i Sau khi l nh c th c hi n ta v n khng th y c g thay i trn mn hnh. Tuy v y c m t s thay i m ta c th t n d ng trong l p trnh: T a i m gc trn bn tri c a viewport by gi l (0,0). Cn cc hm getmaxx(), getmaxy() khng ph i l honh v tung c c i trong viewport, m getmaxx()+1 v n l s i m nh trn m t dng c a ton mn hnh, cn getmaxy()+1 v n l s i m nh theo chi u ng c a ton mn hnh. Th d v i mn hnh EGA th getmaxx() = 639, getmaxy()=479. Ta c th t n d ng tham s clip v th hm s . N u clip=1 khng cho php v ra ngoi viewport, clip=0 cho php v . Ta c th t n d ng tnh ch t ny v tr c t a c c ph n m c a tr c tung v tr c honh. V d sau y cho ta bi t cch dng viewport v th cc hm s .
#include <graphics.h> #include <conio.h> #include <stdio.h> #include <ctype.h> #include <stdlib.h> #include <math.h> #include <dos.h> //=============================================== //a=-0.5;b=2; double g(double x) {return sin(x)-x*x*cos(x); } //=============================================== //a=1;b=2; double h(double x) {return x*x*x-x-1; } //=============================================== double xmu3(double x) {return x*x*x;} //========================================================================= double sinmu3(double x) {return sin(x)*sin(x)*sin(x);} //========================================================================= /*[a,b] la khoang can ve do thi, n la so khoang chia, (gocx,gocy) la toa do K thu t l p trnh C - Chng 11. h a

60

Smith Nguyen Studio.


diem goc cua do thi, scalex,scaley la ty le tren truc x va truc y. Thi du |sin(x)|<=1, do do de ve tren do thi ta can tang gia tri sinx len scaley lan, tuc la thay vi ve gia tri int(sin(x)) ta ve gia tri int(sin(x))*scaley. Neu truoc khi goi ham ta dat (gocx,gocy)=(0,0) thi chuong trinh se tu xac dinh goc toa do. Neu ta day (scalex,scaley)=(0,0) thi chuong trinh tu xac dinh cac gia tri nay.*/ void vedothi(double (*f)(double),double a,double b,int n, int &gocx,int &gocy,int &scalex,int &scaley,int color) {if(n<2) {cout<<"\n n phai lon hon 1";delay(1000);return;} double *x,*y,maxy,max_y,i;double dx; //Xac dinh cac cap (x[i],y[i]) i=0,1,2,...,n x=new double [n+1]; y=new double [n+1]; dx=(b-a)/n; for(i=0;i<=n;i++) {x[i]=a+i*dx;y[i]=f(x[i]);} /*Truc toa do duoc xac dinh don gian nhu sau: Truc ngang Neu ham f(x) doi dau trong [a,b] thi truc ngang nam giua Neu ham f(x) <0 trong [a,b] thi truc ngang nam 1/3 man hinh tu tren xuong Neu ham f(x) >0 trong [a,b] thi truc ngang nam 2/3 man hinh tu tren xuong Truc dung Neu ab<0 thi truc dung nam giua Neu a>0 (b>0) thi truc dung nam 1/3 man hinh tu trai sang phai Neu b<0 (a<0) thi truc dung nam 2/3 man hinh tu trai sang phai */ double min,max;min=max=y[0];//Tim min va max cua f(x) for(i=1;i<=n;i++) {min=y[i]<min?y[i]:min;max=y[i]>max?y[i]:max;} if(gocx==0)//Toa do goc chua duoc biet {if(a*b<0) {gocx=getmaxx()/2;} //[a,b] chua diem 0; if(a>=0) {gocx=getmaxx()/3;} //Diem 0 nam ben trai [a,b]; if(b<=0) {gocx=getmaxx()*2/3;} //Diem 0 nam ben phai [a,b]; if(min*max<0) {gocy=getmaxy()/2;} //Ham f(x) doi dau trong [a,b]; if(max<=0) {gocy=getmaxy()/3;} //Ham f(x) <0 trong [a,b]; if(min>=0) {gocy=getmaxy()*2/3;} //Ham f(x) >0 trong [a,b]; } if(scalex==0)//Chua biet ty le cac truc {scalex=int(0.9*getmaxx()/(b-a));//scalex*(b-a)=0.9*getmaxx(); double d=(max-min)>0?max-min:1; scaley=int(0.9*getmaxy()/d); //Neu scalex>scaley thi lay scalex=min(3*scaley,scalex); if(scalex>scaley) scalex=scalex<3*scaley?scalex:3*scaley; //Neu scaley>scalex thi lay scaley=min(3*scalex,scaley); if(scaley>scalex) scaley=scaley<3*scalex?scaley:3*scalex; } setcolor(BLUE); setviewport(gocx,gocy,getmaxx(),getmaxy(),0); line(-gocx,0,getmaxx()-gocx,0);//Truc ngang line(0,-gocy,0,getmaxy()-gocy);//Truc dung settextjustify(1,1); setcolor(color); outtextxy(0,0,"(0,0)"); int x1,y1,x2,y2; for(i=1;i<=n;i++) {x1=x[i-1]*scalex; y1=-y[i-1]*scaley; x2=x[i]*scalex; y2=-y[i]*scaley; line(x1,y1,x2,y2); delay(10); } K thu t l p trnh C - Chng 11. h a

61

Smith Nguyen Studio.


} //========================================================= void main() {clrscr(); double a,b;int gocx=0,gocy=0,scalex=0,scaley=0,n=400,color=RED; double (*f)(double); int chon; while(true) {restorecrtmode(); clrscr(); //Tao menu cout<<endl<<" VE DO THI HAM SO "; cout<<endl<<" 1. Ham sin(x), cos(x) va tan(x)"; cout<<endl<<" 2. Ham mu exp(x)"; cout<<endl<<" 3. x mu 3"; cout<<endl<<" 4. sin mu 3"; cout<<endl<<" 5. log(x)"; cout<<endl<<" 6. sin(x)-x*x*cos(x)"; cout<<endl<<" 7. x*x*x-x-1;"; cout<<endl<<" z. Ket thuc"; cout<<endl<<endl<<"Hay nhan phim tu 1 -> z de chon: "; char chon=toupper(getch()); if(chon=='Z') break; int mh=DETECT,gmode=0,x,y,i; initgraph(&mh,&gmode,"C:\\TC\\BGI"); setbkcolor(GREEN); switch(chon) {case '1':f=tan;a=-4*M_PI,b=4*M_PI; gocx=gocy=scalex=scaley=0;n=400;color=RED; vedothi(sin,a,b,n,gocx,gocy,scalex,scaley,color); vedothi(cos,a,b,n,gocx,gocy,scalex,scaley,color); a=-10;b=10; break; case '2':f=exp;a=-2,b=4; gocx=gocy=scalex=scaley=0;n=400;color=RED; break; case '3':f=xmu3;a=-4,b=4; gocx=gocy=scalex=scaley=0;n=400;color=RED; break; case '4':f=sinmu3;a=-4*M_PI,b=4*M_PI; gocx=gocy=scalex=scaley=0;n=400;color=RED; break; case '5':f=log;a=0.01,b=4; gocx=gocy=scalex=scaley=0;n=400;color=RED; break; case '6':f=g;a=-4,b=4; gocx=gocy=scalex=scaley=0;n=400;color=RED; break; case '7':f=h;a=-4,b=4; gocx=gocy=scalex=scaley=0;n=400;color=RED; break; } setcolor(BLUE); vedothi(f,a,b,n,gocx,gocy,scalex,scaley,color); getch(); closegraph(); } }

K thu t l p trnh C - Chng 11. h a

62

Smith Nguyen Studio.


11.7. X l vn b n trn mn hnh h a 1. Hi n th vn b n void outtext(char *s); void outtextxy(int x, int y, char *s); 2. Ch n phng v h ng hi n th vn b n void settextstyle(int font, int direction, int charsize); font Tn h ng DEFAULT_FONT TRIPLEX_FONT SMALL_FONT SANS_SERIF_FONT GOTHIC_FONT direction Tn h ng HORIZ_DIR VERT_DIR charsize Gi tr s 1 2 3 ... 10 l n k t (s pixel) 8*8 16*16 24*24 80*80 Gi tr s 0 1 H ng vn b n N m ngang, tri sang ph i ng, d i ln trn Gi tr s 0 1 2 3 4

3. Quan h gi a vn b n v i v tr hi n t i c a con tr void settextjustify(int horiz, int vert); V tr vn b n so v i con tr hi n t i theo chi u ngang V i tham s horiz LEFT_TEXT CENTER_TEXT RIGHT_TEXT Gi tr s 0 1 2 Gi i thch Bn ph i Ch nh tm Bn tri

V tr vn b n so v i con tr hi n t i theo chi u ng V i tham s vert BOTTOM_TEXT CENTER_TEXT TOP_TEXT Gi tr s 0 1 2 Gi i thch Pha trn Ch nh tm Pha d i

K thu t l p trnh C - Chng 11. h a

63

Smith Nguyen Studio.


Chng trnh sau y m t cch s d ng cc hm x l vn b n:
#include <graphics.h> #include <stdlib.h> #include <stdio.h> #include <conio.h> #include <dos.h> #define Enter 13 #define Lmargin 10 void text_write(int &x,int &y,char *s) {outtextxy(x,y,s); x+=textwidth(s); } //================================================= void text_writeln(int &x,int &y, char *s) {outtextxy(x,y,s); x=Lmargin; y=y+textheight(s)+5; } //================================================= /*void text_read(int &x,int &y, char *s) {int i=0;char ch,*s1; while(1) {ch=getch(); if(ch==Enter) break; *s1=ch; text_write(x,y,s1); s[i]=ch;++i; } s[i]=0; } */ //================================================= void text_read(int &x,int &y, char *s) {int i=0;char ch[2]; ch[1]='\0'; while(1) {ch[0]=getch(); if(ch[0]==Enter) break; text_write(x,y,ch); s[i]=ch[0];++i; } s[i]=0; } //================================================= void main() {clrscr(); int mh=DETECT,gmode=0,x,y,xmax,ymax; char name[25]; initgraph(&mh,&gmode,"c:\\tc\\bgi"); setbkcolor(GREEN); setcolor(RED); settextstyle(TRIPLEX_FONT,HORIZ_DIR,3); x=Lmargin;y=100; text_write(x,y,"cho ten cua ban:"); text_read(x,y,name); text_writeln(x,y,""); text_write(x,y,"chao ban:"); K thu t l p trnh C - Chng 11. h a

64

Smith Nguyen Studio.


text_write(x,y,name); getch(); closegraph(); }

11.8. T o hnh nh chuy n ng Th d sau y m t cch t o hnh nh chuy n ng. Chng trnh t o m t b u tr i y sao nh p nhy v m t a bay ang bay m t cch ng u nhin trn b u tr i. Hnh nh k t thc khi nh n phm b t k.
//SAUCER.CPP #include <graphics.h> #include <stdlib.h> #include <stdio.h> #include <conio.h> #include <dos.h> //============================================ void *p; int xx[1001],yy[1001],nsize,i; //=============================== int uscln(int u,int v) {int t; u=u%v; while(u>0) {int tmp=u;u=v;v=tmp; u=u%v; } return(v); } //============================================ void ve_diabay() {//Ve tau vu tru setcolor(RED); ellipse(100,50,0,360,20,8); ellipse(100,46,190,357,20,6); line(107,44,110,38); circle(110,38,2); line(93,44,90,38); circle(90,38,2); setfillstyle(SOLID_FILL,BLUE); floodfill(101,54,RED); setfillstyle(SOLID_FILL,MAGENTA); floodfill(94,45,RED); //Luu anh tau vu tru vao bo nho nsize=imagesize(79,36,121,59); p= malloc(nsize); getimage(79,36,121,59,p); return; } //============================================ void nhap_nhay_bt() {static i=1;//Lenh nay thuc hien mot lan khi dich int j; //Cho nhap nhay bang cach doi mau 50 ngoi sao for(j=1;j<=50;++j) {putpixel(xx[i],yy[i],random(getmaxcolor())); ++i; if(i>1000) i=1; } } K thu t l p trnh C - Chng 11. h a

65

Smith Nguyen Studio.


//============================================ void tau_cd(int xa,int ya,int xb,int yb) {int dx,dy,mx,my,x,y,step,i; mx=abs(xb-xa);my=abs(yb-ya); if(mx==0) {dx=0;dy=1;step=dy;} else if(my==0) {dy=0;dx=1;step=dx;} else if(mx>my) {dy=10;dx=10*mx/my;int m=uscln(dx,dy); dx=dx/m;dy=dy/m;step=mx/dx;} else {dx=10;dy=10*my/mx;int m=uscln(dx,dy); dx=dx/m;dy=dy/m;step=my/dy;} dx=xb-xa>0?dx:-dx; dy=yb-ya>0?dy:-dy; for(i=0;i<step;i++) {x=xa+i*dx;y=ya+i*dy; x=x<getmaxx()?x:getmaxx(); y=y<getmaxy()?y:getmaxy(); putimage(x,y,p,COPY_PUT);//Dat tau vu tru len man hinh nhap_nhay_bt(); delay(20); putimage(x,y,p,XOR_PUT);//xoa } moveto(x,y); } //============================================ void main() {clrscr(); int mh=0,gmode=0,maxx,maxy,maxcolor,xa,ya,xb,yb; initgraph(&mh,&gmode,"\\tc\\bgi"); maxx=getmaxx(); maxy=getmaxy(); maxcolor=getmaxcolor(); ve_diabay(); /*Ve troi sao va luu vi tri cua cung vao cac mang xx,yy de phuc vu ham nhap_nhay_bt*/ cleardevice(); //Ve bau troi day sao //randomize(); for(i=1;i<=1000;++i) {xx[i]=random(maxx);yy[i]=random(maxy); putpixel(xx[i],yy[i],random(maxcolor)); } /*Se chon ngau nhien mot diem (x1,y1), mot diem (x2,y2) cho tau xuat phat tu (x1,y1) den (x2,y2)*/ //Chu trinh tau chuyen dong va cac ngoi sao nhap nhay xb=random(maxx); yb=random(maxy); moveto(xb,yb); do {xa=xb;ya=yb; xb=random(maxx); yb=random(maxy); tau_cd(xa,ya,xb,yb); } while(!kbhit()); closegraph(); } K thu t l p trnh C - Chng 11. h a

66

Smith Nguyen Studio.


Chng 12. m thanh, m nh c Chng trnh sau y m t cch vi t nh c trong C:
#include <dos.h> #include <stdio.h> #include <conio.h> #define DO_ sound(131); #define RE_ sound(147); #define MI_ sound(165); #define FA_ sound(175); #define XO_ sound(196); #define LA_ sound(220); #define XI_ sound(247); #define DO sound(262); #define DOT sound(277); #define RE sound(294); #define RET sound(311); #define MI sound(330); #define FA sound(349); #define FAT sound(370); #define XO sound(392); #define XOT sound(415); #define LA sound(440); #define XI sound(494); #define DO1 sound(523); #define DOT1 sound(554); #define RE1 sound(587); #define MIB1 sound(622); #define MI1 sound(659); #define FA1 sound(698); #define FAT1 sound(740); #define XO1 sound(784); #define LA1 sound(880); #define XI1 sound(988); int N=1200, N1=N/2, N2=N/4, NN1=N+N1, N1N2=N1+N2; #define D3N delay(3*N); #define D2N delay(2*N); #define DN delay(N); #define DNN1 delay(NN1); #define DN1N2 delay(N1N2); #define DN1 delay(N1); #define DN2 delay(N2); #define NS nosound(); #define NS nosound(); void main() {int i; // for(i=1;i<=2;i++) //Ngoai hien giot mua thu thanh thot roi LA_ DN RE DN LA_ DN1 DO DN1 RE DN FA DN1 XO DN2 FA DN2 RE D2N //Troi lang u buon may hat hiu ngung troi LA_ DN LA DNN1 FA DN1 RE DN LA DN1 XIB DN1 LA DN1 MI DN2 XO DN2 LA D2N //Nghe gio thoang mo ho trong mua thu, ai khoc ai than sau L p trnh C v C++ - Chng12. m thanh, m nh c

Smith Nguyen Studio.


XO DNN1 LA DN1 RE DN1 FA DN RE DN2 DO DN2 LA_ DN MI DN1 MI DN2 RE DN2 MI DN LA DN1 XIB DN1 LA DN1 FA DN1 RE D2N NS }

K thu t l p trnh C - Chng 12.m thanh, m nh c

68

Smith Nguyen Studio.


Chng 13. Tnh ng gi, th a k v a hnh
(encapsulation, inheritance and polymorphysm)

13.1. M u Trong cc chng tr c y cc tnh ch t c a l p trnh h ng i t ng cha hi n r nt. Trong chng ny chng ti s gi i thi u nh ng nt c th ring c a l p trnh h ng i t ng. Sau y l b ng m t s thu t nh hay dng trong l p trnh h ng i t ng: i t ng (Object) C u trc d li u k t h p cc chng trnh con c ki u r rng t qu n l.

L p (class,struct,union) M u cho cc i t ng. nh ngha l p l cc phng ti n qua cc i t ng c thi t k . Thnh ph n(member) Th hi n (instance) Phng th c(method) Bi n(data member) hay hm(function member) n m trong i t ng M t th hi n c a m t l p. Thu t ng ch m t hm thu c v l p

ng gi(Encapsulation) S lin k t cc c u trc d li u v phng th c vo m t l p Th a k (inheritance) Gi s c m t l p "cha" hay l p c s . C++ cho ta kh nng xy d ng m t l p "con" hay l p th a k m l p "con" c th dng cc thnh ph n c a l p "cha".

a hnh(polymorphysm) Kh nng c a m t s l p dng chung tn cc phng th c. Cc phng th c, khi c t tn gi ng nhau, hnh ng tng thch v i l p ring trong n c thi t k . Hm kh i t o (constructor)Phng th c u c th c hi n khi m t th hi n (i t ng)c a l p c t o ra. Hm lo i b (deconstructor)Phng th c c th c hi n tr c khi m t i t ng b lo i b . Hm o (virtual) L ki u phung th c c th lin k t ng v i cc i t ng khi ch y chng trnh.

Early (designed time) binding. S lin k t tnh cc methods v i m t i t ng c xc nh ngay khi vi t chng trnh. Late (run-time) binding. S lin k t ng gi a cc methods v i m t i t ng lc ch y chng trnh. ngha c a cc tnh ch t c trng c a l p trnh h ng i t ng c th th y r trong cc chng trnh m u sau: Chng trnh 1:
#include <graphics.h> #include <stdlib.h> L p trnh C v C++ - Chng13. Tnh ng gi, th a k v a hnh

Smith Nguyen Studio.


#include <stdio.h> #include <conio.h> #include <dos.h> class Shape {protected: float per_unit_cost; public: Shape(float c) {per_unit_cost=c;} virtual float perimeter() {return 0.0;} virtual float area() {return 0.0;} float cost() {return area()*per_unit_cost;} }; class Rectangle:public Shape {private: float breadth,length; public: Rectangle(float w,float l,float c):Shape(c) {breadth=w;length=l;} float perimeter() {return 2*breadth+2*length;} float area() {return breadth*length;} }; const float pi=3.1415926; class Circle:public Shape {private: float radius; public: Circle(float r,float c):Shape(c) {radius=r;} float perimeter() {return 2*pi*radius;} float area() {return pi*radius*radius;} }; void main(void) {clrscr(); Circle c(5.0,2.5); Rectangle r(2.0,3.0,4.0); printf("Area of circle is %6.2f\n",c.area()); printf("Perimeter is %6.2f\n",c.perimeter()); printf("Cost of circle is %6.2f\n\n",c.cost()); printf("Area of Rectangle is %6.2f\n",r.area()); printf("Perimeter is %6.2f\n",r.perimeter()); printf("Cost of Rectangle is %6.2f\n",r.cost()); getch(); }

Chng trnh 2:
#include <stdio.h> #include <graphics.h> #include <conio.h> #include <stdlib.h> #include <dos.h> enum Bool {false,true}; const int num_figures=3; const int scr_width=640; const int scr_height=480; const int scr_colours=16;//Typical for PC; class Shape {protected: int x,y;Bool Visible; public: Shape(int ix=0,int iy=0) {x=ix;y=iy;}; virtual ~Shape() {}; virtual void Show(void) {}; K thu t l p trnh C - Chng 13. Tnh ng gi, th a k v a hnh

70

Smith Nguyen Studio.


virtual void Hide(void) {}; void Move(int dx,int dy) {Hide();x+=dx;y+=dy;Show();} void MoveTo(int newX,int newY) {Hide();x=newX;y=newY;Show();} }; class Pixel:public Shape {protected: int colour; public: Pixel(int ix,int iy,int col):Shape(ix,iy) {colour=col; } virtual void Show() //virtual keyword is not mandatory here, {putpixel(x,y,colour);//but it's a good idea to use it to indicate } //which methods are overrides. virtual void Hide() {putpixel(x,y,getbkcolor()); } ~Pixel() {Hide();} }; class Rectangle:public Pixel {private: int w,h;//width and height values. public: Rectangle(int ix,int iy,int col,int wid,int hgt):Pixel(ix,iy,col) {w=wid; h=hgt; } virtual void Show() {setcolor(colour); rectangle(x,y,x+w,y+h);//setcolor() and rectangle() are graphics //library functions. } virtual void Hide() {setcolor(getbkcolor()); rectangle(x,y,x+w,y+h); } }; class Circle:public Pixel {private: int radius; public: Circle(int ix,int iy,int col,int rad):Pixel(ix,iy,col) {radius=rad; } virtual void Show() {setcolor(colour); circle(x,y,radius);//setcolor() and circle() are graphics //library functions. } virtual void Hide() {setcolor(getbkcolor()); circle(x,y,radius); } }; void main() {int mh=DETECT,md; initgraph(&mh,&md,"\\TC\\BGI"); Shape *figures[num_figures]; int which_shape; int xx,yy,cc; for(int i=0;i<num_figures;i++) K thu t l p trnh C - Chng 13. Tnh ng gi, th a k v a hnh

71

Smith Nguyen Studio.


{which_shape=random(3); xx=random(scr_width); yy=random(scr_height); cc=random(scr_colours); switch(which_shape) {case 0:cc=YELLOW;figures[i]=new Pixel(xx,yy,cc);break; case 1:figures[i]=new Rectangle(xx,yy,cc,50,50);break; case 2:figures[i]=new Circle(xx,yy,cc,50);break; } figures[i]->Show(); delay(100); } //We now have 20 random shapes in the array and displayed. //Wait for a keypress then move all of them about. getch(); for(i=0;i<num_figures;i++) {//Get a random distance to move. xx=random(scr_width)-scr_width/2; yy=random(scr_height)-scr_height/2; //figures[i]->Move(0,30); figures[i]->Move(xx,yy); } //Now wait for a keypress before removing all objects. getch(); for(i=0;i<num_figures;i++) delete figures[i]; closegraph(); getch(); }

K thu t l p trnh C - Chng 13. Tnh ng gi, th a k v a hnh

72

Smith Nguyen Studio.


Cu h i v bi t p n t p chu n b cho thi h t mn

Lo i bi m c A 5 i m

A01. Nh p s t nhin n r i tnh t ng (lu php chia cc s nguyn): S =1+

1 1 1 + +...+ 2 3 n

A02. Nh p s t nhin n r i tnh cc t ng sau: S=t ng cc s t nhin khng l n hn n, S1=t ng cc s t nhin l khng l n hn n, S2=t ng cc s t nhin ch n khng l n hn n. A03. Nh p s t nhin n r i tnh t ng cc s t nhin khng l n hn n v chia h t cho 7. A04. Nh p s t nhin n r i tnh t ng cc s t nhin khng l n hn n v khng chia h t cho 7. A05. Nh p s t nhin n v dy s th c a[0], a[1], ..., a[n-1] r i ki m tra xem dy ny c t o thnh c p s c ng khng. A06. Nh p s t nhin n v dy s th c a[0], a[1], ..., a[n-1] r i ki m tra xem dy ny c t o thnh c p s nhn khng. A07. Ba s dng a,b,c l di cc c nh c a m t tam gic n u t ng c a 2 s b t k l n hn s cn l i. Nh p 3 s a,b,c v ki m tra xem chng c th l di c a cc c nh c a m t tam gic hay khng. A08. Nh p m t s t nhin n r i m cc s t nhin khng l n hn n v chia cho 3 d 1 (t c l cc s ng d v i 1 mod 3).

A09. Hy nh p 4 s th c a,b,c,d. Tm gi tr l n nh t c a chng v gn gi tr l n nh t cho bi n max.


A10. Nh p s n v dy cc s th c a[0], a[1],..., a[n-1]. Sau tm s l n nh t trong dy ny. A11. Nh p 3 s th c a,b,c r i gi i v bi n lu n phng trnh b c 2 ax2 + bx + c = 0 . A12. Vi t chng trnh C gi i bi ton sau: trm tru trm c , tru ng n 5, tru n m n 3, l kh tru gi, ba con n 1. H i c bao nhiu tru ng, bao nhiu tru n m v bao nhiu tru gi? A13. Nh p s t nhin n r i tnh n! theo cng th c: n! = 1 = n*(n-1)*(n-2)*...*2*1 n u n=0 n u n>0

A14. Vi t chng trnh tm c s chung l n nh t c a 2 s nguyn m, n theo thu t ton Euclid.

L p trnh C v C++ - Cu h i v bi t p

Smith Nguyen Studio.


Lo i bi m c B 6 i m

B01. Nh p s t nhin n r i li t k cc c s c a n. C bao nhiu c s ? B02. Nh p 2 s t nhin m,n r i ki m tra xem chng c nguyn t cng nhau khng. (Hai s nguyn t cng nhau l 2 s c USCLN l 1) B03. 3 s dng a,b,c l 3 c nh c a m t tam gic vung trong c l c nh huy n n u c2 = a2 + b2 (1). Nh p m t s t nhin n (th d n=50). Sau li t k t t c cc s t nhin a,b,c sao cho abcn v a,b, c th a mn (1). C bao nhiu b 3 s a, b, c nh v y? B04. 3 s dng a,b,c l 3 c nh c a m t tam gic vung trong c l c nh huy n n u c2 = a2 + b2 (2). Nh p m t s t nhin n (th d n=100). Sau li t k t t c cc s t nhin a,b,c sao cho a,b, c l cc s t nhin lin ti p v th a mn (2). C bao nhiu b 3 s a, b, c nh v y? B05. Tm t t c cc s c 3 ch s abc sao cho t ng l p phng c a cc ch s th b ng chnh s , ngha l: abc = a3 + b3 + c3 (3) C bao nhiu s nh v y? (Cc s th a mn (3) c g i l cc s Amstrong c 3 ch s ). B06. Nh p vo 2 s t nhin m v n, sao cho m<n. Hy li t k cc s chnh phng trong kho ng [m,n]. C bao nhiu s chnh phng? (S t nhin p c g i l chnh phng n u p = k2 v i s t nhin k no ) B07. Nh p vo 2 s t nhin m v n, sao cho m<n. Hy li t k cc s khng chnh phng trong kho ng [m,n]. C bao nhiu s khng chnh phng? (S t nhin p c g i l chnh phng n u p = k2 v i s t nhin k no ) B08. Nh p m t s nguyn dng n, sau vi t ra mn hnh s d i d ng nh phn. B09. c m t s th c <1 , sau vi t ra mn hnh s d i d ng nh phn. B10. Nh p s n v dy cc s th c a[0], a[1],..., a[n-1] r i s p x p dy trn theo th t tng d n. B11. Nh p 6 s nguyn a, b, c, d, p, q r i li t k t t c cc c p s t nhin x, y th a mn h phng trnh: ax+by=p cx+dy=q C bao nhiu c p nghi m nh v y? B12. Th i gian lm m t vi c no l x giy. Hy c x t bn phm v vi t chng trnh chuy n sang bao nhiu gi , pht,giy.
K thu t l p trnh C-Cu h i v bi t p

74

Smith Nguyen Studio.


B13. C 3 lo i gi y b c l t 500, 200 v 50. Hy tm t t c cc t h p c th c c c a 3 lo i gi y b c trn cho s ti n l 5750. B14. Tnh n!! = 135...n n u n l = 246...n n u n ch n B15. Vi t chng trnh nh p s li u cho ma tr n cc s th c A c p mxn trong m, n l cc s t nhin. Sau tm ma tr n chuy n v B = (bij) c p nxm, bij = aji i = 1,2,...,n;j =1,2,...,m Cho hi n 2 ma tr n trn mn hnh ti n so snh. B16. Vi t chng trnh tnh tch 2 ma tr n cc s th c A c p mxn v B c p nxk. B17. Nh p ma tr n vung A c p n c cc ph n t l cc s th c r i - m cc ph n t >0 - m cc ph n t <0 B18. Nh p s li u cho dy s th c a0 , a1 ,..., an-1 . m xem c bao nhiu c p 2 ph n t lin ti p b ng nhau trong dy trn (t c l m s c p ai , ai+1 sao cho ai = ai+1; n u c tr ng h p ai = ai+1 = ai+2 th c xem l c 2 c p). B19. Nh p s li u cho dy s th c a0 , a1 ,..., an-1 v m t s dy trn. x b t k. m s l n xu t hi n c a s x trong

B20. Nh p s li u cho dy s th c a0 , a1 ,..., an-1 . Tm s b nh t trong dy trn v v tr c a n trong dy. B21. Nh p s li u cho dy s th c a0 , a1 ,..., an-1 v 2 s th c b, c (b<c). Tnh trung bnh c ng cc ph n t c a dy n m trong kho ng [b, c]. B22. Nh p s li u cho dy s nguyn a0 , a1 ,..., an-1 Hy m xem trong dy c bao nhiu s l v bao nhiu s ch n. B23. Nh p s li u cho dy s nguyn a0 , a1 ,..., an-1 v 2 s th c b, c (b<c). Tnh trung bnh c ng cc ph n t c a dy n m trong kho ng [b,c] v chia h t cho 7. B24. T ng c a n s t nhin u tin c cho b i cng th c: 1 + 2 + 3 + ... + n =

n( n + 1) 2

(4)

Hy nh p s t nhin n b t k v ki m tra xem cng th c (4) c ng khng. B n hy cho hi n trn mn hnh cu tr l i: " ng th c ng", hay " ng th c sai" tu vo k t qu so snh.
B25. T ng cc bnh phng c a n s t nhin u tin c cho b i cng th c: 12 + 22 + 32 + ... + n2 =

n(n + 1)(2n + 1) 6

(5)

Hy nh p s t nhin n b t k v ki m tra xem cng th c (5) c ng khng. B n hy cho hi n trn mn hnh cu tr l i: " ng th c ng", hay " ng th c sai" tu vo k t qu so snh.
K thu t l p trnh C-Cu h i v bi t p

75

Smith Nguyen Studio.


B26. T ng cc l p phng c a n s t nhin u tin c cho b i cng th c:

n 2 ( n + 1) 2 1 + 2 + 3 + ... + n = 4
3 3 3 3

(6)

Hy nh p s t nhin n b t k v ki m tra xem cng th c (6) c ng khng. B27. Gi s dy cc s th c a1 , a2 ,..., an l p thnh c p s c ng v i cng sai d, ngha l i=1,2,...,n-1. ai+1=ai+d,

Hy vi t chng trnh C nh p s t nhin n b t k, s th c a1 v s nguyn d v ki m tra xem cng th c sau c ng khng:

Sn = a1 + a2 +...+ an =

[ 2a1 + (n 1) d ]n 2

B28. Gi s dy cc s th c a1 , a2 ,..., an l p thnh c p s nhn v i cng b i q, ngha l ai+1=ai*q, i=1,2,...,n-1. Hy vi t chng trnh C nh p s t nhin n b t k, s th c a1 v s th c q v ki m tra xem cng th c sau c ng khng: Sn = a1 + a2 +...+ an = a1

1 qn 1 q

B29. Nh p s li u cho dy s th c a0 , a1 ,..., an-1 v m t s b b t k. Tnh 3 s c1, c2, c3, trong c1 l s ph n t < b, c2 l s ph n t = b v c3 l s ph n t >b.

Lo i bi m c C 7 i m

C01. Tnh gi tr c a a th c P(x)=anxn+ an-1xn-1+ ... + a1x+ a0 Theo cch tnh c a Horner t c t c tnh nhanh: P(x)=((((anx+ an-1)x+ an-2... + a1)x+ a0 C02. m s ch trong m t xu k t . Th d chu i "Tr ng h c" c 2 ch .

C03. M t chu i c g i l Palindrome n u sau khi o ng c cc k t c a n, ta nh n c chu i ban u. V d : chu i "MADAM" l Palindrome. Vi t chng trnh nh p r i xc nh xem m t chu i c ph i l Palindrome hay khng.
C04. Nh p m t s t nhin n. Hy li t k cc s nguyn t khng l n hn n.

K thu t l p trnh C-Cu h i v bi t p

76

Smith Nguyen Studio.


C05. Nh p m t s c>0 (v d c = 0.0001) r i dng l nh while tnh s theo cng th c: = 4* (1- + -

1 1 1 1 +...+(-1)n ) 3 5 7 2n + 1

t ng c tnh v i n l n sao cho b t ng th c

1 c th a mn. 2n + 1

C06. Nh p m t s c>0 (v d c = 0.0001) r i dng l nh for tnh s theo cng th c: = 4* (1- + -

1 1 1 1 +...+(-1)n ) 3 5 7 2n + 1
1 c th a mn. 2n + 1

t ng c tnh v i n l n sao cho b t ng th c

C07. Nh p m t s c>0 (v d c = 0.0001) v m t s th c x r i tnh

ex = 1+

x x2 xn + + ... + 1! 2! n! xn | c th a mn. n!

t ng c tnh v i n l n sao cho b t ng th c |

C08. Nh p m t s c>0 (v d c = 0.0001) v m t s th c x r i tnh

sin x =

x x3 x5 x ( 2 n +1) + -... +(-1)n 1! 3! 5! (2n + 1)! x ( 2 n +1) | c th a mn. (2n + 1)!

t ng c tnh v i n l n sao cho b t ng th c |

So snh k t qu trn y v i gi tr hm chu n sin(x) c s n trong C.

C09. Nh p m t s c>0 (v d c = 0.0001) v m t s th c x r i tnh

cos x = 1 -

x2 x4 x 2n + -... +(-1)n (2n)! 2! 4!


x 2n | c th a mn. (2n)!

t ng c tnh v i n l n sao cho b t ng th c |

So snh k t qu trn y v i gi tr hm chu n cos(x) c s n trong C. C10.Vi t hm n! theo cng th c sau: n! = 1 n u n=0

K thu t l p trnh C-Cu h i v bi t p

77

Smith Nguyen Studio.


= n*(n-1)! n u n>1 sau nh p cc s t nhin n v k r i dng hm ny ny tnh C11. Cho m t chu i k t
k Cn =

n! k!(n k )!

c di n, hy m s l n xu t hi n c a cc k t A,B,C theo cch:

a. C phn bi t ch hoa ch th ng. b. Khng phn bi t ch hoa ch th ng. C12. Nh p m t s nguyn dng, sau vi t ra mn hnh s 10 c k hi u l A. d i d ng c s 11, v i quy c ch s

C13. Nh p s n v dy cc s th c a[0], a[1],..., a[n-1] r i s p x p dy trn theo th t tng d n theo phng php n i b t (bubble sort). C14. Nh p s li u cho ma tr n A ki u mxn c cc ph n t l cc s th c. Tm cc gi tr c c i v c c ti u c a cc ph n t v ch r v tr c a chng trong b ng. C15. Nh p s li u cho dy s th c a0 , a1 ,..., an-1 v m t gi tr th c x. Gi s dy a c s p x p theo th t tng d n. Hy chn gi tr x vo dy a sao cho v n gi c tnh s p x p c a m ng. C16. Nh p s li u cho dy s th c a0 , a1 ,..., an-1 . Ki m tra xem dy c s p x p theo th t tng d n hay khng. N u khng hy ch ra v tr ph n t u tin lm m t tnh ch t c s p c a dy. C17.Nh p s li u cho ma tr n A ki u mxn c cc ph n t l cc s th c. Tm ph n t b nh t c a m i dng v t chng vo c t u tin. (T c l ph n t u tin c a m i dng s l ph n t b nh t c a dng ). C18 Nh p s li u cho ma tr n A ki u mxn c cc ph n t l cc s th c. Tm ph n t b nh t c a ma tr n v m xem c bao nhiu ph n t b ng ph n t b nh t. C19.Nh p s li u cho ma tr n A ki u mxn c cc ph n t cc ph n t c a ma tr n nhng theo th t tng d n. l cc s th c. Hy li t k trn mn hnh t t c

C20. Nh p s li u cho dy s th c dng R1 , R2 ,..., Rn trong Ri bi u th i n tr thnh ph n trong m t c m g m n i n tr u song song. Hy tnh i n tr c a ton c m theo cng th c bi t: R=

1 1 1 1 + + ... + R1 R2 Rn

C21. Nh p s t nhin n v 2 dy s th c X1 , X2 ,..., Xn v Y1 , Y2 ,..., Yn , hy tnh ton gi tr bi u th c bn ph i v bn tri, sau so snh ch ng t l b t ng sau th c ng: X1*Y1 + X2*Y2 +.... Xn* Yn (X12 + X22 +...+ Xn2 )1/2 (Y12 + Y22 +...+ Yn2 )1/2 B n hy cho hi n trn mn hnh cu tr l i: "B t ng th c ng", hay "B t ng th c sai" tu vo k t qu so snh. (y l b t ng th c Cauchy - Bunyakovski - Schwarz) C22. Nh p s t nhin n v dy s th c dng X1 , X2 ,..., Xn sau tnh ton gi tr bi u th c bn ph i v bn tri v so snh ch ng t l b t ng sau th c ng:
K thu t l p trnh C-Cu h i v bi t p

78

Smith Nguyen Studio.


1

( X 1 X 2 ... X n ) n

X 1 + X 2 + ... + X n n

(Trung bnh nhn cc s dng khng l n hn trung bnh c ng c a chng) B n hy cho hi n trn mn hnh cu tr l i: "B t ng th c ng", hay "B t ng th c sai" tu vo k t qu so snh. C23. Bi t r ng li su t g i ti t ki m k h n 1 nm l 0,9%. Hy nh p vo s ti n g i c a m t ng i v tnh s ti n c a ng i sau N nm (N nh p t bn phm), bi t r ng sau m t nm th ti n li s c nh p vo g c. C24. L p chng trnh tnh c c cho m t cu c g i i n tho i n i t nh. Bi t : Th i gian b t u, th i gian k t thc cu c g i tnh theo gi , pht v c nh p t mn phm. C c d ch v i n tho i: 500 / pht. C25. Hy vi t hm tnh t ng cc ch s c a m t s nguyn b t k. V d : S 8545604 c t ng cc ch s l: 8+5+4+5+6+0+4= 32

Lo i bi m c D 8 i m

D01. Vi t hm double emu(float x, float c) tr v gi tr ex c tnh b i cng th c:

ex = 1+

x x2 xn + + ... + 1! 2! n! xn | c th a mn. n!

t ng c tnh v i n l n sao cho b t ng th c |

Nh p m t s th c a r i s d ng hm trn tnh ax theo cng th c ax = exlna (bi ny yu c u vi t hm ngoi hm main())


k D02. L p b ng C n

theo cng th c truy h i sau:


0 n Cn = Cn = 1
k k Cnk = C n 1 + C n 11

Tam gic trn c dng th n (b t u t n=0) ch a n+1 ph n t (k0,1,...,n) l cc h s c a nh th c (a+b)n v c g i l tam gic Pascal. D03. Cho 2 chu i s1 v s2. Hy tm xem chu i s1 c ch a chu i s2 khng v ch r v tr b t u v v tr k t thc c a chu i s2 trong chu i s1 n u tm th y. D04. Cho m t chu i. Hy tm m t t v xa t ny trong chu i n u tm th y.
K thu t l p trnh C-Cu h i v bi t p

79

Smith Nguyen Studio.


D05. Nh p s li u cho dy s th c a0 , a1 ,..., an-1 . Tm 2 s l n nh t khc nhau v v tr c a chng trong dy trn (n u c hai s cng gi tr th l y ch s nh hn). Th d trong dy 1,5,3,4,5 th 2 ph n t l n nh t l 5 v 4 v cc v tr 1 v 3. D06. L p chng trnh tnh ti n i n cho khch hng gi i n tnh theo KW nh sau: W =w1+w2+w3+w4 w1 w2 w3 w4 i n ti u th (KW) 0-100 101-150 151 200 > 200 Gi ( ng) 500 / KW 550/ KW 600 / KW 650/ KW

D07. Xy d ng chng trnh qu n l sinh vin b ng m ng tnh, s d ng c u trc sau: struct SV {char ten[25]; float toan, ly, tb;}; Nh p danh sch cho n sinh vin (n l s t nhin c nh p vo), ch nh p ten v toan, ly. Tnh gi tr tr ng tb =(toan+ly)/2, sau s p x p l i danh sch theo i m trung bnh tng d n. Cho hi n k t qu tr c v sau khi s p x p. D08. Nh p cc h s ai (i=0,1,2,...,m) c a a th c P(x) b c m (ai l h s c a xi ) v nh p cc h s bj (j=0,1,2,...,n) c a a th c Q(x) b c n (bj l h s c a xj ). In ra cc h s c a a th c t ng. D09. Nh p ma tr n ch nh t cc s th c c c p mxn. Tm ph n t l n nh t c a m i hng. In m i ph n t tm c trn m t dng (thng tin in ra cng y cng t t). D10. Nh p ma tr n ch nh t cc s th c c c p mxn.Tm hng c a ma tr n sao cho t ng cc ph n t tnh theo hng l l n nh t so v i cc hng cn l i. D11. Nh p ma tr n ch nh t cc s th c c c p mxn.Tm c t c a ma tr n sao cho t ng cc ph n t tnh theo c t l l n nh t so v i cc c t cn l i. D12. Tm nh th c c a ma tr n vung c p n.

D13. Nh p s li u cho ma tr n A c ki u mxn. Sau tm ma tr n chuy n v B c ki u nxm th a mn bij = aji. Tnh ma tr n tch C c ki u mxm c a 2 ma tr n A v B.
D14. Nh p s li u cho ma tr n A ki u mxn c cc ph n t l cc s t nhin. Hy li t k t t c cc ph n t c a ma tr n l cc s nguyn t ; li t k trn t ng dng c a mn hnh tng ng v i t ng hng c a ma tr n. D15. Nh p s li u cho ma tr n A ki u mxn c cc ph n t l cc s t nhin. Hy li t k t t c cc ph n t c a ma tr n m khng ph i l s nguyn t ; li t k trn t ng dng c a mn hnh tng ng v i t ng hng c a ma tr n. D16. Nh p s li u cho ma tr n A ki u mxn c cc ph n t l cc s th c v m t s th c x. Hy m xem s th c x xu t hi n bao nhiu l n trong ma tr n v t i cc v tr no. Th d k t qu c th c d ng: S l n xu t hi n c a 2.15 l 3 t i cc v tr (2,4), (3,1), (3,5).

K thu t l p trnh C-Cu h i v bi t p

80

Smith Nguyen Studio.


D17. Nh p s li u cho 2 dy s th c a0 , a1 ,..., am-1 v b0 , b1 ,..., bn-1. Gi s c 2 dy ny c s p theo th t tng d n. Hy t n d ng tnh s p x p c a 2 dy v t o dy c0 , c1 ,..., cm+n-1 l h p c a 2 dy trn, sao cho dy ci cng c th t tng d n . (G i : So snh v lo i d n t ng c p ph n t c a 2 dy). D18. Nh p s li u cho ma tr n A ki u mxn c cc ph n t l cc s th c. L n l t xt cc ph n t c a dng th nh t, ti p n dng th 2 v c nh th cho n ph n t cu i cng. Ngha l ta xt cc ph n t a11, a12 ,..., a1n, a21, a22,..., am1, am2,..., amn. Tm xem trong cch duy t cc ph n t nh trn c 2 ph n t lin ti p no b ng nhau khng. N u c hy ch r v tr c a c p ph n t u tin tho mn tnh ch t ny. (G i : chuy n sang m ng m t chi u v i ch s k=i*m+j, sau t ch s k xc nh cc ch s i,j). D19. Xy d ng cc thao tc sau cho hai s ph c: 1. T o l p 2 s ph c. 2. T ng, hi u, thng 2 s ph c. D20. Nh p s li u cho dy s th c a0 , a1 ,..., an-1 v s th c x. Ki m tra xem dy a c s p x p tng d n cha, n u dy s p x p th th c hi n tm ki m nh phn xem x c xu t hi n trong dy khng v n u c th ch ra v tr u tin xu t hi n x.

Lo i bi m c E 9 i m

E01. Khi ta so n th o vn b n, i khi thay v m t d u cch ta l i g li n m y d u cch, ho c g thm d u cch th a hai u chu i. Gi s chu i ST c ch a m t s d u cch th a nh v y. Hy vi t chng trnh lo i b nh ng d u cch th a trong v hai u vn b n. Ngha l sau khi ch y chng trnh th khng cn tr ng h p 2 ho c nhi u d u cch li n nhau bn trong chu i v hai u chu i khng cn d u cch n a, v d chu i Tr n Hng o s c chuy n thnh Tr n Hng o. E02. Vi t chng trnh chuy n m t chu i thnh d ng proper, ngha l k t sau d u cch l k t in hoa. Th d "Nguy n Vn Tng" l chu i d ng proper. E03. Nh p m t chu i. Hy xc nh v tr c a t c di l n nh t trong chu i. E04. Tm h ng c a ma tr n ch nh t cc s th c c p mxn. E05. Tm ma tr n ngh ch o c a ma tr n vung c p n b ng phng php kh Gauss-Jordan. E06. Nh p s li u cho 2 dy s th c a0 , a1 ,..., am-1 v b0 , b1 ,..., bn-1. Hy t o dy c0 , c1 ,..., ck-1 l ph n chung c a 2 dy trn, ngha l cc ph n t ci c m t trong c 2 dy a v b. (G i : C nh m t dy, xt t ng ph n t c a dy kia). E07. Nh p s li u cho 2 dy s th c a0 , a1 ,..., am-1 v b0 , b1 ,..., bn-1. Hy t o dy c0 , c1 ,..., ck-1 sao cho cc ph n t ci c m t trong dy a nhng khng xu t hi n trong dy b. (G i : C nh m t dy, xt t ng ph n t c a dy kia). E08. Nh p s li u cho dy s th c a0 , a1 ,..., an-1 . Hy li t k cc ph n t
K thu t l p trnh C-Cu h i v bi t p

xu t hi n trong dy ng m t l n.

81

Smith Nguyen Studio.


E09. Nh p s li u cho dy s th c a0 , a1 ,..., an-1. Hy li t k cc ph n t xu t hi n trong dy ng 2 l n. E10. Nh p s li u cho 2 dy s th c a0 , a1 ,..., am-1 v b0 , b1 ,..., bn-1. Hy xc nh 2 ph n t ai v bj sao cho |ai - bj| l c c ti u trong t t c cc gi tr |ah-bk| h =1,2,..,m, k = 1,2,... n v ch r v tr c a chng trong cc dy. E11. Nh p s li u cho 2 dy s th c a0 , a1 ,..., am-1 v b0 , b1 ,..., bn-1. Hy xc nh 2 ph n t ai v bj sao cho |ai + bj| l c c ti u trong t t c cc gi tr |ah+bk| h =1,2,..,m, k = 1,2,... n v ch r v tr c a chng trong cc dy. E12. Xy d ng chng trnh qu n l sinh vin lu trn t p nh phn, s d ng c u trc sau: struct SV {char ten[25]; float toan, ly, tb;}; Nh p danh sch cho n sinh vin (n l s t nhin c nh p vo), ch nh p ten v toan, ly. Tnh gi tr tr ng tb =(toan+ly)/2, sau s p x p l i danh sch theo i m trung bnh tng d n. Cho hi n k t qu tr c v sau khi s p x p. E13. Xy d ng chng trnh qu n l sinh vin b ng m ng ng, s d ng c u trc sau: struct SV {char ten[25]; float toan, ly, tb;}; Nh p danh sch cho n sinh vin (n l s t nhin c nh p vo), ch nh p ten v toan, ly. Tnh gi tr tr ng tb =(toan+ly)/2, sau s p x p l i danh sch theo tn v i m trung bnh tng d n (trong nh ng ng i cng tn th ng i c i m trung bnh th p hn s ng tr c). Cho hi n k t qu tr c v sau khi s p x p. E14. Xy d ng chng trnh qu n l sinh vin b ng m ng ng, s d ng c u trc sau: struct SV {char ten[25]; float toan, ly, tb; char XepLoai[20]}; Nh p danh sch cho n sinh vin (n l s t nhin c nh p vo), ch nh p ten v toan, ly. Tnh gi tr tr ng tb =(toan+ly)/2, sau tnh gi tr tr ng x p lo i theo cch sau: XepLoai=kem n u tb<5, = Trung binh n u 5tb<7, = Kha n u 7tb<8 v = Gioi n u 8tb. s p x p l i danh sch theo tr ng XepLoai. E15. Nh p s li u cho dy s th c a0 , a1 ,..., an-1 . Hy li t k cc ph n t l n hn t t c cc ph n t ng tr c n. E16. Nh p s li u cho dy s th c a0 , a1 ,..., an-1 . Hy li t k cc ph n t l n hn t t c cc ph n t ng sau n. E17. Nh p s li u cho dy s th c a0 , a1 ,..., an-1 . In ra mn hnh t n su t (s l n xu t hi n) c a cc ph n t . E18. Nh p s n v dy cc s th c a0 , a1 ,..., an-1. Khng i ch cc ph n t v khng dng thm m ng s th c no khc (c th dng m ng s nguyn n u c n) hy cho hi n trn mn hnh dy trn theo th t tng d n. E19. Nh p m t hm f(x) v 2 s th c a,b r i tnh tch phn xc nh c a hm ny trn kho ng [a,b] b ng phng php hnh thang.
K thu t l p trnh C-Cu h i v bi t p

82

Smith Nguyen Studio.


E20. Nh p m t s t nhin n r i ma tr n vung c p n cc s th c, vec t n chi u b r i gi i h phng trnh i s tuy n tnh Ax=b b ng phng php kh Gauss ho c Gauss-Jordan. E21.T o t p tep1.dat v nh p m s nguyn, t p tep2.dat v nh p n s nguyn. Hy vi t chng trnh t o tep3.dat ch a cc s nguyn trong 2 t p tep1.dat v tep2.dat E22.Vi t chng trnh t o m t t p vn b n tep1.txt v nh p m t s dng vn b n sau m s l n xu t hi n c a m i k t t A n Z ch a trong t p vn b n ny. u chng trnh c cu h i l " C phn bi t ch hoa v ch th ng khng?", cc l nh sau s tu thu c vo cu tr l i c ho c khng. E23.Trong khi m file m i ghi, n u trn a c s n file cng tn th file trn a s b xa. Hy vi t chng trnh t o t p tep1.dat ch a cc s nguyn v ki m tra sao cho n u t n t i file cng tn th t cu h i c mu n ghi ln khng. E24.Xy d ng chng trnh qu n l h c sinh. M i h c sinh qu n l cc thng tin sau: H tn, Nm sinh, i m trung bnh. V i cc ch c nh ng sau: - Nh p s li u, m i l n c th nh p m h c sinh, m>0 - Xem danh sch: trn mn hnh ho c in ra my in. - Tm ki m :theo tn, theo nm sinh, theo tn v nm sinh. - S p x p: theo tn, theo i m trung bnh. - Xa khi bi t tn a. Ci t b ng m ng ng b. Ci t b ng danh sch lin k t thu n c. Ci t b ng danh sch lin k t 2 chi u d. Ci t trn t p nh phn E25. m s k t trong m t t p vn b n. E26. m t n s xu t hi n c a cc k t trong m t t p vn b n.

E27. m s cu (k t thc b ng d u ch m) trong m t t p vn b n. E28. m s dng trong m t t p vn b n. E29. Dng hm main c i vi t chng trnh n i 2 t p vn b n. E30. Dng hm main c i vi t chng trnh i tn m t t p b t k. Trong chng trnh c xt tnh hu ng tn t p m i t n t i, v cho kh nng l a ch ghi ho c khng ghi . E31. Vi t chng trnh hi n n i dung m t t p vn b n ln mn hnh. Khi t p c nhi u hn 24 dng th d ng l i ch nh n phm m i hi n ti p. Vi t d i d ng tr c ti p ho c dng hm main() c i.
K thu t l p trnh C-Cu h i v bi t p

83

Smith Nguyen Studio.


E32. Cho m t file vn b n ch ch a cc k t 'a', 'b', 'c',.. 'A', 'B', 'C'... Hy chuy n i t t c cc ch th ng thnh ch hoa. Ngha l sau khi ch y chng trnh chuy n i file ny ch ch a cc ch in hoa. E33. V th cc hm s c b n : sin(x), cos(x), tan(x), m t s hm m t xc su t quen thu c nh hm m t phn b chu n. Lu cch dng con tr hm c th dng cho m i tr ng h p. E34. V m t khinh kh c u (ho c n gi n l m t hnh c u) bay l l ng trn b u tr i y sao nh p nhy. E35. Hy vi t m t b n nh c (v n u c l i cng t t) m em a thch.

K thu t l p trnh C-Cu h i v bi t p

84

Smith Nguyen Studio.


Ph l c. Cc chng trnh m u
Ph n m u. Lm quen v i C qua Cc chng trnh n gi n

Chng trnh C n gi n nh t ch y khng bo l i: Khng lm g c //001.cpp Chuong trinh C don gian nhat: khong lam gi ca void main() { } Hi n cu cho //002CHAO1.cpp Hien cau chao tren man hinh #include <stdio.h> void main() {printf("\nTurbo C xin chao ban"); } Hi n cu cho v ch nh n phm m i k t thc //002CHAO2.CPP Xoa man hinh, hien cau chao, cho nhan phim #include <stdio.h> #include <conio.h> void main() {clrscr(); printf("Turbo C xin chao ban!"); getch(); } Nh p 2 s nguyn, tnh t ng, hi u, tch, thng //003AB1.CPP Nhap 2 so nguyen. Tinh tong, hieu, tich, thuong. #include <stdio.h> #include <conio.h> void main() {clrscr(); int a,b,tong,tich,hieu,thuong; printf("\nNhap 2 so a,b = "); scanf("%d%d",&a,&b); tong=a+b;tich=a*b;hieu=a-b;thuong=a/b; printf("Tong cua 2 so %d va %d la %d",a,b,tong); //Hay in ra tich, hieu va thuong getch(); } Nh p 2 s th c, tnh t ng, hi u, tch, thng //003AB2.CPP Nhap 2 so thuc. Tinh tong, hieu, tich, thuong. #include <stdio.h> #include <conio.h> void main() {clrscr();
L p trnh C v C++ - Ph l c. Cc chng trnh m u

Smith Nguyen Studio.


float a,b,tong,tich,hieu,thuong; printf("\nNhap 2 so a,b = "); scanf("%f%f",&a,&b); tong=a+b;tich=a*b;hieu=a-b;thuong=a/b; printf("Tong cua 2 so %4.1f va %4.1f la %4.1f",a,b,tong); //Hay in ra tich, hieu va thuong getch(); }

Nh p 3 s th c, tm max c a chng //003ABC1.CPP Nhap 3 so thuc. Tim max cua chung. #include <stdio.h> #include <conio.h> void main() {clrscr(); float a,b,c,max; printf("\nNhap 3 so a,b,c = "); scanf("%f%f%f",&a,&b,&c); max=a; if(b>max) max=b; if(c>max) max=c; printf("Max cua 3 so %4.1f, %4.1f va %4.1f la %4.1f",a,b,c,max); //Hay tinh min getch(); } Nh p 3 s th c, ki m t xem chng c ph i l 3 c nh c a m t tam gic khng, sau ki m tra xe xem chng c ph i l 3 c nh c a tam gic vung khng //003ABC2.CPP Nhap 3 so thuc. Kiem tra xem chung co phai la 3 canh //cua tam giac khong; sau do kiem tra xem chung co phai la 3 canh tam //giac vuong khong #include <stdio.h> #include <conio.h> void main() {clrscr(); float a,b,c; printf("\nNhap 3 so a,b,c = "); scanf("%f%f%f",&a,&b,&c); if(a+b>c && a+c>b && b+c>a) printf("\nChung la 3 canh cua mot tam giac"); else printf("\nChung khong phai la 3 canh cua mot tam giac"); if(a*a+b*b==c*c || a*a+c*c==b*b || b*b+c*c==a*a) printf("\nChung la 3 canh cua mot tam giac vuong"); else printf("\nChung khong phai la 3 canh cua mot tam giac vuong"); getch(); } /*Bai tap: Hay nhap 3 so thuc, kiem tra neu chung khong phai la 3 canh cua mot tam giac thi thong bao va ket thuc, con neu la 3 canh cua tam giac thi

86

Smith Nguyen Studio.


thong bao, sau do kiem tra tiep co phai la 3 canh cua tam giac vuong khong, neu co thi thong bao. */

Tm cc tam gic vung c c nh l cc s nguyn khng l n hn 20 //003ABC3.CPP Tim cac tam giac vuong co canh la so nguyen khong lon hon 20 #include <stdio.h> #include <conio.h> void main() {clrscr(); int a,b,c; for(a=1;a<=20;a++) for(b=1;b<=20;b++) for(c=1;c<=20;c++) if(b*b+c*c==a*a) printf("\n %d %d %d",a,b,c); gotoxy(2,24); printf("Xem xong nhan phim bat ky de ket thuc"); getch(); } /*Bai tap:Tim cac tam giac vuong co canh la so nguyen khong lon hon 100 */

Bi ton trm tru trm c //004100T.CPP Tram trau tram co #include <stdio.h> #include <conio.h> void main() {clrscr(); int dung,nam,gia; for(dung=0;dung<=20;dung++) for(nam=0;nam<=33;nam++) for(gia=0;gia<=100;gia++) if(dung*5+nam*3+gia/3==100 && gia%3==0) printf("\n %d %d %d",dung,nam,gia); gotoxy(2,24); printf("Xem xong nhan phim bat ky de ket thuc"); getch(); } /*Bai tap:Cho hien dong tieu de Dung Nam Gia, sau do la cac hang chua loi giai. Moi lan day man hinh 24 dong thi dung lai de xem, sau do nhan phim de xem tiep. */

87

Smith Nguyen Studio.


Gi i phng trnh b c 2 //005PTB2.CPP Giai phuong trinh bac 2 #include <stdio.h> #include <conio.h> #include <math.h> void nhap(float &a,float &b,float &c) {printf("\nNhap 3 so a, b, c = "); scanf("%f%f%f",&a,&b,&c); } float delta(float a,float b,float c) {return(b*b-4*a*c); } //nghiem=0 la vo nghiem, =1 la co nghiem kep la x0, =2 co 2 nghiem x1 va x2 void loigiai(float a,float b,float c,int &nghiem,float &x0,float &x1,float &x2) {float d=delta(a,b,c); if(d<0) nghiem=0; if(d==0) {nghiem=1;x0=-b/(2*a);} if(d>0) {nghiem=2;x1=(-b+sqrt(d))/(2*a);x2=(-b-sqrt(d))/(2*a);} } void main() {clrscr(); float a,b,c,x0,x1,x2;int nghiem; nhap(a,b,c); loigiai(a,b,c,nghiem,x0,x1,x2); switch(nghiem) {case 0:printf("\nVo nghiem");break; case 1:printf("\nNghiem kep x0 = %5.1f",x0);break; case 2:printf("\nCo 2 nghiem x1 = %5.1f, x2 = %5.1f",x1,x2);break; } gotoxy(2,24); printf("Xem xong nhan phim bat ky de ket thuc"); getch(); } /*Bai tap:Khai bao cac bien a,b,c,nghiem,x0,x1,x2 la bien toan cuc roi viet lai cac ham tren day */

Li t k cc s nguyn t khng l n hn s n cho tr c //006NT1.CPP Liet ke cac so nguyen to tu 2 den n #include <stdio.h> #include <conio.h> #include <math.h> void main() {clrscr(); int n,i,j, a[1000]; printf("\nNhap n = ");scanf("%d",&n); for(i=2;i<=n;i++) a[i]=1;//coi nhu i la nguyen to for(i=2;i<=n;i++) for(j=2;j<=sqrt(i);j++)

88

Smith Nguyen Studio.


if(i%j==0) a[i]=0; printf("\n"); for(i=2;i<=n;i++) if(a[i]) printf("%5d",i); gotoxy(2,24); printf("Xem xong nhan phim bat ky de ket thuc"); getch(); } /*Bai tap:Nhap mot so m va n sao cho m<n roi in ra cac so nguyen to trong khoang [m,n]. */

Li t k cc s nguyn t t m n n //006NT2.CPP Liet ke cac so nguyen to tu m den n #include <stdio.h> #include <conio.h> #include <math.h> //Ham nt tra ve 1 neu la nguyen to, 0 neu khong phai nguyen to int nt(int n) {int i; for(i=2;i<=sqrt(n);i++) if(n%i==0) return(0); return(1); } void main() {clrscr(); int m,n,i; printf("\nNhap m, n = ");scanf("%d%d",&m,&n); while(m>=n) {printf("\nNhap m, n (m<n) = ");scanf("%d%d",&m,&n);}
for(i=m;i<=n;i++) if(nt(i)) printf("%5d",i); gotoxy(2,24); printf("Xem xong nhan phim bat ky de ket thuc"); getch(); } /*Bai tap:Nhap mot so m va n sao cho m<n roi in ra cac so nguyen to trong khoang [m,n].Neu nhap sai 5 lan thi thong bao va ket thuc */

89

Smith Nguyen Studio.


Ph n 1. L p trnh c s

01. Tm c s chung l n nh t c a 2 s nguyn


//01EUCLID.CPP, Tim uoc so chung lon nhat cua hai so #include <stdio.h> #include <conio.h> #include <stdlib.h> void main() {clrscr(); long m,n,t,m1,n1; printf("\nm, n =");scanf("%ld%ld",&m,&n); //Neu m<n thi doi vi tri m va n if(m<n) {t=m;m=n;n=t;} m1=m;n1=n; while(n>0) {t=n; n=m%n; m=t; } printf("\USCLN cua %ld va %ld la: %ld ",m1,n1,m); getch(); }

02. Chuy n i m t s th p phn sang d ng nh phn


//02NPHAN.CPP Chuyen doi mot so thap phan sang nhi phan #include <stdio.h> #include <conio.h> #include <dos.h> #include <stdlib.h> #define nmax 100 void main() {clrscr(); int a[nmax];long n,i,j,k; printf("\nNhap so can doi sang so nhi phan: ");scanf("%ld",&n); i=0; while(n>0) {a[i]=n%2; n=n/2; i++; } i--; printf("\n"); for(j=i;j>=0;j--) printf("%d",a[j]); getch(); }

90

Smith Nguyen Studio.


03. Chuy n i m t s th p phn sang s c c s b t k
//03NPHAN.CPP, Chuyen doi mot so thap phan sang so co co so bat ky #include <stdio.h> #include <conio.h> #include <stdlib.h> #include <string.h> #define nmax 40 char itochar(int n) {switch(n) {case 0:return('0'); case 1:return('1'); case 2:return('2'); case 3:return('3'); case 4:return('4'); case 5:return('5'); case 6:return('6'); case 7:return('7'); case 8:return('8'); case 9:return('9'); case 10:return('A'); case 11:return('B'); case 12:return('C'); case 13:return('D'); case 14:return('E'); case 15:return('F'); default:return('\0'); } }; char *daochuoi(char *a) {int n = strlen(a);int i,j;char ch;char *b; b=new char[n+1]; strcpy(b,a); i=0;j=n-1; while(i<j) {ch=b[i];b[i]=b[j];b[j]=ch;i++;j--; } return(b); }; void main() {clrscr();int n,radix,i;char a[20]; printf("\nNhap so can chuyen doi: ");scanf("%d",&n); printf("\nNhap co so: ");scanf("%d",&radix); i=0; do {a[i++]=itochar(n%radix); n=n/radix; } while(n>0); a[i]='\0'; puts(daochuoi(a)); getch();

91

Smith Nguyen Studio.


}

04. Chuy n i m t s th p phn sang s c c s 11


//04NPHAN.CPP, Chuyen doi mot so thap phan sang so co so 11 #include <stdio.h> #include <conio.h> #include <stdlib.h> #define nmax 20 void main() {clrscr(); int a[nmax];long n,i,j,k; printf("\nNhap so can doi sang so co so 11: ");scanf("%ld",&n); i=0; while(n>0) {a[i]=n%11; n=n/11; i++; } i--; printf("\n"); for(j=i;j>=0;j--) if(a[j]==10) printf("A");else printf("%d",a[j]); getch(); }

05. Nh p v s p x p danh sch cc s th c


//05SAPXEP.CPP Nhap va sap xep danh sach #include <stdio.h> #include <conio.h> #include <stdlib.h> #define nmax 100 //==================================== void nhap(float a[],int &n) {int i,j,k; printf("\nNhap co cua mang: ");scanf("%d",&n); printf("\n"); for(i=0;i<n;i++) {printf("Nhap a[%d] = ",i); scanf("%f",&a[i]); } clrscr(); } //==================================== void sapxep(float a[],int n) {int i,j,k;float t; for(i=0;i<n;i++) {t=a[i];k=i; for(j=i+1;j<n;j++)

92

Smith Nguyen Studio.


if(a[j]<t) {t=a[j];k=j;} if(k!=i) {t=a[i];a[i]=a[k];a[k]=t;} } } //==================================== void view(float a[],int n) {int i; printf("\n"); for(i=0;i<n;i++) printf("%3.1f ",a[i]); } //==================================== void main() {clrscr(); float a[nmax];int n; nhap(a,n); printf("\nDanh sach chua sap xep la:"); view(a,n); printf("\nDanh sach da sap xep la:"); sapxep(a,n); view(a,n); getch(); }

06. o l i m t chu i k t
//06DCHUOI.CPP, Dao chuoi ky tu #include <stdio.h> #include <conio.h> #include <stdlib.h> #include <string.h> #define nmax 40 void daochuoi(char *a) {int n = strlen(a);int i,j;char ch; i=0;j=n-1; while(i<j) {ch=a[i];a[i]=a[j];a[j]=ch;i++;j--; } }; //================================= void main() {clrscr(); char a[20];char *b; strcpy(a,"12345678"); printf("\nChuoi ban dau la: %s",a); daochuoi(a); printf("\nChuoi dao lai la: %s",a); getch(); }

93

Smith Nguyen Studio.


07. M t s chong trnh quy: tnh giai th a c a m t s nguyn khng m, tnh s Fibonacci, tm c s chung l n nh t c a hai s nguyn khng m, bi ton thp H n i.
//07DEQUI.CPP, Cac chuong trinh de quy #include <stdio.h> #include <conio.h> #include <stdlib.h> #include <dos.h> //=============================== long gt(int n) {return((n==0||n==1)?1:n*gt(n-1)); } //=============================== long fibo(int n) {return((n==0||n==1)?n:fibo(n-1)+fibo(n-2)); } //=============================== int uscln(int u,int v) {if(u==v) return u; else if(u<v) return(uscln(u,v-u)); else return(uscln(u-v,v)); } //=============================== void THAPHN(int n,char A,char B,char C) { if(n==1) {printf("\n%c ====> %c",A,B);return; }; THAPHN(n-1,A,C,B); THAPHN(1,A,B,C); THAPHN(n-1,C,B,A); }; //=============================== void main() {clrscr();int x,y; int m,n,m1,n1,u; printf("\nTinh n! voi n = ");scanf("%d",&n); printf("\n%d! = %ld",n,gt(n)); printf("\n\nTinh so Fibonacci voi n = ");scanf("%d",&n); printf("\nSo Fibonacci f(%d) = %ld",n,fibo(n)); printf("\n\nTim USCLN cua m va n (nhap m va n) = ");scanf("%d%d",&m,&n); m1=m;n1=n; u=uscln(m,n); printf("\nUSCLN cua %d va %d la %d",m1,n1,u); printf("\nNhan phim bat ky de tiep tuc..."); getch();

94

Smith Nguyen Studio.


printf("\n"); x=wherex();y=wherey(); while(1) {gotoxy(x,y); printf("\nHay nhap so dia n can chuyen tren thap Ha Noi (n<=7): "); scanf("%d",&n); if(n>7) {printf("\nSo dia phai <= 7 ");delay(1500);continue;} break; } clrscr(); printf("\Qua trinh chuyen dia duoc thuc hien nhu sau:"); THAPHN(n,'1','2','3'); getch(); }

08. Sng Erastothen li t k cc s nguyn t khng v t qu m t s t nhin n cho tr c.


//08ERASTO.CPP, Sang Erastothen liet ke cac so nguyen to <=n #include "stdio.h" #include "conio.h" #include "math.h" //================ void main() {clrscr(); int n; printf("\nHay nhap so nguyen < 1500 n = ");scanf("%d",&n); int a[2000],i,j; for(i=2;i<=n;i++) a[i]=1;//Luc dau cho rang tat ca la nguyen to for(i=2;i<sqrt(float(n));i++) for(j=2;j<=n/i;j++) a[i*j]=0;//Neu k=i*j thi k khong phai la nguyen to printf("\nCac so nguyen to <= %d la:\n",n); for(i=2;i<=n;i++) if(a[i]) printf("%d ",i); getch(); }

09. Tm s l n nh t trong dy cc s th c
//09TimMax.CPP Tim Max trong day phan tu #include <stdio.h> #include <conio.h> #include <stdlib.h> #define nmax 100 //==================================== void nhap(float a[],int &n) {int i,j,k; printf("\nNhap co cua mang: ");scanf("%d",&n); printf("\n"); for(i=0;i<n;i++)

95

Smith Nguyen Studio.


{printf("Nhap a[%d] = ",i); scanf("%f",&a[i]); } clrscr(); } //==================================== int timmax(float a[],int n) //Tra ve vi tri k ma a[k] la max {int i,k;float max; max=a[0];k=0; for(i=1;i<n;i++) if(a[i]>max) {max=a[i];k=i;} return(k); } //==================================== void view(float a[],int n) {int i; printf("\n"); for(i=0;i<n;i++) printf("%3.1f ",a[i]); } //==================================== void main() {clrscr(); float a[nmax];int n,k; nhap(a,n); printf("\nDanh sach da nhap la:"); view(a,n); k=timmax(a,n); printf("\nPhan tu cuc dai la a[%d] = %.1f",k,a[k]); getch(); }

10. Tm xem m t s th c x c xu t hi n trong dy s th c hay khng


//10TimX.CPP Tim X trong day phan tu #include <stdio.h> #include <conio.h> #include <stdlib.h> #define nmax 100 //==================================== void nhap(float a[],int &n) {int i,j,k; printf("\nNhap co cua mang: ");scanf("%d",&n); printf("\n"); for(i=0;i<n;i++) {printf("Nhap a[%d] = ",i); scanf("%f",&a[i]); } clrscr(); } //==================================== int timkiem(float a[],int n,float x) //Tra ve vi tri k ma a[k] la a[k]=x {int i; for(i=0;i<n;i++)

96

Smith Nguyen Studio.


if(a[i]==x) return(i); return(-1); } //==================================== void view(float a[],int n) {int i; printf("\n"); for(i=0;i<n;i++) printf("%3.1f ",a[i]); } //==================================== void main() {clrscr(); float a[nmax],x;int n,k; nhap(a,n); printf("\nDanh sach da nhap la:"); view(a,n); printf("\nHay nhap gia tri can tim x = ");scanf("%f",&x); k=timkiem(a,n,x); if(k>=0) printf("\nPhan tu tim thay la la a[%d] = %.1f",k,a[k]); else printf("\nKhong tim thay phan tu %f trong day tren",x); getch(); }

11. Tnh gi tr a th c b c n theo phng php Horner


//11HORNER.CPP Tim gia tri da thuc bac n tai x. #include <stdio.h> #include <conio.h> #include <stdlib.h> #define nmax 100 //==================================== void nhap(float a[],int &n) {int i,j,k; printf("\nNhap bac cua da thuc: ");scanf("%d",&n); printf("\nNhap cac he so tu bac cao den thap:\n"); for(i=n;i>=0;i--) {printf("Nhap a[%d] = ",i); scanf("%f",&a[i]); } clrscr(); } //==================================== //Tinh p(x) = a[n]*(x mu n) + ... + a[1]*x +a[0] float horner(float a[],int n,float x) //Tra ve gia tri da thuc tai x {int i;float s; s=a[n]; for(i=n-1;i>=0;i--) s=s*x+a[i]; return(s); } //====================================

97

Smith Nguyen Studio.


void view(float a[],int n) {int i; printf("\nCac he so da thuc tu mu bac cao den thap:\n"); for(i=n;i>=0;i--) printf("%3.1f ",a[i]); } //==================================== void main() {clrscr(); float a[nmax],x;int n,k; nhap(a,n); printf("\nCac he so cua da thuc tu bac cao den thap la:"); view(a,n); printf("\nHay nhap gia tri can tinh gia tri da thuc, x = ");scanf("%f",&x); printf("\nGia tri da thuc tai x = %.1f la %.1f",x,horner(a,n,x)); getch(); }

12. Tm t h p c a cc lo i gi y b c
//12GBAC.CPP, Tim to hop cua cac loai giay bac #include <stdio.h> #include <conio.h> #include <stdlib.h> //================= void main() {clrscr(); int x,y,z,i; i=0; for(x=0;x<=5750/500;x++) for(y=0;y<=5750/200;y++) for(z=0;z<=5750/50;z++) if(x*500+y*200+z*50==5750) printf("\n%4d: %d %d %d",++i,x,y,z); getch(); }

13. Lo i tr cc d u cch th a trong chu i tn (ch l i m t d u cch)


//13CHTEN.CPP, Loai tru dau cach thua trong ten #include <stdio.h> #include <stdlib.h> #include <string.h> #include <conio.h> //===================== void chuanhoa(char *s) {char *s1; int n, i,k,j; n=strlen(s); s1=new char[n+1]; i=k=0;

98

Smith Nguyen Studio.


while(s[i]==' ') i++;//Cat dau cach ben trai chuoi while(i<n) {if(s[i]!=' ') s1[k++]=s[i++]; else {s1[k++]=s[i++]; while(s[i]==' ') i++; } } k=k-1; while(s1[k]==' ') k--;//Cat dau cach ben phai chuoi s1[k+1]='\0'; strcpy(s,s1); } //=============================== void main() {clrscr(); char *s1=" Nguyen Anh Hung "; puts(s1); printf("\n"); chuanhoa(s1); printf("\n%s",s1); getch(); }

14. m s ch trong chu i k t


//14DEMCHU.CPP, dem chu trong chuoi #include <stdio.h> #include <stdlib.h> #include <string.h> #include <conio.h> //===================== void chuanhoa(char *s) {char *s1; int n, i,k,j; n=strlen(s); s1=new char[n+1]; i=k=0; while(s[i]==' ') i++;//Cat dau cach ben trai chuoi while(i<n) {if(s[i]!=' ') s1[k++]=s[i++]; else {s1[k++]=s[i++]; while(s[i]==' ') i++; } } k=k-1; while(s1[k]==' ') k--;//Cat dau cach ben phai chuoi s1[k+1]='\0'; strcpy(s,s1);

99

Smith Nguyen Studio.


} //=========================== //=================================== int demchu(char *s) //Tra ve so chu trong chuoi {char *s1; int n,i,dem; n=strlen(s); s1=new char[n+1]; strcpy(s1,s); chuanhoa(s1); n=strlen(s1); dem=0; for(i=0;i<n;i++) if(s1[i]==' ') dem++; return(dem+1); } //=================================== void main() {clrscr(); char *s1=" Nguyen Anh Hung "; puts(s1); printf("\nSo tu trong chuoi tren la: %d",demchu(s1)); getch(); }

15. Tnh s theo cng th c:


/4 = 1-1/3+1/5-1/7+...+(-1)N/(2N+1) v i chnh xc Epsilon th a mn: 1/(2N+1)<Epsilon=1.0E-04

//15TINHPI.CPP, Tinh so pi #include <stdio.h> #include <conio.h> #include <stdlib.h> #include <math.h> //================== double tinhpi() {double tong,sh,epsi,dau; int n; epsi=0.0001; tong=0; sh=1; dau=1; n=0; while(fabs(sh)>epsi) {tong=tong+sh; n++;

100

Smith Nguyen Studio.


dau=-dau; sh=dau/(2*n+1); } return(tong*4); } //================ void main() {clrscr(); printf("\n Pi = %f",tinhpi()); getch(); }

101

Smith Nguyen Studio.


Ph n 2. C u trc v t p

16. Nh p v in danh sch sinh vin (phin b n 1)


//16SVIEN1.CPP, Chuong trinh quan ly sinh vien 1.0 #include <stdio.h> #include <stdlib.h> #include <conio.h> #include <ctype.h> #define nmax 100 //nmax la co toi da cua mang danh sach sinh vien //================== struct nhansu {char ten[20]; int tuoi; }; nhansu ds[nmax];int n=0; //Mang dslop[] la danh sach sinh vien trong lop, n la so sinh vien //================== void nhap(int &n) {clrscr(); printf("\nHay nhap so sinh vien trong lop: ");scanf("%d",&n); int i; for(i=0;i<n;i++) {printf("\nNhap thong tin cho nguoi thu %d:",i+1); printf("\nTen : ");fflush(stdin);gets(ds[i].ten); printf("Tuoi: ");scanf("%d",&ds[i].tuoi); } } //================== void xem() {clrscr(); printf("\nDanh sach sinh vien trong lop:"); int i; printf("\n\n tt Ho va ten Tuoi"); for(i=0;i<n;i++) printf("\n %d %-20s %d ",i+1,ds[i].ten,ds[i].tuoi); } //================== void main() {char chon; while(1) {clrscr(); printf("\n1. Nhap danh sach sinh vien"); printf("\n2. Xem danh sach sinh vien"); printf("\nz. Ket thuc chuong trinh"); printf("\n\nHay nhan phim 1,2 hoac z de chon muc can thuc hien: ");

102

Smith Nguyen Studio.


chon=getch();//chon se la ky tu vua nhan chon=toupper(chon);//Chuyen sang chu hoa if(chon=='Z') break;//Neu nhan z hoac Z thi ket thuc switch(chon) {case '1': nhap(n);break; case '2': xem(); } gotoxy(1,25); printf("Nhan phim bat ky de tiep tuc"); getch(); } }

17. Nh p v in danh sch sinh vin (phin b n 2)


//17SVIEN2.CPP, Chuong trinh quan ly sinh vien 2.0 #include <stdio.h> #include <stdlib.h> #include <conio.h> #include <ctype.h> #define nmax 100 //nmax la co toi da cua mang danh sach sinh vien //================== struct nhansu {char ten[20]; int tuoi; }; nhansu ds[nmax];int n=0; //Mang dslop[] la danh sach sinh vien trong lop, n la so sinh vien //================== void defwindow(int cot1,int dong1,int cot2,int dong2,int maunen, int mauchu) {window(cot1,dong1,cot2,dong2); textbackground(maunen); textcolor(mauchu); clrscr(); } //================== void normalscreen() {textmode(C80); window(1,1,80,25); textbackground(BLUE); textcolor(WHITE); clrscr(); } //================== void nhap(int &n) {normalscreen(); printf("\nHay nhap so sinh vien trong lop: ");scanf("%d",&n); int i; for(i=0;i<n;i++) {printf("\nNhap thong tin cho nguoi thu %d:",i+1); printf("\nTen : ");fflush(stdin);gets(ds[i].ten);

103

Smith Nguyen Studio.


printf("Tuoi: ");scanf("%d",&ds[i].tuoi); } } //================== void xem() {//normalscreen(); defwindow(1,1,80,25,MAGENTA,BLUE); defwindow(3,2,78,24,CYAN,BLUE); defwindow(4,2,77,24,CYAN,BLUE); //\n co nghia la xuong dong, voi printf thi ve dau dong (carriage-return) //nhung voi cprint can phai co them \r la lenh tro ve dau dong cprintf("\r\nDanh sach sinh vien trong lop:"); int i; cprintf("\r\n\n tt Ho va ten Tuoi"); for(i=0;i<n;i++) cprintf("\r\n %d %-20s %d ",i+1,ds[i].ten,ds[i].tuoi); gotoxy(1,22); cprintf("Nhan phim bat ky de tiep tuc"); getch(); } //================== void main() {char chon; while(1) {normalscreen(); printf("\n 1. Nhap danh sach sinh vien"); printf("\n 2. Xem danh sach sinh vien"); printf("\n z. Ket thuc chuong trinh"); printf("\n\n Hay nhan phim 1,2 hoac z de chon muc can thuc hien: "); chon=getch();//chon se la ky tu vua nhan chon=toupper(chon);//Chuyen sang chu hoa if(chon=='Z') break;//Neu nhan z hoac Z thi ket thuc switch(chon) {case '1': nhap(n);break; case '2': xem(); } } }

18. Nh p, s p x p v in danh sch sinh vin (phin b n 3)


//18SVIEN3.CPP, Chuong trinh quan ly sinh vien 3.0 #include <stdio.h> #include <stdlib.h> #include <conio.h> #include <ctype.h> #include <string.h> #define nmax 100 //nmax la co toi da cua mang danh sach sinh vien //==================

104

Smith Nguyen Studio.


struct nhansu {char ten[20]; int tuoi; }; nhansu ds[nmax];int n=0; //Mang dslop[] la danh sach sinh vien trong lop, n la so sinh vien //================== void nhap(int &n) {clrscr(); printf("\nHay nhap so sinh vien trong lop: ");scanf("%d",&n); int i; for(i=0;i<n;i++) {printf("\nNhap thong tin cho nguoi thu %d:",i+1); printf("\nTen : ");fflush(stdin);gets(ds[i].ten); printf("Tuoi: ");scanf("%d",&ds[i].tuoi); } } //================== void xem() {clrscr(); printf("\nDanh sach sinh vien trong lop:"); int i; printf("\n\n tt Ho va ten Tuoi"); for(i=0;i<n;i++) printf("\n %d %-20s %d ",i+1,ds[i].ten,ds[i].tuoi); } //================== void sapxepten() {int i,j,k;nhansu t; char s[20]; for(i=0;i<n;i++) {strcpy(s,ds[i].ten);k=i; for(j=i+1;j<n;j++) if(strcmpi(ds[j].ten,s)<0) {k=j;strcpy(s,ds[j].ten);} if(k!=i) {t=ds[i];ds[i]=ds[k];ds[k]=t;} }; } //================== void main() {char chon; while(1) {clrscr(); printf("\n1. Nhap danh sach sinh vien"); printf("\n2. Xem danh sach sinh vien"); printf("\n3. Sap xep theo ten (khong phan biet chu hoa chu thuong)"); printf("\nz. Ket thuc chuong trinh"); printf("\n\nHay nhan phim 1,2 hoac z de chon muc can thuc hien: "); chon=getch();//chon se la ky tu vua nhan chon=toupper(chon);//Chuyen sang chu hoa if(chon=='Z') break;//Neu nhan z hoac Z thi ket thuc switch(chon)

105

Smith Nguyen Studio.


{case '1': nhap(n);break; case '2': xem();break; case '3': sapxepten();break; } gotoxy(1,25); printf("Nhan phim bat ky de tiep tuc"); getch(); } }

19. Nh p, s p x p, tm ki m v in danh sch sinh vin (phin b n 4)


//19SVIEN4.CPP, Chuong trinh quan ly sinh vien 4.0 #include <stdio.h> #include <stdlib.h> #include <conio.h> #include <ctype.h> #include <string.h> #define nmax 100 //nmax la co toi da cua mang danh sach sinh vien //================== struct nhansu {char ten[20]; int tuoi; }; nhansu ds[nmax];int n=0; //Mang dslop[] la danh sach sinh vien trong lop, n la so sinh vien //================== void nhap(int &n) {clrscr(); printf("\nHay nhap so sinh vien trong lop: ");scanf("%d",&n); int i; for(i=0;i<n;i++) {printf("\nNhap thong tin cho nguoi thu %d:",i+1); printf("\nTen : ");fflush(stdin);gets(ds[i].ten); printf("Tuoi: ");scanf("%d",&ds[i].tuoi); } } //================== void xem() {clrscr(); printf("\nDanh sach sinh vien trong lop:"); int i; printf("\n\n tt Ho va ten Tuoi"); for(i=0;i<n;i++) printf("\n %d %-20s %d ",i+1,ds[i].ten,ds[i].tuoi); } //================== void sapxepten() {int i,j,k;nhansu t; char s[20];

106

Smith Nguyen Studio.


for(i=0;i<n;i++) {strcpy(s,ds[i].ten);k=i; for(j=i+1;j<n;j++) if(strcmpi(ds[j].ten,s)<0) {k=j;strcpy(s,ds[j].ten);} if(k!=i) {t=ds[i];ds[i]=ds[k];ds[k]=t;} }; } //================== //Tim kiem ten, neu tim thay thi tra ve vi tri tim thay int timkiemten(char *pten) {int i; for(i=0;i<n;i++) if(strcmpi(pten,ds[i].ten)==0) return(i); return(-1); } //================== void main() {char chon;char mten[20]; int k; while(1) {clrscr(); printf("\n1. Nhap danh sach sinh vien"); printf("\n2. Xem danh sach sinh vien"); printf("\n3. Sap xep theo ten (khong phan biet chu hoa chu thuong)"); printf("\n4. Tim kiem theo ten (khong phan biet chu hoa chu thuong)"); printf("\nz. Ket thuc chuong trinh"); printf("\n\nHay nhan phim 1,2 hoac z de chon muc can thuc hien: "); chon=getch();//chon se la ky tu vua nhan chon=toupper(chon);//Chuyen sang chu hoa if(chon=='Z') break;//Neu nhan z hoac Z thi ket thuc switch(chon) {case '1': nhap(n);break; case '2': xem();break; case '3': sapxepten();break; case '4': fflush(stdin);printf("\nHay nhap ten can tim: ");gets(mten); k=timkiemten(mten); if(k==-1) printf("\nKhong tim thay"); else printf("\Ten tim thay la: %s", ds[k].ten); break; } gotoxy(1,25); printf("Nhan phim bat ky de tiep tuc"); getch(); } }

20. Nh p, s p x p, tm ki m v in danh sch sinh vin (phin b n 5)


//21SVIEN6.CPP, Chuong trinh quan ly sinh vien 6.0 //Cai dat bang mang dong #include <stdio.h> #include <stdlib.h>

107

Smith Nguyen Studio.


#include <conio.h> #include <ctype.h> #include <string.h> #define nmax 100 //nmax la co toi da cua mang danh sach sinh vien //================== struct nhansu {char ten[20]; int tuoi; }; nhansu *ds;int n=0; //Mang dslop[] la danh sach sinh vien trong lop, n la so sinh vien //================== void nhap(int &n) {ds = new nhansu[nmax]; clrscr(); printf("\nHay nhap so sinh vien trong lop: ");scanf("%d",&n); int i; for(i=0;i<n;i++) {printf("\nNhap thong tin cho nguoi thu %d:",i+1); printf("\nTen : ");fflush(stdin);gets(ds[i].ten); printf("Tuoi: ");scanf("%d",&ds[i].tuoi); } } //================== void xem() {clrscr(); printf("\nDanh sach sinh vien trong lop:"); int i; printf("\n\n tt Ho va ten Tuoi"); for(i=0;i<n;i++) printf("\n %d %-20s %d ",i+1,ds[i].ten,ds[i].tuoi); } //================== void sapxepten() {int i,j,k;nhansu t; char s[20]; for(i=0;i<n;i++) {strcpy(s,ds[i].ten);k=i; for(j=i+1;j<n;j++) if(strcmpi(ds[j].ten,s)<0) {k=j;strcpy(s,ds[j].ten);} if(k!=i) {t=ds[i];ds[i]=ds[k];ds[k]=t;} }; } //================== //Tim kiem ten, neu tim thay thi tra ve vi tri tim thay int timkiemten(char *pten) {int i; for(i=0;i<n;i++) if(strcmpi(pten,ds[i].ten)==0) return(i); return(-1);

108

Smith Nguyen Studio.


} //================== void main() {char chon;char mten[20]; int k; while(1) {clrscr(); printf("\n1. Nhap danh sach sinh vien"); printf("\n2. Xem danh sach sinh vien"); printf("\n3. Sap xep theo ten (khong phan biet chu hoa chu thuong)"); printf("\n4. Tim kiem theo ten (khong phan biet chu hoa chu thuong)"); printf("\nz. Ket thuc chuong trinh"); printf("\n\nHay nhan phim 1,2 hoac z de chon muc can thuc hien: "); chon=getch();//chon se la ky tu vua nhan chon=toupper(chon);//Chuyen sang chu hoa if(chon=='Z') break;//Neu nhan z hoac Z thi ket thuc switch(chon) {case '1': nhap(n);break; case '2': xem();break; case '3': sapxepten();break; case '4': fflush(stdin);printf("\nHay nhap ten can tim: ");gets(mten); k=timkiemten(mten); if(k==-1) printf("\nKhong tim thay"); else printf("\Ten tim thay la: %s", ds[k].ten); break; } gotoxy(1,25); printf("Nhan phim bat ky de tiep tuc"); getch(); } }

21. Nh p, s p x p, tm ki m v in danh sch sinh vin (phin b n 6)


//21SVIEN6.CPP, Chuong trinh quan ly sinh vien 6.0//Cai dat bang mang dong#include <stdio.h>#include <stdlib.h>#include <conio.h>#include <ctype.h>#include <string.h> #define nmax 100 //nmax la co toi da cua mang danh sach sinh vien //================== struct nhansu {char ten[20]; int tuoi; }; nhansu *ds;int n=0; //Mang dslop[] la danh sach sinh vien trong lop, n la so sinh vien //================== void nhap(int &n) {ds = new nhansu[nmax]; clrscr(); printf("\nHay nhap so sinh vien trong lop: ");scanf("%d",&n); int i; for(i=0;i<n;i++)

109

Smith Nguyen Studio.


{printf("\nNhap thong tin cho nguoi thu %d:",i+1); printf("\nTen : ");fflush(stdin);gets(ds[i].ten); printf("Tuoi: ");scanf("%d",&ds[i].tuoi); } } //================== void xem() {clrscr(); printf("\nDanh sach sinh vien trong lop:"); int i; printf("\n\n tt Ho va ten Tuoi"); for(i=0;i<n;i++) printf("\n %d %-20s %d ",i+1,ds[i].ten,ds[i].tuoi); } //================== void sapxepten() {int i,j,k;nhansu t; char s[20]; for(i=0;i<n;i++) {strcpy(s,ds[i].ten);k=i; for(j=i+1;j<n;j++) if(strcmpi(ds[j].ten,s)<0) {k=j;strcpy(s,ds[j].ten);} if(k!=i) {t=ds[i];ds[i]=ds[k];ds[k]=t;} }; } //================== //Tim kiem ten, neu tim thay thi tra ve vi tri tim thay int timkiemten(char *pten) {int i; for(i=0;i<n;i++) if(strcmpi(pten,ds[i].ten)==0) return(i); return(-1); } //================== void main() {char chon;char mten[20]; int k; while(1) {clrscr(); printf("\n1. Nhap danh sach sinh vien"); printf("\n2. Xem danh sach sinh vien"); printf("\n3. Sap xep theo ten (khong phan biet chu hoa chu thuong)"); printf("\n4. Tim kiem theo ten (khong phan biet chu hoa chu thuong)"); printf("\nz. Ket thuc chuong trinh"); printf("\n\nHay nhan phim 1,2 hoac z de chon muc can thuc hien: "); chon=getch();//chon se la ky tu vua nhan chon=toupper(chon);//Chuyen sang chu hoa if(chon=='Z') break;//Neu nhan z hoac Z thi ket thuc switch(chon) {case '1': nhap(n);break; case '2': xem();break; case '3': sapxepten();break;

110

Smith Nguyen Studio.


case '4': fflush(stdin);printf("\nHay nhap ten can tim: ");gets(mten); k=timkiemten(mten); if(k==-1) printf("\nKhong tim thay"); else printf("\Ten tim thay la: %s", ds[k].ten); break; } gotoxy(1,25); printf("Nhan phim bat ky de tiep tuc"); getch(); } } 22. Danh sch ci t b ng danh sch lin k t (phin b n 1) //22DSLK1.CPP Cai dat bai toan quan ly sinh vien bang danh sach lien ket/* Con tro phead se chi vao ban ghi dau tien, tuc la ban ghi chua sinh vien dau tien. Truong next cua cac ban ghi chi den ban ghi tiep theo. Truong next cua ban ghi cuoi cung chi den con tro NULL. */ #include <stdio.h> #include <conio.h> #include <stdlib.h> #include <iostream.h> #include <dos.h> #define false 0 #define true 1 struct nhansu {char ten[20];int tuoi;nhansu* next;}; int snv;nhansu *phead,*pcurrent; void khoitao(); void nhap(); void xem(); void sapxep(); void sapxep2(); //================================= void main() {const int F1=59,F2=60,F3=61,F4=62,F10=68; char chon; while(true) {clrscr(); printf("\nF1. Khoi tao"); printf("\nF2. Nhap"); printf("\nF3. Xem"); printf("\nF4. Sap xep"); printf("\nF10.Ket thuc"); printf("\n Nhan phim F1 - F10 de chon"); chon=getch(); if(chon==0) chon=getch(); if(chon==F10) break; switch(chon) {case F1: khoitao();break; case F2: nhap();break; case F3: xem();break;

111

Smith Nguyen Studio.


case F4: sapxep2();break; } gotoxy(50,24); printf("Nhan phim bat ky de tiep tuc"); getch(); } } //======================================== void khoitao() {phead=NULL; snv=0;pcurrent=NULL; }; //======================================== void nhap() {int i,mm; nhansu *p1,*p, *tmp; p=p1=phead; while(p!=NULL) {p1=p; p=p->next; } cout<<endl<<"Nhap bao nhieu nguoi?";cin>>mm; for(i=0;i<mm;i++) {tmp=new nhansu;tmp->next=NULL; cout<<endl<<"Nhap nhan vien thu "<<snv+i+1<<": "; cout<<endl<<"Ten: ";gets(tmp->ten); cout<<"Tuoi: ";cin>>tmp->tuoi; if(p1==NULL) {p1=phead=tmp;} else {p1->next=tmp;p1=tmp;} } snv+=mm; pcurrent=p1; } //======================================== void xem() {int i; cout<<endl<<"Danh sach nhan vien:"; cout<<endl<<"Ten tuoi"; nhansu *p=phead; while(p!=NULL) {cout<<endl<<p->ten<<" "<<p->tuoi; p=p->next; } } //======================================== void sapxep() {if(snv<2) return; nhansu *p,*p1,*p2,*ptmp,tmp;int mtuoi;

112

Smith Nguyen Studio.


p=p1=p2=phead; //pt truoc p,p1t truoc p1 while(p1!=NULL) {p=p1; p2=p1->next; while(p2!=NULL) {if(p2->tuoi<p->tuoi) p=p2; p2=p2->next; } if(p!=p1) {tmp=*p1;ptmp=p1->next; *p1=*p;p1->next=ptmp; ptmp=p->next;*p=tmp; p->next=ptmp; } p1=p1->next; } } //======================================== void sapxep2() {if(snv<2) return; nhansu *p,*pt,*p1,*p1t,*p2,*p2t,*ptmp,tmp;int mtuoi; p1t=p1=phead; //pt truoc p,p1t truoc p1 while(p1!=NULL) {pt=p1t; p=p1; p2t=p1; p2=p1->next; while(p2!=NULL) {if(p2->tuoi<p->tuoi) {pt=p2t;p=p2;} p2t=p2; p2=p2->next; } if(p==p1) {p1t=p1; p1=p1->next; continue; } if(p1==phead) {if(p1->next==p)//p va p1 lien nhau {ptmp=p->next; phead=p;p->next=p1;p1->next=ptmp; } else {ptmp=p->next; phead=p;p->next=p1->next;pt->next=p1;p1->next=ptmp; } } else {if(p1->next==p)//p va p1 lien nhau

113

Smith Nguyen Studio.


{ptmp=p->next; p1t->next=p;p->next=p1;p1->next=ptmp; } else {ptmp=p->next; p1t->next=p;p->next=p1->next;pt->next=p1;p1->next=ptmp; } } p1=p; p1t=p1; p1=p1->next; } }

23. Danh sch ci t b ng danh sch lin k t (phin b n 2)


//23DSLK2.CPP Cai dat bai toan quan ly sinh vien bang danh sach lien ket /* Con tro phead se chi vao ban ghi dau tien, tuc la ban ghi chua sinh vien dau tien. Truong next cua cac ban ghi chi den ban ghi tiep theo. Truong next cua ban ghi cuoi cung chi den con tro NULL. */ #include <stdio.h> #include <conio.h> #include <stdlib.h> #include <iostream.h> #include <dos.h> #define false 0 #define true 1 struct kthang {int thang,nam;}; struct nhansu {char ten[20];kthang tsinh;int tuoi;nhansu* next;}; int snv;nhansu *phead,*pcurrent; void khoitao(); void nhap(); void xem(); void sapxep(); void sapxep2(); void main() {const int F1=59,F2=60,F3=61,F4=62,F10=68; char chon; while(true) {clrscr(); printf("\nF1. Khoi tao"); printf("\nF2. Nhap"); printf("\nF3. Xem"); printf("\nF4. Sap xep"); printf("\nF10.Ket thuc"); printf("\n Nhan phim F1 - F10 de chon"); chon=getch(); if(chon==0) chon=getch(); if(chon==F10) break; switch(chon)

114

Smith Nguyen Studio.


{case F1: khoitao();break; case F2: nhap();break; case F3: xem();break; case F4: sapxep();break; } gotoxy(50,24); printf("Nhan phim bat ky de tiep tuc"); getch(); } } //======================================== void khoitao() {phead=NULL; snv=0;pcurrent=NULL; }; //======================================== void nhap() {int i,mm; nhansu *p1,*p, *tmp; p=p1=phead; while(p!=NULL) {p1=p; p=p->next; } cout<<endl<<"Nhap bao nhieu nguoi?";cin>>mm; for(i=0;i<mm;i++) {tmp=new nhansu;tmp->next=NULL; cout<<endl<<"Nhap nhan vien thu "<<snv+i<<": "; cout<<endl<<"Ten: ";gets(tmp->ten); cout<<endl<<"Tuoi: ";cin>>tmp->tuoi; cout<<endl<<"Thang: ";cin>>tmp->tsinh.thang; cout<<endl<<"Nam: ";cin>>tmp->tsinh.nam; if(p1==NULL) {p1=phead=tmp;} else {p1->next=tmp;p1=tmp;} } snv+=mm; pcurrent=p1; } //======================================== void xem() {int i; cout<<endl<<"Danh sach nhan vien:"; cout<<endl<<"Ten tuoi thang nam"; nhansu *p=phead; while(p!=NULL) {cout<<endl<<p->ten<<" "<<p->tuoi<<" "<<p->tsinh.thang<<" p=p->next; }

"<<p->tsinh.nam;

115

Smith Nguyen Studio.


} //======================================== void sapxep() {if(snv<2) return; nhansu *p,*p1,*p2,*ptmp,tmp;int mtuoi; p=p1=p2=phead; //pt truoc p,p1t truoc p1 while(p1!=NULL) {p=p1; p2=p1->next; while(p2!=NULL) {//if(long(p2->tsinh.nam*100+p2->tsinh.thang)<long(p->tsinh.nam*100+p->tsinh.thang)) p=p2; if(p2->tsinh.nam*100+p2->tsinh.thang<p->tsinh.nam*100+p->tsinh.thang) p=p2; p2=p2->next; } if(p!=p1) {tmp=*p1;ptmp=p1->next; *p1=*p;p1->next=ptmp; ptmp=p->next;*p=tmp; p->next=ptmp; } p1=p1->next; } } //======================================== //======================================== void sapxep2() {if(snv<2) return; nhansu *p,*pt,*p1,*p1t,*p2,*p2t,*ptmp,tmp;int mtuoi; p1t=p1=phead; //pt truoc p,p1t truoc p1 while(p1!=NULL) {pt=p1t; p=p1; p2t=p1; p2=p1->next; while(p2!=NULL) {if(p2->tuoi<p->tuoi) {pt=p2t;p=p2;} p2t=p2; p2=p2->next; } if(p==p1) {p1t=p1; p1=p1->next; continue; } if(p1==phead) {if(p1->next==p)//p va p1 lien nhau {ptmp=p->next; phead=p;p->next=p1;p1->next=ptmp;

116

Smith Nguyen Studio.


} else {ptmp=p->next; phead=p;p->next=p1->next;pt->next=p1;p1->next=ptmp; } } else {if(p1->next==p)//p va p1 lien nhau {ptmp=p->next; p1t->next=p;p->next=p1;p1->next=ptmp; } else {ptmp=p->next; p1t->next=p;p->next=p1->next;pt->next=p1;p1->next=ptmp; } } p1=p; p1t=p1; p1=p1->next; } }

24. Danh sch ci t trn t p (phin b n 1)


//24DSF1.CPP//Chuong trinh quan ly sinh vien tren tep nhi phan#include <stdio.h>#include <conio.h>#include <stdlib.h>#include <iostream.h>#include <ctype.h>#include <string.h>#include <dos.h>#define false 0#define true 1#include "dir.h" struct sv {char ten[25];int tuoi;}; FILE* f;char tentep[]="sv.dat"; int ssv,current,recsize=sizeof(sv); void khoitao(); void nhap(); void xem(); void sapxep(); int timkiem(); //================================ int cokhong(char *st); sv getrec(int n);//Lay ban ghi thu n,(ban ghi dau tien la 0) void gotorec(int n);//Chuyen den truoc ban ghi thu n void doicho(int i,int j);//Doi dong thu i cho dong j char* rtrim(char *s);//Bo cac ky tu trong cuoi chuoi //==================================================== //==================================================== void main() {char chon; while(true) {clrscr(); printf("\nF1. Khoi tao"); printf("\nF2. Nhap"); printf("\nF3. Xem"); printf("\nF4. Sap xep"); printf("\nF5. Tim kiem");

117

Smith Nguyen Studio.


printf("\nF10.Ket thuc"); printf("\n Nhan phim F1 - F10 de chon"); chon=getch(); if(chon==0) chon=getch(); if(chon==68) break; switch(chon) {case 59: khoitao();break;//F1 case 60: nhap();break; //F2 case 61: xem();break; //F3 case 62: sapxep();break; //F4 case 63: if(!timkiem()) printf("\nKhong tim thay");break;//F5 } gotoxy(50,24); printf("Nhan phim bat ky de tiep tuc"); getch(); } } //================================================== void khoitao() {ffblk f1;int i; if(findfirst("svb.dat",&f1,0)==0) {if(cokhong("Tep da ton tai, ghi de khong?(C/K)")) f=fopen("svb.dat","wb"); } else f=fopen("svb.dat","wb"); fclose(f); f=fopen("svb.dat","r+b"); fseek(f,0,2); ssv=ftell(f)/recsize; } //======================================== void nhap() {if(f==NULL) khoitao(); fseek(f,0,2); int i,mm;sv tmp; printf("\nNhap bao nhieu nguoi?");scanf("%d",&mm); for(i=0;i<mm;i++) {printf("\nNhap nhan vien thu %d :",ssv+i+1); fflush(stdin); printf("\nTen: ");gets(tmp.ten); printf("Tuoi: ");scanf("%d",&tmp.tuoi); fwrite(&tmp,recsize,1,f); } ssv+=mm; current=ssv-1; } //============================================= void xem() {if(f==NULL) khoitao(); fseek(f,0,0);//rewind(f);

118

Smith Nguyen Studio.


int i;sv tmp; printf("\nDanh sach sinh vien:"); printf("\nTen tuoi"); while(fread(&tmp,recsize,1,f)>0) {printf("\n%-20s %d",tmp.ten,tmp.tuoi); } } //======================================== void sapxep() {int i,j,k,mtuoi; for(i=0;i<ssv-1;i++) {k=i; for(j=i+1;j<ssv;j++) {if(getrec(j).tuoi<getrec(k).tuoi) k=j; } if(k!=i) doicho(i,k); } } //==================================== int timkiem() {if(f==NULL) khoitao(); fseek(f,0,0);//rewind(f); int i;sv tmp; char mten[20]; fflush(stdin); cout<<endl<<"Tim ten: ";gets(mten); i=0; while(fread(&tmp,recsize,1,f)>0) {if(strcmp(rtrim(tmp.ten),mten)==0) {printf("\nSinh vien tim thay la:\n"); printf("\n%-20s %d",tmp.ten,tmp.tuoi); current=i;return(1); }; i++; } return(0); } //================================================== int cokhong(char *st) {printf("\n%s",st); char ch=toupper(getche()); if(ch=='C') return(1);else return(0); } //================================================== //Lay ban ghi thu n,(ban ghi dau tien la 0) sv getrec(int n) {sv tmp; fseek(f,n*recsize,0);//Nhay qua ban ghi thu n-1 fread(&tmp,recsize,1,f); return(tmp); };

119

Smith Nguyen Studio.


//==================================================== //Chuyen den truoc ban ghi thu n void gotorec(int n) {fseek(f,n*recsize,0);//Nhay qua ban ghi thu n-1 //bay gio con tro da dung truoc ban ghi thu n }; //======================================================== void doicho(int i,int j) {sv p1,p2; p1=getrec(i); p2=getrec(j); gotorec(i); fwrite(&p2,recsize,1,f); gotorec(j); fwrite(&p1,recsize,1,f); } //==================================================== char* rtrim(char *s) {int i,n=strlen(s)-1; i=n; while(!isalpha(s[i])) i--; if(isalpha(s[i])) s[i+1]='\0'; return(s); }; //====================================================

25. Danh sch ci t trn t p (phin b n 2)


//25DSF2.CPP//Chuong trinh quan ly sinh vien tren tep nhi phan//Trong 24DSF1.CPP chi co sv getrec(int n); khong co sv getrec(), putrec()...#include <stdio.h>#include <conio.h>#include <stdlib.h>#include <iostream.h>#include <ctype.h> #include <string.h> #include <dos.h> #define false 0 #define true 1 #include "dir.h" struct sv {char ten[25];int tuoi;}; FILE* f;char tentep[]="sv.dat"; int ssv,current,recsize=sizeof(sv); void khoitao(); void nhap(); void xem(); void sapxep(); int timkiem(); //================================ int cokhong(char *st); sv* getrec();//Lay ban ghi hien thoi sv* getrec(int n);//Lay ban ghi thu n,(ban ghi dau tien la 0) void putrec(sv v);//Dua ban ghi v vao vi tri hien thoi void putrec(sv v,int n);//Dua ban ghi v vao dong thu n void gotorec(int n);//Chuyen den truoc ban ghi thu n void doicho(int i,int j);//Doi dong thu i cho dong j

120

Smith Nguyen Studio.


char* rtrim(char *s);//Bo cac ky tu trong cuoi chuoi //==================================================== //==================================================== void main() {char chon; while(true) {clrscr(); printf("\nF1. Khoi tao"); printf("\nF2. Nhap"); printf("\nF3. Xem"); printf("\nF4. Sap xep"); printf("\nF5. Tim kiem"); printf("\nF10.Ket thuc"); printf("\n Nhan phim F1 - F10 de chon"); chon=getch(); if(chon==0) chon=getch(); if(chon==68) break; switch(chon) {case 59: khoitao();break;//F1 case 60: nhap();break; //F2 case 61: xem();break; //F3 case 62: sapxep();break; //F4 case 63: if(!timkiem()) printf("\nKhong tim thay");break;//F5 } gotoxy(50,24); printf("Nhan phim bat ky de tiep tuc"); getch(); } } //================================================== void khoitao() {ffblk f1;int i; if(findfirst("svb.dat",&f1,0)==0) {if(cokhong("Tep da ton tai, ghi de khong?(C/K)")) f=fopen("svb.dat","wb"); } else f=fopen("svb.dat","wb"); fclose(f); f=fopen("svb.dat","r+b"); fseek(f,0,2); ssv=ftell(f)/recsize; } //======================================== void nhap() {if(f==NULL) khoitao(); fseek(f,0,2); int i,mm;sv tmp; printf("\nNhap bao nhieu nguoi?");scanf("%d",&mm); for(i=0;i<mm;i++) {printf("\nNhap nhan vien thu %d :",ssv+i);

121

Smith Nguyen Studio.


fflush(stdin); printf("\nTen: ");gets(tmp.ten); printf("\nTuoi: ");scanf("%d",&tmp.tuoi); putrec(tmp); } ssv+=mm; current=ssv-1; } //============================================= void xem() {if(f==NULL) khoitao(); fseek(f,0,0);//rewind(f); int i;sv tmp; printf("\nDanh sach sinh vien:"); printf("\nTen tuoi"); while(fread(&tmp,recsize,1,f)>0) {printf("\n%-20s %d",tmp.ten,tmp.tuoi); } } //======================================== void sapxep() {int i,j,k,mtuoi; for(i=0;i<ssv-1;i++) {k=i; for(j=i+1;j<ssv;j++) {if(getrec(j)->tuoi<getrec(k)->tuoi) k=j; } if(k!=i) doicho(i,k); } } //==================================== int timkiem() {if(f==NULL) khoitao(); fseek(f,0,0);//rewind(f); int i;sv *p; char mten[20]; fflush(stdin); cout<<endl<<"Tim ten: ";gets(mten); i=0; while(1) {p=getrec(); if(feof(f)) break; if(strcmp(rtrim(p->ten),mten)==0) {printf("\nSinh vien tim thay la:\n"); printf("\n%-20s %d",p->ten,p->tuoi); current=i;return(1); }; i++; } return(0); }

122

Smith Nguyen Studio.


//================================================== int cokhong(char *st) {printf("\n%s",st); char ch=toupper(getche()); if(ch=='C') return(1);else return(0); } //================================================== //Lay ban ghi hien thoi sv* getrec() {static sv* p;delete p;p=new sv; if(fread(p,recsize,1,f)>0) return(p); else return(NULL); }; //========================================================= //Lay ban ghi thu n,(ban ghi dau tien la 0) sv* getrec(int n) {if(n>ssv-1 || n<0) return(NULL); fseek(f,n*recsize,0);//Nhay qua ban ghi thu n-1 return(getrec()); }; //==================================================== //Dua ban ghi v vao vi tri hien thoi void putrec(sv v) {fwrite(&v,recsize,1,f); }; //==================================================== //Dua ban ghi v vao dong thu n void putrec(sv v,int n) {fseek(f,n*recsize,0);//Nhay qua ban ghi thu n-1 tinh tu 0 //Con tro tep da den truoc ban ghi n putrec(v); }; //======================================================= //Chuyen den truoc ban ghi thu n void gotorec(int n) {fseek(f,n*recsize,0);//Nhay qua ban ghi thu n-1 //bay gio con tro da dung truoc ban ghi thu n }; //======================================================== void doicho(int i,int j) {sv p1,p2; p1=*getrec(i); p2=*getrec(j); putrec(p2,i); putrec(p1,j); } //==================================================== char* rtrim(char *s) {int i,n=strlen(s)-1;

123

Smith Nguyen Studio.


i=n; while(!isalpha(s[i])) i--; if(isalpha(s[i])) s[i+1]='\0'; return(s); }; //====================================================

124

Smith Nguyen Studio.


Ti li u tham kh o
1. Ng Trung Vi t, Ngn ng l p trnh C, Nh xu t b n Khoa h c K thu t 1990. 2. Ph m Vn t, K thu t l p trnh C, Nh xu t b n Khoa h c K thu t 1998. 3. Tr n c Huyn, Phng php gi i cc bi ton trong tin h c, Nh xu t Gio d c, 1997. 4. Hunh T n Dng, Hong c H i, Bi t p ngn ng l p trnh C t A n Z, Nh xu t Gio d c, 1999.

L p trnh C v C++ - Ph l c. Cc chng trnh m u

You might also like