170
Ch¬ng 1. C¸c thµnh phÇn c¬ b¶n cña ng«n ng÷ 1.1 Bé ký tù, tõ kho¸, tªn gäi C¸c ng«n ng÷ bÊt kú ®Òu ®îc x©y dùng dùa trªn mét bé c¸c ký tù, tõ c¸c ký tù ®ã mµ c¸c tõ cã nghÜa ®îc t¹o thµnh. TiÕp theo lµ c¸c qui t¾c ®Ó t¹o thµnh c©u ®Ó diÔn t¶ c¸c hµnh vi, sù viÖc- nghÜa lµ ph¶i tu©n thñ có ph¸p (syntax) vµ ng÷ ph¸p (grammar) cña ng«n ng÷ ®ã. Ng«n ng÷ Pascal còng theo quy c¸ch ®ã. a. Bé ký tù: Bé ch÷ c¸i la tinh: 26 ch÷ c¸i lín A, B, C, D...Z. 26 ch÷ c¸i nhá a, b, c, d,..., z. Ký tù g¹ch nèi _ C¸c ch÷ sè thËp ph©n: 0, 1, 2, 3, 4, 5, 6, 7, 8, 9. C¸c ký tù to¸n häc: +, -, *, /, = ,<, > , (, )... C¸c ký tù ®Æc biÖt: ., ;, :, [, ], ?, %, @,... DÊu c¸ch: (Space) dïng ®Ó ng¨n c¸ch c¸c tõ. b. Mét sè tõ cña Pascal ®îc gäi lµ tõ kho¸ (keyword). 3

Chng 1 - Trung tâm đào tạo trực tuyến – Trường đại học ...el.hubt.edu.vn/wp-content/uploads/2014/09/GT-Pascal.doc · Web viewCã hai c¸ch truyÒn tham sè: truyÒn

Embed Size (px)

Citation preview

Ch¬ng 1. C¸c thµnh phÇn c¬ b¶n cña ng«n ng÷

1.1 Bé ký tù, tõ kho¸, tªn gäi C¸c ng«n ng÷ bÊt kú ®Òu ®îc x©y dùng dùa trªn mét bé c¸c ký tù, tõ c¸c ký tù ®ã mµ c¸c tõ cã nghÜa ®îc t¹o thµnh. TiÕp theo lµ c¸c qui t¾c ®Ó t¹o thµnh c©u ®Ó diÔn t¶ c¸c hµnh vi, sù viÖc- nghÜa lµ ph¶i tu©n thñ có ph¸p (syntax) vµ ng÷ ph¸p (grammar) cña ng«n ng÷ ®ã. Ng«n ng÷ Pascal còng theo quy c¸ch ®ã.a. Bé ký tù:

Bé ch÷ c¸i la tinh: 26 ch÷ c¸i lín A, B, C, D...Z. 26 ch÷ c¸i nhá a, b, c, d,..., z.

Ký tù g¹ch nèi _C¸c ch÷ sè thËp ph©n: 0, 1, 2, 3, 4, 5, 6, 7, 8, 9.C¸c ký tù to¸n häc: +, -, *, /, = ,<, > , (, )...C¸c ký tù ®Æc biÖt: ., ;, :, [, ], ?, %, @,...DÊu c¸ch: (Space) dïng ®Ó ng¨n c¸ch c¸c tõ.

b. Mét sè tõ cña Pascal ®îc gäi lµ tõ kho¸ (keyword). C¸c tõ kho¸ nµy bao gåm:

Tõ kho¸ chung:Program, Begin, End, Procedure, Function.

Tõ kho¸ ®Ó khai b¸o:Conts, Var, Label, Type, Array, String, Record, File of

Tõ kho¸ lÖnh ®iÒu kiÖn, chän vµ lÆp:if... then...else..., Case...of...For... to...do vµ For...Downto...do...

3

While... do...Repeat... until...

Tõ kho¸ ®iÒu khiÓn: With, Goto

Tõ kho¸ to¸n tö:And, Or, Not, In, Div, Mod

V.v..C¸c tõ kho¸ cã thÓ viÕt b»ng ch÷ to hoÆc ch÷ nhá, hoÆc pha lÉn vÝ dô: Begin, BEGIN, begin ®Òu nh nhau.d. Tªn (®Þnh danh- identifier):Tªn hoÆc ®Þnh danh dïng ®Ó chØ tªn h»ng, biÕn, kiÓu, tªn ch-¬ng tr×nh con... Tªn ®îc t¹o thµnh tõ c¸c ch÷ c¸i vµ c¸c ch÷ sè nhng ch÷ ®Çu ph¶i lµ ch÷ c¸i (cã thÓ dïng thªm dÊu g¹ch díi). Nªn ®Æt tªn sao cho cã ý nghÜa vµ dÔ nhËn biÕt. VÝ dô ®Ó ®Æt tªn biÕn lµ diÖn tÝch h×nh trßn ta nªn dïng: S hoÆc DienTichHinhTron hoÆc Dien_Tich_Hinh_tron v.v.. C¸c tªn viÕt nh sau lµ sai, Pascal kh«ng chÊp nhËn:

#DienTich Sai v× tªn b¾t ®Çu b»ng ký tù kh«ng ®îc phÐp

BEGIN Sai v× tªn trïng víi tõ kho¸Dien Tich Sai v× cã dÊu c¸ch (Space)3XY Sai v× tªn b¾t ®Çu b»ng ch÷ sè,

Mét sè tªn dïng cho tªn hµm nh EXP, SIN, COS,...) ®îc gäi lµ c¸c tªn chuÈn. Sù kh¸c nhau gi÷a tªn chuÈn vµ tõ kho¸ lµ: ngêi sö dông cã thÓ ®Þnh nghÜa l¹i c¸c tªn chuÈn vµo viÖc kh¸c nÕu cÇn. Cßn tõ kho¸ th× kh«ng ®îc phÐp nh vËy.Mét sè tªn chuÈn cña Pascal:Boolean, Char, Integer, Real, Byte, Text.False, True, MaxInt.

4

Abs, artctan, Chr, Cos, Sin, Eof, Eoln, Exp, Ln, Odd, Ord, Round, Trunc, Sqr, Sqrt, Pred, Succ.Dispose, New, Get, Put, Read, Realn, Write, Writeln, Reset, Rewrite.

1.2 Ng¨n c¸ch c¸c lÖnhDÊu chÊm phÈy ";" ®îc dïng ®Ó ng¨n c¸ch c¸c c©u lÖnh cña Pascal.

1.3 Lêi chó thÝch (Comment) Lêi chó thÝch cã thÓ ®a vµo bÊt kú vÞ trÝ nµo trong ch¬ng tr×nh mµ kh«ng ¶nh hëng ®Õn c¸c phÇn kh¸c. Lêi chó thÝch lµ dµnh cho ngêi ®äc, m¸y sÏ bá qua khi gÆp nã. Lêi chó thÝch ®îc ®Æt bªn trong më vµ ®ãng mãc{vµ} hoÆc ë gi÷a côm dÊu (* vµ *). Trong ch¬ng tr×nh nªn viÕt nh÷ng lêi chó thÝch vµo nh÷ng vÞ trÝ thÝch hîp gióp cho con ngêi dÔ dµng kiÓm tra ch¬ng tr×nh.

1.4 CÊu tróc chung cña ch¬ng tr×nh Pascal

Ch¬ng tr×nh lµ mét d·y c¸c lÖnh, chØ dÉn cho m¸y thùc hiÖn mét nhiÖm vô nµo ®ã.Ch¬ng tr×nh Pascal gåm 4 phÇn:

Tiªu ®Ò cña ch¬ng tr×nh PhÇn gäi c¸c ®¬n vÞ (Unit) ch¬ng tr×nh PhÇn khai b¸o: h»ng, biÕn, kiÓu vµ ch¬ng tr×nh con Th©n ch¬ng tr×nh chøa c¸c lÖnh

Tríc hÕt chóng ta xem mét ch¬ng tr×nh ®¬n gi¶n tÝnh tæng cña hai sè nh sau:

5

Program TongHaiSo; (*Tiªu ®Ò ch¬ng tr×nh*)Uses Crt; (* gäi ®¬n vÞ Crt*)

Var Tong,a,b: Real; (*Khai b¸o ba biÕn thùc) Begin

ClrScr; (* Xo¸ mµn h×nh*)Write('H·y vµo sè thø nhÊt a= ');Readln(a); (*Vµo gi¸ trÞ cña a*)Write('H·y vµo sè thø hai b= ');Readln(b); (*Vµo gi¸ trÞ cña b*)Tong:= a+b; (*TÝnh tæng hai sè*)(*HiÓn thÞ kÕt qu¶ lªn mµn h×nh*)Writeln(' Tæng cña hai sè lµ:', Tong);

End.Nh vËy cÊu tróc tæng qu¸t mét ch¬ng tr×nh ®Çy ®ñ gåm c¸c phÇn chÝnh nh sau:Program TenChuongTrinh ; (*Dßng tiªu ®Ò*)Uses CRT, Printer; (* Lêi gäi sö dông c¸c ®¬n vÞ ch¬ng tr×nh*)(*PhÇn khai b¸o d÷ liÖu vµ ch¬ng tr×nh con *)Label...Const...Type...Var...Procedure... {Cã thÓ cã nhiÒu Procedure vµ nhiÒu Function}Function...(*Th©n ch¬ng tr×nh chÝnh*)Begin

6

....(*C¸c lÖnh ®îc viÕt ë ®©y*)End.PhÇn tiªu ®Ò cña ch¬ng tr×nh:PhÇn nµy b¾t ®Çu b»ng tõ kho¸ Program, tiÕp theo lµ tªn do ngêi lËp tr×nh ®Æt ra theo mét ý nghÜa cña néi dung ch¬ng tr×nh. Cuèi phÇn tªn lµ dÊu chÊm phÈy";".PhÇn tiªu ®Ò cã thÓ kh«ng cã còng ®îc.· PhÇn khai b¸o:PhÇn nµy dïng ®Ó m« t¶ c¸c ®èi tîng d÷ liÖu. Cã thÓ cã c¸c khai b¸o sau:Uses (* Khai b¸o sö dông c¸c Unit*)Label (* Khai b¸o nh·n*)...Const (*Khai b¸o h»ng *)...Type (* M« t¶ kiÓu d÷ liÖu *)...Var (* Khai b¸o biÕn *)...Procedure... (* Khai b¸o c¸c thñ tôc*)Function... (* Khai b¸o c¸c hµm*)

C¸c phÇn khai b¸o cã thÓ cã hoÆc kh«ng, tuú theo thùc tÕ cña tõng bµi to¸n. PhÇn th©n ch¬ng tr×nh:Th©n ch¬ng tr×nh n»m gi÷a hai tõ kho¸ Begin vµ End. Sau tõ kho¸ End lµ dÊu chÊm "." ®Ó b¸o kÕt thóc ch¬ng tr×nh. Kh«ng cã th©n th× bÊt thµnh ch¬ng tr×nh, th©n chøa c¸c lÖnh

7

®Ó xö lý c¸c ®èi tîng d÷ liÖu ®· ®îc m« t¶ trong phÇn khai b¸o.VÝ dô ch¬ng tr×nh sau chØ cã th©n:

Begin Writeln (' Chµo b¹n ®· ®Õn víi Turbo Pascal 7.0');End.

1.5 C¸c bíc c¬ b¶n khi so¹n mét ch¬ng tr×nh.§Ó so¹n mét ch¬ng tr×nh b»ng ng«n ng÷ Pascal. Th«ng thêng tr¶i qua c¸c bíc sau:Bíc 1: Bíc so¹n th¶o ch¬ng tr×nhDïng mét ch¬ng tr×nh so¹n th¶o v¨n b¶n nµo ®ã ®Ó so¹n ch-¬ng tr×nh. Khi so¹n xong ta lu ch¬ng tr×nh lªn ®Üa. Ch¬ng tr×nh viÕt b»ng ng«n ng÷ Pascal ®îc gäi lµ ch¬ng tr×nh nguån (source program). Tªn c¸c tÖp (file) chøa ch¬ng tr×nh nguån Pascal cã d¹ng chung *.Pas.Bíc 2: Bíc dÞch ch¬ng tr×nhDïng ch¬ng tr×nh dÞch (compiler) Pascal ®Ó dÞch ch¬ng tr×nh nguån sang m· m¸y (chøa trong c¸c tÖp *. COM, *.EXE, *.OBJ). Giai ®o¹n nµy cho phÐp ta ph¸t hiÖn ra c¸c lçi có ph¸p khi viÕt ch¬ng tr×nh. NÕu cã lçi, ch¬ng tr×nh dÞch sÏ b¸o lçi. Ta ph¶i quay vÒ bíc 1 ®Ó söa vµ quay l¹i bíc 2. NÕu kh«ng cã lçi có ph¸p, ta sang bíc 3.Bíc 3: Ch¹y ch¬ng tr×nh(Ta sÏ thùc hiÖn 3 bíc ®ã liªn tôc trong toµn bé gi¸o tr×nh nµy)

8

Ch¬ng 2: C¸c kiÓu d÷ liÖu c¬ së

2.1 KiÓu Logic (Boolean)Trong cuéc sèng chóng ta thêng hay gÆp lo¹i d÷ liÖu chØ cã hai gi¸ trÞ: ®óng (True) hoÆc sai (False). VÝ dô khi ta viÕt 10>25 th× ®©y lµ mét mÖnh ®Ò cã gi¸ trÞ False. HoÆc 1<4 lµ mÖnh ®Ò cã gi¸ trÞ True.Mét gi¸ trÞ thuéc kiÓu Boolean chØ nhËn mét trong hai gi¸ trÞ logic: TRUE (®óng) hoÆc FALSE (sai). TRUE vµ FALSE lµ hai gi¸ trÞ ®îc ®Þnh nghÜa s½n. C¸c phÐp to¸n sau cho kÕt qu¶ còng lµ kiÓu Boolean:PhÐp AND (phÐp"vµ" )PhÐp OR (phÐp "hoÆc")PhÐp NOT (phÐp "phñ ®Þnh" ) PhÐp XOR (phÐp "hoÆc triÖt tiªu") PhÐp AND chØ cho kÕt qu¶ lµ TRUE khi vµ chØ khi c¶ hai

to¸n h¹ng ®Òu TRUE. PhÐp OR chØ cho kÕt qu¶ lµ FALSE khi vµ chØ khi c¶ hai to¸n

h¹ng ®Òu lµ FALSE. PhÐp XOR cho kÕt qu¶ lµ TRUE khi gi¸ trÞ hai to¸n h¹ng kh¸c

nhau. Cßn nÕu gi¸ trÞ hai to¸n h¹ng gièng nhau, sÏ cho kÕt qu¶ lµ FALSE.

VÝ dô:(3<5) AND (15>7) cho kÕt qu¶ TRUE(3<5) AND (15<7) cho kÕt qu¶ FALSE(1>3) OR (4<7) cho kÕt qu¶ TRUE(1>3) OR (4>7) cho kÕt qu¶ FALSE(1>3) XOR (4<7) cho kÕt qu¶ TRUE

9

(1>3) XOR (4>7) cho kÕt qu¶ FALSENOT (1>9) cho kÕt qu¶ TRUENOT (1<9) cho kÕt qu¶ FALSE

2.2 kiÓu sè nguyªn (Integer)Mét gi¸ trÞ cã kiÓu nguyªn lµ mét phÇn tö cña tËp c¸c sè nguyªn mµ ta cã thÓ xö lý ®îc trªn m¸y, tÊt nhiªn nã chØ lµ mét tËp nhá cña c¸c sè nguyªn chø kh«ng ph¶i tÊt c¶ mäi sè nguyªn ®Òu cã thÓ xö lý ®îc trªn m¸y. KiÓu sè nguyªn ®îc ®Þnh nghÜa s½n víi tõ kho¸ INTEGER.Th«ng thêng nhÊt, c¸c sè nguyªn ®îc biÓu diÔn b»ng hai byte (16 bÝt) nªn ph¹m vi cña nã lµ tõ - 32768 (=-215)®Õn +32767(=215-1).C¸c sè nguyªn ®îc viÕt ra cã thÓ cã dÊu d¬ng (+) phÝa tríc hoÆc dÊu-, hoÆc kh«ng cã dÊu.ThÝ dô: +120, -267, -5, 13, 163...Maxint lµ tªn gi¸ trÞ cùc ®¹i cho phÐp cña kiÓu nguyªn, nghÜa lµ Maxint = +32767.1. C¸c phÐp tÝnh sè häc ®èi víi sè nguyªn:

PhÐp céng vµ phÐp trõ : +, - PhÐp nh©n : * PhÐp chia lÊy kÕt qu¶ lµ sè thùc:/ vÝ dô 7/2 cho ta kÕt

qu¶ lµ 3.5 PhÐp chia lÊy kÕt qu¶ lµ nguyªn: DIV

VÝ dô : 13 DIV 2 cho kÕt qu¶ 6 PhÐp chia lÊy sè d cña hai sè nguyªn: MOD VÝ dô: 7 MOD 4; cho ta gi¸ trÞ b»ng 3 lµ sè d cña phÐp tÝnh .

10

Hµm Boolean ODD(n) cho kÕt qu¶ TRUE nÕu n lµ mét sè lÎ, FASLE nÕu n lµ sè ch½n.

Chó ý: Khi thùc hiÖn c¸c phÐp tÝnh sè häc ®èi víi sè nguyªn, cÇn quan t©m xem c¸c kÕt qu¶ cã vît ra khái ph¹m vi biÓu diÔn sè nguyªn cña m¸y hay kh«ng.VÝ dô: 31950 +3800= 35750 (vît qu¸ giíi h¹n) 2. C¸c phÐp tÝnh quan hÖ ®èi víi sè nguyªn: C¸c sè nguyªn cã thÓ so s¸nh víi nhau vµ còng cã thÓ so s¸nh víi c¸c sè thùc. KÕt qu¶ cña phÐp to¸n so s¸nh lµ TRUE (®óng) hoÆc FALSE (sai). VÝ dô : 12<4 cho kÕt qu¶ FALSE 23<67.2345 cho kÕt qu¶ TRUE.3. Sè nguyªn cã kiÓu BYTE:C¸ch biÓu diÔn sè nguyªn nh trªn lµ c¸ch biÓu diÔn sè nguyªn cã dÊu cã ®é lín hai byte vµ ®i víi tõ kho¸ Integer. Bªn c¹nh ®ã cßn cã mét kiÓu ®¬n gi¶n chuÈn lµ kiÓu biÓu diÔn sè nguyªn b»ng mét byte. Ph¹m vi cña nã tõ 0 ®Õn 255.

2.3 KiÓu sè thùc (Real)T¬ng tù nh ®Þnh nghÜa kiÓu sè nguyªn, kiÓu sè thùc lµ tËp hîp c¸c sè thùc cã thÓ biÓu diÔn ®îc trong m¸y tÝnh vµ ®îc m¸y ®Þnh nghÜa s½n víi tõ kho¸ Real.C¸c phÐp to¸n céng (+), trõ (-), nh©n (*), chia (/) còng nh c¸c phÐp to¸n quan hÖ (=, <>, < , >, >=, <=) ®Òu cã thÓ ¸p dông cho c¸c to¸n h¹ng lµ sè thùc lÉn to¸n h¹ng lµ sè nguyªn.TÊt nhiªn kh«ng tån t¹i c¸c phÐp to¸n DIV, MOD cho kiÓu sè thùc.

11

C¸c sè thùc ®îc biÓu diÔn trong m¸y ë hai d¹ng: d¹ng dÊu chÊm tÜnh vµ d¹ng dÊu chÊm ®éng (cã phÇn sè mò).D¹ng dÊu chÊm tÜnh nh sau: (DÊu chÊm thay cho dÊu phÈy thËp ph©n)13.23 5.00 -32.3456 -0.00001Gäi lµ tÜnh v× dÊu chÊm thËp ph©n ë ®©u ®Æc trng cho ®é lín cña sè ®ãD¹ng dÊu chÊm ®éng (cã phÇn mò):Gåm hai phÇn: phÇn ®Þnh trÞ vµ phÇn mò viÕt sau ch÷ E ®Ó biÓu diÔn sè mò cña c¬ sè 10.VÝ dô:1233.45 = 1.23345*103

BiÓu diÔn b»ng sè dÊu chÊm ®éng nh sau:1.23345E+03Gäi lµ ®éng v× dÊu chÊm thËp ph©n cha ®ñ ®Ó x¸c ®Þnh ®é lín cña sè ®ã. C¸ch viÕt sè thùc nh sau lµ sai, lµ kh«ng ®ñ:

.8 (Ph¶i viÕt lµ 0.8)3. (Ph¶i viÕt lµ 3.0 hoÆc 3)

C¸c hµm sè häc chuÈn (dïng cho sè nguyªn vµ sè thùc):C¸c hµm sau ®©y ®îc ®Þnh nghÜa s½n vµ ®îc sö dông víi ®èi sè lµ c¸c sè thùc hoÆc c¸c sè nguyªn: ABS(x) cho kÕt qu¶ lµ trÞ tuyÖt ®èi cña x SQR(x) cho gi¸ trÞ x2. SIN(x), COS(x), ARCTAN(x) lµ c¸c hµm lîng gi¸c. LN(x) hµm log2(x) =ln(x). EXP(x) hµm ex

SQRT(x) hµm tÝnh c¨n bËc hai cña x

12

SUCC(n) ®èi sè nguyªn n, cho sè nguyªn tiÕp theo n, tøc lµ n+1.

PRED(n) ®èi sè nguyªn n, cho ta sè nguyªn tríc n, tøc lµ n -1. ODD(n) ®èi sè nguyªn n, TRUE nÕu n lÎ, FALSE nÕu n ch½n. TRUNC(x) kÕt qu¶ lµ phÇn nguyªn cña x, tøc lµ c¾t bá ®i

phÇn lÎ thËp ph©n cña x. VÝ dô trunc(3.146) = 3. ROUND(x) cho ta mét sè nguyªn lµ phÇn nguyªn cña x b»ng

c¸ch qui trßn phÇn lÎ thËp ph©n cña x. VÝ dô:Round (6.76) = 7Round (6.36) = 6Round (-34.812) = -35

2.4 KiÓu ký tù (character)M¸y tÝnh kh«ng chØ xö lý c¸c d÷ liÖu b»ng sè mµ cßn cã kh¶ n¨ng xö lý c¸c d÷ liÖu v¨n b¶n (ký tù).KiÓu ký tù ®îc ®Þnh nghÜa víi tõ kho¸ CHAR.H»ng ký tù ph¶i ®Æt trong më nh¸y ®¬n vµ ®ãng nh¸y ®¬n, vÝ dô:

'5', 'b', 'A', '0', '9', '*', '!',...M¸y tÝnh dïng bé ký tù ®Ó trao ®æi th«ng tin qua c¸c thiÕt bÞ vµo- ra. Bé ký tù ®îc dïng phæ biÕn nhÊt lµ bé ký tù ASCII (American Standard Code for information Interchange)- Hay cßn gäi lµ bé m· ASCII. C¸c ký tù ®îc m· ho¸ b»ng mét byte, mét Byte cã thÓ biÓu diÔn ®îc 256 ký tù kh¸c nhau. C¸c ký tù c¬ b¶n nhÊt tõ 0 ®Õn 127 ®îc gäi lµ ASCII chuÈn. Cßn tõ 128 ®Õn 255 gäi lµ ASCII më réng vµ ®îc dïng ®Ó m· ho¸ c¸c ký tù riªng cña mét sè ng«n ng÷, c¸c ký tù to¸n häc, ®å häa. Chóng ta quan t©m chñ yÕu tíi phÇn 128 ký tù ®Çu cña b¶ng m· ASCII ®Ó x©y dùng có ph¸p cho lËp tr×nh.

13

Trong ASCII, c¸c ký tù tõ 0 ®Õn 31 lµ c¸c ký tù ®iÒu khiÓn, kh«ng in ®îc, dïng ®Ó ®iÒu khiÓn c¸c thiÕt bÞ ngo¹i vi, ®iÒu khiÓn viÖc trao ®æi th«ng tin... VÝ dô khi m¸y nhËn ®îc ký tù sè 7 (BEL), m¸y sÏ ph¸t ra mét tiÕng kªu. Khi nhËn ®îc ký tù sè 13 (CR : Carriage Return) con trá mµn h×nh sÏ xuèng ®Çu dßng tiÕp theo. Khi nhËn ®îc 10 (LF: Line Feed) ®Çu kim in cña m¸y in sÏ xuèng ®Çu dßng tiÕp theo v.v..PhÇn cßn l¹i trong ASCII lµ m· cña c¸c ch÷ c¸i A, B, C,... c¸c ch÷ sè 0, 1,...,9, c¸c ký tù ®Æc biÖt ... VÝ dô khi nhËn ®îc m· 65, m¸y sÏ hiÖn lªn mµn h×nh ch÷ c¸i A.Riªng m· 127(Del) ®îc dïng lµm ký tù ®iÒu khiÓn xo¸. Khi so¹n ch¬ng tr×nh, phÝm Delete trªn bµn phÝm chÝnh lµ phÝm t¹o ra m· sè 127 ®Ó xo¸ mét ký tù trªn mµn h×nh.Hai hµm chuÈn ORD vµ CHR cho phÐp thiÕt lËp t¬ng quan gi÷a m· ký tù vµ ký tù t¬ng øng, vÝ dô:Hµm ORD('A') cho kÕt qu¶ 65, sè thø tù (m·) cña ký tù 'A' trong b¶ng m·.Hµm CHR(65) cho ta ký tù A.§¬ng nhiªn lµ CHR (ORD('A')) = 'A' vµ ORD(CHR(65)) =65Ký tù Chr1 nhá h¬n ký tù Chr2 nÕu Ord (Chr1) < ord (Chr2).Hai c¸ch viÕt sau lµ t¬ng ®¬ng:

#65 = CHR(65)Hµm chuÈn PRED vµ SUCC cã thÓ ¸p dông cho ®èi sè lµ ký tù, kÕt qu¶ lµ ký tù. Gi¶ sö Chr lµ mét ký tù nµo ®ã:Hµm PRED(Chr) cho kÕt qu¶ lµ mét ký tù n»m tríc ký tù Chr. VÝ

dô PRED ('B')='A'. Hµm SUCC(Chr) cho kÕt qu¶ lµ mét ký tù n»m sau ký tù Chr, vÝ dô: SUCC('A')='B'

14

2.5 M« t¶ sè nguyªn víi Word, Shortint, Longint.Sè nguyªn ngoµi Integer vµ Byte cßn cã víi c¸c d¹ng Word, Shortint (Short Integer), Longint (Long Integer). Sau ®©y lµ b¶ng kiÖt kª c¸c ph¹m vi cña nã.KiÓu Ph¹m vi KÝch thíc ByteByte 0..255 1Shortint -128..127 1Integer -32768..32767 2Word 0..65535 2Longint -

