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

Tài liệu: Lập trình PASCAL

Chia sẻ: Nguyen Nhi | Ngày: | Loại File: PDF | Số trang:18

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

PASCAL là ngôn ngữ lập trình cấp cao do giáo sư Niklaus Wirth thuộc trường đại học kỹ thuật Zurich Thuỵ sĩ sáng tác và công bố vào đầu những năm 1970, với tên là PASCAL để kỹ niệm nhà toán học người Pháp Blaise PASCAL ở thế kỷ 17. PASCAL là một ngôn ngữ có định kiểu mạnh mẽ. Điều đó có nghĩa là mọi biến và hằng của một kiểu dữ liệu không thể tự do đem trộn lẫn với các biến và hằng của một kiểu dữ liệu khác ...

Chủ đề:
Lưu

Nội dung Text: Tài liệu: Lập trình PASCAL

  1. Trung tám tênh toaïn thäúng kã Âaì Nàông 54 - Tráön Quäúc Toaín Âaì Nàông ch−¬ng i giíi thiÖu s¬ l−îc vÒ pascal I. Giíi thiÖu vÒ ng«n ng÷ PASCAL: PASCAL lµ ng«n ng÷ lËp tr×nh cÊp cao do gi¸o s− Niklaus Wirth thuéc tr−êng ®¹i häc kü thuËt Zurich Thuþ sÜ s¸ng t¸c vµ c«ng bè vµo ®Çu nh÷ng n¨m 1970, víi tªn lµ PASCAL ®Ó kü niÖm nhµ to¸n häc ng−êi Ph¸p Blaise PASCAL ë thÕ kû 17. PASCAL lµ mét ng«n ng÷ cã ®Þnh kiÓu m¹nh mÏ. §iÒu ®ã cã nghÜa lµ mäi biÕn vµ h»ng cña mét kiÓu d÷ liÖu kh«ng thÓ tù do ®em trén lÉn víi c¸c biÕn vµ h»ng cña mét kiÓu d÷ liÖu kh¸c . PASCAL lµ mét ng«n ng÷ cã cÊu tróc. TÝnh cÊu tróc ®ã ®−îc thÓ hiÖn trªn c¸c mÆt sau : + CÊu tróc vÒ d÷ liÖu : Tõ c¸c d÷ liÖu ®· cã ta cã thÓ x©y dùng c¸c cÊu tróc d÷ liÖu phøc t¹p h¬n. + CÊu tróc vÒ lÖnh : Tõ c¸c lÖnh ®· cã ta cã thÓ nhãm chóng l¹I víi nhau vµ ®Æt gi÷a hai tõ kho¸ Begin vµ End thµnh c©u lÖnh phøc t¹p h¬n. + CÊu tróc vÒ ch−¬ng tr×nh : Mét ch−¬ng tr×nh cã thÓ chia thµnh c¸c modun ch−¬ng tr×nh ®éc lËp (ch−¬ng tr×nh con). II. CÊu tróc chung cña ch−¬ng tr×nh PASCAL: PROGRAM Tªn_ch−¬ng_tr×nh; { Dßng tiªu ®Ò } USES Tªn th− viÖn; { CRT; DOS; PRINTER;GRAPH; } LABEL Tªn nh·n ; {Khai b¸o nh·n} CONST Tªn h»ng = gi¸ trÞ; { Khai b¸o h»ng } TYPE Tªn kiÓu = KiÓu cÇn khai b¸o; { Khai b¸o kiÓu } VAR Tªn biÕn : KiÓu gi¸ trÞ cña biÕn; { Khai b¸o biÕn } PROCEDURE { Thñ tôc (ch−¬ng tr×nh con) } FUNCTION { Hµm (ch−¬ng tr×nh con) } BEGIN C¸c c©u lÖnh; END. VÝ dô : PROGRAM Duong_tron; Uses CRT; Const pi= 3.14; Var s, r : real; Begin Clrscr; Write(‘Nhap ban kinh :’); Readln(r); S:=pi*r*r; Write(‘Dien tich hinh tron la: ’, s :4:2); Readln; End. Giaïo trçnh Pascal http://www.ebook.edu.vn 1
  2. Trung tám tênh toaïn thäúng kã Âaì Nàông 54 - Tráön Quäúc Toaín Âaì Nàông III. C¸c phÝm chøc n¨ng c¬ b¶n khi thao t¸c víi PASCAL: F1: Trî gióp; F2: L−u ch−¬ng tr×nh; F3: Më file hoÆc t¹o file míi (*.PAS); F9: DÞch ch−¬ng tr×nh; Ctrl + F9: Ch¹y ch−¬ng tr×nh; Alt + F5 : Xem kÕt qu¶; Alt + X : Tho¸t khái PASCAL; IV. C¸c phÐp to¸n tö, to¸n h¹ng vµ quan hÖ: - + , - , * , /, DIV, MOD ( phÐp chia lÊy phÇn nguyªn(DIV) vµ phÇn d−(MOD)) VÝ dô: 5 div 2 = 2; 5 mod 2= 1; - AND, OR, NOT, XOR(cho gi¸ trÞ ®óng khi 2 to¸n h¹ng kh¸c nhau) - , =, >=, ,
  3. Trung tám tênh toaïn thäúng kã Âaì Nàông 54 - Tráön Quäúc Toaín Âaì Nàông b. KiÓu Single: lµ kiÓu sè thùc chiÕm 4 bytes trong bé nhí RAM, nhËn gi¸ trÞ tõ 1.5E-45 ®Õn 3.4E+36. c. KiÓu Double: lµ kiÓu sè thùc chiÕm 8 bytes trong bé nhí RAM, nhËn gi¸ trÞ tõ 5.0E- 324 ®Õn 1.7E+308. d. KiÓu Extended: lµ kiÓu sè thùc chiÕm 10 bytes trong bé nhí RAM, nhËn gi¸ trÞ tõ 1.9E-4951 ®Õn 1.1E+4932. 3. KiÓu Boolean: lµ kiÓu logic cho hai gi¸ trÞ TRUE(®óng) vµ FALSE(sai). 4. KiÓu Char: lµ kiÓu biÓu diÔn c¸c ký tù tõ bµn phÝm nh−:‘A’,’B’,..,’0’,’1’,..’@’,’{‘.. 5. KiÓu String: lµ kiÓu biÓu diÔn x©u ký tù (chuçi) nh− : “Cong hoa”,”..” . II. C¸c khai b¸o: 1. Khai b¸o h»ng: H»ng lµ c¸c ®¹i l−îng kh«ng thay ®æi gi¸ trÞ. Cã c¸c lo¹i khai b¸o h»ng sè (nguyªn vµ thùc), h»ng ký tù, h»ng Boolean. C¸ch viÕt: Tªn_h»ng = gi¸_trÞ_cña_h»ng; VÝ dô: Const L= True; N = 5; Pi = 3.146; C = ‘Z’ ; 2. Khai b¸o biÕn: BiÕn lµ ®¹i l−îng cã thÓ thay ®æi gi¸ trÞ. Tªn biÕn cña ch−¬ng tr×nh lµ tªn cña « nhí cÊt gi÷ d÷ liÖu. C¸ch viÕt: Tªn_biÕn : kiÓu_d÷_liÖu_cña_biÕn; VÝ dô: Var I; byte; Hoten: String[30]; Kt: Boolean; 3. KiÓu tù ®Þnh nghÜa: kh¸c víi c¸c kiÓu d÷ liÖu cã s½n trong PASCAL th× kiÓu d÷ liÖu nµy ng−êi lËp tr×nh tù ®Þnh nghÜa theo yªu cÇu cña bµi to¸n C¸ch viÕt Tªn_kiÓu = d÷_liÖu_tù_®Þnh_nghÜa; VÝ dô: Type Color = ( Red, Green, Blue); Mang = Array[1..100] of Integer; Var C: Color; A: Mang; III. BiÓu thøc: BiÓu thøc lµ mét c«ng thøc tÝnh to¸n ®Ó cã mét gi¸ trÞ theo mét qui t¾c to¸n häc nµo ®ã. Mét biÓu thøc bao gåm to¸n tö vµ to¸n h¹ng. VÝ dô : 6+Pi*Cos(x); A+B; KT= TRUE; IV.C©u lÖnh: Bªn c¹nh phÇn m« t¶ d÷ liÖu lµ phÇn lÖnh cña ch−¬ng tr×nh. C©u lÖnh ®−îc chia ra hai lo¹i: 1. C©u lÖnh ®¬n gi¶n: lµ nh÷ng lÖnh kh«ng chøa nh÷ng lÖnh kh¸c: - PhÐp g¸n ; - Lêi gäi Procedure;{ thñ tôc } - LÖnh nh¶y GOTO {lÖnh nh¶y v« ®IÒu kiÖn, th−êng Ýt dïng trong PASCAL} 2. C©u lÖnh cã cÊu tróc: lµ khèi lÖnh, lÖnh thö vµ rÏ nh¸nh, lÖnh lÆp: Giaïo trçnh Pascal http://www.ebook.edu.vn 3
  4. Trung tám tênh toaïn thäúng kã Âaì Nàông 54 - Tráön Quäúc Toaín Âaì Nàông - C©u lÖnh ghÐp BEGIN .... END; - C©u lÖnh lùa chän IF ..... THEN ..... ELSE; CASE .... OFF; - C¸c vßng lÆp: FOR ... TO .... DO ...; ` REPEAT .... UNTIL .....; WHILE ..... DO .....; - C©u lÖnh WITH ..... DO .....; 3. PhÐp g¸n: BiÕn := biÓu_thøc; VÝ dô : x:= a+b; Kt:= false; I:= I+1; V. Thñ tôc vµo ra d÷ liÖu: 1. Thñ tôc viÕt d÷ liÖu ra mµn h×nh: - Write(item); Trong ®ã item cã thÓ lµ mét x©u ký tù, mét biÓu thøc hay mét gi¸ trÞ nµo ®ã. VÝ dô: Write(‘Chao cac ban’); Write(a); Write(x*3+4*sin(x)); - Writeln(item); ChØ kh¸c nhau víi Write ë chç lµ nã ®−a con trá mµn h×nh xuèng dßng. - Writeln; 2. C¸c thñ tôc tr×nh bµy mµn h×nh: - GOTOXY(x,y); Lµ thñ tôc ®−a con trá nh¶y ®Õn to¹ ®é (x,y), trong ®ã x lµ cét (1..80 cét), y lµ dßng (1..25 dßng). - Clrscr; Lµ thñ tôc xo¸ toµn bé mµn h×nh vµ sau khi xo¸ con trá sÏ ë vÞ trÝ gãc phÝa trªn bªn tr¸i mµn h×nh. - TextColor(Color); Lµ thñ tôc lùa chän mµu ký tù. - TextBackground(Color); Lµ thñ tôc chän mµu nÒn mµn h×nh. Trong ®ã Color nhËn gi¸ trÞ tõ 0 ®Õn 15, vµ 128 (nhÊp nh¸y). ( Nhí khai b¸o USES CRT;) 3. Thñ tôc vµo d÷ liÖu: Read vµ Readln: - Read(biÕn); Lµ thñ tôc ®äc d÷ liÖu ®−îc nhËp tõ bµn phÝm vµo trong bé nhí RAM VÝ dô: Var n : integer; Begin Write(‘Nhap n:=’); read(n); End. - Readln(biÕn); T−¬ng tù nh− Read nh−ng con trá xuèng dßng . - Readln; 4. Mét sè thñ tôc nhËp phÝm ®Æc biÖt cña PASCAL: - Hµm ReadKey; cã kiÓu ký tù, cho gi¸ trÞ lµ ký tù nhËn vµo tõ bµn phÝm ngay tõ khi b¹n gâ phÝm mµ kh«ng cÇn Ên tiÕp nót Enter. VÝ dô: ch:= ReadKey; - Hµm KeyPressed cã kiÓu Boolean, cho gi¸ trÞ TRUE nÕu bµn phÝm cã chøa ký tù gâ vµo mµ ch−a ®−îc lÊy ra xö lý, FALSE nÕu kh«ng cã ký tù gâ vµo. VI. Mét sè ch−¬ng tr×nh con cña PASCAL 1. Thñ tôc Delay(Time): t¹o ra thêi gian trÔ Time (tÝnh b½ng ms). Time lµ sè nguyªn. 2. Thñ tôc Sound(F) vµ NoSound; : t¹o ra dao ®éng ©m thanh víi tÇn sè F (F:sè nguyªn) cho ®Õn khi ta gäi NoSound; VÝ dô: Sound(500); Delay(100); NoSound; 3. Thñ tôc Exit; : lµ thñ tôc tho¸t khái ch−¬ng tr×nh con 4. Thñ tôc Break; :lµ thñ tôc tho¸t khái nh÷ng vßng lÆp Giaïo trçnh Pascal http://www.ebook.edu.vn 4
  5. Trung tám tênh toaïn thäúng kã Âaì Nàông 54 - Tráön Quäúc Toaín Âaì Nàông 5. Thñ tôc Halt; : lµ thñ tôc tho¸t khái ch−¬ng tr×nh PASCAL 6. Hµm t¹o sè ngÉu nhiªn: Hµm Random(n); víi n :0..65535;(cho gi¸ trÞ ngÉu nhiªn trong n phÇn tö) Tr−íc khi gäi hµm Random ta ph¶I gäi thñ tôc Randomize; ®Ó t¹o bé sè ngÉu nhiªn. 7. Hµm UpCase(ch) :hµm cho ký tù hoa cña ký tù ch. VÝ dô: ch:=’a’; UpCase(ch)=’A’; Ch−¬ng III C©u LÖnh Cã CÊu Tróc I. C©u lÖnh ®IÒu kiÖn IF ..... THEN ..... ELSE ..... : 1. D¹ng 1: IF < ®IÒu kiÖn >THEN < c«ng viÖc >; VÝ du: If n>0 Then Write(n,’ la so duong’); 2. D¹ng 2: IF THEN ELSE ; VÝ dô: T×m gi¸ trÞ MAX vµ MIN cña 2 sè a vµ b .... IF a< b THEN Begin Max:= b; Min:= a; End ELSE { nghÜa lµ a>b } Begin Max:= a; Min:= b; End; ..... • Chó ý: + C©u lÖnh tr−íc ELSE cña lÖnh IF...kh«ng cã dÊu chÊm phÈy(;) + Trong ®o¹n lÖnh nÕu cã tõ hai c«ng viÖc trë lªn th× Begin .... End; II. C©u lÖnh lùa chän CASE ..... OF ..... 1. D¹ng 1: CASE < biÓu thøc > OF h»ng 1 :< c«ng viÖc 1>; ............ h»ng n : < c«ng viÖc n>; END; VÝ dô : TÝnh sè ngµy cña mét th¸ng: Var songay:byte; thang:1..12 {kiÓu liÖt kª} ; nam:integer; Begin Write(‘Nhap thang:’);readln(thang); Write(‘Nhap nam:’);readln(nam); CASE thang OF 4, 6, 9,11 : songay:= 30; 2:If (nam Mod 4 = 0) then songay:= 29 else songay:= 28; 1, 3, 5, 7, 8, 10, 12 : songay:= 31; END; Write(‘So ngay cua Thang ’,thang,’ Nam ’,nam,’ la ‘,songay); End. Giaïo trçnh Pascal http://www.ebook.edu.vn 5
  6. Trung tám tênh toaïn thäúng kã Âaì Nàông 54 - Tráön Quäúc Toaín Âaì Nàông 2. D¹ng 2: CASE < biÓu thøc > OF h»ng 1 : < c«ng viÖc 1>; ...... h»ng n : < c«ng viÖc n>; ELSE < c«ng viÖc n+1>; END; VÝ dô : Víi ch lµ biÕn ký tù: ...... Write(‘Nhap ky tu:’);readln(ch); CASE ch OF ‘0’..’9’ : Write(Ch,’ la chu so’); ‘A’..’Z’ : Write(Ch,’ la chu cai’); ELSE { c©u lÖnh tr−íc ELSE cña CASE .. cã dÊu chÊm phÈy (;) } Write(Ch,’ khong thuoc cac lua chon tren’); END; ...... III. Vßng lÆp cã sè b−íc lÆp x¸c ®Þnh FOR : 1. D¹ng 1: FOR < biÕn:= gi¸_trÞ_®Çu > TO < gi¸_trÞ_cuèi> DO < c«ng viÖc > ; 2. D¹ng 2: FOR < biÕn:= gi¸_trÞ_cuèi > DOWNTO < gi¸_trÞ_®Çu > DO < c«ng viÖc > ; VÝ dô : TÝnh tæng c¸c sè nguyªn tõ 1 ®Õn 200: Uses CRT; Var s, I :integer; Begin Clrscr; { thñ tôc dïng xo¸ s¹ch mµn h×nh } S:=0; { lÖnh khëi t¹o gi¸ trÞ ®Çu} For I:= 1 To 200 Do s:= s+1; { hoÆc For I:= 500 Downto 1 Do s:= s+1; } Write(‘Tong la :’, s); Readln; { ®Ó gi÷ l¹I mµn h×nh cho ta thÊy ®−îc kÕt qu¶ } End. IV. C©u lÖnh cã sè b−íc lÆp kh«ng x¸c ®Þnh REPEAT vµ WHILE : 1. D¹ng 1: WHILE < biÓu thøc logic > DO Begin < c«ng viÖc >; End; VÝ dô : TÝnh tæng sau : S= 1+1/2 +1/3 +.… +1/N ; S:= 0; I:= 1; While I; UNTIL < biÓu thøc logic >; VÝ dô : Nh− vÝ dô trªn S:= 0; I:= 1; { gi¸ trÞ khëi t¹o ban ®Çu } Repeat S:= S + 1/I; Giaïo trçnh Pascal http://www.ebook.edu.vn 6
  7. Trung tám tênh toaïn thäúng kã Âaì Nàông 54 - Tráön Quäúc Toaín Âaì Nàông I:= I +1; Until I > N; 3. Sù kh¸c nhau gi÷a REPEAT vµ WHILE: - Trong vßng lÆp Repeat th× m¸y sÏ thùc hiÖn < c«ng viÖc > sau ®ã míi kiÓm tra < biÓu thøc logic > . Cßn trong vßng lÆp WHILE th× nã kiÓm tra < biÓu thøc logic > råi sau ®ã míi lµm < c«ng viÖc >. - §iÒu kiÖn trong < biÓu thøc logic > gi÷a hai vßng lÆp lu«n tr¸i ng−îc nhau. Trong REPEAT Sai (FALSE) th× nã lµm tiÕp, §óng (TRUE) th× nã tho¸t .Cßn trong WHILE th× §óng nã míi lµm, Sai nã tho¸t . - §iÒu kiÖn §óng trong WHILE tho¶ m·n ®iÒu kiÖn Bµi to¸n cßn REPEAT th× ng−îc l¹i. V. LÖnh nh¶y v« ®IÒu kiÖn GOTO: LÖnh GOTO thuéc lo¹i lÖnh ®¬n gi¶n, cho phÐp ch−¬ng tr×nh nh¶y v« ®iÒu kiÖn tíi mét vÞ trÝ trong ch−¬ng tr×nh th«ng qua tªn nh·n. VÝ dô :T×m c¸c sè nguyªn tè gi÷a 2 sè nguyªn d−¬ng n1 va n2: Program nhay; Label L1,L2 ; Var i, j, n1, n2: integer; tt: char; Begin L1: Write(‘Nhap hai so n1 va n2:’);readln(n1, n2); For i:= n1 to n2 do Begin For j:= 2 to i-1 do If ( i mod j = 0 ) then Goto L2; Write( i, ‘ ‘ ); L2 : ; { lÖnh kh«ng lµm g× c¶ } End; Writeln; Write(‘Ban co muon tiep tuc khong ?( C / K )’); readln(tt); If Upcase(tt)= ‘C’ then Goto L1; End. Tuy nhiªn lÖnh nh¶y GOTO rÊt Ýt dïng trong PASCAL v× nã sÏ lµm mÊt tÝnh “cÊu tróc thuËt to¸n” cña ng«n ng÷ . Ch−¬ng IV Ch−¬ng Tr×nh Con I.Kh¸I niÖm: Trong khi lËp ch−¬ng tr×nh chóng ta th−êng gÆp nh÷ng ®o¹n ch−¬ng tr×nh ®−îc lÆp ®i lÆp l¹i nhiÒu lÇn ë nh÷ng chç kh¸c nhau. §Ó tr¸nh r−êm rµ, nh÷ng ®o¹n ch−¬ng tr×nh nµy ®−îc thay thÕ b»ng c¸c ch−¬ng tr×nh con t−¬ng øng khi cÇn. H¬n n÷a, mét vÊn ®Ò phøc t¹p sÏ t−¬ng øng víi mét ch−¬ng tr×nh cã thÓ rÊt lín, rÊt dµi. Do ®ã viÖc nh×n tæng quan c¶ ch−¬ng tr×nh còng nh− viÖc gì rèi, hiÖu chØnh sÏ rÊt khã kh¨n.Ta cã thÓ gi¶i quyÕt c¸c vÊn ®Ò ®ã thµnh c¸c vÊn ®Ò nhá h¬n (ch−¬ng tr×nh con) ®Ó dÔ kiÓm tra, gì rèi tõng khèi mét vµ sau ®ã ghÐp l¹i thµnh ch−¬ng tr×nh lín. §©y còng lµ ý t−ëng c¬ b¶n cña lËp tr×nh cÊu tróc. II. Procedure vµ Function ( Thñ tôc vµ Hµm): PASCAL cã hai lo¹I ch−¬ng tr×nh con : - Procedure ( thñ tôc ) - Function ( hµm ) Sù kh¸c nhau c¬ b¶n vµ duy nhÊt cña hai lo¹i ch−¬ng tr×nh con nµy lµ Function cã gi¸ trÞ tr¶ vÒ th«ng qua tªn hµm vµ do ®ã nã ®−îc sö dông trong mét biÓu thøc. Cßn Procedure kh«ng cã gi¸ trÞ tr¶ vÒ th«ng qua tªn cña nã nªn c¸c Procedrre kh«ng thÓ viÕt trong c¸c biÓu thøc. Giaïo trçnh Pascal http://www.ebook.edu.vn 7
  8. Trung tám tênh toaïn thäúng kã Âaì Nàông 54 - Tráön Quäúc Toaín Âaì Nàông • CÊu tróc chung cña mét ch−¬ng tr×nh ®−îc m« t¶ nh− sau: Program Tªn_ch−¬ng_tr×nh; Uses Tªn_th−_viÖn; Label Tªn_nh·n; Const { Khai b¸o h»ng }; Type { Khai b¸o kiÓu }; Var { Khai b¸o biÕn toµn côc }; Procedure Tªn_thñ_tuc( Khai b¸o tham sè, tham biÕn nÕu cÇn ); Var { nÕu cã biÕn côc bé } Begin ....{ Th©n ch−¬ng tr×nh con }; End; Function Tªn_hµm(Khai b¸o tham sè, tham biÕn nÕu cÇn):KiÓu_d÷_liÖu; Var { nÕu cã } Begin .....{ Th©n ch−¬ng tr×nh con }; End; BEGIN ....{ Th©n ch−¬ng tr×nh chÝnh } END. VÝ dô : TÝnh biÓu thøc Program Bieu_thuc; Uses CRT; Var a,b: integer; bt: real; Procedure Nhap; Var OK : Char ; Begin Repeat Write(‘Nhap tu:’);readln(a); Write(‘Nhap mau:’);readln(b); Write(‘Cã sua lai so lieu khong ( C / K )?’); OK:= ReadKey; Writeln;{ ®−a con trá xuèng dßng } Until ( OK= ‘K’ ) Or ( OK= ‘k’ ); End; Function Chia( x, y: integer): real; Var z : real; Begin If y0 then z:= x/y Else Begin Writeln(#7,’ Khong chia duoc vi mau so bang= 0’); Halt; { thñ tôc halt dõng l¹i ch−¬ng tr×nh} End; Chia:= z; { gi¸ trÞ tr¶ vÒ cña hµm } End; BEGIN Clrscr; Nhap; { gäi thñ tôc th× b×nh th−êng } Giaïo trçnh Pascal http://www.ebook.edu.vn 8
  9. Trung tám tênh toaïn thäúng kã Âaì Nàông 54 - Tráön Quäúc Toaín Âaì Nàông Bt := Chia(a,b); { gäi hµm th× n»m trong biÓu thøc g¸n } Write(‘Bieu thuc chia la: ‘,bt); Readln; END. Chó ý: -BiÕn toµn côc lµ biÕn ®−îc dïng chung cho c¶ ch−¬ng tr×nh. Cßn biÕn côc bé( ®Þa ph−¬ng) th× chØ cã gi¸ trÞ trong ch−¬ng tr×nh con. -Tham sè vµ tham biÕn ®−îc khai b¸o trong ch−¬ng tr×nh con nh−ng tham biÕn th× cã Var phÝa tr−íc cßn tham sè th× kh«ng. Vidô : Procedure tinh( x,y:integer; Var s:real); { x, y lµ tham sè ; s: lµ tham biÕn v× s bÞ thay ®æi gi¸ trÞ } Begin .... End; III. TÝnh ®Ö qui cña ch−¬ng tr×nh con: Trong Procedure vµ Function cã thÓ gäi chÝnh thñ tôc hoÆc hµm vµo th©n ch−¬ng tr×nh cña chÝnh nã. TÝnh chÊt nµy ®−îc gäi lµ tÝnh ®Ö qui. VÝ dô: T×m −íc sè chung cña hai sè x va y cã thÓ ®−îc ®Þnh nghÜa nh− sau: USCLN(x, y)= x nÕu y= 0 = (y, phÇn d− cña x/y) nÕu y0 Nh− vËy hµm USCLN cã thÓ ®−îc viÕt theo ®Ö qui nh− sau: Function USCLN(x, y: integer): integer; Begin If y= 0 then USCLN:= x Else USCLN:= USCLN(y, x mod y); End; Vµ h·y so s¸nh g× ? víi ch−¬ng tr×nh kh«ng ®Ö qui sau: ( Dµnh riªng cho c¸c ban !) Function USCLN(x, y: integer): integer; Var sodu : integer; { sè d− } Begin While (y < > 0 ) do Begin Sodu:= x mod y; x: = y; y:= sodu; End; USCLN:= x; End; Chó ý : ChØ nªn dïng ®Ö qui ®èi víi nh÷ng bµi to¸n kh«ng cã tÝnh lÆp. Ch−¬ng V KiÓu D÷ LiÖu Cã CÊu Tróc : KiÓu M¶ng Vμ KiÓu TËp Hîp I. KiÓu M¶ng ( Array): M¶ng lµ kiÓu d÷ liÖu cã cÊu tróc ®−îc t¹o ra nh»m môc ®Ých ®Ó l−u mét sè h÷u h¹n d÷ liÖu cã cïng kiÓu. Sè phÇn tö cña m¶ng ®−îc x¸c ®Þnh ngay tõ khi ®Þnh nghÜa ra m¶ng. Mçi phÇn tö cña m¶ng ®−îc truy nhËp trùc tiÕp th«ng qua tªn m¶ng cïng víi chØ dÉn truy nhËp ®−îc ®Ó gi÷a hai ngoÆc vu«ng [ ..] . 1. M¶ng mét chiÒu: Cã hai h×nh thøc khai b¸o m¶ng: Giaïo trçnh Pascal http://www.ebook.edu.vn 9
  10. Trung tám tênh toaïn thäúng kã Âaì Nàông 54 - Tráön Quäúc Toaín Âaì Nàông a. Khai b¸o gi¸n tiÕp: Type Tªn_kiÓu = ARRAY[KiÓu_chØ_dÉn] OF < KiÓu_phÇn_tö >; Var BiÕn_m¶ng : Tªn_kiÓu; VÝ dô : Type So = Array[1 .. 100] of Integer; Kytu = Array[‘A’ .. ‘Z’] of Char; Color = (Red, Blue, Green, White, Black); Var A : So; Kt : Kytu; Cl : Array[Color] of Boolean; b. Khai b¸o trùc tiÕp: Var BiÕn_m¶ng : ARRAY[KiÓu_chØ_dÉn] OF < KiÓu_phÇn_tö >; VÝ dô : A : Array[1 .. 100] of integer; VÝ dô : ViÕt ch−¬ng tr×nh nhËp d·y sè vµo m¶ng sau ®ã s¾p xÕp m¶ng theo thø tù t¨ng dÇn: Program Day_so; Uses CRT; Type mang = Array[1..50] of integer; Var a:mang; n: integer; Procedure Nhap; Var I: byte; Begin Write(‘Nhap so phan tu cua mang:’);readln(n); For I:=1 to n do Begin Write(‘ A[ ‘, I , ’]= ’); Readln(A[ I ] ); End; End; { §©y lµ thñ tôc s¾p xÕp mµ c¸c b¹n cÇn tham kh¶o } Procedure Sapxep; { s¾p xÕp t¨ng dÇn } Var I, j : byte; T: integer; Begin For I:=1 to n-1 do Begin For j := I+1 to n do If a[ I ] > a[ j ] then { nÕu s¾p xÕp gi¶m th× dÊu ng−îc l¹I } Begin T: = a[ I ]; A[ I ] := A[ j ]; { ®©y lµ thuËt ho¸n ®æi 2 gi¸ trÞ } A[ j ] := T; End; End; End; { Ch−¬ng tr×nh chÝnh } Begin Clrscr; Nhap; Sapxep; Readln; Giaïo trçnh Pascal http://www.ebook.edu.vn 10
  11. Trung tám tênh toaïn thäúng kã Âaì Nàông 54 - Tráön Quäúc Toaín Âaì Nàông End . 3. M¶ng nhiÒu chiÒu: KiÓu phÇn tö cña m¶ng kh«ng bÞ h¹n chÕ nhiÒu nh− kiÓu chØ dÉn. Nã cßn cã thÓ lµ c¸c kiÓu cã cÊu tróc . ( Array[KiÓu_chØ_dÉn1, 2,..] Of KiÓu_phÇn_tö; ) ( VÒ mÆt khai b¸o còng nh− m¶ng mét chiÒu ) VÝ dô : M¶ng 2 chiÒu: Type Mang = Array[ 1..3, 1..4] of integer; Var A: Mang; M« t¶ : Cét 1 2 3 4 2 7 4 12 Dßng 1 2 5 9 6 1 3 8 3 10 5 VÝ dô : A[2, 3] = 6; { dßng 2, cét 3 } VÝ dô : Nh©n hai ma trËn vu«ng cÊp n (dßng = cét) : Program Nhan_hai_mt; Uses CRT; Var a,b,c: Array[1 .. 50,1 .. 50] of integer; n: byte; Procedure Nhap; Var I,j :byte; Begin Write(‘Nhap chi so dong va cot’);readln(n); { nÕu kh«ng ph¶I lµ ma trËn vu«ng th× nhËp dßng riªng, cét riªng } for I:=1 to n do for j:=1 to n do Begin Write(‘ a[ ‘, I , ’ , ’ , j , ’ ]= ’); Readln(a[ I , j ] ); End; for I:=1 to n do for j:=1 to n do Begin Write(‘ b[ ‘, I , ’ , ’ , j , ’ ]= ’); Readln(b[ I , j ] ); End; End; Procedure Nhan; Var I, j, k: byte; Begin for I:=1 to n do for j:=1 to n do Begin C[ I, j ]:= 0; For k:=1 to n do C[ I, j ]:= a[ I, k ] * b[ k , j ]; End; End; Procedure Xuat; Giaïo trçnh Pascal http://www.ebook.edu.vn 11
  12. Trung tám tênh toaïn thäúng kã Âaì Nàông 54 - Tráön Quäúc Toaín Âaì Nàông Var I, j : byte; Begin For I:= 1 to n do Begin For j:=1 to n do write(c[ I, j ]: 5);writeln; End; BEGIN Clrscr; Nhap; nhan; xuat; Readln; END. II. KiÓu tËp hîp: Lµ kiÓu bao gåm mét sè c¸c ®èi t−îng nµo ®ã cã cïng b¶n chÊt, cïng mét m« t¶ kiÓu. KiÓu tËp còng cã hai h×nh thøc khai b¸o nh− m¶ng. VÝ dô: Type So= Set OF 0 .. 9; Mang = array[ 1.. 50 ] OF SET OF ‘A’ .. ‘Z’; Ngay= (Hai, Ba, Tu, Nam, Sau, Bay, Chunhat); Var S : so; A: mang; Ngay_tuan: set of ngay; VÝ dô : NhËp vµo n ký tù ®Ó x©y dùng mét tËp c¸c ký tù: Program XD_CHU; Uses CRT; Var Chu : SET OF ‘A’ .. ‘Z’; I, n: integer; Ch: Char; Begin Clrscr; Chu: =[ ]; Write(‘Nhap n:=’); readln(n); For I:= 1 to n do Begin Readln(ch); Ch:= Upcase(ch); {®æi ch÷ th−êng thµnh hoa} End; For ch:=’A’ to ‘Z’ do If ch IN chu then write(ch); End. Ch−¬ng VI KiÓu X©u Ký Tù I. Kh¸I niÖm: X©u( String ) lµ kiÓu d÷ liÖu cã cïng cÊu tróc dïng ®Ó xö lý c¸c x©u ký tù. KiÓu String cã nhiÒu ®IÓm t−¬ng tù nh− kiÓu m¶ng nh−ng còng cã nhiÒu ®IÓm kh¸c nhau lµ: sè ký tù trong mét biÕn x©u cã thÓ thay ®æi cßn sè phÇn tö cña kiÓu m¶ng lu«n cè ®Þnh. Giaïo trçnh Pascal http://www.ebook.edu.vn 12
  13. Trung tám tênh toaïn thäúng kã Âaì Nàông 54 - Tráön Quäúc Toaín Âaì Nàông II. Khai b¸o: Var BiÕn : String[ n ]; Trong ®ã n lµ sè ký tù tèi ®a cã thÓ cã cña x©u. ChiÒu dµI tèi ®a cña mét x©u lµ 255. VÝ dô: Var Hoten: string[30]; St: string; III. C¸c thñ tôc vµ hµm xö lý x©u ký tù: 1. C¸c thñ tôc: a. Delete(St, Pos, Num); :dïng ®Ó xo¸ x©u St . Trong ®ã St: x©u ký tù, Pos: lµ vÞ trÝ b¾t ®Çu xo¸,Num: lµ sè ký tù cÇn xo¸. VÝ dô: NÕu St=’Tin hoc’ th×: Delete(St,4,4); -> St=’Tin’ b. Insert(St2, St1, Pos); : Dïng ®Ó chÌn x©u St2 vµo x©u St1 ë vÞ trÝ Pos. VÝ dô: NÕu St1=’Trung ‘ ; St2=’Tam’ th×: Insert(St2,St1,6); -> St1=’Trung Tam’; c. Str(Value, St); : dïng ®Ó ®æi gi¸ trÞ sè Value thµnh x©u St. VÝ dô: NÕu I=234 th×: Str(I, St); -> St=’ 234’; d. Val(St, Var, Code); :dïng ®Ó ®æi x©u St thµnh sè råi l−u vµo biÕn Var. NÕu ®æi thµnh c«ng th× Code = 0 ,cßn kh«ng th× ng−îc l¹i. VÝ dô: NÕu St= ‘ 456’ th×: Val(St, I, cd); -> I= 456 vµ cd = 0; 2. C¸c hµm: a. Length(St): cho ta ®é dµI cña x©u St. VÝ dô: NÕu St=’adecs12vf’ th× dd:=Length(St); cho kÕt qu¶ dd= 9. b. Copy(St, Pos, Num); : dïng ®Ó t¹o ra mét x©u míi tõ x©u St , hµm nµy sÏ chÐp ra sè ký tù tõ vÞ trÝ Pos vµ chÐp ra Num ký tù. VÝ dô: NÕu St =’kuioj’ th×: Stm:= Copy(st,4,2); cho kÕt qu¶ Stm=’oj’; Chó ý: -NÕu Pos+ Num > Length(St) th× hµm sÏ tr¶ vÒ c¸c ký tù trong x©u St . -NÕu Pos > Length(St) th× hµm sÏ tr¶ vÒ mét x©u rçng . c. Concat(St1, St2,.., Stn); : hµm nµy dïng ®Ó ghÐp tÊt c¶ c¸c x©u ký tù thµnh mét x©u. NÕu tæng chiÒu dµI x©u míi >255 th× m¸y b¸o lçi. VÝ dô: NÕu st1=’Cong’ ; st2=’hoa’ th×: { ta cã thÓ sö dông phÐp + } St := Concat(st1+’ ‘, st2); cho kÕt qu¶ St=’Cong hoa’ d. Pos(St1, St2); dïng ®Ó t×m vÞ trÝ xuÊt hiÖn ®Çu tiªn cña x©u St1 cã trong x©u St2. NÕu t×m thÊy th× hµm nµy sÏ tr¶ vÒ gi¸ trÞ nguyªn >0, cßn kh«ng t×m thÊy th× Pos= 0 . VÝ dô: NÕu St1= ‘as’; St2=’ aeasnhasju’ th×: vt:= Pos(St1, St2); cho kªt qu¶ vt= 3 . VÝ dô: Xo¸ c¸c ký tù tr¾ng d− thõa trong x©u St :{ St= ’ Xa hoi ‘;} Program Xoa_Trang; Uses CRT; Var St: string; I: byte; Begin Clrscr; Write(‘Nhap xau ky tu:’); readln(st); While st[1]=’ ‘ do delete(St,1,1); { xo¸ ®Çu } While st[length(st)]=’ ‘ do delete(St, length(st),1); { xo¸ cuèi } For I:= 1 to length(st) do If st[I] and st[I+1] then delete(St, I, 1); Giaïo trçnh Pascal http://www.ebook.edu.vn 13
  14. Trung tám tênh toaïn thäúng kã Âaì Nàông 54 - Tráön Quäúc Toaín Âaì Nàông Readln; End. VÝ dô: ViÕt hµm chuyÓn ch÷ hoa thµnh ch÷ th−êng: Function Hoa_Thuong (St : string): string; Var I: byte; Begin For I:= Length(st) do If st[I] In [‘A’ .. ‘Z’] then St[I]:= Chr(Ord(St[I]+ 32); Hoa_thuong:= st; End; Ch−¬ng VII. KiÓu B¶n Ghi I. KiÓu b¶n ghi( RECORD ) : lµ kiÓu d÷ liÖu cã cÊu tróc nh»m ®Ó t¹o ra mét kiÓu d÷ liÖu míi víi c¸c phÇn tö d÷ liÖu cã kiÓu kh¸c nhau . RECORD lµ mét cÊu tróc bao gåm nhiÒu thµnh phÇn. C¸c thµnh phÇn cã thÓ thuéc c¸c kiÓu d÷ liÖu kh¸c nhau vµ ®−îc gäi lµ c¸c tr−êng ( Field ), mçi tr−êng ®Òu ®−îc ®Æt tªn . §Ó m« t¶ mét kiÓu T cã cÊu tróc Record víi danh s¸ch c¸c tr−êng cã tªn lµ S1, S2, …, Sn vµ cã c¸c m« t¶ kiÓu t−¬ng øng lµ tr−êng cã tªn lµ T1, T2, …, Tn ta dïng c¸ch viÕt nh− sau: Type T= Record S1: T1; S2: T2; …. Sn: Tn; End; VÝ dô: Type Date = Record Ngay: 1 .. 31; Thang: 1.. 12; Nam: Word; End; Type NhanSu = Record Hoten: string[30]; Ngaysinh: Date; Luong: real; CoGiaDinh: Boolean; End; Var NV: Array[1 ..100] of NhanSu; II. Sö dông Record: Muèn truy cËp mét biÕn kiÓu Record, ta ph¶I truy cËp theo thµnh phÇn cña chóng. Có ph¸p ®Ó truy cËp ®Õn mét thµnh phÇn nµo ®ã lµ: < Tªn biÕn Record > . < Tªn tr−êng > VÝ dô: Var NVV : NhanSu; NVV.Hoten:=’Tran An’; NVV.Ngaysinh.Ngay:= 6; Giaïo trçnh Pascal http://www.ebook.edu.vn 14
  15. Trung tám tênh toaïn thäúng kã Âaì Nàông 54 - Tráön Quäúc Toaín Âaì Nàông NVV.Ngaysinh.Thang:= 5; NVV.Ngaysinh.Nam:= 1980; III. C©u lÖnh With: Khi cÇn truy cËp nhiÒu thµnh phÇn cña mét biÕn kiÓu Record, ta cã thÓ dïng c©u lÖnh With ®Ó ch−¬ng tr×nh ®−îc gän h¬n . Có ph¸p: WITH < BiÕn kiÓu Record > DO < C©u lÖnh > VÝ dô: NhËp lý lÞch nh©n viªn trong mé c¬ quan : Uses CRT; Type Date = Record Ngay: 1 .. 31; Thang: 1.. 12; Nam: Word; End; Type NhanSu = Record Hoten: string[30]; Ngaysinh: Date; Luong: real; Cogiadinh: Boolean; End; Var NV: Array[1 ..100] of NhanSu; I, SNV: byte; GD: Char; Begin Clrscr; Write(‘Nhap vao so nhan vien:’); readln(SNV); For I:= 1 to SNV do With NV[I] do Begin Write(‘Ho ten:’); readln(hoten); Write(‘Ngay sinh: / /’); { NÕu kh«ng cã With th×: readln(NV[I].hoten); } With Ngaysinh do Begin Readln(ngay); Readln(thang); Readln(nam); End; Write(‘Luong:’); Readln(luong); Write(‘Co gia dinh(Y/N)?:’); readln(GD); If Upcase(GD)= ‘Y’ then Cogiadinh:= true Else Cogiadinh:= false; End; Readln; End. IV. B¶n ghi cã cÊu tróc thay ®æi: NgoµI nh÷ng b¶n ghi cã cÊu tróc cè ®Þnh nh− ®· tr×nh bµy. Pascal cßn cho phÐp lËp c¸c Record cã mét phÇn cÊu tróc thay ®æi ®−îc. Giaïo trçnh Pascal http://www.ebook.edu.vn 15
  16. Trung tám tênh toaïn thäúng kã Âaì Nàông 54 - Tráön Quäúc Toaín Âaì Nàông VÝ dô : Trong phÇn khai b¸o NhanSu ë vÝ dô tr−íc , nÕu ta xÐt thªm tr−êng Nghenghiep th× sÏ cã nhiÒu tr−êng hîp x¶y ra, ch¼ng h¹n nh− : - C«ng nh©n: CÇn ghi râ ngµnh g×? BËc thî mÊy? - Kü s−: Ngµnh g×? Tr×nh ®é? - B¸c sÜ: Chuyªn khoa g×? - C¸ biÖt: Kh«ng cã g× n÷a? Type Nghe= (Congnhan, Kysu, Bacsi, Cabiet); Nganh= (Khaithac, Cokhi, Dien,Hoa); Khoa= (Noi, Ngoai, Nhi); NhanSu = Record Hoten: string[30]; Ngaysinh: Record {KiÓu khai b¸o míi} Ngay: 1..31; Thang: 1..12; Nam: Word; End; Luong: real; Cogiadinh: Boolean; CASE Nghenghiep: Nghe Of Congnhan: (NganhCN: Nganh; Bactho:byte); Kysu:(NganhKS:Nganh;Trinhdo:(Kem,TB,Kha,Gioi); Bacsi: (Chuyenkhoa: Khoa); Cabiet: ( ); End; End; Var NVV: NhanSu; Begin ….. With NVV do Begin Hoten: =’Tran An’ Nghenghiep:= Congnhan; NganhCN:= Cokhi; Bactho:= 3; End; ….. ….. End. Ch−¬ng VIII. D÷ LiÖu KiÓu TÖp I. Kh¸I niÖm: TÖp d÷ liÖu( File ) lµ mét tËp hîp c¸c d÷ liÖu cã liªn quan víi nhau vµ cã cïng kiÓu ®−îc nhãm l¹I víi nhau t¹o thµnh mét d·y. Chóng th−êng ®−îc chøa trong mét thiÕt bÞ nhí ngoµi cña m¸y tÝnh( ®Üa cøng,..)víi mét c¸I tªn nµo ®ã. TÖp cã c¸c d÷ liÖu kh¸c nhau nh− ký tù, v¨n b¶n… §Þnh nghÜa mét kiÓu tÖp T víi c¸c phÇn tö cã kiÓu phÇn tö ®−îc viÕt trong m« t¶ kiÓu víi tõ kho¸ File Of nh− sau: Type Filereal = File of real; Date = Record Ngay: 1 .. 31; Giaïo trçnh Pascal http://www.ebook.edu.vn 16
  17. Trung tám tênh toaïn thäúng kã Âaì Nàông 54 - Tráön Quäúc Toaín Âaì Nàông Thang: 1.. 12; Nam: Word; End; Type NhanSu = Record Hoten: string[30]; Ngaysinh: Date; Luong: real; CoGiaDinh: Boolean; End; FnhanSu = File Of NhanSu; Var F1: Filereal; F2: FNhanSu; F3: File of Array[1..50] of Integer; II. C¸c thao t¸c trªn tÖp: 1. Më tÖp míi ®Ó cÊt d÷ liÖu: ViÖc më tÖp ®−îc tiÕn hµnh víi hai thñ tôc ®I liÒn nhau theo thø tù : Assign(FileVar, FileName); ReWrite(FileVar); Trong ®ã: - FileVar : biÕn kiÓu File. - FileName : tªn cña tÖp ®Æt trong thiÕt bÞ nhí ngoµI ®−îc ®−a vµo d¹ng mét String. Ta nªn ®Æt tªn sao cho tªn ®ã ph¶n ¸nh ®−îc ý nghÜa, b¶n chÊt, néi dung cña tÖp. VÝ dô: Assign(F2, ‘Nhanvien.txt’); { G¸n tªn Nhanvien.txt cho biÕn F2 } ReWrite(F2); { Më tÖp Nhanvien.txt, tÖp ch−a cã phÇn tö nµo } 2. Ghi c¸c gi¸ trÞ vµo tÖp víi thñ tôc Write: Thñ tôc Write sÏ ®Æt c¸c gi¸ trÞ míi vµo tÖp. Có ph¸p: Write(FileVar, Item1, Item2,.., Itemn); Trong ®ã Item1, Item2,..,Itemn: lµ c¸c gi¸ trÞ cÇn ghi vµo tÖp. VÝ dô: T¹o ra mét tÖp chøa c¸c sè nguyªn tõ 1 ®Õn 50 víi tªn tÖp trªn ®Üa lµ: ‘Songuyen.txt’ Program Tep_so_nguyen; Var I: byte; F: File of Integer; Begin Assign(F,’Songuyen.txt’); ReWrite(F); For I:= 1 to 50 do Write(F,I); Close(F); { Thñ tôc ®ãng File } End. 3. §äc d÷ liÖu tõ mét tÖp ®· cã: Có ph¸p: Assign(FileVar, FileName); Reset(FileVar); §Ó ®äc d÷ liÖu tõ tÖp ra biÕn nµo ®ã ta dïng thñ tôc Read : Có ph¸p: Read(FileVar, Var1, Var2,.., Varn); hoÆc Readln(…); Trong ®ã Var1, Var2,.., Varn lµ c¸c biÕn cã cïng kiÓu víi FileVar VÝ dô: §äc néi dung tõ file ‘Vanban.txt’ : Giaïo trçnh Pascal http://www.ebook.edu.vn 17
  18. Trung tám tênh toaïn thäúng kã Âaì Nàông 54 - Tráön Quäúc Toaín Âaì Nàông Program Doc_File; Uses CRT; Var F: Text; { §©y lµ khai b¸o kiÓu File Text } dong : string[80]; Begin Clrscr; Assign(F, ‘Vanban.txt’); Reset(F); While Not EOF(F) Do Begin Read(F, dong); Write(dong,’ ‘ ); End; Close(F); Readln; End. 4. Thñ tôc thªm dßng: Có ph¸p: Append(Var F: Text); VÝ dô: … Assign(F,’Vanban.txt’); Append(F); Write(F,’T¹m biet’);... Ghi chó : - Cuèi ch−¬ng tr×nh khi nµo còng nhí dïng thñ tôc Close(biÕn_file) ®Ó ®ãng File. - Hµm EOF(Var F: Text): cho biÕt vÞ trÝ con trá cã ph¶I lµ cuèi File hay ch−a. - Hµm EOLN(Var F: Text): cho biÕt vÞ trÝ con trá cã ph¶I lµ cuèi dßng hay ch−a. Hai hµm trªn ®Òu tr¶ vÒ kiÓu Boolean. Giaïo trçnh Pascal http://www.ebook.edu.vn 18
ADSENSE

CÓ THỂ BẠN MUỐN DOWNLOAD

 

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