bai tap pascal - Pdf 53

Phần
1
1
KIỂU DỮ LIỆU PROCEDURE
KIỂU DỮ LIỆU PROCEDURE
I. KHÁI NIỆM - ĐỊNH NGHĨA KIỂU PROCEDURE
1. KHÁI NIỆM
Ngôn ngữ Pascal đã cung cấp cho chúng ta các kiểu dữ liệu từ đơn giản đến nâng cao
như tập tin, con trỏ,... Bây giờ ta lại làm quen với một kiểu dữ liệu mới gọi là kiểu
Procedure.
Kiểu Procedure là kiểu dữ liệu mà một đối tượng (biến chẳng hạn) mang kiểu này nhận
giá trị không phải là các giá trị kiểu cơ bản mà là một “chương trình con”. Chúng ta có
thể xem một chương trình con như là một giá trị của một biến để rồi thực hiện các phép
gán hay truyền vào một chương trình con khác thông qua các tham số kiểu Procedure
này.
Thật chất một biến kiểu Procedure chính là một con trỏ chứa địa chỉ segment và offset
của một chương trình con thay vì địa chỉ của một vùng nhớ chứa dữ liệu.
2. ĐỊNH NGHĨA KIỂU PROCEDURE
Để định nghĩa kiểu Procedure chúng ta phải dùng từ khóa PROCEDURE hay từ khóa
FUNCTION và khai báo các đối số cũng như kiểu của chúng mà con trỏ trỏ đến
Procedure hay Function nào đó. Cú pháp như sau
TYPE
<tên_kiểu> = PROCEDURE( <đối_số>: <kiểu> );
<tên_kiểu> = PROCEDURE( VAR <đối_số>: <kiểu> );
<tên_kiểu> = FUNCTION( <đối_số>: <kiểu> ): <kiểu>;
Ví dụ:
TYPE
AnyProc = PROCEDURE;
DisplayProc = PROCEDURE(S: STRING);
StrProc = PROCEDURE(x,y,Attr:Byte; VAR St: STRING);
StrFunc = FUNCTION(A: Real; B,C: Byte): STRING;

là các chương trình con được khai báo gọi xa với chỉ thị {$F+}.
III. CÁC PHÉP TOÁN TRÊN KIỂU PROCEDURE
1. PHÉP GÁN
Cú pháp phép toán:
<Biến_Procedure> := <Tên_Chương_Trình_Con>;
Không như phép gán đối với các biến có kiểu cơ bản, phép gán ở đây mang ý nghĩa là
gán địa chỉ segment và offset của đoạn mã CTC với tên được chỉ ra ở vế phải cho biến
kiểu Procedure ở vế trái. Biến này được xem như con trỏ trỏ đến CTC đó.
Ví dụ: Viết chương trình thực hiện một trong bốn phép toán + - × và ÷ bằng cách dùng
các hàm và sử dụng biến kiểu Procedure.
TYPE
FuncType = Function( x, y: Real ): Real;
VAR
FuncVar: FuncType;
a, b: Real;
Ch: Char
{------- Định nghĩa hàm -------}
Phần 4, Đồ hoạ trong Pascal
Pascal Nâng cao (Advanced Pascal) Hoàng Hữu Hạnh
{$F+} {Chỉ thị gọi xa }
Function Cong(a, b: Real): Real;
Begin
Cong := a + b;
End;
Function Tru(a, b: Real): Real;
Begin
Tru := a - b;
End;
Function Nhan(a, b: Real): Real;
Begin

xuất hiện của FuncVar trong câu lệnh.
Phần 4, Đồ hoạ trong Pascal
Pascal Nâng cao (Advanced Pascal) Hoàng Hữu Hạnh
WriteLn(‘Kết quả là: ’, FuncVar(x, y):2:2);
 Đối số của CTC có kiểu Procedure
Kiểu dữ liệu Procedure cũng có thể dùng làm kiểu của các đối số CTC. Một đối số kiểu
Procedure cũng hoạt động đúng theo các nguyên tắc mà các đối số mang kiểu khác hoạt
động.
Ví dụ:
TYPE
ProcType = Procedure;
VAR
p: ProcType;
{$F+}
Procedure ABC_Proc;
Begin
WriteLn('ABC');
End;
Procedure DEF_Proc;
Begin
WriteLn('DEF');
End;
{$F-}
Procedure TT(pv: Proc);
Begin
pv;
End;
Procedure TB(VAR pv: Proc);
Begin
pv:=DEF_Proc;