214783648..21483647

4

Turbo Pascal cßn cho phÐp biÓu diÔn sè nguyªn díi d¹ng hÖ 16 (sè Hexa) b»ng c¸ch dïng thªm dÊu $ ë ®Çu. VÝ dô: $E cã gi¸ trÞ lµ 14 ( hÖ thËp ph©n).Mét byte ®îc biÓu diÔn b»ng hai ch÷ sè Hexa, v× mét ch÷ sè Hexa t¬ng ®¬ng víi sè nhÞ ph©n 4 bÝt. Ta cã b¶ng quan hÖ sau:HÖ 10 HÖ 2 HÖ 160 0000 01 0001 12 0010 23 0011 34 0100 45 0101 56 0110 67 0111 78 1000 89 1001 910 1010 A11 1011 B12 1100 C

15

13 1101 D14 1110 E15 1111 F

VÝ dô: sè Hexa $7FFF=7*16^3+15*16^2+15*16^1+15*16^0= 32767 (sè hÖ

10) $8AB2=8*16^3+10*16^2+11*16^1+2*16^0=35506 (sè hÖ 10)

2.6 Më réng khai b¸o kiÓu sè thùcSè thùc cßn cã c¸c d¹ng sau:KiÓu Ph¹m vi Sè ch÷ sè cã

nghÜaKÝch thíc (bytes)

REAL 2.9E-39.. 1.7E+38

11-12 6

SINGLE 1.5E-45..3.4E+38 7-8 4DOUBLE 5.0E-

324..1.7E+30815-16 8

EXTENDED 1.9E-4951..1.1E+4932

19-20 10

16

Ch¬ng 3: Khai b¸o, biÓu thøc vµ c©u lÖnh

H»ng, biÕn, kiÓu ®Òu ph¶i ®îc khai b¸o tríc khi dïng trong ch-¬ng tr×nh.

3.1 Khai b¸o h»ng Cã c¸c lo¹i: h»ng nguyªn, h»ng thùc, h»ng ký tù vµ h»ng Boolean.Khai b¸o h»ng: C¸c h»ng ®îc khai b¸o nh sau:Const tªn_h»ng= gi¸_trÞ_cña_h»ng;Mét dßng khai b¸o h»ng ®îc kÕt thóc b»ng dÊu chÊm phÈy. Tªn h»ng ®îc ®Æt theo qui t¾c ®· tr×nh bµy ë ch¬ng tríc. VÝ dô:Const

X=5; (* H»ng nguyªn*)Y=3.14; (* H»ng thùc 5*)A=TRUE; (* H»ng Boolean*)Chr= 'e'; (* H»ng ký tù e*).

C¸c h»ng kh«ng thay ®æi trong suèt ch¬ng tr×nh.

17

3.2 Khai b¸o biÕnBiÕn (variable) lµ ®¹i lîng cã thÓ thay ®æi gi¸ trÞ trong qu¸ tr×nh xö lý. Tªn biÕn cña ch¬ng tr×nh ®ång thêi lµ ®Þa chØ cña biÕn ®ã. BiÕn ®îc khai b¸o nh sau: Var

Tªn_biÕn: KiÓu_d÷_liÖu_cña_biÕn;DÊu hai chÊm ®Ó ng¨n c¸ch hai phÇn cña khai b¸o, dÊu chÊm phÈy kÕt thóc mét dßng khai b¸o.NÕu cã nhiÒu biÕn cïng kiÓu cã thÓ ®îc rót gän b»ng c¸ch viÕt tªn c¸c biÕn ®Æt c¸ch nhau dÊu phÈy(,) vÝ dô:Var

a, b, c: Real;i,j,k:Integer;T: Boolean;

3.3 §Þnh nghÜa kiÓu §èi víi c¸c d÷ liÖu c¬ së (Real, Integer, Byte, Char, Boolean) ®· ®îc ®Þnh nghÜa s½n nªn ta khai b¸o biÕn trùc tiÕp ngay. Cßn c¸c kiÓu d÷ liÖu kh¸c ta ph¶i ®Þnh nghÜa kiÓu.VÝ dô:Type

Mau = (Xanh, Do, Vang);Var

MauSac: Mau;

3.4 BiÓu thøc (expression) Mét biÓu thøc gåm: to¸n tö (operator) vµ to¸n h¹ng (operand). To¸n tö (dÊu phÐp to¸n), to¸n h¹ng cã thÓ lµ h»ng, hµm, biÕn. VÝ dô: 14 + SQRT(5)-2*COS(X)

18

Trong vÝ dô nµy, c¸c phÐp to¸n lµ phÐp céng (+), phÐp trõ (-) vµ phÐp nh©n(*). C¸c to¸n h¹ng lµ h»ng sè 14, hµm SQRT víi ®èi sè lµ 5, h»ng 2 vµ hµm COS víi ®èi sè lµ biÕn X .BiÓu thøc sè häc lµ biÓu thøc cã gi¸ trÞ b»ng sè ( lµ integer, byte, real)BiÓu thøc Boolean lµ biÓu thøc cã gi¸ trÞ lµ TRUE hoÆc FALSE.Mét biÓu thøc chøa c¸c to¸n tö quan hÖ (<>, >, <=, >=, =) còng ®îc gäi lµ biÓu thøc Boolean hay mét biÓu thøc quan hÖ. C¸c to¸n h¹ng trong biÓu thøc quan hÖ cã thÓ lµ nguyªn, thùc, ký tù v.v..Thø tù thùc hiÖn tõ tr¸i qua ph¶i víi thø tù u tiªn nh sau:DÊu ngoÆc ( ) BiÓu thøc trong ngoÆc ®îc u tiªn thø

nhÊtNot, - (dÊu trõ) C¸c phÐp to¸n mét to¸n h¹ng*, /, Div, mod, and C¸c phÐp tÝnh lo¹i nh©n, cïng møc u

tiªn+, -, or, xor C¸c phÐp tÝnh lo¹i céng , cïng møc u

tiªn=, <>, <=, >=, >, < In c¸c phÐp to¸n quan hÖ , cã cïng møc

u tiªn

C¸c vÝ dô sau minh ho¹ vÒ thø tù tÝnh to¸n.VÝ dô:2 + 4*3 = 2 +(4*3) =2+12=143/2*4 = (3/2)*4 = 1.5*4= 6.09 Div 2 *4 = (9 div 2) * 4 = 16(2>3) and ('c' < 'd')=FALSE AND TRUE=FALSENot(3 + 1 < 5) OR ( 3 > 5 Div 3 )=Not (4<5) OR (3>1)=Not TRUE OR TRUE=FALSE OR TRUE=TRUE

19

3.5 C©u lÖnh (Instruction, Statemment)Ngoµi phÇn m« t¶ d÷ liÖu cßn cã phÇn lÖnh ( instruction) cña ch¬ng tr×nh. PhÇn nµy quy ®Þnh c¸c c«ng viÖc mµ ch¬ng tr×nh ph¶i thùc hiÖn ®Ó xö lý c¸c d÷ liÖu. C¸c lÖnh (hay còng gäi lµ c©u lÖnh) c¸ch nhau bëi dÊu chÊm phÈy. C©u lÖnh ®îc chia ra hai lo¹i: C©u lÖnh ®¬n gi¶n vµ c©u lÖnh cã cÊu tróc.· C©u lÖnh ®¬n gi¶n bao gåm: LÖnh g¸n (:=), lêi gäi thñ tôc,

lÖnh nhÈy GOTO· C©u lÖnh cã cÊu tróc bao gåm:

C©u lÖnh ghÐp ( lÖnh hîp thµnh): BEGIN ...END;C©u lÖnh ®iÒu kiÖn vµ lùa chän: if .. then... else... case...

of...C¸c vßng lÆp: For... To... Do...

Repeat ...Until...While... Do...

Víi....lµm : With...DoMçi mét c©u lÖnh bao giê còng ®îc ®Æt c¸ch nhau b»ng dÊu chÊm phÈy (;). DÊu chÊm phÈy (;) chØ cã t¸c dông ng¨n c¸ch c¸c c©u lÖnh chø kh«ng ph¶i lµ dÊu kÕt thóc c©u lÖnh vµ nã kh«ng thuéc vµo c©u lÖnh. Pascal kh«ng b¾t buéc ph¶i viÕt mçi c©u lÖnh mét dßng. VÊn ®Ò lµ ph¶i tr×nh bÇy ch¬ng tr×nh sao cho ®Ñp, râ rµng, m« t¶ ®îc thuËt to¸n...VÝ dô: Chóng ta cã thÓ viÕt liÒn nhau trªn mét dßng ch¬ng tr×nh:

A='Chao anh'; B:=TRUE;C :=12;HoÆc viÕt thµnh tõng dßng:

A='Chao anh'; B:=TRUE;

20

C:=12;C¸c lÖnh cã cÊu tróc sÏ ®îc ®Ò cËp ë c¸c ch¬ng sau. Cßn thñ tôc sÏ ®îc ®a vµo cïng víi c¸c cÊu tróc d÷ liÖu.· PhÐp g¸nPhÐp g¸n dïng ®Ó g¸n gi¸ trÞ cña mét biÓu thøc, mét h»ng vµo mét biÕn. PhÐp g¸n ®îc viÕt nh sau:

biÕn := biÓu_thøc;VÝ dô:

A:=12; biÕn A nhËn gi¸ trÞ b»ng 12 (hay ®a 12 vµo biÕn cã ®Þa chØ A)

B:= FALSE; biÕn B nhËn gi¸ trÞ FALSE.Y:= Y+1 Y céng víi 1 kÕt qu¶ ®Ó t¹i Y

Khi dïng phÐp g¸n th× kiÓu cña biÕn vµ kiÓu cña biÓu thøc ë vÕ ph¶i gièng nhau.VÝ dô mét biÕn thùc X kh«ng thÓ nhËn mét gi¸ trÞ Boolean ®îc.X := TRUE lµ sai.Trêng hîp ngo¹i lÖ: mét biÕn nguyªn kh«ng thÓ nhËn mét gi¸ trÞ lµ sè thùc nhng mét biÕn thùc th× l¹i cã thÓ nhËn mét gi¸ trÞ nguyªn. Gi¶ sö I lµ Integer. I:=9.5 lµ sai mµ ph¶i viÕt I:=Round(9.5). Nhng nÕu X lµ biÕn thùc, viÕt nh sau lµ ®óng:I:=12; X:=I;

3.6 LÖnh hîp thµnh hay lÖnh ghÐp Mét nhãm c©u lÖnh ®¬n gi¶n ®îc ®Æt gi÷a hai ch÷ Begin vµ End sÏ t¹o thµnh mét c©u lÖnh hîp thµnh hay mét lÖnh ghÐp víi c¸ch mÉu viÕt nh sau:

BeginC©u lÖnh 1;C©u lÖnh 2;

21

....C©u lÖnh n;

End;CÆp Begin ... End cña c©u lÖnh ghÐp cho ta thÊy râ h¬n tÝnh cã cÊu tróc cña ng«n ng÷ Pascal. Ta cã thÓ nhãm c¸c lÖnh thµnh tõng khèi. Mét khèi lÖnh chØ cã mét më ®Çu b»ng ch÷ Begin vµ mét kÕt thóc b»ng ch÷ End. Chóng ta sÏ hiÓu chi tiÕt thªm vÒ lÖnh ghÐp th«ng qua c¸c vÝ dô cô thÓ ë c¸c ch¬ng tiÕp theo.Bµi tËp:Nªu quy t¾c ®Æt tªn biÕn trong ch¬ng tr×nh?H»ng lµ g×? vµ ®îc khai b¸o nh thÕ nµo?H·y khai b¸o mét biÕn thùc, nguyªn bÊt kú?BiÓu thøc lµ g×, cho vÝ dôThÕ nµo lµ biÓu thøc Logic? Cho vÝ dôThÕ nµo lµ biÓu thøc quan hÖ? cho vÝ dôH·y cho mét sè vÝ dô vÒ lÖnh g¸nLÖnh hîp thµnh lµ g×?Cã thÓ cã c¸c lÖnh hîp thµnh n»m trong mét lÖnh hîp thµnh?

Cho vÝ dôKÕt qu¶ cña biÕn A lµ g× nÕu sau khi thùc hiÖn lÖnh g¸n sau:A:=((3<1) AND (12>3)) OR (4<11)

22

Ch¬ng 4: Thñ tôc vµo, ra d÷ liÖu.

4.1 Thñ tôc hiÓn thÞ d÷ liÖu ra mµn h×nh: Write vµ Writeln§Ó hiÓn thÞ d÷ liÖu ra mµn h×nh, Pascal cã 3 c¸ch viÕt nh sau:

Write ( Item1, Item2,..., ItemN);Writeln(Item1, Item 2,..., ItemN); (®äc lµ write line)Writeln;

Trong ®ã ( Item1, Item2,..., ItemN); lµ c¸c môc cÇn hiÓn thÞ, cã thÓ lµ mét trong c¸c lo¹i sau:VÝ dô:

H»ng: Writeln(3.12); Writeln(' Chµo b¹n !'); BiÕn: Writeln(A); Hµm: Writeln(Cos(x)); BiÓu thøc: Writeln(X+Y - 2 +Exp(X));

Mét sè kiÓu cã cÊu tróc nh m¶ng, x©u ký tù ( sÏ häc sau).Mµn h×nh th«ng dông hiÖn nay ®îc ph©n thµnh 25 dßng, mçi dßng cã thÓ chøa 80 ký tù. ë mçi thêi ®iÓm, t¹i mét vÞ trÝ x¸c ®Þnh trªn mµn h×nh cã mét khèi s¸ng nhÊp nh¸y hoÆc mét nÐt g¹ch nhÊp nh¸y gäi lµ con trá mµn h×nh hay ®iÓm nh¾c (cursor).Sù kh¸c nhau cña 3 c¸ch viÕt trªn lµ ë chç vÞ trÝ con trá mµn h×nh sau khi kÕt thóc lÖnh.

23

· C¸ch viÕt Writeln ( Item1, Item2,..., ItemN); cã ý nghÜa:

Sau khi hiÓn thÞ c¸c gi¸ trÞ cña ( Item1, Item2,..., ItemN) trªn cïng mét dßng, con trá sÏ chuyÓn xuèng dßng tiÕp theo (con trá ®îc ®Æt ë ®Çu dßng tiÕp theo)C¸ch viÕt Write( Item1, Item2,..., ItemN);Sau khi hiÓn thÞ c¸c gi¸ trÞ cña ( Item1, Item2,..., ItemN) con trá sÏ kh«ng chuyÓn xuèng ®Çu dßng tiÕp theo ( con trá sÏ ®îc ®Æt ë vÞ trÝ sau gi¸ trÞ cña ItemN). C¸ch viÕt Write( Item1, Item2,..., ItemN); lµ t¬ng ®¬ng víi khèi lÖnh nh sau:

BeginWrite(Item1);Write(Item2);...Write(ItemN);

End;Thñ tôc Writeln; ( kh«ng cã tham sè) sÏ ®Æt con trá xuèng ®Çu dßng tiÕp theo. V× vËy

Writeln( Item1, Item2,..., ItemN); t¬ng ®¬ng víi mét lÖnh ghÐp.

Begin Write( Item1, Item2,..., ItemN); WriteLn;End;

Trong khi dïng thñ tôc Write vµ Writeln, cã hai c¸ch tr×nh bµy d÷ liÖu in ra lµ c¸ch viÕt kh«ng qui c¸ch vµ c¸ch viÕt cã qui c¸ch. Chóng ta sÏ xÐt cô thÓ lÖnh viÕt ra víi tõng kiÓu d÷ liÖu.1. ViÕt ra kiÓu sè nguyªn.

24

C¸ch viÕt kh«ng qui c¸ch:Var I : Integer;

Begin I :=345; Writeln(I); Writeln(-98671);

End.SÏ hiÓn thÞ ra mµn h×nh:

345-98671

C¸ch viÕt kh«ng qui c¸ch kh«ng chØ râ qui c¸ch hiÓn thÞ trong c¸c thñ tôc Write. C¸c sè nguyªn sÏ ®îc viÕt ra víi sè chç b»ng ®é dµi cña nã (sè ch÷ sè cña nã). ë ®©y biÕn I cã gi¸ trÞ 345 chiÕm 3 vÞ trÝ, cßn -98671 chiÕm 6 vÞ trÝ ( 5 ch÷ sè vµ dÊu - ) kÓ tõ vÞ trÝ bªn tr¸i.· C¸ch viÕt cã qui c¸ch.Ta cã thÓ bè trÝ chç sè cè ®Þnh ®Ó hiÓn thÞ sè nguyªn b»ng c¸ch thªm dÊu hai chÊm (:) theo sau lµ sè vÞ trÝ cÇn hiÓn thÞ. M¸y sÏ xÕp chç tõ bªn ph¶i qua bªn tr¸i. NÕu thõa sÏ ®Ó trèng ë bªn tr¸i.VÝ dô: Writeln (' 123456');

I:= 345;Writeln(I:6);Writeln(-98671:8);

SÏ viÕt ra trªn mµn h×nh:123456 345

25

-30567Nh vËy c¸ch viÕt kh«ng qui c¸ch sÏ c¨n lÒ bªn tr¸i cßn c¸ch viÕt cã qui c¸ch sÏ c¨n lÒ bªn ph¶i.2. ViÕt ra kiÓu sè thùcVíi khai b¸o X lµ mét biÕn thùcVar X: Real;· C¸ch viÕt kh«ng qui c¸chSÏ hiÓn thÞ gi¸ trÞ cña X theo c¸ch biÓu diÔn dÊu chÊm ®éng, vÝ dô:

X :=34.56;Writeln(X);Write(6.72);

sÏ cho kÕt qu¶ trªn mµn h×nh nh sau:3.4560000000E+016.7200000000E+00

Hai dÊu c¸ch ë ®Çu, mét sè phÇn nguyªn, dÊu chÊm thËp ph©n, 10 chç phÇn thËp ph©n (nÕu kh«ng cã gi¸ trÞ cô thÓ th× sÏ bÞ ®iÒn sè 0 vµo), ch÷ E biÓu diÔn sè mò, dÊu cña phÇn mò, hai sè biÓu diÔn gi¸ trÞ phÇn mò. Tæng sè chç sè thùc chiÕm lµ 18. · C¸ch viÕt cã qui c¸ch cña sè thùc X:C¸ch 1: HiÓn thÞ sè dÊu chÊm tÜnh

X : < sè chç cho c¶ sè thùc>:< sè chç cho phÇn thËp ph©n>C¸ch 2: HiÓn thÞ sè dÊu chÊm ®éng

X :< sè chç cho viÕt díi d¹ng E mò>.VÝ dô: ¸p dông cho c¸ch 1

X:=123.456;Writeln(25.123456789:12:6);

26

Writeln(X :12:6);Writeln( 3.14:12:6);

cho ra kÕt qu¶:25.123457

123.456000 3.140000

PhÇn thËp ph©n ®îc x¸c ®Þnh 6 chç, nÕu kh«ng ®ñ gi¸ trÞ cô thÓ, nã sÏ ®iÒn sè 0 vµo. Cßn nÕu phÇn thËp ph©n mµ nhiÒu, nã sÏ lµm trßn nh dßng ®Çu tiªn ( sè 25.123457).Víi c¸ch viÕt cã qui c¸ch nµy, ta cã thÓ tr×nh bµy c¸c sè thùc sao cho c¸c dÊu chÊm thËp ph©n th¼ng theo chiÒu ®øng mét c¸ch ®Ñp m¾t.VÝ dô: ¸p dông cho c¸ch 2.

Write ( 25.123456789:12); (cho ra kÕt qu¶ cã lµm trßn)

2.512346E +01Trong c¸ch 2, sè thùc ®îc viÕt ra díi d¹ng E mò ( phÇn mò chiÕm 4 chç), toµn bé sè chç lµ 12 th× phÇn cßn l¹i ®Ó viÕt phÇn ®Þnh trÞ lµ 12-4=8 chç.3. HiÓn thÞ kiÓu ký tù:Víi c¸ch viÕt kh«ng qui c¸ch, mçi ký tù chiÕm mét chç. Cßn víi c¸ch viÕt cã qui c¸ch, m¸y sÏ bè trÝ thªm c¸c chç tr¾ng.Begin Writeln('ABCD'); (* C¸ch viÕt kh«ng cã qui c¸ch*) Writeln('E'); (* C¸ch viÕt kh«ng cã qui c¸ch*) Writeln('E':5); (* C¸ch viÕt cã qui c¸ch*) Writeln('ABCD' :5); (* C¸ch viÕt cã qui c¸ch*)End.sÏ cho ra kÕt qu¶

ABCDE

27

ABCD E

4. ViÕt ra kiÓu BooleanKiÓu Boolean sÏ ®îc hiÓn thÞ víi c¸c tõ True vµ False. Ta còng cã thÓ qui ®Þnh sè chç ®Ó viÕt c¸c tõ nµy.VÝ dô:Var

a: Boolean;Begin

a: =5>12;Writeln(a); (* C¸ch viÕt kh«ng qui c¸ch *)Writeln(a:7); (* C¸ch viÕt cã qui c¸ch *)

End.sÏ cho ra kÕt qu¶:

FALSE FALSE

5. In ra m¸y inWrite vµ Writeln ®îc dïng ®Ó hiÓn thÞ d÷ liÖu ra mµn h×nh, muèn in ra giÊy (sö dông m¸y in) ta thªm tõ Lst vµ dÊu phÈy vµo tríc c¸c biÕn hoÆc h»ng cÇn in ra.VÝ dô:

Writeln (Lst, X:5:2, Y:12:5, I:5);Ngoµi viÖc ph¶i thªm Lst cßn ph¶i khai b¸o:

USES PRINTER;6. Tr×nh bµy mµn h×nh:§Ó tr×nh bµy mµn h×nh theo nh÷ng thñ tôc x¸c ®Þnh, ë phÇn khai b¸o ph¶i cã: USES CRT;CRT lµ ®¬n vÞ (Unit) chøa c¸c thñ tôc tr×nh bµy mµn h×nh

GOTOXY(X,Y);

28

Lµ thñ tôc ®a con trá ®Õn to¹ ®é X,Y cña mµn h×nh. X lµ täa ®é cét tÝnh tõ 1 ®Õn 80, Y lµ täa ®é dßng, tÝnh tõ 1 ®Õn 25 (mµn h×nh ®îc chia thµnh 25 dßng, 80 cét).VÝ dô: GOTOXY(15,14); (®a con trá ®Õn cét 15 vµ dßng 14)

ClrScr; (Clear Screen) lµ thñ tôc xo¸ toµn bé mµn h×nh, sau khi xo¸ con trá n»m ë vÞ trÝ gãc tr¸i phÝa trªn mµn h×nh.

ClrEol; (Clear end of Line) thñ tôc xo¸ c¸c ký tù n»m bªn ph¶i con trá ®Õn hÕt dßng.

TextColor( ) thñ tôc x¸c ®Þnh mµu ch÷, vÝ dô Textcolor(Blue) sÏ cho ch÷ mµu xanh. TextBackground( ) lµ thñ tôc x¸c ®Þnh mµu nÒn cña v¨n

b¶n, vÝ dô: TextBackGround(Red) sÏ cho mµu nÒn ®á.NormVideo: §Æt v¨n b¶n cã ®é s¸ng b×nh thêngLowVideo: §Æt v¨n b¶n cã ®é s¸ng yÕu Ta cã b¶ng mµu sau:

Tªn mµu TiÕng ViÖt M·Black §en 0Blue Xanh l¬ 1Green Xanh l¸ c©y 2Cyan Xanh cÈm

th¹ch3

Red §á 4Magenta TÝa 5Brown N©u 6LightGray X¸m nh¹t 7DarkGray X¸m ®Ëm 8LightBlue Xanh nh¹t 9LightGreen Xanh l¸ c©y

nh¹t10

LightCyan Xanh cÈm th¹ch nh¹t

11

LightRed §á nh¹t 12LightMagenta TÝa nh¹t 13Yellow Vµng 14

29

White Tr¾ng 15Blink NhÊp nh¸y 128

Hai c¸ch viÕt: Textcolor(Blue) vµ Textcolor(1) lµ t¬ng ®¬ng.VÝ dô 1:USES CRT;Var X,Y: Integer;Begin

TextBackground (Red); (*§Æt mÇu nÒn cho mµn h×nh*)ClrScr; (*Xo¸ mµn h×nh*)X :=6; Y :=3;GotoXY (X,Y);TextColor(Blue);Writeln ('Chao ban'); (*Ch÷ Chao ban sÏ ®îc hiÖn ë to¹ ®é

(6,3) vµ mµu xanh*)GotoXY (X+10,Y+2); TextColor(White);Writeln ('Chao ban');(*Ch÷ Chao ban ®îc hiÖn ë to¹ ®é

(16,5) vµ mµu tr¾ng*)TextColor(White + Blink);Write ('Chao ban'); (*Ch÷ Chao ban hiÖn ë to¹ ®é (1,6),

mµu tr¾ng nhÊp nh¸y*)End.VÝ dô 2:HiÓn thÞ tõ COMPUTER ( víi ch÷ CO vµ ER s¸ng b×nh thêng cßn l¹i lµ s¸ng yÕu )USES CRT;

BeginNormVideo; write('CO');LowVideo; write('MPUT');NormVideo; write('ER');

30

End.Chó ý: NÕu b¹n ch¹y Turbo Pascal 7.0 víi mét sè CPU cã tèc ®é cao th× Crt sÏ g©y lçi trong mét sè trêng hîp khi gÆp thñ tôc Writeln. Tuú theo tõng trêng hîp cô thÓ mµ cã thÓ cã c¸ch kh¾c phôc. Borland sÏ kh«ng cËp nhËt tiÕp ®Ó n©ng cÊp dßng Turbo Pascal.

4.2 Vµo d÷ liÖu: READ vµ READLN1. Read vµ Readln:Nhê phÐp g¸n ta cã thÓ ®a gi¸ trÞ cho biÕn (tõ mét biÕn kh¸c hay h»ng) ë trong ch¬ng tr×nh. VËy muèn ®a mét gi¸ trÞ tõ bµn phÝm (th«ng qua gâ vµ ®a vµo biÕn) th× lµm thÕ nµo? Thñ tôc Read vµ Readln (Read Line) sÏ gióp ta lµm ®iÒu ®ã. Ba c¸ch viÕt sau:

READ (Var1, Var2,...,VarN);READLN(Var1, Var2,...,VarN);READLN; (Kh«ng cã tham sè)

