206
 M ụ c l ụ c  Trang 1 LỜ I NÓI ĐẦU Bài ging Ngôn ng lp trình 1 đượ c son theo chươ ng trình đào to dành cho các lớ p cao đẳng và trung cp chuyên ngành công ngh thông tin và chuyên ngành mng vin thông ca trườ ng Cao đẳng Kinh tế K thut Bình dươ ng. Ni dung gm ni dung chính như sau : Chươ ng 1 : Chươ ng trình và thut gii Chươ ng 2 : Giớ i thiu Ngôn ng Lp trình Pascal Chươ ng 3 : Các lnh điu kin – Vòng lp Chươ ng 4 : Chươ ng trình con Chươ ng 5 : D liu có cu trúc Bài ging đượ c son tho t m , dn dt t thp đến cao, t d đến khó giúp cho sinh viên có th t hc, trên lớ p không

Lap Trinh Pascal-Vu Te Xien

Embed Size (px)

Citation preview

Page 1: Lap Trinh Pascal-Vu Te Xien

5/14/2018 Lap Trinh Pascal-Vu Te Xien - slidepdf.com

http://slidepdf.com/reader/full/lap-trinh-pascal-vu-te-xien 1/205

 

M c l c  Trang 1

LỜ I NÓI ĐẦUBài giảng Ngôn ngữ lập trình 1 đượ c

soạn theo chươ ng trình đào tạo dành chocác lớ p cao đẳng và trung cấp chuyênngành công nghệ thông tin và chuyên

ngành mạng viễn thông của trườ ng Caođẳng Kinh tế Kỹ thuật Bình dươ ng.

Nội dung gồm nội dung chính như sau:

Chươ ng 1 : Chươ ng trình và thuật

giải Chươ ng 2 : Giớ i thiệu Ngôn ngữ Lập trình Pascal

Chươ ng 3 : Các lệnh điều kiện –Vòng lặp

Chươ ng 4 : Chươ ng trình con

Chươ ng 5 : Dữ liệu có cấu trúcBài giảng đượ c soạn thảo tỷ mỷ , dẫn

dắt từ thấp đến cao, từ dễ  đến khó giúpcho sinh viên có thể tự học, trên lớ p không

Page 2: Lap Trinh Pascal-Vu Te Xien

5/14/2018 Lap Trinh Pascal-Vu Te Xien - slidepdf.com

http://slidepdf.com/reader/full/lap-trinh-pascal-vu-te-xien 2/205

 

M c l c  Trang 2

cần ghi quá nhiều, chỉ cần ghi những ýchính sau đó đọc bài giảng là hoàn toàn cóthể hiểu và nắm chắc đượ c bài. Các nộidung trong bài giảng đều có các ví dụ minh hoạ từng phần và có hướ ng dẫn cụ thể , giúp cho sinh viên ôn bài đượ c thuậnlợ i hơ n.

Sau mỗi chươ ng đều có các bài tập

cũng đượ c sắp xếp từ dễ  đến khó , giúpcho sinh viên tự rèn luyện kỹ năng làm bàitập trong giờ thực hành cũng như ở nhà.

Bài giảng này cũng có thể dành chocác sinh viên chuyên ngành khác cũng như 

các bạn yêu thích môn Ngôn ngữ lập trình1 có thể tự đọc tham khảo.Trong quá trình biên soạn bài giảng

mặc dù chúng tôi đã có nhiều cố gắngnhững chắc chắn cũng còn có nhiều thiếusót, mọi đóng góp xin gửi về bộ môn Công

nghệ Thông tin Trườ ng Cao đẳng Kinh tế kỹ thuật Bình dươ ng. Chúng tôi xin tiếpthu và xin chân thành cám ơ n.

Page 3: Lap Trinh Pascal-Vu Te Xien

5/14/2018 Lap Trinh Pascal-Vu Te Xien - slidepdf.com

http://slidepdf.com/reader/full/lap-trinh-pascal-vu-te-xien 3/205

 

M c l c  Trang 3

Chúng tôi cũng xin cám ơ n thầy LêMinh Tuấn, thầy Phạm Phúc Thịnh và cácthầy cô trong bộ môn Công nghệ Thôngtin đã đọc và đóng góp nhiều ý kiến haycho tập bài giảng, làm cho tập bài giảngđượ c ngày càng hoàn thiện hơ n , phục vụ tốt hơ n cho công tác đào tạo của Nhàtrườ ng.

Hiệu Trưở ngTrưở ng khoaGiáo viên

biên soạn

TS. Vũ Tế XiểnTS. Nguyễn Xuân DũngKS. Vũ Biến

Page 4: Lap Trinh Pascal-Vu Te Xien

5/14/2018 Lap Trinh Pascal-Vu Te Xien - slidepdf.com

http://slidepdf.com/reader/full/lap-trinh-pascal-vu-te-xien 4/205

 

M c l c  Trang 4

MỤC LỤC

LỜI NÓI ĐẦU ......................................1Chươ ng I CHƯƠ NG TRÌNH VÀTHUẬT GIẢII. Chươ ng trình (Program) ..................61.Khái niệm........................................... 6

2.Ngôn ngữ lậ p trình.............................62.1 Ngôn ngữ máy .............................62.2 H ợ  p ngữ .......................................62.3 Ngôn ngữ cấ  p cao .......................6 2.4 Các ngôn ngữ lậ p trình thông d ụng 6

3.Trình thông dịch và biên dịch ...........7

3.1 Trình biên d ịch : ..........................73.2 Trình thông d ịch : ........................7

II.Thuật giải : ........................................ 71. Ý ngh ĩ a :............................................7

Page 5: Lap Trinh Pascal-Vu Te Xien

5/14/2018 Lap Trinh Pascal-Vu Te Xien - slidepdf.com

http://slidepdf.com/reader/full/lap-trinh-pascal-vu-te-xien 5/205

 

M c l c  Trang 5

2.Các đặc trưng của thuật giải : ............72.1.Xác định : ....................................72.2. H ữ u hạn: ....................................72.3: Đúng : ........................................ 7

3. Các phươ ng pháp biểu diễn thuật giải 73.1. Ngôn ngữ t ự nhiên : ..................... 73.2. Lư u đồ - sơ  đồ khố i :....................8

Chươ ng 2 GIỚ I THIỆU NGÔN NGỮ  

LẬP TRÌNH PASCALI.Giớ i thiệu chung :.............................111.Xuất xứ : ..........................................112. Turbo Pascal ...................................11II.Sử dụng phần mềm Turbo Pascal ...11

1. Khở i động Turbo Pascal ................111.1. Các t ậ p tin chính của Turbo Pascal.............................................................111.2. Khở i động Turbo Pascal ............111.3. C ử a sổ màn hình Turbo Pascal và

cách chọn lệnh ................................... 12

1.4. Thoát khỏi Turbo Pascal : .........131.5. Các bướ c thự c hiện một chươ ng

trình Pascal :.......................................132. Một vài kỹ thuật trong soạn thảo : .. 14

Page 6: Lap Trinh Pascal-Vu Te Xien

5/14/2018 Lap Trinh Pascal-Vu Te Xien - slidepdf.com

http://slidepdf.com/reader/full/lap-trinh-pascal-vu-te-xien 6/205

 

M c l c  Trang 6

2.1. Thao tác trên khố i: ....................142.2. Các phím lệnh soạn thảo thông d ụng

.............................................................14III. Các phần tử cơ bản của ngôn ngữ Pascal .................................................151.Tập ký tự cơ bản ............................152. Từ khóa (Keyword) ........................ 153.Tên (Identifier) ................................15

4.Tên chuẩn ........................................155.Câu lệnh trong Pascal ......................15

5.1 Câu lệnh đơ n giản : ...................165.2 Lệnh ghép :.................................16

IV. Cấu trúc của chươ ng trình Pascal :16

1.Cấu trúc chung ...............................16 1.1. Phần tiêu đề chươ ng trình ........161.2. Phần khai báo ...........................16 1.3. Phần thân chươ ng trình ............16

2.Khai báo trong chươ ng trình TurboPascal .................................................16 

2.1 Khai báo đơ n vị sử d ụng (Unit) ..162.2 Khai báo hằ ng số  .......................17 2.3 Khai báo biế n số  .......................17

Page 7: Lap Trinh Pascal-Vu Te Xien

5/14/2018 Lap Trinh Pascal-Vu Te Xien - slidepdf.com

http://slidepdf.com/reader/full/lap-trinh-pascal-vu-te-xien 7/205

 

M c l c  Trang 7

2.4 Khai báo (định nghĩ a) một kiể u d ữ  liệu mớ i ..............................................174.Ví dụ  ...............................................18IV.Các kiểu dữ liệu đơ n giản dùng trongPascal : ................................................18

1.Kiểu nguyên : ................................182.Kiểu thực :.....................................193.Kiểu ký tự (Char) :........................20

4.Kiểu logic (boolean) : ................... 205.Kiểu chuỗi (String) : .....................20

V.Cac lệnh nhập xuất dữ liệu :............201. Lệnh nhập dữ liệu : ........................20

1.1.Ý nghĩ a : ....................................20

1.2 .Dạng lệnh : ..............................202. Lệnh xuất dữ liệu : .......................... 212.1 Ý nghĩ a : .....................................212.2 .Dạng lệnh : ...............................212.2. In d ữ liệu d ạng số có định d ạng :21

Chươ ng III CÁC LỆNH ĐIỀU KIỆN –

VÒNG LẶPI. Các lệnh điều kiện : .........................231.Lệnh nhảy không điều kiện :............232. Câu lệnh IF :....................................23

Page 8: Lap Trinh Pascal-Vu Te Xien

5/14/2018 Lap Trinh Pascal-Vu Te Xien - slidepdf.com

http://slidepdf.com/reader/full/lap-trinh-pascal-vu-te-xien 8/205

 

M c l c  Trang 8

2.1. Câu lệnh If d ạng 1: ....................23 2.2. Câu lệnh IF d ạng 2 :..................242.3. Câu lệnh IF lồng nhau : ............24 

3. Câu lệnh CASE :.............................25 3.1. Cú pháp :....................................253.2: Ý nghĩ a :....................................26 3.3. Các ví d ụ : .................................26

3.4. Câu lệnh CASE lồng nhau :........27

II.CÁC LỆNH VÒNG LẶP :.............. 281. Câu lệnh lặp FOR : .........................281.1. Câu lệnh FOR d ạng 1: ................281.2. Các ví d ụ : ................................... 29

2. Cau lệnh FOR dạng 2 :..................29

3. Câu lệnh FOR lồng nhau ................303. Câu lệnh WHILE ..........................313.1 Cú pháp .....................................313.2 Ý nghĩ a : ....................................313.2. Các ví d ụ về lệnh While ...........31

4.Câu lệnh Repeat .............................32

4.1 Cú pháp ..................................... 324.2 Ý nghĩ a: .......................................324.3. Các ví d ụ về lệnh Repeat  .........32

Page 9: Lap Trinh Pascal-Vu Te Xien

5/14/2018 Lap Trinh Pascal-Vu Te Xien - slidepdf.com

http://slidepdf.com/reader/full/lap-trinh-pascal-vu-te-xien 9/205

 

M c l c  Trang 9

5. So sánh các lệnh For, While và Repeat.............................................................34  Chươ ng IV CHƯƠ NG TRÌNH CONI.Những khái niệm chung ..................351. Khái niệm về chươ ng trình con ......352. Hàm (Function) .............................352.1. Các đặ c tr ư ng của hàm ..............35 2.2. Khai báo hàm t ự viế t ..................35

2.3 Các ví dụ : ....................................363.Thủ tục (Procedure) ........................37

3.1. Thủ t ục và cách khai báo ..........373.2 Thủ t ục t ự viế t  .........................373.3. Các ví d ụ về thủ t ục ...................37

II. Tham số trong chươ ng trình con ...381. Tham số trị số .................................382. Tham số biến số .............................39III. Phạm vi tác dụng của các khai báo 401. Biến toàn cục và biến địa phươ ng 402. Phạm vi tác dụng của các khai báo 41

IV.Sự tham khảo trướ c và sự đệ qui ..421. Tham khảo trướ c (Forward reference)

.............................................................422. Sự đệ qui (Recursion) ..................42

Page 10: Lap Trinh Pascal-Vu Te Xien

5/14/2018 Lap Trinh Pascal-Vu Te Xien - slidepdf.com

http://slidepdf.com/reader/full/lap-trinh-pascal-vu-te-xien 10/205

 

M c l c  Trang 10

Chươ ng V DỮ LIỆU CÓ CẤU TRÚCI.Khái niệm về dữ liệu có cấu trúc...... 45II.Cấu trúc dữ liệu mảng ....................441. Mảng và cách khai báo mảng ........442.Mảng một chiều ..............................44

2.1 Khai báo mảng một chiề u .........442.2: Khai báo biế n mảng ................442.3 Khai báo mảng có gán tr ị ban đầu 

.............................................................442.4 Khai báo tr ự c tiế  p biế n mảng ...452.5 Truy xuấ t các phần t ử mảng .....452.6. Các bài cơ bản về mảng ..........45

3. Mảng hai chiều (ma trận) ...............48

3.1. Khai báo mảng hai chiề u ..........483.2 Khai báo và gán giá tr ị ban đầu 493.3 Các thao tác trên ma tr ận ........493.4. Các ví d ụ về ma tr ận .................50

III Dữ liệu kiểu chuỗi ký tự ..............531. Khái niệm ......................................53

2 Cách khai báo ..................................532.1 Khai báo kiể u d ữ liệu ............542.2.Khai báo biế n chuỗ i ...............54

Page 11: Lap Trinh Pascal-Vu Te Xien

5/14/2018 Lap Trinh Pascal-Vu Te Xien - slidepdf.com

http://slidepdf.com/reader/full/lap-trinh-pascal-vu-te-xien 11/205

 

M c l c  Trang 11

3. Truy nhập vào từng phần tử của chuỗi.............................................................544. Các phép tóan trên chuỗi : ..............545. Các hàm liên quan đến chuỗi :........556. Các thủ tục liên quan đến chuỗi .....56IV.Dữ liệu kiểu tập hợ p .....................591. Khai báo kiểu tập hợ p ....................592. Xác định một tập hợ p .....................59

3. Các phép trên tập hợ p ..................593.1 Phép gán: ................................... 593.2 Phép hợ  p: ....................................593.3 Phép giao : .................................603.4 Phép hiệu : .................................. 60

3.5 Phép thử IN (thuộc về ) :..............603.6 Các phép so sánh (=, <>, <=, >=) : .............................................................604. Các ví dụ  ........................................60V. Dữ liệu kiểu bản ghi :.....................63

1. Khái niệm .....................................63

2. Khai báo kiểu dữ liệu bản ghi ....... 633. Khai báo biến bản ghi: ..................644.Các phép thâm nhập vào biến bản ghi :

.............................................................64

Page 12: Lap Trinh Pascal-Vu Te Xien

5/14/2018 Lap Trinh Pascal-Vu Te Xien - slidepdf.com

http://slidepdf.com/reader/full/lap-trinh-pascal-vu-te-xien 12/205

 

M c l c  Trang 12

5. Câu lệnh WITH :...........................646. Mảng các bản ghi .........................65

VI. Dữ liệu kiểu tập tin ......................661. Khái niệm :......................................662. Tập tin có định kiểu .......................66

2.1 Cách khai báo kiể u t ậ p tin : ......662.2 Khai báo các biế n t ậ p tin : .........672.3 Cách khai báo tr ự c tiế  p các biế n t ậ p

tin : .....................................................672.4. Các thủ t ục chuẩ n: .....................672.5. Các hàm chuẩ n: ........................68

3. Tập tin văn bản : ............................. 703.1 Khai báo biế n t ậ p tin vă n bản ...70

3.2 Các thủ t ục dùng trong File vă n bản .............................................................714.So sánh tập tin văn bản vớ i tập tin địnhkiểu .....................................................725.Bài tập chươ ng 5 :............................74TÀI LIỆU THAM KHẢO .................76

Page 13: Lap Trinh Pascal-Vu Te Xien

5/14/2018 Lap Trinh Pascal-Vu Te Xien - slidepdf.com

http://slidepdf.com/reader/full/lap-trinh-pascal-vu-te-xien 13/205

 

Trưng Cao đng KTKT Bình Dương Biên so n : Vũ Bin

Ch ươ ng 1 : Ch ươ ng trình và thu t gi i  Trang 13

Chươ ng ICHƯƠ NG TRÌNH VÀ THUẬT GIẢI

I. Chươ ng trình (Program)1.Khái niệ  m

Chươ ng trình là một dãy liên tiếpcác lệnh. Thực hiện các lệnh đó gọi là thihành chươ ng trình. Các chươ ng trình đều

có các tính chất chung sau đây:- Các lệnh đượ c thi hành một cách

tuần tự, thi hành xong một lệnh mớ i thihành lệnh kế tiếp.

- Khi thi hành chươ ng trình cần

thêm dữ liệu từ bên ngòai, điều này làmcho chươ ng trình trở  nên phong phú vàtổng quát.

Chươ ng trình có thể đượ c viết bằng cácngôn ngữ lập trình khác nhau. 2.Ngôn ngữ l ậ p trình.

Có hàng trăm loại ngôn ngữ lập trìnhkhác nhau, mỗi loại ngôn ngữ  đều có cúpháp riêng của nó. Ngôn ngữ lập trình cóthể  đượ c phân chia thành 3 loại chính :

Page 14: Lap Trinh Pascal-Vu Te Xien

5/14/2018 Lap Trinh Pascal-Vu Te Xien - slidepdf.com

http://slidepdf.com/reader/full/lap-trinh-pascal-vu-te-xien 14/205

 

Trưng Cao đng KTKT Bình Dương Biên so n : Vũ Bin

Ch ươ ng 1 : Ch ươ ng trình và thu t gi i  Trang 14

ngôn ngữ máy, hợ p ngữ và ngôn ngữ cấpcao. 2.1 Ngôn ngữ máy 

Ngôn ngữ máy (mã máy) là ngôn ngữ nền tảng của bộ vi xử lý. Bao gồm các câulệnh là những dãy số nhị phân 0 và 1 rấtkhó đọc, khó viết . Chỉ có các chuyên giavề máy tính mớ i viết đượ c. Ư u điểm của

việc viết chươ ng trình bằng ngôn ngữ máylà lập trình viên có thể điều khiển máy tínhtrực tiếp và đạt đượ c chính xác điều mìnhmuốn làm, tốc độ thi hành chươ ng trìnhnhanh và kích thướ c chươ ng trình nhỏ.

Nhượ c điểm của chươ ng trình ngôn ngữ máy là thông thườ ng sẽ mất rất nhiều thờ igian để viết, rất khó đọc, khó tìm lỗi vàchươ ng trình phụ thuộc vào bộ vi xử lýnên chươ ng trình chỉ chạy đượ c trênnhững máy tính có cùng bộ vi xử lý mà

thôi. Ngôn ngữ máy còn đượ c gọi là ngônngữ cấp thấp (low-level language)  2.2  H ợ  p ngữ  

Page 15: Lap Trinh Pascal-Vu Te Xien

5/14/2018 Lap Trinh Pascal-Vu Te Xien - slidepdf.com

http://slidepdf.com/reader/full/lap-trinh-pascal-vu-te-xien 15/205

 

Trưng Cao đng KTKT Bình Dương Biên so n : Vũ Bin

Ch ươ ng 1 : Ch ươ ng trình và thu t gi i  Trang 15

Hợ p ngữ  đượ c phát triển nhằm giúpcác lập trình viên dễ nhớ  các chỉ thị củachươ ng trình hơ n. Các chươ ng trình hợ pngữ còn bao gồm các chỉ thị v ĩ mô (macroinstruction) có thể tạo ra nhiều lệnh mãmáy. Các chươ ng trình hợ p ngữ  đượ cchuyển sang mã máy thông qua mộtchươ ng trình đặc biệt gọi là trình hợ p dịch

(assembler). Mặc dù hợ p ngữ tươ ng đối dễ dùng hơ n mã máy nhưng hợ p ngữ vẫnđượ c xem là ngôn ngữ cấp thấp bở i vì nóvẫn còn rất gần vớ i từng thiết kế của máytính.

2.3 Ngôn ngữ cấp cao Ngôn ngữ cấp cao gần gũi hơ n vớ i ýniệm ngôn ngữ mà hầu hết mọi ngườ i đềubiết, nó bao gồm các danh từ, động từ, cácký hiệu, các liên hệ và các thao tác luận lý.Các yếu tố này có thể đượ c phối hợ p, liên

kết vớ i nhau tạo thành một hình thức củacâu. Các "câu" này đượ c gọi là các mệnhđề của chươ ng trình (program statement).Chính vì những đặc điểm này, các lập

Page 16: Lap Trinh Pascal-Vu Te Xien

5/14/2018 Lap Trinh Pascal-Vu Te Xien - slidepdf.com

http://slidepdf.com/reader/full/lap-trinh-pascal-vu-te-xien 16/205

 

Trưng Cao đng KTKT Bình Dương Biên so n : Vũ Bin

Ch ươ ng 1 : Ch ươ ng trình và thu t gi i  Trang 16

trình viên dễ dàng đọc và dễ học ngônngữ cấp cao hơ n so vớ i ngôn ngữ máyhoặc hợ p ngữ. Một lợ i điểm quan trọng làngôn ngữ cấp cao thông thườ ng không phụ thuộc vào máy tính, ngh ĩ a là các chươ ngtrình viết bằng ngôn ngữ cấp cao có thể chạy trên các loại máy tính khác nhau (sử dụng các bộ vi xử lý khác nhau).

2.4 Các ngôn ngữ l ậ p trình thông d ụ ng Hiện nay có rất nhiều ngôn ngữ lập

trình cấp cao là: BASIC, COBOL, C,FORTRAN, PASCAL.v.v.. Ngày nay còncó thêm rất nhiều các ngôn ngữ lập trình

hướ ng đối tượ ng rất tiện lợ i cho các lậptrình viên như : C++, Visual Basic , VisualC, Denphi, Javal .v.v..3.Trình thông dịch và biên dịch 

Mọi chươ ng trình đượ c viết bằng cácngôn ngữ không phải là ngôn ngữ máy

cuối cùng đều phải đượ c chuyển đổi sangngôn ngữ máy trướ c khi đượ c thi hành.Chươ ng trình ngôn ngữ cấp cao đượ c dịchsang ngôn ngữ máy bằng một trong hai

Page 17: Lap Trinh Pascal-Vu Te Xien

5/14/2018 Lap Trinh Pascal-Vu Te Xien - slidepdf.com

http://slidepdf.com/reader/full/lap-trinh-pascal-vu-te-xien 17/205

 

Trưng Cao đng KTKT Bình Dương Biên so n : Vũ Bin

Ch ươ ng 1 : Ch ươ ng trình và thu t gi i  Trang 17

cách: bằng trình biên dịch (compiler) hoặctrình thông dịch (interpreter). 3.1 Trình biên d  ị  ch :

Sẽ chuyển đổi toàn bộ chươ ng trìnhsang mã máy, rồi chứa kết quả vào đĩ a để có thể thi hành về sau. Trình biên dịch tạora một danh sách lỗi của tất cả mệnh đề trong chươ ng trình vi phạm cú pháp của

ngôn ngữ. Danh sách này giúp lập trìnhviên dễ dàng sửa đổi chươ ng trình. 3.2 Trình thông d  ị  ch :

Thay vì chuyển đổi toàn bộ chươ ngtrình nguồn như trình biên dịch, trình

thông dịch chỉ dịch từng lệnh và thi hànhtừng lệnh. Lợ i điểm của trình thông dịch làlập trình viên vẫn có thể chạy một chươ ngtrình vẫn còn lỗi cú pháp. Chỉ khi thôngdịch đến câu lệnh có lỗi cú pháp, quá trìnhthi hành chươ ng trình mớ i bị ngừng lại và

trình thông dịch sẽ thông báo lỗi. ngườ ilập trình căn cứ vào lỗi để sửa chữa.II.Thuật giải1. Ý ngh ĩ a

Page 18: Lap Trinh Pascal-Vu Te Xien

5/14/2018 Lap Trinh Pascal-Vu Te Xien - slidepdf.com

http://slidepdf.com/reader/full/lap-trinh-pascal-vu-te-xien 18/205

 

Trưng Cao đng KTKT Bình Dương Biên so n : Vũ Bin

Ch ươ ng 1 : Ch ươ ng trình và thu t gi i  Trang 18

Thuật giải là một phươ ng pháp, từngbướ c hướ ng dẫn, thể hiện lờ i giải của mộtvấn đề , một bài toán .

Trong khoa học máy tính, thuật giảiđượ c định nghĩ a là một dãy hữ u hạn cácbướ c thao tác  rõ ràng và có thể  thi hànhđượ c, quá trình hành động theo các bướ cnày phải d ừ ng và cho đượ c k ế t quả như  

mong muố n.2.Các đặc trư ng của thuật giải

Thuật giải có các đặc trưng cơ bản là : 2.1.Xác đị  nh : Mọi thuật giải đều phải

xác định rõ ràng, không mập mờ .

  2.2. H ữ u hạ n: Mọi thuật giải sau mộtsố hữu hạn bướ c phải kết thúc và cho rakết qủa.

 2.3: Đúng : Thuật khi thực hiện xongcác bướ c, phải cho ra kết quả đúng đắn.

Ngoài ra thuật giải có các đặc trưng

khác như : Đầu vào, đầu ra, tính hiệu qủavà tính tổng quát.3. Các phươ ng pháp biểu diễn thuật giải

Page 19: Lap Trinh Pascal-Vu Te Xien

5/14/2018 Lap Trinh Pascal-Vu Te Xien - slidepdf.com

http://slidepdf.com/reader/full/lap-trinh-pascal-vu-te-xien 19/205

 

Trưng Cao đng KTKT Bình Dương Biên so n : Vũ Bin

Ch ươ ng 1 : Ch ươ ng trình và thu t gi i  Trang 19

Trong thực tế ngườ i ta thườ ng có 2phươ ng pháp biểu diễn thuật :

- Dùng ngôn ngữ tự nhiên- Dùng Lưu đồ - Sơ  đồ 

 3.1. Ngôn ngữ tự nhiênNgườ i lập trình dùng ngôn ngữ của

mình để mô tả thuật toán. Ngườ i lập trìnhliệt kê có thứ tự các bướ c của thuật giải .

Tuy vậy thuật giải thườ ng dài dòng khóhiểu và thườ ng không theo một qui tắcnhất định.

Ví d ụ 1 : Thuật giải phươ ng trình bậc hai

ax

2

+bx+c=0 (a<>0)Bắt đầu1. Yêu cầu cho biết giá trị của 3 hệ số a, b,c2. Nếu a=0 thì

2.1. Yêu cầu đầu vào không đảm bảo.

2.2. Kết thúc giải thuật .3. Trườ ng hợ p a <> 0 thì

3.1. Tính giá trị ∆ = b2-4ac3.2. Nếu ∆ > 0 thì

Page 20: Lap Trinh Pascal-Vu Te Xien

5/14/2018 Lap Trinh Pascal-Vu Te Xien - slidepdf.com

http://slidepdf.com/reader/full/lap-trinh-pascal-vu-te-xien 20/205

 

Trưng Cao đng KTKT Bình Dương Biên so n : Vũ Bin

Ch ươ ng 1 : Ch ươ ng trình và thu t gi i  Trang 20

3.2.1. Phươ ng trình có hai nghiệmphân biệt x1 và x2 

3.2.2. Giá trị của hai nghiệm đượ ctính theo công thức sau

3.2.3. Kết thúc.3.3. Nếu ∆ = 0 thì

3.3.1. Phươ ng trình có nghiệm képx0 

3.3.2. Giá trị của nghiệm kép là :

x=-b/2a 3.3.3. Kết thúc.3.4. Nếu ∆ < 0 thì

3.4.1. Phươ ng trình vô nghiệm.Kết thúc.

Ví d ụ 2 :Thuật giải tìm hộp có trọng lượ ngnặng nhất

 Đặ t vấ n đề  : Có n hộp có khối lượ ngkhác nhau và một cái cân đĩ a. Hãy chỉ ra

a

b x

21

∆+−=

a

b x

22

∆−−=

Page 21: Lap Trinh Pascal-Vu Te Xien

5/14/2018 Lap Trinh Pascal-Vu Te Xien - slidepdf.com

http://slidepdf.com/reader/full/lap-trinh-pascal-vu-te-xien 21/205

 

Trưng Cao đng KTKT Bình Dương Biên so n : Vũ Bin

Ch ươ ng 1 : Ch ươ ng trình và thu t gi i  Trang 21

cách cân để tìm đượ c hộp có trọng lượ ngnặng nhất : Thuật giải cụ thể như sau:Bắt đầu

1. Nếu chỉ có 1 hộp (n=1) thì1.1. Hộp đó chính là hộp nặng nhất.1.2. Kết thúc giải thuật .

2. Ngượ c lại nếu có từ hai hộp trở lên(n>1)

2.1. Chọn hai hộp bất kỳ và đặt lênbàn cân.

2.2. Giữ lại hộ p nặ ng hơ n, cất hộpnhẹ hơ n sang chỗ khác.

3. Nếu còn hộp chưa đượ c cân thực

hiện các bướ c sau, nếu không còn hộp nàonữa, sang bướ c 5.3.1. Chọn một hộp bất kỳ và để lên

đĩ a cân còn trống.3.2. Giữ lại hộ p nặ ng hơ n, cất hộp

nhẹ hơ n sang chỗ khác.

4. Trở lại bướ c 3.5. Hộp còn lại trên cân chính là hộp

nặng nhất.Kết thúc.

Page 22: Lap Trinh Pascal-Vu Te Xien

5/14/2018 Lap Trinh Pascal-Vu Te Xien - slidepdf.com

http://slidepdf.com/reader/full/lap-trinh-pascal-vu-te-xien 22/205

 

Trưng Cao đng KTKT Bình Dương Biên so n : Vũ Bin

Ch ươ ng 1 : Ch ươ ng trình và thu t gi i  Trang 22

 3.2. Lư u đồ - sơ  đồ khố iLưu đồ hay sơ  đồ khối là một công cụ 

trực quan để diễn đạt các thuật giải. Biểudiễn thuật giải bằng lưu đồ sẽ giúp ngườ iđọc theo dõi đượ c sự phân cấp các trườ nghợ p và quá trình xử lý của thuật  toán .Phươ ng pháp lưu đồ thườ ng đượ c dùngtrong những thuật có tính rắc rối, khó theo

dõi đượ c quá trình xử lý.Trong thuật giải dùng lưu đồ 

thườ ng dùng các hình vẽ qui ướ c sau để mô tả các bướ c.

Chỉ đườ ng đi của dữ liệu

Chỉ điểm bắt đầu vàkết thúc.

Chứa các thao tác

xử lý

Page 23: Lap Trinh Pascal-Vu Te Xien

5/14/2018 Lap Trinh Pascal-Vu Te Xien - slidepdf.com

http://slidepdf.com/reader/full/lap-trinh-pascal-vu-te-xien 23/205

 

Trưng Cao đng KTKT Bình Dương Biên so n : Vũ Bin

Ch ươ ng 1 : Ch ươ ng trình và thu t gi i  Trang 23

Chỉ thao tác kiểmtra điều kiện

Ở trên chỉ là các ký hiệu cơ bản và thườ ng

đượ c dùng nhất. Trong thực tế, lưu đồ còncó nhiều ký hiệu khác nhưng thườ ng chỉ đượ c dùng trong những lưu đồ lớ n và phứctạp.

Ví d ụ1 : Lưu đồ thuật giải, giải Phươ ngtrình bậc hai.

 

a=0Thông báo saiNhập lại

D:=b2-4ac

D=0

Nhập b,c

Nhập a

Pt có nghiệm képx1,2=-b/2a

D>0 Pt có 2 nghiệmx1=-b+  D /2a

đ 

s

đ 

s

đ 

s

Bắt đầu

Page 24: Lap Trinh Pascal-Vu Te Xien

5/14/2018 Lap Trinh Pascal-Vu Te Xien - slidepdf.com

http://slidepdf.com/reader/full/lap-trinh-pascal-vu-te-xien 24/205

 

Trưng Cao đng KTKT Bình Dương Biên so n : Vũ Bin

Ch ươ ng 1 : Ch ươ ng trình và thu t gi i  Trang 24

Ví d ụ 2: Lưu đồ tìm phần tử lớ n nhất trongdãy số.

Page 25: Lap Trinh Pascal-Vu Te Xien

5/14/2018 Lap Trinh Pascal-Vu Te Xien - slidepdf.com

http://slidepdf.com/reader/full/lap-trinh-pascal-vu-te-xien 25/205

 

Trưng Cao đng KTKT Bình Dương Biên so n : Vũ Bin

Ch ươ ng 1 : Ch ươ ng trình và thu t gi i  Trang 25

Bài tập :1.Hãy viết thuật giải hệ phươ ng trình bậcnhất 2 ẩn số:

Bắt đầu

