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)

pdf26 trang | Chuyên mục: Pascal | Chia sẻ: dkS00TYs | Lượt xem: 1807 | Lượt tải: 3download
Tóm tắt nội dung 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, để xem tài liệu hoàn chỉnh bạn click vào nút "TẢI VỀ" ở trên
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:

  • pdfGiá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