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