max:=a1

i:=2

i<=nn

ai>max  max>=ai

i:=i+1 

In max  Kết thúc

đ 

s

đ 

s

Page 26: Lap Trinh Pascal-Vu Te Xien

5/14/2018 Lap Trinh Pascal-Vu Te Xien - slidepdf.com

http://slidepdf.com/reader/full/lap-trinh-pascal-vu-te-xien 26/205

 

Trưng Cao đng KTKT Bình Dương Biên so n : Vũ Bin

Ch ươ ng 1 : Ch ươ ng trình và thu t gi i  Trang 26

a1x+b1y =c1a2x+b2y =c2

Biết rằng :

2.Viết thuật giải tim số lớ n nhất trong 3 số a, b, c.3.Viết thuật giải tìm số Fibonanci thứ nvớ i : F0 =1, F1=1, Fn=Fn-2+Fn-1 4.Viết thuật giải tim các số nguyên tố trong dãy số n số từ a1 .. an 

5.Viết giải thuật tìm USCLN, BSCNN của2 số a, b.6.Viết giải thuật tính tổng số lẻ , tổng số chẵn của dãy n số tự nhiên a1 . . an 7.Viết thuật giải tìm n! =1*2*3*. .*n.

8.Xác định dữ liệu vào và dữ liệu ra chocác thuật giải sau

 D

 Dx

abba

cbbc

ba

ba

bc

bc

 x =−

−==

2121

2121

22

11

22

11 D

 Dyabba

caaa

ba

baac

ac

 y =−

−==21212121

221122

11

Page 27: Lap Trinh Pascal-Vu Te Xien

5/14/2018 Lap Trinh Pascal-Vu Te Xien - slidepdf.com

http://slidepdf.com/reader/full/lap-trinh-pascal-vu-te-xien 27/205

 

Trưng Cao đng KTKT Bình Dương Biên so n : Vũ Bin

Ch ươ ng 1 : Ch ươ ng trình và thu t gi i  Trang 27

a.Kiểm tra xem ba số cho trướ c a, b, c cóthể là độ dài ba cạnh của một tam giác haykhông ?

b.Tính trung bình cộng của 2 số a, bc.Dùng một cốc phụ để tráo nướ c ở hai

cốc cho trướ cd.Tìm chu vi và diện tích của hình tròn

có bán kính cho trướ c

9.Có hai bình A và B . Bình A có dungtích 8 lít, bình B có dung tích 5 lít . Trìnhbày các bướ c thực hiện để lấy đượ c 2 lítnướ c.10.Viết thuật giải viết giải thuật xác định

ma trận đơ n vị.11.Viết thuật giải in ra ma trận chuyển vị của ma trận đã nhập trướ c.12.Viết thuật giải in ra ma trận tích cuả haima trận đã nhập trướ c.13. Có 3 bình A, B, C. Bình A có dung

tích 8 lít và đựng đầy 8 lít rượ u, bình B códung tích 5 lít, bình C có dung tích 3 lít.Trình bày các bướ c thực hiện để có đượ c 4lít rượ u ở bình A và 4 lít rượ u ở bình B.

Page 28: Lap Trinh Pascal-Vu Te Xien

5/14/2018 Lap Trinh Pascal-Vu Te Xien - slidepdf.com

http://slidepdf.com/reader/full/lap-trinh-pascal-vu-te-xien 28/205

 

Trưng Cao đng KTKT Bình Dương Biên so n : Vũ Bin

Ch ươ ng 2: Gi  i thi u Ngôn ng  Lp trình Pacal  Trang 28

Chươ ng 2GIỚ I THIỆU NGÔN NGỮ LẬP

TRÌNH PASCALI.Giớ i thiệu chung1.Xuất xứ  : PASCAL là ngôn ngữ lậptrình cấp cao đượ c giáo sư Niklaus Wirthở trườ ng đại học Kỹ thuật Zurich (Thụy s ĩ )thiết kế và công bố vào năm 1971. Ông đặt

tên cho ngôn ngữ của mình là Pascal để tưở ng nhớ nhà tóan học trẻ nổi tiếng ngườ iPháp ở  thế kỷ 17: Blaise Pascal, ngườ i đãsáng chế ra chiếc máy tính cơ khí đầu tiêncủa nhân loại.

Thành công của ngôn ngữ Pascal làở  chỗ: nó là ngôn ngữ đầu tiên đưa ra vàthể hiện đượ c khái niệm lập trình có cấutrúc. Ý tưở ng về một chươ ng trình có cấutrúc xuất phát từ suy ngh ĩ cho rằng có thể chia một bài lớ n, phức tạp thành nhiều bài

nhỏ, đơ n giản hơ n. Nếu mỗi bài nhỏ đượ cgiải quyết bằng một chươ ng trình con, thìkhi liên kết các chươ ng trình con này lại sẽ 

Page 29: Lap Trinh Pascal-Vu Te Xien

5/14/2018 Lap Trinh Pascal-Vu Te Xien - slidepdf.com

http://slidepdf.com/reader/full/lap-trinh-pascal-vu-te-xien 29/205

 

Trưng Cao đng KTKT Bình Dương Biên so n : Vũ Bin

Ch ươ ng 2: Gi  i thi u Ngôn ng  Lp trình Pacal  Trang 29

tạo nên một chươ ng trình lớ n giải quyếtđượ c bài ban đầu.

Bằng cách chia một chươ ng trìnhthành các chươ ng trình con như vậy, ngườ ithảo chươ ng có thể lập trình để giải quyếtriêng lẻ từng phần một, từng khối một,hoặc có thể tổ chức để nhiều ngườ i cùngtham gia, mỗi ngườ i phụ trách một vài

khối. Đặc biệt khi phải thay đổi hay sửachữa trong một khối thì điều đó sẽ ít ảnhhưở ng đến các khối khác.

Ngày nay, Ngôn ngữ Pascal đượ cdùng để viết các chươ ng trình ứng dụng

trong nhiều l ĩ nh vực. Vớ i văn phạm sángsủa, dễ hiểu, vớ i khả năng đủ mạnh, Pascalđượ c xem là ngôn ngữ thích hợ p nhất để giảng dạy ở  các trườ ng phổ thông và đạihọc.2. Turbo Pascal

Từ khi phần mềm Pascal của NiclauWirth ra đờ i các hãng phần mềm đã liêntục phát triển thành các Pascal riêng như :IOS Pascal chuẩn , IBM Pascal của

Page 30: Lap Trinh Pascal-Vu Te Xien

5/14/2018 Lap Trinh Pascal-Vu Te Xien - slidepdf.com

http://slidepdf.com/reader/full/lap-trinh-pascal-vu-te-xien 30/205

 

Trưng Cao đng KTKT Bình Dương Biên so n : Vũ Bin

Ch ươ ng 2: Gi  i thi u Ngôn ng  Lp trình Pacal  Trang 30

MicroSoft, Turbo Pascal của hãngBorland , nhưng Turbo Pascal (TP) cónhiều ưu điểm nên đượ c sử dụng rộng rãiđể giảng dạy.II.Sử dụng phần mềm Turbo Pascal1. Khở i động Turbo Pascal:

Trong phần này sẽ trình bày cách sử dụng Turbo Pascal phiên bản 7.0 thườ ng

đượ c dùng phổ biến hiện nay.1.1. Các tậ p tin chính củ a Turbo PascaL

: TP có hàng trăm tập tin nhưng để chạyđượ c Turbo Pascal 7.0, chỉ cần hai tập tinsau là đủ :

- TURBO.EXE : tập tin chính của TP- TURBO.TPL : tập tin chứa các thư viện của TP

Nếu muốn vẽ đồ họa thì phải có thêmcác tập tin : GRAPH.TPU là tập tin chứathư viện đồ họa, *.BGI là các tập tin màn

hình đồ họa, *.CHR là các tập tin tạokiểu chữ v.v..

Page 31: Lap Trinh Pascal-Vu Te Xien

5/14/2018 Lap Trinh Pascal-Vu Te Xien - slidepdf.com

http://slidepdf.com/reader/full/lap-trinh-pascal-vu-te-xien 31/205

 

Trưng Cao đng KTKT Bình Dương Biên so n : Vũ Bin

Ch ươ ng 2: Gi  i thi u Ngôn ng  Lp trình Pacal  Trang 31

Nếu muốn xem hướ ng dẫn sử dụngTurbo Pascal thì cần có thêm tập tinTURBO.HLP1.2. Khở i độ ng Turbo Pascal  

Thông thườ ng hiện nay các máy sử dụng hệ điều hành Windows nên có cáckhở i động như sau :

- Trườ ng hợ p có sẵn một Shortcut chứa

Turbo Pascal ở  trên Desktop : hãy Doubleclick vào biểu tượ ng Shortcut của TurboPascal.

- Trườ ng hợ p không có sẵn mộtShortcut chứa Turbo Pascal: hãy chọn lệnh

Start, chọn tiếp lệnh Run, rồi gõ vàođườ ng dẫn đầy đủ của tập tinTURBO.EXE, chẳng hạn:

C:\TP\TURBO.EXE , nếu khở i độngTP từ đĩ a C.

A:\TP\TURBO.EXE , nếu khở i động

TP từ đĩ a A.1.3. C ử  a sổ màn hình Turbo Pascal và

 cách chọ n l ệ  nh :

Page 32: Lap Trinh Pascal-Vu Te Xien

5/14/2018 Lap Trinh Pascal-Vu Te Xien - slidepdf.com

http://slidepdf.com/reader/full/lap-trinh-pascal-vu-te-xien 32/205

 

Trưng Cao đng KTKT Bình Dương Biên so n : Vũ Bin

Ch ươ ng 2: Gi  i thi u Ngôn ng  Lp trình Pacal  Trang 32

Trong cửa sổ này, dòng trên cùng làmột thực đơ n ngang, liệt kê 9 nhóm lệnh

chính của TP. Muốn chọn một lệnh trongthực đơ n này, có thể tiến hành theo mộttrong hai cách :

+ Cách 1: Gõ phím F10. Lúc này, trênthực đơ n xuất hiện một khung sáng(thườ ng là màu xanh). Muốn chọn lệnhnào thì gõ các phím mũi tên ↑ , ↓ để dờ i

khung sáng đến lệnh đó rồi Enter. Mộtthực đơ n con của lệnh vừa chọn hiện ra,

Con trỏ dùng để soạn thảo

chươ ng trình

Page 33: Lap Trinh Pascal-Vu Te Xien

5/14/2018 Lap Trinh Pascal-Vu Te Xien - slidepdf.com

http://slidepdf.com/reader/full/lap-trinh-pascal-vu-te-xien 33/205

 

Trưng Cao đng KTKT Bình Dương Biên so n : Vũ Bin

Ch ươ ng 2: Gi  i thi u Ngôn ng  Lp trình Pacal  Trang 33

gọi là thực đơ n hàng dọc. Ví dụ, khi chọnlệnh Save, ta chọn menu File, khi xuất

hiện menu hàng dọc, di chuyển mũi tên↑

,↓ dờ i khung sáng đến lệnh Save rồi Enter.Khi không muốn chọn lệnh nào thì gõ

phím ESC để trở về vùng soạn thảo.+ Cách 2 : Chọn một lệnh trong thực

đơ n ngang bằng cách gõ đồng thờ i phím

Alt vớ i phím chữ cái đầu tiên của tên lệnhmuốn chọn. Ví dụ, muốn chọn menu Filethì gõ đồng thờ i hai phím Alt và F (viết tắtlà Alt-F), tươ ng tự, muốn chọn menuCompile thì gõ Alt-C.

+ Cách 3 : Dùng phím gõ tắt Có một số lệnh đượ c gán cho nhữngphím đặc biệt gọi là phím "gõ tắt”, ví dụ lệnh Open: F3, lệnh Save : F2, lệnh Exit :Alt-X. Để thực hiện những lệnh này, thayvì phải chọn nó từ trong thực đơ n, ta chỉ cần gõ phím nóng tươ ng ứng vớ i nó. Ví dụ, thay vì chọn lệnh Open thì gõ phím F3,thay vì chọn lệnh Save thì gõ phím F2,...

Page 34: Lap Trinh Pascal-Vu Te Xien

5/14/2018 Lap Trinh Pascal-Vu Te Xien - slidepdf.com

http://slidepdf.com/reader/full/lap-trinh-pascal-vu-te-xien 34/205

 

Trưng Cao đng KTKT Bình Dương Biên so n : Vũ Bin

Ch ươ ng 2: Gi  i thi u Ngôn ng  Lp trình Pacal  Trang 34

Dướ i thực đơ n ngang là vùng soạn thảodùng để gõ chươ ng trình vào. Đầu củavùng này hiện tên của tập tin đang soạn,và nếu ngườ i thảo chươ ng chưa đặt tên thìTP sẽ  đặt một tên mặc nhiên làNONAME00.PAS.

Dòng cuối cùng tóm tắt một số phím "gõ tắt" hay dùng, như phím F1 để xem

hướ ng dẫn, phím F2 để lưu tập tin lên đĩ a,phím F3 dùng để mở  xem một tập tin,phím F10 để khở i động thực đơ n,.v.v.1.4. Thoát khỏi Turbo Pascal  

Chọn lệnh File trong thực đơ n ngang,

chọn tiếp lệnh Exit trong thực đơ n dọc(viết gọn là chọn lệnh File/ Exit) hoặc gõcặp phím gõ tắt Alt-X1.5. Các bướ  c thự  c hiệ  n mộ t chươ  ng

 trình Pascal Để soạn và chạy một chươ ng trình

Pascal trong Turbo Pascal, nên tiến hànhcác bướ c như sau:

- Bướ c 1: Khở i động Turbo Pascal

Page 35: Lap Trinh Pascal-Vu Te Xien

5/14/2018 Lap Trinh Pascal-Vu Te Xien - slidepdf.com

http://slidepdf.com/reader/full/lap-trinh-pascal-vu-te-xien 35/205

 

Trưng Cao đng KTKT Bình Dương Biên so n : Vũ Bin

Ch ươ ng 2: Gi  i thi u Ngôn ng  Lp trình Pacal  Trang 35

- Bướ c 2: Nhấn F2 đặt tên cho chươ ngtrình.

- Bướ c 3: Soạn thảo ( gõ ) chươ ng trình.

Bạn hãy gõ chươ ng trình mẫu sauvào vùng soạn thảo của Turbo Pascal :

-Bướ c 4: Dịch và sửa lỗi:Chọn lệnh Compile/ Compile (hoặc gõ

cặp phím Alt-F9 hay F9). Máy sẽ dịchchươ ng trình sang mã máy, nếu gặp lỗi thì

Page 36: Lap Trinh Pascal-Vu Te Xien

5/14/2018 Lap Trinh Pascal-Vu Te Xien - slidepdf.com

http://slidepdf.com/reader/full/lap-trinh-pascal-vu-te-xien 36/205

 

Trưng Cao đng KTKT Bình Dương Biên so n : Vũ Bin

Ch ươ ng 2: Gi  i thi u Ngôn ng  Lp trình Pacal  Trang 36

dừng và hiện thông báo lỗi màu đỏ ở  đầumàn hình, đồng thờ i con trỏ đặt ở vị trí cólỗi. Ngườ i thảo chươ ng phải tự mình sửalỗi, rồi gõ Alt-F9 để dịch và sửa lỗi tiếpcho đến khi hết lỗi. Dấu hiệu cho biết việcdịch đã xong là màn hình xuất hiện cửa sổ thông báo có dòng chữ đặc trưng là:

- Bướ c 5: Lưu trữ lại chươ ng trình lên đĩ a:chọn lệnh File/ Save hoặc gõ phím F2.

- Bướ c 6: Chạy thử chươ ng trình: Chọnlệnh Run/ Run hoặc gõ phím nóng Ctrl-F9(viết tắt là ^F9). Mỗi lần chạy thử, ta cầnnhập một bộ dữ liệu cụ thể và kiểm traxem kết qủa in lên màn hình có đúng

không và có phù hợ p vớ i thực tiễn không?.Nếu sai cần kiểm tra lại.2. Một vài kỹ thuật trong soạn thảo 2.1. Thao tác trên khố i:

Page 37: Lap Trinh Pascal-Vu Te Xien

5/14/2018 Lap Trinh Pascal-Vu Te Xien - slidepdf.com

http://slidepdf.com/reader/full/lap-trinh-pascal-vu-te-xien 37/205

 

Trưng Cao đng KTKT Bình Dương Biên so n : Vũ Bin

Ch ươ ng 2: Gi  i thi u Ngôn ng  Lp trình Pacal  Trang 37

Ta gọi khối là một đoạn văn bản gồmmột hay nhiều dòng liên tiếp. Ký tự đầutiên của khối gọi là đầu khối, ký tự cuốicùng của khối gọi là cuối khối. Dướ i đâylà một khối gồm hai dòng lệnh:

Write(‘ Nhap chieu dai va chieurong hinh chu nhat: ‘);

Readln(a,b);a) Đánh dấu khối:

- Đưa con trỏ về đầu khối- Giữ phím Shift, đồng thờ i nhấn

liên tiếp các phím mũi tên →, ↓ kéo vùngsáng phủ đến cuối khối.

b) Sao chép khối:- Đánh dấu khối cần sao chép- Đưa con trỏ đến nơ i cần chép tớ i- Gõ lệnh ^K_C

c) Di chuyển khối:- Đánh dấu khối cần di chuyển- Đưa con trỏ đến nơ i cần chuyển

khối tớ i

Page 38: Lap Trinh Pascal-Vu Te Xien

5/14/2018 Lap Trinh Pascal-Vu Te Xien - slidepdf.com

http://slidepdf.com/reader/full/lap-trinh-pascal-vu-te-xien 38/205

 

Trưng Cao đng KTKT Bình Dương Biên so n : Vũ Bin

Ch ươ ng 2: Gi  i thi u Ngôn ng  Lp trình Pacal  Trang 38

-Gõ lệnh ^K_Vd) Xóa khối:

- Đánh dấu khối cần xóa- Gõ lệnh ^K_Y

e) Che hoặc hiện lại khối đã đánh dấu :lệnh ^K_H

2 .2. Các phím l ệ  nh soạ n thả o thông d ụ ng

- Phím Home : đưa con trỏ về đầu dònghiện thờ i

- Phím End : đưa con trỏ về cuối dònghiện thờ i

- Phím Delete : xóa ký tự ngay tại vị trí 

con trỏ. Nếu con trỏ đang đứng ở  cuố i củadòng trên mà gõ phím Delete thì sẽ nốidòng dướ i vào cuối dòng trên.

-Phím Back Space : Xóa ký tự trướ ccon trỏ.

- Cặp phím Ctrl_Y: xóa toàn bộ dòng

hiện thờ i và đôn các dòng ở dướ i lên.- Nhóm phím Ctrl_Q_Y : xóa từ vị trí 

con trỏ đến cuối dòng.

Page 39: Lap Trinh Pascal-Vu Te Xien

5/14/2018 Lap Trinh Pascal-Vu Te Xien - slidepdf.com

http://slidepdf.com/reader/full/lap-trinh-pascal-vu-te-xien 39/205

 

Trưng Cao đng KTKT Bình Dương Biên so n : Vũ Bin

Ch ươ ng 2: Gi  i thi u Ngôn ng  Lp trình Pacal  Trang 39

- Các phím →, ← ,↑, ↓ : dờ i con trỏ theo hướ ng mũi tên.

- Phím Insert :Dùng để chuyển đổi chế độ chèn đè- Phím Enter : Xuống dòngTrong chế độ viết chèn: gõ Enter có tác

dụng đưa con trỏ xuống đầu dòng dướ i, dođó toàn bộ các chữ đứng sau con trỏ (nếu

có) sẽ bị cắt xuống dòng dướ i. Khi con trỏ đang đứng ở  đầu một dòng mà Enter thì sẽ tạo ra một dòng trống ngay tại vị trí đó.III. Các phần tử cơ bản của ngôn ngữ  Pascal

1.Tập ký tự cơ bản : Mỗi ngôn ngữ đềuđượ c xây dựng từ một tập ký tự nào đó.Ngôn ngữ Pascal đượ c xây dựng trên bộ ký tự cơ bản, gồm:

- Các chữ cái la tinh: A, B, C,...,Z, a, b,c,..., z

- Các chữ số :0, 1, 2, 3, 4, 5, 6, 7, 8, 9- Các ký hiệu đặc biệt: +, -, *, /, =, <, {,

}, [, ], %, $, &, #, ...

Page 40: Lap Trinh Pascal-Vu Te Xien

5/14/2018 Lap Trinh Pascal-Vu Te Xien - slidepdf.com

http://slidepdf.com/reader/full/lap-trinh-pascal-vu-te-xien 40/205

 

Trưng Cao đng KTKT Bình Dương Biên so n : Vũ Bin

Ch ươ ng 2: Gi  i thi u Ngôn ng  Lp trình Pacal  Trang 40

- Ký tự gạch nối ‘_’ và ký tự trắng ‘ ‘ (space)2. Từ khóa (Keyword)

Có một số từ đượ c Pascal dành riêngcho việc xây dựng các câu lệnh, các khaibáo, các phép tính,... gọi là từ khóa. Ngườ ilập trình không đượ c đặt một tên mớ i (tênbiến, tên hằng, tên hàm, tên thủ tục,...)

trùng vớ i một trong các từ khóa. Dướ i đâylà danh sách các từ khóa của Pascal :

Absolute, and, array, begin, case, const,div, do, downto, else, end, file, for,forward, function, goto, if,

implementation, in, inline, interface,interrupt, label, mod, nil, not, of, or,packed, procedure, program, record,repeat, set, shl, shr, string, then, to, type,unit, until, uses, var, while, with, xor

Các t ừ khóa có thể viế t d ướ i d ạng

chữ hoa hay chữ thườ ng hay xen k ẽ chữ  hoa vớ i chữ thườ ng đề u đượ c. Ví dụ viếtbegin hay Begin hay BEGIN là như nhau.3.Tên (identifier)

Page 41: Lap Trinh Pascal-Vu Te Xien

5/14/2018 Lap Trinh Pascal-Vu Te Xien - slidepdf.com

http://slidepdf.com/reader/full/lap-trinh-pascal-vu-te-xien 41/205

 

Trưng Cao đng KTKT Bình Dương Biên so n : Vũ Bin

Ch ươ ng 2: Gi  i thi u Ngôn ng  Lp trình Pacal  Trang 41

Các biến, các hằng, các hàm, cácthủ tục, ... đượ c sử dụng trong chươ ngtrình đều cần phải đặt tên, còn gọi là địnhdanh hay danh hiệu. Các tên này do ngườ ithảo chươ ng tự đặt và phải đảm bảo đúngquy tắc: tên phải bắt đầu bằng chữ cái, kế đó có thể là chữ cái, chữ số, hay dấu gạchnối ‘_’. Tên không đượ c đặt trùng vớ i từ 

khóa. Chiều dài của tên tối đa là 127 ký tự.Thông thườ ng tên nên đặt ngắn gọn và cótính gợ i nhớ .

Ví dụ:Delta, X1, X2, i, j , Chuc_vu,Luong,Phuong_Trinh_Bac_Hai…

4.Tên chuẩnTrong Pascal có một số tên đãđượ c đặt sẵn rồi, gọi là tên chuẩn, chẳnghạn : Abs, Arctan, Boolean, Byte, Char,Cos, Copy, Delete, Eof, False, Longint,Ord, Integer, Real, Readln, Writeln, True,

Text, ...Pascal có thể cho phép ngườ i thảo

chươ ng đặ t lại tên chuẩ n, như ng khôngnên đặ t lại.

Page 42: Lap Trinh Pascal-Vu Te Xien

5/14/2018 Lap Trinh Pascal-Vu Te Xien - slidepdf.com

http://slidepdf.com/reader/full/lap-trinh-pascal-vu-te-xien 42/205

 

Trưng Cao đng KTKT Bình Dương Biên so n : Vũ Bin

Ch ươ ng 2: Gi  i thi u Ngôn ng  Lp trình Pacal  Trang 42

5.Câu lệnh trong PascalCâu lệnh là phần việc mà chươ ng trình

phải thực hiện để xử lý dữ liệu đã đượ ckhai báo. Trong chươ ng trình các câu lệnhđượ c viết cách nhau một dấu chấm phảy(;). Có 2 loại : Câu lệnh đơ n và lệnh ghép.5.1 Câu lệnh đơ n giản : Bao gồm cáclệnh

+Lệnh gán (:=) : Dùng để gán giá trị cho biến số đã khai báo

-Dạng lệnh : Biến số := Biểuthức; Ví dụ : x:=10; d:=a*b;

+Lệnh Gọi thủ tục : Dùng để gọi thủ 

tục trong chươ ng trình-Dạng lệnh <Tên thủ tục> Ví dụ: Clrscr; Halt;5.2 Lệnh ghép : Bao gồm một nhóm lệnhtừ 2 lệnh trở lên đượ c đặt trong hai từ khoáBegin và End;

Ví dụ : BeginTG:=A; A:=B;B:=TG;

End;IV. Cấu trúc của chươ ng trình Pascal

Page 43: Lap Trinh Pascal-Vu Te Xien

5/14/2018 Lap Trinh Pascal-Vu Te Xien - slidepdf.com

http://slidepdf.com/reader/full/lap-trinh-pascal-vu-te-xien 43/205

 

Trưng Cao đng KTKT Bình Dương Biên so n : Vũ Bin

Ch ươ ng 2: Gi  i thi u Ngôn ng  Lp trình Pacal  Trang 43

1.Cấu trúc chung Chươ ng trình là một dãy các câu lệnh

chỉ thị cho máy các công việc phải thựchiện. Một chươ ng trình Pascal đầy đủ gồmba phần chính :

- Phần tiêu đề  - Phần khai báo- Phần thân chươ ng trình

1.1. Phần tiêu đề chươ ng trìnhPhần này bắt đầu bằng từ khóa

Program, tiếp đến là tên chươ ng trình dongườ i sử dụng tự đặt, cuối cùng kết thúcbằng dấu chấm phẩy ‘;’. 

Ví dụ : Program Btap1; hoặc :Program Giai_pt_bac2; Phần tiêu đề chiếm một dòng, còn gọi

là phần đầu của chươ ng trình ( nó có thể  không có). 

1.2. Phần khai báo

Phần khai báo có nhiệm vụ giớ i thiệuvà mô tả các đối tượ ng, các đại lượ ng sẽ tham gia trong chươ ng trình

Nó gồm có 7 loại khai báo sau .

Page 44: Lap Trinh Pascal-Vu Te Xien

5/14/2018 Lap Trinh Pascal-Vu Te Xien - slidepdf.com

http://slidepdf.com/reader/full/lap-trinh-pascal-vu-te-xien 44/205

 

Trưng Cao đng KTKT Bình Dương Biên so n : Vũ Bin

Ch ươ ng 2: Gi  i thi u Ngôn ng  Lp trình Pacal  Trang 44

- USES Khai báo đơ n vị sử dụng(Unit)

- LABEL Khai báo nhãn, - CONST Khai báo hằng- TYPE khai báo kiểu dữ liệu mớ i, - VAR Khai báo biến - PROCEDURE khai báo các chươ ng

trình con là thủ tục 

- PUNCTION Khai báo các chươ ngtrình con là hàm.

Tùy theo yêu cầu cụ thể mà mỗ i khai báonày có thể có hoặ c không có khai báo.1.3. Phần thân chươ ng trình

Đây là phần chủ yếu nhất của mộtchươ ng trình, bắ t buộc phải có.Thân chươ ng trình bắt đầu bằng từ khóaBEGIN và kết thúc bằng END. (có dấuchấm ở cuối). Giữa khối BEGIN và ENDlà các lệnh, mỗi lệnh phải kết thúc bằng

dấu chấm phẩy ‘;’.Begin

Các lệnh;End.

Page 45: Lap Trinh Pascal-Vu Te Xien

5/14/2018 Lap Trinh Pascal-Vu Te Xien - slidepdf.com

http://slidepdf.com/reader/full/lap-trinh-pascal-vu-te-xien 45/205

 

Trưng Cao đng KTKT Bình Dương Biên so n : Vũ Bin

Ch ươ ng 2: Gi  i thi u Ngôn ng  Lp trình Pacal  Trang 45

2.Khai báo trong chươ ng trình TurboPascal 

2.1 Khai báo đơ n vị sử dụng (Unit)Turbo Pascal có sẵn trên 300 hàm và

thủ tục chuẩn, chúng đượ c phân thànhtừng nhóm theo chức năng, gọi là các thư viện hay đơ n vị chươ ng trình ( Unit) baogồm : System, Crt, Graph, Dos, Printer,

.v.v. . Muốn sử dụng các hàm hay thủ tụccủa đơ n vị nào, trừ System còn lại ta phảikhai báo, Cách khai báo như sau :

Uses Tendonvi ;Ví d ụ : - Muốn sử dụng đơ n vị CRT

Uses CRT ;- Muốn sử dụng cả hai thư viện CRTvà GRAPH, ta khai báo :

Uses CRT, GRAPH ;Chú thích : M ộ t số hàm và thủ tụ c trongđơ  n v ị sử d ụ ng màn hình CRT 

+Thủ tụ c ClsScr- Dạng thủ t ục: ClrScr;- Chứ c nă ng : Xóa màn hình kết quả ,

đưa con trỏ về tọa độ 1,1

Page 46: Lap Trinh Pascal-Vu Te Xien

5/14/2018 Lap Trinh Pascal-Vu Te Xien - slidepdf.com

http://slidepdf.com/reader/full/lap-trinh-pascal-vu-te-xien 46/205

 

Trưng Cao đng KTKT Bình Dương Biên so n : Vũ Bin

Ch ươ ng 2: Gi  i thi u Ngôn ng  Lp trình Pacal  Trang 46

+Thủ tụ c GotoXY - Dạng thủ t ục : GotoXY(x,y);- Chứ c nă ng : Đưa con trỏ đến tọa độ 

cột x, dòng y- Ví dụ : GotoXY(10,5) : Đưa con trỏ 

về tọa độ cột 10, dòng 5.+Thủ tụ c Delay 

- Dạng thủ t ục Delay(time)

- Chứ c nă ng : Dừng thực hiện chươ ngtrình time miligiây.

-Ví dụ : Delay(200);+Thủ tụ c TextColor 

- Dạng thủ tục TextColor(màu)

- Định mà cho dòng chữ viết lên mànhình theo bảng màu sau :

Color

Màu Color

Màu Color

Màu

0 Black 6 Brown 12 LightRed

1 Blue 7 LightGray

13 LightMagenta

2 Green 8 DarkGray

14 Yellow

Page 47: Lap Trinh Pascal-Vu Te Xien

5/14/2018 Lap Trinh Pascal-Vu Te Xien - slidepdf.com

http://slidepdf.com/reader/full/lap-trinh-pascal-vu-te-xien 47/205

 

Trưng Cao đng KTKT Bình Dương Biên so n : Vũ Bin

Ch ươ ng 2: Gi  i thi u Ngôn ng  Lp trình Pacal  Trang 47

3 Cyan 9 LightBlue

15 Whlte

4 Red 10 LightGreen5 Mage

nta11 LightC

yan

Ví dụ : Tectcolor(Red) hay

Textcolor(4)2.2 Khai báo hằng số 

Hằng là đại lượ ng có gía trị không đổi,để khai báo hằng ta dùng từ khóa Constcách khai báo như sau :

Const Tên_hằng_số = Hằng số ;Ví dụ : Const N=10 ;

2.3 Khai báo biến số Biến là đại lượ ng có giá trị thay đổi

trong chươ ng trình, chúng đượ c dùngtrong chươ ng trình để lưu trữ các dữ liệu,tham gia vào các biểu thức tính và các quátrình xử lý trong máy. Cách khai báo biếnsố như sau :

Page 48: Lap Trinh Pascal-Vu Te Xien

5/14/2018 Lap Trinh Pascal-Vu Te Xien - slidepdf.com

http://slidepdf.com/reader/full/lap-trinh-pascal-vu-te-xien 48/205

 

Trưng Cao đng KTKT Bình Dương Biên so n : Vũ Bin

Ch ươ ng 2: Gi  i thi u Ngôn ng  Lp trình Pacal  Trang 48

Var Tên_biến_số : kiểu dữ liệu;Ví dụ : Var

x, y : Real ;i, k : Integer;

2.4 Khai báo (định ngh ĩ a) một kiểu dữ  liệu mớ i

Ngoài các kiểu dữ liệu mà bản thân

ngôn ngữ  đã có sẵn như kiểu thực, kiểunguyên, kiểu ký tự, kiểu lôgic,.v.v. ngườ idùng có thể tự xây dựng các kiểu dữ liệumớ i phục vụ cho chươ ng trình của mình,nhưng phải mô tả sau từ khóa TYPE cách

khai báo như sau :TYPE Tên kiểu dữ liệu mớ i = kiểu

dữ liệu mớ i Ví dụ, ta định ngh ĩ a một kiểu dữ liệu mớ icó tên là Mang :

