– Giạo trçnh Láûp trçnh Pascal càn bn — – 43 — Trang 43 End. _________ o ² o _________ BI 7. CHỈÅNG TRÇNH CON: HM V TH TỦC Khi láûp trçnh, cọ nhỉỵng âoản chỉång trçnh cáưn dng nhiãưu láưn. Âãø trạnh viãûc viãút lải âoản ny, ta nãn chuøn âoản chỉång trçnh ny thnh mäüt chỉång trçnh con v mäùi láưn cáưn thỉûc hiãûn cäng viãûc âọ thç ta gi nọ thäng qua tãn. Chỉång trçnh con cn âãø máùu hoạ mäüt chỉång trçnh lm cäng viãûc no âọ. Ngỉåìi khạc dng chỉång trçnh con chè cáưn biãút truưn säú liãûu vo v láúy kãút qa ra nhỉ thãú no m khäng cáưn phi quan tám âãún thût toạn trong chỉång trçnh con nhỉ thãú no . Khi viãút nhỉỵng chỉång trçnh låïn, âãø dãù dng qun l, gåỵ räúi v hiãûu chènh chỉång trçnh, ta nãn phán chỉång trçnh thnh nhiãưu cäng viãûc âäüc láûp , mäùi cäng viãûc l mäüt chỉång trçnh con. Chỉång trçnh con gäưm cọ hai loải l HM (Function) v TH TỦC (Procedure). I. Hm v th tủc: Cáúu trục ca hm cọ dảng: FUNCTION Tãn _ Hm(ThamSäú1: Kiãøu; TS2: Kiãøu; . ) : Kiãøu; Var Cạc _ biãún _ củc _ bäü; Begin Cạc lãûnh tênh toạn; .; Tãn_Hm := Giạ_trë; End; Phỉång phạp gi hm: ta gi hm thäng qua tãn km theo tham säú ca hm nhỉ sau: Tãn _ hm(Danh sạch cạc tham säú thỉûc sỉû); Cáúu trục ca th tủc cọ dảng: PROCEDURE Tãn _ Th _ tủc(TS1: Kiãøu; TS2: Kiãøu; .; Var TS3: Kiãøu; Var TS4: Kiãøu; . ); Giaùo trỗnh Lỏỷp trỗnh Pascal cn baớn 44 Trang 44 Var caùc bióỳn cuỷc bọỹ; Begin Caùc lóỷnh; .; End; Phổồng phaùp goỹi thuớ tuỷc: Tón _ haỡm(Danh saùch caùc tham sọỳ thổỷc sổỷ); Sổỷ khaùc nhau cồ baớn giổợa haỡm vaỡ thuớ tuỷc laỡ haỡm traớ vóử mọỹt giaù trở thọng qua tón haỡm, haỡm coù thóứ tham gia vaỡo caùc bióứu thổùc tờnh toaùn coỡn thuớ tuỷc khọng cho giaù trở naỡo caớ . Khi taỷo haỡm, trong thỏn haỡm bao giồỡ cuợng coù giaù trở gaùn cho tón haỡm õóứ haỡm traớ vóử giaù trở naỡy khi õổồỹc goỹi. Caùc tham sọỳ khaùc sau tón haỡm vaỡ tón thuớ tuỷc goỹi laỡ caùc tham sọỳ hỗnh thổùc (hay coỡn goỹi laỡ õọỳi). Trong thuớ tuỷc, caùc tham sọỳ hỗnh thổùc coù hai loaỷi: caùc tham sọỳ õổồỹc khai baùo sau tổỡ khoaù Var goỹi laỡ tham sọỳ bióỳn, caùc sọỳ khai baùo khọng coù tổỡ khoaù Var ồớ trổồùc goỹi laỡ tham sọỳ giaù trở. Trong haỡm chố coù tham sọỳ giaù trở, tổùc khai baùo maỡ khọng coù tổỡ khoaù Var. Tham sọỳ thổỷc sổỷ laỡ caùc tham sọỳ duỡng trong lồỡi goỹi haỡm hay thuớ tuỷc. Danh saùch caùc tham sọỳ thổỷc sổỷ trong lồỡi goỹi haỡm phaới tổồng ổùng vồùi danh saùch caùc tham sọỳ hỗnh thổùc trong phỏửn khai baùo chổồng trỗnh con vaỡ chuùng phaới tổồng ổùng vóử kióứu. Trong thuớ tuỷc, caùc tham sọỳ giaù trở thổồỡng laỡ caùc bióỳn õóứ chổùa dổợ lióỷu õổa vaỡo thuớ tuỷc; caùc tham sọỳ bióỳn laỡ caùc bióỳn maỡ kóỳt quaớ tờnh toaùn cuớa thuớ tuỷc seợ chổùa vaỡo õoù khi ra khoới thuớ tuỷc, ta coù thóứ duỡng chuùng õóứ tờnh toaùn tióỳp. 4 Vờ duỷ caùch sổớ duỷng tham sọỳ giaù trở vaỡ tham sọỳ bióỳn: Var a, b, c, d : Integer; Procedure Chuyen(x, y: Integr; Var u, v: Integer); Begin { Tổỡ khoaù bừt õỏửu thuớ tuỷc Chuyen } x := 2 * x; y := 3 * y; u := 4 * u; v := 5 * v; End; Begin { Tổỡ khoaù bừt õỏửu chổồng trỗnh chờnh } a := 10; – Giạo trçnh Láûp trçnh Pascal càn bn — – 45 — Trang 45 b := 10; c := 10; d := 10; Chuyen(a, b, c, d); Write( ‘ a = ‘ , a, ‘. b = ‘ , b, ‘. c = ‘, c, ‘. d = ‘ , d ); Readln; End. 1 Kãút qu khi chảy chỉång trçnh: a = 10. b = 10. c = 40. d =50 II. Biãún ton củc, biãún củc bäü v viãûc truưn dỉỵ liãûu: Biãún ton củc l biãún khai bạo åí âáưu chỉång trçnh chênh, täưn tải trong sút thåìi gian lm viãûc ca chỉång trçnh. Ta cọ thãø sỉí dủng v lm thay âäøi giạ trë ca biãún ton củc nhåì cạc cáu lãûnh trong chỉång trçnh chênh cng nhỉ trong táút c cạc chỉång trçnh con. Biãún củc bäü l biãún l biãún khai bạo åí âáưu chỉång trçnh con. Chụng âỉåüc cáúp phạt bäü nhåï khi chỉång trçnh con âỉåc gi âãún v bë xoạ khi mạy thoạt khi chỉång trçnh con âọ. Biãún củc bäü cọ giạ trë trong chỉång trçnh con v táút c cạc chỉång trçnh con khạc nàòm trong chỉång trçnh con ny. Nãúu tãn biãún củc bäü ca mäüt chỉång trçnh con trng våïi mäüt tãn biãún ton củc thç mạy khäng bë nháưm láùn, mạy s dng hai ä nhåï khạc nhau âãø lỉu trỉỵ hai biãún, khi ra khi chỉång trçnh con, biãún củc bäü tỉû âäüng âỉåüc xoạ. Khi gàûp mäüt låìi gi âãún chỉång trçnh con, mạy s thỉûc hiãûn cạc bỉåïc sau: - Cáúp phạt bäü nhåï cho cạc âäúi, cạc biãún củc bäü. - Truưn giạ trë ca cạc tham säú thỉûc sỉû cho cạc tham säú giạ trë tỉång ỉïng, truưn âëa chè cạc tham säú thỉûc sỉû ỉïng våïi tham säú biãún cho cạc tham säú biãún ca th tủc. - Thỉûc hiãûn cạc lãûnh trong chỉång trçnh con, trong khi thỉûc hiãûn chỉång trçnh con, cạc biãún củc bäü v cạc tham säú giạ trë cọ thãø bë biãún âäøi nhỉng khäng nh hỉåíng âãún cạc biãún bãn ngoi. Trại lải, mi thay âäøi ca tham säú biãún trong chỉång trçnh con s kẹo theo sỉû thay âäøi ca tham säú thỉûc sỉû tỉång ỉïng (vç cọ sỉû truưn theo âëa chè). Do âọ, khi thoạt khi chỉång trçnh con, cạc tham säú thỉûc sỉû ỉïng våïi tham säú biãún váùn giỉỵ âỉåüc giạ trë måïi nháút do chỉång trçnh con tảo ra. - Thỉûc hiãûn xong cạc lãûnh ca chỉång trçnh con, mạy xoạ táút c cạc âäúi v cạc biãún củc bäü v tråí vãư lãûnh kãú sau nåi gi nọ. Giaùo trỗnh Lỏỷp trỗnh Pascal cn baớn 46 Trang 46 Vióỷc lỏỳy kóỳt quaớ thổỷc hióỷn chổồng trỗnh con nhổ sau: nóỳu laỡ haỡm thỗ lỏỳy kóỳt quaớ thọng qua tón haỡm, nóỳu laỡ thuớ tuỷc thỗ kóỳt quaớ ồớ tham sọỳ thổỷc sổỷ ổùng vồùi tham sọỳ bióỳn. Khi cỏửn lỏỳy duy nhỏỳt mọỹt giaù trở tổỡ chổồng trỗnh con thỗ ta lỏỷp mọỹt FUNCTION , khi cỏửn lỏỳy tổỡ hai giaù trở trồớ lón tổỡ chổồng trỗnh con hoỷc khọng lỏỳy giaù trở naỡo thỗ ta phaới lỏỷp PROCEDURE. 4 Vờ duỷ 1: Lỏỷp haỡm tờnh dióỷn tờch hỗnh thang. Nhỏỷp dổợ lióỷu cuớa hai thổớa ruọỹng hỗnh thang vaỡ tờnh tọứng dióỷn tờch hai thổớa ruọỹng. Var a1, b1, h1, a2, b2 , h2, s : Real; (************* Bat dau Function **************) Function DTHinhThang(a, b, h) : Real; Begin DTHinhThang := (a + b) * h / 2; End; (********* Bat dau chuong trinh chinh **********) Begin Write( Canh dai, ngan va cao cua thua ruong thu nhat: ); Readln(a1, b1, h1); Write( Canh dai, ngan va cao cua thua ruong thu hai: ); Readln(a2, b2, h2); s := DTHinhThang(a1, b1, h1) + DTHinhThang(a2, b2, h2); Writeln( Tong dien tich hai thua ruong = , s : 0 : 3); Readln; End. 4 Vờ duỷ 2: Lỏỷp haỡm tờnh ổồùc sọỳ chung lồùn nhỏỳt (USCLN). Sau õoù, duỡng haỡm naỡy õóứ tờnh USCLN vaỡ bọỹi sọỳ chung nhoớ nhỏỳt (BSCNN) cuớa hai sọỳ õổồỹc nhỏỷp tổỡ baỡn phờm. Var m, n, usc, bsc: Integer; (************ Function USCLN *************) Function USCLN(a, b : Integer): Integer; Var r : Integer; Begin While b < > 0 do Begin r := a mod b; Giaùo trỗnh Lỏỷp trỗnh Pascal cn baớn 47 Trang 47 a := b; b := r; End; { a hien tai la USCLN cua a va b ban dau } USCLN := a; End; (********* bat dau chuong trinh chinh *********) Begin Write( ' Nhap so thu nhat : ' ); Readln(m); Write( ' Nhap so thu hai: ' ); Readln(n); usc := USCLN(m, n); bsc := m * n div USCLN(m, n); Writeln( ' Uoc so chung lon nhat cua ', m, ' va ', n, ' la : ', usc); Writeln( ' Boi so chung nho nhat cua ', m, ' va ', n, ' la :', bsc); Readln; End. 4 Vờ duỷ 3: Lỏỷp mọỹt thuớ tuỷc õóứ tờnh õọửng thồỡi dióỷn tờch vaỡ thóứ tờch hỗnh cỏửu. Var r, s, v : Real; Reply : Char; (************** Function ***************) Procedure SVHinhCau( r : Real; Var s, v :Real); Begin s := 4 * pi * r * r; v := 4 * pi * r * r * r / 3; End; (******** bat dau chuong trinh chinh ********) Begin Repeat Write( Nhap ban kinh hinh cau : ); Readln(r); SVHinhCau(r, s, v); Writeln( Dien tich = , s : 0 : 4, . The tich = , v : 0 :4 ); Write( Ban co tiep tuc khong ?(C/K) ); Readln(Reply); – Giạo trçnh Láûp trçnh Pascal càn bn — – 48 — Trang 48 Until Upcase(Reply) = ‘K’; End. III. Cạc hm v th tủc thỉåìng dng ca Unit CRT: Unit CRT cọ nhiãưu hm, th tủc dng âãø âiãưu khiãøn mn hçnh, bn phêm v ám thanh. Nọ cho phẹp måí cạc cỉía säø våïi cạc mu sàõc khạc nhau, thay âäøi mu ca cạc dng chỉỵ trãn mn hçnh, giụp cho viãûc trçnh by mn hçnh âẻp v háúp dáùn hån, täø chỉïc häüi thoải giỉỵa ngỉåìi v mạy thûn tiãûn. Khi dng cạc hm v th tủc ny, åí âáưu chỉång trçnh chênh cáưn phi cọ khai bạo USES CRT; Cạc th tủc ca Unit CRT gäưm: 1. Th tủc ClrScr: Xoạ mn hçnh v âỉa con tr vãư vë trê (1,1) trãn mn hçnh. Mn hçnh màûc âënh âỉåüc chia thnh 25 dng v 80 cäüt. Cäüt âáưu tiãn âạnh säú 1, dng âáưu tiãn âạnh säú 1. 2. Th tủc ClrEOL: Xoạ tỉì vë trê con tr âãún cúi dng hiãûn hnh. Sau khi thỉûc hiãûn xong, con tr âỉïng ngay vë trê trỉåïc khi gi thỉûc hiãûn th tủc. 3. Th tủc DelLine: Xoạ dng con tr âang âỉïng, cạc dng sau s âỉåüc chuøn lãn trãn mäüt dng. 4. Th tủc InsLine: Chn dng träúng vo vë trê hiãûn hnh ca con tr trãn mn hçnh. 5. Th tủc GotoXY(x, y: Byte): Âỉa con tr âãún, cäüt thỉï x, dng thỉï y. 6. Hm WhereX: Byte Cho giạ trë kiãøu byte cho biãút con tr âang åí cäüt no. 7. Hm WhereY: Byte Cho giạ trë kiãøu byte cho biãút con tr âang åí dng no. 8. Th tủc Sound(Hz : Word): Phạt ám thanh cọ táưn säú Hz cho âãún khi gàûp th tủc NoSound thç dỉìng lải. 9. Th tủc NoSound: Tàõt loa phạt ám thanh åí mạy. 10. Th tủc TextBackGround(Color : Byte): – Giạo trçnh Láûp trçnh Pascal càn bn — – 49 — Trang 49 Chn mu nãưn trong chãú âäü vàn bn (Chãú âäü màûc âënh khi chảy Pascal). Color cọ giạ trë tỉì 0 âãún 7. 11. Th tủc TextColor(Color : Byte): Chn mu ca k tỉû trçnh by trãn mn hçnh. Color cọ giạ trë tỉì 0 âãún 15 ỉïng våïi 16 mu. Cạc hàòng xạc âënh mu nãưn v chỉỵ cho biãún Color nhỉ sau: Black (âen) = 0 DarkGray (xạm) = 8 Blue (xanh dỉång) = 1 LightBlue (xanh dỉång nhảt) = 9 Green (xanh lủc) = 2 LightGreen (xanh lủc nhảt) = 10 Cyan (lam) = 3 LightCyan (lam nhảt) = 11 Red (â) = 4 LightRed (â nhảt) = 12 Magenta (têm) = 5 LightMagenta (têm nhảt) = 13 Brown (náu) = 6 Yellow (vng) = 14 LightGray (xạm nhảt) = 7 White (tràõng) = 15 Ư Ghi chụ: Ta cọ thãø dng cạc hàòng giạ trë trãn bàòng chỉỵ hồûc säú âãưu âỉåüc. Vê dủ: TextColor(4) hồûc TextColor(Red) dãưu cọ nghéa l chn chỉỵ mu â. Chn chỉỵ mu xanh v chỉỵ nháúp nhạy: TextColor(Green + Blink). 12. Hm KeyPressed: Boolean Hm kiãøm tra xem cọ phêm no âỉåüc áún trãn bn phêm hay khäng. Nãúu cọ hm tr vãư giạ trë True, nãúu khäng hm cho giạ trë False. 13. Hm ReadKey: Char Hm ny chåì âc mäüt k tỉû tỉì bn phêm (k tỉû âỉåüc nháûp khäng âỉåüc hiãøn thë trãn mn hçnh). Cạc phêm trãn bn phêm nhỉ A, B, C, . 1, 2, 3, 4,.v.v. chè tảo mäüt m khi âỉåüc áún, cn cạc phêm chỉïc nàng nhỉ F1, F2, ., Home, End, Alt, Ctrl, Ctrl - Home, . tảo hai m khi âỉåüc áún, trong âọ m thỉï nháút cọ giạ trë 0. Âãø nháûn biãút mäüt hay mäüt täø håüp phêm báút k âỉåüc áún, ta phi dng mäüt biãún kiãøu Char våïi hai láưn thỉûc hiãûn hm ReadKey nhỉ sau: Ch := ReadKey; If Ch = #0 then Ch := Readkey; Sau âáy l mäüt säú phêm âàûc biãût v täø håüp phêm hay dng: Esc 27 â 0/80 Tab 9 ß 0/75 Enter 13 à 0/77 Home 0/71 F1 0/59 End 0/79 F2 0/60 Giaùo trỗnh Lỏỷp trỗnh Pascal cn baớn 50 Trang 50 PageUp 0/73 F10 0/68 PageDown 0/81 Ctrl - F1 0/94 ỏ 0/72 Ctrl - F2 0/95 4 Vờ duỷ 1: Dởch chuyóứn con troớ vaỡ in mọỹt sọỳ doỡng chổợ trón maỡn hỗnh. Uses CRT; Var x, y : Integer; Begin ClrScr; x := 20; y := 3; GotoXY(x + 2, y); Write( PASCAL ); { In tu cot 22 dong 3 } GotoXY(x - 2, y + 2); Write( BAN HAY DEN VOI ); { In tu cot 18 dong 5 } GotoXY(x, y + 3); Write( TURBO PASCAL ); { In tu cot 20 dong 6 } GotoXY(WhereX + 2, WhereY); Write( 7.0 ); { sau TURBO PASCAL in sọỳ 7.0 } Readln; End. 4 Vờ duỷ 2: Nhỏỷn bióỳt phờm naỡo õổồỹc ỏỳn. Uses CRT; Var Ch : Char; Begin Write( Ban hay an mot phim bat ky : );a Ch := ReadKey; If Ch : = #0 then Begin Ch := Readkey; Writeln( Ban vua an mot phim dac biet co ma = , Ord(Ch)); End Else Writeln( Ban vua an mot phim co ma ASCII = , Ord(Ch)); Readln; Giaùo trỗnh Lỏỷp trỗnh Pascal cn baớn 51 Trang 51 End. 4 Vờ duỷ 3: Vióỳt chổồng trỗnh hióứn thở 16 doỡng vồùi nọỹi dung bỏỳt kyỡ, taỷi õỏửu mọựi doỡng hióứn thở sọỳ thổù tổỷ cuớa doỡng õoù õọửng thồỡi hióứn thở maỡu cuớa doỡng õoù theo sọỳ thổù tổỷ (theo baớng maỡu). Uses CRT; Var i : Integer; Begin For i := 0 to 15 do Begin TextColor( i ); Writeln( i, la ma so mau cua dong nay. ); End; Readln; End. _________ o o _________ . thoạt khi chỉång trçnh con âọ. Biãún củc bäü cọ giạ trë trong chỉång trçnh con v táút c cạc chỉång trçnh con khạc nàòm trong chỉång trçnh con ny. Nãúu tãn biãún. cạc chỉång trçnh con. Biãún củc bäü l biãún l biãún khai bạo åí âáưu chỉång trçnh con. Chụng âỉåüc cáúp phạt bäü nhåï khi chỉång trçnh con âỉåc gi âãún