Trong ®ã Var1, Var2...lµ c¸c biÕn (kh«ng thÓ h»ng) ®· khai b¸o trong ch¬ng tr×nh.Khi gÆp thñ tôc nµy ch¬ng tr×nh sÏ chê ®Ó chóng ta gâ d÷ liÖu vµo. D÷ liÖu gâ vµo ph¶i cã cïng kiÓu víi biÕn, c¸c d÷ liÖu ng¨n c¸ch Ýt nhÊt mét kho¶ng trèng (Space), sau khi gâ xong d÷ liÖu h·y gâ tiÕp (Enter).VÝ dô 1:Var

i,j: Integer;a,b,c: Real;

BeginReadln (i,j);

31

Readln(a,b,c);......

End.Khi ch¹y ch¬ng tr×nh (sÏ nãi ë phÇn sau) m¸y sÏ chê ®Ó chóng ta gâ 2 sè nguyªn øng víi thñ tôc Readln(i,j), vÝ dô: 4 6

(Enter). M¸y l¹i chê ®Ó ta gâ vµo ba sè thùc øng víi thñ tôc Readln(a,b,c), vÝ dô: 12.3 15.5 20.5 . Sau hai thñ tôc ®ã c¸c biÕn sÏ cã néi dung nh sau: Néi dung cña I lµ 4 (hay ta còng cã thÓ nãi trong « nhí I cã 4)Néi dung cña J lµ 6Néi dung cña a lµ 12.3Néi dung cña b lµ 15.5Néi dung cña c lµ 20.5Trong khi nhËn néi dung tõ bµn phÝm, thñ tôc READ vµ READLN cßn kiÓm tra xem c¸c d÷ liÖu gâ vµo cã t¬ng thÝch víi kiÓu cña biÕn hay kh«ng.VÝ dô 2:ë vÝ dô 1 ta còng cã thÓ viÕt gép l¹i nh sau:

Vari,j: Integer;a,b,c: Real;

BeginReadln (i,j,a,b,c);............

End.Vµ gâ d÷ liÖu vµo nh sau: 4 6 12.3 15.5 20.5 Hay còng cã thÓ t¸ch thµnh nhiÒu lÖnh nh sau:

32

Vari,j: Integer;a,b,c: Real;

BeginReadln(i);Readln(j);Readln(a);Readln(b);Readln(c);......

End.Vµ gâ d÷ liÖu vµo nh sau:

4612.315.520.5

Víi c¸c Version kh¸c nhau sÏ cã sù ph©n biÖt gi÷a Read vµ Readln kh¸c nhau sau khi Ên ®Ó vµo d÷ liÖu. VÝ dô Version 3.0, Read kh«ng chuyÓn con trá xuèng dßng tiÕp theo nh thñ tôc Readln. Nãi chung hai thñ tôc ®ã cïng ®Ó ®äc d÷ liÖu nhng viÖc di chuyÓn con trá cã kh¸c nhau sau khi Ên Enter ®Ó vµo d÷ liÖu, b¹n thö trªn m¸y vÒ Read vµ Readln sÏ râ.Readln; lµ thñ tôc kh«ng cã tham sè, m¸y tÝnh sÏ cho ®Õn khi ta Ên Enter th× míi lµm tiÕp. Readln kh«ng tham sè ®îc sö dông khi ta muèn ch¬ng tr×nh dõng t¹i mét vÞ trÝ nµo ®ã (®Ó chóng ta ®äc kÕt qu¶ ch¼ng h¹n), sau ®ã l¹i Ên nót Enter ®Ó tiÕp tôc ch¬ng tr×nh.2. KÕt hîp Write vµ Readln ®Ó t¹o giao diÖn ngêi- m¸y.

33

Khi gÆp Read hoÆc Readln ch¬ng tr×nh t¹m dõng ®Ó chê d÷ liÖu. NÕu ta kh«ng ®Ó ý tríc lµ ë ®ã cã thñ tôc Read hoÆc Readln th× nhiÒu khi chóng ta cø tëng lµ ch¬ng tr×nh bÞ treo hoÆc cã sai sãt g× ®ã. V× vËy ta cã thÓ kÕt hîp víi thñ tôc Write ( kh«ng nªn dïng Writeln) ®Ó b¸o lµ cã viÖc vµo d÷ liÖu nh sau:

Write('B¹n gâ vµo mét sè nguyªn i=?'); Readln(i);Write('B¹n gâ vµo mét sè thùc x=?'); Readln(x);

NÕu dïng Writeln th× kh«ng thuËn lîi vµ ®Ñp m¾t v× con trá cña mµn h×nh xuèng dßng vµ Ýt g¾n bã víi viÖc gâ d÷ liÖu vµo.3. Mét sè thñ tôc nhËp phÝm ®Æc biÖt: · Hµm ReadKey: cã kiÓu ký tù, cho gi¸ trÞ lµ ký tù nhËn vµo

tõ bµn phÝm ngay tõ khi gâ phÝm mµ kh«ng cÇn Ên tiÕp Enter.

VÝ dô:§äc mét ký tù tõ bµn phÝm vµ lu ë biÕn Chr:

Chr :=ReadKey· Hµm Keypressed: cã kiÓu Boolean, cho gi¸ trÞ True nÕu ta

gâ mét ký tù, False nÕu kh«ng gâ. Chóng ta sÏ tiÕp tôc khai th¸c hµm nµy.

C©u hái vµ bµi tËp:1. Sù kh¸c nhau c¬ b¶n gi÷a Write vµ Writeln?2. Sù kh¸c nhau c¬ b¶n gi÷a Read vµ Readln?3. C¸ch viÕt :Readln(4, 12, A) sai chç nµo?4. §o¹n ch¬ng tr×nh sau in ra kÕt qu¶ nµo?Program ViDu;Var

S,i:Integer;Begin

I:=10;

34

S:=20;S:=S+I;S:=S*S;Writeln(S);

End.5. H·y in ra h×nh sau:

AAAAAAAAA AAAAAAA AAAAA AAA A

6. Ch¬ng tr×nh sau sai ë chç nµo?Var

A,b:Char;Begin

a:='A';b:='B'c:=ReadKey;Writeln(a,b,c);

End.

Ch¬ng 5: C¸c c©u lÖnh ®iÒu kiÖn vµ c©u lÖnh chän

1.1 C©u lÖnh ®iÒu kiÖn IF... THEN...ELSE... C©u lÖnh nµy cã hai d¹ng nh sau:D¹ng 1: IF < BiÓu thøc Boolean> Then < ViÖc 1>;D¹ng 2: IF< BiÓu thøc Boolean> Then < ViÖc 1> Else < viÖc 2>;

35

Ho¹t ®éng cña d¹ng 1 nh sau: nÕu < BiÓu thøc Boolean> cã gi¸ trÞ True th× m¸y sÏ thùc hiÖn < viÖc 1>, cßn nÕu kh«ng th× kÕt thóc lÖnh if vµ thùc hiÖn tiÕp lÖnh sau ifHo¹t ®éng cña d¹ng 2 nh sau: nÕu < BiÓu thøc Boolean> cã gi¸ trÞ True th× m¸y sÏ thùc hiÖn < viÖc 1>, cßn nÕu kh«ng th× sÏ thùc hiÖn <ViÖc 2>VÝ dô 1:§Ó gi¶i ph¬ng tr×nh bËc nhÊt mét Èn ax+b=0 ta viÕt:

IF a <> 0 Then x:=-b/a Else writeln('Ph¬ng tr×nh v« nghiÖm');VÝ dô 2:T×m gi¸ trÞ Max cña hai sè a vµ b.

If a < b Then Max: =b Else Max: = a; (tríc Else kh«ng ®îc phÐp cã dÊu chÊm phÈy)NÕu sau Then hoÆc sau Else cã trªn mét lÖnh th× ph¶i ®Ó trong Begin...EndVÝ dô: If a < b Then

Begin Max:=b; Min:= a;End Else

BeginMax:=a;Min:=b;

End;NghÜa lµ nÕu a < b, hai lÖnh lµ Max:=b vµ Min :=a cïng ®îc thùc hiÖn. VÝ dô 3: Gi¶i ph¬ng tr×nh bËc 2:Program Ph¬ngTrinhBacHai;

36

Uses CRT;Var

a,b,c,x1,x2,Delta:Real;Begin

ClrScr; (*Xo¸ mµn h×nh*) Write (' B¹n gâ vµo hÖ sè a='); Readln(a);Write(' B¹n gâ vµo hÖ sè b ='); Readln(b);Write(' B¹n gâ vµo hÖ sè c='); Readln(c);Delta := b*b - 4 *a*c; (*TÝnh Delta*)

If Delta = 0 ThenBegin Writeln(' Ph¬ng tr×nh cã nghiÖm kÐp'); Writeln(' x = ', - b/(2*a));End;

If Delta > 0 ThenBegin Writeln(' Hai nghiem thuc :');

x1:=(-b+Sqrt(Delta))/(2*a); (* x1 lµ nghiÖm 1*)

x2:=(-b-Sqrt (Delta))/(2*a); (* x2 lµ nghiÖm 2*)

Writeln ('x1 = ', x1); Writeln ('x2 = ', x2);End Else Writeln(' Ph¬ng tr×nh v«

nghiÖm'); End.

37

1.2. C©u lÖnh chän CASE...OF...LÖnh IF chØ thùc hiÖn rÏ hai nh¸nh øng víi hai gi¸ trÞ cña biÓu thøc Boolean. ViÖc thö vµ chän mét trong nhiÒu nh¸nh sÏ ®îc thùc hiÖn víi c©u lÖnh CASE nh sau:

D¹ng 1 D¹ng 2CASE < biÓu thøc> OF CASE < biÓu thøc> OF Gi¸ trÞ 1: <viÖc 1>; Gi¸ trÞ 1: <viÖc 1>; Gi¸ trÞ 2: <viÖc 2>; Gi¸ trÞ 2: <viÖc 2>; .......................... ............................. Gi¸ trÞ N: <viÖc N>; Gi¸ trÞ N: <viÖc N>;END; ELSE < ViÖc N +1>;

END;Trong ®ã < biÓu thøc> kh«ng chØ lµ biÓu thøc Boolean mµ cßn cã thÓ lµ biÓu thøc cã c¸c kiÓu v« híng ®Õm ®îc ( kh«ng ®îc lµ kiÓu Real).Ho¹t ®éng cña d¹ng 1 nh sau: NÕu <BiÓu thøc> b»ng Gi¸ trÞ i th× thùc hiÖn <ViÖc i> vµ kÕt thóc lÖnh chän.Ho¹t ®éng cña d¹ng 2 nh sau: NÕu <BiÓu thøc> b»ng mét Gi¸ trÞ i th× thùc hiÖn <ViÖc i> vµ kÕt thóc lÖnh chän nÕu kh«ng lµm <ViÖc N+1> vµ kÕt thóc lÖnh chän.VÝ dô 1:Write(' Vµo thø cÇn hái?'); Readln(thu);CASE Thu OF

1: Writeln( 'Chñ nhËt nghØ');

38

2: Writeln('Thø 2: To¸n, Lý, Sinh');3: Writeln('Thø 3: V¨n, Sö, §Þa');4: Writeln('Thø 4: Ngo¹i ng÷');5: Writeln('Thø 5: To¸n, Lý, Sinh');6: Writeln('Thø 6: V¨n, Sö, §Þa');7: Writeln('Thø 7: Ngo¹i ng÷');

End;VÝ dô 2: Write(' B¹n h·y gâ vµo mét ký tù');Readln(Chr);Case Chr Of

'0'..'9' : Writeln('B¹n võa gâ mét ký tù sè !');'A'..'Z' :Writeln ('B¹n võa gâ ch÷ c¸i hoa');'a'..'z' :Writeln(' B¹n võa gâ ch÷ c¸i thêng');Else Writeln('B¹n võa gâ mét ký tù ®Æc biÖt');

End;Bµi tËp:Cho mét vÝ dô vÒ c©u lÖnh IF...THEN...Cho mét vÝ dô vÒ c©u lÖnh IF....THEN....ELSE.....Cho mét vÝ dô mµ sau THEN cã lÖnh hîp thµnhCho vÝ dô mµ sau ELSE cã lÖnh hîp thµnhHai c¸ch viÕt sau kh¸c nhau ë chç nµo?IF a<b THEN Max:=b; Min:=a;Vµ c¸ch viÕt:IF a<b THEN Begin Max:=b; Min:=a;

39

End;H·y dïng CASE...OF...lËp mét ch¬ng tr×nh xem thêi gian biÓu

hµng ngµy cña ban.Dßng lÖnh sau sai ë chç nµo?Var

R:Real;BeginReadln(R);Case R OF12.34: Writeln('§©y lµ sè thùc nhá h¬n 20');End;

40

Ch¬ng 6: Thùc hµnh Turbo Pascal

6.1 Nªn dïng Turbo Pascal víi Version nµo?Turbo Pascal cã nhiÒu phiªn b¶n ( Version). B¹n nªn sö dông phiªn b¶n 5.0, 5.5, 6.0 hoÆc 7.0 th× tèt h¬n. Nh÷ng lÖnh c¬ b¶n trong c¸c Version nµy ®Òu gièng nhau. Tõ Turbo Pascal 5.0 trë lªn cã nhiÒu file vµ ta nªn cµi ®Æt ®Çy ®ñ lªn ®Üa cøng ®Ó ho¹t ®éng cho nhanh. Hai File c¬ b¶n nhÊt lµ: Turbo.EXE vµ Turbo.TPL. Ngoµi ra nªn cã thªm File Turbo.hlp ®Ó tra cøu mçi khi cÇn. NÕu cã nhu cÇu sö dông ®å ho¹ th× ph¶i copy thªm c¸c File sau ®©y:

Graph.tpu lµ File chøa th viÖn c¸c ch¬ng tr×nh ®å ho¹. Tïy theo kiÓu mµn h×nh mµ chän c¸c file *.BGI (Borland

Graphic Inteface) cho thÝch hîp.Copy c¸c kiÓu ch÷ trong khi dïng Graphic nh:

SANS.CHR, GOTH.CHR, TRIP.CHR v.v..C¸c File *.BGI vµ *.CHR thêng ®îc ®Æt trong th môc con BGI n»m trong th môc TP.

6.2 B¾t ®Çu sö dông Turbo Pascal 1 Khëi ®éng Turbo Pascal .C:\>CD TP <Enter>C:\TP>TURBO <Enter>

41

Mµn h×nh so¹n th¶o sÏ hiÖn ra vµ b¹n cã thÓ so¹n th¶o mét ch-¬ng tr×nh nµo ®ã (nh c¸c hÖ so¹n th¶o v¨n b¶n kh¸c).

Menu Bar gåm: File, Edit, Run, Compile, Option, Debug, Break/Watch, chän b»ng c¸ch Ên Alt ®ång thêi víi ch÷ c¸i ®Çu, vÝ dô Alt+F v.v..

Sau Menu Bar lµ dßng tr¹ng th¸i: b¸o cho ngêi lËp tr×nh biÕt täa ®é con trá mµn h×nh, tr¹ng th¸i insert/OverWrite v.v..

Dßng híng dÉn n»m ë cuèi mµn h×nh gåm:F1-Help, F5-Zoom, F6-switch, F7- Trace, F8-Step, F9-Make, F10-Menu. Gâ c¸c phÝm chøc n¨ng ®ã sÏ kÝch ho¹t mét c«ng viÖc, vÝ dô chän F10 sÏ kÝch ho¹t Menu Bar v.v..

6.3 C¸c lÖnh so¹n th¶o v¨n b¶n.1. H·y quan s¸t dßng tr¹ng th¸i ®Ó biÕt:

-Täa ®é con trá mµn h×nh: Dßng vµ Cét -ChÕ ®é so¹n th¶o lµ viÕt ChÌn(insert) hay viÕt §Ì

(Overwrite).-ChÕ ®é nh¶y vÞ trÝ ®Çu dßng khi Ên Enter: Indent.-Tªn file ®ang so¹n th¶o vµ æ ®Üa chøa file ®ã, thÝ dô C:\

TP\Name.pas.2. C¸c lÖnh dÞch chuyÓn con trá.PhÝm Home ®a con trá vÒ ®Çu dßng.PhÝm End ®a con trá vÒ cuèi dßng.PhÝm PgUp ®a con trá lªn mét trang mµn h×nh.PhÝm PgDn ®a con trá xuèng mét trang mµn h×nh.Ctrl+ dÞch con trá sang tr¸i mét ch÷.Ctrl+ dÞch con trá sang ph¶i mét ch÷.Ctrl+PgUp ®a con trá vÒ ®Çu v¨n b¶n

42

Ctrl+PgDn ®a con trá vÒ cuèi v¨n b¶n.PhÝm Del Xo¸ ký tù t¹i vÞ trÝ con tráPhÝm BackSpace Xo¸ ký tù n»m bªn tr¸i con trá.Ctrl+Y Xo¸ c¶ dßng ký tù chøa con trá. C¸c dßng ë díi sÏ dån lªn.Ctrl+Q Y Xo¸ phÇn cuèi dßng kÓ tõ vÞ trÝ con trá.§¸nh dÊu khèi: Khèi ®îc ®¸nh dÊu b»ng c¸ch dÞch trá tíi vÞ trÝ ®Çu vµ gâ Ctrl_K B, dÞch trá tíi vÞ trÝ cuèi vµ gâ Ctrl_K K. Sau ®ã khèi sÏ chuyÓn mÇu.Ctrl_K C Copy khèi tíi vÞ trÝ míi cña con trá. Ctrl_K V ChuyÓn khèi tíi vÞ trÝ míi cña con trá.Ctrl_K Y Xo¸ c¶ khèiCtrl_K W Ghi khèi vµo mét tÖp trªn ®Üa. NÕu b¹n ghi tªn tÖp lµ PRN th× t¬ng ®¬ng víi viÖc ghi khèi sang m¸y in.Ctrl_K R §äc mét tÖp tõ ®Üa vµo, phÇn ®äc vµo ®îc ®¸nh dÊu nh khèi.Ctrl_Q B vµ Ctrl_Q K ®a con trá vÒ ®Çu khèi vµ cuèi khèi.Ctrl_Q F T×m kiÕm (F: Find) mét côm tõ mµ b¹n muèn.Ctrl_Q A T×m kiÕm vµ sau ®ã thay thÕ. Ch¬ng tr×nh sÏ hái:

Find: t×m g×Replace: thay b»ng g×Option: tuú chän c¸c c¸ch.

U: t×m kh«ng ph©n biÖt ch÷ to, nhá (Upcase).B: t×m tõ vÞ trÝ con trá vÒ ®Çu tÖp.W: t×m trän c¸c tõ , vÝ dô: t×m thÊy tõ 'Ho' nhng kh«ng t×m trong 'Hoang'.G: T×m vµ thay thÕ tõ ®Çu tÖp (Global)N: t×m vµ thay thÕ mµ kh«ng cÇn hái l¹i cã thay hay kh«ng.Ctrl_L lÆp l¹i c«ng viÖc Ctrl_Q F hoÆc Ctrl_Q A cuèi cïng.

43

6.4 DÞch vµ ch¹y ch¬ng tr×nh.Sau khi so¹n xong ch¬ng tr×nh ta cho dÞch vµ ch¹y ch¬ng tr×nh b»ng lÖnh: Ctrl+F9. DÞch (Compile) ch¬ng tr×nh võa so¹n th¶o (gäi lµ ch¬ng tr×nh nguån) thµnh ch¬ng tr×nh ®Ých (executable), sau ®ã lµ ch¹y ch¬ng tr×nh (Run). Hai bíc nµy cã thÓ ®îc thùc hiÖn b»ng viÖc gâ Ctrl+F9 .Khi gâ Ctrl+F9, m¸y sÏ kiÓm tra xem ch¬ng tr×nh cã lçi kh«ng, nÕu kh«ng cã lçi th× m¸y sÏ ch¹y lu«n ch¬ng tr×nh. NÕu cã lçi m¸y sÏ th«ng b¸o lçi cô thÓ ®Ó t×m vµ söa lçi. VÝ dô:Program DonGian;Begin

y:=12.9;Writeln(' y = ',y);

End.Khi dÞch ch¬ng tr×nh , con trá sÏ ®îc ®Æt ë vÞ trÝ cã lçi vµ b¸o trªn mµn h×nh nh sau:Error 3: Unknow identifier.Program DonGian;Begin

y:=12.9; (vÞ trÝ con trá b¸o lçi)Writeln ('y=',y);

End.NghÜa lµ ch¬ng tr×nh kh«ng biÕt tªn (®Þnh danh) nµy (y). Ta thÊy sai v× biÕn y cha khai b¸o ë môc Var.H·y ch÷a l¹i nh sau:Program DonGian;Var

44

y: Real;Begin y:=12.9; Writeln (' y = ',y); End.Sau khi dÞch ta thÊy kh«ng b¸o lçi n÷a.ViÖc cho dÞch vµ ch¹y cã thÓ thùc hiÖn b»ng c¸ch Ên Alt+C ®Ó vµo môc Compile trong Menu Bar. Sau ®ã chän lÖnh dÞch: Compile hoÆc Make hoÆc Build...Turbo Pascal cã thÓ ®Ó ch¬ng tr×nh sau khi dÞch ë trong bé nhí vµ còng cã thÓ ®Ó trªn ®Üa . NÕu ®Ó trong bé nhí, m¸y sÏ ch¹y nhanh h¬n song bé nhí sÏ bÞ chiÕm chç nhiÒu vµ khi t¾t m¸y ch¬ng tr×nh ®Ó trong bé nhí còng mÊt ®i. NÕu dÞch vµ lu trªn ®Üa, ta sÏ cã tÖp kÕt qu¶ víi ®u«i exe. H·y Ên Alt+C ®Ó vµo môc Compile vµ chuyÓn ®æi môc Destination b»ng c¸ch Ên phÝm ch÷ c¸i D. M¸y sÏ chuyÓn ®æi ®Ó chän mét trong 2 c¸ch Destination Disk hoÆc Destination Memory. Trong c¸c vÝ dô trªn chóng ta chØ dïng mét tÖp ®Ó chøa toµn bé ch¬ng tr×nh. NÕu ch¬ng tr×nh lín nªn thiÕt kÕ thµnh nhiÒu Modunm, mçi modun ®îc chøa trong mét tÖp ch¬ng tr×nh nguån, mçi Modun cã mét nhiÖm vô riªng cña nã, tïy ngêi lËp tr×nh thiÕt kÕ. Ngêi ta thiÕt kÕ c¸c modun nµy thµnh c¸c ®¬n vÞ ch¬ng tr×nh, ®îc gäi lµ Unit (ta sÏ t×m hiÓu Unit phÇn sau). Ta cã thÓ dÞch tõng Unit mét c¸ch riªng biÖt. Mét Unit ®îc dÞch xong, nÕu kh«ng cã söa ®æi th× lÇn sau m¸y sÏ kh«ng ph¶i dÞch l¹i Unit ®ã n÷a. Ch¬ng tr×nh chÝnh ®îc Turbo Pascal ®Æt trong tÖp cã tªn lµ Primary file.

45

· Primary file lµ tªn file chøa ch¬ng tr×nh chÝnh (chø kh«ng ph¶i lµ Unit). NÕu ch¬ng tr×nh chØ cã mét file, kh«ng cã Unit th× kh«ng ph¶i quan t©m tíi môc Primary file.

Build lµ dÞch toµn bé ch¬ng tr×nh chÝnh (Primary file) cïng c¸c Unit liªn quan, cho dï c¸c Unit kh«ng cã sù thay ®æi g× tríc ®ã.

· Compile lµ chøc n¨ng dÞch nh÷ng file nµo ®ã thÊy cÇn chø kh«ng dÞch hÕt nh chøc n¨ng Build. Sau khi dÞch xong kh«ng ch¹y ch¬ng tr×nh nh Ctrl+F9.

· Make lµ chøc n¨ng dÞch, nhng chØ dÞch ®óng mét Unit mµ ta ®ang so¹n th¶o.

Sau khi dÞch xong Unit sÏ ®îc lu víi file *.PTU (Turbo Pascal Unit).

6.5 Kh¶ n¨ng bao hµm tÖpKhi so¹n th¶o mét ch¬ng tr×nh qu¸ dµi, hoÆc nh÷ng ®o¹n ch-¬ng tr×nh ®· hoµn chØnh, ta cã thÓ c¾t ®o¹n ch¬ng tr×nh ®ã ra c¸c file kh¸c ®îc gäi lµ c¸c file bao hµm. Sau ®ã t¹i chç c¾t ®i ta ph¶i b¸o cho ch¬ng tr×nh dÞch ®äc c¸c file bao hµm víi lêi híng dÉn.{ $I FileName}Trong ®ã FileName lµ tªn file bao hµm.VÝ dô víi ch¬ng tr×nh lóc ban ®Çu sau:Program BaoHam; Var

X,y: Real;Procedure A; Begin

......End;

46

Procedure B; Begin ......End;Begin.....End.§¸nh dÊu khèi Procedure A, sau ®ã dïng Ctrl+K W ®Ó ghi sang File míi ®o¹n ®· ®¸nh dÊu, víi tªn File lµ ThuTucA.Pas. Sau khi ghi xong xãa khèi nµy ®i vµ thay vµo ®ã lµ lêi híng dÉn { $I ThuTucA.Pas}. Ta l¹i tiÕp tôc víi Procedure B. Cuèi cïng ta cã tÖp chøa ch¬ng tr×nh cßn l¹i nh sau:Program BaoHam;Var X,y:Real;{$I ThuTucA.Pas};{$I ThuTucB.Pas};Begin...End.Bµi tËp:H·y dïng c¸c thao t¸c so¹n th¶o ®Ó lËp tr×nh t×m nghiÖm ph-

¬ng tr×nh bËc hai, sau ®ã cho ch¹y ch¬ng tr×nh vµ quan s¸t lçi nÕu cã.

H·y lµm quen víi bao hµm tÖp b»ng c¸ch lËp 3 thñ tôc øng víi DX=0, DX<0 vµ DX>0 (C©u1) sau ®ã da 3 thñ tôc vµo bao hµm vµ cho ch¹y thö.

H·y thö nghiÖm trong trêng hîp bao hµm tÖp lµ mét ®o¹n nµo ®ã kh«ng trän mét thñ tôc.

47

H·y dÞch tÖp nguån thµnh tÖp ®Ých cã ®u«i *.EXE

Ch¬ng 7: KiÓu v« híng liÖt kª vµ kiÓu ®o¹n con

7.1 KiÓu v« híng liÖt kª (Enumerated scalar type)D÷ liÖu thuéc lo¹i v« híng nh lµ mét tËp hîp c¸c gi¸ trÞ ®îc s¾p xÕp theo mét thø tù tù nhiªn. Khi khai b¸o mét biÕn lµ kiÓu v« híng nµo ®ã, nã cã thÓ nhËn mét gi¸ trÞ trong tËp c¸c gi¸ trÞ ®ã. Pascal cßn cho phÐp ngêi lËp tr×nh cã thÓ tù ®Þnh nghÜa ra c¸c kiÓu v« híng míi b»ng c¸ch liÖt kª c¸c gi¸ trÞ cña kiÓu v« híng th«ng qua c¸c tªn do ngêi lËp tr×nh ®Æt ra. Danh s¸ch c¸c gi¸ trÞ nµy ®îc ®Æt trong ngoÆc ®¬n vµ ®îc m« t¶ b»ng mét tªn kiÓu trong phÇn m« t¶ kiÓu (phÇn Type). KiÓu v« híng ®Þnh nghÜa theo c¸ch nµy ®îc gäi lµ kiÓu liÖt kª.ThÝ dô: Type

Mau = (Do, Xanh, Vang, Trang );Oto = (Toyota, Honda, Nisan);

BiÕn v« híng ®îc ®Þnh nghÜa sau ®ã nh sau: Var

Mau1, Mau2: Mau;Xe: Oto;

HoÆc khai b¸o biÕn trùc tiÕp víi m« t¶ kiÓu nh sau:Var

Mau1, Mau2: (Do, Xanh, Vang, Trang);Xe: (Toyota, Honda, Nisan);

BiÕn cã thÓ nhËn c¸c gi¸ trÞ cña kiÓu t¬ng øng. VÝ dô:

48

Mau1:=Xanh;Xe:=Honda;Mét biÕn ®îc ®Þnh nghÜa lµ kiÓu nµy kh«ng thÓ nhËn gi¸ trÞ cña kiÓu kh¸c, vÝ dô:

Xe :=Do; Lµ sai v× kh¸c kiÓu.Trong kiÓu v« híng phÇn tö ®Çu tiªn cã sè thø tù lµ 0, phÇn tö thø 2 cã sè thø tù 1 v.v.. C¸c hµm sau ®©y ®îc ¸p dông cho kiÓu v« híng.· Hµm thø tù ORD(X):KÕt qu¶ lµ sè thø tù cña X trong kiÓu v« híng. VÝ dô:

ORD(Vang) =2 (v× Vµng cã sè thø tù lµ 2)ORD(Honda) = 1 (v× Honda cã sè thø tù lµ 1)

Víi hµm ORD ta cã thÓ so s¸nh hai gi¸ trÞ v« híng cã cïng kiÓu. Gi¸ trÞ cã sè thø tù lín sÏ lín h¬n gi¸ trÞ cã sè thø tù nhá h¬n. Nh vËy sè thø tù liÖt kª khi ®Þnh nghÜa kiÓu v« híng còng chÝnh lµ thø tù s¾p xÕp tõ nhá ®Õn lín.VÝ dô víi kiÓu Xe ta cã:

Toyota<Honda<Nisan· Hµm PRED(X) vµ SUCC(X)Hµm PRED(X) cho gi¸ trÞ ®øng tríc XHµm SUCC(X) cho ta gi¸ trÞ tiÕp theo cña X.VÝ dô:

Pred (Honda) = ToyotaSucc(Honda) = Nisan

Pred cña gi¸ trÞ ®Çu vµ Succ cña gi¸ trÞ cuèi kh«ng cã ý nghÜa .· ChuyÓn ®æi kiÓu d÷ liÖuHµm ORD chuyÓn ®æi mét gi¸ trÞ v« híng sang gi¸ trÞ nguyªn.

49

Turbo Pascal cho phÐp biÕn ®æi ngîc tõ mét gi¸ trÞ sè nguyªn thµnh gi¸ trÞ v« híng ®Õm ®îc theo c¸ch viÕt.Tªn_KiÓu (Sè_nguyªn).VÝ dô:Xe(2) cho gi¸ trÞ NisanChar(65) cho gi¸ trÞ 'A'· HiÓn thÞ kiÓu liÖt kª:Thñ tôc Write hoÆc Writeln chØ hiÓn thÞ c¸c gi¸ trÞ thuéc kiÓu v« híng chuÈn (Real, Integer, Byte, Char, Boolean) vµ kh«ng thÓ hiÓn thÞ mét gi¸ trÞ thuéc kiÓu v« híng liÖt kª. VÝ dô c¸c c©u lÖnh sau lµ sai:

Writeln (Xe(1)), Writeln (Xanh)Muèn hiÓn thÞ gi¸ trÞ cña biÕn v« híng liÖt kª, ta cã thÓ dïng thñ thuËt sau:IF Xe=Honda Then Writeln ('Honda'); · §äc d÷ liÖu liÖt kª: Thñ tôc Read hoÆc Readln còng chØ cho phÐp ®äc vµo tõ bµn phÝm c¸c gi¸ trÞ cña c¸c biÕn cã kiÓu v« híng chuÈn. Chóng còng kh«ng cho phÐp ®äc trùc tiÕp c¸c gi¸ trÞ kiÓu liÖt kª. VÝ dô ta kh«ng thÓ ®äc biÕn Mau1 cã gi¸ trÞ lµ Do b»ng c¸ch Ên c¸c phÝm D,o. Ta cã thÓ dïng ph¬ng ph¸p sauVÝ dô:Type

Mau = (Do, Xanh, Vang, Trang);Var

I: integer;Mau1: Mau;

BeginReadln(I);

50

Mau1:= Mau(I);End.

7.2 KiÓu kho¶ng con (Sub-range Type) NhiÒu trêng hîp mét biÕn cã thÓ chØ lÊy gi¸ trÞ trong mét kho¶ng ®îc ®Þnh bëi gi¸ trÞ giíi h¹n díi vµ gi¸ trÞ giíi h¹n trªn thuéc mét kiÓu v« híng ®Õm dîc nµo ®ã. VÝ dô tuæi thanh niªn cã thÓ ®îc giíi h¹n tõ 13 ®Õn 35. Khi ®ã ta cã thÓ ®Þnh nghÜa ra kiÓu kho¶ng con nh sau: Type

ThanhNien =15..35;Var

Tuoi :ThanhNien;HoÆc cã thÓ ®Þnh nghÜa trùc tiÕp:Var

Tuoi : 15..35;KiÓu kho¶ng con cã thÓ viÕt nh sau:

a..b;Trong ®ã a lµ h»ng cËn díi vµ b lµ h»ng cËn trªn, a vµ b lµ hai h»ng cña cïng mét kiÓu v« híng ®Õm ®îc. TÊt nhiªn ph¶i tho¶ m·n: a<bKiÓu kho¶ng con cã nh÷ng lîi Ých:

·TiÕt kiÖm « nhí·Cã thÓ kiÓm tra gi¸ trÞ cña biÕn khi ch¹y ch¬ng tr×nh kh«ng

®îc vît ra khái giíi h¹n cña kho¶ng con. §©y lµ t¸c dông chñ yÕu cña kiÓu kho¶ng con .

Mét sè vÝ dô vÒ kiÓu kho¶ng con.Type Ngay = (ChuNhat, Hai, Ba, Tu, Nam, Sau, Bay);

51

ChuCaiIn = 'A'.. 'Z';Var Ch: ChuCaiIn; NgayLamViec: Hai..Bay;Bµi tËp:1. H·y cho mét vÝ dô ®¬n gi¶n vÒ lËp tr×nh trong ®ã cã dïng

d÷ liÖu liÖt kª, h·y viÕt ch¬ng tr×nh vµ ch¹y thö2. H·y cho mét vÝ dô ®¬n gi¶n vÒ lËp tr×nh trong ®ã cã dïng

d÷ liÖu kho¶ng con, h·y viÕt ch¬ng tr×nh vµ ch¹y thö3. Khai b¸o sau thuéc lo¹i khai b¸o nµo, ®óng hay sai?Type

a=12..26;b='c'..'y';c=3.14...7.34;

Ch¬ng 8: LÆp FOR, WHILE vµ REPEAT

8.1 Vßng lÆp cã sè bíc lÆp x¸c ®Þnh FOR...VÝ dô:Gi¶ sö ta ph¶i hiÓn thÞ lªn mµn h×nh c¸c sè tõ 1 ®Õn 60, mçi sè chiÕm mét dßng:12..5960ViÖc nµy cã thÓ thùc hiÖn b»ng 60 lÖnh writeln nh sau:writeln(1);

52

writeln(2);........writeln(60);C¸ch nµy râ rµng lµ qu¸ dµi dßng, ®Ó kh¾c phôc t×nh tr¹ng trªn ta cã thÓ thay thÕ b»ng c¸ch dïng lÖnh For nh sau: FOR i :=1 TO 60 DO Writeln(i);Vßng lÆp nµy cã nghÜa lµ cho i ch¹y tõ 1 (gi¸ trÞ ®Çu) tíi 60 (gi¸ trÞ cuèi), øng víi mçi gi¸ trÞ cña I, m¸y sÏ thùc hiÖn lÖnh sau Do, ë ®©y lµ hiÓn thÞ gi¸ trÞ i.Cô thÓ h¬n, vßng lÆp FOR nµy ®îc thùc hiÖn tõng bíc nh sau:1. §Çu tiªn i lÊy gi¸ trÞ 1. V× i cßn nhá h¬n gi¸ trÞ cuèi lµ 60 nªn lÖnh writeln(i) ®îc thùc hiÖn vµ kÕt qu¶ ®îc hiÓn thÞ lµ 1.2. Sau ®ã i nhËn gi¸ trÞ tiÕp theo, tøc lµ I:=Succ(i). Lóc nµy i=2 vµ vÉn nhá h¬n gi¸ trÞ cuèi lµ 60 nªn lÖnh writeln(I) vÉn ®îc thùc hiÖn vµ kÕt qu¶ 2 ®îc hiÓn thÞ.3. Qu¸ tr×nh l¹i tiÕp tôc bíc 2 cho ®Õn khi i=61, lín h¬n gi¸ trÞ cuèi (60) th× dõng l¹i.C¸ch viÕt tæng qu¸t cña lÖnh For nh sau:FOR <BiÕn ®iÒu khiÓn> :=<Gi¸ trÞ ®Çu> TO < Gi¸ trÞ cuèi> DO <LÖnh>Trong ®ã <BiÕn ®iÒu khiÓn>, <Gi¸ trÞ ®Çu> vµ <Gi¸ trÞ cuèi> lµ kiÓu v« híng ®Õm ®îc. NÕu ta muèn hiÓn thÞ c¸c sè tõ 60 ®Õn 1 ta viÕt l¹i nh sau: FOR I:=60 DOWNTO 1 DO writeln(I);Tæng qu¸t nh sau: FOR <BiÕn ®iÒu khiÓn>:=<Gi¸ trÞ ®Çu> DOWNTO <Gi¸ trÞ cuèi> DO <viÖc>;M¸y tÝnh sÏ lµm theo chiÒu ngîc l¹i, tøc lµ theo chiÒu gi¶m cña biÕn ®iÒu khiÓn.

53

VÝ dô 1:TÝnh tæng c¸c sè nguyªn tõ 10 ®Õn 100 :Program TinhTong;Var Tong, I: Integer;Begin Tong:=0; For I:= 10 To 100 Do Tong:= Tong+I; Writeln('Tong =', Tong);End.VÝ dô 2:HiÓn thÞ c¸c ch÷ c¸i hoa 'A' ®Õn 'Z' ra mµn h×nh.Program LenhFor;Uses Crt; Var Chr : Char;Begin Clrscr; For Chr:='A' To 'Z' Do Write(Chr:2);End.KÕt qu¶ hiÖn ra mµn h×nh: A B C D E G H I J K L M N O P Q R S T U V W X Y Z VÝ dô 3:LÖnh For dùa trªn kiÓu liÖt kª, ch¬ng tr×nh sau:Type Ngay = (ChuNhat, Hai, Ba, Tu, Nam, Sau, Bay);Var NgayX, Ng: Ngay;Begin

54

NgayX :=Nam; For Ng:=Hai To Bay Do If NgayX=Ng Then writeln('Ngay lµm viªc ');End.NÕu sau Do cã trªn mét lÖnh h·y ®Æt trong Begin..End.VÝ dô 4:C¸c vßng For lång nhau For I:=1 To 10 Do For J:=I To 12 Do

Begin K:= I+J; Writeln(k); End;

8.2 Vßng lÆp cã sè bíc lÆp kh«ng x¸c ®Þnh Repeat vµ While.D¹ng1: D¹ng 2:Repeat While < BiÓu thøc Boolean> Do< C«ng viÖc>; BeginUntil < BiÓu thøc Boolean>; <C«ng viÖc>;

End;Trong lÖnh Repeat ...Until... m¸y sÏ thùc hiÖn <C«ng viÖc> cho ®Õn khi <BiÓu thøc Boolean> cã gi¸ trÞ True th× ra khái vßng lÆp. NghÜa lµ lµm tríc thö sau.Cßn trong vßng lÆp While ... Do... m¸y sÏ xem chõng nµo <BiÓu thøc Boolean> cã gi¸ trÞ True th× thùc hiÖn <C«ng viÖc> n»m gi÷a Begin vµ end. Cßn khi <BiÓu thøc Boolean> cã gi¸ trÞ False th× ra khái vßng lÆp.

55

VÝ dô 1: TÝnh tæng sau: S = 1+1/22 + 1/32 +...Dõng khi mét sè h¹ng nhá h¬n 0.00000001.Program TinhTong;Var

i: Integer;S,a,b: Real;

Begin b:=0.00000001; a:=1; I :=1; S:=0;Repeat

S:=S+a;i:=i+1;a:=1/(i*i);

Until a<b ;Writeln ( ' Tæng = ', S: 12:10 );End.HoÆc dïng WhileProgram TinhTong;Var

i: Integer;S,a,b: Real;

Begin b:=0.00000001; a:=1; I :=1; S:=0;While a>b DoBegin

S:=S+a;i:=i+1;

56

a:=1/(i*i);End ;Writeln ( ' Tæng = ', S: 12:10 );End.VÝ dô 2:TÊt nhiªn víi lÆp For ta chuyÓn sang lÆp Repeat hoÆc While:Program TinhTong;Var Tong, I: Integer;Begin Tong:=0;

I:=10;Repeat Tong:= Tong+I; I:=i+1;Until i>100;Writeln('Tong=',Tong);End.HoÆc While nh sau:Program TinhTong;Var Tong, I: Integer;Begin Tong:=0;

I:=10; While i<=100 Do

Begin Tong:= Tong+i;

i:=i+1;

57

End; Writeln('Tong =', Tong);End.

8.3 LÖnh nh¶y v« ®iÒu kiÖn GOTOLÖnh Goto cho phÐp ch¬ng tr×nh nh¶y v« ®iÒu kiÖn tíi mét vÞ trÝ trong ch¬ng tr×nh th«ng qua tªn nh·n. C¸c nh·n lµ c¸c sè nguyªn hoÆc tªn ®îc khai b¸o trong phÇn Label cña phÇn khai b¸o ë ®Çu ch¬ng tr×nh, ®Æt c¸ch nhau qua dÊu phÈy. Trong ch¬ng tr×nh, nh·n ®îc ®Æt vµo vÞ trÝ thÝch hîp theo sau lµ dÊu hai chÊm.VÝ dô:Program TinhTong;Label 3;Var Tong, I: Integer;Begin Tong:=0;

I:=10;3: Tong:= Tong+i;i:=i+1;if i<=100 Then Goto 3

Writeln('Tong =', Tong);End.Sù cã mÆt cña Goto trong ch¬ng tr×nh lµm mÊt tÝnh cÊu tróc. V× vËy nÕu cã thÓ ®îc nªn tr¸nh dïng Goto. Mét ®iÒu n÷a lµ kh«ng ®îc dïng Goto ®Ó nh¶y vµo ch¬ng tr×nh con mÆc dï cã thÓ tõ trong ch¬ng tr×nh con nh¶y ra ngoµi.Bµi tËp:

58

1. Dïng vßng lÆp For ®Ó in ra c¸c ký tù cã m· tõ 65 ®Õn 1202. Dïng vßng lÆp For lËp tr×nh ®Ó tÝnh giai thõa N!3. TÝnh S=1/1+1/2+1/2+...+1/n4. H·y lËp tr×nh gi¶i bµi to¸n:Tr¨m tr©u tr¨m cáTr©u ®øng ¨n 5Tr©u n»m ¨n 3Lô khô tr©u giµBa con mét bãHái mçi lo¹i cã bao nhiªu con?Gîi ý: gäi x lµ sè tr©u ®øng, y lµ tr©u n»m, z lµ tr©u giµ, ta cã hÖ ph¬ng tr×nh v« ®Þnh sau:X + Y+ Z=1005X+3Y+1/3Z=100 hay X+Y+Z=10015X+9Y+Z=300Ta dïng 3 lÖnh FOR nh sau:For x:=1 to 100 Do For y:=1 To 100 Do For z:=1 to 100 Do

IF ((X+Y+X)=100) AND ((15*X+9*Y+Z)=300)) then Begin Writeln('Tr©u ®øng lµ:',X); Writeln('Tr©u n»m lµ:',Y); Writeln('Tr©u giµ lµ:',Z);End;B¹n h·y lËp tr×nh chi tiÕt vµ ch¹y thö

