1. Trang chủ
  2. » Giáo án - Bài giảng

Cơ bản về lập trình Pascal

122 1,5K 3
Tài liệu đã được kiểm tra trùng lặp

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Tiêu đề Cơ Bản Về Ngôn Ngữ Lập Trình Pascal
Trường học Khoa Công nghệ Thông tin - Trường Dạy nghề tỉnh Điện Biên
Thể loại Bài Giảng
Thành phố Điện Biên
Định dạng
Số trang 122
Dung lượng 662,5 KB

Các công cụ chuyển đổi và chỉnh sửa cho tài liệu này

Nội dung

Một chương trình Pascal có thể có một số hoặc tất cả các khai báo dữ liệu sau: CONST : khai báo hằng * Phần khai báo chương trình con: Phần này mô tả một nhóm lệnh được đặt tên chung là

Trang 1

PASCAL giúp sinh viên viết chương trình có cấu trúc sáng sủa, rõ ràng, dễhiểu và dễ đọc.

PASCAL là ngôn ngữ có cấu trúc mạnh mẽ cả về dữ liệu lẫn chương trình vàlệnh

II/ CÁC PHẦN TỬ CƠ BẢN CỦA PASCAL

1 Bộ ký tự

- Bộ 26 chữ Latin:

Chữ in: A, B, C, , X, Y, Z Chữ thường: a, b, c, , x, y, z

PROGRAM, BEGIN, END, PROCEDURE, FUNCTION

- Từ khóa để khai báo:

CONST, VAR, TYPE, ARRAY, STRING, RECORD, SET, FILE, LABEL

- Từ khóa của lệnh lựa chọn:

IF THEN ELSE, CASE OF

- Từ khóa của lệnh lặp:

FOR TO DO, FOR DOWNTO DO, WHILE DO,

REPEAT UNTIL

Trang 2

- Từ khóa điều khiển:

WITH, GOTO, EXIT, HALT

Reset, Rewrite

4 Danh hiệu tự đặt

Trong Pascal để đặt tên cho các biến, hằng, kiểu, chương trình con ta dùng

các danh hiệu (identifier) Danh hiệu của Pascal được bắt đầu bằng một chữ cái,

sau đó có thể là các chữ cái, chữ số hay là dấu nối, không được có khoảng trắng

và độ dài tối đa cho phép là 127

Ví dụ 2.1: Sau đây là các danh hiệu: x; S1; Delta; PT_bac_2

Pascal không phân biệt chữ thường và chữ hoa trong một danh hiệu

Trang 3

III/ CẤU TRÚC MỘT CHƯƠNG TRÌNH PASCAL

Hình 1: Sơ đồ cấu trúc chương trình Pascal

Ví dụ 3.1:

PROGRAM Hello; { Dòng tiêu đề }

USES Crt; { Lời gọi sử dụng các đơn vị chương trình }

VAR Name : string; { Khai báo biến }

PROCEDURE Input; { Có thể có nhiều Procedure và Function }

Trang 4

Tên chương trình phải được đặt theo đúng qui cách của danh hiệu tự đặt.Phần tiêu đề có hay không cũng được

* Phần khai báo dữ liệu:

Trước khi sử dụng biến nào phải khai báo biến đó, nghĩa là xác định rõ xembiến đó thuộc kiểu dữ liệu nào Một chương trình Pascal có thể có một số hoặc tất

cả các khai báo dữ liệu sau:

CONST : khai báo hằng

* Phần khai báo chương trình con:

Phần này mô tả một nhóm lệnh được đặt tên chung là một chương trình con đểkhi thân chương trình chính gọi đến thì cả nhóm lệnh đó được thi hành

Phần này có thể có hoặc không tùy theo nhu cầu

* Phần thân chương trình:

Phần thân chương trình là phần quan trọng nhất và bắt buộc phải có, phầnnày luôn nằm giữa 2 từ khoá là BEGIN và END Ở giữa là lệnh mà các chươngtrình chính cần thực hiện Sau từ khóa END là dấu chấm (.) để báo kết thúcchương trình

Ví dụ 3.2: Viết chương trình để tính diện tích hình tròn khi biết độ dài bán

kinh và tính diện tích hình vuông khi biết độ dài cạnh

PROGRAM THIDU4; (* Dòng tiêu đề *)

VAR

R, A, Dien_Tich: Real; (* Khai báo ba biến thực *)

BEGIN

Trang 5

Write(' Bán kính R = ');

READLN(R); (* Đọc giá trị của R *)

Dien_Tich := PI*R*R; (* Tính diện tích hình tròn *)

Diện tích hình vuông = 6.5536000000E+00

IV/ CÁC KIỂU DỮ LIỆU CƠ SỞ: INTEGER, REAL, BOOLEAN, CHAR

1 Khái niệm

Dữ liệu (data) là tất cả những gì mà máy tính phải xử lý

Theo Niklaus Wirth:

CHƯƠNG TRÌNH = THUẬT TOÁN + CẤU TRÚC DỮ LIỆU Một kiểu dữ liệu (data type) là một qui định về hình dạng, cấu trúc và giá trịcủa dữ liệu cũng như cách biểu diễn và cách xử lý dữ liệu

Trong Pascal các kiểu dữ liệu gồm các loại sau:

- Kiểu đơn giản (Simple type): bao gồm kiểu số nguyên (Integer), kiểu sốthực (Real), kiểu logic (Boolean), kiểu ký tự (Char)

- Kiểu có cấu trúc (Structure type): bao gồm mảng (Array), chuỗi (String), bảnghi (Record), tập hợp (Set), tập tin (File)

- Kiểu chỉ điểm (pointer):

Trong chương này, chúng ta chỉ xét các kiểu dữ liệu đơn giản

Trang 6

2 Kiểu số nguyên (Integer type)

a) Kiểu số nguyên thuộc Z chứa trong Turbo Pascal

Ðược định nghĩa với các từ khóa sau:

PRED (n) n - 1 ODD (n) TRUE nếu n lẻ và FALSE nếu n chẵn

3 Kiểu số thực (Real type)