{$F+}
Function TrMark: STRING;
Begin
WriteLn(‘Thực hiện hàm TrMark’);
TrMark := ‘Advanced PASCAL’;
End;
{$F-}
BEGIN
st := TrMark; {Lời gọi hàm TrMark }
pF := TrMark; {Gán đ/chỉ của TrMark cho pF }
END.
2. Các và thủ tục được xem như là một kiểu dữ liệu cho biến Procedure phải có các yêu
cầu sau:
 Phải là hàm và thủ tục của NSD
 Phải khai báo gọi xa với cặp chỉ thị {$F+} và {$F-}
Phần 4, Đồ hoạ trong Pascal
Pascal Nâng cao (Advanced Pascal) Hoàng Hữu Hạnh
 Không có khai báo Interrupt và câu lệnh Inline.
 Không có các CTC lồng bên trong.
Phần
2
2
CHUYỂN ĐỔI KIỂU – UNIT NGƯỜI DÙNG
CHUYỂN ĐỔI KIỂU – UNIT NGƯỜI DÙNG
IV. CHUYỂN ĐỔI KIỂU (TYPE CASTING)
Type Casting là một kỹ thuật dùng để biến đổi kiểu của một vùng nhớ máy tính. Pascal
là một NNLT rất chặc chẽ trong trong vấn đề tổ chức dữ liệu, nhất là trong các phép gán
hay trong biểu thức. Sự chặc chẽ này của Pascal đôi khi lại gây trở ngại cho lập trình
viên vì phải sử dụng nhiều lệnh mới đạt được mục đích. Lấy một ví dụ như sau, St là một
biến kiểu chuỗi và đang lưu giữ chuỗi ‘Turbo’, gải sử chúng ta muốn tìm mã ASCII của

năng kiểm soát kiểu dữ liệu trong chương trình và đôi lúc xảy ra những điều đáng tiếc.
3. CÚ PHÁP ĐỔI KIỂU
Cú pháp:
<Kiểu> ( <Giá_trị> )
Ví dụ 1: ch := CHAR(65);
Thanhtien:= (Tieuthu – 100)*LongInt(500) + 100*250;
Ví dụ 2:
CONST
A: Array[0..10] of Byte =
(05, 84, 117, 114, 98, 111, 0, 0, 0, 0, 0);
TYPE
St10 = STRING[10];
BEGIN
WriteLn(St10(A));
ReadLn;
END.
4. RECORD HÓA MỘT VÙNG NHỚ
Một ví dụ thực tế: Khi muốn tạo ra một cửa sổ trong chế độ văn bản bằng thủ tục
Window(x2, y1, x2, y2) tọa độ đỉnh trái trên và phải dưới phải được lưu giữ trong hai
biến kiểu Word là:
WindMin Tọa độ đỉnh trái trên
Phần 4, Đồ hoạ trong Pascal
Turbo
y1 x1
y2 x2
Pascal Nâng cao (Advanced Pascal) Hoàng Hữu Hạnh
WindMax Tọa độ đỉnh phải dưới
Byte cao Byte thấp
Để lấy các giá trị x1, y1, x2, y2 từ hai biến WindMin và WindMax, chúng ta cũng có thể
dùnh hai hàm Lo và Hi của DOS, nhưng ở đây chúng ta thực hiện kỹ thuật Record hóa

Val(Temp, LongInt(N), Result);
until Result = 0;
End;
Thủ tục này có sử dụng kỹ thuật Type Casting với tham biến N để sao cho nó làm việc
OK với mọi trường hợp, điều này là không bắt buộc trong thủ tục này.
Bây giờ chúng ta hãy thử viết chương trình để nhập các biến kiểu nguyên ShortInt,
Integer, LongInt, Byte, Word sử dụng thủ tục ReadInt xem thế nào?
Phần 4, Đồ hoạ trong Pascal
Pascal Nâng cao (Advanced Pascal) Hoàng Hữu Hạnh
V. UNIT NGƯỜI DÙNG
6. Ý NGHĨA
UNIT là một thư viện chứa các chương trình con đã được cài sẵn. Trong Pascal có hai
loại unit: một là unit chuẩn (cho sẵn) như SYSTEM.TPU, CRT.TPU, GRAPH.TPU, ...;
và một loại unit tạo ra bởi NSD.
Một lý do để ta tạo các Unit của NSD là: khi chương trình quá lớn, có những nhóm
chương trình con và các dữ liệu hoàn chỉnh, có thể được sử dụng bởi nhiều chương trình
khác nhau. Vì vậy ta có thể nhóm những chương trình con các cấu trúc dữ liệu trên thành
các Unit. Làm như thế sẽ gia tăng tối đa tốc độ chương trình, và các chương trình con đó
có thể được sử dụng bởi những chương trình khác, bằng cách “USES” unit đó ra.
Để sử dụng Unit trong chương trình con thì ta khai báo các Unit đó sau từ khóa USES.
Ví dụ: USES Crt, Dos, Printer, NewUnit;
Tóm lại, ý nghĩa khi tạo unit là như sau:
 Ghi lại các CTC thường dùng vào một module tạo thư viện chương trình
 Phân chương trình lớn thành các module nhỏ hơn.
 Tính có thể sử dụng lại của unit