5. T×m ch÷ sè x vµ y trong phÐp nh©n sau:x9y.7x=xy90yGîi ý: Ta thö b»ng lªnh For:For x:=0 to 9 Do

59

For y:=0 To 9 DoIF ((x*100+90+y) * (70+x))=(x*10000+y*1000+90+y) Them Writelon(x,y);H·y lËp tr×nh chi tiÕt vµ ch¹y thö.

Ch¬ng 9: Ch¬ng tr×nh con (thñ tôc vµ hµm).

9.1 Kh¸i niÖm vÒ ch¬ng tr×nh con : (Sub-program) Trong khi lËp tr×nh chóng ta thêng gÆp nh÷ng ®o¹n ch¬ng tr×nh ®îc lÆp ®i lÆp l¹i nhiÒu lÇn ë nh÷ng chç kh¸c nhau. §Ó tr¸nh rêm rµ, nh÷ng ®o¹n ch¬ng tr×nh nµy ®îc thay thÕ b»ng mét ch¬ng tr×nh con vµ khi cÇn ta chØ viÖc gäi ch¬ng tr×nh con ®ã víi c¸c tham sè t¬ng øng cÇn thiÕt. NÕu mét ch¬ng tr×nh rÊt dµi, sÏ khã kh¨n cho viÖc gì rèi, hiÖu chØnh. Ta cã thÓ ph©n chia bµi to¸n thµnh c¸c bµi to¸n con, mçi bµi to¸n con øng víi mét ch¬ng tr×nh con vµ nh vËy sÏ dÔ dµng kiÓm tra gì rèi. ViÖc chia nhá ch¬ng tr×nh thµnh c¸c Modul nhá cã thÓ vÝ nh nguyªn t¾c " Chia ®Ó trÞ". Ch¬ng tr×nh con ®îc dïng rÊt phæ biÕn. V× vËy chóng ta cÇn n¾m v÷ng c¸c kü thuËt lËp ch¬ng tr×nh con.

9.2 Procedure vµ Function ( Thñ tôc vµ hµm )Cã hai lo¹i ch¬ng tr×nh con:Procedure ( thñ tôc)• Function ( hµm).

60

Sù kh¸c nhau c¬ b¶n cña hai lo¹i nµy lµ Function tr¶ l¹i kÕt qu¶ cho tªn cña Function, cßn Procedure kh«ng tr¶ l¹i kÕt qu¶ th«ng qua tªn cña nã. CÊu tróc chung cña mét ch¬ng tr×nh trong ®ã cã phÇn khai b¸o ch¬ng tr×nh con nh sau:Program TenChuongTrinh; (*Tiªu ®Ò *)Label (*Khai b¸o c¸c nh·n *);.....Const (*Khai b¸o c¸c h»ng *);.....Type (* M« t¶ kiÓu *);.....Var (* Khai b¸o c¸c biÕn*);......Procedure TenThuTuc ( khai b¸o c¸c tham sè, nÕu cÇn);(*Khai b¸o Label, Const, Type, Var cña riªng Procedure, nÕu cÇn*).....................Begin...... (* Th©n ch¬ng tr×nh con*).End;Function TenHam( khai b¸o c¸c tham sè, nÕu cÇn): kiÓu _d÷ _liÖu; (*Khai b¸o Label, Const, Type, Var cña riªng Procedure, nÕu cÇn*).Begin...... (* Th©n ch¬ng tr×nh con*).End;Begin

61

......(*Th©n ch¬ng tr×nh*)End. Theo qui ®Þnh nµy, LABEL tríc, råi ®Õn CONST, TYPE, VAR cuèi cïng lµ c¸c PROCEDURE, c¸c FUNCTION. PhÇn nµo kh«ng cã th× bá ®i, ®¬ng nhiªn kh«ng thÓ thiÕu phÇn th©n ch¬ng tr×nh chÝnh. §Ó minh ho¹, chóng ta xÐt mét ch¬ng tr×nh sau:VÝ dô 1:Program PhuongTrinhBacHai;Uses Crt;Var A,b,c,dx,x1,x2: Real;Procedure Vao; Begin Write(' Vµo hÖ sè a='); Readln(a); Write(' Vµo hÖ sè b='); Readln(b);

Write(' Vµo hÖ sè c='); Readln(c); End;Procedure TinhDelta; Begin Dx:=b*b-4*a*c;

If dx>=0 Then DeltaKhongAm Else DeltaAm; End;Procedure DeltaKhongAm;

Begin x1:=(-b+Sqrt(dx))/(2*a);

x2:=(-b-Sqrt(dx))/(2*a); End;Procedure DeltaAm;

62

Begin Writeln('Ph¬ng tr×nh v« nghiÖm'); End;BeginVao;TinhDelta;End.Trong ch¬ng tr×nh trªn, tÊt c¶ c¸c biÕn ®Òu ®îc khai b¸o ë ch-¬ng tr×nh chÝnh, c¸c biÕn Êy ®îc gäi lµ biÕn toµn côc, biÕn toµn côc cã ý nghÜa trong toµn bé ch¬ng tr×nh (nghÜa lµ c¸c ch¬ng tr×nh con ®Òu dïng ®îc). Trong ch¬ng tr×nh con còng cã phÇn khai b¸o riªng cña nã, c¸c biÕn ®ã gäi lµ biÕn côc bé. BiÕn côc bé chØ cã ý nghÜa trong ch¬ng tr×nh con ®ã mµ th«i.CÊu tróc chung cña procedure vµ function nh sau:Procedure <Tªn thñ tôc> ( Khai b¸o c¸c tham sè h×nh thøc);<Khai b¸o: Label, Const, Type, Var vµ thËm chÝ c¶ c¸c procedure vµ function>...Begin.... (* Th©n ch¬ng tr×nh con*)End;vµ Function nh sau:Function <Tªn hµm> ( khai b¸o c¸c tham sè h×nh thøc): kiÓu_d÷_liÖu_cña _hµm;<Khai b¸o: Label, Const, Type, Var vµ thËm chÝ c¶ c¸c procedure vµ function>...Begin.... (* Th©n ch¬ng tr×nh con*)

63

End;KÕt thóc ch¬ng tr×nh con b»ng dÊu chÊm phÈy(;) kh«ng ph¶i lµ dÊu chÊm (.) nh ch¬ng tr×nh chÝnh.

9.3 ChuyÓn tham sè cho ch¬ng tr×nh con.Ch¬ng tr×nh con cã thÓ ®îc tÝnh to¸n trùc tiÕp víi c¸c biÕn toµn côc hoÆc tù khai b¸o biÕn côc bé cña nã vµ khi khai b¸o côc bé th× ph¶i truyÒn tham sè cho ch¬ng tr×nh con. Cã hai c¸ch truyÒn tham sè: truyÒn tham biÕn (variable parameter) vµ truyÒn tham trÞ (value parameter). Sau ®©y lµ néi dung cô thÓ.1. Kh«ng cÇn biÕn côc béTa lÊy mét vÝ dô ®¬n gi¶n lµ: Vµo hai sè, tÝnh tæng vµ in kÕt qu¶.Program TongHaiSo;USES CRT;Var

S,a,b :Real;Procedure VaoHaiSo;

BeginWrite (' a='); Readln(a); (*a lµ biÕn toµn côc*)Write (' b='); Readln(b); (*b lµ biÕn toµn côc*)

End;

Procedure TinhTong;Begin

S:=a+b; (*S lµ biÕn toµn côc*)End;

Begin

64

VaoHaiSo;TinhTong;Writeln ('S=',S);End.

ë trªn ta thÊy s, a, b khai b¸o ë ch¬ng tr×nh chÝnh (toµn côc) vµ 3 biÕn ®ã ®îc dïng trong c¶ hai thñ tôc. NghÜa lµ biÕn toµn côc cã ý nghÜa trong toµn bé ch¬ng tr×nh. C¸ch thiÕt kÕ theo kiÓu ®ã cã nhîc ®iÓm lµ c¸c ch¬ng tr×nh con ph¶i biÕt biÕn khai b¸o ë ch¬ng tr×nh chÝnh th× míi viÕt ®îc ch¬ng tr×nh con. §iÒu ®ã sÏ bÊt tiÖn khi ch¬ng tr×nh lín mµ ta ph¶i ph©n cho nhiÒu ngêi viÕt (v× ph¶i phô thuéc biÕn ë ch¬ng tr×nh chÝnh)2. Dïng biÕn côc bé vµ truyÒn tham sèTa viÕt l¹i ch¬ng tr×nh trªn theo kiÓu "Ýt lÖ thuéc" vµo ch¬ng tr×nh chÝnh nh sau:Program TongHaiSo;Uses Crt;Var

S,a,b:Real; (*S,a,b lµ biÕn toµn côc*)Procedure VaoHaiSo(Var x,y:Real);

BeginWrite (' x='); Readln(x); (*x lµ biÕn côc bé*)Write (' y='); Readln(y); (*y lµ biÕn côc bé*)

End;Procedure TinhTong(Var Tong:Real; P,Q:Real);

BeginTong:=P+Q; (*Tong,P,Q lµ biÕn côc bé*)

End;BeginVaoHaiSo(a,b);

65

TinhTong(S,a,b);Writeln ('S=',S);End.

Gi¶i thÝch: Gi¶ sö khi ch¹y ch¬ng tr×nh gÆp thñ tôc VaoHaiSo(Var x,y:Real), ta gâ vµo hai sè 2 vµ 3 (nghÜa lµ x=2 vµ y=3). Thñ tôc VaoHaiSo(Var x,y:Real), ®iÒu nµy nãi lªn lµ x,y lµ tham

