BÀI 01 : CHƯƠNG TRÌNH CON : THỦ TỤC VÀ HÀM TRONG PASCAL .
1. GIỚI THIỆU VỀ CHƯƠNG TRÌNH CON :
Trong lập trình , có nhiều công việc cứ lặp đi lặp lại một thao tác hoặc tính toán , xử lý nào
đó , thay vì phải viết những phần chương trình để giải quyết những phần việc này thì người ta
tạo lập những chương trình riêng được lưu trữ trên đóa hoặc trong bộ nhớ để khi nào sử dụng
đến thì gọi ra . Những chương trình con đó gọi là những thủ tục hay hàm .
Trong pascal nói riêng và các ngôn ngữ lập trình bậc cao nói chung đều có các thủ tục và hàm
chuẩn do nhà thiết kế ngôn ngữ tạo sẵn và cất trong thư viện các thủ tục và hàm chuẩn . Ngoài
ra còn cho phép người lập trình tự tạo các thủ tục và hàm của riêng họ để giải quyết những
nhiệm vụ do bài toán đặt ra .
Việc tổ chức chương trình con có những lợi điểm như sau :
Cấu trúc chương trình sáng sủa , khoa học , hệ thống hoá việc lập trình .
Có thể chia nhỏ chương trình thành những đơn thể cho nhiều người cùng thực hiện , khiến
tốc độ lập trình nhanh chóng mà còn tận dụng được trí tuệ tập thể .
Các đơn thể chương trình có thể là những thủ tục hay hàm độc lập với nhau , vì vậy rất dễ
dàng sửa lỗi hoặc thêm bớt nội dung cho phù hợp với nhu cầu đặt ra .
2. TỔ CHỨC VÀ SỬA LỖI TRONG THỦ TỤC VÀ HÀM :
Program < Tên chương trình > ;
Uses < Tên các unit > ;
Const
< Tên hằng > = < Giá trò > ;
Var
< Danh sách các biến > : < Kiểu dữ liệu > ;
Procedure < Tên thủ tục > [ tham số ] ;
const
< Tên hằng > = < Giá trò > ;
var
< Danh sách các biến > : < Kiểu dữ liệu > ;
begin
Các lệnh của thủ tục ;
end ;
Function < Tên hàm > ( tham số hình thức ) : < Kiểu của hàm > ;
const
< Tên hằng > = < Giá trò > ;
var
< Danh sách các biến > : < Kiểu dữ liệu > ;
begin
Các lệnh của hàm ;
end ;
Begin
Procedure < Tên thủ tục > ;
Function < Tên hàm > ;
Các lệnh khác của chương trình chính ;
End .
Các thủ tục và hàm tự tạo bao giờ cũng phải đặt trước chương trình chính . Khi nạp chương
trình vào máy sẽ nạp các thủ tục và hàm của chương trình đó , chúng nằm thường trú trong bộ
nhớ để khi nào cần sử dụng thì thực hiện bằng câu lệnh gọi thủ tục và hàm . Vì vậy tốc độ thực
hiện sẽ nhanh hơn so với chương trình không có cấu trúc chương trình con .
Sau từ khóa Program là tên chương trình chính .
Sau từ khóa Var là danh sách các biến của chương trình chính . Các biến này gọi là biến chung
có tác động chung cho toàn bộ chương trình , có nghóa là trong các hàm và thủ tục đều có thể
sử dụng tên của các biến này .
Sau từ khóa Procedure là tên của thủ tục .
Sau từ khóa Function là tên của hàm .
Chú ý : Khi đặt tên các thủ tục hay hàm ta nên đặt tên mang tính gợi nhớ để dể sử dụng về sau
này . Các tên phải viết liền nhau và không được trùng với tên của các từ khóa chuẩn .
Sau tên hàm là các tham số hình thức . Các tham số này sẽ được truyền giá trò bởi tham số
thực là các biến của chương trình chính .
Sau tham số hình thức là kiểu dữ liệu của giá trò trả về cho hàm .
Tiếp đến có thể có hoặc không có các biến riêng của hàm hoặc thủ tục .
Trong mỗi hàm đều có thân của hàm , đó là các lệnh được đặt giữa hai từ khóa begin … end ;
Thân chương trình chính bắt đầu bằng từ khóa Begin và kết thúc bằng từ khóa End với dấu
chấm .
Trong thân chương trình chính là các câu lệnh gọi thủ tục hoặc hàm và những câu lệnh khác .
3. KHAI BÁO THỦ TỤC VÀ HÀM TỰ TẠO :
KHAI BÁO THỦ TỤC :
Khi muốn thực hiện một thao tác nào đó ta nên khai báo là thủ tục .
Thủ tục có cấu trúc như một chương trình trong Pascal , chỉ khác là thay từ khóa Program bằng từ khóa
Procedure , ngoài ra sau phần khai báo tên thủ tục có thể có hoặc không có các tham số , dấu chấm phẩy
rồi đến thân thủ tục là những câu lệnh đơn giản , câu lệnh đơn , câu lệnh phức , câu lệnh điều kiện , câu
lệnh lặp , … tùy theo chức năng và nhiệmvụ của thủ tục trong chương trình .
Trong một chương trình có thể có nhiều thủ tục khác nhau , mỗi thủ tục có một chức năng hoặc công dụng
nào đó . Các thủ tục này có thể có các biến riêng ( còn gọi là biến cục bộ hoặc biến đòa phương ) . Các
biến này có thể trùng tên với biến chung ( còn gọi là biến toàn cục ) hoặc cũng có thể trùng với tên của
các thủ tục hay hàm khác .
KHAI BÁO HÀM :
Khi muốn trả về một kết quả nào đó ta nên khai báo là hàm .
Các thành phần của khai báo hàm giống như khai báo thủ tục nhưng có hai chỗ khác biệt như sau :
Thay từ khóa Procedure bằng từ khóa Function .
Khai báo hàm phải cho biết kiểu kết quả của hàm .
Chú ý : Ta có kết quả của hàm được trả về là một giá trò , còn thủ tục là một tác vụ ( công việc ) . Ta sử
dụng chương trình con là hàm khi :
Nếu ta muốn nhận lại một kết quả duy nhất .
Kết quả phải là kiểu vô hướng hoặc con trỏ .
Có sử dụng tên hàm trong biểu thức .
Nếu không thỏa mãn các yếu tố trên thì chương trình con là thủ tục .
4. THỦ TỤC VÀ HÀM LỒNG NHAU :
Hàm hoặc thủ tục lồng nhau cũng tương tự như các cấu trúc điều kiện hoặc cấu trúc vòng lặp
lồng nhau , tức là một thủ tục này chứa một thủ tục khác , hàm này chứa hàm khác .
Đối với các thủ tục và hàm tự tạo cũng cho phép thủ tục này lồng vào thủ tục khác , hàm này
lồng vào hàm hoặc thủ tục khác .
Trong một chương trình có thủ tục và hàm lồng nhau ta cần lưu ý một số đặc điểm sau :
Thủ tục và hàm ở bên ngoài gọi thực hiện thủ tục hoặc hàm ở bên trong , không được gọi
ngược lại và không được gọi cắt chéo nhau .
Các biến riêng và giá trò của chúng trong các thủ tục và hàm sẽ bò mất sau khi thoát ra khỏi
thủ tục và hàm đó .
5. LỆNH GỌI THỦ TỤC , HÀM VÀ THOÁT KHỎI CHƯƠNG TRÌNH :
Lệnh gọi thủ tục và hàm :
Câu lệnh gọi thủ tục hay hàm là câu lệnh gọi thực hiện thủ tục hay hàm chuẩn hoặc thủ tục
hay hàm tự tạo trước đó . Câu lệnh này gồm có tên thủ tục hay tên hàm , tiếp theo sau có thể có
hoặc không có danh sách các tham số đặt giữa hai dấu ngoặc đơn ( ) . Danh sách các tham số là
một dãy các biến và biểu thức được đặt cách nhau bởi dấu phẩy . Trong quá trình thực hiện chương
trình nếu gặp câu lệnh gọi thủ tục hay hàm , điều khiển được chuyển đến thủ tục hay hàm có tên
được chỉ đònh , đồng thời giá trò của các tham số được truyền cho thủ tục hay hàm theo các cách :
truyền bằng trò , truyền bằng biến hoặc truyền kết hợp vừa trò vừa biến . Sau khi thực hiện xong
thủ tục hay hàm , chương trình thực hiện tiếp tục từ câu lệnh đứng ngay sau câu lệnh gọi thủ tục
hay hàm .
Thủ tục thoát khỏi chương trình :
Trong lập trình nhất là những chương trình dài , hoặc ngay cả những chương trình con , đôi
lúc cũng cần dừng chương trình tại một vò trí nào đó để kiểm tra các kết quả trung gian mà không
cần phải chạy hết chương trình .
Thủ tục Exit ; : Nếu thủ tục Exit đặt trong chương trình con thì thoát chương trình con
giữa chừng để trở về chương trình chính . Nếu Exit đặt trong chương trình chính thì sẽ chấm dứt
chương trình chính , không thực hiện các lệnh còn lại sau thủ tục này .
Thủ tục Halt; : Dù cho thủ tục này đặt trong chương trình con hay chương trình chính ,
khi gặp thủ tục này thì sẽ chấm dứt thực hiện chương trình để trở về hệ điều hành và xuất hiện
một thông báo mã thoát ExitCode . Halt hoặc Halt ( 0 ) là thoát về hệ điều hành không có lỗi .
6. THAM SỐ VÀ TRUYỀN THAM SỐ :
Có hai loại tham số : tham số thực và tham số hình thức .
Việc cung cấp các giá trò thực cho các tham số hình thức được gọi là truyền tham số .
Thứ tự truyền tham số lần lượt truyền từ trái qua phải .
Có ba cách truyền tham số :
Truyền bằng trò : Tham số thực truyền cho tham số hình thức ở trong thủ tục thì sau khi
truyền giá trò của tham số thực không thay đổi .
Truyền bằng biến : Tham số thực truyền cho tham số hình thức ở trong thủ tục thì sau khi
truyền giá trò của tham số thực đã bò thay đổi .
Truyền kết hợp vừa trò , vừa biến .
Chú ý :
Các tham số hình thức khác kiểu dữ liệu với nhau trong các thủ tục , hàm thì phải phân cách
nhau bởi dấu chấm phẩy . Các tham số cùng kiểu thì phân cách nhau bởi dấu phẩy .
Khi gọi các thủ tục , hàm thì tất cả các tham số thực phân cách nhau bởi dấu phẩy không
phân biệt cùng kiểu hay khác kiểu .
Các tham số thực và tham số hình thức phải giống nhau về kiểu , số lượng và vò trí của chúng
trong danh sách liệt kê biến .
7. BIẾN CHUNG , BIẾN RIÊNG VÀ MIỀN TÁC ĐỘNG CỦA BIẾN :
Trong một chương trình có cấu trúc chương trình con thì các biến sử dụng trong chương trình
chính và chương trình con là khác nhau .
Biến chung được khai báo trong chương trình chính , thời gian tồn tại của biến từ lúc vận hành
chương trình cho đến khi thoát khỏi chương trình .
Biến riêng được khai báo trong các chương trình con , thời gian tồn tại của biến trong phạm vi
chương trình con đang vận hành . Khi thoát khỏi chương trình con thì các biến riêng và giá trò
của chúng sẽ bò mất . Lợi dụng đặc điểm này người ta có thể đặt tên các biến trùng nhau trong
các chương trình con để tiết kiệm bộ nhớ .
8. MỘT SỐ THỦ TỤC VÀ HÀM CHUẨN TRONG UNIT CRT :
a. Thủ tục chuẩn :
Các thủ tục về tọa độ màn hình và con trỏ :
Thủ tục GotoXY ( x , y : integer ) ;
Dùng để đưa con trỏ đến tọa độ ( x , y ) trên màn hình .
Thủ tục ClrScr ;
Dùng để xóa màn hình , đưa con trỏ về góc trên bên trái màn hình có tọa độ ( 0 , 0 )
Thủ tục Deline ;
Dùng để xóa một dòng chứa con trỏ , các dòng ở phía dưới sẽ dồn lên .
Thủ tục ClrEol ;
Dùng để xóa các ký tự từ vò trí con trỏ đến cuối dòng mà không di chuyển vò trí con
trỏ .
Thủ tục Insline ;
Dùng để chèn thêm một dòng trống vào vò trí của con trỏ hiện hành , đẩy các dòng ở
phía dưới dòch chuyển xuống .
Các thủ tục về thuộc tính màn hình :
Thủ tục về cửa sổ màn hình :
Các thủ tục về âm thanh :
Một số thủ tục khác :
a. Hàm chuẩn :
Một số hàm chuẩn trong unit CRT :
Các hàm số học :
Các hàm sơ cấp :
Các hàm chuyển đổi kiểu :
Các hàm khác :
9. UNIT VÀ UNIT TỰ TẠO :
Có nhiều chương trình tiện ích thường xuyên sử dụng nên đã được hảng sản xuất phần mềm
ngôn ngữ biên dòch sẳn , lúc nào cần thì người lập trình chỉ đem ra sử dụng mà không cần phải
viết những đoạn chương trình con đó . Tuy vậy , không phải lúc nào người lập trình cũng sử
dụng hết các chương trình con lập sẵn nên nhà sản xuất chia nhỏ các chương trình con thành
từng nhóm theo từng công dụng . Mỗi nhóm gọi là một Unit và là Unit Chuẩn .
Ta có thể gom các chương trình con có công dụng nào đó vào một tập tin lưu trữ độc lập trên
đóa để sau này sử dụng trong các chương trình khác .
Một tập tin chương trình con nào đó sau khi đã chạy thử , sửa các lỗi và nhận thấy có nhiều
ứng dụng trong lập trình thì có thể chuyển thành Unit , ta gọi là các Unit tự tạo .
Cách tổ chức một Unit tự tạo gồm có ba phần :
• Tên tập tin phải bắt đầu bằng từ khóa Unit tương tự như bắt đầu chương trình là từ khóa
Program .
• Tên tập tin chương trình con phải trùng với tên tập tin Unit .
♣ Chép tập tin chương trình con vào máy nếu chưa có sẳn trên máy ( chép váo thư
mục mà ta sẽ xử lý ) .
♣ Khởi động Turbo Pascal và mở tập tin chương trình con , sau đó thêm tên Unit
vào dòng đầu tiên của tập tin này .
• Phần giao diện với bên ngoài gồm các chi tiết :
♣ Bắt đầu bằng từ khóa Interface và không có dấu chấm phẩy sau từ khóa này .
♣ Khai báo các Unit chuẩn nếu cần và mỗi Unit cách nhau bởi dấu phẩy .
♣ Khai báo các tên hằng , tên kiểu , tên biến nếu cần .
♣ Khai báo các thủ tục , các hàm : chỉ cần khai báo tên thủ tục , tên hàm với các
tên hằng , các tham số và kiểu dữ liệu , kiểu kết qủa của hàm .
• Phần bên trong còn gọi là phần bên trong hộp đen gồm các chi tiết :
♣ Phải bắt đầu bằng từ khóa Implementation và không được có dấu chấm phẩy
sau từ khóa này .
♣ Khai báo nội dung của các thủ tục , hàm , các hằng , kiểu , biến riêng , …
♣ Kết thúc là từ khóa End với dấu chấm .
Cách gọi các Unit :
Trong chương trình chính hay trong một Unit tự tạo có sử dụng các Unit khác thì phần đầu của
chương trình phải khai báo sau từ khóa Uses ; tên của các Unit chuẩn , tự tạa và các Unit phải
phân cách nhau bởi dấu phẩy . Khi chạy chương trình nếu xuất hiện thông báo “ File not found
< tên tập tin . TPU > ” tức là không tìm thấy tập tin Unit , ta sử dụng lệnh Change Dir … trong
thực đơn File để chuyển về thư mục có tập tin < tên tập tin . TPU > hoặc ta phải chép tập tin
này vào thư mục hiện hành .
10. CÁC VÍ DỤ MINH HỌA :
BÀI 02 : KIỂU VÔ HƯỚNG : KIỂU LIỆT KÊ .
1. ĐỊNH NGHĨA KIỂU :
Kiểu liệt kê được đònh nghóa bằng cách liệt kê tất cả các phần tử có thể có của nó . Các giá trò của
kiểu được thể hiện bằng tên .
Cú pháp :
TYPE
TÊNKIỂU = ( CÁC GIÁ TRỊ ) ;
Để khai báo kiểu dữ liệu mới ta dùng từ khóa Type .
Tên kiểu liệt kê là một tên tùy chọn ( có thể dùng các tên kiểu chuẩn ) được viết liền nhau
hoặc nối với nhau bằng dấu gạch nối .
Dấu bằng “ = ” dùng để gán các giá trò được liệt kê cho tên kiểu .
Các giá trò được liệt kê là các giá trò của kiểu , mỗi giá trò phân cách nhau bởi dấu phẩy . Các
giá trò là các kiểu vô hướng chuẩn khác và phải đặt trong cặp dấu ngoặc đơn ( ) . Giá trò trả về
là phần tử thứ n trong danh sách liệt kê , phần tử đầu tiên có số thứ tự là 0 .
Dấu chấm phẩy “ ; ” bắt buộc phải có sau mỗi đònh nghóa kiểu liệt kê .
2. KHAI BÁO BIẾN :
Cú pháp 1 :
TYPE
TÊNKIỂU = ( CÁC GIÁ TRỊ ) ;
VAR
TÊNBIẾN : TÊNKIỂU ;
Khai báo biến này thông qua các tên kiểu liệt kê đã được đònh nghóa trước đó .
Cú pháp 2 :
VAR
TÊNBIẾN : ( CÁC GIÁ TRỊ ) ;
Khai báo này vừa khai báo biến , vừa đònh nghóa kiểu liệt kê .
3. XUẤT , NHẬP DỮ LIỆU :
Nhập dữ liệu :
Để nhập dữ liệu từ bàn phím ta dùng các thủ tục Read hoặc Readln nhưng không được
phép nhập trực tiếp các giá trò kiểu liệt kê mà chỉ được nhập các giá trò của các biến .
Ví dụ :
Type
color = ( tim , xanh , vang , trang , den ) ;
Var
mau : color ;
Begin
Writeln ( ‘ Nhap , xuat du lieu kieu liet ke ’ ) ;
Writeln ( ‘ Ban thich mau nao ? ( Nhap cac so tu 0 den 4 ) ’ ) ;
Readln ( i ) ;
mau := color ( i ) ;
. . .
Xuất dữ liệu :
Các thủ tục Write hoặc Writeln cũng không thể xuất ra màn hình hoặc máy in một giá trò
kiểu liệt kê .
Ví dụ :
• Không thể dùng các lệnh :
writeln ( mau ) ;
writeln ( den ) ;