Type Mang = Array[1..10] of Real; 

3.Ví dụ  Viết chươ ng trình cho phép nhậpvào họ tên, mã số, các điểm Toán, Lý của

Page 49: Lap Trinh Pascal-Vu Te Xien

5/14/2018 Lap Trinh Pascal-Vu Te Xien - slidepdf.com

http://slidepdf.com/reader/full/lap-trinh-pascal-vu-te-xien 49/205

 

Trưng Cao đng KTKT Bình Dương Biên so n : Vũ Bin

Ch ươ ng 2: Gi  i thi u Ngôn ng  Lp trình Pacal  Trang 49

một sinh viên, tính điểm trung bình theocông thức : Dtb=(Toan+ly)/2

In Họ tên, mã số, các điểm Tóan, Lývà điểm trung bình của sinh viên đó lênmàn hình.PROGRAM VIDU;Uses CRT;

Var Ho_ten, Maso : String[20];

Toan, Ly, Dtb : Real;Begin

Write(‘ Nhap Ho va ten : ‘);Readln(Ho_ten);

Write(‘ Nhap ma so : ‘);

Readln(Maso);Write(‘ Nhap diem Toan : ‘);Readln(Toan);

Write(‘ Nhap diem Ly : ‘); Readln(Ly);Dtb:= (Toan+Ly) / 2;

{ In lên màn hình các dữ liệu về sinh

viên }TextBackGround(Green); { đặt màu

nền là Green }

Page 50: Lap Trinh Pascal-Vu Te Xien

5/14/2018 Lap Trinh Pascal-Vu Te Xien - slidepdf.com

http://slidepdf.com/reader/full/lap-trinh-pascal-vu-te-xien 50/205

 

Trưng Cao đng KTKT Bình Dương Biên so n : Vũ Bin

Ch ươ ng 2: Gi  i thi u Ngôn ng  Lp trình Pacal  Trang 50

TextColor(Red); { đặt màu chữ làRed}Clrscr ;

Writeln(‘ KET QUA THI CUA SINHVIEN:’);

Writeln(‘Ho va ten : ‘, Ho_ten);Writeln(‘Ma so : ‘, Maso);Writeln(‘Diem Toan : ‘, Toan:3:1);

Writeln(‘Diem Ly : ‘, Ly:3:1);Writeln(‘Diem Tbinh : ‘, Dtb:3:1);Readln;

END.

Ghi chú : Để soạn và chạy đượ c mộtchươ ng trình như trên cần phải biết sử dụng phần mềm Turbo Pascal ( viết tắt làTP ).IV.Các kiểu dữ liệu đơ n giản dùngtrong Pascal

Trong TP dùng một số kiểu dữ liệu gọilà dữ liệu đơ n giản chuẩn như sau:

Page 51: Lap Trinh Pascal-Vu Te Xien

5/14/2018 Lap Trinh Pascal-Vu Te Xien - slidepdf.com

http://slidepdf.com/reader/full/lap-trinh-pascal-vu-te-xien 51/205

 

Trưng Cao đng KTKT Bình Dương Biên so n : Vũ Bin

Ch ươ ng 2: Gi  i thi u Ngôn ng  Lp trình Pacal  Trang 51

1.Kiểu nguyên : Dùng để biểu diễn các số nguyên, phạm vi biểu diễn của số nguyêntừ 1 byte đến 4 byte :

Tênkiểu

Phạm vi gía trị Số byte

ShortInt -128 .. 127 1Byte 0..255 1Integer -32768 ..

32767

2

Word 0 .. 65535 2LongInt -2147483648 ..

21474836474

+Các phép toán trên kiểu nguyên :

- Các phép toán : C ộng(+), tr ừ (-),nhân(*),chia(/)- Phép chia lấ  y phần nguyên (DIV) :

10 Div 3 =3, 10 div 5 =2.- Phép chia lấ  y phần d ư (Mod) : 15

mod 5 =0, 16 mod 3 =1.+ Các hàm có đối số nguyên :

- Hàm PRED(k):đối số k nguyên, trả về số nguyên đứng ngay trướ c k, tức là k-

Page 52: Lap Trinh Pascal-Vu Te Xien

5/14/2018 Lap Trinh Pascal-Vu Te Xien - slidepdf.com

http://slidepdf.com/reader/full/lap-trinh-pascal-vu-te-xien 52/205

 

Trưng Cao đng KTKT Bình Dương Biên so n : Vũ Bin

Ch ươ ng 2: Gi  i thi u Ngôn ng  Lp trình Pacal  Trang 52

1 Ví dụ: Pred (5) = 4, Pred (-6) =-7.- Hàm SUCC(k) : đối số k nguyên, trả 

về số nguyên đứng ngay sau k, tức là k+1Ví dụ: Succ (5) = 6, Succ (-6) = -

5.+Các thủ tục có đối số nguyên:Có hai thủ tục khá thông dụng là:

-Thủ t ục INC(k) : tăng k lên một đơ nvị. Ví dụ, sau khi thực hiện các lệnh :k:=5; Inc(k); thì gía trị sau cùng của k là6.

Vậy, lệnh Inc(k); tươ ng đươ ng vớ i lệnh

k:=k+1; hay k:=Succ(k);-Thủ t ục DEC(k) : giảm k đi một đơ nvị. Ví dụ, sau khi thực hiện các lệnh :k:=5; Dec(k); thì gía trị của k sẽ là 4.

Vậy, lệnh Dec(k) ; tươ ng đươ ng vớ i lệnhk:=k-1; hay k:=Pred(k);

2.Kiểu thự c : Dùng để biểu diễn các số thực, phạm vi biểu diễn của số thực từ 4đến 10 byte.

Tên kiểu Phạm vi gía Số 

Page 53: Lap Trinh Pascal-Vu Te Xien

5/14/2018 Lap Trinh Pascal-Vu Te Xien - slidepdf.com

http://slidepdf.com/reader/full/lap-trinh-pascal-vu-te-xien 53/205

 

Trưng Cao đng KTKT Bình Dương Biên so n : Vũ Bin

Ch ươ ng 2: Gi  i thi u Ngôn ng  Lp trình Pacal  Trang 53

trị byte Real 2.9*10-39 ..

1.7*10

38

 

6

Single 1.5*10-45 ..3.4*1038 

4

Double 5.0*10-324 ..1.7*10308 

8

Extended 3.4*10-4932 ..

1.1*104932 

10

Comp -9.2*1018 ..9.2*1018 

8

+Các phép toán trên số thực :Có 4 phép toán số học là nhân (*), chia

(/), cộng (+) và trừ (-). Khi một trong cácsố hạng tham gia tính toán là kiểu thực thìkết qủa của phép toán cũng là một số thực.(Phép toán DIV, MOD không dùng chocác số thự c. )+Các hàm có đố i số nguyên hoặ c thự  c

-Hàm ABS(x): tính trị tuyệt đối củax Ví dụ: Abs(5 - 8) = 3

-Hàm SQR(x): tính bình phươ ng củax: Ví dụ: Sqr(4.0) = 16.0, Sqr(2) = 4

Page 54: Lap Trinh Pascal-Vu Te Xien

5/14/2018 Lap Trinh Pascal-Vu Te Xien - slidepdf.com

http://slidepdf.com/reader/full/lap-trinh-pascal-vu-te-xien 54/205

 

Trưng Cao đng KTKT Bình Dương Biên so n : Vũ Bin

Ch ươ ng 2: Gi  i thi u Ngôn ng  Lp trình Pacal  Trang 54

Trong các hàm dướ i đây, đối số x có thể là nguyên hay thực, nhưng gía trị trả về luôn luôn là kiể u thự c:

-Hàm SQRT(x): tính , (x ? 0)-Hàm EXP(x) : tính ex - Hàm LN(x): tính lnx, (x > 0)- Các hàm SIN(x), COS(x), và

 ARCTAN(x): tính sinx, cosx và arctgx.

- Hàm INT(x) : cho số thực bằng phầnnguyên của x. Ví dụ :

Int(12.55) = 12.0Int(1+10/3)=4.0

-Hàm FRAC(x) : cho số thực bằng

phần lẻ của x. Ví dụ :Frac(12.55) = 0.55 Hai hàm đặ c biệt d ướ i đ ây cho k ế t qủa

là số nguyên:-Hàm TRUNC(x): cho số nguyên là

phần nguyên của x. Ví dụ :

Trunc(12.55) = 12Trunc(-2.98) = -2

- Hàm ROUND(x): cho số nguyênbằng cách làm tròn x. Ví dụ :

Page 55: Lap Trinh Pascal-Vu Te Xien

5/14/2018 Lap Trinh Pascal-Vu Te Xien - slidepdf.com

http://slidepdf.com/reader/full/lap-trinh-pascal-vu-te-xien 55/205

 

Trưng Cao đng KTKT Bình Dương Biên so n : Vũ Bin

Ch ươ ng 2: Gi  i thi u Ngôn ng  Lp trình Pacal  Trang 55

Round(12.45) = 12Round(-2.98) = -3

3.Kiểu ký tự  (Char): Nhận một trong cácký tự trong bảng mã ASCII, Mỗi ký tự trong bảng mã ASCII gọi là một hằng kýtự, chiếm độ dài 1 byte, và khi viết trongPascal phải đượ c đặt trong cặp nháy đơ n:‘0’, ‘1’, ‘A’, ‘B’, ‘$’,...

+Các hàm liên quan đến ký tự :- Hàm PRED(ch): cho ký tự đứng ngay

trướ c ký tự ch trong bảng mã.Ví dụ: Pred(‘B’)=‘A’

- Hàm SUCC(ch): cho ký tự đứng ngay

sau ký tự ch trong bảng mã.Ví dụ: Succ(‘A’)=‘B’.- Hàm UpCase(ch): đổi ký tự ch thành

chữ hoa.Ví dụ: Upcase( ‘a’ ) = ‘A’, Upcase(

‘b’ ) = ‘B’, Upcase( ‘A’ ) = ‘A’ .

- Hàm ORD(ch) : cho mã của ký tự ch.Ví dụ: Ord (‘A’) = 65, Ord (‘a’) = 97 .

- Hàm CHR(k) : đối số k nguyên, 0< k< 255, cho ký tự có mã bằng k.

Page 56: Lap Trinh Pascal-Vu Te Xien

5/14/2018 Lap Trinh Pascal-Vu Te Xien - slidepdf.com

http://slidepdf.com/reader/full/lap-trinh-pascal-vu-te-xien 56/205

 

Trưng Cao đng KTKT Bình Dương Biên so n : Vũ Bin

Ch ươ ng 2: Gi  i thi u Ngôn ng  Lp trình Pacal  Trang 56

Ví dụ: Chr (65)= ‘A’ , Chr (97)=‘a’, Chr(32) là ký tự trắng4.Kiểu logic (boolean) 

Kiểu boolean chỉ có hai gía trị làTRUE (đúng) và FALSE (sai), không phânbiệt chữ hoa hay chữ thườ ng. Về quan hệ thứ tự thì FALSE< TRUE. Mỗi gía trị boolean chiếm một byte bộ nhớ .

Các phép toán lôgic gồm có: NOT,AND, OR và XOR. Nếu A và B là hai đạilượ ng lôgic thì NOT A, A and B, A or Bvà A xor B cũng là những đại lượ ng lôgiccó kết qủa đượ c cho ở bảng sau:

A B A andB A or B A xorBTrue True True True FalseTrue False False True TrueFalse True False True TrueFalse False False False False

5.Kiểu chuỗi (String) : là một chuỗi kýtự. Khi gán hằng chuỗi , hằng chuỗi phảiđượ c rào trong cặp dấu nháy đơ n . Ví dụ :‘Turbo Pacal’, ‘12345’.

Page 57: Lap Trinh Pascal-Vu Te Xien

5/14/2018 Lap Trinh Pascal-Vu Te Xien - slidepdf.com

http://slidepdf.com/reader/full/lap-trinh-pascal-vu-te-xien 57/205

 

Trưng Cao đng KTKT Bình Dương Biên so n : Vũ Bin

Ch ươ ng 2: Gi  i thi u Ngôn ng  Lp trình Pacal  Trang 57

V.Cac lệnh nhập xuất dữ liệuNhập và xuất dữ liệu là hai khâu quan

trọng trong qúa trình xử lý thông tin. Hầunhư chươ ng trình nào cũng phải giải quyếtvấn đề nhập, xuất dữ liệu. Có nhập đượ cdữ liệu thì mớ i có dữ liệu để tính hay xử lý. Có dữ liệu xuất ra thì mớ i biết đượ c kếtqủa của qúa trình xử lý trong máy.

1. Lệnh nhập dữ liệu1.1.Ý nghĩ  a :Dùng để nhập dữ liệu cho

biến nguyên hay thực hay chuỗi.1.2 .Dạ ng l ệ  nh có 3 dạng như sau :

1. Read(x1 , x 2 , ..., x n );

 2. Readln(x1 , x 2 , ..., x n ); 3. Readln; Trong đó x1,x2…xn đã đượ c khai báo

kiểu dữ liệu trong phần khai báo.- Dạng 1 và dạng 2 dùng để nhập dữ liệucho các biến số đã đượ c khai báo.

- Dạng 1 khi nhập xong dữ liệu ở ngay saubiến số xn, còn dạng 2 khi nhập xong contrỏ tự động nhảy xuống đầu hàng kế tiếp.

Page 58: Lap Trinh Pascal-Vu Te Xien

5/14/2018 Lap Trinh Pascal-Vu Te Xien - slidepdf.com

http://slidepdf.com/reader/full/lap-trinh-pascal-vu-te-xien 58/205

 

Trưng Cao đng KTKT Bình Dương Biên so n : Vũ Bin

Ch ươ ng 2: Gi  i thi u Ngôn ng  Lp trình Pacal  Trang 58

- Dạng 3 không dùng để nhập dữ liệu, màcó tác dụng dừng thực hiện chươ ng trìnhchờ nhấn phím enter.

Ghi chú : Khi nhập dữ liệu cho cácbiến số , các giá trị viết cách nhau ít nhấtmột khỏang trắng.2. Lệnh xuất dữ liệu.  2.1 Ý nghĩ  a : Dùng để in các dữ liệu lên

màn hình 2.2 .Dạ ng l ệ  nh : có 3 dạng thủ tục in dữ 

liệu như sau:1. Write( bt1 , bt 2 , ... , bt n ); 2. Wrteln(bt1 , bt 2 , ... , bt n );

 3. Writeln;Trong đó bt1, bt2, ..., btn là các biểu thứccần phải in gía trị lên màn hình. Trongtrườ ng hợ p đơ n giản, mỗi biểu thức này cóthể là một biến, một hằng, hay một hàm.

- Dạng 1: in dữ liệu xong con trỏ ở ngay

sau btn, còn dạng 2 khi in xong con trỏ nhảy ngay xuống đầu hàng kế tiếp.

Page 59: Lap Trinh Pascal-Vu Te Xien

5/14/2018 Lap Trinh Pascal-Vu Te Xien - slidepdf.com

http://slidepdf.com/reader/full/lap-trinh-pascal-vu-te-xien 59/205

 

Trưng Cao đng KTKT Bình Dương Biên so n : Vũ Bin

Ch ươ ng 2: Gi  i thi u Ngôn ng  Lp trình Pacal  Trang 59

-  Dạng 3: không dùng để in dữ liệu lênmàn hình mà có tác dụng đưa con trỏ xuống đầu hàng kế tiếp.

Ví d ụ: cho x, y là hai biến thực và gánx:=100/4; y:=-9/300; thì hai lệnh sau :

Writeln(‘ x= ‘, x); Writeln(‘ y=‘, y);

sẽ in lên màn hình :

x = 2.5000000000E+01y = -3.0000000000E-02

 2.3. In d ữ liệ u d ạ ng số có đị  nh d ạ ng:a). In số thự c có định d ạng:

In các số thực theo cách trên rất

khó đọc. Vì thế các số thực thườ ng đượ cin có định dạng, giống như cách viết số thông thườ ng, bằng lệnh:

Writeln( biểuthức : n : k );Trong đó n và k là các số tự nhiên,

ấn định dùng n cột để in gía trị của biểu

thức, trong đó có k cột dành cho phần thậpphân.

Ví dụ: cho x, y là các biến kiểu thực và:x:=100/4; y:= -123.4824;

Page 60: Lap Trinh Pascal-Vu Te Xien

5/14/2018 Lap Trinh Pascal-Vu Te Xien - slidepdf.com

http://slidepdf.com/reader/full/lap-trinh-pascal-vu-te-xien 60/205

 

Trưng Cao đng KTKT Bình Dương Biên so n : Vũ Bin

Ch ươ ng 2: Gi  i thi u Ngôn ng  Lp trình Pacal  Trang 60

Hai lệnh sau :Writeln(‘ x=‘, x:6:2);Writeln(‘ y=‘, y:10:3);

sẽ in lên màn hình:x= 25.00 ( trướ c số 2 có 1 ký tự 

trắng)y= -123.482 (trướ c dấu - có 2 ký

tự trắng)

Nếu n nhỏ hơ n chiều dài của số cầnin thì số sẽ đượ c in ra vớ i đầy đủ các chữ số trong phần nguyên. Ví dụ, khi thực hiệncác lệnh sau :

x:=12345.675;

Writeln(‘x= ‘, x:0:2); trên mànhình sẽ hiện : x=12345.68Ở đây máy đã làm tròn số khi bỏ số lẻ 

cuối cùng. 

 2.4 Ví d ụ 

PROGRAM VIDU;Uses CRT;Var Ten : String[18]; Maso :

String[11];

Page 61: Lap Trinh Pascal-Vu Te Xien

5/14/2018 Lap Trinh Pascal-Vu Te Xien - slidepdf.com

http://slidepdf.com/reader/full/lap-trinh-pascal-vu-te-xien 61/205

 

Trưng Cao đng KTKT Bình Dương Biên so n : Vũ Bin

Ch ươ ng 2: Gi  i thi u Ngôn ng  Lp trình Pacal  Trang 61

BeginCLRSCR;Write(‘ Nhap ho va ten: ‘);

Readln(Ten);Write(‘ Nhap ma so sv : ‘);

Readln(Maso);Writeln;Writeln(‘ **********************

’); { in 22 dau * }Writeln(‘*’, Ten:19, ‘*’:2); { in 1 dau

*, in Ten chiem 19 cot, in tiep d ấ u * chiem2 cot }

Writeln(‘* Ma so:’ , Maso:12, ‘*’:2); {

in * Ma so, in Maso chiem 12 cot, in tiepdau * chiem 2 cot }Writeln(‘**********************’);

{ in 22 dau * }Readln;

End. 

Bài tập chươ ng 2

Page 62: Lap Trinh Pascal-Vu Te Xien

5/14/2018 Lap Trinh Pascal-Vu Te Xien - slidepdf.com

http://slidepdf.com/reader/full/lap-trinh-pascal-vu-te-xien 62/205

 

Trưng Cao đng KTKT Bình Dương Biên so n : Vũ Bin

Ch ươ ng 2: Gi  i thi u Ngôn ng  Lp trình Pacal  Trang 62

1. Nhập 2 số nguyên a, b từ bàn phím. Inra tổng, tích, hiệu, thươ ng của a và b2. Đọc từ bàn phím diện tích của đáy lớ n

B1 và diện tích đáy nhỏ B2 và chiều cao hcủa một hình chóp cụt .Tính thể tích hìnhchóp cụt theo công thức sau :

V = (1/3)* (B1+B2 +B1*B2) *h

3. Viết chươ ng trình nhập vào điểm Toán,Lí, Hoá của một thí sinh theo hệ số tươ ngứng 3 : 2 : 1 . Hãy tính và in điểm trungbình.4.Viết chươ ng trình tính lực

hút F giữa hai vật có khốilượ ng M và N cách nhau một khỏang dtheo công thức :

Vớ i G là lực hấp dẫn = 6.673* 10 –8 cm2 

 /gs2(M tính bằng gram,D tính bằng cm)5.Viết chươ ng trình nhập 3 số nguyêndươ ng a, b, c sau đó tính và in ra màn hình

2

*

 N  M GF =

Page 63: Lap Trinh Pascal-Vu Te Xien

5/14/2018 Lap Trinh Pascal-Vu Te Xien - slidepdf.com

http://slidepdf.com/reader/full/lap-trinh-pascal-vu-te-xien 63/205

 

Trưng Cao đng KTKT Bình Dương Biên so n : Vũ Bin

Ch ươ ng 2: Gi  i thi u Ngôn ng  Lp trình Pacal  Trang 63

giá trị trung bình cộng s , c và trung bìnhnhân p của 3 số đó.

Biếtrằng :

3

cbas

++=   3 / 1)(abc p =  

6.Viết chươ ng trình nhập 3 số nguyêndươ ng a, b, c là số đó 3 cạnh của một tamgiác. Hãy tính và in ra màn hình diệntích s của tam giác đó.Biết rằng : s=sqrt(p*(p-a)*(p-a)*(p-c))trong đó p=0.5*(a+b+c).

Page 64: Lap Trinh Pascal-Vu Te Xien

5/14/2018 Lap Trinh Pascal-Vu Te Xien - slidepdf.com

http://slidepdf.com/reader/full/lap-trinh-pascal-vu-te-xien 64/205

 

Trưng Cao đng KTKT Bình Dương Biên so n : Vũ Bin

Ch ươ ng 3: Các l nh đ i u ki n –Vòng l p  Trang 64

Chươ ng IIICÁC LỆNH ĐIỀU KIỆN – VÒNG LẶPI. Các lệnh điều kiện1.Lệnh nhảy không điều kiện

- Cú pháp : Goto <Nhãn> - Chứ c nă ng : Nhảy ngay đến lệnh đã

đượ c đánh dấu bằng nhãn đã đượ c khaibáo.

Ghi chú: Cách khai báo nhãn trongphần khai báo.

Label <Nhãn> Vớ i<Nhãn> là một từ tự đặt.2. Câu lệnh IF

 2.1. Câu l ệ  nh If d ạ ng1Cú pháp :

IF <Điềukiện>THEN <Lệnh> ;Điều kiện là một biểu thức lôgic cho

kết qủa TRUE (đúng) hay FALSE (sai).Lệnh có thể là một lệnh đơ n giản hoặcmột lệnh có cấu trúc.

Page 65: Lap Trinh Pascal-Vu Te Xien

5/14/2018 Lap Trinh Pascal-Vu Te Xien - slidepdf.com

http://slidepdf.com/reader/full/lap-trinh-pascal-vu-te-xien 65/205

 

Trưng Cao đng KTKT Bình Dương Biên so n : Vũ Bin

Ch ươ ng 3: Các l nh đ i u ki n –Vòng l p  Trang 65

Ý nghĩ a: Máy kiểm tra điều kiện, nếuĐiềukiện là đúng thì thực hiện nhóm lệnh Lệnh, ngượ c lại nếu Điềukiện là sai thìthực hiện lệnh kế tiếp sau if 

Ví d ụ : Nhập vào họ tên và điểm trungbình (DTB) của một sinh viên. Hãy phânloại sinh viên theo DTB như sau:

Loại là Kém nếu DTB <5,

là Tbình nếu 5 =< DTB <7,là Khá nếu 7 <= DTB <9,là Giỏi nếu DTB >= 9.

In họ tên, điểm trung bình và phân loạisinh viên.

PROGRAM PhanloaiSinhvien;VarHo_ten: String[18]; DTB: Real;

Loai: String[6];Label aa;

Begin

Write(‘ Nhap ho va ten :’);Readln(Ho_ten);

aa:Write(‘ Nhap điem trung binh:’);Readln(DTB);

Page 66: Lap Trinh Pascal-Vu Te Xien

5/14/2018 Lap Trinh Pascal-Vu Te Xien - slidepdf.com

http://slidepdf.com/reader/full/lap-trinh-pascal-vu-te-xien 66/205

 

Trưng Cao đng KTKT Bình Dương Biên so n : Vũ Bin

Ch ươ ng 3: Các l nh đ i u ki n –Vòng l p  Trang 66

If DTB<0 thenBegin

Writeln(‘Diem trung binh<0 ! Xin nhap lai ‘);

Readln; Goto aa;End;

{ phan loai theo DTB }If DTB< 5 then Loai:=‘Kem’;

If (DTB>= 5) and (DTB<7) thenLoai:=‘Tbinh’;

If (DTB >= 7) and (DTB< 9) thenLoai:=‘Kha’;

If DTB >= 9 then Loai:=‘Gioi’;

Writeln(Ho_ten, #32 , DTB:4:1 , #32 ,Loai); { #32 là ký tự trắng }Readln;

End.

 2.2. Câu l ệ  nh IF d ạ ng 2 +Cú pháp :

IF ĐiềukiệnTHEN Lệnh1

Đkiệ 

Lệnh 1 Lệnh 2

Sai

Đúng

Lệnh kế tiếp

Page 67: Lap Trinh Pascal-Vu Te Xien

5/14/2018 Lap Trinh Pascal-Vu Te Xien - slidepdf.com

http://slidepdf.com/reader/full/lap-trinh-pascal-vu-te-xien 67/205

 

Trưng Cao đng KTKT Bình Dương Biên so n : Vũ Bin

Ch ươ ng 3: Các l nh đ i u ki n –Vòng l p  Trang 67

ELSE Lệnh2 ;Chú ý :

-Trướ c ELSE không có dấu chấmphẩy.

-Lệnh1 và Lệnh2 có thể là một lệnhghép, tức là gồm nhiều lệnh đượ c đặt trongkhối begin và end;+Ý nghĩ a của lệnh: Máy kiểm tra điều

kiện, Nếu Điềukiện là đúng thì thực hiệnLệnh1, ngượ c lại, nếu Điềukiện là sai thìthực hiện Lênh2.

Ví d ụ: Viết chươ ng trình nhập vào haisố a và b, tìm và in số nhỏ nhất và số lớ n

nhất của chúng:PROGRAM Tim_Max_Min;Var

a, b, Max, Min : Real;Begin

Write(‘ Nhap a va b :’);Readln(a,b);

If a < b thenbegin

Max:= b;Min:= a;

Page 68: Lap Trinh Pascal-Vu Te Xien

5/14/2018 Lap Trinh Pascal-Vu Te Xien - slidepdf.com

http://slidepdf.com/reader/full/lap-trinh-pascal-vu-te-xien 68/205

 

Trưng Cao đng KTKT Bình Dương Biên so n : Vũ Bin

Ch ươ ng 3: Các l nh đ i u ki n –Vòng l p  Trang 68

endelse { truoc else khong co dau ; }

beginMax:= a;Min:= b; 

end;Writeln(‘ So lon nhat la: ‘ , Max:6:2);Writeln(‘ So nho nhat la: ‘ , Min:6:2);

Readln;End. 

 2.3. Câu l ệ  nh IF l ồ ng nhau :Trong câu lệnh IF, nếu Lệnh1 hoặc

Lệnh2, hoặc cả hai, lại là câu lệnh IF thì

ta có cấu trúc IF lồng nhau.Dướ i đây là hai câu lệnh IF... ELSElồng nhau :

IF Điềukiện1 THENIf  Điềukiện2 then Lệnh1Else

Lệnh2Else

Lệnh3 ;

Page 69: Lap Trinh Pascal-Vu Te Xien

5/14/2018 Lap Trinh Pascal-Vu Te Xien - slidepdf.com

http://slidepdf.com/reader/full/lap-trinh-pascal-vu-te-xien 69/205

 

Trưng Cao đng KTKT Bình Dương Biên so n : Vũ Bin

Ch ươ ng 3: Các l nh đ i u ki n –Vòng l p  Trang 69

Ví d ụ : Viết chươ ng trình nhập vào họ tênmột chủ hộ, chỉ số  điện kế tháng trướ c(chiso1) và chỉ số  điện kế tháng này(chiso2), tính tiền điện tháng này cho hộ,biết rằng :

Mỗi kw trong 100 kw đầu tiên có đơ ngía là 500đ,

Từ kw thứ 101 đến kw thứ 200 có đơ n

giá 800đ,Từ kw thứ 201 trở lên có đơ n gía

1000đ.PROGRAM Tinh_tien_dien; 

Uses Crt;

VarHo_ten: String[18];chiso1, chiso2, Ldtt, Tien : Real;

Label aa;Begin

ClrScr;

Write(‘ Nhap ho va ten :’);Readln(Ho_ten)

Page 70: Lap Trinh Pascal-Vu Te Xien

5/14/2018 Lap Trinh Pascal-Vu Te Xien - slidepdf.com

http://slidepdf.com/reader/full/lap-trinh-pascal-vu-te-xien 70/205

 

Trưng Cao đng KTKT Bình Dương Biên so n : Vũ Bin

Ch ươ ng 3: Các l nh đ i u ki n –Vòng l p  Trang 70

aa: Write(‘ Nhap chi so thang truoc,chi so thang nay: ‘);Readln( chiso1,chiso2);

If chiso2<chiso1 ThenBegin

Writeln(‘Ban nhap sai du lieu ! Xinnhap lai’);

Readln;

Goto aa;End;

Ldtt:=chiso2 - chiso1;If Ldtt<= 100 then Tien:=Ldtt*500

Else

if Ldtt <=200 thenTien:=100*500+(Ldtt - 100)*800Else

Tien:=100*500 + 100*800 + (Ldtt- 200) * 1000;

Writeln(‘ Ho va ten la ‘, Ho_ten);

Writeln(‘ Tien phai tra la ‘ ,Tien:10:2);

Readln;End.

Page 71: Lap Trinh Pascal-Vu Te Xien

5/14/2018 Lap Trinh Pascal-Vu Te Xien - slidepdf.com

http://slidepdf.com/reader/full/lap-trinh-pascal-vu-te-xien 71/205

 

Trưng Cao đng KTKT Bình Dương Biên so n : Vũ Bin

Ch ươ ng 3: Các l nh đ i u ki n –Vòng l p  Trang 71

3. Câu lệnh CASE 3.1. Cú pháp

Lệnh CASE có hai dạng, chúng chỉ khác nhau ở một điểm là trong dạng 2 cóELSE Lệnh n+1, còn trong dạng 1 thìkhông ( hình vẽ).

CASE

<biểuthức> OFhằng1 :Lệnh1;

hằng2 :Lệnh2;

. . . .hằngn :

Lệnhn;END;

 Dạng 1 

CASE<biểuthức> OF

hằng1 :Lệnh1;

hằng2 :Lệnh2;

. . . .

hằngn :Lệnhn;ELSE

Lệnhn+1;END;

 Dạng 2 

Chú ý  - Lệnh CASE phải kết thúc bằngEND;

Page 72: Lap Trinh Pascal-Vu Te Xien

5/14/2018 Lap Trinh Pascal-Vu Te Xien - slidepdf.com

http://slidepdf.com/reader/full/lap-trinh-pascal-vu-te-xien 72/205

 

Trưng Cao đng KTKT Bình Dương Biên so n : Vũ Bin

Ch ươ ng 3: Các l nh đ i u ki n –Vòng l p  Trang 72

- Kiểu dữ liệu của biểuthức chỉ là kiểudữ liệu đếm đượ c như: nguyên, ký tự,Lôgic, hoặc kiểu liệt kê hay kiểu đoạn con,không đượ c là kiểu thực hay kiểu chuỗi.. 3.2: Ý nghĩ  a: Khi gặp lệnh Case trongchươ ng trình máy thực hiện theo các bướ csau:

Bướ c 1: Tính gía trị của biểuthức

Bướ c 2: So sánh và lựa chọn:- Nếu gía trị của biểuthức = Gt1 thì

thực hiện Lệnh1- Nếu gía trị của biểuthức = Gt2 thì

thực hiện Lệnh2

. . . . .- Nếu gía trị của biểuthức = Ctn thìthực hiện Lệnh thứ n

Bướ c 3:a) chuyển ngay sang lệnh kế tiếp sau

End ( nếu là dạng 1)

b) thực hiện Lệnh n+1, rồi chuyểnsang lệnh kế tiếp sau End

(nếu là dạng 2) .Sơ  đồ 

Page 73: Lap Trinh Pascal-Vu Te Xien

5/14/2018 Lap Trinh Pascal-Vu Te Xien - slidepdf.com

http://slidepdf.com/reader/full/lap-trinh-pascal-vu-te-xien 73/205

 

Trưng Cao đng KTKT Bình Dương Biên so n : Vũ Bin

Ch ươ ng 3: Các l nh đ i u ki n –Vòng l p  Trang 73

 3.3. Các ví d ụ :

PROGRAM Tim_so_ngay_cua_thang; {Xac đinh so ngay cua thang }

VarThang, Nam, Songay : Integer ;

Sai

Lệnh kế tiếp

GT=gt1 

Lệnh1

GT=gt2

Lệnh2GT=gt3

 

Lệnh3

Đúng

Đúng

Sai

Sai

Page 74: Lap Trinh Pascal-Vu Te Xien

5/14/2018 Lap Trinh Pascal-Vu Te Xien - slidepdf.com

http://slidepdf.com/reader/full/lap-trinh-pascal-vu-te-xien 74/205

 