biÕn (hay cßn gäi lµ tham biÕn biÕn), v× sao vËy? Bëi v× khi ta gäi: VaoHaiSo(a,b) th× x chuyÓn giao gi¸ trÞ cho a vµ y cho b. NghÜa lµ tríc khi gäi a vµ b cã gi¸ trÞ 0 sau khi gäi a=2 vµ b=3 (gi¸ trÞ do x vµ y chuyÓn giao cho) tøc lµ a,b cã thay ®æi gi¸ trÞ (ch÷ Var tríc x vµ y cã ý nghÜa nh vËy). Gi¶ sö ta bá ch÷ Var vµ thñ tôc b©y giê lµ VaoHaiSo(x,y:Real). Khi ch¹y ch¬ng tr×nh th× tríc vµ sau khi gäi th× a vµ b ®Òu cã gi¸ trÞ 0, mÆc dï ta vÉn gâ vµo x=2 vµ y=3.

Thñ tôc TinhTong(Var Tong:Real; P,Q:Real); th× biÕn Tong còng lµ tham biÕn biÕn v× tríc khi gäi s=0 vµ sau khi gäi s=5. Cßn P,Q lµ tham biÕn trÞ, v× sao vËy? V× khi ta gäi:TinhTong(s,a,b) th× a vµ b tríc khi gäi cã gi¸ trÞ a=2, b=3 vµ sau khi gäi còng vËy nghÜa lµ kh«ng thay ®æi gi¸ trÞ. VËy lµ khi nµo th× cÇn tham biÕn biÕn vµ khi nµo th× cÇn tham biÕn trÞ lµ ë ý nghÜa trªn.

3. Sù kh¸c nhau gi÷a Function vµ ProcedureFunction lµ mét ch¬ng tr×nh con ®Ó tÝnh to¸n mét gi¸ trÞ nµo ®ã, bªn trong Function b¾t buéc ta ph¶i cã mét lÖnh g¸n gi¸ trÞ kÕt qu¶ cho tªn hµm:

Tªn_Hµm := <biÓu thøc>;Khi lËp tr×nh ta nªn quyÕt ®Þnh lµ sö dông Procedure hay Function:

66

Ch¬ng tr×nh con nªn lµ Function khi c¸c yªu cÇu sau tho¶ m·n:NÕu ta muèn nhËn l¹i duy nhÊt mét kÕt qu¶.· KÕt qu¶ ®ã ph¶i lµ kiÓu v« híng.Cßn nÕu kh«ng th× ch¬ng tr×nh con nªn lµ Procedure.VÝ dô ®¬n gi¶n lµ lËp ch¬ng tr×nh con tÝnh b×nh ph¬ng cña mét sè.NÕu dïng Function, ta cã:Function BinhPhuong(x: real): Real;

Begin BinhPhuong:= x*x;End;

NÕu dïng Procedure, ta cãProcedure BinhPhuong(x: Real; Var y: Real);

Beginy:= x*x;

End;C¶ hai trêng hîp x ®Òu lµ tham trÞ. Cßn nÕu dïng Function th× b¶n th©n tªn cña Function (BinhPhuong) ®îc dïng lµm tham biÕn ®Ó chøa kÕt qu¶ tÝnh to¸n nh biÕn y ë c¸ch dïng Procedure. H·y quan s¸t c¸ch tÝnh s = x3 +y3 + v3 +z3 trong hai trêng hîp:NÕu dïng Function:

S: = LapPhuong(x) + LapPhuong(y) +LapPhuong(v)+LapPhuong(z);Program TinhTong;Var

S,x,y,v,z:Real;Function LapPhuong(u:Real):Real;

Begin

67

LapPhuong:=u*u*u;End;

Beginx:=3; y:=5; v:=7;z:=2; s:=LapPhuong(x)+LapPhuong(y)+LapPhuong(v)+LapPhuong(z);Writeln('s=',s);End.NÕu dïng Procedure ta cã:Program TinhTong;Var

Tong,a,b,c,d:Real;Procedure LapPhuong(Var s:Real; x,y,v,z:Real);

BeginS:=x*x*x+y*y*y+v*v*v+z*z*z;

End;Begina:=3; b:=5; c:=7;d:=2;LapPhuong(Tong,a,b,c,d);Writeln('Tong=',Tong);End.Ta thÊy trong trêng hîp nµy dïng Function ng¾n h¬n v× ta cã thÓ lËp Function chØ víi mét biÕn. Ngoµi ra gi¶ sö nÕu trong ch¬ng tr×nh cßn cã thªm ®iÒu kiÖn lµ chØ céng vµo khi lËp ph-¬ng cña mét sè lµ d¬ng:NÕu dïng Function, ta chØ viÖc viÕt:

If LapPhuong(x) > 0 Then s:=s+LapPhuong(x)Cßn nÕu dïng Procedure th× phøc t¹p h¬n nhiÒu.4. BiÕn toµn côc, biÕn côc bé vµ tÇm ho¹t ®éng cña biÕn.

68

Nh ®· nãi ë trªn, c¸c biÕn ®îc khai b¸o trong ch¬ng tr×nh chÝnh ®îc gäi lµ c¸c biÕn toµn côc. C¸c biÕn nµy cã tÇm ho¹t ®éng trong toµn bé ch¬ng tr×nh. C¸c biÕn ®îc khai b¸o trong mét ch¬ng tr×nh con ®îc gäi lµ biÕn côc bé vµ chØ cã tÇm ho¹t ®éng trong ch¬ng tr×nh con ®ã hay trong c¸c ch¬ng tr×nh con kh¸c chøa trong nã mµ th«i. Khi ch¬ng tr×nh con kÕt thóc th× c¸c biÕn nµy còng mÊt t¸c dông theo. Gi¶ sö ta cã ch-¬ng tr×nh sau:Program TamHoatDong;Var a,b,c:Real;Procedure ThuTucA;

Varx,y:Real;

Procedure ThuTucB;Var v,z:Real;Begin...........End;

Begin.........End;

Begin.......End.Ta nhËn thÊy:BiÕn a,b,c: Cã tÇm ho¹t ®éng lµ toµn bé ch¬ng tr×nhBiÕn x,y : Cã tÇm ho¹t ®éng trong ThuTucA vµ tÊt nhiªn c¶ trong ThuTucB (v× ThuTucB n»m trong ThuTucA )

69

BiÕn v,z:Cã tÇm ho¹t ®éng chØ trong ThuTucB.5. TÝnh ®Ö quy cña ch¬ng tr×nh con.Trong Procedure hoÆc Function cã thÓ cã lêi gäi ®Õn chÝnh nã. TÝnh chÊt nµy ®îc gäi lµ tÝnh ®Ö quy.VÝ dô:Function DeQuy(<Tham biÕn>:<KiÓu>);

Begin.....DeQuy(......); (*Gäi ®Õn chÝnh nã*).......

End;

VÝ dô tÝnh giai thõa n! = 1.2.3...(n-1).nTa cã thÓ ®Þnh nghÜa:NÕu n=0 th× n!=1NÕu n>1 th× n!=(n-1)!.nVµ Function ®îc ®Þnh nghÜa ®Ö quy nh sau.:Function GiaiThua( n: Integer): Integer;Begin

If n = 0 Then GiaiThua:=1 Else GiaiThua:= n * GiaiThua(n - 1);End;

NÕu kh«ng dïng ®Ö quy th×:Function GiaiThua(n: Integer): Integer;Var

i, P: Integer;Begin

i :=1;

70

P :=1 ; (*P lµ biÕn côc bé ®Ó chøa kÕt qu¶ trung gian*)While i <= n DO

Begin k:=k*i; I:= i+1;End;GiaiThua:=P; (*g¸n kÕt qu¶ tõ biÕn P vµo tªn hµm*)

End;NÕu kh«ng dïng ®Ö quy, ta chØ cÇn hai « nhí côc bé i vµ P, cßn dïng ®Ö quy mçi lÇn dïng GiaiThua(n), m¸y ph¶i bè trÝ thªm mét « nhí chøa kÕt qu¶ GiaiThua trung gian. Nãi chung kh«ng ph¶i lóc nµo dïng ®Ö quy còng cã lîi.6. §¬n vÞ ch¬ng tr×nh (Unit)Trong Turbo Pascal cã nhiÒu ®¬n vÞ ch¬ng tr×nh (Unit) trong ®ã chøa nh÷ng ch¬ng tr×nh con mµ khi cÇn ®Õn ngêi lËp tr×nh chØ cÇn gäi chóng b»ng nh÷ng tªn cô thÓ. VÝ dô ®¬n vÞ CRT lµ Unit chøa c¸c ch¬ng tr×nh con xö lÝ mµn h×nh nh thñ tôc: GOTOXY, ClrScr,v.v... Printer lµ Unit chøa c¸c thñ tôc in nh Writeln (Lst,....). DOS Lµ Unit chøa c¸c hµm cña DOS. SYSTEM

lµ Unit chøa c¸c ch¬ng tr×nh con vÒ hÖ thèng.GRAPH lµ Unit vÒ ®å ho¹ v.v..Ngoµi ra Unit còng cã thÓ do chÝnh ngêi lËp tr×nh tù t¹o.Mét Unit do b¹n t¹o ra sÏ ®îc chøa trong mét file, gi¶ sö File cã tªn DonVi.PAS. CÊu t¹o tæng qu¸t cña Unit tù t¹o nh sau:

Unit DonVi; (*Tªn Unit ®Æt trïng víi tªn File*)Uses <Tªn c¸c unit cÇn dïng>;Interface

(* PhÇn khai b¸o c¸c thñ tôc vµ hµm *)Implementation

71

(*Khai b¸o d÷ liÖu vµ c¸c thñ tôc vµ hµm cña Unit nµy*)End. (*KÕt thóc Unit b»ng End cã dÊu chÊm*)

VÝ dô ta viÕt l¹i ch¬ng tr×nh gi¶i ph¬ng tr×nh bËc hai b»ng UnitUnit PTBHai;Uses Crt;Interface a,b,c,dx,x1,x2: Real;ImplementationProcedure Vao; Begin Write(' Vµo hÖ sè a='); Readln(a); Write(' Vµo hÖ sè b='); Readln(b);

Write(' Vµo hÖ sè c='); Readln(c); End;Procedure TinhDelta; Begin Dx:=b*b-4*a*c;

If dx>=0 Then DeltaKhongAm Else DeltaAm; End;Procedure DeltaKhongAm;

Begin x1:=(-b+Sqrt(dx))/(2*a);

x2:=(-b-Sqrt(dx))/(2*a);ClrScr;Writeln('x1=',x1);Writeln('x2=',x2);

End;Procedure DeltaAm;

72

Begin Writeln('Ph¬ng tr×nh v« nghiÖm'); End;End.C¸ch gäi Unit trong ch¬ng tr×nh:Program PhuongTrinhBacHai;Uses Crt, PTBHai;Begin

ClrScr;Vao;TinhDelta;

End.7.Ch¬ng tr×nh con lµ thµnh phÇn cña Turbo Pascal.C¸c ch¬ng tr×nh con lµ thµnh phÇn cña Turbo Pascal bao gåm:C¸c hµm sè häc: ABS, ARCTAN, COS, SIN, EXP, LN, SQRT,SQR.C¸c hµm v« híng: SUCC, PRED, ODD.C¸c hµm chuyÓn ®æi: CHR, ORD, ROUND, TRUNC.Hµm Frac(x) cho gi¸ trÞ lµ phÇn thËp ph©n cña xHµm Int(x) cho gi¸ trÞ lµ phÇn nguyªn cña xHµm Random, cho gi¸ trÞ lµ sè ngÉu nhiªn n»m trong kho¶ng 0

vµ 1Hµm Random(n), cho gi¸ trÞ sè thùc n»m trong kho¶ng 0 vµ n (n

lµ sè nguyªn)Thñ tôc Randomize, lµ thñ tôc ®¶m b¶o cho hµm Random ch¹y

víi mét sè ngÉu nhiªn. Nªn gäi thñ tôc nµy tríc khi gäi Random.

Hµm Upcase(ch), cho ký tù ch÷ lín t¬ng øng víi Ch. Hµm KeyPressed (trong Crt), hµm cho kÕt qu¶ True nÕu ta

gâ mét ký tù, False nÕu kh«ng gâ.

73

Hµm ReadKey (trong Crt), ®äc mét ký tù tõ bµn phÝm.Thñ tôc GotoXY ( X, Y); ( trong Crt)

Hai hµm Wherex, Wherey cho to¹ ®é con trá. Thñ tôc ClrScr; (trong Crt), xo¸ toµn bé mµn h×nh vµ ®Æt

con trá vµo vÞ trÝ phÝa trªn, bªn tr¸i. Thñ tôc ClrEof; (trong Crt), xo¸ toµn bé c¸c ký tù bªn ph¶i

con trá mµn h×nh, sau khi xo¸ con trá vÉn ë nguyªn t¹i chç.

Thñ tôc DelLine; (trong Crt), xo¸ toµn bé dßng mµn h×nh chøa con trá,sau ®ã dån c¸c dßng ë phÝa díi lªn.

Thñ tôc InsLine;(trong Crt*), xen mét dßng tr¾ng vµo mµn h×nh tõ vÞ trÝ con trá.

Thñ tôc LowVideo vµ NormVideo; (trong Crt), sau khi gäi LowVideo, mäi ký tù hiÖn ra mµn h×nh ®Òu cã ®é s¸ng yÕu cho tíi khi gäi thñ tôc NormVideo.

Thñ tôc Delay(Time);(trong Crt), t¹o ra kho¶ng thêi gian trÔ (kho¶ng ms).Time lµ mét sè nguyªn.Delay thêng ®îc dïng ®Ó lµm chËm ch¬ng tr×nh l¹i cho ta quan s¸t, kh¶o s¸t...

Thñ tôc Sound(F) vµ NoSound; t¹o ra ©m thanh víi tÇn sè lµ F ( F: sè nguyªn) cho ®Õn khi ta gäi NoSound.

Thñ tôc Halt (trong system), dõng ho¹t ®éng ch¬ng tr×nh vµ trë vÒ hÖ ®iÒu hµnh.

Thñ tôc Exit, khi gÆp thñ tôc nµy trong ch¬ng tr×nh con th× kÕt thóc ch¬ng tr×nh con ®ã vµ quay vÒ ch¬ng tr×nh gäi nã.

V.v.. VÝ dô 1 : Dïng Sound(F), Delay(n) vµ NoSound ®Ó ph¸t ©m, kÐo dµi vµ t¾t ©m thanhProgram AmThanh;

74

Uses Crt;Var i: Integer ;Begin For i:=100 To 1000 Do

BeginSound(i);Delay(50);Nosound;End;

End.VÝ dô 2: Dïng hµm Random ®Ó t¹o c¸c sè ngÉu nhiªn vµ dïng hµm Keypressed ®Ó ®iÒu khiÓn.Program TaoSoNgauNhien;Uses Crt;Procedure NgauNhien;Var

Ch: Char;Begin

Randomize;RepeatWriteln(Random);Until Keypressed;

End;BeginNgauNhien;End.C©u hái vµ bµi tËp:ThÕ nµo lµ biÕn toµn côc vµ biÕn côc bé cho vÝ dô?

75

Nãi râ sù kh¸c nhau gi÷a tham biÕn biÕn vµ tham biÕn trÞ?Khi nµo th× cÇn tham biÕn biÕn? Cho vÝ dô minh ho¹Khi nµo th× cÇn tham biÕn trÞ? Cho vÝ dô minh ho¹§Ó ®ì r¾c rèi trong viÖc truyÒn tham biÕn nhiÒu khi ta khai b¸o

biÕn toµn côc cho mäi ch¬ng tr×nh con, nhng ph¬ng ph¸p nµy cã h¹n chÕ g×? h·y chØ ra

X lµ biÕn toµn côc, trong thñ tôc A còng cã khai b¸o biÕn X (côc bé), ®øng trong A nÕu dïng X th× X ®ã lµ g×? (toµn côc hay côc bé)

Cho x©u a='0123456789' h·y lËp mét ch¬ng tr×nh con ®¶o thµnh a='9876543210', b¹n thö viÕt cho c¶ ®Ö quy vµ kh«ng ®Ö quy.

LËp tr×nh (theo kiÓu thñ tôc) gi¶i ph¬ng tr×nh bËc nhÊt hai Èn sau:ax+by=cdx+ey=f

76

Ch¬ng 10: KiÓu d÷ liÖu cã cÊu tróc- KiÓu m¶ng Chóng ta ®· lµm quen víi c¸c kiÓu d÷ liÖu: Integer, Char, Boolean, Real, LiÖt kª vµ Kho¶ng con. Trong Pascal tån t¹i c¸c kiÓu d÷ liÖu kh¸c ®îc t¹o ra tõ c¸c phÇn tö cã kiÓu d÷ liÖu ®¬n gi¶n trªn. D÷ liÖu ®ã ®îc gäi lµ d÷ liÖu cã cÊu tróc (v× nã cã tÝnh cÊu tróc). Trong Pascal cã 4 kiÓu d÷ liÖu cã cÊu tróc ®ã lµ: M¶ng (array), tËp hîp(set), b¶n ghi (record) vµ tÖp (file).

10.1 M¶ng (array) M¶ng lµ mét d÷ liÖu cã cÊu tróc bao gåm mét sè h÷u h¹n phÇn tö cã cïng kiÓu. Sè phÇn tö cña m¶ng ®îc x¸c ®Þnh khi ®Þnh nghÜa m¶ng. Mçi phÇn tö cña m¶ng ®îc biÓu diÔn th«ng qua tªn m¶ng cïng víi chØ sè n»m trong më vµ ®ãng ngoÆc vu«ng[]. Gi¶ sö ta cã 1 m¶ng 10 phÇn tö nguyªn ta ®Þnh nghÜa kiÓu m¶ng nh sau:Type

A = ARRAY [1..10] Of Integer;ViÖc khai b¸o mét biÕn m¶ng B ®îc viÕt nh sau:Var

B:A;Chó ý:1..10 lµ mét kho¶ng con, ý muèn nãi c¸c phÇn tö cña m¶ng dùa theo chØ dÉn ®ã.Ta còng cã thÓ khai b¸o trùc tiÕp biÕn B nh sau: Var

77

B: ARRAY [ 1..10] Of Integer;Mét sè vÝ dô vÒ ®Þnh nghÜa m¶ng nh sau.VÝ dô 1:Type

A=Array[1...5] of integer;B=Array[1...5] of char;Color = (Do, Vang, Xanh, Den);

VarX,Y: A;M,N: B ;K: Array[ 'A' ...'F'] Of Integer;P: Array[Color] Of Boolean;

A, B lµ hai kiÓu m¶ng gåm 5 phÇn tö ®îc ®¸nh sè thø tù tõ 1 ®Õn 5 th«ng qua kiÓu chØ dÉn lµ mét kho¶ng con: 1..5. C¸c phÇn tö cña A cã kiÓu nguyªn, cßn c¸c phÇn tö cña B cã kiÓu ký tù. X, Y lµ c¸c biÕn cã kiÓu A v.v...K lµ mét biÕn m¶ng gåm 6 sè nguyªn ®îc ®¸nh sè qua chØ dÉn lµ c¸c ch÷ c¸i tõ 'A' cho ®Õn 'F'. P lµ mét m¶ng gåm 4 phÇn tö kiÓu Boolean, c¸c phÇn tö ®îc ®¸nh dÊu qua chØ dÉn lµ tªn cña 4 mÇu s¾c. Khi khai b¸o m¶ng, kiÓu chØ dÉn chØ cã thÓ lµ kiÓu ®¬n gi¶n nh: ký tù, kho¶ng con, liÖt kª vµ Boolean. KiÓu chØ dÉn kh«ng ®îc lµ Real hoÆc Integer. NghÜa lµ sai nÕu viÕt.Type

A= Array[Real] of integer;PhÇn tö cña m¶ng ®îc x¸c ®Þnh qua biÕn m¶ng vµ gi¸ trÞ chØ dÉn ®Ó trong ngoÆc vu«ng. VÝ dô: K['A']:=12; X[2]:=3; P[Do]:=False; v.v..Sau ®©y la mét sè vÝ dô.

78

VÝ dô 1: Vµo 5 gi¸ trÞ cho m¶ng nguyªnProgram VaoMangNguyen;Uses Crt;Type

A=Array[1..5] of Integer;Var

I: Integer;X:A;

BeginFor I:=1 To 5 Do

Begin Write( ' X [',I, '] = ' ); (* T¹o chØ dÉn ®Ó biÕt mµ gâ

vµo*). Readln (X[I] ); (* Vµo sè nguyªn qua bµn

phÝm *).End;

End.Khi ch¬ng tr×nh ch¹y, m¸y sÏ hiÖn ra tªn phÇn tö vµ chê ta gâ vµo:

X [1] = 1 X [2] = 2X [3] = 4X [4] = 3X [5] = 2

VÝ dô 2: Tæng hai m¶ngProgram TongHaiMang;Uses Crt;Type

A=Array[1..5] of Integer;

79

VarI: Integer;Z, X, Y:A;

BeginClrScr;Writeln('Vµo m¶ng X');For I:=1 To 5 Do

Begin Write( ' X [',I, '] = ' ); (* T¹o chØ dÉn ®Ó biÕt mµ gâ

vµo*) Readln (X[I] ); (* Vµo sè nguyªn qua bµn

phÝm *)End;

Writeln('Vµo m¶ng Y');For I:=1 To 5 Do

Begin Write( ' Y [',I, '] = ' ); (* T¹o chØ dÉn ®Ó biÕt mµ gâ

vµo*) Readln (Y[I] ); (* Vµo sè nguyªn qua bµn

phÝm *)End;

Writeln('TÝnh tæng Z:=X+Y');For I:=1 To 5 Do Z[i]:=X[i]+Y[i]; (*TÝnh tæng hai m¶ng*)End.VÝ dô 3:Gi¶ sö ta muèn biÕt trong 50 lÇn gâ vµo phÝm ch÷ c¸i trªn bµn phÝm (ë chÕ ®é ch÷ nhá), cã bao nhiªu lÇn gâ vµo mçi lo¹i ch÷ c¸i nhá tõ 'a' ®Õn 'z'.

80

Program ChuongTrinhDem;Uses Crt; Var

I : integer;Chr : CharA: Array[ 'a'... 'z'] Of Integer;

BeginFor Chr := 'a' To ' z' Do A[Chr] :=0; (*Xo¸ m¶ng A *)For I:=1 To 50 Do

BeginReadln (Chr);A[Chr] :=A[Chr] + 1;(*®Õm sè lÇn xuÊt hiÖn *)End;

For Chr:= 'a' To 'z' DoIf A[Chr] > 0 ThenWriteln ('Chu ', Chr, ' = ' , A[Chr] : 3);

End.

10.2 XÕp m¶ng.ViÖc s¾p xÕp c¸c phÇn tö cña m¶ng t¨ng hoÆc gi¶m dÇn lµ mét viÖc hay x¶y ra trong cuéc sèng. Sau ®©y sÏ tr×nh bµy mét sè ph¬ng ph¸p s¾p xÕp m¶ng qua c¸c vÝ dô.Sau ®©y lµ vÝ dô vÒ viÖc xÕp m¶ng. §Çu tiªn ®em phÇn tö thø nhÊt lÇn lît so s¸nh víi c¸c phÇn tö tiÕp theo, nÕu nã lín h¬n th× ®em ®æi chç gi¸ trÞ cña hai phÇn tö so s¸nh. KÕt qu¶ sau lît ®Çu, phÇn tö ®Çu tiªn gi÷ gi¸ trÞ nhá nhÊt. TiÕp tôc vßng hai , ®em phÇn tö thø hai so s¸nh víi c¸c phÇn tö tiÕp theo ....Program XepMang;

81

Uses Crt;Const

N=10 ;Var

a: Array[1..N] Of Integer;tg: Integer ; (*tg lµ biÕn trung gian*)i,j: Integer;

BeginClrScr;(*Vµo m¶ng*)For i:=1 To n Do Begin

Write (' Vµo a[' ,i ,' ] = ');Readln (a[i]);End;

(* xÕp m¶ng lín dÇn*)For i:=1 To n-1 Do

For j:=i+1 To n DoBeginIf a[i] >a[j] Then

Begin(* ®æi chç phÇn tö cho nhau*) tg:=a[i];a[i]: = a[j];a[j]:= tg;

End;End;

(* In ra kÕt qu¶ *)For i:=1 To n Do Writeln (a[i]:5);End.

82

VÝ dô 2: Céng hai ma trËn cïng sè dßng vµ cïng sè cét: c(m,n) = a(m,n)+b(m,n)Program TongHaiMaTran;Constm =3; n=4; Var a, b, c: Array [1...m, 1...n ] Of Integer;

i, j, k: Integer;Begin(* Vµo d÷ liÖu cho ma trËn a*)For i:= 1 To m Do For j:= 1 To n Do Begin

Write( 'a[', i, ',' , j, '] =' );Readln (a[i, j] );

End;(* Vµo d÷ liÖu cho ma trËn b*)For i:= 1 To m Do For j := 1 To n Do Begin

Write( 'b[', i, ',' , j, '] =' );Readln (b[i,j] );

End;(* Céng hai ma trËn*)

For i:=1 To m Do For j:= 1 To n Do c[i,j]:=a[i,j]+b[i,j];(* HiÓn thÞ ma trËn C*)For i:=1 To m Do

83

Begin For j:= 1 To n Do Write (C [I, J] : 5 ); (*In mét hµng*) Writeln; End;End.Trong ch¬ng tr×nh trªn, viÖc vµo d÷ liÖu cho ma trËn ®îc tiÕn hµnh theo tõng dßng. VÝ dô 3: VÝ dô 2 ®îc viÕt l¹i theo kiÓu thñ tôc: Program TongHaiMaTran;Constm =3; n=4; Type

Mang= Array [1..m, 1..n] Of Real;Var a,b,c: Mang;Procedure VaoMang(Var x, y: Mang);Var i, j : Integer;Begin(* Vµo d÷ liÖu cho ma trËn x*)For i:= 1 To m Do For j:= 1 To n Do Begin

Write( 'x[', i, ',' , j, '] =' );Readln (x[i, j] );

End;(* Vµo d÷ liÖu cho ma trËn y*)For i:= 1 To m Do For j := 1 To n Do

84

Begin Write( 'y[', i, ',' , j, '] =' );Readln (y[i,j] );

End;

End;Procedure TongHaiMaTran(x,y:Mang; Var Tong:Mang);Var I,j: Integer;

BeginFor i:=1 To m Do

For j:= 1 To n Do Tong[i,j]:=x[i,j]+y[i,j];

End;BeginVaoMang(a,b);TongHaiMaTran(a,b,c);For i:=1 To m Do

