You are on page 1of 268

MC LC 1. THU T TON 2. CC PH NG PHP BI U DI N THU T TON 3. PH C T P C A THU T TON 4.PHN LO I V N - BI TON 5. THU T TON QUY 6.THU T GI I 5.1.

I 5.1.GI I THI U NGN NG PASCAL 5.2. CC PH N T C B N C A NGN NG PASCAL 5.3. C U TRC CHUNG C A CH NG TRNH PASCAL 5.4. S D NG PH N M M TURBO PASCAL 5.5 CU H I TR C NGHI M 5.6. BI T P 6.1. KHI NI M V KI U D LI U 6.2. KI U S NGUYN 6.3. KI U S TH C 6.4. KI U K T (CHAR) 6.5. KI U LGIC (BOOLEAN) 6.6. CHU I K T (STRING) 6.7. CU H I TR C NGHI M 7.1. H NG, BI N v BI U TH C 7.2. CU L NH v L I CH GI I 7.3.1. NH P D LI U, TH T C READLN 7.3.2. XU T D LI U, TH T C WRITE v WRITELN 7.4. KI U LI T K v KI U O N CON 7.5. CU H I TR C NGHI M 7.6. BI T P Trang 1/268

8.1. CU L NH IF 8.2. CU L NH CASE 8.3. CU H I TR C NGHI M 8.4. BI T P 9.1. CU L NH L P FOR 9.2. CU L NH L P WHILE 9.3. CU L NH L P REPEAT 9.4. CU H I TR C NGHI M 9.5. BI T P 10.1. M NG M T CHI U 10.2. M NG HAI CHI U (MA TR N) 10.3. CU H I TR C NGHI M 10.4. BI T P 11.1. CC V D NNG CAO V CU L NH L P 11.2. CC V D NNG CAO V M NG 11.3. KI U CHU I K T 11.4. CU H I TR C NGHI M 11.5. BI T P 12.1. KHI NI M V CH NG TRNH CON 12.2. HM (FUNCTION) 12.3. TH T C (PROCED URE ) 12.4. CU H I TR C NGHI M 12.5. BI T P 13.1. THAM S TR V THAM S BI N 13.2. PH M VI TC D NG C A CC KHAI BO 13.3. S THAM KH O TR C v S QUI 13.4. CU H I TR C NGHI M13.5. BI T P Trang 2/268

14.1 KI U B N GHI 14.2. CC V D V B N GHI 14.3. CU H I TR C NGHI M 14.4 .BI T P 15.1. KI U T P H P 15.2. D LI U KI U T P TIN 15.3. CU H I TR C NGHI M 15.4. BI T P

1. THUT TON Thut ton l mt khi nim c s ca Ton hc v Tin hc. Hiu mt cch n gin, thut ton l mt tp cc hng dn nhm thc hin mt cng vic no . i vi vic gii quyt mt vn - bi ton th thut ton c th hiu l mt tp hu hn cc hng dn r rng ngi gii ton c th theo m gii quyt c vn . Nh vy, thut ton l mt phng php th hin li gii ca vn - bi ton. Ti sao li l "Thut ton" ? T thut ton (Algorithm) xut pht t tn mt nh ton hc ngi Trung l Abu Abd - Allah ibn Musa alKhwarizmi, thng gi l alKhwarizmi. ng l tc gi mt cun sch v s hc, trong ng dng phng php m t rt r rng, mch lc cch gii nhng bi ton. Sau ny, phng php m t cch gii ton ca ng c xem l mt chun mc v c nhiu nh ton hc khc tun theo. T algorithm ra i da theo cch phin m tn ca ng. Vic nghin cu v thut ton c vai tr rt quan trng trong khoa hc my tnh v my tnh ch gii quyt c vn khi c hng dn gii r rng v ng. Nu hng dn gii sai hoc khng r rng th my tnh khng th gii ng c bi ton. Trong khoa hc my tnh, thut ton c nh ngha l mt dy hu hn cc bc khng mp m v c th thc thi c, qu trnh hnh ng theo cc bc ny phi dng v cho c kt qu nh mong mun. S bc hu hn ca thut ton v tnh cht dng ca n c gi chung l tnh hu hn. S bc hu hn ca thut ton l mt tnh cht kh hin nhin. Ta c th tm u mt li gii vn - bi ton c v s bc gii ? Tnh "khng mp m" v "c th thc thi c" gi chung l tnh xc nh. Gi s khi nhn mt lp hc mi, Ban Gim hiu yu cu gio vin ch nhim chn lp trng mi theo cc bc sau : 1. Lp danh sch tt cc hc sinh trong lp. 2. Sp th t danh sch hc sinh. 3. Chn hc sinh ng u danh sch lm lp trng. Khi nhn c thng bo ny, gio vin chc chn s rt bi ri v khng hiu l trong danh sch hc sinh cn c nhng thng tin g? Danh sch ch cn h tn, hay cn thm ngy thng nm sinh? C cn thm im trung bnh khng? Yu cu 2 li cng gy nhiu thc mc. Cn phi sp xp danh sch theo chiu tng dn hoc gim dn ? Sp theo ch tiu g ? Theo tn, theo ngy thng nm sinh hay theo im trung bnh chung, ...Gi s sp theo im trung bnh th nu c hai hc sinh cng im trung bnh th hc sinh no s sp trc, hc sinh no s sp sau ? ...

Trang 3/268

Hng dn trn vi phm tnh cht "khng mp m" ca thut ton. Ngha l, c qu nhiu thng tin cn thiu lm cho cc bc 1,2 c hiu ng v hiu theo mt ngha duy nht. Nu sa li mt cht t th hng dn trn s tr nn r rng hn rt nhiu v c th gi l mt thut ton chn lp trng ! 1. Lp danh sch tt cc hc sinh trong lp theo hai thng tin: H v Tn; im trung bnh cui nm. 2. Sp hng hc sinh theo im trung bnh theo th t gim dn (t im cao n im thp). Hai hc sinh c cng im trung bnh s c cng hng. 3. Nu ch c mt hc sinh c hng nht th chn hc sinh lm lp trng. Trng hp c nhiu hc sinh ng hng nht th chn hc sinh c im mn Ton cao nht lm lp trng. Nu vn cn nhiu hn mt hc sinh ng hng nht v c cng im mn Ton cao nht th tin hnh bc thm. y chng ta cn phn bit mp m v s chn la c quyt nh. Mp m l thiu thng tin hoc c nhiu chn la nhng khng iu kin quyt nh. Cn chn la c quyt nh l hon ton xc nh duy nht trong iu kin c th ca vn . Chng hn trong vn chn lp trng trn, bc 3 th hin mt s la chn c quyt nh. Tt nhin, khi cha lp danh sch, cha xp hng theo im trung bnh th gio vin khng th bit c s chn lp trng theo cch no. Nhng khi sp xong danh sch th ch c mt phng n chn duy nht. Tnh "thc thi c" cng l mt tnh cht kh hin nhin. R rng nu trong "thut ton" tn ti mt bc khng th thc thi c th lm sao ta c c kt qu ng nh mun? Tuy nhin, cn phi hiu l "thc thi c" xt trong iu kin hin ti ca bi ton. Chng hn, khi ni "ly cn bc hai ca mt s m" l khng th thc thi c nu min xc nh ca bi ton l s thc, nhng trong min s phc th thao tc "ly cn bc hai ca mt s m" l hon ton thc thi c. Tng t, nu ta ch ng cho mt ngi i xe my n mt bu in nhng con ng ta ch l ng ct, ng cm hoc ng ngc chiu th ngi i khng th i n bu in c. Tnh "dng" l tnh cht d b vi phm nht, thng l do sai st khi trnh by thut ton. D nhin, mi thut ton u nhm thc hin mt cng vic no nn sau mt thi gian thi hnh hu hn th thut ton phi cho chng ta kt qu mong mun. Khi khng tha tnh cht ny, ta ni rng "thut ton" b lp v tn hoc b qun. tnh tng cc s nguyn dng l trong khong t 1 n n ta c thut ton sau : B1. Hi gi tr ca n. B2. S = 0 B3. i = 1 B4. Nu i = n+1 th sang bc B8, ngc li sang bc B5 B5. Cng thm i vo S B6. Cng thm 2 vo i B7. Quay li bc B4. B8. Tng cn tm chnh l S. Ta ch n bc B4. y ta mun kt thc thut ton khi gi tr ca i vt qu n. Thay v vit l "nu i ln hn n" th ta thay bng iu kin "nu i bng n+1" v theo ton hc "i = n+1" th suy ra "i ln hn n". Nhng iu kin "i=n+1" khng phi lc no cng t c. V ban u i = 1 l s l, sau mi bc, i c tng thm 2 nn i lun l s l. Nu n l s chn th n+1 l mt s l nn sau mt s bc nht nh, i s bng n+1. Tuy nhin, nu n l mt s l th n+1 l mt s chn, do i l s l nn d c qua bao nhiu bc i chng na, i vn khc n+1. Trong trng hp , thut ton trn s b qun. Tnh "ng" l mt tnh cht kh hin nhin nhng l tnh cht kh t ti nht. Thc vy, khi gii quyt mt vn -bi ton, ta lun lun mong mun li gii ca mnh s cho kt qu ng nhng khng phi lc no cng t c. Mi hc Trang 4/268

sinh khi lm bi kim tra u mun bi lm ca mnh c p s ng nhng trn thc t, trong lp hc ch c mt s hc sinh nht nh l c kh nng a ra li gii ng! Thut ton th cng nhc ! Cc tnh cht ca thut ton rt cht ch v cng nhc. Nhng iu cng c ngha l kh nng gii quyt vn theo kiu thut ton cng b gii hn. Sau ny, ngi ta "lm mm" i hai tnh cht quan trng ca thut ton l tnh xc nh v tnh ng gii quyt nhng vn phc tp hn m vi cc tnh cht cht ch ca thut ton th khng th gii quyt c. l cc thut ton quy v thut gii. Ta s tm hiu v iu ny ngay trong cc mc 4 v 5 ca chng ny.

Cc c trng khc ca thut ton Bn cnh 3 c trng chnh l xc nh, hu hn v ng, thut ton cn c thm 3 c trng ph khc. 1. u vo v u ra (input/output) : mi thut ton, d c n gin n my cng phi nhn d liu u vo, x l n v cho ra kt qu cui cng. 2. Tnh hiu qu (effectiveness) : tnh hiu qu ca thut ton c nh gi da trn mt s tiu chun nh khi lng tnh ton, khng gian v thi gian khi thut ton c thi hnh. Tnh hiu qu ca thut ton l mt yu t quyt nh nh gi, chn la cch gii quyt vn -bi ton trn thc t. C rt nhiu phng php nh gi tnh hiu qu ca thut ton. Trong mc 3 ca chng , ta s tm hiu mt tiu chun c dng rng ri l phc tp ca thut ton. 3. Tnh tng qut (generalliness) : thut ton c tnh tng qut l thut ton phi p dng c cho mi trng hp ca bi ton ch khng phi ch p dng c cho mt s trng hp ring l no . Chng hn gii phng trnh bc hai sau y bng Delta m bo c tnh cht ny v n lun gii c vi mi gi tr s thc a,b,c bt k. Tuy nhin, khng phi thut ton no cng m bo c tnh tng qut. Trong thc t, c lc ngi ta ch xy dng thut ton cho mt dng c trng ca bi ton m thi. Thut ton gii phng trnh bc hai ax2+bx+c=0 (a?0) 1. Yu cu cho bit gi tr ca 3 h s a, b, c 2. Nu a=0 th 2.1. Yu cu u vo khng m bo. 2.2. Kt thc thut ton. 3. Trng hp a khc 0 th 3.1. Tnh gi tr D = b2-4ac 3.2. Nu D > 0 th 3.2.1. Phng trnh c hai nghim phn bit x1 v x2 3.2.2. Gi tr ca hai nghim c tnh theo cng thc sau

3.2.3. Kt thc thut ton. 3.3. Nu D = 0 th Trang 5/268

3.3.1. Phng trnh c nghim kp x0 3.3.2. Gi tr ca nghim kp l

3.3.3. Kt thc thut ton 3.4. Nu D < 0 th 3.4.1. Phng trnh v nghim. 3.4.2. Kt thc thut ton. Thut ton tm hp c trng lng nng nht Vn : C n hp c khi lng khc nhau v mt ci cn da. Hy ch ra cch cn tm c hp c trng lng nng nht. Vn ny l th hin ca mt bi ton tng qut : Cho mt tp hp A hu hn v mt th t ton phn trn A. Hy xy dng thut ton tm phn t ln nht ca A. Bi ton trong ton hc c v rt phc tp nhng mt th hin trn thc t li rt d hiu, v cch gii quyt cng n gin. T ta c th d dng suy ra cch gii bi ton tng qut. 1. Nu ch c 1 hp (n=1) th 1.1. Hp chnh l hp nng nht. 1.2. Kt thc thut ton. 2. Ngc li nu c t hai hp tr ln (n>1) 2.1. Chn hai hp bt k v t ln bn cn. 2.2. Gi li hp nng hn, ct hp nh hn sang ch khc. 3. Nu cn hp cha c cn thc hin cc bc sau, nu khng cn hp no na, sang bc 5. 3.1. Chn mt hp bt k v ln da cn cn trng. 3.2. Gi li hp nng hn, ct hp nh hn sang ch khc. 4. Tr li bc 3. 5. Hp cn li trn cn chnh l hp nng nht. Kt thc.

Thut ton Euclid tm c s chung ln nht Bi ton : Cho hai s nguyn dng a v b. Tm c s chung ln nht ca a v b. 1. Yu cu cho bit gi tr ca a, b. 2. a0 = a 3. b0 = b Trang 6/268

4. i = 0 5. Nu ai khc bi th thc hin cc thao tc sau, ngc li qua bc 7. 5.1 Tng i ln 1. 5.2. Nu ai-1 > bi-1 th ai = ai-1 - bi-1 bi = bi-1 5.3. Ngc li bi = bi-1 - ai-1 ai = ai-1 6. Tr li bc 5. 7. c s chung ln nht ca a, b l ai . 2. CC PHNG PHP BIU DIN THUT TON Khi chng minh hoc gii mt bi ton trong ton hc, ta thng dng nhng ngn t ton hc nh : "ta c", "iu phi chng minh", "gi thuyt", ... v s dng nhng php suy lun ton hc nh php suy ra, tng ng, ...Thut ton l mt phng php th hin li gii bi ton nn cng phi tun theo mt s quy tc nht nh. c th truyn t thut ton cho ngi khc hay chuyn thut ton thnh chng trnh my tnh, ta phi c phng php biu din thut ton. C 3 phng php biu din thut ton : 1. Dng ngn ng t nhin. 2. Dng lu -s khi (flowchart). 3. Dng m gi (pseudocode). 2.1. Ngn ng t nhin Trong cch biu din thut ton theo ngn ng t nhin, ngi ta s dng ngn ng thng ngy lit k cc bc ca thut ton (Cc v d v thut ton trong mc 1 ca chng s dng ngn ng t nhin). Phng php biu din ny khng yu cu ngi vit thut ton cng nh ngi c thut ton phi nm cc quy tc. Tuy vy, cch biu din ny thng di dng, khng th hin r cu trc ca thut ton, i lc gy hiu lm hoc kh hiu cho ngi c. Gn nh khng c mt quy tc c nh no trong vic th hin thut ton bng ngn ng t nhin. Tuy vy, d c, ta nn vit cc bc con li vo bn phi v nh s bc theo quy tc phn cp nh 1, 1.1, 1.1.1, ... Bn c th tham kho li ba v d trong mc 1 ca chng hiu cch biu din thut ton theo ngn ng t nhin. 2.2. Lu - s khi Lu hay s khi l mt cng c trc quan din t cc thut ton. Biu din thut ton bng lu s gip ngi c theo di c s phn cp cc trng hp v qu trnh x l ca thut ton. Phng php lu thng c dng trong nhng thut ton c tnh rc ri, kh theo di c qu trnh x l. biu din thut ton theo s khi, ta phi phn bit hai loi thao tc. Mt thao tc l thao tc chn la da theo mt iu kin no . Chng hn : thao tc "nu a = b th thc hin thao tc B2, ngc li thc hin B4" l thao tc chn Trang 7/268

la. Cc thao tc cn li khng thuc loi chn la c xp vo loi hnh ng. Chng hn, "Chn mt hp bt k v ln da cn cn trng." l mt thao tc thuc loi hnh ng. 2.2.1. Thao tc chn la (decision) Thao tc chn la c biu din bng mt hnh thoi, bn trong cha biu thc iu kin.

2.2.2. Thao tc x l (process) Thao tc x l c biu din bng mt hnh ch nht, bn trong cha ni dung x l.

2.2.3.ng i (route) Khi dng ngn ng t nhin, ta mc nh hiu rng qu trnh thc hin s ln lt i t bc trc n bc sau (tr khi c yu cu nhy sang bc khc). Trong ngn ng lu , do th hin cc bc bng hnh v v c th t cc hnh v ny v tr bt k nn ta phi c phng php th hin trnh t thc hin cc thao tc. Hai bc k tip nhau c ni bng mt cung, trn cung c mi tn ch hng thc hin. Chng hn trong hnh di, trnh t thc hin s l B1, B2, B3. T thao tc chn la c th c n hai hng i, mt hng ng vi iu kin tha v mt hng ng vi iu kin khng tha. Do vy, ta dng hai cung xut pht t cc nh hnh thoi, trn mi cung c k hiu /ng/Y/Yes ch hng i ng vi iu kin tha v k hiu S/Sai/N/No ch hng i ng vi iu kin khng tha.

Trang 8/268

2.2.4. im cui (terminator) im cui l im khi u v kt thc ca thut ton, c biu din bng hnh ovan, bn trong c ghi ch bt u/start/begin hoc kt thc/end. im cui ch c cung i ra (im khi u) hoc cung i vo (im kt thc). Xem lu thut ton gii phng trnh bc hai trn thy cch s dng ca im cui. 2.2.5. im ni (connector) im ni c dng ni cc phn khc nhau ca mt lu li vi nhau. Bn trong im ni, ta t mt k hiu bit s lin h gia cc im ni.

2.2.6. im ni sang trang (off-page connector) Tng t nh im ni, nhng im ni sang trang c dng khi lu qu ln, phi v trn nhiu trang. Bn trong im ni sang trang ta cng t mt k hiu bit c s lin h gia im ni ca cc trang. Trang 9/268

trn ch l cc k hiu c bn v thng c dng nht. Trong thc t, lu cn c nhiu k hiu khc nhng thng ch dng trong nhng lu ln v phc tp. i vi cc thut ton trong cun sch ny, ta ch cn s dng cc k hiu trn l . 2.3. M gi Tuy s khi th hin r qu trnh x l v s phn cp cc trng hp ca thut ton nhng li cng knh. m t mt thut ton nh ta phi dng mt khng gian rt ln. Hn na, lu ch phn bit hai thao tc l r nhnh (chn la c iu kin) v x l m trong thc t, cc thut ton cn c thm cc thao tc lp (Chng ta s tm hiu v thao tc lp trong cc bi sau). Khi th hin thut ton bng m gi, ta s vay mn cc c php ca mt ngn ng lp trnh no th hin thut ton. Tt nhin, mi ngn ng lp trnh u c nhng thao tc c bn l x l, r nhnh v lp. Dng m gi va tn dng c cc khi nim trong ngn ng lp trnh, va gip ngi ci t d dng nm bt ni dung thut ton. Tt nhin l trong m gi ta vn dng mt phn ngn ng t nhin. Mt khi vay mn c php v khi nim ca ngn ng lp trnh th chc chn m gi s b ph thuc vo ngn ng lp trnh . Chnh v l do ny, chng ta cha vi tm hiu v m gi trong bi ny (v chng ta cha bit g v ngn ng lp trnh!). Sau khi tm hiu xong bi v th tc - hm bn s hiu m gi l g ! Mt on m gi ca thut ton gii phng trnh bc hai

if Delta > 0 then begin x1=(-b-sqrt(delta))/(2*a) x2=(-b+sqrt(delta))/(2*a) xut kt qu : phng trnh c hai nghim l x1 v x2 end else if delta = 0 then xut kt qu : phng trnh c nghim kp l -b/(2*a) else {trng hp delta < 0 } xut kt qu : phng trnh v nghim * Cc t in m l cc t kha ca ngn ng Pascal Trang 10/268

3. PHC TP CA THUT TON Mt chng trnh my tnh thng c ci t da trn mt thut ton ng gii quyt bi ton hay vn . Tuy nhin, ngay c khi thut ton ng, chng trnh vn c th khng s dng c i vi mt d liu u vo no v thi gian cho ra kt qu l qu lu hoc s dng qu nhiu b nh (vt qu kh nng p ng ca my tnh). Khi tin hnh phn tch thut ton ngha l chng ta tm ra mt nh gi v thi gian v "khng gian" cn thit thc hin thut ton. Khng gian y c hiu l cc yu cu v b nh, thit b lu tr, ... ca my tnh thut ton c th lm vic. Vic xem xt v khng gian ca thut ton ph thuc phn ln vo cch t chc d liu ca thut ton. Trong phn ny, khi ni n phc tp ca thut ton, chng ta ch cp n nhng nh gi v mt thi gian m thi. Phn tch thut ton l mt cng vic rt kh khn, i hi phi c nhng hiu bit su sc v thut ton v nhiu kin thc ton hc khc. y l cng vic m khng phi bt c ngi no cng lm c. Rt may mn l cc nh ton hc phn tch cho chng ta phc tp ca hu ht cc thut ton c s (sp xp, tm kim, cc thut ton s hc, ...). Chnh v vy, nhim v cn li ca chng ta l hiu c cc khi nim lin quan n phc tp ca thut ton. nh gi v thi gian ca thut ton khng phi l xc nh thi gian tuyt i (chy thut ton mt bao nhiu giy, bao nhiu pht,...) thc hin thut ton m l xc nh mi lin quan gia d liu u vo (input) ca thut ton v chi ph (s thao tc, s php tnh cng,tr, nhn, chia, rt cn,...) thc hin thut ton. S d ngi ta khng quan tm n thi gian tuyt i ca thut ton v yu t ny ph thuc vo tc ca my tnh, m cc my tnh khc nhau th c tc rt khc nhau. Mt cch tng qut, chi ph thc hin thut ton l mt hm s ph thuc vo d liu u vo :T = f(input) Tuy vy, khi phn tch thut ton, ngi ta thng ch ch n mi lin quan gia ln ca d liu u vo v chi ph. Trong cc thut ton, ln ca d liu u vo thng c th hin bng mt con s nguyn n. Chng hn : sp xp n con s nguyn, tm con s ln nht trong n s, tnh im trung bnh ca n hc sinh, ... Lc ny, ngi ta th hin chi ph thc hin thut ton bng mt hm s ph thuc vo n : T = f(n) Vic xy dng mt hm T tng qut nh trn trong mi trng hp ca thut ton l mt vic rt kh khn, nhiu lc khng th thc hin c. Chnh v vy m ngi ta ch xy dng hm T cho mt s trng hp ng ch nht ca thut ton, thng l trng hp tt nht v xu nht. Chng ta tr li v d v thut ton tm hp nng nht trong n hp cho trc, nhng ln ny ta lm vic trn mt th hin khc ca vn . y l mt thut ton tng i n gin nn chng ta c th tin hnh phn tch c phc tp. Trc khi phn tch phc tp, ta nhc li i iu v thut ton ny. Tm s ln nht trong mt dy s Bi ton : Cho mt dy s a c n phn t a1, a2, ...an. Hy xy dng thut ton tm con s ln nht trong dy a. Nhn xt 1. Nu dy ch c 1 phn t th phn t l s ln nht. 2. Gi s dy c n phn t v ta xc nh c phn t ln nht l amax . Nu b sung thm phn t th an+1 vo dy m an+1 > amax th an+1 chnh l phn t ln nht ca dy c n+1 phn t. Trng hp ngc li, ngha l an+1 amax th amax vn l phn t ln nht ca dy c n+1 phn t. Thut ton 1. Ghi nh amax = a1. Trang 11/268

2. i = 2. 3. Nu (i n) th thc hin cc bc sau, ngc li sang bc 5. 3.1. Nu (ai > amax ) th 3.1.1. Ghi nh amax = ai . 3.2. Tng i ln 1. 4. Tr li bc 3. 5. Phn t ln nht dy a chnh l amax .Kt thc. Trong thut ton trn, n gin, ta ch xem chi ph l s ln so snh bc 3.1 v s ln "ghi nh" trong bc 3.1.1. Trng hp tt nht ca thut ton ny xy ra khi con s ln nht nm u dy (amax= a1); trng hp xu nht xy ra khi con s ln nht nm cui dy (amax=an) v dy c sp xp theo th t tng dn.

Da theo s khi ca thut ton, ta nhn thy rng, trong mi trng hp ca bi ton, php "ghi nh" bc 3.1 lun c thc hin v s ln thc hin l n-1 (ng vi vic xt t phn t a2 n an). Ta gi y l chi ph c nh hoc bt bin ca thut ton. Trng hp tt nht : do amax = a1 suy ra, vi mi i 2, ai< amax. Do , iu kin ai>amax bc 3.1 lun khng tha nn bc 3.1.1 khng bao gi c thc hin. Nh vy, chi ph chung cho trng hp ny chnh l chi ph c nh ca bi ton. T = f(n) = n-1 Trng hp xu nht : Ta c : vi mi i>1, ai-1< ai (do nh ngha dy c sp xp tng dn) nn iu kin ai>amax bc 3.1 lun tha, bc 3.1.1 lun c thc hin. Nh vy, ngoi chi ph chung l n-1 php so snh, ta cn phi dng thm n-1 php "ghi nh" bc 3.1.1. Nh vy, tng chi ph ca trng hp ny l Trang 12/268

T = f(n) = 2(n-1)=2n-2 nh ngha Cho hai hm f v g c min xc nh trong tp s t nhin . Ta vit f(n) = O(g(n)) v ni f(n) c cp cao nht l g(n) khi tn ti hng s C v k sao cho | f(n) | C.g(n) vi mi n > k Tuy chi ph ca thut ton trong trng hp tt nht v xu nht c th ni ln nhiu iu nhng vn cha a ra c mt hnh dung tt nht v phc tp ca thut ton. c th hnh dung chnh xc v phc tp ca thut ton, ta xt n mt yu t khc l tng ca chi ph khi ln n ca d liu u vo tng. Theo nh ngha trn, ta nhn thy chi ph thp nht v ln nht ca thut ton tm s ln nht u b chn bi O(n) (tn ti hng s C=10, k=1 2n-2 < 10n vi mi n>1). Mt cch tng qut, nu hm chi ph ca thut ton (xt trong mt trng hp no ) b chn bi O(f(n)) th ta ni rng thut ton c phc tp l O(f(n)) trong trng hp . Nh vy, thut ton tm s ln nht c phc tp trong trng hp tt nht v xu nht u l O(n). Ngi ta gi cc thut ton c phc tp O(n) l cc thut ton c phc tp tuyn tnh. Sau y l mt s "thc o" phc tp ca thut ton c s dng rng ri. Cc phc tp c sp xp theo th t tng dn. Ngha l mt bi ton c phc tp O(nk) s phc tp hn bi ton c phc tp O(n) hoc O(logan).

4. PHN LOI VN - BI TON phc tp ca thut ton chnh l yu t c s phn loi vn -bi ton. Mt cch tng qut, mi bi ton u c th chia lm 2 lp ln l : gii c v khng gii c. Lp gii c chia lm 2 lp con. Lp con u tin l cc bi ton c phc tp a thc : ngha l bi ton c th gii c bng thut ton c phc tp a thc (hay ni ngn gn : lp a thc) c xem l c li gii thc t. Lp con th hai l nhng bi ton c phc tp khng phi l a thc m li gii ca n c xem l thc t ch cho nhng s liu u vo c chn la cn thn v tng i nh. Cui cng l nhng bi ton thuc loi NP cha th phn loi mt cch chnh xc l thuc lp bi ton c phc tp a thc hay c phc tp khng a thc. 4.1. Lp bi ton c phc tp a thc Trang 13/268

Cc bi ton thuc lp ny c phc tp l O(nk) hoc nh hn O(nk). Chng hn nh cc bi ton c phc tp l O(nlog2n) c xem l cc bi ton thuc lp a thc v nlog2n b chn bi n2 ( nlog2n n2 vi mi n>0). Nh vy cc bi ton c phc tp hng O(1), phc tp tuyn tnh O(n) v logarith O(nlogan) u l cc bi ton thuc lp a thc. Cn cc bi ton c phc tp ly tha O(an) hoc giai tha O(n!) l khng thuc lp a thc. Tuy phc tp ch l s o v tng ca chi ph ng vi tng ca d liu u vo nhng n cng cho chng ta c mt nh gi tng i v thi gian thi hnh thut ton. Cc thut ton thuc lp a thc c xem l cc bi ton c li gii thc t. Li gii thc t c hiu rng l chi ph v mt thi gian v khng gian cho vic gii bi ton l chp nhn c trong iu kin hin ti. Bt k mt bi ton no khng thuc lp ny th u c chi ph rt ln. C th gii c hay khng? Ngi ta c tnh thi gian cn thit gii mt mt m c m ha bng kha 128-bit l trn 1 triu nm vi iu kin lm vic trn cc siu my tnh mnh nht hin nay! Chnh v l do ny, mt bi ton c xem l c th gii c trn thc t hay khng ph thuc vo phc tp ca bi ton c phi l a thc hay khng. 4.2. Lp bi ton c phc tp khng a thc Tht khng may mn, nhiu bi ton thc s c li gii li khng thuc lp ca bi ton a thc. V d : cho mt tp hp c n phn t, hy lit k tt c cc tp con khc trng ca tp hp ny. Bng ton hc, ngi ta chng minh c rng s tp con ca mt tp hp c n phn t l 2n-1. Li gii tuy c nhng khi th hin li gii ny bng bt k thut ton no th phi tn t nht 2n-1 bc. D thy rng phc tp ca bi ton ny cng c O(2n). Nh vy bi ton ny khng thuc lp ca bi ton a thc. Vi n vo khong 16, s bc cn thit ch khong vi chc ngn l hon ton gii c trn cc my tnh hin nay. Nhng khi s phn t ln n 32 th ta tn mt s bc ln n 4 t, ch thm mt phn t na thi, chng ta tn 8 t bc! Vi s lng bc nh vy, d chy trn mt siu my tnh cng phi tn mt thi gian ng k! Cc bi ton khng thuc lp a thc ch gii c vi mt ln d liu u vo nht nh. 4.3. Lp bi ton NP Chng ta u bit rng tnh xc nh l mt trong ba c tnh quan trng ca thut ton. Ngha l mi bc ca thut ton phi c xc nh duy nht v c th thc thi c. Nu c s phn chia trng hp ti mt bc th thng tin ti bc phi y thut ton c th t quyt nh chn la trng hp no. Trong mc 4.3 ny, ta tm gi cc thut ton tha mn tnh xc nh l cc thut ton t quyt. Vy th iu g s xy ra nu ta a ra mt "thut ton" c tnh khng t quyt? Ngha l ti mt bc ca "thut ton", ta a ra mt s trng hp chn la nhng khng cung cp y thng tin "thut ton" t quyt nh? Tht ra, trong cuc sng, nhng "thut ton" thuc loi ny rt hay c p dng. Chng hn ta c mt li ch dn khi i du lch : "Khi i ht khu vn ny, bn hy chn mt con ng m bn cm thy thch. Tt c u dn n bo tng lch s.". Nu l khch du lch, bn s cm thy bnh thng. Nhng my tnh th khng! N khng th thc thi nhng hng dn khng r rng nh vy! n y, lp tc s c mt cu hi rng "Ti sao li cp n nhng thut ton c tnh khng t quyt d my tnh khng th thc hin mt thut ton nh vy?". Cu tr li l, khi nghin cu v thut ton khng t quyt, d khng dng gii bi ton no i na, chng ta s c nhng hiu bit v hn ch ca nhng thut ton t quyt thng thng. n y, ta hy xem s khc bit v phc tp ca mt thut ton t quyt v khng t quyt gii quyt cho cng mt vn . Bi ton ngi bn hng Mt nhn vin phn phi hng cho mt cng ty c giao nhim v phi giao hng cho cc i l ca cng ty, sau tr v cng ty. Vn ca ngi nhn vin l lm sao i giao hng cho tt c i l m khng tiu qu s tin xng m cng ty cp cho mi ngy. Ni mt cch khc, lm sao ng i qu mt s lng cy s no . Mt li gii c in cho bi ton ny l lit k mt cch c h thng tng con ng c th i, so snh chiu di mi con ng tm c vi chiu di gii hn cho n lc tm c mt con ng ph hp hoc xt ht tt c cc con ng c th i. Tuy nhin, cch gii quyt ny c phc tp khng phi a thc. Bng ton hc, ngi ta chng Trang 14/268

minh c rng phc tp ca thut ton ny l O(n!). Nh vy, vi s i l ln th thut ton trn c xem l khng thc t. By gi, chng ta xem qua mt thut ton khng t quyt. 1. Chn mt con ng c th v tnh chiu di ca n. 2. Nu chiu di ny khng ln hn gii hn th bo l thnh cng, ngc li bo chn la sai. Quan im ca ta trong cch gii quyt ny l nu chn sai th l do li ca ngi chn ch khng phi li ca thut ton !. Theo thut ton ny th chi ph tnh chiu di ca con ng c chn s t l vi s i l; chi ph so snh chiu di qung ng vi gii hn cho php th khng lin quan n s thnh ph. Nh vy, chi ph ca thut ton ny l mt hm c dng T = an+b vi n l s i l v a,b l cc hng s. Ta kt lun rng, phc tp ca thut ton ny l O(n) hay phc tp thuc lp a thc. Nh vy, nu dng thut ton t quyt th bi ton ngi bn hng s c phc tp khng thuc lp a thc, cn nu dng thut ton khng t quyt th bi ton s c phc tp a thc. nh ngha Mt bi ton khi c gii bng mt thut ton khng t quyt m c phc tp thuc lp a thc th c gi l mt bi ton a thc khng t quyt hay vit tt l bi ton NP. Theo nh ngha trn th bi ton ngi bn hng l bi ton thuc lp NP. Cho n nay ngi ta cha chng minh c rng tn ti hay khng mt thut ton t quyt c phc tp a thc cho bi ton ngi bn hng rong. V vy, bi ton ny (l mt bi ton NP) cha th xp c vo lp a thc hay khng a thc. Do , lp bi ton NP cha th phn loi l thuc lp a thc hay khng. D nhin, lp bi ton NP cng cha nhng bi ton thuc lp a thc thc s, bi v nu mt bi ton c gii bng thut ton t quyt c phc tp a thc th chc chn khi dng thut ton khng t quyt th cng s c phc tp a thc.

5. THUT TON QUY Thut ton quy l mt trong nhng s m rng c bn nht ca khi nim thut ton. Nh bit, mt thut ton cn phi tha mn 3 tnh cht : Tnh hu hn. Tnh xc nh Tnh ng n Trang 15/268

Tuy nhin, c nhng bi ton m vic xy dng mt thut ton vi y ba tnh cht trn rt kh khn. Trong khi , nu ta xy dng mt thut ton vi phm mt vi tnh cht trn th cch gii li tr nn n gin hn nhiu v c th chp nhn c. Mt trong nhng trng hp l thut ton quy. T tng gii bi ton bng thut ton quy l a bi ton hin ti v mt bi ton cng loi, cng tnh cht (hay ni mt cch nm na l ng dng) nhng cp thp hn (chng hn : ln d liu nhp nh hn, gi tr cn tnh ton nh hn, ....), v qu trnh ny tip tc cho n lc bi ton c a v mt cp m ti c th gii c. T kt qu cp ny, ta s ln ngc gii c bi ton cp cao hn cho n lc gii c bi ton cp ban u. Trong ton hc ta cng thng gp nhng nh ngha v nhng i tng, nhng khi nim da trn chnh nhng i tng, khi nim . nh ngha giai tha Giai tha ca mt s t nhin n, k hiu n! c nh ngha l : 0! = 1 n! = (n-1)!n vi mi n>0

nh ngha dy s Fibonacci f0 = 1 f1 = 1 fn = fn-1 + fn-2 vi mi n>1 Theo ton hc, nhng khi nim c nh ngha nh vy gi l nh ngha theo kiu quy np. Chnh v vy, quy c s lin h rt cht ch vi quy np ton hc. quy mnh im n c th nh ngha mt tp v hn cc i tng ch bng mt s hu hn cc mnh . Tuy nhin, c tnh ny ca quy li vi phm tnh xc nh ca thut ton. V nguyn tc, mt bc trong thut ton phi c xc nh ngay ti thi im bc c thi hnh, nhng vi thut ton quy, bc th n khng c xc nh ngay trong ng cnh ca n m phi xc nh thng qua mt bc thp hn. Chng hn, tnh c gi tr phn t th 5 ca dy Fibonacci theo nh ngha trn, ta phi tnh f3+f4, nhng ta cha bit gi tr f3 v f4 ti thi im ny. n y, ta phi li li tnh f3 v f4. tnh f3 ta li phi li v tnh f2,...Tt nhin, l qu trnh tnh li ny phi dng sau mt s hu hn bc. Trong trng hp ny, im dng chnh l gi tr f1 v f0.

Trang 16/268

u th ca thut ton quy l ta ch cn gii bi ton ti mt s trng hp c bit no , cn gi l trng hp dng. Sau , cc trng hp khc ca bi ton s c xc nh thng qua trng hp c bit ny. i vi vic tnh dy Fibonacci, trng hp dng chnh l gi tr ca f0 v f1. Ni mt cch chnh xc, mi thut ton quy u gm hai phn: Phn c s L cc trng hp khng cn thc hin li thut ton (hay khng c yu cu gi quy). Nu thut ton quy khng c phn ny th s dn n b lp v hn v sinh li khi thi hnh. V l do ny m ngi ta i lc cn gi phn c s l trng hp dng. Phn quy L phn trong thut ton c yu cu gi quy, tc l yu cu thc hin li thut ton nhng vi mt cp d liu thp hn.

Trang 17/268

6.THUT GII 6.1. M rng khi nim thut ton : thut gii Trong qu trnh nghin cu gii quyt cc vn - bi ton, ngi ta a ra nhng nhn xt nh sau : C nhiu bi ton cho n nay vn cha tm ra mt cch gii theo kiu thut ton v cng khng bit l c tn ti thut ton hay khng. C nhiu bi ton c thut ton gii nhng khng chp nhn c v thi gian gii theo thut ton qu ln hoc cc iu kin cho thut ton kh p ng. C nhng bi ton c gii theo nhng cch gii vi phm thut ton nhng vn chp nhn c. T nhng nhn nh trn, ngi ta thy rng cn phi c nhng i mi cho khi nim thut ton. Ngi ta m rng hai tiu chun ca thut ton : tnh xc nh v tnh ng n. Vic m rng tnh xc nh i vi thut ton c th hin qua cc gii thut quy v ngu nhin. Tnh ng ca thut ton by gi khng cn bt buc i vi mt s cch gii bi ton, nht l cc cch gii gn ng. Trong thc tin, c nhiu trng hp ngi ta chp nhn cc cch gii thng cho kt qu tt (nhng khng phi lc no cng tt) nhng t phc tp v hiu qu. Chng hn nu gii mt bi ton bng thut ton ti u i hi my tnh thc hin nhiu nm th chng ta c th sn lng chp nhn mt gii php gn ti u m ch cn my tnh chy trong vi ngy hoc vi gi. Cc cch gii chp nhn c nhng khng hon ton p ng y cc tiu chun ca thut ton thng c gi l cc thut gii. Khi nim m rng ny ca thut ton m rng ca cho chng ta trong vic tm kim phng php gii quyt cc bi ton c t ra. Mt trong nhng thut gii thng c cp n v s dng trong khoa hc tr tu nhn to l cc cch gii theo kiu Heuristic. 6.2. Thut gii Heuristic Thut gii Heuristic l mt s m rng khi nim thut ton. N th hin cch gii bi ton vi cc c tnh sau : Thng tm c li gii tt (nhng khng chc l li gii tt nht) Gii bi ton theo thut gii Heuristic thng d dng v nhanh chng a ra kt qu hn so vi gii thut ti u, v vy chi ph thp hn. Thut gii Heuristic thng th hin kh t nhin, gn gi vi cch suy ngh v hnh ng ca con ngi.

Trang 18/268

C nhiu phng php xy dng mt thut gii Heuristic, trong ngi ta thng da vo mt s nguyn l c s nh sau: Nguyn l vt cn thng minh : Trong mt bi ton tm kim no , khi khng gian tm kim ln, ta thng tm cch gii hn li khng gian tm kim hoc thc hin mt kiu d tm c bit da vo c th ca bi ton nhanh chng tm ra mc tiu. Nguyn l tham lam (Greedy): Ly tiu chun ti u (trn phm vi ton cc) ca bi ton lm tiu chun chn la hnh ng cho phm vi cc b ca tng bc (hay tng giai on) trong qu trnh tm kim li gii. Nguyn l th t : Thc hin hnh ng da trn mt cu trc th t hp l ca khng gian kho st nhm nhanh chng t c mt li gii tt. Hm Heuristic: Trong vic xy dng cc thut gii Heuristic, ngi ta thng dng cc hm Heuristic. l cc hm nh gi th, gi tr ca hm ph thuc vo trng thi hin ti ca bi ton ti mi bc gii. Nh gi tr ny, ta c th chn c cch hnh ng tng i hp l trong tng bc ca thut gii.

Bi ton hnh trnh ngn nht - ng dng nguyn l Greedy Bi ton : Chng ta tr li vi bi ton ngi bn hng. Nhng y, yu cu bi ton hi khc l lm sao tm c hnh trnh ngn nht c th c. Tt nhin ta c th gii bi ton ny bng cch lit k tt c con ng c th i, tnh chiu di ca mi con ng ri tm con ng c chiu di ngn nht. Tuy nhin, cch gii ny li c phc tp O(n!) (tng s hnh trnh c th c l n!). Do , khi s i l tng th s con ng phi xt s tng ln rt nhanh. Mt cch gii n gin hn nhiu v thng cho kt qu tng i tt l dng mt thut gii Heuristic ng dng nguyn l Greedy. T tng ca thut gii nh sau : 1. T im khi u, ta lit k tt c qung ng t im xut pht cho n n i l ri chn i theo con ng ngn nht. 2. Khi i n mt i l, chn i n i l k tip cng theo nguyn tc trn. Ngha l lit k tt c con ng t i l ta ang ng n nhng i l cha i n. Chn con ng ngn nht. Lp li qu trnh ny cho n lc khng cn i l no i. Bn c th quan st hnh 2.14 thy c qu trnh chn la. Theo nguyn l Greedy, ta ly tiu chun hnh trnh ngn nht ca bi ton lm tiu chun chn la cc b. Ta hy vng rng, khi i trn n on ng ngn nht th cui cng ta s c mt hnh trnh ngn nht. iu ny khng phi lc no cng ng. Vi iu kin trong hnh 2.14 th thut gii cho chng ta mt hnh trnh c chiu di l 14 trong khi hnh trnh ti u l 13. Kt qu ca thut gii Heuristic trong trng hp ny ch lch 1 n v so vi kt qu ti u. Trong khi , phc tp ca thut gii Heuristic ny ch l O(n2). Tt nhin, thut gii theo kiu Heuristic i lc li a ra kt qu khng tt, thm ch rt t nh trng hp hnh 2.15.

Trang 19/268

Bi ton phn vic ng dng ca nguyn l th t Mt cng ty nhn c hp ng gia cng m chi tit my J1, J2,...,Jm. Cng ty c n my gia cng ln lt l P1, P2, ...Pn. Mi chi tit u c th c gia cng trn bt k my no. Mt khi gia cng mt chi tit trn mt my, cng vic s tip tc cho n lc hon thnh, khng th b ngt ngang. gia cng mt cng vic Ji trn mt my bt k ta cn dng mt thi gian tng ng l ti. Nhim v ca cng ty l phi lm sao gia cng xong ton b n chi tit trong thi gian sm nht. Chng ta xt bi ton trong trng hp c 3 my P1, P2, P3 v 6 cng vic vi thi gian l t1=2, t2=5, t3=8, t4=1, t5=5, t6=1. Ta c mt phng n phn cng (L) nh hnh sau :

Theo hnh ny, ti thi im t=0, ta tin hnh gia cng chi tit J2 trn my P1, J5 trn P2 v J1 ti P3. Ti thi im t=2, cng vic J1 c hon thnh, trn my P3 ta gia cng tip chi tit J4. Trong lc , hai my P1 v P2 vn ang thc hin cng vic u tin mnh...S phn vic theo hnh trn c gi l lc GANTT. Theo lc ny, ta thy Trang 20/268

thi gian hon thnh ton b 6 cng vic l 12. Nhn xt mt cch cm tnh ta thy rng phng n (L) va thc hin l mt phng n khng tt. Cc my P1 v P2 c qu nhiu thi gian rnh. Xy dng mt thut ton tm mt phng n ti u L0 cho bi ton ny l mt bi ton kh, i hi cc k thut phc tp m chng ta s khng cp y. By gi ta xt n mt thut gii Heuristic rt n gin gii bi ton ny. 1. Sp xp cc cng vic theo th t gim dn v thi gian gia cng. 2. Ln lt sp xp cc vic theo th t vo my cn d nhiu thi gian nht. Vi t tng nh vy, ta s c mt phng n L* nh sau :

R rng phng n L* va thc hin cng chnh l phng n ti u ca trng hp ny v thi gian hon thnh l 8, ng bng thi gian ca cng vic J3. Ta hy vng rng mt thut gii Heuristic n gin nh vy s l mt thut gii ti u. Nhng tic thay, ta d dng a ra c mt trng hp m thut gii Heuristic khng a ra c kt qu ti u.

Nu gi T* l thi gian gia cng xong n chi tit my do thut gii Heuristic a ra v To l thi gian ti u th ngi ta chng minh c rng

Vi kt qu ny, ta c th xc lp c sai s m chng ta phi gnh chu nu dng Heuristic thay v tm mt li gii ti u. Chng hn vi s my = 2 (n=2) ta c

Trang 21/268

, v chnh l sai s cc i m trng hp trn gnh chu. Theo cng thc ny, s my cng ln th sai s cng ln. Trong trng hp n ln th 1/(3n) xem nh bng 0. Nh vy, sai s ti a m ta phi chu l T* ? 4/3To, ngha l sai s ti a l 33%. Tuy nhin, kh tm ra c nhng trng hp m sai s ng bng gi tr cc i, d trong trng hp xu nht. Thut gii Heuristic trong trng hp ny r rng cho chng ta nhng li gii tng i tt.

Bi ton Ta-canh - ng dng ca hm Heuristic Bi ton Ta-canh tng l mt tr chi kh ph bin, i lc ngi ta cn gi y l bi ton 9-puzzle. Tr chi bao gm mt hnh vung kch thc 3x3 . C 8 c s, mi c mt s t 1 n 8. Mt cn trng. Mi ln di chuyn ch c di chuyn mt nm cnh trng v pha trng. Vn l t mt trng thi ban u bt k, lm sao a c v trng thi cui l trng thi m cc c sp ln lt t 1 n 8 theo th t t tri sang phi, t trn xung di, cui dng l trng.

Cho n nay, ngi ta vn cha tm c mt thut ton chnh xc, ti u gii bi ton ny. Tuy nhin, cch gii theo kiu Heuristic li kh n gin. Nhn xt rng : ti mi thi im ta ch c ti a 4 c th di chuyn. Vn l ti thi im , ta s chn la di chuyn no? Chng hn hnh trn, ta nn di chuyn (1), (2), (6) hay (7)? Gi T0 l trng thi ch ca bi ton v TK l trng thi hin ti. Ta gi V(i,j) l con s nm (i,j), vi trng V(i,j)=0.

Ta t d(i,j) l s cn di chuyn a con s (i,j) v ng v tr ca n trng thi TO . Hm FK ti trng thi TK bng tng ca cc d(i,j) sao cho v tr (i,j) khng phi l trng. Nh vy i vi trng thi hnh ban u, hm FK s c gi tr l FK = 2+1+3+1+0+1+2+2=12. Mt cch tng qut, gi tr hm FK ti trng thi TK s l

Trang 22/268

T trng thi TK , ta c ti a 4 cch di chuyn.Ta k hiu cc trng thi mi ny ln lt l TKT ,TKD , TKTr ,TKP ng vi con s trn, di, tri, phi trng hin ti b di chuyn. Chng hn, ng vi hnh ban u, ta c th c 4 trng thi mi nh hnh bn. ng vi cc trng thi mi, ta cng s c cc hm FK tng ng l FKT ,FKD ,FKTr ,FKP. Da vo 4 con s ny, ta s chn hng i c hm FK tng ng l nh nht, trong trng hp bng nhau ta chn ngu nhin mt trong s cc ng . Vi v d, ta s chn di chuyn mang s (2) v FKD l nh nht. Sau khi di chuyn mt , bi ton chuyn v mt trng thi TK mi. Ta li thc hin qu trnh trn cho n lc t c trng thi ch.

Hm FK trong v d ca chng ta l mt dng hm Heuristic. Tt nhin, gii c bi ton ny trong nhng tnh hung kh, hm FK cn c nhiu sa i. I.GII THIU NGN NG PASCAL PASCAL l ngn ng lp trnh cp cao c gio s Niklaus Wirth trng i hc K thut Zurich (Thy s) thit k v cng b vo nm 1971. ng t tn cho ngn ng ca mnh l Pascal tng nh nh ton hc ni ting ngi Php th k 17: Blaise Pascal, ngi sng ch ra chic my tnh c kh u tin ca nhn loi. Qua thi gian s dng, Pascal ngy cng c ng o ngi dng nh ga cao, v tr thnh mt trong cc ngn ng tho chng ph bin nht hin nay. Thnh cng ca ngn ng Pascal l ch: n l ngn ng u tin a ra v th hin c khi nim lp trnh c cu trc. tng v mt chng trnh c cu trc xut pht t suy ngh cho rng c th chia mt bi ton ln, phc tp thnh nhiu bi ton nh, n gin hn. Nu mi bi ton nh c gii quyt bng mt chng trnh con, th khi lin kt cc chng trnh con ny li s to nn mt chng trnh ln gii quyt c bi ton ban u?. Bng cch chia mt chng trnh thnh cc chng trnh con nh vy, ngi tho chng c th lp trnh gii quyt ring l tng phn mt, tng khi mt, hoc c th t chc nhiu ngi cng tham gia, mi ngi ph trch mt vi khi. c bit khi phi thay i hay sa cha trong mt khi th iu s t nh hng n cc khi khc. Tnh cu trc ca ngn ng Pascal cn th hin trong vic t chc cc cu lnh v t chc d liu. T cc lnh c, ngi tho chng c th nhm chng li vi nhau v t gia hai t kha Begin v End to thnh mt cu lnh mi phc tp hn gi l cu lnh ghp. n lt mnh, hai hay nhiu lnh ghp li c th c nhm li to thnh mt cu lnh ghp phc tp hn na,.v.v. Tng t nh th, ngn ng Pascal cng cho php xy dng cc kiu d liu phc tp hn t cc kiu d liu c. Pascal l mt ngn ng khng ch cht ch v mt c php m cn cht ch v mt d liu. Mi bin, mi hng tham gia trong chng trnh lun c mt kiu d liu xc nh v ch nhn nhng ga tr c cng kiu d liu vi n. iu ny buc ngi lp trnh phi nm chc c php v lun ch n tnh tng thch ca cc biu thc v mt kiu Trang 23/268

d liu. Chnh v th, tho chng bng ngn ng Pascal l mt c hi tt khng ch rn luyn t duy m cn rn luyn tnh cn thn v chnh xc. Ngy nay, Ngn ng Pascal c dng vit cc chng trnh ng dng trong nhiu lnh vc. Vi vn phm sng sa, d hiu, vi kh nng mnh, Pascal c xem l ngn ng thch hp nht ging dy cc trng ph thng v i hc. II.CC PHN T C BN CA NGN NG PASCAL 1.Tp k t c bn Mi ngn ng u c xy dng t mt tp k t no . Nhiu k t nhm li vi nhau to nn cc t. Nhiu t lin kt vi nhau theo mt qui tc ng php nht nh (gi l vn phm) th to nn cc mnh . Trong cc ngn ng tho chng, mnh ?cn c gi l cu lnh. Mt tp hp cc cu lnh c sp xp theo mt trt t nht nh nhm ch th cho my cc thao tc phi thc hin to thnh mt chng trnh. Cc chng trnh c son tho bi ngi tho chng v c lu tr trn a di dng cc tp tin. Ngn ng Pascal c xy dng trn b k t c bn, gm: cc ch ci la tinh: A, B, C,...,Z, a, b, c,..., z cc ch s :0, 1, 2, 3, 4, 5, 6, 7, 8, 9 cc k hiu c bit: +, -, *, /, =, <, {, }, [, ], %, $, &, #, ... k t gch ni _ v k t trng ( space) Cc ch rp: , , , ... khng thuc b k t ca Pascal. 2. T kha ( key word ): C mt s t c Pascal dnh ring cho vic xy dng cc cu lnh, cc khai bo, cc php tnh,... gi l t kha. Vic s dng cc t kha i hi phi tun th ng quy tc ra, v c bit l ngi lp trnh khng c t mt tn mi (tn bin, tn hng, tn hm, tn th tc,...) trng vi mt trong cc t kha. Di y l danh sch cc t kha ca Pascal : absolute, and, array, begin, case, const, div, do, downto, else, end, file, for, forward, function, goto, if, implementation, in, inline, interface, interrupt, label, mod, nil, not, of, or, packed, procedure, program, record, repeat, set, shl, shr, string, then, to, type, unit, until, uses, var, while, with, xor Cc t kha c th vit di dng ch hoa hay ch thng hay xen k ch hoa vi ch thng u c. V d vit begin hay Begin hay BEGIN l nh nhau. 3. Tn (identifier): Cc bin, cc hng, cc hm, cc th tc, ... c s dng trong chng trnh u cn phi t tn, cn gi l nh danh hay danh hiu. Cc tn ny do ngi tho chng t t v phi m bo ng quy tc: tn phi bt u bng ch ci, k c th l ch ci, ch s, hay du gch ni _. Tn khng c t trng vi t kha. Chiu di ca tn ti a l 127 k t. Thng thng tn nn t ngn gn v c tnh gi nh. Di y l v d v cc tn c t ng: Delta, X1, X2, i, j , Chuc_vu, Luong, So_luong, Don_gia. Cn cc tn: 3ABC, In, Chu vi, Ma-so l sai v : Trang 24/268

3ABC: bt u bng s Chu vi: c cha k t trng Ma-so : k t - l du tr ch khng phi gch ni. In : trng vi t kha In Cng ging nh t kha, Tn khng phn bit vit hoa hay vit thng. V d vit X1 hay x1 cng ch l mt tn thi. Trong Pascal c mt s tn c t sn ri, gi l tn chun, chng hn : Abs, Arctan, Boolean, Byte, Char, Cos, Copy, Delete, Eof, False, Longint, Ord, Integer, Real, Readln, Writeln, True, Text, ... Mc d ngi tho chng c th t mt tn mi trng vi mt trong cc tn chun, song, nhm ln, chng ta nn trnh iu ny. III. CU TRC CHUNG CA CHNG TRNH PASCAL 1. V d m u : c mt ci nhn tng quan trc khi i vo cc vn chi tit ca ngn ng Pascal, xin hy cng xem chng trnh sau: 1.1. Bi ton v chng trnh : Vit chng trnh nhp vo di hai cnh ca mt hnh ch nht, tnh v in ln mn hnh din tch v chu vi ca hnh ch nht . Nu gi hai cnh ca hnh ch nht l a v b, gi din tch v chu vi ln lt l S v P th cng thc tnh S v P l: S = a.b P = 2(a+b) Chng trnh c th nh sau :OGRAM VIDU51; { Tinh dien tich va chu vi hinh chu nhat } Uses CRT; Var a, b, S, P : Real ; Begin Clrscr; Write( Nhap chieu dai : ); Readln(a); Write( Nhap chieu rong : ); Trang 25/268

Readln(b); S:=a*b; P:=2* (a+b); Writeln ( Dien tich = , S:8:2); Writeln ( Chu vi = , P:8:2); Readln; End. Chay <VD51.EXE> Chp chng trnh ngun VD52.PAS 1.2. Gii thch cc dng trong chng trnh : { Tinh dien tich va chu vi hinh chu nhat } y l li ch gii, nu ln mc ch ca chng trnh. Uses CRT ; Khai bo s dng th vin CRT ca Turbo Pascal. Var a, b, S, P : Real ; Khai bo 4 bin a, b, S, P c kiu d liu l s thc (Real). Begin Lnh bt u chng trnh Clrscr ; Lnh xa mn hnh. Write( Nhap chieu dai: ); Lnh in ln mn hnh cu Nhap chieu dai: nhm nhc ngi dng nhp vo s o chiu di. Readln(a) ; Lnh nhp d liu cho bin a. Write( Nhap chieu rong : ); Lnh in ln mn hnh cu Nhap chieu rong : nhm nhc ngi dng nhp vo s o chiu rng. Readln(b); Trang 26/268

Lnh nhp d liu cho bin b. S := a* b; Lnh tnh din tch S ca hnh ch nht. P := 2*(a+b); Tng t, lnh tnh chu vi P ca hnh ch nht. Writeln(Dien tich = , S:8:2); Lnh ny in ln mn hnh cu Dien tich= , k in ga tr ca bin S. Ch th S:8:2 n nh dnh 8 ct trn mn hnh in ga tr ca S, trong c 2 ct in phn thp phn. Writeln( Chu vi = , P:8:2); Lnh ny in ln mn hnh cu Chu vi = , k in ga tr ca chu vi P c c thy 8 ch s, trong c 2 s phn l. Readln; Lnh dng mn hnh xem kt qa chy chng trnh. End. Du hiu kt thc chng trnh. 1.3. Chy minh ha chng trnh : chy chng trnh mu ni trn, hy nhp vo mc Chay<VD51.EXE> cui chng trnh . Nhng trc ht xin xem phn hng dn sau y: Khi chng trnh bt u chy, trn mn hnh hin ln li nhc : Nhap chieu dai : Bn cn nhp s o chiu di t bn phm, chng hn g s 8 v Enter : Nhap chieu dai : 8 Mn hnh hin tip li nhc : Nhap chieu rong : Bn nhp s o chiu rng, chng hn g s 6 v Enter : Nhap chieu rong : 6 Chng trnh s tnh ton v in kt qa ln mn hnh nh sau : Dien tich = 48.00 Chu vi = 28.00 kt thc, hy g phm Enter . Trang 27/268

2. Cu trc chung ca chng trnh Pascal : Chng trnh l mt dy cc cu lnh ch th cho my cc cng vic phi thc hin. Mt chng trnh Pasccal y gm ba phn chnh : Phn tiu Phn khai bo Phn thn chng chnh { Phn tiu } { Phn khai bo } Uses ... {khai bo s dng th vin chun} Label ... {khai bo nhn} Const ... {khai bo hng} Type ... {khai bo kiu d liu} Var ... { khai bo bin} Function ... { khai bo cc chng trnh con} Procedure ... {hm v th tc } { Phn thn chng trnh } Begin { Cc lnh } nd. Hnh 5.1: Cu trc ca chng trnh Pascal 2.1. Phn tiu chng trnh : Phn ny bt u bng t kha Program, sau t nht l mt khong trng v mt tn do ngi dng t t, cui cng kt thc bng du chm phy ;. V d : Program Btap1; hoc : Program Giai_pt_bac2; Phn tiu chim mt dng, cn gi l phn u ca chng trnh, n c th khng c cng c. 2.2. Phn khai bo : Phn khai bo c nhim v gii thiu v m t cc i tng, cc i lng s tham gia trong chng trnh, ging nh ta gii thiu cc thnh vin trong mt cuc hp. N gm khai bo s dng th vin chun, khai bo nhn, khai bo hng, Trang 28/268

khai bo kiu d liu mi, khai bo bin, v khai bo cc chng trnh con. Ty theo yu cu c th m mi khai bo ny c th c hoc khng. Khai bo nhn (Label) ch dng khi trong chng trnh c s dng lnh nhy v iu kin GOTO. Nhc im ca lnh GOTO l lm mt tnh cu trc ca chng trnh, trong khi c th thay th n bng cc cu lnh c cu trc ca Pascal. V th, rn luyn k nng lp trnh c cu trc, chng ta s khng dng lnh GOTO trong gio trnh ny. Cc th tc v hm c dng khi c nhu cu thit k cc chng trnh ln, phc tp. i vi cc bi ton nh, n gin, vic s dng chng trnh con l cha cn thit. Chi tit v phn ny s c trnh by k trong bi 12. Sau y ta im qua vi nt v cc khai bo thng dng nht. a) Khai bo hng v khai bo bin : Bin l i lng c ga tr thay i c, cn Hng l i lng c ga tr khng i, chng c dng trong chng trnh lu tr cc d liu, tham gia vo cc biu thc tnh ton v cc qu trnh x l trong my. Vic khai bo c tc dng xc nh tn v kiu d liu ca bin hay hng. Bin v Hng l nhng thnh phn kh c th thiu c trong mt chng trnh. khai bo bin ta dng t kha Var, khai bo hng ta dng t kha Const, v d: Const N=10 ; Var x, y : Real ; i, k : Integer ; b) Khai bo (nh ngha) mt kiu d liu mi: Ngoi cc kiu d liu m bn thn ngn ng c sn nh kiu thc, kiu nguyn, kiu k t, kiu lgic,.v.v. ngi dng c th t xy dng cc kiu d liu mi phc v cho chng trnh ca mnh, nhng phi m t sau t kha TYPE. Khi nh ngha mt kiu d liu mi, ta c th khai bo cc bin thuc kiu d liu ny. V d, ta nh ngha mt kiu d liu mi c tn l Mang : Type Mang = Array[1..10] of Real; By gi c th khai bo hai bin A v B c kiu d liu l kiu Mang : Var A, B : Mang ; c) Khai bo s dng th vin chun: Turbo Pascal c sn mt s hm v th tc chun, chng c phn thnh tng nhm theo chc nng mang cc tn c trng, gi l cc th vin hay n v chng trnh ( Unit ), nh : Crt, Graph, Dos, Printer, .v.v. . Mun s dng cc hm hay th tc ca th vin no, ta phi khai bo c s dng th vin , li khai bo phi ngay sau phn tiu ca chng trnh theo c php : Uses danhschth vin ; V d: do th tc Clrscr nm trong th vin CRT, nn nu trong chng trnh m c dng lnh Clrscr, th phi khai bo : Trang 29/268

Uses CRT ; Mun s dng c hai th vin CRT v GRAPH, ta khai bo : Uses CRT, GRAPH ; 2.3. Phn thn chng trnh : y l phn ch yu nht ca mt chng trnh, bt buc phi c. Thn chng trnh bt u bng t kha BEGIN v kt thc bng END. (c du chm cui). Gia khi BEGIN v END l cc lnh. Mi lnh phi kt thc bng du chm phy ;. Mt lnh, nu di, th c th vit trn hai hay nhiu dng, v d : Writeln( Phuong trinh co hai nghiem la X1= , X1:8:2, va X2= , X2:8:2) ; Ngc li, mt dng c th vit nhiu lnh min l c du ; phn cch cc lnh , chng hn : Write( Nhap A, B, C: ) ; Readln(A,B,C) ; Thng thng mi dng ch nn vit mt lnh d c, d kim tra li. 3. V d 2 : kt thc phn ny, xin gii thiu chng trnh cho php nhp vo h tn, m s, cc im Ton, L ca mt sinh vin, tnh im trung bnh theo cng thc :

ri in H tn, m s, cc im Ton, L v im trung bnh ca sinh vin ln mn hnh. PROGRAM VIDU52; Uses CRT; Var Ho_ten, Maso : String[20]; Toan, Ly, Dtb : Real; Begin Write( Nhap Ho va ten : ); Readln(Ho_ten); Write( Nhap ma so : ); Readln(Maso); Write( Nhap diem Toan : ); Readln(Toan); Write( Nhap diem Ly : ); Readln(Ly); Dtb:= (Toan+Ly) / 2; { In ln mn hnh cc d liu v sinh vin } Trang 30/268

TextMode(C40); { t mode C40 cho mn hnh } TextBackGround(Green); { t mu nn l Green } TextColor(Red); { t mu ch l Red} Clrscr ; Writeln( KET QUA THI CUA SINH VIEN:); Writeln(Ho va ten : , Ho_ten); Writeln(Ma so : , Maso); Writeln(Diem Toan : , Toan:3:1); Writeln(Diem Ly : , Ly:3:1); Writeln(Diem Tbinh : , Dtb:3:1); Readln; TextMode(C80); { t tr li mode C80 cho mn hnh} END. Chy<VD52.EXE> Chp chng trnh ngun VD52.PAS Trong chng trnh ny c s dng bn th tc u thuc th vin CRT, l : Clrscr : xa mn hnh TextMode(C40) v TextMode(C80) : chuyn mn hnh sang ch b ngang 40 ct (ch to) hoc 80 ct (ch bnh thng). TextBackGround(tnmu) : t li mu nn ca mn hnh. TextColor(tnmu) : t li mu ch trn mn hnh. Tn mu c th l mt s t 0 n 15 hoc c th vit trc tip bng ting Anh nh : White, Black, Green, Red, Blue, ... Bn c th chy minh ha chng trnh ny bng cch nhp chn vo mc Chay<VD52.EXE> cui chng trnh . Cch nhp d liu tng t nh v d trc. Chng hn ta nhp h tn l Nguyen Van An, m s l 1990064, im ton l 6, im l l 7 nh di y : Nhap Ho va ten : Nguyen Van An Nhap ma so : 1990064 Nhap diem Toan : 6 Nhap diem Ly : 7 Trang 31/268

Chng trnh s tnh im trung bnh v in kt qa nh sau: KET QUA THI CUA SINH VIEN: Ho va ten : Nguyen Van An Ma so : 1990064 Diem Toan : 6.0 Diem Ly : 7.0 Diem Tbinh : 6.5 Hy Enter kt thc v tr li mn hnh ban u. son v chy c mt chng trnh nh trn cn phi bit s dng phn mm Turbo Pascal ( vit tt l TP ). IV. S DNG PHN MM TURBO PASCAL 1. Gii thiu Turbo Pascal: Turbo Pascal l mt phn mm c nhim v gip ngi tho chng son tho v thc hin cc chng trnh vit bng ngn ng Pascal. Cc chc nng chnh ca Turbo Pascal l : Cung cp mt h son tho vn bn cho php ngi tho chng son v sa chng trnh d dng, tin li. Gip ngi tho chng tm cc li v vn phm trong chng trnh. Dch (compiler) chng trnh vit bng ngn ng Pascal thnh mt chng trnh vit di dng m my. Thc hin hay chy ( Run ) chng trnh vit bng ngn ng Pascal. Cung cp cc th vin c sn nhiu hm (function) v th tc (procedure) chun mang li cho ngi tho chng nhiu cng c hu ch, lm gim bt khi lng phi lp trnh. L sn phm ca hng Borland ni ting, Turbo Pascal (vit tt l TP) khng ngng c ci tin, n nay ra i version 7.0. Tuy nhin, mc tho chng cn bn, ngi ta vn thch dng phin bn 5.5 hoc 6.0 v n n gin m dng, tc nhanh hn, thch hp vi cc my c cu hnh cha mnh. 2. Khi ng Turbo Pascal: Trong phn ny s trnh by cch s dng Turbo Pascal 6.0. Ngi c c th t mnh suy ra cch s dng Turbo Pascal 5.5 hay 7.0, v v c bn chng ging vi phin bn 6.0. 2.1. Cc tp tin chnh ca Turbo Pascal: chy c Turbo Pascal 6.0, ch cn hai tp tin sau l : TURBO.EXE : tp tin chnh ca TP TURBO.TPL : tp tin cha cc th vin ca TP Nu mun v ha th phi c thm cc tp tin: GRAPH.TPU, tp tin cha th vin ha Trang 32/268

*.BGI : cc tp tin mn hnh ha *.CHR : cc tp tin to kiu ch Trong cc tp tin mn hnh ha th thng thng ch cn tp tin EGAVGA.BGI l , v ngy nay phn ln mn hnh u c kiu EGA hay VGA. Nu mun xem hng dn s dng Turbo Pascal th cn c thm tp tin TURBO.HLP Thng thng cc tp tin ny c trong mt th mc ring c tn l TP, hay TP6. Di y ta gi thit th mc cha Turbo Pascal l TP nm ngay ti gc ca a cng C hay a mm A. 2.2. Khi ng Turbo Pascal: a) Nu bn lm vic trn my c nhn hoc trong mt mng c h iu hnh l MSDOS th sau khi khi ng my xong: Trng hp d nht l my ca bn thit lp sn ng dn n th mc TP cha Turbo Pascal th bn ch cn g mt lnh : TURBO Trn mn hnh s hin ra ca s son tho nh hnh 5.2 . Nu g lnh trn m ca s Turbo Pascal khng hin ra, do my ca bn cha thit lp ng dn n th mc TP, trng hp ny bn phi di chuyn vo th mc TP bng lnh : CD \TP ri sau g tip : TURBO

b) Nu bn lm vic trn my c nhn hoc trong mt mng c h iu hnh l WINDOWS 95 hoc mi hn, th sau khi khi ng WINDOWS 95 :

Trang 33/268

Trng hp c sn mt Shortcut cha Turbo Pascal trn Desktop : hy nhp left mouse hai ln lin tip vo biu tng Shortcut ca Turbo Pascal. Trng hp khng c sn mt Shortcut cha Turbo Pascal: hy chn lnh Start, chn tip lnh Run, ri g vo ng dn y ca tp tin TURBO.EXE, chng hn: C:\TP\TURBO.EXE , nu khi ng TP t a C. A:\TP\TURBO.EXE , nu khi ng TP t a A. 2.3. Ca s Turbo Pascal v cch chn lnh : Trong ca s ny, dng trn cng l mt thc n ngang, lit k chn nhm lnh chnh ca TP. Mun chn mt lnh trong thc n ny, c th tin hnh theo mt trong hai cch: Cch mt: G phm F10. Lc ny, trn thc n xut hin mt khung sng (thng l mu xanh). Mun chn lnh no th g cc phm mi tn , di khung sng n lnh ri Enter. Mt thc n con ca lnh va chn hin ra, gi l thc n dc. V d, khi chn lnh File, ta c thc n con nh sau:

chn mt lnh trong thc n dc, hy g cc phm mi tn , di khung sng n lnh ri Enter. Khi khng mun chn lnh no th g phm ESC tr v vng son tho. Ngoi cch dng phm F10 ni trn, cng c th chn mt lnh trong thc n ngang bng cch g ng thi phm Alt vi phm ch ci u tin ca tn lnh mun chn. V d, mun chn lnh File th g ng thi hai phm Alt v F (vit tt l Alt-F), tng t, mun chn lnh Compile th g Alt-C. Cch hai: dng phm "nng": C mt s lnh c gn cho nhng phm c bit gi l phm "nng", v d lnh Open: F3, lnh Save : F2, lnh Exit : Alt-X. thc hin nhng lnh ny, thay v phi chn n t trong thc n, ta ch cn g phm nng tng ng vi n. V d, thay v chn lnh Open th g phm F3, thay v chn lnh Save th g phm F2,... Di thc n ngang l vng son tho dng g chng trnh vo. u ca vng ny hin tn ca tp tin ang son, v nu ngi tho chng cha t tn th TP s t gim mt tn mc nhin l NONAME00.PAS. Trang 34/268

Dng cui cng tm tt mt s phm " nng" hay dng, nh phm F1 xem hng dn, phm F2 lu tp tin ln a, phm F3 dng m xem mt tp tin, phm F10 khi ng thc n,.v.v. 2.4. Thot khi Turbo Pascal: Chn lnh File trong thc n ngang, chn tip lnh Exit trong thc n dc (vit gn l chn lnh File/ Exit). Nu lm vic trong TP 5.5 th chn lnh File/ Quit. Hoc g cp phm nng Alt-X 3. Cc bc thc hin mt chng trnh Pascal: son v chy mt chng trnh Pascal trong Turbo Pascal, nn tin hnh cc bc nh sau: Bc 1: Khi ng Turbo Pascal Bc 2: t tn cho tp tin s son : Chn lnh File/ Open (nu lm vic trong TP 5.5 th chn lnh File/ Load) hoc g phm F3, sau g tn tp tin (khng cn g phn ui) vo trong khung va hin ra, v d :

Khi tn BTAP1.PAS s hin ra u vng son tho. ui PAS c TP t ng gn thm vo. Tp tin BTAP1.PAS s c lu trong th mc hin thi. Nu mun tp tin BTAP1.PAS c lu ln a A th khi nhp tn tp tin ta nn g thm tn a ng trc, v d :

Bc 3: Son tho ( g ) chng trnh . Bn hy g chng trnh mu sau vo vng son tho ca Turbo Pascal : Trang 35/268

Bc 4: Dch v sa li: Chn lnh Compile/ Compile (hoc g cp phm Alt-F9, hay n gin ch g phm F9 cng c). My s dch chng trnh sang m my, nu gp li th dng v hin thng bo li mu u mn hnh, ng thi con tr t v tr c li. Ngi tho chng phi t mnh sa li, ri g Alt-F9 dch v sa li tip cho n khi ht li. Du hiu cho bit vic dch xong l mn hnh xut hin ca s thng bo c dng ch c trng l:

Bc 5: Lu tr chng trnh ln a: chn lnh File/ Save hoc g phm F2. Bc 6: Chy th chng trnh: Chn lnh Run/ Run hoc g phm nng Ctrl-F9 (vit tt l ^F9). Mi ln chy th, ta cn nhp mt b d liu c th v kim tra xem kt qa in ln mn hnh c ng khng. Cn phi chy th mt s ln ng vi cc b d liu khc nhau. Nu kt qa cc ln chy th u ng th chng trnh hon thnh. Ngc li, nu c mt ln chy th cho kt qa sai th chng trnh cha n, cn phi sa li thut ton ca chng trnh. V d : chy th chng trnh mu trn, hy g ^F9 v nhp vo chiu di 10, chiu rng 7, nh sau : Nhap chieu dai : 10 Nhap chieu rong : 7 Chng trnh s in kt qa ln mn hnh : Dien tich = 70.00 Chu vi = 34.00 Trang 36/268

Hy Enter tr li mn hnh son tho. Vic chy th vi b d liu khc, xin dnh cho c gi. Bc 7: Nu chng trnh chy ng th g phm F2 lu n ln a ln cui. By gi c th lp li t bc 2 son mt chng trnh mi. 4. M xem mt chng trnh c : Mun xem li mt chng trnh c trn a, hy chn lnh File/ Open hoc g phm F3, trong khung c tiu u l Name, g vo *.PAS (hoc A:*.PAS nu tp tin nm trn a A), mt danh sch cc tp tin c ui PAS s hin ra trong khung pha di cho ta chn ( hnh 5.4) :

Dng cc phm mi tn , , , di chuyn v t thanh sng vo tn mun chn ri Enter. Ni dung tp tin ny s c a ln mn hnh cho chng ta xem, sa, chy th, .v.v. Ch rng trong TP t 6.0 tr ln, a con tr t hp Name trn xung hp Files di, dng phm Tab, t hp File v li hp Name : g Shift_Tab . 5. Lu tp tin sang a khc : Khi cn ghi tp tin ang son t a cng sang a A, c th lm nh sau: Chn lnh File/ Save as (nu lm vic trong TP 5.5 th chn lnh File/ Write to...). Trong khung hin ra , hy g tn tp tin vo, nh g thm tn a A: ng trc: Name: A:\BTAP.PAS T nay, mi khi g phm F2 hoc chn lnh File/ Save, tp tin BTAP1.PAS s c ghi ln a A. 6. Mt vi k thut trong son tho : 6.1. Thao tc trn khi: Ta gi khi l mt on vn bn gm mt hay nhiu dng lin tip. K t u tin ca khi gi l u khi, k t cui cng ca khi gi l cui khi. Di y l mt khi gm hai dng lnh: Trang 37/268

Write( Nhap chieu dai va chieu rong hinh chu nhat: ); Readln(a,b); a) nh du khi: a con tr v u khi Mt tay phm Shift, trong khi tay kia g cc phm mi tn , , , ko vng sng ph n cui khi. Nu lm vic trong TP 5.5 th nh du khi bng cch: a con tr v u khi, g ^K_B, sau a con tr v cui khi, g ^K_K. (Cch g ^K_B: mt tay phm Ctrl trong khi tay kia g lin tip hai phm K v B). b) Sao chp khi: nh du khi cn sao chp a con tr n ni cn chp ti G lnh ^K_C c) Di chuyn khi: nh du khi cn di chuyn a con tr n ni cn chuyn khi ti G lnh ^K_V d) Xa khi: nh du khi cn xa G lnh ^K_Y e) Che hoc hin li khi nh du : lnh ^K_H 6.2. Cc phm lnh son tho thng dng: Phm Home : a con tr v u dng hin thi Phm End : a con tr v cui dng hin thi Phm Delete : xa k t ngay ti v tr con tr. Nu con tr ang ng cui ca dng trn m g phm Delete th s ni dng di vo cui dng trn. Phm Back Space ( l phm mi tn nm ngay pha trn phm Enter) : xa k t bn tri con tr. Nu con tr ang ng u ca dng di m g phm Back Space th s ni dng di vo cui dng trn. Cp phm Ctrl_Y : xa ton b dng hin thi v n cc dng di ln. Nhm phm Ctrl_Q_Y : xa t v tr con tr n cui dng. Cc phm , , , : di con tr theo hng mi tn. Trang 38/268

Phm Insert : m hoc tt ch vit chn. ch vit chn, con tr mn hnh c dng bnh thng, tt ch vit chn, con tr c kch thc ln gp 4 ln bnh thng. (Trong TP 5.5, ch vit chn hay tt vit chn c nhn bit bng vic ch Insert c hin ra hay khng hin ra u ca ca s son tho). Phm Enter : Trong ch vit chn: g Enter c tc dng a con tr xung u dng di, do ton b cc ch ng sau con tr (nu c) s b ct xung dng di. Khi con tr ang ng u mt dng m Enter th s to ra mt dng trng ngay ti v tr . Nu ch vit chn l tt th mi khi g phm Enter, con tr s v u ca dng hin thi (dng ang cha con tr), ch khng xung dng di na. Ch : Trong Turbo Pascal khng dng ch c du ting Vit. Tuy nhin trong cc chng trnh mu gio trnh ny thnh thong vn vit nhng ch c du l d c, d hiu. Khi son trong Turbo Pascal xin hy b du i. V. CU HI TRC NGHIM Trong cc cu hi di y, hy chn mt cu tr li thch hp nht: Cu 1: Tnh cu trc ca ngn ng Pascal c th hin : a) trong vic t chc cc d dtu; b) trong vic t chc cc cu lnh; c) trong vic t chc chng trnh; d) c ba mc a), b), c) ; Cu 2: iu g lm cho Pacal c nh ga cao v tr thnh mt trong nhng ngn ng tho chng ph bin nht hin nay ? a) N l ngn ng u tin a ra v th hin c khi nim lp trnh c cu trc.; b) N l mt ngn ng cht ch c v mt c php v v mt d liu; c) N l ngn ng c vn phm sng sa, d hiu, c kh nng mnh; d)C ba iu nu trong cc mc a), b), c) ; Cu 3: Khng nh no ng: a) VAR , BEGIN, end l cc t kha ca Pascal c khi nim lp trnh c cu trc.; b) Cc k hiu a , b , g , d u thuc b k t c bn ca Pascal; c) Var, begin, Integer, Real l cc t kha ca Pascal; d)VAR, Var, vaR, var l cc t kha khc nhau ca Pascal ; Cu 4: Tn no t Sai quy nh ca Pascal: a) Giai_Ptrinh_Bac_2; b) Ngaysinh; c) Noi sinh; d)Sv2000 ; Cu 5: Mc no c cc Tn u t ng quy nh ca Pascal: a) x1 , X-2 ; b) Xx1 , X2; c) CONST , X_234; d)X[1], x2 ; Trang 39/268

Cu 6: Chn cu Sai : trong mt chng trnh Pascal, c th khng c : a) phn thn chng trnh ; b) phn khai bo bin; c) phn u chng trnh; d)phn khai bo hng ; Cu 7: Du hiu kt thc chng trnh Pascal l : a) End; b) END; c) end. d) End ! ; Cu 8: Trong Pascal, lnh no c tc dng xa mn hnh : a) CLRSSR ; b) CLRSR; c) Clrscl; d) Clrscr ; Cu 9: Trong Pascal, nu mun dng lnh xa mn hnh Clrscr th phi khai bo th no ngay sau phn tiu chng trnh : a) Uses CRT ; b) USES Graph; c) use CRT ; d) khng khai bo g ca ; Cu 10: Khng nh no Sai: trong Turbo Pascal, a) lu chng trnh ln a, g phm F2 hoc chn lnh File / Save ; b) m mt tp tin c, g phm F1; c) tm li c php ca chng trnh, g phm Alt_F9, hay F9 ; d) chy chng trnh, g phm ^F9 hoc chn lnh Run / Run ; VI. BI TP Cu 1. Son v chy th chng trnh trong v d m u mc 5.3.1 Cu 2. Son v chy th chng trnh trong v d 2 mc 5.3.3 Cu 3. Vit chng trnh nhp vo s o mt cnh v din tch ca hnh ch nht, tnh cnh kia v chu vi ca hnh ch nht. Cu 4. Vit chng trnh in ln mn hnh hai cu sau : " Chao cac ban ! " " Rat vui uoc lam quen voi cac ban ! " Cu 5. Vit chng trnh nhp hai s bt k x v y, tnh v in ln mn hnh tng x+y, hiu x-y v tch x*y ca hai s .

Trang 40/268

6.1. KHI NIM V KIU D LIU 6.1.1 Khi nim : Chc nng ca my in ton l x l cc thng tin. Cc thng tin c nhp v lu tr trong b nh ca my di cc dng khc nhau: c th l s, l ch, c th l hnh nh, m thanh,.v.v. m thut ng tin hc gi chung l d liu. Tnh a dng ca d liu i hi phi t chc v phn phi b nh thch hp lu tr v x l tt cc d liu. Ngn ng tho chng chia cc d liu thnh tng nhm ring trn xy dng mt s php ton to nn cc kiu d liu khc nhau, mi kiu d liu l mt tp hp cc ga tr m mt bin thuc kiu c th nhn. Khi mt bin c khai bo thuc kiu d liu no th my s dnh cho bin mt dung lng thch hp trong b nh c th lu tr cc ga tr thuc kiu d liu . 6.1.2 Phn loi kiu d liu : Cc kiu d liu trong ngn ng Pascal c chia ra thnh hai loi chnh: loi n gin v loi c cu trc. Mi kiu d liu n gin l mt tp cc gi tr c s c th t. V d kiu Integer gm cc s nguyn nm trong phm vi t -32768 n 32767 v c th t t nhin : -32768< ... < -1 < 0 < 1 < ... < 32767 , kiu l gic ch c hai ga tr False, True vi quy c False < True. Cc kiu d liu c cu trc c xy dng t cc kiu d liu n gin. Mi kiu d liu c cu trc l mt tp cc phn t thuc kiu d liu n gin c t chc li theo mt quy tc nht nh . Cc kiu d liu n gin gm c: kiu nguyn, kiu thc, kiu l gic, kiu k t, kiu lit k v kiu on con. Cc kiu d liu c cu trc gm c :kiu mng, kiu bn ghi, kiu tp hp v kiu tp tin . Ring chui k t (STRING) l mt kiu d liu c bit, va c tnh n gin li va c tnh cu trc. Mi chui c th xem l mt ga tr, nhng cng c th xem l mt mng cc ga tr kiu k t. V vy, vic s dng chui cng c hai mc khc nhau: mc n gin v mc c cu trc. Cc kiu d liu n gin cn c phn thnh hai loi: m c (Ordinal type) v khng m c. Kiu thc thuc loi khng m c, cc ga tr ca n dy c. Tt c cc kiu d liu n gin cn li : nguyn, k t, l gic, lit k v on con u thuc loi m c (cn gi l ri rc). Di y s ln lt trnh by k v 4 kiu d liu n gin chun v thng dng: kiu nguyn, kiu thc, kiu logic, kiu k t . Kiu chui c gii thiu c th s dng ngay mc n gin. 6.2. KIU S NGUYN 6.2.1. Cc kiu s nguyn : Tn kiu ShortInt Byte Integer Word LongInt Phm vi ga tr -128 .. 127 0..255 -32768 .. 32767 0 .. 65535 -2147483648 .. 2147483647 S byte 1 1 2 2 4

Trang 41/268

Bng 6.1 Ngoi kiu Integer l thng dng nht, cc s nguyn cn c chia ra thnh 4 kiu na l: Byte, Word, ShortInt v LongInt. Bng 6.1 lit k chi tit v tn gi, phm vi ga tr v di tnh theo n v byte ca tng kiu nguyn. Cc bin nguyn ch c th nhn cc ga tr l cc s nguyn nm trong phm vi ga tr ca bin . Khi gn cho mt bin mt s nguyn nm ngoi phm vi ca bin th my s bo li: "Const out of range". V d, cho khai bo : Var i : Byte; N : Integer; th cc lnh i y l ng: i:= 200; N:= -1500; cn cc lnh di y l b li : i:= -5; N:= 50000; c bit khng th gn mt s thc cho mt bin nguyn. Cu lnh sau l sai : N:= 12.5 ; Khi gp tnh hung ny, my s bo li "Type mismatch". Ch : Cc s nguyn h thp lc phn (h 16) c biu din bng cch vit thm du $ trc s, v d ba s di y : $A , $FF v $10 l cc s nguyn vit trong h 16. Chng c ga tr tng ng trong h 10 l: 10 , 255 v 16 6.2.2. Cc php ton s hc trn s nguyn: Php cng v tr : k hiu + v - nh thng l. Php nhn : k hiu bng du *, v d 4*2 cho kt qa l 8. Php chia : k hiu bng du / , v d 6/4 cho kt qa l 1.5. Php chia ly phn nguyn : k hiu bng t kha DIV. Php ly phn d nguyn ca php chia: k hiu bng t kha MOD. V d: 15 DIV 6 cho kt qa l 2. Trang 42/268

15 MOD 6 cho kt qa l 3. Cc php ton trn u cho kt qa l cc s nguyn, tr ra php chia ( / ) lun cho kt qa l mt s thc. V th nu N l mt bin nguyn, m gn : N:= 20/5; th my s bo li, bi v phi c ga tr kiu thc (=4.0) mc d phn l bng khng. Nhn xt : s nguyn N l chn nu N mod 2 = 0 (tc N chia ht cho 2), ngc li, l l nu N mod 2 <> 0. (du <> trong Pascal c ngha l khc nhau ).

Th t thc hin cc php ton cng ging nh thng l: Cc biu thc trong (...) c tnh trc tin K n l *, /, div, mod Sau cng l +, i vi cc php ton cng th t m ng lin nhau th php ton no ng trc c lm trc. V d: tnh biu thc sau : 15 mod (2 +4) * 20 div (10 div 4) + 40 mod ( 5* 3) =15 mod 6 * 20 div 2 + 40 mod 15 = 3 * 20 div 2 + 10 = 60 div 2 + 10 = 30 + 10 = 40 V d sau y l mt ng dng ca cc php ton div, mod : V d 6.1: Nhp mt s tin N ng, i ra xem c bao nhiu t 5 ng, bao nhiu t 2 ng, bao nhiu t 1 ng sao cho tng s t l t nht. V d N=43 = 8 t 5 + 1 t 2 + 1 t 1 . Cch tnh nh sau : S t 5 = 43 div 5 = 8 S tin d = 43 mod 5 = 3 S t 2 = S tin d div 2 = 3 div 2 =1 S t 1 = S tin d mod 2 = 3 mod 2 = 1 Di y l chng trnh c th : PROGRAM VIDU61; Trang 43/268

{ i tin } Var N, st5, st2, st1, sodu : LongInt; Begin Write( Nhap so tien : ); Readln(N); st5 := N div 5; Sodu := N mod 5; { tnh phn d } st2 := Sodu div 2; st1 := Sodu mod 2; Writeln( KET QUA DOI TIEN LA: ) ; Writeln( So to 5= , st5); Writeln( So to 2= , st2); Writeln( So to 1=, st1); Readln; End. Chy<VD61.EXE> Chp tp tin ngun <VD61.PAS> 6.2.3. Cc php ton so snh : Ngn ng Pascal c su php ton so snh c lit k trong bng 6.2 . K hiu = <> < <= > >= bng nhau khc nhau nh hn nh hn hoc bng ln hn ln hn hoc bng Bng 6.2 Kt qa ca cc biu thc so snh l mt ga tr lgic ng (TRUE) hoc Sai (FALSE). V d: Trang 44/268 ngha V d x=y x<>y x<y x<=y x>y x>=y

Biu thc 5*2=10 cho kt qa l TRUE. Biu thc 5+2 <> 7 cho kt qa l FALSE. Biu thc 6 div 2 > 10 div 3 cho kt qa l FALSE. 6.2.4. Cc php ton lgic trn s nguyn : Cc php tnh NOT, AND, OR, XOR x l cc bt nh phn c xc nh nh sau ( bng 6.3 ): NOT 1 = 0 NOT 0 = 1 1 AND 1=1 1 AND 0=0 0 AND 1=0 0 AND 0=0 1 OR 1=1 1 OR 0=1 0 OR 1=1 0 OR 0=0 1 XOR 1=0 1 XOR 0=1 0 XOR 1=1 0 XOR 0=0

Bng 6.3 Mi s nguyn c biu din trong my di dng mt dy cc bt nh phn. S kiu Integer c biu din bng 16 bit. V d, s 1 v s 2 c biu din trong my ln lt l : 0000 0000 0000 0001 0000 0000 0000 0011 Php ly NOT mt s nguyn s o tt c cc bt biu din s nguyn , tc l 0 thnh 1, cn 1 thnh 0. V d: NOT 1 = 1111 1111 1111 1110 NOT 2 = 1111 1111 1111 1100 Php ly AND, OR, XOR hai s nguyn c tin hnh bng cch AND, OR, XOR tng cp bt tng ng ca hai s , v d: 1 OR 2 = 0000 0000 0000 0011= 2 1 AND 2 = 0000 0000 0000 0001= 1 6.2.5. Cc php dch chuyn s hc SHR v SHL : N SHR k : dch cc bt ca s nguyn N sang phi i k bt. N SHL k : dch cc bt ca s nguyn N sang tri i k bt. C th chng minh c : N SHR k = N div 2k N SHL k = N * 2k V d: 120 shr 4 = 7, v : Trang 45/268

120 shr 4 = 120 div 24 = 120 div 16 = 7. 120 shl 3 = 960, v : 120 shl 3 = 120 * 23 = 120 * 8 = 960. Hai php ton SHR v SHL c dng khi mun tng tc tnh ton trn cc s nguyn.

6.2.6. Cc hm c i s nguyn : Hm PRED(k) : i s k nguyn, tr v s nguyn ng ngay trc k, tc l k-1 . V d: Pred (5) = 4, Pred (-6) = -7. Hm SUCC(k) : i s k nguyn, tr v s nguyn ng ngay sau k, tc l k+1 . V d: Succ (5) = 6, Succ (-6) = -5. Nhn xt : Lnh k:=k+1; tng ng vi lnh k:=Succ(k); Lnh k:=k-1; tng ng vi lnh k:=Pred(k); Hm ODD(k) : i s k nguyn, tr v ga tr logic l TRUE nu k l, l FALSE nu k chn. V d: Odd(15) = True Odd(4) = False. V d 6.2 : Nhp s nguyn N, nu N chn th in ra ch chn, nu N l th in ra ch le? Chng trnh nh sau : PROGRAM VIDU62; Var N : Integer; Begin Write(Nhap so N :); Readln(N); If Odd(N) = TRUE then write(N, La so le) else write(N, La so chan); Readln; End. Trang 46/268

Chy<VD62.EXE> Chp tp tin ngun <VD62.PAS> 6.2.7. Cc th tc c i s nguyn: C hai th tc kh thng dng l: Th tc INC(k) : tng k ln mt n v. V d, sau khi thc hin cc lnh : k:=5; Inc(k); th ga tr sau cng ca k l 6. Vy, lnh Inc(k); tng ng vi lnh k:=k+1; hay k:=Succ(k); Th tc DEC(k) : gim k i mt n v. V d, sau khi thc hin cc lnh : k:=5; Dec(k); th ga tr ca k s l 4. Vy, lnh Dec(k) ; tng ng vi lnh k:=k-1; hay k:=Pred(k); 6.3. KIU S THC 6.3.1 Kiu Real v cc kiu m rng : Kiu Real l kiu s thc thng dng nht dng biu din cc s thc x c tr tuyt i ? x? nm trong khong t ? 2.9*10-39 n 1.7*10+38. Nu ? x? > 1.7*10+38 th khng biu din x trong my c, cn nu x? < 2.9*10-39 th x c coi l bng 0. C hai cch biu din cc s thc: Cch 1: Vit bnh thng, trong du phy thp phn c thay bng du chm thp phn. V d: 45.0 -256.45 +122.08 Cch 2: Vit s di dng khoa hc : 1.257E+01 (c ga tr = 1.257*101 = 12.57 ) 1257.0E-02 (c ga tr = 1257*10-2 = 12.57 ) Trong dng ny s gm c hai phn, phn ng trc E gi l phn nh tr, c vit theo cch 1, phn ng sau E gi l phn bc, gm du cng hoc tr, tip n l mt s nguyn. S vit theo cch 1 cn gi l s c du chm thp phn c nh, s vit theo cch 2 cn gi l s c du chm thp phn di ng hay s dng khoa hc (Scientific). V d: Mun khai bo hai bin x, y kiu real, ta vit: Trang 47/268

Var x, y : Real; Ngoi kiu Real ra, cc s thc cn c 4 kiu m rng na l Single, Double, Extended va?Comp. Bng 6.4 nu chi tit v phm vi ga tr v s byte dng lu tr trong b nh ca tng kiu s thc. Tn kiu Real Single Double Extended Comp Phm vi ga tr 2.9*10-39 .. 1.7*1038 1.5*10-45 .. 3.4*1038 5.0*10-324 .. 1.7*10308 3.4*10-4932 .. 1.1*104932 -9.2*1018 .. 9.2*1018 Bng 6.4 Ch y? : Turbo Pascal thng ch lm vic vi mt kiu Real. Mun dng 4 kiu thc cn li, phi chuyn sang mode 8087 b?g cch vit ch th {$N+} ngay u chng trnh. S byte 6 4 8 10 8

6.3.2. Cc php ton trn s thc : C 4 php ton s hc l nhn (*), chia (/), cng (+) v tr (-). Khi mt trong cc s hng tham gia tnh ton l kiu thc th kt qa ca php ton cng l mt s thc. Php ton DIV, MOD khng dng cho cc s thc. V d: vi hai bin x, y kiu thc th lnh sau l b li v biu thc v phi khng hp l: y:= x mod 10 ; Cc php ton so snh (= , <> , < , <= , > , >= ) cng dng c cho cc s hng l thc hay nguyn. 6.3.3. Cc hm c i s nguyn hoc thc : Hm ABS(x): tnh tr tuyt i ca x :? x? . Kiu d liu ca kt qa cng kiu vi i s. Nu x nguyn th ABS(x) cng nguyn, nu x l s thc th ABS(x) cng l s thc. V d: Abs(5 - 8) = 3 Hm SQR(x): tnh bnh phng ca x: x2 . Kiu d liu ca kt qa cng kiu vi i s. V d: Sqr(4.0) = 16.0 Sqr(7 div 3) = 4 Trong cc hm di y, i s x c th l nguyn hay thc, nhng ga tr tr v?lun lun l kiu thc:

Trang 48/268

Hm SQRT(x): tnh Hm EXP(x) : tnh ex

, (x ? 0)

Hm LN(x): tnh lnx, (x > 0) Cc hm SIN(x), COS(x), v ARCTAN(x): tnh sinx, cosx v arctgx. Hm INT(x) : cho s thc bng phn nguyn ca x. V d : Int(12.55) = 12.0 Int(1+10/3)=4.0 Hm FRAC(x) : cho s thc bng phn l ca x. V d : Frac(12.55) = 0.55 Hai hm c bit di y cho kt qa l s nguyn: Hm TRUNC(x): cho s nguyn l phn nguyn ca x. V d : Trunc(12.55) = 12 Trunc(-2.98) = -2 Hm ROUND(x): cho s nguyn bng cch lm trn x. V d : Round(12.45) = 12 Round(-2.98) = -3 Ch rng hm Int(x) v hm Trunc(x) cng cho phn nguyn ca x, chng ch khc nhau v kiu d liu ca ga tr tr v. Int(4.5)= 4.0 cn Trunc(4.5) = 4 (vit 4 th hiu l s nguyn, cn vit 4.0 th hiu l s thc). V d 6.3: Vit chng trnh nhp s thc x bt k, tnh v in cc ga tr y v z ln mn hnh theo cng thc:

Trong Pascal khng c hm tnh trc tip 2x v Log4(x), nn ta phi chuyn qua hm ex v Ln(x) nh sau:

, v Chng trnh c th nh sau: PROGRAM VIDU63; Var Trang 49/268

x, y, z : Real; Begin Write(Nhap x: ); Readln(x); y:= ( sqrt (x*x+1) + sin(x)*sin(x) ) / ( 3*exp(2*x) + 1 ); z:= exp( x*Ln(2) ) + Ln(abs(x)+1) / Ln(4); Writeln(y= , y:10:3 ); Writeln(z= , z:10:3 ); Readln; End. Chy<VD63.EXE>. Chp tp tin ngun <VD63.pas> Khi chy chng trnh, nu nhp x =0 th kt qa y=0.250 v z=1.000. 6.4. KIU K T (CHAR) 6.4.1. K t v bin kiu k t: K t M ASCII 32 0 1 2 3 4 5 6 7 8 9 48 49 50 51 52 53 54 55 56 57 K t A B C D E F G H I J K L M ASCII 65 66 67 68 69 70 71 72 73 74 75 76 K t a b c d f e g h i j k l M ASCII 97 98 99 100 101 102 103 104 105 106 107 108 Trang 50/268

M N O P Q R S T U V W X Y Z Bng 6.5

77 78 79 80 81 82 83 84 85 86 87 88 89 90

m n o p q r s t u v w x y z

109 110 111 112 113 114 115 116 117 118 119 120 121 122

Cc k t dng trong my tnh in t c lit k y trong bng m ASCII gm 256 k t khc nhau v c nh s th t t 0 n 255. S th t ca mi k t cn gi l m ASCII ca k t . Biu 6.5 lit k mt phn ca bng m ASCII gm cc ch s v ch ci km theo m ca chng. Trong bng 6.5, k t c m bng 32 l k t trng (space). Tuy c 256 k t khc nhau song ch c 128 k t u tin l hay dng, cn li l cc k t m rng. Cc k t c m t 0 n 31 gi l cc k t iu khin, khng in ra c, c dng iu khin cc thit b ngoi vi, chng hn k t c m l 7 dng to mt ting ku bip, k t c m l 13 dng chuyn con tr mn hnh xung u dng di... Mi k t trong bng m ASCII gi l mt hng k t, chim di 1 byte, v khi vit trong Pascal phi c t trong cp nhy n: 0, 1, A, B, $,... Gia cc k t, c mt th t mc nhin theo nguyn tc : k t c m nh hn th nh hn. Tc l: K t trng < 0< 1< ...< 9< A< B< ...Z< a< b< ...< z Bin nhn ga tr l cc hng k t gi l bin kiu k t, chng c khai bo nh t kha CHAR, chng hn nh khai bo hai bin ch v ch1 di y: Var ch, ch1: Char ; Khi c th gn: Trang 51/268

ch:=A; ch1:=$; K t A gi l ga tr ca bin ch, cn $ l ga tr ca bin ch1. Nhn xt: T bng m ca cc ch ci ta suy ra: M ch thng = M ch hoa tng ng + 32. (1) 6.4.2. Cc hm lin quan n k t : Hm PRED(ch): cho k t ng ngay trc k t ch trong bng m. V d: Pred(B)=A Hm SUCC(ch): cho k t ng ngay sau k t ch trong bng m. V d: Succ(A)=B. Hm UpCase(ch): i k t ch thnh ch hoa. V d: Upcase( a ) = A, Upcase( b ) = B, Upcase( A ) = A . Hm ORD(ch) : cho m ca k t ch. V d: Ord (A) = 65, Ord (a) = 97 . Hm CHR(k) : i s k nguyn, 0? k ? 255, cho k t c m b?g k. V d: Chr (65)= A , Chr (97)= a, Chr(32) l k t trng. C mt s k t khng c trn bn phm, vit chng ln mn hnh ta phi dng lnh Write v hm CHR. V d: Lnh Writeln(Chr(201)) ; in ra k t : + Lnh Writeln(Chr(187)) ; in ra k t : + K t c m l 7 gi l k t BEL (chung), v lnh: Write( Chr(7) ) ; hay Write(#7) ; c tc dng pht ra mt ting ku bip. Ch : Turbo Pascal ( TP ) cho php vit gn Chr(k) thnh #k nu k l hng s. V d, hai lnh sau cng in ln mn hnh ch A: Write(#65); Write(Chr(65)); Trong TP khng c hm i ch hoa ra ch thng, nhng c th lm vic ny nh cng thc (1) v hai hm Ord v Chr : Ch thng := Chr ( Ord(ch hoa) + 32 ) Trang 52/268

V d 6.4: Nhp vo mt s nguyn k, 0? k ? 255, in ra k t c m l k. Chng trnh kt thc khi nhp vo s 0

PROGRAM VIDU64 ; Uses CRT; Var k : Byte; Begin CLRSCR; Writeln( Nhp s 0 kt thc :); Repeat Write( Nhp m ca k t : ); Readln(k); Writeln( K t c m , k, l , Chr(k) ); Until k=0; End. Chy<VD64.EXE> Chp tp tin ngun <VD64.PAS> V d 6.5: Nhp mt k t, nu l ch hoa th i ra ch thng, nu l ch thng th i ra ch hoa. PROGRAM VIDU65; { i ch hoa ra thng v ngc li} Var ch, ch1 : Char; Begin Write( Nhp mt k t :); Readln(ch); If (ch>=A) and ( ch<=Z) then ch1:=Chr( Ord (ch)+32) else ch1:= Upcase(ch); Writeln(ch, i ra: , ch1); Readln; Trang 53/268

End. Chy<VD65.EXE> Chp tp tin ngun <VD65.PAS> 6.5. KIU LGIC (BOOLEAN) Kiu boolean ch c hai ga tr l TRUE (ng) v FALSE (sai), khng phn bit ch hoa hay ch thng. V quan h th t th FALSE< TRUE. Mi ga tr boolean chim mt byte b nh. Cc php ton lgic gm c: NOT, AND, OR v XOR. Nu A v B l hai i lng lgic th NOT A, A and B, A or B v A xor B cng l nhng i lng lgic c kt qa c cho bng 6.6. A True False False True not A

A True True False False

B True False True False

A and B True False False False

A or B True True True False

A xor B False True True False

Bng 6.6 Cng t bng ny ta rt ra cc nhn xt : A and B l ng khi v ch khi A v B ng thi ng. (Do ch cn mt trong hai bin A hoc B sai th A and B s sai). A or B l sai khi v ch khi A v B ng thi sai. (Do ch cn mt trong hai bin A hoc B ng th A or B s ng). A xor B l ng khi v ch khi A khc B.

Th t thc hin cc php ton lgic l nh sau: NOT tnh trc, k n AND, sau cng l OR, XOR. V d, sau khi thc hin lnh: A:=Not (2*3=5) or (A<B) and not (4/2=2) xor (Sqrt(2) >1); th ga tr ca A= FALSE, tht vy : Trang 54/268

Not (2*3=5) or (A<B) and not (4/2=2) xor (Sqrt(2) >1) = TRUE or TRUE and FALSE xor TRUE = TRUE or FALSE xor TRUE = TRUE xor TRUE = FALSE Bin ch nhn ga tr l TRUE hoc FALSE gi l bin kiu lgic. Khi khai bo bin kiu lgic ta dng t kha Boolean, v d : Var A, B : Boolean; Trong chng trnh ta c th gn : A:= true; B:=2*2 < 3; Ga tr ca bin B s l False v biu thc 2*2< 3 l sai. V th t tnh ton, cc php so snh th ngang cp nhau v c tnh sau tt c cc php ton khc. V d tnh biu thc : 5+7 div 2 < -7 mod 3 + 5*2 = = 5 + 3 < -1 + 10 = 8< 9 = TRUE Do , khi trong mt biu thc m c cc php ton lgic xen k vi cc biu thc so snh th cc biu thc so snh phi trong ngoc n. Chng hn, biu thc sau l sai quy cch: N > 0 and N<10 Cn sa ng thnh : (N > 0) and (N<10) V d 6.6: Nhp vo di ba cnh a,b,c ca mt tam gic, nu a, b, c khng phi l ba cnh ca tam gic th in ln mn hnh cu " khng phi ba cnh ca tam gac", ngc li, nu ng l ba cnh ca mt tam gic th tnh chu vi v din tch tam gic theo cng thc Hrng: , vi p l na chu vi: Trang 55/268

Ta bit, iu kin a,b,c l ba cnh ca mt tam gic l mi cnh phi dng v tng hai cnh th ln hn cnh cn li. Di y l chng trnh c th : PROGRAM VIDU66; {Tnh din tch v chu vi tam gic theo 3 cnh} Var a, b, c, P, S : Real; Tgiac: Boolean; Begin Write( Nhap 3 canh cua tam giac : ); Readln(a, b, c); Tgiac:= (a>0) and (b>0) and (c>0) and (a+b>c) and (a+c>b) and (b+c>a); If Tgiac= FALSE then Writeln( Khong phai ba canh cua tam giac !) else begin P:=(a+b+c)/2; S:= Sqrt( P*(P-a)*(P-b)*(P-c) ); Writeln( chu vi = , 2*P:10:2); Writeln( dien tich S= , S:10:2); end; Readln; End. Chy<VD66.EXE> Chp tp tin ngun <VD66.PAS>

Trang 56/268

Khi chy chng trnh ny, nhp ba cnh ca tam gic, bn g ba s cch nhau khong trng ri enter, chng hn : Nhap 3 canh cua tam giac : 3 4 5 Kt qa chu vi= 12.00, dien tich= 6.00. Nu nhp ba cnh l : 2 3 6 th my hin cu: "Khng phi ba cnh ca tam gic ! " (v 2+3 < 6). 6.6. CHUI K T (STRING) Mt dy k t t trong cp nhy n gi l mt hng chui. Di y l ba hng chui : NGON NGU PASCAL Tin hoc nam 2000 123456 Cc chui c th c ghp ni vi nhau nh php cng chui. Khi cng (+) hai chui ta c mt chui duy nht bng cch ghp chui sau vo cui ca chui u. V d php cng : Ngon ngu + Pascal cho kt qa l Ngon ngu Pascal. Cc chui cng so snh c vi nhau. Vic so snh hai chui c thc hin bng cch so snh tng cp k t tng ng t tri qua phi. Khi pht hin c mt cp k t khc nhau th chui no cha k t nh hn s nh hn, v d: Biu thc Anh < an l ng v A < a Biu thc Thong > Tha l ng v o > a Nu ni dung?ca hai chui ging nhau t u n ht chiu di ca chui ngn hn th chui ngn hn l nh hn, v d: Biu thc Tha < Thang l ng v Tha ngn hn Thang. Hai chui bng nhau nu chng di bng nhau v mi cp k t cc v tr tng ng u ging nhau. V d: Biu thc Pascal = Pascal cho kt qa l ng Biu thc Pascal = PAscal cho kt qa l sai. Bin nhn gi tr l cc hng chui gi l bin kiu chui. C th khai bo hai bin chui nh sau: Var Ho_ten : String[20]; St : String; khi Ho_ten l bin chui c th cha ti a 20 k t, cn bin chui St c th cha ti a 255 k t, v ta c th gn : Ho_ten := Nguyen Van An; St :=Thao chuong bang ngon ngu Pascal; Trang 57/268

Chui Nguyen Van An gi l ga tr ca bin Ho_ten. Tng t, chui Thao chuong bang ngon ngu Pascal l gia tr ca bin St. 6.7. CU HI TRC NGHIM Cu 1: Cho khai bo bin : Var m, n : integer; x, y : Real; Lnh no sai : a) m := -4; b) n := 3.5; c) x := 6; d) y := +10.5; Cu 2: tnh ga tr a) x := -b/2a; b) x := -b/2*a; c) ; d) x := -b/2/a; Cu 3: Biu thc : 25 div 3 + 5/2*3 c gi tr l : a) 8.0; b) 15.5; c) 9.5; d) 15.0; Cu 4: Cho phng trnh : ax2 + bx + c = 0 . Gi s a? 0 v Delta:= b*b- 4*a*c > 0 . Mt nghim ca phng trnh l : a) X:= -b + SQRT(Delta) / (2*a); b) X:= (-b + SQRT(Delta) ) /2*a; c) X:= (-b + SQRT(Delta) ) / (2*a); d) X:= (-b -SQR(Delta) ) /2/a; Cu 5: Cho ch l bin c kiu Char. Lnh no ng : a) ch:="a" b) ch:=65; c) ch:=chr(65); d) ch:='abcd'; Cu 6:Bin X c khai bo l kiu integer. Lnh no sai : a) X:= round(275/3); b) X:= 210 div 4; c) X:= SQRT(49); d) X:= ABS(-453); Trang 58/268 , chn cch vit no :

Cu 7: Biu thc no sau y c gi tr TRUE : a) (100 > 76) and ('B' < 'A'); b) not (49.5 + 2 < 5) or (2 > 4 div 2); c) (49.5 + 2 < 5) and (2 < 4 div 2); d) 2*(3+5) < 18 div 4*4; Cu 8: Khi chy chng trnh : Var St, St1 : String; Begin St := '123'; St1 := '456'; Write(St + St1); End; Kt qu in ra l : a) '123456'; b) 123456; c) 579; d) Cu a), b), c) u sai; Cu 9: Sau php gn : Ch := CHR( ORD('a')- 32 ); th gi tr ca Ch l : a) 65; b) A; c) 'A'; d) 'a'; Cu 10: Khi chy chng trnh : Var a, b, c, N : integer; Begin N:=546; a:=N div 100; b:=(N Mod 100) div 10; c:=(N Mod 100) Mod 10; Write(a+b+c); End. Kt qu in ra : Trang 59/268

a) 546; b) 5; c) 15; d) 6; 7.1. HNG, BIN v BIU THC 7.1.1. Khi nim v bin v hng : Trong phn trc ta bit mi kiu d liu c mt tp cc gi tr tng ng. Cc gi tr ca kiu nguyn hay kiu thc l cc s, nh 40 hay 5.72, cc ga tr ca kiu k t l cc k t nh A hay a, cn kiu lgic th ch c hai ga tr l True v False, ... Qa trnh x l trong my tnh i hi mi ga tr phi c lu tr mt nh no trong b nh ca my, v nh ny c t mt ci tn gi. Khi mi vic tnh ton hay x l lin quan n mi ga tr c thc hin gin tip thng qua tn ca nh cha gi tr . V d, nu s 5.72 c lu trong nh c tn l x, th biu thc 5.72*2 c th c vit l x*2. Vic dng tn x d nh v tin hn nhiu so vi vic dng v nh s 5.72. Nh vy, khi mt nh c t tn th tn ny ng nht vi gi tr ca n. Trong mt chng trnh, mi nh c mt tn duy nht nhng gi tr ca n th c th thay i hoc khng. Nu ga tr ca nh c th thay i c th nh ny l mt bin, tn ca nh l tn bin, ngc li, nu ga tr ca nh khng th thay i, th nh l mt hng, tn ca nh l tn hng. Cc bin v hng tham gia trong chng trnh u phi c khai bo. Vic khai bo c tc dng bo trc cho my dnh sn cc nh thch hp trong b nh sn sng cha d liu. 7.1.2. Khai bo bin v khai bo hng : Bin l i lng c ga tr thay i c trong chng trnh. Cch khai bo bin nh sau : Var Danhschtnbin : TnKiuDliu ; Tn bin l t t, theo ng quy tc ca mt tn. V d : Var i, j : Integer; x, y : Real; Theo khai bo trn, ta c hai bin i v j cng kiu s nguyn (Integer), v hai bin x, y cng kiu s thc (Real). Hng l mt i lng c ga tr khng i trong chng trnh. Cch khai bo : Const Tn_hng = gatr ; Tn hng l t t, theo ng quy tc ca mt tn. V d : Const N = 10; Trang 60/268

SoPi = 3.1416; SoE = 2.718; Turbo Pascal c sn mt s h?g chun cho php s dng m khng phi khai bo, nh : Pi, MaxInt . Hng Pi c ga tr bng s , cn MaxInt = 32767, l s Integer ln nht. Chng hn, c th dng cc lnh sau: Writeln(Dien tich hinh tron ban kinh r=5 la: , Pi*5*5:8:3); Writeln(So Integer lon nhat = , MaxInt); 7.1.3. Biu thc : Biu thc l mt cng thc gm c mt hay nhiu thnh phn c kt ni vi nhau bi cc php ton. Mi thnh ph? (hay ton hng) c th l hng, l bin hay l hm. Khi cc php ton trong biu thc c thc hin th ta nhn c mt ga tr gi l kt qa ca biu thc. Kiu d liu ca kt qa gi l kiu d liu ca biu thc. V d: 3* 5 div 2 + 7 mod 4 l biu thc nguyn, c kt qa l 10 2 + sin(pi/2) l biu thc thc, c kt qa l 3.0 Chr( ord(a) - 32 ) l biu thc k t, c kt qa l A (4+2=6) and (B<>b) l biu thc lgic, c kt qa l True AB+CD l biu thc chui, c kt qa l ABCD Cc thnh phn trong biu thc c? phi c kiu d liu ph hp cho cc php ton thc hin c, nu khng my s bo li. V d, biu thc sau : 5 + A l sai v ta khng th cng mt s nguyn vi mt k t. Mt biu thc c th cha nhiu php ton. Th t thc hin cc php ton c cho trong bng 7.1 di y. Cp u tin 1 2 3 4 5 6 7 Php ton biu thc trong ngoc n (...) Cc hm NOT, - (php ly du m) * , /, DIV, MOD, AND Shl, Shr +, - (tr?, OR, XOR =, <>, <, <=, >, >=, IN Bng 7.1 Vic tnh ton mt biu thc da theo hai quy tc : Trang 61/268

Quy tc 1: Php ton c cp u tin nh th c tnh trc, php ton c cp u tin ln th c tnh sau. Quy tc 2: i vi cc php ton ng lin nhau v c cng cp u tin, th ci no ng trc c tnh trc. V d : tnh biu thc s hc : (4+5)*2 div 7 + sin(pi/6) = = 9 * 2 div 7 + 0.5 = 18 div 7 + 0.5 = 2 + 0.5 = 2.5 V d : tnh biu thc lgic : ( 2 > 4 div 2) or Not ( 49.25 + 2 < 50) = (2 > 2) or Not ( 51.25 < 50) = FALSE or Not FALSE = FALSE or TRUE = TRUE 7.2. CU LNH V LI CH GII 7.2.1. Phn loi cu lnh : Cu lnh l mt dy cc k t c bn c xy dng theo mt quy tc nht nh (gi l c php) nhm ch th cho my thc hin mt cng vic xc nh. Cc cu lnh c chia ra hai loi: cu lnh n gin v cu lnh c cu trc. Lnh gn v li gi th tc c xp vo loi n gin. V d: k := 20; Clrscr ; Writeln(k) ; Cc lnh r nhnh v lnh lp c xp vo loi c cu trc, chng c xy dng t cc lnh n gin, v d: If k>=0 then Writeln(k) else Writeln( -k) ; Hai hay nhiu lnh n gin c gom li v t gia hai t kha BEGIN v END to thnh mt cu lnh ghp, cu lnh ghp cng l lnh c cu trc, v d: Begin Trang 62/268

Write( nhp k :); Readln(k); End; T cc lnh n gin v cc lnh c cu trc c li c th xy dng c cc lnh c cu trc phc tp hn, v d: If k>= 0 then Writeln(k) else Begin Writeln( k m, xin nhp li : ); Readln(k); End; Sau y s trnh by k v mt lnh n gin vthng dng : lnh gn. 7.2.2. Lnh gn : Lnh gn c c php nh sau : TnBin := Biuthc ; ngha : tnh ton biu thc bn phi, ri lu kt qa tnh c vo tn bin v tri. V d, cho khai bo : Var A, B : Real; K : Integer; Khi dng lnh cc lnh: K := 10 ; B := K* 3+5.5; th bin K c ga tr l 10, bin B c ga tr l 35.5. Nu thc hin tip lnh gn : B:= 17/2; th ga tr ca B by gi s l 8.5. Nh vy nu mt bin c gn nhi? ln th n s ly ga tr ca ln gn sau cng, tnh n thi im ang xt. c bit, lnh: Trang 63/268

B:=B +1; c tc dng tng ga tr ca bin B ln 1 n v, kt qa l B c ga tr bng 9.5. Cch thc hin lnh B:=B+1 l nh sau: ly ga tr hin thi ca bin B (l 8.5) cng thm 1 (c 9.5), ri em kt qa gn cho chnh bin B. Tng t, lnh B:=B-1; c tc dng gim B i 1 n v. Yu cu cho lnh gn thc hin c l kiu d liu ca biu thc v phi phi ph hp vi kiu d liu ca bin v tri, nu khng ph hp th khi dch (Compile) chng trnh, Turbo Pascal s thng bo li : "Error 26 : Type mismatch". V d, lnh gn di y l sai v v tri l kiu thc cn v phi l kiu chui : A:=Pascal; Ch rng mt s nguyn c th gn cho mt bin thc, (chng hn lnh A:=10; l ng ), nhng mt s thc khng th gn cho mt bin nguyn. V d lnh K:=10/4; l sai v bin K c kiu nguyn, cn v phi cho kt qa l mt s thc (=2.5). Xt thm v d v cc kiu d liu khc : Cho khai bo : Var Ch : Char ; St: String[20]; Khi : Lnh St:=A; l ng. Lnh St:=1234; l ng. Lnh Ch:=ABCD; l sai v v phi l mt chui. Lnh St:= 100; l sai v v phi l mt s. Lnh Ch:=1 ; l ng. Lnh Ch:=St ; l sai v v phi l mt chui. 7.2.3. Li ch gii : Li ch gii c th t ti bt k ch no trong chng trnh v c vit theo mt trong hai cch : { li gii thch } (* li gii thch *) Li gii thch l mt chui k t gii thch mc ch ca chng trnh hay ca mt cu lnh. N ch c tc dng cho ngi dng tham kho nhm hiu nhanh mc ch ca chng trnh hay ca mt cu lnh m khng cn phi c ht chng trnh hay cu lnh . 7.3.1. Nhp d liu, th tc Readln Trang 64/268

Nhp v xut d liu l hai khu quan trng trong qa trnh x l thng tin. Hu nh chng trnh no cng phi gii quyt vn nhp, xut d liu. C nhp c d liu th mi c d liu tnh ton hay x l. C d liu xut ra th mi bit c kt qa ca qa trnh x l trong my. 7.3.1.1. Nhp d liu kiu s : nhp d liu cho bin nguyn hay thc, ta dng lnh: Readln(bin1, bin2, ..., bink); trong bin1, bin2,..., bink c khai bo v c kiu d liu l nguyn hay thc. Khi gp lnh ny, chng trnh tm dng, ch ta g k s t bn phm v kt thc bng Enter, ri gn ln lt k s cho bin1, bin2, ..., bink. V d, nhp d liu cho hai bin thc x, y v bin nguyn j, ta dng lnh: Readln(x, y, j); Cch nhp nh sau: hoc g 10 6.5 4 (c khong trng gia hai s ), hoc g tng s v Enter nh di y : 10 6.5 4 Trong c hai trng hp ta u c: x=10, y=6.5, v j=4 . Ngoi cch dng mt lnh Readln(x, y, j) ; ta cng c th nhp ring cho tng bin bng ba lnh sau : Readln(x); Readln(y); Readln(j); 7.3.1.2. Nhp d liu kiu k t hay kiu chui: Ta dng lnh : Readln( bin ); V d, cho khai bo : Var Ho_ten: String[18]; Phai: String[3]; Trang 65/268

Khoi_thi : Char; Mun nhp d liu cho ba bin Ho_ten, Phai, Khoi_thi ta phi dng ba lnh : Readln(Ho_ten); Readln(Phai); Readln(Khoi_thi); Khi nhp, ta g: Tran Van Thanh nam A Kt qa, ba bin s c gi tr l: Ho_ten = Tran Van Thanh, Phai= nam v Khoi_thi=A. Khc vi d liu s, ta khng nn dng mt lnh Readln nhp d liu cho hai hay nhiu bin kiu k t hay kiu chui, v s c nhng nhm ln khng kim sot c. V d, khng dng lnh sau: Readln( Ho_ten, Phai, Khoi_thi); m phi dng ba lnh Readln, mi lnh nhp cho mt bin nh nu trn.

7.3.1.3. Cc ch : a) D liu nhp phi ph hp vi kiu ca bin. Nu khng ph hp th chng trnh s dng ngay v hin thng bo li.V d khi gp lnh Readln(j) ; m ta g 4.5 th b li v j l bin nguyn, cn 4.5 l s thc. b) Lnh: Readln ; l mt dng nhp d liu c bit v n khng c bin no nhn d liu nhp vo. Ngi ta dng lnh ny khi mun tm dng chng trnh xem kt qa trn mn hnh, xem xong, g phm Enter th chng trnh chy tip. c) Bin kiu lgic khng nhp c t bn phm. d) Pascal cn c mt lnh nhp d liu na l Read, c cng dng nh lnh Readln, nhng t dng. S khc nhau gia Read v Readln l ch: sau khi nhn cc ga tr cho cc bin cn nhp, lnh Readln s xa sch cc ga tr nhp tha, cn lnh Read th khng. Cc ga tr nhp tha ca lnh Read s c t ng gn cho cc bin trong lnh nhp tip theo. V d, xt hai lnh: Readln(x, y); Readln(j); Nu khi nhp, ta g : 12.5 20.6 10

Trang 66/268

th x=12.5, y=20.6, cn s 10 tha b xa lun. Bin j trong lnh Readln(j) di khng b nh hng. Mun nhp s 9 cho j, ta g 9 . Vi on chng trnh : Read(x, y); Readln(j); Nu khi nhp, ta cng g : 12.5 20.6 10 th x=12.5, y=20.6, cn s 10 tha khng b xa m t ng gn cho bin j trong lnh Readln(j) tip theo, kt qa j=10 cho d ta cha mun nhp cho j. Vy, lnh Read c th lm sai nhp ca lnh nhp tip theo. Li khuyn l khng nn dng lnh Read, ch dng Readln . 7.3.2. Xut d liu, th tc Write v Writeln Cc d liu c in ln mn hnh nh cc lnh sau: Writeln( bt1, bt2 , ... , btk ); Write( bt1, bt2 , ... , btk ); y, bt1, bt2, ..., btk l cc biu thc c? phi in ga tr ln mn hnh. Trong trng hp n gin, mi biu thc ny c th l mt bin, mt hng, hay mt hm. Vic in c thc hin nh sau: ti v tr hin thi ca con tr trn mn hnh, in ra ga tr ca biu thc bt1, in tip ga tr ca biu thc bt2, ..., in tip ga tr ca biu thc btk. Cc ga tr ny c in trn mt dng, nu di qa kh mn hnh th s c in tip dng di. V d, lnh Writeln(3*2+9); s in ln mn hnh s 15. Nu i, j l cc bin nguyn th khi thc hin cc lnh sau: i :=10 ; j:=15*2 ; Writeln(i, j+1, 678); trn mn hnh s hin: 1031678. S khc nhau gia lnh Writeln v Write l ch: sau khi in xong gi tr ca cc biu thc, lnh Writeln s a con tr xung u dng di, cn lnh Write th khng. iu ny ch nh hng n lnh in tip theo m thi. V d, khi thc hin hai lnh sau : Writeln(Thao chuong bang ); Writeln(ngon ngu pascal); kt qa trn mn hnh s hin hai dng : Trang 67/268

Thao chuong bang ngon ngu pascal Nu thay lnh u bng Write nh di y: Write(Thao chuong bang ); Writeln(ngon ngu pascal); th kt qa trn mn hnh s hin ra ch mt dng: Thao chuong bang ngon ngu pascal 7.3.2.1. In khng nh dng: i vi cc biu thc kiu nguyn, kiu k t, kiu l gc hay kiu chui, th lnh : Writeln( biuthc ) ; s in nguyn vn ga tr ca biu thc. V d : Lnh Writen(ket qa x= , 4+15); s in ra: ket qua x=19 Lnh Writeln(A , = , 2*3<5); s in ra: A=FALSE v biu thc 2*3< 5 c kt qa l FALSE. Nu gn: Ho_ten:= Tran Van Thanh; th lnh Writeln(Ho va ten: , Ho_ten); s in ln mn hnh dng ch : Ho va ten: Tran Van Thanh Cn phn bit hai i lng Ho va ten: v Ho_ten. Chng khc nhau hon ton: Ho va ten: l mt ga tr chui, tc l mt hng chui nn s c in nguyn vn ln mn hnh, cn Ho_ten l mt bin kiu chui nn s in ga tr m bin ny ang cha. i vi cc biu thc kiu s thc th lnh: Writeln( biuthc ); s in ga tr ca biu thc ra di dng du chm thp phn di ng c c thy 17 k s, trong c 10 k s trong phn nh tr, nh sau:

y ta dng k hiu ch mt k t trng, cn X i din mt k s . V d, cho x, y l hai bin thc v gn x:=100/4; y:=-9/300; th hai lnh sau : Trang 68/268

Writeln( x= , x); Writeln( y= , y); s in ln mn hnh : x = 2.5000000000E+01 y = -3.0000000000E-02 7.3.2.2. In c nh dng: a). In s thc c nh dng: In cc s thc theo cch trn rt kh c. V th cc s thc thng c in c nh dng, ging nh cch vit s thng thng, bng lnh: Writeln( biuthc : n : k ); y n v k l cc s t nhin, n nh dng n ct in ga tr ca biu thc, trong c k ct dnh cho phn thp phn. Nu s cn in c t hn n ch s th n s c in dn v bn phi v thm cc k t trng bn tri cho n ct. V d, cho x, y l cc bin kiu thc v: x:=100/4; y:=-123.4824; Hai lnh sau : Writeln( x=, x:6:2); Writeln( y=, y:10:3); s in ln mn hnh: x= 25.00 ( trc s 2 c 1 k t trng) y= -123.482 (trc du - c 2 k t trng) Nu n nh hn chiu di ca s cn in th s s c in ra vi y cc ch s trong phn nguyn. V d, khi thc hin cc lnh sau : x:=12345.675; Writeln(x= , x:0:2); trn mn hnh s hin : x=12345.68 y my lm trn s khi b s l cui cng.

b). In kiu nguyn, k t, chui v lgic c nh dng : Dng lnh : Writeln(biuthc : n); Trang 69/268

trong n l s nguyn n nh s ct dng in ga tr ca biu thc. Nu n ln hn di ca ga tr cn in th ga tr s c in dn v bn phi, v thm cc khong trng bn tri cho n ct. Nu n nh hn di ca ga tr cn in th ga tr s c in nguyn vn. V d: Lnh Write(5+40:4); in ra: 45 (c 2 k t trng trc s 45) Lnh Write(5+40:1); in ra:45 (in nguyn vn ga tr 45) Lnh Write(Pascal :9); in ra: Pascal (c 3 k t trng trc ch Pascal) Lnh Write(Pascal :2); in ra:Pascal (in nguyn vn) Lnh Write(*:3); in ra: * (c 2 k t trng trc du *) Cc ch : Nhm ba lnh: Write(x); Write(y); Write(j); ch c tc dng nh mt lnh: Write(x, y, j); Nhm ba lnh: Write(x); Write(y); Writeln(j); ch c tc dng nh mt lnh: Writeln(x, y, j); Lnh: Writeln; khng in g c, ch n gin l a con tr xung dng di. V d 7.1: Di y l chng trnh cho php nhp h tn, m s ca mt sinh vin, ri in h tn, m s ca sinh vin trong mt ci khung c v bng cc du sao *, nh hnh di chng hn : ********************** * Nguyen Van Tuan * * Ma so: 1972508 * ********************** Chng trnh c th nh sau: PROGRAM VIDU71; Uses CRT; Var Ten : String[18]; Maso : String[11]; Begin CLRSCR; Write( Nhap ho va ten: ); Readln(Ten); Write( Nhap ma so sv : ); Readln(Maso); Writeln; Trang 70/268

Writeln( ********************** ); { in 22 du * } Writeln(*, Ten:19, *:2); { in 1 du *, in Ten chim 19 ct, in tip du * chim 2 ct } Writeln(* Ma so: , Maso:12, *:2); { in * Ma so, in Maso chim 12 ct, in tip du * chim 2 ct } Writeln(**********************); { in 22 du * } Readln; End. Chy<VD71.EXE> Chp tp tin ngun <VD71.PAS>

7.4. KIU LIT K v KIU ON CON 7.4.1. Kiu lit k (enumerated type) : 7.4.1.1. Cch khai bo : Ngoi cc kiu d liu c sn nh kiu nguyn, thc, k t, lgic v kiu chui, Turbo Pascal cn cho php ngi tho chng c th t xy dng cc kiu d liu mi. Kiu lit k c nh ngha bng cch s dng t kha TYPE v lit k ra tt c cc ga tr ca kiu, theo mu sau: Type Tnkiu = (tn1, tn2, ..., tnN) ; trong tn1, tn2,..., tnN l cc tn t t theo ng quy c v t tn. V d : Type Phai=(nam, nu) ; Ten_mau = (den, trang, xanh, vang, tim, nau); Theo khai bo ny th Phai l mt kiu d liu lit k ch c hai gi tr l nam v nu, Ten_mau cng l kiu d liu lit k v c su gi tr l : den, trang, xanh, vang, tim, nau. Khi mt kiu lit k c nh ngha th c th khai bo cc bin thuc kiu lit k ny bng t kha Var. V d : Var Ph1, Ph2 : Phai; M1, M2 : Ten_mau ; Trang 71/268

Trong chng trnh, ta c th gn : Ph1:=nam; Ph2:=nu; M1:=den; M2:=trang; Pascal cn cho php khai bo trc tip bin kiu lit k khng cn qua giai on nh ngha Type bng cch lit k cc ga tr m bin c th nhn. V d : cc bin Ph1, Ph2, M1, M2 ni trn c th khai bo trc tip nh sau: Var Ph1, Ph2 : (nam, nu) ; M1, M2 : ( den, trang, xanh, vang, tim, nau);

7.4.1.2. Cc hm lin quan n kiu lit k: Hm ORD(tn) : Tr v s th t ca tn trong kiu lit k. Cc ga tr lit k c nh s th t bt u t 0. V d: Ord(nam)=0, Ord(xanh)=2 Thng qua hm Ord, cc ga tr lit k c th so snh vi nhau theo quy tc: ga tr no c s th t nh hn th nh hn: den < trang < xanh< vang< tim< nau Hm PRED(tn) v hm SUCC(tn) : tr v ga tr ng ngay trc v ngay sau tn trong kiu lit k tng ng. V d: Pred(nu)=nam Pred(nau)=tim Succ(den)=trang Hm Tnkiu(k) : tr v gi tr lit k c s th t l k trong Tnkiu, v d: Phai(0)=nam Ten_mau(2)= xanh Hm ny l hm ngc ca hm Ord.

7.4.1.3. Nhp , xut kiu lit k: Trang 72/268

Cc ga tr lit k khng th nhp, xut trc tip bng lnh Readln v Write ?. y l hn ch ca kiu lit k, khin n khng thng dng. Khi mun nhp hay xut kiu lit k, ta c th dng mt bin trung gian St kiu chui. Chng hn, mun nhp mu xanh cho bin M1, ta dng hai lnh: Readln(St); If St=xanh then M1:=xanh; Tng t, Mun in mu xanh ln mn hnh , ta dng lnh : If M1=xanh then Writeln(xanh); 7.4.2. Kiu on con (Subrange type): Kiu on con c m t bng cch ch ra phm vi ga tr m cc bin thuc kiu c th nhn : TYPE Tnkiu = hng1..hng2; VAR Tnbin : Tnkiu; hoc khai bo trc tip : VAR Tnbin : hng1..hng2; trong , hng1< hng2 l hai hng thuc cng mt kiu d liu. Kiu d liu ca hng1 v hng2 ch c th l kiu nguyn, k t, lgic, hay lit k V d: Type Chu_Hoa =A..Z; Tuoi= 0..200; Var Ch : Chu_hoa; T: Tuoi; Theo khai bo ny th ch l mt bin kiu on con, c th nhn cc ga tr l cc k t t A n Z, tng t, bin T c th nhn cc ga tr l cc s nguyn t 0 n 200. Cng c th khai bo hai bin Ch v T trc tip theo cch sau: Var Trang 73/268

Ch : A..Z; T : 0..200; Trong nhiu trng hp, vic khai bo on con c tc dng tit kim b nh. Ty theo phm vi hng1..hng2 m Turbo Pascal s cp pht cho bin mt s byte ti thiu. Trong v d trn, mi bin Ch hay T s c cha trong 1 byte. Kiu on con cn cho php kim sot c ga tr ca bin c vt ra ngoi phm vi ca n hay khng. V d, nu i vi bin T m gn: T:=201; th my s bo li "const out of range". Ngoi ra khi chy chng trnh trong mode {$R+}, chng trnh s dng ngay nu bin nhn ga tr vt khi phm vi. Kiu lit k v kiu on con thuc loi n gin v m c. 7.5. CU HI TRC NGHIM Cu 1:Cho x, y, z l cc bin kiu thc, lnh no l sai: a) x:=y+z; b) Readln(x, y, z); c) x+y:=z; d) Writeln(x+y, z:0:2); Cu 2: Cho x, y l cc bin kiu thc, lnh no l ng : a) Readln(x,5); b) Readln(x= , x); c) Readln(x:5:2); d)Readln(x, y); Cu 3: Cho x l bin kiu thc, sau khi thc hin hai lnh : x:=10 ; Writeln(x); Kt qa in ln mn hnh l : a) 10; b) 10.00; c) 1.0000000000E+01; d)+1.0000000000E+01; Cu 4: Cho bin X kiu thc v gn X:= 12.41 ; in ln mn hnh nh sau: X= 12.41 chn lnh no : a)Writeln(X); b) writeln(X:5); c) writeln('X= ', X:5:2); d) writeln(' X=, X:5:2 ' ); Cu 5: Kiu d liu ca biu thc 4 div 6 + 6 / 3 + Ord(A) l : Trang 74/268

a) nguyn; b) l gic; c) k t ; d) thc; Cu 6: Khai bo kiu lit k nh sau l sai : Type Mau = (XANH, do, tim, Vang) ; v : a) Tn do trng vi t kha; b) Tn XANH vit ch hoa; c)Tn Vang c ch V hoa ; d)Tn tim vit ch thng; Cu 7: Khai bo no ng : a) Var x, y = Integer; b) Var x, y of Integer; c) Var x, y := Integer ; d)Var x, y : Integer ; Cu 8: Cho khai bo : Var Ho, ten : String[15]; Lnh no sai : a) Write(' Ho ten la : ' ; Ho ; Ten); b) Write(' Ho ten la : ' + Ho + Ten); c) Write(' Ho ten la : ', Ho , Ten) ; d) Write(' Ho ten la : ', Ho + Ten) ; Cu 9: Cho i, j, k l ba bin nguyn, nhp d liu cho lnh: Readln( i, j, k) ; cch nhp no sai : a) 3 4 5?; b) 3,4,5?; c) 3? 4? 5? ; d)Cu a), b), c) u ng ; Cu 10: Cho i, j, k l ba bin nguyn, nhp d liu cho lnh: Readln( i, j, k) ; cch nhp no ng : a) 3 4 5?; b) 3,4,5?; c) 3? 4? 4+1? ; Trang 75/268

d)3? 4? E? ;

7.6. BI TP Cu 1. Cho S l bin kiu Boolean. Lnh no sai, lnh no ng, nu ng th cho bit ga tr ca S : a) S:= 3*2; b) S:= 3< 2; c) S:= 3< 2 and 6 - 5 =1; d) S:= (3< 2) and (6 - 5 =1); Cu 2. Cho bit ga tr ca bin l gic A : A := ( x2 + y2 ? 25 ) and ( x2 + y2 ? 16 ); vi {x = 3, y = 3 }, {x = 3, y = 2 }, v {x = 3.1 , y = 4 }, Cu 3. Vit chng trnh in ln mn hnh nh sau : **************** * THAO CHUONG BANG * * NGON NGU PASCAL. * **************** Cu 4*. Nhp vo s xe (c bn ch s) trong bin s xe my ca bn. Cho bit s xe ca bn c my nt. Bn l ngi may mn nu s nt=9. Bn c may mn khng ?. V du: s xe l 4546, tng cc ch s l 4+ 5 + 4 + 6 = 19. 19 mod 10 =9. S nt l 9, may mn. Cu 5. Nhp h tn (HT), mc lng thng (ML), tm ng (TU) v ph cp (PC) ca mt ngi, tnh phn cn lnh (CL) ca ngi : CL = ML -TU + PC. In HT v CL ln mn hnh. Cu 6. Nhp h tn, nm sinh, ni sinh, phi (nam hay n) ca mt ngi. In ln mn hnh h tn, nm sinh, ni sinh, phi v tui ca ngi . Cu 7. Nhp h tn (HT), mc lng thng (ML) v ph cp (PC) ca mt ngi, tnh tng thu nhp (TTN) ca ngi : TTN = ML + PC Tnh qy bo him (QBH) : QBH=15%* TTN Tnh tin c lnh (TIEN): TIEN=TTN - QBH In h tn, tng thu nhp , qy bo him v tin c lnh ln mn hnh. Cu 8. Nhp tn mt vt t, s lng, n ga. Tnh tin v thu ga tr gia tng : Tien =s lng * n ga Trang 76/268

Thu = 10% Tin In tn vt t, s lng, n ga, tin v thu tr gia tng ln mn hnh, nh dng cc s ly 2 s l. Cu 9*. Vit chng trnh in ln mn hnh th sinh vin c dng nh sau:

(Hd: Cho m ca cc k t :?/font> :201; :205; ? :187;? :186;?/font> : 200 ; ? :188. Hin k t bng cch g phm Alt vi m ca k t , nh dng cc phm s bn phi bn phm. Nn khai bo cc hng a=?/font> ; b= ; ..., sau in cc hng a, b, c, ... to khung). Cu 10. Nhp tn ba mn hc, s tn ch ca mi mn hc. Tnh s tin phi np cho ti v bit rng n ga mi tn ch l 25000, l ph ng k l 2000. Chi ch : Cu c nh du * l cu tng i kh.

8.1. CU LNH IF 8.1.1. Cu lnh IF dng 1: 8.1.1.1. C php, lu v ngha: C php : IF iukin THEN LnhP ; iukin l mt biu thc lgic cho kt qa TRUE (ng) hay FALSE (sai). LnhP c th l mt lnh n gin hoc mt lnh c cu trc. Nu LnhP l mt lnh ghp, tc l gm nhiu lnh, th nh l cc lnh ny phi c t trong khi: begin v end .

Trang 77/268

ngha: Ty theo iukin l ng hay sai m quyt nh c lm LnhP hay khng. Nu iukin l ng th lm LnhP ri chuyn sang lnh k tip pha di. Nu iukin l sai th khng lm LnhP m chuyn ngay sang lnh k tip. S ?c php ca lnh IF c v trong hnh 8.1. 8.1.1.2. Cc v d : V d 8.1: Nhp vo hai s a v b, tm v in ln mn hnh s ln nht ca hai s . Ta dng mt bin ph t tn l Max cha ga tr ln nht phi tm. Thut ton gm hai bc: Bc 1: Gn s th nht vo Max, tc l: Max:=a; Bc 2: Kim tra nu Max nh hn s th hai th gn s th hai vo Max: If Max < b then Max:=b; Bc 3: In ga tr Max ln mn hnh. Gii thch: Sau bc 1, bin Max c ga tr bng a. Sang bc 2, c th xy ra hai tnh hung : * Hoc l Max < b , tc b l s ln nht, khi ga tr ln nht b c gi vo bin Max * Hoc l Max >= b, tc ga tr ca Max l ln nht ri nn khng phi lm g na. Chng trnh c th nh sau: PROGRAM VIDU81; { Tim Max ca hai so } Var a, b, max : Real; Begin Write( Nhap a va b :); Readln(a,b); Trang 78/268

Max :=a ; If Max < b then Max:=b ; Writeln( So lon nhat la: , Max:6:2); Readln; End. Chy<VD81.EXE> Chp file ngun <VD81.PAS> Nhn xt: Vic tm s nh nht ca hai s a, b cng tng t, ta dng bin ph Min cha ga tr nh nht, v thc hin cc lnh sau: Min:=a; If Min > b then Min:=b; C th m rng thut ton trn tm s ln nht trong ba s hoc nhiu hn. u tin ta tm s ln nht ca hai s a v b, k hiu l Max, sau tm s ln nht ca hai s Max v c, cng vn k hiu l Max. Di y l cc lnh chnh tm s ln nht trong ba s a, b, c : Max:=a; If Max < b then Max:=b; { Max l s ln nht ca a v b } If Max < c then Max:=c; { Max l s ln nht ca a, b v c } V d 8.2: Nhp vo h tn v im trung bnh (DTB) ca mt sinh vin. Hy phn loi sinh vin theo DTB nh sau: Loi l Km nu DTB<5, l Tbnh nu 5 DTB<7, l Kh nu 7 DTB<9, l Gii nu DTB 9. In h tn, im trung bnh v phn loi sinh vin. Trong chng trnh, ta dng mt bin ph t tn l Loai lu tr phn loi ca sinh vin. V c nm loi c? lu tr l cc chui Kem, Tbinh, Kha, Gioi, nn bin Loai phi c kiu d liu l kiu chui. PROGRAM VIDU82; { Phn loi sinh vin } Var Trang 79/268

Ho_ten: String[18]; DTB: Real; Loai: String[6]; Begin Write( Nhap ho va ten :); Readln(Ho_ten); Write( Nhap iem trung binh :); Readln(DTB); { phn loi theo DTB } If DTB< 5 then Loai:=Kem; If (DTB>= 5) and (DTB<7) then Loai:=Tbinh; If (DTB >= 7) and (DTB< 9) then Loai:=Kha; If DTB >= 9 then Loai:=Gioi; Writeln(Ho_ten, #32 , DTB:4:1 , #32 , Loai); { #32 l k t trng } Readln; End. Chy<VD82.EXE> Chp file ngun <VD82.PAS>

V d 8.3: Nhp vo ba h s A, B, C, (A ? 0) ri gii v bin lun phng trnh bc hai: Ax2 + Bx + C = 0 Vic u tin l phi tnh Delta : Delta = B2 - 4AC Sau bin lun theo Delta: Nu Delta<0 : phng trnh v nghim Nu Delta=0 : phng trnh c nghim kp :

Trang 80/268

Nu Delta > 0: phng trnh c hai nghim :

Chng trnh c th nh sau: PROGRAM VIDU83; { Gii phng trnh bc 2 } Var A, B, C, Delta, X1, X2 : Real; Begin Repeat Write( Nhap he so A khac khong :); Readln(A); Until A<>0; Write( Nhap cac he so B, C: ); Readln(B, C); Delta:=B*B - 4*A* C; If Delta < 0 then Writeln( Ptrinh v nghim! ); If Delta = 0 then begin X1:=-B/(2*A); Writeln( C ng. kp X1=X2= , X1:8:2); end; If Delta > 0 then begin X1 := (-B+ Sqrt(Delta) ) / (2*A); X2 := (-B - Sqrt(Delta) ) / (2*A); Writeln( C hai nghim : ); Writeln(X1= , X1:8:2); Trang 81/268

Writeln(X2= , X2:8:2); end; Readln; End. Chy<VD83.EXE> Chp file ngun <VD83.PAS> Trong chng trnh c ba lnh IF xt ring tng trng hp Delta m, bng khng hoc dng. Ch rng khi Delta=0 th phi lm hai lnh: X1:=-B/(2*A); Writeln( C ng. kp X1=X2= , X1:8:2); nn hai lnh ny phi c t gia hai t kha begin v end to thnh mt cu lnh ghp. Tng t, khi Delta>0 th phi lm nm lnh, v do c nm lnh cng phi trong khi begin v end. Chng trnh c s dng lnh Repeat ... Until (s trnh by phn sau) buc ngi dng phi nhp h s A? 0, nu nhp A=0 th phi nhp li cho n khi A? 0 mi cho lm tip cc lnh pha di. 8.1.2. Cu lnh IF dng 2: C php : IF iukin THEN LnhP ELSE LnhQ ; Ch : Trc t kha ELSE khng c du chm phy. LnhP v LnhQ c th l mt lnh ghp, tc l gm nhiu lnh c t trong khi begin v end. ngha ca lnh: Ty theo iukin l ng hay sai m quyt nh lm mt trong hai lnh: LnhP hoc LnhQ . Nu iukin l ng th lm LnhP, khng lm LnhQ, m chuyn ngay sang thc hin lnh k tip sau LnhQ. Ngc li, nu iukin l sai th khng lm LnhP m lm LnhQ ri chuyn sang lnh k tip sau LnhQ.

Trang 82/268

V d 8.4: tm s ln nht ca hai s a v b, dng lnh: If a<b then Max:=b else Max:=a; Chng trnh di y s nhp vo hai s a v b, tm v in s nh nht v s ln nht ca chng: PROGRAM VIDU84; { Tim so lon nhat va so nho nhat ca hai so } Var a, b, Max, Min : Real; Begin Write( Nhap a va b :); Readln(a,b); If a < b then begin Max:= b; Min:= a; end else { trc else khng c du ; } begin Max:= a; Min:= b; end; Writeln( So lon nhat la: , Max:6:2); Trang 83/268

Writeln( So nho nhat la: , Min:6:2); Readln; End. Chy<VD84.EXE> Chp file ngun <VD83.PAS> 8.1.3. Cu lnh IF lng nhau : Trong cu lnh IF, nu LnhP hoc LnhQ, hoc c hai, li l cu lnh IF th ta c cu trc IF lng nhau. Chng hn di y l hai cu lnh IF... ELSE lng nhau : IF iukin1 THEN If iukin2 then LnhP else LnhQ ELSE LnhR ; V d 8.5: Nhp vo h tn mt ch h, ch s in k thng trc (chiso1) v ch s in k thng ny (chiso2), tnh tin in thng ny cho h, bit rng : Mi kw trong 60 kw u tin c n ga l 5, T kw th 61 n kw th 160 c n gi 8, T kw th 161 tr ln c n ga 10. V d, ng A c ch s in thng trc l chiso1=1020 v ch s in thng ny l chiso2=1070, lng in tiu th tnh ra l Ldtt= 1070-1020=50, do lng in tiu th < 60 nn s tin s l: Tien = 50*5= 250. Nu chiso2=1150 th Ldtt = 1150-1020=130, do lng in tiu th vt qa 60 kw nhng cha vt qa 160 kw nn tin in c tnh l: Tien=60*5 + (130-60) *8 = 860 . Nu chiso2=1234, th Ldtt = 1234-1020= 214, do lng in tiu th vt qa 160 kw nn tin in s l: Tien=60*5 + 100*8 + (214-160)*10= 300+800+54*10= 1640 . Chng trnh c vit nh sau: PROGRAM VIDU85; { Tnh tin in } Trang 84/268

Var Ho_ten: String[18]; chiso1, chiso2, Ldtt, Tien : Real; Begin Write( Nhap ho va ten :); Readln(Ho_ten); Write( Nhap ch s thng trc, ch s thng ny: ); Readln( chiso1, chiso2); Ldtt:=chiso2- chiso1; If Ldtt<= 60 then Tien:=Ldtt*5 else if Ldtt <=160 then Tien:=60*5+(Ldtt - 60)*8 else Tien:=60*5 + 100*8 + (Ldtt - 160) * 10; Writeln( H v tn l , Ho_ten); Writeln( Tin phi tr l , Tien:10:2); Readln; End. Chy<VD85.EXE> Chp file ngun <VD85.PAS> V d 8.6: Nhp s thc x bt k, tnh : Trong Turbo Pascal khng c hm tnh cn bc ba ca x. tnh p dng cng thc ton hc: x = elnx vi x>0, ta c: ta phi dng hai hm Exp(x) v Ln(x).

Trang 85/268

Vy :

Chng trnh nh sau: PROGRAM VIDU86; { Tinh can bac ba cua x } Var x, y : Real; Begin Write( Nhap x :); Readln(x); { tinh y } If x= 0 then y:=0 else If x> 0 then y:=Exp( 1/3*ln(x) ) else y:= - Exp( 1/3*ln(-x) ); Writeln( gia tri y= , y:8:4); Readln; End. Chy<VD86.EXE> Chp file ngun <VD86.PAS> V d 8.7: Nhp tn ca ba sinh vin, in cc tn ln mn hnh theo th t sp xp theo vn A, B, C, ...V d, nhp ba tn l MAI, TUAN, BINH, th in ra l BINH, MAI, TUAN. PROGRAM VIDU87; { Sp xp ba tn} Var T1, T2, T3 : String[8]; Trang 86/268

Begin Write( Nhp tn th nht: ); Readln(T1); Write( Nhp tn th hai: ); Readln(T2); Write( Nhp tn th ba: ); Readln(T3); Writeln( Cc tn c sp th t l:); IF T1<T2 THEN If T2<T3 then writeln(T1, #32 , T2, #32 , T3) Else { tc T3 <= T2 } if T1<T3 then writeln(T1, #32 , T3, #32, T2) else { tc T3 <= T1 } writeln(T3, #32, T1, #32, T2) ELSE { tc l T2<= T1} If T1<T3 then writeln(T2, #32, T1, #32, T3) Else { tc l T3<= T1} if T2<T3 then writeln(T2, #32, T3, #32, T1) else { tc l T3<= T2 } writeln(T3, #32, T2, #32, T1); Readln; End. Chy<VD87.EXE> Chp file ngun <VD87.PAS> Lnh IF trong chng trnh trn lng nhau nhiu cp nn rt phc tp. Khi hc cu trc mng ta s gii bi ton ny gn hn. Ch y?/strong>: Trong cu lnh IF lng nhau, cch xc nh t kha ELSE no i vi t kha IF no l nh sau: xt ngc t di ln, ELSE lun i vi IF gn nht pha trn n m cha c ELSE bt cp. 8.2. CU LNH CASE Trang 87/268

8.2.1. C php, lu v ngha : Trong mt s trng hp, khi phi la chn mt vic trong nhiu vic th cc cu trc IF lng nhau t ra rc ri, kh vit, kh kim tra tnh ng n ca n. Vic dng cu trc CASE c th khc phc c nhc im ny. Lnh CASE c hai dng, chng ch khc nhau mt im l trong dng 2 c ELSE LnhQ, cn trong dng 1 th khng ( hnh 8.3). CASE biuthc OF hng1 : LnhP1; hng2 : LnhP2; .... hngk : LnhPk; END; CASE biuthc OF hng1 : LnhP1; hng2 : LnhP2; .... hngk : LnhPk; ELSE LnhQ; END; Dng 1 Hnh 8.3 : C php ca lnh Case Ch l lnh CASE phi kt thc bng END; Cc yu cu: Kiu d liu ca biuthc ch c th l nguyn, k t, Lgic, hoc kiu lit k hay kiu on con. Xin nhn mnh rng: biuthc khng c l kiu thc hay kiu chui, v y chnh l hn ch ca lnh CASE so vi lnh IF. Cc hng1, hng2, ..., hngk phi c kiu d liu ph hp vi kiu d liu ca biuthc. ngha: Ty theo ga tr ca biuthc bng hng no trong cc hng1, hng2, ..., hngk m quyt nh thc hin lnh no trong cc lnhP1, lnhP2, ..., LnhPk. Cch thc thc hin ca lnh CASE nh sau: Bc 1: Tnh ton ga tr ca biuthc Bc 2: So snh v la chn: Nu ga tr ca biuthc = hng1 th thc hin LnhP1, ri chuyn sang lnh k tip sau End, ngc li: Nu ga tr ca biuthc = hng2 th thc hin LnhP2, ri chuyn sang lnh k tip sau End, ngc li: .v.v. Nu ga tr ca biuthc = hngk th thc hin LnhPk, ri chuyn sang lnh k tip sau End, ngc li : a) chuyn ngay sang lnh k tip sau End ( nu l dng 1) Trang 88/268 Dng 2

b) thc hin LnhQ, ri chuyn sang lnh k tip sau End (nu l dng 2) . Hnh 8.4 v hnh 8.5 l cc s ca lnh CASE v cho trng hp k=3. Trong hnh v , ta k hiu: G l ga tr ca biuthc H1, H2, H3 l hng1, hng2, hng3 P1, P2, P3, Q l LnhP1, LnhP2 , LnhP3 va?LnhQ.

8.2.2. Cc v d : V d 8.8: Nhp vo h tn v nm sinh ca mt ngi, cho bit ngi ny thuc la tui no: s sinh, nhi ng, thiu nin, thanh nin, trung nin hay ngi ln tui, bit rng: S sinh c tui t 0 n 1 Nhi ng : c tui t 2 n 9 Trang 89/268

Thiu nin c tui t 10 n 15 Thanh nin c tui t 16 n 32 Trung nin c tui t 33 n 50 Ngi ln tui c tui trn 50. Chng trnh c vit nh sau: PROGRAM VIDU88; Var Ho_ten: String[20]; Namsinh, Namnay, Tuoi : Integer ; Phanloai : String[14]; Begin Write( Nhp h v tn: ); Readln(Ho_ten); Write( Nhp nm sinh v nm nay : ); Readln(Namsinh, Namnay); Tuoi:=Namnay - Namsinh; If Tuoi< 0 then writeln( Nhp sai ) else begin Case Tuoi OF 0 ,1 : Phanloai:= s sinh; 2 ..9 : Phanloai:= nhi ong; 10 ..15 : Phanloai:= thieu nin; 16 ..32 : Phanloai:= thanh nien; 33 ..50 : Phanloai:= trung nien; else Phanloai:= nguoi lon tuoi; End; { ht Case } Writeln(Ho_ten, #32 , Tuoi, #32 , Phanloai); Trang 90/268

end; Readln; End. Chy<VD88.EXE> Chp file ngun <VD88.PAS> Trong v d ny, lnh CASE da vo Tui xc nh la tui, kt qa lu vo bin Phanloai. ng vai tr hng1 l hai s 0 v 1 vit cch nhau bi du phy, v dng : 0,1: Phanloai:=So sinh ; c ngha l khi Tui bng 0 hoc bng 1 th thc hin lnh gn: Phanloai:=So sinh ; ng vai tr hng2 l tt c cc s nguyn trong phm vi t 2 n 9, v dng : 2 ..9 : Phanloai:= nhi ong; c ngha l khi Tui bng mt trong cc s nguyn t 2 n 9 th thc hin lnh gn: Phanloai:= nhi ong; V d 8.9: Xy dng thc n cho php la chn mt trong bn vic : tnh tng , tnh hiu, tnh tch hoc tnh thng ca hai s x, y nhp t bn phm. Mn hnh cn hin ra bn mc sau cho mi ngi la chn : A. TNH TNG HAI S B. TNH HIU HAI S C. TNH TCH HAI S D. TNH THNG HAI S Mun chn mc no ta g ch ci u ca mc . V d g A? th mn hnh hin kt qa ca x+y, g B? th hin kt qa ca x-y, ... i vi mc D, nu y khc khng th in kt qa ca x/y, cn y=0 th in cu " Khng xc nh". Nu ngi dng nhp mt k t khc A, B, C, D, a, b, c, d th my hin li nhc : " Khng c mc ny ". Bin Ch kiu k t c dng lu ch ci (mc) m ngi dng chn. Ty theo gi tr ca Ch m lnh CASE s quyt nh phi lm g. Chng trnh c vit nh sau : PROGRAM VIDU89; { Thc n } Uses Crt; Trang 91/268

Var x, y : Real; Ch : Char; Begin Clrscr; Write('Nhap x va y:'); Readln(x, y); Gotoxy(10, 3); Write('A. TINH TONG HAI SO'); Gotoxy(10, 5); Write('B. TINH HIEU HAI SO'); Gotoxy(10, 7); Write('C. TINH TICH HAI SO'); Gotoxy(10, 9); Write('D. TINH THUONG HAI SO'); Gotoxy(2,11); Write('-Ban chon muc nao (A, B, C, D) ?:'); Readln(Ch); CASE Ch of 'A', 'a': Writeln('Tong =', x+y :6:2); 'B', 'b': Writeln(' Hieu =', x-y :6:2); 'C', 'c': Writeln(' Tich =', x*y :6:2); 'D', 'd': If y<>0 then Writeln(' Thuong =', x/y:6:2 ) else Writeln(' Khong xac dinh !'); ELSE Writeln(' Khong co muc ', Ch); END; Readln; End. Chy<VD89.EXE> Chp file ngun <VD89.PAS> Trong chng trnh c s dng th tc : GOTOXY ( m, n) thuc th vin CRT, c chc nng t con tr mn hnh vo ta ct th m, dng th n trn mn hnh. V d lnh Gotoxy (10, 3); t con tr mn hnh vo ta ct 10, dng 3. Trang 92/268

V d 8.10: Nhp vo thng v nm, cho bit thng trong nm c bao nhiu ngy. Theo dng lch : Cc thng 4, 6, 9, v 11: c 30 ngy, Cc thng 1, 3, 5, 7, 8, 10 v 12: c 31 ngy, Ring thng 2 th bnh thng c 28 ngy, nhng nu l nm nhun th c 29 ngy. Cch xc nh mt nm l nhun nh sau: * hoc l nm chia ht cho 400 (v d nm 1600, nm 2000). * hoc l nm khng chia ht cho 100 v chia ht cho 4 ( v d cc nm 1988, 1992, 1996 u l nm nhun). Trong chng trnh ta dng mt bin lgic c tn l Nhuan xc nh c phi l nm nhun hay khng. PROGRAM VIDU810; { Xc nh s ngy ca thng } Var Thang, Nam, Songay : Integer ; Nhuan : Boolean; Begin Write(Nhp Thang, Nam : ); Readln(Thang, Nam); If (Thang<1) or ( Thang>12) then writeln( Nhp sai ) else begin Case Thang OF 4, 6, 9, 11 : Songay:=30; 1, 3, 5, 7, 8, 10, 12 : Songay:=31; 2 : begin Nhuan:= (Nam mod 400=0) or ( (Nam mod 100<>0) and (Nam mod 4=0) ); If Nhuan= TRUE then Songay:=29 else Songay:=28; end; Trang 93/268

End; { Ht Case } Writeln( S ngy l : , Songay); end; Readln; End. Chy<VD810.EXE> Chp file ngun <VD810.PAS> Trong v d ny, khi Thng=2 th phi lm hai lnh c t trong khi begin v end, chnh l mt lnh ghp: begin Nhuan:= (Nam mod 400=0) or ( (Nam mod 100<>0) and (Nam mod 4=0) ); If Nhuan= TRUE then Songay:=29 else Songay:=28; end; 8.2.3. Cu lnh CASE lng nhau : Trong cu trc CASE, khi mt trong cc LnhP1, LnhP2, ..., LnhPk hay LnhQ li l mt lnh CASE th ta c cu trc CASE lng nhau. V d 8.11: Mt x nghip tnh tin thng hng thng cho cng nhn theo cng thc : Tin thng= H s * 200. Trong H s c tnh da vo kt qa bnh chn phn loi lao ng (loi A, B hay C) v ni lm vic (c s 1 hay c s 2) ca mi ngi trong thng, c th nh sau : Loi A B C C s 1 2.0 1.5 1.0 C s 2 2.5 1.8 1.0

V d nu ng X c xp loi A v lm vic c s 1 th c h s thng l 2.0, nn tin thng l =2.0*200=400. Vit chng trnh nhp h tn, phn loi lao ng v ni lm vic ca mt cng nhn, tnh tin thng cho ngi . PROGRAM VIDU811; { Tnh tin thng cho cng nhn } Var Ho_ten: String[20]; Loai : Char; Trang 94/268

Coso : Byte; Heso, Thuong : Real; Begin Write( Nhp h v tn: ); Readln(Ho_ten); Write( Nhp c s lm vic (1,2): ); Readln(Coso); Write( Nhp phn loi lao ng (A,B,C) : ); Readln(Loai); CASE Loai OF A, a: Case Coso of 1: Heso:=2.0; 2: Heso:=2.5; end; B, b: Case Coso of 1: Heso:=1.5; 2: Heso:=1.8; end; C, c: Heso:=1.0; END; { Ht CASE } Thuong:=Heso*200; Writeln(H v tn Tin thng ); Writeln(Ho_ten , Thuong:8:2 ); Readln; End. Chy<VD811.EXE> Chp file ngun <VD811.PAS> 8.2.4. So snh lnh Case vi lnh If : Trang 95/268

Lnh If v lnh Case u l cc cu lnh r nhnh, cho php la chn mt cng vic trong nhiu cng vic c la chn. Nhng cu trc If tng qut v mnh hn cu trc Case v lnh If khng hn ch g c, cn lnh Case th yu cu biu thc v cc hng phi thuc kiu d liu m c: nguyn, k t, l gic, lit k hay on con, khng c l kiu thc hay chui. Lnh Case no cng c th thay th tng ng bng cc lnh IF. V d lnh Case trong chng trnh ni trn ( V d 8.11 ) c th thay bng ba lnh If sau: If (Loai=A) or (Loai=a) then if Coso=1 then Heso:=2.0 else Heso:=2.5; If (Loai=B) or (Loai=b) then if Coso=1 then Heso:=1.5 else Heso:=1.8; If (Loai=C) or (Loai=c) then Heso:=1.0; Tuy nhin khng phi lnh If no cng thay bng lnh Case c. Vic s dng lnh Case trong nhiu trng hp c tc dng lm r rng v ni bt b cc ca mt on chng trnh, t d c, d hiu hn. Thng thng, ngi ta dng lnh Case thay th cc cu trc If lng nhau khi c nhiu ( ba, bn, ... ) tnh hung r nhnh v khi iu kin cho php . Cc bn hy vit li cc chng trnh trong cc v d 8.8, 8.9, 8.10, 8.11 nhng thay lnh Case bng cc lnh IF. 8.3. CU HI TRC NGHIM Cu 1: Lnh no sau y in ra mn hnh s ln nht gia A v B : a) If A > B then write(B) else write(A); b) If A > B then write(A) else write(B); c) If A > B then Readln(A) else Readln(B); d) If A < B then writeln(A) else writeln(B); Cu 2: Cho N l bin kiu nguyn, chn cu ng c php : a) If N < 10 then write (' Nho hon 10 ') ; else write (' Lon hon 10 '); b) If N < 10 Write (' Nho hon 10 ') else then write (' Lon hon 10 '); c) If N < 10 then write (' Nho hon 10 ') else write (' Lon hon 10 '); d) If N < 10 then N := 10 else N > 20 then write (' N > 20 '); Cu 3: Kim tra nu ba s a, b, c u ln hn 1 th in s 1, chn lnh no : a) if (a > 1) and ( b > 1) and ( c > 1) then write(1); b) if (a > 1) or (b > 1) or (c > 1) then write(1); Trang 96/268

c) if a > 1 and b > 1 and c > 1 then write(1); d) if a, b , c u > 1 then write(1); Cu 4: Cho i l bin nguyn. Sau khi thc hin cc lnh : i:=2; Case i of 1: i:=i+1; 2: i:=i+2; 3: i:=i+3; end; Ga tr sau cng ca i l : a) 2 b) 3 c) 4 d) 5 Cu 5: Cho N l bin nguyn, sau khi thc hin cc lnh: N:= 9; If N< 0 then writeln( So am) else Case N mod 2 of 0: Writeln( Chan); 1: Writeln( Le ); end; Kt qa in ln mn hnh l: a) Chan b) Le c) So am d) khng in g c Cu 6: Cho hm s: 2x-1 , x<= -1 Trang 97/268

y = sinx , -1<x<= 0 x , x>0 Nhm lnh no tnh ng y : a) if x > 0 then y:=x ; if x > -1 then y:=Sin(x) else y:= 2*x+1; b) if x <= -1 then y:=2*x +1 else if x <=0 then y:=Sin(x) else y:=x;

Cu 7: Gi s i l bin nguyn, sau khi thc hin cc lnh : i:=5; Case i of 1: i:=i+1; 2: i:=i+2; 3: i:=i+3; else i:=2*i; End; th ga tr sau cng ca i l : a) 10 b) 6 c) 8 d) 9 Cu 8: Cho ch bin k t, i bin nguyn, sau khi thc hin cc lnh: i:= -15; ch:='E'; Case i of 0..14 : ch:='D'; 15..20: ch:='C'; 21..24: ch:='B'; else ch:='A'; Trang 98/268

End; th ga tr sau cng ca ch l : a) 'A' b) 'B' c) 'C' d) 'E' Cu 9: Cho ch bin k t, i bin nguyn. gn tr cho bin ch, th lnh : Case i of 0,1,2 : ch:='A'; 3..8 : ch:='B'; else ch:='C'; end; tng ng vi nhm lnh no : a) If i<0 then ch:=C b) if (i >= 0) and (i<= 2) then ch:='A'; else if (i>=3) and (i<=8) then ch:='B' if i<=2 then ch:=A else else ch:='C'; if i<=8 then ch:=B else ch:=C ; Cu 10: Khi chy chng trnh : Var S, i : Integer; Begin i := 3; S:= 4; if ( i > 5 ) then S:= 5 /2 + ( 5 - i ) * 2 else if ( i > 2 ) then S:= 5 * i else S:= 0; End. Trang 99/268

Gi tr sau cng ca S l : a) 0 b) 3 c) 20 d) 40 8.4. BI TP Cu 1) Nhp bn s x1, x2, x3, x4 , tm s ln nht v s nh nht ca bn s . Cu 2) Nhp mt ch ci, nu l ch thng th i thnh ch hoa, ngc li, nu l ch hoa th i thnh ch thng. V d : nhp A in ra a, nhp b th in ra B. Cu 3) Nhp cc h s, gii v bin lun cc h phng trnh sau theo quy tc Cramer :

Cu 4) Nhp s thc x v tnh : (Hd: dng hm ex v Lnx, xt ba trng hp x=0, x>0, x<0). Cu 5) Nhp s thc x v tnh: y= Cu 6) Nhp x thc v tnh y theo cng thc :

Cu 7) Nhp h tn mt ch h, nh mc in hng thng ca h, ch s in k thng trc v thng ny. Hy tnh tin in cho h, bit rng: Mi kw trong nh mc c n ga l 5, 100 kw u tin trn nh mc c n gi 8, T kw th 101 trn nh mc tr ln c n ga 10. Cu 8) Nhp H tn, Chc v (gim c, trng phng, ph phng hay nhn vin - khi nhp g tt l: GD, TP, PP, NV ) v Mc lng thng ca mt ngi.Tnh: Trang 100/268

Ph cp lng cho ngi nh sau : PC = 50% Mc lng thng nu l GD = 40% " " " TP = 30% " " " PP = 20% " " " NV Tnh Tng thu nhp thng theo cng thc : TONGTN = Mc lng + PC In H tn,Chc v, Mc lng , Ph cp v Tng thu nhp ln mn hnh . Cu 9) Tnh tin thu my cho mt lp hc nh sau : Nhp GBD ( gi bt u lm) : 6 GBD 20 GKT ( gi kt thc lm) : GBD < GKT 21 SLM ( s lng my ). Cho bit n ga : 2.5 ngn ng/ 1 gi/ 1 my, p dng trc 16 gi 3 ngn ng/ 1 gi/ 1 my, p dng sau 16 gi. Gii quyt bi ton trong hai trng hp : a) GBD, GKT u nguyn ? b) GBD, GKT khng nguyn ? Cu 10) Nhp H tn, cc im Ton, L, Ha ( kiu nguyn ) cho mt ngi. Tnh Tng im ba mn : TONG = TOAN + LY + HOA v phn loi nh sau : Km : khi TONG= 0, 1, 2, ...,14 Trung bnh : khi TONG= 15, 16, ..., 20 Kh : khi TONG= 21, 22, ..., 26 Gii : khi TONG 27 In ln mn hnh H tn, cc im TOAN, LY, HOA, TONG v Phn loi. Cu *11) Cng hi nh bi 10 nhng phn loi nh sau : TONG <15 :-Loi Km 15 TONG<21 :-Nu c mt mn b im < 5 : loi Km, khng c mn no b im<5 : loi Trung bnh. 21 TONG<27 :-Nu c mt mn b im < 7 : loi Trung bnh, khng c mn no b im < 7 : loi Kh. Trang 101/268

TONG 27 :-Nu c mt mn b im < 9 : loi Kh, khng c mn no b im < 9 : loi Gii. Cu 12) Nhp mt thng, cho bit thng thuc ma no (Xun, H, Thu, ng), bit rng thng 2, 3, 4 l ma Xun, thng 5, 6, 7: ma H, thng 8, 9, 10: ma Thu, v thng 11, 12, 1: ma ng. Cu 13) Nhp mt k t bt k, cho bit k t thuc loi no: l ch hoa, l ch thng, l ch s hay cc k t khc. Cu 14) Nhp ba s bt k, in chng theo th t tng dn. Cu *15) Nm m lch tnh theo Can v Chi. C 10 Can l: Gip, t, Bnh, inh, Mu, K, Canh, Tn, Nhm, Qy, v c 12 Chi l: T, Su, Dn, Mo, Thn, T, Ng, Mi, Thn, Du, Tut , Hi. Hy nhp vo mt nm dng lch cho bit nm m lch tng ng, bit rng nm 1999 l nm K Mo. Cu *16) Nhp di ba cnh a, b, c .Cho bit a, b, c c phi l ba cnh ca mt tam gic khng ; nu l ba cnh ca mt tam gac th cho bit lm tam gic g: u, cn, vung cn, vung hay tam gic thng ?

9.1. CU LNH LP FOR 9.1.1. Cu lnh FOR dng 1: 9.1.1.1. C php , lu , cch thc hot ng : C php: FOR bin := m1 TO m2 DO LnhP; Yu cu: bin phi thuc kiu d liu n gin m c, thng l kiu nguyn, k t hay l gic, khng th l kiu thc hay chui. m1, m2 l cc biu thc c cng kiu d liu vi bin, LnhP c th l mt lnh n gin, lnh c cu trc, hoc l mt lnh ghp gm nhiu lnh t trong khi begin v end. Hnh 9.1 l s khi ca lnh For vi b l vit tt ca bin. Cch thc hot ng ca FOR: Bc 1: Gn gi tr bin := m1; Bc 2: Nu bin m2 th lm LnhP, ri sang bc 3; Nu bin >m2 th khng lm LnhP m chuyn sang lnh k tip pha di. Bc 3 : Tng ga tr ca bin : bin:=Succ(bin); Quay li bc 2. Tm li, LnhP s c lm i lm li, bt u khi bin=m1, v kt thc khi bin =m2+1, c thy l m2-m1+1 ln. V th, ngi ta gi FOR l vng lp c s ln lp bit trc. Trang 102/268

9.1.1.2. Cc v d c bn : V d 9.1: Bi ton tnh tng : Hy tnh tng : S= 12 + 22+ 32+...+ 102 Thut ton: Bc 0: gn S:=0; { gn ga tr ban ? cho S} Bc 1: gn S:=S+1*1; { c S=12 } Bc 2: gn S:=S+2*2; { c S=12+22} Bc 3: gn S:=S+3*3; { S=12+22+32} .v.v. Bc 10: gn S:=S+10*10; { c S=12+22+32+...+102} Qa trnh t bc 1 n bc 10 c gi l php cng dn vo bin S. Ti bc th i, ly ga tr ca bin S cng vi i , kt qa li c gn cho bin S, do ga tr ca bin S c tng thm mt lng b?g i2. Khi i thay i t 1 n 10 th cc s 12, 22, 32, ..., 102 u c cng vo S, kt qa l sau bc th 10 ga tr ca S ng bng tng 12 + 22 + 32 + ... + 102.
2

Tm li, lnh: S:=S + i*i; c lm c thy 10 l?, ng vi i=1, 2, ..., 10. Qa trnh ny c din t b?g l?h FOR, nh sau: For i:=1 To 10 DO S:=S+ i*i ; Mt cch tng qut, tnh tng :S= 12 + 22+ 32+...+ N2 , trong N l mt s nguyn dng bt k, ta dng hai lnh: S:=0; For i:=1 To N DO S:=S+ i*i ; Trang 103/268

Di y l chng trnh c th : PROGRAM VIDU91; { Tnh tng cc bnh phng cc s t nhin <=N} Var N, i : Integer; S : LongInt; Begin Write( Nhp N :); Readln(N); S:=0; For i:=1 to N do S:=S+i*i ; Writeln(S= , S); Readln; End. Chy<VD91.EXE> Chp file ngun <VD91.PAS> M rng bi ton tnh tng: Tnh tng an du : S = 12 - 22 + 32 - 42 +...+(-1)N-1 N2 Ta vit: S = 12 + (- 22 ) + 32 + (- 42 ) + ... +(-1)N-1 N2 Nhn thy, s hng th i ca v phi c ga tr tuyt i bng i2 , mang du cng nu i l, mang du tr nu i chn. Ni cch khc, ta s cng dn i2 vo S nu i l, v cng dn (- i2 ) vo S nu i chn. Vic xc nh i l hay chn da vo hm Odd(i) hay kt qa ca php ton i Mod 2. Vy, cc lnh s dng l : S:=0; For i:=1 To N DO if i mod 2 <> 0 then S:=S+ i*i else S:= S- i*i ; Cc bn hy vit chng trnh tnh tng an du ny. V d 9.2: Bi ton tnh tch: Tnh S= 10! . Ta vit S=1*2*3*...*10. Trang 104/268

Thut ton: Bc 0: gn S:=1; { gn ga tr ban ? cho S} Bc 1: gn S:=S*1; { c S=1 } Bc 2: gn S:=S*2; { c S=1*2} Bc 3: gn S:=S*3; { c S=1*2*3} .v.v. Bc 10: gn S:=S*10; { c S=1*2*3*...*10 =10!} Nu trong v d 1, ta phi cng dn vo bin S th trong v d ny ta phi nhn dn vo bin S. Ti bc th i, ly ga tr ca bin S nhn vi i, ri li gn kt qa cho bin S. Khi i thay i t 1 n 10 th S s tch ly cc tha s 1, 2, 3,...,10, v ga tr ca S sau bc th 10 ng bng 1*2*3*...*10 =10!. Qa trnh thc hin t bc 1 n bc th 10 c m t bng cu lnh For : For i:=1 to 10 DO S:=S * i ; Mt cch tng qut, tnh tch: S= 1*2*...*N , trong N l mt s nguyn dng bt k, ta dng hai lnh: S:=1; For i:=1 To N DO S:=S* i ; Di y l chng trnh c th : PROGRAM VIDU92; { Tnh S=N! } Var N, i : Integer; S : LongInt; Begin Write(Nhp s dng N : ); Readln(N); S:=1; For i:=1 to N do S:=S * i ; Writeln(Giai thua = , S); Readln; End. Chy<VD92.EXE> Trang 105/268

Chp file ngun <VD92.PAS> V d 9.3: Bi ton tnh ly tha: Nhp s t nhin N v mt s thc x bt k, tnh S= xN .

Tng t nh tnh N!: u tin ta gn S:=1, sau ti mi bc lp, ta nhn dn x vo S bng lnh S:=S*x. Sau N bc nh vy, S s c nhn vi x ng N ln. Vy hai lnh cn dng l: S:=1; For i:=1 TO N DO S:=S*x; Di y l chng trnh c th : PROGRAM VIDU93; { Tnh S=ly tha N ca x } Var N, i : Byte ; S, x : Real ; Begin Write(Nhp hai s x v N : ); Readln( x, N); S:=1; For i:= 1 to N do S := S * x ; Writeln(Luy thua= , S : 6:2); Readln; End. Chy <VD93.EXE> Chp file ngun <VD93.PAS> V d 9.4: In bng cc ch ci t A n Z thnh bn ct nh sau: K T M A 65 a K T M 97 Trang 106/268

66

98

Yu cu in thnh tng trang mn hnh, mi trang 15 dng. Trong chng trnh ta dng bin Dem m s dng in, mi khi in xong mt dng th bin Dem c cng thm 1. Khi Dem = 15, 30, 45, ... (tc Dem mod 15=0) th phi lm lnh Readln; lnh ny s dng mn hnh cho n khi ta g Enter mi in tip. PROGRAM VIDU94; { In bng cc ch ci} Uses Crt; Var ch, ch1 : Char; Dem: Integer; Begin CLRSCR; Writeln( KY TU MA KY TU MA); Dem:=0; For ch:=a to z do begin ch1:=Upcase(ch); Writeln( ch1 :3 , Ord(ch1) :6 , ch :6 , Ord(ch) :6 ); Inc(Dem); If Dem mod 15 = 0 then begin Write( Enter xem tip ); Readln; end; end; Writeln( HET ); Readln; End. Trang 107/268

Chy<VD94.EXE> Chp file ngun <VD94.PAS> Chng trnh trn l mt v d v cch dng bin chy kiu k t (ch) trong lnh FOR, ngoi ra, ng vai tr LnhP l mt lnh ghp, gm nhiu lnh t trong khi begin v end.

9.1.2. Cu lnh FOR dng 2: C php: FOR bin := m2 DOWNTO m1 DO LnhP; Cch thc hot ng ca FOR dng 2: Bc 1: gn ga tr bin := m2; Bc 2: Nu bin m1 th lm LnhP, ri sang bc 3.

Nu bin<m1 th khng lm LnhP m chuyn sang lnh k tip pha di. Bc 3 : Gim ga tr ca bin : bin:=Pred(bin); Quay li bc 2. Tm li, LnhP s c lm i lm li, bt u khi bin=m2, v kt thc khi bin = m1-1, c thy l m2-m1+1 ln.

V d 9.5: tnh S= N!, ta c th vit : S=N*(N-1)*(N-2)*...*2*1 Cch vit cho thy ngay cch tnh: u tin gn S:=1, sau thc hin vic nhn dn S:=S* i vi i= N, N-1,..., 2, 1. Tc l: Trang 108/268

S:=1; For i:=N downto 1 do S:=S* i; Tng t , tnh S=xN , ta cng c th dng FOR dng 2 : S:=1; For i:=N downto 1 do S:=S* x; Nh vy, lnh FOR dng 2 v bn cht ch l mt cch vit khc ca dng 1. Thng thng ngi ta hay dng lnh FOR dng 1, tuy nhin c kh nhiu tnh hung m vic dng lnh FOR dng 2 t ra rt hiu qa, nh v d sau y: V d 9.6 : In cc ch ci theo th t ngc t Z n A thnh hai dng : Z, Y, X, ..., C, B, A z, y, x, ... , c, b, a Chng trnh c vit nh sau: PROGRAM VIDU96; { In cc ch ci theo th t o ngc t z n a} Var Ch: Char; Begin For ch:=Z downto A do write(ch:3 ); Writeln; For ch:=z downto a do write(ch :3 ); Writeln; Readln; End. Chy<VD96.EXE> Chp file ngun <VD96.PAS> 9.1.3. Cu lnh FOR lng nhau : Trong cu trc FOR, khi LnhP cng l mt lnh FOR th ta c cu trc FOR lng nhau: FOR bin1:= m1 TO m2 DO FOR bin2:=n1 TO n2 DO LnhP; Cch thc hot ng ca lnh ny nh sau: Trang 109/268 {1} {2}

u tin cho bin1:=m1 v lm lnh dng {2}. V dng {2} l lnh FOR nn vi mi ga tr ca bin2=n1, ..., n2, u phi lm LnhP, kt qa l LnhP c lm n2-n1+1 ln. By gi tng: bin1:=Succ(bin1), ri li lm lnh FOR dng {2}, kt qa lnhP c lm thm n2-n1+1 ln na. .v.v. Qa trnh trn c tip tc cho n khi bin1=m2+1 th dng. Lnh FOR {1} lm m2-m1+1 ln lnh FOR {2}, cn chnh lnh FOR {2} li lm n2-n1+1 ln LnhP. V th lnhP c lm c thy l (m2-m1+1)*(n2-n1+1) ln. V d 9.7: In hnh ch nht c nh di y:

Ta thy mi dng gm m ch A, tc l ch A c in lin tip c thy m ln, vic ny c lm bng lnh : For j:=1 to m do write(A); Lnh Write in m ch A trn mt dng. In xong, con tr vn nm cui dng , v th trc khi in dng tip theo, cn phi a con tr xung dng di bng lnh: Writeln; Tm li, mun in dng th i, cn phi lm hai lnh: For j:=1 to m do write(A); Writeln; C thy ta phi in n dng nh th, tc l: For i:=1 to n do In dng i ; Thay In dng i bng hai lnh ni trn (t trong khi begin ... end) , ta c thut ton in hnh ch nht c l: For i:=1 to n do begin for j:=1 to m do write(A); Writeln; end; Trang 110/268

Cc bn hy vit chng trnh c th cho v d ny, y m v n l hai s nguyn dng nhp t bn phm. 9.1.4. Cc ng dng khc ca lnh FOR : Lnh For rt thng dng, d dng v gii quyt c nhiu bi ton trong khoa hc k thut v trong thc tin. Di y ch xin nu hai ng dng . V d 9.8: Tm cc s Fibonaci. Dy s Fibonaci { 1, 1, 2, 3, 5, 8, 13, 21,... } c nhc nhiu trong gii khoa hc k thut, n c xy dng nh sau: U0=1, U1=1 , Uk=Uk-1 + Uk-2 vi mi k= 2, 3, 4, ... Gi U l s hng th k, Uo v U1 ln lt l hai s hng ng ngay trc U. u tin ta gn: Uo:=1; U1:=1; Bc 1: tnh U:=Uo+U1 v in U. Lc ny U=2 chnh l U2 . chun b tnh U3, ta cho Uo ng vai tr ca U1 v U1 ng vai tr ca U, tc l gn: Uo:=U1; U1:=U; Kt qa l Uo=1 v U1=2. Bc 2: tnh U:=Uo+U1 v in U. Lc ny U=3 chnh l U3 . chun b tnh U4, ta li cho Uo ng vai tr ca U1 v U1 ng vai tr ca U, tc l gn: Uo:=U1; U1:=U; Kt qa l Uo=2 v U1=3. .v.v. Tm li cc lnh phi lp i lp li l: U:=Uo+U1; Uo:=U1; U1:=U; V sang bc sau th ga tr ca U s b thay i nn ti mi bc ta u phi in U. chng trnh c vit nh sau: PROGRAM VIDU98; { In N+1 s Fibonaci u tin } Trang 111/268

Var N, i, U, Uo, U1 : Integer; Begin Write( Nhp N :); Readln(N); Uo:=1; U1:=1; Writeln( N+1 , s Fibonaci u tin l : ); Write(Uo:3 , U1:3); For i :=2 to N do begin U:=Uo+U1; Write(U:3); Uo:=U1; U1:=U; end; Readln; End. Chy<VD98.EXE> Chp file ngun <VD98.PAS> V d 9.9: Bi ton tnh tin li gi ngn hng: Nhp tin vn ban u, s thng gi N v li sut hng thng. Tnh s tin nhn c sau mi thng gi bit rng tin li hng thng c gp vo tin vn. V d, tin vn l100, li sut thng l 2%. Sau 1 thng gi s c s tin l: S tin=100 + 100*0.02 = 102 Sau 2 thng gi s c s tin l: S tin=102 + 102*0.02 = 104.04 Cng thc tnh tin thu c sau mi thng gi l: S tin := Tin vn + Tin vn * Li sut Trang 112/268

S tin ny li tr thnh tin vn ca thng sau, tc l: Tin vn := S tin; Qa trnh c lp i lp li t thng 1 n thng N. Chng trnh c th nh sau: PROGRAM VIDU99; { Tnh tin gi ngn hng sau N thng} Var Tienvon, Laisuat, Sotien : Real; N, i : Byte; Begin Write( Nhp tin vn, li sut v s thng gi : ); Readln(Tienvon, Laisuat, N); For i:=1 to N do begin Sotien:= Tienvon + Tienvon*Laisuat; Writeln(S tin sau , i , thng = , Sotien:8:2); Tienvon:=Sotien; end; Readln; End. Chy<VD99.EXE> Chp file ngun <VD99.PAS>

9.2. CU LNH WHILE 9.2.1. C php, lu , cch thc hot ng : C php: WHILE iukin DO LnhP ;

Trang 113/268

ngha : Chng no iukin cn ng th c lm LnhP , cho n khi iukin sai th khng lm LnhP na m chuyn sang lnh k tip pha di. Cch thc hot ng ca WHILE: Bc 1: Nu iukin sai th chuyn ngay sang lnh k tip sau LnhP, ngc li, nu iukin ng th lm LnhP, ri quay li bc 1.

Lnh P c gi l thn ca vng lp WHILE. Nu iukin khng bao gi sai th LnhP s phi lm hoi, lc ta c vng lp v hn. Trong trng hp ny, dng chng trnh, hy g ng thi hai phm Ctrl v Pause ( vit tt l ^Pause). trnh cc vng lp v hn, trong thn ca vng WHILE cn c t nht mt lnh c tc dng lm bin i cc i lng tham gia trong iukin n mt lc no th iukin s sai v do vng lp s kt thc. 9.2.2. Cc v d v lnh While : V d 9.10 : Nhp s t nhin N, dng lnh WHILE tnh S=N!: PROGRAM VIDU910; { Tinh S=N! bng lnh WHILE..} Var N, i : Integer; S : LongInt; Begin Write( Nhp N > 0 : ); Readln(N); S:=1; i :=1; {9} Trang 114/268

While i<= N do begin S:=S*i; i:=i+1; end; Writeln( Giai thua = , S); Readln; End. Chy<VD910.EXE> Chp file ngun <VD910.PAS> Khi u bin i c gn ga tr 1 (dng {9}). Trong vng lp WHILE, sau mi lnh S:=S*i; bin i c tng ln 1 n v bng lnh i:=i+1; (dng {13}). Khi i=N+1 th iu kin i<=N b sai v lc vng lp kt thc, kt qa l lnh S:=S*i; c thc hin ng N l? ng vi i=1, 2, 3, ..., N. Trong chng trnh trn, nu khng c dng lnh {13}: i:=i+1; th i lun lun bng 1 nn iu kin i<=N lun lun ng (v N 1), v do vng lp s v hn . S khc nhau ca lnh WHILE so vi FOR l ch: trong lnh FOR, bin i c t ng gn ga tr ban u v sau mi bc lp c t ng tng ln, cn trong WHILE th khng, ta phi vit cc lnh . Tt c cc bi ton gii quyt c bng lnh FOR th u gii quyt c bng lnh WHILE. c im chung ca cc bi ton dng ny l s ln lp ca cc vng lp c bit trc. Lnh WHILE c bit thch hp vi cc vng lp c s ln lp cha bit trc, trong khi lnh FOR khng gii quyt c. y chnh l im mnh ca lnh WHILE. Hy xem v d sau. V d 9.11: Tr li bi ton tnh tin gi ngn hng c tin li hng thng gp vo vn (v d 9.9). Cu hi by gi l: cn gi ti thiu l bao nhiu thng c c s tin ? S cho trc. Gi s tin vn l 100, li sut hng thng l 2%, s tin cn c l S=108. Ta tnh s tin c c sau mi thng gi: Sau 1 thng gi: S tin=100 + 100*0.02 = 102 Sau 2 thng gi: S tin=102 + 102*0.02 = 104.04 Sau 3 thng gi: S tin=104.04 + 104.04*0.02 = 106.1208 Sau 4 thng gi: S tin=106.1208 + 106.1208*0.02 = 108.2432 Vy ch cn gi N=4 thng, s tin s c l 108.2431. Qa trnh lp kt thc khi ti thng u tin c S tin S. Trang 115/268 {13}

Chng trnh nh sau: PROGRAM VIDU911; { Tnh s thng gi ngn hng c s tin S } Var Tienvon, Laisuat, Sotien, S : Real; N : Byte; Begin Write( Nhp tin vn, li sut v s tin S cn c: ); Readln(Tienvon, Laisuat, S); Sotien:=Tienvon; N:=0; { N l s thng gi } While Sotien< S do begin N:=N+1; Sotien:= Tienvon + Tienvon*Laisuat ; Tienvon:=Sotien; end; Writeln( Cn gi , N , thng ); Writeln( S tin s c = , Sotien:6:2); Readln; End. Chy<VD911.EXE> Chp file ngun <VD911.PAS> S ln lp ca lnh: While Sotien < S do . . . khng phi do ta n nh t trc m ty thuc vo biu thc Sotien < S l mau b sai hay chm b sai. S ln lp t hay nhiu ph thuc vo ga tr S nh hay ln v vo tc tng nhanh hay chm ca s tin.

9.3. CU LNH REPEAT 9.3.1. C php, lu , cch thc hot ng : Trang 116/268

C php: REPEAT LnhP; UNTIL iukin ; ngha: Chng no iukin cn sai th c lm LnhP, cho n khi iukin ng th khng lm LnhP na m chuyn sang lnh k tip pha di.

Cch thc hot ng ca REPEAT: Bc 1: Lm LnhP, ri kim tra iukin, nu iukin ng th chuyn sang lnh tip theo pha di, ngc li, nu iukin sai th quay li bc 1. LnhP cng c gi l thn ca vng lp REPEAT, nu n gm nhiu lnh th cc lnh khng cn phi t trong khi begin va?end. Nu iukin khng bao gi ng th LnhP s phi lm hoi, lc ta c vng lp v hn. Trong trng hp ny, mun dng chng trnh, hy g ng thi hai phm Ctrl v Pause (^Pause). trnh cc vng lp v hn, trong thn ca lnh REPEAT cn c t nht mt lnh c tc dng lm bin i cc i lng tham gia trong iukin n mt lc no th iukin s ng v do vng lp s kt thc. Cc vng lp c s ln lp bit trc u c th gii c bng lnh REPEAT. c bit, cng nh lnh WHILE, lnh REPEAT rt thch hp vi cc vng lp c s ln lp khng bit trc 9.3.2. Cc v d v lnh Repeat : V d 9.12: m bo tnh hp l ca d liu nhp t bn phm. Khi gii phng trnh bc hai Ax2+Bx+C=0, ta thng gi thit A? 0, khi tnh S=N!, ta thng yu cu N? 0. S hn ch phm vi i vi cc d liu nhp s m bo tnh hp l ca chng v lm gim bt cc phc tp khi bin lun. buc ngi s dng phi nhp A 0, nu nhp A=0 th bt nhp li cho ti khi nhp A 0 mi thi, ta dng cu trc : Repeat Write(Nhp A khc khng : ); Readln(A); Trang 117/268

Until A<> 0; m bo chc chn nhp N tha iu kin 0<N<20, ta dng cu trc : Repeat Write( Nhp N (0<N<20) : ); Readln(N); If (N<=0) or (N>=20) then write(#7); Until (0<N) and (N<20) ; Lnh write( chr(7) ) hay write(#7) c cng dng pht ra ting ku bip cnh bo ngi dng nhp d liu sai yu cu. V d 9.13: Tm bi s chung nh nht ca hai s nguyn dng M v N. Bi ton ny c nhng cch gii khc nhau, di y l mt cch n gin. Trc ht, hy xem cch tm BSCNN ca hai s M=5 v N=9. V N>M nn ta s tm trong tp cc bi s ca N :{ 9, 18, 27, 36, 45, ...} s nh nht chia ht cho M, l s 45. Mt cch tng qut, gi Max l s ln nht ca M v N. u tin ta gn : BSCNN:=0; Sau c lm lnh BSCNN:=BSCNN+Max ; hoi cho n khi BSCNN chia ht cho c M v N th dng. Trong chng trnh ta dng lnh repeat nhp hai s M, N m bo dng. PROGRAM VIDU913; { Tm BSCNN ca M v N } Var M, N, Max, BSCNN : Integer; Begin Repeat Write( Nhp M v N dng :); Readln(M, N); Until (M>0) and (N>0); If N>M then Max:=N else Max:=M; BSCNN:=0; Repeat Trang 118/268

BSCNN:=BSCNN + Max; Until (BSCNN mod N=0) and (BSCNN mod M=0) ; Writeln( Bi s chung nh nht= , BSCNN) ; Readln; End. Chy <VD913.EXE> Chp file ngun <VD913.PAS> V d 9.14: Thit k chy nhiu ln mt chng trnh. Trong Turbo Pascal, mi ln mun chy chng trnh ta phi g cp phm Ctrl v F9 (vit tt l ^F9), iu ny s bt tin nu cn chy chng trnh nhiu ln ng vi cc b d liu th khc nhau. Cu trc sau y cho php ta chy chng trnh mt s ln theo mun: REPEAT { Cc lnh ca chng trnh} Write( Tip tc na khng (Y/N) ? :); Readln(Traloi); {5} UNTIL (Traloi =N) or ( Traloi=n); y, Traloi l mt bin kiu k t (Char); Sau khi thc hin xong {cc lnh ca chng trnh }, nu mun chy tip th ta g phm Y ? , nu mun dng th g N? . Ch : lnh Readln(Traloi); dng th {5} c th thay bng: Traloi:=Readkey; Hm Readkey thuc th vin CRT cho kt qa l mt k t g t bn phm, n khc lnh Readln(Traloi) ch l khi nhp k t ta khng cn phi Enter. Chng trnh di y cho php thc hin mt s ln vic : in tam gic cn c c chiu cao m (0<m<20) :

PROGRAM VIDU914; Trang 119/268

{ In tam gic cn c } Uses CRT; Const sao =*; Var k, j, m: integer; Traloi : Char ; Begin REPEAT Clrscr; Repeat {11} {9}

Write( Nhp m (0<m<20) : ); Readln(m); If (m <= 0) or ( m>=20) then write(#7); Until (m>0) and ( m<20) ; Writeln(sao :m); { in nh } { In hai cnh bn ca tam gac } For k:=1 to m-2 do begin Write(chr(32): m-k-1); { in m-k-1 k t trng} For j:=1 to 2*k+1 do Write(sao); { in 2k+1 du *} Writeln; end; For k:=1 to 2*m-1 do Write(sao); {in cnh y} Writeln; Write( Tip tc na khng (Y/N) ?: ); Readln( Traloi); UNTIL (Traloi=N) or ( Traloi=n); {28} Trang 120/268 {15}

End. Chy<VD914.EXE> Chp file ngun <VD914.PAS> Chng trnh 9.14 l mt v d v hai cu lnh Repeat lng nhau, iu ny xy ra khi thn ca mt lnh Repat li cha mt lnh Repeat khc: lnh Repeat th nht, t dng {9} n dng {28}, cha lnh Repeat th hai t dng {11} n dng {15}. 9.3.3. So snh cc lnh For, While v Repeat: Lnh For dng cho cc vng lp c s ln lp bit trc Lnh While hay Repeat tng qut hn lnh For, dng c cho tt c cc loi vng lp, nhng thng dng cho cc vng lp c s ln lp cha bit trc. Lnh While v Repeat khc nhau im sau: lnh While kim tra iu kin trc, nu ng mi thc hin cc lnh ghi trong thn ca n ( lnhP ), cn lnh Repeat thc hin lnhP ri mi kim tra iu kin. V th, lnh Repeat s thc hin cc lnh ghi trong thn ca n t nht c mt ln. Ngoi ra, lnh While kt thc khi iu kin sai, lnh Repeat kt thc khi iu kin ng. 9.4. CU HI TRC NGHIM Cu 1: Cho S v i l bin nguyn. Khi chy on chng trnh : s:=0; for i:=1 to 10 do s := s+i; writeln(s); Kt qu in ln mn hnh l : a) s = 11 b) s = 55 c) s = 100 d) s = 101 Cu 2: Cho S, i v N>0 l cc bin nguyn. tnh S = N!, chn cu no : a) S := 1; For i := 1 to N do S := S * i; b) S := 0; For i := 1 to N do S := S * i; c) S := 1; For i := 1 to N do S := S * N; d) S := 1; For i:= 1 to N do S := S + i; Cu 3: Cho S = 12 + 22 + ... + 1002 . Nhm lnh no tnh sai Gi tr ca S: Trang 121/268

a) S:=0; FOR i:=1 TO 100 DO S := S + i*i; b) S:=0; FOR i:=1 TO 100 DO S := S + SQR(i); c) S:=0; FOR i:=100 DOWNTO 1 DO S := S + i*i; d) S:=1; FOR i:=1 TO 100 DO S := S + i*i; Cu 4-Khi chy chng trnh : Var S, i, j : Integer; Begin S := 0; for i:= 1 to 3 do for j:= 1 to 4 do S := S + 1 ; End. Gi tr sau cng ca S l : a) 0 b) 12 c) 3 d) 4 Cu 5: Cho S v i bin kiu nguyn. Khi chy on chng trnh : S:= 0; i:= 1; while i<= 6 do begin S:= S + i; i:= i + 2; end; Gi tr sau cng ca S l : a) 6 b) 9 c) 11 d) 0 Trang 122/268

Cu 6: Khi chy chng trnh : Var S, i : Integer; Begin S:= 0; i:= 1; Repeat S:= S + i * i; i:= i + 1; Until i > 4 ; End. Gi tr sau cng ca S l : a) 0 b) 14 c) 16 d) 30 Cu 7: Cho i l bin nguyn. Khi chy on chng trnh : i := 5; Repeat i := i + 1; Until i > 4 ; Gi tr sau cng ca i l : a) 6 b) 4 c) 5 d) 0 Cu 8: Cho m, n, i l cc bin nguyn. Khi chy on chng trnh : m:=4; n:=5; i:=5; Repeat i:=i+1; Trang 123/268

Until (i Mod m = 0) and (i Mod n = 0); Gitr sau cng ca i l : a) 20 b) 5 c) 4 d) 0 Cu 9: Cho chng trnh : Var A : Real; Begin ... While A = 0 do begin write ('nhap A # 0:'); Readln (A); end; End. lnh Readln(A) c thc hin t nht mt ln, phi in vo ch ... lnh no trong cc lnh di y ? a) A:=0; b) A:=1; c) A:=-1; d) A <> 0; Cu 10: Gis cc khai bo bin u hp l. tnh S = 10!, chn cu no : a) S := 1; i := 1; while i<= 10 do S := S * i; i := i + 1; c) S := 0; i := 1; while i<= 10 do begin b) S := 1; i := 1; while i<= 10 do i := i + 1; S := S * i; d) S := 1; i := 1; while i<= 10 do begin Trang 124/268

S := S * i; i := i + 1; end;

S := S * i; i := i + 1; end;

9.5. BI TP Cu 1) In bng m ASCII thnh hai ct : M K t , yu cu hin th tng trang mt , (mi trang 22 dng) ri dng li ch ta g Enter mi hin trang k tip, c th cho n ht. Cu 2) Nhp mt s nguyn dng N. Tnh :

Cu 3) Nhp s n nguyn m bo sao cho n dng. ( Nu nhp n ? 0 th chng trnh phi bt nhp la ), ri tnh : S1 = 12 + 32 + 52 + 72 + ...+ (2n+1)2

Cu 4) Nhp mt s nguyn dng n . Tnh :

S4 = 1.2.3 + 2.3.4 + 3.4.5 +....+ n(n+1)(n+2) Cu 5) Nhp mt s nguyn dng n . Tnh :

Cu *6) Nhp s x thc v s n nguyn ? 1, tnh gn ng ex theo cng thc :

Cu 7) Nhp n, k nguyn m bo phi dng v k<= n. Tnh t hp chp k ca n theo cng thc :

Trang 125/268

Cu 8) Cho dy Fibonaci xc inh nh sau: F0=0, F1=1, Fn = Fn-1 + Fn-2 , vi n >= 2 Hy nhp s nguyn N>0 v tnh S= F0 + F1 + F2 +...+ Fn . Cu 9) Tm v in ln mn hnh tt c cc s nguyn trong phm vi t 10 n 99 sao cho tch ca hai ch s ca n th bng hai l? tng ca hai ch s ca n. V d : s N=36 c hai ch s l 3 v 6, v 3*6 = 2*(3+6). Tng t i vi s 44 . Cu 10) Nhp N nguyn m bo ln hn 1. Tnh tng cc s l ? N. V d : nu N=5 th tng S=1+3+5 = 9, nu N=8 th S=1+3+5+7=16. Cu 11) Nhp s thc A m bo 0<A< 2, tm s n nh nht tha mn :

Cu 12) Nhp vo tui cha v tui con hin nay m bo sao cho tui cha ln hn hai ln tui con. Hi sau bao nhiu nm na th tui cha bng hai ln tui con. V d tui cha l 30, tui con l 5, sau 20 nm tui cha l 50 s gp i tui con 25. Cu 13) Tm bi s chung nh nht ca hai s nguyn dng m, n nhp t bn phm. Suy ra c s chung ln nht ca chng. ( Hd : BSCNN * USCLN = m* n ). Cu 14) Nhp m, n nguyn ( 0 < m, n < 20 ) . In ln mn hnh tam gic cn c chiu cao m, v hnh ch nht c chiu di n, chiu rng l m :

10.1. MNG MT CHIU 10.1.1. Mng v cch khai bo mng : Khi nim : Mng l mt tp gm nhiu phn t c cng chung mt kiu d liu. Mi phn t ca mng c mt i lng xc nh v tr tng i ca phn t so vi cc phn t khc trong mng, gi l ch so? Cc yu t xc nh mt mng gm c: Tn mng Kiu d liu chung ca cc phn t trong mng Kiu d liu ca ch s v phm vi ca ch s. Trang 126/268

Kiu d liu ca cc phn t mng l mi kiu d liu m mt bin c th c. Tuy nhin, kiu d liu ca ch s th khng c l kiu thc hay kiu chui, n ch c th l kiu m c : nguyn, k t, lgic, lit k hay on con. Khai bo mng mt chiu : Mng mt chiu, cn gi l dy, hay n gin l mng, c th khai bo theo mt trong hai cch : Cch 1: Khai bo trc tip theo cch sau : VAR Tnmng : Array[m1 . . m2] of Tnkiudliu ; y m1, m2 l hai h?g xc nh phm vi ca ch s, chng c chung mt kiu d liu,?v m1? m2. V d: Cho khai bo di y: Var A : Array[0..10] of Real; Hten: Array[1..5] of String[18]; B: Array[a..d] of Integer; Theo khai bo trn, ta c ba mng: Mng th nht tn l A, gm 11 phn t cng kiu Real, ng vi cc ch s 0, 1, 2, ..., 10, l: A[0], A[1], A[2], ..., A[10] Mng th hai tn l HTen gm 5 phn t cng kiu d liu l String[18] ng vi cc ch s t 1 n 5: Hten[1], Hten[2], Hten[3], Hten[4], Hten[5] Mng th ba tn l B, gm 4 phn t cng kiu Integer ng vi cc ch s a, b, c, d: B[a], B[b], B[c], B[d] c mt hnh nh v mng, i vi mng A, ta hnh dung c mt dy nh mt tng, tn gi l dy A, gm 11 phng lin tip ging ht nhau c nh s th t t 0,1, 2, ..., n 10 : A0 A1 A2 A3 A4 A5 A6 A7 A8 A9 A10 Tng t, mng B cng ging nh dy nh B mt tng c 4 phng c nh s th t l cc ch a, b, c, d : Ba Bb Bc Bd

Cch 2 : Khai bo qua mt kiu d liu mi, gm hai bc: Bc 1: nh ngha kiu d liu mng : TYPE Tnkiumng = Array[m1 . . m2] of Tnkiudliu; Trang 127/268

Bc 2: Khai bo bin c kiu d liu l kiu mng: VAR Tnmng : Tnkiumng ; V d, i vi cc mng A, B v Hten trn ta c th khai bo theo cch 2, nh sau: Type Mang1 = array[0..10] of Real; Mang2 = array[1..5] of String[18]; Mang3 = array[a..d] of Integer; Var A : Mang1; Hten: Mang2; B: Mang3; Khai bo mng c gn tr ban u: Pascal cho php va khai bo mng va gn ga tr ban u cho cc phn t mng, chng hn nh di y: Const X : array[1..5] of Integer = (12, 14, 16, 18, 20) ; Khi X l mt mng gm 5 phn t cng kiu nguyn v c gi tr X[1]=12, X[2]=14, X[3]=16, X?4]=18, X[5]=20. Mc d t kha y l Const song X li c dng nh l mt bin mng, tc l cc phn t ca X c th thay i ga tr c. V d, trong chng trnh ta c th gn: X[1]:= 2; X[2]:=5+20;

10.1.2. Truy xut cc phn t mng: Cc x l trn mng c quy v x l tng phn t mng. xc nh mt phn t ca mng, ta dng cch vit : Tnmng[ ch s ca ph? t ] V du : c th gn : A[0]:= 15.8; A[1]:= 2*A[0]; Hten[3]:= Nguyen Thi Loan; Trang 128/268

B[a]:=100; Ch s ca mt phn t c th l mt bin, mt hng, hay mt biu thc. V d, cho i l bin kiu nguyn, khi ta c th dng cc lnh: i:=6; A[i]:=100.25; Hai lnh trn tng ng vi mt lnh: A[6]:=100.25; Nu bin i c gi tr l 6 th lnh : A[ i div 2 +1] := 4.5; tng ng vi lnh: A[4]:=4.5; v biu thc i div 2 +1 c ga tr l 4. Khi nhp d liu cho cc phn t ca mt mng , ta c th dng cu lnh For, While hay Repeat. V d, nhp d liu cho cc phn t ca mng A: For i:=0 to 10 do begin Write(Nhp phn t th , i , : ); Readln(A[i]); end; hoc (dng While) : i:=0; While i<= 10 do begin Write(Nhap phn t th , i, : ); Readln(A[i]); i:=i+1; end; Tng t nhp d liu cho cc phn t ca mng B, ta vit: For ch:=a to d do begin Write(Nhap phn t th , ch, : ); Trang 129/268

Readln(B[ch]); end; in cc ga tr ca mng A ln mn hnh, ta vit : For i:=0 to 10 do Write(A[i]:6:2); Cc ga tr ca mng A s c in lin tip nhau trn cng mt dng. Cn nu mun in mi phn t trn mt dng, ta thay lnh Write b?g Writeln. Tng t, mng B c in ln mn hnh bng lnh : For ch:=a to d do Write(B[ch]); Ch : Turbo Pascal cho php gn mt mng ny cho mt mng khc. Nu X, Y l hai bin mng cng mt kiu mng th lnh: X := Y; c ngha l ly ga tr ca tng phn t ca mng Y gn cho phn t tng ng trong mng X. V d, cho khai bo: Var X, Y : Array[1..10] of Real; Khi , lnh: X := Y;

tng ng vi lnh : For i:=1 to 10 do X[i] :=Y[i]; 10.1.3. Cc bi ton c bn v mng : V d 10.1: m s ln xut hin ca ga tr x trong dy A1, A2, ..., An . V d ga tr x=6 xut hin 3 ln trong dy 6 7 1 2 6 0 6 1. Ta dng bin Dem kiu nguyn m s ln xut hin ca x. u tin ta gn Dem:=0, sau duyt tng phn t A1, A2, ..., An, mi khi c mt phn t bng x th tng bin Dem ln mt n v. Kt qa l bin Dem c ga tr ng bng s phn t bng x. Hai lnh chnh ca thut ton l: Dem:=0; For i:=1 to N do If A[i]=x then Dem:=Dem+1; V d, m trong dy s A c bao nhiu s 0, ta vit: Dem:=0; For i:=1 to N do if A[i]=0 then Dem:=Dem+1; Writeln( C , Dem , s khng ); Trang 130/268

Nhn xt: ng thc A[i]=x ( hay A[i]=0 ) l iu kin bin Dem c tng thm 1, vy bi ton trn c th m rng l: hy m s phn t ca mng A tha mn mt iu kin cho trc. Trong lnh For trn, khi thay ng thc A[i]=x bng A[i] tha iu kin , ta c thut ton tng qut hn : Dem:=0; For i:=1 to N do If A[i] tha iu kin then Dem:=Dem+1; Chng trnh sau nhp mt mng A c N phn t, in mng A ln mn hnh, v m xem mng A c bao nhiu s dng : PROGRAM VIDU101; { m s dng trong mng} Type Kmang = Array[1..20] of Real; Var A: Kmang; i, N, Dem : Integer; Begin Repeat Write( Nhp s phn t N : ); Readln(N); Until (N>0) and ( N<21); { nhp mng } For i:=1 to N do begin Write(Nhp A[ , i , ]: ); Readln( A[i] ); end; { In mng A} Writeln( Mng A l : ); For i:=1 to N do Write(A[i]:3:0); Writeln; { m s dng } Trang 131/268

Dem:=0; For i:=1 to N do If A[i]>0 then Dem:=Dem+1; Writeln( S s dng = , Dem ); Readln; End. Chy<VD101.EXE> Chp tp tin ngun <VD101.PAS> V d 10.2: Tm s ln nht ca dy A1, A2, ..., An. Trong bi 8, ta ch ra cch tm s ln nht ca hai s, ca ba s. C th m rng thut ton tm s ln nht ca n s : Gi Max l bin cha s ln nht phi tm, th th : Bc 1: Gn Max:=A[1]; Bc 2: Nu Max<A[2] th gn Max:=A[2]; Bc 3: Nu Max<A[3] th gn Max:=A[3]; ... Bc n: Nu Max<A[n] th gn Max:=A[n]; Khi u, Max c gn gi tr A[1]. Sang bc 2, Max c so snh vi A[2] chn ra s ln nht gia A[1], A[2] v lu vo bin Max. Sang bc 3, Max c tip tc so snh vi A[3] tm ra s ln nht gia A[1], A[2], A[3], .v.v. Kt qa, sau bc n, bin Max s cha s ln nht ca dy A[1], A[2], ..., A[n]. Qu trnh trn c m t bng hai lnh: Max:=A[1]; For i:=2 to n do if Max<A[i] then Max:=A[i]; Nhn xt: Trong lnh For trn, bin i chy bt u t 2, nhng kt qa vn ng nu cho i chy bt u t 1. Khng nht thit phi gn gi tr ban u cho Max l A[1], m c th gn cho Max mt phn t ty trong mng, v d phn t A[n] chng hn, nhng khi bin i trong lnh For phi chy bt u t 1. V d 10.3: Bi ton sp xp mng tng dn (hay gim dn) Cho dy A[1], A[2],..., A[n], ni rng A l mt dy tng nu A[1] A[2] ... A[n], tng t, A l dy gim nu A[1] A[2] ... A[n]. Dy ng nht A[1]=A[2]= ... =A[n] l trng hp c bit, va l dy tng, va l dy gim. V d: Trang 132/268

Dy 1 3 3 5 5 6 6 6 l dy tng Dy 9 9 8 5 5 4 0 0 l dy gim Dy 1 3 3 2 5 4 6 6 l dy khng tng khng gim. Bi ton t ra l: cho mt dy A[1], A[2], ..., A[n] bt k, hy thc hin cc hon i cc ga tr ca cc phn t trong mng A A lp thnh mt dy tng. V d, cho dy A c 5 phn t A[1]=9, A[2]=7, A[3]=5, A[4]=8, v A[5]= 2, cn thc hin cc hon i nh th no c A[1]=2, A[2]=5, A[3]=7, A[4]=8 v A[5]=9. C nhng phng php sp xp mng khc nhau, y ch xin gii thiu mt phng php, tuy cha phi l hay nhng n gin v d hiu cho nhng ngi mi lp trnh, l phng php la chn trc tip (Straight selection sort). tng ca phng php l nh sau: Bc 1: Tm s nh nht trong cc phn t A[1], A[2],.., A[n] v vo v tr ? tin A[1]. Bc 2: Tm s nh nht trong cc phn t A[2], A[3],.., A[n] v vo v tr th hai A[2]. .v.v. Bc n-1: Tm s nh nht trong hai phn t A[n-1], A[n] v vo v tr n-1. Sau bc ny th A[n] s l ga tr ln nht. Chng hn, xt dy A c 4 phn t: {5,3,4,1}: Bc 1: Nu A[1]>A[2] th i A[1] vi A[2], c: {3,5,4,1} Nu A[1]>A[3] th i A[1] vi A[3]: khng i Nu A[1]>A[4] th i A[1] vi A[4], c: {1,5,4,3} Bc 2: Nu A[2]>A[3] th i A[2] vi A[3], c: {1,4,5,3} Nu A[2]>A[4] th i A[2] vi A[4], c: {1,3,5,4} Bc 3: Nu A[3]>A[4] th i A[3] vi A[4], c: {1,3,4,5}

Sau ba bc, dy A c sp xp xong. Ti bc th i (i chy t 1 n 3 ), ta phi so snh A[i] ln lt vi A[j] (j chy t i+1 n 4), nu A[i]>A[j] th hon i cc ga tr ca A[i] v A[j], ni cho gn l i ch A[i] vi A[j]. Qa trnh trn c th hin bng hai vng lp For : For i:=1 to 3 do For j:=i+1 to 4 do if A[i]>A[j] then i ch A[i] v A[j] ; Mng A trn ch c 4 phn t, trong trng hp tng qut khi mng A c N phn t th lnh For th nht s c bin i chy t 1 n N-1, v lnh For th hai s c bin j chy t i+1 n N, tc l : For i:=1 to N-1 do Trang 133/268

For j:=i+1 to N do if A[i]>A[j] then i ch A[i] v A[j] ; Vic i ch cc ga tr trong A[i] v A[j] c tin hnh bng cch dng mt bin Z trung gian cng kiu d liu vi A[i] v A[j]. u tin gi tm ga tr ca A[i] vo bin Z, sau a ga tr ca A[j] vo A[i], v cui cng a ga tr trong Z vo A[j], tc l phi lm ba lnh : Z:=A[i]; A[i]:=A[j]; A[j]:=Z; Tm li, thut ton sp xp dy A tng c vit nh sau: For i:=1 to N-1 do For j:=i+1 to N do if A[i]>A[j] then begin { i ch A[i] v A[j] } Z:=A[i]; A[i]:=A[j]; A[j]:=Z; end; Trong N l s phn t ca dy A cn Z l mt bin trung gian c cng kiu d liu vi cc phn t ca mng A. Chng trnh di y tm s ln nht ca mng A v sp dy A tng dn: PROGRAM VIDU103; { Tm Max v sp dy A tng dn } Uses CRT; Type Kmang = array[1..20] of Real; Var i, j, N : Integer; A: Kmang; z, Max : Real; Begin Trang 134/268

Clrscr; Repeat Write( Nhp s phn t N : ); Readln(N); Until (N>0) and ( N<21); For i:=1 to N do { nhp mng } begin Write(Nhp A[, i, ]: ); Readln(A[i]); end; { Tm s ln nht } Max :=A[1]; For i :=1 to N do if Max< A[i] then Max:=A[i]; Writeln( S ln nht l: , Max : 4:1); { sp xp dy tng } For i:=1 to N-1 do For j:=i+1 to N do If A[i]>A[j] then {23}

begin { i ch A[i] v A[j] } z:=A[i]; A[i]:=A[j]; A[j]:=z; end; Writeln( Dy sp xep tng l : ); For i:=1 to N do Write(A[i]:3:0); Readln; End. Chy<VD103.EXE> Trang 135/268

Chp tp tin ngun <VD103.PAS> Ch 1: Mun sp dy A gim dn th trong chng trnh trn ch cn thay dng {23}: If A[i] > A[j] then ... bng dng : If A[i] < A[j] then ... Tc l thay du ln hn > bng du nh hn < . Ch 2 : Sp xp mt b phn ca dy. Gi m v h l hai s nguyn sao cho 1<= m< h<= N, khi A[m], A[m+1], ..., A[h] l mt dy con ca dy A. Mun sp dy con A[m], A[m+1], ..., A[h] tng (hay gim) m khng lm nh hng n cc phn cn li ca dy A, ta dng lnh sau: For i:= m to h-1 do For j:=i+1 to h do if A[i]>A[j] then begin { i ch A[i] v A[j] } Z:=A[i]; A[i]:=A[j]; A[j]:=Z; end; V d 10.4: Kim tra mng c tha mt tnh cht khng. Ta thng gp bi ton kim tra xem mi phn t ca mng A c tha mn mt iu kin khng, v d mng A c phi l dy tng khng, c phi l dy i xng khng, c phi l mt cp s cng khng, ... Mng A tha tnh cht ang xt nu mi phn t ca n tha mt iu kin xc nh no , ngc li, mng A khng tha tnh cht ang xt nu c mt phn t ca n khng tha iu kin ny. Hai trng thi tha hay khng tha c th hin bng hai ga tr TRUE hay FALSE ca mt bin Kiemtra kiu lgic. u tin ta gn gi nh Kiemtra:= TRUE, sau ta xt tng phn t ca A, ch cn c mt phn t khng tha iu kin th gn ngay Kiemtra:=FALSE . Vy hai lnh cn dng l: Kiemtra:=TRUE; For i:=1 to N do if A[i] khng tha iu kin then Kiemtra:= FALSE; Vic xc nh iu kin l ty tng bi ton c th. V d: Kim tra xem A c phi l mt dy i xng khng ? Trang 136/268

Dy 1 3 5 4 5 3 1 l i xng. Dy 1 3 5 4 2 3 1 l khng i xng v A[3] khc A[5]. Nh vy, dy N phn t A1, A2, ..., An l i xng nu A1=An, A2=An-1, ..., An=A1, tc Ai = An-i+1 vi mi i=1, 2, ..., n. ng thc : Ai = An-i+1 chnh l iu kin m mi phn t ca dy A phi tha A l mt dy i xng. Gi thit bin Kiemtra c khai bo kiu Boolean. Trong chng trnh ta dng cc lnh sau: Kiemtra:=TRUE; For i:=1 to N do if A[i]<>A[N-i+1] then Kiemtra:=FALSE; If Kiemtra=TRUE then writeln( Dy A i xng) else Writeln( Dy A khng i xng ); Trong thut ton trn, lnh For c th thay bng lnh While, tc s nhanh hn song cng kh hiu hn: Kiemtra:=TRUE; i:=1; While ( i <=N ) and ( Kiemtra=TRUE) do if A[i]<>A[N-i+1] then Kiemtra:=FALSE else i:=i+1; If Kiemtra=TRUE then writeln( Dy A i xng) else Writeln( Dy A khng i xng ); Bn c hy vit chng trnh cho v d ny. Ch Cu lnh : If Kiemtra=TRUE then writeln( Dy A i xng) else Writeln( Dy A khng i xng ); hon ton tng ng vi lnh : If Kiemtra then writeln( Dy A i xng) else Writeln( Dy A khng i xng );

V d 10.5: Tnh ga tr ca a thc : P = ao + a1x + a2x2 + ... + anxn Trang 137/268

trong s nguyn n, s thc x v cc h s a0, a1, ..., an c nhp t bn phm. Ta vit : P= aoU0 + a1U1 + a2U2 + ... + anUn , trong : U0=1; Ui = xi = xi-1 *x = Ui-1*x vi i=1,2, ..., N Nh vy, nu tnh c ga tr U bc i-1 th s tnh c ga tr U bc i bng lnh U:= U*x, sau ta ch vic cng dn biu thc ai*U vo P bng lnh P:= P+ ai*U. Chng trnh c vit nh sau : PROGRAM VIDU105; { Tnh ga tr ca a thc bc N } Var i, N : Integer; A: Array[0..20] of Real; x, P, U : Real; Begin Repeat Write( Nhp N v x : ); Readln(N, x); Until (N>0) and ( N<21); For i:=0 to N do { nhp mng cc h s} begin Write(Nhp h s A[, i, ]: ); Readln(A[i]); end; U:=1; P:=A[0]; For i:=1 to N do begin U:=U*x; Trang 138/268

P:=P+A[i]*U; end; Writeln( P=, P:6:2); Readln; End. Chy<VD105.EXE> Chp tp tin ngun <VD105.PAS>

10.2. MNG HAI CHIU (MA TRN) 10.2.1. Khai bo mng hai chiu: Mng hai chiu, cn gi l ma trn, l s m rng trc tip ca mng mt chiu. Ta cng c hai cch khai bo. Cch 1: Khai bo trc tip : VAR Tnmng : Array[n1..n2 , m1..m2] of Tnkiudliu; trong n1, n2 l cc hng c cng kiu d liu v n1 n2, chng xc nh phm vi ca ch s th nht, gi l ch s dng. Tng t m1, m2 l cc hng c cng kiu d liu v m1 m2, chng xc nh phm vi ca ch s th hai, gi l ch s ct. Ging nh mng mt chiu, kiu d liu ca cc ch s ch c th l kiu m c: nguyn, k t, l gic, lit k hay on con, khng c l kiu thc hay chui. V d, cho khai bo : Var X : array[1..2, 1..3] of Real; Y : array[a..c , 1..3] of String[15]; Kt qu ta nhn c hai mng hai chiu: Mng X gm 6 phn t cng kiu d liu thc: X[1,1], X[1,2], X[1,3] X[2,1], X[2,2], X[2,3] Mng Y gm 9 phn t cng kiu chui String[15] : Y[a,1], Y[a,2], Y[a, 3] Y[b,1], Y[b,2], Y[b, 3] Trang 139/268

Y[c,1], Y[c,2], Y[c, 3] C th v X l mt nh hai tng, mi tng c ba phng ging nhau. Cc tng c nh s t 1 n 2, trong mi tng, cc phng c nh s t 1 n 3. Tng t, Y l mt nh ba tng, cc tng c nh s ln lt l a, b, c, mi tng c ba phng c nh s ln lt l 1, 2, 3. Cch 2: Bin mng c khai bo thng qua mt kiu mng c nh ngha trc b?g t kha TYPE, tc l: TYPE Tnkiumng= Array[n1..n2 , m1..m2] of Tnkiudliu; VAR Tnmng : Tnkiumng ; V d: Hai mng X v Y ni trn c th c khai bo theo hai bc sau: Type Kmang1 = array[1..2, 1..3] of Real; Kmang2 = array[a..c , 1..3] of String[15]; Var X : Kmang1; Y : Kmang2; Ch : - C th xem mng hai chi? l mng mt chiu m mi phn t ca n li l mt mng mt chiu. Hai mng X, Y ni trn c th khai bo nh sau: Type Kmang1 = array[1..2] of array[1..3] of Real; Kmang2 = array[a..c] of array[1..3] of String[15]; Var X : Kmang1; Y : Kmang2; Hiu theo cch ny th X l mt mng gm hai phn t X[1] v X[2] m mi phn t ny li l mt mng gm 3 phn t : X[1] l mng c 3 phn t kiu thc X[1][1], X[1][2], X[1][3] X[2] l mng c 3 phn t kiu thc X[2][1], X[2][2], X[2][3] iu tng t cng p dng cho bin mng Y. Trang 140/268

Hai cch vit X[i][j] v X[i,j] cng ch mt phn t.

Khai bo v gn gi tr ban u: C th khai bo v gn gi tr ngay cho mt mng hai chiu, chng hn: Type Kmang1 = array[1..2, 1..3] of Real; Const X : Kmang1 = ( (1.5, 2.5, 3.5), (5.0, 6.5, 7.0) ); Khi X l mt mng hai chiu c 6 phn t cng kiu thc v c gi tr l: X[1,1]=1.5, X[1,2]=2.5, X[1,3]=3.5 X[2,1]=5.0, X[2,2]=6.5, X[2,3]=7.0 Cn nhn mnh rng mc d t kha y l Const song X v cc phn t ca X c th dng nh cc bin, tc l cc phn t ca X c th thay i gi tr c. 10.2.2. Cc thao tc trn ma trn : xc nh mt phn t trong mng hai chi?, ta vit: Tnbinmng[ch s 1, ch s 2] V d: X[1,1]:=12.5; X[2,1]:=X[1,1]+15; Y[a,1]:=Tran Thi Mai; nhp d liu cho mt mng hai chiu, ta phi dng hai vng lp duyt theo hai ch s, chng hn mun nhp d liu cho mng X, ta vit: For i:=1 to 2 do For j:=1 to 3 do begin Write(nhp phn t hng , i, ct , j , : ); Readln(X[i, j]); end; Tng t, lnh nhp d liu cho mng Y c vit l: Trang 141/268

For ch:=a to c do For j:=1 to 3 do begin Write(nhp phn t hng , ch , ct , j , : ); Readln(X[ch, j]); end; trong ch l bin kiu k t, cn i v j l cc bin nguyn. in mng X ln mn hnh, trnh by ging nh cch vit ma trn, mi hng in trn mt dng, ta dng lnh : For i:=1 to 2 do begin For j:=1 to 3 do write(X[i, j]:3:1); { in hng th i} Writeln; { xung dng, chun b in hng tip theo } end;

10.2.3. Cc v d v ma trn : V ma trn l mng mt chiu ca cc mng mt chiu nn nhiu bi ton v mng c m rng t nhin cho ma trn. V d 10.6: Tnh tng ca hai ma trn Nhp vo hai ma trn A, B cp NxM. Tnh ma trn C l tng ca hai ma trn A v B, in ma trn C ln mn hnh. Cng thc tnh cc phn t ca ma trn C= A+B : C[i,j ] = A[i, j] + B[i, j] vi i=1,..., N, v j=1,..., M Chng trnh nh sau: PROGRAM VIDU106; { Tnh tng hai ma trn } Uses CRT; Var A, B, C : Array[1..10, 1..10] of Real; i, j , N, M : Integer; Begin Trang 142/268

Clrscr; Repeat Write(Nhp s hng N, s ct M : ); Readln(N, M); Until ( N>0) and ( N<11) and ( M>0) and (M<11); For i:=1 to N do For j:=1 to M do begin Write(Nhp A[ , i, , , j , ]: ); Readln(A[i,j]); end; { nhp B v tnh C lun} For i:=1 to N do For j:=1 to M do begin Write(Nhp B[ , i, , , j , ]: ); Readln(B[i,j]); C[i, j]:=A[i, j] + B[i, j]; end; { In ma trn A ln mn hnh } Writeln( Ma tran A la :); For i:=1 to N do begin For j:=1 to M do write(A[i, j]:3:0); Writeln; end; { In ma trn B ln mn hnh } Writeln( Ma tran B la :); Trang 143/268

For i:=1 to N do begin For j:=1 to M do write(B[i, j]:3:0); Writeln; end; { In ma trn C ln mn hnh } Writeln( Ma tran C la :); For i:=1 to N do begin For j:=1 to M do write(C[i, j]:3:0); Writeln; end; Readln; End. Chy chng trnh <VD106.EXE> Chp tp tin ngun <VD106.PAS> V d 10.7: Tm s ln nht (s nh nht) trong ma trn A: Gi s A l ma trn N hng, M ct, v Max l bin cha s ln nht phi tm. Khi ? ta gn A[1,1] cho Max, sau duyt tt c cc phn t ca ma trn, nu phn t no ln hn Max th lu n vo Max, tc l: Max:=A[1,1]; For i:=1 to N do For j:=1 to M do if Max< A[i, j] then Max:=A[i, j]; Writeln( S ln nht l , Max); V d 10.8 : Tm s ln nht (hay s nh nht) trong tng hng (hay tng ct) ca ma trn A: Hng i ( 1 i N ) ca ma trn A c dng : A[i,1], A[i,2], ..., A[i,M] Nu xem i l c nh th l mng mt chiu c M phn t, nn s ln nht ca hng i c tm bng cc lnh: Trang 144/268

Max:=A[i, 1]; For j:=1 to M do if Max< A[i, j] then Max:=A[i, j]; Writeln(Sln ca hng , i, l: , Max) ; V c c thy N hng nn cng vic trn phi lm N ln ng vi i=1, 2, ..., N, tc l: For i:=1 to N do begin { tm s ln nht ca hng i } Max:=A[i, 1]; For j:=1 to M do if Max< A[i, j] then Max:=A[i, j]; Writeln(Sln ca hng , i, l: , Max) ; end; V d 10.9: Kim tra ma trn vung A c i xng khng ?. Ma trn vung A gi l i xng nu n khng thay i khi ta i ct thnh hng v i hng thnh ct. Ni cch khc, ma trn A l i xng khi v ch khi A[i,j] =A[j,i] vi mi i=1, ..., N v vi mi j=1, .., N. V d, cho hai ma trn di :

th A l i xng, cn B khng i xng v B[1,2] ? B[2,1]. Ch cn c mt cp i, j sao cho A[i,j]<>A[j,i] th A l ma trn khng i xng. Vy cc lnh kim tra tnh i xng ca ma trn A l: Kiemtra := TRUE; For i:=1 to N do For j:=1 to N do if A[i, j]<>A[j, i] then Kiemtra:=FALSE ; If Kiemtra=TRUE then writeln( i xng ) else writeln( Khng i xng ); Trang 145/268

Trong Kiemtra l mt bin kiu lgic. Nhn xt r?g hai lnh For trn qut qua tt c cc phn t ca ma trn nn c hn na s ln lp l tha. Tht vy, ng cho chnh chia ma trn ra lm hai phn: na tri v na phi. Cc ph? t trn ng cho chnh th i xng vi chnh n nn khng cn phi kim tra. Nu mi ph? t na bn tri u bng phn t i xng vi n na bn phi th ma trn r rng l i xng. V vy ch cn duyt kim tra cc phn t na bn tri ng cho chnh l (vng tam gic).

Thut ton tt hn c ngh l : Kiemtra := TRUE; For i:=2 to N do For j:=1 to i-1 do if A[i, j]<>A[j, i] then Kiemtra:=FALSE ; If Kiemtra=TRUE then writeln( i xng ) else writeln( Khng i xng ); Hai cu lnh For trn vn cn mt nhc im l: khi xy ra A[i,j]<>A[j, i] ri, l ra c th dng li v kt lun khng i xng ngay th cc vng For vn tip tc, i chy n N v j n i-1. S dng cu lnh While s khc phc c nhc im ny. Ch cn xy ra A[i,j]<>A[j,i] mt ln l bin Kiemtra c gn ngay ga tr FALSE, khi iu kin Kiemtra=TRUE b sai v c hai vng lp u kt thc . Kiemtra:=TRUE; i:=2; While (Kiemtra=TRUE) and (i<= N) do begin j:=1; While ( Kiemtra=TRUE) and ( j<=i-1) do if A[i, j] <> A[j, i] then Kiemtra:=FALSE else j:=j+1; i:=i+1; Trang 146/268

end; If Kiemtra=TRUE then writeln( i xng ) else writeln( Khng i xng ); Chng trnh di y thc hin cc cng vic sau: Nhp vo ma trn vung A cp N v in ma trn A ln mn hnh m trong ma trn A c bao nhiu s 0 Tm s ln nht trong A Tm s nh nht trong tng hng ca A Kim tra xem A c phi l ma trn i xng khng. PROGRAM VIDU109; Uses CRT; Type Matran = Array[1..10, 1..10] of Real; Var A : Matran; i, j , N, Dem : Integer; Max, Min : Real; Kiemtra: Boolean; Begin Clrscr; Repeat Write(Nhp cp N : ); Readln(N); Until ( N>0) and ( N<11) ; For i:=1 to N do For j:=1 to N do begin Trang 147/268

Write(Nhp A[, i, , , j , ]: ); Readln(A[i,j]); end; { In ma trn A ln mn hnh } Writeln( Ma tran A la : ); For i:=1 to N do begin For j:=1 to N do write(A[i, j]: 3 :0); Writeln; end; { m s s 0 } Dem:=0; For i:=1 to N do For j:=1 to N do if A[i, j]=0 then Inc(Dem); Writeln( C , Dem, s khng); { Tm s ln nht ca ma trn } Max:=A[1,1]; For i:=1 to N do For j:=1 to N do if Max < A[i,j] then Max:=A[i,j]; Writeln( S ln nht ca ma trn= , Max : 4:1); { Tm s nh nht trong tng hng ca ma trn } For i:=1 to N do begin Min:=A[i,1]; For j:=1 to N do if Min > A[i,j] then Min:=A[i,j]; Writeln( S nh nht ca hng , i , l: , Min : 4:1); end; Trang 148/268

{ Kim tra ma trn c i xng khng} Kiemtra:=True; For i:=1 to N do For j:=1 to i-1 do if A[i ,j]<>A[j ,i] then Kiemtra:=False; If Kiemtra=True then Writeln( i xng) else Writeln( Khng i xng) ; Readln; End. Chy<VD109.EXE> Chp tp tin ngun <VD109.PAS>

10.3. CU HI TRC NGHIM Cu 1: Chn khai bo ng : a) Var A: array[1..10] of integer; b) Var A= array[1..10] of integer; c) Var A:= array[1..10] of integer; d) Var A: array[1,10] of integer; Cu 2: Cho khai bo: Var A: Array[1..4] of Real; i : Integer ; nhp d liu cho A, chn cu no : a) For i:=1 to 4 do Write( Nhp A[, i, ]:); Readln(A[i]); b) For i:=1 to 4 do Readln( Nhp A[, i, ]:); c) For i:=1 to 4 do Begin Write( Nhp A[, i, ]:); Readln(A[i]); End; Trang 149/268

d) Write( Nhp A:); Readln(A); Cu 3: Cho khai bo bin : Var A : array[1..5] of Integer; Chn lnh ng : a) A[1] := 4/2 ; b) A[2] := -6 ; c) A(3) := 6 ; d) A := 10 ; Cu 4: Trong khai bo sau cn b trng . . . mt ch, v cha xc nh c kiu d liu ca bin Max : Var A: Array[a..d] of Real ; Ch : Char ; Max : . . . ; Mun bin Max lu ga tr ln nht ca mng A th cn khai bo bin Max kiu g vo ch . . . : a) Char b) Integer c) String d) Real Cu 5: Cho khai bo: Var A: Array[1..4] of Integer ; i : Integer ; Sau khi thc hin cc lnh : For i:=1 to 4 do A[i]:= i; For i:=1 to 4 do A[i]:= A[i]+1; th mng A c ga tr l : a) A[1]=1, A[2]=2, A[3]=3, A[4]=4 b) A[1]=2, A[2]=3, A[3]=4, A[4]=5 Trang 150/268

c) A[1]=0, A[2]=1, A[3]=2, A[4]=3 d) A[1]=1, A[2]=1, A[3]=1, A[4]=1 Cu 6: Khai bo no ng : a) Var A : array[1..n,1..m] of integer; b) Const n=2; m=3; Var A: array[1..n,1..m] of integer; c) Var n, m : integer ; A: array[1..n,1..m] of integer; d) Var A: array[3, 2] of Integer; Cu 7: Cho khai bo : Var A : array[1..2,1..3] of Real; i, j : integer; nhp d liu cho ma trn A, chn : a) Write( Nhp A:); Readln(A) ; c) For i:=1 to 2 do For j:=1 to 3 do begin write(Nhp A[, i, j, ]:); readln(A[i, j]); end; b) For i:=1 to 2 do Readln(A[i, j]); d) For i:=1 to 2 do For j:=1 to 3 do write(Nhp A[, i, j, ]:); readln(A[i, j]);

Cu 8: Cho khai bo : Var A : array[1..2,1..3] of Real; i, j : integer; Max : Real; tm s ln nht ca ma trn A, chn cu no : a) Max:=A[1,1]; If Max < A[i,j] then Max:=A[i,j]; b) Max:=A[1,1]; For i:=1 to 2 do Trang 151/268

c) A[1,1]:=Max ; For i:=1 to 2 do For j:=1 to 3 do if Max< A[i,j] then A[i,j]:=Max;

if Max < A[i,j] then Max:=A[i,j]; d) Max:=A[1,1]; For i:=1 to 2 do For j:=1 to 3 do if Max < A[i,j] then Max:=A[i,j];

Cu 9: Khi chy chng trnh : Var A : array[1..2,1..3] of integer; i, j, S : integer; Begin A[1,1]:= 3 ; A[1,2]:= -1 ; A[1,3]:= -4 ; A[2,1]:= -9 ; A[2,2]:= 0 ; A[2,3]:= 5 ; S:=0; for i:=1 to 2 do for j:=1 to 3 do If A[i,j] < 0 then S:=S+1; Write(S); End. Kt qa in ra ga tr ca S l : a) 0 b) -9 c) 3 d) 5 Cu 10: Cho X1, X2,...Xn l mt mng s thc. tnh :

ta c on chng trnh sau gm ba lnh, mt lnh cn b trng . . . : S:=0; Trang 152/268

For i:=1 to N do S := S + X[i]; ... Hy in lnh thch hp vo ch . . . : a) Write ('S=', S); b) Readln (S);

c) d) S := S/N;

10.4. BI TP Cu 1) Nhp s t nhin n v mt dy s thc x1, x2, ..., xn. Tm s ln nht v s nh nht ca dy m trong dy c bao nhiu s dng, bao nhiu s m, bao nhiu s 0 ? Loi no nhiu nht ? Cu 2) Nhp mt dy s nguyn x1, x2, ..., xn. In ring cc s chn v cc s l, mi loi trn mt dng. Cu 3) Nhp mt s nguyn dng N, xy dng dy s nguyn x0, x1, ..., xn trong xi l s Fibonaci th i: x0=1, x1=1, xi =xi-1 + xi-2 vi mi i ? 2. In dy x ln mn hnh. Cu 4) Nhp mt dy s x1, x2,..., xn. Tnh :

Cu 5) Nhp mt dy s bt k x1, x2,..., xn. In o ngc dy , v d cho dy 1 5 3 8, in ra: 8 3 5 1. Sp xp dy tng dn, in dy. Sp xp dy gim dn, in dy. Cu 6) Nhp hai dy s bt k x1, x2,..., xn v y1, y2,..., yn. Xy dng dy th ba z1, z2, .., zn l tng ca hai dy trn (zi= xi + yi), in ba dy ln mn hnh, mi dy trn mt dng. Cu 7) Cho hai a thc : Pn(x) = anxn + an-1 xn-1 + ...+ a1 x + a0 (an ? 0 ) Qm(x) = bmxm + bm-1 xm-1 + ...+ b1 x + b0 (bm ? 0 ) Gi R(x) = Pn(x) + Qm(x). Trang 153/268

Nhp cc s t nhin n v m, cc h s ai v bj ca hai a thc Pn(x) v Qm(x), in bc v cc h s ca a thc R(x). Cu 8) Nhp x thc, n nguyn dng v mt mng cc h s a0, a1, ..., an , ri tnh ga tr ca a thc : P = anxn + an-1 xn-1 + ...+ a1 x + a0 . theo s Hoocner : P=(...( (anx + an-1) x+ an-2)x + ...+ a1 )x + a0 . V d : P = 2x4 + 3x3 - 4x2 +7x + 9 = (((2x + 3)x - 4 )x + 7)x + 9 . Cu 9) Nhp mt dy s bt k x1, x2,..., xn , cho bit dy c i xng khng?, dy c lp thnh mt cp s cng khng?. V d dy 1 3 5 4 5 3 1 l i xng, dy 1 3 5 7 l mt cp s cng. Cu 10) Nhp mt dy s bt k x1, x2,..., xn , cho bit dy thuc loi no: tng, gim hay khng tng, khng gim ? Cu 11) Nhp mt dy s nguyn dng x1, x2,..., xn . Tch dy x thnh hai dy: dy A gm cc s chn, dy B gm cc s l, sp xp dy A tng dn, dy B gim dn, in hai dy A v B trn hai dng khc nhau. Ni hai dy A v B theo th t thnh mt dy duy nht v gn tr li vo dy x, in dy x. V d nhp dy x={ 5, 7, 0, 2, 1, 6, 4, 9 } th dy A={ 0, 2, 4, 6}, dy B={ 9, 7, 5, 1}, v x={ 0, 2, 4, 6, 9, 7, 5, 1}. Cu 12) Nhp hai s m, n v hai ma trn Am,n v Bm,n . In cc ma trn A, B, C=A+2B v D=A-B ln mn hnh. Cu 13) Nhp v in ma trn Am,n . Tm s nh nht v s ln nht trong ma trn . Tnh tng ca tt c cc phn t trong ma trn. m trong ma trn c bao nhiu s dng, bao nhiu s 0, bao nhiu s m. Cu 14) Nhp v in ma trn Am,n Tm v in s ln nht trong tng hng ca ma trn. Tm v in s ln nht trong tng ct ca ma trn. Tm v in s nh nht trn ng cho chnh ca ma trn. Cu 15) Nhp v in ma trn vung An,n . A c phi l ma trn i xng khng A c phi l ma trn n v khng? Trang 154/268

(A l i xng nu Aij=Aji vi mi i,j =1,..., n. A l ma trn n v nu tt c cc phn t trn ng cho chnh u bng 1 v cc phn t cn li u bng 0). 11.1. CC V D NNG CAO V CU LNH LP Phn ny trnh by cch vn dng cc cu lnh lp gii quyt mt s bi ton tiu biu mc kh hn. Thng qua cc v d, ngi hc s tm thy nhng t liu c ch gii cc bi tp tng t, nng cao thm mt bc k nng lp trnh. V d 11.1: Nhp x v n, tnh gn ng Sinx theo cng thc:

Ta vit : S= U0 - U1 + U2 - U3 +U4 - ... +(-1)N UN , trong : U0 = x

.v.v.

Nh vy, Uk sai khc Uk-1 mt tha s C c th tnh trc tip c theo x v theo k :

Thnh ra, nu lu c s hng U bc trc th s tnh c s hng U bc sau bng lnh : U:=U*C; , v v sang bc sau th ga tr U s thay i nn ti mi bc ta phi cng hoc tr ngay U vo tng S. Vic cng hay tr U vo tng S c gii quyt nh mt bin dau gi l bin cha du ca U, bin ny ch nhn ga tr l +1 hay -1 ng vi php cng hay tr U vo tng S. u tin ta gn: dau:= -1; Ti mi bc lp ta cng U nhn vi dau vo S, ri o du i chun b cho bc tip theo bng cc lnh: S:= S+ dau * U; dau:= -dau ; Thnh ra nu bc trc dau=-1 th bc sau dau=+1 v ngc li. Kt qa l lnh S:= S+ dau * U; s cng hay tr U vo S theo lut an du. Trang 155/268

Cu lnh lp c dng y l lnh FOR v s ln lp N c nhp t bn phm tc l bit trc. Chng trnh c th nh sau: PROGRAM VIDU11_1; { Tnh gn ng Sinx } Var N, k, dau : Integer; x, U, S, C : Real; Begin Write(Nhp s dng N : ); Readln(N); Write(Nhp s thc x : ); Readln(x); U:=x; S:=x ; { Gn ga tr ban u U0 cho S ngay} dau:= -1; For k:=1 to N do begin C:= x*x/ ( 2*k*(2*k+1) ); U:= U*C; S:=S+ dau*U; dau:= - dau; end; Writeln( Gi tr Sin = , S:8:4); Readln; End. Chy <VD11_1.EXE > Chp tp tin ngun <VD11_1.PAS> Khi chy chng trnh, nu nhp N=6 v x=1.5708 (= /2) th cho kt qa Sinx= 1.0000 ; Nu nhp N=6 v x=3.1416 (= ) th cho kt qa Sinx = 0.0000. V d 11.2: Tnh gn ng s e vi sai s cho trc. Cho cng thc : Trang 156/268

( v phi l mt tng v hn ) Hy tnh gn ng e2 bng cch ly tng ( hu hn ) cc s hng u chui cho n khi gp s hng u tin c ga tr tuyt i nh hn mt s epsilon (EPS) dng kh b cho trc, tc l :

vi n l s sao cho:

. Ta vit : S = Uo +U1 +...+Un , trong : Uo=1

.v.v.

Tng t v d 11.1, ta dng bin U lu s hng ti mi bc lp k=0, 1, 2, ... Ti mi bc, ta kim tra nu? U? ? EPS th cng U vo tng S, ri tnh U cho bc tip theo bng cch nhn U vi tha s 2/k. Qa trnh kt thc khi gp s hng U u tin c ? U? < EPS. V s vng lp l khng bit trc nn cu lnh lp c dng l WHILE. Chng trnh c vit nh sau : PROGRAM VIDU11_2; { Tinh e2 theo sai s EPS dng kh b cho trc} Var k : Integer; S, U, EPS : Real; Begin Repeat Trang 157/268

Write(Nhap sai so > 0 : ); Readln(EPS); Until EPS >0; k :=0; S :=0; U :=1; While ABS(U) >= EPS DO begin S:=S +U; k:=k+1; U:=U* 2/ k; end; Writeln( S= , S:8:4 , tnh n s hng k= , k); Readln; End. Chy < VD11_2.EXE> Chp tp tin ngun <VD11_2.PAS> Khi chy chng trnh, nu nhp EPS=0.001 th cho kt qa S=7.3887 , tnh n s hng k=10. V d 11.3: Nhp s nguyn dng N, in cc ch s ca N theo th t o ngc. V d N= 15742 in ra 24751. Cch lm nh sau: Tch v in hng n v ca N ra bng hai lnh: k:= N mod 10; { c k=2 } Write(k: 3); B i hng n v, gi li cc ch s t hng chc tr ln: N:= N div 10; { c N=1574 } Lp li qa trnh trn cho n khi N=0. S ln lp l khng bit trc m ty thuc vo vic nhp s N c t hay c nhiu ch s, nn ta phi dng lnh Repeat hay While. PROGRAM VIDU11_3; Trang 158/268

{ In o ngc cc ch s ca N } Var N, k: LongInt ; Begin Repeat Write( Nhp N : ); Readln(N); Until (N>0); Writeln( N, c in o ngc thnh :); Repeat k:= N mod 10; Write(k: 3); N:=N div 10; Until N=0; Readln; End. Chy <VD11_3.EXE> Chp tp tin ngun <VD11_3.PAS> V d 11.4: Kim tra s t nhin N c phi s nguyn t khng. S N? 1 l s nguyn t nu n ch chia ht cho 1 v chnh n. V d cc s 2, 3, 5, 7, 11, 13, 17, 19, 21, 23 u l s nguyn t. Xut pht t ng ngha, ta kim tra nu N khng chia ht cho tt c cc s t 2, 3, 4, ..., n N-1 th N l nguyn t, ngc li, ch cn N chia ht cho mt s k no trong tp { 2, 3, 4, ..., N-1} th N khng phi s nguyn t. PROGRAM VIDU11_4; { Kim tra s N c phi s nguyn t khng } Var N, k: integer; Kiemtra: Boolean ; Begin Trang 159/268

Repeat Write( Nhp N : ); Readln(N); Until (N>0); If N =1 then Kiemtra:= False else { xt N > 1} begin Kiemtra:= True; k:=1; Repeat k:= k+1; Until N mod k=0 ; If k<N then Kiemtra:= False; end; If Kiemtra=True then Writeln(N, l s nguyn t ) else Writeln(N, khng phi s nguyn t ); Readln; End. Chy <VD11_4.EXE> Chp tp tin ngun <VD11_4.PAS> Chng trnh c mt on cn gii thch r thm: Repeat k:= k+1; Until N mod k=0 ; If k<N then Kiemtra:= False; Vng lp trn kt thc khi gp s k u tin (nh nht) tha iu kin N mod k=0. Lc , nu k<N th c ngha N chia ht cho mt s k khc N nn N khng phi s nguyn t. Nu k=N th chng t N ch chia ht cho N v khng chia ht cho cc s 2, 3, ..., N-1 nn N l s nguyn t. Trang 160/268

Nhn xt: V s chn (tr s 2) khng phi s nguyn t nn chng trnh c th ci tin ch kim tra cc s l thi. 11.2. CC V D NNG CAO V MNG V d 11.5: Nhp mt danh sch N (N<50) hc sinh gm h tn v im thi mn ton. Hy phn loi cc hc sinh nh sau : loi gii nu im ton 9, loi kh nu 7 im ton< 9, loi trung bnh nu 5 im ton< 7, v loi km nu im ton< 5. In danh sch ln mn hnh, mi ngi trn mt dng, gm h tn, im ton v phn loi. Yu cu danh sch c sp th t theo trt t gim ca im ton. m xem c bao nhiu em c im ton bng 10 ?. PROGRAM VIDU11_5; Uses CRT; Type Kmang1 = Array[1..50] of String[18]; Kmang2 = Array[1..50] of Real; Var i, j, N, Dem10 : Integer; Hoten, Loai: Kmang1; Dtoan : Kmang2; St: String[18]; z: Real; Begin Clrscr; Repeat Write( Nhp s lng hc sinh : ); Readln(N); Until (N>0) and ( N<51); For i:=1 to N do { nhp danh sch hs } begin Write(Nhp h v tn ca hs th , i , : ); Trang 161/268

Readln(Hoten[i]); Write(Nhp im ton ca hs th , i , : ); Readln(Dtoan[i]); end; { sp xp gim theo im ton} For i:=1 to N-1 do For j:=i+1 to N do If Dtoan[i]<Dtoan[j] then begin { hon i Dtoan v h tn } z:=Dtoan[i]; Dtoan[i]:=Dtoan[j]; Dtoan[j]:=z; St:=Hoten[i]; Hoten[i]:=Hoten[j]; Hoten[j]:=St; end; { Phn loi } For i:=1 to N do If Dtoan[i] >= 9 then Loai[i]:=Gioi else If Dtoan[i] >=7 then Loai[i]:=Kha else If Dtoan[i]>=5 then Loai[i]:=Trung binh else Loai[i] :=Kem; Writeln( Danh sch hs sp gim theo ton l: ); For i:=1 to N do Writeln(Hoten[i]: 18, #32, Dtoan[i]:5:1, #32, Loai[i]) ; Trang 162/268

{ m s em c im 10} Dem10 := 0; For i:=1 to N do if Dtoan[i]=10 then Dem10 :=Dem10 +1; Writeln( S em c im 10 l : , Dem10); Readln; End. Chy <VD11_5.EXE> Chp tp tin ngun <VD11_5.PAS> Trong chng trnh, ta s dng ba mng: Hoten, Loai v Dtoan vi quy c phn t th i ca cc mng ny cha cc thng tin v cng mt ngi: l hc sinh th i trong danh sch. V th, khi sp xp mng Dtoan gim dn, mi khi c s i ch Dtoan[i] vi Dtoan[j] th tng ng cng phi i ch Hoten[i] vi Hoten]j]. V d 11.6: Nhp cc k t t bn phm, i thnh ch thng nu l ch hoa, v lu vo mt mng, qa trnh kt thc khi nhp k t trng. Cho bit c bao nhiu k t nhp, trong c bao nhiu ch a, b, c, d mi loi. PROGRAM VIDU11_6; { m k t a, b, c, d } Var Kytu : Array[1..20] of Char ; N, i, Max : Integer; ch : Char; Dem : Array[a..d] of Integer; Begin i:=0; Repeat i:=i+1; Write(Nhp k t th , i , : ); Readln(ch); { i ra ch thng } If ch IN [A..Z] then ch:=Chr( Ord(ch) + 32 ); Trang 163/268

Kytu[i]:= ch; Until ( ch= #32) or (i=20); N:=i; { m cc ch a, b, c, d } For ch:=a to d do Dem[ch]:=0; For i:=1 to N do begin ch:=Kytu[i]; If ch IN [a..d] then Dem[ch] := Dem[ch]+1; {24} end; Writeln( S k t nhp l : , N ); For ch:=a to d do writeln( S ch , ch, =, Dem[ch]); Readln; End. Chy <VD11_6.EXE> Chp tp tin ngun <VD11_6.PAS> Trong chng trnh, cu lnh dng {24}: If ch IN [a..d] then Dem[ch] := Dem[ch]+1; tng ng vi lnh ghp sau: begin If ch =a then Dem[a] := Dem[a]+1; If ch =b then Dem[b] := Dem[b]+1; If ch =c then Dem[c] := Dem[c]+1; If ch =d then Dem[d] := Dem[d]+1; end; Dng bn lnh ny th d hiu hn song bi ton s khng pht trin c khi ta phi m nhiu loi k t, chng hn nh m ch a, m ch b, ..., m ch z. V d 11.7: Nhp ma trn A cp NxM, m xem mi hng c bao nhiu s 0, nhng hng no c nhi? s 0 nht. Trang 164/268

Ta khai bo Dem l mt mng gm N ph? t vi quy c Dem[i] lu s lng s 0 ca hng i. Tm Max l s ln nht trong mng Dem. Nhng hng i no c Dem[i] =Max l hng c nhiu s khng nht. Di y l chng trnh c th : PROGRAM VIDU11_7 ; { Tm trong ma trn cc hng c nhiu s 0 nht } Type Kmang= Array[1..10, 1..10] of Real; Var A : Kmang; i, j, N, M : Integer; Dem : Array[1..10] of Integer ; Max : Integer ; Begin Repeat Write(Nhp s hng N, s ct M : ); Readln(N, M); Until ( N>0) and ( N<11) and ( M>0) and (M<11); For i:=1 to N do For j:=1 to M do begin Write(Nhp A[, i, , , j , ]: ); Readln(A[i,j]); end; { In ma trn A } Writeln( Ma tran A la:); For i:=1 to N do begin For j:=1 to M do Write(A[i, j]:4:0); Writeln; Trang 165/268

end; { m s 0 trong tng hng} For i:=1 to N do begin Dem[i]:=0; For j:=1 to M do if A[i, j]=0 then Inc(Dem[i]); Writeln(S s 0 ca hng , i, l: , Dem[i]); end; { Tm s ln nht ca mng Dem } Max:=Dem[1]; For i:=1 to N do if Max< Dem[i] then Max:=Dem[i]; Writeln( S 0/hng nhiu nht = , Max); { Tm cc hng c nhiu s 0 nht} If Max =0 then writeln( Khng hng no c s 0 ) else For i:=1 to N do if Dem[i]=Max then writeln( Hng nhiu s 0 nht l , i:3 ); Readln; End. Chy <VD11_7.EXE> Chp tp tin ngun <VD11_7.PAS> V d 11.8: Hon i hai hng h v k ca ma trn A Hng h c dng : A[h,1], A[h,2], ..., A[h,M] Hng k c dng : A[k,1], A[k,2], ..., A[k,M] Vic i hng h v hng k c quy v vic i ch tng cp phn t: A[h,1] vi A[k,1], A[h,2] vi A[k,2],..., A[h,M] vi A[k,M], tc l i ch A[h,j] v A[k,j] vi mi j=1, 2, ..., M: For j:=1 to M do begin { i ch A[h,j] vi A[k,j] } Trang 166/268

z:=A[h,j]; A[h,j]:=A[k,j]; A[k,j]:=z; end; y z l bin trung gian cng kiu d liu vi cc phn t ca ma trn A.

Cc bn hy vit chng trnh cho v d ny. 11.3. KIU CHUI K T 11.3.1. Chui v khai bo bin chui : Mt dy cc k t t trong cp nhy n gi l mt hng chui, hay n gin l mt chui. Di y l ba chui : Ngon ngu Pascal Tin hoc 1998 12345678 Chui khng c k t no (ch g? hai du nhy n lin tip) gi l chui rng. S k t c trong chui gi l di ca chui. Chui ABCD c di 4, chui Pascal c di l 6. Chui rng c di bng khng. Bin nhn ga tr l cc hng chui gi l bin kiu chui. Cch khai bo nh sau: Var Tnbinchui : String[N] ; hoc: Tnbinchui : String ; trong N l mt hng nguyn (0 ? N ? 255) n nh s k t ti a m bin c th nhn v gi l di ti a ca bin chui. Nu khng c ch th [N] th chui c di ti a l 255 k t. V d, cho khai bo : Var St : String[17]; Diachi : String; Khi St l bin chui c di ti a l 17 k t, cn bin Diachi c di ti a l 255 k t. Trang 167/268

Cn phn bit di vi di ti a ca bin chui: di ti a c xc nh ngay khi khai bo l kh nng c th cha ca bin chui, cn di ca chui l s k t ang thc c trong chui. Nu gn: St := Nguyen Thi Mai; Diachi := Quan 1, Thanh pho Ho Chi Minh; th bin St c di l 14 k t, mc d kh nng n c th cha ti 17 k t. Tng t, bin Diachi c di l 29 k t cn di ti a cho php l 255. Khi gn cho bin chui mt hng chui di hn di ti a ca n th cc k t tha s b b qua. V du, nu gn: St := Quan 1, Thanh pho Ho Chi Minh; th ga tr ca bin St s l St=Quan 1, Thanh pho. Trong b nh ca my, mt bin chui s chim mt s byte b?g di ti a ca n cng thm 1. Byte u tin, gi l byte 0, cha mt k t c m bng di thc ca chui, mi byte cn li cha mt k t. Cu trc ca bin St ni trn c dng: N g u y e n T h i M a i

di N (=14) ca bin St v k t trong byte 0 (k hiu l St[0]) lin quan vi nhau nh sau: N = Ord ( St[0] ) St[0]= Chr( N ) Turbo Pascal c sn hm Length(chui) cho ngay di thc ca chui m khng cn phi dng n byte 0. V d : Length(St)=14. Ch Cng c th khai bo chui thng qua vic nh ngha mt kiu d liu mi bng t kha Type. Chng hn c th khai bo chui St ni trn theo cch sau: Type KStr17 = String[17]; Var St : KStr17 ; Khi mt bin chui c dng lm i s ca hm hay th tc th n cn phi c khai bo theo cch ny ( tr cc bin chui c kiu String ). 11.3.2. Truy nhp vo tng phn t ca chui : Ging nh mng, mi phn t ca chui c truy nhp thng qua tn chui v ch s ca phn t. Gi N =Length(St), khi k t th i (i=1, 2, ..., N) ca St c k hiu l St[i]. Trang 168/268

V d, cho : St :=ABC; th N=3 v St[1]=A, St[2]=B, St[3]=C. Lnh St[1]:=a; s bin i St thnh St=aBC. Nh vy mi k t St[i] c dng nh mt bin kiu k t, v chui c th xem l mt mng cc k t. Chng hn in chui ta c th in tng k t nh sau: For i:=1 to Length(St) do write(St[i]); iu ny cho thy chui l mt kiu d liu c tnh cu trc. Nhng mt khc, mi chui li c th xem l mt ga tr duy nht, v c th nhp v in chui trc tip bng cc lnh: Readln(St); Write(St); c im ny cho thy chui cn l mt kiu d liu c tnh n gin.

11.3.3. Cc thao tc trn chui : Php cng (ni) chui: Khi cng hai chui, ta c mt chui mi gm cc k t ca hai chui ban u ghp li.V d : tin + hoc =tinhoc 1234+ 5678 = 12345678 Php so snh chui: Khi so snh hai chui, ta so snh tng cp k t ca hai chui t tri qua phi. Nu pht hin ra mt cp k t khc nhau th chui no cha k t nh hn s nh hn. V d: Hong > Han v o > a thanh > thao v n > o Nu so snh ht chiu di ca chui ngn hn m khng c cp no khc nhau th chui ngn hn s nh hn, v d: an < anh chu < chung Hai chui bng nhau khi chng cng di v cc k t cc v tr tng ng th bng nhau. 11.3.4. Cc hm lin quan n chui : Hm Length(St) : cho di ca chui St. Trang 169/268

V d: Length(ABCD)=4 v chui ABCD c 4 k t. Chui rng c di bng 0. Hm Pos(S, St): Cho v tr u tin tm thy chui S trong chui St, nu khng tm thy th hm cho kt qa bng 0. V d: Pos(Ab, cdAb3Abm) = 3, Pos(Ab, 1bA3b) = 0. Hm Copy(St, k, m) : cho m k t ca St tnh t v tr k. V d: Copy (ABCDEF, 4, 2) =DE. Nu k> Length(St) th kt qa s l mt chui rng Nu m> s k t ng sau k t v tr k th hm Copy ch ly cc k t t v tr k n ht chiu di ca St, v d : Copy (ABCD, 3, 10) = CD Hm Concat( St1, St2, ..., Stn) : Ghp ni cc chui St1, St2, ..., Stn theo th t thnh mt chui duy nht. Vy : Concat( St1, St2, ..., Stn) = St1+St2+...+Stn. 11.3.5. Cc th tc lin quan n chui : Th tc Delete(St, k, m) : Xa m k t trong bin chui St bt u t v tr th k. V d, sau khi thc hin cc lnh: St:= TurboPascal; Delete(St, 1, 5); th ga tr ca St=Pascal v 5 k t u b xa. Nu k > Length(St) th khng xa g c. Nu m > s k t ng sau k t v tr k th xa ht t v tr k n cui chui. V d, sau khi thc hin ba lnh : St:=Turbo Pascal; Delete(St, 10, 20); Write(St); th in ra ch Turbo Pas v St b xa i 3 k t cui nn ch cn St=Turbo Pas. Th tc Insert(S, St, k) : Trang 170/268

Chn chui S vo bin chui St ti v tr k. V d, cho : St:=ABCD; Sau khi thc hin lnh: Insert(**, St, 3); th St b bin i thnh St=AB**CD. Nu k> Length(St) th S c ni vo cui ca St. V d, sau khi thc hin hai lnh : St:=XYZ; Insert(ABC, St, 6); th St=XYZABC. Th tc Str(x, St): Bin i s nguyn hay thc x thnh kiu chui v gn cho bin chui St. V d, sau khi thc hin lnh : Str(4752, St); th kt qa l St= 4752. S x c th c nh dng nh khi in ra mn hnh. Lnh Str(4752 : 6, St); cho kt qa St= 4752 (trc s 4752 c 2 k t trng) . Nu x l bin thc v ga tr ca x=34.95 th lnh : Str(x :7:3, St); cho kt qa St= 34.950 (trc s 34.950 c 1 k t trng) . Th tc Val(St, x, k ): Bin i chui s St thnh s nguyn hay thc v gn cho bin nguyn hay thc x. S nguyn k dng pht hin li: nu i c th k=0, ngc li, ga tr ca k l v tr c li trong chui St. V d, cho ba bin n, k, j kiu nguyn v bin x kiu thc, sau khi thc hin cc lnh : St:=385; Val(St, n, j); Val(12.59, x, k); th n=385, j=0, x=12.59 v k=0. Nu gn St := 3a7; v thc hin lnh: Val(St, n, k); Trang 171/268

th ga tr ca n khng xc nh cn k=2 l v tr ca ch a trong chui St, ti khng i ra s c.

11.3.6. Cc v d v chui: V d 11.9: i mt chui ra ch hoa hay ch thng. i c chui St thnh ch hoa, ta i tng k t ca chui ra ch hoa, tc l : For i:=1 to Length(St) do St[i]:=Upcase(St[i]); Tng t, i c chui St thnh ch thng, ta cng i tng k t ca chui St ra ch thng: For i:=1 to Length(St) do if ( St[i]>=A) and (St[i]<=Z) then St[i]:=Chr( Ord(St[i]) + 32) ; V d 11.10: Chun ha mt chui k t . Cho chui St c nhiu k t trng tha u, cui v gia cc t, nh St= nguyen van tuan . Chun ha chui St l xa ht cc k t trng tha u v cui, v gia hai t ch gi li ng mt k t trng, nh St =nguyen van tuan. a) Xa cc k t trng u chui : xa mt k t trng u ca chui St, ta dng lnh: If St[1]=#32 then Delete(St,1,1); Mun xa ht cc k t trng u chui ta dng lnh: While St[1]=#32 do Delete(St,1,1); Din gii: chng no k t u tin ca St vn cn l k t trng th c xa n i cho n khi k t u tin l khc trng. S d phi dng vng lp While l v s k t trng u chui l khng bit trc. b) Xa cc k t trng cui chui : Tng t, mun xa tt c cc k t trng cui ca chui St, ta dng lnh: While St[ length(St) ]= #32 do Delete(St, length(St), 1); Din gii: chng no k t cui cng ca St cn l khong trng th c xa n i cho n khi k t cui cng l khc trng. c) Xa cc k t trng tha gia hai t trong chui : Mun xa cc k t trng tha gia hai t ch cn ng mt k t trng ta lm nh sau: tm trong St ch no c hai k t trng th xa i mt, v lp li thao tc trn cho n khi trong St khng cn ch no c hai k t trng lin tip. Tc l : k:=Pos( , St); { l 2 k t trng } While k > 0 do Trang 172/268

begin Delete(St, k, 1); k:=Pos( , St); end; V d 11.11 : m trong chui St c bao nhiu ch pascal. V ch pascal c 6 k t, nn ta so snh tng cm 6 k t ca St vi chui pascal, bt u t v tr 1: Dem:=0; For i:=1 to Length(St) do if Copy (St, i, 6) =pascal then Inc(Dem); Writeln( S ch pascal l , Dem); V d 11.12: Tm kim v thay th. Tm trong chui St xem c cha ch basic khng, nu c th thay bng ch pascal, nu khng c th in cu khng c. V d St=ngon ngu basic duoc dung pho bien, sau khi thay th ta c St = ngon ngu pascal duoc dung pho bien. Ta dng hm Pos tm xem trong St c cha ch basic khng. Th tc Delete s xa chui basic khi St, v th tc Insert s chn chui pascal vo St ti v tr ang xt: PROGRAM VIDU11_12 ; { Tm ch basic v thay bng ch pascal } Var St: String; k: Integer; Begin Write( Nhp chui St :); Readln(St); k:= Pos(basic , St); If k> 0 then begin Delete(St, k, 5); { xa ch basic } Insert(pascal , St, k); { chn ch pascal } Writeln( St = , St); end Trang 173/268

else Writeln( St, khng c ch basic ) ; Readln; End. Chy <VD11_12.EXE> Chp tp tin ngun <VD11_12.PAS> V d 11.13: Tnh tng cc bnh phng ca cc ch s ca mt s t nhin N. V d N= 325 th T=32+22+52 = 38. PROGRAM VIDU11_13 ; { Tnh tng cc bnh phng cc ch s ca s N} Var N, T : Longint; i, j , k : Integer; St : String[40]; Begin Write(Nhp s N : ); Readln(N); Str( N, St ); { i s N ra chui gi vo St } T:=0; For i:=1 to Length(St) do begin Val ( St[i], j, k ); {i St[i] ra s gi vo j} T:=T+ j*j; end; Writeln( Tng= , T); Readln; End. Chy <VD11_13.EXE> Chp tp tin ngun <VD11_13.PAS> Trang 174/268

V d 11.14: Tch mi t ca chui in ring trn mt dng: Cho St= ngon ngu pascal , cn in ra : ngon ngu pascal Phng php: Bc 1: -Chun ha chui St thnh St=ngon ngu pascal. -Thm mt k t trng vo cui St=ngon ngu pascal . Bc 2: -Tm k l v tr ca k t trng u tin, in k-1 k t u tin, chnh l t th nht, xa k k t u tin, kt qa St=ngu pascal . Lp li qa trnh trn cho n khi trong St khng cn k t trng no na. Chng trnh c th nh sau: PROGRAM VIDU11_14 ; { Tch cc t v in ring trn cc dng } Uses Crt; Var St: String; Tu : String[10]; k: Integer; Begin Clrscr; Write( Nhp chui St :); Readln(St); { Chun ha chui St } While St[1]=#32 do Delete(St,1,1); While St[ length(St) ]=#32 do Delete(St, length(St) ,1); k:=Pos( , St); { l 2 k t trng } While k > 0 do begin Trang 175/268

Delete(St, k, 1); k:=Pos( , St); end; Writeln( Chui chun ha l : , St); Writeln( Tch v in mi t trn mt dng: ); St:=St + #32; { thm 1 k t trng vo cui St} k:=Pos(#32, St); While k>0 do begin Tu:=Copy(St, 1, k-1); Writeln(Tu); Delete(St, 1, k); k:=Pos(#32, St); end; Readln; End. Chy <VD11_14.EXE> Chp tp tin ngun <VD11_14.PAS> V d 11.15 : kt thc phn ny xin gii thiu chng trnh to dng ch DAI HOC QUOC GIA TP.HCM chy ngang mn hnh t phi qua tri. Chng trnh kt thc khi ta nhn mt phm bt k. Ti v tr dng 10, ct 10, ta in chui St ri ngng trong giy lt nh th tc Delay. Sau ta xa k t u tin ca St i ri li in St ti v tr dng 10, ct 10. Kt qa l ta c cm gic chui St dch sang phi mt ct. Lp li cc thao tc trn ta s thy chui St chy sang phi. St khng b ngn dn v to cm gic cc chui St chy ni ui nhau, th trc khi xa St[1] ta ni St[1] vo cui ca St. Di y l chng trnh c th: Ch rng hm Keypressed tr v ga tri logic l TRUE khi c mt phm trn bn phm c bm. Th tc Delay(k) ngng chng trnh mt thi gian l k/1000 giy. Hai hm v th tc ny u thuc th vin CRT. PROGRAM VIDU11_15 ; { To ch chy ngang mn hnh} Uses Crt; Var Trang 176/268

St: String[80]; Begin St:=DAI HOC QUOC GIA TP.HCM ; TextMode(C40); TextBackground(green); TextColor(yellow); Clrscr; Repeat Gotoxy(10,10); Write(St); Delay(500); St:=St+ St[1]; { ni k t u vo cui chui} Delete(St, 1, 1); { Xa k t u} Until Keypressed; TextMode(C80); End. Chy <VD11_15.EXE> Chp tp tin ngun <VD11_15.PAS>

11.4. CU HI TRC NGHIM Cu 1: Cho bin SS kiu l gic. Lnh no lm SS c ga tr l TRUE : a) SS := 'a' < 'A'; b) SS := 'A' = 'a'; c) SS := 'an' < 'a'; d) SS := 'PASCAL' < 'pascal'; Cu 2: Cho khai bo : Var Ho, ten : String[15]; Trang 177/268

-Lnh no sai : a) Write('Ho ten la : ' ; Ho ; Ten); b) Write('Ho ten la : ' + Ho + Ten); c) Write('Ho ten la : ', Ho , Ten); d) Write('Ho ten la : ', Ho + Ten); Cu 3: Cho khai bo : Var Chuoi : string[10]; x : real; -Lnh no ng : a) Chuoi := Str(x:5:2) ; b) Str(x:5:2, Chuoi); c) Chuoi := x ; d) x := Chuoi ; Cu 4: Cho St l bin chui, sau khi thc hin hai lnh : St:= Copy( 'PASCAL VERSION 5.5' , 8, 7) ; Write(St); -Kt qa in ln mn hnh l: a) VERSION 5.5 b) VERSION c) PASCAL d) 5.5 Cu 5: Cho St l bin chui, sau khi thc hin bn lnh: St:=ABCDEF; Delete(St, 3, 2); Insert(XYZ, St, 2); Write(St); -Kt qa in ln mn hnh l: Trang 178/268

a) ABXYZEF b) AXYZBCDEF c) AXYZ d) AXYZBEF Cu 6: Cho i v x l hai bin kiu nguyn. Khi thc hin lnh : VAL('1234', x, i); -Ga tr ca x v i l bao nhiu : a) x = 0 , i = 1234 b) x = 1234 , i = 4 c) x = 1234 , i = 0 d) x = 0 , i = 0 Cu 7: Cho cc bin St chui v k nguyn. Sau khi gn: St:='Sinh vien Tin hoc hoc Tin hoc'; k := Pos('Tin', ST) ; -Ga tr ca k l : a) k=13 b) k=11 c) k=26 d) k=23 Cu 8: Khi chy chng trnh : Var St : string; i, L : integer; Begin St :='Hom nay thuc tap'; L:=Length(St); For i := 1 to L do If (St[i] >= 'a') and (St[i] <= 'z') then St[i]:= Upcase (St[i]); Write (St); Trang 179/268

End. -Chng trnh in ra : a) Hom Nay Thuc Tap b) hom nay thuc tap c) Hom nay thuc tap d) HOM NAY THUC TAP Cu 9: Khi chy chng trnh : Var St : String; i,L : integer; Begin St:='ABCD'; L := Length(St); For i:= L Downto 1 do write (St[i]); End. -Chng trnh in ra : a) DCAB b) ABCD c) 4321 d) DCBA Cu 10: Cho St l bin chui v St:=AAABAAB; Sau khi thc hin hai lnh : While St[1]=A do Delete(St,1,1); Write(St); Kt qa in ra l: a) AABAAB b) BAAB c) BB d) AAA Trang 180/268

11.5. BI TP I. Bi tp nng cao v lnh lp : Cu 1. Nhp x thc, n nguyn ? 0 , tnh gn ng cosx :

Cu *2. Nhp s nguyn dng N, cho bit s c bao nhiu ch s, v ch s ln nht l bao nhiu. V d: s N = 1275 c bn ch s, ch s ln nht l 7. ss : Cu 3. Tnh gn ng gi tr ca Ln(x) , 0 < x ? 2 , vi sai s ss = 0.01, bng cch b i cc s hng c tr tuyt i <

Cu 4. Tm v in ln mn hnh tt c cc s nguyn dng c ba ch s (trong phm vi t 100 n 999) sao cho tng cc bnh phng ca cc ch s ca n bng 25. V d :s N=304 c ba ch s l 3, 0 v 4, v 32+02+42 = 25. Tng t i vi s 500. Cu 5. Nhp s N nguyn dng, tnh :

Cu *6. Nhp ngy, thng, nm sinh ca bn. T u nm sinh n ngy thng nm sinh ca bn c bao nhiu ngy?. V d, sinh ngy 17/2/1977 th t u nm 1977 n ngy c 48 ngy. Cu 7. Nhp s N nguyn dng, tnh S l tng ca N s nguyn t u tin. V d N=3 th S=2+3+5=10.

II. Bi tp nng cao v mng: Cu *8) Tm s dng nh nht trong dy x1, x2,..., xn . Cu *9) Sp xp dy x1, x2,..., xn sao cho cc s dng ng trc theo th t gim dn, ri n cc s cn li ( s m v s 0) theo th t tng dn. V d, nhp dy 3, 0, 4, -5, 2, -1, 7, 0, -6, sp thnh: 7, 4, 3, 2, -6, -5, -1, 0, 0. Cu *10) Nhp mt dy s nguyn dng x1, x2,..., xn . Tm bi s chung nh nht ca chng. V d dy 1 2 5 4 6 3 5 c bi s chung nh nht l 60. Cu *11) Nhp mt dy s nguyn dng x1, x2,..., xn . V biu ngang v biu ng cho dy bng cc du *. V d dy { 3, 5, 6, 2} c biu ngang v biu ng nh sau:

Trang 181/268

Cu 12) Nhp v in ma trn Am,n .Cho bit hng 1 v hng 2 c ging nhau khng, nu khng th hy hon i hng 1 v hng 2. V d: ma trn bn tri di y c hng 1 v hng 2 khng trng nhau, sau khi hon i hai hng ta c ma trn bn phi:

Cu *13) Nhp v in ma trn Am,n .Hy hon i cc hng ca ma trn A sao cho cc phn t ca ct mt lp thnh mt dy tng.

Cu *14) Nhp v in ma trn Am,n . Cho bit nhng hng no ca A lp thnh dy tng Cho bit nhng hng no ca A lp thnh dy i xng Cu *15) Nhp v in ma trn Am,n . Tm s dng nh nht trong ma trn. Cu *16) Nhp v in ma trn Am,n cc s nguyn dng. Tm bi s chung nh nht ca tt c cc phn t ca ma trn. Cu 17) Nhp vo mt s nguyn N ( 1< N < 11) v mt ma tr? vung A cp N c cc phn t l cc s nguyn bt k. Tnh :

trong Aij l phn t hng i ct j ca ma trn A. -Tm s ln nht trong khu vc tam gic k t ng cho ph tr ngc ln gc trn bn tri ca ma trn A. V d, trong ma trn bn, khu vc tam gic c s ln nht l 8 .

Trang 182/268

Dng cu trc mng, nhp mt danh sch N (0<N<50) sinh vin gm Tn, Phi (nam/ n), v im thi, ri phn loi u, rt nh sau : Nu im thi 5 : u. Nu im thi < 4.5 : Rt Nu 4.5 im thi< 5: l nam th Rt, l n th u . In danh sch sp theo trt t tng ca Tn (sp xp theo th t a,b,c, ...), gm cc thng tin v Tn, Phi, im thi, v phn loi. Cu *19) Dng cu trc mng, nhp mt danh sch N (0<N<50) ch h gm h tn, ch s in k thng trc v ch s in k thng ny. Tnh tin in cho tng h theo n ga: 100 kw u tin c n ga 500/kw 50 kw tip theo c n ga l 600 /kw t kw th 151 tr ln c n ga l 900 /kw In danh sch ln mn hnh lit k tng ngi gm h tn, lng in tiu th trong thng v s tin in phi tr. In ra tng s tin in ca tt c cc ha n. III. Bi tp v chui k t : Cu 20) Nhp chui St, in St theo th t o ngc. V d : St = ABCD, in ra DCBA Cu 21) Nhp chui St, xy dng chui St1 gm cc k t ca St nhng o ngc th t. i chui St thnh ch hoa v?i chui St1 thnh ch thng. V d cho St=AbcD12, th St1=21DcbA, sau khi i ta c St= ABCD12 v St1=21dcba. Cu 22) Nhp chui St, kim tra chui c i xng khng. V d: cc chui BCD1DCB v ABCCBA l i xng, cn ABCDBA l khng i xng. Cu 23) Nhp chui St, m xem trong chui c bao nhiu ch a khng phn bit vit hoa hay vit thng, v cho bit v tr ca cc ch a . V d St=Anh van la quan trong c 4 ch a ti cc v tr 1, 6, 10, 14. Cu *24) Nhp chui St, cho bit trong St c bao nhiu k s 0, 1, 2, ..., 9 mi loi. V d St=13163, in ra: c 2 k s 1, c 2 k s 3, c 1 k s 6, cc loi khc khng c. Cu 25) Nhp chui St, xa b cc k t trng tha u v cui chui, v sao cho gia hai t ch c ng mt k t trng, i chui thnh ch thng, ring cc ch u t thnh ch hoa. V d : St = Hom nAy tHUC taP . In ra: Hom Nay Thuc Tap. Cu *26) Nhp mt chui St, m xem trong St : c bao nhiu ch ci A,B,C,..,Z c bao nhiu ch s 0,1, 2, 3,.., 9 c bao nhiu k t trng Trang 183/268

c bao nhiu cc k t khc. Trong bn loi trn th loi no nhiu nht ? Cu 27) Nhp hai chui St v St1. Cho bit chui St1 xut hin my ln trong St, v ti cc v tr no?. V d St=pas12pas34, chui St1 =pas xut hin 2 ln ti cc v tr 1, 6. Cu 28) Nhp ba chui St, St1, St2. tm xem trong chui St c cha chui St1 khng ?, nu c th thay th St1 bng St2. V du: cho St=ABC1234E, St1=1234 v St2 =*. Sau khi thay th ta c St=ABC*E. Cu 29) Nhp mt mng gm N tn cc sinh vin. Hy chun ha tt c cc tn ny, i ra ch hoa ht, sp xp v in ln mn hnh theo th t a, b, c, ... . V d nhp nm tn: lan, an, anh, thanh, bich, in ra : AN, ANH, BICH, LAN, THANH. Cu *30) Nhp mt chui St gm nhiu t. Gi thit St c khng qa 20 t, mi t di khng qa 10 k t. Xy dng mt mng A cha cc t ca St, vi A[i] cha t th i ca St. Sp xp v in cc t ca mng A theo trt t gim ca ?di ca t. V d cho St= Thanh pho da Nang th : A[1]=Thanh, A[2]= pho, A[3]=Da, A[4]=Nang. In ra: Thanh Nang pho Da. Cu 31) Nhp mt s nguyn dng N, i ra s nh phn (h m 2) tng ng. V d : N = 15, i ra 1111. Cu 32) Nhp mt s nguyn dng N, i ra s thp lc phn (h m 16) tng ng : V d : N = 59, i ra 3B.

12.1. KHI NIM V CHNG TRNH CON Chng trnh con (subprogram) l mt on chng trnh c chc nng gii quyt mt vn chuyn bit m chng trnh chnh cn phi thc hin mt s ln ng vi cc ga tr khc nhau ca tham s. Chng hn, nu phi tnh mt lot cc ga tr e1, e2, e3, ..., e10 th ta nn vit mt chng trnh con c nhim v tnh ex vi x la i s bt k & t tn l EXP(x). Mi khi cn tnh mt trong cc ga tr e1, e2, ..., e10 , ta ch cn gi tn chng trnh con nhng thay x bng mt gi tr c th 1, 2, ...,10. Tng t nh th, khi cn nhp d liu cho hai ma trn A v B, thay v phi vit hai on chng trnh nhp ring cho A v cho B th ta ch cn vit mt chng trnh con c nhim v nhp d liu cho mt ma trn X bt k. Sau trong chng trnh chnh, nhp d liu cho A, ta gi chng trnh con nhng thay X bng A, v nhp d liu cho B, ta gi chng trnh con nhng thay X bng B. Nh vy mi chng trnh con thay th c cho mt hay nhiu on chng trnh c bn cht ging nhau. Vic s dng chng trnh con khng ch c tc dng lm cho chng trnh chnh bt rm r, bt di dng m cn c bit c ngha trong vic t chc chng trnh. Khi phi gii quyt mt bi ton ln, ngi ta tm cch chia n ra thnh nhiu bi ton nh. Mi bi ton nh c gii quyt ring r bng mt chng trnh con s d dng hn khi phi kim tra li v kim tra thut ton. Vic cn li l ghp cc chng trnh con ny to thnh mt chng trnh ln, l chng trnh chnh. S lnh trong thn ca chng trnh chnh s khng nhiu, ch yu l cc li gi chng trnh con, v th ngi tho chng d c c mt ci nhn tng quan ton b chng trnh trc khi xem xt tng chng trnh con mt cch chi tit. iu ny tng t nh trong dy chuyn sn xut cng nhip, ngi ta lp rp cc sn phm ( nh xe my, t, ti vi, ...) t cc ph tng v cc bn sn phm c ch to sn t ni khc chuyn n m khng cn phi tm hiu xem h ch to nh th no. Trang 184/268

C hai loi chng trnh con l hm v th tc. S khc nhau c bn ca hm v th tc l ch: hm lun lun tr v mt ga tr duy nht thng qua tn hm v do c th s dng hm nh s dng mt biu thc, cn th tc th khng tr v gi tr no qua tn th tc v n c s dng nh mt lnh n gin. 12.2. HM (Function) 12.2.1. Cc c trng ca hm: Cc yu t c trng cho mt hm gm c: Tn hm Kiu d liu ca cc tham s Kiu d liu ca ga tr hm V d : Hm Sqrt(x): cho cn hai ca x. Tn hm l Sqrt, tham s x l nguyn hay thc cn ga tr hm kiu thc, v d Sqrt(4)=2.0. Hm Chr(k): cho k t c m l k. Tn hm l Chr, tham s k kiu nguyn cn ga tr hm kiu k t, v d Chr(65)=A. Hm Odd(k): cho True hay False ty theo k l l hay chn. Tn hm l Odd, tham s k kiu nguyn v ga tr hm kiu lgic? v d Odd(4)=False. Hm Copy( St, k, n): cho chui con gm n k t ca St tnh t v tr k. Tn hm l Copy, c ba tham s l St kiu chui, k v n kiu nguyn, v ga tr hm kiu chui? v d Copy(ABCD, 2, 3) = BCD. Hm Readkey : khng c tham s, ga tr hm kiu k t, hm nhn mt k t c g t bn phm. Tm li, hm c th khng c tham s hoc c mt n nhiu tham s, nhng hm lun tr v mt ga tr duy nht. Cc tham s lun lun phi trong cp nhy n ( ), nu c nhiu tham s th chng phi phn cch nhau bng du phy. Mi khi gi hm (call) ta phi cho cc tham s cc ga tr c th ph hp vi kiu d liu ca tham s. V d: For k:=1 to 10 do S := S+ Sqrt(k); y:= 3* Sqr(2) - Sin(pi/4) ; Write( Chr(65) ); Cn phn bit hai trng thi ca cc tham s: trng thi dng m t hm v trng thi gi hm. Khi khai bo hm, cc tham s ch mang tnh tng trng, nn gi l tham s hnh thc, cn khi gi hm, cc tham s phi l cc bin hay cc ga tr c th nn gi l cc tham s thc s. V d, khi vit Sqrt(x) th x l tham s hnh thc, n i din cho mt ga tr no . Cn khi gi hm y:=Sqrt(4); th 4 l tham s thc s. 12.2.2. Khai bo hm t vit: Tt c cc hm c sn trong Turbo Pascal gi l cc hm chun, chng c th c s dng m khng cn phi khai bo. Tuy nhin s lng cc hm chun thng khng p ng c yu cu a dng ca ngi s dng, cho nn khi tho chng, ta thng phi t xy dng thm cc hm mi. Trang 185/268

Cc hm t vit cn phi c khai bo, theo c php sau: Function Tnhm(tnthams: kiuthams : kiugatr ; { Cc khai bo dng trong hm } Const ... Type ... Var ... Begin {Cc lnh ca hm} End; Tn hm v tn tham s phi c t theo ng quy tc ca mt tn. Thng thng tn hm nn t sao cho gi nh ga tr m n cha. Tn tham s mc khai bo ny ch mang tnh tng trng nn mi gi l tham s hnh thc. Nu c nhiu tham s hnh thc thuc cng mt kiu d liu th chng c vit phn cch nhau bng du phy, v d: Function F(x, y : Integer) :Real; y hai tham s x v y cng kiu Integer. Nu cc tham s c kiu d liu khc nhau th phi khai bo ring ra v dng du chm phy phn cch, v d: Function F( x: Integer ; y: Real): Real; y tham s x c kiu Integer, cn tham s y c kiu Real. Nh ni, hm l mt chng trnh con nn n cng c ? cc thnh phn nh mt chng trnh bnh thng, tc l cng c th c khai bo hng (Const), khai bo kiu d liu mi (Type) v khai bo bin (Var). Thn ca hm l cc lnh c t gia hai t kha Begin v End , kt thc bng du chm phy ";" ch khng phi l du chm. Ch Trong hm khng c khai bo s dng th vin chun (Uses). 12.2.3. Cu trc chng trnh Pascal c hm t vit: Mt chng trnh c cha hm t vit gi l chng trnh chnh, cn hm gi l chng trnh con. Khai bo hm t vit phi c sau phn khai bo bin VAR v trc BEGIN ca thn chng trnh chnh. Tm li cu trc ca mt chng trnh c cha hm t vit l nh sau: PROGRAM TnCtchnh; Uses ... { khai bo dng th vin chun} Const ... { khai bo hng} Type .... { khai bo kiu d liu mi} Var .... { khai bo bin ca ctrnh chnh} Trang 186/268

Function Tnhm(tnthams: kiuthamso? : kiugatr; { Cc khai bo Const, Type, Var dng trong hm } Begin {Cc lnh ca hm} End; BEGIN { Cc lnh ca chng trnh chnh} END. 12.2.4. Kiu d liu ca tham s v ga tr hm: Kiu d liu ca kt qa ca hm khng the?l mng (array), bn ghi (record), tp hp (set) hay tp tin (file). Khai bo hm nh di y l sai: Function F( x: Integer) : array[1..10] of Real; Kiu d liu ca kt qa ca hm c th l cc kiu n gin, chui, hay con tr. Nu l kiu lit k, on con hay chui (tr kiu String) th phi nh ngha trc thng qua t kha Type. V d, cc khai bo nh sau l sai: Function F( x: Real) : String[20]; Function F( x: Real) : 1..31; M phi nh ngha kiu trc : Type Str20= String[20]; Ngay = 1..31; ri mi khai bo: Function F( x: Real) : Str20; Function F( x: Real) : Ngay; Tuy nhin, vi kiu String th khai bo sau l ng: Function F( x: Real) : String; Kiu d liu ca tham s trong hm v th tc th khng hn ch. Nhng nu l kiu chui (tr kiu String) hay kiu t xy dng th phi c nh ngha trc bng t kha Type. V d, khai bo sau l sai: Trang 187/268

Function F( x : array[1..10] of Real) : Integer ; Function F( St : String[20]) : Char ; M phi nh ngha kiu trc : Type Kmang =Array[1..10] of Real; Kstr20= String[20]; ri mi khai bo: Function F( x : Kmang) : Integer ; Function F( St : Kstr20) : Char ; Tuy nhin, vi kiu String th khai bo sau l ng: Function F( St : String) : Boolean ; 12.2.5. Cc v d : V d 12.1: Nhp dy cc s thc x1, x2, ..., xn, tnh tng :

Phn tch: Gi s c hm Canba(z) tnh cn bc ba ca z, tc l :

khi , tng S c tnh nh sau: S:=0; For i:=1 to N do S:=S + Canba( x[i] ); y hm Canba c tnh N ln ng vi cc tham s thc s?l cc ga tr x[i], i=1,..., N. Vn cn li l phi vit hm tnh cn ba ca z. Hm ny c tn l Canba, tham s z kiu thc, v ga tr hm cng kiu thc, n c xy dng nh sau: FUNCTION Canba( z: Real) :Real; { Hm tnh cn bc ba ca z} Var F: Real; Begin If z=0 then F:= 0; Trang 188/268

If z>0 then F:= exp( 1/3*Ln(z) ); If z<0 then F:= - exp( 1/3*Ln(-z) ); Canba:=F ; End; t on khai bo hm trn y vo ngay trc phn thn ca chng trnh chnh, ta c chng trnh y sau y: PROGRAM VID12_1; Var x : Array[1..20] of Real; S : Real; N, i : integer; FUNCTION Canba( z: Real) :Real; { Hm tnh cn bc ba ca z} Var F: Real; Begin If z=0 then F:= 0; If z>0 then F:= exp( 1/3*Ln(z) ); If z<0 then F:= - exp( 1/3*Ln(-z) ); Canba:=F ; End; BEGIN { vo chng trnh chnh} Repeat Write( nhap N: ); Readln(N); Until ( N>0) and ( N<21); S:=0; For i:=1 to N do begin Trang 189/268

Write(nhap x[, i, ]:); Readln(x[i]); S:=S + Canba( x[i] ); end; Writeln( S= , S:8:2); Readln; END. Chy <VD12_1.EXE> Chp tp tin ngun <VD12_1.PAS> V d 12.2: Nhp chui St, i tt c cc k t ca chui thnh ch thng, chng hn St=ABcdE2 th i thnh abcde2. Gi s c hm Chuthuong(ch) i k t ch t ch hoa ra ch thng, v d Chuthuong(A)=a, khi i tt c cc k t ca chui St ra ch thng ta dng lnh: For i:=1 to Length(St) do St[i]:= Chuthuong(St[i]); Nh vy, ta phi vit hm Chuthuong(ch) c tham s ch kiu k t v ga tr hm cng kiu k t, v t khai bo hm ny vo ngay trc phn thn ca chng trnh chnh, nh sau: PROGRAM VIDU12_2; Var St : String; N, i : integer; FUNCTION Chuthuong( ch: Char):Char; { Hm i ch hoa ra ch thng} Var C: Char; Begin If ( ch>=A ) and ( ch<=Z) then C:=Chr( ord(ch)+32 ) else C:=ch; Chuthuong:=C; End; Trang 190/268

BEGIN { vo chng trnh chnh} Write( Nhp chui ch hoa St : ); Readln(St); N:=Length(St); For i:=1 to N do St[i]:=Chuthuong( St[i] ); Writeln( St = , St); Readln; END. Chy<VD12_2.EXE> Chp tp tin ngun <VD12_2.PAS> V d 12.3: Nhp s N nguyn dng v s thc x bt k, tnh:

Ta vit :

Vy vic tnh S c quy v vic tnh cc s hng Ui ri thc hin php cng dn Ui vo S. tnh Ui ta nhn thy t s (x+i)i c dng tng qut l zk cn mu s (2i-1)! c dng tng qut l k! . Thnh ra, nu c hai hm : * Hm Lt(z, k) tnh zk, tc l Lt(z, k)=zk * Hm Gt(k) tnh k!, tc l Gt(k)=k! th vic tnh S c thc hin bng cc lnh: S:= Lt(Pi, 2)/4; For i:=1 to N do S :=S + Lt(x+i, i)/Gt(2*i -1); Trong lnh gn u tin, hm Lt(z, k) c tnh ng vi cc tham s tht l z=Pi v k=2. Trong lnh For, ti mi bc lp ta c i l mt s xc nh, v hm Lt(z, k) c tnh ng vi cc tham s tht l z=x+i v k=i. Tng t, hm Gt(k) c tnh ng vi k=2*i-1. Di y l chng trnh c th : Trang 191/268

PROGRAM VIDU12_3; Var S, x : Real; N, i : Integer ; Function Lt(z : Real ; k: Byte) : Real ; { hm tnh Lt=zk } Var j : Byte; Q: Real; Begin Q:=1; For j:=1 to k do Q:=Q*z; Lt:=Q; End; Function Gt( k: Byte) : Real; { hm tnh Gt= k!} Var i : Byte; Q: Real; Begin Q:=1; For i:=1 to k do Q:=Q* i; Gt:=Q; End; BEGIN { Chng trnh chnh } Repeat Write( Nhp N v x :); Readln(N, x); Trang 192/268

Until ( N>0); S:= Lt(Pi, 2)/4; For i:=1 to N do S:= S + Lt(x+i, i)/Gt(2*i -1); Writeln(S= , S:10:4); Readln; END. Chy<VD12_3.EXE> Chp tp tin ngun <VD12_3.PAS> 12.2.6. Cc ch khi vit hm: Ta chn chng trnh con l hm khi cn nhn li mt ga tr duy nht thng qua tn hm, nh c th dng tn hm trong cc biu thc. V d, v Gt(4) l mt ga tr nn ta c th vit : k:= Gt(4) - 1 ; Write( Giai tha ca 4 l , Gt(4) ); V tn hm cha ga tr hm nn trong thn ca hm phi c t nht mt lnh gn : TnHm:= Biuthc ; Thng thng ta dng mt bin trung gian tnh ga tr hm , xong xui mi gn bin trung gian cho tn hm trc khi kt thc hm. v d 12.1, trong hm Canba ta dng bin F tnh ga tr hm, sau cng mi gn Canba:=F; trc khi kt thc hm. V phong cch lp trnh, trong hm nn trnh dng cc lnh nhp hay in d liu (Readln, Write). Cc tham s hnh thc chnh l cc d liu phc v cho cc tnh ton trong hm, chng s c ga tr c th khi gi hm. Vic nhp d liu hay in kt qa thng trong thn chng trnh chnh. 12.3. TH TC (Procedure) 12.3.1. Th tc v cch khai bo: Ging nh hm, th tc cng l mt chng trnh con, song th tc khc hm ch: nu nh hm lun tr v mt ga tr duy nht thng qua tn hm th th tc li khng tr v?mt ga tr no thng qua tn gi ca n. Mt th tc thc cht l mt nhm cc lnh c sp xp theo mt trnh t nht nh c tc dng gii quyt mt nhim v c th, v c t mt ci tn gi. Trong i sng hng ngy, ta thng nghe ni n th tc nhp hc ca sinh vin, th tc mua bn nh t, th tc xut cnh, th tc nhp cnh,.v.v. mi th tc l mt dy c trnh t cc cng vic phi lm. Th tc Readln(x, y, z) c nhim v nhp cc ga tr t bn phm cho cc bin x, y, z. Th tc Write(x, y, z) in ga tr ca x, y, z . Th tc Gotoxy(x, y) nh v con tr vo to ct x, dng y trn mn hnh. Th tc Clrscr th ch n gin l xa mn hnh .v.v. . Nh vy th tc c th khng c tham s hoc c t mt n nhi? tham s. Khi gi thc hin mt th tc, ta vit tn th tc v thay cc tham s hnh thc bng cc tham s thc s, kt thc bng du chm phy ";" . Trang 193/268

V d, nu a, b l hai bin c khai bo trong chng trnh th nhp d liu cho hai bin a, b ta vit : Readln(a, b); in biu thc 4+5*6 ln mn hnh, ta vit : Write(4+5*6); t con tr vo v tr ct 8, dng 2 trn mn hnh ta vit: Gotoxy(8, 2); Nh vy, li gi th tc l mt lnh n gin. Do th tc khng tr v ga tr no thng qua tn gi ca n nn tn th tc khng th ng trong cc biu thc. V d cc lnh sau l sai c php: St1 := Delete( St, 1, 1); Write( Val(123, x, k) ); v Delete v Val l hai th tc ch khng phi l hai hm. Ngoi cc th tc chun c sn trong Turbo Pascal, ngi tho chng c th t xy dng cc th tc mi nhng phi khai bo theo c php sau: Procedure Tnthtc( tnthams : kiuthams ) ; { Cc khai bo Const, Type, Var dng trong th tc } Begin {Cc lnh ca th tc } End; on khai bo trn phi c t sau ph? khai bo VAR v trc BEGIN ca thn chng trnh chnh. 12.3.2. Cc v d v th tc : V d 12.4: Gii v bin lun phng trnh ax+b= 0 vi a=4.5, b=13.5, v vi cc cp a, b to bi a=-1, a=0, a=1, b=0, b=1, b=2. Ta vit mt th tc c nhim v gii v bin lun phng trnh ax+b=0 vi hai tham s a, b ty , v gi thc hin th tc ny 10 ln ng vi cc ga tr c th ca a, b cho trong ga thit. PROGRAM VIDU12_4; { Gii phng trnh AX+B=0 bng th tc} Uses Crt; Var i, j: integer; Trang 194/268

Procedure Giaipt (a, b: Real); Begin Writeln(' -Gii phng trnh : ' , a:4:1, 'x+' , b:4:1, '=0'); If a<>0 then Writeln(' Nghiem x=', -b/a:4:2) else if b<>0 then Writeln(' Vo nghiem') else Writeln(' Vo so nghiem'); End; BEGIN { Thn chng trnh chnh } Clrscr; Writeln(' KT QA GII CC P.TRNH:' ) ; Giaipt (4.5, 13.5); For i:=-1 to 1 do For j:=0 to 2 do Giaipt (i, j); Readln; END. Chy<VD12_4.EXE> Chp tp tin ngun <VD12_4.PAS> Khi gi Giaipt (4.5, 13.5); l ta yu cu my thc hin th tc Giaipt vi tham s a=4.5 v b=13.5. Hai vng lp For xc nh 9 cp ga tr i, j c th, v c mi ln nh vy li gi thc hin th tc Giaipt vi tham s a=i, b=j tng ng : For i:=-1 to 1 do For j:=0 to 2 do Giaipt (i, j); Do tch ring vic gii phng trnh ax+b=0 thnh mt th tc nn s lnh trong thn chng trnh chnh gim i, ni bt c thut ton chnh ca chng trnh. y, ta chn chng trnh con Giaipt l th tc ch khng phi l hm v phng trnh ax+b=0 c th v nghim hoc v s nghim (khi a=0). Thnh ra ta khng tm c mt ga tr thch hp gn cho tn hm. Vy kt qa gii phng trnh phi xut ra ngay trong chng trnh con, l cng vic ca th tc. V d 12.5: Nhp vo mt mng A1, A2,...,An, sp xp dy tng ri in dy ln mn hnh. Trang 195/268

C th chia bi ton ra thnh ba cng vic ln sau: a-Nhp dy A1, A2,...,An, b-Sp xp dy A1, A2,...,An, tng c-In dy A1, A2,...,An, ln mn hnh Mi cng vic a, b, c thuc v mt lnh vc ring nn c th xy dng thnh cc th tc c lp vi nhau. lin kt chng li, trong chng trnh chnh, ta ch cn gi tn cc th tc ny theo th t a, b, c vi cc tham s thch hp. Khi thit k th tc sp xp dy tng, c mt vic phi lm nhiu ln l i ch hai phn t A[i] v A[j] nn cng c th xy dng thnh mt th tc gi tn l i ch, n li l chng trnh con ca th tc sp xp. Chng trnh c th nh sau: PROGRAM VIDU12_5; { Sp xp dy A tng dn bng th tc } Uses CRT; Type Kmang = Array[1..20] of Real; Var N : Integer; A: Kmang; Procedure Nhap(Var X: Kmang ; N: Integer ; ten: Char ); Var i : Integer; Begin For i:=1 to N do { nhp mng X } begin Write(Nhp , ten , [ , i , ]: ); Readln(X[i]); end; End; Procedure SapTang( Var X : Kmang ; N: Integer); { Sp dy X tng} Var Trang 196/268

i, j : Integer; Procedure Doicho(Var u, v : Real) ; { hon v cc ga tr ca u v v} Var Tam: Real; Begin Tam:=u; u:=v; v:=Tam; End; { Ht Doicho } Begin { Vo Saptang } For i:=1 to N-1 do For j:=i+1 to N do If X[i]>X[j] then Doicho(X[i], X[j]) ; End; { Het Saptang } Procedure Inday( Chugiai: String ; X: Kmang ; N: Integer); { In dy X ln mn hnh } Var i : Integer; Begin Writeln(Chugiai); For i:=1 to N do write(X[i]:5:1); writeln; End; BEGIN { chng trnh chnh } Clrscr; Repeat Write( Nhp s phn t N : ); Readln(N); Until (N>0) and ( N<21); Trang 197/268

Nhap( A, N, A ); Inday( Dy cha sp l: , A, N); SapTang( A, N); Inday( Dy sp tng l: , A, N); Readln; END. Chy<VD12_5.EXE> Chp tp tin ngun <VD12_5.PAS> Th tc Nhap c ba tham s hnh thc l X, N v ten, nhim v ca n l nhp d liu cho mng X gm N phn t. Tng t, th tc Saptang c nhim v sp xp N phn t ca dy X thnh dy tng. Th tc Inday s in N phn t ca dy X sau khi in li gii thch cha trong tham s chugiai . Th tc Saptang cha mt th tc con l Doicho, c nhim v hon v cc ga tr ca hai bin u, v bt k. Doicho l chng trnh con ca th tc Saptang. Khi mt tham s ? khai bo trong chng trnh con, n c th c hoc khng c t kha Var ng trc. V d trong th tc Saptang, tham s X i sau t kha Var, cn tham s N th khng. X gi l tham s bin cn N gi l tham s tr. S khc nhau gia hai loi tham s ny s c trnh by k phn sau. 12.4. CU HI TRC NGHIM Cu 1: Khai bo u th tc no ng: a) Procedure TT(x :Integer):Real; b) Procedure TT(x: Integer ; x: Real); c) Procedure TT(x); d) Procedure TT(x :Integer ; Var a:Real) ; Cu 2: Khai bo u hm no ng: a) Function F( x: real ); b) Function F( x: integer) : Real; c) Function F(x) : Real; d) Function F( St: String[20]) : Integer ; Cu 3: Khai bo u chng trnh con no ng: a) Function F : Boolean ; b) Procedure TT : Integer ; Trang 198/268

c) Proceduce TT( k : Integer ) d) Function F ( ch: Char) ; Cu 4: Cho khai bo bin v khai bo u ca hm F: Var x, S : Real; n: Integer ; FUNCTION F( y: Real; m : Integer) : Real; - Li gi hm no di y l ng : a) S:= F(n, x); b) S:= F( x, n); c) S:= F( n); d) S:= F( x); Cu 5: Cho khai bo bin v khai bo u ca th tc TT nh sau: Var x, S : Integer ; ch : Char ; Procedure TT(y : Integer; kytu : char); -Lnh gi th tc no ng : a) S := TT(x, ch) ; b) TT(ch, x) ; c) TT ; d) TT(x, ch) ; Cu 6: Khi chy chng trnh : Procedure TINHS; Var i, S : integer; Begin S:=1; For i:=1 to 4 do S:=S*i; Write(S); End; Trang 199/268

BEGIN TINHS; END. -Kt qa in ra : a) 12 b) 6 c) 24 d) 4 Cu 7: Cho khai bo hm : Function F( x : Integer) : Integer; Begin F:=x*x; End; Ga tr ca F(2+1) l : a) 9 b) 3 c) 4 d) 1 Cu 8: Cho khai bo hm : Function F( x, y : Integer) : Integer; Begin If x< y then F:=x else F:=y; End; Ga tr ca F(9, 0) l : a) 3 b) 2 c) 1 d) 0 Trang 200/268

Cu 9: Cho khai bo hm : Function F( k : Integer) : Integer; Begin F:=2*k+1; End; Ga tr ca hm F( F(1) ) l : a) 7 b) 3 c) 1 d) 5 Cu 10: Khi chy chng trnh : Procedure TT( a : Integer) ; Begin Repeat a:= 2* a ; Until a>15 ; Write(a); End; BEGIN TT(2) ; END. -Kt qu in ra l: a) 8 b) 16 c) 32 d) 2 12.5. BI TP

Trang 201/268

Cu 1) Vit mt hm tnh k! vi k nguyn dng bt k. Nhp n, k ( n k 0 ) t bn phm, s dng hm tnh s t hp chp k ca n theo cng thc :

Cu 2) Xy dng hm LT(x, k) tnh ly tha xk ca s thc x bt k vi k nguyn dng. Nhp s x thc v s N nguyn >0, s dng hm Lt(x,k) tnh :

Cu 3) S dng hai hm Lt(x,k) =xk v Gt(k)=k! tnh gn ng:

trong cc s n nguyn dng, x thc c nhp t bn phm. Cu *4) Nhit F (Fahrenheit), v nhit C (Cecius) lin h nhau theo cng thc :

Vit chng trnh, nhp vo mt dy cc F1, F2,..., Fn ty , sp xp dy ny theo trt t tng, i vi mi Fi hy tnh v in ln mn hnh cc C tng ng, trnh by thnh hai ct : F C

Sau , nhp vo mt dy cc C1, C2,..., Cn ty , sp xp dy ny theo trt t tng, i vi mi Ci hy tnh v in ln mn hnh cc gi tr F tng ng, trnh by thnh hai ct : C F

Yu cu, trong chng trnh c hai hm, v hai th tc : Hm tnh C theo F . Hm tnh F theo C . Th tc sp xp mt dy tng . Th tc in ln mn hnh . Cu 5) Vit mt hm tm bi s chung nh nht ca hai s nguyn dng a v b bt k. Nhp vo N s nguyn dng A1, ..., An, dng hm ni trn tm bi s chung nh nht ca N s . Cu *6) Cho hm F(x) = x3 - 1 . Trang 202/268

Vit chng trnh nhp vo hai s thc a, b v s nguyn n : 10 < n < 50. Tnh tch phn xc nh ca hm F(x) trn on [a,b] theo cng thc hnh thang sau :

trong :

v yi = F( a + ih ) Yu cu : c mt hm tnh ga tr F(x) theo tham s x . 13.1. THAM S TR V THAM S BIN Trong khai bo u ca chng trnh con, cc tham s hnh thc c t kha Var ng trc gi l tham s bin, ngc li, nu khng c t kha Var i trc th gi l tham s tr. V d, trong khai bo hm tnh ly tha zk, ta vit : Function Lt(z : Real ; k: Byte) : Real; th z v k u l cc tham s tr hnh thc . Cn theo khai bo ca th tc Doicho : Procedure Doicho(Var u, v : Real) ; th u v v u l cc tham s bin hnh thc. 13.1.1. Tham s tr : Tham s tr hnh thc c cp mt nh ring khi chng trnh con c gi v b xa b khi chng trnh con chy xong. N c coi nh mt bin a phng, nhn ga tr ban u l tham s thc s c chuyn n t chng trnh chnh qua li gi chng trnh con. Sau chng trnh con c th thay i gi tr ca tham s tr hnh thc bn trong chng trnh con, song iu khng lm thay i ga tr ca tham s thc s. Trong li gi chng trnh con cc tham s tr thc s c th l bin, h?g hay biu thc. V d, mun tnh S= 43, ta vit : S:= Lt(4, 3); hoc : x:=4; S:= Lt(x, 2+1); trong x l bin kiu thc . Cch thc hot ng ca lnh S:= Lt(x, 2+1); l nh sau: Trang 203/268

u tin cc tham s hnh thc z v k s c khi to gi tr ban u z:=x; v k:=2+1; kt qa l z=4 v k=3. K cc lnh trong hm Lt s tnh ton zk v gn kt qa cho tn hm, nn Lt=43. Ga tr ny c gn tip cho S. Trc v sau khi thc hin chng trnh con, ga tr ca tham s thc s x khng h b thay i, x vn c ga tr l 4. Vy, cc bin c truyn vo chng trnh con di dng tham s tr th khng b thay i. Ni cch khc, mi s thay i ca tham s tr hnh thc trong chng trnh con khng lm thay i ga tr ca tham s thc s tng ng c truyn vo t chng trnh chnh. 13.1.2. Tham s bin : Trong li gi chng trnh con cc tham s bin thc s ch c the?l bin, khng the?l h?g hay biu thc. V d, cc lnh sau y l sai : Doicho(3, 4); { Sai v 3 v 4 l cc hng} Doicho(a+1, b); { Sai v a+1 l mt biu thc} Gi s trong chng trnh chnh c hai bin thc a, b c ga tr a=4 v b=3. hon i ga tr ca a v b ta dng lnh: Doicho(a, b); V u v v l cc tham s bin hnh thc nn chng trnh con s ng nht u vi a v ng nht v vi b. Mi thay i ca tham s u trong chng trnh con u l thay i ca chnh bin a, tng t, mi thay i ca tham s v u l thay i ca chnh bin b. Kt qa l trc khi gi th tc Doicho(a,b) th a=3, b=4, sau khi thc hin th tc xong th a=4, b=3. Vy, cc bin c truyn vo chng trnh con di dng tham s bin th s thay i theo tham s bin hnh thc tng ng trong chng trnh con. Thng thng, ta dng tham s bin khi mun nhn li mt ga tr mi sau khi thc hin chng trnh con. By gi ta hiu ti sao trong th tc Saptang th N l tham s tr cn X l tham s bin: Procedure SapTang( Var X : Kmang ; N: Integer); N l s phn t ca mng X th khng cn thay i, cn mng X th li cn thay i tr thnh mt dy tng. Nu ta b t kha Var trc X i, tc l: Procedure SapTang( X : Kmang ; N: Integer); th lnh : Saptang(A, N); s khng lm thay i dy A. Thc cht ca s truyn tham s i vi cc tham s bin l s truyn a ch. Chng trnh con s dng cc nh ca chnh cc bin ? truyn vo di dng tham s bin. V d 13.1: Trong chng trnh di y, th tc TT c hai tham s a v b : a l tham s tr cn b l tham s bin. Hy xem s thay i ga tr ca hai bin x, y ca chng trnh chnh trc v sau khi gi th tc TT: PROGRAM VIDU13_1; Trang 204/268

Var x, y: Integer; PROCEDURE TT( a : integer ; Var b : integer); Begin a:=a+6; b:=b+8; Writeln(a= , a); Writeln(b= , b); End; BEGIN x:=4; y:=7; TT(x,y); {14}

Writeln(x= , x); {15} Writeln(y= , y); {16} Readln; END. Chy<VD13_1.EXE> Chp tp tin ngun <VD13_1.PAS> Trc khi gi th tc TT th x=4, y=7. Khi gi th tc TT(x, y); th cc tham s hnh thc a, b c gn a:=x; b:=y; nn a=4, v b=7. Cc lnh trong th tc a:=a+6; v b:=b+8; s lm thay i cc tham s a v b : a=10, b=15, v do hai lnh: Writeln(a= , a); s in ra a = 10 Writeln(b= , b); s in ra b = 15 Thc hin xong th thc TT, my tr li chng trnh chnh lm tip cc lnh {15} v {16} : Writeln(x= , x); s in ra x = 4 Writeln(y= , y); s in ra y =15 Nh vy, x c truyn vo chng trnh con thng qua tham s tr a nn mi s thay i ca a trong chng trnh con u khng nh hng g n x. Ngc li, bin y c truyn vo chng trnh con thng qua tham s bin b nn mi s thay i ca b trong th tc TT u ko bin y thay i theo. Trang 205/268

Tnh cht trn y ca tham s bin cho php khai thc thm cc kh nng ca th tc v hm. Ta bit th tc khng tr v ga tr no thng qua tn n, cn hm th tr v mt ga tr duy nht qua tn hm. Song mt chng trnh con hon ton c th tr v hai hay nhiu ga tr thng qua cc tham s bin, nh v d 13.2. V d 13.2: Chng trnh sau nhp vo hai cnh a, b ca hnh ch nht v s dng mt th tc tnh c din tch v chu vi. PROGRAM VIDU13_2; { Tnh din tch S v chu vi L ca HCN theo 2 cnh a, b} Var a,b, S, L: Real; Procedure TINH( c1, c2 : Real ; Var DT, CV : Real); { Tnh din tch DT v chu vi CV theo hai cnh c1 v c2} Begin DT:=c1*c2; CV:=2*(c1+ c2); End; BEGIN Write( Nhp hai cnh a, b: ); Readln(a,b); TINH(a, b, S, L); {12}

Writeln(Dien tch= , S:4:1); Writeln(Chu vi = , L:4:1); Readln; END. Chy <VD13_2.EXE> Chp tp tin ngun <VD13_2.PAS> V th tc TINH cn phi tr v hai ga tr din tch v chu vi nn ta khai bo hai tham s bin l DT v CV. Trong chng trnh chnh, ta khai bo hai bin tng ng l S v L. Sau khi nhp hai cnh a, b v gi th tc : TINH(a, b, S, L); {12} th c1:=a; c2:=b; bin S ng nht vi DT, bin L ng nht vi CV. Thnh ra, khi tnh din tch DT v chu vi CV th S v L cng c tnh ( S=DT, L=CV ). Khi thc hin xong th tc TINH, cc tham s c1, c2, DT, CV khng tn ti trong b nh na, song hai bin S v L vn cn tn ti cho n khi kt thc chng trnh. V th, trong chng trnh chnh, ta in S v L, ch khng in DT v CV. Trang 206/268

13.2. PHM VI TC DNG CA CC KHAI BO 13.2.1. Bin ton cc v bin a phng : Mt chng trnh c cha hm hay th tc gi l chng trnh chnh, th tc hay hm gi l chng trnh con. V chng trnh con cng l mt chng trnh nn trong chng trnh con cng c khai bo bin, khai bo hng, .v.v., cng c khai bo chng trnh con ca ring n, ... Cc bin c khai bo trong chng trnh chnh gi l bin ton cc (global variable), chng dng c mi ni k t lc khai bo cho n khi kt thc chng trnh. Cc bin c khai bo trong mt chng trnh con gi l bin a phng (local variable). S d gi l a phng v chng ch c tc dng trong chng trnh con ni n c khai bo m thi. Cc tham s tr hnh thc ca chng trnh con cng l bin a phng. Cc bin a phng ch tn ti trong thi gian chng trnh con ang thc hin, khi chng trnh con thc hin xong th cc bin a phng s b xa khi b nh. Trong v d 12.5 ( Bi 12 ), bin N v A l cc bin ton cc, cn bin Tam l bin a phng ca th tc Doicho, n ch c tc dng trong th tc Doicho m thi. Tng t, bin j l bin a phng ca th tc Saptang. Mi th tc Nhap, Saptang v Inday u c mt bin a phng tn l i, tuy chng trng tn song trong b nh chng l ba nh khc nhau, c phm vi tc dng khc nhau. V d 13.3 : Xt chng trnh di y : Program VIDU13_3; {1} Var x: Integer; {2} {3}

Procedure TTUC1; {4} Var y: Integer; Begin y:=x+5; Writeln(y); End; BEGIN x:=10; TTUC1; Writeln(y); Readln; END. {5} {6} {7} {8} {9} {10} { ht TTUC1 } {11} {12} {13} {14} { lnh ny b li} {15} {16} Trang 207/268

Chng trnh gm 16 dng c nh s t {1} n {16}. Bin x l ton cc nn c phm vi tc dng t dng {3} n dng {16}. Bin y l bin a phng ca TTUC1 nn c phm vi tc dng t dng {6} n dng {10}. Lnh Writeln(y); dng {9} in ra s 15, cn lnh Writeln(y); dng {14} li b li. Tht vy, sau khi thc hin lnh {12} gn x:=10; dng {13} gi TTUC1 v iu khin chuyn n dng {4}. Cc dng {5} {6} cp nh cho bin y a phng, dng {8} gn y:=x+5; nn y=15 v dng {9} in ga tr 15 ca y. n y, TTUC1 kt thc v bin y b xa khi b nh, iu khin c tr v cho lnh {14} trong chng trnh chnh, nhng v y b xa nn khng th in c, v my s bo li. 13.2.2. Phm vi tc dng ca cc khai bo :

Hnh 13.1 Phm vi tc dng hay tm tc dng ca bin (hay hng, kiu d liu, chng trnh con) l khu vc m trong n c th s dng c, ngoi khu vc n b xem l cha khai bo. din t phm vi tc dng ca bin ni ring, ca cc khai bo ni chung, k c khai bo chng trnh con, ta a ra khi nim gi l mc: mc 0 l chng trnh chnh, mc 1 l cc chng trnh con ca chng trnh chnh, mc 2 l cc chng trnh con ca cc chng trnh con mc 1, .v.v. Hnh v 13.1 m t mt chng trnh c hai chng trnh con A v B mc 1, trong chng trnh con A li c hai chng trnh con A1 v A2 mc 2. Vic xc nh phm vi tc dng ca cc bin (hay hng, kiu d liu, chng trnh con) da trn cc nguyn tc sau: Cc bin c khai bo mc 0 (chng trnh chnh) c phm vi tc dng l ton b chng trnh . Cc bin c khai bo mc no s c phm vi l vng gii hn mc , k c cc mc cao hn nm trong mc ny. V d: cc bin c khai bo trong th tc A s dng c trong th tc A, A1 v A2, nhng khng dng c trong chng trnh chnh v trong th tc B. Cc bin c khai bo trong th tc B s dng c trong th tc B nhng khng dng c trong chng trnh chnh v trong cc th tc A, A1 v A2. Trang 208/268

-C th khai bo hai (hay nhiu) bin trng tn cc mc khc nhau nhng chng vn l hai bin khc nhau c phm vi tc dng khc nhau. Nu hai bin trng tn li nm trong hai mc c phm vi bao trm nhau th bin mc thp hn s tm b che khut khi lm vic mc cao hn. V d : Nu chng trnh chnh v th tc B c khai bo hai bin trng tn l x, th trong th tc B ch c bin x a phng ca B l c tc dng, cn bin x ca chng trnh chnh tm thi b che i. Ra khi th tc B, bin x a phng ca B b xa v bin x ton cc hot ng li bnh thng. V d 13.4: Xt chng trnh sau: Program VIDU13_4; {1} Var x: Integer; Procedure B; Var {5} {2} {3} {4}

x: Integer; {6} Begin x:=5; {7} {8}

Writeln(x); {9} End; BEGIN x:=10; B; Writeln(x); Readln; END. {10} {11} {12} {13} {14} {15} {16}

Chy<VD13_4.EXE> Chp tp tin ngun <VD13_4.PAS> Khi chy chng trnh kt qa in ra l : 5 10

Trang 209/268

u tin lnh {12} gn cho bin x ca chng trnh chnh ga tr x=10. Lnh {13} gi th tc B. V th tc B cng c bin a phng tn x nn bin x ton cc tm thi ngng hot ng v lnh {8} gn cho bin x a phng ga tr x:=5 . Lnh {9} in ga tr ca bin x a phng l s 5. Khi tr li chng trnh chnh th bin x a phng b xa khi b nh v bin x ton cc hot ng tr li, lnh {14} s in ga tr ca bin x ton cc l s 10. Phm vi ca cc chng trnh con cng c xc nh tng t. Cu hi l th tc A2 c th gi c nhng u ? V th tc A2 c khai bo trong th tc A nn n ch c bit n bn trong th tc A, ngha l: C th gi th tc A2 t mt v tr trong thn ca th tc A, trong thn ca th tc A1,v c trong thn ca A2 (gi quy). Tm li phm vi ca th tc A2 l ton b th tc A. Tng t, phm vi ca th tc A1 l ton b th tc A. Phm vi ca th tc A hay B l ton b chng trnh, k c trong th tc A, A1, A2 v B. hiu r thm v phm vi ca cc bin, cch thc xy dng v s dng cc th tc v hm, ta xt v d sau : V d 13.5: Nhp hai ma trn A, B cp MxN, tnh ma trn hiu C=A-B, in ba ma trn ln mn hnh. Cho bit ma trn no gm ton s 0. Phn tch: C bn vic chnh phi lm: Nhp hai ma trn A v B. V bn cht, y ch l mt loi cng vic nn c th vit thnh mt th tc gi hai ln. Tnh ma trn C=A-B. y l mt vic nhng chuyn bit c th vit thnh mt th tc chng trnh sng sa. In ba ma trn A, B v C. V bn cht y ch l mt loi cng vic nn c th vit thnh mt th tc v gi ba ln. Kim tra xem ma trn no ton s 0 ? : Cu tr li l mt ga tr lgic ng hay sai (True hay False), vy phi vit dng hm v gi ba ln ng vi cc i s l A, B v C. Chng trnh nh sau: PROGRAM VIDU13_5; { Tnh hiu hai ma trn } Uses CRT; Type Kmatran = Array[1..10, 1..10] of Integer ; Var N, M : Integer; Trang 210/268

A, B, C: Kmatran; Procedure Nhap(Var X: Kmatran ; ten: Char ); Var i, j : Integer; Begin For i:=1 to M do { nhp mng X } For j:=1 to N do begin Write(Nhp , ten , [ , i, , , j , ]: ); Readln(X[i,j]); end; End; { Ht Nhp} Procedure InMatran( Chugiai: String ; X: Kmatran); { In ma trn X ln mn hnh } Var i, j : Integer; Begin Writeln(Chugiai); For i:=1 to M do begin For j:=1 to N do write(X[i,j]:4 ); Writeln; end; End; { Ht In Ma trn} Procedure Tinh( Var X: Kmatran; A , B : Kmatran); { Tnh ma trn X=A-B} Var i ,j : Integer; Trang 211/268

Begin For i:=1 to M do For j:=1 to N do X[i,j]:=A[i,j]-B[i,j]; End; { Ht Tnh } Function Bang0( X : Kmatran) : Boolean ; { Kim tra ma tran X gm ton s 0 ? } Var i, j : Integer; Ktra: Boolean; Begin Ktra:=TRUE; For i:=1 to M do For j:=1 to N do if X[i,j] <> 0 then Ktra:=FALSE; Bang0:=Ktra; End; { Ht hm Bng 0} BEGIN { chng trnh chnh } Clrscr; Repeat Write( Nhp s hng, s ct M, N : ); Readln(M, N); Until (N>0) and ( N<11) and ( M>0) and ( M<11) ; Nhap( A, A ); Nhap( B, B ); Tinh(C, A, B); InMatran( Ma trn A l: , A); InMatran( Ma trn B l: , B); InMatran( Ma trn C l: , C); Trang 212/268

If Bang0(A) =TRUE then writeln( A ton s 0 ); If Bang0(B) =TRUE then writeln( B ton s 0 ); If Bang0(C) =TRUE then writeln( C ton s 0 ); Readln; END. Chy<VD13_5.EXE> Chp tp tin ngun <VD13_5.PAS> Trong cc chng trnh con v d trn, hai bin M v N c s dng t nhin m khng cn phi khai bo di dng tham s v chng l cc bin ton cc, phm vi ca chng l ton b chng trnh. R rng nu khng s dng th tc v hm th chng trnh trn s vit rt di dng. 13.3. S THAM KHO TRC V S QUI 13.3.1. Tham kho trc (Forward reference): Bnh thng khi trong chng trnh chnh c hai chng trnh con A, B c khai bo k tip nhau A trc, B sau, th B gi c A nhng A khng gi c B. Khi A gi c B ta phi tin hnh khai bo phn u ca B vi t kha Forward trc khi khai bo B y . V d 13.6: PROGRAM VIDU13_6; Procedure B; Forward ; { khai bo tham kho B trc} Procedure A; Begin Writeln( Cho ch ); B; End; Procedure B; Begin Writeln( Cho anh ); End; BEGIN A; Trang 213/268

Readln; END. Chy<VD13_6.EXE> Chp tp tin ngun <VD13_6.PAS> Khi chng trnh chy s in ln mn hnh: Cho ch Cho anh Tt nhin, nu ta a khai bo y B ln trc A th khng cn phi tham kho trc. Song t gi thit A gi B ri B li gi A th nht nh phi tham kho trc thi. 13.3.2. S qui (Recursion): Mt th tc hay hm c th gi chnh n, khi ta ni c s qui. V d 13.7: Tnh S= k! bng qui. Ta vit :

Mun tnh k! ta phi tnh c (k-1)!, mun tnh (k-1)! li phi tnh (k-2)!, ..., suy ra cui cng phi tnh c 0!, nhng v 0!=1 nn qa trnh kt thc. Chng trnh sau nhp N, tnh v in ga tr N!. Trong chng trnh c xy dng v s dng mt hm quy tnh k! : PROGRAM VIDU13_7; { Tnh N! bng qui} Var N : Byte; Function Gt( k : Byte) : Real; { Hm tnh k! bng qui} Begin If k=0 then Gt:= 1 else Gt:= k* Gt(k-1); End; BEGIN Trang 214/268

Repeat Write( Nhp N: ); Readln(N); Until N>0; Writeln( N, != , Gt(N):0:0 ); Readln; END. Chy<VD13_7.EXE> Chp tp tin ngun <VD13_7.PAS> Khi nhp N=4, qa trnh gi cc hm c din gii nh sau: Gt(4) =4*Gt(3) =4*3*Gt(2) =4*3*2*Gt(1) =4*3*2*1*Gt(0) { v k=0 nn Gt=1} =4*3*2*1* 1 =24. V d 13.8: Tnh s hng U(k) ca dy Fibonaci bng qui: U(0)=1, U(1)=1, U(k)=U(k-1) + U(k-2) vi k>1. Ta vit: U(k) = 1 nu k=0 hoc k=1 = U(k-1) + U(k-2) nu k>1. Cng thc truy chng trn l c s xy dng hm qui tnh U(k): tnh c mt s hng ta phi tnh c hai s hng ng trc n. Chng trnh sau in ra s Fibonaci th N bng cch gi hm qui Fibo. PROGRAM VIDU13_8; { Tnh s Fibonaci th N } Var N : Integer; Trang 215/268

Function Fibo( k : Integer) : Integer; { Hm tnh s Fibonaci th k bng qui} Begin If k=0 then Fibo:= 1 else if k=1 then Fibo:=1 else Fibo:=Fibo(k-1) + Fibo( k-2); End; BEGIN Write( Nhp N: ); Readln(N); Writeln( S Fibo th , N, = , Fibo(N) ); Readln; END. Chy<VD13_8.EXE> Chp tp tin ngun <VD13_8.PAS> Ghi ch: Vic s dng qui i hi nhiu v b nh. Li khuyn l nn trnh dng qui nu c th c. 13.4. CU HI TRC NGHIM Cu 1: Cho khai bo u ca mt hm: Function F( k : Integer) : String ; Begin If k mod 2=0 then F:=Chan else F:=Le; End; Mun gn X:= F(5); th bin X phi khai bo kiu g : a) Var X: Real; b) Var X: String; c) Var X: Integer; Trang 216/268

d) Var X : Char; Cu 2: Cho khai bo u ca mt hm: Function F( k : Integer) : String ; Begin If k mod 2=0 then F:=Chan else F:=Le; End; Mun in Write( F(y) ); th bin y phi khai bo kiu g : a) Var y : Real; b) Var y : String; c) Var y : Integer; d) Var y : Char; Cu 3: Cho khai bo bin v khai bo u ca th tc TT: Var x, y : Integer ; St :String ; Procedure TT( Var a : Integer ; b : String); -Lnh no ng : a) TT(x +1, St) ; b) TT(10, St) ; c) TT(x, St) ; d) y:= TT(St, x) ; Cu 4: Khi chy chng trnh : Var x, y : Real; Function F(x, y:Real):Real; Begin F:=x; If x < y then F := y; End; BEGIN Trang 217/268

x:=10; y:=15; Write(F(x, y): 0:0); END. -Kt qa in ra: a) 10 b) 15 c) 0 d) F(x,y) Cu 5: Cho a l bin nguyn a=3, v khai bo th tc : Procedure TT( x : Integer) ; Begin x:=x+2; End; Sau khi gi th tc TT(a); th Gi tr ca bin a l : a) 2 b) 5 c) 3 d) 0 Cu 6: Cho x, y l hai bin nguyn v khai bo th tc : Procedure Doicho( Var a : Integer; b : Integer); Var z : Integer; Begin z:=a; a:=b; b:=z; End; -Sau khi thc hin cc lnh: x:=7; y:=3; Doicho(x, y); th gi tr ca x, y l: Trang 218/268

a) x=7, y=7 b) x=3, y=3 c) x=3, y=7 d) x=7, y=3 Cu 7: Cho khai bo hm quy : Function F( a : Integer) : Integer; Begin If a=1 then F:=1 else F:= a*a+ F(a-1); End; Gi tr ca hm F(4) l: a) 1 b) 25 c) 14 d) 30 Cu 8: Khi chy chng trnh : Var x : Integer; Procedure TT ; Begin x:=4; x:= x+5; End; BEGIN x:=0; TT; Write(x); END. -Kt qu in ra l: a) 4 b) 5 c) 9 d) 0 Trang 219/268

Cu 9: Khi chy chng trnh : Var x : Integer; Procedure TINH ; Var x: Integer ; Begin x:=1; x:= x+12; End; BEGIN x:=10; TINH; Write(x); END. -Kt qu in ra l: a) 10 b) 12 c) 22 d) 13 Cu 10: Khi chy chng trnh : Var x : Integer; Procedure TTA ; Var x : Integer; Begin x:= 7* 5; Write(x, ,); End; BEGIN x:=4; TTA; Write(x:2); END. -Kt qu in ra l: a) 35, 4 b) 4, 35 Trang 220/268

c) 4, 75 d) 354 13.5. BI TP Cu 1) Vit mt th tc nhp hai ma trn vung A, B cp N c cc phn t l cc s nguyn. Vit mt th tc tnh ma trn C= A+2B Vit mt th tc in cc ma trn A, B v C ln mn hnh Vit mt hm kim tra A, B, C c phi l ma trn i xng khng ? Cu 2) Vit mt hm kim tra hng th k ca mt ma trn A cp MxN c lp thnh mt dy tng khng ?. Nhp ma trn A v cho bit nhng hng no ca A lp thnh mt dy tng ? Cu 3) Vit mt hm chun ha mt chui: xa b mi k t trng tha u v cui chui, v gia hai t ch gi li ng mt k t trng. Cu 4) Vit mt hm i mt k t t ch hoa ra ch thng. Dng hm i tt c cc k t ca mt chui St nhp t bn phm ra ch thng ht. Cu 5) Vit mt hm kim tra mt chui c i xng khng. Cu 6) Nhp vo mt chui s nh phn, i ra s h thp phn tng ng. V d : nhp chui 1111 , i ra s 15. Yu cu phi c mt hm tnh y = 2k v khng s dng hm chun EXP(x) . ( Hd : 1111 = 1x 23 + 1x 22 + 1x 21 + 1x 20= 15 ) . Cu 7) Vit mt hm qui tnh S= xn (x thc, n nguyn dng). Cu 8) Vit mt hm qui tnh Sn:

14.1 KIU BN GHI 14.1.1. Khi nim Cc phn trnh by trc cho thy ngn ng Pascal rt mnh trong vic gii quyt cc bi ton thin v tnh ton. Trong phn ny chng ta s thy thm mt kh nng mnh m na ca ngn ng Pascal trong lnh vc qun l: qun l nhn s, qun l vt t, qun l ti chnh,.v.v. Hng ngy chng ta rt quen thuc vi mt danh sch sinh vin nh di y:

Trang 221/268

Mi dng lit k cc d liu v mt ngi, mi ct l mt d liu thnh phn cung cp thng tin v mt thuc tnh c th ca nhng ngi . Trong ngn ng Pascal, mi dng c gi l mt RECORD (dch l bn ghi hay th ghi), mi ct l mt FIELD (dch l trng hay thnh phn, hay thuc tnh cho st vi thc t). Ni tng qut, mi bn ghi l mt tp gm nhiu trng (field), cc trng c th c kiu d liu khc nhau. 14.1.2. M t bn ghi : Kiu bn ghi c m t bng cch dng t kha RECORD km theo mt danh sch khai bo cc tn trng v kiu d liu tng ng, kt thc bng t kha END; , tc l: TYPE Tnkiu = RECORD Tntrng1 : Kiudliu1; Tntrng2 : Kiudliu2; ... Tntrngk : Kiudliuk; End; V d 1: Ta nh ngha mt kiu KSVIEN nh sau: TYPE KSVIEN = RECORD Hoten:String[20]; Maso : String[8]; Toan, Ly, DTB: Real; End; Theo m t trn, ta c mt kiu d liu mi t tn l KSVIEN c cu trc bn ghi gm 5 trng (thuc tnh) l:

Trang 222/268

V d 2: Ta m t thi gian l kiu KDATE c ba trng ngy , thng, nm nh sau: TYPE KDATE = RECORD Ngay : 1..31; Thang : 1..12; Nam : Integer; End; V d 3: qun l cc sch trong mt th vin, ta xy dng mt kiu bn ghi KSACH nh sau: TYPE KSACH = RECORD Ma_so_sach: String[6]; Ten_doc_gia: String[20]; Nam_xban :Integer; Gia_tien: Real; Ngay_muon : KDATE; End; Kiu KSACH l mt bn ghi c 5 trng m t 5 thuc tnh ca sch l: m s sch, tn c gi, nm xut bn, ga tin v ngy mn. V d ny cho thy cc bn ghi c th c m t lng nhau: kiu d liu ca mt trng ca bn ghi ny li c th l mt kiu bn ghi khc c nh ngha trc . Trong bn ghi KSACH, Ngay_muon l mt trng c kiu d liu l mt bn ghi kiu KDATE.

Trang 223/268

Mi i tng cn qun l c th c nhiu trng, song ty yu cu qun l m ta ch la chn v khai bo nhng trng tht s cn thit. Khai bo tha th hao ph b nh, nhng nu thiu th cng tc qun l s kh khn do thiu thng tin. V vy, nn khai bo cc trng vi s lng t nht nhng dng. 14.1.3. S dng bn ghi : Kiu bn ghi sau khi c nh ngha c th dng khai bo cho cc bin. V d : Var X, Y, Z : KSVIEN; Trong KSVIEN l bn ghi m t phn trn. Theo khai bo ny, X ,Y v Z l ba bin kiu bn ghi KSVIEN, mi bin u c 5 trng Hoten, Maso, Toan, Ly v DTB. thm nhp vo mt trng ca bn ghi ta vit tn bin kiu bn ghi, sau l du chm . v tn trng, tc l : Tnbin .Tntrng Cc lnh di y gn ga tr cho tng trng ca bin X : X.Hoten :=Nguyen Van An; X.Maso :=1973208; X.Toan :=8.0; X.Ly :=7.0; X.DTB :=(X.Toan+X.Ly)/2; nhp d liu cho trng Hoten ca bin Y, ta vit: Write(Nhap ho ten sinh vien Y : ); Readln(Y.Hoten); S d phi vit tn bin bn ghi trc tn trng l xc nh trng l ca bin bn ghi no. Mi bin X, Y, Z u c trng Hoten, nn nu ch vit Hoten thi th khng bit l Hoten ca ai: X, Y hay Z ?. Cn vit X.Hoten l ch r y l Hoten ca bin X. Nh vy, mi trng ca bin bn ghi c th thm nhp v s dng nh mt bin bnh thng. X.Hoten l bin kiu String[20], X.Maso l bin kiu String[8], ..., X.DTB l bin kiu Real. i vi cc bn ghi lng nhau, cch truy xut n tng trng cng tng t. V d: Cho khai bo bin S kiu KSACH: Var S : KSACH ; truy nhp n cc trng Ngay, Thang, Nam ca Ngay_muon ta vit : Trang 224/268

S.Ngay_muon.Tntrng Chng hn gn : S.Ngay_muon.Ngay := 2; S.Ngay_muon.Thang := 9; S.Ngay_muon.Nam := 1999; Hai bin bn ghi cng kiu c th gn cho nhau. Lnh : Y:=X; gn ga tr ca tng trng ca bin X cho trng tng ng ca bin Y. Vy lnh trn tng ng vi khi 5 lnh sau : begin Y.Hoten :=X.Hoten; Y.Maso :=X.Maso; Y.Toan :=X.Toan; Y.Ly :=X.Ly; Y.DTB :=X.DTB; end; Cc bn ghi c th so snh bng nhau hoc khc nhau: V d: If X=Y then writeln( X v Y l mt ngi ); If X<>Y then writeln( X khc Y ); Tuy nhin khng c php so snh <, <=, >, >= cho cc bn ghi. Hai bn ghi c th hon i ga tr cho nhau theo ngha hon i tng cp ga tr ca cc trng tng ng. Ging nh cc bin n gin, hon i hai bn ghi X v Y ta dng ba lnh: Z:=X; X:=Y; Y:=Z; trong Z l bin trung gian cng kiu bn ghi vi X v Y. V d: Nu bin X v Y c cc trng tng ng l : X.Hoten =Nguyen Van An X.Maso =1973208 Y.Hoten =Tran Thi Nga Y.Maso =1974564 Trang 225/268

X.Toan =8.0 X.Ly =7.0 X.DTB =7.5 th sau khi hon i, ta c : X.Hoten =Tran Thi Nga X.Maso =1974564 X.Toan =5.0 X.Ly =8.0 X.DTB =6.5

Y.Toan =5.0 Y.Ly =8.0 Y.DTB =6.5

Y.Hoten =Nguyen Van An Y.Maso =1973208 Y.Toan =8.0 Y.Ly =7.0 Y.DTB =7.5

14.1.4. Cu lnh WITH : Khi lm vic vi nhiu trng ca mt bin bn ghi th cch thm nhp trn t ra rm r v phi vit nhiu ln tn bin trc tn trng. n gin cch vit, Pascal a ra cu lnh : WITH Tnbin DO LnhP; Tn bin thuc kiu bn ghi. Nu LnhP c truy xut n cc trng ca Tn bin th khng cn phi vit Tn bin v du chm trc cc tn trng. V d, thay v vit: X.Hoten:= Nguyen Van An; ta c th vit : WITH X DO Hoten:= Nguyen Van An; in cc trng ca bin X ln mn hnh, ta vit: WITH X DO Begin Writeln( H v tn : , Hoten); Writeln( M s sinh vin : , Maso); Writeln( im Ton : , Toan: 4:1); Trang 226/268

Writeln( im L : , Ly: 4:1); Writeln( im trung bnh : , DTB :4:1); End; Tt c cc tn trng nm trong khi begin v end c hiu l cc trng ca bin X (nu khng ghi r tn bin no khc). Cc lnh sau gn cc ga tr cho cc trng ca bin S kiu KSACH l mt bn ghi lng nhau: WITH S DO begin Ma_so_sach:=TH-435; Ten_doc_gia:=Nguyen van Mai; Nam_xban :=1999; Gia_tien:= 15000; WITH Ngay_muon DO begin Ngay:=2; Thang:=9; Nam:=1999; end; end; 14.1.5. Mng cc bn ghi : Trong thc t, ta thng phi qun l mt danh sch sinh vin ca mt lp, mt danh sch cc quyn sch trong th vin. V th mng cc bn ghi c dng rt ph bin. Khi khai bo : VAR DS : Array[1..50] of KSVIEN; hoc : TYPE KMang = Array[1..50] of KSVIEN; VAR Trang 227/268

DS: KMang; th ta c mt mng DS gm 50 phn t DS[1],..., DS[50] cng kiu bn ghi KSVIEN. Mi DS[i], i=1,..., 50 l mt bn ghi c 5 trng Hoten, Maso, Toan, Ly, DTB lu tr cc thng tin v sinh vin th i trong danh sch. nhp d liu ( Hoten, Maso, Toan, Ly ) ri tnh im trung bnh cho 50 sinh vin ny, ta dng vng lp For phi hp vi cu lnh WITH : For i:=1 to 50 do WITH DS[i] DO begin Write(Nhap ho ten sinh vien thu ,i, : ); Readln(Hoten); Write(Nhap ma so sinh vien thu ,i, : ); Readln(Maso); Write(Nhap im Toan, Ly sinh vien thu ,i, : ); Readln(Toan, Ly); DTB:=(Toan + Ly)/2; end; sp xp danh sch sinh vin theo trt t gim ca DTB sao cho ngi c DTB cao th ng trc, ngi c DTB thp th ng sau, ta c th p dng phng php sp xp mng, song ch ly trng DTB lm tiu chun so snh: For i:=1 to 49 do For j:=i+1 to 50 do If DS[i].DTB < DS[j].DTB then begin { i ch DS[i] v DS[j] } Z:=DS[i]; DS[i]:=DS[j]; DS[j]:=Z; end; y Z l bin bn ghi cng kiu vi cc phn t DS[i]. Khi sp xp theo DTB tng hoc gim th trng DTB c gi l "kha" ( key) sp xp. Mt cch tng t, c th sp xp danh sch sinh vin theo kha l im Toan, hoc im Ly, hoc Maso, hoc theo Hoten. in danh sch sp xp ln mn hnh, ta dng lnh : For i:=1 to 50 do WITH DS[i] DO Trang 228/268

Writeln( i:2, Hoten:25, Maso:9 , Toan:5:1, Ly:5:1, DTB:5:1);

14.2. CC V D V BN GHI V d 14.1: Nhp mt danh sch N ( 1 N 50) sinh vin gm cc trng: H tn, M s, cc im Ton, L. i vi mi sinh vin, hy tnh im trung bnh : DTB=(Toan + Ly)/2 , v phn loi nh sau: Loi= Gii nu DTB 9, Kh nu 7 DTB < 9, Bnh nu 5 DTB < 7, Km nu DTB < 5. Sp xp danh sch theo trt t gim ca DTB, in danh sch ln mn hnh, mi ngi trn mt dng gm cc mc: S th t, H tn, M s, im Ton, L, DTB v phn loi. Cho bit im Tan cao nht l my ?. C bao nhiu ngi c im cao nht ?. im trung bnh mn Ton cho c danh sch l bao nhiu ?. Bi gii : Trong chng trnh di y, ch no c k hiu ' ' th hy thay bng mt k t trng . PROGRAM VIDU14_1; Uses CRT; Type KSVIEN = RECORD Hoten:String[18]; Maso, Loai : String[8]; Toan, Ly, DTB : Real; End; Var DS : Array[1..50] of KSVIEN; Z : KSVIEN; Trang 229/268

N, i, j, Dem : Integer; Max, TBToan: Real; BEGIN CLRSCR; Repeat Write( Nhp s sinh vin N= ) ; Readln(N); Until ( N>0) and ( N < 51); { Nhp danh sach, tnh DTB va phn loi } For i:=1 to N do WITH DS[i] DO begin Write(Nhap ho ten sinh vien thu ,i, : ); Readln(Hoten); Write(Nhap ma so sinh vien thu ,i, : ); Readln(Maso); Write(Nhap im Toan, Ly sinh vien thu ,i, : ); Readln(Toan, Ly); DTB:=( Toan + Ly)/2; If DTB >=9 then Loai:=Gioi else if DTB >=7 then Loai:=Kha else if DTB >=5 then Loai:=Binh else Loai:=Kem; end; { Sp xp gim theo DTB } For i:=1 to N-1 do Trang 230/268

For j:=i+1 to N do if DS[i].DTB < DS[j].DTB then begin Z:=DS[i]; DS[i]:=DS[j]; DS[j]:=Z; end; Writeln( In danh sach len man hinh ); Writeln(STT HO VA TEN MASO ',

' TOAN LY DTB LOAI); For i:=1 to N do WITH DS[i] DO Writeln(i:2, #32 , Hoten, #32 :19-Length(Hoten), Maso:8, Toan:4:1,Ly:4:1, DTB:4:1, Loai:5); { Tm im Ton cao nht } Max:=DS[1].Toan; For i:=1 to N do if Max< DS[i].Toan then Max:=DS[i].Toan; Writeln(Diem Toan cao nhat = , Max:4:1); { m s em c im Ton =Max} Dem:=0; For i:=1 to N do if DS[i].Toan =Max then Dem:=Dem+1; Writeln( C , Dem, em c im Ton= , Max:4:1); { Tnh im trung bnh mn Ton cho c danh sach } TBToan:=0; { Ly tng im mn Ton} For i:=1 to N do TBToan := TBToan + DS[i].Toan; TBToan:=TBToan/N ; Writeln(Diem trung binh mon Toan= , TBToan:6:2); Readln; END. Chy<VD14_1.EXE> Trang 231/268

Chp tp tin ngun <VD14_.PAS> V d 14.2: Nhp mt danh sch N (1 N 50) u sch g? cc thng tin v Tn sch, S lng (SL) v n ga (DG). Vi mi u sch, tnh Ga tin nh sau: GT = SL * DG nu SL<10 = SL*DG - 5%*SL*DG nu 10 SL<30 = SL*DG - 8%* SL*DG nu 30 SL <50 = SL*DG - 10%* SL*DG nu SL 50 (Tc l nu mua t 10 n 29 cun th c gim 5% n ga, mua t 30 n 49 cun th c gim 8% n ga, mua t 50 cun tr ln th c gim 10% n ga). Tnh Tng s tin phi chi cho vic mua sch, k c 10% thu ga tr gia tng nh vo tng ga tin. Tm xem trong danh sch c cun "TIN HOC DAI CUONG" khng. Nu c th cho bit c bao nhiu cun v n ga ca n. Bi gii: PROGRAM VIDU14_2; Uses CRT; Type KSACH = RECORD Tensach : String[20]; SL : Integer; DG, GT: Real; End; Mang = Array[1..50] of KSACH; Var S : Mang; Z : KSACH; N, i : Integer; Tongtien : Real; BEGIN Trang 232/268

Repeat Write( Nhp N: ); Readln( N ); Until (N>0) and ( N<51); { Nhp N sch v tnh tin} For i:=1 to N do With S[i] do begin Write(Nhp tn sch th , i ,: ); Readln(Tensach); Repeat Write(Nhp S lng : ); Readln(SL); Until SL>0; Write(Nhp n gi : ); Readln(DG); Case SL of 1..9 : GT:=SL*DG; 10..29 : GT:=SL*DG*(1-0.05); 30..49 : GT:=SL*DG*(1-0.08); else GT:=SL*DG*(1-0.1); end; { Ht Case} end; { Ht For} { Tnh tng ga thnh cc u sch} Tongtien:=0; For i:=1 to N do Tongtien:=Tongtien+S[i].GT; { Cng thm thu 10% ga tri gia tng} Tongtien:=Tongtien + 0.1*Tongtien ; Writeln(Tng tin phi chi l: , Tongtien :6:2); Trang 233/268

{ Tm cun TIN HOC DAI CUONG} i:=1; While (i<=N) and ( S[i].Tensach<> TIN HOC DAI CUONG) do i:=i+1; If i> N then writeln ( Khng c cun THDC?) else WITH S[i] DO writeln( Sch THDC c , SL:4, cun, n ga= , DG:6:2); Readln; END. Chy<VD14_2.EXE> Chp tp tin ngun <VD14_2.PAS> V d 14.3: S dng d liu ca v d 2 vit th tc in danh sch cc u sch ln m hnh, trnh by thnh biu sau : TNG KT TIN MUA SCH NM 1999

Gii: Th tc INBIEU sau y cha mt th tc con INCHITIET c nhim v in chi tit tng dng cho tng cun sch . Thn ca th tc INBIEU l cc lnh in tiu , sau l li gi th tc INCHITIET. Cc d liu phc v cho th tc ny l cc bin ton cc c khai bo chng trnh chnh trong v d 14.2, l N v S. Ch no c k hiu th hy thay bng mt k t trng. Nhc li rng #32 cng l mt k t trng. Th tc in biu c vit nh sau: PROCEDURE INBIEU; Var i: Integer ; Procedure INCHITIET; { Th tc in chi tit tng cun sch} Trang 234/268

Var i : Integer; Begin For i:=1 to N do WITH S[i] DO begin Write(| , i:3, #32); Write(| , Tensach); Write(#32: 21-Length(Tensach) ); Write(| , SL:8, #32); Write(| , DG:8:2, #32); Write(| , GT:8:2, |); Writeln; end; For i:=1 to 63 do write(-); Writeln; End; { ht in chi tit} Begin { Vo th tc Inbiu } { In tiu e?} Writeln(' TONG KET TIEN MUA SACH NAM 1999); Writeln( #32 :6 , ------------------------------------------------------------); For i:=1 to 63 do write(-); Writeln; Write(| STT ); Write(| , #32:7 , TEN SACH, #32:7 ); Write(| SO LUONG ); Write(| DON GIA ); Write(| GIA TIEN |); Writeln; Trang 235/268

For i:=1 to 63 do write(-); Writeln; INCHITIET; End ; Rp ton b th tc INBIEU vo phn khai bo ca chng trnh trong v d 14.2, v thm lnh gi INBIEU; vo cui ca thn ca chng trnh , ta c mt chng trnh y m khi chy s in biu theo ng yu cu. Ngoi ra, chng trnh chnh bt rm r, ta a phn nhp d liu vo mt th tc ring gi l NHAP, phn tnh tng ga thnh cc cun sch vo mt th tc ring gi l TINH, v phn tm cun TIN HOC DAI CUONG vo mt th tc gi l TIM. Trong chng trnh chnh ta ch phi gi tn cc th tc ra m thi. PROGRAM VIDU14_3; Uses CRT; Type KSACH = RECORD Tensach : String[20]; SL : Integer; DG, GT: Real; End; Mang = Array[1..50] of KSACH; Var S : Mang; Z : KSACH; N, i : Integer; Tongtien : Real; {--- Th tc Nhp -----} PROCEDURE NHAP ( Var N : Integer); { Nhp N u sch v tnh ga thnh } Var i : Integer; Begin Repeat Write( Nhp s lng sch N: ); Trang 236/268

Readln( N ); Until (N>0) and ( N<51); For i:=1 to N do With S[i] do begin Write(Nhp tn sch th , i ,: ); Readln(Tensach); Repeat Write(Nhp S lng : ); Readln(SL); Until SL>0; Write(Nhp n gi : ); Readln(DG); Case SL of 1..9 : GT:=SL*DG; 10..29 : GT:=SL*DG*(1-0.05); 30..49 : GT:=SL*DG*(1-0.08); else GT:=SL*DG*(1-0.1); End; { Ht Case} end; { Ht For} End; {--- Th tc Tinh -----} PROCEDURE TINH ; { Tnh tng ga thnh cc u sch} Var i: Integer; Begin Tongtien:=0; For i:=1 to N do Tongtien:=Tongtien+S[i].GT; Trang 237/268

{ Cng thm thu 10% ga tri gia tng} Tongtien:=Tongtien + 0.1*Tongtien ; Writeln(Tng tin phi chi l: , Tongtien :6:2); End; {--- Th tc Tm -----} PROCEDURE TIM ; { Tm cun TIN HOC DAI CUONG} Var i : Integer; Begin i:=1; While (i<=N) and ( S[i].Tensach<> TIN HOC DAI CUONG) do i:=i+1; If i> N then writeln ( Khng c cun THDC ) else WITH S[i] DO writeln( Sch THDC c , SL:4, cun vi n ga= , DG:6:2); End; {---------- Th tc In biu ----------------} PROCEDURE INBIEU; Var i: Integer ; Procedure INCHITIET; { Th tc in chi tit tng cun sch} Var i : Integer; Begin For i:=1 to N do WITH S[i] DO begin Trang 238/268

Write(| , i:3, #32); Write(| , Tensach); Write(#32: 21-Length(Tensach) ); Write(| , SL:8, #32); Write(| , DG:8:2, #32); Write(| , GT:8:2, |); Writeln; end; For i:=1 to 63 do write(-); Writeln; End; { ht in chi tit} Begin { Vo th tc Inbiu } { In tiu } Writeln(~~~~~~ONG KET TIEN MUA SACH NAM 1999); Writeln( #32 :6, -------------------------------------------------------------); For i:=1 to 63 do write(-); Writeln; Write(| STT ); Write(| , #32:7 , TEN SACH, #32:7 ); Write(| SO LUONG ); Write(| DON GIA ); Write(| GIA TIEN |); Writeln; For i:=1 to 63 do write(-); Writeln; INCHITIET; End ; {---------- Ht th tc In biu --------------} Trang 239/268

BEGIN NHAP ( N); TINH; TIM; INBIEU; Readln; END. Chy<VD14_3.EXE> Chp tp tin ngun <VD14_3.PAS>

14.3. CU HI TRC NGHIM Cu 1: Chn khai bo ng : a) Type Phanso = Record Tu, Mau: Integer; end ; b) Type Phan so = Record Tu so, Mau so : Integer; end; c) Var Phanso = Record ; Tu, Mau: Integer; end ; d) Type Record = Phanso ; Tu, Mau : Integer; end; Cu 2: Chn khai bo ng : a) Type DIEM = Record x,y : Real; Trang 240/268

b) Type DIEM = Record x,y : Real; end; c) Type DIEM = Record x, y ; end; d) DIEM = Record x, y : Real; end; Cu 3: Cho khai bo : Type SV = Record Ten :String[20]; Dtb:Real; end; Var X, Y : SV ; -Chn cu ng : a) SV.Dtb:= 4.5 ; b) X.Dtb:= Le Van Toan; c) X.Ten:=Anh ; d) X := Y.Dtb; Cu 4: Cho khai bo : Type SV = Record Ten :String[20]; Dtb:Real; end; Var X : SV ; -Chn cu ng : a) With X do Dtb:= 4.5 ; Trang 241/268

b) Dtb:= 4.5 ; c) With SV do Dtb:=4.5 ; d) X := 4.5 ; Cu 5: Cho khai bo : Type SVIEN = Record Ten, Maso : String[10]; end; -Cu no ng : a) Var A : array [1..10] of Record; b) Var A : array [1..10] of SVIEN; c) Var A: array[1..10] of Ten ; d) A: array[1..10] of Maso ; Cu 6: Khi chy chng trnh : Type Vector = Record x, y : Integer; end; Var A, B : Vector ; Begin A.x := 2 ; A.y := 1; B.x := -1; B.y := -3 ; Write( A.x*B.x+A.y*B.y) ; End. -Kt qa in ra l: a) 2 b) -5 c) -7 d) -3 Cu 7: Khi chy chng trnh : Trang 242/268

Type Vector = Record x, y : Integer; end; Var A, B : Vector ; Begin A.x := 2 ; A.y := 4; B.x := -1; B.y := 0 ; Write( Sqr( A.x-B.x) + Sqr(A.y-B.y) ); End. -Kt qa in ra l: a) 5 b) 16 c) 9 d) 25 Cu 8: Cho khai bo : Type Vector = Record x, y : Integer; end; Var S : Array[1..4] of Vector ; i : Integer ; -Lnh no ng : a) For i:=1 to 4 do S[i].x:= 3; y=4; b) For i:=1 to 4 do With S[i] do x:= 3; y=4; c) For i:=1 to 4 do begin S[i].x:= 3; S[i].y=4; end ; d) For i:=1 to 4 do begin S.x:= 3; S.y=4; end; Cu 9: Cho khai bo : Type Sach = Record Masach : String[4]; Trang 243/268

Gia: Real; end; Var DS : Array[1..10] of Sach ; Tien: Real; i : Integer ; -Lnh no ng : a) For i:=1 to 10 do With DS [i] do Tien:=Tien+ Gia ; b) For i:=1 to 10 do Tien:=Tien+ Gia ; c) For i:=1 to 10 do Tien:=Tien+ DS[i].Masach ; d) For i:=1 to 10 do Tien:=Tien+ Sach[i].Gia ; Cu 10: Cho khai bo : Type Toado = Record hoanhdo, tungdo : Integer; end; Var A, B: Toado ; -Lnh no SAI : a) A:=B ; b) A:=A-1; c) A.hoanh :=B.tung ; d) With A do hoanh:= B.hoanh ;

14.4 .BI TP Cu *1) bit mt th sinh u hay rt trong k thi tuyn sinh, cn bit cc thng tin sau: H tn : h v tn ca th sinh KV : th sinh thuc khu vc no? ( 1, 2 hay 3 ). NH : th sinh thuc nhm no ? ( 1, 2, hay 3). T : tng dim ba mn thi . a) Hy nhp vo mt danh sch 100 th sinh gm H tn, KV, NH, T. Xt xem Kt qa th sinh ny u hay rt da vo bng im chun sau : Trang 244/268

V d : Th sinh Khu vc 1 , Nhm 2, c Tng im ? 17.5 th u, ngc li th rt. b) In danh sch sp xp theo trt t gim ca T ln mn hnh, gm cc mc H tn, KV, NH, T v Kt qa u, rt. c) Ch in danh sch nhng ngi u ln mn hnh theo mu:

Cu *2) Mi im M(x,y) trong mt phng to Oxy c m t nh sau : Type DIEM = Record x, y : real; End; Vit chng trnh vi cc yu cu sau : C mt th tc nhp vo ta ca ba im A, B, C . Trong c mt hm kim tra xem c mt cp im no trng nhau khng ?. Nu c th bt nhp li cho n khi c ba im A, B, C phn bit. C mt th tc (hay hm) tnh di cc cnh AB, BC, AC theo cng thc : Nu A(xa,ya), B(xb,yb) th

C mt th tc kim tra xem AB, BC, AC c phi l ba cnh ca mt tam gic khng? ( Hd : tng hai cnh phi ln hn cnh cn li ). Nu khng phi th in ra ch " Khng phi Tamgic" , ngc li th tnh v in din tch ca tam gic ABC ln mn hnh theo cng thc Hrng : , vi P l na chu vi tam gic : P = (AB+BC+AC) / 2 . Cu 3) Vit mt chng trnh pascal thc hin cc yu cu sau :

Trang 245/268

Nhp s nguyn N ( 0<N<100) v mt danh sch N hc sinh vi cc thng tin v: h v tn, chuyn ban (A , B, C) v cc im Ton, Vn, Sinh kiu thc. Vi mi hc sinh hy tnh im trung bnh nh sau : DTB =(2*Ton+ Sinh+Vn)/4 nu em thuc chuyn ban A =(Ton+2*Sinh+Vn)/4 nu em thuc chuyn ban B =(Ton+Sinh+2*Vn)/4 nu em thuc chuyn ban C Chuyn ban no c nhiu em c im trung bnh ? 5 nht ? Cu 4) Nhp s nguyn N ( 0<N<50 ) v N ha n tnh tin in, mi ha n c h tn ch h, ch s in k thng trc (Socu), ch s in k thng ny (Somoi), v nh mc (Dmuc) in hng thng ca h. Hy tnh tin in cho mi ha n, bit rng: Mi kw trong nh mc c n ga l 5, 100 kw u tin trn nh mc c n gi 8, T kw th 101 trn nh mc tr ln c n ga 10. Tnh tng s tin thu c t tt c cc ha n. Tm trong cc ha n xem c h no tn l Tuan khng ? Nu c th in ln mn hnh cc ha n c ch h tn l Tuan gm cc thng tin v Socu, Somoi, Dmuc v Tien in phi tr. Cu 5) Nhp mt danh sch N ngi gm H tn, Chc v (GD, TP, PP, NV) v Mc lng thng (ML) . Tnh Ph cp lng (PC) cho tng ngi nh sau : PC = 50% Mc lng thng nu chc v l GD = 40% " = 30% " = 20% " " " " " " " " " " TP PP NV

Tnh Thu nhp (TN) trong thng cho tng ngi : TN = Mc lng + PC i h tn ca mi ngi ra ch thng ht, ring ch ci u t thnh ch hoa, chng hn: Nguyen Thi Loan. Yu cu phn ny vit thnh mt th tc. In H tn, Chc v, Mc lng, Ph cp v Thu nhp ca nhng ngi c thu nhp cao nht ln mn hnh.

Trang 246/268

15.1. KIU TP HP 15.1.1. Khai bo : Mt tp hp th gm nhiu ga tr c chung mt kiu d liu, gi l kiu c bn. Kiu c bn phi l kiu v hng m c, tc ch c th l kiu byte, k t , lgic hay lit k. S phn t ca tp hp ti a l 256 phn t. Kiu tp hp c m t bng t kha SET OF , k n l kiu c bn ca cc phn t. V d: TYPE Kky_tu = SET OF Char; Kchu_hoa = SET OF A.. Z; Kso = SET OF Byte; Var TapA, TapB : Kky_tu; TapH: Kchu_hoa; TapS : Kso; Cc tp hp TapA, TapB, TapH, TapS ni trn cng c th khai bo trc tip nh sau: Var TapA, TapB : SET OF Char; TapH : SET OF A.. Z; TapS : SET OF Byte; Ch rng cc khai bo di y l sai, v kiu c bn khng th l Integer, v nu l on con th phm vi ca on con khng c vt qa phm vi ca kiu Byte: Var T1: SET OF Integer; T2: SET OF 1..256 ; 15.1.2. Xc nh mt tp hp : Mt tp hp c xc nh bng cch lit k cc phn t ca n, cc phn t c phn cch nhau bi du phy, v t gia hai du ngoc vung. [ ] : tp rng [3..6] : tp cc s nguyn 4, 3, 5, 6 Trang 247/268

[3..6, 9, 12] : tp cc s nguyn 3, 4, 5, 6, 9, 12 [A..C, X, Z] : tp cc ch A, B, C, X, Z Cc phn t ca tp hp c th l bin hay biu thc, v d: [3, 5, i+j, 2*j] : tp hp ny c 4 phn t l 3, 5, hai phn t kia c ga tr bng i+j v 2*j, trong i, j l cc s nguyn sao cho i+j v 2*j nm trong phm vi t 0 n 255. 15.1.3. Cc php ton : Php gn: C th gn mt tp hp cho mt bin tp hp cng kiu. V d, vi cc bin khai bo trn, c th gn: TapA:=[1..5, 9, A]; TapH:=[C..F]; TapS:=[15..20, 30, 40]; Tp rng [ ] gn cho bin tp hp kiu no cng c : TapA:=[ ]; TapH:= [ ]; Lnh gn di y l sai v hai v khng cng kiu d liu: TapA:=[1..8]; TapS:=[1..9]; Php hp: Hp ca hai tp hp A v B, k hiu l A+B, l mt tp hp gm cc phn t hoc thuc tp A hoc thuc tp B. V d: [3..5]+[4..6,10, 15]=[ 3..6, 10, 15] Php giao: Giao ca hai tp hp A v B, k hiu l A*B, l mt tp hp gm cc phn t ng thi thuc A v B. V d: [1..10]*[5..15] =[5..10] Php hiu: Hiu ca hai tp hp A v B, k hiu l A-B, l mt tp hp gm cc phn t thuc tp A nhng khng thuc tp B. V d: [1..10] - [5..15] =[1..4] Nhn xt: Cc php ton trn ch thc hin c khi A v B cng kiu, v kt qa l mt tp hp C cng kiu vi A v B. Trang 248/268

Php th IN (thuc v) : Dng kim tra xem mt bin hay mt ga tr c phi l phn t ca mt tp hp no khng. Biu thc x IN TapA cho kt qa l True nu ga tr x thuc TapA, cho ga tr False trong trng hp ngc li. V d : N IN [N, n] cho kt qa l TRUE y IN [N, n] cho kt qa l FALSE Cc php so snh (=, <>, <=, >=) : Cho A v B l hai tp hp cng kiu, kt qa ca cc php so snh A vi B s l TRUE hoc FALSE. Php bng: A=B khi v ch khi mi phn t ca A u thuc B v mi phn t ca B u thuc A, trong trng hp ngc li, ta ni A khc B v vit A<>B. V d: [3,2,4,5]= [2, 3..5] [A, B]<>[a,B] Php nh hn hoc bng : A<=B khi v ch khi mi phn t ca A u thuc B, v d: [3..5]<=[3..5] [3..5]<=[1..6] Php ln hn hoc bng : A>=B khi v ch khi mi phn t ca B u thuc A, ni cch khc A>=B khi v ch khi B<=A. [3..5]>=[3..5] [A..Z]>=[A..D] Ch rng trong cc tp hp khng c php so snh nh hn (<) v ln hn (>). Khi cn so snh ln hn hay nh hn ta c th vit: If (A<=B) and ( A<>B) then writeln(A < B); If (A>=B) and ( A<>B) then writeln(A > B); 15.1.4. Cc v d : V d 15.1: Nhp vo mt chui St , cho bit trong St c nhng ch hoa no. V d St=ABc3BAFdzA th c cc ch hoa l A, B, F. PROGRAM VIDU15_1; Var Taphoa : Set of A..Z; Trang 249/268

N, i: byte; ch : char; St : String; Begin Write( Nhp chui St: ); Readln(St); Taphoa:=[]; N:=length(St); For i:=1 to N do if St[i] IN [A..Z] then Taphoa := Taphoa+[ St[i] ]; Writeln( Cac chu hoa co trong St la :); For ch:=A to Z do if ch IN Taphoa then write(ch:3); Readln; End. V d 15.2: Nhp N s nguyn trong phm vi t 0 n 255. In ra cc tp s chn, l v cho bit c bao nhiu s chn, bao nhiu s l (cc s trng nhau ch k 1 ln). V d, nhp 9 s : 1, 2, 3, 4, 1, 2, 3, 4, 5 th c hai s chn l 2 v 4 v c 3 s l l 1, 3, 5. PROGRAM VIDU15_2; Const N=10; Var Tapchan, Taple : Set of byte; N1, N2, i, k: byte; Begin Tapchan:=[]; Taple:=[]; For i:=1 to N do begin Trang 250/268

Write(Nhap so thu , i, : ); Readln(k); If odd(k)=False then Tapchan:=Tapchan+[k] else end; writeln( Cc s chn l: ); N1:=0; For i:=0 to (255 div 2) do if 2*i IN Tapchan then begin Write(2*i : 3); N1:=N1+1; end; Writeln( Co , N1, s chn); Writeln( Cc s l l: ); N2:=0; For i:=0 to (255 div 2) do if (2*i +1) IN Taple then begin Write(2*i+1 : 3); N2:=N2+1; end; writeln( Co , N2, s l); Readln; End. V d 15.3: Tm cc s nguyn t ? s nguyn dng N cho trc. Taple:=Taple+[k];

Trang 251/268

C nhiu cch gii khc nhau, di y gii thiu phng php ca Eratosthene, s dng d liu kiu tp hp v khng cn n cc php ton nhn. Xut pht t tp s nguyn S=[2..N] ta loi ra s nguyn t u tin v tt c cc bi s ca n ra khi S, lp li qu trnh trn cho n khi S thnh tp rng. V d: S=[2..15]; Bc 1:-a 2 vo tp s nguyn t, Tapsnt:=[2] -loi 2 v cc bi ca 2 ra khi S, ta c S=[3,5,7,9,11,13,15 ] Bc 2:-a 3 vo tp s nguyn t, Tapsnt:=[2,3] -loi 3 v cc bi ca 3 ra khi S, c S=[5,7,11,13 ] Bc 3:-a 5 vo tp s nguyn t, Tapsnt:=[2,3,5] -loi 5 v cc bi ca 5 ra khi S, c S=[7,11,13 ] Bc 4:-a 7 vo tp s nguyn t, Tapsnt:=[2,3,5,7] -loi 7 v cc bi ca 7 ra khi S, c S=[11,13 ] Bc 5:-a 11 vo tp s nguyn t, Tapsnt:=[2,3,5,7,11] -loi 11 v cc bi ca 11 ra khi S, c S=[13 ] Bc 6:-a 13 vo tp s nguyn t, Tapsnt:=[2,3,5,7,11,13] -loi 13 v cc bi ca 13 ra khi S, c S=[ ] Kt qa c Tapsnt = [2,3,5,7,11,13]. Tp S ging nh mt ci sng lc v loi ra cc s khng phi s nguyn t. Chng trnh c th nh sau: PROGRAM VIDU15_3; Const N=20; Var Tapsnt, S: Set of 1..N; snt, i: Integer; Begin S:=[2..N]; Tapsnt:=[]; Trang 252/268

snt:=2; { so nguyen to nho nhat } Writeln( Cac so nguyen to la : ); Repeat { tim snt la so nho nhat trong S} While Not (snt IN S) do snt:=snt+1; Tapsnt:= Tapsnt+[snt]; { dua vao Tapsnt } Write(snt:4); { Loi cc bi ca snt ra khi S } i:=snt; While i<=N do begin S:=S - [i]; i:=i+snt; end; Until S=[]; Readln; End.

15.2. D LIU KIU TP TIN 15.2.1. Khi nim : Nhp v xut d liu l hai cng vic rt ph bin khi thc hin mt chng trnh. Cho n nay, ta mi ch nhp d liu t bn phm v xut d liu ra mn hnh. Cc d liu ny c t chc trong b nh ca my, chng tn ti khi chng trnh ang chy v b xa khi chng trnh kt thc. Mun lu tr cc d liu lu di s dng nhiu ln th phi ghi chng ln a thnh cc tp tin. Tp tin (file) trong Pascal l mt kiu d liu c cu trc. Mi tp tin l mt tp hp cc phn t c cng chung mt kiu d liu c nhm li thnh mt dy v c ghi trn a di mt ci tn chung. Khi nim tp tin v mng c nhng im rt gn nhau. Song tp tin khc mng nhng im sau y: Mng c t chc trong b nh cn tp tin ch yu c t chc trn a. S phn t ca mng c xc nh ngay khi khai bo, cn s phn t ca tp tin th khng. Cc tp tin c kt thc bng mt du hiu c bit gi l EOF ( End Of File).

Trang 253/268

Cc phn t ca mng c truy xut thng qua ch s. Cc phn t ca tp tin c truy xut nh mt bin trung gian ch im vo v tr ca chng trn a, gi l con tr tp. Ti mi thi im, con tr s ch vo mt v tr no trong tp tin, gi l v tr hin thi. Di y s trnh by hai loi tp tin thng gp l tp tin c nh kiu v tp tin vn bn. 15.2.2. Tp tin c nh kiu: Tp tin m cc phn t ca n c cng mt kiu d liu gi l tp tin c nh kiu. Kiu d liu ca cc phn t ca tp tin c th l kiu n gin ( nguyn, thc, k t , l gic, chui k t...) hoc kiu c cu trc ( mng, bn ghi). Cch khai bo kiu tp tin nh sau: Type TnkiuTtin = File of Kiuphnt ; V d: Type Ksvien = Record Ten: String[20]; Namsinh : Integer; DTB : Real; end; KieuT1 = File of Integer; KieuT2 = File of String[20]; KieuT3 = File of Ksvien ; Theo khai bo trn th KieuT1 l tp tin c cc phn t kiu nguyn ( Integer ), KieuT2 l tp tin c cc phn t l cc chui k t ( String[20] ), cn KieuT3 l tp tin c cc phn t l cc bn ghi kiu Ksvien. Khi c kiu tp tin, ta c th khai bo cc bin tp tin : Var F1 : KieuT1; F2 : KieuT2; F3 : KieuT3; F1, F2, F3 l cc bin kiu tp tin, mt loi bin c bit, khng dng gn ga tr nh cc bin nguyn, thc hay chui. Mi bin ny i din cho mt tp tin m thng qua cc bin ta c th thc hin cc thao tc trn tp tin nh : to tp tin, m, ng, xa tp tin, ghi d liu vo tp tin v c d liu t tp tin, ... Ngoi cch khai bo cc bin F1, F2, F3 thng qua vic ng ngha cc kiu d liu mi nh trn, Pascal cn cho php khai bo trc tip cc bin tp tin nh sau: Trang 254/268

Var TnbinTtin : File of Kiuphnt ; V d: c th khai bo ba bin F1, F2, F3 ni trn theo cch sau : Type Ksvien = Record Ten: String[20]; Namsinh : Integer; DTB : Real; end; Var F1 : File of Integer; F2 : File of String[20]; F3 : File of Ksvien ; 15.2.2.1. Cc th tc chun: 1) Th tc ASSIGN( bintptin, tntptin) : Gn tn tp tin cho bin tp tin. y tn tp tin l mt Assign(F1, DLIEU.DAT); Assign(F3, QLSV.DAT); Sau hai lnh ny, bin F1 ng nht vi tp tin DLIEU.DAT, mi thao tc trn bin F1 chnh l thao tc trn tp tin DLIEU.DAT. Tng t, bin F3 ng nht vi tp tin QLSV.DAT 2) Th tc REWRITE( bintptin) : Khi to tp tin mi, nu tp tin c trn a th n xa i v to mi. V d : Rewrite(F1) ; khi to tp tin DLIEU.DAT Rewrite(F3) ; khi to tp tin QLSV.DAT 3) Th tc RESET(bintptin): M tp tin c s dng. Con tr tp tin tr vo phn t u tin (c s th t l 0) ca tp tin . V d : Reset ( F3); m tp tin QLSV.DAT 4) Th tc WRITE( bintptin, b1, b2, ..., bN): Trang 255/268 biu thc kiu chui l tn thc s ca tp tin. V d :

Tun t ghi vo tp tin cc ga tr ca cc bin b1, b2, ..., bN. Cc bin b1, ..., bN phi cng kiu d liu vi cc phn t ca tp tin. V d: - Cho i, j, k l cc bin kiu Integer v i=10, j=20, k=100, khi lnh : Write(F1, i, j, k ) ; s ghi ln lt cc ga tr 10, 20, 100 vo tp tin DLIEU.DAT -Cho khai bo: Var X : Ksvien; Cc lnh sau gn ga tr cho X v ghi X vo tp tin QLSV.DAT: X.Ten:=Ng Van An; X.Namsinh :=1980 ; X.DTB :=6.5; Write(F3, X); Sau khi ghi X vo tp tin QLSV.DAT, con tr tp tin t ng di n v tr ca phn t tip theo. 5) Th tc READ( bintptin, b1, b2, ..., bN) : c tun t cc phn t ca tp tin t v tr hin thi ca con tr tp tin v gn cho cc bin b1, b2, ..., bN. Kiu d liu ca cc bin b1, b2, ..., bN phi cng kiu vi cc phn t ca tp tin. Mi khi c xong mt phn t, con tr tp tin t ng di n phn t tip theo. V d: Lnh Read(F1, i, j); c hai s nguyn trong tp tin DLIEU.DAT ( k t v tr hin thi) v gn cho cc bin nguyn i, j . Lnh Read(F3, X); c bn ghi hin thi ca tp tin QLSV.DAT v gn cho bin bn ghi X. 6) Th tc CLOSE( bintptin) : ng tp tin . 7) Th tc SEEK( bintptin, k ) : t con tr tp tin vo phn t th k trong tp tin. Th tc ny cho php truy xut trc tip mt phn t ca tp tin m khng phi thc hin tun t t u tp tin. V d: c phn t th 10 ca tp tin DLIEU.DAT v gn cho bin nguyn i ri in ga tr ca i : Seek(F1, 10); Read(F1, i); Write(i); Trang 256/268

8) Th tc ERASE( bintptin) : Xa tp tin trn a 9) Th tc RENAME( bintptin, tnmi ) : i tn tp tin . Yu cu l tp tin phi ang ng th mi xa hay i tn c. 15.2.2.2. Cc hm chun: 1) Hm EOF(bintptin): Cho kt qa True khi con tr tp tin ang cui tp, trong cc trng hp khc hm cho ga tr False. 2) Hm FILESIZE(bintptin) : Cho s phn t ca tp tin. Nu tp tin rng th s phn t bng 0. 3) Hm FILEPOS(bintptin) : Cho v tr hin thi ca con tr tp tin. Phn t u tin c s th t l 0. Phn t cui cng c s th t bng FileSize -1. V d : Ghi s 100 vo cui tp tin DLIEU.DAT, dng cc lnh: i:=100; Seek( F1, FileSize(F1) ) ; {t tr vo cui tp tin} Write(F1, i); { Ghi ga tr ca i vo cui tp} V d 15.4: Nhp mt danh sch sinh vin gm H tn, im Ton, L, tnh im trung bnh ri lu vo tp tin HOSO.DAT. Sau c d liu tp tin ny v in ra mn hnh. Trong chng trnh , ch no c du ~ th thay bng mt k t trng. PROGRAM VIDU15_4; Uses CRT; Const Tenttin = HOSO.DAT; Type Ksvien= Record Hoten: String[20]; Toan, Ly, Dtb : Real; end; KieuTtin = File of Ksvien ; Var F : KieuTtin ; X : Ksvien ; Trang 257/268

i: Integer; Procedure Hienthi ( Var F : KieuTtin); begin Clrscr; Writeln(#32 :5, H V TN, #32:6 , TON~~~L~~~~DTB); Reset(F); While Not Eof(F) do begin Read(F, X); Writeln(X.Hoten, #32:20-Length(X.Hoten), X.Toan:4:1,#32:3, X.Ly:4:1, #32:3, X.DTb:4:1); end; end; {Ht hin th} BEGIN Clrscr; Assign(F, TenTtin); Rewrite(F); i:=0; Repeat Clrscr; Gotoxy(10,4); Write( NHP SINH VIN TH?, i , : ( Enter kt thc) ); With X do begin Gotoxy(10,6); Write(Ho va ten:); Gotoxy(10,8); Write(iem Toan:); Gotoxy(10,10); Write(iem Ly :); Trang 258/268

Gotoxy(20,6); Readln(Hoten); If Hoten<> then begin Gotoxy(20,8); Readln(Toan); Gotoxy(20,10); Readln(Ly); DTB:=(Toan+Ly)/2; end; end; If X.Hoten<> then Write(F,X); i:=i+1; Until X.Hoten=; Close(F); Hienthi(F); Close(F); Readln; END. Ch : Nu tham s trong chng trnh con l tp tin th n phi l tham s bin, khng th l tham s tr.

15.2.3. Tp tin vn bn: Trong Pascal c mt kiu tp tin c nh ngha sn, l kiu TEXT hay tp tin vn bn. khai bo F l bin tp tin vn bn ta vit : Var F: Text; Cc phn t ca tp tin vn bn l cc k t c ghi thnh tng dng c di khc nhau. Cc dng c phn cch nh cc du kt thc dng ( End of line). l hai k t iu khin CR ( Carriage return : nhy v u dng) v LF ( Line feed: xung dng di). V d , on vn bn sau : Tap tin van ban Text 12345 Het Trang 259/268

c cha trong tp tin vn bn thnh mt dy : Tap tin van ban Text CR LF 12345 CR LF Het Eof

Cc th tc Assign, Rewrite, Reset, Write, Read, Close, Erase, Rename u dng c cho tp tin vn bn. Ngoi ra cn c thm th tc Append(bintptin) dng m tp tin vn bn v cho php ghi thm d liu vo cui tp tin. i vi tp tin vn bn, khng th ng thi va ghi va c d liu nh tp tin c nh kiu. ghi d liu, trc tin phi khi to tp tin bng lnh Rewrite hay m tp tin v a tr v cui tp bng lnh Append. Sau ghi d liu vo tp tin bng th tc Write hay Writeln. c d liu mt tp tin c, trc tin ta phi m tp tin bng lnh Reset. Sau c d liu bng th tc Read hay Readln. Nu m tp tin bng Rewrite hoc Append th khng th c c bng Read v Readln. Nu m tp tin bng Reset th khng th ghi c bng Write hay Writeln. Ghi d liu vo tp tin vn bn : Th tc WRITE( bintptin, bt1, bt2, ..., btN) : cho php tun t ghi cc ga tr ca cc biu thc bt1, bt2, .. btN vo tp tin vn bn. Cc biu thc bt1, bt2, .. btN phi thuc kiu n gin chun ( nguyn, thc, k t, lgic) hay kiu chui, v chng khng cn phi c kiu ging nhau. V d : Write(F, 3, 10:4, a:2, Text, 4.5:6:2); s ghi vo tp tin thnh dy nh sau ( Du ~ hiu l mt k t trng): 3~~10~aText~~4.50 Chng trnh di y s to tp tin vn bn T1.TXT : Program VIDU; Var F: Text; A : Integer; B : Real; Begin A:=100; B:=1234.5; Assign(F, T1.TXT); Rewrite(F); Write(F, Ket qua= :10, A:5, B:7:2); Trang 260/268

Close(F); End. Ni dung ca tp tin T1.TXT l : ~~Ket qua=~~100~123.45 Nh vy, cch ghi d liu vo tp tin vn bn hon ton ging nh khi in d liu ln mn hnh. Th tc WRITELN cng c cng dng nh WRITE, nhng ghi xong d liu th a con tr tp tin xung dng di. c bit, lnh Writeln(F); khng ghi g c, ch a con tr tp tin xung dng. Ni dung ca cc tp tin vn bn to bng Pascal hon ton c th xem c bng lnh Type ca MSDOS, bng Norton hay bng chnh Turbo Pascal, ... c d liu ca tp tin vn bn : Th tc READ( bintptin, bin1, bin2, ..., binN) c tun t cc ga tr t tp tin v gn cho cc bin. Cc bin1, bin2, ..., binN phi c kiu d liu ph hp v d liu cn c ti v tr tng ng trong tp tin. V d: Nu tp tin T1.TXT c ni dung nh sau: ~~Ket qua=~~100~123.45 th c li cc d liu ny, ta phi khai bo: Var St :String[10]; i: Integer ; Z : Real; V dng cc lnh: Reset(F); Read(F, St, i, Z); Ga tr ca St, i, Z s l: St=~~Ket qua=, i=100, Z=123.45. Nu khai bo St c kiu String[9] th s b li v sau khi c xong 9 k t u, my s c tip ga tr =~~100 cho bin nguyn i, nhng v ga tr ny bt u l du = nn khng i ra s nguyn c. Th tc READLN(bintptin, bin1, bin2, ..., binN ) c d liu cho cc bi? xong s a tr tp tin xung u dng di. c bit, lnh READLN( bintptin); khng c g c, ch a con tr tp tin xung dng. Ch Hm Eof(F) cng dng c cho tp tin vn bn, ngoi ra cn c hm EOLN(F) cho kt qa l True hoc False ty theo con tr tp tin c ang cui dng hay khng. Khi Eof(F)=True th Eoln(F) cng c ga tr l True. Th tc Seek v cc hm FileSize, FilePos khng dng cho tp tin vn bn. Trang 261/268

Cc tp tin vn bn ngm nh: Trong Pascal c hai bin tp tin vn bn c khai bo sn l Input v Output , tc l my ngm khai bo : Var Input , Output : Text ; Input thng l bn phm cn Output thng l mn hnh. Lnh Readln(Input, x); c vit tt thnh Readln( x) ; Lnh Writeln(Output, x); c vit tt thnh Writeln(x); My in cng l mt tp tin vn bn, c ngm khai bo vi tn l LST. in cc biu thc bt1, bt2, ..., btN ra my in, ta phi khai bo s dng th vin chun PRINTER, v dng lnh : Write(LST, bt1, bt2, ... , btN); So snh tp tin vn bn vi tp tin nh kiu: Cc tp tin c nh kiu cho php va c va ghi v truy nhp trc tip vo tng phn t gn ging nh thao tc vi mng. Cc tp tin vn bn khng cho php ng thi c, ghi v ch c th c hoc ghi tun t, nhng cho php ta c th xem, sa trc tip mt cch d dng bng cc h son tho vn bn n gin, nh NC hay chnh Turbo Pascal. V d 15.5: Cho tp tin vn bn tn l T2.TXT v c ni dung l: dong=6 cot =7 0 8 8 -2 6 11 1 8020702 8 2 0 11 12 9 3 -2 0 11 0 -7 9 4 6 7 12 -7 0 6 5 11 0 9 9 6 0 6 Hy c tp tin ny a vo mt ma trn A v in ma trn A ln mn hnh. S dng v s ct ca ma trn A c ghi hai dng u tin trong tp tin T2.TXT. Program VIDU15_5; { vi du ve File Van ban } uses crt; Trang 262/268

Type MANG = array[1..20,1..20] of integer ; Var A : MANG; N, M : integer; F : Text; Procedure Nhap; Var i,j : Byte; st: string[5]; Begin Assign(F, 'T2.TXT'); Reset(F); Readln(F, St, N); Readln(F, St, M); For i:=1 to N do begin For j:=1 to M do Read(F, A[i,j]); Readln(F); end; Close(F); End; Procedure InMatran; Var i, j : Integer; Begin For i:=1 to N do begin Trang 263/268

for j:=1 to M do write( A[i,j]:4); writeln; end; End; BEGIN Clrscr; Nhap; InMatran; Readln; END. 15.3. CU HI TRC NGHIM Cu 1: Khai bo no ng : a) Type T = Set of Real; b) Type T = Set of Integer; c) Type T = Set of String ; d) Type T = Set of 0..9 ; Cu 2: Khai bo no sai : a) Var T : Set of Char ; b) Var T : Set of -10..300 ; c) Var T : Set of A..z ; d) Var T : Set of Boolean ; Cu 3: Tng ca [1..5] + [3..10, 20] l tp hp no: a) [1..10, 20] b) [1..5] c) [1..20] d) [3..5] Cu 4: Hiu ca hai tp hp [10..15]-[4..12] l tp hp no: a) [4..15] Trang 264/268

b) [13..15] c) [4..10] d) [10..12] Cu 5: Cho khai bo: Var T : Set of Char ; ch : Char ; Sau khi thc hin cc lnh: T:=[A.. D] * [A.. Z]; For ch:=A to F do T:=T+[ch] ; Tp T s l: a) [A..D] b) [A..Z] c) [A..F] d) [C..F] Cu 6: Cho khai bo : Var F: File of Integer ; i , j , k :Integer ; Chn cu c cc lnh u ng : a) Assign( F, T1.DAT ); Rewrite(F); Write(F, i, j, k ); b) Assign(F, T1.DAT ); Rewrite(F); Write(F, i+ j+ k ); c) Assign(F); Rewrite( F, T1.DAT ); Write(F, i, j, k ); d) Assign(F, T1.DAT ); Rewrite(F); Write(F, i, j, k ); Cu 7: Khi chy chng trnh : Var F : File of Char; ch : Char; Begin Assign(F, tt.txt); Rewrite(F); For ch:=A to F do Write(F, ch); Trang 265/268

Seek(F, 4); Read(F, ch); Write(ch); Close(F); End. Kt qu in ra l: a) E b) F c) C d) D Cu 8: Cho khai bo: Var F : TEXT ; Sau khi thc hin cc lnh: Assign(F, tt1.txt); Rewrite(F); Write(F, 123+456); Close(F); Ni dung ca tp tin tt1.txt s l: a) 123+456 b) 123456 c) 579 d) 123 456 Cu 9: Cho F1 l bin tp tin c nh kiu v F2 l bin tp tin vn bn. Lnh no khng dng c : a) Seek( F1, 0); b) Seek(F2, 0); c) Write( Filesize(F1) ) ; d) Write( FilePos(F1) ) ; Cu 10: Cho TT2.TXT l tp tin vn bn c ni dung l : Turbo Pascal 6.0 Khi chy chng trnh : Var F : Text; St : String[20]; Trang 266/268

Begin Assign(F, tt2.txt); Reset(F); Read(F, St); Write(St); Close(F); End. s in ra ch : a) Turbo Pascal 6.0 b) Turbo c) Pascal 6.0 d) Turbo Pascal

15.4. BI TP Cu 1) Nhp mt chui St, xy dng ba tp hp: S1 l tp cc ch hoa c trong St S2 l tp cc ch thng c trong St S3 l tp cc ch s c trong St In cc ga tr ca mi tp S1, S2, S3 trn mt dng. Cu 2) Nhp vo mt mng A1, A2, ..., A10 cc s nguyn dng < 10. Hy in cc ga tr ca mng ny theo th t tng dn sao cho cc phn t trng nhau ch c in mt ln. V d : cho mng 1, 6, 4,1, 9, 6, 6, 0, 3, 9 , in ra: 0,1, 3, 4, 6, 9 ( Hng dn : xy dng tp hp gm cc phn t ca mng A ) Cu 3) Vit chng trnh thc hin tr chi sau: Ngi chi nhp mt s k trong phm vi t 1 n 9 To mt tp S gm ba s ngu nhin trong phm vi t 1 n 9 Kim tra xem k c thuc tp S khng?. Nu thuc th ngi chi thng, ngc li l thua. In k v tp S ln mn hnh. Hng dn: Trong th vin CRT c hm Random(n) tr v mt s ngu nhin j thuc phm vi: 0 ? j < n . Cu 4) Mi phn s c m t nh sau : Type Phanso = Record tu, mau : Integer; end; Trang 267/268

Nhp hai phn s t bn phm, to mt tp tin cha hai phn s v hai phn s l tng, hiu ca chng. c bn phn s t tp tin v in ln mn hnh. Cu 5) Nhp s nguyn dng N (0<N< 20 ) v mt dy N s nguyn : A1, A2, ..., AN . Ghi dy s vo tp tin DL.DAT. m trong tp tin DL.DAT c bao nhiu s chn. c cc s l t tp DL.DAT v in ln mn hnh. Cu 6) qun l H tn , cc im Ton, L v im trung bnh ca sinh vin, ta m t kiu Ksvien nh sau : Type Ksvien= Record Hoten: String[20]; Toan, Ly, Dtb : Real; end; Hy nhp mt danh sch sinh vin gm H tn, im Ton v im L, ri tnh im trung bnh: Dtb:=(Ton+L)/2, lu vo tp tin QLY.DAT. Qu trnh nhp kt thc khi nhp H tn l rng ( tc khng nhp g c, c Enter). c danh sch sinh vin t tp tin QLY.DAT v in danh sch ln mn hnh. Chp danh sch sinh vin vo tp QLY.IDX sao cho cc phn t ca QLY.IDX c sp xp theo trt t gim ca im trung bnh. c d liu ca tp tin QLY.IDX v ghi vo tp tin vn bn tn l QLY.TXT theo dng : STT 1 2 H v tn Nguyen Van Tuan Pham Thi Mai im trung bnh 8.5 8.0

Cu 7) Dng h son tho ca Turbo Pascal to mt tp tin vn bn c tn l MT.DAT cha hai ma trn vung cp 3 l A v B c cc phn t l cc s nguyn. Ly d liu t tp tin MT.DAT tnh ma trn C=A+B. Ghi ma trn C vo cui tp tin MT.DAT. c cc ma trn A, B, C t tp tin MT.DAT v in ln mn hnh.

Trang 268/268

You might also like