Trưng Cao đng KTKT Bình Dương Biên so n : Vũ Bin

Ch ươ ng 3: Các l nh đ i u ki n –Vòng l p  Trang 74

BeginWrite(‘Nhap Thang, Nam : ‘);

Readln(Thang, Nam);If (Thang<1) or ( Thang>12) then

writeln(‘ Nhap sai ’)elsebegin

Case Thang OF

4, 6, 9, 11 : Songay:=30;1, 3, 5, 7, 8, 10, 12 : Songay:=31;2 : begin

If Nam mod 4 = 0 thenSongay:=29

else Songay:=28;end;End; { Het Case }Writeln(‘ So ngay la : ‘ , Songay);

end;Readln;

End.Ví d ụ 2: Xây dựng thực đơ n cho phép lựachọn một trong bốn việc : tính tổng , tính

Page 75: Lap Trinh Pascal-Vu Te Xien

5/14/2018 Lap Trinh Pascal-Vu Te Xien - slidepdf.com

http://slidepdf.com/reader/full/lap-trinh-pascal-vu-te-xien 75/205

 

Trưng Cao đng KTKT Bình Dương Biên so n : Vũ Bin

Ch ươ ng 3: Các l nh đ i u ki n –Vòng l p  Trang 75

hiệu, tính tích hoặc tính thươ ng của hai số x, y nhập từ bàn phím.

Màn hình cần hiện ra bốn mục sau chomọi ngườ i lựa chọn :

A. TÍNH TỔNG HAI SỐ B. TÍNH HIỆU HAI SỐ C. TÍNH TÍCH HAI SỐ D. TÍNH THƯƠNG HAI SỐ 

Chươ ng trình đượ c viết như sau :PROGRAM Thuc_Don;Uses Crt;Var

x, y : Real; Ch : Char;

BeginClrscr;Write('Nhap x va y:'); Readln(x, y);Gotoxy(10, 3); Write('A. TINH TONG

HAI SO');Gotoxy(10, 5); Write('B. TINH HIEU

HAI SO');Gotoxy(10, 7); Write('C. TINH TICH

HAI SO');

Page 76: Lap Trinh Pascal-Vu Te Xien

5/14/2018 Lap Trinh Pascal-Vu Te Xien - slidepdf.com

http://slidepdf.com/reader/full/lap-trinh-pascal-vu-te-xien 76/205

 

Trưng Cao đng KTKT Bình Dương Biên so n : Vũ Bin

Ch ươ ng 3: Các l nh đ i u ki n –Vòng l p  Trang 76

Gotoxy(10, 9); Write('D. TINHTHUONG HAI SO');

Gotoxy(2,11); Write('-Ban chon mucnao (A, B, C, D) ?:'); Readln(Ch);

CASE Ch of 'A', 'a': Writeln('Tong =', x+y :6:2);'B', 'b': Writeln(' Hieu =', x-y :6:2);'C', 'c': Writeln(' Tich =', x*y :6:2);

'D', 'd': If y<>0 then Writeln('Thuong =', x/y:6:2 )

else Writeln(' Khong xac dinh!');

ELSE Writeln(' Khong co muc ',

Ch);END;Readln;

End. 3.4. Câu l ệ  nh CASE l ồ ng nhau

Trong cấu trúc CASE, khi một trong các

Lệnh1, Lệnh2, ..., Lệnhn hay Lệnhn+1 lạilà một lệnh CASE thì ta có cấu trúc CASElồng nhau.

Page 77: Lap Trinh Pascal-Vu Te Xien

5/14/2018 Lap Trinh Pascal-Vu Te Xien - slidepdf.com

http://slidepdf.com/reader/full/lap-trinh-pascal-vu-te-xien 77/205

 

Trưng Cao đng KTKT Bình Dương Biên so n : Vũ Bin

Ch ươ ng 3: Các l nh đ i u ki n –Vòng l p  Trang 77

Ví dụ 3: Một xí nghiệp tính tiền thưở nghàng tháng cho công nhân theo công thức :Tiền thưở ng= Hệ số * 200.

Trong đó Hệ số đượ c tính dựa vào kếtqủa bình chọn phân loại lao động (loại A,B hay C) và nơ i làm việc (cơ sở 1 hay cơ  sở 2) của mỗi ngườ i trong tháng, cụ thể như sau:

 

Loại Cơ sở  1

Cơ sở  2

A 2.0 2.5

B 1.5 1.8

C 1.0 1.0Viết chươ ng trình nhập họ tên, phân

loại lao động và nơ i làm việc của mộtcông nhân, tính tiền thưở ng cho ngườ i đó.

PROGRAM Tinh_tien_thuong;

Var Ho_ten: String[20]; Loai : Char;Coso : Byte;

Heso, Thuong : Real;

Page 78: Lap Trinh Pascal-Vu Te Xien

5/14/2018 Lap Trinh Pascal-Vu Te Xien - slidepdf.com

http://slidepdf.com/reader/full/lap-trinh-pascal-vu-te-xien 78/205

 

Trưng Cao đng KTKT Bình Dương Biên so n : Vũ Bin

Ch ươ ng 3: Các l nh đ i u ki n –Vòng l p  Trang 78

BeginWrite(‘ Nhap ho va ten: ‘);

Readln(Ho_ten);Write(‘ Nhap co so lam viec (1,2): ‘);

Readln(Coso);Write(‘ Nhap phan loai lao dong

(A,B,C) : ‘);Readln(Loai);CASE Loai OF

‘A’, ‘a’: Case Coso of 1: Heso:=2.0;2: Heso:=2.5;

end;‘B’, ‘b’: Case Coso of 

1: Heso:=1.5;2: Heso:=1.8;end;

‘C’, ‘c’: Heso:=1.0;END; { Het CASE }

Thuong:=Heso*200;

Writeln(‘Ho ten va tien thuong ‘);Writeln(Ho_ten , Thuong:8:2 );Readln;

End.

Page 79: Lap Trinh Pascal-Vu Te Xien

5/14/2018 Lap Trinh Pascal-Vu Te Xien - slidepdf.com

http://slidepdf.com/reader/full/lap-trinh-pascal-vu-te-xien 79/205

 

Trưng Cao đng KTKT Bình Dương Biên so n : Vũ Bin

Ch ươ ng 3: Các l nh đ i u ki n –Vòng l p  Trang 79

II.CÁC LỆNH VÒNGLẶP1. Câu lệnh lặp FOR 1.1. Câu l ệ  nh FOR d ạ ng 1

- Cú pháp:FOR biến số := <Giá

trị đầu>TO <Giá trị cuối> DO Lệnh;- Yêu cầu: biến số phải thuộc kiểu dữ liệu

đơ n giản đếm đượ c, thườ ng là kiểunguyên, ký tự hay lô gic, không thể là kiểuthực hay chuỗi.- Cách thứ c hoạt động của FOR:

 Bướ c 1: Gán giá trị cho biến số := giá trị 

đầu Bướ c 2: Thực hiện việc so sánh:-Nếu biến số <= Giá trị cuối thì thực hiện

bướ c 3;-Nếu biến số >Giá trị cuối thì thóat

ra khỏi vòng lặp , thực hiện lệnh kế tiếp.

 Bướ c 3: Thực hiện lệnh sau DO Bướ c 4 : Tăng gía trị của biến số :

biến số:=Succ(biến số);Quay lại bướ c 2.

Biến số:=Gtđầu

Biến<=Gtcu

 

Lệnh

Biến:=Biến+1

Đúng

Sai

Thóat

Page 80: Lap Trinh Pascal-Vu Te Xien

5/14/2018 Lap Trinh Pascal-Vu Te Xien - slidepdf.com

http://slidepdf.com/reader/full/lap-trinh-pascal-vu-te-xien 80/205

 

Trưng Cao đng KTKT Bình Dương Biên so n : Vũ Bin

Ch ươ ng 3: Các l nh đ i u ki n –Vòng l p  Trang 80

1.2. Các ví d ụ Ví d ụ 1: Hãy viết chươ ng trình tính tổng :S= 12 + 22+ 32+...+ 102 

PROGRAM Tong1;Var

N, i : Integer;S : LongInt;

Begin

Write(‘ Nhap N :’); Readln(N);S:=0;

For i:=1 to N do S:=S+i*i ;Writeln(‘S= ‘, S);

Readln;

End.Ví d ụ 2:  Bài tính giai thừ a của một số . PROGRAM Giai_thua;

VarN, i : Integer;S : LongInt;

BeginWrite(‘Nhap so duong N : ‘);

Readln(N);S:=1;

Page 81: Lap Trinh Pascal-Vu Te Xien

5/14/2018 Lap Trinh Pascal-Vu Te Xien - slidepdf.com

http://slidepdf.com/reader/full/lap-trinh-pascal-vu-te-xien 81/205

 

Trưng Cao đng KTKT Bình Dương Biên so n : Vũ Bin

Ch ươ ng 3: Các l nh đ i u ki n –Vòng l p  Trang 81

For i:=1 to N do S:=S * i ;Writeln(‘Giai thua = ‘, S);Readln;

End.2. Câu lệnh FORdạng 2-Cú pháp:

FOR biến số :=

<Giá tri cuối>DOWNTO <Giá trị đầu> DO Lệnh;-Cách thứ c hoạt động của FOR d ạng 2:

 Bướ c 1: Gán giá trị cho biến số := giá trị 

cuối Bướ c 2: Thực hiện việc so sánh:-Nếu biến số >= Giá trị đầu thực

hiện bướ c 3;-Nếu biến số <Giá trị đầu thì thóat

ra khỏi vòng lặp , thực hiện lệnh kế tiếp.

 Bướ c 3: Thực hiện lệnh sau DO Bướ c 4 : Giảm gía trị của biến :

biến số:=Pred(biến số);Quay lại bướ c 2.

Biến :=Gtđầu

Biến>=Gtcuối

Lệnh

Biến:=Biến-1

Đúng

Sai

Thóat

Page 82: Lap Trinh Pascal-Vu Te Xien

5/14/2018 Lap Trinh Pascal-Vu Te Xien - slidepdf.com

http://slidepdf.com/reader/full/lap-trinh-pascal-vu-te-xien 82/205

 

Trưng Cao đng KTKT Bình Dương Biên so n : Vũ Bin

Ch ươ ng 3: Các l nh đ i u ki n –Vòng l p  Trang 82

Ví dụ 1 : In các chữ cái theo thứ tự ngượ ctừ Z đến A thành hai dòng :

Z, Y, X, ..., C, B, Az, y, x, ... , c, b, a

Chươ ng trình đượ c viết như sau:PROGRAM In_Ky_tu_nguoc;Var

ch: Char;

BeginFor ch:=‘Z’ downto ‘A’ do write(ch:3

);Writeln;For ch:=‘z’ downto ‘a’ do write(ch

:3 ); Writeln;Readln;

End.3. Câu lệnh FOR lồng nhau 

Trong cấu trúc FOR, khi Lệnh cũng

là một lệnh FOR thì ta có cấu trúc FORlồng nhau:

FOR biến1:= m1 TO m2 DO{1}

Page 83: Lap Trinh Pascal-Vu Te Xien

5/14/2018 Lap Trinh Pascal-Vu Te Xien - slidepdf.com

http://slidepdf.com/reader/full/lap-trinh-pascal-vu-te-xien 83/205

 

Trưng Cao đng KTKT Bình Dương Biên so n : Vũ Bin

Ch ươ ng 3: Các l nh đ i u ki n –Vòng l p  Trang 83

FOR biến2:=n1 TO n2 DOLệnh; {2}

Cách thức hoạt động của lệnh này như sau:

Đầu tiên cho biến1:=m1 và làmlệnh ở dòng {2}. Vì dòng {2} là lệnh FORnên vớ i mỗi gía trị của biến2=n1, ..., n2,đều phải làm Lệnh, kết qủa là Lệnh đượ c

làm n2-n1+1 lần.Bây giờ tăng: biến1:=Succ(biến1),

rồi lại làm lệnh FOR ở dòng {2}, kết qủalệnhP đượ c làm thêm n2-n1+1 lần nữa.v.v.

Qúa trình trên cứ tiếp tục cho đến khi

biến1=m2+1 thì dừng.Lệnh FOR {1} làm m2-m1+1 lầnlệnh FOR {2}, còn chính lệnh FOR {2} lạilàm n2-n1+1 lần Lệnh. Vì thế lệnh đượ clàm tất cả là (m2-m1+1)*(n2-n1+1) lần.

Ví dụ: In hình chữ nhật đặc như dướ i đây:

PROGRAM In_hinh_chu_nhat_chu_A;Uses Crt;

Page 84: Lap Trinh Pascal-Vu Te Xien

5/14/2018 Lap Trinh Pascal-Vu Te Xien - slidepdf.com

http://slidepdf.com/reader/full/lap-trinh-pascal-vu-te-xien 84/205

 

Trưng Cao đng KTKT Bình Dương Biên so n : Vũ Bin

Ch ươ ng 3: Các l nh đ i u ki n –Vòng l p  Trang 84

Var I,j,n,m :Integer;Begin

Clrscr;Write(‘Hay nhap chieu

rong =’);Readln(n);Write(‘Hay nhap chieu dai

=’);Readln(m);For i:=1 to n do

beginfor j:=1 to m do write(‘A’);Writeln;

end;Readln;

End.Ví dụ 2: Tìm các số Fibonaci. Dãy số Fibonaci đượ c xây dựng như 

sau:U0=1, U1=1 , Uk=Uk-1 + Uk-2 vớ i mọi

k= 2, 3, 4, ...

PROGRAM In_Fibonaci;Var

N, i, U, U0, U1 : Integer;Begin

Page 85: Lap Trinh Pascal-Vu Te Xien

5/14/2018 Lap Trinh Pascal-Vu Te Xien - slidepdf.com

http://slidepdf.com/reader/full/lap-trinh-pascal-vu-te-xien 85/205

 

Trưng Cao đng KTKT Bình Dương Biên so n : Vũ Bin

Ch ươ ng 3: Các l nh đ i u ki n –Vòng l p  Trang 85

Write(‘ Nhập N :’); Readln(N);U0:=1;U1:=1;

Writeln( N+1 , ‘ So Fibonaci dau tienla :’ ); Write(U0:3 , U1:3);

For i :=2 to N dobegin

U:=U0+U1;

Write(U:3);U0:=U1;U1:=U;

end;Readln;

End.3. Câu lệnh WHILE3.1 Cú pháp 

WHILEĐiềukiện DO Lệnh ;

3.2 Ý nghĩ a : Thực hiện lệnh trong khi

Điều kiện còn đúng, khi điều kiện sai thóatra khỏi vòng lặp , thực hiện lệnh kế tiếp.

3.3. Các ví d ụ về lệnh While 

Điều kiện

Lệnh

Đúng

Sai

Thóat

Page 86: Lap Trinh Pascal-Vu Te Xien

5/14/2018 Lap Trinh Pascal-Vu Te Xien - slidepdf.com

http://slidepdf.com/reader/full/lap-trinh-pascal-vu-te-xien 86/205

 

Trưng Cao đng KTKT Bình Dương Biên so n : Vũ Bin

Ch ươ ng 3: Các l nh đ i u ki n –Vòng l p  Trang 86

Ví d ụ 1 : Nhập số tự nhiên N, dùng lệnhWHILE để tính N! (Giai thừa):

PROGRAM Giai_thua_2;{ Tinh S=N!bang lenh WHILE..}

VarN, i : Integer;P : LongInt;

Begin

Write(‘ Nhập N > 0 : ‘ ); Readln(N);P:=1;i :=1;While i<= N dobegin

P:=P*i;i:=i+1;end;

Writeln(‘ Giai thua = ‘, P);Readln;

End.

Ví dụ 2: Viết chươ ng trình tính tiền gửingân hàng.

PROGRAM Tien_gui_Ngan_hang;Var

Page 87: Lap Trinh Pascal-Vu Te Xien

5/14/2018 Lap Trinh Pascal-Vu Te Xien - slidepdf.com

http://slidepdf.com/reader/full/lap-trinh-pascal-vu-te-xien 87/205

 

Trưng Cao đng KTKT Bình Dương Biên so n : Vũ Bin

Ch ươ ng 3: Các l nh đ i u ki n –Vòng l p  Trang 87

Tienvon, Laisuat, Sotien, S : Real;N : Byte;

BeginWrite(‘ Nhap tien von, lai suat va so

tien S can co: ‘); Readln(Tienvon, Laisuat,S);

Sotien:=Tienvon;N:=0; { N la so thang gui}

While Sotien< S dobegin

N:=N+1;Sotien:= Tienvon +

Tienvon*Laisuat ;

Tienvon:=Sotien;end;Writeln(‘ Can gui ‘, N , ‘ thang ‘);Writeln(‘ So tien se

co = ‘ , Sotien:6:2);Readln;

End.4. Câu lệnh Repeat  4.1 Cú pháp

REPEAT

Điều kiện

Lệnh

Đúng

Sai

Thóat

Page 88: Lap Trinh Pascal-Vu Te Xien

5/14/2018 Lap Trinh Pascal-Vu Te Xien - slidepdf.com

http://slidepdf.com/reader/full/lap-trinh-pascal-vu-te-xien 88/205

 

Trưng Cao đng KTKT Bình Dương Biên so n : Vũ Bin

Ch ươ ng 3: Các l nh đ i u ki n –Vòng l p  Trang 88

Lệnh;UNTIL Điềukiện;

 4.2 Ý nghĩ  a:  Thực hiện lệnh cho đến khiđiều kiện đúng, Khi điều kiện đúng thóatra khỏi vòng lặp thực hiện lệnh kế tiếp. 4.3. Các ví d ụ về l ệ  nh Repeat

Ví dụ 1: Tìm bội số chung nhỏ nhấ t củahai số nguyên d ươ ng M và N.

Bài này có những cách giải khác nhau,dướ i đây là một cách đơ n giản. Trướ c hết,hãy xem cách tìm BSCNN của hai số M=5

và N=9.Vì N>M nên ta sẽ tìm trong tập các bộisố của N :{ 9, 18, 27, 36, 45, ...} số nhỏ nhất chia hết cho M, đó là số 45.

Một cách tổng quát, gọi Max là số lớ nnhất của M và N. Đầu tiên ta gán :

BSCNN:=0;Sau đó cứ làm lệnh

BSCNN:=BSCNN+Max cho đến khiBSCNN chia hết cho cả M và N thì dừng.

Page 89: Lap Trinh Pascal-Vu Te Xien

5/14/2018 Lap Trinh Pascal-Vu Te Xien - slidepdf.com

http://slidepdf.com/reader/full/lap-trinh-pascal-vu-te-xien 89/205

 

Trưng Cao đng KTKT Bình Dương Biên so n : Vũ Bin

Ch ươ ng 3: Các l nh đ i u ki n –Vòng l p  Trang 89

Trong chươ ng trình ta dùng lệnh repeatđể nhập hai số M, N đảm bảo dươ ng.PROGRAM BSCNN; { Tìm BSCNN

của M và N }Var

M, N, Max, BSCNN : Integer;Begin

Repeat

Write(‘ Nhap M và N duong :’);Readln(M, N);

Until (M>0) and (N>0);If N >M then Max:=N else

Max:=M;

BSCNN:=0;RepeatBSCNN:=BSCNN + Max;

Until (BSCNN mod N=0) and(BSCNN mod M=0) ;

Writeln(‘ Boi so chung nho

nhat= ‘, BSCNN) ;Readln;

End.

Page 90: Lap Trinh Pascal-Vu Te Xien

5/14/2018 Lap Trinh Pascal-Vu Te Xien - slidepdf.com

http://slidepdf.com/reader/full/lap-trinh-pascal-vu-te-xien 90/205

 

Trưng Cao đng KTKT Bình Dương Biên so n : Vũ Bin

Ch ươ ng 3: Các l nh đ i u ki n –Vòng l p  Trang 90

Ví dụ 2: Thiế t k ế  để chạ y nhiề u lần một chươ ng trình.

Trong Turbo Pascal, mỗi lần muốnchạy chươ ng trình ta phải gõ cặp phím Ctrlvà F9 (viết tắt là ^F9), điều này sẽ bất tiệnnếu cần chạy chươ ng trình nhiều lần ứngvớ i các bộ dữ liệu thử khác nhau. Cấu trúcsau đây cho phép ta chạy chươ ng trình một

số lần theo ý muốn:REPEAT

{ Cac lenh cua chuong trinh}Write(‘ Tiep tuc nưa khong (Y/N) ?

:’); Readln(Traloi);

UNTIL (Traloi =‘N’) or ( Traloi=‘n’);Ghi chú: Traloi là một biến kiểu ký tự (Char);

Sau khi thực hiện xong {cac lenh cuachuong trinh }, nếu muốn chạy tiếp thì tagõ phím phím Y , nếu muốn dừng thì gõ

phím N .Chú ý : lệnh Readln(Traloi); có thể thaybằng: Traloi:=Readkey;

Page 91: Lap Trinh Pascal-Vu Te Xien

5/14/2018 Lap Trinh Pascal-Vu Te Xien - slidepdf.com

http://slidepdf.com/reader/full/lap-trinh-pascal-vu-te-xien 91/205

 

Trưng Cao đng KTKT Bình Dương Biên so n : Vũ Bin

Ch ươ ng 3: Các l nh đ i u ki n –Vòng l p  Trang 91

Hàm Readkey thuộc thư viện CRTcho kết qủa là một ký tự gõ từ bàn phím,nó khác lệnh Readln(Traloi) ở  chỗ là khinhập ký tự ta không cần phải Enter.

Chươ ng trình dướ i đây cho phép thựchiện một số lần việc : in tam giác cân đặccó chiều cao m (0<m<20) :

PROGRAM

In_tam_giac;Uses CRT;

Vark, j, m: integer;Traloi : Char ;

BeginREPEATClrscr;Write(‘ Nhap m (0<m<20) :

‘);Readln(m);Writeln(‘*’ :m); { in đinh }

{ In hai canh ben cua tam giac }For k:=1 to m-2 do

Begin

Page 92: Lap Trinh Pascal-Vu Te Xien

5/14/2018 Lap Trinh Pascal-Vu Te Xien - slidepdf.com

http://slidepdf.com/reader/full/lap-trinh-pascal-vu-te-xien 92/205

 

Trưng Cao đng KTKT Bình Dương Biên so n : Vũ Bin

Ch ươ ng 3: Các l nh đ i u ki n –Vòng l p  Trang 92

Write(chr(32): m-k-1); { in m-k-1 ky tu trang}

For j:=1 to 2*k+1 do Write(‘*’);{ in 2k+1 dau *}

Writeln;End;

For k:=1 to 2*m-1 do Write(‘*’); {incanh day}

Writeln;Write(‘ Tiep tuc nua khong (Y/N) ?:

‘);Readln( Traloi);

UNTIL (Traloi=‘N’) or ( Traloi=‘n’);

End.5. So sánh các lệnh For, While vàRepeat

- Lệnh For dùng cho các vòng lặp có số lần lặp đã biết trướ c

- Lệnh While hay Repeat tổng quát hơ nlệnh For, dùng đượ c cho tất cả các loạivòng lặp, nhưng thườ ng dùng cho cácvòng lặp có số lần lặp chưa biết trướ c.

Page 93: Lap Trinh Pascal-Vu Te Xien

5/14/2018 Lap Trinh Pascal-Vu Te Xien - slidepdf.com

http://slidepdf.com/reader/full/lap-trinh-pascal-vu-te-xien 93/205

 

Trưng Cao đng KTKT Bình Dương Biên so n : Vũ Bin

Ch ươ ng 3: Các l nh đ i u ki n –Vòng l p  Trang 93

- Lệnh While và Repeat khác nhau ở  điểm sau: Lệnh While kiểm tra điều kiệntrướ c , nên có thể không thực hiện một lầnnào. Lệnh Repeat kiểm tra điều kiện saunên ít nhất thực hiện một lần. Bài tập ứ ng dụng 1. Viết chươ ng trình nhập và 3 số thực. Inra số lớ n nhất và số nhỏ nhất trong 3 số.

2. Viết chươ ng trình nhập điểm của mộtsinh viên gồm 3 môn Tóan , Lý , Hóa.

Tính Điểm trung bình TB và in ra :" Xuất sắc " Nếu điểm

trung bình TB = 10

" Giỏi " Nếu điểmtrung bình TB = 9" Khá" Nếu điểm

trung bình TB = 7 hoặc 8" Trung bình " Nếu điểm

trung bình TB TB = 5 hoặc 6

" Yếu " Nếu điểmtrung bình TB = 0 đến 43. Viết chươ ng trình giải và biện luận hệ phươ ng trình bậc nhất có 2 ẩn số x, y

Page 94: Lap Trinh Pascal-Vu Te Xien

5/14/2018 Lap Trinh Pascal-Vu Te Xien - slidepdf.com

http://slidepdf.com/reader/full/lap-trinh-pascal-vu-te-xien 94/205

 

Trưng Cao đng KTKT Bình Dương Biên so n : Vũ Bin

Ch ươ ng 3: Các l nh đ i u ki n –Vòng l p  Trang 94

ax + by = cdx + ey = f 

Trong đó a, b, c, d, e, f là các số thực nhậptừ bàn phím.4.Viết chươ ng trình tính các tổng sau vớ i

n nhập từ bàn phíma) S =1+3+5+…..nb) S=1 + 1/22 + 1/32 + … + 1/n2 

c ) S=1 + 1/2! + 1/3! + … + 1/nd) 

6.Viết chươ ng trình nhập một số nguyên

dươ ng N. Kiểm tra xem N c ĩ l số nguyn tố hay khơ ng ?7.Viết chươ ng trình nhập vào một số n , Inra các số nguyên tố <= n.8.Viết chươ ng trình tính các tổng sau vớ i nvà a nhập từ bàn phím

a) S=a+a2 /2!+a3 /3!+. . .+an /n!b) S=100+1/a-22 /a2!+33 /a3!+. . .+(-

)nn /an!

nn

nS ++++= ...

3

3

2

2100

32

Page 95: Lap Trinh Pascal-Vu Te Xien

5/14/2018 Lap Trinh Pascal-Vu Te Xien - slidepdf.com

http://slidepdf.com/reader/full/lap-trinh-pascal-vu-te-xien 95/205

 

Trưng Cao đng KTKT Bình Dương Biên so n : Vũ Bin

Ch ươ ng 3: Các l nh đ i u ki n –Vòng l p  Trang 95

9.Viết chươ ng trình in ra cc số chínhphươ ng trong n số nguyên dươ ng đấu tin,vớ i n nhập từ bn phím.10.Viết chươ ng trình tính số PI theo chuỗisau :

Lấy 150 số hạng đầu tin.

11.Viết chươ ng trình tính tổ hợ p chập j

của n phần tử.

...9

1

7

1

5

1

3

11

4+−+−=

PI 

)!!.

!

 jn j

nC  jn

−=

Page 96: Lap Trinh Pascal-Vu Te Xien

5/14/2018 Lap Trinh Pascal-Vu Te Xien - slidepdf.com

http://slidepdf.com/reader/full/lap-trinh-pascal-vu-te-xien 96/205

 

Trưng Cao đng KTKT Bình Dương Biên so n : Vũ Bin

Ch ươ ng 4: Ch ươ ng trình con  Trang 96

Chươ ng IVCHƯƠ NG TRÌNH CON

I.Nhữ ng khái niệm chung1. Khái niệm về chươ ng trình con 

Chươ ng trình con (subprogram) là mộtđoạn chươ ng trình có chức năng giải quyếtmột vấn đề chuyên biệt mà chươ ng trìnhchính cần phải thực hiện một số lần ứng

vớ i các giá trị khác nhau của tham số.Chẳng hạn, nếu phải tính một loạt các

gía trị e1, e2, e3, ..., e10 thì ta nên viết mộtchươ ng trình con có nhiệm vụ tính ex vớ i xla đối số bất kỳ và đặt tên là EXP(x). Mỗi

khi cần tính một trong các gía trị e

1

, e

2

, ...,e10 , ta chỉ cần gọi tên chươ ng trình con đónhưng thay x bằng một giá trị cụ thể 1, 2,...,10.

Việc sử dụng chươ ng trình con khôngchỉ có tác dụng làm cho chươ ng trình

chính bớ t rườ m rà, bớ t dài dòng mà cònđặc biệt có ý ngh ĩ a trong việc tổ chứcchươ ng trình.

Page 97: Lap Trinh Pascal-Vu Te Xien

5/14/2018 Lap Trinh Pascal-Vu Te Xien - slidepdf.com

http://slidepdf.com/reader/full/lap-trinh-pascal-vu-te-xien 97/205

 

Trưng Cao đng KTKT Bình Dương Biên so n : Vũ Bin

Ch ươ ng 4: Ch ươ ng trình con  Trang 97

Khi phải giải quyết một bài lớ n, ngườ ita tìm cách chia nó ra thành nhiều bài nhỏ.Mỗi bài nhỏ đượ c giải quyết riêng rẽ bằngmột chươ ng trình con sẽ dễ dàng hơ n khiphải kiểm tra lỗi và kiểm tra thuật giải .Việc còn lại là ghép các chươ ng trình connày để tạo thành một chươ ng trình lớ n, đólà chươ ng trình chính.

Có hai loại chươ ng trình con là hàm vàthủ tục. Sự khác nhau cơ bản của hàm vàthủ tục là ở chỗ: hàm luôn luôn trả về mộtgía trị duy nhất thông qua tên hàm và dođó có thể sử dụng hàm như sử dụng một

biểu thức, còn thủ tục thì không trả về giátrị nào qua tên thủ tục và nó đượ c sử dụngnhư một lệnh đơ n giản.2. Hàm (Function) 2.1. Các đặ c trư  ng củ a hàm

Các yếu tố đặc trưng cho một hàm gồm

có:-Tên hàm-Kiể u d ữ liệu của các tham số  -Kiể u d ữ liệu của gía tr ị hàm

Page 98: Lap Trinh Pascal-Vu Te Xien

5/14/2018 Lap Trinh Pascal-Vu Te Xien - slidepdf.com

http://slidepdf.com/reader/full/lap-trinh-pascal-vu-te-xien 98/205

 

Trưng Cao đng KTKT Bình Dương Biên so n : Vũ Bin

Ch ươ ng 4: Ch ươ ng trình con  Trang 98

Ví dụ :-Hàm Sqrt(x): cho căn hai của x. Tên

hàm là Sqrt, tham số x là nguyên hay thựccòn gía trị hàm kiểu thực, ví dụ Sqrt(4)=2.0.

-Hàm Chr(k): cho ký tự có mã là k. Tênhàm là Chr, tham số k kiểu nguyên còn gíatrị hàm kiểu ký tự, ví dụ Chr(65)=‘A’.

-Hàm Odd(k): cho True hay False tùytheo k là lẻ hay chẵn. Tên hàm là Odd,tham số k kiểu nguyên và gía trị hàm kiểulôgic? ví dụ Odd(4)=False.

-Hàm Copy( St, k, n): cho chuỗi con

gồm n ký tự của St tính từ vị trí k. Tênhàm là Copy, có ba tham số là St kiểuchuỗi, k và n kiểu nguyên, và gía trị hàmkiểu chuỗi. ví dụ Copy(‘ABCD’, 2, 3) =‘BCD’.

-Hàm Readkey : không có tham số, gía

trị hàm kiểu ký tự, hàm nhận một ký tự đượ c gõ từ bàn phím.

Page 99: Lap Trinh Pascal-Vu Te Xien

5/14/2018 Lap Trinh Pascal-Vu Te Xien - slidepdf.com

http://slidepdf.com/reader/full/lap-trinh-pascal-vu-te-xien 99/205

 

Trưng Cao đng KTKT Bình Dương Biên so n : Vũ Bin

Ch ươ ng 4: Ch ươ ng trình con  Trang 99

Tóm lại, hàm có thể không có tham số hoặc có một đến nhiều tham số, nhưnghàm luôn tr ả về một gía tr ị duy nhấ t .  2.2. Khai báo hàm tự viế  t:

Tất cả các hàm có sẵn trong TurboPascal gọi là các hàm chuẩn, chúng có thể đượ c sử dụng mà không cần phải khai báo.Tuy nhiên số lượ ng các hàm chuẩn thườ ng

không đáp ứng đượ c yêu cầu đa dạng củangườ i sử dụng, cho nên khi thảo chươ ng,ta thườ ng phải tự xây dựng thêm các hàmmớ i.

Các hàm tự viết cần phải đượ c khai báo

trong phần khai báo của chươ ng trìnhchính, theo cú pháp sau:Function Tênhàm(tênthamsố : 

kiể uthamsố ) : kiểugíatrị ;{ Các khai báo dùng trong hàm }

Const ...

Type ...Var ...

Begin{Các lệnh của hàm}

Page 100: Lap Trinh Pascal-Vu Te Xien

5/14/2018 Lap Trinh Pascal-Vu Te Xien - slidepdf.com

http://slidepdf.com/reader/full/lap-trinh-pascal-vu-te-xien 100/205

 

