Giáo trình Hỗ trợ kiến thức Pascal dùng cho giáo viên, học sinh THPT

MỤC LỤC

I. CÁC THÀNH PHẦN CƠ BẢN CỦA NGÔN NGỮ PASCAL 3

1. Bộ Chữ Viết – Từ Khoá – Tên 3

2. Hằng – Kiểu – Biến 4

3. Biểu Thức – Dấu Chấm Phẩy – Lời Giải Thích 5

4. Cấu Trúc Của Một Chương Trình Pascal 6

Chương II: CÁC KIỂU VÔ HƯỚNG CHUẨN VÀ CÁC CÂU LỆNH ĐƠN 7

I. CÁC KIỂU VÔ HƯỚNG CHUẨN 7

1. Các Kiểu Vô Hướng Chuẩn (Standard scalar types) 7

2. Một Số Phép Toán Trên Các Kiểu 7

II. CÂU LỆNH 9

1. Khái Niệm Về Một Câu Lệnh 9

2. Một Số Lệnh Đơn 10

Chương III: CÁC LỆNH CÓ CẤU TRÚC 13

I. LỆNH CẤU TRÚC RẼ NHÁNH 13

1. Dạng Không Đầy Đủ 13

2. Dạng Đầy Đủ 13

II. LỆNH CẤU TRÚC LỰA CHỌN 14

1. Dạng Không Đầy Đủ 14

2. Dạng Đầy Đủ 14

III. CÁC LỆNH VÒNG LẶP 15

1. Lệnh Lặp Với Số Lần Xác Định 15

2. Lệnh Lặp Với Số Lần Lặp Không Xác Định 18

Chương IV: CHƯƠNG TRÌNH CON 20

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

II. HÀM (FUNCTION) 20

III. THỦ TỤC (PROCEDURE) 22

IV. LỜI GỌI CHƯƠNG TRÌNH CON VÀ VẤN ĐỀ TRUYỀN THAM SỐ. 23

V. HOẠT ĐỘNG CỦA CHƯƠNG TRÌNH CON KHI ĐƯỢC GỌI VÀ SỰ BỐ TRÍ BIẾN. 25

VI. VẤN ĐỀ TRUYỀN THAM SỐ KHI GỌI CHƯƠNG TRÌNH CON. 25

VII. TÍNH ĐỆ QUI CỦA CHƯƠNG TRÌNH CON 27

Chương 5: UNIT 32

I. KHÁI NIỆM VỀ UNIT 32

1. Khái Niệm Về Unit 32

2. Các Unit Chuẩn 32

II. THIẾT LẬP UNIT 33

1. Các Bước Tạo Một Unit 33

2. Ví dụ ứng dụng 34

 

 

doc38 trang | Chuyên mục: Pascal | Chia sẻ: dkS00TYs | Lượt xem: 1939 | Lượt tải: 1download
Tóm tắt nội dung Giáo trình Hỗ trợ kiến thức Pascal dùng cho giáo viên, học sinh THPT, để xem tài liệu hoàn chỉnh bạn click vào nút "TẢI VỀ" ở trên
hơn lên đĩa có bán kính lớn hơn.
Trong bài toán trên hình dung một lời giải tổng quát cho trường hợp tổng quát N đĩa là không dễ dàng. Hãy bắt đầu với các trường hợp đơn giản.
N = 1. Lời giải trở thành tầm thường (nhưng không kém phần quan trọng đâu!). Đơn giản là chuyển đĩa này từ cọc A qua cọc C là xong.
N = 2. Để đảm bảo ràng buộc thứ hai ta bắt buộc chuyển đĩa trên cùng từ cọc A qua cọc B. Chuyển tiếp đĩa còn lại từ cọc A qua cọc C. Chuyển tiếp đĩa đang ở cọc B sang cọc C.
N=3. Ta phải thực hiện 7 bước như sau:
Trạng thái ban dầu
--
----
------
Bước 1: Chuyển một đĩa từ A qua C.
----
------
--
Bước 2: Chuyển một đĩa từ A qua B.
------
----
--
Bước 3: Chuyển một đĩa từ C qua B.
------
--
----
Bước 4: Chuyển một đĩa từ A qua C.
--
----
------
Bước 5: Chuyển một đĩa từ B qua A.
--
----
------
Bước 6: Chuyển một đĩa từ B qua C.
--
----
------
Bước 7: Chuyển một đĩa từ A qua C.
--
----
------
Hãy quan sát kết quả ở bước thứ ba. Đây là một kết quả quan trọng vì nó cho ta thấy từ trường hợp N=3 bài toán đã được phân chia thành hai bài toán với kích thước nhỏ hơn: đó là bài toán chuyển 1 đĩa từ cọc A qua cọc C lấy cọc B làm trung gian và bài toán chuyển 2 đĩa (dời) từ cọc B sang cọc C lấy cọc A làm trung gian. Hai bài toán con này đã biết cách giải (trường hợp N=1 và trường hợp N=2).
Nhận xét đó cho ta gợi ý trong trường hợp tổng quát:
Bước 1: Dời (N-1) đĩa trên cùng từ cọc A sang cọc B lấy cọc C làm trung gian.
Bước 2: Chuyển 1 đĩa dưới cùng từ cọc A sang cọc C.
Bước 3: Dời (N-1) đĩa đang ở cọc B sang cọc C lấy cọc A làm trung gian.
Bài toán đối với N đĩa như vậy được “đệ qui” về hai bài toán (N-1) đĩa và bài toán 1 đĩa. Quá trình đệ qui sẽ dừng lại khi N=0 (không còn đĩa để dời hoặc chuyển).
Chương trình sẽ như sau:
PROGRAM ThapHanoi;
Uses crt;
TYPE
Cot = Char;
{------------------------------------------------------}
Procedure Chuyen(X,Y:Cot);
BEGIN
Writeln(X,’ -> ‘,Y); 
END;
{------------------------------------------------------}
Procedure Doi(N:byte; A,B,C:Cot);
	{Dời N đĩa từ cọc A sang cọc C lấy cọc B làm trung gian}
