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 3

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

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

Đ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....

Chủ đề:
Lưu

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

  1. 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
  2. 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
  3. 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
  4. 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
  5. 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
  6. 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
  7. 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
  8. 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
  9. 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
  10. 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
  11. 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
  12. 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
  13. 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
  14. 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
  15. 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
  16. 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
  17. 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
  18. 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
  19. 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
  20. 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
ADSENSE

CÓ THỂ BẠN MUỐN DOWNLOAD

 

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