Trưng Cao đng KTKT Bình Dương Biên so n : Vũ Bin

Ch ươ ng 4: Ch ươ ng trình con  Trang 100

Tênhàm:=Biểuthức;End;

 2.3. Các ví d ụ Ví dụ 1: Nhập dãy các số thực x1, x2, ...,

xn, tính tổng :

Phân tích: Giả sử đã có hàm Canba(z)

tính căn bậc ba của z, tức là :

khi đó, tổng S đượ c tính như sau:S:=0;For i:=1 to N do S:=S +

Canba(x[i]);Vấn đề còn lại là phải viết hàm tínhcăn ba của z. Hàm này có tên là Canba,tham số z kiểu thực, và gía trị hàm cũngkiểu thực, nó đượ c xây dựng trong chươ ngtrình như sau:

PROGRAM VIDU;Varx : Array[1..20] of Real;S : Real;

Page 101: Lap Trinh Pascal-Vu Te Xien

5/14/2018 Lap Trinh Pascal-Vu Te Xien - slidepdf.com

http://slidepdf.com/reader/full/lap-trinh-pascal-vu-te-xien 101/205

 

Trưng Cao đng KTKT Bình Dương Biên so n : Vũ Bin

Ch ươ ng 4: Ch ươ ng trình con  Trang 101

N, i : integer;FUNCTION Canba( z: Real) :Real;

{ Ham tinh can bac ba cua z}Var

F: Real;Begin

If z=0 then F:= 0;If z>0 then F:= exp( 1/3*Ln(z)

);If z<0 then F:= - exp( 1/3*Ln(-

z) );Canba:=F ;{Ten ham:=bieu

thuc};

End;BEGIN { vao chuong trinh chinh}Repeat

Write(‘ nhap N: ‘);Readln(N);Until ( N>0) and ( N<21);S:=0;

For i:=1 to N doBegin

Write(‘nhap x[‘, i, ‘]:’);Readln(x[i]);

Page 102: Lap Trinh Pascal-Vu Te Xien

5/14/2018 Lap Trinh Pascal-Vu Te Xien - slidepdf.com

http://slidepdf.com/reader/full/lap-trinh-pascal-vu-te-xien 102/205

 

Trưng Cao đng KTKT Bình Dương Biên so n : Vũ Bin

Ch ươ ng 4: Ch ươ ng trình con  Trang 102

S:=S + Canba( x[i] );End;

Writeln(‘ S= ‘, S:8:2);Readln;

END.3. Thủ tục (Procedure)  3.1. Thủ tụ c và cách khai báo

Tươ ng như hàm, thủ tục cũng là một

chươ ng trình con, song thủ tục khác hàm ở  chỗ: nếu như hàm luôn tr ả về một gía tr ị duy nhấ t thông qua tên hàm thì thủ t ục lạikhông tr ả về một gía tr ị nào thông qua têngọi của nó mà nó có tác dụng như một

lệnh.Thủ tục Readln(x, y, z) có nhiệm vụ nhập các gía trị từ bàn phím cho các biếnx, y, z. Thủ tục Write(x, y, z) in gía trị củax, y, z. Thủ tục Gotoxy(x, y) định vị contrỏ vào toạ độ cột x, dòng y trên màn hình.

Thủ tục Clrscr thì chỉ đơ n giản là xóa mànhình .v.v. . Như vậy thủ tục có thể khôngcó tham số hoặc có từ một đến nhiều thamsố.

Page 103: Lap Trinh Pascal-Vu Te Xien

5/14/2018 Lap Trinh Pascal-Vu Te Xien - slidepdf.com

http://slidepdf.com/reader/full/lap-trinh-pascal-vu-te-xien 103/205

 

Trưng Cao đng KTKT Bình Dương Biên so n : Vũ Bin

Ch ươ ng 4: Ch ươ ng trình con  Trang 103

 3.2 Thủ tụ c tự viế  tNgoài các thủ tục chuẩn đã có sẵn

trong Turbo Pascal, ngườ i thảo chươ ng cóthể tự xây dựng các thủ tục mớ i nhưngphải khai báo theo cú pháp sau:

Procedure Tênthủtục( tênthamsố :kiể uthamsố  ) ;

{ Các khai báo Const, Type, Var dùng

trong thủ tục }Begin

{Các lệnh của thủ tục }End;Đoạn khai báo trên phải đượ c đặt phía

dướ i trong phần khai báo của chươ ng trìnhchính. 3.3. Các ví d ụ về thủ tụ cVí d ụ 1: Giải phưong trình bậc haiax2+bx+c=0 bằng viết thủ tụcVề giải thuật chúng ta qua các bướ c sau :

 Bươ c 1 : Nhập các biến số a,b,c Bướ c 2 : Tính Denta=b2-4ac;

-Nếu Denta >0 Phươ ng trình có 2nghiệm phân biệt.

Page 104: Lap Trinh Pascal-Vu Te Xien

5/14/2018 Lap Trinh Pascal-Vu Te Xien - slidepdf.com

http://slidepdf.com/reader/full/lap-trinh-pascal-vu-te-xien 104/205

 

Trưng Cao đng KTKT Bình Dương Biên so n : Vũ Bin

Ch ươ ng 4: Ch ươ ng trình con  Trang 104