7. CÁC THÀNH PHẦN CỦA MỘT UNIT
Một unit bao gồm các thành phần sau:
i.Phần Khai báo (UNIT ...)
ii. Phần Giao tiếp (INTERFACE)
iii. Phần Cài đặt (IMPLEMENTATION)

Ví dụ:
INTERFACE {Phần Giao tiếp }
{$F+} {chỉ thị gọi xa }
VAR Ini: String;
PROCEDURE ThiDu1 (Var x, y: Real);
PROCEDURE ThiDu2 (S: String);
 Phần Cài đăt
Dùng để chứa các mục riêng (private) cho các câu lệnh công cụ nằm trong unit, là
phần cài đặt cụ thể các CTC đã được khai báo trong INTERFACE. Phần này bắt đầu
bằng từ khóa IMPLEMENTATION sau đó là các khai báo unit sử dụng, hằng, kiểu,
biến,... Phần này là “tài sản riêng” của unit, các nơi sử dụng unit này không thể dùng
chúng.
Ví dụ:
IMPLEMENTATION {Phần Cài đặt }
Var x, y: real; {các biến chỉ dụng trong Unit này }
PROCEDURE ThiDu1 (Var x, y: real);
Begin
x:= x + y;
y:= y * z + x;
End;
 Phần Khởi tạo
Phần này như thân chương trình chính Pascal thông thường, thông thường gồm các
câu lệnh gán các giá trị khởi động cho các biến public.
Phần 4, Đồ hoạ trong Pascal
Pascal Nâng cao (Advanced Pascal) Hoàng Hữu Hạnh
 Thư mục chứa UNIT
Pascal thông thường sẽ tìm kiếm các unit trong thư mục mặc định được chỉ bởi NSD. Để
làm điều này chúng ta thực hiện lệnh sau để chỉ rõ vị trí của unit
Options - Directories, trong mục Unit Directories đưa vào các đường dẫn tìm
kiếm. Nếu không tìm thấy Pascal sẽ tìm trong TM hiện thời.

End;
BEGIN {Phần Khởi tạo }
Phần 4, Đồ hoạ trong Pascal
Pascal Nâng cao (Advanced Pascal) Hoàng Hữu Hạnh
Ini:= 'Hello, World!';
END.
Chữ BEGIN ở dòng 29 có thể có hoặc không, nếu không có dòng 29 thì dòng 30 sẽ phải
không có.
Các khai báo tên từ dòng 5 đến dòng 8 là các tên biến và chương trình con có thể được
dùng đến của Unit khi dịch file trên (Chế độ ghi đĩa), Turbo pascal sẽ tạo file
UEXAM.TPU
 Biên dịch UNIT
 Chọn chế độ biên dịch ghi đĩa: Compile - Destination → Disk.
 Biên dịch: Bấm tổ hợp phím Alt - F9 hoặc F9.
Tập tin biên dịch được sẽ có phần mở rộng là .TPU
9. CÁC UNIT CÓ DÙNG UNIT KHÁC
Bất kỳ một unit nào cũng có thể sử dụng các unit khác bằng cách đưa vào khai báo với
USES. Có hai cách sử dụng unit khác:
i.Đưa sau từ khóa INTERFACE
Ví dụ:
UNIT Chuoi;
INTERFACE
Uses Crt;
Function Upper( ... ): STRING;
Function Lower( ... ): STRING;
. . . .
ii. Đưa sau từ khóa IMPLEMENTATION
Ví dụ:
UNIT Chuoi;
INTERFACE


Nhờ tải bản gốc

Tài liệu, ebook tham khảo khác

Music ♫

Copyright: Tài liệu đại học © DMCA.com Protection Status