You are on page 1of 156
BAI GIANG KY THUAT LAP TRINH Bién soan: Ths. NGUYEN DUY PHUONG Giéi thigu man hoe. GIOI THIEU MON HOC 1. GIOLTHIEU CHUNG Sir phit trién cOng nghé thong tin trong nhiing nam vita qua da lim thay d6i bG mat kinh (é x h6i todn cdu, trong d6 cng nghé phin mém tré thanh mot nganh cong nghigp ‘quan trong diy tiém nang. V6i sir hOi tu cha cong nghé vin thong va cong nghé théng rin, ‘ty trong vé gid tri phan mém chiém rat cao trong cc hé thong vign théng cting nhu cac thiét y Chinh vi ly do d6, vige nghién « 16i phat trién cong nur lim cchii cdc he théng phan mém cia céc ky sur dign tt vign thong la rat can thiét. Tai ligu gidng day “KY shut lép trinh” cho h@ dio tao tie xa duge xay dung dya trén giio trinh “KP thudt lp trink” da duoc gidng day tai hoc vign. trong nhimg nam qua voi mye dich cung ep cho sinh vién nhimg kién thie eo ban nhit, c6 tinh hg théng lign quan (i IGp trinh, Thong qua cudn tai ligu nay, ching t6i mudn gidi thigu véi céc ban doc vé k¥ ning Jap trinh cau trite va mét sé thufit todin quan trong, bao gom: Dai cuong vé lip trinh cau trac; Duyét va dé qui: Ngin xép, hing dgi va danh sach mée ndi; Cay; DS thj va cudi cing 1a Sip xép va tim kid. TI. MUC DICH. Mon hoc cung cdp cho sinh viéa k¥ nang lip trinh trén cde cu tric dit ligu quan trong: nhut: stack, queue mlink, tree & graph eling véi-phuong phép phan tich, thiét ké, dinh gid thuat todn, Sau khi hgc xong mén hoe nay, sinh vién 6 kha ning viét duge churong trinh gid quyét nhimg bai toan trong thue +, ILL. PHAM VI NGHIEN CUU Nghién ciru cde thudt tofn eo bain duge sir dung trong thye t& nh ede thugt todn tim kiém, cde thudt todn lién quan détidé thi. Céc gidi thuft lGp trinh dua trén danh sich, cay. Nghién citu eich cai dat céc thudt ton trén may tinh, Tim hiéu ede linh vye img dung cla cde thut todn, phurong phip trong thy té IV. PHUONG PHAP NGHIEN CUU Dé hgc tt mon hge nay, sinh vién can lu y nhiing van 1. Kién thite edn truve Loi ni daw ah vit phat ob kién the co bin vb todn hoe cao chp + Thinh thgo it nt mt ngon nga ip trnh, Dic bi ngdn ng lp tinh C 88m tht, vi vay 2. Cac tai ligu cn 06: trong cudn sich nay da sir dang ih vién phai nam durge ngén ngit lap trinh C, Sich hung din hoc tip KY thudt Igp trinh. ‘Ths. Nguyén Duy Phuong, Hoc vién ‘Cong nghé Buu chinh Vign thong, 2006. ‘Néu cn sinh vign nén tham khao thém: - Gido trinh KY thudt lip trinh, Ts. Lé Hitu Lap, Ths. Nguyén Duy Phuong, Hoe vign Cong nghé Buu chinh Vin thong, 2002. - Bai giding dign tir mn hoc: “KY thuat lap tinh” cia Hoe vign Cong nghé Buu chinh Vign thong. 3. Dit ra myc tiéu, thoi han cho ban than Dit ra cde mye tiGu tam thoi va thoi han cho ban that ‘6 ging thye hign ching Xay dug myc tiéu trong chuong trinh nghién cit, 4 Nghién ciru va nim nhimg kién thive edt Wi Sinh vién nén doe qua sich husdng din hoe tp trée Khi nghién ecu bai ging mn he va cdc ti ligu tham khao Khée. 5. Tham gia dy di cae budi hurdng din hoe tap ‘Thong qua cic budi hudng dan hgc 4p, ging vién sé gitip sinh vién nim duge ndi dung tng thé cua mén hge va gidi dip thiic mic, ding thei sinh vién cing cé thé trao déi, thio lun véi nhiing sinh vién khic vé ndi dung bai-hoc. 6. Chit dng lién hg véi ban hge vA giing vien ich don gidn nit li tham dir céc dign dan hoc tap trén mang Internet, qua db e6 thé cde vin dé vudng mae vii giang vién hode cde ban hoc Khac dang online. 7. Tw ghi chép lai nhimg ¥ chink Vige ghi chép lai nhiing § chinh 1a mt host ding tdi hign kign thie, kinh nghigm ccho thity n6 gitip ich rit nhigu cho viée hinh thinh thdi quen ty hoc va tr duy nghién cit. 8. Hge di doi voi hanh Hoe ly thuyétdén diiu the hinh Lim bai tap va thyre hanh ngay dén dé dé hidgu va nim chic ly thuyét. Sinh vign cin c&i dat trén may tinh cic thuft toén trong bii hoe bing céc ngén trinh G8 ti 6 c6 thé hiéu vi nm chic hon te tuimg va ndi dung cia thut toa Ha Noi, gay 20 thang 02 nitm 2006 ‘Ths. Nguyn Duy Phung Chwomg 1: Dai cwong vé kj thudt ldp trinh cdu trite CHUNG 1: DAI CUONG VE KY THUAT LAP TRINH CAU TRUC Noi dung chinh cia chirong ny tp chung lim sing t6 nhitng nguyén Iy co bin cia lip trink céu tric. Nhiing nguyén ly nay duge coi nhu nén ting tr twong cla phurong phép lip trink cu tric 3 duge tich hyp trong cic ngon ngit lap trinb, Nam ving eéc nguyen ly cca ip trinh cfu trie Khdng chi gitip nguisi hoc c6 céch tiép cn ngén ngit ldp trink nhanh cchéng ma con gidip ho cach tir duy trong khi xay dug céc hé théng ting dyng, Cae nguyén I co bin ditge gidi thigu trong chirong ny bao gdm: ¥ Nguyén ly Ignh - Ign c& edu trite - edu tric di ig ¥ Nguyén ly t6ithidu. ‘Nguyén ly dia phrong. Nguyén Iy-an fod Neguyén I nhat quan. Nguyén ly Top-Down . SSNS Neguyén I Botton-Up. Ban doc c6 thé tim durge nhimg chi tiét séu hon va rng hon trong tai ligu [1] & (6), 1.1, SO LUQC VE LICH SU LAP TRINH CAU TRUC Ap trinh ta mot trong nhiing eOng vige ning nhoe nhdt cha Khoa hoe méy tinh, C6 thé ndi, ning sudt xdy dung cdc sin phém phan mém la rit thép so véi cdc hoat dng tri tue khic. Mdt san phim phn mém e6 thé duwge thigt ké va cai d3t trong vong 6 thing véi 3 lao Ong chinh, Nhung dé kiém tra tim IGi-va tiép tue hodn thign sin pham dé phai mat thém cchimg 3 nim. Bay li hign tugng phd bién trong tin hoe eta nhiing néim 1960 khi xiy dieng cdc sin phiim phin mém bing k¥ thudt lap trinh tuyén tinh. Dé khde phye tinh trang di cua sin phim, ngudi ta che chin nd bit-mdt manh che mang tinh chét thuong mgi duge goi Ki Version. Thye el iG€ thay thé san phim cf hing cach sita d6i né rbi cong bé dudi dang mt Version méi, giéng nhw: MS-DOS 4.0 chi t8n t9i trong thi gian vai thing, ri thay ddi thanh MS-DOS 5,0, MS-DOS 5.5, MS-DOS 6.0... Bay khOng phai ki mOt sin phim méi nhur ta tuomg mi irong n6 edn thn tai nhitng 18 khng thé bd qua duce, vi ngay MS-DOS 6.0 ciing chi la sy Khiie phy han ché cia MS-DOS 3.3 ban di. t, Version 1a Trong théi ky dau ciia tin hoc, cic Ip trinh vién xay dymg chuong trinh bing cic nngén ngit lap trinh bac th, qué trinh nap va theo dOi hoat dng ca churong trinh mét eich true tigp trong ché d6 true tuyén (on-line). Vige tim va sira 16i (debbugging) nhur ngiy nay 1 khong thé thye hign duge. Do vay, trudie nhimmg nam 1960, ngudi ta coi vige Kip trink Chwomg 1: Dai cwong vé kj thudt ldp trinh cdu trite gidng nhur nhiing hoat dong nghé thugt nhugm mau sie cé nhin hon [a khoa hoc. Mot ngudi nim duge mét vai ngdn ngit Ip trinh, cing mt sb meo vat tan dung cdu hinh vat ly ‘cu thé cia hé théng miy tinh, to nén mot sb sin phim la cia phin mém dirge coi 1a mot chuyén gia nm bat duge nhig bi an cia nghé thuat lap trinh, Cac hé théng mdy tinh trong giai doan nay cé cdu hinh yéu, bo nhé nho, tbe 4 cdc thiét bj vao ra thip lim chim qué trin nap va thuc hign chuong trink. Chuong trinh durge xy dung bing k¥ thudt lap trinh tuyén tinh ma ndi bat nhat la ngon ngit lap trinh Assembler va Fortran. Voi phuwng phap lap trinh tuy {rink vign chi duye phép thé hign cchuong trinh ciia minh trén hai cdu tric Iénh, do 1a edu tric Lénh tudn tyr (Sequential) va nhay khong diéu kign (goto). Hé thong thu vign vao ra nghéo nan kim cho vige lap trinh tro nién kho khan, chi phi cho cic sin phim phin mém qué lin, d6 tin c@y-cua ede san phim phin mém khong cao din t6i hang logt ci den tin hoe bi that bai, dic bigt Ia cde hé thing tin hgc co tim c& lon. Nam 1973, Hoare khang dinh, nguyén nhan that bai ma ngudi My ‘8p phai khi phong vé tinh nhan tgo vé phia sao V@ nit (Sao Kim) li do 16i cua chong trinh didéu khién viét bing Fortran. Thay vi viet: 3 (Thuec hign 6 50 voi La 12, 13, ... 523) DO 501= 12, ién duc bia) vit thanh: Lép trinh vign (hove thao ta DO 501 = 12.523 (Déiu phay da thay bing déu chém) Gip cfu Iénh niy, chyong trinh dich cia Fortran da hiéu la gan gid tri thuc 12.523 cho bién DO 50 I Kim eho két qua chuong trinh sai. Dé giai quyét nhimg vuréng mie trong ky thuat lip trinh, cdc nha tin hoc ly thuyét da di siu vao nghién ciru tim hiéu ban chat cha ngOn ng, thudt todn va hoat ding lip trinh, rndng ni dung cia k thut Ip trinh én think ede nguyén ly Khoa hoc nygty nay. Két qui ni bt nhat trong giai dogn nay li Knuth xuat bin b6 3 tp sich mang tén “Neh@ thuat lip i hge va cae thudt tosin eo ban xir ly dit ligu nita s6, sip xép va tim Jkiém: Nim 1968, Dijkstra cng bé 1a thu “Vé su nguy hai ceta tofn ti goto”. Trong edng tinh nay, Dijkstra khiing dinh, e6 mot s6 Ii do goto gity nén khéng thé xéc inh duge diém bit du cia 1di, Dijkstra cn khing dinh thém: “Tay nghé cia mot lap trinh vién fi 1g nghich véi sé lngng toan tir goto ma anh ta sir dung trong, c’churong trinh”, dng thoi, Ku goi huy bs trigt dé ton ti goto trong moi ngén ngi lip trinh ngoai trir ngon ngit lip trinh bge thip. Dijkstra cin dura ra khiing dinh, dng thai ctia chuemg trinh e6 thé duge dink gid tong minh qua cée edu trie Kip, r€ nhinh, goi dé qui la cor so cia Kp trinh céu trie nay nay. Nhiing két qua duge Dijikstra cong bé 43 tgo nén mét cude cch mang trong ky thud lap tinh, Knuth ligt ké mot sé teudng hop ¢6 loi cia goto nhur vong lap Két thie gira cchimg, bat [6i Dijkstra, Hoare, Knuth tigp tue phat trién tur tung coi chuong trinh may tink cing véi lip trinh vién la déi tugng nghién ctu cia kj thuit lip trinh va phuong phap Chwomg 1: Dai cwong vé kj thudt ldp trinh cdu trite ie tién dé lim chi sit phite tap cia cée hoat dng lip trink, Nam 1969, Hoare da phat bi phue vu cho viée chimg minh tinh ding din cia chuong trinh, phat hién tinh bat bién cia ‘vong lip biing ciich coi chuong trinh vita 1a ban ma hod thudt todn dng théi 1 ban chimg. minh tinh ding dan cita chuong trinh. Sau dé Dahl, Hoare, Dijiksta di phat trign thinh ngon ngit lap trinh cdu trie, Dé trign khai cde nguyén ly lap trinh céu tric, L. Wirth da thiét ké va cdi dat ng6n ngit ALGOL W 1a mot bién thé cua ALGOL 60. Sau nay, L. Wirth tigp tue hoan thign dé li ngon ngit lap trinh gidn di, sing sta vé eu phap, & minh hoa nhimg vin dé phic tap cua lap trinh hign dai va drgc coi Ki mot chuiin myc ‘rong giang day lap trinh. Nim 1978, Brian Barninghan cing Denit Ritche thiét ké ngon ngi lap trinh C véi t fic cfu trie Ignh vi him kha phi hop véi tw duy va tam ly etia cia ngudi Kip trinh Ding théi, hai téc gia di phat hanh phién ban hé diéu hanh UNIX viét chii yéu bing ngon ngit C, khiing dinh thém uy thé cia C trong lip trinh hé théng. 1.2. CAU TRUC LENH, LENH CO CAU TRU, CAU TROC DO LIEU 1.2.1. Cu trie Kenh (clu trée diéu khién) dt 1A mot ban ma hod thuft ton, Thuft toan Mai chuong trinh my tinh v8 ban ol durge coi la day hitu han céc thao tac so’ cap trén tap déi tong vao (Input) nham thu direc ‘két qua ra (output). Cac thao tic trong mét ng6n ngit lap trinh cy thé due diéu khién boi ccc Iénh hay cae edu trite digu khién, con cde doi tong chiu thao din thong qua cée cfu trv det liu. thi duoc mé ta va biéu ‘Trong cdc ng6n ngit lp trinh cau trac, nhimg cau tric Ignh sau duye sir dung dé xay ‘dung chuong tink. DT nhién, ching ta s& khong bain i edu trie nhay khOng digu kign goto mie dil ng6n ngit lp trinh edu trite nao cling trang bj ciu tric Kenh goto, u trie £8 nhinh dang dy dia IE) A: Else B; Sau khi thye hign lénh A thi thye hign Iénh B Hinh 1.1: Cau trée tuan ty va edu trée ré nhanh dang day di Néu biéu thite E c6 gid tr) dling (khac 0) thi thuc hién A: Néu F sai thi thre hién B: Clunomg 1: Bai cmon vé kf hut lap trink edu tri nic lap voi digu kign true Cu tric lap voi digu kign sau While (B) A; do f i i im a OT while (E); Trong khi biéu thiic E cén e6 gi tri diing thi ]] Thue hign A cho t6i khi nao E van edn thye hign ding: Cau trie ip FOR For (B1; E263) Ay Hinh 1.2. Cac cdu trac Kip 4, B: ky higu cho céc cau Inh don hoac Ignh hyp thinh, Mai lénh don le durge goi la mét lénh don, 1énh hyp thanh Ja Iénh hay edu trie lnh duge ghép lai vii nhau theo qui djnh iia ngén ngtt, trong Pascal 1a tip Iénh hay cdu trie 1énh dirge bao trong thin cia begin ‘end; trong C la tap cdc lent hay cfu trite 1énh durge bao trong hai ky higu { ... } F, El, 2, E3 la céc biéu tte sé hoc hove logic. Mét s6 ngén ngit lép trinh coi gid tr cca biéu thite logic hoe diing (TRUE) hode sai (FALSE). mét sé ngén ngit lap trinh khéc hur C coi gid tri cia biéu thie logic 1a diing néu né c6 gid tri kh 0, nguoc lai biéw thire logic o6 gi tri sai Can Iu § rang, mOt chuong trinh duge thé hign bang céc cau tric diéu khién Iénh tun ty, tuyén chon ifielse, switch . . case .. default, lip vii diéu kign tude while , Kip voi didu kign sau do . . while, vong lip for bao gid cling chuyén duge vé mot chuung trinh, chi sir dung t6i thigu hai cu tric Kgnh li tulin ty va lap véi digu kign true while. Phuong phip Jap trinh nay edn durge goi 1a phuomg phdp lap trinh han ché. Chwomg 1: Dai cwong vé kj thudt ldp trinh cdu trite 1.2.2. Lénh c6 edu trite lénh cho phép chita cfc edu tric diéu khi in xe dink 15 vi tri duge phép dt mot edu tric diéu khién trong nd, cling nhu né lit mét phan cia cau tric diéu khién nao. Biéu nay tudmg nhu rit tim thrdng nhung c6 ¥ nghia hét site quan trong trong khi xy dymg va kiém tra 18i c6 thé xay ra trong chuong trinh. Nguyén tac viét chuong trinh theo cdu tric: Cau tric con phai duge viét lot trong cau trie cha, diém vio va diém ra ciia mdi cdu tric phai niim trén cling mot hing doc. Vi dy sau s8 minh hoa cho nguyén tic viét chuong trink: Lénh c6 cau tr mot cfu trie a trong n6. Khi tim hiéw ire) while 21) a else do B while(E2) Trong vi dy trén, while (EI) A; 1a cau tric con nam trong than cita céu tric cha Ta if (E) ; condo B while(E2); la cau tric con trong than cia else, Do vay, cau Iénh while(EL); do... while(E2) c6 cing cp véi nhau nén né phai nim trén cling mot cét, twong tur nh viy voi A, B va ifvbi else. 1.23. Clu trie dir tiga Cac ngon ngit lap trinh céu tric néi chung déu giéng nhau vé cau tric Hénh va cau trite dit ligu. Diém khde nhau duy nhat giita cée ngdn ngd lip trinh edu tric Li phuromg phép at tén, céch khai bio, cit php cdu lenh va tip cae phép todn duro phép thyc hign trén cae ctu tre dit ligu cu thé, Nam bat duge nguyén tie nay, ching ta sé 48 dang chuyén déi cdch. thé hign chuong trinh tir ng6n ngit lp trinh ndy sang ngon ngit lap trinh khic mot cdinh nhanh chong ma khéng tn qua nhiéu théi gian cho vige hoe tap ngon ngit [ap trinh, ‘Thong thuimg, cdc edu trite dit Higu diye phan thanh hai logi: edu tric dit 1igu e6 Kigu co bain (Base type) va caw trie dt gu 6@ kiéu do ngudi dling dinh nghia (User type) hay con goi la kiéu dir ligu c6 edu trie. Kiéw di ligu eo ban bao gom: Kiéu ki ty (char), ki nguyén c6 diu (signed int), kiéu so nguyén khong diu (unsigned int), kiéu sé nguyén dai c6 du (signed long), kigw $8 riguyéntdai khOng déu (unsigned long ), kiéu s5 thye (float) va kiéu s6 thye ¢6 d6 chinh xde gap d6i (double). Kidu dit ligu do ngudi-diing dinh nghia bao gdm kiéu xdu ki ty (string), kiéu mang, (array), kiéu tip hop (union), kiéu céu tric (struct), kiéu file, kiéu con tré (pointer) vi cde kigu dir ligu ducge dinh nghia méi hon toan nhur kiéu dank sich méc ndi (link list), kiéu cay (ree) Kich c@ cua kiéu co ban dong nghia vi phan cia n6, vi phu thude vao timg hé théng may tinh cu thé, Dé xe dinh kich c& cia kiéu nén diing tosin tir sizeof type). Chuong trinh sau sé ligt ké kich e% ctia cic kiéu co ban, Chwomg 1: Dai cwong vé kj thudt ldp trinh cdu trite Vidy 1.1. Ki tra kich c& cia kiéu. finclude include include include ‘oid main(void) { rinutn Kich ot ku ki a, sizeot{char) printf(“\n Kich cé kiéu ki tr khang dau:%d", sizeof{unsigned char); print*in Kih or ku sé nguyén khsing dua", sizeof(unsigned int) print(“n Kich okiéu sb nguyén 6 du:%d” sizeotsigned int) printftin Kich cd kigu sb nguyén dai khéng di prina(“n Kich okidu sb nguyén di ob dua" sizoftsiged long ) printfiin Kich cé kiéu s6 thie cé d6 chinh xc dom:%d", sizeof( float )); printf‘ Kich i kidu 6 de c6 6 chinh xc kép-hel,sizeof{donble); etch) : Kich ed cita ede kidu dit ligu do ngudi ding din nghia la ting kich o& ciia mBi kigu ‘thinh vign trong né, Ching ta cing van ding todn tt sizenf{tén kiéu) dé xc dinh 6 lém tinh ‘theo byte cia cfc kiéw dit igu nay. MOét diém dic biét cha ¥ trong khi lap trinh trén cdc cdu trite dif ligu 14 edu tric dit Li no thi phai kém theo phép toan dd, vi mot bién duoc goi la thude kiéu dit ligu no dé néw nnhue né nhan m@t gia tr] tit min xée dinh ctia kigu va cde phép todn trén kigu dir Higu do, 1.3. NGUYEN LY TOL THIEU Hay tir mét tp nguyén tae va ti cde phuong tién 1a ede cd trie lénh, ki dit ligu cing cée phép todin trén né va thye hién viét chuong trinh. Sau khi nim chae nhiing ‘cong cy ving diiu méi dat vin dé ma rong sang hé thing ther vign tign ich cha ngén ngtt Ki lim quen vi mit ngn ng ap trinh no 4, Khing nit tht pha 1 dhude qui nhiéu vio hé thing thir iia ngon ngd, ma diéu quan trong hon 1d truce mot bai todin cy thé, ching ta sit dung ngon-ngit dé giai quyét né thé nao, vi phurong an t6t nha Ia lp trinh bang chinh hé thong th vién ham cia riéng minh. Do vay, déi véi céc ngén ngit Jap trinh, ching ta chi edn nfim vitig mot s6 cde cong cu t6i thiéu nhu sau: 13, . TAp edie phép tosin Tép céc phép todn sé hoe: + (cing), - (tit); * (nan); % (lay phiin dur; / (chia). Tap cic phép todn sé hoc mi rong: +a ama tl; // ting gid tri bién nguyén a lén mot don. 1; gm gid tri bién nguyén a mot don vi; rn tang git bién nguyen a Ten n dom vis Chuzomg 1: begi eeomg, vi kj tut lap trink edu tre =n; / gidm gid tri bién nguyén a n don vi): én a modul voi ns arn Yon; Hf Tay gid tei achia cho n; w=n ¢ a-alny/ lay giti tri bi atsn @ a=atn;// lay gid tri bién a nhan véi n; (én hon, nho hon, Kin hon viét durge thé hign nu sau: <> Tip cétc phép toin so sinh: hoge bang, nho fon hode bang, ding bang, kc), Qui if(a>b) {..} //néua in hon b if (acby {nua nho hom b wb -b) |. } // néu.a nhé hon hoi bing b if(a>=b) {..} //néua lon hon hoae } //néwa dang bang b it(al=b) {..} //néua khée b Tip cde phép toén logic: &8, |, \ (va, ho’c, phi inh) &&: Phép va logie chi cho gia tr dling khi hai biéu thie tham gia déu e6 gid tr dling (gid tri ding cia mot biéu thie trong C duge hiéu li biéu thite ¢6 gid ti khéc 0). Il: Phép hoc logic chi cho gid tr sai khi ca hai’biéu thi tham gia déu c6 gid tr sa 1: Phép phii dinh cho gid tri ding néu bidu thite 6 gid tri sai va nguge lai cho gid tri sai khi bigu thite c6 gid tri dling. Ngir nghia cla eéc phép todn duxge minh hoa théng qua céc cfu lénh sau: sb ) && (bI=0) ) W néwakhdc 0 va'b khée 0 inta it((a if ((a!=0) || (b!=0))_ // n'a Khic 0 hode b khéic 0 if(1a) phi dink a khie 0 if (ab) // néu a ding bling b ic todn tir thao tae bit (khong sit dung cho float va double) & —: Phép hoi cae bit. | Phép tuyén cfc bit, 4 Phep tuyén cfc bit c6 loai tri. Phép dich trai (djch sang tri n bit gid tri 0) >>: Phép dich phai (dich sang phi n bit c6 gia tri 0) ~ Phép ldy phan bu. Chuzomg 1: begi eeomg, vi kj tut lap trink edu tre Vi dy 1.2: Viét chuong trinh kiém tra cdc toa tir thao tic bit ffinclude ‘include ‘include ‘include void main( void) ‘unsigned int a3, b=S, e;clsen) = a8 bs printi("ine =a & b=%dc) | bs print~in © = | b=¥6a.e): 7a bs printfn e =a b-*6d) = =a; printithn e= ~a =P"); =a << bs print("n e= a << bP): >> betid0) Todn tit chuyén déi kiéu: Ta c6 thé diing toan tis chuyén di kiéu dé nhdn duge két qua ‘tinh todin nhir mong mudn. Qui tic chuyén ddi kiéu duge thye hién theo qui tic: (kiéu) bién. ‘Vi dy 1.3: Tinh gia tri phép chia hai sé nguyén a va b. include include ‘inelude ‘include void main(void inc a-3, DS; Moat e: & (flat) a/ (oat) b pringf*\nthuong =a etch); = 46.20", Thit ty wu tign ede phép toan : Khi viét mot bigu thie, chiing ta cin luna ¥ t6i thir te tru tign tinh ton cdc phép toan, cde bang ting hop sau diy phan dnh teat ty wu tién tinh ton ‘eta cde phép toan sé hie va phép toan so sinh. Bang tong hgp thir ty wu tien tinh toan cic phép toan s6 hge va so sanh TEN TOAN TU CHIEU TINH TOAN LR RSL LoR Cinomg 1: Bai cwang vé kp thudt lap tinh cu nic .- L>R LR L>R I= LR & L=R “ L>R I LSR be L>R I LOR » RSL Kea, = ROL 1.3.2. Tap cde lénh vao ra co bin Nha dit ligu tr ban phim: scanf(“format, ing, ‘hap dir ligu ti tp: fScanf{ file_pointer,"format_string, parameter...) parameter, ..)s Nhfn mot ky tr ti ban phim: getch(); getchar(); Nhiin mot ky tu tr file: fzete(file_pointer, character_name); Nhjip mt string tir bin phim: gets(string_name); [Nh§n m@t string ti file text : fyets(string_name, number_character, file_pointer); Xuét dit ligu ra man hinh: printf(“format string ...”, parameter ...); Xuét dit 1igu ra file: fprinti{file_pointer, “format_string ...", parameter...) Xuéit m6t ky tyr ra man hinh: putch(character_name); Xudt mot ky tra file: Hpute(file- pointer, character_name); Xuét mét string ra nin hinh: puts(const_string_name); ‘Xuéit m6t string ra file: fputs(file_pointer, const_string_name); 1.3.3. Thao tic trén cde kiéu dit ligu 6 edu tric ‘T§p thao tie tron string: char *strchr(const char *s, int c) : tim ky tyr c dau tién xuat hign trong xau s; char *stpepy(char *dest, const char *3rc) : copy xat scr vio dest; Chwomg 1: Dai cwong vé kj thudt ldp trinh cdu trite int stremp(const char *s1, const char *s2) : so sinh hai xi s1 vi s2 theo thie ty tr dién, néu si < s2 thi him tra lai gid tri nhd hon 0. Néu s1>s2 ham tra lai gid tri duromg. Néu s1=s2 him tra lai gi tr 0. char *streat(char "dest, const char *src) : thém xau ser vao sau xu dest char *strbor(char *s) : chuyén xu s tir ky turin hoa thinh kg ty in thutmg. char *strupr(char *s): chuyén xau s tit ky ty thug hoa thanh kf ty in hoa. char *strrev(char *s): dio nguge xau s. char *strstr(const char *s, const char 452): tm vj tri du tign cia xu 62 trong xu st int strlen(char 4s): cho 6 dai cia xiu ky tr s. ‘T§p thao tie trén con tré Thao tic lay dia chi cia bién: & parameter_name; Thao tac liy ndi dung bién (bién c6 kiéu co ban): *pointer_name; “Thao tic tra toi phan tt tiép theo: +4pointer_name? Thao tac trd téi_ phan tir thir n ké tir vj tri hién tai: pointer_name = pointer_name +n, Thao tc tro ti phn tt sau con tro ké ti vi tri hig tai: ‘pointer_name: “Thao tae tr ti phim tie sau m phi tek tir vr ig ta: Pointer_name jointer_name ~ 1m; ‘Thao tie cdp phat b6 nhi cho con tr: void *malloc(s void *calloc(size_t nitems, sizetsize); ‘Thao tae cap phat Iai bO nhé cho con rd void *realloctvoid *hlock, Thao tic giii phng b6 nhi cho con tro: void free(void *block): ‘T§p thao tic trén ciu trite: Dinh nghta cw tric: struct struct name type_I parameter_name_I; type 2 parameter name 2; ‘npe_k parameter_name_k | struct_parameter_name: Phép truy nhap ti thanh phan cau trac: Chwomg 1: Dai cwong vé kj thudt ldp trinh cdu trite ‘struct_parameter_name parameter_name. Phép gain hai céw inde cing kiéw Struct_parameter_namel = struct parameter_name2; Phép tham tro ti thank phan eta con tro cau tric: pointer struct parameter_name -> struct parameter name. ‘Tp thao tie trén file: Khai bio con tré file: FILE * file_pointer: Thao tc md file theo mode: FILE *fopen(const char *filename,const char *mode): ‘Thao tic déng file: int elose(FILE "stream Thao tae dye timg dong trong file: char *fyets(char *s, int n, FILE *stream); Thao tdc dgc timg khdi trong file: size_t fread(void *ptr, size_t - tn, FILE *stream); Thao tae ghi timg dong vao file: int fouts(const char *, FILE *siream); ‘Thao téc ghi timg khdi vao file: si ize_t firite(const void *ptr, size_t size, size_tn, FILE *stream): ‘Thao tac kiém tra sy ton tai cita file: int access/const char “filename, int amode); Thao tée 46i ten file: int rename(const char *oldname,const char *newname); Thao téc logi bé file: int unlink/const char *filename); 1.4, NGUYEN LY DIA PHUONG dia phwong trong him, thii tuc hogic chu trinh cho di 06 tring tén odin cue thi khi xit bi bién dé trong him hog thi tue van khong tam thay d6i gid tr] ctia bide toda cuc. © Tén cia cdc bién tang dBi'cia him hodc thi tuc déu li hink thi "Moi bién hinh ahite truyén theo tri cho ham hoge thi tuc déu la cde bién dia phucong. * Cée bién khai bad bén trong céc chong irinh con, ham hode thi: tc déu la bién dia phicong. = Khi phai sit dung bién phu nén ding bién dia phuong va han ché i da vie sie dung bién toan cuc dé tanh xiy ra cac hiéu ting phu. ‘Vi dy hodn 463 gid trj(Cia hai s6 a va b sau day s8 minh hga 6 hon v8 nguyén ly dia phurong. Vi dy 1.4. Hoi di gi tri eta ha Chwomg 1: Dai cwong vé kj thudt Idp trinh cu trite ‘inelude ‘include ifinelude include int a,b; // Khai bo a,b i hai bién todn cue void Swap(void) { inta.b, temp; / Khai bao a, b Ia hai bién dia phuromg, a= 3; b°S; ! gin gid tr cho.a vib tempwa; a-b: b=temp:/ di gid tri cua a va b printn K&t qua thye hign trong thi te a=%6Sd Saiaby, + void main(void) { 21; BB; [kha du gid cho bidn ton ey a swap: rinutn Kt qui sau Ki the hign tha ue a =H6Sd b=%5U" a; etch): : Két qua thye hign chuong trinh: és qua thc hin trong thi ue a= 5 include ‘include ‘include kha bdo 0 hab ton ve void Swap voi inc temp; Kha bso a, Khai bin dia phuome a= 3, b=5; // gain gid tri cho a vib temp-a; arb; b-temp bi gir cia vib rrinf(“n Kéx qui thy ign ang thi te a-%684 b-P480,6); } void main(void) { Chueomg 1: Bel cwomg ve ky thuGt lip trinh edu tric (1 hoi du gid tr cho bién ton eve a, b. Swapt)s printf("in Két qui sau khithye hign thi tue a =%65d b=%5 szeteh(); } Két qua thye hign chuong trinh: Keét qua thuc hién trong thi tuc a = 8 b=1 Két qué sau khi thee hign thi tea = 1 b=8 1.5. NGUYEN LY NHAT QUAN * Diz liéu thé nao thi phai thao téc thé dy. Can sém phdt hign nhiing mau thudn giita céu tric dit ligu va thao tac dé kip thoi khée phuc. Nhu ching ta da biét, kigu la mot tén chi tap cde d6i trong thude mién xac dinh cing ‘Gi nhiing thao tée trén nd, M@t bién khi dinh nghia bao gid cling thuge mot kiéu xe dink no d6 hoc Ii kiéu ec bin hoje kiéu do ngudi ding dink nghia. Thao tée v6i bién phu thuge vio nhiing thao tic duge phép cia kién, Hai kiéu khée nhau duge phan bigt boi tén, mién xée dinh va ce phép todin trén kiéu dit ligu. Tuy nhién, trén thye té co nhiéu 13i nhap nhang gitta phép todn va cdu tric dir ligu ma chung ta can hiéu £6, pbi véi kidu ky tu, vé nguyén tic ching ta khong duge phép thuc hién cdc phép to”in sé hoc trén n6, nhumg ngén ng C ludn déng nhat gitta ky tw voi sé nguyén c6 46 Ién | byte. Do vay, nhitng phép toan sé hoc trén cdc ky ty thye chat 14 nhiing phép ton sé hoc én cic sé nguyén. Ching han, nhiing thao tic nhur trong khai bio dad day 1a duge phép: char x1="A', x2 = x] = (1 + 100) % 255; x2 = (¢2-x1) 96255 Mac ditx1, x2 duge khai bao 1a hai bign kiéu char, nhung trong thao tie xl = 6&1 + 100) % 255; 22 = (42 441) 96255; cchurong trinh dich sé ty dong chuyén d6i x/ thanh mai cla ky tr “A” 1a 65, x2 thanh mai ky tu 2’ la /22 dé thye hign phép tosn, Két qua nhan duge xf la mot ky tw eb ma li (65+ 100)%6255 = 165; x2 la ky tu cO ma la 32 ting vi ma cha ky ty space. Ching ta ¢6 thé thye hign durge cde phép todn sé hoc trén kigu int, long, float, double. Nhung d5i véi dylan chins im cin dc biet cha ¥ phép chia hai s5 nguyén cho ta mét sé nguyén, tich hai s6 nguyén cho ta mét s6 nguyén, tng hai sé nguyén cho ta mét sb nguyén mic dit thuong hai sé nguyén la mét sé thuc, tich hai sé nguyén hode téng hai sé nguyén cé thé 14 mét sé Jong int. Do vay, mudn nhfn duge két qua ding, ching ta cin phai cchuyén dai céc bién thuge cing mét kiéu trusie khi thyc hign phép todn, Nguge Iai, ta khong 15 Chacon 1: Bagi ecomg,vé kf thust lap trink edu tre thé ly modul cita hai s6 thyre hoje thye hign ede thao tée dich chuyén bit trén n6, vi nhitng thao tie 46 khong nim trong dinh nghia cia kiéu. Digu tuong tyr ciing xay ra v6i cde string. Trong Pascal, phép todn so sanh hai string hoje gan tryc tiép hai Record ciing kiéu véii nhau li duge phép, vi du : Str/>Sir2, Srl ‘Str2; Nhung trong C thi cdc phép todn trén lai khong duge dinh ngbia, néu mudn thye hign 16, chting ta chi c6 ciich dinh nghia lai hode thuc hign né thong qua cdc Idi goi him. 1.6. NGUYEN LY AN TOAN © Lai ning nhdt ndm 6 mite cao nbd (rmike j dB thids hiyTR oi ake sRdgsnhth thes tue phat chi tat Iém nb + Moi téi, dit la nho nhét cling phai diege phét hign 6 mot bude ndo a6 ctia chuong.trink. Qué trinh kiém tra va. phét hign loi pha diege thee hign trwéc hi Idi @é hodinh hin Cec logi 18; thudmg xay ra trong khi vit chuomg trnh C6 thé dye tang Ket Ig nur sau Léi duge théng bio béi tir khod error (15i ett php): logi 15i niy thudng xay ra trong khi soan thio chyong trinh, ching ta c6 thé viel sai cdc tir khoa vi du thay vi vigt Id int cchiing ta soan thio sai thinh Int (Ii chit in thuémg thinh in hoa), hod viét sai cit php cfc bigu thite nhw thiéu cdc dau ngo&e don, ngo&c kép ho’e du cham phay khi két thie mét Jénh, hoge cha khai bo nguyén mau cho ham . Lai duge théng béo bi tir khod Warning (15 nay thug xay ra khi ta khai bao bién trong chuong trinh nhung lai khong sit dung t6i ching, hoc 16i trong cae bigu thite kiém tra khi bién diye kiém tra khOng xe dinh duge gia tri ca nd, hoge 16i do thir tw uu tién cae phép toan trong biéw thife. Hai logi I6i error va warning duge thing bio ngay khi dich churong trinh thanh file *.OBJ. Qué trinh Lién két (linker) cfc file *. OBI dé tao nén file chuong trinh ma may *.EXE chi duoc tigp tue khi ching ta higu dinh va khit bo moi I6i error. LAi way ra trong qué trinh Hen két: 101 nay thurimg xudt hign Khi ta str dung ti ede loi goi him, nhimg nhiing him dé méi chi tin tai duGi dang nguyén miu (function Prototype) ma chira durge md ta chi tiét cde him, hode nhimg li him goi chu ding visi {Gn cia né. L8i nay duge khée phys khi ta bd sung doan chong trinh con md ta chi tit cho him hofe sira déi Iai nhiing foi got him tong ting, Ta quan nigm, 19i of php (error), 1di canh bio (warning) va Ii lién két (linker) la 18% tim thuong ny d3 duge Compiler cia ede ngén ngit lap trinh phat hign duye {i may, ching ta chi cin phai doc va hiéu durge nhimg thing bio 18% thutng duge vi phai Ira ¥ ring, do mite 46 phite tap cia cchirong trinh dich nén khOng phi I8i ndo cing duge chi ra mot cdch twig minh va chink -xii¢ hodn toan tai noi xuat hign Ii Chacon, 1: Bagi come, vé kj tut lp trink edu tre Loai I8i cudi cing ma cae compiler khdng thé phat hién ndi d6 1a 161 do chinh lap tinh vign gly nén trong khi thiét ké chuomg trinh va xir ly dit ligu. Nhting I3i ndy khong duro compiler théng bio ma né phai tra gid bing qui trinh tw test hoe chiimg minh duroe tinh ding dan cita chong trinh. Léi 6 thé nam & chinh ¥ do thiét ke, hode 16i do khong dng trude dug tinh chat cia mdi loai théng tin vio. Vi du sau minh hoa cho 16i thuémg xily ra thude loai nay. ‘Vi dy 1.6, Tinh tong hai da thize A bac n, da thire B bac m. ‘include ‘include ‘Winelude ‘define MAX 100 typedef float dathue[ MAX]; void In(dathue A. intn, char ©){ printf"'n Da thue %e:", €) foo(iDsisms i+) print 2P ALD; ‘oid nit dathue A itn, dathuc Bint *m intiflot temp; printf hap n=") scant") =n pring" Nhap m="); seant"%a" sm); m= Prin Nhap he soda thue A) for(i; iti) printf(""n A[%d]=", Atitemp: ' printf Nhap he sad thue Bi"): for(i jSeanf{"%6E", temp}; ictmsi-t)f printf*in Bld" Blil = temp, ' In(AnA); n(B," mB scanf("%f", &temp): } ‘void Tong(dathue A, int n, dathue B, int m, dathue C){ inti, ks f(a mf k=; foe Chueomg 1: Bel cwomg ve ky thuGt lip trinh edu tric ‘Ali: InC.kC); Fens iH) [BE foe Fons fom: +4) Bil : void main(void)t dathue A, B,C: Init(A, &n, B, Sm); Tong(.n, Bm, C)s } Trong vi dy trén, ching ta sit dung din nghia/MAX =100°48 giai quyét bai toda. MAX duge hiéu 1a bée cita da thite Kin nhat ma ching ta cin xir ly. Nhu vay, ban thin viée inh nghia MAX da han ché téi pham vi bai tod, han ché dé cing cé thé xudt phat tir ¥ 4 thigt ké. Do vay, néu ngudi sit dung nhap n>MAX thi churong tinh sé gap 16i, Néu ching ta kkhiic phuc bing cdch dink nghia BAC di lin thi trong trudg hop xir ly cde da thite e6 bac n ho sé gily nén hign twong ling phi bO nbd, va trong nhiéu trudmg hop khong di bo nbd dé inh nghia da thie. Giai php Kite phue cdc 16i loai niy la ching ta sit dung con tro thay cho céc hing, kj thuat nay sé dugc thao lun ky trong Chuong 2. 1.7, PHUONG PHAP TOP-DOWN © Qué trink phén tich bai ton duge thee hign tie trén xuéng dud, Tie van dé chung nhde a&ewaghMe tu thé nhde, Ter mite tri tong mang tinh ekdt ting quan t6i mite don gian nhdt la don vi chwong trinh. MOt trong ning figuyén ly-quan trong ctia Lip trinh edu trite fa phuong php phan ‘ich tir trén xudng (Top - Down) véi quan diém “thay cy khong bing thay rimg”, phai dimg cao hon dé quan sit tng thé khu rimg chit khéng thé dimg trong rimg quan sat chinh 6. Qué trinh phan ra bai toan duge thuc hig theo timg mite khée nhau, Mite thép nhét duge goi li mite téng quan (level 0), mic ting quan cho phép ta nhin tong thé hé thong thong qua cde chic nang ciia nd, ndi cdch khde mite 0 s& tr Ki thay cho cau hoi “He thong 6 thé thu hign duge nhiing gi ?”. Mic tiép theo la mite cdc chite nang chinh. O mite may, ning chite ning ey thé duge m@ ti, Mot he théng e6 thé duge phan tich thanh nhieu mite khac nhau, mic thip duge phép sit dung cac dich vy cia mite cao. Qué trinh phan tich tigp 18 Chwomg 1: gi cwong vé kj thudt Idp trinh cdu trite tue phan ra he thing theo timg chite nang phu cho tdi Khi no nhiin durge mite edie dem thé UNIT, Function, Procedure), khi d6 ching ta tién hanh cai dit hé théng, Chiing ta s@ fim rd hon timg mite eda qué trinh Top-Down thing qua bai ton sau: Bai ton: Cho hai s6 nguyén c6 biéu din nhi phan la a=(a,, Gy), b = (br, Ba os bud: i, by =O, 1, in. Hay xdy dumg tp cde thao tic trén hai sé nguyén a6, Mite téng quan (level 0): Hinh dung toan bo nhimg thao tic trén hai sé nguyén a=a), ay Gy), b=(b,b2...b9) voi day dit nhing chite nang chinh cita nb. Gia sit nhiing thao tic 46 bao gba: F1- Chuyén déi a, b thainh cae 86 nhj phan; F2- Tinh tng hai sé nguyen: a + b: F3- Tink higu hai sé nguyén: a -b; F4 Tinh tich hai sd nguyén: a %; F5- Thueong hai sé nguyén : a/b; F6- Phan die hai 6 nguyén: a % b; F7- Ube sb chung lon nhdt ctia hai 36 nguyén. Mire 1, Mite cae chite nang chinh: mdi chire nang can mo ta day du thdng tin yao (Input), thong tin ra (Output), khudn dang (Format) va cdc hanh déng (Actions). . b thanh cae sé & hé nhj phan ‘Chie nang F1: Chuyén dé Input a iteyer: usp (0s oan Aas CPR td cu 8B i 4) Format Binary); Actions € Qn ko While (Qe0) = 4 mod bs: =Wadivb; kek; ha trim co 36 Bia Hi (04,35 1, 8) > ? (Chite nang F2: Tinh tong hai s6 nguyén Input: Chagomg 1: igi come, vé k5 thud hp trink cdu tric em asdy Format: Additionta,b) Actions { m0; for G=Osjem, jE = +b +0 div thread se < Khai trién nhi phn cla ting 18 (64 S180) (Chite nang F3: Higu hai s iguyén a, b. Input: Output: c= a-bs Format: Subtraction(a, b) Actions { babs = Addition, b); return): t hire ning F4: Tich hai s6 nguyéna, b Input: (81. d5s 9 tb (br. Ba Ba Ousput bs Format: Multual(a,b); ‘Actions ForG=Oijemi++){ 15-1) was (7 ey: Cia- Gnu lB ce tic riéng*) por 20 Chacon 1: Bagi eons, vi kj thudt lap trink edu tre for j-0s jm +4) f p= Addition(p. ) retuen(p): ) Chige ning FS: Thuong hai 6 nguyén a, b. Input: (aia b (br, bas os by) Output: iv b Format: Division(a, b): Actions en 0; while (>=b) exe4 Subtraction, ); , retur(e): i hire ning F6: Modul hai sé nguyén a,b. Input: Output: =a mod b; Format: Modulation(a,b): Actions | while (>= ) = Subtraction(, b: retur(a); Chite nding F7: Use s6 chung Ién nhiit hai sé nguyén a, b. Input: F(ti ng et) D=(bi bs. bo Output = USCLN(ab): Format: USCLN(,b): Actions { a Churomg 1: Bel cwomg ve ky thuGt lip trinh edu tric while (az b) { ifa>b) ubiraction(a, b) else b= Subtraction(b.2): } retum(a)s é ¥ ring, sau khi phiin rd bai todn & mite 1, ching ta chi cdin xdy dyng hai phép ton ‘cong va phép tinh nhdn cac s6 nhj phan cla a, b. Vi higu hai s6a va b chinh la ting sé cha (a,-b). Tuong ty nhu vay, tich hai sé a va b duge biéu dién biing téng cua mot sé Lin phép 5 a vib chinh [a phép tr nhigu lin sé a. Phép tim USCLN eiing tuomg tyr nhir vay. bi vdi cae hé théng lén, qué trinh cn duge mé ta tiép tye cho t6i khi nh§n duge mite don vi chuemg trinb, Trong vi dy dom gian nay, mite don vi chuong trink xudt ign ngay tai mire 1 nén chting ta khdng can phan ra tiép nita ma dimg lai dé cai dat hé théng, 1.8, PHUONG PHAP BOTTOM-UP + Di te edi riéng 164 cai chung, te cic d6i tog. thank phin & mize cao t6i cic oi togmg thanh phan 6 mice thdp, tie mike dom vi cheomg tink 16 mice tong thé, tiembitng dom vi da bidt lip dat thanh nhitng dom vi mar Néu nu phuong phép Top-Down 1 phuong php phan ra vin dé mot eich c6 hé thdng tir trén xudng, duoc img dung chi yéu cho qué trinh phin tich va thiét hé thing, thi phuong phip Bottom- Up thing duge sir dung cho qué trinh cai dit hé théng. Trong vi du ‘én, chiing ta s@ khOng thé xdy dung duge chuong trinh mét cach hodn chink néu nur ta chua xiy dung duge cic him Binary(a), Addition(a,b), Subtraction(a,b), Multial(a,b), Division(a,b), Modulation(a,b), USCLN(a,b).Chutong trinh sau thé hién qua trinh cai dat ‘chong trinh theo nguyén ly Botton-Up: +inctnde ‘include tinelude ‘include ‘include void Init(int*a, int *6)f printf"'n Nhap 2=")scanf("™%d", 2); printi("in Nhap b="):scanf("d", b): } void Binary(int a) inti, 1 2 Chagomg 1: igi come, vé k5 thud hp trink cdu tric foe; 1-05-94 ita (k= du - 2d cl (s a, ta 06 thé nitt gon Vé bai todn tim ude sb chung lin nhat ciia (b mod a) va a vi USCLN(h mod a, a) = USCLN(a,b). Diy cic rit gon lién tiép 6 thé dat duge cho ti khi dat digu kign dimg USCLN(0, a) = USCLN(a, b) = a, Sau day 1a vi dy vé mot sé thuat toan 48 qui thong dung. ‘Thuat toan 1: Tinh a” biing gidi thuft d@ qui, voi moi sé thy a va sé tw nhién n. double power float a, int m){ it(n—=0) Chueomg 2: Duvet va de qui retum(1); return *powerta.n-1): } Thugt ton 2: Thu avab, ton d@ qui tinh ude sé chung Ién nhit cla hai sé nguyén duong: int USCLNC int a, int by if (a= 0) retu(d}: returm(USCLN(b % a, 1); ‘Thugt toan 3; Thuat toan @ qui tinh nt long factorial{ int n)f it(a==1) return(1); return(n * factoria(n-1)); ‘Thugt toan 4: Thugt tosn d¢ qui tinh sé fibonacci thirn nt fibonaceif int n) { if (@—-0) retuen(0) else if (> =1) retarat)s return(fibonacei(n-1) + flbonacei(a-2)); } 2.3. THUAT TOAN SINH KE TIEP Phuong phip sinh ké tiép ding dé giai quyét bai ton ligt ké cita Iy thuyét 16 hop. ‘Thuat toan sinh ké tigp chi duge thye hign trén lp cac bai ton thoa man hai diéu kign sau: * Cb thé xée dink diege mot shit te trén tp eée cau hinh 16 hop cdn lige ke, tie dé xéic dink duge cétu hinh dvu tién ve cau hink cubi cling. * Tiemér cdu hink batk) chua phai la cudi cing, déu co thé thudt todn dé suy va cd hinh ke tiép. dung duoge mét Téng quit, thudt todin sinh ké-ép cO thé due mé ta biing thit tue genarate, trong 46 Sinh_Ké_Tiép \a tha tue sinh caw hinh ké tigp theo thuat todn sinh da duge xay dumg. Néu cau hinh hign tai la cau hinh cud) cing thi thi: tye Sinh_Ké_Tiép s€ gan cho stop gia tr) true, nguige Iai cau hinh ké tigp s@ due sink ra Procedure generate} “; stop =false while (stop) { -; Sinh_Ké_Tiép; a1 Chueomg 2: Duvet va de qui b Dui day 1a mét vi du dién hinh minh hoa cho thuat ton sinh ké tiép. Bai tosin ligt ké cdc {Gp con eda t§p n phan tir MOt tip hgp hitu han gbm n phin te déu c6 thé biéu din twang dicong vii tap cde s tyrnhién 1, 2, . .. n. Bai todin duge dit ra la: Cho mot tip hop gdm n phan tir X = { X,, X2, +» Xp }, hay ligt ké tat ef cae tap con cia tap hop X. Dé ligt ké durge tht ea ede tp con eta X, ta Lim tuong img mbi tip YX voi mot xu nla B= { By, By, .., By } sa0 cho B,= 0 néu X, # ¥ vaB)= Indu X, € YY; nhu vay, phép ligt ké tat ca cc tip con cia mét tap hgp n phan tir trong duong vi phép ligt Ké tit ci cdc xu ni phn ¢6 d6 dai n, Sé céc xu nhi phin c6 d6 dai n li 2°. Bay ‘25 ta di xc dinh thir tw ede xu nb phan va phuong phip sinh ké tgp, nnhij phan ©6 a6 Néu xem céc xiu nhj phan b= { bi, bo... . bs } nhu la biéu dién cia mot durong p(b). Khi dé thir ye hién nhién nhat 1a thir te tye nhién duge xe dinh nhur sau: nguyén ‘Ta mdi xdu nhi phan b= { by, bs,...b, } e6 thir tr trae xdu nh phin b* = { b*y, b's, bi, } va Ki higu 1 bb° néu p(b) < p(b'), Vi du véi m= 4: ching ta e6 2* = 16 xu nh phan (urong ting vi 16 tap con cia tip zm n phan tt) duge ligt ké theo thir tr dién nur sau: b p(b) 0000 0 0001 1 0010 2 oor 3 o100 4 olor 5 oro 6 oi 7 1000 8 1001 9 1010 10 1ort u 1100 12 1101 1B 1110 4 it 1s

You might also like