intTypePromotion=1
zunia.vn Tuyển sinh 2024 dành cho Gen-Z zunia.vn zunia.vn
ADSENSE

Lập trình bằng Turbo Pascal part 7

Chia sẻ: Ashfjshd Askfaj | Ngày: | Loại File: PDF | Số trang:28

98
lượt xem
31
download
 
  Download Vui lòng tải xuống để xem tài liệu đầy đủ

Hình 11.7: Chi tiết mức 3 các công việc 2.1 vμ 2.2 Đến đây ta thấy hầu nh− mọi công việc đã đủ đơn giản. Phần duy nhất cần lμm chi tiết thêm lμ mô đun 2.2.1 - xử lí khi gõ các phím mũi tên Up, Down. 7.2.4 Chi tiết mức 4.

Chủ đề:
Lưu

Nội dung Text: Lập trình bằng Turbo Pascal part 7

  1. LËp tr×nh b»ng Turbo Pascal 2.2.2: Xö lÝ khi gâ c¸c phÝm kh¸c. 2.1: VÏ b¶ng chän ban ®Çu 2.1.1.TÝnh 2.1.2.VÏ 2.1.3. ViÕt 2.1.4. Lμm chiÒu dμi, khung h×nh lÇn l−ît tªn næi bËt mét chiÒu réng. ch÷ nhËt víi c¸c môc môc chän mμu nÒn. chän. mÆc ®Þnh. 2.2: Xö lÝ gâ phÝm 2.2.1: Xö lÝ khi 2.2.2: Xö lÝ khi gâ c¸c phÝm kh¸c gâ mòi tªn lªn, xuèng H×nh 11.7: Chi tiÕt møc 3 c¸c c«ng viÖc 2.1 vμ 2.2 §Õn ®©y ta thÊy hÇu nh− mäi c«ng viÖc ®· ®ñ ®¬n gi¶n. PhÇn duy nhÊt cÇn lμm chi tiÕt thªm lμ m« ®un 2.2.1 - xö lÝ khi gâ c¸c phÝm mòi tªn Up, Down. 7.2.4 Chi tiÕt møc 4 . NÕu kÝ hiÖu i lμ sè thø tù cña môc chän hiÖn hμnh th× c«ng viÖc 2.2.1 (xö lÝ khi gâ phÝm mòi tªn Up, Down) cÇn thùc hiÖn lμ nh− sau. 2.2.1.1: Lμm ch×m môc chän i cò tøc lμ hiÓn thÞ môc chän i b»ng mμu nÒn b×nh th−êng 2.2.1.2: CËp nhËt l¹i môc chän i míi. - G¸n i:= i + 1 / i:= i - 1 tuú theo gâ Up, Down. - Chó ý "xoay vßng trßn" khi: gâ phÝm m÷i tªn Up khi ®ang ë môc chän ®Ønh b¶ng (i=0) hay gâ mòi tªn Down khi ®ang ë môc chän ®¸y b¶ng (i = sè môc chän -1). NguyÔn §×nh Ho¸, ViÖn CNTT - §HQG Hμ néi 161
  2. LËp tr×nh b»ng Turbo Pascal 2.2.1.3: Lμm næi bËt môc chän i míi. HiÓn thÞ môc chän i b»ng mμu chän. 2.2.1: Xö lÝ khi gâ mòi tªn lªn, xuèng 2.2.1.1. Lμm 2.2.1.2. CËp 2.2.1.3.Lμm ch×m môc nhËt môc chän næi môc chän chän cò míi míi H×nh 11.7: chi tiÕt møc 4 c«ng viÖc 2.2.1 Tãm l¹i, sau bèn b−íc chi tiÕt dÇn, c¸c c«ng viÖc ®· trë thμnh ®¬n gi¶n. ViÖc triÓn khai viÕt ch−¬ng tr×nh sö dông Turbo Pascal hay mét ng«n ng÷ lËp tr×nh nμo ®ã chØ ®¬n thuÇn lμ chuyÓn tõng c«ng viÖc thμnh c¸c c©u lÖnh t−¬ng øng mét c¸ch m¸y mãc. 7.3 Ch−¬ng tr×nh chi tiÕt. D−íi ®©y lμ ch−¬ng tr×nh t¹o b¶ng chän nhËn ®−îc sau khi triÓn khai s¬ ®å trªn thμnh c¸c c©u lÖnh Turbo Pascal. uses crt; const max_SoMucChon = 8; {sè môc chän tèi ®a} type mang_string = array[0..max_SoMucChon-1] of string; var Ten_Muc_Chon: mang_string; {m¶ng c¸c tªn muc chän} So_Muc_Chon: word; {sè môc chän} Mau_nen, Mau_Chon: byte; Chon: integer; {danh so tu 0..(SoMucChon - 1),ESC = -1} Procedure NhapThamSoBangChon; {phÇn nhËp d÷ liÖu} begin So_Muc_Chon:=3; Ten_Muc_Chon[0]:=' muc chon 1 '; Ten_Muc_Chon[1]:=' muc chon 2 '; Ten_Muc_Chon[2]:=' thoat '; End; Procedure KiemTraHoatDong; {kiÓm tra c¸c thao t¸c sö dông b¶ng chän} begin; case Chon of NguyÔn §×nh Ho¸, ViÖn CNTT - §HQG Hμ néi 162
  3. LËp tr×nh b»ng Turbo Pascal 0: begin clrscr; gotoXY(1,1); writeln('ban da chon:', Chon); end; 1: begin clrscr; gotoXY(5,5); writeln('ban da chon:', Chon); end; 2: begin clrscr; gotoXY(10,10); writeln('ban da chon:', Chon); end; -1: begin clrscr; gotoXY(20,20); writeln('ban da chon thoat !'); end; end; {case} end; function BangChon(x,y,SoMucChon:word;TenMucChon: mang_string; MauNen,MauChon: byte): integer; {vÏ b¶ng chän, xö lý thao t¸c chän} const esc=#27; {c¸c phÝm ®Ó chän} enter =#13; up = #72 ; down = #80; var rong: word; {chiÒu réng b¶ng = tªn môc chän dμi nhÊt} i: integer; {thø tù môc chän hiÖn t¹i} procedure LamNoiMucChon(i: integer); {lμm næi bËt môc chän} begin TextBackGround(MauChon); gotoXY(1,i+1); ClrEol; write(TenMucChon[i]); end; procedure LamChimMucChon(i:integer); {th«i lμm næi} begin TextBackGround(MauNen); gotoXY(1,i+1); clreol; write(TenMucChon[i]); end; procedure VeBangChon; var i: integer; begin {tinh chieu rong} rong:=length(TenMucChon[0]); for i:=1 to SoMucChon -1 do if rong < length(TenMucChon[i]) then rong:= length(TenMucChon[i]); window(x,y,x+rong,y+SoMucChon); NguyÔn §×nh Ho¸, ViÖn CNTT - §HQG Hμ néi 163
  4. LËp tr×nh b»ng Turbo Pascal TextBackGround(MauNen); clrscr; for i:=0 to SoMucChon -1 do writeln(TenMucChon[i]); {mÆc ®Þnh tr−êng hîp ®Çu tiªn ®−îc chän} LamNoiMucChon(0); end; procedure XuLiGoPhim; var i: integer; gophim: char; begin i:=0; {mÆc ®Þnh ban ®Çu lμ môc chän thø nhÊt} repeat if keyPressed then begin gophim:=readkey; if gophim=#0 then gophim:=readkey; case gophim of enter: begin BangChon:= i; exit end; esc : begin BangChon:=-1; exit end; up: begin {xoa hight light} LamChimMucChon(i); i:= ((i+SoMucChon) -1) mod SoMucChon; LamNoiMucChon(i); BangChon:=i; end; down: begin LamChimMucChon(i); i:=(i+1) mod SoMucChon; LamNoiMucChon(i); BangChon:=i; end; else ; {gâ c¸c phÝm kh¸c sÏ kh«ng cã t¸c dông g×} end; {case} end; until (gophim=enter) or (gophim=esc); end; begin {function BangChon} VeBangChon; XuLiGoPhim; {tr¶ l¹i chÕ ®é mμn h×nh mÆc ®Þnh} NguyÔn §×nh Ho¸, ViÖn CNTT - §HQG Hμ néi 164
  5. LËp tr×nh b»ng Turbo Pascal textMode (lastMode); end; {function BangChon} BEGIN NhapThamSoBangChon; Chon:= BangChon(10,5,So_Muc_Chon,Ten_Muc_Chon,Blue,Red); KiemTraHoatDong; Readln; END. 7.4 ChuyÓn thµnh Unit b¶ng chän. ChuyÓn ch−¬ng tr×nh con t¹o b¶ng chän ®· x©y dùng trong tiÕt tr−íc thμnh mét Unit vμ ®Æt vμo th− viÖn c¸c Unit chuÈn cña Turbo Pascal ®Ó sö dông sau nμy. §Ó mét ch−¬ng tr×nh kh¸c cã thÓ sö dông ®−îc hμm t¹o b¶ng chän, phÇn giao diÖn ph¶i cung cÊp mÉu hμm BangChon vμ c¸c d÷ liÖu ®Çu vμo nh− vÞ trÝ, sè môc chän, m¶ng c¸c tªn môc chän vμ bé mμu (mμu nÒn b×nh th−êng vμ mμu khi ®−îc chän). NhËn thÊy r»ng c¸c tham sè nãi trªn ®Òu ®· cã trong danh s¸ch tham sè cña hμm b¶ng chän. C¸c kiÓu d÷ liÖu word, byte lμ c¸c kiÓu chuÈn ®· ®−îc ®Þnh nghÜa s½n. ChØ cã kiÓu mang_string m¶ng c¸c x©u kÝ tù kh«ng ph¶i lμ mét kiÓu chuÈn nªn ph¶i khai b¸o nã trong phÇn giao diÖn, sau tõ kho¸ Interface. PhÇn triÓn khai chi tiÕt cña Unit kh«ng cã g× kh¸c h¬n lμ thùc hiÖn chi tiÕt hμm b¶ng chän nh− ®· viÕt trong vÝ dô ë tiÕt 3. Tãm l¹i, tÖp BgChon.pas cã néi dung nh− sau. Unit BgChon; INTERFACE type mang_string = array[0..7] of string; function BangChon(x,y,SoMucChon:word;TenMucChon:mang_string; MauNen,MauChon: byte): integer; IMPLEMENTATION uses crt; function BangChon(x,y,SoMucChon:word;TenMucChon: mang_string; MauNen,MauChon: byte): integer; const esc=#27; enter =#13; up = #72 ; NguyÔn §×nh Ho¸, ViÖn CNTT - §HQG Hμ néi 165
  6. LËp tr×nh b»ng Turbo Pascal down = #80; var rong: word; {chieu rong bang = nhan muc chon dai nhat} i: integer; {thu tu muc chon hien tai} procedure LamNoiMucChon(i: integer); {lam noi bat muc chon} begin .... end; procedure LamChimMucChon(i:integer); {thoi lam noi} begin .... end; procedure VeBangChon; var i: integer; begin .... end; procedure XuLiGoPhim; var i: integer; gophim: char; begin .... end; begin {function BangChon} .... end; {function BangChon} END. {Unit BgChon} Biªn dÞch tÖp BgChon.pas thμnh tÖp BgChon.tpu vμ ®Æt vμo th− môc c¸c Units chuÈn cña Turbo Pascal nh− ®· h−íng dÉn ë trªn. B©y giê cã thÓ kiÓm tra thö ho¹t ®éng cña b¶ng chän b»ng mét ch−¬ng tr×nh ng¾n gän nh− sau. program testUnitBgChon; uses crt, BgChon; var SoMC: word; TenMC: Mang_String; Chon: integer; Procedure NhapThamSoBangChon; ...... Procedure KiemTraHoatDong; ...... NguyÔn §×nh Ho¸, ViÖn CNTT - §HQG Hμ néi 166
  7. LËp tr×nh b»ng Turbo Pascal BEGIN NhapThamSoBangChon; Chon:= BangChon(10,5,SoMC,TenMC,Blue,Red); KiemTraHoatDong; Readln; END. 8. Mét ch−¬ng tr×nh øng dông. Bμi to¸n: X©y dùng ch−¬ng tr×nh qu¶n lÝ hå s¬ cña sinh viªn. Ch−¬ng tr×nh cÇn cã c¸c chøc n¨ng t¹o tÖp d÷ liÖu míi, më tÖp d÷ liÖu ®· cã, liÖt kª toμn bé danh s¸ch, t×m kiÕm th«ng tin vÒ mét sinh viªn nμo ®ã, thªm mét sinh viªn (vμo cuèi) danh s¸ch. Ch−a xÐt ®Õn viÖc söa ®æi th«ng tin, xo¸ tªn mét sinh viªn khái danh s¸ch hay s¾p xÕp danh s¸ch theo m«t trËt tù nμo ®ã khi thªm vμo. 8.1 Ph©n tÝch thiÕt kÕ 8.1.1 CÊu tróc d÷ liÖu. C¸c môc d÷ liÖu trong hå s¬ cña mét sinh viªn tæ chøc thμnh mét b¶n ghi. Mét danh s¸ch sinh viªn ghi l¹i trªn ®Üa sÏ lμ mét tÖp c¸c b¶n ghi. KiÓu d÷ liÖu hå s¬ sinh viªn vμ tÖp c¸c hå s¬ sÏ dïng trong ch−¬ng tr×nh cã thÓ ®−îc khai b¸o nh− sau. Type HoSo= Record maso:integer; hoten:String[20]; namsinh:string[2]; end; Var TepHoSo:File of HoSo; 8.1.2 Chi tiÕt b−íc 1 Ch−¬ng tr×nh gåm hai phÇn, phÇn giao diÖn lμ mét b¶ng chän vμ phÇn xö lÝ c¸c yªu cÇu cña ng−êi sö dông. Ta ®· x©y dùng Unit lμm b¶ng chän nªn b©y giê chØ cÇn gäi ra sö dông. D−íi ®©y sÏ ph©n tÝch chi tiÕt phÇn xö lÝ c¸c yªu cÇu. Râ rμng cÇn chia ra 4 m« ®un thùc hiÖn 4 chøc n¨ng c«ng viÖc chÝnh nh− ®Æc t¶ ë trªn. 1 - Më tÖp míi hoÆc tÖp ®· cã trªn ®Üa. - §Çu vμo: tªn tÖp cÇn më - §Çu ra: tÖp ®−îc më ra s½n sμng ®Ó ®äc ra hoÆc s¨n sμng ®Ó viÕt vμo nÕu lμ t¹o tÖp míi. NguyÔn §×nh Ho¸, ViÖn CNTT - §HQG Hμ néi 167
  8. LËp tr×nh b»ng Turbo Pascal 2 - LiÖt kª néi dung toμn bé c¸c b¶n ghi trong tÖp. - §Çu vμo: tÖp ®· më s½n sμng. - §Çu ra: hiÓn thÞ toμn bé néi dung c¸c b¶n ghi cã trong tÖp ra mμn h×nh. 3 - T×m kiÕm: t×m mét b¶n ghi cô thÓ, hiÓn thÞ kÕt qu¶ t×m kiÕm lªn mμn h×nh. - §Çu vμo: tÖp ®· më s½n sμng, m· sè cña sinh viªn cÇn t×m gâ tõ bμn phÝm. - §Çu ra: hiÓn thÞ néi dung b¶n ghi t×m thÊy hoÆc th«ng b¸o kh«ng t×m thÊy. 4- Thªm mét b¶n ghi vμo cuèi tÖp. - §Çu vμo: tÖp ®· më s½n sμng, m· sè cña sinh viªn vμ c¸c th«ng tin kh¸c nhËp tõ bμn phÝm - §Çu ra: nÕu sinh viªn ch−a cã trong danh s¸ch th× b¶n ghi míi ®−îc thªm vμo cuèi tÖp. Gi¶ sö tªn cña 4 thñ tôc thùc hiÖn c¸c c«ng viÖc t−¬ng øng lμ Më tÖp, LiÖt kª, T×m kiÕm, Thªm. Ta cã thÓ viÕt ngay ch−¬ng tr×nh chÝnh, chØ bao gåm mét sè lêi gäi c¸c m« ®un ch−¬ng tr×nh con nh− d−íi ®©y. Ch−¬ng tr×nh sö dông l¹i ch−¬ng tr×nh con lμm b¶ng chän mμ ta ®· chuyÓn thμnh Unit. BEGIN { ch−¬ng tr×nh chÝnh } Clrscr; repeat chon:= BangChon(60,15,SoMC,TenMC,Blue, Red) + 1; case chon of 0:exit; 1:MoTep; 2:LietKe; 3:TimKiem 4:Them; else ; end; until chon = SoMC; END. 8.1.3 C¸c b−íc chi tiÕt tiÕp theo 1- Më tÖp: Chi tiÕt h¬n vÒ c¸c c«ng viÖc nh− sau. 1.1 - NhËp tªn tÖp cÇn më 1.2 - KiÓm tra cã tÖp trªn ®Üa hay ch−a 1.3 - Xö lÝ khi ®· cã tÖp: më ra ®Ó ®äc vμ th«ng b¸o thμnh c«ng. NguyÔn §×nh Ho¸, ViÖn CNTT - §HQG Hμ néi 168
  9. LËp tr×nh b»ng Turbo Pascal 1.4 - Xö lÝ khi ch−a cã tÖp: 1.4.1 - KiÓm tra xem ng−êi dïng muèn t¹o tÖp d÷ liÖu míi hay gâ nhÇm tªn. 1.4.2 - Tr−êng hîp 1, t¹o tÖp míi vμ th«ng b¸o thμnh c«ng 1.4.3 - Tr−êng hîp 2, tho¸t ra, cho phÐp lμm l¹i. 2- LiÖt kª toμn bé danh s¸ch. Chi tiÕt c¸c c«ng viÖc nh− sau. 2.1 - Tr×nh bμy phÇn tiªu ®Ò ®Ó hiÓn thÞ danh s¸ch. 2.2 - §−a cöa sæ tÖp vÒ ®Çu tÖp. 2.3 - §äc b¶n ghi vμo biÕn trung gian vμ viÕt ra mμn h×nh. 2.4 - DÞch xuèng b¶n ghi tiÕp. 2.5 - KiÓm tra hÕt tÖp, ®ãng tÖp vμ kÕt thóc. 3. T×m kiÕm. C¸c b−íc c«ng viÖc 3.1 - NhËp m· sè cÇn t×m. 3.2 - TiÕn hμnh t×m kiÕm. 3.2.1- §−a cöa sæ tÖp vÒ ®Çu tÖp. 3.2.2 - §äc tõng b¶n ghi vμo biÕn trung gian. 3.2.3 - So s¸nh víi m· sè cÇn t×m 3.2.4 - Dõng khi ®· thÊy hoÆc hÕt tÖp. 3.3 - HiÓn thÞ kÕt qu¶. 3.3.1 - Tr−êng hîp t×m thÊy, hiÓn thÞ néi dung biÕn trung gian. 3.3.2 - Tr−êng hîp kh«ng t×m thÊy, hiÓn thÞ th«ng b¸o. 3.4 - Hái l¹i ng−êi dïng cã cÇn t×m kiÕm tiÕp hay kh«ng. 3.5 - Xö lÝ tuú theo yªu cÇu cña ng−êi sö dông. 3.5.1 - Cã: lÆp l¹i viÖc t×m kiÕm 3.5.2 - Kh«ng: kÕt thóc 3.6 - §ãng tÖp vμ kÕt thóc 4. Thªm hå s¬ míi. C¸c b−íc chi tiÕt. 4.1 - NhËp m· sè cÇn thªm. 4.2 - T×m kiÕm: gäi thñ tôc t×m kiÕm ë trªn. 4.3 - Xö lÝ kÕt qu¶ t×m kiÕm 4.3.1 Tr−êng hîp ®· cã hiÓn thÞ th«ng b¸o 4.3.2 Tr−êng hîp ch−a cã, thªm vμo cuèi danh s¸ch. 4.3.2.1 NhËp d÷ liÖu vμo biÕn trung gian 4.3.2.2. §−a cöa sæ tÖp vÒ cuèi tÖp. 4.3.2.3 ViÕt néi dung cña b¶n ghi trung gian vμo tÖp. 4.4 - Hái l¹i xem cã tiÕp tôc bæ xung hå s¬ míi kh«ng. NguyÔn §×nh Ho¸, ViÖn CNTT - §HQG Hμ néi 169
  10. LËp tr×nh b»ng Turbo Pascal 4.5 - Xö lÝ c©u tr¶ lêi: 4.5.1 Cã: lÆp l¹i tõ 4.1 4.5.2 Kh«ng: sang b−íc tiÕp theo. 4.6 - §ãng tÖp vμ kÕt thóc. 8.2 TriÓn khai chi tiÕt ch−¬ng tr×nh. D−íi ®©y lμ c¸c m« ®un ch−¬ng tr×nh con thùc hiÖn 4 chøc n¨ng c«ng viÖc chÝnh nh− ®· ph©n tÝch. 1. Thñ tôc Më tÖp procedure MoTep; const Enter = #13; var tenfile: String[32]; begin clrscr; Write(' Cho ten tep '); Readln(tenfile); Assign(TepHoSo,tenfile); {$I-} reset(TepHoSo); {$I+} if ioresult 0 then {kh«ng cã tÖp nμo trïng tªn } begin Writeln(' Ban muon tao tep moi ? Enter=Yes '); if ReadKey = Enter then Rewrite(ds) else exit; end; close(ds); Writeln(' Tep da san sang !'); end; 2. Thñ tôc LiÖt kª procedure LietKe; var i:integer; begin clrscr; reset(TepHoSo); i:=0; writeln(' DANH SACH SINH VIEN '); writeln; writeln('------------------------------------------'); writeln('|TT |MASO | HO TEN |NAM SINH|'); writeln('------------------------------------------'); while not eof(TepHoSo) do begin NguyÔn §×nh Ho¸, ViÖn CNTT - §HQG Hμ néi 170
  11. LËp tr×nh b»ng Turbo Pascal read(TepHoSo,sv); if sv.maso0 then begin i:=i+1; with sv do begin writeln('|',i:2,' |',maso:2,' | ',hoten:20,'|',namsinh:4,' |'); end; end; end; close(TepHoSo); end; 3. Thñ tôc T×m kiÕm. procedure TimKiem; var TimThay:boolean; traloi:char; i,h:integer; begin clrscr; repeat write(' Ma so SV can xem thong tin: '); readln(ma); reset (TepHoSo); TimThay:=false; while (not TimThay) and (not eof(TepHoSo)) do begin read(TepHoSo,sv); if sv.maso=ma then begin TimThay:=true; writeln(' Sv co ma so: ',ma,': '); writeln(' Ho ten: ',sv.hoten); writeln(' Nam sinh: ',sv.namsinh); end; end; if not Timthay then writeln('*Ma so SV: ',ma,' khong co trong tep '); write(' Can xem tiep (Y/N) ?: ');readln(traloi); until upcase(traloi)='N'; close(TepHoSo); end; 4. Thñ tôc Thªm. procedure Them; var i,ma: integer; DaCo:boolean; Begin NguyÔn §×nh Ho¸, ViÖn CNTT - §HQG Hμ néi 171
  12. LËp tr×nh b»ng Turbo Pascal Clrscr; write(' Ma so SV (0:Stop): ');readln(ma); while ma0 do begin reset(TepHoSo); DaCo:=false; while (not DaCo) and (not eof(TepHoSo)) do begin read(TepHoSo,sv); if sv.maso=ma then DaCo:=true end; if DaCo=true then writeln('Ma so: ',ma,'da co ') else begin with sv do begin write(' Ho ten: ');readln(hoten); write(' Nam sinh ( 2 so cuoi ): ');readln(namsinh); maso:=ma; end; seek(TepHoSo,filesize(TepHoSo)); write(TepHoSo,sv); end; write(' Ma so SV (0:Stop): ');readln(ma); end; close(TepHoSo); end; Toμn bé nh÷ng chøc n¨ng c¬ b¶n cña ch−¬ng tr×nh qu¶n lÝ hå s¬ sinh viªn nh− yªu cÇu ®· ®−îc triÓn khai chi tiÕt. B©y giê cÇn l¾p r¸p chóng vμo mét khung ch−¬ng tr×nh chÝnh. Ch−¬ng tr×nh chÝnh sö dông ngay b¶ng chän ®· x©y dùng trong Unit BgChon ë ch−¬ng tr−íc. Tãm l¹i, ta nhËn ®−îc ch−¬ng tr×nh hoμn chØnh nh− sau ®©y. program QLSV; uses crt, BgChon; Const maxSize=10; Type HoSo= Record maso:integer; hoten:String[20]; namsinh:string[2]; end; Var TepHoSo:File of HoSo; sv:HoSo; tenfile:String[32]; ma:integer; { C¸c tham sè cho b¶ng chän } NguyÔn §×nh Ho¸, ViÖn CNTT - §HQG Hμ néi 172
  13. LËp tr×nh b»ng Turbo Pascal SoMC: word; TenMC: Mang_String; Chon: integer; Procedure NhapThamSoBangChon; Begin {khëi t¹o c¸c tham sè b¶ng chän} SoMC:= 5; TenMC[0]:=' Mo tep du lieu '; TenMC[1]:=' Liet ke '; TenMC[2]:=' Tim kiem '; TenMC[3]:=' Them vao danh sach '; TenMC[4]:=' Ket thuc '; End; procedure MoTep; Var i:integer; begin .... end; procedure LietKe; var i:integer; begin .... end; procedure TimKiem; var TimThay:boolean; traloi:char; i,h:integer; begin .... end; procedure Them; var i,ma: integer; DaCo:boolean; begin .... end; BEGIN Clrscr; repeat chon:= BangChon(60,15,SoMC,TenMC,Blue, Red) + 1; case chon of 0:exit; 1:MoTep; 2:LietKe; 3:TimPhanTu; 4:ThemPhanTu; else ; end; until chon = SoMC; NguyÔn §×nh Ho¸, ViÖn CNTT - §HQG Hμ néi 173
  14. LËp tr×nh b»ng Turbo Pascal END. C©u hái vμ bμi tËp 1. Nguyªn t¾c chung khi thiÕt kÕ chi tiÕt dÇn tõng b−íc lμ g×. 2. C¸c m« ®un trong mét ch−¬ng tr×nh liªn kÕt víi nhau b»ng c¸ch nμo. 3. S¬ ®å cÊu tróc ch−ong tr×nh kh¸c g× víi l−u ®å thuËt gi¶i. 4. Khi nμo th× cã thÓ vμ cÇn dïng thuËt gi¶i ®Ö quy. 5. So s¸nh thuËt gi¶i ®Ö quy víi thuËt gi¶i lÆp.ThuËt gi¶i nμo hiÖu qu¶ h¬n. 6. C©u lÖnh nμo lu«n cã trong mét thñ tôc ®Ö quy. 7. Tªn cña mät hμm ®Ö quy ph¶i xuÊt hiÖn Ýt nhÊt lμ bao nhiªu lÇn bªn trong phÇn th©n cña nã. 8. T¹i sao nÕu n lμ tham sè cña mét hμm, thñ tôc ®Ö quy th× n ph¶i lμ tham biÕn. Thùc hμnh. 1. Ph©n tÝch thiÕt kÕ vμ triÓn khai mét ch−¬ng tr×nh qu¶n lÝ c¸c ®Çu s¸ch cña th− viÖn. Mçi ®Çu s¸ch gåm c¸c th«ng tin: m· sè, tªn, sè l−îng b¶n. Ch−¬ng tr×nh cho phÐp liÖt kª kho s¸ch, t×m kiÕm mét ®Çu s¸ch, thªm sè b¶n s¸ch cho mét ®Çu s¸ch, thªm ®Çu s¸ch míi. 2. Ph©n tich thiÕt kÕ vμ triÓn khai mét ch−¬ng tr×nh so¹n th¶o mét dßng v¨n b¶n, cho phÐp chÌn, xo¸, thay thÕ mét x©u con. 3. Ph©n tich thiÕt kÕ vμ triÓn khai mét trß ch¬i ®¬n gi¶n hái ®¸p vÒ ®Þa lÝ nh− sau: ®−a ra tªn mét n−íc vμ mét sè tªn thñ ®«, ng−êi ch¬i chän c©u tr¶ lêi, cã thèng kª vμ tÝnh ®iÓm. 4. ViÕt ch−¬ng tr×nh qu¶n lÝ kÕt qu¶n häc tËp cña häc sinh mét líp, gåm 10 häc sinh. Mçi häc sinh cã c¸c th«ng tin sau: Hä vμ tªn, ®iÓm, xÕp lo¹i. Hä tªn vμ ®iÓm nhËp tõ bμn phÝm. Ch−¬ng tr×nh cã c¸c ch−¬ng tr×nh con: NhapDuLieu, PhanLoai, DiemTB, XetLenL¬p. Cho tr−íc ch−¬ng tr×nh chÝnh nh− sau. NhapDuLieu; {thñ tôc nhËp d÷ liÖu} PhanLoai (4,6,8); {kÐm:0..4; trung b×nh:5,6; kh¸ 7,8; giái: 9,10} Writeln(' §iÓm trung b×nh c¶ l¬p: ', DiemTB); Writeln(' Danh sach häc sinh ®−îc lªn líp '); XetLenL¬p. 5. ViÕt hμm ®Ö quy tÝnh sè Fibonaci. NguyÔn §×nh Ho¸, ViÖn CNTT - §HQG Hμ néi 174
  15. LËp tr×nh b»ng Turbo Pascal 6. ViÕt thñ tôc ®Ö quy in c¸c phÇn tö m¶ng theo thø tù xu«i, theo thø tù ng−îc. 7. LiÖt kª mäi ho¸n vÞ cña n phÇn tö dïng thuËt gi¶i ®Ö quy. 8. ViÕt thñ tôc ®Ö quy t×m nghiÖm b»ng ph−¬ng ph¸p chia ®«i dÇn cña ph−¬ng tr×nh y = exp(x) + sin x - 2 = 0 trªn ®o¹n [0,1]. NguyÔn §×nh Ho¸, ViÖn CNTT - §HQG Hμ néi 175
  16. LËp tr×nh b»ng Turbo Pascal Ch−¬ng 12 Con trá vμ cÊu tróc d÷ liÖu ®éng 1. Con trá 1.1 BiÕn tÜnh vµ biÕn ®éng. 1.1.1 BiÕn tÜnh Cho ®Õn nay ta biÕt r»ng muèn sö dông mét biÕn trong ch−¬ng tr×nh hay ch−¬ng tr×nh con th× ph¶i khai b¸o. Sau khi ®· khai b¸o, tøc lμ ®· ®¨ng kÝ tªn vμ kiÓu d÷ liÖu cña biÕn ë ®Çu ch−¬ng tr×nh, ch−¬ng tr×nh con th× ta cã thÓ yªn t©m sö dông mμ kh«ng cÇn ph¶i lμm thªm bÊt cø viªc nμo kh¸c. Mäi c«ng viÖc vÒ qu¶n lÝ c¸c biÕn sÏ do tr×nh biªn dÞch vμ hÖ ®iÒu hμnh ®¶m nhiÖm. Chóng sÏ ®−îc cÊp ph¸t vïng nhí khi b¾t ®Çu ch−¬ng tr×nh, ch−¬ng tr×nh con vμ ®−îc gi¶i phãng khi ch−¬ng tr×nh, ch−¬ng tr×nh con kÕt thóc. Nh− vËy, biÕn toμn côc sÏ tån t¹i trong suèt thêi gian ho¹t ®éng cña ch−¬ng tr×nh chÝnh, biÕn côc bé sÏ tån t¹i trong suèt thêi gian ho¹t ®éng cña ch−¬ng tr×nh con dï r»ng cã thÓ ®· ®−îc sö dông xong sím h¬n ngay tõ lóc b¾t ®Çu ch−¬ng tr×nh hoÆc ®Õn gÇn thêi ®iÓm kÕt thóc míi cÇn ®Õn n¬i. V× lÝ do nμy mμ ng−êi ta gäi ®ã lμ c¸c biÕn tÜnh. Sö dông c¸c biÕn tÜnh dÔ dμng vμ ®¬n gi¶n. Tuy nhiªn chóng kh«ng cho phÐp tËn dông triÖt ®Ó bé nhí. 1.1.2 BiÕn ®éng §Ó kh¾c phôc nh−îc ®iÓm trªn cña c¸c biÕn tÜnh, ng−êi lËp tr×nh cÇn ph¶i cã kh¶ n¨ng can thiÖp trùc tiÕp vμo viÖc cÊp ph¸t vμ gi¶i phãng vïng nhí. ChØ xin cÊp ph¸t bé nhí cho mét biÕn khi b¾t ®Çu thùc sù dïng ®Õn nã, cÇn bao nhiªu xin cÊp ph¸t ®óng bÊy nhiªu, tr¸nh l·ng phÝ vμ khi dïng xong cã thÓ gi¶i phãng ngay kh«ng ®Ó chiÕm chç v« Ých. Kh¸i niÖm biÕn ®éng ®−îc ®Ò xuÊt chÝnh lμ ®Ó ®¸p øng ®ßi hái trªn. Nã mang l¹i kh¶ n¨ng sö dông bé nhí linh ho¹t vμ mÒm dÎo h¬n, tuy nhiªn còng yªu cÇu ng−êi lËp tr×nh ph¶i lμm viÖc nhiÒu h¬n, cã tr×nh ®é cao h¬n. Kh¸i niÖm biÕn ®éng ®i ®«i víi biÕn con trá NguyÔn §×nh Ho¸, ViÖn CNTT - §HQG Hμ néi 176
  17. LËp tr×nh b»ng Turbo Pascal 1.2 §Þnh nghÜa vµ khai b¸o. 1.2.1 BiÕn con trá BiÕn con trá (Pointer variable) lμ lo¹i biÕn ®Æc biÖt, chiÕm 2 byte. Néi dung cña nã kh«ng ph¶i lμ mét gi¸ trÞ, mét d÷ liÖu, mμ lμ mét ®Þa chØ. §©y lμ ®Þa chØ « nhí ®Çu tiªn cña vïng nhí ®Ó chøa biÕn ®éng t−¬ng øng. Vïng nhí nμy dμi ®Õn ®©u lμ do kiÓu d÷ liÖu cña biÕn ®éng quyÕt ®Þnh. VËy cÇn chØ râ con trá kiÓu (d÷ liÖu) g×! Khi mét con trá cã kiÓu ®−îc khai b¸o th× tr×nh biªn dÞch nhËn ®−îc c¸c th«ng tin sau: -KÝch th−íc cña biÕn -CÊu tróc cña biÕn, nghÜa lμ ®Þa chØ t−¬ng ®èi cña c¸c tr−êng thμnh phÇn nÕu cã vμ kÝch th−íc cña mçi tr−êng. BiÕn con trá $1234 $1234 Vïng nhí chøa biÕn ®éng H×nh 12.1: biÕn con trá ®Ó trá vμo mét ®Þa chØ 1.2.2 Khai b¸o. Cã thÓ khai b¸o kiÓu con trá vμ sau ®ã khai b¸o biÕn con trá. Còng cã thÓ khai b¸o trùc tiÕp ngay biÕn con trá, kh«ng ®Þnh nghÜa kiÓu. Có ph¸p: tõ kho¸ Type, tªn kiÓu con trá, dÊu b»ng, dÊu mò, kiÓu d÷ liÖu trá tíi. Type kiÓu con trá = ^ kiÓu d÷ liÖu ; Var biÕn con trá : kiÓu con trá ; hoÆc Var biÕn con trá : ^ kiÓu d÷ liªu ; Type RealPtr = ^ Real; VÝ dô 1: Var a,b, kq: RealPtr; hoÆc Var a,b, kq: ^ Real; VÝ dô 2: Type Sv = Record Ho_dem: string[24]; Ten: string[8]; NguyÔn §×nh Ho¸, ViÖn CNTT - §HQG Hμ néi 177
  18. LËp tr×nh b»ng Turbo Pascal diemm_tb: real; end; SvPtr = ^ Sv; Var SinhVien1, SinhVien2: SvPtr; hoÆc Var SinhVien1, SinhVien2, LopTruong: ^ Sv; L−u ý r»ng trong khai b¸o kiÓu hoÆc biÕn con trá kh«ng chÊp nhËn kiÓu d÷ liÖu v« danh Sau kÝ hiÖu con trá “^” chØ chÊp nhËn c¸c kiÓu d÷ liÖu chuÈn ®· cã s½n hoÆc c¸c kiÓu ®· ®−îc khai b¸o tr−íc. VÝ dô, tr×nh biªn dÞch sÏ kh«ng chÊp nhËn c¸ch khai b¸o con trá ®Õn m¶ng nh− sau: VAR MangPtr: ^ array[1..10] of real; ThËm chÝ mét khai b¸o kiÓu TYPE MangPtr = ^ array[1..10] of real; còng kh«ng hîp lÖ. CÇn ph¶i khai b¸o kiÓu m¶ng tr−íc ®·. TYPE Mang = array[1..10] of real; MangPtr = ^Mang; VAR A,B: MangPtr; HoÆc TYPE Mang = array[1..10] of real; VAR A,B: ^MangPtr; 1.3 C¸c phÐp to¸n ®èi víi con trá . 1.3.1 G¸n gi¸ trÞ cho biÕn con trá. Néi dung cña mét biÕn con trá lμ mét ®Þa chØ. Cã thÓ g¸n gi¸ trÞ cho mét biÕn con trá, nghÜa lμ cho con trá nμy trá ®Õn mét ®Þa chØ cô thÓ nμo ®ã b»ng c¸c c¸ch nh− sau 1- G¸n trùc tiÕp ®Þa chØ cña mét biÕn tÜnh cho con trá cïng kiÓu d÷ liÖu, dïng to¸n tö lÊy ®Þa chØ @. LÖnh g¸n nμy lμm cho biÕn con trá sÏ trá ®Õn biÕn ®ã: biÕn con trá = @ biÕn tÜnh ; VÝ dô. Var i: Integer; ip: ^Integer; .... ip:= @ a ; NguyÔn §×nh Ho¸, ViÖn CNTT - §HQG Hμ néi 178
  19. LËp tr×nh b»ng Turbo Pascal 2- Dïng c¸c thñ tôc New hoÆc GetMem ®Ó khëi t¹o biÕn ®éng vμ g¸n gi¸ trÞ cho con trá t−¬ng øng nh− sÏ xÐt trong tiÕt sau. 3- Dïng hμm Ptr ®Ó chuyÓn ®æi mét ®Þa chØ ®o¹n vμ mét offset thμnh mét ®Þa chØ råi g¸n cho con trá (sÏ xÐt ®Õn trong phÇn lËp tr×nh hÖ thèng). 4- Cã thÓ g¸n gi¸ trÞ cña mét biÕn con trá cho mét biÕn con trá kh¸c cïng kiÓu. Sau phÐp g¸n nμy hai con trá cã cïng gÝa trÞ, nghÜa lμ trá ®Õn cïng mét biÕn ®éng. VÝ dô, LopTruong:= SinhVien1; 1.3.2 So s¸nh ChØ cã thÓ so s¸nh hai con trá b»ng nhau hay kh¸c nhau. Hai biÕn con trá lμ b»ng nhau nÕu cïng kiÓu vμ cïng gi¸ trÞ, tøc lμ cïng trá ®Õn mét ®Þa chØ. 1.3.3 Con trá NIL. - NIL Lμ mét gi¸ trÞ ®Æc biÖt, nãi r»ng con trá nμy kh«ng trá vμo ®©u c¶. - Cã thÓ g¸n gi¸ trÞ NIL cho bÊt cø con trá kiÓu nμo. ViÖc ®Æt ra gi¸ trÞ NIL nh»m môc ®Ých sau. Néi dung cña biÕn con trá ®−îc hiÓu lμ mét ®Þa chØ. Sau khi khai b¸o biÕn con trá mμ ch−a khëi t¹o biÕn ®éng t−¬ng øng, hoÆc khi ®· gi¶i phãng biÕn ®éng, vïng nhí mμ con trá trá tíi cã thÓ chøa c¸c d÷ liÖu quan träng. D÷ liÖu cã thÓ bÞ v« t×nh lμm háng nÕu ®Ó con trá "vu v¬". ViÖc g¸n gi¸ trÞ ®Æc biÖt NIL trong c¸c t×nh huèng trªn nh»m tr¸nh hËu qu¶ bÊt th−êng cã thÓ x¶y ra. 2. BiÕn ®éng. 2.1 CÊp ph¸t vïng nhí vµ truy cËp biÕn ®éng. 2.1.1 CÊp ph¸t vïng nhí cho biÕn ®éng Có ph¸p: Dïng thñ tôc New New ( biÕn con trá ); Thñ tôc nμy cÊp mét vïng nhí cßn rçi, ®ñ ®Ó chøa mét d÷ liÖu cã kiÓu t−¬ng øng (cña con trá). §Þa chØ cña « nhí ®Çu tiªn sÏ ®−îc ghi vμo néi dung cña biÕn con trá. NguyÔn §×nh Ho¸, ViÖn CNTT - §HQG Hμ néi 179
  20. LËp tr×nh b»ng Turbo Pascal 2.1.2 Truy cËp biÕn ®éng. CÇn ph©n biÖt ®©y lμ g¸n gi¸ trÞ vμ ®äc gi¸ trÞ cña biÕn ®éng (mμ biÕn con trá trá ®Õn) chø kh«ng ph¶i lμ g¸n gi¸ trÞ vμ ®äc gi¸ trÞ cña biÕn con trá. G¸n trÞ : biÕn con trá ^ := gi¸ trÞ ; §äc gi¸ trÞ: biÕn := biÕn con trá ^ ; VÝ dô 1: Var P: SvPtr; New (P); P^.HoDem:= 'nguyen van'; P^.Ten:= 'Nam'; P^. Diem_tb:= 7.5; VÝ dô 2: LopTruong:= P; Nguoi1:= P; New(P) ; { lóc nμy P sÏ chøa ®Þa chØ kh¸c } .... Nguoi2:= P; 2.2 Gi¶i phãng biÕn ®éng, thu håi vïng nhí Khi sö dông xong, nªn gi¶i phãng vïng nhí ®· cÊp cho biÕn ®éng. Dispose ( biÕn con trá ); biÕn con trá := NIL; Thñ tôc nμy tr¶ l¹i phÇn bé nhí mμ biÕn ®éng ®· ®−îc cÊp. nghÜa lμ ®¸nh dÊu r»ng nã trë thμnh vïng nhí rçi, cã thÓ dïng vμo viÖc kh¸c. VÝ dô: Writeln(‘Líp tr−ëng:’, LopTruong^.HoDem, ‘ ’ , LopTruong ^ .Ten); Writeln(‘ §iÓm trung b×nh cuèi n¨m:’ , LopTruong ^ . Diem_tb ); { ®· sö dông xong biÕn ®éng LopTruong^ , cã thÓ gi¶i phãng} Dispose ( LopTruong ); 3. Con trá kh«ng ®Þnh kiÓu - Pointer 3.1 §Þnh nghÜa NguyÔn §×nh Ho¸, ViÖn CNTT - §HQG Hμ néi 180
ADSENSE

CÓ THỂ BẠN MUỐN DOWNLOAD

 

Đồng bộ tài khoản
2=>2