Ở Turbo Pascal, kiểu số thực thuộc tập hợp R chứa trong 6 bytes, được địnhnghĩa với từ khóa REAL: R =([2.9 x 10-39 , 1.7 x 1038 ]

Hay viết theo dạng số khoa học: R = ( [2.9E-39, 1.7E38]

Số thực có thể viết theo kiểu có dấu chấm thập phân bình thường hoặc viếttheo kiểu thập phân có phần mũ và phần định trị

Các phép toán số học cơ bản +, -, * , /dĩ nhiên được sử dụng trong kiểu real Bảng dưới đây là các hàm số học cho kiểu số thực:

ABS (x) |x| : lấy giá trị tuyệt đối của số x

SQR (x) x2 : lấy bình phương trị số x

SQRT(x) : lấy căn bậc 2 của trị số x

SIN(x) sin (x) : lấy sin của x

COS (x) cos (x) : lấy cos của x

ARCTAN (x) arctang (x)

Trang 7

LN (x) ln x : lấy logarit nepe của trị x (e ( 2.71828)

TRUNC (x) lấy phần nguyên lớn nhất không vượt quá trị số x

ROUND (x) làm tròn giá trị của x, lấy số nguyên gần x nhất

4 Kiểu logic (Boolean)

Một dữ liệu thuộc kiểu BOOLEAN là một đại lượng được chứa trong 1 byte ởTurbo Pascal và chỉ có thể nhận được một trong hai gía trị logic là TRUE (đúng)

và FALSE (sai)

Qui ước: TRUE > FALSE Các phép toán trên kiểu Boolean:

Nhận xét:

- Phép AND (và) chỉ cho kết quả là TRUE khi cả 2 toán hạng là TRUE

- Phép OR (hoặc) chỉ cho kết quả là FALSE khi cả 2 toán hạng là FALSE

- Phép XOR (hoặc triệt tiêu) luôn cho kết quả là TRUE khi cả 2 toán hạng làkhác nhau và ngược lại

Các phép toán quan hệ cho kết quả kiểu Boolean:

5 Kiểu ký tự (Char type)

Tất cả các dữ liệu viết ở dạng chữ ký tự được khai báo bởi từ khóa CHAR Một ký tự được viết trong hai dấu nháy đơn ( ) Ðể tiện trao đổi thông tin cầnphải sắp xếp, đánh số các ký tự, mỗi cách sắp xếp như vậy gọi là bảng mã Bảng

mã thông dụng hiện nay là bảng mã ASCII (xem lại chương 3)

Ðể thực hiện các phép toán số học và so sánh, ta dựa vào giá trị số thứ tự

mã ASCII của từng ký tự, chẳng hạn: 'A' < 'a' vì số thứ tự mã ASCII tương ứng là

65 và 97

Trong Turbo Pascal mỗi ký tự được chứa trong 1 byte

Các hàm chuẩn liên quan đến kiểu ký tự:

Trang 8

KÝ HIỆU Ý NGHĨA

ORD(x) Cho số thứ tự của ký tự x trong bảng mã

CHR(n) hay #n Cho ký tự có số thứ tự là n

PRED(x) Cho ký tự đứng trước x

SUCC(x) Cho ký tự đứng sau x

V/CÁC KHAI BÁO HẰNG, BIẾN, KIỂU, BIỂU THỨC,

1 Hằng (constant)

a) Ðịnh nghĩa:

Hằng là một đại lượng có giá trị không đổi trong quá trình chạy chương trình

Ta dùng tên hằng để chương trình được rõ ràng và dễ sửa đổi

có thể được biến đổi trong thời gian sử dụng biến

Sự truy xuất của biến nghĩa là đọc giá trị hay thay đổi giá trị của biến đượcthực hiện thông qua tên biến

Ví dụ 5.2: Readln (x) ;

Writeln (x) ;

x := 9 ; Biến là một cấu trúc ghi nhớ dữ liệu vì vậy nó phải tuân theo qui định củakiểu dữ liệu : một biến phải thuộc một kiểu dữ liệu nhất định

b) Cách khai báo

VAR

<Tên biến> : <Kiểu biến> ;

Trang 9

Ví dụ 5.3: VAR

a : Real ;

b, c : Integer ; TEN : String [20]

X : Boolean ; Chon : Char ; Cần khai báo các biến trước khi sử dụng chúng trong chương trình Khai báomột biến là khai báo sự tồn tại của biến đó và cho biết nó thuộc kiểu gì

Tuoi = 1 100 ; Color = (Red, Blue, Green) ; Thu = (Sun, Mon, Tue, Wed, Thu, Fri, Sat) ;

Và khi đã khai báo kiểu gì thì ta có quyền sử dụng để khai báo biến như ở ví

dụ sau:

Ví dụ 5.5: VAR

i, j : SoNguyen ; Dtb : Diem ;

T : tuoi ; Mau : Color ; Ngay_hoc : Thu;

4 Biểu thức (Expression)

Trang 10

1 Biểu thức trong ngoặc đơn ( )

c) Qui ước tính thứ tự ưu tiên

Khi tính một biểu thức có 3 qui tắc về thứ tự ưu tiên như sau:

Qui tắc 1: Các phép toán nào có ưu tiên cao hơn sẽ được tính trước

Qui tắc 2: Trong các phép toán có cùng thứ tự ưu tiên thì sự tính toán sẽ

được thực hiện từ trái sang phải

Qui tắc 3: Phần trong ngoặc từ trong ra ngoài được tính toán để trở thành

một giá trị đơn

d) Kiểu của biểu thức

Là kiểu của kết quả sau khi tính biểu thức

Ví dụ 5.8: Biểu thức sau được gọi là biểu thức Boolean:

not (('a'>'c') and ('c'>'C')) or ('B'='b') có giá trị TRUE

VI/ CÁC THỦ TỤC XUẤT/NHẬP

1 Câu lệnh (statement)

a) Ý nghĩa

Trang 11

Trong một chương trình Pascal, sau phần mô tả dữ liệu là phần mô tả cáccâu lệnh Các câu lệnh có nhiệm vụ xác định các công việc mà máy tính phải thựchiện để xử lý các dữ liệu đã được mô tả và khai báo

b) Phân loại câu lệnh:

Câu lệnh được chia thành câu lệnh đơn giản và câu lệnh có cấu trúc

- Câu lệnh đơn giản

+ Vào dữ liệu: Read, Readln + Ra dữ liệu : Write, Writeln + Lệnh gán : :=

+ Lời gọi chương trình con (gọi trực tiếp tên của chương trình con) + Xử lý tập tin : RESET, REWRITE, ASSIGN

- Câu lệnh có cấu trúc

