Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống
1
/ 28 trang
THÔNG TIN TÀI LIỆU
Thông tin cơ bản
Định dạng
Số trang
28
Dung lượng
288,39 KB
Nội dung
Lập trình bằng Turbo Pascal 1.5 Thủ tục hoá - Procedural abstraction Các mô đun chơng trình l các chơng trình con trong một chơng trình lớn hơn. Thực hiện thiết kế theo mô đun cũng l sử dụng hm v thủ tục để xây dựng chơng trình hay thủ tục hoá khi xây dựng chơng trình. Phơng pháp để lm việc ny l - Xác định rõ chức năng của từng mô đun nh một chơng trình con, nó sẽ lm gì, cha quan tâm lm nh thế no, không đi ngay vo chi tiết. Đây l viêc phân chia biên giới giữa các chơng trình con, đảm bảo tính độc lập tơng đối của chúng với nhau. - Xây dựng khung lắp ghép các chơng trình con thnh chơng trình chính. Mỗi chơng trình con l một mô đun riêng rẽ, giống nh từng tấm bê tông để xây thnh một to nh lắp ghép. Để kiến trúc nên to nh cần bố trí các tấm bê tông đúng vị trí đã định. Để xây dựng thnh chơng trình chính cần xác định đúng quan hệ của các mô đun chơng trình con với nhau. - Xác định chất kết dính để liên kết các mô đun với nhau. Nó giống nh vôi vữa xi măng trong xây dựng nh cửa. Cái kết dính các chơng trình con với nhau l việc truyền tham số. Đầu vo của chơng trình con ny l đầu ra của một chơng trình con khác. Cần hoạch định cách thức truyền dữ liệu giữa các chơng trình. Truyền thông qua danh sách tham số hay gián tiếp qua biến ton cục, theo cách tham trị hay tham biến. - Sau khi đã tiến hnh thủ tục hoá nh trên, có thể viết ngay đợc chơng trình chính trớc khi thực hiện chi tiết các chơng trình con. 2. Thiết kế chi tiết dần từng bớc. 2.1 Sơ đồ cấu trúc chơng trình - structure chart Theo phơng pháp thiết kế top-down chi tiết dần từng bớc ta cần lập một sơ đồ cấu trúc của chơng trình. Sơ đồ cấu trúc của chơng trình gồm nhiều mức, giống hình cây lật ngợc m gốc cây l bi toán ban đầu. Sơ đồ cấu trúc sẽ phát triển dần xuống dới, chia ra nhiều nhánh con, ứng với việc chi tiết dần mỗi bi toán thnh các bi toán con nhỏ hơn. Quá trình phân nhánh tiếp tục cho đến khi các bi toán con đã đủ đơn giản. Trên hình vẽ, mỗi bi toán con thực hiện một chức năng công việc xác định, đợc thể hiện bằng một hình chữ nhật, có nhãn mô tả rõ chức năng lm công việc gì. Các đờng nối xuống các hình chữ nhật mức dới thể hiện quan hệ chứa, nghĩa l bi toán con đó, chức năng công việc đó, đợc phân rã thnh các bi toán nhỏ hơn thể hiện bởi các hình chữ nhật mức dới. Chiều ngợc lại, đờng nối từ hình chữ nhật ở mức dới lên mức trên, thể hiện quan hệ đợc chứa trong. Trên các đờng nối có thể có nhãn ghi rõ luồng dữ liệu trao đổi giữa hai chức năng công việc. Sơ đồ cấu trúc phản ánh quan hệ giữa các bi toán bộ phận với nhau. Nguyễn Đình Hoá, Viện CNTT - ĐHQG H nội 133 Lập trình bằng Turbo Pascal Mức 0 Mức 1 Mức 2 Bi toán ban đầu Bi toán 1 Bi toán 2 Bi toán 3 Bi toán 1.1 Bi toán 2 . 1 Bi toán 1.2 Mức 3 Hình 11.1: sơ đồ cấu trúc của một chơng trình Phơng châm hnh động khi thiết kế chơng trình theo kiểu top-down chi tiết dần từng bớc l: - Đi từ tổng thể đến bộ phận, từ khái quát đến chi tiết - ở mỗi bớc chỉ trả lời câu hỏi lm gì, cha vội đi vo chi tiết lm nh thế no. Việc lm nh thế no sẽ rõ dần qua từng bớc phân chia công việc, từng việc lm gì. 2.2 Ví dụ. 2.2.1 Ví dụ. Thiết kế chơng trình nhân hai ma trận đã phân tích trong tiết trớc. Chi tiết mức 1. Các bi toán nhỏ phải giải quyết l. 1. Nhập ma trận. Đầu vo: số hng của ma trận, số cột của ma trận, các phần tử của ma trận gõ từ bn phím. Đầu ra: mảng 2 chiều biểu diễn ma trận trong bộ nhớ đợc gán trị. 2. Kiểm tra điều kiện nhân đợc. Đầu vo: số hng của A, số cột của B. Đầu ra: kết luận có thực hiện đợc phép nhân AB không. 3. Nhân 2 ma trận. Đầu vo: hai mảng 2 chiều biểu diễn hai ma trận A,B thoả mãn điều kiện nhân đợc, đã có trong bộ nhớ. Đầu ra: ma trận tích C = A.B. 4. In ma trận ra mn hình. Đầu vo: một mảng 2 chiều thể hiện ma trận trong bộ nhớ. Nguyễn Đình Hoá, Viện CNTT - ĐHQG H nội 134 Lập trình bằng Turbo Pascal Đầu ra: Hiển thị các phần tử của ma trận thnh bảng chữ nhật, dóng thẳng hng cột trên mn hình. Chơng trình nhân hai ma trận 1.Nhập ma trận 3. Nhân hai ma trận 4. In ma trận 2.Kiểm tra nhân đợc Hình 11.2: sơ đồ cấu trúc chơng trình nhân ma trận sau khi chi tiết mức 1. Giả sử đã có 4 mô đun chơng trình con thực hiện các chức năng trên, với tên gọi tơmg ứng l NhapMaTran, KiemTraNhanDuoc, NhanMaTran v InMaTran. Chơng trình chính sẽ chỉ gồm các lệnh gọi chơng trình con thực hiện tuần tự các công việc sau: nhập ma trận A; nhập ma trận B; kiểm tra điều kiện nhân đợc; nếu thoả mãn tính ma trận tích C = A.B v in ma trận C ra mn hình. Ta có thể viết ngay phần mã lệnh của chơng trình chính BEGIN Writeln(' nhap ma tran thu nhat:'); NhapMaTran(rA,cA,A); Writeln(' nhap ma tran thu hai:'); NhapMaTran(rB,cB,B); If not KiemTraNhanDuoc Then exit Else begin NhanMaTran(rA,cA,rB,cB,rC,cC,A,B,C); Writeln(' ma tran tich la: '); InMaTran(rC,cC,C); End; END. Chi tiết mức 2. 1. Nhập ma trân. 1.1 Nhập kích thớc (số hng, số cột) của ma trận. 1.2 Nhập các phần tử của ma trận. - Nhập từ hng thứ nhất cho đến hng cuối. 2. Kiểm tra nhân đợc: nếu sai thông báo lỗi, trả kết quả l False; Nguyễn Đình Hoá, Viện CNTT - ĐHQG H nội 135 Lập trình bằng Turbo Pascal nếu đúng trả kết quả l True. 3. Nhân hai ma trận A*B đặt vo ma trận C 3.1 Gán số hng của C bằng số hng của A, số cột của C bằng số cột của B 3.2 Tính các phần tử của ma trận tích C theo công thức đã biết. - Tính các phần tử theo từng hng, từ hng thứ nhất cho đến hng cuối. 4. In ma trận ra mn hình. 4.1 Lấy kích thớc của ma trận. 4.2 In ra lần lợt từng hng của ma trận thnh bảng dóng thẳng cột: - In hng thứ nhất. - xuóng dòng. - In hng tiếp theo v lặp lại cho đến khi hết mọi hng. Sơ đồ cấu trúc của chơng trình nh sau. Đọc số hng, số cột Đọc lần lợt từng hng Lấy số hng , số cột In ra lần lợt từng hng Tính lần lợt từng C ij Tính số hng, cột của C Chơng trình nhân hai ma trận Nhập ma trận Nhân hai ma trận In ma trận Kiểm tra nhân đợc Hình 11.3: Sơ đồ cấu trúc chơng trình nhân ma trận sau khi chi tiết mức 2. Chơng trình chi tiết nh sau. program TichMaTran; uses crt; const max_size = 50; type matrix = array[1 max_size,1 max_size] of integer; Nguyễn Đình Hoá, Viện CNTT - ĐHQG H nội 136 LËp tr×nh b»ng Turbo Pascal var A,B,C: matrix; rA,cA,rB,cB,rC,cC: word; Procedure NhapMaTran(Var SoHang,SoCot: word; Var M: matrix); var i,j: byte; begin write(' cho so hang, so cot cua ma tran: '); readln(SoHang,SoCot); Writeln(' Cho cac phan tu cua ma tran:'); for i:=1 to SoHang do for j:=1 to SoCot do begin Write('pt[',i,',',j,']= ');Readln(M[i,j]); end; end; Function NhanDuoc(SoCotA, SoHangB: word): Boolean; begin if SoCotA <> SoHangB then begin writeln('kich thuoc ma tran khong hop le !!'); NhanDuoc:= false; End Else NhanDuoc:= true; end; Procedure InMaTran(Var M: matrix); var i,j: byte; begin for i:=1 to SoHang do begin for j:=1 to SoCot do Write(M[i,j]:4); writeln; end; end; Procedure NhanMaTran(rA,cA,rB,cB: word; Var rC,cC: word; Var A,B,C: matrix); var i,j,k: byte; begin rC:=rA; cC:=cB; for i:=1 to rC do for j:=1 to cC do begin C[i,j]:=0; for k:=1 to cA do C[i,j]:= C[i,j]+A[i,k]*B[k,j]; NguyÔn §×nh Ho¸, ViÖn CNTT - §HQG Hμ néi 137 Lập trình bằng Turbo Pascal end; end; BEGIN Writeln(' nhap ma tran thu nhat:'); NhapMaTran(rA,cA,A); Writeln(' nhap ma tran thu hai:'); NhapMaTran(rB,cB,B); If not NhanDuoc Then exit Else begin NhanMaTran(rA,cA,rB,cB,rC,cC,A,B,C); Writeln(' ma tran tich la: '); InMaTran(rC,cC,C); End; END. 3. Tính đệ quy và thuật giải đệ quy. 3.1 Tính đệ quy Nhiều sự vật, hiện tợng có tính chất đặc biệt l nó đồng dạng với một bộ phận của chính nó. Một hình ảnh thờng thấy l khi TV phát hình một phát thanh viên bên cạnh một mn hình TV cũng đang có hình trực tiếp của chính buổi phát hình đó, ta sẽ có một chuỗi vô tận các mn hình TV lồng nhau, chiếu cùng một khung hình. Khái niệm "cnh cây" l một ví dụ khác. Một cnh con bẻ ra từ một cnh cây cũng l một cnh cây. Trong toán học có khái niệm giai thừa có thể đợc định nghĩa qua chính nó nh sau 1 nếu n = 0 n! = n*(n-1)! nếu n > 0. Trong phần tin học cơ sở ta đã lm quen với khái niệm đờng dẫn. Một phần của đờng dẫn sau khi bớt đi một vi tên th mục ở cuối cũng l một đờng dẫn. Nhiều kiểu dữ liệu có cấu trúc m sau ny ta sẽ nghiên cứu cũng có tính chất tơng tự. Những sự vật hiện tợng nh trên đợc gọi l có tính đệ quy. Nói một cách khái quát tính đệ quy l tính chất "một bộ phận con bất kì đồng dạng với ton thể", "có thể xây dựng nó từ một phần của chính nó". Nguyễn Đình Hoá, Viện CNTT - ĐHQG H nội 138 Lập trình bằng Turbo Pascal Đệ quy l một khái niệm mạnh. Nó cho phép diễn đạt ngắn gọn chính xác cái vô hạn qua các "công thức" hữu hạn. 3.2 Thuật giải đệ quy. 3.2.1 3.2.2 Định nghĩa. Một thủ tục l đệ quy nếu trong thủ tục có lời gọi đến chính nó. Nếu việc giải bi toán T thực hiện bằng việc giải bi toán T có dạng hon ton giống T thì đây l một thuật giải đệ quy. Nếu ta viết thủ tục thực hiện thuật giải ny thì bên trong nó lại chứa chính một thủ tục tơng tự, nghĩa l có một lời gọi đến chính nó hay một lời gọi đệ quy. Liệu một thủ tục nh thế có luẩn quẩn không, có kết thúc đợc không? Câu trả lời l không, vì T không phải giống hệt T m T đồng dạng với T, nhng có quy mô bé hơn. Do đó hy vọng rằng sau khi lặp lại nhiều lần gọi đệ quy thì "quy mô" của bi toán cần giải sẽ giảm đến mức thủ tục có thể chấm dứt. Ví dụ: 1 nếu n = 0 n! = n*(n-1)! nếu n > 0. Thủ tục tự nhiên nhất để tính giai thừa, gần nh chép lại định nghĩa trên l: Function Factorial(n: integer):integer; begin if n=0 then Factorial:=1 else Factorial:= n* Factorial(n-1); end; Vậy thuật giải đệ quy l thuật giải tự nhiên nhất để giải bi toán có tính đệ quy. Ví dụ Ta xét một ví dụ gần với thực tế đời sống hơn. Đó l việc tìm kiếm số điện thoại của một ngơì trong sổ điện thoại hay tra cứu giải nghĩa của một từ trong tự điển. Trình tự tiến hnh công việc ny thờng l nh sau. - Mở ớc chừng ở giữa, chia tự điển lm 2 phần. - Nếu từ thuộc phần đầu, lặp lại việc lm với phần đầu. - Nếu từ thuộc phần sau, lặp lại việc lm với phần sau. Nguyễn Đình Hoá, Viện CNTT - ĐHQG H nội 139 Lập trình bằng Turbo Pascal - Lặp lại việc lm trên cho đến khi tìm thấy từ cần tra hoặc kết luận đợc l không có từ đó trong từ điển. Mô hình hóa thao tác tìm kiếm trên thnh thuật giải sau Procedure TimKiem (D: TuDien; w: MotTu); begin If Từ điển D l một từ then cho kết quả else begin - Chia đôi D = D1 D2 if w D1 then TimKiem (D1, w) else TimKiem (D2, w) end end; Đây l thủ tục tìm kiếm nhị phân dạng đệ quy. 3.3 Thiết kế giải thuật đệ quy. 3.3.1 Hai đặc điểm của thuật giải đệ quy. 1- Sau mỗi lần gọi đệ quy thì kích thớc của bi toán giảm đi. 2- Có một trờng hợp suy biến: khi bi toán đã đủ đơn giản thì có ngay lời giải trực tiếp, không phải gọi đệ quy nữa. Dựa vo hai đặc điểm trên, để thiết kế một thuật giải đệ quy cần phân tích bi toán v thực hiện các bớc sau. - Xác định rõ kích thớc của bi toán phụ thuộc vo cái gì ? - Phân tích đa bi toán về một hoặc một vi bi toán đồng dạng nhng có kích thớc nhỏ hơn. - Khi no thì có trờng hợp suy biến. Lời giải trực tiếp cho trờng hợp ny. Ví dụ, nếu bi toán xuất phát có kích thớc l n: - Giả sử bi toán với kích thớc nhỏ hơn hay bằng n-1 đã giải đợc thì lời giải bi toán với kích thớc n có tìm đợc hay không ? - khi n=0 hay n=1 thì lời giải trực tiếp l gì ? Nguyễn Đình Hoá, Viện CNTT - ĐHQG H nội 140 Lập trình bằng Turbo Pascal 3.3.2 4.1.1 4.1.2 4.1.3 Khuôn mẫu viết thuật giải đệ quy Khuôn mẫu chung của một thủ tục đệ quy l If trờng hợp suy biến Then cho lời giải trực tiếp Else Begin - dẫn về bi toán có kích thớc nhỏ hơn; - gọi đệ quy; End; 4. Một số ví dụ về thuật giải đệ quy. 4.1 Bài toán tháp Hà nội. Phát biểu bi toán. Truyền thuyết kể rằng tại một ngôi chùa ở H nội có 3 cọc bằng kim cơng v 64 chiếc đĩa bằng vng, đờng kính khác nhau, có lỗ tròn ở giữa. Đầu tiên 64 đĩa ny xếp nằm trên một cọc, to nằm dới, bé nằm trên. Để tu tâm, rèn luyện tính nhẫn nại, hng ngy các nh s niệm kinh Phật v di chuyển các đĩa từ cọc ny sang cọc khác. Quy tắc di chuyển l mỗi lần chỉ chuyển đợc một đĩa ở trên cùng v không đợc đặt đĩa to hơn lên trên đĩa bé hơn. Bi toán: chuyển ton bộ 64 đĩa từ cọc x (= xuất phát) ban đầu sang một cọc mới l d (=đích). Trong quá trình di chuyển có thể xếp tạm lên một cọc còn lại tg lm trung gian. Phân tích. Kích thớc của bi toán l số đĩa n = 64. Giả sử đã biết cách giải bi toán với n nhỏ hơn: chuyển n-1 đĩa theo đúng các quy tắc nêu trên, từ một cọc ban đầu sang một cọc khác, dùng cọc còn lại lm trung gian. Thế thì có thể giải bi toán với n đĩa nh sau: - Chuyển n-1 đĩa từ x sang tg lấy d lm trung gian. - Chuyển nốt 1 đĩa từ x sang d. - Chuyển n-1 đĩa từ tg sang d lấy x lm trung gian. - Trờng hợp suy biến: n = 1. Lúc ny có ngay lời giải trực tiếp. Chuyển một đĩa từ x sang d. Viết thủ tục đệ quy. Tham số đầu vo: Nguyễn Đình Hoá, Viện CNTT - ĐHQG H nội 141 Lập trình bằng Turbo Pascal - Tham số 1: số đĩa. - Tham số 2: cọc đĩa xuất phát. - Tham số 3: cọc đích. - Tham số 4: cọc lm trung gian. Tham số đầu ra: không có. Theo đúng khuôn mẫu viết thủ tục đệ quy, thủ tục Hanoi bắt đầu với trờng hợp suy biến, khi chỉ có 1 đĩa. Trờng hợp số đĩa nhiều hơn 1, bi toán đợc phân rã ra nh đã trình by ở trên. Hai lời gọi đệ quy đợc thực hiện để giải 2 bi toán nhỏ hơn với n-1 đĩa. Lu ý thứ tự của các tham số đầu vo thứ 2, thứ 3, thứ 4 l rất quan trọng vì nó tơng ứng với vai trò l cọc đĩa xuất phát, cọc đích, cọc trung gian trong thao tác chuyển đĩa. procedure hanoi(n: integer ; x,d,tg: char); begin if n=1 then writeln(' chuyen dia: ',x,' -> ',d) else begin hanoi(n-1,x,tg,d); hanoi(1,x,d,tg); hanoi(n-1,tg,d,x); end end; 4.2 Bài toán vết mực. 4.2.1 4.2.2 Phát biểu bi toán. Có một tờ giấy kẻ ô lới vuông. Một số vết mực loang trên tờ giấy. Cần tính diện tích của từng vết loang. Coi diện tích l số ô dính mực. Nếu gọi những ô dính mực gọi l ô đen, những ô không dính mực l ô trắng thì bi toán trở thnh đếm cụm số ô đen liên thông chứa một ô đã chọn. Bi toán ny có nhiều ứng dụng trong xử lí ảnh. Phân tích. Có thể đề xuất một thuật giải đệ quy nh sau. Diện tích của vết mực giả sử l n ô. Nếu ta đã biết cách đếm số ô đen của mọi vết có diện tích nhỏ hơn hay bằng n -1 thì hon ton giải quyết đợc bi toán bằng cách: xuất phát từ một ô đen trong vùng; đếm 1; đánh dấu ô đã chọn thnh ô trắng; chọn một ô kề nó; đếm cụm ô đen liên thông với ô ny. Việc ny lm đợc theo giả thiết vì vết đen ny có diện tích bằng n-1. Lu ý rằng một ô bất kì có 8 ô kề nó nên trong hm Dem_O_Den phải có 8 lời gọi đệ quy. Không có ô đen no bị đếm quá một lần, vì sau khi đếm thì ta đánh dấu nó thnh ô trắng. Nguyễn Đình Hoá, Viện CNTT - ĐHQG H nội 142 [...]... theo cách ny khi có nhiều chơng trình con di v phức tạp 5 .6 Các unit chuẩn của Turbo Pascal Nguyễn Đình Hoá, Viện CNTT - ĐHQG H nội 150 Lập trình bằng Turbo Pascal TurboPascal cung cấp các th viện lm sẵn, đó l các Unit chuẩn Các Unit chuẩn chứa các hằng, các kiểu dữ liệu, các biến, các hm thủ tục mẫu để ngời lập trình Pascal sử dụng Các Unit chuẩn đợc chứa trong tệp Turbo. tpl Chúng đợc tổ chức theo... báo trong phần Interface Những điểm khác với khung cấu trúc của một chơng trình bình thờng l: - Bắt đầu bằng từ khoá Unit chứ không phải l Program Nguyễn Đình Hoá, Viện CNTT - ĐHQG H nội 148 Lập trình bằng Turbo Pascal - Có thêm phần giao diện bắt đầu bằng từ khoá Interface để khai báo tất cả các hằng, kiểu, biến v các chơng trình con dnh cho bên ngoi sử dụng Lu ý rằng trong phần ny các hm, thủ tục... một chơng trình rất lớn, có thể cần đến nhiều Unit chơng trình con TurboPascal đã lm sẵn một th viện các chơng trình con thờng sử dụng nhất Đây l các Unit chuẩn Các hm thủ tục có sẵn trong các Unit chuẩn mặc dù rất phong phú nhng vẫn cha thể đáp ứng trớc tất cả các nhu cầu vô cùng đa dạng của khi viết các chơng trình ứng dụng Ngời lập trình hon ton có thể lm thêm các th viện bổ xung các chơng trình con... Tự xây dựng th viện chơng trình con - Units 5.1 Sử dụng lại các chơng trình con Các chơng trình con thờng dùng, cần lm sẵn để sử dụng lại nhiều lần trong chơng trình chính cũng nh trong tơng lai về sau ny Có hai cách để sử dụng lại các chơng trình con: 1- Chỉ thị cho trình biên dịch chèn trực tiếp tệp mã nguồn của chơng trình con vo chỗ cần thiết khi tiến hnh biên dịch chơng trình Theo cách ny ta thêm... th mục các Unit chuẩn của Turbo Pascal bằng cách điền đờng dẫn đầy đủ "C:\tp\Units" vo trong ô " TPU & EXE Directory " Cũng có thể đặt trong một th viện các unit của riêng mình, ví dụ "C:\tp\MyUnits" 5.3.2 Sử dụng Muốn sử dụng một Unit trong một chơng trình thì phải khai báo tại đầu chơng trình giống nh đối với các Unit chuẩn của Turbo Pascal Uses danh sách các Unit ; Để trình biên dịch có thể tìm... đoạn đợc thể hiện bằng câu lệnh until i>j chứ không phải until i=j Lí do l vì điều kiện i>j luôn sẽ xảy ra, còn điều kiện i=j có thể không xảy ra trong quá trình trên Thủ tục sắp xếp nhanh chỉ bao gồm duy nhất một lời gọi đến thủ tục phân đoạn áp dụng cho dãy xuất phát ban đầu procedure Quicksort; begin PhanDoan(1,n); end; Nguyễn Đình Hoá, Viện CNTT - ĐHQG H nội 1 46 Lập trình bằng Turbo Pascal 5 Tự xây... tục trên đều l giá trị tơng đối trong cửa sổ mn hình hiện tại, thiết lập bới thủ tục Window trình by dới đây Window(x1,y1,x2,y2: byte) ; Thiết lập một cửa sổ hiển thị trên mn hình văn bản Toạ độ của góc trên-trái l (x1,y1), của góc dới-phải l (x2,y2) Các toạ độ ny đợc Nguyễn Đình Hoá, Viện CNTT - ĐHQG H nội 152 Lập trình bằng Turbo Pascal ghi tơng ứng trong 2 biến WinMin, WinMax Cụ thể hơn, x1 = Lo(WinMin)... thuc'); 1 56 Lập trình bằng Turbo Pascal Repeat Ch:= readkey; Case ch of 'd': begin 'r': begin 'm': begin 'p': begin 's': begin end; {case} until ch = esc; nosound; nosound; nosound; nosound; nosound; nosound; sound( 262 ) sound(294) sound(330) sound(349) sound(392) end; end; end; end; end; END 7 Ví dụ ứng dụng - Làm bảng chọn Bảng chọn l một công cụ rất hay đợc dùng đến Vận dụng những kiến thức đã trình. . .Lập trình bằng Turbo Pascal Trờng hợp suy biến: không còn ô kề no l ô đen nữa Ô đang xét l ô trắng thì kết thúc v trả về số đếm bằng 0 x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x Hình 11.4: Minh hoạ bi toán vết mực 4.2.3 Viết hm đệ quy Hm đệ quy Dem_O_Den triển khai thuật giải đệ quy nh trình by trên Tham số đầu vo: - Tham số 1: Luoi... của mình 5.2 Cấu trúc của một unit Để xây dựng một Unit v sử dụng nó trong chơng trình ta phải theo những quy định chính xác trong từng công đoạn Dới đây sẽ trình by lần lợt từng bớc 5.2.1 Khung cấu trúc Khung cấu trúc để viết một Unit nh sau: Unit tên Unit ; Nguyễn Đình Hoá, Viện CNTT - ĐHQG H nội 147 Lập trình bằng Turbo Pascal Uses ; INTERFACE Giao diện với bên ngoi: Const tên hằng = giá trị; Type . ny khi có nhiều chơng trình con di v phức tạp. 5 .6 Các unit chuẩn của Turbo Pascal Nguyễn Đình Hoá, Viện CNTT - ĐHQG H nội 150 Lập trình bằng Turbo Pascal TurboPascal cung cấp các th. Đình Hoá, Viện CNTT - ĐHQG H nội 1 46 Lập trình bằng Turbo Pascal 5. Tự xây dựng th viện chơng trình con - Units 5.1 Sử dụng lại các chơng trình con Các chơng trình con thờng dùng, cần lm sẵn. chơng trình bình thờng l: - Bắt đầu bằng từ khoá Unit chứ không phải l Program. Nguyễn Đình Hoá, Viện CNTT - ĐHQG H nội 148 Lập trình bằng Turbo Pascal - Có thêm phần giao diện bắt đầu bằng