BEGIN
IF (N>0) THEN
	Begin
	Doi(N-1,A,C,B); {Dời N-1 đĩa từ cọc A sang cọc B lấy cọc C làm trung gian}
	Chuyen(A,C);
	Doi(N-1,B,A,C); {Dời N-1 đĩa từ cọc B sang cọc C lấy cọc A làm trung gian}
	End;
END;
{------------------------------------------------------}
BEGIN
Clrscr;
Write(‘Cho biet so dia :’); Readln(Sodia); Writeln(‘Cac buoc thuc hien:’);
Doi(Sodia,’A’,’B’,’C’);
Writeln; Writeln(‘Thuc hien xong!’); READLN;
END.
Nếu áp dụng chương trình này cho trường hợp N=3 ta có quá trình gọi đệ qui như sau:
Doi(0,A,C,B)
Doi(1,A,B,C)
Chuyen(A,C)
Doi(0,B,A,C)
Doi(2,A,C,B)
Chuyen(A,B)
Doi(0,C,B,A)
Doi(1,C,A,B)
Chuyen(C,B)
Doi(0,A,C,B)
Doi(3,A,B,C)
Chuyen(A,C)
Doi(0,B,A,C)
Doi(1,B,C,A)
Chuyen(B,A)
Doi(0,C,B,A)
Doi(2,B,A,C)
Chuyen(B,C)
Doi(0,A,C,B)
Doi(1,A,B,C)
Chuyen(A,C)
Doi(0,B,A,C)
Ví dụ này cho thấy việc kết xuất ở các câu lệnh Chuyen(X,Y) chỉ xảy ra khi toàn bộ các lời gọi đệ qui đã được thực hiện và cũng cho thấy thứ tự các lời gọi đệ qui lần cuối cùng. Nhận xét này rất quan trọng khi bạn viết thủ tục đệ qui vì lẽ bạn cần phải hình dung trước thứ tự các kết xuất nhất là khi lời gọi đệ qui có rất nhiều nhánh.
Chương 5: UNIT
KHÁI NIỆM VỀ UNIT
Khái Niệm Về Unit
Việc tạo ra các chương trình con trong một chương trình đã làm cho việc lập trình đỡ vất vã hơn rất nhiều. Tuy nhiên, các chương trình con này chỉ có tác dụng trong chương trình chứa chúng mà thôi, trong một chương trình khác muốn sử dụng chương trình con này bắt buộc phải viết lại chúng, như vậy rất mất thời gian. Để khắc phục, người ta gom các chương trình con thường sử dụng thành một module độc lập và biên dịch sẵn trên đĩa. Sau đó, bất kỳ chương trình nào cũng có thể sử dụng lại các chương trình con này mà không cần phải viết lại chúng. Các module như vậy được gọi là UNIT. Khái niệm Unit được tạo ra từ version 4.0 của Turbo Pascal.
Có hai loại UNIT là Unit chuẩn của Pascal tạo ra và Unit do người lập trình tự tạo để phục vụ riêng cho mình.
Các Unit Chuẩn
Giới thiệu một số Unit chuẩn
Unit CRT: Gồm các hằng, kiểu, biến, hàm, thủ tục liên quan đến chế độ màn hình văn bản (TEXT mode).
Unit PRINTER: Gồm các hằng, kiểu, biến, hàm, thủ tục liên quan đến chế độ in ấn qua cổng LPT1 (Connector DB25).
Unit GRAPH: Gồm các hằng, kiểu, biến, hàm, thủ tục liên quan đến chế độ đồ họa.
Unit DOS: Gồm các hằng, kiểu, biến, hàm, thủ tục liên quan đến việc xử lí trực tiếp các thanh ghi, các ngắt và lời gọi đến các hàm chức năng của hệ điều hành MS-DOS.
Unit OVERLAY: Gồm các hằng, kiểu, biến, hàm, thủ tục liên quan đến việc bố trí các đoạn mã thực thi được truy xuất trên đĩa (nạp/ nhã) thay vì đặt hết một lúc vào bộ nhớ khi chạy chương trình.
Các Unit khác: SYSTEM, TURBO3, GRAPH 3… là các Unit phiên bản 3.0 sử dụng.
Cú pháp: USES	 [, ];
Khi muốn sử dụng một Unit nào thì ta phải khai báo tên Unit đó ở đầu chương trình (trừ các unit mặc định của Pascal như unit SYSTEM) với cú pháp như dưới đây.
Một số hàm và thủ tục hay dùng trong Unit CRT
ClrScr: Thủ tục xoá màn hình.
GotoXY(x, y: Byte): Dời con trỏ tới vị trí cột x, dòng y trên màn hình. Thông thường, màn hình trong TextMode(Co80) có 25 dòng (từ dòng 1 đến dòng 25) và 80 cột (cột 1 đến cột 80). Vậy toạ độ góc trên trái của màn hình là (1, 1), toạ độ góc dưới phải là (80, 25) Hiện nay đối với các màn hình TextMode giả lập của Windows khi chạy Borland Pascal có thể được thiết lập mặc định tới 80 cột và 50 dòng. Sinh viên phải thử cụ thể trên màn hình. Một số màn hình LCD wide screen cũng có thể cho số cột lớn hơn! Hầu như các projector hiện nay hỗ trợ kém chế độ văn bản. Cần cẩn thận khi lập trình để hiển thị (cuối cùng) trên projector.
.
Delay(ms: Word): Thủ tục trì hoãn chương trình trong ms mili-giây.
Sound(hz: Word): Thủ tục phát ra âm thanh qua loa bên trong (internal speaker) với tần số hz.
Nosound: Thủ tục ngừng phát ra âm thanh.
Keypressed: Hàm cho kết quả là TRUE nếu có một phím được ấn.
Readkey: Hàm cho kết quả là mã ASCII của ký tự khi phím được ấn.
TextBackGround(color: Byte): Thủ tục chọn màu nền. Ta có thể đặt màu nền cho toàn màn hình bằng cách đặt lệnh này vừa trước lệnh ClrScr.
TextColor(color: Byte): Thủ tục chọn màu cho chữ. 
Dưới đây là danh sách các hằng màu mà Pascal định sẵn.
Black	= 	0	Đen.
Blue	=	1	Xanh dương.
Green	=	2	Xanh lục.
Cyan	=	3	Xanh trứng sáo.
Red	=	4	Đỏ.
Magenta	=	5	Tím cánh sen.
Brown	=	6	Nâu.
LightGray	=	7	Xám sáng.
DarkGray	=	8	Xám tối.
LightBlue	=	9	Xanh dương sáng.
LightGreen	=	10	Xanh lục sáng.
LightCyan	=	11	Xanh trứng sáo sáng.
LightRed	=	12	Đỏ sáng.
LightMagenta	=	13	Tím cánh sen sáng.
Yellow	=	14	Vàng.
White	=	15	Trắng.
(8 hằng trị đầu tiên từ Black đến LightGray áp dụng cho cả màu chữ lẫn màu nền. Các hằng trị còn lại chỉ áp dụng cho màu chữ).
Unit CRT cũng thiết lập biến hệ thống TextAttr để xác định chế độ màu của màn hình văn bản hiện tại. Ví dụ để thiết lập màn hình có màu chữ xanh lục sáng trên nền xanh da trời ta thiết lập câu lệnh gán:
TextAttr:=LightGreen+16*Blue;
THIẾT LẬP UNIT
Các Bước Tạo Một Unit
Bước 1
Tạo ra một tập tin Pascal có đuôi .PAS và có cấu trúc như trình bày dưới đây, lưu ý là tên của unit phải trùng với tên tập tin.
UNIT ;	{Tên unit bắt buộc phải trùng với tên tập tin}
INTERFACE	{Không có dấu ; ở đây}
{Đây là phần giao diện của Unit. Trong phần này chúng ta sẽ khai báo các unit đã có mà các unit này sử dụng, khai báo các hằng, kiểu, biến mà các chương trình khác sẽ sử dụng. Khai báo các hàm, thủ tục mà chương trình khác sẽ gọi tới, chỉ khai báo tên chương trình con, các tham số, kiểu kết quả. Những hàm, thủ tục thiết lập ở phần sau mà không khai báo trong phần này thì các chương trình khác không gọi tới được.}
IMPLEMENTATION	{Không có dấu ; ở đây}
{Đây là phần hiện thực các hàm, thủ tục đã khai báo trong phần Interface. Trong phần này nếu có các chương trình con được dùng riêng bên trong Unit mà không khai báo trong phần Interface, các chương trình con này sẽ không thể truy cập được bởi người dùng Unit.}
BEGIN
{Phần chứa các câu lệnh sẽ được thực thi ngay trước khi câu lệnh đầu tiên của chương trình gọi Unit này được thực hiện. Phần này không bắt buộc phải có, tuy nhiên trong trường hợp đó vẫn phải giữ lại từ khóa “END.” dưới đây.}
END.
Bước 2
Unit không được thiết kế để chạy mà để biên dịch đặt lên đĩa nên ta không thể nhấn CTRL+F9 mà làm theo trình tự sau:
Œ	Chọn menu Compile (Alt + C).
	Tiếp tục chọn Destination để chuyển thành Disk. Lưu ý: Destination Disk là tạo unit lên đĩa, Memory là tạo unit lên bộ nhớ RAM.
