Bài 17. Chương trình con và phân loại

Chia sẻ bởi Nguyễn Minh Tuân | Ngày 10/05/2019 | 70

Chia sẻ tài liệu: Bài 17. Chương trình con và phân loại thuộc Tin học 11

Nội dung tài liệu:

Chương 6: Chương trình con
Các nội dung chính:
Phân loại chương trình con : Thủ tục và Hàm
Tham số và tham trị
Biến toàn bộ và biến cục bộ
1. Kiểm tra bài cũ
PROGRAM BAI1;
Begin
Writeln(`***`);
Writeln(`* *`);
Writeln(`***`);
Writeln;
Writeln(`***`);
Writeln(`* *`);
Writeln(`***`);
Writeln;
Writeln(`***`);
Writeln(`* *`);
Writeln(`***`);
Writeln;
End;
Em có nhận xét gì về cách viết của chương trình trên ?
Tiết 1 : Chương trình con thủ tục và hàm
Chương trình con
Đặt vấn đề :
- Khi phải Viết lặp đi lặp lại nhiều lần một nhóm lệnh để thực hiện một công việc nào đó. Có thể viết nhóm lệnh đó thành một CTC. Mỗi khi cần thực hiện công việc đó, ta chỉ cần gọi CTC đó ra.
Để giải quyết một bài toán lớn phức tạp. Ta nên chia thành các bài toán nhỏ cụ thể. Mỗi bài toán nhỏ được xây dựng dưới dạng các chương trình con. Sau đó chương trình chính sẽ được xây dựng từ các CTC này.
ví dụ :
a. Nhập dữ liệu từ bàn phím cho 15 học sinh ;
b. Tính Dtb=(M1+M2)/2 cho từng học sinh
c. Đưa ra màn hính danh sách học sinh có DTb >=5
Bài toán trên còn có thể chia nhỏ thành 3 bài toán nhỏ, mỗi bài toán nhỏ được tổ chức thành một CTC :
BT1: Em hãy nhập dữ liệu từ bàn phím cho 15 học sinh ;
BT2 :Tính Dtb=(M1+M2)/2 cho từng học sinh
BT3: Đưa ra màn hính danh sách học sinh có DTb >=5
Chương trình con: thủ tục và hàm
2. Có hai loại chương trình con (CTC) : PROCEDURE ( thủ tục) và FUNCTION (hàm) .
Sự khác nhau cơ bản giữa hàm và thủ tục là :
Function : trả lại cho một giá trị kết quả thuộc kiểu xác định, thông qua tên của hàm và do đó nó được sử dụng trong một biểu thức.
Procedure : không trả lại kết quả, mà là thực hiện một công việc nào đó.
Hãy nêu một số hàm , thủ tục trên kiểu xâu mà em đã học ?
Ví dụ 1: hàm và thủ tục chuẩn của TP
Hàm POS(S1,S)
Hàm Length(S)
Thủ tục INSERT(S1,S,v)
Thủ tục Delete(S,v,k)
Khi sử dụng hàm, thủ tục có sự khác nhau nào ?
3. Cấu trúc chung của CTC:
Tương tự như cấu trúc chương trình: có đầu chương trình, Phần khai báo, Phần thân chương trình con.
Procedure tên_thủ_tục(Khai báo các tham số, nếu cần);
{ Khai báo Laber, const, type, Var của riêng thủ tục, nếu cần}
...
Begin
... { thân thủ tục}
End;
FUNCTION tên_Hàm (Khai báo các tham số, nếu cần): Kiểu dữ liệu;
{ Khai báo Laber, const, type, Var của riêng hàm, nếu cần}
...
Begin
... { thân Hàm}
End;
Trong chương trình có sử dụng CTC thì CTC phải được mô tả trước thân chương trình sau phần khai báo biến.
Chương trình con: thủ tục và hàm
Ví dụ 2:
PROGRAM BAI1;
PROCEDURE Ve_hv;
Begin
Writeln(`***`);
Writeln(`* *`);
Writeln(`***`);
Writeln;
End;
BEGIN
Ve_hv; Ve_hv;
Ve_hv; Readln;
END.
4. Lời gọi thủ tục
Trong chương trình khi nào cần đến Thủ tục, ta phải gọi thủ tục. Thủ tục được thực hiện khi có lời gọi.
Cách viết lời gọi thủ tục:
Nếu thủ tục không có tham số : Tên thủ tục;
Ví dụ VHV;
Nếu thủ tục có tham số : Tên_thủ_tục(danh sách tham số );
Ví dụ Delete(`Hoa trang nguyen`,4,3);
Bài toán trên còn có thể chia nhỏ thành 3 bài toán nhỏ sau:
BT1: Em hãy nhập dữ liệu từ bàn phím cho 15 học sinh ;
BT2 :Tính Dtb=(M1+M2)/2 cho từng học sinh
BT3: Đưa ra màn hính danh sách học sinh có DTb >=5