x1:=(-b+sqrt(denta)/2a

x2:=(-b-sqrt(denta)/2a-Nếu Denta =0 phươ ng trình có một

nghiệm kép.x1=x2=-b/2a

-Nếu Denta<0 Phươ ng trình vônghiệm.

Phươ ng trình cụ thể như sau:PROGRAM

Giai_Phuong_Trinh_Bac_Hai;Uses Crt;Var a,b,c,x1,x2,Denta:Real;

Procedure DentaDuong;BeginX1:=(-b+sqrt(Denta)/2/a;X2:=(-b-sqrt(Denta)/2/a;Writeln(‘Phuong trinh co hai

nghiem phan biet’);

Writeln(‘ x1 =’,x1:8:2);Writeln(‘ x2 =’,x2:8:2);Readln;

End;

Page 105: Lap Trinh Pascal-Vu Te Xien

5/14/2018 Lap Trinh Pascal-Vu Te Xien - slidepdf.com

http://slidepdf.com/reader/full/lap-trinh-pascal-vu-te-xien 105/205

 

Trưng Cao đng KTKT Bình Dương Biên so n : Vũ Bin

Ch ươ ng 4: Ch ươ ng trình con  Trang 105

Procedure Dentaam;Begin

Writeln(‘Phuong trinh vo nghiem’);Readln;

End;Procedure Dentakhong;

BeginWriteln(‘Phuong trinh co mot

nghiem kep’);Readln;

End;Begin

ClrScr;

Write(‘Hay nhap cac he so a, b, c =’);Readln(a,b,c);Denta:=b*b-4*a*c;

If Denta=0 then Dentakhong;If Denta<0 then Dentaam;If Denta >0 then Dentaduong;

Readln;End.II. Các tham số trong chươ ng trình con 

Page 106: Lap Trinh Pascal-Vu Te Xien

5/14/2018 Lap Trinh Pascal-Vu Te Xien - slidepdf.com

http://slidepdf.com/reader/full/lap-trinh-pascal-vu-te-xien 106/205

 

Trưng Cao đng KTKT Bình Dương Biên so n : Vũ Bin

Ch ươ ng 4: Ch ươ ng trình con  Trang 106

Trong khai báo ở  đầu của chươ ng trìnhcon, các tham số hình thức có từ khóa Varđứng trướ c gọi là tham số biế n số . Ngượ clại, nếu không có từ khóa Var đi trướ c thìgọi là tham số tr ị số .

Ví dụ, trong khai báo hàm tính lũy thừazk, ta viết :

Function Lt(z : Real ; k: Byte) :

Real;thì z và k đều là các tham hình

thức số trị số .Còn theo khai báo của thủ tục Doicho :

Procedure Doicho(Var u, v : Real)

; thì u và v đều là các tham hìnhthức số biến số.

1. Tham số trị số Tham số trị số hình thức đượ c cấp một ô

nhớ  riêng khi chươ ng trình con đượ c gọi

và bị xóa bỏ khi chươ ng trình con chạyxong. Nó đượ c coi như một biế n địa

 phươ ng, nhận gía trị ban đầu là tham số thực sự đượ c chuyển đến từ chươ ng trình

Page 107: Lap Trinh Pascal-Vu Te Xien

5/14/2018 Lap Trinh Pascal-Vu Te Xien - slidepdf.com

http://slidepdf.com/reader/full/lap-trinh-pascal-vu-te-xien 107/205

 

Trưng Cao đng KTKT Bình Dương Biên so n : Vũ Bin

Ch ươ ng 4: Ch ươ ng trình con  Trang 107

chính qua lờ i gọi chươ ng trình con. Sau đóchươ ng trình con có thể thay đổi giá trị củatham số trị hình thức ở bên trong chươ ngtrình con, song điều đó không làm thay đổigía trị của tham số thực sự.2. Tham số biến số 

Trong lờ i gọi chươ ng trình con cáctham số biế n số  thự c sự chỉ có thể là biế n

số , không thể là hằ ng số hay biể u thứ c.Ví dụ: các lệnh sau đây là sai :

Doicho(3, 4); { Sai vì 3 và 4 là cáchằ ng}

Doicho(a+1, b); { Sai vì a+1 là

một biể u thứ c}Giả sử trong chươ ng trình chính có haibiến thực a, b có gía trị a=4 và b=3. Để hoán đổi gía trị của a và b ta dùng lệnh:

Doicho(a, b);Vì u và v là các tham số biế n hình thứ c 

nên chươ ng trình con sẽ đồng nhất u vớ i avà đồng nhất v vớ i b. Mọi thay đổi củatham số u trong chươ ng trình con đều làthay đổi của chính biến a. Tươ ng tự, mọi

Page 108: Lap Trinh Pascal-Vu Te Xien

5/14/2018 Lap Trinh Pascal-Vu Te Xien - slidepdf.com

http://slidepdf.com/reader/full/lap-trinh-pascal-vu-te-xien 108/205

 

Trưng Cao đng KTKT Bình Dương Biên so n : Vũ Bin

Ch ươ ng 4: Ch ươ ng trình con  Trang 108

thay đổi của tham số v đều là thay đổi củachính biến b. Kết qủa là trướ c khi gọi thủ tục Doicho(a,b) thì a=3, b=4, sau khi thựchiện thủ tục xong thì a=4, b=3.

Vậy, các biế n số   đượ c truyề n vàochươ ng trình con d ướ i d ạng tham số biế nsố  thì sẽ  thay đổ i theo tham số  biế n số  hình thứ c t ươ ng ứ ng trong chươ ng trình

con.Thự c chấ t của sự truyề n tham số  đố i

vớ i các tham số biế n số là sự truyề n địachỉ .+Ví d ụ 1: Trong chươ ng trình dướ i đây,

thủ tục TT có hai tham số a và b : a làtham số trị số còn b là tham số biến số.Hãy xem sự thay đổi gía trị của hai biến x,y của chươ ng trình chính trướ c và sau khigọi thủ tục TT:

PROGRAM VIDU1;

Varx, y: Integer;

PROCEDURE TT( a : integer ; Var b :integer);

Page 109: Lap Trinh Pascal-Vu Te Xien

5/14/2018 Lap Trinh Pascal-Vu Te Xien - slidepdf.com

http://slidepdf.com/reader/full/lap-trinh-pascal-vu-te-xien 109/205

 

Trưng Cao đng KTKT Bình Dương Biên so n : Vũ Bin

Ch ươ ng 4: Ch ươ ng trình con  Trang 109

Begina:=a+6;b:=b+8;Writeln(‘a= ’, a);Writeln(‘b= ’, b);

End;BEGIN

x:=4;

y:=7;TT(x,y);

Writeln(‘x= ’, x);Writeln(‘y= ’, y);

Readln;

END.Tính chất trên đây của tham số biếncho phép khai thác thêm các khả năng củathủ tục và hàm. Ta biết thủ tục không trả về gía trị nào thông qua tên nó, còn hàmthì trả về một gía trị duy nhất qua tên hàm.

Song một chươ ng trình con hoàn toàn cóthể trả về hai hay nhiều gía trị thông quacác tham số biến, như ví dụ 2.

Page 110: Lap Trinh Pascal-Vu Te Xien

5/14/2018 Lap Trinh Pascal-Vu Te Xien - slidepdf.com

http://slidepdf.com/reader/full/lap-trinh-pascal-vu-te-xien 110/205

 

Trưng Cao đng KTKT Bình Dương Biên so n : Vũ Bin

Ch ươ ng 4: Ch ươ ng trình con  Trang 110

+Ví d ụ 2: Chươ ng trình sau nhập vào haicạnh a, b của hình chữ nhật và sử dụngmột thủ tục để tính cả diện tích và chu vi.

PROGRAM Vidu2 ;Var

a,b, S, L: Real;Procedure TINH( c1, c2 : Real ; Var

DT, CV : Real);

{ Tinh dien tinh DT và chu vi CV theohai canh c1 và c2}

BeginDT:=c1*c2;CV:=2*(c1+ c2);

End;BeginWrite(‘ Nhap hai canh a, b: ‘);

Readln(a,b);TINH(a, b, S, L);Writeln(‘Dien tich= ’, S:4:1);

Writeln(‘Chu vi = ’, L:4:1);Readln;

End.III. Phạm vi tác dụng của các khai báo 

Page 111: Lap Trinh Pascal-Vu Te Xien

5/14/2018 Lap Trinh Pascal-Vu Te Xien - slidepdf.com

http://slidepdf.com/reader/full/lap-trinh-pascal-vu-te-xien 111/205

 

Trưng Cao đng KTKT Bình Dương Biên so n : Vũ Bin

Ch ươ ng 4: Ch ươ ng trình con  Trang 111

1. Biến toàn cục và biến địa phươ ngVì chươ ng trình con cũng là một

chươ ng trình nên trong chươ ng trình concũng có khai báo biến, khai báo hằng,.v.v., cũng có khai báo chươ ng trình concủa riêng nó, ...

Các biến đượ c khai báo trong chươ ngtrình chính gọi là biến toàn cục (global

variable), chúng dùng đượ c ở mọi nơ i kể từ lúc khai báo cho đến khi kết thúcchươ ng trình.

Các biến đượ c khai báo trong mộtchươ ng trình con gọi là biến địa phươ ng

(local variable). Lý do gọi là địa phươ ng vìchúng chỉ có tác dụng trong chươ ng trìnhcon nơ i nó đượ c khai báo mà thôi.+Ví d ụ  : Xét chươ ng trình dướ i đây :

Program Vidu;Var

x: Integer;Procedure TTUC1;Var

y: Integer;

Page 112: Lap Trinh Pascal-Vu Te Xien

5/14/2018 Lap Trinh Pascal-Vu Te Xien - slidepdf.com

http://slidepdf.com/reader/full/lap-trinh-pascal-vu-te-xien 112/205

 

Trưng Cao đng KTKT Bình Dương Biên so n : Vũ Bin

Ch ươ ng 4: Ch ươ ng trình con  Trang 112

Beginy:=x+5;Writeln(y);

End;Begin

x:=10;TTUC1;Writeln(y); { lenh nay bi loi}

Readln;End.

2. Phạm vi tác dụng của các khai báo 

Phạm vi tác dụng hay tầm tác dụngcủa biến (hay hằng, kiểu dữ liệu, chươ ng

Page 113: Lap Trinh Pascal-Vu Te Xien

5/14/2018 Lap Trinh Pascal-Vu Te Xien - slidepdf.com

http://slidepdf.com/reader/full/lap-trinh-pascal-vu-te-xien 113/205

 

Trưng Cao đng KTKT Bình Dương Biên so n : Vũ Bin

Ch ươ ng 4: Ch ươ ng trình con  Trang 113

trình con) là khu vực mà trong đó nó cóthể sử dụng đượ c, ngoài khu vực đó nó bị xem là chưa khai báo. Vậy phạm vi sử dụng của biến trong chươ ng trình conchính là các biến đã khai báo trong chươ ngtrình con và “cha” của nó.Ví d ụ : Nếu chươ ng trình chính và thủ tục

B có khai báo hai biến trùng tên là x, thì

trong thủ tục B chỉ có biến x địa phươ ngcủa B là có tác dụng, còn biến x củachươ ng trình chính tạm thờ i bị che đi. Rakhỏi thủ tục B, biến x địa phươ ng của B bị xóa và biến x toàn cục hoạt động lại bình

thườ ng.+Ví d ụ 4: Xét chươ ng trình sau:Program Vidu4;Var

x: Integer;Procedure B;

Varx: Integer;Begin

x:=5;

Page 114: Lap Trinh Pascal-Vu Te Xien

5/14/2018 Lap Trinh Pascal-Vu Te Xien - slidepdf.com

http://slidepdf.com/reader/full/lap-trinh-pascal-vu-te-xien 114/205

 

Trưng Cao đng KTKT Bình Dương Biên so n : Vũ Bin

Ch ươ ng 4: Ch ươ ng trình con  Trang 114

Writeln(x);End;

Beginx:=10;B;Writeln(x);Readln;

End.

IV.Sự tham khảo trướ c và sự  đệ qui 1. Tham khảo trướ c (Forwardreference)

Bình thườ ng khi trong chươ ng trìnhchính có hai chươ ng trình con A, B đượ c

khai báo kế tiếp nhau A trướ c, B sau, thì Bgọi đượ c A nhưng A không gọi đượ c B.Khi đó để A gọi đượ c B ta phải tiến hànhkhai báo phần đầu của B vớ i từ khóaForward trướ c khi khai báo B đầy đủ.+Ví d ụ 

PROGRAM Vidu;Procedure B; Forward ; { khai bao

tham khao B truoc}Procedure A;

Page 115: Lap Trinh Pascal-Vu Te Xien

5/14/2018 Lap Trinh Pascal-Vu Te Xien - slidepdf.com

http://slidepdf.com/reader/full/lap-trinh-pascal-vu-te-xien 115/205

 

Trưng Cao đng KTKT Bình Dương Biên so n : Vũ Bin

Ch ươ ng 4: Ch ươ ng trình con  Trang 115

BeginWriteln(‘ Chao chi ‘);B;

End;Procedure B;

BeginWriteln(‘ Chao anh ‘);

End;

BEGINA;

Readln;END.2. Sự  đệ qui (Recursion):

Một thủ tục hay hàm có thể gọi chínhnó, khi đó ta nói có sự đệ qui.Ví dụ 7: Tính S= k! bằng đệ qui. Ta

viết :

Muốn tính k! ta phải tính đượ c (k-1)!,muốn tính (k-1)! lại phải tính (k-2)!, ...,suy ra cuối cùng phải tính đượ c 0!, nhưngvì 0!=1 nên qúa trình kết thúc.

Page 116: Lap Trinh Pascal-Vu Te Xien

5/14/2018 Lap Trinh Pascal-Vu Te Xien - slidepdf.com

http://slidepdf.com/reader/full/lap-trinh-pascal-vu-te-xien 116/205

 

Trưng Cao đng KTKT Bình Dương Biên so n : Vũ Bin

Ch ươ ng 4: Ch ươ ng trình con  Trang 116

Chươ ng trình sau nhập N, tính và in gíatrị N!. Trong chươ ng trình có xây dựng vàsử dụng một hàm đệ quy tính k! :PROGRAM Vidu1;

{ Tinh N! bang đ e qui}Var

N : Byte;Function Gt( k : Byte) : Real;

{ Ham tinh k! bang đ e qui}Begin

If k=0 then Gt:= 1Else

Gt:= k* Gt(k-1);

End;BEGINRepeat

Write(‘ Nhap N: ‘);Readln(N);

Until N>0;

Writeln( N, ‘ != ‘, Gt(N):0:0 );Readln;

END.+Ví d ụ 2

Page 117: Lap Trinh Pascal-Vu Te Xien

5/14/2018 Lap Trinh Pascal-Vu Te Xien - slidepdf.com

http://slidepdf.com/reader/full/lap-trinh-pascal-vu-te-xien 117/205

 

Trưng Cao đng KTKT Bình Dương Biên so n : Vũ Bin

Ch ươ ng 4: Ch ươ ng trình con  Trang 117

Tính số hạng U(k) của dãy Fibonacibằng đệ qui:

U(0)=1, U(1)=1, U(k)=U(k-1) +U(k-2) vớ i k>1.

Ta viết:U(k) = 1 nếu k=0 hoặc k=1U(k) = U(k-1) + U(k-2) nếu k>1.

Chươ ng trình sau in ra số Fibonaci thứ 

N bằng cách gọi hàm đệ qui Fibo.PROGRAM Vidu2; { Tinh so

Fibonaci thu N }Var

N : Integer;

Function Fibo( k : Integer) : Integer; { Ham tinh so Fibonaci thu k bang đ e qui}Begin

If k=0 then Fibo:= 1else

if k=1 then Fibo:=1

elseFibo:=Fibo(k-1) + Fibo( k-2);

End;BEGIN

Page 118: Lap Trinh Pascal-Vu Te Xien

5/14/2018 Lap Trinh Pascal-Vu Te Xien - slidepdf.com

http://slidepdf.com/reader/full/lap-trinh-pascal-vu-te-xien 118/205

 

Trưng Cao đng KTKT Bình Dương Biên so n : Vũ Bin

Ch ươ ng 4: Ch ươ ng trình con  Trang 118

Write(‘ Nhap N: ‘);Readln(N);Writeln( ‘ So Fibo thu‘, N, ‘ = ‘,

Fibo(N) );Readln;

END.

Bài tập ứ ng dụng

1.Viết chươ ng trình con tính giai thừa củamột số a.2.Viết chươ ng trình con kiểm tra một số nguyên x có là số nguyên tố hay không?3.Viết Chươ ng trình con Tìm USCLN,

BSCNN của hai số a,b.4.Viết chươ ng trình con tính bình phươ ngcủa một số a.5.Viết chươ ng trình con tính Căn bậc 2 củamột số a.6.Viết chươ ng trình con tính Căn bậc 3 của

một số a.

Page 119: Lap Trinh Pascal-Vu Te Xien

5/14/2018 Lap Trinh Pascal-Vu Te Xien - slidepdf.com

http://slidepdf.com/reader/full/lap-trinh-pascal-vu-te-xien 119/205

 

Trưng Cao đng KTKT Bình Dương Biên so n : Vũ Bin

Ch ươ ng 5: D  li u có c  u trúc  Trang 119

Chươ ng VDỮ LIỆU CÓ CẤU TRÚC

I.Khái niệm về dữ liệu có cấu trúcTrong Turbo Pascal ta đã dùng các

kiểu dữ liệu vô hướ ng ( đơ n giản chuẩn)như các kiểu : Boolean, số nguyên, số thực, char, đoạn con, liệt kê. Ngoài raPascal còn cho phép ta xây dựng các kiểu

dữ liệu khác từ các kiểu đơ n giản chuẩn,đó là dữ liệu có cấu trúc.

Dữ liệu có cấu trúc của Pascal có cáckiểu : Mảng(Array), chuỗi(String), Tậphợ p(Set), Bản ghi(Record), Tập tin(File),

Con trỏ (Pointer).Ngôn ngữ cho phép dùng nhiều dữ liệucấu trúc phức tạp thì ngôn ngữ đó càngmạnh và dễ sử dụng.II.Cấu trúc dữ liệu mảng

1. Mảng và cách khai báo mảng 

Mảng là một tập gồm nhiều phần tử cócùng chung một kiểu dữ liệu. Mỗi phần tử của mảng có một đại lượ ng xác định vị trí tươ ng đối của phần tử đó so vớ i các phần

Page 120: Lap Trinh Pascal-Vu Te Xien

5/14/2018 Lap Trinh Pascal-Vu Te Xien - slidepdf.com

http://slidepdf.com/reader/full/lap-trinh-pascal-vu-te-xien 120/205

 

Trưng Cao đng KTKT Bình Dương Biên so n : Vũ Bin

Ch ươ ng 5: D  li u có c  u trúc  Trang 120

tử khác trong mảng, gọi là chỉ số . Các yếutố để xác định một mảng gồm có:

-Tên mảng- Kiểu dữ liệu chung của các phần tử 

trong mảng- Kiểu dữ liệu của chỉ số và phạm vi

của chỉ số.Kiểu dữ liệu của các phần tử mảng là

mọi kiểu dữ liệu mà một biến có thể có.Kiểu chỉ có thể là kiểu đếm đượ c :

nguyên, ký tự, lôgic, liệt kê hay đoạn con.2.Mảng một chiều

 2.1 Khai báo mả ng mộ t chiề u 

TYPETênkiể umả ng = Array[m1 . . m2]  of Tênkiể ud ữ liệ u;

Ở đây m1, m2 là hai hằng xác địnhphạm vi của chỉ số, chúng có chung mộtkiểu dữ liệu và m1< m2.

Ví dụ :Type

Mang1 = array[0..10] of Real;

Page 121: Lap Trinh Pascal-Vu Te Xien

5/14/2018 Lap Trinh Pascal-Vu Te Xien - slidepdf.com

http://slidepdf.com/reader/full/lap-trinh-pascal-vu-te-xien 121/205

 

Trưng Cao đng KTKT Bình Dương Biên so n : Vũ Bin

Ch ươ ng 5: D  li u có c  u trúc  Trang 121

Mang2 = array[1..5] of String[18];

Mang3 = array[‘a’..’d’] of Integer;

 2.2: Khai báo biế  n mả ngVAR

Tênmảng : Tênkiểumảng ;Ví dụ:

VarA : Mang1;Hten: Mang2;B: Mang3;

 2.3 Khai báo mả ng có gán tr ị ban đầuPascal cho phep vừa khai báo mảng vừa

gán gía trị ban đầu cho các phần tử mảng,chẳng hạn như dướ i đây:

ConstX : array[1..5] of Integer = (12,

14, 16, 18, 20) ;

Page 122: Lap Trinh Pascal-Vu Te Xien

5/14/2018 Lap Trinh Pascal-Vu Te Xien - slidepdf.com

http://slidepdf.com/reader/full/lap-trinh-pascal-vu-te-xien 122/205

 

Trưng Cao đng KTKT Bình Dương Biên so n : Vũ Bin

Ch ươ ng 5: D  li u có c  u trúc  Trang 122

Khi đó X là một mảng gồm 5 phần tử cùng kiểu nguyên và có giá trị X[1]=12,X[2]=14, X[3]=16, X[4]=18, X[5]=20. 2.4 Khai báo trự  c tiế  p biế  n mả ng

VARTênmả ng : Array[m1 . . m2] 

 of Tênkiể ud ữ liệ u ;Ví dụ: Cho khai báo dướ i đây:

VarA : Array[0..10] of Real;Hten: Array[1..5] of 

String[18];B: Array[‘a’..’d’] of Integer;

 2.5 Truy xuấ  t các phầ n tử mả ngCác xử lý trên mảng đượ c quy về xử lý

từng phần tử mảng. Để xác định một phầntử của mảng, ta dùng cách viết :

Tênmảng[ chỉ số của phần tử]

Các phép xử lý trên phần tử mảng+Phép gán : Ta có thể gán một giá trị 

cho một phần tử mảng

Page 123: Lap Trinh Pascal-Vu Te Xien

5/14/2018 Lap Trinh Pascal-Vu Te Xien - slidepdf.com

http://slidepdf.com/reader/full/lap-trinh-pascal-vu-te-xien 123/205

 

Trưng Cao đng KTKT Bình Dương Biên so n : Vũ Bin

Ch ươ ng 5: D  li u có c  u trúc  Trang 123

Ví dụ : A[0]:= 15.8;A[1]:= 2*A[0];

Hten[3]:= ‘Nguyen ThiLoan’; B[‘a’]:=100;

+Nhập dữ liệu : Khi nhập dữ liệu chocác phần tử của một mảng , ta có thể dùngcâu lệnh For, While hay Repeat.

Ví dụ: nhập dữ liệu cho các phần tử 

của mảng A có10 phần tử:For i:=0 to 10 do

BeginWrite(‘A[‘,I,’]=’);Readln(A[i]);

End;

hoặc (dùng While) :i:=0;While i<= 10 do

BeginWrite(‘A[‘,I,’]=’);Readln(A[i]);

i:=i+1;

End;+In dữ liểu : Để in các gía trị của mảng

A lên màn hình, ta viết :For i:=0 to 10 do Write(A[i]:6:2);

Page 124: Lap Trinh Pascal-Vu Te Xien

5/14/2018 Lap Trinh Pascal-Vu Te Xien - slidepdf.com

http://slidepdf.com/reader/full/lap-trinh-pascal-vu-te-xien 124/205

 

Trưng Cao đng KTKT Bình Dương Biên so n : Vũ Bin

Ch ươ ng 5: D  li u có c  u trúc  Trang 124

 2.6. Các bài cơ bả n về mả ng+ Đếm các phần tử mảng thỏa mãn một

điều kiện nào đó.Ta xét ví dụ nhập một mảng A có N

phần tử, in mảng A lên màn hình, và đếmxem mảng A có bao nhiêu số dươ ng :

PROGRAM DemSo; { Đem soduong trong mang}

TypeKmang = Array[1..20] of Real;

VarA: Kmang;i, N, Dem : Integer;

BeginRepeatWrite(‘ Nhap so phan tư N : ‘);

Readln(N);Until (N>0) and ( N<21);{ Nhap mang }

For i:=1 to N dobegin

Write(‘Nhap A[‘ , i , ‘ ]:‘);Readln( A[i] );

Page 125: Lap Trinh Pascal-Vu Te Xien

5/14/2018 Lap Trinh Pascal-Vu Te Xien - slidepdf.com

http://slidepdf.com/reader/full/lap-trinh-pascal-vu-te-xien 125/205

 

Trưng Cao đng KTKT Bình Dương Biên so n : Vũ Bin

Ch ươ ng 5: D  li u có c  u trúc  Trang 125

end;{ In mang A}

Writeln(‘ Mang A la : ’);For i:=1 to N do Write(A[i]:3:0);Writeln;

{ Dem so duong }Dem:=0;

For i:=1 to N do If A[i]>0 then

Dem:=Dem+1;Writeln(‘ So so duong = ‘ , Dem );Readln;

End.

+ Bài tóan tìm số lớ n nhấ t của dãy số   A1, A2, ..., An. Gọi Max là biến chứa số lớ n nhất phải

tìm, thế thì :Bướ c 1: Gán Max:=A[1];Bướ c 2: Nếu Max<A[2] thì gán

Max:=A[2];Bướ c 3: Nếu Max<A[3] thì gán

Max:=A[3];...

Page 126: Lap Trinh Pascal-Vu Te Xien

5/14/2018 Lap Trinh Pascal-Vu Te Xien - slidepdf.com

http://slidepdf.com/reader/full/lap-trinh-pascal-vu-te-xien 126/205

 

Trưng Cao đng KTKT Bình Dương Biên so n : Vũ Bin

Ch ươ ng 5: D  li u có c  u trúc  Trang 126

Bướ c n: Nếu Max<A[n] thì gánMax:=A[n];

+  Bài sắ  p xế  p mảng t ă ng d ần (hay giảmd ần) 

Có những phươ ng pháp sắp xếp mảngkhác nhau, ở   đây chỉ xin giớ i thiệu mộtphươ ng pháp, tuy chưa phải là hay nhưng

đơ n giản và dễ hiểu cho những ngườ i mớ ilập trình, đó là phươ ng pháp lựa chọn trựctiếp (Bubble sort).

Ý tưở ng của phươ ng pháp là như sau:Bướ c 1: Tìm số nhỏ nhất trong các phần

tử A[1], A[2],.., A[n] và để vào vị trí đầutiên A[1].Bướ c 2: Tìm số nhỏ nhất trong các phần

tử A[2], A[3],.., A[n] và để vào vị trí thứ hai A[2]..v.v.

Bướ c n-1: Tìm số nhỏ nhất trong hai

phần tử A[n-1], A[n] và để vào vị trí n-1.Tóm lại, thuật giải sắp xếp dãy A tăngđượ c viết như sau:

For i:=1 to N-1 do

Page 127: Lap Trinh Pascal-Vu Te Xien

5/14/2018 Lap Trinh Pascal-Vu Te Xien - slidepdf.com

http://slidepdf.com/reader/full/lap-trinh-pascal-vu-te-xien 127/205

 

Trưng Cao đng KTKT Bình Dương Biên so n : Vũ Bin

Ch ươ ng 5: D  li u có c  u trúc  Trang 127

For j:=i+1 to N doif A[i]>A[j] then

begin { Đoi cho A[i] va A[j] }Z:=A[i];A[i]:=A[j];A[j]:=Z;

end;Trong đó N là số phần tử của dãy A còn

Z là một biến trung gian có cùng kiểu dữ liệu vớ i các phần tử của mảng A.

Chươ ng trình dướ i đây tìm số lớ n nhấtcủa mảng A và sắp dãy A tăng dần:

PROGRAM Tangdan;

Uses CRT;TypeKmang = array[1..20] of Real;

Vari, j, N : Integer;

A: Kmang;

z, Max : Real;Begin

Clrscr;Repeat

Page 128: Lap Trinh Pascal-Vu Te Xien

5/14/2018 Lap Trinh Pascal-Vu Te Xien - slidepdf.com

http://slidepdf.com/reader/full/lap-trinh-pascal-vu-te-xien 128/205

 

Trưng Cao đng KTKT Bình Dương Biên so n : Vũ Bin

Ch ươ ng 5: D  li u có c  u trúc  Trang 128

Write(‘ Nhap so phan tư N : ‘);Readln(N);

Until (N>0) and ( N<21);For i:=1 to N do { Nhap mang }begin

Write(‘Nhap A[‘, i, ‘]: ‘);Readln(A[i]);

end;

{ Tim so lon nhat }Max :=A[1];For i :=1 to N do if Max< A[i] then

Max:=A[i];Writeln(‘ So lon nhat la: ’ , Max : 4:1);

{ Sap xep day tang }For i:=1 to N-1 doFor j:=i+1 to N doIf A[i]>A[j] then

begin { Doi cho A[i] va A[j] }z:=A[i];

A[i]:=A[j];A[j]:=z;

end;Writeln(‘ Day da sap tang la : ‘);

Page 129: Lap Trinh Pascal-Vu Te Xien

5/14/2018 Lap Trinh Pascal-Vu Te Xien - slidepdf.com

http://slidepdf.com/reader/full/lap-trinh-pascal-vu-te-xien 129/205

 

Trưng Cao đng KTKT Bình Dương Biên so n : Vũ Bin

Ch ươ ng 5: D  li u có c  u trúc  Trang 129

For i:=1 to N do Write(A[i]:3:0);Readln;

End.+ Kiể m tra mảng có thỏa một tính chấ t không.

Ta thườ ng gặp bài kiểm tra xem mọiphần tử của mảng A có thỏa mãn một điềukiện không, ví dụ mảng A có phải là dãy

tăng không, có phải là dãy đối xứngkhông, có phải là một cấp số cộng khôngv.v... Cách thực hiện như sau :

Ta sử dụng một biến Kiemra kiểuBoolean thực hiện như sau:

Kiemtra:=TRUE;For i:=1 to N doNếu A[i] không thỏa điều

kiện thì Kiemtra:= FALSE;Việc xác định điều kiện là tùy từng bài

cụ thể.

Ví dụ: Kiểm tra xem A có phải là mộtdãy đối xứng không ?

Dãy 1 3 5 4 5 3 1 là đối xứng.

Page 130: Lap Trinh Pascal-Vu Te Xien

5/14/2018 Lap Trinh Pascal-Vu Te Xien - slidepdf.com

http://slidepdf.com/reader/full/lap-trinh-pascal-vu-te-xien 130/205

 

Trưng Cao đng KTKT Bình Dương Biên so n : Vũ Bin

Ch ươ ng 5: D  li u có c  u trúc  Trang 130

Dãy 1 3 5 4 2 3 1 là không đốixứng vì A[3] khác A[5].

Giả thiết biến Kiemtra đã đượ c khai báokiểu Boolean. Trong chươ ng trình ta dùngcác lệnh sau:

Kiemtra:=TRUE;For i:=1 to N do

if A[i]<>A[N-i+1] then

Kiemtra:=FALSE;If Kiemtra=TRUE then

writeln(‘ Day A doi xung’)else

Writeln( ‘Day A khong đoi

xung ‘);3. Mảng hai chiều (ma trận)  3.1. Khai báo mả ng hai chiề u

+Kiể u d ữ liệuTYPE

Tênkiểumảng= Array[n1..n2 ,m1..m2] of Tênkiểudliệu;

Trong đó n1, n2 là các hằng có cùngkiểu dữ liệu và n1.. n2, chúng xác định

Page 131: Lap Trinh Pascal-Vu Te Xien

5/14/2018 Lap Trinh Pascal-Vu Te Xien - slidepdf.com

http://slidepdf.com/reader/full/lap-trinh-pascal-vu-te-xien 131/205

 

Trưng Cao đng KTKT Bình Dương Biên so n : Vũ Bin

Ch ươ ng 5: D  li u có c  u trúc  Trang 131

phạm vi của chỉ số thứ nhất, gọi là chỉ số dòng. Tươ ng tự m1, m2 là các hằng cócùng kiểu dữ liệu và m1 .. m2, chúng xácđịnh phạm vi của chỉ số thứ hai, gọi là chỉ số cột. Giống như mảng một chiều, kiểudữ liệu của các chỉ số chỉ có thể là kiểuđếm đượ c: nguyên, ký tự, lôgic, liệt kê hayđoạn con, không đượ c là kiể u thự c hay

chuỗ i.+ Biế n mảng

VARTênmảng : Tênkiểumảng ;

Ví dụ : Type 

Kmang1 = array[1..2, 1..3] of Real;Kmang2 = array[‘a’..’c’ , 1..3]

of String[15];

Var 

X : Kmang1;Y : Kmang2;

Page 132: Lap Trinh Pascal-Vu Te Xien

5/14/2018 Lap Trinh Pascal-Vu Te Xien - slidepdf.com

http://slidepdf.com/reader/full/lap-trinh-pascal-vu-te-xien 132/205

 

Trưng Cao đng KTKT Bình Dương Biên so n : Vũ Bin

Ch ươ ng 5: D  li u có c  u trúc  Trang 132

Ghi chú : Trong mảng hai chiều TP chophép khai báo trực tiếp biến mảng, cáchkhai báo như sau :VAR

Tênmảng : Array[n1..n2 , m1..m2] of Tênkiểudữliệu;Ví dụ, cho khai báo :

Var 

X : array[1..2, 1..3] of Real;Y : array[‘a’..’c’ , 1..3] of 

String[15];Kết quả ta nhận đượ c hai mảng hai chiều:

Mảng X gồm 6 phần tử cùng kiểu dữ 

liệu thực: X[1,1], X[1,2], X[1,3]X[2,1], X[2,2], X[2,3]

Mảng Y gồm 9 phần tử cùng kiểu chuỗiString[15] :

Y[‘a’,1], Y[‘a’,2], Y[‘a’, 3]

Y[‘b’,1], Y[‘b’,2], Y[‘b’, 3]Y[‘c’,1], Y[‘c’,2], Y[‘c’, 3]

Page 133: Lap Trinh Pascal-Vu Te Xien

5/14/2018 Lap Trinh Pascal-Vu Te Xien - slidepdf.com

http://slidepdf.com/reader/full/lap-trinh-pascal-vu-te-xien 133/205

 

Trưng Cao đng KTKT Bình Dương Biên so n : Vũ Bin

Ch ươ ng 5: D  li u có c  u trúc  Trang 133

Chú ý: - Có thể xem mảng hai chiều làmảng một chiều mà mỗi phần tử của nó lạilà một mảng một chiều. 3.2 Khai báo và gán giá tr ị ban đầu 

Có thể khai báo và gán giá trị ngay chomột mảng hai chiều, chẳng hạn:

Type Kmang1 = array[1..2, 1..3] of 

Real;Const 

X : Kmang1 = ( (1.5, 2.5,3.5), (5.0, 6.5, 7.0) );

Khi đó X là một mảng hai chiều có 6

phần tử cùng kiểu thực và có giá trị là:X[1,1]=1.5, X[1,2]=2.5,X[1,3]=3.5

X[2,1]=5.0, X[2,2]=6.5,X[2,3]=7.0

Cần nhấn mạnh rằng mặc dù từ khóa ở  

đây là Const song X và các phần tử của Xcó thể dùng như các biến, tức là các phầntử của X có thể thay đổi giá trị đượ c. 3.3 Các thao tác trên ma trậ n

Page 134: Lap Trinh Pascal-Vu Te Xien

5/14/2018 Lap Trinh Pascal-Vu Te Xien - slidepdf.com

http://slidepdf.com/reader/full/lap-trinh-pascal-vu-te-xien 134/205

 

Trưng Cao đng KTKT Bình Dương Biên so n : Vũ Bin

Ch ươ ng 5: D  li u có c  u trúc  Trang 134

Để xác định một phần tử trong mảng haichiều, ta viết:

Tênbiếnmảng[chỉ số 1, chỉ số 2]Ví dụ:

X[1,1]:=12.5;X[2,1]:=X[1,1]+15;Y[‘a’,1]:=‘Tran Thi Mai’;

Để nhập dữ liệu cho một mảng hai

chiều, ta phải dùng hai vòng lặp duyệt theohai chỉ số, chẳng hạn muốn nhập dữ liệucho mảng X, ta viết:

For i:=1 to 2 doFor j:=1 to 3 do

begin Write(‘nhập phần tử hàng ‘,i, ‘ cột ‘, j , ‘: ‘);

Readln(X[i, j]);end;

Tươ ng tự, lệnh nhập dữ liệu cho mảng

Y đượ c viết là:For ch:=‘a’ to ‘c’ doFor j:=1 to 3 do

begin

Page 135: Lap Trinh Pascal-Vu Te Xien

5/14/2018 Lap Trinh Pascal-Vu Te Xien - slidepdf.com

http://slidepdf.com/reader/full/lap-trinh-pascal-vu-te-xien 135/205

 

Trưng Cao đng KTKT Bình Dương Biên so n : Vũ Bin

Ch ươ ng 5: D  li u có c  u trúc  Trang 135

Write(‘Nhap phan tư hang ‘, ch , ‘cot ‘, j , ‘: ‘);

Readln(X[ch, j]);end;

trong đó ch là biến kiểu ký tự, còn i và j làcác biến nguyên.Để in mảng X lên màn hình, trình bày

giống như cách viết ma trận, mỗi hàng in

trên một dòng, ta dùng lệnh :For i:=1 to 2 do

beginFor j:=1 to 3 do write(X[i, j]:3:1);

{ in hàng thứ i}

Writeln; { xuố ng dòng, chuẩ n bị inhàng tiế  p theo }end;

 3.4. Các ví d ụ về ma trậ nVì ma trận là mảng một chiều của các

mảng một chiều nên nhiều bài về mảng

đượ c mở rộng tự nhiên cho ma trận.Ví dụ 1: Tính t ổ ng của hai ma tr ận 

Page 136: Lap Trinh Pascal-Vu Te Xien

5/14/2018 Lap Trinh Pascal-Vu Te Xien - slidepdf.com

http://slidepdf.com/reader/full/lap-trinh-pascal-vu-te-xien 136/205

 

Trưng Cao đng KTKT Bình Dương Biên so n : Vũ Bin

Ch ươ ng 5: D  li u có c  u trúc  Trang 136

Nhập vào hai ma trận A, B cấp NxM.Tính ma trận C là tổng của hai ma trận Avà B, in ma trận C lên màn hình.

Công thức tính các phần tử của ma trậnC= A+B :

C[i,j ] = A[i, j] + B[i, j] vớ i i=1,..., N,và j=1,..., M

Chươ ng trình như sau:

PROGRAM Tong_hai_ma_tran;Uses CRT;Var

A, B, C : Array[1..10, 1..10] of Real;i, j , N, M : Integer;

BeginClrscr;Repeat

Write(‘Nhap so hang N, so cot M :‘); Readln(N, M);

Until ( N>0) and ( N<11) and ( M>0)

and (M<11);For i:=1 to N doFor j:=1 to M dobegin

Page 137: Lap Trinh Pascal-Vu Te Xien

5/14/2018 Lap Trinh Pascal-Vu Te Xien - slidepdf.com

http://slidepdf.com/reader/full/lap-trinh-pascal-vu-te-xien 137/205

 

Trưng Cao đng KTKT Bình Dương Biên so n : Vũ Bin

Ch ươ ng 5: D  li u có c  u trúc  Trang 137

Write(‘Nhap A[‘ , i, ‘,’ , j , ‘]:‘); Readln(A[i,j]);

end;{ nhap B va tinh C luôn}For i:=1 to N doFor j:=1 to M dobegin

Write(‘Nhập B[‘ , i, ‘,’ , j , ‘]: ‘);

Readln(B[i,j]);C[i, j]:=A[i, j] + B[i, j];

end;{ In ma tran A len man hinh }Writeln(‘ Ma tran A la :’);

For i:=1 to N dobeginFor j:=1 to M do write(A[i, j]:3:0);Writeln;

end;{ In ma tran B len man hinh }

Writeln(‘ Ma tran B la :’);For i:=1 to N dobegin

For j:=1 to M do write(B[i, j]:3:0);

Page 138: Lap Trinh Pascal-Vu Te Xien

5/14/2018 Lap Trinh Pascal-Vu Te Xien - slidepdf.com

http://slidepdf.com/reader/full/lap-trinh-pascal-vu-te-xien 138/205

 

Trưng Cao đng KTKT Bình Dương Biên so n : Vũ Bin

Ch ươ ng 5: D  li u có c  u trúc  Trang 138

Writeln;end;

{ In ma tran C len man hinh }Writeln(‘ Ma tran C la :’);For i:=1 to N dobegin

For j:=1 to M do write(C[i, j]:3:0);Writeln;

end;Readln;

End.Ví dụ 2: Tìm số lớ n nhấ t (số nhỏ nhấ t)

trong ma tr ận A: 

Giả sử A là ma trận N hàng, M cột, vàMax là biến chứa số lớ n nhất phải tìm.Khở i đầu ta gán A[1,1] cho Max, sau đóduyệt tất cả các phần tử của ma trận, nếuphần tử nào lớ n hơ n Max thì lưu nó vàoMax, tức là:

Max:=A[1,1];For i:=1 to N do

For j:=1 to M do

Page 139: Lap Trinh Pascal-Vu Te Xien

5/14/2018 Lap Trinh Pascal-Vu Te Xien - slidepdf.com

http://slidepdf.com/reader/full/lap-trinh-pascal-vu-te-xien 139/205

 

Trưng Cao đng KTKT Bình Dương Biên so n : Vũ Bin

Ch ươ ng 5: D  li u có c  u trúc  Trang 139

if Max< A[i, j] then Max:=A[i, j];

Writeln(‘ Số lớ n nhất là ’, Max);Ví dụ 3: Tìm số lớ n nhấ t (hay số nhỏ 

nhấ t) trong t ừ ng hàng (hay t ừ ng cột) củama tr ận A: 

Hàng i của ma trận A có dạng :A[i,1], A[i,2], ..., A[i,M]

Nếu xem i là cố định thì đó là mảng mộtchiều có M phần tử, nên số lớ n nhất củahàng i đượ c tìm bằng các lệnh:

Max:=A[i, 1];For j:=1 to M do

if Max< A[i, j] then Max:=A[i, j];Writeln(‘Sln của hàng ‘, i, ‘ là: ‘, Max) ;Vì có cả thảy N hàng nên công việc trên

phải làm N lần ứng vớ i i=1, 2, ..., N, tứclà:

For i:=1 to N do

begin { Tim so lon nhat cua hang i }Max:=A[i, 1];For j:=1 to M do

if Max< A[i, j] then Max:=A[i, j];

Page 140: Lap Trinh Pascal-Vu Te Xien

5/14/2018 Lap Trinh Pascal-Vu Te Xien - slidepdf.com

http://slidepdf.com/reader/full/lap-trinh-pascal-vu-te-xien 140/205

 

Trưng Cao đng KTKT Bình Dương Biên so n : Vũ Bin

Ch ươ ng 5: D  li u có c  u trúc  Trang 140

Writeln(‘So lon nhat cua hang ‘, i, ‘là: ‘, Max) ;

end;Ví dụ 4: Kiể m tra ma tr ận vuông A có

đố i xứ ng không ?.Ma trận vuông

A gọi là đối xứngnếu nó không thay

đổi khi ta đổi cột thành hàng và đổi hàngthành cột.Hai ma trận A,B : A là đối xứng, còn Bkhông đối xứng vì B[1,2] <> B[2,1].

Chỉ cần có một cặp i, j sao cho

A[i,j]<>A[j,i] thì A là ma trận không đốixứng.Vậy các lệnh kiểm tra tính đối xứng của

ma trận A là:Kiemtra := TRUE;For i:=1 to N do

For j:=1 to N doif A[i, j]<>A[j, i] then

Kiemtra:=FALSE ;

Page 141: Lap Trinh Pascal-Vu Te Xien

5/14/2018 Lap Trinh Pascal-Vu Te Xien - slidepdf.com

http://slidepdf.com/reader/full/lap-trinh-pascal-vu-te-xien 141/205

 

Trưng Cao đng KTKT Bình Dương Biên so n : Vũ Bin

Ch ươ ng 5: D  li u có c  u trúc  Trang 141

If Kiemtra=TRUE then writeln(‘ Đoixung ‘)

elsewriteln(‘ Khong đoi xung ‘);

Ví dụ chươ ng trình ma trận cụ thể thựchiện các công việc trên:

PROGRAM Matran;Uses CRT;

TypeMatran = Array[1..10, 1..10] of Real;

VarA : Matran;i, j , N, Dem : Integer;

Max, Min : Real;Kiemtra: Boolean;Begin

Clrscr;Repeat

Write(‘Nhap cap N : ‘);

Readln(N);Until ( N>0) and ( N<11) ;For i:=1 to N doFor j:=1 to N do

Page 142: Lap Trinh Pascal-Vu Te Xien

5/14/2018 Lap Trinh Pascal-Vu Te Xien - slidepdf.com

http://slidepdf.com/reader/full/lap-trinh-pascal-vu-te-xien 142/205

 

Trưng Cao đng KTKT Bình Dương Biên so n : Vũ Bin

Ch ươ ng 5: D  li u có c  u trúc  Trang 142

beginWrite(‘Nhap A[‘, i, ‘,’ , j , ‘]: ‘);

Readln(A[i,j]);end;

{ In ma tran A len man hinh }Writeln(‘ Ma tran A la : ’);For i:=1 to N dobegin

For j:=1 to N do write(A[i, j]: 3:0);

Writeln;end;

{ Dem so so 0 }

Dem:=0;For i:=1 to N doFor j:=1 to N do if A[i, j]=0 then

Inc(Dem);Writeln(‘ Co ‘, Dem, ‘ so khong’);{ Tim so lon nhat cua ma tran }

Max:=A[1,1];For i:=1 to N doFor j:=1 to N doif Max < A[i,j] then Max:=A[i,j];

Page 143: Lap Trinh Pascal-Vu Te Xien

5/14/2018 Lap Trinh Pascal-Vu Te Xien - slidepdf.com

http://slidepdf.com/reader/full/lap-trinh-pascal-vu-te-xien 143/205

 

Trưng Cao đng KTKT Bình Dương Biên so n : Vũ Bin

Ch ươ ng 5: D  li u có c  u trúc  Trang 143

Writeln(‘ So lon nhat cua ma tran= ‘,Max : 4:1);

{ Tim so nho nhat trong tung hang cuama tran }

For i:=1 to N dobegin

Min:=A[i,1];For j:=1 to N do if Min > A[i,j] then

Min:=A[i,j];Writeln(‘ So nho nhat cua hang ‘, i ,

‘ là: ‘, Min : 4:1);end;

{ Kiem tra ma tran co doi xung khong}

Kiemtra:=True;For i:=1 to N doFor j:=1 to i-1 doif A[i ,j]<>A[j ,i] then

Kiemtra:=False;If Kiemtra=True then Writeln(‘ Đoi

xung’)else

Writeln(‘ Khong đoi xung’) ;Readln;

Page 144: Lap Trinh Pascal-Vu Te Xien

5/14/2018 Lap Trinh Pascal-Vu Te Xien - slidepdf.com

http://slidepdf.com/reader/full/lap-trinh-pascal-vu-te-xien 144/205

 

Trưng Cao đng KTKT Bình Dương Biên so n : Vũ Bin

Ch ươ ng 5: D  li u có c  u trúc  Trang 144

End.III Dữ liệu kiểu chuỗi ký tự  

1. Khái niệm- Chuỗi là một dãy ký tự đượ c rào

trong 2 dấu nháy đơ n.Ví dụ : ‘Ngon ngu Pascal’

‘Tin hoc 1998’‘12345678’

- Chuỗi không có ký tự nào ‘‘ (chỉ gồmhai dấu nháy đơ n liên tiếp) gọi là chuỗirỗng.

- Số ký tự có trong chuỗi gọi là độ dài của chuỗi. Chuỗi ‘ABCD’ có độ dài 4,

chuỗi ‘Pascal’ có độ dài là 6. Chuỗi rỗngcó độ dài bằng không.2 Cách khai báo

 2.1 Khai báo kiể u d ữ liệ uType

Tên chuỗi = String[N];

Tên chuỗi =String;Trong đó N là một hằng nguyên (0<=

N <= 255) ấn định số ký tự tối đa mà biếncó thể nhận và gọi là độ dài tối đa của biến

Page 145: Lap Trinh Pascal-Vu Te Xien

5/14/2018 Lap Trinh Pascal-Vu Te Xien - slidepdf.com

http://slidepdf.com/reader/full/lap-trinh-pascal-vu-te-xien 145/205

 

Trưng Cao đng KTKT Bình Dương Biên so n : Vũ Bin

Ch ươ ng 5: D  li u có c  u trúc  Trang 145

chuỗi. Nếu không có chỉ thị [N] thì chuỗicó độ dài tối đa là 255 ký tự.

Ví dụ :Type

Chuoi1=String[60];Chuoiso=String[50;

 2.2.Khai báo biế  n chuỗ iVar

Tên biến chuỗi :=Hằngchuỗi;

Ví dụ :Var

St:Chuoi1;

St2:Chuoiso;Ghi chú : Tươ ng tự như mảng , TP chophép khai báo trực tiếp biến chuỗi. Cáchkhai báo như sau:

VarTênbiếnchuỗi : String[N] ;

Tênbiếnchuỗi : String ;Var

St : String[17];Diachi : String;

Page 146: Lap Trinh Pascal-Vu Te Xien

5/14/2018 Lap Trinh Pascal-Vu Te Xien - slidepdf.com

http://slidepdf.com/reader/full/lap-trinh-pascal-vu-te-xien 146/205

 

Trưng Cao đng KTKT Bình Dương Biên so n : Vũ Bin

Ch ươ ng 5: D  li u có c  u trúc  Trang 146

Khi đó St là biến chuỗi có độ dài tối đalà 17 ký tự, còn biến Diachi có độ dài tốiđa là 255 ký tự.3. Truy nhập vào từ ng phần tử củachuỗi

Giống như mảng, mỗi phần tử của chuỗiđượ c truy nhập thông qua tên chuỗi và chỉ số của phần tử.

Gọi N =Length(St), khi đó ký tự thứ i(i=1, 2, ..., N) của St đượ c ký hiệu là St[i].

Ví dụ: cho :St :=‘ABC’;thì N=3 và St[1]=‘A’, St[2]=‘B’,

St[3]=‘C’.Như vậy mỗi ký tự St[i] đượ c dùngnhư một biến kiểu ký tự, và chuỗi có thể xem là một mảng các ký tự. Chẳng hạn để in chuỗi ta có thể in từng ký tự như sau:

For i:=1 to Length(St) do write(St[i]);

Điều này cho thấy chuỗi là một kiểu dữ liệu có tính cấu trúc.

Page 147: Lap Trinh Pascal-Vu Te Xien

5/14/2018 Lap Trinh Pascal-Vu Te Xien - slidepdf.com

http://slidepdf.com/reader/full/lap-trinh-pascal-vu-te-xien 147/205

 

Trưng Cao đng KTKT Bình Dương Biên so n : Vũ Bin

Ch ươ ng 5: D  li u có c  u trúc  Trang 147

Nhưng mặt khác, mỗi chuỗi lại có thể xem là một gía trị duy nhất, vì có thể nhậpvà in chuỗi trực tiếp bằng các lệnh:

Readln(St);Write(St);Đặc điểm này cho thấy chuỗi còn là một

kiểu dữ liệu có tính đơ n giản.4. Các phép tóan trên chuỗi :

-Phép cộng (nố i) chuỗ i:Khi cộng hai chuỗi, ta đượ c một chuỗi mớ igồm các ký tự của hai chuỗi ban đầu ghéplại.

Ví dụ :

‘tin’ + ‘hoc’ =‘tinhoc’‘1234’+ ‘5678’ = ‘12345678’-Phép so sánh chuỗ i:

Khi so sánh hai chuỗi, ta so sánh từngcặp ký tự của hai chuỗi từ trái qua phải.Nếu phát hiện ra một cặp ký tự khác nhau

thì chuỗi nào chứa ký tự nhỏ hơ n sẽ nhỏ hơ n. Ví dụ:

‘Hong’ > ‘Han’ vì ‘o’ > ‘a’‘thanh’ > ‘thao’ vì ‘n’ > ‘o’

Page 148: Lap Trinh Pascal-Vu Te Xien

5/14/2018 Lap Trinh Pascal-Vu Te Xien - slidepdf.com

http://slidepdf.com/reader/full/lap-trinh-pascal-vu-te-xien 148/205

 

Trưng Cao đng KTKT Bình Dương Biên so n : Vũ Bin

Ch ươ ng 5: D  li u có c  u trúc  Trang 148

Nếu so sánh hết chiều dài của chuỗi ngắnhơ n mà không có cặp nào khác nhau thìchuỗi ngắn hơ n sẽ nhỏ hơ n,Ví dụ:

‘an’ < ‘anh’‘chu’ < ‘chung’

Hai chuỗi bằng nhau khi chúng cùngđộ dài và các ký tự ở các vị trí tươ ng ứng

thì bằng nhau.5. Các hàm liên quan đến chuỗi :

+Hàm Length(St) : cho độ dài củachuỗi St.Ví dụ: Length(‘ABCD’)=4 vì chuỗi

‘ABCD’ có 4 ký tự.Chuỗi rỗng có độ dài bằng 0.+Hàm Pos(S, St):Cho vị trí đầu tiên tìm thấy chuỗi S

trong chuỗi St, nếu không tìm thấy thì hàmcho kết qủa bằng 0.

Ví dụ:Pos(‘Ab’, ‘cdAb3Abm’) = 3,Pos(‘Ab’, ‘1bA3b’) = 0.

Page 149: Lap Trinh Pascal-Vu Te Xien

5/14/2018 Lap Trinh Pascal-Vu Te Xien - slidepdf.com

http://slidepdf.com/reader/full/lap-trinh-pascal-vu-te-xien 149/205

 

Trưng Cao đng KTKT Bình Dương Biên so n : Vũ Bin

Ch ươ ng 5: D  li u có c  u trúc  Trang 149

+Hàm Copy(St, k, m) : cho m ký tự của St tính từ vị trí k.Ví dụ: Copy (‘ABCDEF’, 4, 2) =‘DE’.

Nếu k> Length(St) thì kết qủa sẽ làmột chuỗi rỗngNếu m> số ký tự đứng sau kể từ vị trí k thìhàm Copy chỉ lấy các ký tự từ vị trí k đếnhết chiều dài của St, ví dụ :

Copy (‘ABCD’, 3, 10) = ‘CD’+Hàm Concat( St1, St2, ..., Stn) :

Ghép nối các chuỗi St1, St2, ..., Stn theothứ tự đó thành một chuỗi duy nhất. Vậy :

Concat( St1, St2, ..., Stn) =

St1+St2+...+Stn.6. Các thủ tục liên quan đến chuỗi :+ Thủ tụ c Delete(St, k, m) :Xóa m ký tự trong biến chuỗi St bắt

đầu từ vị trí thứ k. Ví dụ, sau khi thực hiệncác lệnh:

St:=‘ TurboPascal’;Delete(St, 1, 5);

thì gía trị của St=‘Pascal’ vì 5 ký tự đầu đãbị xóa.

Page 150: Lap Trinh Pascal-Vu Te Xien

5/14/2018 Lap Trinh Pascal-Vu Te Xien - slidepdf.com

http://slidepdf.com/reader/full/lap-trinh-pascal-vu-te-xien 150/205

 

Trưng Cao đng KTKT Bình Dương Biên so n : Vũ Bin

Ch ươ ng 5: D  li u có c  u trúc  Trang 150

Nếu k > Length(St) thì không xóa gì cả.Nếu m > số ký tự đứng sau kể từ vị trí kthì xóa hết từ vị trí k đến cuối chuỗi.Ví dụ, sau khi thực hiện ba lệnh :

St:=‘Turbo Pascal’;Delete(St, 10, 20);Write(St);

thì in ra chữ Turbo Pas vì St đã bị xóa đi 3

ký tự cuối nên chỉ còn St=‘Turbo Pas’.+Thủ tụ c Insert(S, St, k) :

Chèn chuỗi S vào biến chuỗi St tại vị trí k.Ví dụ, cho :

St:=‘ABCD’;

Sau khi thực hiện lệnh:Insert(‘**’, St, 3);thì St bị biến đổi thành St=‘AB**CD’.Nếu k> Length(St) thì S đượ c nối vào cuốicủa St. Ví dụ, sau khi thực hiện hai lệnh :

St:=‘XYZ’;

Insert(‘ABC’, St, 6);thì St=‘XYZABC’.

+Thủ tụ c Str(x, St):

Page 151: Lap Trinh Pascal-Vu Te Xien

5/14/2018 Lap Trinh Pascal-Vu Te Xien - slidepdf.com

http://slidepdf.com/reader/full/lap-trinh-pascal-vu-te-xien 151/205

 

Trưng Cao đng KTKT Bình Dương Biên so n : Vũ Bin

Ch ươ ng 5: D  li u có c  u trúc  Trang 151

Biến đổi số nguyên hay thực x thành kiểuchuỗi và gán cho biến chuỗi St.Ví dụ sau khi thực hiện lệnh :

Str(4752, St);thì kết qủa là St= ‘4752’.Số x có thể đượ c định dạng như khi in ramàn hình.

Lệnh Str(4752 : 6, St);

cho kết qủa St=‘ 4752’ (tr ướ c số 4752 có2 ký t ự tr ắ ng) .Nếu x là biến thực và gía trị của x=34.95thì lệnh :

Str(x :7:3, St);

cho kết qủa St=‘ 34.950’ (tr ướ c số 34.950có 1 ký t ự tr ắ ng) .+Thủ tụ c Val(St, x, k ):Biến đổi chuỗi số St thành số nguyên

hay thực và gán cho biến nguyên hay thựcx. Số nguyên k dùng để phát hiện lỗi: nếu

đổi đượ c thì k=0, ngượ c lại, gía trị của k làvị trí có lỗi trong chuỗi St.

Page 152: Lap Trinh Pascal-Vu Te Xien

5/14/2018 Lap Trinh Pascal-Vu Te Xien - slidepdf.com

http://slidepdf.com/reader/full/lap-trinh-pascal-vu-te-xien 152/205

 

Trưng Cao đng KTKT Bình Dương Biên so n : Vũ Bin

Ch ươ ng 5: D  li u có c  u trúc  Trang 152

Ví dụ cho ba biến n, k, j kiểu nguyên vàbiến x kiểu thực, sau khi thực hiện cáclệnh :

St:=‘385’;Val(St, n, j);Val(‘12.59’, x, k);

thì n=385, j=0, x=12.59 và k=0.Nếu gán St := ‘3a7’; và thực hiện lệnh:

Val(St, n, k);thì gía trị của n không xác định còn k=2 làvị trí của chữ a trong chuỗi St, tại đókhông đổi ra số đượ c. 3.8. Các ví d ụ về chuỗ i

Ví dụ 1: Đổ i một chuỗ i ra chữ hoa haychữ thườ ng. Để đổi cả chuỗi St thành chữ hoa, ta đổitừng ký tự của chuỗi đó ra chữ hoa, tức là :For i:=1 to Length(St) doSt[i]:=Upcase(St[i]);

Tươ ng tự, để đổi cả chuỗi St thành chữ thườ ng, ta cũng đổi từng ký tự của chuỗiSt ra chữ thườ ng:For i:=1 to Length(St) do

Page 153: Lap Trinh Pascal-Vu Te Xien

5/14/2018 Lap Trinh Pascal-Vu Te Xien - slidepdf.com

http://slidepdf.com/reader/full/lap-trinh-pascal-vu-te-xien 153/205

 

Trưng Cao đng KTKT Bình Dương Biên so n : Vũ Bin

Ch ươ ng 5: D  li u có c  u trúc  Trang 153

if ( St[i]>=‘A’) and (St[i]<=‘Z’) thenSt[i]:=Chr( Ord(St[i]) + 32) ;

Ví dụ 2: Chuẩ n hóa một chuỗ i ký t ự . Cho chuỗi St có nhiều ký tự trắng thừa ở  đầu, ở cuối và giữa các từ, như St=‘nguyen van tuan ‘. Chuẩn hóa chuỗi St làxóa hết các ký tự trắng thừa ở  đầu và ở  cuối, và giữa hai từ chỉ giữ lại đúng một

ký tự trắng, như St =‘nguyen van tuan’.a) Xóa các ký t ự tr ắ ng ở  đầu chuỗ i :

Để xóa một ký tự trắng ở  đầu củachuỗi St, ta dùng lệnh:

If St[1]=#32 then

Delete(St,1,1);Muốn xóa hết các ký tự trắng ở  đầuchuỗi ta dùng lệnh:

While St[1]=#32 doDelete(St,1,1);

 Diễ n giải: chừng nào ký tự đầu tiên của

St vẫn còn là ký tự trắng thì cứ xóa nó đicho đến khi ký tự đầu tiên là khác trắng.

Page 154: Lap Trinh Pascal-Vu Te Xien

5/14/2018 Lap Trinh Pascal-Vu Te Xien - slidepdf.com

http://slidepdf.com/reader/full/lap-trinh-pascal-vu-te-xien 154/205

 

Trưng Cao đng KTKT Bình Dương Biên so n : Vũ Bin

Ch ươ ng 5: D  li u có c  u trúc  Trang 154

Sở d ĩ phải dùng vòng lặp While là vì số ký tự trắng ở  đầu chuỗi là không biếttrướ c.b) Xóa các ký t ự tr ắ ng ở cuố i chuỗ i :

Tươ ng tự, muốn xóa tất cả các ký tự trắng ở cuối của chuỗi St, ta dùng lệnh:

While St[ length(St) ]= #32 doDelete(St, length(St), 1);

 Diễ n giải: chừng nào ký tự cuối cùngcủa St còn là khoảng trắng thì cứ xóa nó đicho đến khi ký tự cuối cùng là khác trắng.c) Xóa các ký t ự tr ắ ng thừ a ở giữ a hai t ừ  trong chuỗ i :

Muốn xóa các ký tự trắng thừa để giữahai từ chỉ còn đúng một ký tự trắng ta làmnhư sau: tìm trong St chỗ nào có hai ký tự trắng thì xóa đi một, và lặp lại thao tác trêncho đến khi trong St không còn chỗ nào cóhai ký tự trắng liên tiếp. Tức là :

k:=Pos(‘ ‘, St); { ‘ ‘ là 2 ký t ự tr ắ ng }While k > 0 do

beginDelete(St, k, 1);

Page 155: Lap Trinh Pascal-Vu Te Xien

5/14/2018 Lap Trinh Pascal-Vu Te Xien - slidepdf.com

http://slidepdf.com/reader/full/lap-trinh-pascal-vu-te-xien 155/205

 

Trưng Cao đng KTKT Bình Dương Biên so n : Vũ Bin

Ch ươ ng 5: D  li u có c  u trúc  Trang 155

k:=Pos(‘ ‘, St);end;

Ví dụ 3 : Đế m trong chuỗ i St có baonhiêu chữ pascal. Vì chữ pascal có 6 ký tự, nên ta so sánhtừng cụm 6 ký tự của St vớ i chuỗi pascal,bắt đầu từ vị trí 1:

Dem:=0;

For i:=1 to Length(St) doif Copy (St, i, 6) =‘pascal’ then

Inc(Dem);Writeln(‘ Số chữ pascal là ‘ , Dem);

Ví dụ 4: Tìm kiế m và thay thế .

Tìm trong chuỗi St xem có chứa chữ ‘basic’ không, nếu có thì thay bằng chữ ‘pascal’, nếu không có thì in câu ‘khôngcó’. Ví dụ St=‘ngon ngu basic’, sau khithay thế ta đượ c St = ‘ngon ngu pascal’.

Ta dùng hàm Pos để tìm xem trong St

có chứa chữ ‘basic’ không. Thủ tục Deletesẽ xóa chuỗi ‘basic’ khỏi St, và thủ tụcInsert sẽ chèn chuỗi ‘pascal’ vào St tại vị trí đang xét:

Page 156: Lap Trinh Pascal-Vu Te Xien

5/14/2018 Lap Trinh Pascal-Vu Te Xien - slidepdf.com

http://slidepdf.com/reader/full/lap-trinh-pascal-vu-te-xien 156/205

 

Trưng Cao đng KTKT Bình Dương Biên so n : Vũ Bin

Ch ươ ng 5: D  li u có c  u trúc  Trang 156

PROGRAM Tim_va_thay_the ; { Tìmchữ basic và thay bằ ng chữ pascal }

VarSt: String;k: Integer;

BeginWrite(‘ Nhap chuoi St :’); Readln(St);k:= Pos(‘basic’ , St);

If k> 0 thenbegin

Delete(St, k, 5); { xóa chữ basic }Insert(‘pascal’ , St, k); { chèn chữ  

 pascal }

Writeln(‘ St = ‘, St);endelse

Writeln( St, ‘ khong co chu basic ‘) ;Readln;

End.

Ví dụ 5: Tính tổng các bình phươ ng củacác chữ số của một số tự nhiên N.

Ví dụ N= 325 thì T=32+22+52 = 38.PROGRAM TongBinhPhuong ;

Page 157: Lap Trinh Pascal-Vu Te Xien

5/14/2018 Lap Trinh Pascal-Vu Te Xien - slidepdf.com

http://slidepdf.com/reader/full/lap-trinh-pascal-vu-te-xien 157/205

 

Trưng Cao đng KTKT Bình Dương Biên so n : Vũ Bin

Ch ươ ng 5: D  li u có c  u trúc  Trang 157

{ Tính t ổ ng các bình phươ ng các chữ số  của số N }

VarN, T : Longint;i, j , k : Integer;St : String[40];

BeginWrite(‘Nhap so N : ‘); Readln(N);

Str( N, St ); { Doi so N ra chuoi goivao St }

T:=0;For i:=1 to Length(St) dobegin

Val ( St[i], j, k ); { Doi St[i] ra sogoi vao j}T:=T+ j*j;

end;Writeln(‘ Tong= ‘, T);Readln;

End.

IV.Dữ liệu kiểu tập hợ p1. Khai báo kiểu tập hợ p

Page 158: Lap Trinh Pascal-Vu Te Xien

5/14/2018 Lap Trinh Pascal-Vu Te Xien - slidepdf.com

http://slidepdf.com/reader/full/lap-trinh-pascal-vu-te-xien 158/205

 

Trưng Cao đng KTKT Bình Dương Biên so n : Vũ Bin

Ch ươ ng 5: D  li u có c  u trúc  Trang 158

Kiểu tập hợ p là kiểu dữ liệu bao gồmcác phần tử có chung một kiểu dữ liệu, gọilà kiểu cơ bản. Kiểu cơ bản phải là kiểu vôhướ ng đếm đượ c, tức chỉ có thể là kiểubyte, ký tự , lôgic hay liệt kê. Số phần tử của tập hợ p tối đa là 256 phần tử.

Cách khai báoTYPE 

Kky_tu = SET OF Char;Kchu_hoa = SET OF ‘A’.. ‘Z’;Kso = SET OF Byte;

Var TapA, TapB : Kky_tu;

TapH: Kchu_hoa;TapS : Kso;Các tập hợ p TapA, TapB, TapH,

TapS nói trên cũng có thể khai báo trựctiếp như sau:

Var 

TapA, TapB : SET OF Char;TapH : SET OF ‘A’.. ‘Z’;TapS : SET OF Byte;

2. Xác định một tập hợ p

Page 159: Lap Trinh Pascal-Vu Te Xien

5/14/2018 Lap Trinh Pascal-Vu Te Xien - slidepdf.com

http://slidepdf.com/reader/full/lap-trinh-pascal-vu-te-xien 159/205

 

Trưng Cao đng KTKT Bình Dương Biên so n : Vũ Bin

Ch ươ ng 5: D  li u có c  u trúc  Trang 159

Một tập hợ p đượ c xác định bằng cáchliệt kê các phần tử của nó, các phần tử đượ c phân cách nhau bở i dấu phẩy, và đặtgiữa hai dấu ngoặc vuông.

[ ] : tập rỗng[3..6] : tập các số nguyên 4, 3, 5, 6[3..6, 9, 12] : tập các số nguyên 3,

4, 5, 6, 9, 12

[‘A’..’C’, ‘X’, ‘Z’] : tập các chữ ‘A’, ‘B’, ‘C’, ‘X’, ‘Z’3. Các phép trên tập hợ p 3.1  Phép gán: 

Có thể gán một tập hợ p cho một biến

tập hợ p cùng kiểu. Ví dụ, vớ i các biến khaibáo ở trên, có thể gán:TapA:=[‘1’..’5’, ‘9’, ‘A’];TapH:=[‘C’..’F’];TapS:=[15..20, 30, 40];Tập rỗng [ ] gán cho biến tập hợ p kiểu

nào cũng đượ c :TapA:=[ ];TapH:= [ ];

Page 160: Lap Trinh Pascal-Vu Te Xien

5/14/2018 Lap Trinh Pascal-Vu Te Xien - slidepdf.com

http://slidepdf.com/reader/full/lap-trinh-pascal-vu-te-xien 160/205

 

Trưng Cao đng KTKT Bình Dương Biên so n : Vũ Bin

Ch ươ ng 5: D  li u có c  u trúc  Trang 160

Lệnh gán dướ i đây là sai vì hai vế không cùng kiểu dữ liệu:

TapA:=[1..8];TapS:=[‘1’..’9’];

 3.2  Phép hợ  p: Hợ p của hai tập hợ p A và B, ký hiệu là

A+B, là một tập hợ p gồm các phần tử hoặcthuộc tập A hoặc thuộc tập B. Ví dụ:

[3..5]+[4..6,10, 15]=[ 3..6, 10, 15] 3.3  Phép giao 

Giao của hai tập hợ p A và B, ký hiệu làA*B, là một tập hợ p gồm các phần tử đồng thờ i thuộc A và B.

Ví dụ: [1..10]*[5..15] =[5..10] 3.4  Phép hiệ u Hiệu của hai tập hợ p A và B, ký hiệu là A-B, là một tập hợ p gồm các phần tử thuộctập A nhưng không thuộc tập B. Ví dụ:

[1..10] - [5..15] =[1..4]Nhận xét: Các phép trên chỉ thự c hiệnđượ c khi A và B cùng kiể u, và k ế t qủa làmột t ậ p hợ  p C cùng kiể u vớ i A và B.

Page 161: Lap Trinh Pascal-Vu Te Xien

5/14/2018 Lap Trinh Pascal-Vu Te Xien - slidepdf.com

http://slidepdf.com/reader/full/lap-trinh-pascal-vu-te-xien 161/205

 

Trưng Cao đng KTKT Bình Dương Biên so n : Vũ Bin

Ch ươ ng 5: D  li u có c  u trúc  Trang 161

 3.5  Phép thử IN (thuộ c về  ) : Dùng để kiểm tra xem một biến hay một

gía trị có phải là phần tử của một tập hợ pnào đó không.Biểu thức x IN TapA cho kết qủa là Truenếu gía trị x thuộc TapA, cho gía trị Falsetrong trườ ng hợ p ngượ c lại.Ví dụ : 

‘N’ IN [‘N’, ‘n’] cho kết qủa là TRUE‘y’ IN [‘N’, ‘n’] cho kết qủa là FALSE

 3.6 Các phép so sánh (=, <>, <=, >=) : Cho A và B là hai tập hợ p cùng kiểu,

kết qủa của các phép so sánh A vớ i B sẽ là

TRUE hoặc FALSE.-Phép bằ ng: A=B khi và chỉ khi mỗiphần tử của A đều thuộc B và mỗi phần tử của B đều thuộc A, trong trườ ng hợ pngượ c lại, ta nói A khác B và viết A<>B.

Ví dụ:

[3,2,4,5]= [2, 3..5][‘A’, ‘B’]<>[‘a’,’B’]

Page 162: Lap Trinh Pascal-Vu Te Xien

5/14/2018 Lap Trinh Pascal-Vu Te Xien - slidepdf.com

http://slidepdf.com/reader/full/lap-trinh-pascal-vu-te-xien 162/205

 

Trưng Cao đng KTKT Bình Dương Biên so n : Vũ Bin

Ch ươ ng 5: D  li u có c  u trúc  Trang 162

-Phép nhỏ hơ n hoặ c bằ ng : A<=B khivà chỉ khi mọi phần tử của A đều thuộc B,ví dụ:

[3..5]<=[3..5][3..5]<=[1..6]

-Phép lớ n hơ n hoặ c bằ ng : A>=B khivà chỉ khi mọi phần tử của B đều thuộc A,nói cách khác A>=B khi và chỉ khi B<=A.

[3..5]>=[3..5][‘A’..’Z’]>=[‘A’..’D’]

Chú ý rằng trong các tập hợ p không cóphép so sánh nhỏ hơ n (<) và lớ n hơ n (>).Khi cần so sánh lớ n hơ n hay nhỏ hơ n ta có

thể viết:If (A<=B) and ( A<>B) thenwriteln(‘A < B’);

If (A>=B) and ( A<>B) thenwriteln(‘A > B’);4. Các ví dụ :

Ví d ụ 1:Nhập vào một chuỗi St , cho biết trong Stcó những chữ hoa nào. Ví dụ 

Page 163: Lap Trinh Pascal-Vu Te Xien

5/14/2018 Lap Trinh Pascal-Vu Te Xien - slidepdf.com

http://slidepdf.com/reader/full/lap-trinh-pascal-vu-te-xien 163/205

 

Trưng Cao đng KTKT Bình Dương Biên so n : Vũ Bin

Ch ươ ng 5: D  li u có c  u trúc  Trang 163

St=‘ABc3BAFdzA’ thì có các chữ hoa làA, B, F.PROGRAM InChuHoa;

VarTaphoa : Set of ‘A’..’Z’;N, i: byte;ch : char;St : String;

BeginWrite(‘ Nhap chuoi St: ‘);Readln(St);

Taphoa:=[];N:=length(St);

For i:=1 to N do

if St[i] IN [‘A’..’Z’] then Taphoa:= Taphoa+[ St[i] ];Writeln(‘ Cac chu hoa co trong St la

:’);For ch:=‘A’ to ‘Z’ do if ch IN Taphoa

then write(ch:3);

Readln;End.

Ví d ụ 2:

Page 164: Lap Trinh Pascal-Vu Te Xien

5/14/2018 Lap Trinh Pascal-Vu Te Xien - slidepdf.com

http://slidepdf.com/reader/full/lap-trinh-pascal-vu-te-xien 164/205

 

Trưng Cao đng KTKT Bình Dương Biên so n : Vũ Bin

Ch ươ ng 5: D  li u có c  u trúc  Trang 164

Nhập N số nguyên trong phạm vi từ 0đến 255. In ra các tập số chẵn, lẻ và chobiết có bao nhiêu số chẵn, bao nhiêu số lẻ (các số trùng nhau chỉ kể 1 lần). Ví dụ,nhập 9 số : 1, 2, 3, 4, 1, 2, 3, 4, 5 thì có haisố chẵn là 2 và 4 và có 3 số lẻ là 1, 3, 5.PROGRAM InsoChanLe;

Const

N=10;Var

Tapchan, Taple : Set of byte;N1, N2, i, k: byte;

Begin

Tapchan:=[];Taple:=[];For i:=1 to N do

beginWrite(‘Nhap so thu ‘, i, ‘: ‘);Readln(k);

If odd(k)=False thenTapchan:=Tapchan+[k]

else Taple:=Taple+[k];end;

Page 165: Lap Trinh Pascal-Vu Te Xien

5/14/2018 Lap Trinh Pascal-Vu Te Xien - slidepdf.com

http://slidepdf.com/reader/full/lap-trinh-pascal-vu-te-xien 165/205

 

Trưng Cao đng KTKT Bình Dương Biên so n : Vũ Bin

Ch ươ ng 5: D  li u có c  u trúc  Trang 165

writeln(‘ Cac so chan la: ‘);N1:=0;For i:=0 to (255 div 2) do

if 2*i IN Tapchan thenbegin

Write(2*i : 3);N1:=N1+1;

end;

Writeln( ‘ Co ‘, N1, ‘ so chan’);Writeln(‘ Cac so le la: ‘);N2:=0;For i:=0 to (255 div 2) do

if (2*i +1) IN Taple then

beginWrite(2*i+1 : 3);N2:=N2+1;

end;writeln( ‘ Co ‘, N2, ‘ so le’);

Readln;

End.

Ví dụ 3:

Page 166: Lap Trinh Pascal-Vu Te Xien

5/14/2018 Lap Trinh Pascal-Vu Te Xien - slidepdf.com

http://slidepdf.com/reader/full/lap-trinh-pascal-vu-te-xien 166/205

 

Trưng Cao đng KTKT Bình Dương Biên so n : Vũ Bin

Ch ươ ng 5: D  li u có c  u trúc  Trang 166

Tìm các số nguyên tố < = các số nguyên dươ ng N cho trướ c.

Có nhiều cách giải khác nhau, dướ iđây giớ i thiệu phươ ng pháp củaEratosthene, sử dụng dữ liệu kiểu tập hợ pvà không cần đến các phép nhân.

Xuất phát từ tập số nguyên S=[2..N]ta loại ra số nguyên tố đầu tiên và tất cả 

các bội số của nó ra khỏi S, lặp lại quátrình trên cho đến khi S thành tập rỗng.PROGRAM InsoNguyento;

ConstN=20;

VarTapsnt, S: Set of 1..N;snt, i: Integer;

BeginS:=[2..N];Tapsnt:=[];

snt:=2; { so nguyen to nho nhat }Writeln(‘ Cac so nguyen to la :’ );Repeat{ tim snt la so nho nhat trong S}

Page 167: Lap Trinh Pascal-Vu Te Xien

5/14/2018 Lap Trinh Pascal-Vu Te Xien - slidepdf.com

http://slidepdf.com/reader/full/lap-trinh-pascal-vu-te-xien 167/205

 

Trưng Cao đng KTKT Bình Dương Biên so n : Vũ Bin

Ch ươ ng 5: D  li u có c  u trúc  Trang 167

While Not (snt IN S) dosnt:=snt+1;

Tapsnt:= Tapsnt+[snt]; { duavao Tapsnt }

Write(snt:4);{ Loai cac boi cua snt ra khỏi S

}i:=snt;

While i<=N dobegin

S:=S - [i];i:=i+snt;

end;

Until S=[];Readln;End.

V. Dữ liệu kiểu bản ghi1. Khái niệmCác phần trình bày trướ c cho thấy ngôn

ngữ Pascal rất mạnh trong việc giải quyếtcác bài toán thiên về tính . Trong phần nàychúng ta sẽ thấy thêm một khả năng mạnhmẽ nữa của ngôn ngữ Pascal trong l ĩ nh

Page 168: Lap Trinh Pascal-Vu Te Xien

5/14/2018 Lap Trinh Pascal-Vu Te Xien - slidepdf.com

http://slidepdf.com/reader/full/lap-trinh-pascal-vu-te-xien 168/205

 

Trưng Cao đng KTKT Bình Dương Biên so n : Vũ Bin

Ch ươ ng 5: D  li u có c  u trúc  Trang 168

vực quản lý: quản lý nhân sự, quản lý vậttư, quản lý tài chính,.v.v.

Hàng ngày chúng ta rất quen thuộc vớ imột danh sách sinh viên như dướ i đây:

STT Họ và tên Toan Ly DTB1 Hoang

Anh Tuan7 9 8.0

2 NguyenHongLoan

6 5 5.5

.. …

Mỗi dòng liệt kê các dữ liệu về mộtngườ i, mỗi cột là một dữ liệu thành phầncung cấp thông tin về một thuộc tính cụ thể của những ngườ i đó.

Trong ngôn ngữ Pascal, mỗi dòng đượ cgọi là một RECORD (dịch là bản ghi haythẻ ghi), mỗi cột là một FIELD ( là tr ườ nghay thành phần, hay thuộc tính cho sát vớ ithực tế).

Page 169: Lap Trinh Pascal-Vu Te Xien

5/14/2018 Lap Trinh Pascal-Vu Te Xien - slidepdf.com

http://slidepdf.com/reader/full/lap-trinh-pascal-vu-te-xien 169/205

 

Trưng Cao đng KTKT Bình Dương Biên so n : Vũ Bin

Ch ươ ng 5: D  li u có c  u trúc  Trang 169

Nói tổng quát, mỗi bản ghi là một tậpgồm nhiều tr ườ ng (field), các tr ườ ng cóthể có kiểu dữ liệu khác nhau.2. Khai báo kiểu dữ liệu bản ghi

TYPETênkiểu = RECORD

Têntrườ ng1 : Kiểudliệu1;Têntrườ ng2 : Kiểudliệu2;

...Têntrườ ngn : Kiểudliệun;

End;Ví dụ 1: Ta định ngh ĩ a một kiểu

KSVIEN như sau:

TYPEKSVIEN = RECORDHoten:String[20];

Maso : String[8];Toan, Ly, DTB: Real;

End;

Theo mô tả trên, ta có một kiểu dữ liệumớ i đặt tên là KSVIEN có cấu trúc bảnghi gồm 5 trườ ng (thuộc tính) là:

Page 170: Lap Trinh Pascal-Vu Te Xien

5/14/2018 Lap Trinh Pascal-Vu Te Xien - slidepdf.com

http://slidepdf.com/reader/full/lap-trinh-pascal-vu-te-xien 170/205

 

Trưng Cao đng KTKT Bình Dương Biên so n : Vũ Bin

Ch ươ ng 5: D  li u có c  u trúc  Trang 170

Ví dụ 2:

Ta mô tả thờ i gian là kiểu KDATE cóba trườ ng ngày , tháng, năm như sau:

TYPEKDATE = RECORD

Ngay : 1..31;

Thang : 1..12;Nam : Integer;End;

3. Khai báo biến bản ghiKiểu bản ghi sau khi đã đượ c định ngh ĩ a

có thể dùng khai báo cho các biến theo

cách sauVAR

Tên biến : Kiểu bảnghi;

Page 171: Lap Trinh Pascal-Vu Te Xien

5/14/2018 Lap Trinh Pascal-Vu Te Xien - slidepdf.com

http://slidepdf.com/reader/full/lap-trinh-pascal-vu-te-xien 171/205

 

Trưng Cao đng KTKT Bình Dương Biên so n : Vũ Bin

Ch ươ ng 5: D  li u có c  u trúc  Trang 171

Ví dụ :Var

X, Y, Z : KSVIEN;Trong đó KSVIEN là bản ghi đã mô tả 

ở phần trên.Theo khai báo này, X ,Y và Z là ba biến

kiểu bản ghi KSVIEN, mỗi biến đều có 5

trườ ng Hoten, Maso, Toan, Ly và DTB.4.Các phép thâm nhập vào biến bảnghi Để thâm nhập vào một trườ ng của bản ghita thực hiện như sau :

Tênbiế n .Têntr ườ ngVí dụ : Các lệnh dướ i đây gán gía trị cho từng trườ ng của biến X :

X.Hoten :=‘Nguyen Van An’;X.Maso :=‘1973208’;X.Toan :=8.0;

X.Ly :=7.0;X.DTB :=(X.Toan+X.Ly)/2;

Để nhập dữ liệu cho trườ ng Hoten củabiến Y, ta viết:

Page 172: Lap Trinh Pascal-Vu Te Xien

5/14/2018 Lap Trinh Pascal-Vu Te Xien - slidepdf.com

http://slidepdf.com/reader/full/lap-trinh-pascal-vu-te-xien 172/205

 

Trưng Cao đng KTKT Bình Dương Biên so n : Vũ Bin

Ch ươ ng 5: D  li u có c  u trúc  Trang 172

Write(‘Nhap ho ten sinh vien Y :‘); Readln(Y.Hoten);

5. Câu lệnh WITHKhi làm việc vớ i nhiều trườ ng của một

biến bản ghi thì cách thâm nhập ở trên tỏ ra rườ m rà vì phải viết nhiều lần tên biếntrướ c tên trườ ng.Để đơ n giản cách viết, Pascal đưa ra câu

lệnh :WITH Tênbiến DO Lệnh;

Tên biến thuộc kiểu bản ghi.Nếu Lệnh có truy xuất đến các trườ ng

của Tên biến thì không cần phải viết Tên

biến và dấu chấm trướ c các tên trườ ng.Ví dụ, thay vì viết:X.Hoten:= ‘Nguyen Van An’;

ta có thể viết :WITH X DO Hoten:= ‘Nguyen

Van An’;

Để in các trườ ng của biến X lên mànhình, ta viết:

WITH X DOBegin

Page 173: Lap Trinh Pascal-Vu Te Xien

5/14/2018 Lap Trinh Pascal-Vu Te Xien - slidepdf.com

http://slidepdf.com/reader/full/lap-trinh-pascal-vu-te-xien 173/205

 

Trưng Cao đng KTKT Bình Dương Biên so n : Vũ Bin

Ch ươ ng 5: D  li u có c  u trúc  Trang 173

Writeln(‘ Ho va ten :’ ,Hoten);

Writeln(‘ Ma so sinh vien :’ ,Maso);

Writeln(‘ Diem :’ , Toan:4:1);

Writeln(‘ Diem Ly :’ , Ly:4:1);

Writeln(‘ Diem trung binh : ‘, DTB :4:1);

End;Tất cả các tên trườ ng nằm trong khối

begin và end đượ c hiểu là các trườ ng của

biến X (nếu không ghi rõ tên biến nàokhác).Các lệnh sau gán các gía trị cho các

trườ ng của biến S kiểu KSACH là một bảnghi lồng nhau:

WITH S DO

beginMa_so_sach:=‘TH-435’;Ten_doc_gia:=‘Nguyen van

Mai’;

Page 174: Lap Trinh Pascal-Vu Te Xien

5/14/2018 Lap Trinh Pascal-Vu Te Xien - slidepdf.com

http://slidepdf.com/reader/full/lap-trinh-pascal-vu-te-xien 174/205

 

Trưng Cao đng KTKT Bình Dương Biên so n : Vũ Bin

Ch ươ ng 5: D  li u có c  u trúc  Trang 174

Nam_xban :=1999;Gia_tien:= 15000;WITH Ngay_muon DO

beginNgay:=2;

Thang:=9;Nam:=1999;

end;

end; 6. Mảng các bản ghi

Trong thực tế, ta thườ ng phải quản lýmột danh sách sinh viên của một lớ p, mộtdanh sách các quyển sách trong thư viện.

Vì thế mảng các bản ghi đượ c dùng rấtnhiều trong thực tế quản lý.Ví dụ : Chươ ng trình quản lý điểm của

một lớ p họcPROGRAM Quanlyhocsinh;

TYPE

KSVIEN = RECORDHoten:String[20];

Maso : String[8];Toan, Ly, DTB: Real;

Page 175: Lap Trinh Pascal-Vu Te Xien

5/14/2018 Lap Trinh Pascal-Vu Te Xien - slidepdf.com

http://slidepdf.com/reader/full/lap-trinh-pascal-vu-te-xien 175/205

 

Trưng Cao đng KTKT Bình Dương Biên so n : Vũ Bin

Ch ươ ng 5: D  li u có c  u trúc  Trang 175

End;

KMang = Array[1..50] of KSVIEN;

VARDS: KMang; Z: KSVIEN;I,j :Integer;

Begin.

For i:=1 to 10 doWITH DS[i] DO

beginWrite(‘Nhap ho ten sinh vien

thu ‘,i,’ : ‘); Readln(Hoten);

Write(‘Nhap ma so sinh vienthu ‘,i,’ : ‘); Readln(Maso);Write(‘Nhap diem Toan, Ly

sinh vien thu ‘,i,’ : ‘);Readln(Toan, Ly);DTB:=(Toan + Ly)/2;

end;{Sap xep danh sach theo DTB }For i:=1 to 9 do

For j:=i+1 to 10 do

Page 176: Lap Trinh Pascal-Vu Te Xien

5/14/2018 Lap Trinh Pascal-Vu Te Xien - slidepdf.com

http://slidepdf.com/reader/full/lap-trinh-pascal-vu-te-xien 176/205

 

Trưng Cao đng KTKT Bình Dương Biên so n : Vũ Bin

Ch ươ ng 5: D  li u có c  u trúc  Trang 176

If DS[i].DTB < DS[j].DTB thenbegin { Doi cho DS[i] và DS[j] }

Z:=DS[i];DS[i]:=DS[j];DS[j]:=Z;

end;{In danh sach len man hinh }For i:=1 to 10 do WITH DS[i] DO

Writeln( i:2, Hoten:25, Maso:9 ,Toan:5:1, Ly:5:1, DTB:5:1);Readln;End. VI. Dữ liệu kiểu tập tin

1. Khái niệm :Nhập và xuất dữ liệu là hai công việcrất phổ biến khi thực hiện một chươ ngtrình. Cho đến nay, ta mớ i chỉ nhập dữ liệutừ bàn phím và xuất dữ liệu ra màn hình.Các dữ liệu này đượ c tổ chức trong bộ nhớ  

của máy, chúng tồn tại khi chươ ng trìnhđang chạy và bị xóa khi chươ ng trình kếtthúc. Muốn lưu trữ các dữ liệu lâu dài để 

Page 177: Lap Trinh Pascal-Vu Te Xien

5/14/2018 Lap Trinh Pascal-Vu Te Xien - slidepdf.com

http://slidepdf.com/reader/full/lap-trinh-pascal-vu-te-xien 177/205

 

Trưng Cao đng KTKT Bình Dương Biên so n : Vũ Bin

Ch ươ ng 5: D  li u có c  u trúc  Trang 177

sử dụng nhiều lần thì phải ghi chúng lênđĩ a thành các tập tin.

Tập tin (file) trong Pascal là một kiểudữ liệu có cấu trúc. Mỗi tập tin là một tậphợ p các phần tử có cùng chung một kiểudữ liệu đượ c nhóm lại thành một dãy vàđượ c ghi trên đĩ a dướ i một cái tên chung.

Dướ i đây sẽ trình bày hai loại tập tin

thườ ng gặp là tập tin có định kiểu và tậptin văn bản.2. Tập tin có định kiểu

Tập tin mà các phần tử của nó cócùng một kiểu dữ liệu gọi là tập tin có định

kiểu. Kiểu dữ liệu của các phần tử của tậptin có thể là kiểu đơ n giản ( nguyên, thực,ký tự , lô gic, chuỗi ký tự...) hoặc kiểu cócấu trúc ( mảng, bản ghi).

 2.1 Cách khai báo kiể u tậ p tinType

TênkiểuTtin = File of Kiểuphầntử ;

Ví dụ:Type

Page 178: Lap Trinh Pascal-Vu Te Xien

5/14/2018 Lap Trinh Pascal-Vu Te Xien - slidepdf.com

http://slidepdf.com/reader/full/lap-trinh-pascal-vu-te-xien 178/205

 

Trưng Cao đng KTKT Bình Dương Biên so n : Vũ Bin

Ch ươ ng 5: D  li u có c  u trúc  Trang 178

Ksvien = RecordTen: String[20];Namsinh : Integer;DTB : Real;

end;KieuT1 = File of Integer;KieuT2 = File of String[20];KieuT3 = File of Ksvien ;

Theo khai báo trên thì KieuT1 là tậptin có các phần tử kiểu nguyên(Integer),KieuT2 là tập tin có các phần tử là cácchuỗi ký tự ( String[20] ), còn KieuT3 làtập tin có các phần tử là các bản ghi kiểu

Ksvien. 2.2 Khai báo các biế  n tậ p tinVar

F1 : KieuT1;F2 : KieuT2;F3 : KieuT3;

F1, F2, F3 là các biến kiểu tập tin,một loại biến đặc biệt, không dùng để gángía trị như các biến nguyên, thực haychuỗi. Mỗi biến này đại diện cho một tập

Page 179: Lap Trinh Pascal-Vu Te Xien

5/14/2018 Lap Trinh Pascal-Vu Te Xien - slidepdf.com

http://slidepdf.com/reader/full/lap-trinh-pascal-vu-te-xien 179/205

 

Trưng Cao đng KTKT Bình Dương Biên so n : Vũ Bin

Ch ươ ng 5: D  li u có c  u trúc  Trang 179

tin mà thông qua các biến đó ta có thể thựchiện các thao tác trên tập tin như: tạo tậptin, mở , đóng, xóa tập tin, ghi dữ liệu vàotập tin và đọc dữ liệu từ tập tin, ...

 2.3 Cách khai báo trự  c tiế  p các biế  n tậ p tin 

VarTênbiếnTtin : File of 

Kiểuphầntử ;Ví dụ: có thể khai báo ba biến F1, F2,

F3 nói trên theo cách sau :Type

Ksvien = Record

Ten: String[20];Namsinh : Integer;DTB : Real;

end;Var

F1 : File of Integer;

F2 : File of String[20];F3 : File of Ksvien ;

 2.4. Các thủ tụ c chuẩ  na) Thủ t ục ASSIGN( biế nt ậ ptin, tênt ậ ptin)

Page 180: Lap Trinh Pascal-Vu Te Xien

5/14/2018 Lap Trinh Pascal-Vu Te Xien - slidepdf.com

http://slidepdf.com/reader/full/lap-trinh-pascal-vu-te-xien 180/205

 

Trưng Cao đng KTKT Bình Dương Biên so n : Vũ Bin

Ch ươ ng 5: D  li u có c  u trúc  Trang 180

Gán tên tập tin cho biến tập tin. Ở đâytên tập tin là một biểu thức kiểu chuỗi làtên thực sự của tập tin.Ví dụ :

Assign(F1, ‘DLIEU.DAT’);Assign(F3, ‘QLSV.DAT’);

b) Thủ t ục REWRITE( biế nt ậ ptin) Khở i tạo tập tin mớ i, nếu tập tin đã có