Ž	Chọn lại menu Complie và chọn tiếp chức năng Complie (Alt + F9).
Lúc này trên đĩa xuất hiện tập tin là tên của unit ta tạo với phần mở rộng là TPU. 
Kể từ đây, ta có thể sử dụng unit này bằng cách gọi nó trong câu lệnh USES như đã nói trên.
Ví dụ ứng dụng
Dưới đây là chương trình tạo ra một unit đơn giản có 3 hàm là HamMu để tính a mũ n (an), GiaiThua để tính n giai thừa (n!) và USCLN để tính ước số chung lớn nhất của hai số nguyên không âm..
Unit MyUnit;	{Trùng tên với tập tin MyUnit.pas}
INTERFACE
 	Function HamMu(a: Real; n: Integer): Real;
 	Function GiaiThua(n: Integer): Longint;
	Function USCLN(X,Y:Word):word; 
IMPLEMENTATION
Function HamMu(a: Real; n: Integer): Real;
 Var tam: Real;
 i: Integer;
 Begin
 tam := 1;
 For i:=1 to n do
 tam := tam * a;
 HamMu := tam;
 End;
Function GiaiThua(n: Integer): Longint;
 Var tam: Longint;
 i: Integer;
 Begin
 tam := 1;
 For i:=1 to n do
 tam := tam * i;
 GiaiThua := tam;
 End;
Procedure HoanChuyen(var x,y:word);
VAR Tam:word;
BEGIN
	Tam:=x; x:=y; y:=Tam;
END;
Function USCLN(x,y:Word):word;
BEGIN
	While (y0) DO
	Begin
	IF (x<y) THEN HoanChuyen(x,y)
	ELSE x:=x-y;
	End;
	USCLN:=x;
END;
END.
Sau khi biên dịch ta sẽ có tập tin unit là MyUnit.TPU. Khi sử dụng unit này người dùng có thể gọi các hàm đã khai báo trong phần INTERFACE nhưng không thể gọi tới Procedure HoanChuyen được.

File đính kèm:

  • docGiáo trình Hỗ trợ kiến thức Pascal dùng cho giáo viên, học sinh THPT.doc
Tài liệu liên quan