Begin For j:=1 To n Do Write(c[i,j]; Writeln;End;

End.

C©u hái vµ bµi t©p:1. Vµo l¬ng cña 10 ngêi sau ®ã tÝnh tæng l¬ng?2. Vµo tªn cñ 10 sinh viªn sau ®ã xÕp tªn theo A,B,C..3. Vµo d÷ liÖu cho ma trËn cã d¹ng sau:

1 0 0 00 1 0 00 0 1 0

85

0 0 0 1Sau ®ã chuyÓn thµnh :0 1 1 11 0 1 11 1 0 11 1 1 0NghÜa lµ nÕu a[i,j]=1 th× a[i,j]:=0 vµ ngîc l¹i.4. T×m Max cña m¶ng mét chiÒu cã 10 phÇn tö5. T×m Max cña m¶ng A(10,12)6. Cho hai m¶ng mét chiÒu A vµ B h·y xÕp hai m¶ng ®ã t¨ng dÇn sau ®ã trén hai m¶ng ®ã thµnh m¶ng C theo trËt tù sau: a[1],b[1],a[2],b[2] v.v.7. Cho ma trËn thùc d¹ng A[1..10,1..10] h·y ®a vµo 100 thµnh phÇn cña nã lµ c¸c sè ngÉu nhiªn (Random), sau ®ã tÝnh tæng hai ®êng chÐo chÝnh. TÝnh tæng tÊt c¶ c¸c phÇn tö, trõ c¸c thµnh phÇn cña hai ®êng chÐo chÝnh.8. Gi¶i ph¬ng tr×nh bËc nhÊt hai Èn b»ng khai b¸o m¶ng

86

Ch¬ng 11: X©u ký tù (String)

11.1 §Þnh nghÜa x©u ký tù Mét x©u ký tù ®îc ®Þnh nghÜa b»ng tõ kho¸ String, theo sau lµ sè ký tù cùc ®¹i cã thÓ cã cña x©u ký tù, ®îc ®Æt trong ngoÆc vu«ng.

String[n]; víi n lµ ®é dµi cùc ®¹i cña x©u.VÝ dô 1:Type

Xau1= String [10];Xau2= String [40];Var

A:Xau1;B: Xau2;

Hay còng cã thÓ khai b¸o trùc tiÕp:Var

A:String[10];B:String[40];

X©u ký tù chiÕm sè byte b»ng sè ký tù cùc ®¹i khi khai b¸o, céng víi mét byte ®Çu tiªn chøa sè ký tù hiÖn cã cña x©u.VÝ dô 2:Var

a,b:String[15];Begin a:='Tin hoc';.....End. BiÕn a khai b¸o ë trªn ®îc g¸n gi¸ trÞ : a:='Tin hoc';

87

a trong trêng hîp nµy chØ cã ®é dµi 7 ký tù, mÆc dï ®é dµi cùc ®¹i cho phÐp cña biÕn a lµ 15. Nh ®· nãi ë trªn, byte ®Çu tiªn ®Ó biÓu diÔn ®é dµi x©u ký tù. V× ®é dµi x©u ký tù ®îc biÓu diÔn b»ng mét byte nªn ta thÊy ngay r»ng ®é dµi x©u ký tù chØ n»m trong kho¶ng tõ 1 ®Õn 255. Ngêi ta cã thÓ hiÓu String nh lµ mét m¶ng ký tù cã chØ sè ch¹y tõ 0 ®Õn ®é dµi cùc ®¹i, phÇn tö thø 0 chøa ®é dµi thùc cña x©u. Song m¶ng ký tù cã ®é dµi lu«n lu«n kh«ng ®æi. Ta cã thÓ truy nhËp vµo tõng ký tù cña mét x©u ký tù víi tªn biÕn vµ chØ sè ®Æt trong ngoÆc vu«ng nh khi truy nhËp vµo phÇn tö cña m¶ng. ChØ sè nµy cã thÓ ch¹y tõ 1 tíi ®é dµi cùc ®¹i cña x©u ký tù. VÝ dô:Writeln(a[3]) sÏ cho ch÷ 'n' (*v× a:='Tin hoc'*)NÕu vÞ trÝ ký tù ®ã n»m ngoµi ®é dµi thùc cña x©u th× phÇn tö ®ã cña x©u kh«ng x¸c ®Þnh. V× vËy khi truy nhËp vµo tõng phÇn tö cña x©u ta cÇn ph¶i kiÓm tra xem vÞ trÝ ®ã cã n»m trong kho¶ng ®é dµi thùc cña x©u hay kh«ng.

11.2 C¸c thao t¸c víi x©u ký tù1. PhÐp céng x©uTa dïng dÊu céng (+) ®Ó ghÐp hai x©u l¹i víi nhau. VÝ dô:

A:= 'Tin hoc'+' van phong' ;Trong biÕn a sÏ cã: a:='Tin hoc van phong'.2. So s¸nh x©u ký tùX©u ký tù cã thÓ ®îc dïng trong c¸c biÓu thøc so s¸nh:

Khi so s¸nh hai x©u ký tù, c¸c ký tù cña hai x©u ®îc so s¸nh tõng cÆp mét tõ tr¸i qua ph¶i theo gi¸ trÞ cña b¶ng m· ASCII.

88

NÕu hai x©u cã ®é dµi kh¸c nhau nhng sè ký tù ®Òu gièng nhau th× x©u cã ®é dµi ng¾n h¬n ®îc coi lµ bÐ h¬n. VÝ dô:

'Tin hoc van phong'<'Tin hoc van phong trinh do A'; Cho gi¸ trÞ TrueHai x©u ký tù b»ng nhau nÕu nh c¶ vÒ néi dung lÉn ®é dµi cña

chóng lµ gièng nhau.'Tin hoc van phong'='Tin hoc van phong'; cã gi¸ trÞ True.

3. Khai b¸o String lµm tham sè cho ch¬ng tr×nh con.T¬ng tù nh Array, String cã thÓ dïng lµm tham sè cho ch¬ng tr×nh con. VÝ dô:Type

a= String[10];b=String[20];

Varx: a;y: b;Function HamXau:a;Procedure ThuTucXau(St: b);......

Khi dïng String lµm tham sè cho ch¬ng tr×nh con, vÒ nguyªn t¾c ®é dµi cña tham sè thùc ph¶i b»ng ®é dµi cña tham sè h×nh thøc. VÝ dô lêi gäi sau lµ ®óng:ThuTucXau(b); v× b ( tham sè thùc sù) cã kiÓu lµ a trïng víi tham sè h×nh thøc lµ St còng cã kiÓu lµ a.4. C¸c thñ tôc vµ hµm chuÈn xö lý x©u ký tùTrong Turbo Pascal cã mét sè thñ tôc vµ hµm ®Ó xö lý x©u ký tù nh sau:

89

Length (St) lµ hµm cho ta ®é dµi cña x©u ký tù St.VÝ dô: víi St := 'Tin hoc'; th× length(St) cã gi¸ trÞ b»ng 7.

Delete (St, Pos,Num)Lµ thñ tôc xo¸ ®i Num ký tù tõ vÞ trÝ Pos trong x©u St.VÝ dô víi St :='Tin hoc';Sau khi gäi Delete(St, 2, 3);St sÏ cßn l¹i: Thoc.Insert (Obj, St, Pos)Lµ thñ tôc xen x©u ký tù Obj vµo x©u St t¹i vÞ trÝ Pos.VÝ dô víi St = 'Tin hoc'; Obj = ' 23';Sau khi gäi Insert(obj, St, 6); St sÏ thµnh ' Tin h23oc'.

Str (Value, St)Lµ thñ tôc biÕn ®æi gi¸ trÞ b»ng sè nguyªn hoÆc thùc Value thµnh mét d·y ký tù biÓu diÔn sè ®ã. C¸ch biÓu diÔn cña St sÏ ®îc qui ®Þnh do qui c¸ch cña Value.VÝ dô: I lµ mét sè nguyªn b»ng 52 víi qui c¸ch viÕt lµ 5 ký tù.Str (I:5, St) sÏ cho ra St = ' 52'; ( *5 ký tù*)gi¶ sö X lµ sè thùc vµ b»ng 123.5678901. Ta muèn biÓu diÔn X díi d¹ng 10 ký tù víi 5 sè thËp ph©n.Str(X :10:5, St) sÏ cho kÕt qu¶ St = ' 123.56789';Val(St, Value, Code )Lµ thñ tôc biÕn ®æi x©u ký tù St (biÓu diÔn mét sè nguyªn hoÆc thùc) thµnh mét sè nguyªn hoÆc thùc chøa trong value. Code lµ sè nguyªn ®Ó ph¸t hiÖn lçi: nÕu phÐp biÕn ®æi mµ ®óng th× Code cã gi¸ trÞ 0, nÕu sai do St kh«ng biÓu diÔn ®óng sè nguyªn hoÆc sè thùc, Code sÏ nhËn gi¸ trÞ b»ng vÞ trÝ cña ký tù sai trong x©u ch÷ St.VÝ dô X lµ biÕn thùc, St = '123.56', Z lµ biÕn nguyªn.

Val (St, X, Z) cho ta X = 123.56 vµ Z = 0

90

thÝ dô I lµ biÕn nguyªn, St = '123', Z lµ biÕn nguyªn.Val (St, I, Z ) cho ta I = 123 vµ Z =0;

nÕu St = ' 123X' tøc lµ St kh«ng biÓu diÔn ®óng sè nguyªn do cã ch÷ X th× Val (St, I, Z ) cho ta I kh«ng x¸c ®Þnh vµ Z = 4;VÝ dô: Var

St : String [4];K,I : Integer;

BeginRepeatWrite('Vµo x©u ký tù sè nguyªn St=');Readln (St); (* Vµo x©u ký tù sè nguyªn*)Val (St, I, K); (* ChuyÓn St thµnh sè nguyªn I*)If K <> 0 Then writeln (# 7, 'Lçi!' );Until z = 0;

End; Copy (St, Pos, n)

Hµm Copy sÏ nhËn n ký tù trong St tõ vÞ trÝ Pos.VÝ dô:St :='123456789 '; St1 lµ mét x©u ký tù kh¸c.St1: = Copy (St, 3, 2); sÏ cho St1 = '34';

Concat (St1, St2,..., StN);Lµ hµm ghÐp nèi tÊt c¶ c¸c x©u ký tù St1, St2, ..., StN thµnh mét x©u ký tù theo thø tù ®· viÕt. TÊt nhiªn nÕu tæng sè chiÒu dµi cña c¸c x©u ký tù lín h¬n 255 th× m¸y sÏ b¸o lçi. chóng ta còng cã thÓ dïng phÐp + ®Ó ghÐp nèi x©u ký tù.

Pos(Obj , Target)Lµ hµm cho ta vÞ trÝ ®Çu tiªn cña x©u Obj gÆp trong x©u Target.

91

NÕu kh«ng t×m thÊy , Pos cã gi¸ trÞ b»ng 0.VÝ dô: NÕu St = '123454545' vµ Obj ='45' th× Pos(obj,St) cho gi¸ trÞ b»ng 4

Pos('4X', St) cho gi¸ trÞ b»ng 0 v× kh«ng t×m thÊy.

Ch¬ng 12: KiÓu b¶n ghi (Record)

12.1 Record lµ g×?Chóng ta ®· biÕt vÒ d÷ liÖu cã cÊu tróc nh m¶ng (array). D÷ liÖu nµy ®Òu ®îc t¹o ra b»ng mét tËp hîp c¸c phÇn tö cã cïng kiÓu. VÝ dô c¸c phÇn tö cña mét Array[ 1..10] of Real lµ c¸c sè thùc hay Array [1..10] of String[12]lµ c¸c x©u ký tù.

92

Mét d÷ liÖu cã cÊu tróc míi víi c¸c phÇn tö cã kiÓu kh¸c nhau ®îc gäi lµ b¶n ghi (tiÕng Anh gäi lµ Record). Nh vËy Record lµ mét d÷ liÖu cã cÊu tróc mµ c¸c phÇn tö cã kiÓu kh¸c nhau, ®iÒu ®ã nãi lªn tÝnh linh ho¹t cña nã trong viÖc thiÕt lËp c¸c d÷ liÖu phong phó trong cuéc sèng.

12.2 M« t¶ Record§Ó m« t¶ A cã kiÓu Record víi c¸c biÕn trêng cã tªn lµ t1, t2,..,tn vµ kiÓu cña biÕn trêng t¬ng øng lµ: k1, k2,...kn, ta cã c¸ch viÕt tæng qu¸t nh sau:

TypeA = Record t1 : k1; t2 : k2; ........... tn : kn;End;

VÝ dô 1:Mét s¬ yÕu lý lÞch bao gåm: Hä tªn, Ngµy sinh, Chøc vô, V¨n ho¸, L¬ng v.v.. Ta m« t¶ nh sau:

TypeA = Record

HoTen : String[25];NgaySinh : String[8];VanHoa : String[10];Luong : Real;SoCon : Byte;

End;

93

Ta cã 5 trêng víi kiÓu: String, Real, Byte ®Ó m« t¶ mét nh©n sù nµo ®ã.VÝ dô 2:§Ó m« t¶ thêi gian (ngµy/Th¸ng/n¨m) ta m« t¶ mét Record nh sau:Type

ThoiGian= RecordNgay : 1..31;Thang: 1..12;Nam : Integer;

End;Vµ vÝ dô 1 cã thÓ viÕt l¹i nh sau:Type

ThoiGian= RecordNgay : 1..31;Thang: 1..12;Nam : Integer;

End;

TypeA = Record

HoTen : String[25];NgaySinh : ThoiGian;VanHoa : String[10];Luong : Real;SoCon : Byte;

End;Hay còng cã thÓ viÕt lång nhau nh sau:

Type

94

A = RecordHoTen : String[25];NgaySinh : Record

Ngay : 1..31;Thang: 1..12;Nam : Integer;

End;VanHoa : String[10];Luong : Real;SoCon : Byte;

End;

12.3 Vµo- Ra Record §Ó x¸c ®Þnh mét trêng cña Record, ta cÇn ph¶i dïng tªn biÕn Record,dÊu chÊm vµ tªn trêng cña Record. VÝ dô BanGhi.NgaySinh (BanGhi lµ biÕn Record, NgaySinh lµ biÕn trêng cña Record ®ã)VÝ dô 1:Vµo d÷ liÖu cho b¶n ghi cã tªn NhanSu sau:Program VaoRaBanGhi;Uses Crt;Type

A=Record HoTen : String[25];

NgaySinh : String[8];VanHoa : String[10];Luong : Real;SoCon : Byte;

End;

95

VarNhanSu: A;

BeginClrScr;

Write ( 'Vµo hä tªn ? ');Readln ( NhanSu.HoTen);Write ( 'Vµo ngµy sinh ? ');Readln ( NhanSu. NgaySinh);Write ( 'Vµo v¨n ho¸ ? ');Readln ( NhanSu. VanHoa);Write ( 'Vµo l¬ng ?');Readln ( NhanSu.Luong);Write ( 'Vµo sè con ?');Readln( NhanSu. SoCon);(*...................HiÓn thÞ d÷ liÖu trªn mµn h×nh..................

*)Writeln ( 'Hä tªn: ',NhanSu.HoTen);Writeln ( 'Ngµy sinh: ',NhanSu.NgaySinh);Writeln ( 'Trinh ®é v¨n ho¸:',NhanSu.VanHoa);Writeln ( 'BËc l¬ng:',NhanSu.Luong);Writeln ( 'Sè con:',NhanSu.SoCon);

End.ë trªn ta thÊy biÕn NhanSu ®îc viÕt lÆp qu¸ nhiÒu lÇn, do ®ã trong Turbo Pascal cã sö dông lÖnh With.... Do...®Ó rót gän qu¸ tr×nh ®ã, ch¬ng tr×nh trªn ®îc viÕt l¹i nh sau:Program VaoRaBanGhi;Uses Crt;Type

96

A=Record HoTen : String[25];

NgaySinh : String[8];VanHoa : String[10];Luong : Real;SoCon : Byte;

End;

VarNhanSu: A;

BeginClrScr;With NhanSu Do

BeginWrite ( 'Vµo hä tªn ? ');Readln (HoTen);Write ( 'Vµo ngµy sinh ? ');Readln ( NgaySinh);Write ( 'Vµo v¨n ho¸ ? ');Readln (VanHoa);Write ( 'Vµo l¬ng ?');Readln (Luong);Write ( 'Vµo sè con ?');Readln ( Con);

(*..................... HiÓn thÞ d÷ liÖu trªn mµn h×nh.............. *)Writeln ( 'Hä tªn: ',HoTen);Writeln ( 'Ngµy sinh: ',NgaySinh);Writeln ( 'Trinh ®é v¨n ho¸:',VanHoa);Writeln ( 'BËc l¬ng:',Luong);

97

Writeln ( 'Sè con:',SoCon);End;

End.

12.4 M¶ng c¸c RecordTa thÊy biÕn NhanSu ë trªn chØ "chøa" ®îc mét ngêi, vËy trong mét tæ chøc cã nhiÒu ngêi th× xö lý thÕ nµo? TÊt nhiªn ta ph¶i dïng m¶ng. VÝ dô 1:Program VaoRaBanGhi;Uses Crt;Const n=10;Type

A=Record HoTen : String[25];

NgaySinh : String[8];VanHoa : String[10];Luong : Real;SoCon : Byte;

End;B=Array[1..n] Of A;

VarNhanSu: B;I: Integer;

BeginClrScr;For I:=1 To n Do

With NhanSu[i] Do Begin

98

Write ( 'Vµo hä tªn ? ');Readln (HoTen);Write ( 'Vµo ngµy sinh ? ');Readln ( NgaySinh);Write ( 'Vµo v¨n ho¸ ? ');Readln (VanHoa);Write ( 'Vµo l¬ng ?');Readln (Luong);Write ( 'Vµo sè con ?');Readln ( SoCon);

(*........ HiÓn thÞ d÷ liÖu trªn mµn h×nh.......... *)Writeln ( 'Hä tªn: ',HoTen);Writeln ( 'Ngµy sinh: ',NgaySinh);Writeln ( 'Trinh ®é v¨n ho¸:',VanHoa);Writeln ( 'BËc l¬ng:',Luong);Writeln ( 'Sè con:',SoCon);

End;End.VÝ dô 2: TÝnh tæng sè con vµ tæng l¬ng cña m¶ng NhanSu trªn:Program VaoRaBanGhi;Uses Crt;Const n=10;Type

A=Record HoTen : String[25];

NgaySinh : String[8];VanHoa : String[10];Luong : Real;

99

SoCon : Byte;End;B=Array[1..n] Of A;

VarNhanSu: B;I: Integer;TongCon, TongLuong: Integer;

BeginClrScr;For I:=1 To n Do

With NhanSu[i] Do Begin

Write ( 'Vµo hä tªn ? ');Readln (HoTen);Write ( 'Vµo ngµy sinh ? ');Readln ( NgaySinh);Write ( 'Vµo v¨n ho¸ ? ');Readln (VanHoa);Write ( 'Vµo l¬ng ?');Readln (Luong);Write ( 'Vµo sè con ?');Readln ( SoCon);

End;TongCon:=0; TongLuong:=0;

For I:=1 To n DoWith NhanSu[i] Do

BeginTongCon:=TongCon+SoCon;TongLuong:=TongLuong+Luong;

100

End;Writeln('Tæng con:',TongCon);Writeln('Tæng l¬ng:',TongLuong);

End.C©u hái vµ bµi tËp:Mét nh©n viªn cã c¸c th«ng tin sau:Hä ®ÖmTªnNgµy sinh§Þa chØBËc l¬ngSè conLËp tr×nh cÊu tróc ®Ó xö lý c¸c viÖc sau:a. Vµo cho 10 nh©n viªnb. TÝnh tæng l¬ng cña toµn bé nh©n viªnc. S¾p xÕp l¬ng nh©n viªn gi¶m dÇnd. H·y in ra danh s¸ch nh©n viªn ®· xÕp theo vÇn A,B,C..Mét thÝ sinh cã c¸c th«ng tin sau:· Hä ®Öm· Tªn· Ngµy sinh· SBD· Khèi thi· Phßng thi· M«n to¸n· M«n lý· M«n hoa

101

· Tæng ®iÓm· Khu vùcH·y lËp tr×nh cÊu tróc chøa c¸c thñ tôc sau:a. Thñ tôc Vao ®Ó vµo b¶n ghi nh trªnb. Thñ tôc TinhTong ®Ó tÝnh tæng ®iÓmc. Thñ tôc XetTuyen ®Ó in danh s¸ch ®ç: §iÓm chuÈn >=16

nÕu khu vùc 3; §iÓm chuÈn>=14 nÕu khu vùc 2 vµ ®iÓm chuÈn >=12 nÕu khu vùc 1.

Ch¬ng 13: D÷ liÖu kiÓu tÖp (File)

13.1 Kh¸i niÖm vÒ tÖp TÖp lµ mét tËp hîp c¸c d÷ liÖu cã cïng kiÓu vµ liªn quan víi nhau, ®îc chøa trªn mét thiÕt bÞ nhí ngoµi cña m¸y tÝnh, th«ng thêng nhÊt lµ ®Üa mÒm hoÆc ®Üa cøng vµ ®îc x¸c ®Þnh qua tªn tÖp. T lµ kiÓu tÖp víi c¸c phÇn tö cã kiÓu x¸c ®Þnh ®îc m« t¶ nh sau: Type

T = File Of <KiÓu cña c¸c phÇn tö>;VÝ dô 1:Type

TenSoNguyªn= File Of Integer;TepSoThuc= File Of Real;TepBoolean = File Of Boolean;

NhanSu = RecordHoTen: String[30];

102

NgaySinh: String[8];L¬ng: Real;

End;TepNhanSu= File Of NhanSu;Var

F1: TepSoNguyªn;F2: TepSoThuc;TepLyLich: TepNhanSu;F3: File Of Array [1...15] Of Integer.

F3 lµ biÕn tÖp ®îc khai b¸o trùc tiÕp víi c¸c phÇn tö lµ m¶ng mét chiÒu, ®é dµi m¶ng lµ 15.KiÓu phÇn tö cña tÖp cã thÓ lµ bÊt kú (kiÓu v« híng, kiÓu m¶ng, b¶n ghi), trõ kiÓu tÖp nghÜa lµ kh«ng cã kiÓu tÖp cña tÖp.

13.2 CÊu tróc vµ ph©n lo¹i tÖp C¸c phÇn tö cña Array hoÆc Record cã thÓ ®îc truy cËp th«ng qua tªn biÕn vµ chØ dÉn hoÆc tªn trêng. C¸c phÇn tö cña tÖp kh«ng cã tªn, vËy truy cËp nh thÕ nµo? C¸c phÇn tö cña tÖp ®îc xÕp thµnh mét d·y, ë mçi thêi ®iÓm chØ cã thÓ truy cËp vµo mét phÇn tö cña tÖp th«ng qua gi¸ trÞ cña mét biÕn trung gian. BiÕn trung gian nµy ®îc dïng ®Ó lu gi¸ trÞ vÞ trÝ truy cËp, hay cßn gäi lµ con trá tÖp.TÖp ®îc kÕt thóc b»ng mét dÊu hiÖu ®Æc biÖt. Khi gÆp dÊu hiÖu nµy hµm Boolean Eof(f) (End of file) cho gi¸ trÞ True. NÕu con trá tÖp cha trá vµo phÇn tö nµy th× hµm Eof(f) cã gi¸ trÞ lµ False.TÖp cã hai lo¹i: TÖp truy cËp tuÇn tù (sequential access) vµ tÖp truy cËp trùc tiÕp (direct access).

103

ViÖc ®äc mét phÇn tö bÊt kú cña tÖp cã cÊu tróc tuÇn tù b¾t buéc ph¶i ®i qua c¸c phÇn tö tríc ®ã. Cßn muèn ghi hay thªm mét phÇn tö vµo tÖp, ta cÇn ph¶i ®Æt con trá tÖp vµo vÞ trÝ cuèi tÖp. KiÓu truy cËp nµy lµ ®¬n gi¶n nhng kÐm linh ho¹t. Bé nhí ngoµi ®iÓn h×nh t¬ng øng víi cÊu tróc tuÇn tù lµ b¨ng tõ. TÖp truy cËp trùc tiÕp lµ tÖp cã thÓ ®Æt con trá tÖp vµo mét phÇn tö bÊt kú cña tÖp th«ng qua sè thø tù cña phÇn tö ®ã. Kh«ng ph¶i bé nhí ngoµi nµo còng cã thÓ x©y dùng tÖp truy cËp trùc tiÕp. VÝ dô b¨ng tõ lµ lo¹i chØ cã thÓ truy cËp tuÇn tù. Cßn ®Üa mÒm vµ ®Üa cøng lµ lo¹i ngoµi viÖc x©y dùng tÖp tuÇn tù cßn cã thÓ t¹o ®îc truy cËp trùc tiÕp do ®Çu ®äc-ghi cã thÓ ®îc ®Æt vµo mét vÞ trÝ bÊt kú trªn ®Üa. Gièng nh b¨ng ca nh¹c muèn chän mét bµi ph¶i tua b¨ng qua l¹i (b¾t buéc truy cËp tuÇn tù ) víi ®Üa ca nh¹c viÖc chän mét bµi chØ viÖc cho m¸y biÕt chØ sè cña bµi ®ã (kh¶ n¨ng truy cËp trùc tiÕp).

13.3 Më tÖp tuÇn tù míi ®Ó ghi d÷ liÖu vµo.Ta chØ cã thÓ ghi d÷ liÖu vµo mét tÖp, sau khi më tÖp.ViÖc më tÖp th«ng qua hai thñ tôc ®i liÒn nhau nh sau:Assign(F, FileName);Rewrite(F);Trong ®ã F lµ biÕn tÖp vµ FileName lµ tªn tÖp. VÝ dô:Assign(F, 'SoNguyen.Dat');(* G¸n tªn tÖp SoNguyen.dat cho biÕn F*) Rewrite(F); (* Më tÖp ®Ó ghi d÷ liÖu *)Tªn tÖp theo qui ®Þnh chung gåm cã hai phÇn c¸ch nhau b»ng dÊu chÊm(.)PhÇn thø nhÊt lµ phÇn tªn riªng, cã thÓ víi sè ch÷ nhiÒu nhÊt kh«ng qu¸ 8. PhÇn thø hai lµ phÇn më réng gåm nhiÒu nhÊt kh«ng qu¸ 3.

104

Sau khi më tÖp, tÖp sÏ rçng. ViÖc ghi c¸c gi¸ trÞ vµo tÖp nhê vµo thñ tôc WRITE:

Write (BiÕn TÖp, C¸c gi¸ trÞ cÇn ghi vµo tÖp);VÝ dô: Write (F1, 3 , 5, I, k+1,15);Sau khi hoµn tÊt cña viÖc ghi d÷ liÖu lµ ®ãng tÖp l¹i b»ng thñ tôc

Close(BiÕn_TÖp); VÝ dô víi tÖp F ta viÕt: Close(F);VÝ dô 1:T¹o mét tÖp chøa c¸c sè lÎ tõ 1 ®Õn 99 víi tªn tÖp lµ: SoLe.dat.Program TaoTepSoLe;Var

I: integer;F: File of Integer;

BeginAssign (F, 'SoLe.dat');Rewrite (F);

I:=1;While i<=99 Do

Begin Write (F, i);

I:=i+2;End;

Close (F);End.VÝ dô 2:Mét tÖp cã thÓ ®îc dïng lµm tham sè cña ch¬ng tr×nh con, víi khai b¸o b¾t buéc ph¶i sau ch÷ Var tøc lµ tÖp ®îc dïng lµm tham biÕn biÕn.Program TaoTep;

105

TypeKieuTep = File of Integer;KieuTenTep= String[12];

VarBienTep:KieuTep;TenTep: KieuTenTep;

Procedure TaoFile (Var F: KieuTep; Ten: KieuTenTep);Var I: Integer;Begin Assign (F, Ten); Rewrite (F); I:=1;While i<=99 Do

Begin Write (F, i);

i:=i+2;End;

Close (F);Begin Write ('H·y gâ tªn tÖp ?'); Readln (TenTep); TaoFile (BienTep, TenTep);End.

13.4 §äc d÷ liÖu tõ mét tÖp tuÇn tù ®· cã. TÖp tuÇn tù cïng mét lóc kh«ng thÓ võa ghi l¹i võa ®äc ®îc. Nhng sau khi ghi d÷ liÖu xong vµ ®ãng l¹i, ta cã thÓ ®äc l¹i ®îc gi¸ trÞ d÷ liÖu ®ã trong tÖp.

106

Muèn ®äc d÷ liÖu th× ph¶i më tÖp ®ã, c«ng viÖc nµy nh sau:Assign(BiÕn TÖp, Tªn TÖp); (G¸n tªn tÖp cho biÕn tÖp)Reset (BiÕn TÖp); (më tÖp ®Ó ®äc)Vµ lÖnh ®äc d÷ liÖu tõ tÖp nh sau:Read (BiÕn TÖp, C¸c biÕn);ViÖc ®äc mét phÇn tö cña tÖp cßn cÇn ph¶i thö xem tÖp cã cßn phÇn tö hay kh«ng:ViÖc cuèi cïng sau khi kÕt thóc viÖc ®äc tÖp lµ ®ãng tÖp l¹i :Close(BiÕn TÖp); VÝ dô 1:Gi¶ sö tån t¹i mét tÖp cã tªn lµ SoLe.dat (mµ ta võa t¹o trªn) Ta ph¶i ®äc ra gi¸ trÞ cña nã vµ hiÖn lªn mµn h×nh.Program DocTep;Var a: Integer; F: File Of Integer;BeginAssign(F, 'SoLe.dat');Reset(F);While Not Eof(f) Do

BeginRead(F, a); (* §äc phÇn tö thø nhÊt cña tÖp ra biÕn

a*)Writeln(a);

End;Close (F);End.

107

VÝ dô 2: Copy tõ tÖp sang mét tÖp kh¸c. Ch¬ng tr×nh ®îc viÕt díi d¹ng thñ tôc nh sau:Program ProSaoTep;Type F= File of Integer;Var F1, F2 : F; (*F1 lµ tÖp nguån, F2 lµ tÖp ®Ých*) FileName1, FileName2: String[12];Procedure SaoTep; Var

I : Integer; Begin

Reset (F1);Rewrite (F2);

While Not Eof (F1) Do Begin Read (F1, i ); Write(F2,i); End; Close (F1); Close (F2);End;Begin

Write('Cho biÕt tÖp nguån?'); Readln(FileName1);Write(' Cho biÕt tÖp ®Ých?'; Readln (FileName2);Assign (F1 , FileName1);Assign (F2, FileName2);SaoTep;

End.

108

VÝ dô 3:TÖp mµ c¸c phÇn tö cña nã lµ d÷ liÖu cã cÊu tróc, gi¶ sö c¸c phÇn tö lµ Record: Program TepCoCauTruc;Uses Crt;Const n=10;Type

A=Record HoTen : String[25];

NgaySinh : String[8];VanHoa : String[10];Luong : Real;SoCon : Byte;

End;Var

F: File of A; NhanSu: A; I: Integer;

BeginClrScr;Assign(F, 'LyLich.dat');Rewrite(F);For I:=1 To n Do (*TÖp cã n=10 phÇn tö, mçi phÇn tö lµ mét b¶n ghi*)

With NhanSu Do Begin

Write ( 'Vµo hä tªn ? ');Readln (HoTen);Write ( 'Vµo ngµy sinh ? ');Readln ( NgaySinh);

109

Write ( 'Vµo v¨n ho¸ ? ');Readln (VanHoa);Write ( 'Vµo l¬ng ?');Readln (Luong);Write ( 'Vµo sè con ?');Readln ( SoCon);

Write(F, NhanSu);End;

Close(F);Assign(F,'LyLich.dat');Reset(F);While Not Eof(F) Do

BeginRead(F,NhanSu);With NhanSu Do Begin

Writeln('Hä tªn:',HoTen); Writeln('Ngµy sinh:',NgaySinh); Writeln('Tr×nh ®é v¨n ho¸:', VanHoa); Writeln('BËc l¬ng:',Luong); Writeln('Sè con:',SoCon);End;

End;End.

13.5 TÖp truy cËp trùc tiÕpVíi bé nhí ngoµi nh ®Üa mÒm, ®Üa cøng, ta cã thÓ tÝnh to¸n ®îc to¹ ®é cña mét phÇn tö bÊt kú cña tÖp. §iÒu ®ã cã nghÜa lµ ta cã thÓ truy cËp trùc tiÕp vµo tÖp mÆc dï c¸c phÇn tö cña

110

tÖp vÉn lµ d¹ng tuÇn tù, nghÜa lµ phÇn tö nä xÕp sau phÇn tö kia. Thñ tôc truy cËp trùc tiÕp nh sau:SEEK (F, n); Trong ®ã F lµ biÕn tÖp, n lµ sè thø tù cña phÇn tö trong tÖp.Víi thñ tôc nµy, m¸y sÏ ®Æt con trá tÖp vµo phÇn tö thø n. Sau ®ã ta dïng thñ tôc Read ®Ó ®äc phÇn tö ®ã ra hoÆc Write ®Ó ®Æt gi¸ trÞ míi vµo. VÝ dô 1:Gi¶ sö mét tÖp ®· chøa c¸c sè lÎ tõ 1 ®Õn 99 (nh ®· tæ chøc ë trªn). Ta ph¶i kiÓm tra xem phÇn tö thø thø 4 (vÞ trÝ ®Çu cã sè thø tù lµ 0, thø 2 lµ 1 v.v..) cña tÖp cã gi¸ trÞ b»ng 9 hay kh«ng, nÕu kh«ng th× ®a 9 vµo vÞ trÝ ®ã.Program KiemTra;Var F: File of Integer;

Ch : Char;i: Integer;

BeginAssign (F, ' SoLe.dat') ; Reset (F);Seek(F, 4); (*§Æt trá tÖp vµo vÞ trÝ thø 4*)Read (F, I);If i<>9 ThenBegin Seek (F, 4); (* §Æt l¹i cöa sæ vµo vÞ trÝ thø 4 *); Write (F, 9) ; (* Thay ®æi gi¸ trÞ cña tÖp*)End;

Close (F)End.

111

13.6 C¸c thñ tôc vµ hµm xö lý tÖpSau ®©y lµ mét sè hµm vµ thñ tôc hay dïng:· FileSize(F): Hµm cho sè phÇn tö cña tÖp F, FileSize nhËn

gi¸ trÞ 0 khi tÖp rçng, kh«ng cã phÇn tö nµo.· FilePos(F): Hµm cho vÝ trÝ hiÖn thêi cña con trá tÖp. PhÇn tö

®Çu tiªn cã sè thø tù 0.Mét tÖp ®· tån t¹i muèn thªm sè phÇn tö míi vµo vÞ trÝ cuèi cïng cña tÖp. Ta dïng lÖnh sau: Seek (F, FileSize(F));Mäi sù thay ®æi vÒ tÖp chØ ®îc gi÷ l¹i trªn ®Üa sau khi thùc hiÖn thñ tôc Close(F)· Erase(F): thñ tôc xo¸ file trªn ®Üa cã tªn ®îc ®Æc trng qua

biÕn F.VÝ dô muèn xo¸ tÖp cã tªn LyLich.Dat trªn ®Üa

Assign(F, 'LyLich.dat');Erase(F);

Rename(F, Str):Thñ tôc cho phÐp thay ®æi tªn tÖp. VÝ dô muèn ®æi tÖp cã tªn lµ LyLich.dat thµnh tÖp NhanSu.dat:

Assign(F, 'LyLich.dat');Rename(F, 'NhanSu.dat');

VÝ dô tæng hîp: Gi¶ sö ta ph¶i lµm bµi to¸n tÝnh l¬ng víi th«ng tin cho 1 ngêi nh sau: · Hä tªn· Ngµy sinh· L¬ng c¬ b¶n· Phô cÊp

112

· Tæng l¬ngTa cÇn lËp mét ch¬ng tr×nh cã kh¶ n¨ng thªm c¸n bé, tÝnh Tæng l¬ng, in ra danh s¸ch l¬ng c¸n bé. §Ó kh«ng mÊt d÷ liÖu mçi khi t¾t ®iÖn ta ph¶i tæ chøc d÷ liÖu theo tÖp.Ch¬ng tr×nh vµo d÷ liÖu cho tÖp:Program VaoDuLieuLuong;Uses Crt;Type

BangLuong= Record HoTen : String[30];

NgaySinh : String[8];LuongCoBan : Real;PhuCap : Real; (* lµ phÇn tr¨m cña l¬ng*)TongLuong : Real;

End;Var F : File Of BangLuong; A : BangLuong; Chr : Char; I : Integer;Begin ClrScr; Assign(F, 'TepLuong.dat'); Rewrite(F); Chr:= 'C'; i:=1;While (Chr = 'C') Or (Chr='c') Do Begin

With A Do

113

BeginWrite ('Vµo hä tªn cña ngêi thø ',i,'? ');Readln(HoTen);Write ('Vµo ngµy sinh cña ngêi thø ',i,'?

');Readln(NgaySinh);Write ('Vµo l¬ng c¬ b¶n cña ngêi thø ',i,'?

');Readln(LuongCoBan);Write ('Vµo phô cÊp cña ngêi thø ',i,'? ');Readln(PhuCap);Write(F,A);

End;i:=i+1;Writeln;Write('B¹n tiÕp tôc chø? C/K ');Readln(Chr);ClrScr;End;Close(F);End.Ch¬ng tr×nh tÝnh tæng l¬ngProgram CapNhatVaTinhTongLuong;Uses Crt;Type

BangLuong= RecordHoTen : String[30];NgaySinh : String[8];LuongCoBan : Real;PhuCap : Real; (* lµ phÇn tr¨m cña l¬ng*)TongLuong : Real;

End;Var F: File Of BangLuong;

114

A: BangLuong; Chr: Char; i,q: Integer;Begin Assign(F, 'FileLuong.dat'); Reset(F); ClrScr;

Write('B¹n cã cÇn thªm nh©n viªn kh«ng (C/K) ? ');Readln(Chr);While (Chr = 'C') Or (Chr='c') Do

Begin Seek(F,FileSize(F));

With A DoBegin

Write('Vµo Hä tªn ?'); Readln(HoTen);Write('Vµo ngµy sinh ?'); Readln(NgaySinh);Write('Vµo L¬ng c¬ b¶n?');

Readln(LuongCoBan);Write('Vµo phô cÊp?'); Readln(PhuCap);Write(F,A);Write('B¹n tiÕp tôc chø (C/K) ?'); Readln(Chr);

End; End;Reset(F);While Not Eof(F) Do Begin Read(F,A); A.TongLuong:=A.LuongCoBan+A.LuongCoBan*A.PhuCap; Write(F,A);

115

End;Reset(F);ClrScr;While Not Eof(F) Do Begin Read(F,A); Writeln(A.Hoten); Writeln(A.NgaySinh); Writeln(A.LuongCoBan); Writeln(A.PhuCap); Writeln(A.TongLuong); Readln; End; Close(F);End.

13.7 TÖp v¨n b¶n (Text Files)Khai b¸o c¸c biÕn tÖp F cã kiÓu Text:

Var F: Text;

C¸c phÇn tö cña tÖp Text ®îc t¹o thµnh tõ c¸c ký tù, nhng Text File kh¸c víi File of Char ë chç tÖp v¨n b¶n ®îc tæ chøc thµnh tõng dßng nhê cã dÊu hÕt dßng (End of Line) hay dÊu chÊm xuèng dßng. §ã lµ cÆp ký tù ®iÒu khiÓn: CR (Carriage Return : nh¶y vÒ ®Çu dßng, cã m· lµ 13 ) vµ LF (line Feed : nh¶y th¼ng xuèng dßng tiÕp theo, cã m· lµ 10). DÊu CR vµ LF ®îc dïng ®iÒu khiÓn viÖc xuèng ®Çu dßng tiÕp theo. VÝ dô ®o¹n v¨n b¶n sau:

LËp tr×nh Pascal23456

116

12Khi ghi vµo tÖp cã d¹ng nh sau:LËp tr×nh Pascal

CR LF 23456

CR LF 12 EOF

MÆc dï tÖp v¨n b¶n chøa c¸c ký tù nhng c¸c thñ tôc Read hoÆc Readln vµ Write hoÆc Writeln cã kh¶ n¨ng ghi vµ ®äc c¶ c¸c sè nguyªn, sè thùc, Boolean, String nhê sù chuyÓn ®æi thÝch hîp. 1. Ghi vµo tÖp v¨n b¶n. Chóng ta cã thÓ ghi c¸c gi¸ trÞ kiÓu Integer, Real, Boolean, String vµo tÖp v¨n b¶n b»ng lÖnh write hoÆc writeln. C¸ch ghi nµy cho phÐp chuyÓn c¸c gi¸ trÞ b»ng sè sang d¹ng ký tù. Cã ba d¹ng viÕt thñ tôc:Write(FileVar, Item1, Item2,..., ItemN);Writeln(FileVar, Item1, Item2,..., ItemN);Write(FileVar);· Thñ tôc Write(FileVar, Item1, Item2,..., ItemN); sÏ ghi c¸c gi¸

trÞ cña Item1, Item2,...ItemN, lµ c¸c biÕn, c¸c h»ng hoÆc biÓu thøc cã kiÓu ®¬n gi¶n nh Integer, Real, Char, String, Boolean vµo biÕn tÖp FileVar. C¸c Item1, Item2,...ItemN kh«ng nhÊt thiÕt ph¶i lµ cïng kiÓu.

VÝ dô:Var F :Text; M : Integer; X : Real; B : Boolean; Str: String[5];Ta cã thÓ viÕt: Write(F, 'Vi du:',M, X, B, Str,12, X+M );

117

Thñ tôc Write ®îc ghi vµo tÖp v¨n b¶n kh«ng chÊp nhËn Item lµ c¸c biÕn cã cÊu tróc (Array, Record vµ File) Thñ tôc Writeln(FileVar, Item1, Item2,...., ItemN); sÏ thùc

hiÖn viÖc ®a thªm dÊu hiÖu hÕt dßng vµo tÖp sau khi ®· ghi hÕt gi¸ trÞ c¸c biÕn.

Thñ tôc Writeln(FileVar) sÏ chØ thùc hiÖn ®a dÊu kÕt thóc dßng vµo tÖp.

§¬ng nhiªn thñ tôc Writeln(FileVar, Item1, Item2,...ItemN); cã thÓ ®îc thùc hiÖn b»ng c¸ch dïng thñ tôc write víi writeln ë cuèi cïng nh sau:

Begin Write(FileVar, Item1); Write(FileVar, Item2); ................................ Write(FileVar, ItemN); Writeln(FileVar);End;

C¸ch viÕt cã qui c¸chVÝ dô:NÕu I lµ nguyªn, F lµ biÕn tÖp: Write(F, I); SÏ ghi vµo tÖp F gi¸ trÞ nguyªn I víi ®óng sè ch÷ sè mµ nã cã.Write(F, I: n); SÏ bè trÝ n chç cho gi¸ trÞ nguyªn I vµ c¨n lÒ bªn ph¶i.NÕu R lµ biÓu thøc thùcWrite (F, R:n);Cho ra c¸ch biÓu diÔn sè thùc díi d¹ng cã sè mò E tøc lµ d¹ng viÕt dÊu chÊm ®éng, víi n chç ®îc c¨n lÒ bªn ph¶i. Sè ch÷ sè tõ ch÷ E trë ®i lu«n lu«n lµ 4 ký tù (ký tù E cïng víi hai ch÷ sè nguyªn cã dÊu). Bªn c¹nh ®ã lµ mét chç cho dÊu chÊm vµ mét ch÷ sè tríc dÊu chÊm. Tæng sè chç b¾t buéc ph¶i

118

cã lµ 6. Sè chç cßn l¹i trong qui c¸ch viÕt nµy lµ n - 6 ®îc giµnh cho c¸c ch÷ sè sau dÊu chÊm, cßn gäi lµ c¸c ch÷ sè cã nghÜa.VÝ dô: R:=12.3123456;

Write(F,R:10); cho ra 1.2345E+01Write (F, R:n:m); m¸y sÏ bè trÝ n chç cho sè thùc R trong ®ã cã m chç giµnh cho phÇn thËp ph©n (m ch÷ sè sau dÊu chÊm ) vµ c¨n lÒ bªn ph¶i. VÝ dô: R = 12.3456;Write(F, R:10:2) ; Cho ra 12.34 ( 10 chç víi 2 chç phÇn thËp ph©n)Write(F, R:15:9);cho ra 12.345600000NÕu C lµ ký tù (Char) Write(F, C:n); cho ra gi¸ trÞ cña C víi n chç ®îc c¨n lÒ bªn ph¶i. VÝ dô : C :='a';Write(F, C:1); Cho ra aWrite(F, C:3); Cho ra a ( cã 2 dÊu c¸ch tríc ch÷ a)NÕu S lµ mét StringWrite(F, S:n); cho ra gi¸ trÞ cña S víi n chç ®îc c¨n lÒ bªn ph¶i.VÝ dô:Write(F, 'Chao':1) Cho ra CWrite(F, 'Chao':2) Cho ra ChWrite(F, 'Chao':7) Cho ra Chao (thªm 3 dÊu c¸ch phÝa tr-íc) VÝ dô 1:Program TepVanBan;Uses Crt;Var

F: Text;X: integer;Y: real;

119

Str: String[20];Lo: Boolean;

BeginX:=12; Y:=13.56; Str: ='Tin hoc'; Lo:=True;Assign(F, 'TepText.txt');Rewrite(F);Write(F,X:8);Write(F,Y:7:3);Write(F,Str:10);Writeln(F,Lo);Close(F);

End.2. §äc d÷ liÖu tõ tÖp v¨n b¶n Chóng ta cã thÓ ®äc kh«ng nh÷ng c¸c ký tù tõ tÖp v¨n b¶n mµ cßn cã thÓ ®äc l¹i c¸c sè nguyªn, sè thùc, Boolean tõ tÖp v¨n b¶n th«ng qua c¸c thñ tôc sau:Read(FileVar, Var1, Var2, ...,VarN);Readln(FileVar, Var1, Var2, ...., VarN);Readln(FileVar);Trong ®ã Var1, Var2,..,VarN lµ c¸c biÕn thuéc kiÓu Char, String, Integer, Real, Boolean . Thñ tôc Readln (FileVar, Var1, Var2,...VarN); sÏ ®a cöa sæ tÖp sang ®Çu dßng tiÕp theo sau khi ®· lÇn lît ®äc c¸c biÕn t¬ng øng.Thñ tôc Readln (fileVar) sÏ ®a cöa sæ tÖp sang ®Çu dßng tiÕp theo mµ kh«ng ®äc g× c¶. Hµm chuÈn kiÓu Boolean EOLN(F) sÏ ph¸t hiÖn ra dÊu hÕt dßng EOLN (End of Line) cña tÖp F. Khi EOF(F)=TRUE th× EOLN còng cã gi¸ trÞ TRUE.VÝ dô 1: Xö lý v¨n b¶n

120

H·y lËp mét ch¬ng tr×nh ®Õm sè ch÷ trong mét tÖp v¨n b¶n F.Program DemChu; Var

F: Text;Ch: Char;I: integer;FileName: String[30];

Begin Write ('Cho tªn tÖp?'); Readln (FileName); Assign(F, FileName); Reset(F); I:=0;While Not EOF (F) Do

BeginWhile Not EOLN (F) DoRead(F, Ch);I:= I + 1;

End;Readln(F);

End;Writeln (' So chu la :', I);Close (F)End.§äc d÷ liÖu sè nguyªn, sè thùc tõ tÖp v¨n b¶n.Víi c¸c thñ tôc:Read(FileVar, Var1, Var2,..., VarN);Readln(FileVar, Var1, Var2,...VarN);Trong ®ã c¸c biÕn Var1, Var2,..., VarN lµ c¸c biÕn sè nguyªn hoÆc sè thùc. Thñ tôc Read vµ Readln sÏ tù ®éng biÕn ®æi mét

121

x©u ký tù thÝch hîp trong tÖp v¨n b¶n sang c¸c sè nguyªn vµ sè thùc.VÝ dô 2: Vµo tÖp v¨n b¶n (Sè nguyªn vµ thùc)Program VaoTepVanBan;Uses Crt;Var Chr:Char; F: Text;

X: integer;Y: real;

BeginAssign(F, 'TepText.txt');Rewrite(F);

Chr:='C';While (Chr='C') or (Chr='c') Do

BeginWrite('Vao x='); Readln(x);Write('Vao y=');Readln(y);Writeln(F,x,y);Write('Ban tiep tuc chu?(C/K)'); Readln(Chr);

End;Close(F);

End.Ch¬ng tr×nh ®äc sè nguyªn vµ thùc trong tÖp v¨n b¶nProgram DocTepVanBan;Uses Crt;Var F: Text;

X: Integer;

122

Y: Real;S: Real;

BeginClrScr;

Assign(F, 'TepText.txt');Reset(F);

While Not EOF(F) DoBegin While Not EOLN(F) Do

BeginRead(F,x,y);

S:=x+y; Writeln('S=',s);

End; Readln(F); Readln; End;

Close(F);End.Bµi tËp:1. T¹o mét tÖp chøa c¸c sè lÎ tõ 1 ®Õn 2001.2. T¹o mét tÖp chøa n sè nguyªn tè ®Çu tiªn3. T¹o mét tÖp chøa danh s¸ch häc viªn. Mçi häc viªn cã c¸c

th«ng tin sau: STT, Hä tªn, ngµy sinh, m· líp.4. H·y t¹o hai tÖp F1 vµ F2 chøa c¸c sè thùc. Sau ®ã t¹o mét tÖp

F3 b»ng c¸ch nèi F1 vµ F2 l¹i.(F3=F1,F2)5. Më tÖp F3 ë c©u 4, h·y thªm 10 sè thùc vµo sau tÖp6. B¹n h·y t¹o mét tÖp v¨n b¶n bÊt kú, sau ®ã in tÖp ®ã ra m¸y

in.

123

Ch¬ng 14: Mµn h×nh vµ chÕ ®é Graphic

14.1 Mét sè kh¸i niÖmMµn h×nh cã hai chÕ ®é hiÓn thÞ: chÕ ®é Text (v¨n b¶n) vµ chÕ ®é Graphic (®å häa). §èi víi m¸y vi tÝnh ngêi ta thiÕt kÕ ®Ó cïng mét mµn h×nh cã thÓ lµm viÖc ®îc hai chÕ ®é ®ã. Khi dïng c¸c thñ tôc Write, Writeln cã nghÜa lµ ta ®· hiÓn thÞ chÕ ®é Text. Mµn h×nh ë chÕ ®é nµy ®îc chia ra thµnh 80 cét ch÷, 25 dßng ch÷. Ngoµi ra cßn cã chÕ ®é ph©n gi¶i trung b×nh 40 cét x 25 dßng hoÆc ph©n gi¶i cao víi 132 cét , 43 dßng.ChÕ ®é ®å ho¹ thêng kh«ng chuÈn cña mäi ng«n ng÷ vµ còng kh«ng chuÈn cho mäi m¸y. V× viÖc vÏ lªn mµn h×nh phô thuéc vµo tõng lo¹i m¸y tÝnh, phô thuéc vµo tõng lo¹i mµn h×nh. §Ó cã thÓ vÏ hoÆc t« mÇu h×nh ¶nh lªn mµn h×nh ta ph¶i chuyÓn

124

m¹ch ®iÒu khiÓn sang chÕ ®é Graphic. Trong chÕ ®é nµy mµn h×nh ®îc lÊy ®iÓm lµm ®¬n vÞ (kh«ng lÊy ký tù nh trong chÕ ®é Text). Mçi ®iÓm trªn mµn h×nh ®îc gäi lµ mét Pixel (phÇn tö ¶nh). §é ph©n gi¶i cña mµn h×nh ®å häa ®îc ®o b»ng sè ®iÓm chiÒu ngang X vµ sè ®iÓm chiÒu däc Y. VÝ dô ®é ph©n gi¶i mµn h×nh VGA lµ 640 x 480 nghÜa lµ chiÒu ngang cã tèi ®a 640 ®iÓm, chiÒu th¼ng ®øng cã tèi ®a 480 ®iÓm.Trong chÕ ®é Graphic, täa ®é gèc lµ ®iÓm n»m ë gãc trªn bªn tr¸i cã täa ®é (0,0), cßn trong chÕ ®é Text, gèc täa ®é còng ë ®ã nhng ®é lín lµ (1, 1) .Mµn h×nh ®å häa cã rÊt nhiÒu u ®iÓm, vÝ dô nh: ta cã thÓ thay ®æi d¸ng ch÷, cì ch÷ ®Ó hiÓn thÞ lªn mµn h×nh, trong khi mµn h×nh v¨n b¶n, kiÓu ch÷ vµ cì ch÷ bÞ cè ®Þnh.Trong chÕ ®é ®å ho¹ cã mét biÕn lu täa ®é cña con trá hiÖn t¹i. VÞ trÝ nµy kh«ng nhÊp nh¸y nh con trá mµn h×nh ë chÕ ®é v¨n b¶n mµ lµ Èn. Nhê biÕn nµy mµ c¸c thñ tôc vÏ ®å häa biÕt ®iÓm xuÊt ph¸t b¾t ®Çu tõ ®©u. HiÖn nay phÇn lín mµn h×nh lµ SVGA ®i cïng víi vØ m¹ch ®å häa lµ c¸c ch¬ng tr×nh ®iÒu khiÓn m¹ch ®å häa. V× vËy b¹n kh«ng cÇn quan t©m nhiÒu ®Õn phÇn cøng nh tríc ®©y.

14.2 C¸c File tèi thiÓu cÇn cho chÕ ®é ®å ho¹.C¸c file phôc vô cho ®å ho¹ nh sau:· Graph.TPU,*.BGI,*.CHR

125

Víi Turbo Pascal 7.0, c¸c tÖp *.BGI vµ *. CHR ®îc ®Ó trong th môc C:\TP\BGI cßn tÖp GRAPH.TPU l¹i ®îc ®Ó trong th môc C:\TP\UNITS. Trong ®ã TP lµ th môc chÝnh ®Ó chøa Turbo Pascal.Víi Turbo Pascal 5.0, c¸c tÖp trªn cã thÓ ®Ó trong cïng mét th môc. C¸c file *.BGI (BGI : Borland Graphic Interface) lµ c¸c file chøa c¸c ®iÒu khiÓn t¬ng øng víi c¸c mµn h×nh kh¸c nhau nh:

CGA.BGI,EGAVGA.BGI,HERC.BGI ...

TÊt nhiªn nÕu dïng mét lo¹i mµn h×nh th× chØ cÇn Copy mét file BGI t¬ng øng. C¸c file *.CHR chøa ®iÒu khiÓn vÏ c¸c kiÓu ch÷ kh¸c nhau trong ®å ho¹. Nªn cã c¸c tÖp: GOTH.CHR(Ch÷ Gothic),LITT.CHR (Ch÷ Small Font),SANS.CHR ( Ch÷ Sans Serif),V.v..Sau ®©y lµ mét vÝ dô ®¬n gi¶n gióp ta lµm quen dÇn víi lËp tr×nh ®å ho¹:Program VeDuongThang;Uses Graph; (* Sö dông Graph.tpu*)Var

Gd, Gm: Integer;Begin{Khëi t¹o ®å ho¹}.Gd :=Detect;Initgraph(Gd, Gm, ' C:\Turbo5\BGI');{§Æt mÇu vµ vÏ ®êng th¼ng}SetColor(Red); (* X¸c lËp mÇu ®á*)

126

MoveTo (0,0); (* §a con trá vÒ täa ®é (0,0) *)LineTo(120,200); (* VÏ ®êng th¼ng tõ (0,0) ®Õn (120,200) *)Repeat Until Keypressed;CloseGraph; (*§ãng chÕ ®é ®å häa l¹i*)End.Trong ch¬ng tr×nh trªn ®ã 2 biÕn cã tªn lµ Gd (Graphic Driver-bé ®iÒu khiÓn ®å häa) vµ Gm (Graphic Mode- chÕ ®é ®å häa).

Th viÖn ®å häa cung cÊp cho b¹n thñ tôc tù ph¸t hiÖn vµ khëi t¹o nÕu ®Æt Gd:=Detect, nghÜa lµ giao cho ch¬ng tr×nh tù x¸c ®Þnh lÊy vØ ®å häa. NÕu Gd:=1 øng víi CGA v.v..(b¹n nªn dïng chÕ ®é tù ®éng)Sau khi khëi t¹o ®å häa, kÕt qu¶ hµm GraphResult cho ta biÕt t×nh tr¹ng chÕ ®é khëi t¹o cña Initgraph. Hµm nµy cã nhiÒu gi¸ trÞ ®îc ®Þnh nghÜa s½n nh sau.

Tªn gi¸ trÞ Gi¸ trÞ sè

KiÓu lçi ®îc ph¸t hiÖn

GrOk 0 OK, Kh«ng cã lçiGrNoInitgraph -1 Cha khëi t¹o ®îcGrNotDetected -2 Kh«ng cã phÇn cøng ®å ho¹GrFileNotFound -3 Kh«ng t×m thÊy c¸c file ®iÒu

khiÓn ®å häaCh¬ng tr×nh trªn cã thÓ viÕt l¹i nh sau:Program VeDuongThang;Uses Graph; (* Sö dông Graph.tpu*)Var

Gd, Gm: Integer;Begin{Khëi t¹o ®å häa}.Gd :=Detect;

127

Initgraph(Gd, Gm, ' C:\Turbo5\BGI');If GraphResult<> GrOk then Halt;{§Æt mÇu vµ vÏ ®êng th¼ng}SetColor(Red); (* X¸c lËp mÇu ®á*)MoveTo (0,0); (* §a con trá vÒ täa ®é (0,0) *)LineTo(120,200); (* VÏ ®êng th¼ng tõ (0,0) ®Õn (120,200) *)Repeat Until Keypressed;CloseGraph; (*§ãng chÕ ®é ®å häa l¹i*)End.Nh vËy sau khi dïng Initgraph, ta dïng ®Õn hµm GraphResult ®Ó nhËn biÕt râ kÕt qu¶ cã khëi t¹o ®îc hay kh«ng. ChØ duy nhÊt khi GraphResult = grOk ta míi cã thÓ tiÕp tôc c«ng viÖc vÏ ®å häa ®îc. Muèn biÕt lçi lo¹i g× ta dïng hµm GraphErrorMsg nh sau:Program LoaiLoi;Var

Gd,Gm,ErrorCode: integer;BeginGd :=Detect;Initgraph(Gd, Gm, 'C:\Turbo5\BGI');ErrorCode:=GraphResult;If ErrorCode <> grOk Then

BeginWriteln( 'Lçi :', GraphErrorMsg(ErrorCode));Readln;Halt(1);End;

SetColor(Red); MoveTo (0,0);

128

LineTo(120,200); Repeat Until Keypressed;CloseGraph; End.Trong ®ã GraphErrorMsg(ErrorCode) lµ mét hµm th«ng b¸o kÕt qu¶ lçi ®· cã s½n trong th viÖn ®å häa.

14.3 ThiÕt lËp mÇu ®å ho¹C¸c h»ng m« t¶ mÇu cã gi¸ trÞ nh sau:

Tªn mµu TiÕng ViÖt Gi¸ trÞBlack §en 0Blue Xanh 1Green Xanh l¸ c©y 2Cyan Xanh cÈm th¹ch 3Red §á 4Magenta TÝa 5Brown N©u 6LightBlue X¸m nhÑ 7DarkGray X¸m ®Ëm 8LightBlue Xanh nh¹t 9LightGreen Xanh l¸ c©y nh¹t 10LightCyan Xanh cÈm th¹ch nh¹t 11LightRed Hång 12LightMagenta TÝa nh¹t 13Yellow Vµng 14White Tr¾ng 15

129

14.4 C¸c thñ tôc vÏ ®iÓmThñ tôc vÏ ®iÓm lµ thñ tôc cë b¶n nhÊt v× ®iÓm t¹o nªn mäi vËt thÓ kh¸c.· PutPixel( x, y, Color): vÏ mét ®iÓm cã mÇu lµ Color t¹i

®iÓm cã täa ®é (X,Y).· GetPixel(X, Y): Hµm cho biÕt mÇu hiÖn t¹i ®iÓm (X, Y)

14.5 C¸c thñ tôc vÏ ®êng th¼ng· Line(x1, y1, x2, y2): lµ thñ tôc vÏ ®êng th¼ng nèi liÒn hai

®iÓm cã täa ®é t¬ng øng lµ (x1, y1) vµ (x2, y2). Sau khi vÏ xong, con trá mµn h×nh ë vÞ trÝ ®iÓm (x2,y2).

· LineTo(X,Y): lµ thñ tôc vÏ tõ täa ®é con trá hiÖn thêi tíi ®iÓm (X,Y).

· LineRel (dx, dy): lµ thñ tôc vÏ ®êng th¼ng tõ täa ®é con trá hiÖn thêi (X, Y) tíi ®iÓm míi cã täa ®é lµ (X+dX, Y+dY). Sau khi vÏ, con trá ®å häa rêi tíi ®iÓm míi (X+dX, Y+dY).

14.6 Thñ tôc vÏ ®êng trßnCircle(X, Y, R): lµ thñ tôc vÏ ®êng trßn cã t©m t¹i ®iÓm (X, Y), cã b¸n kÝnh R;

14.7 HiÓn thÞ v¨n b¶n trong chÕ ®é ®å ho¹Hai thñ tôc hiÖn v¨n b¶n trong mµn h×nh Graphic chÝnh x¸c ®Õn tõng ®iÓm nh sau:OutText(St): hiÖn néi dung cña x©u St t¹i vÞ trÝ hiÖn t¹i cña

con trá ®å häa.OutTextXY (X, Y, St): hiÖn néi dung cña x©u St t¹i täa ®é (X,

Y).

130

TÊt nhiªn OutTextXY t¬ng ®¬ng khi thùc hiÖn hai lÖnh:MoveTo (X, Y);OutText (St);

· SetTextStyle (Font, Direction, CharSize): sÏ x¸c lËp kiÓu ch÷ víi:

KiÓu Font ch÷:DefaultFont = 0 Lµ ph«ng ch÷ bit-map, ma trËn 8 x 8TriplexFont = 1 Lµ ph«ng ch÷ vect¬SmallFont = 2 Lµ ph«ng ch÷ vect¬SansSerifFont = 3 Lµ ph«ng ch÷ vect¬GothicFont = 4 Lµ ph«ng ch÷ vect¬

Híng hiÓn thÞ (Direction)HorizDir = 0 lµ n»m ngangVertDir = 1 lµ th¼ng ®øng

KÝch cì ch÷: CharSize nhËn gi¸ trÞ tõ 1 ®Õn 10, lµ hÖ sè phãng to ch÷.SetTextJustification (Horz, Vert );Lµ thñ tôc x¸c ®Þnh vÞ trÝ v¨n b¶n hiÖn ra theo hai thñ tôc OutText vµ OutTextXY. Tham sè Horz cã thÓ cã c¸c gi¸ trÞ sau:

LeftText = 0 V¨n b¶n xuÊt hiÖn ë bªn ph¶i con trá ®å häa.

CenterText= 1 V¨n b¶n xuÊt hiÖn víi t©m lµ vÞ trÝ con trá ®å häa.

RightText= 2 V¨n b¶n xuÊt hiÖn ë bªn ph¶i con trá.Cßn Vert lµ tham sè cã thÓ nhËn c¸c gi¸ trÞ sau:

BottomText = 0 V¨n b¶n xuÊt hiÖn ë phÝa díi cña con tráCenterText = 1 V¨n b¶n xuÊt hiÖn ë quanh con trá.

131

TopText = 2 V¨n b¶n xuÊt hiÖn ë phÝa trªn cña con trá.

14.8 Hµm x¸c ®Þnh ®é lín ®iÓm vµ ®é lín mµuGetMaxX cho täa ®é lín nhÊt cho phÐp cña XGetMaxY cho täa ®é lín nhÊt cho phÐp cña YGetMaxColor cho mµu lín nhÊt

14.9 VÏ h×nh ch÷ nhËt· Rectangle(x1, y1, x2, y2): vÏ h×nh ch÷ nhËt víi (x1, y1) lµ

täa ®é ®iÓm phÝa trªn bªn tr¸i, cßn x2, y2 lµ täa ®é ®iÓm phÝa díi bªn ph¶i.

· Bar (x1, y1, x2, y2): vÏ h×nh ch÷ nhËt song cã t« mÇu ®Æc ë trong.

14.10 X¸c ®Þnh mÉu t« vµ mµu vÏSetFillStyle(Pattern, Color);Trong ®ã mÉu t« lµ c¸c h»ng sè nguyªn cã tªn vµ c¸c gi¸ trÞ ®îc ®Þnh nghÜa s½n nh sau:

EmptyFill = 0;SolidFill = 1;LineFill = 2;LtSlashFill = 3;SlashFill = 4;BkSlashFill = 5;LtBkSlashFill = 6;HatchFill = 7;

132

XHatchFill = 8;InterLeaveFill= 9;WideDotFill =10;CloseDotFill = 11;

Khi sö dông h·y quan s¸t c¸c gi¸ trÞ cña Pattern tõ 0 tíi 11, ®Æt gi¸ trÞ cho Color, ta sÏ thÊy h×nh ¶nh cô thÓ.

14.11 Mét sè vÝ dô VÝ dô 1:Uses Graph, Crt;Var Gd, Gm: Integer;Begin Gd:=Detect; Initgraph(Gd, Gm, 'C:\TP\BGI'); if GraphResult <> grOk then Halt(1); MoveTo (50,50); (*DÞch con trá tíi ®iÓm (50,30)*) SetColor(Red);(*§Æt mÇu ®á ®Ó vÏ*) LineTo(250,50); (*VÏ h×nh ch÷ nhËt*) LineTo(250,150); LineTo(50,150); LineTo(50,50); OutTextXY (55,70, 'HINH CHU NHAT ');Repeat until Keypressed; { chê Ên mét phÝm nµo ®ã} CloseGraph;End.VÝ dô 2:Uses Graph;var

133

Gd, Gm:integer;X1, Y1, X2, Y2, i , Color:Integer;

BeginGd :=Detect;Initgraph (Gd, Gm, 'C:\tp\BGI');X1:=50; Y1 :=50;X2 :=200; Y2 :=200;Color :=8;SetBkColor (15);(*Mµu nÒn*)

For i :=1 to 11 do (*Xem c¸c mÉu t«*)Begin SetFillStyle (i, Color); Bar(X1, Y1, X2, Y2);Readln;End;CloseGraph;

End.

14.12 Kh¸i niÖm ViewportViewPort lµ mét vïng ch÷ nhËt trªn mµn h×nh dïng ®Ó thao t¸c c¸c thñ tôc ®å ho¹ trong ®ã, gièng nh lµ mét mµn h×nh nhá.SetViewPort (x1, y1, x2, y2,Clip): lµ thñ tôc x¸c lËp mét ViewPort trong mµn h×nh víi (x1, y1, x2, y2) lµ täa ®é cña ViewPort. Sau khi gäi thñ tôc nµy , täa ®é (0,0) cña tÊt c¶ c¸c thñ tôc vÏ h×nh sÏ lµ gãc trªn bªn tr¸i cña ViewPort chø kh«ng ph¶i lµ gãc trªn bªn tr¸i cña mµn h×nh. Tham sè Clip cã thÓ cã gi¸ trÞ True = ClipOn: cho phÐp hiÖn lªn c¸c nÐt vÏ vît ra ngoµi khung ViewPort, cßn Clipoff sÏ kh«ng cho hiÖn lªn c¸c nÐt vÏ vît ra ngoµi ViewPort.

134

VÝ dô ta muèn gèc täa ®é ë gi÷a mµn h×nh. Ta x¸c ®Þnh ViewPort nh sau:SetViewPort(GetMaxX Div 2, GetMaxY Div 2, GetMaxX, GetMaxY, ClipOn);ViewPort nµy sÏ n»m ë gãc phÇn t díi ph¶i, víi täa ®é cña nã ®îc tÝnh qua hµm GetMaxX vµ GetMaxY. Do ClipOn nªn cã thÓ vÏ cho toµn mµn h×nh.Turbo Pascal cßn cã nhiÒu thñ tôc ®å häa kh¸c, nÕu muèn b¹n cã thÓ tham kh¶o thªm ë nh÷ng cuèn s¸ch kh¸c.

14.13 Danh môc mét sè thñ tôc vµ hµm c¬ b¶nTurbo Pascal cã rÊt nhiÒu thñ tôc vµ hµm phôc vô cho ®å häa, sau ®©y lµ danh s¸ch mét sè c¸c thñ vµ hµm c¬ b¶n. Arc VÏ mét cung trßn cã gãc b¾t ®Çu , gãc kÕt thóc. Täa ®é t©m.Bar VÏ mét h×nh ch÷ nhËt cã t« bªn trong víi kiÓu t« vµ mÇu.Bar3D VÏ h×nh ch÷ nhËt theo kh«ng gian 3 chiÒu cã t« bªn trong Circle VÏ h×nh trßnClearDevice Xo¸ mµn h×nh. §a vÞ trÝ hiÖn t¹i vÒ gãc trªn - bªn tr¸i.ClearViewPort Xo¸ ViewPort.CloseGraph §ãng chÕ ®é ®å häa l¹i.Ellipse vÏ mét cung elipFillEllipse vÏ mét h×nh elip cã t« .GetBkColor NhËn l¹i mÇu nÒn hiÖn t¹iGetColor NhËn l¹i mÇu vÏ hiÖn t¹i.GetFillPattern NhËn l¹i mÉu t«.

135

GetgraphMode NhËn l¹i chÕ ®é ®å häa hiÖn t¹i.GetMaxColor NhËn l¹i gi¸ trÞ mÇu lín nhÊt cã thÓ cã cña chÕ ®é ®å häaGetMaxX NhËn l¹i gi¸ trÞ ®é ph©n gi¶i ngangGetMaxY NhËn l¹i gi¸ trÞ ®é ph©n gi¶i däcGetPixel NhËn l¹i mÇu cña ®iÓm vÏ.GetX NhËn l¹i täa ®é X cña vÞ trÝ ®å häa hiÖn t¹iGetY NhËn l¹i täa ®é Y cña vÞ trÝ ®å häa hiÖn t¹iGraphErrorMsg NhËn l¹i c¸c x©u ký tù th«ng b¸o lçi cho error code.GraphResult NhËn l¹i gi¸ trÞ b¸o lçi cña thao t¸c ®å häa cuèi cïng.Initgraph Khëi t¹o ®Ó vµo chÕ ®é ®å häa.Line vÏ mét ®o¹n th¼ng gi÷a 2 ®iÓm chØ râ LineRel vÏ mét ®o¹n th¼ng víi kho¶ng c¸ch t¬ng ®èi.LineTo VÏ mét ®o¹n th¼ng tõ ®iÓm hiÖn t¹i tíi ...MoveRel DÞch chuyÓn vÞ trÝ hiÖn t¹i tíi ®iÓm míi theo täa ®é t¬ng ®èiMoveTo DÞch chuyÓn vÞ trÝ hiÖn t¹i tíi ®iÓm míi.OutText ViÕt ra dßng v¨n b¶n t¹i vÞ trÝ ®îc chØ ra râ rµng.PutPixel VÏ mét ®iÓm ¶nh t¹i täa ®é X, YRectangle VÏ mét h×nh ch÷ nhËt víi mµu vµ nÐt vÏ hiÖn t¹iSetBkColor §Æt mµu nÒnSetColor §Æt mµu vÏ hiÖn t¹iSetFillStyle §Æt mÉu vµ mµu t«SetLineStyle §Æt kiÓu nÐt vÏSetTextJustify §Æt chÕ ®é c¨n lÒ cho OutText vµ OutTextXY.

136

SetTextStyle ThiÕt lËp ph«ng ch÷, híng, kÝch thíc viÕt ch÷ ®å häa.SetViewPort ThiÕt lËp khung nh×n ®å häaV.v..Bµi tËp:1. H·y lËp tr×nh ®Ó Lµm quen víi viÖc dïng c¸c thñ tôc:Bar, Bar3D,Circle, Ellipse.2. H·y lËp tr×nh ®Ó Lµm quen víi viÖc dïng c¸c thñ tôc:Line, LineRel, LineTo, MoveRel, MoveTo.3. H·y lËp tr×nh ®Ó Lµm quen víi viÖc dïng c¸c thñ tôc: PutPixel

(VÏ mét bÇu trêi sao mµ to¹ ®é lµ ngÉu nhiªn)4. H·y t¹o mét ViewPort tuú ý vµ ë to¹ ®é míi h·y lµm cho ch÷ A

chuyÓn ®éng ngÉu nhiªn trong ViewPort ®ã.5. VÏ mét ®êng trßn vµ cho ®êng trßn lóc Èn lóc hiÖn theo to¹

®é ngÉu nhiªn Néi dung TrangCh¬ng 1. C¸c thµnh phÇn c¬ b¶n cña ng«n ng÷..............4 1.1 Bé ký tù, tõ kho¸, tªn gäi ..................................................................................... 3

1.2 Ng¨n c¸ch c¸c lÖnh .................................................................. 5 1.3 Lêi chó thÝch (Comment) ........................................................ 5 1.4 CÊu tróc chung cña ch ¬ng tr×nh Pascal ................................. 5 1.5 C¸c b íc c¬ b¶n khi so¹n mét ch ¬ng tr×nh. .............................. 8

Ch ¬ng 2: C¸c kiÓu d÷ liÖu c¬ së ...................................... 9 2.1 KiÓu Logic (Boolean) ............................................................... 9 2.2 kiÓu sè nguyªn (Integer) ........................................................ 10 2.3 KiÓu sè thùc (Real) ............................................................... 11 2.4 KiÓu ký tù (character) ............................................................ 13 2.5 M« t¶ sè nguyªn víi Word, Shortint, Longint. ......................... 15 2.6 Më réng khai b¸o kiÓu sè thùc ............................................... 16

Ch ¬ng 3: Khai b¸o, biÓu thøc vµ c©u lÖnh ................... 16 3.1 Khai b¸o h»ng ........................................................................ 17 3.2 Khai b¸o biÕn ......................................................................... 15

137

3.3 §Þnh nghÜa kiÓu .................................................................... 18 3.4 BiÓu thøc (expression) .......................................................... 18 3.5 C©u lÖnh (Instruction, Statemment) ................................... 20 3.6 LÖnh hîp thµnh hay lÖnh ghÐp ............................................. 21

Ch ¬ng 4: Thñ tôc vµo, ra d÷ liÖu. ................................. 23 4.1 Thñ tôc hiÓn thÞ d÷ liÖu ra mµn h×nh: Write vµ Writeln ..... 23 4.2 Vµo d÷ liÖu: READ vµ READLN .............................................. 31

Ch ¬ng 5: C¸c c©u lÖnh ®iÒu kiÖn vµ c©u lÖnh chän . . 30 1.1 C©u lÖnh ®iÒu kiÖn IF... THEN...ELSE... ............................... 35 1.2. C©u lÖnh chän CASE...OF... ................................................. 38

Ch ¬ng 6: Thùc hµnh Turbo Pascal ................................. 41 6.1 Nªn dïng Turbo Pascal víi Version nµo? ................................. 41 6.2 B¾t ®Çu sö dông Turbo Pascal ............................................. 41 6.3 C¸c lÖnh so¹n th¶o v¨n b¶n. .................................................. 42 6.4 DÞch vµ ch¹y ch ¬ng tr×nh. ................................................... 44 6.5 Kh¶ n¨ng bao hµm tÖp .......................................................... 46

Ch ¬ng 7: KiÓu v« h íng liÖt kª vµ kiÓu ®o¹n con ........... 48 7.1 KiÓu v« h íng liÖt kª (Enumerated scalar type) ...................... 48 7.2 KiÓu kho¶ng con (Sub-range Type) ....................................... 51

Ch ¬ng 8: LÆp FOR, WHILE vµ REPEAT ............................ 52 8.1 Vßng lÆp cã sè b íc lÆp x¸c ®Þnh FOR... ............................... 52 8.2 Vßng lÆp cã sè b íc lÆp kh«ng x¸c ®Þnh Repeat vµ While. ... 55 8.3 LÖnh nh¶y v« ®iÒu kiÖn GOTO ............................................ 58

Ch ¬ng 9: Ch ¬ng tr×nh con (thñ tôc vµ hµm). ................ 60 9.1 Kh¸i niÖm vÒ ch ¬ng tr×nh con : (Sub-program) ................... 60 9.2 Procedure vµ Function ( Thñ tôc vµ hµm ) ............................. 60 9.3 ChuyÓn tham sè cho ch ¬ng tr×nh con. ................................ 64

Ch ¬ng 10: KiÓu d÷ liÖu cã cÊu tróc- KiÓu m¶ng ............ 77 10.1 M¶ng (array) ........................................................................ 77 10.2 XÕp m¶ng. ........................................................................... 81

C©u hái vµ bµi t©p: ........................................................ 85 Ch ¬ng 11: X©u ký tù (String) ......................................... 87

11.1 §Þnh nghÜa x©u ký tù ......................................................... 87 11.2 C¸c thao t¸c víi x©u ký tù ................................................... 88

Ch ¬ng 12: KiÓu b¶n ghi (Record) ................................... 92 12.1 Record lµ g×? ...................................................................... 92 12.2 M« t¶ Record ....................................................................... 93 12.3 Vµo- Ra Record .................................................................... 95

138

12.4 M¶ng c¸c Record .................................................................. 98 Ch ¬ng 13: D÷ liÖu kiÓu tÖp (File) ................................ 102

13.1 Kh¸i niÖm vÒ tÖp .............................................................. 102 13.2 CÊu tróc vµ ph©n lo¹i tÖp ................................................. 103 13.3 Më tÖp tuÇn tù míi ®Ó ghi d÷ liÖu vµo. ........................... 104 13.4 §äc d÷ liÖu tõ mét tÖp tuÇn tù ®· cã. ............................... 106 13.5 TÖp truy cËp trùc tiÕp ....................................................... 110 13.6 C¸c thñ tôc vµ hµm xö lý tÖp ............................................. 112 13.7 TÖp v¨n b¶n (Text Files) .................................................... 116

Ch ¬ng 14: Mµn h×nh vµ chÕ ®é Graphic ................... 124 14.1 Mét sè kh¸i niÖm ............................................................... 124 14.2 C¸c File tèi thiÓu cÇn cho chÕ ®é ®å ho¹. ....................... 125 14.3 ThiÕt lËp mÇu ®å ho¹ ....................................................... 129 14.4 C¸c thñ tôc vÏ ®iÓm .......................................................... 130 14.5 C¸c thñ tôc vÏ ® êng th¼ng ................................................ 130 14.6 Thñ tôc vÏ ® êng trßn ......................................................... 130 14.7 HiÓn thÞ v¨n b¶n trong chÕ ®é ®å ho¹ ............................ 130 14.8 Hµm x¸c ®Þnh ®é lín ®iÓm vµ ®é lín mµu ..................... 132 14.9 VÏ h×nh ch÷ nhËt .............................................................. 132 14.10 X¸c ®Þnh mÉu t« vµ mµu vÏ ............................................ 132 14.11 Mét sè vÝ dô .................................................................... 133 14.12 Kh¸i niÖm Viewport ......................................................... 134 14.13 Danh môc mét sè thñ tôc vµ hµm c¬ b¶n ....................... 135

139