trên đĩ a thì nó xóa đi và tạo mớ i.Ví dụ :

Rewrite(F1) ; khở i tạo tập tinDLIEU.DAT

Rewrite(F3) ; khở i tạo tập tin

QLSV.DATc) Thủ t ục RESET(biế nt ậ ptin)Mở tập tin đã có để sử dụng. Con trỏ tậptin trỏ vào phần tử đầu tiên (có số thứ tự là0) của tập tin .Ví dụ : Reset ( F3); mở tập tin QLSV.DAT

d) Thủ t ục WRITE( biế nt ậ ptin, b1, b2, ...,bN)Tuần tự ghi vào tập tin các gía trị của cácbiến b1, b2, ..., bN. Các biến b1, ..., bN

Page 181: Lap Trinh Pascal-Vu Te Xien

5/14/2018 Lap Trinh Pascal-Vu Te Xien - slidepdf.com

http://slidepdf.com/reader/full/lap-trinh-pascal-vu-te-xien 181/205

 

Trưng Cao đng KTKT Bình Dương Biên so n : Vũ Bin

Ch ươ ng 5: D  li u có c  u trúc  Trang 181

phải cùng kiểu dữ liệu vớ i các phần tử củatập tin.Ví dụ: Cho i, j, k là các biến kiểu Integervà i=10, j=20, k=100, khi đó lệnh :