+ Lệnh ghép: BEGIN END + Lệnh chọn: IF THEN ELSE

CASE OF + Lệnh lặp : FOR TO DO

REPEAT UNTIL WHILE DO

Trang 12

x, y : Real ;

p, q : Boolean ; thì ta có thể có các phép gán sau :

- Lưu trữ các giá trị khác nhau vào một ô nhớ tại những thời điểm khác nhau

- Một quá trình tính toán có thể coi như là một quá trình làm thay đổi giá trịcủa một (hay một số) ô nhớ nào đó, cho đến khi đạt được giá trị cần tìm

* Sơ đồ:

Trang 13

Hình 6.1: Sơ đồ cấu trúc BEGIN END;

Ở hình minh họa trên ta dễ thấy các nhóm lệnh thành từng khối (block) Mộtkhối lệnh bắt đầu bằng BEGIN và chấm dứt ở END; Trong một khối lệnh cũng cóthể có các khối lệnh con nằm trong nó Một khối chương trình thường được dùng

để nhóm từ 2 lệnh trở lên để tạo thành một <Công việc> của các lệnh có cấu trúc,

ta có thể gặp khái niệm này trong nhiều ví dụ ở các phần sau

3 Cấu trúc rẽ nhánh

a) Lệnh IF THEN và Lệnh IF THEN ELSE

* Lưu đồ diễn tả các lệnh và ý nghĩa cách viết:

Hình 6 2: Lệnh IF <Ðiều kiện> THEN <Công việc>;

Trang 14

Hình 6 3: Lệnh IF THEN ELSE ;

Chú ý:

- Ðiều kiện là một biểu thức Boolean

- Nếu <Công việc>sau THEN hoặc ELSE có nhiều hơn một lệnh thì ta

phải gói lại trong BEGIN END;

- Toàn bộ lệnh IF THEN ELSE xem như 1 lệnh đơn

Ví dụ 6.2: Tính căn bậc 2 của một số

PROGRAM Tinh_can_bac_hai ;

VAR

a : Real ; BEGIN

Write ( Nhập số a = ) ; Readln(a) ;

IF a < 0 THEN

Write (' a : 10 : 2 , là số âm nên không lấy căn được !!! ') ELSE

Trang 15

Writeln (' Căn số bậc 2 của , a : 2 : 2 , la , SQRT(a) :10 : 3 '); Writeln (' Nhấn ENTER để thoát ') ;

Readln; {Dừng màn hình để xem kết quả}

END

Ghi chú:

Trong chương trình trên, a ta thấy có dạng a :m :n với ý nghĩa m là số địnhkhoảng mà phần nguyên của a sẽ chiếm chỗ và n là khoảng cho số trị phần thậpphân của a

CASE <Biểu thức > OF Xét giá trị của biểu thức chọn

GT1 : Công việc 1 ; Nếu có giá trị 1 (GT1) thì thi hành Công việc 1

GTi : Công việc i ; Nếu có giá trị i (GT i) thì thi hành Công việc i

ELSE Công việc 0 ; Nếu không có giá trị nào thỏa thì thực hiện

Công việc 0 END;

Ghi chú:

Trang 16

- Lệnh CASE OF có thể không có ELSE

- Biểu thức chọn là kiểu rời rạc như Integer, Char, không chọn kiểu Real

- Nếu muốn ứng với nhiều giá trị khác nhau của biểu thức chọn vẫn thi hànhmột lệnh thì giá trị đó có thể viết trên cùng một hàng cách nhau bởi dấu phẩy (,) :Giá trị k1, k2, , kp : Lệnh k ;

Readln;

END

4 Cấu trúc lặp

a) Lệnh FOR

Cấu trúc FOR cho phép lặp lại nhiều lần một dãy lệnh Số lần lặp lại dãy lệnh

đã biết trước Phát biểu FOR có 2 dạng:

Trang 17

* Lưu đồ:

Hình 6 5: Lưu đồ phát biểu FOR TO DO

Chú ý: Trị đầu, trị cuối là các biến hoặc hằng và biến đếm phải là kiểu rời rạc

Trang 18

Hình 6 6: Lưu đồ cấu trúc WHILE DO

- Nếu điều kiện Ðúng thì chương trình sẽ chạy trong cấu trúc WHILE DO

- Sau mỗi lần lặp, chương trình trở lại kiểm tra điều kiện Tùy theo biểu thứclogic của điều kiện là Ðúng hay Sai thì chương trình sẽ thực hiện Công việc tươngứng

- Nếu Sai thì chuyển xuống dưới cấu trúc WHILE DO

Trang 19

Ví dụ 6.5: Chương trình tính trung bình n số: x1 + x2 + x3 + + xn

Program Trung_binh_Day_So ;

VAR n, count : Integer ;

x, sum, average : real ; BEGIN

count := 1 ; sum := 0 ; Write (' Nhập n = ') ; readln (n) ;

average := sum/n ; Writeln (' Trung bình là =' , average : 10 : 3 ) ; Writeln (' Nhấn Enter để thoát ' ) ;

Readln ; END

c) Lệnh REPEAT UNTIL

Câu lệnh REPEAT UNTIL dùng trong các trường hợp khi biến điều khiển không

có kiểu rời rạc và đặc biệt trong các trường hợp số lần lặp không biết trước

Hình 6.8: Lưu đồ cấu trúc của REPEAT UNTIL

* Ý nghĩa câu lệnh:

Trang 20

Nếu điều kiện logic là Sai (False) thì lặp lại lệnh cho đến khi điều kiện Ðúngthì mới thoát ra khỏi cấu trúc REPEAT UNTIL

Nếu có nhiều câu lệnh thì mỗi lệnh ngăn cách nhau bằng dấu chấm phẩy(;)Công việc của REPEAT và UNTIL không nhất thiết phải dùng lệnh ghép đểnhóm từ 2 lệnh đơn trở lên thành công việc

Hình 6.9: Sơ đồ cú pháp REPEAT UNTIL

Ví dụ 6.6: Với bài toán trung bình cộng một dãy số ở ví dụ trước có thể viết

theo cấu trúc REPEAT UNTIL như sau:

Writeln (' Trung bình là =' , sum/n : 8 :2 ) ; Readln ;

END

Trang 21

Ghi chú:

So sánh 2 cách viết WHILE DO và REPEAT UNTIL ta thấy có sự khác biệt:

