Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống
1
/ 12 trang
THÔNG TIN TÀI LIỆU
Thông tin cơ bản
Định dạng
Số trang
12
Dung lượng
199,15 KB
Nội dung
THỦTỤC(Procedure) 12.3.1. Thủtục và cách khai báo: Giống như hàm, thủtục cũng là một chương trình con, song thủtục khác hàm ở chỗ: nếu như hàm luôn trả về một gía trị duy nhất thông qua tên hàm thì thủtục lại không trả về?một gía trị nào thông qua tên gọi của nó. Một thủtục thực chất là một nhóm các lệnh được sắp xếp theo một trình tự nhất định có tác dụng giải quyết một nhiệm vụ cụ thể, và được đặt một cái tên để gọi. Trong đời sống hàng ngày, ta thường nghe nói đến thủtục nhập học của sinh viên, thủtục mua bán nhà đất, thủtục xuất cảnh, thủtục nhập cảnh,.v.v. mỗi thủtục đó là một dãy có trình tự các công việc phải làm. Thủtục Readln(x, y, z) có nhiệm vụ nhập các gía trị từ bàn phím cho các biến x, y, z. Thủtục Write(x, y, z) in gía trị của x, y, z . Thủtục Gotoxy(x, y) định vị con trỏ vào toạ độ cột x, dòng y trên màn hình. Thủtục Clrscr thì chỉ đơn giản là xóa màn hình .v.v. . Như vậy thủtục có thể không có tham số hoặc có từ một đến nhiề? tham số. Khi gọi thực hiện một thủ tục, ta viết tên thủtục đó và thay các tham số hình thức bằng các tham số thực sự, kết thúc bằng dấu chấm phẩy ";" . Ví dụ, nếu a, b là hai biến đã được khai báo trong chương trình thì để nhập dữ liệu cho hai biến a, b ta viết : Readln(a, b); Ðể in biểu thức 4+5*6 lên màn hình, ta viết : Write(4+5*6); Ðể đặt con trỏ vào vị trí cột 8, dòng 2 trên màn hình ta viết: Gotoxy(8, 2); Như vậy, lời gọi thủtục là một lệnh đơn giản. Do thủtục không trả về gía trị nào thông qua tên gọi của nó nên tên thủtục không thể đứng trong các biểu thức. Ví dụ các lệnh sau là sai cú pháp: St1 := Delete( St, 1, 1); Write( Val(‘123’, x, k) ); vì Delete và Val là hai thủtục chứ không phải là hai hàm. Ngoài các thủtục chuẩn đã có sẵn trong Turbo Pascal, người thảo chương có thể tự xây dựng các thủtục mới nhưng phải khai báo theo cú pháp sau: Procedure Tênthủtục( tênthamsố : kiểuthamsố ) ; { Các khai báo Const, Type, Var dùng trong thủtục } Begin {Các lệnh của thủtục } End; Ðoạn khai báo trên phải được đặt sau phầ? khai báo VAR và trước BEGIN của thân chương trình chính. 12.3.2. Các ví dụ về thủtục : Ví dụ 12.4: Giải và biện luận phương trình ax+b= 0 với a=4.5, b=13.5, và với các cặp a, b tạo bởi a=-1, a=0, a=1, b=0, b=1, b=2. Ta viết một thủtục có nhiệm vụ giải và biện luận phương trình ax+b=0 với hai tham số a, b tùy ý, và gọi thực hiện thủtục này 10 lần ứng với các gía trị cụ thể của a, b cho trong gỉa thiết. PROGRAM VIDU12_4; { Giải phương trình AX+B=0 bằng thủ tục} Uses Crt; Var i, j: integer; Procedure Giaipt (a, b: Real); Begin Writeln(' -Giải phương trình : ' , a:4:1, 'x+' , b:4:1, '=0'); If a<>0 then Writeln(' Nghiem x=', -b/a:4:2) else if b<>0 then Writeln(' Vo nghiem') else Writeln(' Vo so nghiem'); End; BEGIN { Thân chương trình chính } Clrscr; Writeln(' KẾT QỦA GIẢI CÁC P.TRÌNH:' ) ; Giaipt (4.5, 13.5); For i:=-1 to 1 do For j:=0 to 2 do Giaipt (i, j); Readln; END. Chạy<VD12_4.EXE> Chép tập tin nguồn <VD12_4.PAS> Khi gọi Giaipt (4.5, 13.5); là ta yêu cầu máy thực hiện thủtục Giaipt với tham số a=4.5 và b=13.5. Hai vòng lặp For xác định 9 cặp gía trị i, j cụ thể, và cứ mỗi lần như vậy lại gọi thực hiện thủtục Giaipt với tham số a=i, b=j tương ứng : For i:=-1 to 1 do For j:=0 to 2 do Giaipt (i, j); Do tách riêng việc giải phương trình ax+b=0 thành một thủtục nên số lệnh trong thân chương trình chính giảm đi, nổi bật được thuật toán chính của chương trình. Ở đây, ta chọn chương trình con Giaipt là thủtục chứ không phải là hàm vì phương trình ax+b=0 có thể vô nghiệm hoặc vô số nghiệm (khi a=0). Thành ra ta không tìm được một gía trị thích hợp để gán cho tên hàm. Vậy kết qủa giải phương trình phải xuất ra ngay trong chương trình con, đó là công việc của thủ tục. Ví dụ 12.5: Nhập vào một mảng A 1 , A 2 , ,A n , sắp xếp dãy tăng rồi in dãy lên màn hình. Có thể chia bài toán ra thành ba công việc lớn sau: a-Nhập dãy A 1 , A 2 , ,A n , b-Sắp xếp dãy A 1 , A 2 , ,A n , tăng c-In dãy A 1 , A 2 , ,A n , lên màn hình Mỗi công việc a, b, c thuộc về một lãnh vực riêng nên có thể xây dựng thành các thủtục độc lập với nhau. Ðể liên kết chúng lại, trong chương trình chính, ta chỉ cần gọi tên các thủtục này theo thứ tự a, b, c với các tham số thích hợp. Khi thiết kế thủtục sắp xếp dãy tăng, có một việc phải làm nhiều lần là đổi chỗ hai phần tử A[i] và A[j] nên cũng có thể xây dựng thành một thủtục gọi tên là Ðổi chỗ, nó lại là chương trình con của thủtục sắp xếp. Chương trình cụ thể như sau: PROGRAM VIDU12_5; { Sắp xếp dãy A tăng dần bằng thủtục } Uses CRT; Type Kmang = Array[1 20] of Real; Var N : Integer; A: Kmang; Procedure Nhap(Var X: Kmang ; N: Integer ; ten: Char ); Var i : Integer; Begin For i:=1 to N do { nhập mảng X } begin Write(‘Nhập ‘, ten , ‘[‘ , i , ‘]: ‘); Readln(X[i]); end; End; Procedure SapTang( Var X : Kmang ; N: Integer); { Sắp dãy X tăng} Var i, j : Integer; Procedure Doicho(Var u, v : Real) ; { hoán vị các gía trị của u và v} Var Tam: Real; Begin Tam:=u; u:=v; v:=Tam; End; { Hết Doicho } Begin { Vào Saptang } For i:=1 to N-1 do For j:=i+1 to N do If X[i]>X[j] then Doicho(X[i], X[j]) ; End; { Het Saptang } Procedure Inday( Chugiai: String ; X: Kmang ; N: Integer); { In dãy X lên màn hình } Var i : Integer; Begin Writeln(Chugiai); For i:=1 to N do write(X[i]:5:1); writeln; End; BEGIN { chương trình chính } Clrscr; Repeat Write(‘ Nhập số phần tử N : ‘); Readln(N); Until (N>0) and ( N<21); Nhap( A, N, ‘A’ ); Inday( ‘ Dãy chưa sắp là: ‘, A, N); [...]... Chạy Chép tập tin nguồn Thủtục Nhap có ba tham số hình thức là X, N và ten, nhiệm vụ của nó là nhập dữ liệu cho mảng X gồm N phần tử Tương tự, thủtục Saptang có nhiệm vụ sắp xếp N phần tử của dãy X thành dãy tăng Thủtục Inday sẽ in N phần tử của dãy X sau khi đã in lời giải thích chứa trong tham số chugiai Thủ tục Saptang chứa một thủ tục con là Doicho, có nhiệm vụ hoán vị các... tục Saptang chứa một thủ tục con là Doicho, có nhiệm vụ hoán vị các gía trị của hai biến u, v bất kỳ Doicho là chương trình con của thủ tục Saptang Khi một tham số đượ? khai báo trong chương trình con, nó có thể có hoặc không có từ khóa Var ở đằng trước Ví dụ trong thủ tục Saptang, tham số X đi sau từ khóa Var, còn tham số N thì không X gọi là tham số biến còn N gọi là tham số trị Sự khác nhau giữa . nghe nói đến thủ tục nhập học của sinh viên, thủ tục mua bán nhà đất, thủ tục xuất cảnh, thủ tục nhập cảnh,.v.v. mỗi thủ tục đó là một dãy có trình tự các công việc phải làm. Thủ tục Readln(x,. THỦ TỤC (Procedure) 12.3.1. Thủ tục và cách khai báo: Giống như hàm, thủ tục cũng là một chương trình con, song thủ tục khác hàm ở chỗ: nếu như hàm luôn. bàn phím cho các biến x, y, z. Thủ tục Write(x, y, z) in gía trị của x, y, z . Thủ tục Gotoxy(x, y) định vị con trỏ vào toạ độ cột x, dòng y trên màn hình. Thủ tục Clrscr thì chỉ đơn giản là