Lập trình bằng Turbo Pascal part 3
lượt xem 48
download
Điểm khác nhau căn bản hơn giữa While vμ Repeat - Until cần nắm vững để vận dụng đúng tình huống là như sau. Trong cấu trúc Repeat - Until, phần câu lệnh đựơc thực hiện trước rồi mới kiểm tra điều kiện sau. Trái lại trong cấu trúc While, điều kiện đ−ợc kiểm tra trước, nếu đúng mới thực hiện lệnh. Do đó nếu dùng Repeat - Until thì phần câu lệnh được thực hiện ít nhất lμ một lần, còn với While có thể câu lệnh không được thực hiện lần nào....
Bình luận(0) Đăng nhập để gửi bình luận!
Nội dung Text: Lập trình bằng Turbo Pascal part 3
- LËp tr×nh b»ng Turbo Pascal 3- §iÓm kh¸c nhau c¨n b¶n h¬n gi÷a While vμ Repeat - Until cÇn n¾m v÷ng ®Ó vËn dông ®óng t×nh huèng lμ nh− sau. Trong cÊu tróc Repeat - Until, phÇn c©u lÖnh ®ù¬c thùc hiÖn tr−íc råi míi kiÓm tra ®iÒu kiÖn sau. Tr¸i l¹i trong cÊu tróc While, ®iÒu kiÖn ®−îc kiÓm tra tr−íc, nÕu ®óng míi thùc hiÖn lÖnh. Do ®ã nÕu dïng Repeat - Until th× phÇn c©u lÖnh ®−îc thùc hiÖn Ýt nhÊt lμ mét lÇn, cßn víi While cã thÓ c©u lÖnh kh«ng ®−îc thùc hiÖn lÇn nμo. 6.2 VÝ dô minh ho¹ VÝ dô 1: Tæng n sè h¹ng ®Çu tiªn cña chuçi ®iÒu hoμ lμ S = 1+1/2 +1/3 + ... + 1/n. Hái n nhá nhÊt ph¶i lμ bao nhiªu ®Ó S v−ît qu¸ mét ng- −ìng lμ sè A cho tr−íc. Uses crt; Var i, A: integer; S: real; Begin Clrscr; Write(' cho so A:' ) ; Readln(A) ; I:=1; S:=1; While S < A do Begin I:=i+1; S:=S+ 1/i ; End; Write(' Can it nhat ' , i , 'so hang' ); End. VÝ dô 2: TÝnh gi¸ trÞ cña hμm sin(x) theo c«ng thøc xÊp xØ sinx = x- x3/3! + x5/5! + x7/ 7! ... cho ®Õn khi ®¹t ®é chÝnh x¸c epsilon cho tr−íc. So s¸nh víi kÕt qu¶ nhËn ®−îc khi dïng hμm chuÈn sin(x) cña Turbo Pascal. uses crt; var eps,x,y,s: real; i, sign: integer; BEGIN clrscr; write(' Cho do chinh xac eps= '); readln(eps); write(' Cho x= '); readln(x); y:=x;s:=x;i:=3;sign:=-1; While (s >= eps) do Begin s:= s*x*x / ((i-1)*i); y:=y+ sign * s; NguyÔn §×nh Ho¸, ViÖn CNTT - §HQG Hμ néi 49
- LËp tr×nh b»ng Turbo Pascal sign:= -sign; i:=i+2; end; writeln(' Sin(x) = ',y:1:5); write(' Sai khac voi ham chuan sin(x) cua TurboPascal la = ', y-sin(x):0:5); readln; END. 7. X©y dùng cÊu tróc lÆp. PhÇn nμy sÏ tr×nh bμy mét sè mÉu h×nh x©y dùng c¸c cÊu tróc lÆp ®Ó xö lÝ c¸c t×nh huèng hay gÆp nhÊt. 7.1 §iÒu khiÓn vßng lÆp b»ng gi¸ trÞ canh chõng . VÝ dô: ViÕt ch−¬ng tr×nh ®Ó nhËp vμo vμ céng tÝch luü ®Ó tÝnh tæng sè tiÒn b¸n hμng tõng ngμy cña mét cöa hμng. Sè lÇn b¸n hμng nãi chung thay ®æi tõng ngμy, kh«ng biÕt tr−íc. V× sè tiÒn b¸n hμng lμ mét sè d−¬ng nªn gi¸ trÞ 0 kh«ng ph¶i lμ mét gi¸ trÞ hîp lÖ. Ta cã thÓ lÊy gi¸ trÞ nμy lμm dÊu hiÖu chÊm hÕt d·y sè liÖu cÇn nhËp. Sè 0 lμ gi¸ trÞ canh chõng ®Ó kÕt thóc c«ng viÖc. 1- d÷ liÖu vμo := gi¸ trÞ ®Çu tiªn ; 2- While d÷ liÖu vμo gi¸ trÞ canh chõng do begin .... d÷ liÖu vμo:= gi¸ trÞ tiÕp theo ; end; Cô thÓ vßng lÆp ®−îc x©y dùng nh− sau Write(' cho so tien, 0 – ket thuc '); Readln(SoTien); WHILE SoTien 0 DO Begin TongSo:= TongSo + SoTien; Write(' cho so tien '); Readln(SoTien); End; NguyÔn §×nh Ho¸, ViÖn CNTT - §HQG Hμ néi 50
- LËp tr×nh b»ng Turbo Pascal 7.2 §iÒu khiÓn vßng lÆp b»ng cê b¸o Mét bμi to¸n th−êng hay gÆp trong xö lÝ th«ng tin lμ t×m kiÕm. Thùc chÊt cña viÖc t×m kiÕm lμ lÆp l¹i nhiÒu lÇn phÐp kiÓm tra mét ®iÒu kiÖn nμo ®ã cho ®Õn khi tho¶ m·n ®iÒu kiÖn tøc lμ t×m thÊy. Khu«n mÉu chung ®Ó thùc hiÖn viÖc t×m kiÕm lμ x©y dùng mét cÊu tróc lÆp ®iÒu khiÓn b»ng cê b¸o nh− sau. Mét biÕn kiÓu boolean ®−îc dïng ®Ó ®¸nh dÊu sù kiÖn t×m thÊy. Nã ®−îc gäi lμ cê b¸o. Tr−íc khi vμo cÊu tróc lÆp, cê b¸o ®−îc ®Æt lμ False. Khi t×m thÊy, cê b¸o ®−îc thiÕt lËp lμ True vμ vßng lÆp kÕt thóc. 1- cê b¸o:= false; 2- While not cê b¸o do begin ... if t×m thÊy then cê b¸o:= true; end; VÝ dô: T×m sè chÝnh ph−¬ng nhá nhÊt lín h¬n x, sè x nhËp tõ bμn phÝm. Ta duyÖt tõng sè, b¾t ®Çu tõ x, ®Ó t×m sè chÝnh ph−¬ng. Khi t×m thÊy sè ®Çu tiªn th× kÕt thóc. CÊu tróc lÆp ®−îc x©y dùng nh− sau. TimThay:= False; So:= x; WHILE not TimThay DO If Trunc(sqrt(So)) = sqrt(So) then TimThay:= True Else So:=So+1; Writeln(' So chinh phuong = ', So); 8. C¸c lÖnh kÕt thóc sím vßng lÆp hoÆc ch−¬ng tr×nh. 8.1 LÖnh nh¶y kh«ng ®iÒu kiÖn - goto Goto nh·n ; Goto lμ lÖnh nh¶y kh«ng ®iÒu kiÖn, cho phÐp nh¶y tõ bÊt k× n¬i nμo bªn trong ch−¬ng tr×nh hay ch−¬ng tr×nh con ®Õn vÞ trÝ ®· ®¸nh dÊu b»ng nh·n. Nh·n lμ mét tªn, nh− tªn biÕn hoÆc lμ mét sè nguyªn. C¸ch thùc hiÖn nh− sau. NguyÔn §×nh Ho¸, ViÖn CNTT - §HQG Hμ néi 51
- LËp tr×nh b»ng Turbo Pascal 1- Khai b¸o nh·n: Ph¶i khai b¸o nh·n t¹i ®Çu phÇn khai b¸o, tr−íc khi khai b¸o c¸c h»ng. Có ph¸p khai b¸o nh·n: tõ kho¸ Label, danh s¸ch nh·n, dÊu chÊm phÈy. Danh s¸ch nh·n lμ d·y c¸c tªn nh·n, c¸ch nhau dÊu phÈy. 2- §¸nh ®Êu ®Ých: Trong th©n ch−¬ng tr×nh vÞ trÝ ®Ých sÏ nh¶y ®Õn b»ng lÖnh Goto cÇn ®¸nh dÊu tr−íc. Có ph¸p ®¸nh dÊu ®Ých b»ng tªn nh·n: tªn nh·n, dÊu hai chÊm, c©u lÖnh ®Ých. 3- ViÕt c©u lÖnh Goto nh·n; L−u ý, víi lÖnh nh¶y kh«ng ®iÒu kiÖn Goto - Cã thÓ nh¶y tõ trong vßng lÆp ra ngoμi. - Kh«ng cho phÐp nh¶y tõ ngoμi vμo trong vßng lÆp, tõ ngoμi vμo trong ch−¬ng tr×nh con. Nãi chung nªn tr¸nh dïng c©u lÖnh nh¶y kh«ng ®iÒu kiÖn Goto khi cã thÓ ®−îc v× nã ph¸ vì cÊu tróc cña c¸c lÖnh ®iÒu khiÓn, khã theo dâi. 8.2 LÖnh chÊm døt sím vßng lÆp. Break; LÖnh Break cã t¸c dông chÊm døt gi÷a chõng mét vßng lÆp dï ch−a kÕt thóc. VÝ dô: KiÓm tra mét sè nguyªn q nhËp tõ bμn phÝm cã ph¶i lμ sè nguyªn tè hay kh«ng. Ta duyÖt phÐp chia q MOD i víi i tõ 2 ®Õn c¨n bËc hai cña q. NÕu chØ mét phÐp chia ch½n th× q kh«ng ph¶i lμ sè nguyªn tè vμ cã thÓ kÕt thóc ngay vßng lÆp. var i,q: integer; NguyenTo: boolean; begin write('cho so q: '); readln(q); NguyenTo:= True; for i:=2 to trunc(sqrt(q))+1 do if q mod i = 0 then begin NguyenTo:= False; break; end; if NguyenTo then Write(q,' la so nguyen to ') else write(q,' khong nguyen to'); end. NguyÔn §×nh Ho¸, ViÖn CNTT - §HQG Hμ néi 52
- LËp tr×nh b»ng Turbo Pascal §Ó gi¶i bμi to¸n t×m sè nguyªn tè lín nhÊt nhá h¬n mét sè nguyªn n nhËp vμo tõ bμn phÝm, cã thÓ lμm t−¬ng tù. Ta l¹i dïng vßng lÆp For ®Ó duyÖt tõ n trë xuèng vμ dõng khi t×m thÊy sè nguyªn tè ®Çu tiªn. For q:= n downto 1 do If q lμ sè nguyªn tè then break; Chó ý: - LÖnh Break cho phÐp tho¸t khái mäi kiÓu vßng lÆp For, While hay Repeat- Unitl. - NÕu cã nhiÒu vßng lÆp lång nhau th× c©u lÖnh Break cho phÐp tho¸t ra khái mét vßng lÆp bªn trong nhÊt chøa nã. C¸c vßng lÆp bªn ngoμi vÉn ho¹t ®éng b×nh th−êng. 8.3 LÖnh tho¸t khái ch−¬ng tr×nh con. Exit; LÖnh kÕt thóc vμ tho¸t khái ch−¬ng tr×nh con. - NÕu ë bªn trong ch−¬ng tr×nh con th× lÖnh nμy lμm chÊm døt ch−¬ng tr×nh con (mÆc dï ch−a ®Õn c©u lÖnh cuèi) vμ trë vÒ ch−¬ng tr×nh bªn ngoμi ®· gäi ch−¬ng tr×nh con. - NÕu ë ch−¬ng tr×nh chÝnh th× lÖnh nμy chÊm døt ch−¬ng tr×nh chÝnh vμ dõng. 8.4 LÖnh dõng ch−¬ng tr×nh bÊt th−êng. Halt; Lμ lÖnh dõng ch−¬ng tr×nh chÝnh. LÖnh nμy ®−îc sö dông khi x¶y ra nh÷ng lçi, sai sãt nghiªm träng, viÖc tiÕp tôc thùc hiÖn ch−¬ng tr×nh lμ nguy hiÓm hoÆc kh«ng cã ý nghÜa n÷a. C©u hái vμ bμi tËp 1. C¸c lçi hay m¾c ph¶i khi viÕt c©u lÖnh If, c©u lÖnh Case lμ g×. 2. Nªu c¸c ®iÓm kh¸c nhau gi÷a c©u lÖnh If vμ c©u lÖnh Case. §iÓm nμo lμ c¬ b¶n. NguyÔn §×nh Ho¸, ViÖn CNTT - §HQG Hμ néi 53
- LËp tr×nh b»ng Turbo Pascal 3. Khi nμo th× dïng vßng lÆp For ? 4. Sè lÇn lÆp Ýt nhÊt cã thÓ cña c¸c vßng lÆp For, While, Repeat lμ bao nhiªu. 5. Vßng lÆp nμo dïng ®Ó thùc hiÖn mét b¶ng chän. 6. Vßng lÆp nμo th−êng dïng ®Ó kiÓm tra viÖc nhËp d÷ liÖu hîp lÖ. Thùc hμnh. 1. ViÕt c¸c ch−¬ng tr×nh gi¶i ph−¬ng tr×nh bËc nhÊt, ph−¬ng tr×nh bËc hai, hÖ ph−¬ng tr×nh tuyªn tÝnh 2 Èn. XÐt ®ñ c¸c tr−êng hîp. 2. ViÕt ch−¬ng tr×nh in ra th«ng b¸o gâ phÝm lo¹i nμo: dÊu phÐp to¸n + - * / < > .. , dÊu chÝnh t¶ . ,: ; ! ? .. ch÷ sè 0,1.. 9 ch÷ c¸i A..Z, a..z hay c¸c kÝ hiÖu kh¸c. 3. Lμm bμi 2 nh−ng dïng c©u lÖnh If lång nhau. 4. NhËp mét sè nguyªn N gåm 3 ch÷ sè, in ra mμn h×nh c¸ch ®äc sè nμy b»ng lêi. 5. LËp ch−¬ng tr×nh ®Ó tÝnh sè ngaú tr«i qua kÓ tõ ®Çu n¨m khi gâ vμo mét ngμy bÊt k× trong n¨m. 6. BiÕt ngμy h«m nay lμ ngμy thø mÊy. ViÕt ch−¬ng tr×nh in ra thø trong tuÇn cña mét ngμy bÊt k× D, M, Y. (1
- LËp tr×nh b»ng Turbo Pascal 19. In ra m· ASCII cña kÝ tù gâ tõ phÝm. Ch−¬ng tr×nh dõng khi gâ phÝm sè 0. 20. KiÓm tra viÖc nhËp tõ bμn phÝm mét ngμy th¸ng hîp lÖ. Yªu cÇu gâ l¹i cho ®Õn khi ®óng. 21. T×m −íc chung lín nhÊt cña 2 sè nguyªn d−¬ng a,b nhËp tõ bμn phÝm. T×m −íc chung lín nhÊt cña 4 sè a,b,c,d. 22. T¹o mét b¶ng chän ®¬n gi¶n gåm c¸c môc sau: 1- gi¶i ph−¬ng tr×nh bËc nhÊt; 2-gi¶i ph−¬ng tr×nh bËc hai; 3-gi¶i hÖ ph−¬ng tr×nh tuyÕn tÝnh 2 Èn; 4- KÕt thóc. Gâ c¸c sè 1,2,3,4 ®Ó chän c«ng viÖc t−¬ng øng. 23. T×m sè n nhá nhÊt ®Ó Sn= 1+1/2 +1/3 + .. + 1/n > a. Sè a nhËp tõ bμn phÝm. 24. TÝnh gÇn ®óng sè π theo c«ng thøc π/4 = 1-1/3 + 1/5 - 1/7 + .. + (-1)n.1/(2n+1) a-) Khi cho tr−íc sè n b-) Khi cho tr−íc ®é chÝnh x¸c Epsilon = 10-5. (chuçi ®an dÊu nªn sai sè < sè h¹ng cuèi cïng). 25. TÝnh gÇn ®óng sin x = x - x3/3 + x5/5 - x7/7 + .. víi sai sè Epsilon cho tr−íc. So s¸nh kÕt qu¶ v¬i hμm chuÈn sin x cña Turbo Pascal. 26. Cho c¸c ph−¬ng tr×nh a) y = ex + sinx - 2 = 0, b) y= x.2x - 1 = 0. Dïng ph−¬ng ph¸p chia ®«i dÇn, t×m nghiÖm trong kho¶ng [0,1] víi sai sè kh«ng v−ît qu¸ 10-5. §Õm sè lÇn lÆp cμn thiÕt. NguyÔn §×nh Ho¸, ViÖn CNTT - §HQG Hμ néi 55
- LËp tr×nh b»ng Turbo Pascal Ch−¬ng 5 §Þnh nghÜa C¸c kiÓu d÷ liÖu ®¬n gi¶n 1. Khai b¸o kiÓu d÷ liÖu míi. C¸c kiÓu chuÈn cã s½n nh− integer, real, char, boolean... lμ c¸c kiÓu th«ng dông nhÊt. V× thÕ chóng ®· ®−îc ®Þnh nghÜa s½n vμ ta cã thÓ sö dông ngay ®Ó khai b¸o c¸c biÕn nh− ®· thÊy. C¸c kiÓu chuÈn cã s½n kh«ng thÓ ®¸p øng ®Çy ®ñ nhu cÇu xö lÝ c¸c bμi to¸n thùc tÕ hÕt søc phong phó vμ ®a d¹ng. C¸c ng«n ng÷ lËp tr×nh nãi chung vμ Turbo Pascal nãi riªng, ®Òu cho phÐp ng−êi sö dông cã thÓ ®Þnh nghÜa c¸c kiÓu d÷ liÖu míi phï hîp víi bμi to¸n cña m×nh. 1.1 Có ph¸p chung . Khung có ph¸p chung ®Ó khai b¸o kiÓu d÷ liÖu míi lμ: Type tªn kiÓu = m« t¶ kiÓu d÷ liÖu míi ; DiÔn gi¶i: Tõ kho¸ TYPE, tªn kiÓu d÷ liÖu míi, dÊu b»ng, m« t¶ kiÓu d÷ liÖu míi, dÊu chÊm phÈy. ChØ sau khi khai b¸o kiÓu d÷ liÖu míi th× míi ®−îc sö dông nã trong ch−¬ng tr×nh. NghÜa lμ cã thÓ khai b¸o c¸c biÕn cã kiÓu ®ã hoÆc x©y dùng nh÷ng kiÓu kh¸c dùa trªn nã. 1.2 VÝ dô VÝ dô 1: Ta cã thÓ "ViÖt ho¸" mét sè tªn kiÓu tiÕng Anh b»ng c¸ch sau. TYPE SoNguyen = integer; SoThuc = real; KiTu = char; Sau ®ã cã thÓ sö dông nh÷ng tªn kiÓu ViÖt ho¸ nμy trong c¸c khai b¸o biÕn: VAR TongSo, Dem: SoNguyen; NguyÔn §×nh Ho¸, ViÖn CNTT - §HQG Hμ néi 56
- LËp tr×nh b»ng Turbo Pascal a,b,c: SoThuc; GoPhim, Chon: KiTu; VÝ dô 2: XÐt bμi to¸n gi¶i mét hÖ ph−¬ng tr×nh ®¹i sè tuyÕn tÝnh gåm 10 ph−¬ng tr×nh, 10 Èn. Râ rμng lμ ta sÏ ph¶i lμm viÖc víi c¸c vÐc t¬ vμ ma trËn. CÇn ph¶i ®Þnh nghÜa c¸c "kiÓu vÐc t¬ gåm 10 thμnh phÇn" vμ "kiÓu ma trËn 10 x 10" v× chóng kh«ng ph¶i lμ mét kiÓu chuÈn, ®· cã s½n. TYPE Vecto10 = array [1..10] of real ; Matran10 = array [1..10,1..10] of real ; Bªn tr¸i dÊu b»ng lμ c¸c tªn kiÓu míi. Bªn ph¶i dÊu b»ng lμ m« t¶ x©y dùng kiÓu ®ã. KiÓu Vecto10 sÏ lμ mét d·y 10 sè thùc liÒn nhau, kiÓu Matran10 sÏ lμ bé 100 sè thùc ®−îc xÕp thμnh 10 hμng, 10 cét. Y nghÜa cña tõ kho¸ Array vμ c¸ch sö dông nã sÏ ®−îc tr×nh bμy chi tiÕt trong ch−¬ng nãi vÒ m¶ng. Sau khi ®· ®Þnh nghÜa c¸c kiÓu Vecto10, Matran10 ta khai b¸o c¸c biÕn thuéc kiÓu ®ã nh− quy ®Þnh chung: VAR X,Y: Vecto10; A,B,C: Matran10; Ta sÏ cßn gÆp nhiÒu vÝ dô vÒ khai b¸o kiÓu d÷ liÖu míi trong c¸c phÇn tiÕp theo. 2. KiÓu liÖt kª. 2.1 §Þnh nghÜa vµ có ph¸p KiÓu liÖt kª - Enumerated Scalar Type - lμ kiÓu d÷ liÖu th« s¬ nhÊt, x¸c ®Þnh b»ng c¸ch liÖt kª tÊt c¶ c¸c "gi¸ trÞ" cã thÓ cã cña d÷ liÖu, mçi gi¸ trÞ ®−îc ®¹i diÖn b»ng mét tªn gäi do ng−êi lËp tr×nh ®Æt ra. 2.1.1 Có ph¸p PhÇn m« t¶ kiÓu d÷ liÖu míi trong khai b¸o kiÓu liÖt kª cã có ph¸p nh− sau: dÊu më ngoÆc, danh s¸ch c¸c tªn gi¸ trÞ, dÊu ®ãng ngoÆc. Type tªn kiÓu = ( danh s¸ch c¸c tªn gi¸ trÞ ) ; NguyÔn §×nh Ho¸, ViÖn CNTT - §HQG Hμ néi 57
- LËp tr×nh b»ng Turbo Pascal ë ®©y, mçi tªn gi¸ trÞ lμ mét tªn theo ®óng quy ®Þnh ®Æt tªn cña Pascal. Danh s¸ch gåm c¸c tªn gi¸ trÞ, c¸ch nhau dÊu phÈy. L−u ý cÆp dÊu ngoÆc ®¬n bao quanh danh s¸ch c¸c gi¸ trÞ. Sau khi ®· khai b¸o kiÓu liÖt kª, ta khai b¸o biÕn theo ®óng quy t¾c th«ng th−êng. Var tªn biÕn: tªn kiÓu ; 2.1.2 VÝ dô . TYPE NgayTrongTuan = (CN, Thu2, Thu3, Thu4, Thu5, Thu6,Thu7); MauCoBan = (Do, Xanh, Vang); XeMoTo = (Honda, Yamaha, Suzuki, Vespa); VAR NgayHocToan, NgayHocTin: NgayTrongTuan ; Xe1, Xe2: XeMoTo ; Mau1, Mau2: MauCoBan ; - Cã thÓ kÕt hîp khai b¸o biÕn kiÓu liÖt kª kÌm víi m« t¶ x¸c ®Þnh kiÓu cïng mét lóc nh− sau: VAR NgayHocToan, NgayHocTin: (CN, Thu2, Thu3, Thu4, Thu5, Thu6, Thu7); Mau1, Mau2: (Do,Xanh,Vang); C¸c biÕn NgayHocToan, NgayHocTin vμ Mau1, Mau2 còng vÉn lμ nh÷ng biÕn kiÓu liÖt kª, nh−ng ta kh«ng ®Æt tªn cho kiÓu mμ th«i. ViÖc ®Æt thªm mét tªn kiÓu míi, dïng tõ kho¸ Type sÏ tiÖn h¬n trong sö dông vμ lμm ch−¬ng tr×nh dÔ hiÓu h¬n. 2.2 TÝnh chÊt vµ c¸c phÐp to¸n. 2.2.1 Thø tù trong kiÓu liÖt kª. KiÓu liÖt kª lμ kiÓu cã thø tù. Thø tù cña c¸c gi¸ trÞ chÝnh lμ thø tù liÖt kª chóng trong danh s¸ch. Gi¸ trÞ ®øng tr−íc trong danh s¸ch th× nhá h¬n gi¸ trÞ ®øng sau. VÝ dô: Thu2 < Thu3 cho kÕt qu¶ lμ True, Xanh < Do cho kÕt qu¶ False. NguyÔn §×nh Ho¸, ViÖn CNTT - §HQG Hμ néi 58
- LËp tr×nh b»ng Turbo Pascal 2.2.2 G¸n gi¸ trÞ PhÐp g¸n víi vÕ ph¶i lμ mét tªn gi¸ trÞ trong danh s¸ch. VÝ dô: HomNay:= Thu2; XeMoiNhap:= Honda; Mau1:= Xanh; 2.2.3 - C¸c hμm chuÈn. Ord : cho thø tù cña gi¸ trÞ ®èi sè trong danh s¸ch liÖt kª. Thø tù b¾t ®Çu tÝnh tõ 0. Ord (CN) = 0; Ord (Thu2) = 1, v.v. Pred: cho gi¸ trÞ ®øng tr−íc trong danh s¸ch, Pred (Thu2) = CN; Pred (Thu3) = Thu2, v.v. Hμm Pred kh«ng x¸c ®Þnh khi ®èi sè lμ gi¸ trÞ ®øng ®Çu danh s¸ch liÖt kª. Pred (CN) kh«ng x¸c ®Þnh, sÏ cã lçi khi ch¹y ch−¬ng tr×nh - run time error Succ: cho gi¸ trÞ ®øng sau trong danh s¸ch Succ (Thu3) = Thu4; Succ (Thu4) = Thu5, v.v. Hμm Succ kh«ng x¸c ®Þnh khi ®èi sè lμ gi¸ trÞ ®øng cuèi danh s¸ch liÖt kª. Succ (Thu7) kh«ng x¸c ®Þnh, sÏ cã lçi khi ch¹y ch−¬ng tr×nh - run time error. 2.2.4 - §äc vμo vμ viÕt ra mét gi¸ trÞ kiÓu liÖt kª . a) Kh«ng thÓ nhËp trùc tiÕp gi¸ trÞ cho biÕn kiÓu liÖt kª tõ bμn phÝm. NghÜa lμ kh«ng thÓ g¸n cho biÕn HomNay gi¸ trÞ Thu2 b»ng c¸ch gâ tõ bμn phÝm x©u kÝ tù Thu2, dïng cÆp c©u lÖnh nhËp liÖu quen thuéc: Write(' Hom nay la thu:'); Readln( HomNay); §Ó lμm viÖc nμy, ph¶i xö lÝ gi¸n tiÕp. Ch¼ng h¹n cã thÓ viÕt: Write(' Hom nay la thu:'); Readln( St); If St = 'Thu2' Then HomNay:= Thu2; b) Kh«ng thÓ in ra trùc tiÕp mét gi¸ trÞ cña kiÓu liÖt kª gièng nh− ®èi víi c¸c kiÓu d÷ liÖu kh¸c. NghÜa lμ, nÕu biÕn HomNay cã gÝa trÞ lμ Thu2 th× kh«ng thÓ viÕt trùc tiÕp ch÷ Thu2 b»ng c©u lÖnh Write(HomNay). §Ó lμm viÖc nμy cÇn ph¶i xö lÝ gi¸n tiÕp, dïng c©u lÖnh Case nh− sau NguyÔn §×nh Ho¸, ViÖn CNTT - §HQG Hμ néi 59
- LËp tr×nh b»ng Turbo Pascal CASE HomNay OF CN: Write(' Chu Nhat '); Thu2: Write(' Thu hai '); .... END; Chó ý: 1-VÒ thùc chÊt, m¸y sÏ xö lÝ kiÓu liÖt kª b»ng c¸ch ®Æt t−¬ng øng d·y c¸c gi¸ trÞ ®· liÖt kª víi d·y sè 0,1,2, ... Ta hoμn toμn cã thÓ kh«ng dïng kiÓu liÖt kª mμ còng tù xö lÝ trùc tiÕp gièng nh− m¸y tÝnh lμm. Ch¼ng h¹n, cã thÓ ghi riªng ra bªn c¹nh mét danh s¸ch quy −íc CN = 0, Thu2 = 1, v.v. Tuy nhiªn dïng kiÓu liÖt kª lμm ch−¬ng tr×nh dÔ hiÓu h¬n vμ ta kh«ng ph¶i nhí c¸c quy −íc trªn. 2- Cã thÓ sö dông biÕn kiÓu liÖt kª lμm biÕn ®iÒu khiÓn trong vßng lÆp For, biÕn lùa chän trong c©u lÖnh Case, chØ sè cho c¸c m¶ng (sÏ tr×nh bμy trong phÇn kiÓu m¶ng!). 2.3 VÝ dô minh ho¹ Ch−¬ng tr×nh sau ®©y sö dông biÕn kiÓu liÖt kª ®Ó in ra thø tù cña c¸c ngμy trong tuÇn Uses crt; Type NgayTrongTuan = (CN, Thu2, Thu3, Thu4, Thu5, Thu6, Thu7); Var Ngay: NgayTrongTuan ; BEGIN For Ngay:= Thu2 to Thu7 do Writeln('Thu',ord(Ngay)+1,'la ngay thu',ord(Ngay),'trong tuan'); END. 3. KiÓu ®o¹n con . 3.1 §Þnh nghÜa vµ có ph¸p . NÕu ta h¹n chÕ bít miÒn gi¸ trÞ cña mét kiÓu v« h−íng ®Õm ®−îc (nguyªn, ký tù, liÖt kª) vμo trong mét ®o¹n con nμo ®ã cña miÒn gi¸ trÞ cña kiÓu ®ã th× sÏ nhËn ®−îc kiÓu d÷ liÖu míi lμ kiÓu ®o¹n con. Mçi kiÓu ®o¹n con ®−îc x©y dùng dùa trªn mét kiÓu v« h−íng ®Õm ®−îc lμm c¬ së. NguyÔn §×nh Ho¸, ViÖn CNTT - §HQG Hμ néi 60
- LËp tr×nh b»ng Turbo Pascal 3.1.1 Có ph¸p PhÇn m« t¶ kiÓu d÷ liÖu míi trong khai b¸o kiÓu ®o¹n con cã có ph¸p nh− sau: cËn d−íi, dÊu chÊm, dÊu chÊm, cËn trªn. Type tªn kiÓu = cËn d−íi .. cËn trªn ; ë ®©y hai thμnh phÇn cËn d−íi vμ cËn trªn lμ c¸c h»ng, cïng thuéc kiÓu c¬ së, tho¶ m·n ®iÒu kiÖn cËn d−íi < cËn trªn. MiÒn gi¸ trÞ cña kiÓu ®o¹n con x¸c ®Þnh nh− trªn sÏ lμ ®o¹n con tõ cËn d−íi ®Õn cËn trªn. Sau khi ®· x¸c ®Þnh kiÓu, ta cã thÓ khai b¸o biÕn víi kiÓu d÷ liÖu lμ kiÓu võa ®Þnh nghÜa nh− th«ng th−êng Var tªn biÕn : tªn kiÓu ; 3.1.2 VÝ dô. ChuSo = '0' .. '9' ; TYPE ChuCaiThuong = 'a' .. 'z' ; §iem = 0..10 ; NgayLamViec = Thu2 .. Thu6 ; C¸c ®Þnh nghÜa kiÓu ®o¹n con ë trªn dùa trªn c¸c kiÓu c¬ së lμ kiÓu chuÈn cã s½n hoÆc kiÓu ®· ®Þnh nghÜa tr−íc. §ã lμ: - ChuSo, ChuCaiThuong lμ kiÓu ®o¹n con trªn c¬ së kiÓu kÝ tù. - §iem lμ kiÓu ®o¹n con trªn c¬ së kiÓu sè nguyªn. - NgayLamViec lμ kiÓu ®o¹n con trªn c¬ së kiÓu liÖt kª NgayTrongTuan ®· ®Þnh nghÜa trong tiÕt tr−íc. Ph¶i hiÓu r»ng bªn trªn dßng khai b¸o kiÓu NgayLamViec ®· cã dßng khai b¸o kiÓu liÖt kª NgayTrongTuan. 3.1.3 TÝnh chÊt. KiÓu ®o¹n con kÕ thõa c¸c tÝnh chÊt cña kiÓu c¬ së. Mäi phÐp to¸n cña kiÓu c¬ së ¸p dông ®−îc cho kiÓu ®o¹n con cña nã. §iÓm kh¸c biÖt duy nhÊt lμ miÒn gi¸ trÞ thu hÑp h¬n. C«ng dông: kiÓu ®o¹n con lμ mét ph−¬ng tiÖn nhê ch−¬ng tr×nh dÞch kiÓm tra tÝnh phï hîp cña d÷ liÖu, ®¶m b¶o gi¸ trÞ cña c¸c biÕn kiÓu ®o¹n con kh«ng v−ît qu¸ miÒn ®· x¸c ®Þnh. NÕu trong ch−¬ng tr×nh cã nh÷ng c©u lÖnh vi ph¹m hiÓn ®iÒï nμy th× tr×nh biªn dÞch sÏ b¸o lçi. MÆt kh¸c, kiÓu ®o¹n con lμm ch−¬ng tr×nh chÆt chÏ h¬n, dÔ ®äc h¬n. L−u ý r»ng kiÓu ®o¹n con kh«ng ng¨n c¶n ®−îc lçi d÷ liÖu kh«ng hîp lÖ, v−ît ra ngoμi miÒn gi¸ trÞ cho phÐp khi ch¹y ch−¬ng tr×nh. NguyÔn §×nh Ho¸, ViÖn CNTT - §HQG Hμ néi 61
- LËp tr×nh b»ng Turbo Pascal 3.2 VÝ dô minh ho¹. Ch−¬ng tr×nh sau ®©y sÏ b¸o lçi khi biªn dÞch do gi¸ trÞ biÕn d v−ît ra ngoμi miÒn cho phÐp Type Diem = 0..10; Var d: Diem; i: integer; Begin For d:= 0 to 11 do ... End. Tuy nhiªn, nÕu ta söa l¹i phÇn th©n ch−¬ng tr×nh nh− d−íi ®©y th× ch−¬ng tr×nh vÉn ch¹y b×nh th−êng ! Begin For i:= 0 to 10 do d:= i * 2; End. 4. KiÓu tËp hîp. 4.1 §Þnh nghÜa vµ có ph¸p. KiÓu tËp hîp ®Ó thÓ hiÖn m« h×nh d÷ liÖu tËp hîp trong to¸n häc. Nã thÓ hiÖn lo¹i d÷ liÖu cã thÓ nhËn c¸c gi¸ trÞ kh«ng ph¶i chØ lμ mét phÇn tö ®¬n lÎ trong miÒn x¸c ®Þnh mμ lμ mét tËp hîp nhiÒu phÇn tö cïng thuéc mét kiÓu v« h−íng ®Õm ®−îc nμo ®ã. KiÓu v« h−íng ®Õm ®−îc nμy gäi lμ kiÓu c¬ së. 4.1.1 Có ph¸p. PhÇn m« t¶ kiÓu míi trong khai b¸o kiÓu tËp hîp cã có ph¸p nh− sau: tõ kho¸ Set of, tªn kiÓu c¬ së. Type tªn kiÓu tËp hîp = set of tªn kiÓu c¬ së ; ë ®©y kiÓu c¬ së cã thÓ lμ mét kiÓu v« h−íng ®Õm ®−îc bÊt k×, kÓ c¶ kiÓu liÖt kª, kiÓu ®o¹n con. Tuy nhiªn, Turbo Pascal h¹n chÕ sè phÇn tö cã thÓ cña mçi gi¸ trÞ kiÓu tËp hîp lμ 256. NhiÒu biÕn thÓ kh¸c cña Pascal còng h¹n chÕ sè phÇn tö cã thÓ cña mçi gi¸ trÞ cña kiÓu tËp hîp b»ng sè gi¸ trÞ cña kiÓu Char. NguyÔn §×nh Ho¸, ViÖn CNTT - §HQG Hμ néi 62
- LËp tr×nh b»ng Turbo Pascal Sau khi ®· khai b¸o kiÓu tËp hîp, ta khai b¸o biÕn cã kiÓu tËp hîp nh− th«ng th−êng. Var tªn biÕn: tªn kiÓu tËp hîp ; 4.1.2 VÝ dô. BoKiTu = SET OF Char ; TYPE NgayMonhoc = SET OF NgayTrongTuan; BangMau = SET OF (§á, Hång, Xanh, L¬, Vμng, TÝm); VungDiem = SET OF 0..10 ; VAR NguyenAm, PhuAm : BoKiTu ; NgayHocToan, NgayHocTin : NgayMonhoc ; Kem, TrungBinh, Kha, Gioi: VungDiem ; 4.1.3 Mét sè tÝnh chÊt. - Mét gi¸ trÞ cña d÷ liÖu kiÓu tËp hîp ®−îc thÓ hiÖn b»ng c¸ch liÖt kª mäi phÇn tö cña tËp, c¸ch nhau dÊu phÈy, ®ãng trong hai dÊu ngoÆc vu«ng. - Thø tù liÖt kª c¸c phÇn tö kh«ng quan träng. - Cã thÓ g¸n gÝa trÞ cho biÕn tËp hîp nh− th«ng th−êng VÝ dô: NgayHocToan:= [ Thu2, Thu5 ] ; NgayHocTin := [ Th3, Thu6 ] ; Kem := [0,1,2,3,4] ; - TËp rçng kÝ hiÖu lμ []. 4.2 C¸c phÐp to¸n trªn tËp hîp 4.2.1 PhÐp to¸n quan h Ö - Hai to¸n h¹ng ph¶i cïng kiÓu. So s¸nh b»ng nhau: A = B lμ True nÕu A vμ B hoμn toμn nh− nhau. So s¸nh kh¸c nhau: A B chØ cho kÕt qu¶ False khi A vμ B hoμn toμn nh− nhau. So s¸nh nhá h¬n hay b»ng: A = B lμ True nÕu B lμ tËp con cña A. NguyÔn §×nh Ho¸, ViÖn CNTT - §HQG Hμ néi 63
- LËp tr×nh b»ng Turbo Pascal Chó ý: Kh«ng cã so s¸nh nhá h¬n, lín h¬n chÆt “< , >” ®èi víi kiÓu tËp hîp. Muèn thÓ hiÖn quan hÖ "lμ tËp con thùc sù " ta ph¶i kÕt hîp hai ®iÒu kiÖn: (A
- LËp tr×nh b»ng Turbo Pascal end. VÝ dô 2: T×m c¸c sè nguyªn tè trong kho¶ng 1..N ThuËt to¸n sμng Eratosthene. Ph©n tÝch: Sμng ban ®Çu chøa toμn bé d·y sè 2 .. N. B¾t ®Çu tõ sè nhá nhÊt lμ 2, ta lo¹i bá khái sμng tÊt c¶ c¸c sè lμ béi sè cña 2. Sè nhá nhÊt cßn l¹i trªn sμng sÏ lμ sè nguyªn tè thø nhÊt lμ 3. Bá sè nμy ra khái sμng, ghi nã vμo tËp sè nguyªn tè. TiÕp tôc lo¹i bá khái sμng c¸c sè lμ béi sè cña c¸c sè nguyªn tè võa chän ®−îc. Sè nhá nhÊt cßn l¹i trªn sμng sÏ lμ sè nguyªn tè tiÕp theo. LÆp l¹i viÖc nμy ta sμng dÇn ®−îc hÕt c¸c sè nguyªn tè. Program Sang_Eratosthene ; Const N=100; Type Nguyen = 1.. N; Var NguyenTo, Sang: Set of Nguyen ; Number: Nguyen ; I: Integer ; BEGIN NguyenTo:= [ ] ; Sang:= [ 2..N] ; Number:= 2; Repeat While not (Number IN Sang) do Number:= Number + 1; NguyenTo:= NguyenTo + [Number] ; Write ( Number , ' ' ); i:= Number ; While i
- LËp tr×nh b»ng Turbo Pascal Ch−¬ng 6 KiÓu m¶ng 1. M¶ng mét chiÒu 1.1 §Þnh nghÜa vµ có ph¸p. 1.1.1 §Þnh nghÜa. M¶ng lμ mét kiÓu d÷ liÖu cã cÊu tróc, t¹o nªn tõ nhiÒu thμnh phÇn d÷ liÖu cïng kiÓu, ghÐp l¹i c¹nh nhau, d−íi mét tªn chung. C¸c thμnh phÇn nμy ®−îc xÕp tuÇn tù liÒn nhau thμnh d·y liªn tôc. Mçi thμnh phÇn ®−îc gäi lμ mét phÇn tö m¶ng. KÝch th−íc m¶ng hay sè phÇn tö cña m¶ng lμ cè ®Þnh. Cã thÓ truy cËp ®Õn tõng phÇn tö m¶ng th«ng qua tªn chung cña m¶ng kÌm chØ sè t−¬ng øng. ChØ sè nμy thÓ hiÖn vÞ trÝ cña tõng thμnh phÇn trong d·y liªn tôc nãi trªn. H×nh ¶nh mét m¶ng cã tªn lμ a a[1] a[2] a[3] a[4] a[5] .... 1.1.2 Có ph¸p. Khai b¸o kiÓu m¶ng : Type tªn kiÓu m¶ng = array [ tËp chØ sè ] of kiÓu phÇn tö ; Trong ®ã: - kiÓu phÇn tö lμ kiÓu d÷ liÖu cña c¸c phÇn tö m¶ng, cã thÓ lμ bÊt k× kiÓu g×; - tËp chØ sè lμ tËp hîp c¸c chØ sè dïng ®Ó truy cËp ®Õn c¸c phÇn tö m¶ng. Nã cã thÓ lμ: a) Mét ®o¹n con cña kiÓu v« h−íng ®Õm ®−îc, vÝ dô: NguyÔn §×nh Ho¸, ViÖn CNTT - §HQG Hμ néi 66
- LËp tr×nh b»ng Turbo Pascal TYPE vecto10 = ARRAY [1..10] OF Integer ; b) Mét danh s¸ch liÖt kª trùc tiÕp, vÝ dô: TYPE B¶ngTèc§é = ARRAY [ (Xe§¹p, XeM¸y, «t«, M¸yBay) ] OF real; c) Mét kiÓu d÷ liÖu (v« h−íng ®Õm ®−îc h÷u h¹n gÝa trÞ), vÝ dô kiÓu Byte, kiÓu liÖt kª Ph−¬ngTiÖnGiaoTh«ng nh− d−íi ®©y: TYPE BangASCII = ARRAY [ Byte] OF Char ; Ph−¬ngTiÖnGiaoTh«ng = (Xe§¹p, XeM¸y, «t«, M¸yBay) ; B¶ngTèc§é = ARRAY [ Ph−¬ngTiÖnGiaoTh«ng ] OF real ; Khai b¸o biÕn m¶ng: Var biÕn m¶ng: Tªn kiÓu m¶ng ; VÝ dô, sau khi ®· x¸c ®Þnh c¸c kiÓu m¶ng nh− trªn ta cã thÓ khai b¸o c¸c biÕn m¶ng. VAR x,y: Vecto10; V: Tèc§é ; Chó ý: Cã thÓ kÕt hîp khai b¸o biÕn m¶ng cïng víi x¸c ®Þnh kiÓu trùc tiÕp: VAR x,y : array [1..10] of integer ; V: array [(Xe§¹p, XeM¸y, «t«, M¸yBay)] of real ; Tuy nhiªn, lóc nμy ta sÏ kh«ng cã c¸c kiÓu d÷ liÖu Vecto10, B¶ngTèc§é ®Ó sö dông. C¸c m¶ng x,y hay V sÏ cã kiÓu d÷ liÖu kh«ng cã tªn vμ cã mét sè bÊt lîi nh− ta sÏ thÊy sau nμy. 1.2 C¸c tÝnh chÊt. 1- Cã thÓ truy cËp ®Õn tõng phÇn tö cña mét biÕn m¶ng, sö dông tªn m¶ng vμ chØ sè t−¬ng øng. VÝ dô: x[2]:= 1.23 ; V[xe_®¹p]:= 12; 2- Cã thÓ thùc hiÖn phÐp g¸n mét biÕn m¶ng cho mét biÕn m¶ng kh¸c cïng kiÓu. VÝ dô c©u lÖnh x:= y t−¬ng ®−¬ng víi 10 lÖnh g¸n x[1]:= y[1] ; x[2]:= y[2] ; ... NguyÔn §×nh Ho¸, ViÖn CNTT - §HQG Hμ néi 67
- LËp tr×nh b»ng Turbo Pascal 1.3 T¹i sao nªn khai b¸o kiÓu. Khi thùc hiÖn c¸c phÐp to¸n víi toμn thÓ m¶ng nh− mét to¸n h¹ng theo c¸ch trªn, ph¶i ®¶m b¶o t−¬ng thÝch hiÓn vÒ kiÓu. C¸c phÐp to¸n sÏ bÞ coi lμ kh«ng hîp lÖ ngay c¶ khi thùc chÊt lμ cïng kiÓu nh−ng ta dïng hai tªn kiÓu kh¸c nhau hoÆc ta khai b¸o biÕn kÌm m« t¶ kiÓu d÷ liÖu trùc tiÕp (tøc lμ kiÓu d÷ liÖu kh«ng tªn). Víi c¸c khai b¸o kiÓu vμ biÕn d−íi ®©y: TYPE Vecto10 = array [1..10] of integer ; VectoNguyen10 = array [1..10] of integer ; VAR x: Vecto10; y: VectoNguyen10; z: array [1..10] of integer ; th× c¸c c©u lÖnh g¸n x:= y ; x:= z ; y:= z ... ®Òu sai có ph¸p. ThÕ nh−ng nÕu thùc hiÖn phÐp g¸n tõng phÇn tö x[1]:= y[1] ; x[2]:= y[2] ; ... th× kh«ng cã vÊn ®Ò g× x¶y ra ! Mét ®iÓm n÷a cho thÊy cÇn khai b¸o kiÓu lμ khi dïng m¶ng lμm tham sè cho mét ch−¬ng tr×nh con. Ta kh«ng thÓ m« t¶ kiÓu m¶ng trùc tiÕp trong danh s¸ch tham sè cña ch−¬ng tr×nh con mμ ph¶i khai b¸o mét kiÓu d÷ liÖu "cã tªn". VÝ dô, khi viÕt mét hμm t×m phÇn tö cùc ®¹i cña m¶ng 10 sè nguyªn: Hîp lÖ: Function MaxDay( x: Vecto10): integer ; Kh«ng hîp lÖ: Function MaxDay( x: array [1..10] of integer): integer; 1.4 VÝ dô minh ho¹. VÝ dô 1: ViÕt ch−¬ng tr×nh thùc hiÖn phÐp céng hai vÐc t¬, nh©n v« h−íng hai vÐc t¬. Program TichVoHuong; Uses crt; Type Vecto10 = array [1..10] of real; Var a,b: Vecto10; I: integer; Tich: real; BEGIN Clrscr; Writeln(' Nhap hai vec to a, b'); Write(' Cho 10 thanh phan cua vec to a: '); For i:=1 to 10 do Read(a[i]) ; Writeln; Write(' Cho 10 thanh phan cua vec to b: '); NguyÔn §×nh Ho¸, ViÖn CNTT - §HQG Hμ néi 68
CÓ THỂ BẠN MUỐN DOWNLOAD
Chịu trách nhiệm nội dung:
Nguyễn Công Hà - Giám đốc Công ty TNHH TÀI LIỆU TRỰC TUYẾN VI NA
LIÊN HỆ
Địa chỉ: P402, 54A Nơ Trang Long, Phường 14, Q.Bình Thạnh, TP.HCM
Hotline: 093 303 0098
Email: support@tailieu.vn