- Trong cấu trúc WHILE DO thì <Ðiều kiện> được kiểm tra trước, nếu thỏa

<Ðiều kiện> thì mới thực hiện <Công việc>

- Ngược lại, trong cấu trúc REPEAT UNTIL thì <Công việc> sẽ được thựcthi trước sau đó mới kiểm tra <Ðiều kiện>, nếu không thỏa <Ðiều kiện> thì tiếp tụcthi hành <Công việc> cho đến khi <Ðiều kiện> là đúng

Lệnh REPEAT UNTIL thường được sử dụng trong lập trình, nhất là lúcngười sử dụng muốn tiếp tục bài toán ở trường hợp thay đổi biến mà không phảitrở về chương trình và nhấn tổ hợp phím Ctrl + F9 lại

Writeln (' Tích số của a x b là:' , a*b : 10 );

Writeln (' Tiếp tục tính nữa không (CK) ? ');

Readln (CK);

UNTIL upcase(CK) = K; {hàm chuyển đổi ký tự trong biến} {CK thành ký tự in hoa}

END

Trang 22

CHƯƠNG II CHƯƠNG TRÌNH CON VÀ ÐƠN VỊ CHƯƠNG TRÌNH

I/ KHÁI NIỆM VỀ CHƯƠNG TRÌNH CON

Khi lập trình, chúng ta thường có những đoạn chương trình hay phép tính lặplại nhiều lần Nếu mỗi lần lặp lại, ta phải viết những đoạn lệnh như nhau thìchương trình của chúng ta trở nên dài dòng, rối rắm và mất thời gian vô ích Ðểgiải quyết những trường hợp như vậy, Pascal cho phép chúng ta tạo ra cácmodule, mỗi module mang một đoạn chương trình gọi là chương trình con(subroutine hay subprogram) Mỗi chương trình con sẽ mang một cái tên khácnhau Một module chỉ cần viết một lần và sau đó chúng ta có thể truy xuất nónhiều lần, bất kỳ nơi nào trong chương trình chính Khi cần thiết, chúng ta chỉviệc gọi tên chương trình con đó ra để thi hành lệnh

Nhờ sử dụng chương trình con, chương trình có thể tiết kiệm được ô nhớ.Ðồng thời, ta có thể kiểm tra tính logic trong tiến trình lập trình cho máy tính điện

tử, có thể nhanh chóng loại bỏ những sai sót khi cần hiệu chỉnh hay cải tiếnchương trình Ðây là khái niệm cơ bản trong ý tưởng lập chương trình có cấu trúc.Một quá trình tính cũng có thể có nhiều chương trình con lồng ghép vào nhau Trong Pascal, chương trình con được viết dưới dạng thủ tục (procedure) vàhàm (function) Cấu trúc của 2 kiểu chương trình con này thì tương tự với nhau,mặc dầu cách truy xuất của chúng có khác nhau và cách trao đổi thông tin trongmỗi kiểu cũng có điểm khác nhau Hàm (function) trả lại một giá trị kết quả vôhướng thông qua tên hàm và hàm được sử dụng trong biểu thức

Ví dụ hàm chuẩn, như hàm sin(x) mà chúng ta đã biết trong chương trước cóthể được xem như một chương trình con kiểu function với tên là sin và tham số là

x Trong khi đó, thủ tục (procedure) không trả lại kết quả thông qua tên của nó, dovậy, ta không thể viết các thủ tục trong biểu thức Các lệnh Writeln, Readln trongchương trước được xem như các thủ tục chuẩn

Một chương trình có chương trình con tự thiết lập có 3 khối (block) :

* Khối khai báo

* Khối chương trình con

* Khối chương trình chính

II/ THỦ TỤC VÀ HÀM

1 Một số khái niệm biến:

Trang 23

- Biến toàn cục (global variable): Còn được gọi là biến chung, là biến đượckhai báo ở đầu chương trình, nó được sử dụng bên trong chương trình chính và

cả bên trong chương trình con Biến toàn cục sẽ tồn tại trong suốt quá trình thựchiện chương trình

- Biến cục bộ (local variable): Còn được gọi là biến riêng, là biến được khaibáo ở đầu chương trình con, và nó chỉ được sử dụng bên trong thân chương trìnhcon hoặc bên trong thân chương trình con khác nằm bên trong nó (các chươngtrình con lồng nhau) Biến cục bộ chỉ tồn tại khi chương trình con đang hoạt động,nghĩa là biến cục bộ sẽ được cấp phát bộ nhớ khi chương trình con được gọi đểthi hành, và nó sẽ được giải phóng ngay sau khi chương trình con kết thúc

- Tham số thực (actual parameter) là một tham số mà nó có thể là một biếntoàn cục, một biểu thức hoặc một giá trị số (cũng có thể biến cục bộ khi sử dụngchương trình con lồng nhau) mà ta dùng chúng khi truyền giá trị cho các tham sốhình thức tương ứng của chương trình con

- Tham số hình thức (formal parameter) là các biến được khai báo ngay sau

Tên chương trình con, nó dùng để nhận giá trị của các tham số thực truyền đến.

Tham số hình thức cũng là một biến cục bộ, ta có thể xem nó như là các đối sốcủa hàm toán học

2 Lời gọi chương trình con (thủ tục và hàm):

Ðể chương rrình con được thi hành, ta phải có lời gọi đến chương trình con,lời gọi chương trình con thông qua tên chương trình con và danh sách các tham

số tương ứng (nếu có) Các qui tắc của lời gọi chương trình con:

- Trong thân chương trình chính hoặc thân chương trình con, ta chỉ có thểgọi tới các chương trình con trực thuộc nó

- Trong chương trình con, ta có thể gọi các chương trình con ngang cấp đãđược thiết lập trước đó

a) Thủ tục (Procedure):

Thủ tục là một đoạn cấu trúc chương trình được chứa bên trong chươngtrình Pascal như là một chương trình con Thủ tục được đặt tên và có thể chứadanh sách tham số hình thức (formal parameters) Các tham số này phải được đặttrong dấu ngoặc đơn ( ) Ta có thể truy xuất thủ tục bằng cách gọi tên của thủ tục.Chương trình sẽ tự động truy xuất thủ tục đúng tên đã gọi và thực hiện các lệnhchứa trong thủ tục đó Sau khi thực hiện thủ tục xong, chương trình sẽ trở lại ngaylập tức sau vị trí câu lệnh gọi thủ tục đó

