Bài giảng Ngôn ngữ lập trình Pascal - Nguyễn Ánh

pdf 125 trang huongle 130
Bạn đang xem 20 trang mẫu của tài liệu "Bài giảng Ngôn ngữ lập trình Pascal - Nguyễn Ánh", để tải tài liệu gốc về máy bạn click vào nút DOWNLOAD ở trên

Tài liệu đính kèm:

  • pdfbai_giang_ngon_ngu_lap_trinh_pascal_nguyen_anh.pdf

Nội dung text: Bài giảng Ngôn ngữ lập trình Pascal - Nguyễn Ánh

  1. TRNGăĐIăHCăPHMăVĔNăĐNG KHOA CÔNG NGH THÔNG TIN BÀI GIẢNG: NGÔN NGỮ LẬP TRÌNH PASCAL Nguyn Ánh Tháng 12/2013
  2. Mục lục LIăGIIăTHIU 4 CHNGă 1.ă CÁCă KINă THCă CHUNGă Vă NGỌNă NGă LPă TRÌNHă PASCAL 6 1.1.ăGiiăthiu 6 1.2.ăCácăbcălpătrìnhăgiiăbƠiătoán 6 1.3.ăCácăkháiănimăăvƠăcácăthƠnhăphầnăcăbn 7 1.4.ăCuătrúcătổngăquátăcaămtăchngătrình: 8 CHNGă2.ăCÁCăKIUăDăLIUăĐNăGIN 10 2.1.ăTổngăquanăvăcácăkiuădăliuătrongăTurboăPascal 10 2.2.ăCácăkiuădăliuăđnăginăchuẩn 11 2.3.ăKiuălităkêăvƠăkiuăđonăcon 13 2.4. CácăhƠmăvƠăthătụcăchuẩn 15 BÀIăTPăCHNGă2. 16 CHNGă3.ăBIUăTHCăVÀăCỂUăLNHăĐNăGIN 18 3.1.ăBiuăthc 18 3.2.ăCơuălnh 19 BÀIăTPăCHNGă3. 23 CHNG 4.ăCỂUăLNHăCịăCUăTRỎC 27 4.1.ăLnhăghép 27 4.2.ăLnhăIFă(cơuălnhărănhánh). 27 4.3.ăLnhăCASEă(cơuălnhălựaăchn) 29 4.4.ăLnhăFORă(Lặpăbitătrcăsălần). 31 4.5.ăLnhăREPEATă(lặpăviăsălầnăkhôngăbitătrc). 33 4.6.ăLnhăWHILEă(lặpăviăsălầnăkhôngăbitătrc). 35 BÀIăTPăCHNGă4. 37 CHNGă5.ăKIUăDăLIUăTPăHP,ăKIUăMNG,ăKIUăXỂU 42 5.1.ăKiuătpăhp 42 5.2.ăKiuămng 44 5.3.ăKiuăxơu 50 BÀIăTPăCHNGă5 54 CHNGă6.ăCHNGăTRÌNHăCON 62 6.1.ăCácăkháiănimămăđầu. 62 6.2.ăThătục. 63 2
  3. 6.3.ăBinătoƠnăcụcăvƠăbinăđaăphng. 66 6.4. Hàm. 69 6.5.ăChngătrìnhăconălngănhau. 70 6.6.ăChngătrìnhăconăđăqui. 71 6.7.ăĐnăvăchngătrìnhăcaăngiădùng. 73 BÀIăTPăCHNGă6. 81 CHNGă7.ăKIUăBNăGHIă(RECORD) 83 7.1.ăĐnhănghĩaăkiuăvƠăkhaiăbáoăbinăkiuăbnăghi. 83 7.2.ăCácăthaoătácătrênăkiuăbnăghi: 84 7.3.ăKiuăbnăghiăbinăđổi. 86 BÀIăTPăCHNG 7. 90 CHNGă8.ăKIUăTPăTINă(FILE) 91 8.1.ăĐnhănghĩaăkiuăvƠăkhaiăbáoăbin. 91 8.2.ăMtăsăthătụcăvƠăhƠmăchuẩn. 92 8.3.ăTpătinăđnhăkiu 94 8.4.ăTpătinăvĕnăbn 101 BÀIăTPăCHNG 8. 108 CHNGă9. KIUăCONăTRă(POINTER) 111 9.1.ăMăđầu. 111 9.2.ăKiuăconătr 112 9.3.ăDanhăsáchăliênăkt. 119 BÀIăTPăCHNG 9 124 TÀIăLIUăTHAMăKHO 124 3
  4. LI GII THIU NgônăngălpătrìnhăPascalădoăNiklausăWirthăphátătrinăcaăngônăngăAlgol- 60ă(ngônăngăEuler)ăđaăraăvƠoănĕmă1970.ăPascalălƠăngônă ngăđặcăbităthíchăhpă choăkiuălpătrìnhăcóăcuătrúcăvƠălƠăngônăngăchoăphépămôătăthutătoánărtăthună tin.ă Choă đnă nay,ă Pascală vnă đcă dùngă đă gingă dyă vă lpă trìnhă trongă mtă să trngăPhổăthôngăvƠăĐiăhcătrênăthăgii. BƠiăgingănƠy,ăcungăcpăchoăSinhăviênăchuyênăngƠnhăS phmătinăcácăkină thcăcăbnăvăngônăngălpătrìnhăPascalăcălýăthuytăvƠăbƠiătpăthựcăhƠnh.ă Trong bƠiăgingă nầyăchúngătôiăcóăđaăthêmă mtăsă bƠiătpătinăhcă11, đă sinhă viênă lƠmă quen dần viăcácădngăbƠiăăphổ thông. NiădungănƠyăđcăhcătrongăphmăviă3 tín chỉ,ăphụcăvụăchoăvicădyăvƠăhcătheoăphngăphápăđƠoătoătínăchỉ. BƠiăgingăbaoăgmă9ăchngănhăsau: Chngă1.ăCácăkinăthcăchungăvăngônăngălpătrìnhăPascal: Giiăthiuăcácă thƠnhăphầnăcăbnăcaămtăngônăngălpătrình.ăCuătrúcătổngăquátăcaămt chngă trìnhăvităbằngăngônă ngălpătrìnhăPascal.ăCáchăbiênădchăvƠăthựcăthiămtăchngă trìnhăvităbằngăngônăngălp trình Pascal. Chngă2.ăCácăkiuădăliuăđnăgin:ăChngănầyăgiiăthiuătổngăquanăvă cácăkiuădăliuăcaăPascalăvƠăđiăsơuămôătăcácăkiu dăliuăđnăginăchuẩn cùng cácăkiuădăliuădoăngiădùngăđnhănghĩa.ăĐiăviămỗiăkiuădăliuăgiiăthiuăcáchă khaiăbáo,ăcáchăsădụng,ăminăgiáătrăcùngăcácăphépătoánătácăđngălênăkiuădăliuă đó. Chngă3.ăBiuăthcăvƠăcơuălnhăđnăgin:ăChngănầyăđaăraăcácăkinăthcă văcácăthƠnhăphầnătoăthƠnhămtăbiuăthcătrongăPascal,ăcáchătácăđngăcaăcácătoánă tălênăcácătoánăhngătrongămtăbiuăthc.ăĐngăthiăgiiăthiuăcácăloiăcơuălnhăđnă gin,ăcáchăkhaiăbáoăvƠăsădụngăcácăcơuălnhănƠyătrongăchngătrình. Chngă4.ăCơuălnhăcóăcuătrúc:ăNiădungăchngănầyăđaăraăcácăcơuălnhă cóăcuătrúc.ăTrongămỗiălnhăđaăraăcúăphápăcaătừngălnh.ăTipăđnăphân tích cách sădụngăcácăcơuălnhănhăthănƠoăchoăphùăhp. Chngă5.ăKiuădăliuătpăhp,ăkiuămng,ăkiuăxơu: Niădungăchngănầyă đaăraăcácăkiuădăliuăcóăcuătrúc. Trongămỗiăkiuădăliuăđaăcúăphápăcaătừngă kiu,ăcáchăđnhănghĩaăvƠăkhaiăbáoăchúng và môătăcácăthaoătácătrênătừngăkiuădăliuă đó. Chngă 6.ă Chngă trìnhă con:ă Chngă nƠyă đaă raă cáchă đnhă nghĩaă mtă chng trìnhăconădngăthătục,ăchngătrìnhăconădngăhƠm.ăĐngăthiăhngădnă cáchăsădụngăcácăchngătrìnhăconănƠyătrongămtăchngătrìnhăsaoăchoăphùăhp. Chngă7.ăKiuăbnăghi:ăNiădungăchngănƠyăgiiăthiuăkiuădăkiuăbnă ghi.ăCáchăđnhănghĩaăvƠăkhaiăbáoăkiuăbnăghiăvƠăcácăthaoătácătrênăkiuăbnăghi. 4
  5. Chngă8. Kiuătpătin:ăChngănƠyăgiiăthiuăkiuădăliuătpătinăcùngăcácă thao tác trên tpătinăđnhăkiuăvƠătpătinăvĕnăbn. Chngă9.ăKiuăconătr:ăChngănƠyăgiiăthiuăkiuăconătrălƠămtăkiuădă liuăđngă(binăđng).ăCáchăđnhănghĩaăvƠăkhaiăbáoăkiu conătrăcùng các thao tác trên nó. ĐăhoƠnăthƠnhăbƠiăgingănƠy,ăchúngătôiăxinăchơnăthƠnhăcmănăThầyăNguynă Thanhă Tiênă vƠă ThầyăNguynăHiăLcăđƣăđóngă gópăýăkină vƠăsaăchaăchoăhoƠnă chỉnhă bƠiă ging.ă Tuyă nhiên,ă doă hnă chă vă thiă gian,ă cũngă nhă trìnhă đă nênă bƠiă gingăchắcăchắnăcònănhiuăsaiăsót.ăChúngătôiămongănhnăđcăcácăýăkinăđóngăgópă caăcácăbnăđc,ănhằmăhoƠnăthinăhnănaăniădungăbƠiăgingănƠy. NguynăÁnh 5
  6. CHNG 1. CÁC KIN THC CHUNG V NGÔN NG LP TRÌNH PASCAL Mở đầu: GiiăthiuăcácăkinăthcăchungăvăngônăngălpătrìnhăPascal.ăCácăthƠnhă phầnăcăbnăcaămtăngônăngănh:ăBăkýătự,ătừ,ătừăkhóa,ătên,ătênăchuẩn.ăCuătrúcă tổngăquátăcaămtăchngătrìnhăvităbằngăngônăngălpătrìnhăPascal. Cách biên dchă vƠăthựcăthiămtăchngătrình vităbằngăngônăngălp trình Pascal. Mục tiêu: HcăxongăchngănƠyăSinhăviênă - HiuăđcăcácăkháiănimăcăbnăvăngônăngălpătrìnhăPascal. - Bităcách sădụngăTurboăPascală7.0. - Bităto,ăluăvƠămătpătinăchngătrình. - BităbiênădchăchngătrìnhăvƠăthựcăthiăchngătrình. - BităđcăcácăkýătựăđcăsădụngătrongăNNLTăPascal. - BităcuătrúcăcaămtăchngătrìnhăPascal. 1.1. Gii thiu Pascal là ngônăngălpătrìnhăcpăcaoăcaătácăgiăNIKLAUSWITHăđcăcôngă băvƠo đầuănĕmă1970.ă(LyătênăPascalălƠăđăkỷănimănhƠătoánăhcăPascalăăthăkỷă XVII). BanăđầuănóăchỉălƠămtăngônăngădyăhc,ăvăsauăvìănhngăuăđimămƠănhiuă hƣngăđƣăphátătrinănóăthƠnhăcácăphầnămmăriêngăbităđăphụcăvụăchoăcôngăvicăriêngă caămình. Turbo Pascală lƠă mtă snă phẩmă caă hƣngă Borlandă (Mỹ)ă đcă phátă trină từă Pascal.ă Đơyă lƠă mtă ngônă ngă lpă trìnhă bcă caoă cóă cuă trúc,ă đcă dùngă phổă bină trongăncăcũngănhătrênăthăgiiăđặcăbitălƠătrongălĩnhăvựcădyăhcălpătrình. TurboăPascalăgmăcácăfileăchínhăsau: - Turbo.exe:ăLƠăfileăchngătrìnhăsonătho,ădchăvƠăliênăktăviăbngăchn. - Turbo.tplă:ăLƠăfileăthăvinăluăcácăđnăvăchngătrìnhăchuẩnăđăchyăviă Turbo.exe. - Graph.tpu:ăLƠăfileăđnăvăchngătrìnhăxălíăđăha. - *.chr : Là các fileăchaăcácăfontăchătrongăchăđădăha. - *.bgiăăăăăăăă:ăLƠăfileăchaăcácăfontăchămƠnăhình. NgoƠiăraăcònăcácăfileăkhácăviăcácăchcănĕngăriêngăbit.ă 1.2. Các bc lp trình gii bƠi toán 1.2.1. Các bước lập trình tổng quát - Bcă1:ăPhơnătíchăbƠiătoán;ăXácăđnhădăliuăvƠo,ădăliuăraălƠmăcăsăchoă vicăhìnhăthƠnhăgiiăthut. 6
  7. - Bcă2:ăXơyădựngăthutătoánă:ăTrênăcăsăxácăđnhădăliuăvƠo, ra;ăcácăgiă thităcaăbƠiătoán,ăcácămiăliênăhăgiaăchúngăvƠănhngăkinăthcăliênăquanătaăcầnă đaăraăthutătoánătngăng. - Bcă3:ăTổăchcădăliuăvƠălpăchngătrìnhătheoăthutătoánăđƣăđăra. 1.2.2. Các bước lập trình và thực hiện (với Turbo Pascal) Bước 1: KhiăđngăTurboăPascală(Turbo.exe) Bước 2: Sonăthoăchngătrình. Bước 3: Biênăădchă(nhnătổăhpăphím ALT - F9). - NuăthƠnhăcôngăthìăchuynăquaăbcă4. - NuăkhôngăthƠnhăcôngăquayăliăbcă2. Bước 4: Chyăthăchngătrình (CTRL - F9) . - Nuăttăchuynăquaăbcă5. - Nuăchaăttăthìăquayăvăbcă2. Bước 5: GhiăvƠoăđĩa,ăDchăthƠnhăfileă*.exe. Bước 6: Ktăthúc. (Mă fileă miă đă sonă thoă chngă trìnhă khácă hoặcă thoátă khiă Turboă Pascală bằngă vicănhnătổăhpăphímăALTă- Xăđăthoát). 1.3. Các khái nim vƠ các thƠnh phần c bn 1.3.1. Bộ ký tự (dùng để soạn thảo chương trình) Baoăgmăcácăloiăkýătựăsauăđơy: Cácăchăcái:ăa z;ăăăA Ză(Tuyănhiênăkhiăsonăthoăchngătrình,ăTurboăPascală khôngăphơnăbităchăhoaăhayăchăthng). Cácăkýătựăs:ă0 9. Cácăduătoán:ă+ăă- * / ^ = > <. Cácăkýătựăđặcăbit:?ă; . : ! [ ] { } # $ @. Duăgchăni: _ Cácăkýătựăđiuăkhin. TừăvƠăătừăkhóa a. Từ: LƠămtădƣyăliênătipăcácăkýătựăkhôngăchaăkýătựătrắngăvƠăkýătựăđiuăkhin. b. Từ khóa: LƠăătừădƠnhăriêngăcaăPascalăviăchcănĕngăvƠăcúăphápăđcăquyăđnhăsẵn.ăVìă vyăkhiăsădụngăphiătheoăđúngăquyăđnh, vƠăkhôngăđcăsădụngăcácătừăkhóaăvƠoă cácăcôngăvicăkhác. Víădụ:ăBegin,ăend, if, then, const, var, function 7
  8. 1.3.3. Tên và tên chuẩn. a. Tên: TênălƠămtătừăbaoăgmătiăđaă255ăkýătự,ăchỉăđcălyătrongăcácăchăcái,ăchăs,ă vƠăduăgchăni,ănhngăkhông đcăbắtăđầuăbằngăs.ăTênădùngăđăđặtăchoăcácăđiă tngătrongăchngătrìnhănhăhằng,ăbin,ăhƠm,ăthătục,ăkiuădăliu b. Tên chuẩn: LƠătênămƠăTurboăPascalăđƣăđnhănghĩaăsẵnăđăchỉăcácăhƠm,ăhằng,ăbin,ăthătụcă thăvinăcaănó. Chú ý: Turbo Pascal cho phépă ngiă să dụngă cóă thă đnhă nghĩaă liă cácă tênă chuẩnăđădùngăvƠoăcácăcôngăvicăkhác. 1.4. Cu trúc tổng quát ca mt chng trình: MtăchngătrìnhăcaăTurboăPascalăgmă3ăphần. - Tiêu đề - Khai báo và định nghĩa - Thân chương trình Cụăth: Program Tiêuăđ. Uses Const Type CácăkhaiăbáoăvƠăđnhănghĩa Var Procedure Function Begin Thơnăchngătrình End. 1.4.1. Phần tiêu đề Từă khóaă đă khaiă báoă lƠă Programă tipă đnă lƠă tênă caă chngă trìnhă doă ngiă dùngătựăđặt.ăPhầnănƠyăkhôngăbắtăbucăphiăcó. (Chú ý: tênăcaăchngătrìnhăphiătheoăđúngăquyăcáchătênăcaăTurboăPascal). 1.4.2. Phần khai báo và định nghĩa: Uses: DùngăđăkhaiăbáoăcácăUnită(đnăvăchngătrình)ăcaăTurboăPascal.ăNuă cóănhiuăunităthìăsădụngăduăphẩyă","ăđăngĕnăcách. Const: Dùngăđăkhaiăbáoăcácăhằng. Cúăpháp:ăTên_hằngă=ăGiáătr. 8
  9. Type: Dùngăđăđnhănghĩaăcácăkiuădăliuăcaăngiădùng. Cúăpháp:ăTênă_kiuă=ăđnhănghĩaăcụăthăchoătừngăkiu. Var: Khaiăbáoăbin. Cú pháp: Tên bin:ăKiu_dăliu; (Hoặcăkhaiăbáoătrựcătipăkhôngăthôngăquaăkiu.). Nuăcóănhiuăbinăcùngăkiuăthìăsădụngăduăphẩyă“,”ăđăngĕnăcách. Proedure: Đnhănghĩaăchngătrìnhăconădngăthătục. Function: ĐnhănghĩaăchngătrìnhăconădngăhƠm. Chú ý: TùyăthucăvƠo từngăchngătrìnhăcụăthămƠătrongăchngătrìnhăcóăthă cóăcácăphầnăkhaiăbáoăvƠăđnhănghĩaăphùăhp,ăcóănhngăchngătrìnhăcóăphầnăkhaiă báo,ăđnhănghĩaănƠyămƠăkhôngăcóăkhaiăbáo,ăđnhănghĩaăkiaăhoặcăngcăli,ăthmăchíă cóănhngăchngătrìnhăkhôngăcầnăđnămtăkhaiăbáoăhayăđnhănghĩaănƠoăc. 1.4.3. Phần thân chương trình: Đcăbắtăđầuăbằngătừăkhóaă"Begin"ăvƠăktăthúcăbiătừăkhóaă"End.".ăăGiaăcặpă từăkhóaănƠyălƠăcácăcơuălnhăcaăchngătrình.ăNuăcóănhiuăcơuălnhăthìăsădụngăduă “;”ăđăngĕnăcáchăcácăcơuălnh.ăPhầnănƠyăbắtăbucăphiăcó. Chú ý: - TurboăPascalăcũngăsădụngăduă“;”ăđăktăthúcăphầnă nƠyăchuynă quaăphầnă khácăcũngănhăgiaăkhaiăbáoănƠyăquaăkhaiăbáoăkhácăcaăchngătrình. - KhiăsonăthoăchngătrìnhăchoăphépăđaăvƠoăcácăcơuăchúăthíchănhngăphiă đcăđặtătrongăcặpăduămócă{ }ăhoặcă(* *). 9
  10. CHNG 2. CÁC KIU D LIU ĐN GIN Mở đầu: - ChngănầyăgiiăthiuătổngăquanăvăcácăkiuădăliuăcaăPascal vƠăđiăsơuă môătăcácăkiuădăliuăđnăginăchuẩn cùngăcácăkiuădăliuădoă ngiădùng đnhă nghĩa.ăĐiăviămỗiăkiuădăliuăgiiăthiuăcáchăkhaiăbáo,ăcáchăsădụng,ăminăgiáătră cùngăcácăphépătoánătácăđngălênăkiuădăliuăđó. - Đaăraămtăsăthătụcăvà hàm chuẩnătrênăkiuădăliuăđnăginăchuẩn và cáchă să dụngă cácă thă tụcă vƠă hƠmă chuẩn nầy đă vită mtă biu thcă să hcă thôngă thngăsangăcúăphápăcaăngônăngăPascal. Mục tiêu: HcăxongăchngănƠyăSinhăviên - Bit đcătênăcaămtăsăkiuădăliuăchuẩn:ăănguyên,ăthực,ăkíătự,ălogicăbită đcăgiiăhnăbiuădinăcaămỗiăloiăkiuădăliuăđó. - Bităcách khai báo binăđădùngătrongăchngătrìnhătrcăkhiăsădụng. - BităcuătrúcăchungăcaăkhaiăbáoăbinătrongăngônăngăPascal. - BităsădụngămtăsăthătụcăvƠăhƠmătrênăcácăkiuădăliu. 2.1. Tổng quan v các kiu d liu trong Turbo Pascal Trong Turbo Pascal các kiuădăliuăđcăchiaălƠmă2ăloi: - Cácăkiuădăliuăđnăgin. - Cácăkiuădăliuăcóăcuătrúc. 2.1.1. Các kiểu dữ liệu đơn giản gồm: Kiuăchuẩn:ă - Logic. - Sănguyên. - Săthực. - Kýătự. Kiuădoăngiădùngăđnhănghĩa: - Kiuăđonăcon. - Kiuălităkê. 2.1.2. Các kiểu dữ liệu có cấu trúc: - Mng. - Xâu. - Tpăhp. - Bnăghi. - File - Conătr. 10
  11. 2.2. Các kiu d liu đn gin chun 2.2.1. Kiểu logic: - Từăkhóa:ăBoolean. - Minătr:ăChỉăcóă2ăgiáătrălƠătrueăvƠăfalse. - Các phép toán:ăAND,ăOR,ăNOT,ăXOR.ă(Xemăbngădiăđơy) - Phép so sánh: Bằngănhau:ă"=". Nhăhn:ă" ". Lnăhnăhoặcăbằng:ă">=". Khác nhau: "<>". (QuyăcăFalseăbéăhnăTrue.) A B A AND B A OR B NOT A A XOR B T T T T F F T F F T F T F T F T T T F F F F T F 2.2.2. Kiểu số nguyên: Cóă5ăkiuăsănguyên: - Minăgiá tr vƠătừăkhóaădùngăđăkhaiăbáoăcaăcácăkiuăđóănhăsau: Tên Min Max Yêu cầu b nh Shortint -128 127 1 byte Integer -32.768 32.767 2 byte Longint -2.147.483.648 2.147.483.647 4 byte Byte 0 255 1 byte Word 0 65.535 2 byte - Các phép toán: Phépăcng:ă"+" Phépătrừ:ă"-" Phép nhân: "*" 11
  12. PhépăDIV:ăPhépăchiaăhaiăsănguyênăchoănhauăchoăktăquăchoăphầnănguyênă caăthng.ăVíădụă12ădivă5ă=ă2. Phép MOD:ăPhépăchiaăhaiăsă nguyênăchoă nhauăchoăktăquăchoăsă dăcaă phépăchiaăđó.ăVíădụ: 27 mod 8 = 3. - Các phép so sánh: Cóăđầyăđăcácăphépăsoăsánhătngătựănhăkiuălogic.ăTuyă nhiênăăđơyătaăđƣăbităquanăhăthătựătrênătpăhpăcácăsănguyên. Chú ý (1). Trênădăliuăkiuăsănguyênăkhôngătnătiăphépăchiaăthựcă(/). (2).ă Thôngă thngă cácă să nguyênă đcă biuă dină trongă hă că să thpă phơn.ă Nuămunăbiuădinătrongăcăsă16ăthìătaăthêmăduă"$"ăphíaătrc.ăVíădụă$Aă(tcălƠă să10ătrongăhăthpăphơn). (3).ăVi kiuăsănguyênăcònăcóăcácăphépătoánăAND,ăOR,ăNOT,ăXOR 2.2.3. Kiểu số thực: Cóă5ăkiuăsăthực. - Minăgiá tr vƠătừăkhóaădùngăđăkhaiăbáoăcaăcácăkiuăđóănhăsau: Tên Min Max Yêu cầu b nh Real 2.9*10-39 1.7*1038 6 byte Single 1.5*10-47 3.4*1038 4 byte Double 5*10-324 1.7*10380 8 byte Extended 3.4*10-4932 1.1*104932 10 byte Comp -9.2*1018 9.2*1018 4 byte Chú ý: (1).ăMinăgiá trăcaăcácăkiuădă liuă(trừăcomp)ă đcăhiuă lƠă lyătrongăcácă đon: - [-max, -min] - [min, max] - să0. Nuămtăsă ămaxăthìăsăkhôngăbiuădinăđcăvƠăxemănhălƠătrƠnăs. Nuămtăsă>-minănhăhnă0ăhoặcălnăhnă0ănhăhnăminăthìăđcăxemănhălƠă0. (2).ăChăđămặcăđnhăcaă TurboPascală lƠăchỉăchoăphépă lƠmă vică viăkiuăsă thựcă REAL.ă Mună să dụngă cácă kiu khácă taă vƠoă bngă chnă OPTIONă -> COMPILER ->ă NUMERICă PROCESINGă riă đánhă duă [x]ă vƠoă mụcă 8087/80287.ă KhiăsonăthoăchngătrìnhătaăphiăthêmăvƠoăchỉăthădchă{$N+}ă vƠoăđầuăchngă trìnhăngayăsauăphầnătiêuăđ. (3).ăTrongămáyătínhăsăthựcăđcăbiuădinădiăhaiădng: - Duăchmătĩnh,ăvíădụ:ă3.14,ăă123.456 12
  13. - Duă chmă đngă (chă đă mặcă đnh),ă víă dụ:ă 3.1400000000E+02ă (tcă lƠă 3.14*102). - Các phép toán: Cng:ă"+" Trừ:ă"-" Nhân: "*' Chia: "/" Chú ý: Viăkiuăsăthựcăkhôngătnătiăcácăphépătoán DIV và MOD. Các phép soăsánh:ăTngătựăsănguyênăgm: =,ă ,ă>=ă(lnăhnăhoặcăbằng),ă ă(khácănhau). 2.2.4. Kiểu ký tự (CHAR): - Từ khóa: CHAR. - Miền giá trị: CácăkýătựătrongăbngămƣăASCIIăbaoăgm: 0 31ăăăăă:ăCácăkýătựăđiuăkhin. 32 ă127:ăCácăkýătựăthôngădụng. 128 255:ăCácăkýătựăđặcăbită(đăha). Ví dụ: kýătựă'A'ăcóămƣălƠă65;ăKýătựă'a'ăcóămƣălƠă97. Chú ý: Đăphơnăbităkýătựăcũngănhăxơuăkýătựăviăcácăđiătngăkhác,ăPascală quyăđnhăkhiăbiuădinăchúngăphiăđặtătrongăcặpăduănháyăđn,ăăvíădụăă'a',ă'abc'. - Phép so sánh: Munăsoăsánhă2ăkýătựătaăsoăsánhăcácămƣăASCIIătngăngăcaă chúng,ăkýătựănƠoăcóămƣăASCIIălnăhnăđcăxemălƠălnăhn.ăVíădụă'a'ă>ă'A'ăVìă97ă>ă 65. Chú ý: MtăkiuădăliuăđcăgiălƠăvôăhngăđmăđcănuăminătrăcaănóă lƠămtătpăhpăđmăđcăvƠătrênăđóătnătiăquanăhăthătự.ăVíădụ:ăKiuăByte,ăkiuă Integer;ăkiuăChar;ăkiuăBoolean 2.3. Kiu lit kê vƠ kiu đon con 2.3.1. Kiểu liệt kê: a. Định nghĩa kiểu và khai báo biến: - Định nghĩa kiểu: Type ten_kieu = (Danh sách các giá trị); Giiăthích:ă - ten_kieuăkýăhiuăchoătênăkiuădoăngiădùngătựăđặt. - DanhăsáchăcácăgiáătrălƠătpăhpăcácăgiáătrăđcăphơnăcáchăbiăduăphẩyă",". - Khai báo biến: Var ten_bien : ten_kieu; 13
  14. Giiăthích:ă - ten_bienăkýăhiuăchoătênăbinădoăngiădùngătựăđặt. - ten_kieuăđƣăđcăkhaiăbáo trc; Ví dụ: Type ngay = (sun, mon, tue, wed, thu, fri, sat); cviec = (dihoc, lambai, thuchanh, nghi); Var hqua, hnay: ngay; Viec: cviec; Chú ý: Cũngăcóăthăkhai báoă binăkiuă lităkêătrựcătipă mƠăkhôngă cầnă đnhă nghĩaăkiu.ă Ví dụ: Var gioitinh: (nam, nu) Mau: (xanh, do, tim, vang); b. Các tác động lên dữ liệu kiểu liệt kê: - Cóăthăthựcăhinăphép gán giáătrăchoăbin. - Phép so sánh: GiáătrălităkêătrongădanhăsáchăđiătrcăđcăxemălƠăbéăhnăgiáă trăđiăsau. Ví dụ: Viăkhaiăbáoăătrênăthìăsună<ămon;ăxanh<ădo. c. Chú ý: (1).ăKhôngăthănhp,ăxutăviădăliuăkiuălităkê. (2).ăGiáătrăkiuălităkêăthngăđcădùngăđălƠmăchỉăsăchoălnhălặpăfor,ăcácă trngăhpăchnălựaătrongălnhăCase,ăhoặcăchỉăsăchoămng. 2.3.2. Kiểu đoạn con: a. Định nghĩa kiểu và khai báo biến: - Định nghĩa kiểu: Type ten_kieu = hang_duoi hang_tren; Giiăthích: Hang_duoiătcălƠăkýăhiuăgiáătrăhằngăcnădi,ăhang_trenătcălƠăgiáătrăhằngă cnătrênăttă nhiênă lƠăhang_trênă hang_duoiă vƠăphiăcóăcùngăkiuă vôăhngăđmă đc. - Khai báo biến: Var ten_bien : ten_kieu; (ten_kieuăđƣăđcăkhaiăbáo) Ví dụ: Type Ky_tu_so: '0' '9'; Chu_cai: 'a' 'z'; Var a, b: Ky_tu_so; Ch: chu_cai; b. Chú ý: 14
  15. (1).ăCũngăcóăthăkhaiăbáoăbinăkiuăđonăconătrựcătipăkhôngăthôngăquaăkhaiă báoăkiu.ă Ví dụ: Var m, n : 1 100; Ch: 'a' 'z'; (2).ăKiuăđonăconăthngăđcăsădụngălƠmătpăchỉăsăchoăbinămngăhayătpă hằngătrongăcơuălnhăcase. 2.4. Các hƠm vƠ th tục chun 2.4.1. Các hàm trên kiểu số nguyên và số thực: GiăsăxălƠămtăsănƠoăđóăkhíăđóătaăcóăcácăhƠmăsauăđơy: ROUND(x) ChoăgiáătrălƠăsănguyênăgầnăxănhtă kiuăsănguyên TRUNC(x) ChoăgiáătrălƠăphầnănguyênăcaăsăxăăăă INT(x) ChoăgiáătrălƠăphầnănguyênăcaăsăxă FRAC(x) ChoăgiáătrălƠăphầnăthpăphơnăcaăsăx. ABS(x) ChoăgiáătrălƠăgiáătrătuytăđiăcaăsăx. SIN(x) ChoăgiáătrălƠăăsinx. COS(x) - ChoăgiáătrălƠăcosx. x EXP(x) ChoăgiáătrălƠăe . 2 SQR(x) ChoăgiáătrălƠăăx . SQRT(x) ChoăgiáătrălƠăcĕnăbcăhaiăcaăsăxă(x>=0). LN(x) ChoăgiáătrălƠălnxă(x>0). 2.4.2. Các hàm khác: GiăsăvarălƠ binăcóăkiuăvôăhngăđmăđc. INC(var, r) Tĕngăgiáătrăcaăbinăvarălênăr. DEC(var, r) Gimăgiáătrăcaăbinăvarăđiărăă(varăcóăkiuăvôăhngăđmă đc). Chú ý: KýăhiuăINC(var)ăătcălƠăINC(var,1)ăvƠăDEC(var)ătcălƠăDEC(var,ă1). PRED(var) Choăgiáătrăđiăngayătrcăvar.ăVíădụ:ăpred('c')ă='b'. SUCC(var) Choăgiáătrăđiăngayăsauăvar.ăVíădụ:ăsucc('c')='d'. ORD(ch) ChoăgiáătrălƠămƣăASCIIăcaăkýătựăchă(chăkiuăchar). CHR(n) ChoăkýătựăcóămƣăASCIIăbằngăsănă(0<=n<=255). UPCASE(ch) ChoăktăquălƠăăchăchănhngălƠăchăinăhoaă(chălƠăchăcái). ODD(n) ChoăktăquăTRUEănuănălƠăsălẻ,ăbằngăFALSEănuănălƠăsă chẵnă(nălƠăsănguyên). 15
  16. RANDOM(n) ChoăktăquălƠămtăsănguănhiênălyătrongăđonă[0,n]ă(nălƠă să nguyên;ă ă Chúă ýă đă să dụngă đcă hƠmă nƠyă thìă trcă đóă phiă khiă toă thă tụcă Randomize). KEYPRESSED trăvăgiáătrătrueănuăcóănhnăphímăbtăkỳ,ăngcăliăchoă giáătrăfalseă(munăsădụngăphiăkhaiăbáoăunităcrt). 2.4.3. Sử dụng hàm để viết các biểu thức bằng cú pháp của Turbo Pascal: 1. ab = ebln(a) = exp(b*ln(a)). (a,b>0). 2. logab = logae*logeb = 1/ln(a)*ln(b). 3. (x3+ sin(x2y))2 = sqr(sqr(x)*x+sin(sqr(x)*y)). BÀI TP CHNG 2. 1. NuăchălƠămtăbinăkiuăcharăthìăcácăhƠmăsauăđơyăchr(ord(ch)),ăord(chr(ch)) cho ktăquăgì?ăTiăsao? 2. TìmăcôngăthcăđăđổiămtăkýătựălƠăchăhoaăthƠnhăchăthng. 3. DùngăcácăhƠmăvƠăcácăphépătoánăđăbiuădinăcácăcôngăthcăsau: a. (cos(x3)+ ln(x5y))4 b. (p(p-a)(p-b)(p-c))1/2 2 bsinx c. loga(3b ) + a 4.ăNu khai báo m, n, kălƠăcácăbinăkiuăbyte,ăbitărằngăm=100,ăn=200.ăHƣyăchoăbită giáătrăcaăkătrongăcácătrngăhpăsau: a. k:= m div 2+n; b. k:= 3*m + 2*n; c. k:= 1.5*m + n; 5.ăHƣyăsoăsánhăcácăkýătựăvƠăcácăxơuăsauăđơy: a.ăChă'A'ăvƠăchă'a'. b.ăChăă'A'ăăvƠăchăs '1'. c.ăKýătựătrắngăvƠăchăă'a'. 6. Trongă Pascal,ă nuă mtă bină chỉă nhnă giáă tră nguyênă trongă phmă viă từă 10ă đnă 25532ăthìăbinăđóăcóăthăkhaiăbáoăbằngăcácăkiuădăliuănƠo? 7. BinăPăcóăthănhnăcácăgiáătră5;ă10;ă15;ă20;ă30;ă60;ă90ăvƠăbinăXăcóăthănhnăcác giáătră0,1;ă0,2;ă0,3;ă0,4;ă0,5.ăKhaiăbáoănƠoătrongăcácăkhaiăbáoăsauălƠăđúng? a. var X, P: byte; b. var P, X: real; c. var P: real; d. var X: real; X: byte; P: byte; 16
  17. 8. ĐătínhădinătíchăSăcaăhìnhăvuôngăcóăcnhăAăviăgiáătrănguyênănằmătrong phmă viătừă100ăđnă200,ăcáchăkhaiăbáoăSănƠoădiăđơyălƠăđúngăvƠăítătnăbănhănht. a. var S: integer; b. var S: real; c. var S: word; d. var S: longint; e. var S: boolean; HNG DN GII BÀI TP 1.ăChr(ord(ch))ăchoăkăquălƠăch,ăăcònăord(chr(ch))ăsaiăcúăphápăvìăhƠmăchrăcóăđiălƠă mtăsăkiuăbyte. 2. Chr(ord(ch)+ord('a') - ord('A'))ă(trongăđóăchălƠăkýătựăchăhoaăcầnăđổi). 4. a. k=250; b.ăKhôngăxácăđnhăvìătrƠnăs. c.ăKhôngăxácăđnhăvìăsaiăkiu. 5.ăXemăbngămƣăASCIIăvƠăcáchăsoăsánhăcácăkýătự. 17
  18. CHNG 3. BIU THC VÀ CỂU LNH ĐN GIN Mở đầu: - ChngănầyăđaăraăcácăkinăthcăvăcácăthƠnhăphầnătoăthƠnhămtăbiuăthcă trong Pascal,ăcáchătácăđngăcaăcácătoánătălênăcácătoánăhngătrongămtăbiuăthc. - Giiăthiuăcácă loiăcơuă lnhăđnăgin,ăcáchăkhaiă báo vƠăsădụngă cácăcơuă lnhănƠyătrongăchngătrình.ăĐngăthiămôătăcáchăsădụngăcácăcơuălnhănƠyăbằngă cácăvíădụăminhăha. Mục tiêu: HcăxongăchngănƠyăSinhăviênă - Bită đcă nhngă kháiă nimă vă phépă toán, biuă thcă să hc,ă hƠmă să hcă chuẩn,ăbiuăthcăquanăh. - Nắmăđcăcácăphépătoánăthôngădụngătrongăngônăngălpătrình. - BitădùngăcácăcơuălnhăvƠăcácăphátăbiuăcóăthădùngătrongăthơnăcaăchngă trình. - BităcácălnhănhpădăliuătừăbƠnăphím,ălnhăxutădăliuăraămƠnăhìnhămáyă tính và máy in. 3.1. Biu thc 3.1.1. Hằng: HằngălƠăđiălngăkhôngăthayăđổiătrongăchngătrình.ăCóăcácăloiăhằng:ăhằngă s,ăhằngăkýătự,ăhằngăxơu,ăhằngălogic ăTừăkhóaăđăkhaiăbáoăhằngălƠăCONST. Ví dụ: Const max = 100; ch='A'; hoten='ng van A'; 3.1.2. Biến : Bină lƠă điă lng cóă thă thayă đổiă giáă tră vƠoă từngă thiă đimă khácă nhauă caă chngătrình.ăBinădùngăđăluătrădăliu,ăbinăđcăkhaiăbáoăsauătừăkhóaăVAR.ă VicăkhaiăbáoăcácăbinălƠănhằmăcungăcpăcácăvùngănhăđăluătrădăliuătrongăqúaă trìnhăthựcăhinăchngătrình. Ví dụ: Var a,b,c: Integer; Ch : Char; Ok : Boolean; Chú ý: Khiăkhaiă báoăcóă nhiuă bină cùngăkiuăthìătaă dùngăduă phẩyă(",")ăđă ngĕnăcách.ăHtăkhaiăbáoăkiuădăliuănƠyăchuynăquaăkhaiăbáoăkiuădăliuăkhácătaă dùngăduă";"ă 3.1.3. Toán tử: Là các phép toánătácăđngălênădăliuă(hayăcònăgiălƠătoánăhng). Ví dụ: Các phép +, -, *, /, and, or, not 18
  19. Chú ý : Thătựăuătiênăthựcăhiênăcácăphépătoánănhăsau: - Các phép toán 1 ngôi. - Các phép *, /, DIV, MOD, AND. - Các phép +, -, OR, XOR - Các phép toán so sánh =, =, . 3.1.4. Toán hạng: LƠămtătrongăcácăđiălngăsau: - Hằng - Bin - Hàm - Biuăthc 3.1.5. Biểu thức: LƠămtătpăhpăgmăcácătoánătăvƠăcácătoánăhngătrongăđóătoánătătácăđngă phùăhpălênătoánăhng. Ví dụ: Biuăthcăăăr*piă+ăabs(x+y)ă- 10 Cácătoánătă:ă*,ă+,ă- Cácătoánăhng:ăr, x, yălƠăcácăbin;ăăpi,ă10ălƠăhằng; abs là hàm. Chú ý: (1).ăTrongămtăbiuăthcăcácătoánătătrongăduăngoặcă"( )"ăđcăuătiênăthựcă hinătrc. (2).ăNuăcóănhiuăphépătoánăcùngăcpăuătiênăthìăcácăphépătoánăđcăthựcăhină tuầnătựătừătráiăquaăphiă(trừăcácăphépătoánătácăđngălênăkiuălogic). (3).ăMtăbiuăthcăchoăktăquăbằngăsăđcăgiălƠăbiuăthcăsăhc,ăchoăktă quăkiuălogicăthìăđcăgiălƠăbiuăthcălogic. Ví dụ: Tính giá trăcaăbiuăthcăsau: ((18 mod 4 div 2 = false) = true ((2 div 2 = false) = true = false) = true (true >= false) = true true = true true 3.2. Cơu lnh 3.2.1. Phân loại câu lệnh: TrongăPascalăcóăhaiăloiăcơuălnhăđóălƠăcơuălnhăđnăginăvƠăcơuălnhăcóăcuă trúc. 19
  20. - Cơuălnhăđnăginăgm:ăLnhăgán,ălnhăxut,ănhpădăliu,ălnhănhyăvƠăliă gi chngătrìnhăconădngăthătục. - Cơuălnhăcóăcuătrúcăgm:ăLnhăghép,ălnhărănhánh,ălnhălựaăchn,ăcácălnhă lặpăvƠălnhăWITH. 3.2.2. Câu lệnh đơn giản: a. Lệnh gán: Cú pháp: ten_bien := bt; GiiăthíchăbtălƠăkýăhiuăchoăbiuăthc. Ýănghĩa:ăLnhăsăthựcăhinăvicăgánăgiáătrăcaăbtăchoăbinăten_bien. Chú ý: (1).ăBinăten_bienăvƠăgiáătrăcaăbtăphiăcùngăkiuădăliu. (2).ăVătráiăluônălƠăbinăcònăvăphiălƠăbiuăthc,ăđoăngcăliălƠăsaiăcúăpháp. Víădụ:ăa:=ă5;ăăSă:ă=ăsă+ăd*i;ăi:=i+1; b. Lệnh ghi dữ liệu lên màn hình: Cú pháp: (1) WRITE(bt1, bt2, , btn); (n 1) (2) WRITELN(bt1, bt2, , btn); (3) WRITELN ; Giiăthíchăbt1,bt2, ,btnăkýăhiuăchoăbiuăthc1,ăbiuăthc2, , biuăthcn. Ýănghĩa:ăă (1):ăLầnăltăghiălênămƠnăhìnhăgiáătrăcaăcácăbiuăthcăătiăvătríăconătr. (2): Tngătựădngă(a)ăchỉăkhácăăchổăsauăkhiăghiăxongăconătrăđcăđaăvă đầuădòngătipătheo. (3):ăKhôngăghiăgìălênămƠnăhìnhăc,ăchỉălƠmăthaoătácăđaăconătrăvăđầuădòngă tipătheo. Ví dụ: Var a,b : integer; Begin a:=5; b:= 10; Writeln('tich cua', a, ' va', b, ' la : ', a*b); End. Chú ý: (1). Giá trăcaăcácăbiuăthcătrongăcơuălnhăwrite,ăwriteln phiăcóăkiuăchuẩn. (2).ăCóăthăsădụngăcáchăghiădăliuăcóăquyăcáchănhăsau: * Với dữ liệu kiểu số nguyên, ký tự, xâu, logic: 20
  21. (a) WRITE(bt : n, ); (b) WRITELN(bt : n, ); KhiăđóăgiáătrăcaăbiuăthcăsăđcăghiălênămƠnăhìnhătheoăchăđăcĕnăphi,ă trongăđóănălƠăsăvătríă(ct)ăgiƠnhăđăghiădăliu. Ví dụ: WRITE(123 : 5); 123 WRITE('abcd' : 8); abcd WRITE(3=5:9); False * Với dữ liệu kiểu số thực: ChăđămặcăđnhăcaăPascalălƠăghiătheoădngăduăchmăđng. Munăghiăsăthựcătheoădngăduăchmătĩnhătaădùngăcáchăghiăsauăđơy: (a) WRITE(bt : n : m, ); (n>m) (b) WRITELN(bt : n : m, ); KhiăđóăgiáătrăcaăbiuăthcăsăđcăghiălênămƠnăhìnhătheoăchăđăcĕnăphi,ătrongăđóă nălƠăsăvătríă(ct)ăgiƠnhăđăghiădăliu,ămălƠăsăchăsăthpăphơnăcầnăly. Ví dụ: WRITE(123.456 : 12 : 2); 123.47 Chú ý: Khiăghiădăliuă lƠăsăthựcălênă mƠnăhìnhătheoădngăcóăquyăcáchăcóăthăsă đcăghiălênăđƣăđcăquyătròn (víădụătrên)ănhngăgiáătrăthựcăcaănóăvnăđcăluă giătrongăbănh. c. Lệnh nhập dữ liệu từ bàn phím: Cú pháp: (1) READ(bien1, bien2, , bienn);ăăăăă(cácăbinăđƣăđcăkhaiăbáo). (2) READLN(bien1, bien2, , bienn); (3) READLN; Giiăthíchăbien1,bien2, ,biennăkýăhiuăchoăbin1,ăbin2, ,binn. Ýănghĩa:ă (1):ăChoăphépălầnăltănhpădăliuăchoăcácăbin. (2):ăTngătựădngă(a)ăchỉăkhácăă la khiănhpăxongăconătrăđcăđaăvăđầuă dòngătipătheo. (3):ăăChỉălƠmăthaoătácătmădừngăchngătrình,ăchăgõăphímăEnterăđătipătục. Chú ý: (1).ăNguyênătắcă nhpădăliuă lƠătrongăcơuă lnhăcóă baoă nhiêuăbinăthìătaăphiă nhpăđăgiáătrăchoăbyănhiêuăbin.ăGiaăgiáătrăcaăbin nƠyăvƠăbinăkiaăđcăngĕnă cáchăbiăítănhtălƠămtăkýătựătrắng;ăktăthúcăvicănhpăbằngăcáchănhnăphímăENTER 21
  22. (Nuăchaănhpăđăgiáătrăchoăcácăbinăthìăchngătrìnhăvnătipătụcădừngăliăchăă nhpă tip,ă chừngă nƠoă nhpă đă miă tipă tục,ă Víă dụă Khiă gặpă lnhă READ(a,b,c); chngătrìnhătmădừngăchănhpădăliuăvƠăkhiăđóătaănhpăchẳngăhnă3ă 9 12 ) (2).ăThôngăthngăkhiăthựcăhinăchngătrìnhăđă nhpădăliuătaănênăghiălênă mƠnăhìnhăcơuăhngădnăchoăngiăthựcăhinăchngătrình,ănghĩaălƠătrcăcơuălnhă READ, READLNăănênăcóămtăcơuălnhăWRITE. Ví dụ: Write(' nhâp n nguyên duong : '); readln(n); (3).ă Cơuă lnhă READLNă thngă đcă să dụngă tmă dừngă chngă trìnhă (mƠnă hình)ă đă xemă ktă qu,ă vìă vyă thngă đcă să dụngă ă cuiă caă mtă chngă trìnhă (trcătừăkhóaă"END.") (4).ăViădăliuăkiuălogicăkhôngăchoăphépănhpătừăbƠnăphím. Các ví dụ: Ví dụ 1: VităchngătrìnhănhpăvƠoăchiuădƠiăvƠăchiuărngăcaămtăhìnhăchă nhtăriăinălênămƠnăhìnhăchuăviăvƠădinătíchăcaăhìnhăchănhtăđó. Hướng dẫn: - Khaiăbáo:ăCácăbinăa,băkiuăsăthựcăđăluăchiuădƠi,ăchiuărng. Binăpăđăchaăchuăvi,ăbinăsăđăchaădinătích. - Nhpădăliuăchoăa,b. - Tínhăchuăviătheoăcôngăthcăp:=2*(a+b); - Tínhădinătíchătheoăcôngăthcăs:=ăa*b; - GhiădăliuălênămƠnăhìnhătheoădngăcóăquyăcáchă(săthực). Chương trình: Program hinh_chu_nhat; Var a,b,p,s : real; Begin Write('nhap chieu dai a: '); readln(a); Write('nhap chieu rong b: '); readln(b); p:=2*(a+b); s:= a*b; Writeln('chu vi cua hinh chu nhat la: ',p:10:2); Writeln('Dien tich cua hinh chu nhat la: ',s:10:2); Readln End. Ví dụ 2: VităchngătrìnhănhpăvƠoămtăsănguyênădngăcóăbaăchăsăriăinălênă mƠnăhìnhăsăđoăngcăcaăsăđó. Hướng dẫn: - Khaiăbáo:ăBinănăđăchaădăliuămhpăvƠo. - Nhpănănguyênădngăcóă3ăchăs. 22
  23. - DùngăcácăphépătoánăMODăvƠăDIVălầnăltătáchăcácăchăsăhƠngăđnăv,ăhƠngă trĕm,ăhƠngănghìnăvƠăghiălênămƠnăhình. Chương trình: Program So_dao; Var n : integer ; Begin Write('nhap so nguyen co 3 chu so : '); readln(n); Write('so dao nguoc cua so ',n,' la: '); writeln(n mod 10,n mod 100 div 10,n div 100); Readln End. Ví dụ 3: Vităchngătrìnhătínhătổng: Să=ă1+2+3+ +năă(nănhpătừăbƠnăphím). Hướng dẫn: - Khai báo: BinănăkiuăsănguyênăđăchaădăliuănhpăvƠo. BinăSăkiuăsănguyênăđăluăktăqu. - Nhpădăliuăchoăn. - Khiăgánăs:=0; - TínhăSătheoăcôngăthcăS=n*(n+1)ădivă2; - GhiădăliuălênămƠnăhình. Chương trình: Program Tinh_tong; Var n,s : integer ; Begin Write('nhap so nguyen duong n: '); readln(n); s:=0; s:=n*(n+1) div 2; Writeln('Tong', n, ' so tu nhien dau tien la: ',s); Readln End. BÀI TP CHNG 3. 1.ăVităchngătrìnhăănhpăđădƠiăbánăkínhăcaămtăhìnhătròn,ăinălênămƠnăhìnhăchuă viăvƠădinătíchăcaăhìnhătrònăđó. 2. a. VităchngătrìnhănhpămtăkýătựăbtăkỳăsauăđóăinălênămƠnăhìnhămƣăASCIIăcaă kýătựăđó. b.ăVităchngătrìnhănhpămtăsănguyênătrongăđonă[32 127],ăinălênămƠnăhìnhă kýătựăcóămƣăASCIIălƠăsăđó. 23
  24. 3.ăa.ăVităchngătrìnhănhpăvƠoăsănguyênădngăn,ăsăthực aăriăinălênămƠnăhìnhă giáătrăcĕnăbcănăcaăa.ă b.ăVităchngătrìnhănhpăcácăsădngăa,băriăinălênămƠnăhìnhălogab. 4.ăVităchngătrìnhănhpăvƠoă3ăctăđimăviăcácăhăsă1,2ăvƠă3.ăTínhăvƠăinălênămƠnă hìnhăđimătrungăbìnhăcng. 5.ăVităchngătrìnhănhpăvƠoăsănguyênădngăn,ăinălênămƠnăhìnhătổngăsau: S= 12 + 22 +32 + +n2. (Bităcôngăthcăs=n*(n+1)*(2*n+1)ădivă6) 6. HƣyăvităbiuăthcătoánăhcădiăđơyătrongăPascal: 7.ăHƣyăchuynăcácăbiuăthcătrongăPascalădiăđơyăsangăbiuăthcătoánăhcătngă ng. a. a/b*2; b. a*b*c/2; c. 1/a*b/c; d. b/sqrt(a*a+b); 8.ăHƣyăvităbiuăthcălôgicăchoăktăquătrueăkhiătaăđă(x,ăy)ălƠăđimănằmătrongăvùngă gchăchéoăkăcăbiênăcaăcácăhìnhă2.aăvƠă2.b. y y 1 x -1 O x 1 -1 O 1 -1 Hình 2a. Hình 2b. 9.ăHƣyăvităchngătrìnhănhpăsăaă(a>0)ăriătínhăvƠăđaăraădinătíchăphầnăđcăgchă chéoătrongăhìnhă3ă(ktăquălƠmătrònăđnăbnăchăsăthpăphơn). 24
  25. y a x a O a a Hình 3 10.ăLpătrìnhăvƠăđaăraămƠnăhìnhăvnătcăvăkhiăchmăđtăcaămtăvtăriătừăđăcaoăh,ă bitărằngă ,ătrongăđóăgă lƠăgiaătcăriătựădoă vƠăg = 9,8m2.ăĐăcaoăhă(m)ă đcănhpăvƠoătừăbánăphím. HNG DN GII BÀI TP 1. - Khaiăbáoăăbinărăkiuăsăthựcăđănhpăbánăkính,ăcácăbinăp,ăsăkiuăsăthựcăđă chaăchu viăvƠădinătích. - Nhpăbánăkínhăr. - TínhăchuăviăvƠădinătíchătheoăcôngăthc. - Thôngăbáoăktăqu.ă 2a - Khaiăbáoăăbinăchăkiuăcharăđănhpăkýătựăbtăkỳ. - Nhpăkýătự. - DùngăhƠmăORD(ch)ăđătìmămƣăASCIIăcaăkýătựăđóăvƠăthôngăbáoăktăqu. 2b - Khai báoăăbinănăkiuăsănguyênăăđănhpădăliu. - Nhpăsănguyênăn. - DùngăhƠmă CHR(n)ăđătìmăkýătựătngăngă viă mƣă ASCIIăcaăsă năđóă vƠă thôngăbáoăktăqu. 3a. - Khaiăbáoăăbinănăkiuăsănguyên,ăaăkiuăsăthựcăđănhpădăliu. - Nhpăn,a. - Dùng công thcăăexp(1/n*ln(a))ăđătínhăvƠăthôngăbáoăktăqu. 3b. - Khaiăbáoăăcácăbinăa,băkiuăsăthựcăđănhpădăliu.ă - Nhpăa,b. - Dùngăcôngăthcăăexp(b*ln(a))ăđătínhăvƠăthôngăbáoăktăqu. 25
  26. 4. - Khaiă báoăcácă binăa,b,căkiuăsă thựcăđă nhpă3ăctăđim;ă binătbcă kiuăsă thựcăđăchaăktăqu.ă - Nhpăa,ăb,ăc. - Dùngăcôngăthcăătbc:=ă(a+2*b+3*c)/6 - Thôngăbáoăktăqu. 5. - Khaiăbáoăăbinăn, săăkiuăsănguyênăđănhpădăliuăvƠăchaăktăqu. - Nhpănă(nguyênădng). - Tínhăăsătheoăcôngăthcăhngădn. - Thông báoăktăqu. 26
  27. CHNG 4. CỂU LNH CÓ CU TRỎC Mở đầu: Niădungăchngănầyăđaăraăcácăcơuălnhăcóăcuătrúcă(If,ăCase,ăFor,ăRepeat,ă While).ăTrongămỗiălnhăđaăraăcúăphápăcaătừngălnhăvƠăvíădụăminhăhaăchoătừngăcúă phápălnh.ăĐngăthiăphơnătíchăcáchăsădụngăcácăcơuălnhănhăthănƠoăchoăphùăhp.ă Mục tiêu: HcăxongăchngănƠyăSinhăviênă - Hiuăkháiănimărănhánh,ăbităđcăcuătrúcăchungăcaăcuătrúcărănhánh. - Bităsădụngăcácăcơuălnhărănhánh choăphùăhp. - HiuăđcăýănghĩaăvƠătácădụngăcaăcuătrúcălặp. - BitădùngăcácăcơuălnhălặpăvƠăcáchădùngăvòngălặpănƠoăchoăphùăhpăviăyêuă cầuăbƠiătoán. 4.1. Lnh ghép 4.1.1. Khái niệm: LnhăghépălƠătpăhpăcácălnhăđặtăgiaăcặpătừăăkhóaăbegin end; 4.1.2. Cú pháp: Begin CL1; CL2; end; (TrongăđóăCL1, CL2 ăkýăhiuăchoăcơuălnh1,ăcơuălênh2, ) 4.1.3. Ý nghĩa: Ghép nhiều lệnh thành một câu lệnh. 4.2. Lnh IF (cơu lnh r nhánh). 4.2.1. Cú pháp: Cóă2ădng: (1) If then CL1 else CL2; (2) If then CL; TrongăđóăBTLGăkýăhiuăchoăbiuăthcălogic. Dngă(1)ăcònăđcăgiălƠădngăđầyăđ,ăDngă(2)ăđcăgiălƠădngăthiu. 4.2.2. Ý nghĩa: (1)ăăNuăBTLGănhnăgiáătrătrueăthìămáyăsăthựcăhinăCL1,ăngcăliămáyăsă thựcăhinăCL2. (2)ăăNuăBTLGănhnăgiáătrătrueăthìămáyăsăthcăhinăCL,ăngcăliăthìăkhôngă thựcăhin. 4.2.3. Sơ đồ hoạt động: 27
  28. F F BTLG BTLG T T CL1 CL2 CL Dạng (1) Dạng (2) 4.2.4. Chú ý: ViălnhăIfădngă(1)ăsauăCL1ă(trcăelse)ăkhôngăcóăduă";"ăvìănuăcóăthìămáyă săhiuălƠălnhăifăădngă(2)ăsauăđóăgặpătừ khóaăelseămáyăsăbáoălỗiăvìăkhôngăcóălnhă này. 4.2.5. Các ví dụ: Ví dụ 1: Vităchngătrìnhăgiiăphngătrìnhăăăax+b=0. Hướng dẫn: - Khaiăbáoăcácăbinăa, băkiuăsăthựcăđănhpădăliu,ăxăđăchaănghim. - Nhpăa,b. - BinălunănghimătheoăaăvƠăb. - ThôngăbáoăktăquălênămƠnăhìnhăchoătừngătrngăhp. Chương trình: Program ph_tr_bac_nhat; Var a,b,x : real; Begin Write('nhap he so a,b : '); readln(a,b); If a 0 then Writeln('phuong trinh vo nghiem') Else Writeln('pt vo dinh - nghiem la moi x '); Readln End. 28
  29. 2 Ví dụ 2: VităchngătrìnhătínhăgiáătrăcaăhƠm: x 1 x>0 f(x) = x 3 2 0 x Hướng dẫn: x 1 - Khaiăbáoăcácăbinăxăăkiuăsăthựcăđănhpăđiăs,ăfăđăchaăgiáătrăhàm. - Nhpăx. - Binălunătheoăxăđătínhăf. - ThôngăbáoăktăquălênămƠnăhìnhăsăthựcăfătheoădngăcóăquyăcách. Chương trình: Program Ham_so; Var x,f : real; Begin Write('nhap he doi so x : '); readln(x); If x>0 then f:=abs(sqr(x)+1) Else f:= exp(1/3*ln(sqr(x)-1); Writeln(' f(',x:5:2,')=',f:8:2) Readln End. 4.3. Lnh CASE (cơu lnh lựa chn) 4.3.1. Cú pháp: Cóă2ădng: (1) Case of TH1: CL1; TH2: CL2; THn: CLn; Else CLn+1; End; (2) Case of TH1: CL1; TH2: CL2; THn: CLn; End; 4.3.2. Giải thích: btă kýă hiuă choă biuă thc;ă TH1,TH2, ,THnă kýă hiuă choă cácă tpă hằng;ă CL1, CL2, , CLn, CLn+1ăkýăhiuăchoăcácăcơuălnh. 4.3.3. Ý nghĩa: (1)ăTùyăthucăvƠoăgiáătrăcaăbiuăthcăbt thucăvƠoătpăhằngănƠoămƠămáyătínhă săthựcăhinăcơuălnhătngăng.ăNuăkhôngăsăthựcăhinăCLn+1ă; 29
  30. (2)ăTngătựădngă(1),ăchỉăkhácăăchổănuăgiáătrăcaăbiuăthcăkhôngăthucă tpăhằngănƠoăcăthìămáyăsăkhôngăthựcăhinăcơuălnhănƠoăcătrongăthơnălnhăCASE vƠăsăthoát. 4.3.4. Chú ý: (1).ăGiáătrăcaăbtăphiăcóăcùngăkiuăviăcácăphầnătăcaătpăhằngăvƠăphiălƠă kiuăvôăhngăđmăđc. (2).ăTpăhằngăcóăthălƠămtăgiáătr,ămtătpăhpăcácăgiáătr,ăvƠăthmăchíălƠămtă kiuădăliuă(kiuăđonăcon,ălităkê). (3).ăLnhăCASEăcóăthăđcăthayăthăbiănhiuălnhăăIFălngănhauăvƠăngcă liălnhăIFăcũngăcóăthăđcăthayăthăbằngălnhăCASEăăvíădụălnhăIFădngă(1)ăcóăthă đcăthayăthăbằng: CASE OF True: CL1; False: CL2; END; TuyănhiênăsădụngălnhăcaseăhayăifălƠătùyăvƠoătừngăbƠiătoánăcụăth. 4.3.5. Các ví dụ: Ví dụ 1: VităchngătrìnhănhpăvƠoămtăsănăbtăkỳătrongăđonă[0 255] và thông báo lên màn hình: - Câu thông báo: ' Day la ky tu dieu khien'. (nuăn < 32); - Câu thông báo: ' la ky tu thongădung'.ă(nuă127 n 32); - Cơuăthôngăbáo:ă'ălaăkyătuădacăbietă'.ă(nuănă 128); Hướng dẫn: - Khaiăbáoăbinănăăkiuăbyteăăđănhpădăliu. - Nhpăn. - DùngălnhăCASEăđăphơnăchiaăcácătrngăhpătheoănăvƠăthôngăăbáoăktăquă lên màn hình theoăyêuăcầu. Chương trình: Var n : byte; Begin Write('nhap so n (0<=n<=255) : '); Readln(n); CASE n of 0 31 : Writeln(' Day la ky tu dieu khien'); 32 127 : Writeln(chr(n),'la ky tu thong dung'); 128 255 : Writeln(chr(n),' la ky tu dac biet'); END; Readln 30
  31. End. Ví dụ 2: VităchngătrìnhănhpăvƠoăthángătă(12 t 1),ăcóăthănhpăthêmănĕmă sauăđóăinălênămƠnăhìnhăsăngƠyăcaăthángăđó. Hướng dẫn: - Khaiăbáoăbinătăăkiuăbyteăăđănhpătháng;ăbinănăkiuăsănguyênăđănhpă nĕm;ăbinăsnăkiuăbyteăđăchaăsăngƠyăcaătháng.ă - Nhpăt. - DùngălnhăCASEăđăphơnăchiaăcácătrngăhpătheoăt:ă * t [1,3,5,7,8,10,12] thì sn:=31; * t [2,4,6,9,11] thì sn:=30; *ăt=2ăthìănhpăthêmănĕmăn,ănuănălƠănĕmănhunăthìăsn:=29,ăngcăli sn:=28; - ThôngăbáoăktăquăsnălênămƠnăhình. Chương trình: Var t,sn : byte; n: Integer; Begin Write('nhap so thang t (1<=t<=12) : '); readln(t); CASE t of 1,3,5,7,8,10,12: sn:=31; 4,6,9,11 : sn:=30; 2 : Begin Write(' nhap nam: '); readln(n); If n mod 4 = 0 then sn:=29 Else sn:=28; End; ELSE writeln('khong co thang do'); END; If t<=12 then Writeln('so ngay cua thang ',t,'la: ',sn); Readln End. 4.4. Lnh FOR (Lặpăbitătrcăsălần). 4.4.1. Cú pháp: Cóă2ădng: (1) For bdk:= bt1 to bt2 do CL; (2) For bdk:= bt2 downto bt1 do CL; (Trongăđóăbdkăkýăhiuăchoăbinăđiuăkhin;ăbtăkýăhiuăchoăbiuăthc). 4.4.2. Ý nghĩa: 31
  32. (1)ăăCơuălnhăCLăsăđcălặpăđúngăbằngăsălầnămƠăbdkăđcăgánătĕngădầnălầnă ltătừăgiáătrăcaăăbt1ăđnăgiáătrăcaăbt2. (2)ăăCơu_lnhăsăđcălặpăđúngă bằngăsă lầnă mƠă bdkăđcăgánăgimădầnă lầnă ltătừăgiáătrăcaăăbt2 đnăgiáătrăcaăbt1. 4.4.3. Sơ đồ hoạt động: Bdk:=bt1; Bdk:=bt2; F F Bdk =bt1 T T CL; CL; inc(bdk); dec(bdk); Dạng (1) Dạng (2) 4.4.4. Chú ý: (1).ăBinăđiuăkhinăbdkăphiăcóăkiuăvôăhngăđmăđcă(thngălƠăkiuăsă nguyên). (2).ăTrongăthơnăcơuălnhăforăkhôngăđcălƠmăthayăđổiăgiáătrăcaăbdk vìănhă thăsăkhôngăkimăsoátăđc binăđiuăkhinăvƠăcóăthădnăđnătrìnhătrngălặpăvôă hn. KhiăđóătaăsădụngătổăhpăphímăCtrlă+ăBreakăđădừngăchngătrình. (3).ăCóăthăsădụngălnhăBREAKăđăthoátăkhiălnhăFORăcũngănhăthoátăkhiă cácălnhăWHILE,ăREPEAT. 4.4.5. Các ví dụ: Ví dụ 1: VităchngătrìnhăhinăthălênămƠnăhìnhămƣăASCIIăvƠăcácăkýătựătngă ng,ăcă20ăkýătựătrênămtătrangămƠnăhình. Hướng dẫn: - KhaiăbáoăbinăđiuăkhinăălnhăFORălƠăăiăăăkiuăbyte; - DùngălnhăFORăădngă(1)ăviăbinăđiuăkhinăiăchyătừăă0ăđnă255,ăăviămỗiă giáătrăcaăiătaăghiălênămƠnăhìnhăkýătựăcóămƣăASCIIătngăng;ăSauăđóăkimătraăxemă nuăi+1ăchiaăhtăchoă20ăthìădùngălnhăreadlnăđătmădừngămƠnăhình. Chương trình: 32
  33. Var i : byte; Begin For i:=0 to 255 do Begin Writeln('ky tu tuong ung voi ma',i,' la:', chr(i)); If i+1 mod 20 = 0 then readln; End; End. Ví dụ 2: Vită chngă trìnhă tínhă tổng: S = 13+23+33+ +n3 (nă nhpă từă bƠnă phím) Hướng dẫn: - Khaiăbáo:ăBinănăkiuăsănguyênăintegerăđăchaădăliuănhpăvƠo. BinăSăkiuălongintăđăluăktăqua. - Nhpăn. - KhiăgánăS:=0; - DùngălnhăFORăădngă(1)ăviăbinăđiuăkhinăiăchyătừă1ăđnăn,ăăviămỗiăgiáă trăcaăiătaăthựcăhinălnhăcngădnăS:=ăS+ăsqr(i)*i; - GhiăktăquăSălênămƠnăhình. Chương trình: Program Tinh_tong; Var n,s,i : integer ; Begin Write('nhap so nguyen duong n: '); readln(n); s:=0; For i:=1 to n do s:=s+sqr(i)*i; Write('Tong', n, ' so tu nhien dau tien la: ',s); Readln End. 4.5. Lnh REPEAT (lặpăviăsălầnăkhôngăbitătrc). 4.5.1. Cú pháp: Repeat CL1; CL2; CLn; Until ; 4.5.2. Ý nghĩa: ThựcăhinălầnăltăcácăcơuălnhătừăCL1ăđnăCLnăsauăđóăkimătraăgiáă trăcaăbiuăthcălogic,ănuăsaiăthìălặpăli,ănuăđúngăthìăthoát.ă 4.5.3. Sơ đồ hoạt động: 33
  34. CL1 CL2 CLn F BTLG T 4.5.4. Chú ý: (1).ăCácăcơuălnhănằmăgiaărepeat ăuntilăkhôngăcầnăphiăsădụngăcặpătừăkhóaă begin end; (2).ăTrongăthơnăcaălnhărepeatăthngăphiăcóăcơuă lnhă lƠmăthayăđổiăgiáătră caăbiuăthcălogicănuăkhôngădădnăđnătìnhătrngălặpăvôăhn. (3).ăKhiăthựcăhin chngătrìnhănuăbălặpăvôăhnăthìănhnătổăhpăphímăCTRL- BREAKăđădừngăchngătrình. (4).ăLnhărepeatăthngăđcăsădụngăkhiăphiăthựcăhinăítănhtălƠămtălầnăcácă cơuălnhătừăCL1ăđnăCLnăvƠăsălầnălặpăkhôngăxácăđnhăđcătrc.ă(Trongătrngă hpăbitătrcăsălầnălặpătaănênădùngălnhăfor). 4.5.5. Các ví dụ: Ví dụ 1: SădụngălnhărepeatăđălcădăliuăvƠoătheoăyêuăcầu,ăchẳngăhnăcầnă nhpănănguyênădngătaăvitănhăsau: Repeat Write('nhap n >0 : '); Readln(n); Until n>0; Ví dụ 2: Vităchngătrìnhănhpăđimă6ămônăthiăsauăđóătínhăđimătrungăbình,ă viăyêuăcầuămỗiălầnătínhăxongăliăthôngăbáoălênămƠnăhìnhăcơu:ă'ăTiepătucăhayăkhongă (c/k)?',ănuă nhpă'c'ăthìăliătipătục,ănuănhpă'k'ăthìăktăthúc. Program Diem_trung_binh; Var a,b,c,d,e,f : real; Ch:char; Begin 34
  35. Repeat Write('nhap diem 6 mon thi a,b,c,d,e,f : '); readln(a,b,c,d,e,f); Writeln('DTB la:',(a+b+c+d+e+f)/6:4:2); Writeln('Tiep tuc nua khong?'); readln(ch); Until upcase(ch)='K'; End. Ví dụ 3: Vităchngătrìnhă nhpă vƠoă mtăsă nguyênădngă btăkỳăriă ină lênă mƠnăhìnhăsăchăsăcaăsăđó. Hướng dẫn: -KhaiăbáoăbinănăvƠăbinădemăăkiuăIntegerăđănhpădăliuăvƠăđmăsăchăs. -Nhpăn. -Khiăgánăbinădem:=0. -Mỗiălầnătĕngăbinădemălênă1ăthìăloiăbăđiăchăsăsauăcùngăcaănăbằngălnhă gánăliăn:=nădivă10ăvƠăliălặpăliăchoăđnăkhiănă=ă0ăthìăthôi. -ThôngăbáoăktăquălƠăgiáătrăbinădemălênămƠnăhình. Chương trình: Program Dem_so_chu_so; Var n,dem : integer; Begin Repeat Write('nhap n >0 : ');Readln(n); Until n>0; Dem:=0; n1 := n; Repeat Dem:=dem+1; n:=n div 10; until n = 0; writeln('so', n1, ' co ',dem,' chu so'); readln End. 4.6. Lnh WHILE (lặpăviăsălầnăkhôngăbitătrc). 4.6.1. Cú pháp: While do CL; 4.6.2. Ý nghĩa: Khi nƠoăBTLGăcònănhnăgiáătrătrueăthìămáyăcònăthựcăhinăcơuălnhă CL. 4.6.3. Sơ đồ hoạt động: 35
  36. F BTLG T CL 4.6.4. Chú ý: (1).ăCũngăgingălnhăRepeat,ătrongăthơnăcaălnhăwhileăphiăcóăcơuălnhălƠmă thayăđổiăgiáătrăcaăbiuăthcălogicănuăkhôngădădnăđnătìnhătrngălặpăvôăhn. (2).ă Khácă viă lnhă repeată lnhă whileă kimă traă điuă kină caă biuă thcă logică trc,ănênăcóăthăcơuălnhătrongăthơnăcaănóăkhôngăđcăthựcăhinămtălầnănƠoăcă khiămƠăngayătừăđầuăbiuăthcălogicănhnăgiáătrăsai.ă 4.6.5. Các ví dụ: Ví dụ 1: Sădụngălnhăwhile,ăvităchngătrìnhănhpăvƠoămtăsănguyênădngă btăkỳăriăinălênămƠnăhìnhăsăchăsăcaăsăđó. Chương trình: Program Dem_so_chu_so; Var n,dem : integer; Begin Repeat Write('nhap n >0 : '); Readln(n); Until n>0; Dem:=0; n1 := n; While n>0 do Begin Dem:=dem+1; n:=n div 10; End; writeln('so', n1, ' co ',dem,' chu so'); readln End. Ví dụ 2: Vită chngă trìnhă nhpă vƠoă haiă să nguyênă dngă riă tìmă că să chungălnănhtăcaăchúng. Program UCLN; Var m,n: integer; Begin 36
  37. Repeat Write('nhap m,n nguyen duong : '); Readln(m,n); Until (m>0) and (n>0); While m n then m:=m-n else n:=n-m; writeln('UCLN cua hai so do la: ',m); readln End. BÀI TP CHNG 4. 4.1. Lnh If vƠ Case: 1. VităchngătrìnhănhpăvƠoă3ăsănguyên,ăinăraămƠnăhìnhăsălnănht. 2. Vităchngătrìnhăgiiăphngătrìnhăbcăhai. 3. Vităchngătrìnhănhpă3ăs,ăchoăbităchúngăcóăthălƠăđădƠiă3ăcnhăcaămtătamă giác hay không? 4. VităchngătrìnhănhpăvƠoăsăKWăđinătiêuăthụăcaămtăhăgiaăđình,ăinăraămƠnă hìnhăsătinătngăng,ăbitărằngăgiáăthƠnhăđcătínhănhăsau: - TừăKWăthăă1ăđnăthă100ăgiáă0.5ănghìnăđng. - TừăKWăthăă101ăđnăthă200ăgiáă0.8ănghìnăđng. - TừăKWăthăă201ătrălênăgiáă1.5ănghìnăđng. 5. Đonăchng trìnhăsauăđơyăđúngăcúăphápăhayăkhông?ăNuăđúngăchoăbităýănghĩaă caănó: Var a,b : Integer; Begin Write(' nhap a,b: '); readln(a,b); Case a<b of True: writeln(a, '<', b); False: writeln(b, '<=', a); End; Readln End. 4.2. Lnh For, Repeat vƠ While: 1. Vităchngătrìnhătínhăăcácătổngăsau: a. S = 1 - 2 + 3 - +(-1)n-1n b. S = 1 + 1*2 + 1*2*3 + + 1*2*3* *n c. S = 1 - 1*22 + 1*2*32 - + (-1)n-11*2*3* *n2 2. Vităchngătrìnhătìmăbiăsăchungănhănhtăcaăhaiăsănguyênădng. 37
  38. 3. VităchngătrìnhănhpăvƠoămtăsănguyênădng,ăinăraămƠnăhìnhăsăđoăngcă caăsăđó.ă 4. VităchngătrìnhănhpăvƠoăhaiăsănguyênădngăm,nă(m =3)). 8. MtăngiăcóăsătinătăđemăgiăngơnăhƠngăviălƣiăsutăk/thángă(bitărằngălƣiăcaă thángătrcăđcănhpăvƠoătinăgcăđătínhălƣiăchoăthángătipătheo).ăHiăđăcóăđcă sătinămaxă(max>t)ăthìăngiăđóăphiăgiătităkimăbaoănhiêuătháng?ă(t,ăk,ămaxăđuă nhpătừăbƠnăphím). 9. Vităchngătrìnhătìmăcácăsăa, b, căthaămƣn: 10. VităchngătrìnhăphơnătíchămtăsănguyênăthƠnhătíchăcaăcácăsănguyênăt. 11. Vităchngătrìnhăgii bài toán: "ăăVừaăgƠăvừaăchó, Bóăliăchoătròn Baămiăsáuăcon. Mtătrĕmăchơnăchẵn". HiăcóăbaoănhiêuăconăgƠ,ăbaoănhiêuăconăchó? 12.ăVităcơuălnhărănhánhătính: a. b. 13.ăLpătrìnhătính: a. 38
  39. b. Đaăgiáătrăe(n)ăraămƠnăhình. 14. NhpătừăbƠnăphímătuổiăcaăchaăvƠăconă(hinătiătuổiăchaălnăhnăhaiălầnătuổiăconă vƠătuổiăchaăhnătuổiăconăítănhtălƠă25).ăĐaăraămƠnăhìnhăcơuătrăliăchoăcơuăhiă“Baoă nhiêuănĕmănaăthìătuổiăchaăgpăđôiătuổiăcon?” 15.ăMtăngiăgiătităkimăkhôngăkìăhnăviăsătinăAăđngăviălƣiăsută0,3%ămỗiă tháng. Hiăsauăbaoănhiêuătháng,ăngiăđóărútăhtăsătinăthìăsănhnăđcăsătinăítă nhtă lƠăBăđng?ăBitărằngă viă vicăgiătităkimăkhôngăkìăhnăthìălƣiăkhôngăđcă cngăvƠoăvn. HNG DN GII BÀI TP 1. - NhpăvƠoă3ăsăa,b,c - Khiăgánămax:=a; - Soăsánhămaxăviăb,cănuămaxăbéăhnăthìăgánăliămax. 2. - Nhpăcácăhăsăa,b,c - Tính dt:=b*b - 4*a*c; - SădụngălnhăIfăăbinălunănghimătheoădtăvƠăthôngăbáoăktăqu. 3. - Nhp cácăhăsăa,b,c - Sădụngă lnhă Ifă bină lun:ăNuăđngăthiăxyăraăa+b>c,ă b+c>a,ăc+a>băthìă thôngăbáoăa,b,căđúngălƠăđădƠiă3ăcnhăcaămtătamăgiácănƠoăđó.ăNgcăliăthìăkhôngă phi. 4. - NhpăvƠoăsăKWăđinătiêuăthụ. - DùngălnhăIfăhoặcăcaseăđăbinălunăvƠătínhătinătheoăgíaăthƠnh. - Thôngăbáoăktăqu. 5. - ĐonăchngătrìnhătrênăhoƠnătoƠnăđúngăcúăpháp; - Ýă nghĩaă caă nóă lƠă choă phépă nhpă vƠoă haiă să nguyênă a,b.ă Nuă aă <bă thìă să thôngăbáoălênămƠnăhìnhăbtădẳngăthcăđó,ăngcăliăthôngăbáoăbtăđẳngăthcăbă<=ăa. 8. - NhpăvƠoămtăsănguyênădng. - DùngălnhăRepeatăhoặcăWhileăđălặpăliăcôngăvicăsauăđơyăchoăđnăkhiăn=0ă thìădừng: +ăGhiălênămƠnăhìnhăchăsăcuiăcùngăcaănă(nămodă10)ăbằngălnhăwrite; +ăLoiăbăchăsăcuiăcùngăbằngăcáchăgánăliăn:=ănădivă10. 9. - Nhpăsăm,ănănguyênădngă(m<n); 39
  40. - Dùngălnhăforălầnăltăduytăttăcăcácăsătừămăđnăn,ănuăđúngălƠăsăhoƠnă hoăthìăthôngăbáo,ănuăkhôngăthìăbăqua. 10. - Nhpăsăn. - Khiăgánăi:=2; - SădụngălnhăWhileălặpăli:ăChừngănƠoăi 0 thì tĕngăiălênă1;ăSauăđóăkimătraănuăđngăthiăi ăround(sqrt(n))iănăăthìănălƠăsă nguyênăt;ăNgcăliănăkhôngăphiălƠăsănguyênăt. 11. - Nhpăsăănănguyênădng; - Dùngălnhăforălầnăltăduytăttăcăcácăsătừă1ăđnăn,ănuăđúngălƠăs nguyên tăthìăthôngăbáoănuăkhôngăthìăbăqua. 12. - Khiăgánăa:=1,ăb:=1; - DùngălnhăRepeatălặpăli: c:=a+b; a:=b; b:=c; Choăđnăkhiăăăc>ă2000ăthìădừngăli. - ThôngăbáoăktăquălƠăa. 13. - Nhpăt,ăk,ămax. - Khiăgánăst:=0;ă(stălƠăsătháng). - DùngălnhăăRepeatălặpălai: + st:=st+1; + t:=t+t*k; . Choăđnăkhiătă>=ămaxăthìădừng. - ThôngăbáoăktăquălƠăst. 14. - GiăsăcầnătìmăcóăcácăchăsălƠăa,b,c. - Sădụngă3ălnhăforălngănhauăđăthăhtăttăcăcácăkhănĕngăcaăa,b,cătừă1ă đnă9,ănuătha mƣnă100*a+10*b+c=11*(a+b+c)ăthìăthôngăbáoăktăqu. 15. - Nhpăn. - Khiăgánăi:=2. - Ghi ra màn hình write('n= '); - DùngălnhăWhileălặpăli: While i<= n do If n mod i = 0 then begin If i<n then write(i,'*') Else write(i); 40
  41. n:= n div i; end else i:= i+1; 16. - KhaiăbáoăbinăgăđăchaăsăgƠ. - Sădụngălnhăforăduytăhtăttăcăcácăkhănĕngăcaăgă(từă1ăđnă36) Nuă2*g+4*(36-g)=100(*)ăăthìăthôngăbáoăSăgƠălƠăg,ăsăchóălƠă36ă- g. Chú ý: Cóăthăkhaiă báoăthêmă binădemăkiuă nguyênă vƠ khiăgánădem:=0ăđă đmăsănghim,ăcămỗiălầnăđẳngăthcă(*)ăthõaămƣnăthìătĕngăbinăđmălênă1.ăCuiă cùngăsăthôngăbáoăbƠiătoánăcóădemănghim;ătrngăhpădemă=ă0ătcălƠăvôănghim.ă 41
  42. CHNG 5. KIU D LIU TP HP, KIU MNG, KIU XỂU Mở đầu: Niădungăchngănầyăđaăraăcácăkiuădăliuăcóăcuătrúcă(Set,ăArray,ăString). Trongă mỗiă kiuă dă liuă raă cúă phápă caă từngă kiu,ă cáchă đnhă nghĩaă vƠă khaiă báoă chúng. Đngăthiămôătăcácăthaoătácătrênătừngăkiuăbằngăcácăvíădụăminhăha. Mục tiêu: HcăxongăchngănƠyăSinhăviên - Hiuăđcădăliuăkiuătpăhp,ăkiuămng,ăkiuăxơu. - Bităcáchăkhaiăbáoăchoătừngăkiuădăliu. - Hiuăđcăcuătrúcăcaătừngăkiuădăliu - BităcáchăsădụngăkiuădăliuăchoăphùăhpăviăyêuăcầuăbƠiătoán. 5.1. Kiu tp hp 5.1.1. Khái niệm: Tpăhpă lƠăkiuădă liuăcóăcuătrúcă baoăgmăcácăphầnătăcóăcùngă kiuă vôă hngăđmăđcănƠoăđó. 5.1.2. Định nghĩa kiểu vàkhai báo biến: Định nghĩa kiểu: Type ten_kieu = Set of tap_hop; Giiăthích:ăăăTypeălƠătừăkhóaăđăkhaiăbáoăkiu; + Ten_kieu do ngiă să dụngă tựă đặtă lyă đúngă theoă quyă đnhă caă Turboă Pascal; + SetăăofăălƠătừăkhóaăđăkhaiăbáoăkiuătpăhp. + Tap_hopă LƠă mtă tpă hpă gmă cácă phầnă tă cóă cùngă kiuă vôă hngă đmă đc,ăvíădụ:ă1 10;ăăbyte;ăă'a' 'z'; Khai báo biến: Sauăkhiăđƣăkhai báoăkiuătaăcóăthăăkhaiăbáoăbinăthôngăquaătênăkiu. Ví dụ: Type chu_cai = set of 'a' 'z'; Tuoi = set of 0 250; Var ch: chu_cai ; t1,t2 : tuoi; Cũngăcóăthăkhaiă báoă bină tpăhpătrựcătipăkhôngăthôngăquaăkhaiă báoă kiuă nhăsau: Var ten_bien : Set of tap_hop; Ví dụ: Var ch : set of 'a' 'z'; t1,t2 : set of 1 250; 42
  43. Chú ý: (1).ăTap_hopăchoăphépătiăđaălƠă256ăphầnăt. (2).ăGiáătrăcaămtăbinăkiuătpăhpălƠămtătpăhpăconăcaătap_hop,ăkhiăbiuă dinăcácăphầnătăđóăphiăđcăđặtătrongăcặpăduămócăvuôngă"ă[ ]". (3).ăTap_hopăcóăthăbiuădinădiădngăkiuăđonăcon,ăkiuălităkê,ăcácăkiuă căsănhăbyte;ăchar (4).ăTpăhpărỗngăđcăbiuădinălƠă"[]". 5.1.3. Các phép toán: a. Các phép quan hệ: Choăa,bălƠăcácăbinăcóăcùngămtăkiuătpăhpăkhiăđóătaăcóăcácăphépătoán: a=băăăăăKhiăaăvƠăbăbằngănhauă(theoănghĩaătpăhp). a =băăăKhiăbălƠătpăconăcaăa. Chú ý: Khôngătnătiăphépă">"ăhayămhăhnă" b) b. Phép toán IN: PhépătoánăINădùngăđăkimătraăxemămtăphầnătănƠoăđóăcóămặtătrongămtătpă hpăhayăkhông? Ví dụ: 'a'ăăinăă['a' 'z']ăăchoăgiáătrălƠătrue. c. Các phép toán tập hợp: Phépăhpăđcăbiuădinăbiăduă"+",ăvíădụăAă BăđcăvitălƠăAă+ăB. Phépăgiaoăđcăbiuădinăbiăduă"*",ăvíădụăAă Băđcăvitălà A * B. Phépăhiuăđcăbiuădinăbiăduă"ă-",ăvíădụăAă\ BăđcăvitălƠăAă- B. 5.1.4. Ví dụ: VităchngătrìnhănhpămtăchăcáiăriăchoăbităđóălƠănguyênăơmăhayălƠăphụă âm. Hướng dẫn: - Khaiă báoă bină chu_caiă vƠă bină nguyen_amă kiuă tpă hpă mƠă cácă phần tă thucăkiuăChar;ăkhaiăbáoăbinăchăkiuăcharăđăchaăchăcáiănhpăvƠo. - Đnhănghĩaătpăchăcáiăgmăcácăphầnătătừă'a'ăđnă'z'ăvƠă'A'ăđnă'Z';ănguyênă ơmăgmăcácăchă'A','E','I','O','U'. - Nhpămtăchăcái. SădụngăphépătoánăINăđăkimătraăvƠăthôngăbáo ktăquă Chương trình: Program NguyenAm; 43
  44. Var chu_cai, nguyen_am : set of char; Ch:char; Begin chu_cai :=['a' 'z','A' 'Z']; Nguyen_am :=['A','E','I','O','U']; Repeat Write('nhap mot chu cai: '); Readln(ch); Until ch in chu_cai; If upcase(ch) in nguyen_am then writeln(ch,' la nguyen am') Else writeln(ch, ' la phu am'); Readln End. 5.2. Kiu mng 5.2.1. Khái niệm: Mngă lƠă kiuă dă liuă cóă cuă trúcă baoă gmă mtă să că đnhă cácă phầnă tă cóă cùngăkiu,ăcùngămtătênăchung.ăMỗiăphầnătăcaămngăcóăthăxemănhălƠămtăbin. 5.2.2. Định nghĩa kiểu và khai báo biến: - Định nghĩa kiểu: Type ten_kieu = Array[CTCS] of KPT; Giiăthích:ă + TypeălƠătừăkhóaăđăkhaiăbáoăkiu; + Ten_kieuă doă ngiă să dụngă tựă đặtă lyă đúngă theoă quyă đnhă caă Turbo Pascal; + CTCSăkýăhiuăchoăcácătpăchỉăs. + KPTăkýăhiuăchoăkiuăphầnătăvƠăphiălƠăăkiuăđnăginăchuẩn,ăcũngăcóăthă lƠăkiuămng - Array,ăofăălƠătừăkhóaăđăkhaiăbáoăkiuămng. - Khai báo biến: Sauăkhiăđƣăkhaiăbáoăkiuătaăcóăthăăkhaiăbáoăbin thông qua tênăkiu. Ví dụ: Type Mang_nguyen = array[1 100] of integer; Mang_thuc = array[1 50] of real; Var m: mang_nguyen ; a,b : mang_thuc; Khiăđóă mă lƠă mtă binăkiuă mngă nênăcóăcácăphầnăt:ă m[1],ă m[2], ,m[100].ă Mỗiăphầnătănhăth cóăthăxemănhălƠămtăbinăkiuăsănguyênăvƠăđcăbiuădină thôngăquaătênăbinăvƠăchỉăsă(đặtătrongăcặpăduămócăvuôngă"[ ]"). 44
  45. Tngătựăa, băcũngăcóăcácăphầnătăălƠăa[1],ăa[2], ,a[50];ăb[1],ăb[2], ,b[50]. Cũngăcóăthăkhaiăbáoăbinămngătrựcătipăkhôngăthôngăquaăkhaiăbáoăkiuănhă sau: Var ten_bien: Array[CTCS] of KPT; Ví dụ: Var m : array[1 100] of integer; a,b : array[1 50] of real; Chú ý: (1).ăCácătpăchỉăsăphiă lƠăcácăkiuădăliuă vôăhngăđmăđcăvƠă chỉăgmă huăhnăphầnăt.ăVí dụăkiuăđonăcon,ăkiuălităkê,ăkiuăbyte (2).ăNuăcóănhiuătpăchỉăsăthìădùngăduăphẩyă","ăđăngĕnăcách.ăCóăbaoănhiêuă tpăchỉăsăthìămngătngăngăđcăgiălƠăbyănhiêuăchiuăvƠăsăphầnătăcaămngă bằngătíchăsăphầnătăcaăcácătpăchỉăsăđó.ă Ví dụ: Var m : array[1 10,1 5] of integer; Khiăđóămăcóă50ăphầnătă(10*5),ăcácăphầnătăcaăbinămngămălƠ: m[1,1], m[1,2], ,m[1,5]. m[2,1], m[2,2], ,m[2,5]. m[10,1], m[10,2], ,m[10,5]. (4).ăKhôngăthăđcăvƠăghiădăliuăchoătoƠnăbinăkiuămngăămƠăphiăthựcăhină thôngăquaătừngăphầnătăcaăbinămng. 5.2.3. Các thao tác đối với biển kiểu mảng: a. Gán một biến mảng cho một biến mảng khác: Cho a, bălƠăcácăbinăcóăcùngămtăkiuămngăvƠăgiăsăcácăphầnătăcaăbinăaă đƣăđcăgánăgiáătr,ăkhiăđóătaăcóăthădùngălnhăgánăb:=a;ăSauălnhăgánănƠyăcácăphầnă tăcaăbinămngăbăcóăgiáătrătngăngăgingănhăcácăphầnătăcaăbinămngăa. Ví dụ: Var a,b : array[1 5] of byte; i:byte; Begin For i:=1 to 5 do a[i] := i; b:=a; End. ThựcăhinăchngătrìnhănƠyătaăcó: a[1]=b[1]=1; a[2]=b[2]=2; 45
  46. a[5]=b[5]=5; b. Sắp xếp các phần tử của mảng: GiăsătaăcóămtăăbinămngăchaăcácăphầnătănƠoăđóăcóăkiuăvôăhngăđmă đc,ăvnăđăđặtăraălƠăhƣyăsắpăxpăcácăphầnătăđóătheoăthătựătĕngă dầnăhayăgimă dần. ĐơyălƠăbƠiătoánăsắpăxpăcăbn,ăngiătaăđƣătìmăraănhiuăthutătoánăsắpăxpăhayă nhăthutătoánăsắpăxpă"nổiăbt",ăthutătoánă"chèn", ăTuyănhiênăăđơyătaăđaăraămtă cáchăsắpăxpăđnăginăsau: Giăsăcầnăsắpăxpăcácăphầnătăa[1], a[2], ,a[n]ătheoăthătựătĕngădầnătaădùngă đonăchngătrìnhăsau: For i:=1 to n-1 do For j:=i+1 to n do if a[i] > a[j] then begin tg:=a[i]; a[i]:=a[j]; a[j]:=tg; end; Trongăđonăchngătrìnhătrên,ăviămỗiăgiáătrăcaăiătaăsădụngălnhăforăviăbină điuăkhinăjăđălầnăltăsoăsánhăa[i]ăviăttăcăcácăphầnătăa[j]ăđngăsauănó,ănuăa[i]ă lnăhnăa[j]ăthìătaăđổiăchổăa[i]ăvƠăa[j]ăchoă nhau,ă nhăvyăthìăphầnătăa[i]ăsăđngă đúngăvătríăcaănóătrongădanhăsáchăsắpăxp.ăChoăiăălầnăltăđiătừă1ăđnăn-1ătaăsăcóă danhăsáchăđcăsắpăxpăhoƠnăchỉnh. HoƠnătoƠnătngătựăchoăvnăđăsắpăxpăgimădần. 5.2.4. Các ví dụ: Ví dụ 1: Vităchngătrìnhă nhpă vƠoă nă să nguyênădngăriătínhătrungă bìnhă cngăvƠătrungăbìnhănhơnăcaănó. Hướng dẫn: - Khaiăbáoăbinăn, iăkiuăsănguyên.ăBinămngămăkiuăsănguyênăđăchaădƣyă sănhpăvƠo.ăCácăbinătbc,tbnăkiuăsăthựcăđăchaăktăqu. - Sădụngălnhăforătínhătổng,ătíchăcaănăsănguyênădngăđóătừăđóătínhătrungă bìnhăcngăvƠătrungăbìnhănhơn. - ThôngăbáoăktăquălênămƠnăhình. Chương trình: Program Tinh_tb; 46
  47. Var n,i: integer; tbc,tbn :real; a:array[1 100] of integer; Begin Repeat Write(' nhap n : '); Readln(n); Until n>0; tbc:=0; tbn:=1; For i:=1 to n do Begin Repeat Write('a[',i,']= '); Readln(a[i]); Until a[i] >0; Tbc:=tbc+a[i]; Tbn:=tbn*a[i]; End; tbc:= tbc/n; tbn:= exp(1/n*ln(tbn)); writeln('trung binh cong cua day la:', tbc:8:2); writeln('trung binh nhan cua day la:', tbn:8:2); Readln End. Ví dụ 2: VităchngătrìnhănhpăvƠoămtădƣyă10ăsănguyênăkhácănhauătùngăđôiă mt.ăHƣyăchỉăraăđădƠiăcaădƣyăconăgmăcácăphầnătăliênătipătĕngămƠăcóăsăphầnătă nhiuănht.ă Víădụ:ăNuănhpăvƠoădƣy:ăă2,ă4,ă1,ă5,ă8,ă7,ă9.ăăThìăđădƠiăcầnătìmălƠă3ă(caădƣyă con: 1, 5, 8). Hướng dẫn: - Khaiăbáoăbinăi,j,ăkiuăsănguyên.ăBinămngămăkiuănguyênăđăchaădƣyăsă nguyênănhpăvƠo.ăBinădăđăchaăđădƠiăcaădƣyăconătmăthi,ăBinămaxăđăchaăđă dƠiăcựcăđiăcaădƣyăconăđnăthiăđimăđangăxét. -Nhpă dƣyă s:ă Mỗiă lầnă nhpă a[i]ă taă dùngă lnhă foră jă kimă traă xemă chúngă cóă trùngăvƠoăcácăsătừăa[1]ăđnăa[i-1]ăhayăkhông,ănuătrùngăthìăyêuăcầuănhpăli. - Khiăgánăd:=1;ămax:=1; - Dùngălnhăforăduytăiătừă2ăđnăn: Nuăa[i-1]ă a[i] thì: Kimătraăxemănuădă>ămaxăăthìăgánăliămaxă:=ăd;ă 47
  48. Sauăđóăgánăliăd:=1; - Tuyănhiênăcóăthădƣyăconălnănhtănằmăcuiăcùngănênătaăliăphiăkimătraănuă max a[i] then begin max:=t; d:=1; end; else d:=d+1; end; If max < d then max:=d; writeln('Day con tang co do dai lon nhat la:', max); Readln End. Ví dụ 3: VităchngătrìnhănhpăvƠoăhaiămaătrnăvuôngăcpănă(viăcácăphầnătă nguyên)ăriătínhătổngăvƠătíchăcaăhaiămaătrnăđó. Hướng dẫn: - Khaiăbáoă bină n, i, j, kăkiuăsă nguyên.ăBină mngăa, b, c, dăhaiăchiuăcácă phầnătăăkiuăsănguyênăđăchaăcácămaătrnănhpăvƠoăvƠăktăqu. - Nhpăcpănăcaăcácămaătrnăvuông. 48
  49. - DùngăhaiălnhăforălngănhauăđănhpăcácăphầnătăchoămaătrnăaăvƠăb. - TínhăcácăphầnătăcaămaătrnăătổngăcăvƠămaătrnătíchădătheoăcôngăthc.ă - Thôngăbáoăktăquălênămàn hình. Chương trình: Program ma_tran; Var n,i,j,k: integer; a,b,c,d :array[1 20,1 20] of integer; Begin Repeat Write(' nhap n : ');Readln(n); Until (n>0)and(n <= 20); Writeln('nhap ma tran a:'); For i:=1 to n do For j:=1 to n do Begin Write('a[',i,',',j,']= '); Readln(a[i,j]); End; Writeln('nhap ma tran b: '); For i:=1 to n do For j:=1 to n do Begin Write('b[',i,',',j,']= '); Readln(b[i,j]); End; For i:=1 to n do For j:=1 to n do Begin c[i,j]:= a[i,j] + b[i,j]; d[i,j]:= 0; For k:=1 to n do d[i,j]:= d[i,j] + a[i,k]* b[k,j]; End; Writeln('ma tran tong la:'); For i:=1 to n do Begin For j:=1 to n do Write(c[i,j]:5); writeln; End; Writeln('ma tran tich la:'); For i:=1 to n do Begin For j:=1 to n do Write(d[i,j]:5); 49
  50. writeln; End; Readln End. 5.3. Kiu xơu 5.3.1. Khái niệm: XơuălƠăkiuădăliuăchuẩnăbaoăgmămtădƣyăcácăkýătựătrongăbngămƣăASCIIăcóă đădƠiătiăđaălƠă255ăkýătự. 5.3.2. Định nghĩa kiểu và khai báo biến: - Định nghĩa Kiểu: Type ten_kieu = String[n]; Giiăthích:ăăă + Ten_kieuădoăngiăsădụngătựăđặtăđúngătheoăquyăđnhăcaăTurboăPascal. + StringăălƠătừăkhóaăđăkhaiăbáoăkiuăxơu. + nălƠăđădƠiătiăđaăcaăxơu. - Khai báo biến: Sauăkhiăđƣăkhaiăbáoăkiuătaăcóăthăkhaiăbáoăbinăthôngăquaă tênăkiu. Var ten_bien : ten_kieu; Ví dụ: Type St = string[50]; Var st1,st2 : st; st3 : string; Cũngăcóăthăkhaiăbáoăbinăkiuăxơuătrựcătipăkhôngăthôngăquaăđnhănghĩaăkiuă nhăsau: Var ten_bien : string[n]; Ví dụ: Var st1,st2 : string[50]; Chú ý: (1).ăMtăbinăkiuăstring[n]ăsăđcăcpăphátăn+1ăbyteăbănh,ătrongăđóăbyteă đầuătiênăluăđădƠiăthựcăsựăcaăxơuă(săđóăchínhălƠ:ăord(st[0]). Ví dụ: st:='abc123'ăsăđcăluănhăsau: st[0] a b c 1 2 3 (2).ăCóăthăsădụngă lnh read,ăreadlnăđă nhpădăliu,ă lnhăwrite,ăwritelnăđă ghiădăliuăkiuăxơu,ăcũngăcóăthăsădụngălnhăgánănhăcácăbinăkhác. 50
  51. (3).ăVicătruyăxutătừngăkýătựăcaăxơuăphiăthôngăquaătênăbinăcùngăviăchỉăsă caănóă(chỉăsătruyăxutăphiăđặtătrongăcặpăduămócăvuôngă"[ ]").ăChẳngăhnăviăvíă dụăămụcă(1)ăthìătaăcó:ăăst[1]='a';ăst[2]='b'; ăst[6]ă=ă'3'; (4).ăXơuăkhôngăcóăkýătựănƠoăđcăgiălƠăxơuărỗngăvƠăđcăbiuădinălƠ: ''. 5.3.3. Các phép toán trên xâu: a. Phép nối xâu ("+"): Giăsăst1,ăst2ălƠăcácăxơuăkhiăđóăăst1 + st2ăchoătaămtăxơuăbằngăcáchăniătheoă thătựăxơuăst1ăviăxơuăst2. Ví dụ: st1 := 'abcd'; st2 := 'ABC', khiă đóă st1ă +ă st2ă choă ktă quă lƠă xơuă 'abcdABC'. b. Phép so sánh xâu: HaiăxơuăcóăđădƠiăbằng nhau:ăLầnăltătừngăcặpăkýătựătngăngăcaăhaiăxơuă săđcăsoăsánhăviănhauătừătráiăsangăphi;ăNuăgặpăcặpăkýătựăăkhácănhauăđầuătiênă thìăxơuănƠoăcóăkýătựălnăhnălƠălnăhn.ăNuămiăcặpăkýătựăđuăgingănhauăthìăhaiă xơuăăbằngănhau. Ví dụ: 'abce' > 'abcd'. HaiăxơuăcóăđădƠiăkhácănhau:ăLầnăltătừngăcặpăkýătựătngăngăcaăhaiăxơuă săđcăsoăsánhăviănhauătừătráiăsangăphiăchoăđnăkýătựăcuiăcùngăcaăxơuăngắn;ă NuăgặpăcặpăkýătựăăkhácănhauăđầuătiênăthìăxơuănƠoăcóăkýătựălnăhnălƠălnăhn.ăNuă không thì xâu cóăđădƠiălnăhnălƠălnăhn. Ví dụ: 'abcde' > 'abcd'. 'abacde' < 'abcd' 5.3.4. Các thủ tục và hàm trên xâu ký tự: a. Các thủ tục: Kýăhiu:ă St,ăst1,st2:ălƠăbinăkiuăxơu. Num:ălƠăbinăkiuăsănguyênăchỉăsăkýătự. Pos:ălƠăbinăkiuăsănguyênăchỉăvătríănƠoăđóătrongăxơu. - Delete(st, pos, num) ThătụcănƠyăsăxóaătrongăxơuăstăđiănumăkýătựăbắtăđầuătừăvătríăpos. Ví dụ: st := 'abcde'; Delete(st, 2, 3) khiăđóăgiáătrăcaăstălƠ: 'ae'. - Insert(st2,st1,pos) ThătụcănƠyăsăchènăxơuăst2ăvƠoăxơuăst1ăbắtăđầuătừăvătríăpos. Ví dụ: st1:='abc'; st2:='deft'; Insert(st2,st1, 3) khiăđóăst1ăcóăgiáătrălƠ:ă'abdeftc'. 51
  52. - Str(value, st) TrongăđóăvalueălƠămtăbiuăăthcăsăhcăcóăthăghiădiădngăcóăquyăcách. ThătụcănƠyăsăđổiăgiáătrăcaăsă(value)ăthƠnhăxơuăvƠăgánăchoăbinăxơuăst. Ví dụ: str(123.456,st) khiăđóăstăsăcóăgiáătrălƠ:ă'123.456'. - Val(st,var, code) TrongăđóăstălƠămtăxơuăbiuădinăs. + VarăălƠămtăbinăkiuăsănguyênăhayăsăthực. + Code lƠăbinăkiuăsănguyên.ThătụcănƠyăsăđổiăxơuăstăbiuădinăsăthƠnhăsă vƠăgánăchoăbinăvar,ănuăvicăđổiăthƠnhăcôngăthìăbinăcodeăcóăgiáătrăbằngă0,ăngcă liănuăxơuăstăbiuădinăsăbălỗiăthìăkhiăđóăvarăkhôngăxácăđnhăcònăcodeăcóăgiáătrălƠă vătríălỗiătrongăbiuădinăsăcaăxơuăst. Ví dụ: st1:= '123.456'; str(st1, a, k) khiăđóăaăsăcóăgiáătrălƠă123.456. st2:= '12q.456'; str(st2, a, k) khiăđóăaăkhôngăcóăgiáătrăxácăđnhăcònăcodeăcóăgiáătrălƠă3ă chínhălƠăvătríăcaăq. b. Các hàm trên xâu ký tự: - Length(st) ChoăktăquălƠăđădƠiăthựcăsựăcaăxơuăst. Ví dụ: st:='abcd'; length(st)ăăăchoăktăquălƠă4. Chú ý: length(st) = ord(st[0]); - Copy(st,pos,num) ChoăktăquălƠăxơuăconăcaăxơuăstăgmănumăkýătựăbắtăđầuătừăvătríăpos.ă Ví dụ: copy('abcdef',3,2)ăăăchoăktăquălƠăxơuă'cd'. - Concat(st1,st2, ,stn) (n>=2) ChoăktăquălƠăxơuăđcăghépăniătheoăthăătựăăcácăxơuăst1, st2, , stn. Ví dụ: Concat('abc','de','123')ăăăchoăktăquălƠăxơuă'abcde123'. Chú ý: NuăxơuăktăquăcóăđădƠiă>ă255ăthìămáyăsăbáoălỗi. - Pos(st1,st2) ChoăktăquălƠăvătríăxutăhinăđầuătiênăcaăăxơuăst1ătrongăxơuăst2.ăNuăxơuăst1ă khôngăcóămặtătrongăxơuăst2ăthìăhƠmăchoăktăquăbằngă0.ă Ví dụ: Pos('ab','deabcab')ăăăchoăktăquălƠă3. Pos('ab','defbc')ăăăchoăktăquălƠă0. 5.3.5. Các ví dụ: 52
  53. Ví dụ 1: VităchngătrìnhănhpăvƠoămtăxơuăkýătựăbtăkỳăvƠăinăraămƠnăhìnhă xơuăngcăli. Hướng dẫn: - Khaiăbáoăbinăstăkiuăxơuăđănhpădăliu,ăbinăiăđiuăkhinălnhăfor. - Nhpăxơuăst. - Dùngălnhăforădngălùiăđăghiăcácăkýătựăcaăxơuătừăsauăti. Chngătrình: Program xau_nguoc; Var st: string; i:byte; Begin Write('nhap xau bat ky:'); readln(st); Writeln('xau nguoc cua xau ', st, 'la: '); For i:=length(st) downto 1 do write(st[i]); Readln End. Ví dụ 2: Mtă xơuă đcă giă lƠă Palindromă nuă nóă trùngă viă xơuă đo.ă Vită chngă trìnhă nhpă vƠoă mtă xơuă btă kỳă vƠă choă bită nóă cóă phiă lƠă Palindromă hayă không? Hướng dẫn: - Khaiăbáoăbinăst, st1ăkiuăxơuăđănhpădăliuăvƠăchaăxơuăđo,ăbinăiăđiuă khinălnhăfor. - Nhpăxơuăst. - Khiăgánăst1 := ''; - Dùngălnhăforădngălùiăđălầnăltăbổăsungăăcácăkýătựăcaăxơuăstătừăsauătiă cho xâu st1. - SoăsánhăhaiăxơuăvƠăthôngăbáoăktăqu. Chương trình: Program Palindrom; Var st,st1: string; i:byte; Begin Write('nhap xau bat ky:'); readln(st); St1:=''; For i:=length(st) downto 1 do st1:= st1 + st[i]; If st=st1 then Writeln(st, ' la xau Palindrom ') Else Writeln(st,' khong phai la Palindrom '); Readln End. 53
  54. BÀI TP CHNG 5 5.1. Kiu mng: 1.ăVităchngătrìnhănhpăvƠoămtădƣyăsănguyênăvƠăthựcăhinăcácăyêuăcầuăsau: a.ăInăraămƠnăhìnhăcácăsăchẵnăvƠătổngălpăphngăcaăchúng. b.ăGiáătrălnănhtăvƠănhănhtăcaădƣyăđó. c.ăSăơmălnănhtăvƠăsădngănhănhtăcaădƣy. d.ăSăơmăđầuătiênăvƠăchỉăsăcaănó. e.ăSădngăcuiăcùngăvƠăchỉăsăcaănó. 2.ăVităchngătrìnhănhpămtădƣyănăsănguyênăvƠăthựcăhinădchăchuynăkăphầnătă đầuădƣyăvăcuiădƣyă(k<n). Víădụăn=5,ăk=3ătaănhpăvƠoădƣyă3,ă5,ă7,1,ă2.ăăDƣyăcầnătìmăsălƠă1,ă2,ă3,ă5,ă7. 3. VităchngătrìnhătìmăphầnătăthănăcaădƣyăsăFIBONACCI. 4.ăVităchngătrìnhănhpăvƠoăbcănăvƠăăcácăhăsăcaămtăhƠmăđaăthc.ăHƣyăchoă bităgiáătrăcaăhƠmăđóătiămtăđimăbtăkỳ. 5.ăVităchngătrìnhănhpămtădƣyăsăđôiămtăkhácănhauăvƠ: a.ăChoăbităđădƠiălnănhtăcaădƣyăgmăcácăsă0ăliênătip. b.ăTìmădƣyăconăliênătipătĕngăvƠăcóătổngălnănht. 6.ăVităchngătrình: a.ăBổăsungămtăphầnătăvƠoămngă1ăchiu. b.ăLoiăbămtăphầnătăraăkhiămngă1ăchiu. 7.ăVităchngătrìnhănhpăvƠoămtădƣyăsăvƠăcho bitădƣyăđóăcóăbaoănhiêuăphầnătă đôiămtăkhácănhauăđngăthiăthôngăbáoăcácăphầnătăđodălênămƠnăhình. 8.ăVităchngătrìnhăătìmăcáchălyăraănănghìnăđngătừăcácăloiătină1ănghìn,ă2ănghìn,ă 5ănghìn,ă10ănghìn,ă20ănghìn,ă50ănghìn,ă100ănghìnăsaoăchoătổngăsătălƠăbéănht.ă(Să tinăn,ăsătăcaămỗiăloiătinăđcănhpătừăbƠnăphím). 9.ăVităchngătrìnhănhpăvƠoămtămaătrnăvuôngăcpănăriăchoăbit: a.ăTổngăttăcăcácăphầnătănằmăătrênăđngăchéoăchính. b.ăTổngăttăcăcácăphầnătănằmăăphíaătrênăđngăchéoăchính. 10.ăVităchngătrìnhănhpăvƠoămtămaătrnăcpămxnăriătínhătổngăttăcăcácăphầnătă mƠăthaămƣnăiă- jă=ăk.ă(m,n,i,j,kănhpătừăbƠnăphím,ăă0<i,j,k<n). 11.ăVităchngătrìnhăxổăsăviăcăcuănhăsau: - Baăgiiăt,ăquayă2ăs. - Haiăgiiăba,ăquayă3ăs. - Mtăgiiănhì,ăquayă4ăs. - Mtăgiiănht,ăquayă5ăs. 54
  55. - Mtăgiiăđặcăbit,ăquayă6ăs. 5.2. Kiu xơu: 12.ăVităchngătrìnhănhpămtăxơuăbtăkỳ,ăinăraămƠnăhìnhăxơuăsauăkhiăđƣăxóaăbăhtă cácăkýătựătrắngădăthừa. (KýătựăătrắngădăthừaălƠăkýătựătrắngăđngăăđầu xơu,ăcuiăxơuăhoặcăđiălinănhau). 13.ăVităchngătrìnhănhpăvƠoămtăxơuăbtăkỳăvƠ: a.ăInăraămƠnăhìnhăxơuăsauăkhiăđƣăđổiăttăcăchăthngăcaăxơuăthƠnhăchăhoa. b.ăChoăbităxơuăđóăcóăbaoănhiêuătừ.ă(TừălƠămtădƣyăcácăkýătựăkhácăkýătựătrắngă liênătip.ăVí dụ:ăXơuăă'ăăcongăhoaăxaăhoiăă'ăăcóă4ătừ). 14.ăVităchngătrìnhănhpămtăxơuălƠăhăvƠătênăcaămtăngiănƠoăđó,ăinăraămƠnă hình tênăcaăngiăđó. 15.ăVităchngătrìnhăđổiăsănguyênănăthƠnhăsănhăphơn.ă(Sănhăphơnăđcăbiuă dinădiădngăxơu). 16.ăVităchngătrìnhănhpăvƠoămtăxơuăriăhinăthămỗiătừătrênămtăhƠngă(theoăthă tựăxutăhin)ăđngăthiăchoăbitătổng sătừăcóătrongăxơuătrên. 17.ăVităchngătrìnhănhpăvƠoă2ăxơuăbiuădinăsănguyên.ăThựcăhinătínhătổngăcaă caă2ăxơuăđóănhălƠăvicătínhătổngăcaă2ăsăănguyên. 18. VităchngătrìnhănhpătừăbƠnăphímăsănguyênădngăNă(N≤100)ăvƠădƣyăAăgmă NăsănguyênăA1,ăA2,ă ,ăAnăcóăgiáătrătuytăđiăkhôngălnăhnă1000.ăHƣyăchoăbită dƣyăAăcóăphiălƠăcpăsăcngăhayăkhôngăvƠăthôngăbáoăktăquăraăngoƠiămƠnăhình. 19. VităchngătrìnhănhpătừăbƠnăphímăsănguyênădngăNă(N≤100)ăvƠădƣyăAăgmă Năsănguyênă A1,ă A2,ă ,ăAnăcóăgiáătrătuytăđiăkhôngă lnăhnă1000.ăHƣyăđaăraă nhngăthôngătinăsau: a.ăSălngăsăchẵnăvƠăsălẻătrongădƣy. b.ăSălngăsănguyênătătrongădƣy. 20.ăChngătrìnhăsauăđơyăthựcăhinănhngăgì? program bt8; const NMax = 50; type Mass = array[1 NMax,0 NMax-1] of real; var a: Mass; i, j, N: byte; C:real; begin write('nhap N = '); readln(N); for i:= 1 to N do for j:= 0 to N-1 do begin write('A[',i,',',j,']='); readln(a[i,j]); end; 55
  56. for i:= 1 to N do for j:= 0 to N-1 do begin C:= a[i,j]; a[i,j]:= a[N-i+1],j]; a[N-i+1],j]:=C; end; for i:=1 to n do begin for j:=0 to N-1 do write(a[i,j]:5:2); writeln; end; readln end. 21.ăChoămngăhaiăchiu cóăkíchăthcănxnăviăcácăphầnătălƠănhngăsănguyên.ăTìmă trongămỗiăhƠngăphầnătălnănhtăriăđổiăchỗănóăviăphầnătăcóăchỉăsăhƠngăbằngăchỉă săct. ChngătrìnhăsauăđơyăgiiăbƠiătoánătrên. program diag; var n, i, j, max, ind, vsp: integer; a: array[1 15,1 15] of integer; begin write('nhap N nho hon 15: '); readln(n); for i:=1 to n do for j:=1 to n do begin write('A[',i,',',j,']= '); readln(a[i,j]); end; for i:=1 to n do begin max:= a[i,1]; ind:=1; for j:=2 to n do if a[i,j] > max then begin vsp:= a[i,i]; a[i,i]:= max; a[i,ind]:= vsp; end; end; for i:=1 to n do 56
  57. begin writeln; for j:=1 to n do write(a[i,j]:3); end; readln; end. Hƣyăsaăliăchngătrình trênăkhiăthayăyêuăcầuătìmăkimătrongămỗiăhƠngăbằngătìmă kimătrongămỗiăct. 22.ăHƣyăvităchngătrình nhpătừăbƠnăphímăxơuăkíătựăSăcóăđădƠiăkhôngăquáă100.ă HƣyăchoăbităcóăbaoănhiêuăchăsăxutăhinătrongăxơuăS.ăThôngăbáoăktăquăraămƠnă hình. HNG DN GII BÀI TP 1. - Khaiăbáoăbinămngăđănhpăădƣyăs. a. - Khaiă báoă binăsă vƠăkhiăgánăs:=0ăđăchaătổngă lpăphngăcaădƣy.ăSă dụngălnhăforălầnăltăduytăquaăttăcăcácăphầnătăănuălƠăsăchẵnăthìăghiăraămƠnă hìnhăđngăthiăcngădnăvƠoăchoăbinăs. b. - Gánămaxă(min)ăăbằngăphầnătăđầuătiênăriălầnăltăsoăsánhăviăttăcăcácă phầnătăcònăliănuămaxă(min)ăbéăhnă(lnăhn)ăăthìăgánăli. c. - Dùngălnhăwhileăđăduytălầnăltăcácăphầnătăchoăđnăkhiăgặpăphầnătăơmă đầuătiênăthìădừngăliăvƠăgánăgiáătrăcaănóăchoăammax,ăsauăđóăliătipătụcăduytăhtă cácăphầnătăcònăliănuăgặpăsăơmămƠălnăhnăammaxăthìăgánăli.ăNuăduytăhtăttă căcácăphầnătăcaădƣyămƠăkhôngăcóăsăơmănƠoăthìăăthôngăbáoă"khongăcoăsoăam". HoƠnătoƠnătngătựăchoăvicătìmăsădngăbéănht. d. - Dùngălnhăwhileăđăduytălầnăltăcácăphầnătăchoăđnăkhiăgặpăphầnătăơmă thìădừngăliăvƠăthôngăbáoăgiáătrăvƠăchỉăsăcaăsăơmăđó.ăNuăduytăhtăttăcăcácă phầnătăcaădƣyămƠăkhôngăcóăsăơmănƠoăthìăăthôngăbáoă"khongăcoăsoăam". e. - Tngătựăcơuăd.ă(luăýălƠăduytătừăsauăduytăti). 2. - Khaiăbáoămngăaăđănhpădăliu,ămngăbălƠmătrungăgian. - Nhpădƣyăsă(luăvƠoăa). - Sădụngălnhăforăgánăgiáătrăcaăcácăphầnătăcaămngăaăchoăcácăphầnătăcaă for i:=k+1 to n do b[i-k]:=a[i]; for i:=1 to k do b[i+k]:=a[i]; - Gánăliăa:=b; 3. - Khai báoămtăbinămngăđăchaăcácăphầnătăcaădƣyăFibonacci. - Khiăgánăa[1]:=1;ăa[2]:=1; - Dùngălnhăforăăđătínhăa[i]:=ăa[i-1] + a[i-2] (i=3,4, ,n). - Thôngăbáoăktăquăa[n]. 57
  58. 4. - NhpănăvƠăcácăhăsăa[1],a[2], ,a[n]. - Nhpăgiáătrăchoăbinăx;ăkhiăgánăgiáătrăhƠmăy:=a[n]. - Sădụngălnhălặpăforă:ă for i:=n downto 1 do y:=y*x+a[i-1]; - Thôngăbáoăktăquăy. 5. - Nhpădƣyăs. - KhaiăbáoămtăbinătăđăchaăđădƠiătmăthiăcaăcácădƣyăconăcácăphầnătă0ă liênătip;ăbinămaxăđăchaăđădƠiăcựcăđiăvƠăkhiăgánăchúngăbằngă0.ă - Dùngălnhăforăăđăduytălầnăltăcácăphầnătăcaădƣy. +ăNuăa[i]ă<>ă0ăthì Soăsánhănuămaxă<ătăthìăgánăliămax:=tăvƠăt:=0; +ăNgcăliăa[i]ă=ă0ăthìăt:=ătă+ă1; - Cuiăcùngăsoăsánhănuămaxă<ătăthìăgánăliămax:=t; - Thôngăbáoăktăquămax. 6. a.- Nhpămngănăphầnătă;ănhpăvătríăcầnăchènăkăvƠăgiáătrăcầnăchènălƠăx. - Giănguyênăcácăphầnătăătừă1ăđnăk-1. - Dùngălnhăforăgánăcácăgiáătrătừăa[n+1]ăđnăăa[k+1]:ă for i:= n+1 downto k+1 n do a[i]:=a[i-1]; - Gán a[k] :=x; - Thôngăbáoăktăqu. b. - Nhpămngănăphầnătă;ănhpăvătríăphầnătăcầnăxóaăk. - Giănguyênăcácăphầnătăătừă1ăđnăk-1. - Dùngălnhăforăgánăcácăgiáătrătừăa[k]ăđnăăa[n-1]: for i:= k+1 to n do a[i-1]:=a[i]; - Thông báoăktăqu. 7. - Nhpădƣyăsănăsăa[i].ă - Khiăgánăbinădem:=0ăđăđmăktăqu. - Dùngălnhăăforăduytăttăcăcácăphầnătăcaădƣy: Viămỗiăiătaăliăsoăsánhăa[i]ăviăttăcăcácăphầnătăđngăsauănóănuăxyăraăa[i]ă trùngăviămtăphầnătănƠoăđóăthìăbăquaănuăkhôngăcóăphầnătănƠoătrùngăthìătĕngă binădemălênă1,ăđngăthiăghiăphầnătăa[i]ăđóăraămƠnăhình. - ThôngăbáoăktăquălƠăbinădem. 8. - Khaiăbáoăbinămangăgmă6ăphầnătăkiuăWord; Type mang=array[1 6] of word; - Khaiăbáoăhằngămăkiuămng: 58
  59. Const m:mang=(1,2,5,10,20,50,100); - Khaiăbáoăăbinătăđănhpăsătin,ăbinăiăkiuăsănguyênăđiuăkhinălnhăfor. - Khaiăbáoăbinăkăkiuămngăđănhpăsătăcaătừngăloiătinăcó,ăbinădemăkiuă mngăđăghiăsătăcaătừngăloiătin. - Nhpăsătin t; - NhpăsătăcácăloiătinăcóăvƠoămngăkăvƠătínhătổngăsătinăcóăđc. - Nuătổngăsătină =m[i]ăvƠăk[i]ă>0ăcácălnh:ă + t:=t-m[i]; + dem[i]:=dem[i]+1; + k[i]:=k[i] -1; Nuăt=0ăthìăthôngăbáoăsătătừngăloiătinăthôngăquaămngădem. Ngcăliăthôngăbáoăkhôngăcóăđătinălẻăđătr. 9. - NhpăvƠoămaătrnăvuôngăa[i,j]ăcpăn. - Cácăphầnătănằmătrênăđngăchéo chính là a[i,i] (i=1 n). - CácăphầnătănằmăphíaătrênăđngăchéoăchínhălƠăa[i,j]ă(i=1 n,ăj>i) - Khaiăbáoăcácăbinăs1,s2ăđătínhătổng,ăkhiăgánăs1:=0;ăs2:=0;ăsădụngălnhăforăă đătính. - Thôngăbáoăktăqu. 10. - NhpăvƠoămaătrnăăa[i,j]ăcpămxn. - Nhpăkănguyên. - Dùngă2ălnhăforălngănhauăđăduytăttăcăcácăphầnătăcaămaătrnănuăthaăi- j =k thì ghi ra màn hình. 11. - Khiătoăthătụcărandomize; - SădụngălnhăforăvƠăhƠmărandom(9)ăđălầnăltătoăcácăchăăsăăngẩuănhiênă choătừngăgiiăvƠăthôngăbáo ra màn hình 12. - Nhpăxơuăst. - Dùngălnhăăăwhileăst[1]ă=#32ăădoădelete(st,1,1)ăăđăxóaăcácăkýătựătrắngăđầuă xâu. - Dùngălnhăăăwhileăst[length(st)]ă=#32ădoădelete(st,length(st),1)ăăđăxóaăcácăkýă tựătrắngăcuiăxơu. 59
  60. - Dùngălnhăăăwhileăăpos(#32#32,st)ă>0ăădoăădelete(st,ăpos(#32#32,st),1)ăđăxóaă cácăkýătựătrắngăđiălinănhauăăgiaăxơu. 13. - Nhpăxơuăst. a. Dùngălnhăforăduytălầnăltăcácăkýătựăăcaăxơuă(từă1ăđnălength(st)),ănuă gặpăkýătựălƠăchăhoaăthìăđổiăthƠnhăchăthngăbằngăcáchătĕngămƣăasciiăcaănóălênă 32. b.ăGánăthêmăkýătựăătrắngăvƠoăđầuăxơuăst; - Khiăgánăbinădemă:=0;ăđăđmăsătừ. - Sădụngă lnhăforăđăduytă lầnă ltătừăă1ăđnă length(st)ă - 1.ăNuăgặpăst[i]ă =#32ăđngăthiăst[i+1]ă ă0: +ăNuănăchẵnăthì:ăăs:='0'ă+s;ăăngcăliăănălẻăthìăăs:='1'ă+s; +ăGánăliăn:=ănădivă2; - Thôngăbáoăktăquăs. 16 - Nhpăxơuăstăbtăkỳ. - Khiăgánăbinăi:=1;ăbinăăcountăđăđmătổngăsătừăvƠăkhiăgánăcount:=0; - LặpăliăcôngăvicăsauăchừngănƠoăi ''ăthìăwrite(st[i])ăvƠătĕngăiălênă1ă(ghiătừăđóă ra màn hình). - Tĕngăbinăcountălênă1. - Xungădòng. +ăTĕngăiălênă1. - ThôngăbáoăktăquăsătừălƠăcount. 17 - Khai báo các binăso,ăso1,so2,nho,ăi,ăkăăkiuănguyênăđăchaăcácăsăvƠăbină điuăkhinălnhălặp. 60
  61. - Khaiăbáoăcácăbinăs1,s2,ch1,ch2,t,săkiuăxơu. - NhpăsăănguyênăthănhtăluăvƠoăxơuăs1,ăsănguyênăthăhaiăluăvƠoăxơuăs2. - Khiăgánă s:=''ă ;(dùngăđă luă ktăquăphépăcngăhaiăs);ă bină nho:=0;(bină nhătrongăphépăcng). - NuăđădƠiăhaiăxơuăs1ăvƠăs2ăkhácănhauăthìăbổăsungăcácăkýătựăă'0'ăvƠoătrcă xơuăngắnăđăđcăhaiăxơuăcóăđădƠiăbằngănhau. - Dùngălnhăforădngălùiăduytătừălength(s1)ăđnă1ăvƠăthựcăhinăphépăcngăviă cácăcặpăkýătựăsătngăngăbằngăcách: - Dùngăthătụcăvalăđổiăkýătựăs1[i]ăthƠnhăsăso1;ăkýătựăs2[i]ăthƠnhăso2; - Gán so:= so1+so2+nho; - So:= so mod 10; - Nho:= so div 10; - DùngăthătụcăstrăđổiăsoăthƠnhăxơuăvƠăgánăvƠoăbinăt; - Gán S:=t+S; - Nuănho>0ăthìăgánăs:='1'+s; - ThôngăbáoăktăquălƠăs. 61
  62. CHNG 6. CHNG TRÌNH CON Mở đầu: - TrongăTurboăPascalăcóă2ăloiăchngătrìnhăcon:ăThătụcăvƠăhƠm.ăuăđimă caă vicădùngăchngătrìnhăconă lƠătránhăđcăvică lặpă liă mtăđonăchngătrình nhiu lầnătrongăchngătrình,ăhỗătră vicăthựcăhinăcácăchngătrìnhălnă vƠăphcă tp,ăphụcăvụăchoăquáătrìnhătrừuătngăhóa caăcácăngônăngălpătrìnhăcóăcuătrúc. - Chngă nƠyă đaă raă cáchă đnhă nghĩaă mtă chngă trìnhă conă dngă thă tục,ă chngătrìnhăconădngăhƠm.ă Đngăthiăhngădnăcáchăsădụngăcácăchngătrìnhă conănƠyătrongămtăchngătrìnhăsaoăchoăphùăhp. Mục tiêu: HcăxongăchngănƠyăSinhăviên - HiuăđcăthănƠoălƠămtăchngătrìnhăconăvƠăcácăloiăchngătrìnhăcon. - BităcáchăkhaiăbáoămtăchngătrìnhăconăkiuăthătụcăhayăhƠm. - Hiuă đcă cácă kháiă nim:ă Thamă să hìnhă thc,ă thamă să thựcă t,ă thamă tr,ă thamă bin,ă binătoƠnă cục,ă bină đaăphng.ăBităcáchăkhaiă báoă vƠăsădụngăchúngă nhăthănƠoăchoăphùăhp. 6.1. Các khái nim mở đầu. 6.1.1. Lập trình từ trên xuống: KhiălpătrìnhăgiiăquytămtăbƠiătoánăln,ănuăvităchngătrìnhămtămchătừă trênăxungăthìăngiălpătrìnhăsărtăvtăvăvƠăthmăchíăcóăthăkhôngăthựcăhinăđc.ă Mặcăkhác,ănuăcóăvităđcăđiănaăthìăvicăsaăđổiăvƠăkimătraălỗiăcũngărtălƠăkhóă khĕnăvìăphiăđụngăchmăđnătoƠnăbăchngătrình. Đăkhắcăphụcăđcăđiuăđó,ăngiătaăphơnătíchăvicăgiiăquytăbƠiătoánăthƠnhă nhngăcôngăvicătngăđiăđcălp.ăSauăđóăchiătitădầnăcácăcôngăvicănƠyăthƠnhăcácă cácăcôngăvicănhăhn.ăĐiuăđóăcóănghĩaălƠăchúngăta đƣă"phơnămnh"ădầnătheoătừngă cp.ăTurboăPascalăchoăphépăngiălpătrìnhă"phơnămnh"ăchngătrìnhănhằmăphụcă vụăýăđătrên.ăCóănghĩaălƠăchiaăchngătrìnhălnăthƠnhănhiuăphầnănhăriăgiiăquytă từngăphầnămtă(mỗiăphầnănhănhăvyăđcăgiălƠămtăchngătrình con).ăSauăđóă tuỳăniădungăcôngăvicămƠălắpăghépăcácăchngătrìnhănhănƠyăliăviănhauăđăgiiă quytăbƠiătoán. Phngă phápă lpă trìnhă cóă phơnă mnhă nhă trênă đcă giă lƠă TOP-DOWN PROGRAMMINGă(LpătrìnhătừăgcăđnăngnăhayăcònăgiălƠălpătrìnhăcóăcuătrúc). 6.1.2. Phân loại và cấu trúc chung của chương trình con: Turboă Pascală choă phépă xơyă dựngă haiă loiă chngă trìnhă conă đóă lƠă thă tụcă (Procedure)ăvƠăhƠmă(Function).ăTrongăđó: Thủ tục lƠămtăchngătrìnhăconădùngăđăthựcăhinămtăsăthaoătácăxălýănƠoă đóăđăgii quytămtăcôngăvicăcụăthănƠoăđóăđƣăđcăphơnămnh. 62
  63. Hàm lƠămtăchngătrìnhăconădùngăđăxácăđnhămtăgiáătrăcaăđiălngăraă nƠoăđóăcóăkiuădăliuăđnăgină(s,ăkíătự,ăxơuăkíătự,ălogíc).ăGiáătrăcaăđiălngăraă nƠyăđcăgiălƠăgiáătrătrăvăcaăhƠm VicăphơnăbitănƠyăchỉăcóătínhăcáchătngăđiănhằmăphụcăvụăchoăsựălựaăchnă caăngiălpătrình.ăMỗiăchngătrìnhăconăđuăcóăcuătrúcăchungătheoătuầnătựănhă sau: PhầnăkhaiăbáoăchngătrìnhăconăthucăloiăthătụcăhayăhƠm. CácăđnhănghĩaăvƠăkhaiăbáoăđaăphngă(hằng,ăkiu,ăbin,ăchngătrìnhăcon). Thơnăcaăchngătrìnhăcon. 6.2. Th tục. 6.2.1. Định nghĩa thủ tục: Mtăthătụcăđcăđnhănghĩaătheoăcúăphápăsau: PROCEDURE TênThủTục [(Danh sách các tham số hình thức)]; Các định nghĩa và khai báo địa phương; BEGIN Các câu lệnh xử lý; {thân của thủ tục} END; Trongăđó: TênThủTục lƠălƠămtăđnhădanhădoăngiăsădụngăđặtătheoănguyênătắcăđặtătênă caăTurboăPascal. Danh sách các tham số hình thức lƠătênăcaăcácăđiătngăđóngăvaiătròănhnă thông tin vào choăthătụcăhotăđng.ăThamăsăhìnhăthcăcóăhaiăloi:ăthamăbinăvƠă thamătr.ăCácăthamăsăhìnhăthcăđuăđcăxácăđnhărõăkiuădăliuăcaăchúngăvƠănuă lƠă kiuă dă liuă caă ngiă dùngă thìă kiuă nƠyă phiă đcă đnhă nghĩaă trcă đóă chă khôngăthăđnhă nghĩaătrựcătip.ăNuălƠăthamă binăthìăphiăcóătừăkhoá Var đngă trc. Ví dụ: PROCEDURE UCLN(m,n:Word; Var a:Word); TYPE MANG = Array[1 100] Of Integer; ; PROCEDURE SapXep(Var A:Mang; N:Word); ; MtăthătụcăcóăthăkhôngăcóăthamăsăhìnhăthcănƠo. Khiăđóăphầnăkhaiăbáoăsauă tênăthătụcăsăkhôngăcóăcặpăduăngoặc. Ví dụ: PROCEDURE TO_MAU; Các định nghĩa và khai báo địa phương lƠăcácăkhaiăbáoăvăhằng,ăkiu,ăbin,ă chngătrìnhăconăcaănó.ăCácăđiătngăđcăkhaiăbáoăăđơyăchỉăđcădùngăchoăthă tụcănƠyăvƠăcácăchngătrìnhăconăchaătrongănó. 63
  64. Các câu lệnh xử lý lƠă hă thngă cơuă lnhă đcă cƠiă đặtă nhằmă thựcă hină giiă thutăđƣăthităkăchoăthăthục. Ví dụ: ĐăvităthătụcătìmăcăsăchungălnănhtăcaăhaiăsănguyênădngămăvƠănăchoă trcătaăchoăm,ănăđóngăvaiătròăthamătr,ăgiáătrăcăsăchungălnănhtătìmăđcăsăluă ăthamăbinăa.ăThătụcăđcăvitănhăsau: PROCEDURE UCLN(m,n:Word; Var a:Word); BEGIN If m>n Then a:=n Else a:=m; While (m mod a 0) Do a:=a-1; END; PROCEDURE TO_MAU; Var x1,y1,x2,y2,tg:Byte; {Các khai báo địa phương} BEGIN Randomize; x1:=Random(80)+1; y1:=Random(25)+1; x2:=Random(80)+1; y2:=Random(25)+1; If x1>x2 Then Begin tg:=x1; x1:=x2; x2:=tg; End; If y1>y2 Then Begin tg:=y1; y1:=y2; y2:=tg; End; Window(x1,y1,x2,y2); TextBackGround(Random(16)); ClrScr; END; 6.2.2. Lời gọi thủ tục: Sauă khiăthătụcăđƣăđcăđnhă nghĩa,ă mună sădụngăthătụcăđóăthìăphiăthựcă hinăliăgiăthătục.ăLiăgiăthătụcăđcăthựcăhinănhăsau: - NuăthătụcăcóăthamăsăhìnhăthcăthìăliăgiăthătụcăphiăcóătênăthătụcăvƠăcácă thamăsăthựcătăkèmătheoănhăsau: ; TênThủTục [(danh sách tham số thực tế)]; ; 64
  65. - Nuăthătụcăkhôngăcóăthamăsăhìnhăthcăthìăliăgiăthătụcăchỉăcóătênăthătục: ; TênThủTục ; ; Nuăđnhă nghĩaăthătụcăcóă baoă nhiêuăthamăsăhìnhăthcăthìă liăgiă thă tụcă phiăcóăđăbyănhiêuăthamăsăthựcăt.ăCácăthamăsăthựcătătheoăthătựăsălần ltă thayăthăchoăcácăthamăsăhìnhăthc,ăcácăthamăsăthựcătăđcăvităphân cách nhau biămtăduăphẩy.ăThamăsăthựcătăthayăthăchoăthamăsăhìnhăthcănƠoăthìăphiăcóă đúngăkiuădăliuăcaăthamăsăhìnhăthcăđƣăkhaiăbáo.ăNgoƠiăraăcầnăchúăý: ThamăsăthựcătăthayăchoăthamătrăcóăthălƠăhằng,ăbin,ăbiuăthcăhayăliăgiă hƠmă(vìăđơyălƠăcácăđiălngăcóăgiáătrăxácăđnhăđóngăvaiătròănhnăthôngătinăvƠoăchoă thătụcăhotăđng).ă Thamăsăthựcătăthayăchoăthamă bină bắtăbucăphiă lƠăbinăđƣăđcăkhaiă báoă trongăphmăviăthătụcăcóăthăsădụngăđcă(vìăchỉăcóăbinăđcăkhaiăbáoăngoƠiăthă tụcămiăcóăthăluăgiăthôngătinăra). Khiăthựcăhinăliăgiăthătục,ănuăcóătruynăbinăchoăthamăbinăhoặcăthamătră thìătrongăquáătrìnhăxălýăgiáătrăcaăbinăcóăthăbăthayăđổi.ăTuyănhiên,ăkhiăthătụcă hotăđngăxongăthì: NuăthamăsăthựcătălƠăbinătruynătheoăkiuăthamătrăthìăbinăđóăsălyăliăgiáă trăcaănóătrcăkhiătruynăchoăthătục. NuăthamăsăthựcătălƠăbinătruynătheoăkiuăthamăbinăthìăbinăđóăsăgiăliă giáătrăcaălầnăthayăđổiăsauăcùng. NgoƠiăra,ăTurboăPascalăchoăphépătrongăthơnăcácăchngătrìnhăconăcóăthăcóăliă giăđnăcácăchngătrìnhăconăđƣăđcăđnhănghĩaătrcănó. Ví dụ: USES CRT; Var m,n:Word; PROCEDURE Wait; Begin Writeln('go phim bat ky de tiep tuc’); Repeat Until Keypressed; End; PROCEDURE P1(m:Word; Var n:Word); Begin If m>n Then m:=m-n Else m:=n-m; n:=2*m; Writeln('m=',m,'n=',n); End; BEGIN m:=5; n:=8; {1} 65
  66. Writeln('m=',m,'n=',n); {2} P1(m,n); {3} Wait; {4} Writeln('m=',m,'n=',n); {5} Wait; {6} END. Khiăchyăchngătrìnhătrênăthìăktăquăthựcăhinăcaăcácădòngălnhăđcăgiiă thíchănhăsau: {1} GánăgiáătrăchoăbinămăvƠăn,ătaăđcăm=5ăvƠăn=8. {2} Vităgiáătrăcaăbinăm=5ăvƠăn=8ăraămƠnăhình. {3} ThựcăhinăliăgiăthătụcăP1.ăTrongăthătụcănầyăcóăsự thayăđổiăgiáătră caămăvƠăn,ăvìăm>năcóăgiáătrăFalseănênăthựcăhinăphépăgánăm:=n-m,ătcălƠăm=3,ăsauă đóăthựcăhinăphépăgánăn:=2*m,ătcălƠăn=6.ăCuiăcùngăvităgiáătrăcaăm=3ăvƠăn=6ătiă thiăđimănầyăraămƠnăhình.ă Khiăktăthúcăthătụcănầy,ăvìămătruynătheoăkiuăthamătrăvƠănătruynă theoăkiuăthamăbinănênămălyăliăgiáătrăbanăđầuăcaănó,ătcăm=5ăvƠănăluăgiăgiáătră caălầnăthayăđổiăsauăcùng,ătcăn=6. {4} ThựcăhinăthătụcăWait. {5} VităgiáătrăcaămăvƠănătiăthiăđimănầyăraămƠnăhình,ătcăm=5ăvƠăn=6. {6} ThựcăhinăthătụcăWait. Nhăvy,ăkhiăthựcăhinăchngătrìnhătrênăsăchoătaăktăquă ină lênă mƠnăhìnhă nhăsau: m = 5 n = 8 m = 3 n = 6 go phim bat ky de tiep tuc m = 5 n = 6 go phim bat ky de tiep tuc 6.3. Bin toƠn cục vƠ bin địa phng. 6.3.1. Định nghĩa: Biến toàn cục lƠăcácăbinăđcăkhaiă báoăsauătừăkhoáă VAR caăchngătrìnhă chính, còn biến địa phương lƠăcácăbinăđcăkhaiăbáoăsauătừăkhoá VAR trong các chngătrìnhăcon. USES CRT; VAR Khai báo các biến toàn cục; PROCEDURE AAA(danh sách các tham số hình thức); 66
  67. Var Khai báo các biến địa phương; Begin ; End; BEGIN ; END. PhmăviăsădụngăcaăbinăđaăphngălƠătrongăthơnăcaăchngătrìnhăconăkhaiă báoăchúngă vƠătrongăcácăchngătrìnhăconăchaătrongăchngătrìnhă conă nƠy.ă Thiă gianătnătiăcaăchúngălƠătừăkhiăchngătrìnhăconăđcăgiăthựcăhinăchoăđnăkhiă thựcăhinăxong.ăCònăphmă viăsădụngăcaă binătoƠnăcụcă lƠătrongătoƠnă băchngă trìnhă(trongăchngătrìnhăchínhăvƠătrongăttăcăcácăchngătrìnhăconăcaănó)ăvƠăthiă gianătnătiăcaăchúngălƠăkhiăchngătrìnhăđangăhotăđng. 6.3.2. Chú ý: TênăcaăcácăthamăsăhìnhăthcăvƠătênăcaăcácăbinăđaăphngătrongăcùngămtă chngătrìnhăconăkhôngăđcătrùngănhau. TênăcaăcácăbinăđaăphngăcóăthătrùngătênăviătênăbinătoƠnăcục.ăTuyănhiênă khiăchngătrìnhăconăđcăgi,ă nuăcóăsădụngă binătrùngătênăthìătrongăquáătrìnhă chngă trìnhă conă hotă đng,ă Turboă Pascală să hiuă đóă lƠă bină đaă phng,ă khiă đóă binătoƠnăcụcătmăthiăbăcheăduăchoăđnăkhiăchngătrìnhăconăhotăđngăxong. BinătoƠnăcụcăcóăthăthamăgiaătrongăcácăchngătrìnhăcon,ămiătácăđngănhă hngăđnănóăvnăgingănhăkhiăchúngăthamăgiaătrongăchngătrìnhăchính.ăNgcă li,ăbinăđaăphngăchỉăthamăgiaătrongăchngătrìnhăconăkhaiăbáoăchúng,ăkhôngăthă thamăgiaătrongăchngătrìnhăchính. Các víădụ: 1. Uses Crt; Var a,b,c:Word; PROCEDURE P1(m:Word; Var n:Word); Begin If m>n Then m:=m-n Else m:=n-m; n:=2*m; End; BEGIN a:=5; b:=8; c:=10; {1} P1(b+c,a); {2} Writeln('a=',a,'b=',b,'c=',c); {3} END. Cácăbcăthựcăhinăcaăchngătrìnhăđcăgiiăthíchănhăsau: {1} GánăgiáătrăchoăcácăbinătoƠnăcụcăa,ăb,ăc. 67
  68. {2} ThựcăhinăliăgiăthătụcăP1,ăvìăm=b+c=8+10=18ăvƠăn=a=5ănênăm>nă doăđóăphépăgánă m:=m-n,ătcă lƠă m:=13ăđcăthựcăhin.ăSauăđóăphépăgánă n:=2*mă đcăthựcăhin,ătcălƠăn = 26.ăSauăkhiăktăthúc,ăvìăaăđcătruynătheoăkiuăthamăbină choăthamăsăhìnhăthcănănênăaăluăgiăgiáătrăcaălầnăthayăđổiăsauăcùngălƠă26. Nhăvy,ăkhiăthựcăhinăchngătrìnhătrênăsăchoătaăktăquă ină lênă mƠnăhìnhă nhăsau: a = 26 b = 8 c = 10 2. Uses Crt; Var a,b,c:Word; PROCEDURE P1(m:Word; Var n:Word); Begin If m>n Then m:=m-n Else m:=n-m; n:=2*m; a:=m+n; {phép gán này ở ví dụ 1 không có} End; BEGIN a:=5; b:=8; c:=10; {1} P1(b+c,a); {2} Writeln('a=',a,'b=',b,'c=',c); {3} END. Nhăvy,ăkhiăthựcăhinăchngătrìnhătrênăsăchoătaăktăquă ină lênă mƠnăhìnhă nhăsau:ăa = 39 b = 8 c = 10 VnăđăkhácăătrênălƠădoăcóătácăđngăphépăgánăa:=m+n,ătcălƠăa=13+26=39.ăVì aălƠăbinătoƠnăcụcă(khôngătrùngăviătênăthamăsăhìnhăthcăvƠătênăbinăđaăphngă nƠo)ănênămiătácăđngăthayăđổiăgiáătrătrênănóăđuăcóăýănghĩa. 3. Uses Crt; Var a,b,c:Word; PROCEDURE P1(m,n:Word); Var a:Word; Begin If m>n Then a:=m Else a:=n; Writeln('a=',a,'b=',b,'c=',c); End; BEGIN a:=5; b:=8; c:=10; {1} P1(b,c); {2} Writeln('a=',a,'b=',b,'c=',c); {3} END. Cácăbcăthựcăhinăcaăchngătrìnhăđcăgiiăthíchănhăsau: 68
  69. {1} GánăgiáătrăchoăcácăbinătoƠnăcụcăa,ăb,ăc. {2} ThựcăhinăliăgiăthătụcăP1ăviăm = b = 8 và n = c = 10.ăTrongăthă tụcănƠyăcóăbinăđaăphngăaătrùngătênăviăbinătoƠnăcục.ăVìăm>năcóăgiáătrăFalseă nênăphépăgánăa:=năđcăthựcăhin,ătcălƠăa:=10ăđcăthựcăhină(chúăýăăđơyăaălƠă binăđaăphng).ăSauăđóăvităraămƠnăhìnhăgiáătrăcaăaă(binăđaăphng)ăvƠăb,ăcă (binătoƠnăcục). Nhăvy,ăkhiăthựcăhinăchngătrìnhătrênăsăchoătaăktăquă ină lênă mƠnăhìnhă nhăsau: a = 10 b = 8 c = 10 a = 5 b = 8 c = 10 Trongăđóădòngăđầuăđcăvită biăcơuă lnhă WritelnătrongăthătụcăP1ăviăaălƠă bină đaă phngă vƠă dòngă sauă đcă vită biă cơuă lnhă Writelnă trongă chngă trìnhă chínhăviăaălƠăbinătoƠnăcục. 6.4. Hàm. 6.4.1. Định nghĩa hàm: MtăhƠmăđcăđnhănghĩaătheoăcúăphápăsau: FUNCTION TênHàm [(Danh sách các tham số hình thức)] : ; Các khai báo địa phương; Định nghĩa các chương trình con của hàm; BEGIN Các câu lệnh xử lý; {thân của hàm} END; Trongăđó: TênHàm lƠămtăđnhădanhădoăngiăsădụngăđặtătheoănguyênătắcăđặtătênăcaă Turbo Pascal. Danh sách các tham số hình thức gingănhăđiăviăthătục. Kiểu lƠăkiuăcaăgiáătrătrăvăcaăhƠm. Ví dụ: FUNCTION UCLN(m,n:Word):Word; MtăhƠmăcóăthăkhôngăcóăthamăsăhìnhăthcănƠo.ăKhiăđóăphầnăkhaiăbáoăsauătênă hƠmăsăkhôngăcóăcặpăduăngoặc. Ví dụ: FUNCTION SO_NGAU_NHIEN:Word; Các khai báo địa phương gingănhăđiăviăthătục. Các câu lệnh xử lý gingănhăđiăviăthătục.ăTuyănhiênăđiăviăhƠmătrong thân hàm bắtăbucăphiăcóăcơuălnhăgánătênăhƠmăbằngăgiáătrătrăvăcaăhƠm,ăgiáătră nƠyăcóăthădi dngămtăbiuăthcăcóăkiuălƠăkiuăcaăgiáătrătrăvăcaăhƠm,ătheoă cú pháp: 69
  70. TênHàm := Biểu thức; {giáătrăcaăbiuăthcălƠăgiáătrătrăvăcaăhƠm} TrongăđóăkiuăcaăBiuăthcăphiătrùngăviăkiuăcaăgiáătrătrăvăcaăhƠm. 6.4.2. Lời gọi hàm: Khiăs dụngăhƠmăthìăphiăthựcăhinăliăgiăhƠm.ăThựcăhinăliăgiăhƠmălƠăđă lyăgiáătrătrăvăcaăhƠm.ăVìăvyăliăgiăhƠmăphiăđcăđặtătrongămtăbiuăthcăcóă xălýăgiáătrăcaănó.ăKhiăthựcăhinăliăgiăhƠmăthìăcũngăphiătruynăthamăsăthựcătă choănóăgingănhăđiăviăthătục. Ví dụ: USES CRT; Var m,n,a:Word; FUNCTION SO_NGAU_NHIEN:Word; BEGIN SO_NGAU_NHIEN:=Random(100)+1; END; FUNCTION UCLN(m,n:Word):Word; Var a:Word; BEGIN If m>n Then a:=n Else a:=m; While (m mod a 0) Do a:=a-1; UCLN:=a; END; BEGIN Randomize; m:=SO_NGAU_NHIEN; n:=SO_NGAU_NHIEN; Writeln(‘USCLN cua ‘, m,’ va ‘, n,’ la: ‘, UCLN(m,n)) END. ChngătrìnhătrênăgmăcóăhaiăhƠm:ă Hàm SO_NGAU_NHIEN có giáătrătră văcaăhƠmă lƠă lyă ngu nhiênă mtăsă nguyênădngăbéăhnăhoặcăbằngă100. Hàm UCLN(m,n)cóăgiáătrătrăvăcaăhƠmălƠăcăsăchungălnănhtăcaăhaiăsă nguyênădngămăvƠăn. (đcăgiătựătìmăhiuăcácăgiiăthutăđƣăsădụngătrongăcácăhƠmătrên). 6.5. Chng trình con lồng nhau. Trong mtăchngătrìnhăcon,ăăphầnăcácăkhaiăbáoăđaăphng,ătaăcóăthăđnhă nghĩaăcácăchngătrìnhăconăphụcăvụăriêngăchoănó.ăVƠăvicănƠyăcóăthătipătụcăđcă thựcăhinăthêmătheoănhiuămcăcaăcácăchngătrìnhăconălngănhau.ăTaăcóăthăminhă hoănhăsau: PROCEDURE P1(các tham số hình thức); FUNCTION F1(các tham số hình thức):Word; Begin 70
  71. {Thân của chương trình con F1} End; PROCEDURE P2(các tham số hình thức); PROCEDURE P3(các tham số hình thức); Begin {Thân của chương trình con P3} End; Begin {Thân của chương trình con P2} End; Begin {Thân của chương trình con P1} End; Theoăcuătrúcănhătrên,ăthì: F1,ăP2ă lƠăcácăchngătrìnhăconăđcăđnhă nghĩaătrongăchngătrìnhăconăP1.ă NhăvyătrongăthơnăcaăchngătrìnhăconăP1ăcóăthăcóăliăgiăđnăcácăchngătrìnhă conăF1,ăP2ăvƠădĩănhiênăkhôngăthăgiăchngătrìnhăconăP3ăđc. P3ălƠăchngătrìnhăconăđcăđnhănghĩaătrongăchngătrìnhăconăP2.ăNhăvyă trongăthơnăcaăchngătrìnhăconăP2ăcóăthăcóăliăgiăđnăchngătrìnhăconăP3. 6.6. Chng trình con đ qui. 6.6.1. Thế nào là một chương trình con đệ qui? ChngătrìnhăconăđăquiălƠămtăchngătrìnhăconămƠătrongăthơnăcaănóăcóăítă nhtămtăcơuălnhălƠăliăgiăđnăchínhănó.ăTrongătừngătrngăhpăcụăthălƠăthătụcă hayăhƠmămƠătaăgiăđóălƠăthătụcăđăquiăhayăhƠmăđăqui. 6.6.2. Các ví dụ: VităhƠmăđăquiăđătínhătổngăăăSă=ă1+2+ +ănăviănălƠăsănguyênădngăchoă trc. FUNCTION S(n:Word):Word; Begin If n = 1 Then S := 1 Else S := S(n-1)+n ; End; VităhƠmăđăquiăđăxacăđnhăcăsăchungălnănhtăcaăhaiăsănguyênădngă măvƠănăchoătrc: FUNCTION UCLN(m,n:Word):Word; Begin If m mod n = 0 Then UCLN := n Else UCLN := UCLN(n,m mod n); End; 71
  72. VităthătụcăđăquiăđăvităraămƠnăhìnhăsădngănhăphơnăcaămtăsănguyênă dngănăchoătrc: Procedure NhiPhan(n:Word); Begin If n div 2 ; FORWARD ; {P1 được khai báo trước nhưng chưa định nghĩa} PROCEDURE/FUNCTION P2[(các tham số hình thức)]/: ; Các khai báo địa phương; Begin ; { Có sử dụng chương trình con P1 } ; 72
  73. End; PROCEDURE/FUNCTION P1[(các tham số hình thức)]/: ; Các khai báo địa phương; Begin ; { Có sử dụng chương trình con P2 } ; End; ; VămặtăcúăphápăthìăP1ăđcăkhaiăbáoătrcăviătừăkhoáăFORWARDăkèmătheo (chaăđnhănghĩaăP1),ăsauăđóăđnhănghĩaăP2ă(cóăgiăP1)ăvƠătipălină sauăphiăđnhă nghĩaăP1ă(cóăgiăP2). NhăvyăđóăcũngălƠămtăhìnhăthcăđăquiămƠătaăgiălƠăđăquiăgiánătip.ăNgcă liănuăcóăliăgiătrựcătipăđnăchínhănóănhătrcăđơyăthìătaăgiălƠ đăquiătrựcătip. 6.7. Đn vị chng trình ca ngi dùng. 6.7.1. Đơn vị chương trình (UNIT) là gì? Đăphụcăvụăchoăngiălpătrình,ăTurboăPascalăđƣăbiênăsonăsẵnămtăsăchngă trìnhăcon,ăgiălƠăchngătrìnhăconăchuẩnănhằmătrăgiúpămtăsăthaoătácădăliu. Các chngătrìnhăconănƠyăđcăđặtătrongăfileăTURBO.TPL.ăCácăchngătrìnhăconăchuẩnă nƠyăđcăphơnăchiaăvƠăđặtătrongăcácăphầnăriêng,ămỗiăphầnăđcăgiălƠămtăđnăvă chngă trìnhă chuẩn.ă Nhă vy,ă cácă đnă vă chngă trìnhă chuẩnă chaă cácă thă tụcă chuẩn,ăhƠmăchuẩnă mƠăchúngătaăđƣăcóădpăsădụngătrongăkhiă lpătrình.ăChẳngăhnă nhăcácăthătụcăWrite( ), Readln( ), Gotoxy( ), ăvƠăcácăhƠmăchuẩnăAbs( ), Sin( ), Keypressed, TurboăPascalăcònăchoăphépăngiăsădụngăxơyădựngăcácăđnăvăchngătrìnhă riêngăcaămình,ăgiălƠăđnăvăchngătrìnhăcaăngiădùng. KhiăcầnăsădụngămtăchngătrìnhăconănƠoăthìăphiăbitănóăđcăchaătrongă đnăvăchngătrìnhănƠoă(đnăvăchngătrìnhăchuẩnăhayăcaăngiădùng)ăvƠăphiă khaiăbáoăđnăvăchngătrìnhăđóăsauătừăkhoáăUSESăngayăđầuăchngătrình,ăngoiă trừăcácăchngătrìnhăconăchaătrongăđnăvăchngătrìnhăchuẩnăSYSTEM. 6.7.2. Các đơn vị chương trình chuẩn của Turbo Pascal: TurboăPascalăcóăcácăđnăvăchngătrìnhăchuẩnăsauăđơy: SYSTEM là đnă vă chngă trìnhă chaă cácă hằng,ă bin,ă hƠm,ă thă tụcă thngădùngă nhăxută nhpădă liu,ă cpăphátă vƠăqună lýă bă nh.ăĐnă văchngă trìnhănƠyăsăđcănpăthngătrựcăvƠoăbănhăkhiăTurboăPascalăđcăkhiăđng. Sauă đơyă lƠă mtă să thă tụcă vƠă hƠmă chuẩnă thngă dùngă chaă trongă đnă vă chngătrình SYSTEM: Thủ tục: 73
  74. Append MătpătinădngăvĕnăbnăđăghiăthêmăvƠoăcui. Assign Gánătênătpătinăchoăbinăfile. Close Đóngătpătin. Delete Xóaămtăchuổiăkíătựăcon. Dispose Giiăphóngăbinăđng. Erase Xóaătpătin. Inset ChènămtăxơuăconăvƠoămtăxơuăkhác. Mark Đánhăduăcácăbinăđng. New Cpăphátăbinăđng. Randomize Khiătoăchăđănguănhiên. Read, Readln GánăgiáătrănhpătừăbƠnăphímăcaămtăhayănhiuăbin. Release Giiăphóngăcácăbinăđngăđƣăbăđánhădu. Rename Đổiătênătpătin. Reset Mătpătinăđƣăcó. Rewrite ToăvƠămătpătinămi. Str ChuynăđổiădngăsăthƠnhădngăxơu. Seek Chuynăvătríăcaăsổăfileăcaătpătinădngăđnhăkiu. Val ChuynăđổiădngăchuổiăthƠnhăs. Write, Writeln XutădăliuăraămƠnăhìnhăhayătpătin. Hàm: Abs Lyăgiáătrătuytăđi. Arctan Lyăgiáătrăarctangăcaămtăgiáătrălngăgiác. Copy Lyăxơuăconăcaămtăxơu. Cos Lyăgiáătrăcosinăcaămtăgiáătrălngăgiác. Concat Lyăktăquăniăhaiăxơu. Eof Lyătrngătháiăktăthúcăfileăcaămtătpătin. Eoln Lyătrngătháiăktăthúcădòngăcaămtăbinătpătinădngăvĕnăbn. Exp Lyălũyăthừaăcăsăeăcaămtăs. FilePos Lyăvătríăcaăsổăfileătrongătpătinădngăđnhăkiu. FileSize Lyăkíchăthcăcaătpătinădngăđnhăkiu. Frac Lyăphầnăthpăphơnăcaămtăsăthực. Int Lyăphầnănguyênăcaămtăsăthực. IOResult LyăktăquămƣălỗiăcaăvicămămtătpătinăbiăthătụcăReset. Ln Lyăgiáătrălogaritătựănhiênăcaămtăs. 74
  75. Ord LyămƣăASCIIăcaămtăkíătự. Pi Giáătră3.1416 Pos Lyăvătríăcaăxơuăconătrongămtăxơuăkhác. Pred Lyă giáă tră đngă trcă điă tngă cóă kiu:ă nguyên,ă kíă tự,ă boolean. Random Lyămtăsănguyênănguănhiên. Round Lyăgiáătrănguyênăgầnăsăthựcănht. Sin Lyăgiáătrăsinăcaămtăgiáătrălngăgiác. Sqr Lyăgiáătrăbìnhăphng caămtăs. Sqrt Lyăgiáătrăcĕnăbcăhaiăcaămtăsădng. Succ Lyăgiáătrăđngăsauăđiătngăcóăkiu:ănguyên,ăkíătự,ăboolean Trunc Lyăphầnănguyênăcaămtăsăthực. Upcase Lyăkíătựăinăhoaăcaămtăkíătựăinăthng. CRT lƠăđnăvăchngătrìnhăchaăcácăhằng,ăbin,ăhƠmăvƠăthătụcăliênăquană đnăxălýăơmăthanh,ăăxutădăliuădngăvĕnăbnătrênămƠnăhìnhăvƠănhpădăliuătừăbƠnă phím.ăKhiăsădụngăcácăchngătrìnhăconătrongăđnăvăchngătrìnhănƠyăthìăphiăkhaiă báoăCRTăsauătừăkhoáăUSES. SauăđơyălƠămtăsăhằng,ăbin,ăthătụcăvƠăhƠmăchuẩnăthngădùngăchaătrongă đnăvăchngătrìnhăCRT: Các hằng liên quan đến chế độ phân giải của màn hình. BW40 = 0 ; CO40 = 1 ; BW80 = 2 ; CO80 = 3 ; Mono = 7 ; Font8x8 = 256 ; Các hằng liên quan đến chế độ màu của màn hình Black = 0 LightBlue = 9 Blue = 1 LightGreen = 10 Green = 2 LightCyan = 11 Cyan = 3 LightRed = 12 Red = 4 LightMagenta = 13 Magenta = 5 Yellow = 14 Brown = 6 White = 15 LightGray = 7 Blink = 128 DarkGray = 8 Các thủ tục ClrEol XóaătrênămƠnăhìnhătừăvătríăconătrăđnăcuiădòng. ClrScr XóaăcaăsămƠnăhìnhăhinăti. 75