Giáo trình Lập trình nâng cao trên ngôn ngữ Pascal - Chương 3: Đơn vị chương và trình thư viện chuẩn
Khái niệm ðơn vịchương trình giống nhưmột cuốn sách và Thưviện chuẩn giống
nhưmột tủsách. Thưviện chuẩn của Pascal không chứa hết mọi ñơn vịchương trình, lý do là
vì tiết kiệm bộnhớ. Chương này bạn ñọc nên dành nhiều thời gian cho việc khai thác các Unit
ñã thiết kếtrong Pascal, tuy nhiên ñã là một người lập trình thì không thểkhông biết tựtạo ra
các Unit. Những phần người ñọc cần nắm ñược là:
Các thủtục hoặc hàm có trong các Unit System,Graph, Crt, Dos.
Phương pháp xây dựng các Unit
Những nguyên tắc cần tuân thủkhi tham chiếu ñến các Unit
Biên dịch Unit từchương trình nguồn sang dạng mã máy (ñuôi tệp là TPU)
n cho hiện trên màn hình phải dùng tổ
hợp 2 phím Alt - Số thứ tự.
Dưới ñây là bảng ñối chiếu một số phím và mã phím thường dùng
Bảng 3.2
Phím Mã Phím Mã
BackSpace 8 Home 0-71
Tab 9 End 0-79
Enter 13 PageUp 0-73
Esc 27 PageDown 0-81
Shift - Tab 0-15 Ctrl - End 0-117
↑ 0-72 Ctrl - Home 0-119
← 0-75 Ctrl - ← 0-115
→ 0-77 Ctrl - → 0-116
↓ 0-80 Ctrl - PageUp 0-132
Insert 0-82 Ctrl - PageDown 0-118
Delete 0-83
ðể có thể nhận diện các phím có mã quét mở rộng chúng ta có thể dùng hai biến kiểu
Char, một biến chứa ký tự có mã bằng 0, còn biến kia chứa ký tự của phần mã quét mở, nói
cách khác cần phải gọi hàm Readkey hai lần mới bắt ñược phím có mã quét mở.
Ví dụ 3.7:
Var C1,C2:char;
Begin
C1:=Readkey; If C1=chr(0) then C2:=Readkey;
End.
Chúng ta cũng có thể dùng biến kiểu Byte ñể bắt các phím có mã quét mở. Trong thực
tế vì ñã biết số thứ nhất trong mã quét mở bằng không nên chỉ cần tìm số thứ hai của mã quét
như ví dụ sau:
Trường ðại học Nông nghiệp 1 - Giáo trình Lập trình nâng cao ..............................................................- 88
Var mq:byte;
Begin
Mq=readkey;
If ord(mq) = 0 then mq := ord(readkey);
End.
Nếu biến mq có giá trị 75 thì phím ñược bấm không phải là chữ J mà là phím bởi vì
mã quét ở ñây là 0 - 75.
Chú ý:
Khi xây dựng chương trình có việc ñọc mã quét, cần ñặc biệt chú ý trong vùng ñệm
bàn phím ñã có mã phím nằm chờ hay không, nếu có thì phải làm sạch vùng ñệm bàn phím
trước khi ñọc mã. Việc làm sạch vùng ñệm bàn phím có thể thực hiện bằng câu lệnh lặp sau:
While Keypressed do mq:= readkey;
Biến mq phải ñược khai báo trước và thuộc kiểu Char.
Ví dụ 3.8:
Viết chương trình hiện mã quét của các phím, nếu là phím có mã quét mở rộng thì
hiện cả hai số dưới dạng 0_00.
Program Batphim;
Uses crt;
Var k,k1,k2:byte;
Function bp(Var mq1,mq2:byte):byte;
Begin
mq1:=ord(readkey);
if mq1=0 then
begin
mq2 := ord(readkey);
bp := mq2;
end
else
bp:=mq1;
end;
Begin
Clrscr;
Writeln('Xin moi bam 1 phim, bam phim END de ket thuc ');
Repeat
K := bp(k1,k2);
if k10 then
Writeln('Ma phim ban vua bam = ',k1)
Trường ðại học Nông nghiệp 1 - Giáo trình Lập trình nâng cao ..............................................................- 89
else
Writeln('Ma phim ban vua bam = ',k1,'_',k2);
Until k=79;
End.
Chương trình ñặt tên là BATPHIM có một chương trình con là hàm BP, hàm BP có
hai tham biến dùng ñể lưu các mã quét mq1, mq2.
Lời gọi trong chương trình mẹ:
K:=bp(k1,k2); sẽ truyền cho hàm BP hai tham số thực k1,k2, các tham số này sẽ chứa
mã quét mq1, mq2 khi quay về chương trình mẹ. Biến K dùng ñể lưu mã quét mq2 của phím
END khi muốn kết thúc chương trình .
Chạy chương trình trên, khi xuất hiện thông báo:
" Xin moi bam 1 phim, bam phim END de ket thuc",
chúng ta có thể bấm một phím nào ñó trên bàn phím và sẽ nhận ñược thông báo mã
phím vừa bấm.
Chú ý: Các phím chức năng phụ trên bàn phím không thấy ñược mã quét bao gồm:
CAPSLOCK, SHIFT, CTRL, ALT, INS, DEL, NUMLOCK, PRINT SCREEN,
SCROLL LOCK, PAUSE, F11, F12
Việc bắt phím thường ñược sử dụng khi thiết kế các Menu (thực ñơn) trong trường
hợp bài toán cần có một vài phương án lựa chọn công việc. Dưới ñây là ví dụ thiết kế thực
ñơn với bốn tuỳ chọn
Tamgiac Chunhat Tron Ketthuc
ðể chuyển con trỏ ñến một chức năng nào ñó ta bấm các phím ← hoặc →, ñể chọn
chức năng bấm phím Enter, kết thúc công việc bấm End. Chương trình có sử dụng Unit HHP
ñã thiết kế.
Ví dụ 3.9
Program Menu;
Uses crt,hhp;
label h1,h2,h3;
Var c1,c2,c3,c4:string[20];
l1,l2,l3,l4,mq1,mq2:byte; chon:char;
Procedure tr; { thu tuc tinh hinh tron }
Var a,dt,cv:real;
Begin
clrscr;
write('Hay cho biet ban kinh hinh tron '); Readln(a);
dt:=pi*a*a; cv:=2*pi*a;
writeln('Dien tich hinh la : ',dt:12:4);
writeln('Chu vi hinh la : ',cv:12:4);
Trường ðại học Nông nghiệp 1 - Giáo trình Lập trình nâng cao ..............................................................- 90
writeln('Bam Enter de quay ve thuc don ');
repeat until keypressed;
End;
Procedure cn; { thu tuc tinh hinh chu nhat }
Var a,b,dt,cv:real;
Begin
clrscr;
write('Hay cho biet hai canh a, b '); Readln(a,b);
dt:=a*b; cv:=(a+b)*2;
writeln('Dien tich hinh la : ',dt:12:4);
writeln('Chu vi hinh la : ',cv:12:4);
writeln('Bam Enter de quay ve thuc don ');
repeat until keypressed;
End;
Procedure tg; { thu tuc tinh hinh tam giac }
Var a,b,c,p,dt,cv:real;
Begin
clrscr;
write('Hay cho biet ba canh a,b,c '); Readln(a,b,c);
if (a+b>c) and (b+c>a) and (c+a>b) then
Begin
p:=(a+b+c)/2;
dt:=sqrt(p*(p-a)*(p-b)*(p-c));
cv:=a+b+c;
writeln('Dien tich hinh la : ',dt:12:4);
writeln('Chu vi hinh la : ',cv:12:4);
end
else
writeln('Cac kich thuoc ',a:6:2,' ',b:6:2,' ',c:6:2,' khong tao thanh tam giac');
writeln('Bam Enter de quay ve thuc don ');
repeat until keypressed;
End;
Procedure w1; { thiet ke chuc nang thu nhat }
Begin
textbackground(5);
textcolor(10);
window(1,2,l1+2,2); write(c1);
Trường ðại học Nông nghiệp 1 - Giáo trình Lập trình nâng cao ..............................................................- 91
gotoxy(1,1);
End;
Procedure w2; { thiet ke chuc nang thu hai }
Begin
textbackground(5);
textcolor(10);
window(l1+2,2,l1+l2+3,2); write(c2);
gotoxy(1,1);
End;
Procedure w3; { thiet ke chuc nang thu ba }
Begin
textbackground(5);
textcolor(10);
window(l1+l2+3,2,l1+l2+l3+3,2); write(c3);
gotoxy(1,1);
End;
Procedure w4; { thiet ke chuc nang ket thuc }
Begin
textbackground(5);
textcolor(10);
window(l1+l2+l3+4,2,l1+l2+l3+l4+8,2); write(c4);
gotoxy(1,1);
End;
BEGIN {Than chuong trinh chinh}
Clrscr;
c1:='Tamgiac'; l1:=length(c1);
c2:='Chunhat'; l2:=length(c2);
c3:='Tron'; l3:=length(c3);
c4:='Ketthuc'; l4:=length(c4);
clrscr;
textcolor(red); textbackground(green);
write('Bam ->, <- chuyen thuc don | Bam Enter de chon | Bam End ket thuc ');
h1: w1;w2;w3;w4;w1;
while keypressed do chon:=readkey; {lam sach vung dem ban phim}
chon:=readkey; {tinh tam giac}
if ord(chon)=13 then
Trường ðại học Nông nghiệp 1 - Giáo trình Lập trình nâng cao ..............................................................- 92
begin
textcolor(blue); textbackground(14);
window(1,4,80,25);
tg;
clrscr;
goto h1
end
else
begin
if ord(chon)=0 then chon:=readkey;
if ord(chon)=79 then halt; {bam END de ket thuc}
if ord(chon)=77 then w2;
end;
h2: w1;w2;w3;w4; w2;
while keypressed do
chon:=readkey; {lam sach vung dem ban phim}
chon:=readkey; {tinh chu nhat}
if ord(chon)=13 then
begin
textcolor(blue); textbackground(14);
window(1,4,80,25);
cn;
clrscr;
goto h2;
end
else
Begin
if ord(chon)=0 then
begin
chon:=readkey;
if ord(chon)=79 then halt; {bam END de ket thuc}
if ord(chon)=77 then w3; {chuyen sang tinh hinh tron}
if ord(chon)=75 then goto h1; {quay ve tinh tam giac}
end;
end;
h3: w1;w2;w3;w4;w3;
while keypressed do chon:=readkey; {lam sach vung dem ban phim}
chon:=readkey; {tinh hinh tron}
Trường ðại học Nông nghiệp 1 - Giáo trình Lập trình nâng cao ..............................................................- 93
if ord(chon)=13 then
begin
textcolor(blue); textbackground(14);
window(1,4,80,25);
tr;
clrscr;
goto h3;
end
else
Begin
if ord(chon)=0 then
begin
chon:=readkey;
if ord(chon)=79 then halt; {bam END de ket thuc}
if ord(chon)=77 then w4; {sang chuc nang ket thuc }
if ord(chon)=75 then goto h2; {quay ve tinh chu nhat}
end;
end;
while keypressed do chon:=readkey; {lam sach vung dem ban phim}
chon:=readkey;
if ord(chon)=13 then halt
else
if ord(chon)=0 then chon:=readkey;
if ord(chon)=79 then halt;
if ord(chon)=75 then goto h3;
END.
8.4 Printer
ðơn vị chuẩn Printer có một phần khai báo máy in phục vụ việc in ấn dữ liệu ra giấy,
máy in ñược cài ñặt tên là LST.
Khi cần in ấn ta phải có lời gọi USES PRINTER; sau ñó trong các lệnh Write hoặc
writeln phải ñưa tên máy in LST vào trước các tên biến cần in, ví dụ:
Writeln (lst, 'Ket qua tinh toan:', x1);
Dòng lệnh trên sẽ in ra giấy dòng chữ: "Ket qua tinh toan:" và giá trị biến của x1.
Trường ðại học Nông nghiệp 1 - Giáo trình Lập trình nâng cao ..............................................................- 94
Bài tập ứng dụng chương 3
1. Lập chương trình tạo thực ñơn hai mức, mức 1 theo chiều ngang , mức 2 theo chiều
dọc theo mẫu dưới ñây:
HINH PHANG HINH KHONG GIAN
Tam giac Hinh non
Tron Hinh chop
Ket thuc Ket thuc
Yêu cầu: khi con trỏ ở một trong hai chức năng HINH PHANG, HINH KHONG
GIAN nếu bấm Enter thì xuất hiện thực ñơn dọc phía dưới, còn nếu bấm phím dịch chuyển
con trỏ thì sẽ chuyển con trỏ sang phải hoặc trái. Khi thực ñơn dọc xuất hiện sẽ có con trỏ
ñể dịch chuyển lên xuống, bấm Enter ñể thực hiện một trong các việc tính diện tích, chu vi
(ñối với hình phẳng) hoặc diện tích toàn phần và thể tích (ñối với hình không gian).
2. Cho hai ma trận chữ nhật A(m,n), B(k,q) xây dựng chương trình kiểm tra xem có
thể nhân hai ma trận hay không? Xây dựng một Unit tính tích hai ma trận.
3. Xây dựng một Unit với các thủ tục SXT (sắp xếp tăng) và SXG (sắp xếp giảm) ñể
sắp xếp một dãy số.
4. Xây dựng một Unit lấy tên là HAMSOHOC trong ñó có các hàm tính căn bậc n,
luỹ thừa bậc n của một số (n>2).
5. Xây dựng một Unit nhằm ñổi tên màu tiếng Anh sang tiếng Việt ví dụ RED - DO,
BLUE - XANH DA TROI...
6. Xây dựng chương trình cho một dòng chữ chạy trên màn hình. Khi dòng chữ ñang
chạy có thể ñổi hướng chạy bằng cách bấm các phím dịch chuyển con trỏ
7. Phát triển bài tập 6 bằng cách bổ xung tính năng tăng hoặc giảm tốc ñộ chạy khi
bấm các phím PageUp hoặc PageDown
File đính kèm:
Giáo trình Lập trình nâng cao trên ngôn ngữ Pascal - Chương 3_Đơn vị chương và trình thư viện chuẩn.pdf