Có 2 loại thủ tục:

Trang 24

IF a > b THEN max := a ELSE max := b;

IF c > max THEN max := c;

maximum ; (* - Lời gọi thủ tục maximum - *) Write (' Tiếp tục nhập 3 số mới không (y/n) ? ');

Trang 25

được định nghĩa bên trong thủ tục Ðiều này cho ta thấy, không phải lúc nào cũngcần thiết khai báo biến ngay đầu chương trình chính

Cấu trúc của thủ tục có tham số

PROCEDURE < Tên thủ tục > (<danh sách tham số hình thức : kiểu biến>);

{ Các khai báo hằng, biến, kiểu cục bộ } BEGIN

{ các lệnh trong nội bộ thủ tục } END ;

Khi viết một thủ tục, nếu có các tham số cần thiết, ta phải khai báo nó (kiểu,

số lượng, tính chất, .) Các tham số này gọi là tham số hình thức (formalparameters)

Một thủ tục có thể có 1 hoặc nhiều tham số hình thức Khi các tham số hìnhthức có cùng một kiểu thì ta viết chúng cách nhau bởi dấu phẩy (,) Trường hợpcác kiểu của chúng khác nhau hoặc giữa khai báo tham số truyền bằng tham biến

và truyền bằng tham trị (sẽ học ở phần sau ) thì ta phải viết cách nhau bằng dấuchấm phẩy (;)

Ví dụ 2.2: Tính giai thừa của một số

PROGRAM Tinh_Giai_thua ;

VAR

n : integer ; gt : real ; {các biến chung}

PROCEDURE giaithua (m : integer );

VAR i : integer ; {i là biến riêng}

BEGIN

gt := 1 ; FOR i := 1 TO m DO gt := gt * i ; END ;

BEGIN (* Thân chương trình chính *)

Write('Nhập số nguyên n (0 <= n < 33) = ') ; Readln (n) ;

If n>=0 then Begin

giaithua (n) ; Writeln ('Giai thừa của , n, là :' , gt: 10 : 0) ; End

Else Writeln(' Không tính giai thừa của một số âm! ') ;

Trang 26

Readln;

END

Trong chương trình trên m là các tham số hình thức của thủ tục giaithua Khi gọi thủ tục giaithua (n) thì tham số thực n được truyền tương ứng chotham số hình thức m

Ví dụ 2.3: Giải phương trình ax2 + bx + c = 0, theo dạng chương trình con

lồng nhau:

PROGRAM Giai_PTB2;

VAR hsa, hsb, hsc:real; {các biến toàn cục}

PROCEDURE Ptb2(a,b,c:real); {a, b, c là các tham số hình thức của Ptb2}

Var delta:real; {biến cục bộ}

PROCEDURE Ptb1(a1,b1:real); {a,b là các tham số hình thức của Ptb1} Begin

Trang 27

Ở ví dụ trên, thì thủ tục Ptb2 và thủ tục Ptb1 được gọi là thủ tục lồng nhau

Ở dòng (4), ta thấy hsa, hsb, hsc lại được hiểu là các tham số thực, chúng truyềngiá trị biến cho các tham số hình thức a, b, c tương ứng trong thủ tục Ptb2

Nếu ta lại xét đến thủ tục con của thủ tục Ptb2 là Ptb1 thì các tham số a, b, cnày (chính xác là b và c) lại là tham số thực đối với Ptb1, với b và c được truyềntương ứng cho các tham số hình thức a, b của thủ tục Ptb1

Như vậy ta nhận thấy rằng, vấn đề xác định được đâu là biến toàn cục, đâu

là biến cục bộ, đâu là tham số thực và đâu là tham số hình thức (tham số biến vàtham số trị) là ứng bước nào mà chương trình đang thực hiện? Ðây là phần thenchốt để nắm được cách vận hành và kết quả của chương trình xử lý

Sơ đồ minh họa cách vận hành và quản lý biến của chương trình:

b) Hàm (Function) :

Trang 28

Hàm là một chương trình con cho ta 1 giá trị kiểu vô hướng Hàm tương tựnhư thủ tục nhưng trả về một giá trị thông qua tên hàm và lời gọi hàm tham giatrong biểu thức

Cấu trúc một hàm tự đặt gồm:

FUNCTION <Tên hàm> (<Tham số hình thức : kiểu biến>) : <Kiểu kết quả> ;

{ các khai báo hằng, biến, kiểu cụcbbộ }BEGIN

{ các khai báo trong nội bộ hàm } END ;

Trong đó:

- Tên hàm là tên tự đặt cần tuân thủ theo nguyên tắc đặt tên trong Pascal

- Kiểu kết quả là một kiểu vô hướng, biểu diễn kết quả giá trị của hàm

- Một hàm có thể có 1 hay nhiều tham số hình thức, khi có nhiều tham sốhình thức cùng một kiểu giá trị thì ta có thể viết chúng cách nhau bằng dấu phẩy(,) Trường hợp các tham số hình thức khác kiểu thì ta viết chúng cách nhau bằngdấu chấm phẩy (;)

- Trong hàm có thể sử dụng các hằng, kiểu, biến đã được khai báo trongchương trình chính nhưng ta có thể khai báo thêm các hằng, kiểu, biến dùng riêngtrong nội bộ hàm Chú ý là phải có một biến trung gian có cùng kiểu kết quả củahàm để lưu kết quả của hàm trong quá trình tính toán để cuối cùng ta có 1 lệnhgán giá trị của biến trung gian cho tên hàm

Ví dụ 2.4: FUNCTION TINH (x, y : integer ; z : real ) : real ;

Ðây là một hàm số có tên là TINH với 3 tham số hình thức x, y, z Kiểu của x

và y là kiểu số nguyên integer còn kiểu của z là kiểu số thực real Hàm TINH sẽcho kết quả kiểu số thực real

Ví dụ 2.5: Bài toán tính giai thừa (factorials)

Trang 29

FOR heso := 2 TO n DO

tichso := tichso * heso ; factorial := tichso;

END ; END ;

BEGIN

Write (' Nhập vào một số nguyên dương x = '); Readln (x) ; Writeln (' Với x = , x , thì giai thừa sẽ là : x ! = ' , factorial(x)) Readln;

