intTypePromotion=1

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

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

0
93
lượt xem
37
download

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

Mô tả tài liệu
  Download Vui lòng tải xuống để xem tài liệu đầy đủ

Phương pháp này giống như sắp lại toμn bộ các quân bài theo thứ tự bằng cách rải rộng trên mặt bàn và nhặt dần từ con bμi thấp nhất trở lên. Cụ thể là: chọn phần tử nhỏ nhất trong dãy nguồn, xếp nó vμo vị trí đầu tiên trong dãy đích. Đây là phần tử thứ nhất và cũng là phần tử cuối cùng của dãy đích. Chọn phần tử nhỏ nhất trong dãy nguồn còn lại, đây là phần tử nhỏ thứ hai, xếp nó vào vị tri thứ hai và cũng là vị trí cuối của...

Chủ đề:
Lưu

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

  1. LËp tr×nh b»ng Turbo Pascal j:= i-1; while x < a[j] do begin a[j+1]:= a[j]; j:= j-1; end; a[j+1]:= x; end end; 4.3 Ph−¬ng ph¸p chän trùc tiÕp. 4.3.1 M« t¶ Ph−¬ng ph¸p nμy gièng nh− s¾p l¹i toμn bé c¸c qu©n bμi theo thø tù b»ng c¸ch r¶i réng trªn mÆt bμn vμ nhÆt dÇn tõ con bμi thÊp nhÊt trë lªn. Cô thÓ lμ: chän phÇn tö nhá nhÊt trong d·y nguån, xÕp nã vμo vÞ trÝ ®Çu tiªn trong d·y ®Ých. §©y lμ phÇn tö thø nhÊt vμ còng lμ phÇn tö cuèi cïng cña d·y ®Ých. Chän phÇn tö nhá nhÊt trong d·y nguån cßn l¹i, ®©y lμ phÇn tö nhá thø hai, xÕp nã vμo vÞ tri thø hai vμ còng lμ vÞ trÝ cuèi cña d·y ®Ých vμo lóc nμy. LÆp l¹i viÖc nμy cho ®Õn khi hÕt d·y nguån. §Ó tiÕt kiÖm chç, ta còng xÕp d·y ®Ých vμ d·y nguån liÒn nhau trong m¶ng, gièng nh− trong ph−¬ng ph¸p tr−íc. Do ®ã, ë b−íc thø i, thao t¸c "xÕp vμo cuèi d·y ®Ých" chÝnh lμ "®æi chç cho a[i]". XuÊt ph¸t D·y ®Ých D·y nguån rçng B−íc 1: - Chän phÇn tö bÐ nhÊt tõ d·y nguån, - §æi chç cho phÇn tö a[1] . D·y ®Ých D·y nguån a1 Chän phÇn tö min B−íc i: - Chän phÇn tö bÐ nhÊt tõ d·y nguån cßn l¹i lμ a[i], a[i+1], ... , a[n]. - §æi chç cho a[i]. NguyÔn §×nh Ho¸, ViÖn CNTT - §HQG Hμ néi 77
  2. LËp tr×nh b»ng Turbo Pascal D·y ®Ých D·y nguån ai Chän phÇn tö min LÆp cho ®Õn khi hÕt d·y nguån, i = n. So s¸nh víi ph−¬ng ph¸p chÌn: - Ph−¬ng ph¸p chÌn lμ lÊy phÇn tö ®Çu tiªn trong d·y nguån cßn l¹i, chÌn vμo ®óng chç trong d·y ®Ých. Lμm viÖc víi d·y ®Ých lμ chÝnh. - Ph−¬ng ph¸p chän lμ lÊy phÇn tö nhá nhÊt trong d·y nguån cßn l¹i xÕp vμo cuèi d·y ®Ých. Lμm viÖc víi d·y nguån lμ chÝnh. 4.3.2 Minh ho¹: XuÊt ph¸t: 44 55 12 42 94 18 06 67 B−íc 1: 06 / 55 12 42 94 18 44 67 B−íc 2: 06 12 / 55 42 94 18 44 67 B−íc 3: 06 12 18 / 42 94 55 44 67 B−íc 4: 06 12 18 42 94 55 44 67 B−íc 5: 06 12 18 42 44 / 55 94 67 B−íc 6: 06 12 18 42 44 55 / 94 67 B−íc 7: 06 12 18 42 44 55 67 / 94 B−íc 8: 06 12 18 42 44 55 67 94 4.3.3 Th ñ tôc chi tiÕt. for i:=1 to n -1 do begin “ chän phÇn tö min cña d·y a[i],a[i+1],...,a[n] ” “ ®æi chç cho a[i]” end var i,j,k: integer; x: real; begin for i:=1 to size-1 do begin k:=i; x:=a[i]; for j:=i+1 to size do if a[j]
  3. LËp tr×nh b»ng Turbo Pascal end end; C©u hái vμ bμi tËp 1. C¸c phÇn tö m¶ng cã thÓ lμ nh÷ng kiÓu g×? ChØ sè cña m¶ng cã thÓ lμ nh÷ng kiÓu g×? 2. C¸c khai b¸o kiÓu m¶ng d−íi ®©y ®óng hay sai, m« t¶ râ cÊu tróc m¶ng. Array [10..0] of Real; Array ['0'..'9'] of Real; Array ['a'..'z'] of Char; Array [A..Z] of Integer; Array [(A,B,C)] of (-10..10); Array [Byte] of Boolean; Array [Integer] of Integer; Array [Char] of Byte; 3. §Ó xö li mäi phÇn tö cña m¶ng th−êng dïng vßng lÆp g×? Cã thÓ dïng nh÷ng vßng lÆp nμo? 4. Trong Pascal kiÓu m¶ng cã thÓ nhiÒu nhÊt lμ mÊy chiÒu. 5. ThÕ nμo lμ m¶ng s¾p theo −u tiªn hμng, −u tiªn cét. M¶ng trong Pascal thuéc kiÓu nμo? Thùc hμnh. 1. NhËp d·y n sè thùc. TÝnh trung b×nh céng, t×m trung vÞ (median), t×m phÇn tö lín nhÊt, nhá nhÊt; t×m phÇn tö lín thø nh×; ®Õm sè phÇn tö d−¬ng, ©m; T×m chØ sè cña phÇn tö ©m ®Çu tiªn, cuèi cïng; kiÓm tra d·y ®an dÊu. 2. NhËp d·y sè; trich ra d·y con lμ cÊp sè céng, cÊp sè nh©n cã nhiÒu phÇn tö nhÊt. 3. Cho sè nguyªn d−¬ng hÖ 10, h·y in ra sè ®ã ë hÖ 2, 8, 16. 4. NhËp d·y n gi¸ trÞ quan tr¾c cña mét ®¹i l−îng ngÉu nhiªn. T×m ph−¬ng sai vμ ®é lÖch tiªu chuÈn. 5. TÝnh tÝch v« h−íng cña hai vÐc t¬ 6. NhËp d·y n sè vμ mét sè x. T×m xem cã bao nhiªu sè trong d·y trïng víi x. Chóng ë c¸c vÞ trÝ nμo? 7. Cho ma trËn c¸c sè nguyªn A[1..7; 8..14] víi A[i,j]:= i*j. TÝnh tæng c¸c phÇn tö trªn mét cét, trªn mét hμng, trªn ®−êng chÐo chÝnh, trªn ®−êng chÐo phô. 8. Cho ma trËn vu«ng. T¸ch thμnh hai ma trËn tam gi¸c trªn vμ tam gi¸c d−íi råi in ra mμn h×nh. 9. NhËp tõ bμn phÝm mét d·y sè nguyªn, in ra c¸c gi¸ trÞ kh¸c nhau kÌm sè lÇn xuÊt hiÖn. 10. ViÕt ch−¬ng tr×nh s¾p xÕp mét d·y sè, dïng c¸c thñ tôc a -) chÌn trùc tiÕp, b -) chän trùc tiÕp, NguyÔn §×nh Ho¸, ViÖn CNTT - §HQG Hμ néi 79
  4. LËp tr×nh b»ng Turbo Pascal c -) ®æi chç trùc tiÕp 11. NhËp hai d·y sè nguyªn cïng cã n phÇn tö. KiÓm tra xem cã ph¶i mét d·y chØ lμ ho¸n vÞ cña d·y kia hay kh«ng. 12. Cho n ®iÓm kh¸c nhau pi = (xi, yi) vμ ®−êng gÊp khóc khÐp kÝn nèi c¸c ®iÓm nμy theo thø tù tõ p1, p2, ... , pn, p1. a) kiÓm tra xem ®−êng gÊp khóc cã tù c¾t kh«ng. b) nÕu ®−êng gÊp khóc kh«ng tù c¾t th× cã ph¶i lμ ®a gi¸c låi kh«ng c) t×m c¸c ®Ønh t¹o thμnh ®a gi¸c låi bao bäc c¶ n ®iÓm. NguyÔn §×nh Ho¸, ViÖn CNTT - §HQG Hμ néi 80
  5. LËp tr×nh b»ng Turbo Pascal Ch−¬ng 7 KiÓu x©u kÝ tù 1. Có ph¸p vµ cÊu tróc. 1.1 Có ph¸p. X©u kÝ tù lμ mét kiÓu d÷ liÖu nhËn gi¸ trÞ lμ d·y kÝ tù ASCII bÊt k×. 1.1.1 Khai b¸o kiÓu vμ biÕn Có ph¸p khai b¸o kiÓu x©u kÝ tù: TYPE tªn kiÓu = STRING ; TYPE tªn kiÓu = STRING [ ®é dμi cùc ®¹i] ; hoÆc Trong ®ã ®é dμi cùc ®¹i lμ mét sè n nguyªn d−¬ng, n
  6. LËp tr×nh b»ng Turbo Pascal Mét h»ng x©u kÝ tù lμ mét d·y kÝ tù ASCII n»m trong cÆp dÊu nh¸y ®¬n. Có ph¸p ng«n ng÷ Pascal quy ®Þnh viÕt gi¸ trÞ x©u kÝ tù trong cÆp dÊu nh¸y ®¬n (single quote). VÝ dô, ‘Turbo Pascal’, ‘Dai hoc Quoc gia Ha Noi”, v.v. X©u rçng lμ x©u kh«ng cã kÝ tù nμo vμ cã ®é dμi b»ng 0. ViÕt x©u rçng chØ cã cÆp dÊu nh¸y ®¬n liÒn nhau, kh«ng cã kÝ tù nμo bªn trong. CÇn chó ý ph©n biÖt x©u rçng víi x©u chØ gåm c¸c kÝ tù kho¶ng trèng. X©u rçng: ‘’. X©u chØ cã mét kÝ tù kho¶ng trèng: ‘ ’. 1.1.3 V iÕt ra , ®äc vμo mét x©u kÝ tù. ViÕt ra. Cã thÓ in biÓu thøc x©u kÝ tù ra mμn h×nh, m¸y in hay tÖp v¨n b¶n b»ng c¸c lÖnh Write. Thñ tôc Write (St) sÏ in ra nguyªn v¨n x©u kÝ tù St, kÓ c¶ c¸c dÊu trèng ë ®Çu vμ cuèi x©u. VÝ dô: Gi¶ sö Dßng1, Dßng2 lμ hai biÕn x©u kÝ tù vμ ta thùc hiÖn phÐp g¸n Dßng1:= 'CONG HOA XHCN VIET NAM' ; Dßng2:= ' ***** '; Khi in ra b»ng c¸c lÖnh Writln(Dßng1); Writeln(Dßng2); ta sÏ nhËn ®−îc hai dßng ch÷ bè trÝ ®óng nh− trªn: CONG HOA XHCN VIET NAM ***** Chi tiÕt h¬n vÒ sö dông thñ tôc Write ®Ó viÕt ra vμ quy c¸ch ®Þnh d¹ng viÕt ra ®· ®−îc tr×nh bμy trong Ch−¬ng 3. §äc vμo. Cã thÓ ®äc vμo tõ bμn phÝm vμ g¸n gÝa trÞ cho mét biÕn kiÓu x©u kÝ tù b»ng c¸c lÖnh Read. Chi tiÕt h¬n vÒ sö dông thñ tôc Read ®Ó ®äc d÷ liÖu vμo tõ bμn phÝm ®· ®−îc tr×nh bμy trong Ch−¬ng 3. 1.2 CÊu tróc kiÓu x©u kÝ tù - Truy cËp trùc tiÕp tõng thµnh phÇn. 1.2.1 CÊu tróc mét x©u kÝ tù. BiÕn x©u kÝ tù ®−îc tæ chøc trong bé nhí nh− sau: mçi kÝ tù trong x©u chiÕm mét byte, ®−îc xÕp thμnh m¶ng mét chiÒu, tõ vÞ trÝ sè 1 trong m¶ng trë ®i. Riªng phÇn tö ®Çu tiªn, phÇn tö chØ sè 0 cña m¶ng, sÏ chøa kÝ tù mμ m· ASCII cña nã (lμ mét sè nguyªn) b»ng víi ®é dμi thùc sù cña x©u. NguyÔn §×nh Ho¸, ViÖn CNTT - §HQG Hμ néi 82
  7. LËp tr×nh b»ng Turbo Pascal VÝ dô, nÕu gi¸ trÞ cña biÕn x©u kÝ tù SV1 lμ 'Nguyen Van A' th× trong bé nhí sÏ lμ Nguye N Va n A* ** *** ** #12 Trong ®ã, #12 lμ kÝ tù cã m· ASCII b»ng 12. C¸c dÊu sao “ *” nghÜa lμ kÝ tù bÊt k× nμo ®ã kh«ng x¸c ®Þnh. 1.2.2 Có ph¸p truy cËp c¸c kÝ tù thμnh phÇn. CÊu tróc cña mét biÕn x©u kÝ tù lμ mét m¶ng kÝ tù nh− võa m« t¶ ë trªn nªn ta cã thÓ thùc hiÖn mét sè thao t¸c truy cËp trùc tiÕp vμo tõng thμnh phÇn cña biÕn x©u kÝ tù. - Cã thÓ truy cËp vμo tõng kÝ tù trong x©u, dïng tªn biÕn vμ sè thø tù cña nã trong x©u ®Æt trong dÊu ngoÆc vu«ng, gièng nh− ®èi víi m¶ng mét chiÒu. VÝ dô, phÐp so s¸nh SV1 [8] = 'V' cho kÕt qu¶ True. - Cã thÓ lÊy ®é dμi thùc sù cña x©u kÝ tù St bÊt k×, th«ng qua m· ASCII cña phÇn tö St[0], tøc lμ ®é dμi cña x©u St b»ng Ord (St[0]). L−u ý r»ng ta còng cã hμm chuÈn cho biÕt ®é dμi cña x©u kÝ tù St lμ Length (St). 1.2.3 VÝ dô ViÕt ch−¬ng tr×nh nhËp mét x©u kÝ tù tõ bμn phÝm vμ in ra x©u ®¶o ng−îc tõ ph¶i sang tr¸i. Uses crt; Var Xau: String; I: byte ; BEGIN Writeln('Cho mot xau ki tu: '); Readln( Xau ); For i:= lenght (Xau) downto 1 do write (Xau[i]); Readln; END. Chó ý: X©u kÝ tù kh¸c víi m¶ng mét chiÒu c¸c kÝ tù ë chç ®é dμi thùc sù cu¶ biÕn x©u kÝ tù cã thÓ thay ®æi, chiÕm võa ®ñ chç cÇn thiÕt, trong khi m¶ng mét chiÒu cã dé dμi cè ®Þnh. §iÒu nμy lμm cho c¸c thao t¸c víi biÕn x©u kÝ tù ®¬n gi¶n vμ linh ho¹t h¬n nhiÒu so víi m¶ng mét chiÒu c¸c kÝ tù. NguyÔn §×nh Ho¸, ViÖn CNTT - §HQG Hμ néi 83
  8. LËp tr×nh b»ng Turbo Pascal 2. Thao t¸c víi x©u kÝ tù 2.1 C¸c phÐp to¸n. 2.1.1 BiÓu thøc x©u kÝ tù vμ phÐp g¸n PhÐp céng “ + ” hai to¸n h¹ng kiÓu x©u kÝ tù lμ ghÐp nèi hai x©u l¹i thμnh mét. Cã thÓ “céng” hai biÕn kiÓu x©u kÝ tù, nét biÕn víi mét gi¸ trÞ trùc tiÕp hoÆc hai gi¸ trÞ trùc tiÕp (kiÓu x©u kÝ tù). VÝ dô 1: BiÕn SV1 cã gÝa trÞ lμ ‘Nguyen Van A’ th× biÓu thøc ' Hä vμ tªn: ' + SV1 sÏ cã gi¸ trÞ lμ ' Ho va tªn: Nguyen Van A '. VÝ dô 2: Path:= 'C:\TP\bin\' ; FileName:= 'Turbo.exe' ; St:= Path + FileName; sÏ nhËn ®−îc St:= ' C:\ TP\bin\Turbo.exe '. 2.1.2 PhÐp so s¸nh. So s¸nh b»ng nhau “ = ” vμ kh¸c nhau “ ” PhÐp so s¸nh hai biÓu thøc x©u kÝ tù "b»ng nhau" cho kÕt qu¶ True nÕu tõng cÆp kÝ tù t−¬ng øng ë hai x©u lμ trïng nhau. Tr¸i l¹i, phÐp so s¸nh “b»ng nhau” sÏ cho kÕt qu¶ False. VÝ dô: NÕu biÕn kiÓu x©u kÝ tù SV1 ®· ®−îc g¸n gi¸ trÞ nh− trong vÝ dô ë trªn th× SV1 = 'Nguyen Van A' cho gi¸ trÞ True. SV1 = 'Nguyen Van A' cho gi¸ trÞ False. 2.1.3 Thø tù cña kiÓu x©u kÝ tù . X©u kÝ tù lμ kiÓu cã thø tù. Thø tù cña kiÓu x©u lμ thø tù tõ ®iÓn. PhÐp so s¸nh thø tù hai x©u kÝ tù ®−îc th−c hiÖn qua so s¸nh lÇn l−ît tõng cÆp kÝ tù t−¬ng øng ë hai x©u, tõ tr¸i sang ph¶i. Thø tù cña x©u lμ thø tù cña cÆp kÝ tù ®Çu tiªn kh«ng trïng nhau. V Ý dô: cho gi¸ trÞ True. 'abcd' < 'abed' 'abc' < 'abcdef' cho gi¸ trÞ True. 2.2 C¸c thñ tôc vµ hµm trªn x©u kÝ tù. NguyÔn §×nh Ho¸, ViÖn CNTT - §HQG Hμ néi 84
  9. LËp tr×nh b»ng Turbo Pascal Trong th− viÖn c¸c hμm, thñ tôc lμm s½n cña Pascal cã mét sè hμm, thñ tôc vÒ xö lÝ x©u kÝ tù. 2.2.1 C¸c thñ tôc Delete (St, Pos, Num): - St lμ biÕn kiÓu String. - Num, Pos lμ c¸c gi¸ trÞ nguyªn. - T¸c dông: xo¸ khái x©u St mét sè l−îng Num kÝ tù, b¾t ®Çu tõ vÞ trÝ Pos, tõ tr¸i sang ph¶i. VÝ dô: St:= 'ABCDEF' ; Delete(St,2,4); sÏ cho St = 'AFG' Delete(St,2,10) ; sÏ cho St ='A' Delete(St,10,3); sÏ cho St = 'ABCDEF' ; Insert (St2, St, Pos) ; - St2 lμ biÓu thøc kiÓu String. - St1 lμ biÕn kiÎu String. - Pos lμ gi¸ trÞ nguyªn. T¸c dông: chÌn thªm x©u St2 vμo x©u St1 t¹i vÞ trÝ Pos. NÕu Pos v−- ît qu¸ ®é dμi x©u ®Ých th× St2 sÏ ®−îc nèi thªm vμo ®u«i. VÝ dô: insert('123' , St, 4); sÏ cho St = 'ABCD123EF'. insert('123' , St,10) ; sÏ cho St = 'ABCDEF123'. Str (Value, St); - Value lμ biÓu thøc nguyªn hay thùc, cã quy c¸ch in ra - St lμ biÕn kiÓu String. T¸c dông: ®æi gÝa trÞ sè thμnh x©u kÝ sè råi g¸n cho x©u St. VÝ dô: i:= 123; Str (i:5 , St) ; sÏ nhËn ®−îc St = ' 123' . x:= 123.456 ; Str (x:10:5 , St); sÏ nhËn ®−îc St = ' 123.45600' Val (St, Var , Code); - St lμ biÓu thøc String. - Var lμ biÕn nguyªn hay thùc. - Code lμ biÕn nguyªn. T¸c dông: ®æi x©u ch÷ sè (biÓu diÔn mét sè nguyªn hay sè thùc) thμnh ra mét gi¸ trÞ sè vμ g¸n cho biÕn Var. Code lμ cê b¸o lçi. NÕu phÐp chuyÓn ®æi thùc hiÖn ®óng th× code = 0. NÕu sai, do St kh«ng biÓu diÔn ®óng lμ mét sè, th× Code sÏ cã gi¸ trÞ lμ vÞ trÝ cña kÝ tù sai trong x©u ch÷ sè. NguyÔn §×nh Ho¸, ViÖn CNTT - §HQG Hμ néi 85
  10. LËp tr×nh b»ng Turbo Pascal VÝ dô 1: i, e: integer; St = '123' ; Val (St, i , e); sÏ nhËn ®−îc i = 123 , e = 0. VÝ dô 2: St = '12ba' ; Val (St, i, e); sÏ nhËn ®−îc i kh«ng x¸c ®Þnh, e = 3. 2.2.2 C¸c hμm Length (St): cho biÕt ®é dμi cña x©u St. Copy (St, Pos, Num): - St lμ biÓu thøc x©u kÝ tù, - Pos, Num biÓu thøc kiÓu nguyªn. T¸c dông: trÝch ra mét x©u con tõ x©u con tõ x©u St, b¾t ®Çu tõ vÞ trÝ Pos vμ dμi Num kÝ tù. NÕu Pos + Num lín h¬n ®é dμi x©u St th× x©u kÕt qu¶ chØ gåm c¸c kÝ tù cuèi trong x©u St. NÕu Pos lín h¬n ®é dμi cña St th× x©u kÕt qu¶ lμ rçng. VÝ dô: St:= 'ABCDEF' ; St_con:= Copy (St, 3, 3) ; sÏ cho St_con = 'CDE'. St_con:= Copy (St, 4,4) ; sÏ cho St_con = 'DEF'. St_con:= Copy (St, 10,5) ; sÏ cho St_con = ' ' . Concat (St1, St2, ... , Stn): GhÐp nèi tÊt c¸c x©u thμnh mét x©u. - NÕu tæng chiÌu dμi c¸c x©u > 255 m¸y sÏ b¸o lçi. - Cã thÓ dïng phÐp + . Pos (St1, St2); T×m x©u St1 trong x©u St2 vμ cho biÕt vÞ trÝ ®Çu tiªn gÆp x©u St1 trong x©u St2. NÕu kh«ng t×m thÊy th× Pos = 0. VÝ dô: St:='ABCDEF' ; Pos ('CD', St) = 3; th×: Pos ('CX' ,St) = 0. C©u hái vμ bμi tËp 1. M« t¶ cÊu tróc cña mét biÕn kiÓu x©u kÝ tù 2. §é dμi cùc ®¹i cña x©u kÝ tù lμ bao nhiªu. NguyÔn §×nh Ho¸, ViÖn CNTT - §HQG Hμ néi 86
  11. LËp tr×nh b»ng Turbo Pascal 3. X©u kÝ tù kh¸c m¶ng kÝ tù nh− thÕ nμo. T¹i sao sö dông kiÓu x©u l¹i tiÖn lîi h¬n dïng m¶ng kÝ tù. Thùc hμnh 1. T¹o mét dßng ch÷ ch¹y tõ tr¸i sang ph¶i (hoÆc tõ ph¶i sang tr¸i) trong mét khung h×nh ch÷ nhËt trªn mμn h×nh. 2. Tù viÕt l¹i c¸c hμm thñ tôc xö lÝ x©u kÝ tù trong tiÕt 2. 3. ViÕt ch−¬ng tr×nh chuyÓn n sè thùc d−íi d¹ng mét x©u c¸c ch÷ sè c¸ch nhau kho¶ng tr¾ng vμo mét m¶ng n sè thùc, kh«ng dïng hμm chuÈn Val.(ChÝnh lμ thùc hiÖn c«ng viÖc cña readln (r, r2, ... , rn)), NguyÔn §×nh Ho¸, ViÖn CNTT - §HQG Hμ néi 87
  12. LËp tr×nh b»ng Turbo Pascal Ch−¬ng 8 KiÓu b¶n ghi 1. §Þnh nghÜa vµ khai b¸o 1.1 §Þnh nghÜa. C¸c kiÓu d÷ liÖu ®−îc x©y dùng ®Òu lμ m« h×nh ho¸ c¸c lo¹i d÷ liÖu tõ thÕ giíi thùc. C¸c ®èi t−îng thùc tÕ th−êng phøc t¹p, hμm chøa nhiÒu th«ng tin kh¸c kiÓu nhau. VÝ dô, th«ng tin vÒ mét c¸n bé bao gåm hä tªn, quª qu¸n (cã kiÓu x©u kÝ tù), giíi tÝnh (kiÓu logic), tuæi (kiÓu sè nguyªn), møc l−¬ng (kiÓu sè thùc) ... Th«ng tin vÒ mét s¶n phÈm hμng hãa bao gåm m· sè, tªn gäi (kiÓu x©u kÝ tù), ngμy s¶n xuÊt (kiÓu ngμy th¸ng), gi¸ thμnh (kiÓu sè thùc),v.v. §Ó tiÖn xö lÝ c¸c ®èi t−îng nμy, cÇn cã c¬ chÕ ghÐp nhiÒu thμnh phÇn d÷ liÖu cã kiÓu kh¸c nhau thμnh mét ®¬n vÞ thèng nhÊt. KiÓu b¶n ghi - Record chÝnh lμ cÊu tróc d÷ liÖu ®¸p øng ®ßi hái nμy. Mét d÷ liÖu kiÓu b¶n ghi t¹o nªn tõ nhiÒu thμnh phÇn, gäi lμ c¸c tr−êng – field. Mçi tr−êng lμ mét môc d÷ liÖu cã thÓ kh¸c kiÓu nhau. 1.2 Khai b¸o kiÓu b¶n ghi. 1.2.1 Có ph¸p. Có ph¸p khai b¸o kiÓu b¶n ghi nh− sau. Type tªn kiÓu = Record tªn tr−êng 1 : m« t¶ kiÓu d÷ liÖu 1; ...... tªn tr−êng n : m« t¶ kiÓu d÷ liÖu n ; end ; 1.2.2 VÝ dô VÝ dô 1: KiÓu ngμy- th¸ng- n¨m ®Ó ghi l¹i c¸c mèc thêi gian TYPE Date = RECORD NguyÔn §×nh Ho¸, ViÖn CNTT - §HQG Hμ néi 88
  13. LËp tr×nh b»ng Turbo Pascal Ngay: 1..31 ; Thang: 1..12 ; Nam: Word ; END ; VÝ dô 2: KiÓu ®Þa chØ TYPE Adress = RECORD SoNha: Word ; Phè: String [20] ; TØnh: String [15] ; END ; VÝ dô 3: KiÓu hå s¬ nh©n sù TYPE HoSo = RECORD HoDem: String [20] ; Tªn: String [20] ; Gioi: boolean ; NgaySinh: Date ; L−¬ng: real; CoGiaDinh: boolean ; DiaChi: Adress ; END; Chó ý: - Cã thÓ viÕt c¸c ®Þnh nghÜa kiÓu b¶n ghi lång nhau. NÕu tr−íc ®ã ta ch−a ®Þnh nghÜa kiÓu Date th× cã thÓ viÕt lång trùc tiÕp ®Þnh nghÜa kiÓu Date bªn trong ®Þnh nghÜa kiÓu HoSo nh− sau: TYPE HoSo = RECORD HoDem: String [20] ; Tªn: String [20] ; Gioi: boolean ; NgaySinh: RECORD Ngay: 1..31 ; Thang: 1..12 ; Nam: Word ; END ; L−¬ng: real; CoGiaDinh: boolean ; DiaChi: Adress ; END; Sau khi ®· ®Þnh nghÜa c¸c kiÓu b¶n ghi nh− trªn ta cã thÓ khai b¸o c¸c biÕn ®Ó sö dông nh− th«ng th−êng. Var Tªn biÕn: tªn kiÓu b¶n ghi ; NguyÔn §×nh Ho¸, ViÖn CNTT - §HQG Hμ néi 89
  14. LËp tr×nh b»ng Turbo Pascal VÝ dô. VAR Kh¬iC«ng, KhanhThanh, NgSinh_1, NgSinh_2 : Date ; CanBo1, CanBo2: HoSo ; 2. Sö dông. 2.1 Truy cËp tõng thµnh phÇn. KiÓu b¶n ghi cho phÐp truy cËp tõng thμnh phÇn, tøc lμ tõng tr−êng cña nã. Có ph¸p: tªn biÕn, dÊu chÊm, tªn tr−êng d÷ liÖu muèn truy cËp. G¸n gi¸ trÞ tªn biÕn . tªn tr−êng := gi¸ trÞ; §äc gi¸ trÞ vÕ tr¸i:= tªn biÕn . tªn tr−êng; VÝ dô: §Ó g¸n cho biÕn NgSinh_1 gi¸ trÞ ngμy 10/02/1970 ta sö dông c¸c c©u lÖnh sau: NgSinh_1.Ngay:= 10; NgSinh_1.Thang:= 2; NgSinh_1.Nam := 1970 ; §Ó in ra mμn h×nh hä tªn cña CanBo1: St:= CanBo1.HoDem + CanBo1.Ten ; Write(' Ho va ten:' , St) ; 2.2 C¸c phÐp to¸n víi toµn bé b¶n ghi. Cã thÓ thùc hiÖn mét sè phÐp to¸n víi toμn bé biÕn kiÓu b¶n ghi nh− mét to¸n h¹ng. 2.2.1 PhÐp g¸n. Cho phÐp g¸n ®èi víi hai biÕn b¶n ghi cïng kiÓu. TiÕp tôc vÝ dô 1 ë trªn cã thÓ viÕt CanBo1. NgaySinh := NgSinh_1 ; 2.2.2 PhÐp so s¸nh. Cã thÓ so s¸nh b»ng nhau “ = ”, kh¸c nhau “”. NguyÔn §×nh Ho¸, ViÖn CNTT - §HQG Hμ néi 90
  15. LËp tr×nh b»ng Turbo Pascal PhÐp so s¸nh "b»ng nhau" thùc hiÖn qua so s¸nh tõng cÆp c¸c tr−êng t−¬ng øng. Hai b¶n ghi lμ b»ng nhau nÕu c¸c tr−êng t−¬ng øng trïng nhau hoμn toμn. Tr¸i l¹i lμ kh¸c nhau. VÝ dô: Sau lÖnh g¸n CanBo2 := CanBo1 ; th× phÐp so s¸nh CanBo1 = CanBo2 cho kÕt qu¶ lμ true ; - KiÓu b¶n ghi kh«ng cã thø tù, do ®ã kh«ng cho phÐp c¸c so s¸nh < , > , >= , >= 2.2.3 L−u ý vÒ tªn kiÓu. Khi thùc hiÖn c¸c phÐp to¸n víi toμn thÓ b¶n ghi nh− mét to¸n h¹ng cÇ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). Gi¶ sö cã c¸c khai b¸o kiÓu vμ biÕn d−íi ®©y: TYPE Date = RECORD Ngay: 1..31; Thang: 1..12 ; Nam: Word ; END; NgThang = RECORD Ngay: 1..31; Thang: 1..12 ; Nam: Word ; END; VAR N1: Date; N2: NgThang; N3: RECORD Ngay: 1..31; Thang: 1..12 ; Nam: Word ; END; C¸c c©u lÖnh sau ®Òu sai có ph¸p N1:= N2 ; N2:= N3; 2.3 §äc vµo, viÕt ra víi mét biÕn kiÓu b¶n ghi. Kh«ng dïng ®−îc c¸c lÖnh nhËp xuÊt d÷ liÖu Read, Write cho toμn bé c¶ mét b¶n ghi mμ ph¶i xö lÝ ®Õn tõng tr−êng thμnh phÇn. NguyÔn §×nh Ho¸, ViÖn CNTT - §HQG Hμ néi 91
  16. LËp tr×nh b»ng Turbo Pascal VÝ dô, nÕu mèn nhËp tõ bμn phÝm c¸c d÷ liÖu cho biÕn kiÓu b¶n ghi NgSinh_1 nh− ë vÝ dô trªn th× kh«ng thÓ dïng lÖnh Read( NgSinh_1) råi nhËp tõ bμn phÝm c¸c sè 10 2 1970 mμ ph¶i dïng 3 cÆp lÖnh liªn tiÕp nh− sau. Write(' cho ngay sinh ') ; Readln(NgSinh_1.Ngay ); Write(' cho th¸ng sinh ') ; Readln(NgSinh_1.Thang ); Write(' cho n¨m sinh ') ; Readln(NgSinh_1.N¨m ); T−¬ng tù nh− vËy, nÕu muèn viÕt ra biÕn NgSinh_1 th× còng kh«ng thÓ dïng lÖnh Write(NgSinh_1) mμ ph¶i truy cËp vμ viÕt ra lÇn l−ît tõng tr−êng thμnh phÇn cã kiÓu d÷ liÖu chuÈn ®¬n gi¶n. 2.4 C©u lÖnh With. Ta thÊy r»ng ®Ó truy cËp c¸c tr−êng cña b¶n ghi ph¶i chØ râ tªn biÕn b¶n ghi vμ sau ®ã lμ c¸c tªn tr−êng. NÕu b¶n ghi gåm nhiÒu tr−êng th× tªn biÕn b¶n ghi ®−îc lÆp ®i lÆp l¹i nhiÒu lÇn. §Ó tr¸nh lÆp l¹i viÖc viÕt tªn biÕn kiÓu b¶n ghi khi muèn truy cËp tíi nhiÒu tr−êng cña nã cïng lóc, ta cã thÓ dïng c©u lÖnh WITH Có ph¸p: With tªn biÕn do c©u lÖnh ; VÝ dô: Cã thÓ viÕt l¹i ®o¹n lÖnh g¸n gi¸ trÞ cho NgSinh_1 nh− sau NgSinh_1 DO WITH Begin Ngay:= 10 ; Thang:= 2 ; Nam:= 1970 end ; Cã thÓ viÕt ®o¹n lÖnh g¸n trÞ cho biÕn CanBo1 nh− sau: WITH CanBo1 DO Begin HoDem:= ' Nguyen Van ' ; Ten:= ' Hung ' ; ... End ; Cã thÓ sö dông c©u lÖnh With lång nhau ®Ó truy cËp c¸c tr−êng cña mét biÕn cã cÊu tróc kiÓu b¶n ghi lång nhau nhiÒu tÇng. VÝ dô, muèn g¸n trùc tiÕp ngμy th¸ng n¨m sinh cho CanBo1 ta cã thÓ dïng hai c©u lÖnh With lång nhau nh− sau WITH CanBo1 DO NguyÔn §×nh Ho¸, ViÖn CNTT - §HQG Hμ néi 92
  17. LËp tr×nh b»ng Turbo Pascal WITH NgaySinh DO Begin Ngay:= 10 ; Thang:= 2 ; Nam:= 1970 ; End; ThËm chÝ cßn cã thÓ viÕt gän h¬n n÷a WITH CanBo1. NgaySinh DO ... NghÜa lμ khi A lμ biÕn kiÓu b¶n ghi, B lμ mét tr−êng cña A vμ B l¹i lμ mét biÕn b¶n ghi th× ®Ó th©m nhËp vμo c¸c tr−êng cña B th× chØ cÇn viÕt WITH A.B DO ... 3. B¶n ghi cã cÊu tróc thay ®æi 3.1 §Þnh nghÜa vµ có ph¸p 3.1.1 §Æt vÊn ®Ò. Ta ®· xÐt kiÓu b¶n ghi cã cÊu tróc cè ®Þnh, sè c¸c tr−êng, kiÓu t−¬ng øng cña c¸c tr−êng lμ kh«ng thÓ thay ®æi. §«i khi cã c¸c d÷ liÖu gåm nhiÒu thμnh phÇn kiÓu gièng nhau, chØ kh¸c nhau ë mét vμi ®iÓm. VÝ dô, nÕu xÐt thªm tr−êng d÷ liÖu nghÒ nghiÖp trong kiÓu b¶n ghi HåS¬ th× thÊy ngay cã nhiÒu kiÓu kh¸c nhau. C«ng nh©n cÇn ghi bËc thî, TrÝ thøc cÇn ghi häc hμm häc vÞ, Doanh nh©n cÇn ghi ngμnh kinh doanh, sè vèn... Hai gi¶i ph¸p: - T¹o ra nhiÒu kiÓu b¶n ghi: C«ngNh©n, TrÝThøc, DoanhNh©n, chØ kh¸c nhau ë tr−êng nghÒ nghiÖp. - HoÆc ®Þnh nghÜa mét kiÓu b¶n ghi nh−ng cã 3 tr−êng nghÒ nghiÖp kh¸c nhau vμ chØ dïng mét trong ba tr−êng ®ã tuú tr−êng hîp. C¶ hai c¸ch lμm trªn ®Òu cång kÒnh vμ l·ng phÝ. CÇn ®Æt ra kiÓu míi linh ho¹t h¬n, ®ã lμ b¶n ghi cã cÊu tróc thay ®æi. 3.1.2 M« t¶ có ph¸p kiÓu b¶n ghi cÊu tróc thay ®æi. Trong ®Þnh nghÜa kiÓu b¶n ghi cho phÐp cã mét tr−êng mμ cÊu tróc cña nã tuú thuéc mét biÕn lùa chän bëi c©u lÖnh Case. VÝ dô, ®Ó gi¶i quyÕt tr−êng hîp c¸c nghÒ nghiÖp kh¸c nhau cÇn ghi c¸c th«ng tin kh¸c nhau nh− ®· nªu trªn ta cã thÓ x©y dùng mét kiÓu b¶n ghi víi tr−êng NghÒNghiÖp cã cÊu tróc thay ®æi nh− sau: TYPE NghÒ = (C«ngNh©n, KÜS−,TrÝThøc, DoanhNh©n) ; NguyÔn §×nh Ho¸, ViÖn CNTT - §HQG Hμ néi 93
  18. LËp tr×nh b»ng Turbo Pascal Ngμnh = (KhaiTh¸c, C¬Khi, HãaChÊt, DÇuKhÝ, §iÖnLùc) ; ChuyªnM«n = (To¸n,Lý,Ho¸,Sinh ) ; Tr×nh§é = (C¬Së, TrungHoc, §¹iHäc, Th¹cSÜ, PTS, TS ); HåS¬ = RECORD Hä§Öm: String [20] ; Tªn: String [20] ; CASE NghÒNghiÖp: NghÒ OF C«ngNh©n: ( NgμnhCN: Ngμnh ; BËc: Byte) ; KÜS−: ( NgμnhKS: Ngμnh; Tr×nh§éKS: Tr×nh§é); TrÝThøc: (M«n: ChuyªnM«n ; Tr×nh§éTT: Tr×nh§é); DoanhNh©n: ( ) ; END ; Nh− vËy, tr−êng NghÒNghiÖp cã cÊu tróc thay ®æi tuú theo NghÒ lμ g×. NghÒ lμ biÕn lùa chän vμ ®−îc gäi lμ tr−êng ®¸nh dÊu. øng víi mçi gi¸ trÞ cña tr−êng ®¸nh dÊu - lμ c¸c nh·n cña lÖnh Case - ta cã c¸c cÊu tróc b¶n ghi kh¸c nhau thÓ hiÖn b»ng danh s¸ch tr−êng n»m trong cÆp dÊu ngoÆc ®¬n. L−u ý r»ng có ph¸p quy ®Þnh ph¶i cã cÆp dÊu ngoÆc ®¬n dï r»ng danh s¸ch tr−êng lμ rçng (xem tr−¬ng hîp nghÒ lμ Doanh Nh©n). Tõ kho¸ Case ë ®©y kh«ng hoμn toμn gièng c©u lÖnh Case nhiÒu lùa chän ®· biÕt. 3.1.3 C¸c quy ®Þnh - ChØ ®−îc phÐp cã mét tr−êng thay ®æi. Tuy nhiªn c¸c b¶n ghi cã cÊu tróc thay ®æi l¹i cã thÓ lång nhau. - Tr−êng thay ®æi ph¶i lμ tr−êng cuèi cïng. - Trong phÇn thay ®æi tÊt c¶ c¸c tªn biÕn kh«ng ®−îc trïng nhau dï lμ n»m trong hai tr−êng hîp kh¸c nhau. Trong vÝ dô trªn ta ph¶i ph©n biÖt NgμnhCN víi NgμnhKS còng nh− ph©n biÖt Tr×nh§éKS víi Tr×nh§éTT dï r»ng chóng thuéc hai tr−êng hîp kh¸c nhau. NÕu lμ hai kiÓu b¶n ghi ph©n biÖt th× râ rμng ®iÒu nμy kh«ng cÇn thiÕt. 3.2 Sö dông b¶n ghi cã cÊu tróc thay ®æi. VÒ nguyªn t¾c, truy cËp c¸c biÕn b¶n ghi cÊu tróc thay ®æi còng gièng nh− truy cËp b¶n ghi th«ng th−êng. §iÓm kh¸c nhau duy nhÊt lμ ë tr−êng tuú chän. Ta ph¶i sö dông mét c©u lÖnh Case ®Ó tuú biÕn theo mçi tr−êng hîp. D−íi ®©y lμ mét ch−¬ng tr×nh minh ho¹ c¸ch sö dông kiÓu b¶n ghi cã cÊu tróc thay ®æi nh− ®Þnh nghÜa ë trªn. L−u ý phÇn in ®Ëm trong thñ tôc hiÓn thÞ biÕn b¶n ghi cã cÊu tróc thay ®æi ShowVariableRecord. NguyÔn §×nh Ho¸, ViÖn CNTT - §HQG Hμ néi 94
  19. LËp tr×nh b»ng Turbo Pascal program VariableRecord; type Nghe = (CongNhan,KiSu,TriThuc, DoanhNhan); Nganh = (KhaiThac,CoKhi, HoaChat, DauKhi, DienLuc); Mon = (Toan,Ly, Hoa, Sinh); TrinhDo = char; {ki hieu A,B,C,D .. cho don gian} HoSo = record HoTen: String[20]; NamSinh: integer; CASE NgheNghiep: Nghe of CongNhan: (NganhCN: Nganh; Bac:byte); KiSu: (NganhKS: Nganh; TrinhDoKS: TrinhDo); TriThuc:(ChuyenMon: Mon; TrinhDoTT: TrinhDo); DoanhNhan: (); END; var a_cn,b_ks,c_tt,d_dn,v: HoSo; procedure ShowVariableRecord(v: HoSo); var ne: Nghe; nh: nganh; m: mon; td: TrinhDo; begin With v do begin Writeln(' Ho Ten: ', HoTen); Writeln(' Nam sinh: ', NamSinh); Write(' Nghe Nghiep: '); ne:= v.nghenghiep; case ne of CongNhan: begin writeln(' Cong Nhan '); nh:= v.nganhCN; case nh of KhaiThac: write(' Khai thac '); CoKhi: write (' co khi '); HoaChat: write(' hoa chat '); DauKhi: write (' dau khi '); DienLuc: write (' dien luc '); end; writeln(' bac ', v.bac); end; KiSu: begin writeln(' Ki Su '); nh:= v.nganhKS; case nh of KhaiThac: write(' Khai thac '); CoKhi: .. .. .. .. end; NguyÔn §×nh Ho¸, ViÖn CNTT - §HQG Hμ néi 95
  20. LËp tr×nh b»ng Turbo Pascal writeln(' Trinh Do ', v.TrinhDoKS); end; TriThuc: begin writeln (' Tri Thuc , mon '); m:= v.ChuyenMon; case m of Toan: write(' Toan '); Ly: write(' Ly '); Hoa: write(' Hoa '); Sinh: write(' sinh '); end; writeln ( ' Trinh do ', v.TrinhDoTT); end; DoanhNhan: writeln (' Doanh Nhan '); end; end; end; BEGIN with a_cn do begin HoTen:= 'Anh Cong Nhan'; Namsinh:= 1971; NgheNghiep:= CongNhan; NganhCN:= CoKhi; Bac:=7; end; with b_ks do begin HoTen:= 'Nguyen Ki Su'; Namsinh:= 1972; NgheNghiep:= KiSu; NganhKs:= DauKhi; TrinhDoKs:= 'A'; end; with c_tt do begin HoTen:= 'Tran Tri Thuc'; Namsinh:= 1973; NgheNghiep:= TriThuc; ChuyenMon:= Toan; TrinhDoTT:= 'C'; end; V:= a_cn; ShowVariableRecord(v); V:= b_ks; ShowVariableRecord(v); V:= c_tt; NguyÔn §×nh Ho¸, ViÖn CNTT - §HQG Hμ néi 96
ADSENSE
ADSENSE

CÓ THỂ BẠN MUỐN DOWNLOAD

 

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