Mỗi bài toán nhỏ đó được viết thành một chương trình con. Và chương trình chính sẽ được xây dựng nên từ các chương trình con này.
a. Em hãy nhập dữ liệu từ bàn phím cho 15 học sinh ;
b. Tính Dtb=(M1+M2)/2 cho từng học sinh
c. Đưa ra màn hính danh sách học sinh có DTb >=5
II. Bài toán củng cố
{Thân chương trình chính}
BEGIN
Nhapdl;
TinhDTB;
Duakq;
END.
Bài tập về nhà :
Viết chương trình giải phương trình bậc hai . Trong đó có sử dụng các thủ tục sau:
Thủ tục nhập dữ liệu và tính delta
Thủ tục xử lý delta âm
Thủ tục xử lý delta bằng không
Thủ tục xử lý delta dương
Tiết 2: Tham số, cách viết và sử dụng hàm
Kiểm tra bài cũ :
Viết chương trình vẽ ba hình vuông có các cạnh có độ dài khác nhau. Trong đó việc vẽ hình vuông được xử lý trong một thủ tục .
PROGRAM BAI1;
PROCEDURE Ve_hv(c:byte);
var i: byte;
Begin
for i:=1 to c do Write(`*`);Writeln;
for j:=1 to c-2 do
begin Write(`*`);
for i:=1 to c-2 do Write(` `);
Writeln(`*`);
end;
for i:=1 to c do Write(`*`);
End;
1. Ví dụ về tham biến và tham trị
I. Tham biến và tham trị
PROGRAM BAI1;
PROCEDURE Ve_hv(c:byte);
var i,j: byte;
Begin
for i:=1 to c do Write(`*`);Writeln;
for j:=1 to c-2 do
begin Write(`*`);
for i:=1 to c-2 do Write(` `);
Writeln(`*`);
end;
for i:=1 to c do Write(`*`);
End;
BEGIN
Ve_hv(3); Writeln; Ve_hv(6); Writeln; Ve_hv(9);
END.
Nhận xét
c: là một tham số của CTC Ve_hv và được nhận các giá trị thực sự trong lời gọi chương trình con.
C: là tham số hình thức còn các số 3,6,9 là các tham số thực sự
2. Tham số.
Trong mọi thủ tục ta có thể đưa vào các tham số hình thức, đặt trong dấu ngoặc tròn sau tên thủ tục. Có hai loại tham số hình thức: Tham trị và tham biến. Các tham số có từ khoá VAR đứng trước là tham biến
Ví dụ : PROCEDURE BETA(n,m : byte; Var a,b: real );
Tham trị: CTC chỉ được dùng giá trị tham trị mà không được quyền làm thay đổi giá trị ban đầu của nó , vì thế tham trị chỉ có tác dụng cung cấp dữ liệu vào cho CTC.
Ví dụ: thủ tục có hai tham trị : PROCEDURE Hoandoi(a,b);
Tham biến : Các tham số đặt sau từ khoá Var gọi là tham biến. Và nó có tác dụng như một biến trong chương trình, và ra khỏi CTC thì tham biến vẫn còn giữ những tác động của CTC
Ví dụ: thủ tục có hai tham biến : PROCEDURE Hoandoi(var a,b);
Vd: PROCEDURE TinhToan(bk: real; Var s,p:real);
Tham số hình thức và tham số thực sự khác nhau như thế nào ?
Trả lời : Tham số hình thức được khai báo ở sau tên thủ tục và đặt trong dấu ngoặc tròn.
Tham số thực sự sẽ thay thế tham số hình thức trong lời gọi thủ tục.
PROCEDURE Ve_hv(c:byte);
....
Ve_hv(3); Ve_hv(6); Ve_hv(9);
Tham biến và tham trị khác nhau ở điểm nào ?
Cách khai báo
Khi thay thế tham số hình thức bằng tham số thực sự
Khi CTC thực hiện xong
Tham biến có từ khoá Var ở trước
Tham biến chỉ được phép thay thế bằng một biến trong lời gọi thủ tục.
Tham biến chứa kết quả, còn tham trị thì không lưu giữ kết quả của thủ tục mà chỉ cung cấp dữ liệu vào.
Program Vidu;
Var a,b : byte;
Procedure hoandoi(Var x,y: byte);
Var tg:byte;
Begin
tg:=x; x:=y; y:=tg;
End;
Begin
a:=5; b:=20;
hoandoi(a,b);
Writeln(a :3,b:3);
End.
Program Vidu;
Var a,b : byte;
Procedure hoandoi(x,y: byte);
Var tg:byte;
Begin
tg:=x; x:=y; y:=tg;
End;
Begin
a:=5; b:=20;
hoandoi(a,b);
Writeln (a :3,b:3);
End.
Kết quả có sự khác nhau ?
II. Sử dụng hàm.
Khi nào dùng hàm :
CTC được viết là Hàm nếu ta muốn nhận lại kết quả là một biến có kiểu là kiểu vô hướng như kiểu số, chữ, xâu,.
Ví dụ : CTC tính diện tích tam giác khi biết 3 cạnh : Dtich(a,b,c)
CTC đếm các số không âm trong dãy : DemSoAm
Trong thân hàm trước khi kết thúc bao giờ cũng phải có lệnh gán giá trị cho tên hàm.
2. Lời gọi Hàm : lời gọi hàm không được đứng riêng một mình, nó thường được viết trong các phép toán hoặc một câu lệnh đưa kết quả ra.
Ví dụ : Tong:=Dtich(a,b,c)+Dtich(a1,b1,c1);
Writeln(` So cac so am trong day la :`,DemSoAm);
Program Vidu;
Var a,b,cs : real;
FUNCTION chuvi(x,y,z: real);
Begin
s:=(x+y+z); Chuvi:=S;
End;
Begin
a:=5; b:=20; c:=25;
Writeln(` Chu vi tam giac la :`, chuvi(a,b,c));
End.
3. Ví dụ về dùng hàm
Program htron;
Var bk,cv,dt: real;
Procedure nhap(var r:real);
Begin
Write(` nhap ban kinh :`); Readln(r);
End;
Procedure tinh(r:real; Var c,s: real);
Begin c:=2*pi*r; s:=pi*r*r; End;
BEGIN
Nhap(bk);
Tinh(bk,cv,dt);
Writeln(` chu vi =`,cv:4:2);
Writeln(`Dien tich = `,dt:4:2);
END.
Hãy viết CTC tính thành 2 hàm ?
Ví dụ củng cố
Viết chương trình tính chu vi và diện tích của 3 hình vuông khi nhập vào từng cạnh của nó . Trong đó có sử dụng các thủ tục sau:
Thủ tục nhập cạnh hình vuông, (có sử dụng tham biến ghi cạnh ) Ví dụ : PROCEDURE Nhap(VAR C:Real);
Viết hàm tính chu vi, hàm tính diện tích hình vuông (có sử dụng tham trị nhập cạnh )