Ví dụ 2.6: Procedure Xuat1(hoten : string[25]);

Procedure Xuat2(mang: array[1 10] of integer); Hai chương trình con Xuat1 và Xuat2 đều bị lỗi ở phần khai báo kiểu dữ liệucho hai tham số hình thức là hoten và mang

Ðể khắc phục lỗi này, ta sẽ khai báo gián tiếp một kiểu dữ liệu str25 và M10thông qua từ khóa TYPE như sau:

TYPE

Str25=string[25]; {Str25 là một kiểu chuỗi có độ dài 25}

M10=Array[1 10] of integer; {M10 là một kiểu dữ kiệu mảng có 10 phần tử nguyên} Tiếp đến, dùng 2 kiểu dữ liệu mới định nghĩa Str25 và M10 để định kiểu chocác tham số hình thức hoten và mang như sau:

Procedure Xuat1(hoten : Str25);

Procedure Xuat2(mang: M10);

Trang 30

III/ TRUYỀN THAM SỐ CHO CHƯƠNG TRÌNH CON

Khi truyền tham số trong Pascal, đòi hỏi phải có sự tương ứng về tên củakiểu dữ liệu của các tham số hình thức và tham số thực Một số định nghĩa và quitắc về truyền tham số trong Pascal:

- Những tham số hình thức nằm sau từ khóa VAR gọi là tham số biến(variable parameter) Với tham số biến, các tham số thực bắt buộc phải là biếnchứ không được là giá trị Khi giá trị của tham số biến thay đổi thì nó sẽ làm thayđổi giá trị của tham số thực tương ứng và khi ra khỏi chương trình con đó, tham

số thực vẫn giữ giá trị đã được thay đổi đó

- Những tham số hình thức không đứng sau từ khóa VAR gọi là tham số trị(value parameter), khi đó các tham số thực có thể là một biến, một biểu thức, mộthằng, hoặc một giá trị số Các tham số trị nhận giá trị từ tham số thực khi truyềnnhư là giá trị ban đầu, khi giá trị của tham số trị thay đổi thì nó sẽ không làm thayđổi giá trị của tham số thực, nghĩa là giá trị của tham số thực sau khi thoát khỏichương trình con vẫn luôn bằng với giá trị của tham số thực trước khi truyền đếnchương trình con đó Do vậy một tham trị không bao giờ là kết quả tính toán củachương trình con

Một vài thí dụ về tham số biến:

Ví dụ 3.1: Viết chương trình tính lập phương

PROGRAM Parameter1;

VAR num: integer; {num là biến toàn cục}

PROCEDURE LapPhuong(var a:integer); {a là một tham số biến}

Trang 31

PROCEDURE thamso (x : integer ; VAR y : integer ) ; BEGIN { x: là tham số trị , còn y là tham số biến}

x := x + 1 ;

y := y + 1 ; Writeln (‘Trong procedure thamso, ‘) ; Writeln (' Hai số của bạn là a = , x : 3, và b = , y : 3 ) ; END ;

END

PHẦN ĐỌC THÊM

IV/ TÍNH ÐỆ QUI CỦA CHƯƠNG TRÌNH CON

Một chương trình con mà trong quá trình thiết lập, nó sẽ gọi chính bản thân

nó thì chương trình con có tính đệ qui (recursion)

Ví dụ 4.1: Bài toán tính giai thừa (factorials) theo cách đệ qui Bài toánnày có phần chương trình chính giống như đã có ở ví dụ trước:

PROGRAM Giaithua ; (*Tính giai thừa của số n theo phương pháp đệ qui *) VAR x : integer ;

FUNCTION factorial (n : integer) : longint ;

BEGIN

IF n <= 1 THEN factorial := 1 {điều kiện neo}

ELSE factorial := n * factorial (n -1);

END ; BEGIN

Write (' Nhập vào một số nguyên dương x = ');

Readln (x) ;

Trang 32

Writeln ; Writeln (' Kết quả ',x,'! = , factorial(x));

định nghĩa theo lối đệ qui

- Có một số thuật toán đệ qui sử dụng cho các bài toán đơn giản có thể đượcthay thế bằng một thuật toán khác không tự gọi chúng, sự thay thế đó được gọi là

khử đệ qui

- Trong một số bài toán ta có thể giải theo 2 cách: thuật toán lặp (xemchương trước) và thuật toán đệ qui Thông thường, cách giải theo thuật toán lặp(WHILE DO) thì tốt hơn so với thuật toán đệ qui vì đệ qui đòi hỏi thêm bộ nhớ vàthời gian Khi đó các thanh ghi được sử dụng cho lưu trữ và khi quay trở về phảikhôi phục lại trạng thái cũ trong mỗi lần gọi đến chương trình con Mức độ phứctạp có thể gia tăng khi trong chương trình con theo thuật toán đệ qui có chứanhững chương trình con khác Vì vậy, khi dùng đệ qui ta cần thận trọng, nhất làthuật toán này thường không cho ta thấy rõ trực tiếp toàn bộ quá trình giải các

bước Nói chung, chỉ khi naò không thể dùng thuật toán lặp ta mới nên sử dụng

thuật toán đệ qui

Trang 33

V/ ÐƠN VỊ CHƯƠNG TRÌNH (UNIT)

1 Khái niệm:

Lập trình một bài toán lớn rất phức tạp và vất vả nếu nó phải sử dụng nhiềuthuật toán lập đi lập lại Việc tạo ra nhiều mẫu chương trình con nhằm giảm nhẹcông việc của một lập trình viên (programmer) Tuy nhiên, mỗi chương trình conchỉ có ứng dụng được trong chính chương trình chứa nó mà thôi Ðể khỏi mấtthời gian để viết lại chúng, người ta biến mỗi chương trình con thành các moduleđộc lập, được biên dịch sẵn và lưu trữ trên đĩa như một thư viện Khi cần ta cứviệc gọi các module này ra mà không cần phải viết lại chúng Mỗi module như vậyđược gọi là một đơn vị chương trình, hay gọi tắt là UNIT

Khái niệm Unit đã được vào sử dụng từ chương trình Pascal version 4.0 trở

đi Có hai loại Unit là các Unit chuẩn do Turbo Pascal tạo sẵn và các Unit tự tạo

do người lập trình tự viết ra

2 Các Unit chuẩn

a) Một số Unit chuẩn trong Turbo Pascal 5.5 trở đi

* Unit SYSTEM : gồm các hằng, biến, kiểu, hàm, thủ tục trong version 3.0

* Unit CRT : gồm các hằng, biến, kiểu, hàm, thủ tục liên quan đến

chế độ Text của version 5.5

* Unit PRINTER : gồm các hằng, biến, kiểu, hàm, thủ tục liên quan đến

chế độ in ấn

* Unit GRAPH : gồm các hằng, biến, kiểu, hàm, thủ tục liên quan đến

chế độ đồ thị của version 5.5

* Unit TURBO3 : gồm các hằng, biến, kiểu, hàm, thủ tục liên quan đến

chế độ Text của version 3.0

* Unit GRAPH3 : gồm các hằng, biến, kiểu, hàm, thủ tục liên quan đến

chế độ đồ thị của version 3.0

* Unit DOS : gồm các hằng, biến, kiểu, hàm, thủ tục liên quan đến hệ điều

hành MS-DOS

* Unit OVERLAY : gồm các hằng, biến, kiểu, hàm, thủ tục liên quan đến

việc truy xuất đĩa phủ lấp khi chạy chương trình

Các Unit trên được lưu trữ trong tập tin TURBO.TPL của Turbo Pascal

Chúng ta có thể sử dụng chương trình TPUMOVER.EXE để lấy ra hoặc đưa vàomột hay nhiều Unit nhằm tiết kiệm bộ nhớ hay tăng cường tiện ích sử dụng

b) Cách gọi Unit