Write(F1, i, j, k ) ;sẽ ghi lần lượ t các gía trị 10, 20, 100 vàotập tin DLIEU.DAT-Cho khai báo:

VarX : Ksvien;

Các lệnh sau gán gía trị cho X và ghiX vào tập tin QLSV.DAT:

X.Ten:=’Ng Van An’;

X.Namsinh :=1980 ;X.DTB :=6.5;Write(F3, X);

Sau khi ghi X vào tập tinQLSV.DAT, con trỏ tập tin tự động dờ iđến vị trí của phần tử tiếp theo.

e) Thủ t ục READ( biế nt ậ ptin, b1, b2, ...,bN) :

Đọc tuần tự các phần tử của tập tin từ vị trí hiện thờ i của con trỏ tập tin và gán

Page 182: Lap Trinh Pascal-Vu Te Xien

5/14/2018 Lap Trinh Pascal-Vu Te Xien - slidepdf.com

http://slidepdf.com/reader/full/lap-trinh-pascal-vu-te-xien 182/205

 

Trưng Cao đng KTKT Bình Dương Biên so n : Vũ Bin

Ch ươ ng 5: D  li u có c  u trúc  Trang 182

cho các biến b1, b2, ..., bN. Kiểu dữ liệucủa các biến b1, b2, ..., bN phải cùng kiểuvớ i các phần tử của tập tin. Mỗi khi đọcxong một phần tử, con trỏ tập tin tự độngdờ i đến phần tử tiếp theo.Ví dụ:- Lệnh Read(F1, i, j); đọc hai số nguyêntrong tập tin DLIEU.DAT ( kể từ vị trí 

hiện thờ i) và gán cho các biến nguyên i, j .- Lệnh Read(F3, X); đọc bản ghi hiện thờ icủa tập tin QLSV.DAT và gán cho biếnbản ghi X.

 f) Thủ t ục CLOSE( biế nt ậ ptin) : Đóng t ậ p

tin g) Thủ t ục SEEK( biế nt ậ ptin, k ) :Đặt con trỏ tập tin vào phần tử thứ k

trong tập tin. Thủ tục này cho phép truyxuất trực tiếp một phần tử của tập tin màkhông phải thực hiện tuần tự từ  đầu tập

tin.Ví dụ: đọc phần tử thứ 10 của tập

tin DLIEU.DAT và gán cho biến nguyên irồi in gía trị của i :

Page 183: Lap Trinh Pascal-Vu Te Xien

5/14/2018 Lap Trinh Pascal-Vu Te Xien - slidepdf.com

http://slidepdf.com/reader/full/lap-trinh-pascal-vu-te-xien 183/205

 

Trưng Cao đng KTKT Bình Dương Biên so n : Vũ Bin

Ch ươ ng 5: D  li u có c  u trúc  Trang 183

Seek(F1, 10);Read(F1, i);Write(i);

h) Thủ t ục ERASE( biế nt ậ ptin) : Xóa t ậ ptin trên đĩ ai) Thủ t ục RENAME( biế nt ậ ptin, tênmớ i ) : Đổ i tên t ậ p tin.Yêu cầu là t ậ p tin phải đ ang đóng thì mớ i

xóa hay đổi tên đượ c. 2.5. Các hàm chuẩ  n

a) Hàm EOF(biế nt ậ ptin)Cho kết qủa True khi con trỏ tập tin

đang ở cuối tệp, trong các trườ ng hợ p khác

hàm cho gía trị False.b) Hàm FILESIZE(biế nt ậ ptin)Cho số phần tử của tập tin. Nếu tập tin

rỗng thì số phần tử bằng 0.c) Hàm FILEPOS(biế nt ậ ptin)

Cho vị trí hiện thờ i của con trỏ tập tin.

Phần tử đầu tiên có số thứ tự là 0. Phần tử cuối cùng có số thứ tự bằng FileSize -1.

Ví dụ : Ghi số 100 vào cuối tập tinDLIEU.DAT, dùng các lệnh:

Page 184: Lap Trinh Pascal-Vu Te Xien

5/14/2018 Lap Trinh Pascal-Vu Te Xien - slidepdf.com

http://slidepdf.com/reader/full/lap-trinh-pascal-vu-te-xien 184/205

 

Trưng Cao đng KTKT Bình Dương Biên so n : Vũ Bin

Ch ươ ng 5: D  li u có c  u trúc  Trang 184

i:=100;Seek( F1, FileSize(F1) ) ;

{Đặt trỏ vào cuối tập tin}Write(F1, i); { Ghi gía trị của

i vào cuối tệp}Ví d ụ 1:

Nhập một danh sách sinh viên gồmHọ tên, điểm , Lý, tính điểm trung bình rồi

lưu vào tập tin HOSO.DAT. Sau đó đọcdữ liệu tập tin này và in ra màn hình.Trong chươ ng trình , chỗ nào có dấu ~ thìthay bằng một ký tự trắng.PROGRAM InDanhSachSinhvien;

Uses CRT;Const Tenttin = ‘HOSO.DAT’;Type

Ksvien= RecordHoten: String[20];Toan, Ly, Dtb : Real;

end;KieuTtin = File of Ksvien ;

VarF : KieuTtin ;

Page 185: Lap Trinh Pascal-Vu Te Xien

5/14/2018 Lap Trinh Pascal-Vu Te Xien - slidepdf.com

http://slidepdf.com/reader/full/lap-trinh-pascal-vu-te-xien 185/205

 

Trưng Cao đng KTKT Bình Dương Biên so n : Vũ Bin

Ch ươ ng 5: D  li u có c  u trúc  Trang 185

X : Ksvien ;i: Integer;

Procedure Hienthi ( Var F : KieuTtin);begin

Clrscr;Writeln(#32 :5, ‘HO VA TEN’, #32:6

,‘DTOAN~~~DLY~~~~DTB’);Reset(F);

While Not Eof(F) dobegin

Read(F, X);Writeln(X.Hoten, #32:20-

Length(X.Hoten),

X.Toan:4:1,#32:3, X.Ly:4:1,#32:3, X.DTb:4:1);end;

end; {Het hien thi}BEGIN

Clrscr;

Assign(F, TenTtin);Rewrite(F);i:=0;Repeat

Page 186: Lap Trinh Pascal-Vu Te Xien

5/14/2018 Lap Trinh Pascal-Vu Te Xien - slidepdf.com

http://slidepdf.com/reader/full/lap-trinh-pascal-vu-te-xien 186/205

 

Trưng Cao đng KTKT Bình Dương Biên so n : Vũ Bin

Ch ươ ng 5: D  li u có c  u trúc  Trang 186

Clrscr;Gotoxy(10,4);Write( ‘Nhap sinh vien thu ?‘, i , ‘: (

Enter de ket thuc) ‘ );With X do

beginGotoxy(10,6); Write(‘Ho va

ten:’);

Gotoxy(10,8); Write(‘DiemToan:’);

Gotoxy(10,10); Write(‘DiemLy :’);

Gotoxy(20,6); Readln(Hoten);

If Hoten<>’’ thenbeginGotoxy(20,8);

Readln(Toan);Gotoxy(20,10);

Readln(Ly);

DTB:=(Toan+Ly)/2;end;

end;If X.Hoten<>’’ then Write(F,X);

Page 187: Lap Trinh Pascal-Vu Te Xien

5/14/2018 Lap Trinh Pascal-Vu Te Xien - slidepdf.com

http://slidepdf.com/reader/full/lap-trinh-pascal-vu-te-xien 187/205

 

Trưng Cao đng KTKT Bình Dương Biên so n : Vũ Bin

Ch ươ ng 5: D  li u có c  u trúc  Trang 187

i:=i+1;Until X.Hoten=’’;Close(F);Hienthi(F);Close(F);Readln;

END.Chú ý : N ế u tham số trong chươ ng trình

con là t ậ p tin thì nó phải là tham số biế n,không thể là tham số tr ị.3. Tập tin văn bản

Trong Pascal có một kiểu tập tin đãđượ c định ngh ĩ a sẵn, đó là kiểu TEXT hay

tập tin văn bản. 3.1 Khai báo biế  n tậ p tin vă n bả nGiả sử ta muốn khai báo biến tập

tin văn bản F ta khai báo như sau :Var

F: Text;

Các phần tử của tập tin văn bản là cácký tự đượ c ghi thành từng dòng có độ dàikhác nhau. Các dòng đượ c phân cách nhờ  các dấu kết thúc dòng ( End of line). Đó là

Page 188: Lap Trinh Pascal-Vu Te Xien

5/14/2018 Lap Trinh Pascal-Vu Te Xien - slidepdf.com

http://slidepdf.com/reader/full/lap-trinh-pascal-vu-te-xien 188/205

 

Trưng Cao đng KTKT Bình Dương Biên so n : Vũ Bin

Ch ươ ng 5: D  li u có c  u trúc  Trang 188

hai ký tự điều khiển CR ( Carriage return :nhảy về  đầu dòng) và LF ( Line feed:xuống dòng dướ i). Ví dụ , đoạn văn bảnsau :

Tap tin van ban Text12345Het

đượ c chứa trong tập tin văn bản thành một

dãy :Taptinvanban

Text

CRLF

12345CRLF

Het Eof 

Các thủ tục Assign, Rewrite, Reset, Write,Read, Close, Erase, Renameđều dùng đượ c cho tập tin văn bản.

 3.2 Các thủ tụ c dùng trong File vă n

 bả na)Append(biế nt ậ ptin)Dùng để mở  tập tin văn bản và cho phépghi thêm dữ liệu vào cuối tập tin.

Page 189: Lap Trinh Pascal-Vu Te Xien

5/14/2018 Lap Trinh Pascal-Vu Te Xien - slidepdf.com

http://slidepdf.com/reader/full/lap-trinh-pascal-vu-te-xien 189/205

 

Trưng Cao đng KTKT Bình Dương Biên so n : Vũ Bin

Ch ươ ng 5: D  li u có c  u trúc  Trang 189

Đối vớ i tập tin văn bản, không thể đồng thờ i vừa ghi vừa đọc dữ liệu như tậptin có định kiểu.

Để ghi dữ liệu, trướ c tiên phải khở itạo tập tin bằng lệnh Rewrite hay mở  tậptin và đưa trỏ về cuối tệp bằng lệnhAppend. Sau đó ghi dữ liệu vào tập tinbằng thủ tục Write hay Writeln.

Để  đọc dữ liệu một tập tin đã có,trướ c tiên ta phải mở  tập tin bằng lệnhReset. Sau đó đọc dữ liệu bằng thủ tụcRead hay Readln.

Nếu mở  tập tin bằng Rewrite hoặc

Append thì không thể đọc đượ c bằng Readvà Readln. Nếu mở  tập tin bằng Reset thìkhông thể ghi đượ c bằng Write hayWriteln.

b)Thủ t ục WRITE( biế nt ậ ptin, bt1, bt2,..., btN) : cho phép tuần tự ghi các gía trị 

của các biểu thức bt1, bt2, .. btN vào tậptin văn bản. Các biểu thức bt1, bt2, .. btNphải thuộc kiểu đơ n giản chuẩn ( nguyên,thực, ký tự, lôgic) hay kiểu chuỗi, và

Page 190: Lap Trinh Pascal-Vu Te Xien

5/14/2018 Lap Trinh Pascal-Vu Te Xien - slidepdf.com

http://slidepdf.com/reader/full/lap-trinh-pascal-vu-te-xien 190/205

 

Trưng Cao đng KTKT Bình Dương Biên so n : Vũ Bin

Ch ươ ng 5: D  li u có c  u trúc  Trang 190

chúng không cần phải có kiểu giống nhau.Ví dụ :

Write(F, 3, 10:4, ‘a’:2, ‘Text’,4.5:6:2);sẽ ghi vào tập tin thành dãy như sau ( Dấu~ hiểu là một ký tự trắng):

3~~10~aText~~4.50Chươ ng trình dướ i đây sẽ tạo tập tin

văn bản T1.TXT :Program TaoTaptin;Var

F: Text; A : Integer; B : Real;Begin

A:=100;B:=1234.5;Assign(F, ’T1.TXT’);Rewrite(F);Write(F, ‘Ket qua=’ :10, A:5, B:7:2);Close(F);

End.Nội dung của tập tin T1.TXT là :

~~Ket qua=~~100~123.45

Page 191: Lap Trinh Pascal-Vu Te Xien

5/14/2018 Lap Trinh Pascal-Vu Te Xien - slidepdf.com

http://slidepdf.com/reader/full/lap-trinh-pascal-vu-te-xien 191/205

 

Trưng Cao đng KTKT Bình Dương Biên so n : Vũ Bin

Ch ươ ng 5: D  li u có c  u trúc  Trang 191

Như vậy, cách ghi dữ liệu vào tập tinvăn bản hoàn toàn giống như khi in dữ liệulên màn hình.

c)Thủ t ục WRITELN cũng có công dụngnhư WRITE, nhưng ghi xong dữ liệu thìđưa con trỏ tập tin xuống dòng dướ i. Đặcbiệt, lệnh Writeln(F); không ghi gì cả, chỉ đưa con trỏ tập tin xuống dòng.

Nội dung của các tập tin văn bản tạobằng Pascal hoàn toàn có thể xem đượ cbằng lệnh Type của MSDOS, bằng Nortonhay bằng chính Turbo Pascal,

d)Thủ t ục READ( biế nt ậ  ptin, biế n1,

biế n2, ..., biế nN ) đọc tuần tự các gía trị từ tập tin và gán cho các biến. Các biến1,biến2, ..., biếnN phải có kiểu dữ liệu phùhợ p vơ í dữ liệu cần đọc tại vị trí tươ ngứng trong tập tin.

Ví dụ: Nếu tập tin T1.TXT có nội

dung như sau:~~Ket qua=~~100~123.45

thì để đọc lại các dữ liệu này, ta phải khaibáo:

Page 192: Lap Trinh Pascal-Vu Te Xien

5/14/2018 Lap Trinh Pascal-Vu Te Xien - slidepdf.com

http://slidepdf.com/reader/full/lap-trinh-pascal-vu-te-xien 192/205

 

Trưng Cao đng KTKT Bình Dương Biên so n : Vũ Bin

Ch ươ ng 5: D  li u có c  u trúc  Trang 192

VarSt :String[10];i: Integer ; Z : Real;

Và dùng các lệnh:Reset(F);Read(F, St, i, Z);

Gía trị của St, i, Z sẽ là: St=’~~Ketqua=’, i=100, Z=123.45.

Nếu khai báo St có kiểu String[9] thìsẽ bị lỗi vì sau khi đọc xong 9 ký tự đầu,máy sẽ  đọc tiếp gía trị =~~100 cho biếnnguyên i, nhưng vì gía trị này bắt đầu làdấu = nên không đổi ra số nguyên đượ c.

e)Thủ t ục READLN(biế nt ậ  ptin, biế n1,biế n2, ..., biế nN ) đọc dữ liệu cho các biế?xong sẽ  đưa trỏ tập tin xuống đầu dòngdướ i.

Đặc biệt, lệnh READLN( biếntậptin);không đọc gì cả, chỉ  đưa con trỏ tập tin

xuống dòng.Chú ý :-Hàm Eof(F) cũng dùng đượ c cho tập tin

văn bản, ngoài ra còn có hàm EOLN(F)

Page 193: Lap Trinh Pascal-Vu Te Xien

5/14/2018 Lap Trinh Pascal-Vu Te Xien - slidepdf.com

http://slidepdf.com/reader/full/lap-trinh-pascal-vu-te-xien 193/205

 

Trưng Cao đng KTKT Bình Dương Biên so n : Vũ Bin

Ch ươ ng 5: D  li u có c  u trúc  Trang 193

cho kết qủa là True hoặc False tùy theocon trỏ tập tin có đang ở  cuối dòng haykhông. Khi Eof(F)=True thì Eoln(F) cũngcó gía trị là True.-Thủ tục Seek và các hàm FileSize,

FilePos không dùng cho tập tin văn bản.4.So sánh tập tin văn bản vớ i tập tinđịnh kiểu 

Các tập tin có định kiểu cho phép vừađọc vừa ghi và truy nhập trực tiếp vàotừng phần tử gần giống như thao tác vớ imảng.

Các tập tin văn bản không cho phép

đồng thờ i đọc, ghi và chỉ có thể đọc hoặcghi tuần tự, nhưng cho phép ta có thể xem,sửa trực tiếp một cách dễ dàng bằng các hệ soạn thảo văn bản đơ n giản, như NC haychính Turbo Pascal.Ví dụ 15.5:

Cho tập tin văn bản tên là T2.TXT vàcó nội dung là:

dong=6cot =7

Page 194: Lap Trinh Pascal-Vu Te Xien

5/14/2018 Lap Trinh Pascal-Vu Te Xien - slidepdf.com

http://slidepdf.com/reader/full/lap-trinh-pascal-vu-te-xien 194/205

 

Trưng Cao đng KTKT Bình Dương Biên so n : Vũ Bin

Ch ươ ng 5: D  li u có c  u trúc  Trang 194

0 8 8 -2 6 11 18 0 2 0 7 0 28 2 0 11 12 9 3-2 0 11 0 -7 9 46 7 12 -7 0 6 511 0 9 9 6 0 6

Hãy đọc tập tin này đưa vào một matrận A và in ma trận A lên màn hình. Số 

dòng và số cột của ma trận A đượ c ghi ở  hai dòng đầu tiên trong tập tin T2.TXT.Program TaptinVanBan;uses crt;Type

MANG = array[1..20,1..20] of integer;Var

A : MANG;N, M : integer;F : Text;

Procedure Nhap;Var

i,j : Byte;st: string[5];

Page 195: Lap Trinh Pascal-Vu Te Xien

5/14/2018 Lap Trinh Pascal-Vu Te Xien - slidepdf.com

http://slidepdf.com/reader/full/lap-trinh-pascal-vu-te-xien 195/205

 

Trưng Cao đng KTKT Bình Dương Biên so n : Vũ Bin

Ch ươ ng 5: D  li u có c  u trúc  Trang 195

BeginAssign(F, 'T2.TXT');Reset(F);Readln(F, St, N);Readln(F, St, M);For i:=1 to N do

beginFor j:=1 to M do Read(F,

A[i,j]);Readln(F);end;

Close(F);End;

Procedure InMatran;

Var i, j : Integer;Begin

For i:=1 to N dobegin

for j:=1 to M do write(

A[i,j]:4);writeln;

end;End;

Page 196: Lap Trinh Pascal-Vu Te Xien

5/14/2018 Lap Trinh Pascal-Vu Te Xien - slidepdf.com

http://slidepdf.com/reader/full/lap-trinh-pascal-vu-te-xien 196/205

 

Trưng Cao đng KTKT Bình Dương Biên so n : Vũ Bin

Ch ươ ng 5: D  li u có c  u trúc  Trang 196

BEGINClrscr;Nhap;InMatran;Readln;

END.

 Bài tậ p chươ  ng 5Câu 1) Nhập số tự nhiên n từ bàn phím vàmột dãy số thực x1, x2, ..., xn.

-Tìm số lớ n nhất và số nhỏ nhất của

dãy- Đếm trong dãy có bao nhiêu số dươ ng, bao nhiêu số âm, bao nhiêu số 0 ?Loại nào nhiều nhất ?Câu 2) Nhập một dãy số nguyên x1, x2, ...,xn. In riêng các số chẵn và các số lẻ, mỗi

loại trên một dòng.Câu 3) Nhập một dãy số bất kỳ x1, x2,...,xn , cho biết dãy có đối xứng không?, dãycó lập thành một cấp số cộng không?. Ví 

Page 197: Lap Trinh Pascal-Vu Te Xien

5/14/2018 Lap Trinh Pascal-Vu Te Xien - slidepdf.com

http://slidepdf.com/reader/full/lap-trinh-pascal-vu-te-xien 197/205

 

Trưng Cao đng KTKT Bình Dương Biên so n : Vũ Bin

Ch ươ ng 5: D  li u có c  u trúc  Trang 197

dụ dãy 1 3 5 4 5 3 1 là đối xứng, dãy 1 3 57 là một cấp số cộng.Câu 4) Nhập một dãy số bất kỳ x

1, x

2,...,

xn , cho biết dãy thuộc loại nào: tăng, giảmhay không tăng, không giảm ?Câu 5) Nhập một dãy số nguyên dươ ng x1,x2,..., xn .-Tách dãy x thành hai dãy: dãy A gồm các

số chẵn, dãy B gồm các số lẻ, sắp xếp dãyA tăng dần, dãy B giảm dần, in hai dãy Avà B trên hai dòng khác nhau.-Nối hai dãy A và B theo thứ tự đó thànhmột dãy duy nhất và gán trở lại vào dãy x,

in dãy x.Ví dụ nhập dãy x={ 5, 7, 0, 2, 1, 6, 4, 9} thì dãy A={ 0, 2, 4, 6}, dãy B={ 9, 7, 5,1}, và x={ 0, 2, 4, 6, 9, 7, 5, 1}.

Câu 6) Nhập và in ma trận Am,n , vớ i n

nhập từ bàn phím-Tìm và in số lớ n nhất trong từng hàng

của ma trận.

Page 198: Lap Trinh Pascal-Vu Te Xien

5/14/2018 Lap Trinh Pascal-Vu Te Xien - slidepdf.com

http://slidepdf.com/reader/full/lap-trinh-pascal-vu-te-xien 198/205

 

Trưng Cao đng KTKT Bình Dương Biên so n : Vũ Bin

Ch ươ ng 5: D  li u có c  u trúc  Trang 198

-Tìm và in số lớ n nhất trong từng cộtcủa ma trận.

-Tìm và in số nhỏ nhất trên đườ ng chéochính của ma trận.Câu 7) Nhập và in ma trận vuông An,n .

- A có phải là ma trận đối xứng không- A có phải là ma trận đơ n vị không?

(A là đối xứng nếu Aij=Aji vớ i mọi i,j

=1,..., n. A là ma trận đơ n vị nếu tất cả cácphần tử trên đườ ng chéo chính đều bằng 1và các phần tử còn lại đều bằng 0).Câu 8) Nhập và in ma trận Am,n .Cho biếthàng 1 và hàng 2 có giống nhau không,

nếu không thì hãy hoán đổi hàng 1 và hàng2. Ví dụ: ma trận bên trái dướ i đây có hàng1 và hàng 2 không trùng nhau, sau khihoán đổi hai hàng ta đượ c ma trận bênphải:

Câu 9) Nhập chuỗi St, in St theo thứ tự đảo ngượ c. Ví dụ : St = ‘ABCD’, in ra‘DCBA’

Page 199: Lap Trinh Pascal-Vu Te Xien

5/14/2018 Lap Trinh Pascal-Vu Te Xien - slidepdf.com

http://slidepdf.com/reader/full/lap-trinh-pascal-vu-te-xien 199/205

 

Trưng Cao đng KTKT Bình Dương Biên so n : Vũ Bin

Ch ươ ng 5: D  li u có c  u trúc  Trang 199

Câu 10) Nhập chuỗi St, kiểm tra chuỗi cóđối xứng không. Ví dụ: các chuỗi‘BCD1DCB’ và ‘ABCCBA’ là đối xứng,còn ‘ABCDBA’ là không đối xứng. Câu 11) Nhập hai chuỗi St và St1. Chobiết chuỗi St1 xuất hiện mấy lần trong St,và tại các vị trí nào?. Ví dụ St=‘pas12pas34’, chuỗi St1 =‘pas’ xuất

hiện 2 lần tại các vị trí 1, 6.Câu 12) Nhập ba chuỗi St, St1, St2. tìmxem trong chuỗi St có chứa chuỗi St1không ?, nếu có thì thay thế St1 bằng St2.

Ví du: cho St=‘ABC1234E’,

St1=‘1234’ và St2 =‘*’.Sau khi thay thế ta đượ c St=‘ABC*E’.Câu 13) Nhập một chuỗi St, xây dựng batập hợ p:

-S1 là tập các chữ hoa có trong St-S2 là tập các chữ thườ ng có trong St

-S3 là tập các chữ số có trong StIn các gía trị của mỗi tập S1, S2, S3 trên

một dòng.

Page 200: Lap Trinh Pascal-Vu Te Xien

5/14/2018 Lap Trinh Pascal-Vu Te Xien - slidepdf.com

http://slidepdf.com/reader/full/lap-trinh-pascal-vu-te-xien 200/205

 

Trưng Cao đng KTKT Bình Dương Biên so n : Vũ Bin

Ch ươ ng 5: D  li u có c  u trúc  Trang 200

Câu 14) Nhập vào một mảng A1, A2, ...,A10 các số nguyên dươ ng < 10. Hãy in cácgía trị của mảng này theo thứ tự tăng dầnsao cho các phần tử trùng nhau chỉ đượ c inmột lần. Ví dụ : cho mảng 1, 6, 4,1, 9, 6, 6,0, 3, 9 , in ra: 0,1, 3, 4, 6, 9 ( Hướ ng dẫn :xây dựng tập hợ p gồm các phần tử củamảng A )

Câu 15) Để biết một thí sinh đậu hay rớ ttrong kỳ thi tuyển sinh, cần biết các thôngtin sau:- Họ tên : họ và tên của thí sinh

- KV : thí sinh thuộc khu vực nào? ( 1, 2hay 3 ).- NH : thí sinh thuộc nhóm nào ? ( 1, 2,hay 3).- TĐ : Tổng điểm ba môn thi .

a) Hãy nhập vào một danh sách 10 thí 

sinh gồm Họ tên, KV, NH, TĐ. Xét xemKết qủa thí sinh này đậu hay rớ t dựa vàobảng điểm chuẩn sau :

Page 201: Lap Trinh Pascal-Vu Te Xien

5/14/2018 Lap Trinh Pascal-Vu Te Xien - slidepdf.com

http://slidepdf.com/reader/full/lap-trinh-pascal-vu-te-xien 201/205

 

Trưng Cao đng KTKT Bình Dương Biên so n : Vũ Bin

Ch ươ ng 5: D  li u có c  u trúc  Trang 201

Ví dụ : Thí sinh ở Khu vực 1 , Nhóm 2,có Tổng điểm = 17.5 thì đậu, ngượ c lại thìrớ t.

b) In danh sách đã sắp xếp theo trật tự giảm của TĐ lên màn hình, gồm các mục

Họ tên, KV, NH, TĐ và Kết qủa đậu, rớ t.c) Chỉ in danh sách những ngườ i đậu

lên màn hình theo mẫu:

STT Họ và

tên

KV NH TONG KETQUA

1 LeVanNam

1 2 20 Đậu

2 LuongXuanBac

2 3 15 Rớ t

. …

Page 202: Lap Trinh Pascal-Vu Te Xien

5/14/2018 Lap Trinh Pascal-Vu Te Xien - slidepdf.com

http://slidepdf.com/reader/full/lap-trinh-pascal-vu-te-xien 202/205

 

Trưng Cao đng KTKT Bình Dương Biên so n : Vũ Bin

Ch ươ ng 5: D  li u có c  u trúc  Trang 202

Câu 16) Viết một chươ ng trình pascal để thực hiện các yêu cầu sau :Nhập số nguyên N ( 0<N<100) và mộtdanh sách N học sinh vớ i các thông tin về:họ và tên, chuyên ban (A , B, C) và cácđiểm , Văn, Sinh kiểu thực.Vớ i mỗi học sinh hãy tính điểm trung bìnhnhư sau :

DTB =(2*+ Sinh+Văn)/4 nếu em thuộcchuyên ban A

=(+2*Sinh+Văn)/4 nếu em thuộcchuyên ban B

=(+Sinh+2*Văn)/4 nếu em thuộc

chuyên ban CChuyên ban nào có nhiều em có điểmtrung bình >= 5 nhất ?Câu 17) Nhập số nguyên N ( 0<N<50 ) và

N hóa đơ n tính tiền điện, mỗi hóa đơ n cóhọ tên chủ hộ, chỉ số điện kế tháng trướ c

(Socu), chỉ số điện kế tháng này (Somoi),và định mức (Dmuc) điện hàng tháng củahộ.

Page 203: Lap Trinh Pascal-Vu Te Xien

5/14/2018 Lap Trinh Pascal-Vu Te Xien - slidepdf.com

http://slidepdf.com/reader/full/lap-trinh-pascal-vu-te-xien 203/205

 

Trưng Cao đng KTKT Bình Dương Biên so n : Vũ Bin

Ch ươ ng 5: D  li u có c  u trúc  Trang 203

Hãy tính tiền điện cho mỗi hóa đơ n, biếtrằng:

Mỗi kw trong định mức có đơ n gía là500đ,

100 kw đầu tiên trên định mức có đơ ngiá 800đ,

Từ kw thứ 101 trên định mức trở lên cóđơ n gía 1000đ.

Tính tổng số tiền thu đượ c từ tất cả cáchóa đơ n.

Tìm trong các hóa đơ n xem có hộ nàotên là Tuan không ? Nếu có thì in lên mànhình các hóa đơ n có chủ hộ tên là Tuan

gồm các thông tin về Socu, Somoi, Dmucvà Tien điện phải trả.Câu 18) Nhập số nguyên dươ ng N (0<N<

20 ) và một dãy N số nguyên : A1, A2, ...,AN . Ghi dãy số đó vào tập tin DL.DAT.Đếm trong tập tin DL.DAT có bao nhiêu

số chẵn. Đọc các số lẻ từ tập DL.DAT vàin lên màn hình.

Page 204: Lap Trinh Pascal-Vu Te Xien

5/14/2018 Lap Trinh Pascal-Vu Te Xien - slidepdf.com

http://slidepdf.com/reader/full/lap-trinh-pascal-vu-te-xien 204/205

 

Trưng Cao đng KTKT Bình Dương Biên so n : Vũ Bin

Ch ươ ng 5: D  li u có c  u trúc  Trang 204

Câu 19) Để quản lý Họ tên , các điểm , Lývà Điểm trung bình của sinh viên, ta mô tả kiểu Ksvien như sau :Type

Ksvien= RecordHoten: String[20];

Toan, Ly, Dtb : Real;end;

Hãy nhập một danh sách sinh viên gồmHọ tên, điểm và điểm Lý, rồi tính Điểmtrung bình: Dtb:=(+Lý)/2, lưu vào tậptin QLY.DAT. Quá trình nhập kết thúc khinhập Họ tên là rỗng ( tức không nhập gì

cả, cứ Enter).Đọc danh sách sinh viên từ tập tinQLY.DAT và in danh sách lên màn hình.Chép danh sách sinh viên vào tậpQLY.IDX sao cho các phần tử củaQLY.IDX đượ c sắp xếp theo trật tự giảm

của điểm trung bình.Đọc dữ liệu của tập tin QLY.IDX và ghivào tập tin văn bản tên là QLY.TXT theodạng :

Page 205: Lap Trinh Pascal-Vu Te Xien

5/14/2018 Lap Trinh Pascal-Vu Te Xien - slidepdf.com

http://slidepdf.com/reader/full/lap-trinh-pascal-vu-te-xien 205/205

 

Trưng Cao đng KTKT Bình Dương Biên so n : Vũ Bin

STT Họ và tên

Điểm

trungbình

1NguyenVanMinh

8.5

2 Pham ThiHa Nam

8.0

. …. …

TÀI LIỆU THAM KHẢO1.Ngôn ngữ lập trình PASCAL : QuáchTuấn Ngọc Hà nội 1990

2.Tin học Đại cươ ng Bùi Huy Quỳnh ĐHSPKT TP Hồ Chí Minh 1990