Bài tập 2:
Tiết 3: Biến toàn bộ và biến cục bộ
Các vấn đề chính :
Thế nào là biến toàn cục ?
Thế nào là biến cục bộ ?
Truyền dữ liệu trong một chương trình con như thế nào ?
Kiểm tra bài cũ :
Viết chương trình tính chu vi và diện tích của 3 hình vuông khi nhập vào từng cạnh của nó . Trong đó có sử dụng các CTC sau:
Thủ tục nhập cạnh hình vuông, (có sử dụng tham biến ghi cạnh ) Ví dụ: PROCEDURE Nhap(VAR C:Real);
Viết hàm tính chu vi, hàm tính diện tích hình vuông (có sử dụng tham trị nhập cạnh )

Em hãy cho biết các biến khai báo ở đây có sự khác nhau như thế nào ?
2. Tìm lỗi sai cho chương trình sau :
PROGRAM Maxbaso;
Var a,b,c : real;
FUNCTION Max(a,b: real): real;
Var tg: real;
Begin
If a>b Then tg:=a ELSE tg:=b; Max:=tg;
End;
Begin
Write(nhap 3 so);readln(a,b,c);
Max(a,max(b,c));
Readln;
End.
Biến a,b,c và biến tg có gì khác nhau ?
1. Biến toàn cục, biến toàn bộ.
A, Biến toàn cục: Là biến khai báo ở đầu chương trình chính. Tồn tại trong suốt thời gian làm việc của chương trình. Có thể sử dụng và làm thay đổi giá trị của biến toàn cục nhờ các câu lệnh trong CT chính cũng như trong tất cả các CT con
B, Biến cục bộ: Là biến được khai báo ở đầu một CT con. Chúng được cấp phát bộ nhớ khi chương trình con được gọi tới và bị xoá khi máy ra khỏi CT con. Biến cục bộ có giá trị trong CT con và trong các CT con khác nằm trong CT con này.
Nếu biến toàn bộ và biến cục bộ trùng tên thì máy vẫn không bị nhầm lẫn vì : Máy sẽ dùng hai ô nhớ khác nhau để lưu trữ hai biến. Khi ra khỏi CT con, biến cục bộ bị xoá.
Ví dụ: CT nhập mảng hai mảng A,B mỗi mảng có 5 phần tử, in ra các mảng đã nhập và mảng C biết C[i] = A[i].(B[1]+B[2]+...+B[n]).
PROGRAM Vidu4;
Const n=5;
TYPE Kmang=ARRAY[1..n] OF integer;
Var A,B,C : Kmang;
PROCEDURE Nhap(VAR M:Kmamg);
Var i: byte;
Begin
For i:=1 to n do Begin Write(`phân tu thu`,i , ` = `); readln(M[i]); end;
End;
...
PROCEDURE Inmang( M:Kmamg);
Var i: byte;
Begin
For i:=1 to n Do Write(M[i], ` `);
Writeln;
End;
BEGIN
Nhap(A);
Nhap(B);
Inmang(A); Inmang(B);
TinhmangC;
END.
PROCEDURE TinhmangC;
Var i,j: byte;
Begin
For i:=1 to n do Begin T:=0;
for j:=1 to n do t:=t+B[j];
C[i]:=A[i]+T; End;
Inmang(C);
End;
2. Các bước khi máy gặp một lời gọi CTC
B 1. Cấp phát bộ nhớ cho các tham số , các biến cục bộ.
B 2. Truyền giá trị của tham số thực sự cho các tham trị hoặc địa chỉ các biến của các tham số thực sự cho tham biến của Chương trình con.
B 3. Thực hiện các lệnh của chương trình con. Các thay đổi của tham trị hay các biến cục bộ không gây ảnh hưởng tới chương trình chính, nhưng mọi thay đổi của tham biến sẽ dẫn tới sự thay đổi của tham số thực sự (là các biến ) của chương trình.
B 4. Thực hiện xong các lệnh của CTC, máy giải phóng các tham số và biến cục bộ, trở về nơi lời gọi chương trình con
Bài tập 3: Viết chương trình nhập hai mảng A,B có n phần tử , đưa ra màn hình các kết quả sau:
- Mảng tổng A+B
Mảng Hiệu A-B
Mảng tích A.B ( A[i].B[i])
Yêu cầu lập các thủ tục
Thủ tục nhập mảng,
Thủ tục in mảng,
Thủ tục tính tổng, hiệu ,tích của các mảng trên.
Bài tập:
Em hãy giải thích tại sao các biến thay thế cho tham biến trong lời gọi thủ tục lại có thể bị thay đổi giá trị khi thủ tục thực hiện xong ?
Với ví dụ 4:
2. Em hãy tìm ra những lệnh làm thay đổi giá trị của biến mảng A, biến mảng C ?
3. Biến i,j được tạo ra và giải phóng như thế nào ?
Củng cố bài giảng
Bài tập 3:
Viết chương trình nhập mảng A,B từ bàn phím .
Tính và in mảng C , biết C[i]= A[i]+B[i].
Yêu cầu: trong chương trình có sử dụng các CTC sau
Thủ tục nhập mảng, (có sử dụng tham biến ghi kết quả)
Thủ tục in mảng
Hàm tính C
Chú ý : Muốn sử dụng kiểu mảng là tham số thì phải định nghiã kiểu
* Một số tài liệu cũ có thể bị lỗi font khi hiển thị do dùng bộ mã không phải Unikey ...

Người chia sẻ: Nguyễn Minh Tuân
Dung lượng: | Lượt tài: 0
Loại file:
Nguồn : Chưa rõ
(Tài liệu chưa được thẩm định)