Trang 34

Muốn sử dụng UNIT thì trong đầu chương trình ta phải khai báo Unit theo cúpháp sau:

USES <Tên Unit> [ { , <Tên Unit> } ] ;

* InsLine : thủ tục xen vào một hàng ở vị trí con trỏ màn hình

* DelLine : thủ tục xóa bỏ một hàng ở vị trí con trỏ màn hình

* GotoXY(XPos, Ypos): đưa con trỏ màn hình về vị trí có tọa độ Xpos và Ypos X có giá trị từ 1 - 80, và Y có giá trị từ 1 - 25

* Delay(time): tạo thời gian trễ tính theo milisecond Time là một số nguyên

dùng để làm chậm chương trình cho ta kịp quan sát dữ liệu

* Sound(F) : thủ tục tạo ra âm thanh với tần số F (hz) F là số nguyên

* NoSound : thủ tục tắt âm thanh

* LowVideo và NormVideo: thủ tục màn hình, khi gọi LowVideo thì mọi ký

tự viết ra màn hình có độ sáng yếu dần đi cho đến khi nhận thủ tục NormVideo mới về độ sáng bình thường

* TextBackGround (color): thủ tục chọn màu nền, color cho ở bảng (từ 1-7)

* KeyPressed: hàm cho giá trị kiểu kết quả Boolean, cho giá trị là True

nếu có một phím được bấm

* TextColor (color): thủ tục chọn màu chữ, color lấy ở bảng

Trang 35

Các hằng số màu của CRT unit

Hằng số color Màu hiển thị Giá trị

Black Blue Green Cyan Red Magenta Brown LightGray DarkGray LightBlue LightGreen LightCyan LightRed LightMagenta Yellow

White

Ðen Xanh da trời Xanh lá cây Xanh lơ

Ðỏ Tím Nâu Xám nhạt Xám đậm Xanh da trời nhạt Xanh là cây nhạt Xanh lơ nhạt

Ðỏ nhạt Tím nhạt Vàng Trắng

TextColor(Red + Blink) ;

* ReadKey: hàm có kiểu kết quả là Char, khi nhấn các phím chức năng trênbàn phím thì có kết quả là 1 ký tự mã ASCII Nếu ký tự đầu tiên do ReadKey trả

Trang 36

về bằng ASCII 0 thì ký tự kế theo sẽ chỉ định phím như ở bảng dưới Các phímHome, phím mũi tên, luôn tạo nên một ký tự đi theo ASCII 0 Các phím chứcnăng từ F1 đến F10 sinh ra một trong 4 ký tự tùy theo ta dùng với tổ hợp phím Alt,Ctrl hay Shift hay dùng một mình

Các phím chức năng đặc biệt

F1 F2 F3 F4 F5 F6 F7 F8 F9 F10 Home PageUp

¬ → End ↓ PageDn

Ins Del

\ (92) ] (93)

VI/ UNIT TỰ TẠO

Trang 37

1 Một số bước để tạo ra Unit

Ðể tạo ra một Unit của mình cần đi qua các bước sau:

Bước 1 : Tạo ra một file Unit có phần mở rộng là PAS với bố cục sau:

UNIT <Tên Unit> ; (* Chú ý : Tên Unit phải trùng với tên File *)

INTERFACE (* Chú ý : Phần giao diện với bên ngoài, không có dấu ; ở đây *) [Uses <danh sách các unit>]; {Khai báo các unit dùng trong chương trình }

[Khai báo các hằng, kiểu, biến dùng chung] ;

[Khai báo các thủ tục, hàm (tên, danh sách tham số của thủ tục và hàm] ; IMPLEMENTATION (* Cài đặt các hàm, thủ tục của Unit, không có dấu ; ở đây *)

[Các khai báo kiểu, hằng, biến cục bộ ];

[Nội dung cài đặt các thủ tục, hàm của unit ];

[BEGIN] (* Phần khởi tạo : Initialization Part *)

[Các lệnh khởi tạo ];

END (* Dù có BEGIN để khởi tạo hay không, ở đây vẫn có END *)

Bước 2 : Dịch file này lên đĩa theo trình tự sau:

i Gõ Alt - C để vào Menu COMPILE

ii Ði đến mục Destination và nhấn Enter để chương trình tự động đổi

Memory thành Disk iii Gõ C (hoặc F9) để biên dịch chương trình tạo nên một file .TPU

iv Khi dịch xong gõ một phím bất kỳ Sau đó ta có thể lập lại bước 1 và

2 để chuyển Destination từ Disk sang Memory

2 Ví dụ

Ví dụ 6.1: Tạo một UNIT tính Cộng, Trừ, Nhân, Chia cho học sinh tiểu học

Tên file Unit là TTIEUHOC.PAS với nội dung sau:

UNIT TTieuHoc ; {Phần đầu : Chương trình Toán Tiểu học }

PROCEDURE Cong (Var So1, So2, So3 : Real) ;

PROCEDURE Tru (Var So1, So2, So3 : Real) ;

PROCEDURE Nhan (Var So1, So2, So3 : Real) ;

PROCEDURE Chia (Var So1, So2, So3 : Real) ;

Trang 38

So1, So2, So3 : Real ;

PROCEDURE Menu (Var chon : integer) ;

BEGIN

Trang 39

ClrScr ; Writeln (' == TOÁN TIỂU HỌC == ') ; Writeln (' = 0 Chấm dứt = ') ; Writeln (' = 1 Toán cộng = ') ; Writeln (' = 2 Toán trừ = ') ; Writeln (' = 3 Toán nhân = ') ; Writeln (' = 4 Toán chia = ') ; Writeln (‘ ================== ‘) ; Write (' Bạn chọn số mấy ? ') ; Readln (chon);

END ; PROCEDURE nhapso (Var So1, So2, So3 : real );

BEGIN

Write (' Nhập vào số thứ 1 : ') ; Readln(So1) ; Write (' Nhập vào số thứ 2 : ') ; Readln(So2) ; Write (' Kết quả là : ') ; Readln (So3) ;END ;

BEGIN {=====Chương Trình Chính ======}

CLRSCR;

REPEAT

Menu (chon) ; CASE chon OF

1 : BEGIN

Writeln ; Writeln (' == Toán cộng == ') ; Nhapso(So1, So2, So3) ; Cong(So1, So2, So3) ; END;

2 : BEGIN

Writeln ; Writeln (' == Toán trừ == ') ; Nhapso(So1, So2, So3) ; Tru(So1, So2, So3) ; END;

Trang 40

3 : BEGIN

Writeln ; Writeln (‘ == Toán nhân == ‘) ; Nhapso(So1, So2, So3) ; Nhan(So1, So2, So3) ; END;

4 : BEGIN

Writeln ; Writeln (‘ == Toán chia == ‘) ; Nhapso(So1, So2, So3) ; Chia(So1, So2, So3) ; END;

END; {case}

Writeln (' Gõ bất kỳ phím nào để tiếp tục ');

Readln;

UNTIL chon = 0;

VII/ LẬP TRÌNH THEO CẤU TRÚC TRÊN - XUỐNG

(TOP - DOWN STRUCTURED PROGRAMMING)

Nếu các bạn là một người mới bắt đầu khởi sự thực hành lập trình một bàitoán nào đó, các bạn sẽ thường tự hỏi: Ta phải bắt đầu bằng việc gì đây? Ðây làmột câu hỏi không phải ai cũng trả lời chung được Tuy nhiên, dựa vào kinhnghiệm thu thập được của những người lập trình tài tử và của những lập trìnhviên chuyên nghiệp, tác giả Francis Scheid, trong tác phẩm Computer andProgramming của mình, đã cho một số lời khuyên sau :

1 Ôn lại những kinh nghiệm đã qua để xem coi vấn đề của bạn có chút gìtương tự đến các vấn đề mà bạn đã từng chạm trán trước đây không;

2 Trước tiên, thử làm một phiên bản đơn giản Nếu có thể, đưa ngay vàomột số trường hợp đặc biệt mà bạn có, nhằm tạo chương trình bạn có một vẻ gìsâu sắc

3 Chia bài toán ra thành những bài nhỏ, rồi tiếp tục chẻ những bài nhỏ nàythành những phần nhỏ hơn, nếu được, chẻ tiếp những phần nhỏ này thànhnhững mảnh nhỏ hơn nữa, sau đó giải quyế từng phần hay mảnh nhỏ này

Mỗi thuật toán có thể thể hiện bằng lưu đồ (flow chart) Lưu đồ chính là bản

đồ lộ trình của thuật toán Không hẳn tất cả những chuyên viên máy tính phải thực

Ngày đăng: 07/07/2013, 01:27

HÌNH ẢNH LIÊN QUAN

Hình 1:  Sơ đồ cấu trúc chương trình Pascal - Cơ bản về lập trình Pascal
Hình 1 Sơ đồ cấu trúc chương trình Pascal (Trang 3)
Bảng dưới đây là các hàm số học cho kiểu số thực: - Cơ bản về lập trình Pascal
Bảng d ưới đây là các hàm số học cho kiểu số thực: (Trang 6)
Hình 6. 2: Lệnh IF &lt;Ðiều kiện&gt; THEN &lt;Công việc&gt;; - Cơ bản về lập trình Pascal
Hình 6. 2: Lệnh IF &lt;Ðiều kiện&gt; THEN &lt;Công việc&gt;; (Trang 13)
Hình 6.4:  Lưu đồ lệnh CASE .. OF - Cơ bản về lập trình Pascal
Hình 6.4 Lưu đồ lệnh CASE .. OF (Trang 15)
Hình 6. 6:  Lưu đồ cấu trúc WHILE .. DO - Cơ bản về lập trình Pascal
Hình 6. 6: Lưu đồ cấu trúc WHILE .. DO (Trang 18)
Sơ đồ minh họa cách vận hành và quản lý biến của chương trình: - Cơ bản về lập trình Pascal
Sơ đồ minh họa cách vận hành và quản lý biến của chương trình: (Trang 27)
Bảng 1: Các giá trị của Grapdriver, GraphMode và Resolution của một số loại màn hình thông dụng - Cơ bản về lập trình Pascal
Bảng 1 Các giá trị của Grapdriver, GraphMode và Resolution của một số loại màn hình thông dụng (Trang 106)
Bảng 2:     Các lỗi  đồ họa - Cơ bản về lập trình Pascal
Bảng 2 Các lỗi đồ họa (Trang 108)
Bảng 4:  Các giá trị có thể nhận của biến kiểu tô Pattern   Tên hằng  Giá trị kiểu tô  Diễn giải kiểu tô   EmptyFill - Cơ bản về lập trình Pascal
Bảng 4 Các giá trị có thể nhận của biến kiểu tô Pattern Tên hằng Giá trị kiểu tô Diễn giải kiểu tô EmptyFill (Trang 110)
Bảng 5:  Tham số LineStyle Hằng  Giá trị Diễn giải   SolidLn - Cơ bản về lập trình Pascal
Bảng 5 Tham số LineStyle Hằng Giá trị Diễn giải SolidLn (Trang 111)

TỪ KHÓA LIÊN QUAN

w