Trong suốt quá trình giảng dạy từ khi m n Tin học được đưa vào trường PT đến nay, t i nhận thấy rằng khi giảng dạy về nội dung của Chương 6 "Chương trình con và lập trình c cấu trúc" phầ
Trang 1PHẦN MỞ ĐẦU
I LÍ DO CHỌN ĐỀ TÀI
Theo những nguyên tắc biên soạn SGK, điểm nổi bật nhất trong SGK Tin học lớp 11 là tinh thần tích hợp kiến thức, kỹ năng trong từng bài học, chú trọng tới việc thực hành Điều này tạo điều kiện cho học sinh phát triển đồng thời cả
về kiến thức và kỹ năng làm việc Điểm nổi bật thứ hai là tinh thần đổi mới phương pháp dạy học theo hướng tích cực hoá hoạt động học tập của học sinh iện nay trong lí luận dạy học n i chung và lí luận dạy học m n Tin học
n i riêng yêu cầu s d ng khá nhiều phương pháp: phương pháp thảo luận, phương pháp đặt câu hỏi, phương pháp chia nh m…
Tuy nhiên với bất kỳ một phương pháp nào thì giáo viên vẫn phải c một yêu cầu chung là phải hiểu rõ về bản chất của vấn đề thì từ đ mới c khả năng
s d ng một hoặc nhiều phương pháp thích hợp để truyền đạt hay gợi mở vấn đề cho học sinh
Là một giáo viên giỏi, trước hết phải là một người học giỏi, người ta n i: Nếu anh nghe -> thì anh sẽ quên
Nếu anh thấy -> thì anh sẽ nhớ
Nếu anh làm -> thì anh sẽ hiểu
Nếu anh giảng -> thì anh sẽ tinh th ng
Trong chương trình Tin học phổ th ng thì chương trình Tin học lớp 11 tìm hiểu về ng n ngữ lập trình mà c thể là ng n ngữ lập trình Pascal Đây là một
ng n ngữ kh ng chỉ chặt chẽ về mặt cú pháp mà còn chặt chẽ về mặt dữ liệu Chính vì thế, thảo chương bằng ng n ngữ Pascal là một cơ hội tốt kh ng chỉ rèn luyện tư duy mà còn rèn luyện tính cẩn thận và chính xác
Ng n ngữ Pascal được dùng để viết các chương trình ứng d ng trong nhiều lĩnh vực Với văn phạm sáng sủa, dễ hiểu, với khả năng đủ mạnh, Pascal được xem là ng n ngữ thích hợp nhất để giảng dạy ở các trường phổ th ng và đại học Trong suốt quá trình giảng dạy từ khi m n Tin học được đưa vào trường PT đến nay, t i nhận thấy rằng khi giảng dạy về nội dung của Chương 6 "Chương trình con và lập trình c cấu trúc" phần lớn học sinh đều kh ng hiểu được cách truyền tham trị và tham biến như thế nào mà lý do chính là c một số giáo viên cũng chỉ dạy những gì mình biết chứ cũng chưa hiểu rõ bản chất của vấn đề
Từ những lý do trên, qua quá trình giảng dạy trên lớp của bản thân t i đã chọn đề tài "Một cách nhận biết và truyền tham biến và tham trị trong Chương trình con" là đề tài Sáng kiến kinh nghiệm của mình để c thể giúp cho giáo
Trang 2viên, học sinh hiểu rõ được vấn đề tương đối phức tạp này
II MỤC ĐÍCH CỦA SÁNG KIẾN KINH NGHIỆM
- G p phần thúc đẩy quá trình đổi mới phương pháp dạy học theo hướng phát huy tính tích cực của học sinh
- G p phần nâng cao kiến thức và khả năng thực hành cho giáo viên
- Giúp học sinh c khả năng nhận thức kiến thức và tự hoàn thiện kiến thức
III KHÁCH THỂ VÀ ĐỐI TƯỢNG NGHIÊN CỨU
Khách thể: ọc sinh lớp 11 trường T PT Lê Văn ưu
Đối tượng: Truyền tham biến và tham trị trong chương trình con, ng n ngữ lập trình Pascal
IV NHIỆM VỤ NGHIÊN CỨU
Trên cơ sở nhận thức, tìm hiểu và phân tích, đề tài đưa ra các bài thực hành
c thể về truyền tham trị và tham biến trong chương trình con, trong ng n ngữ lập trình Pascal
V PHƯƠNG PHÁP NGHIÊN CỨU
Đề tài s d ng các phương pháp:
- Đọc tài liệu
- Thực nghiệm
- Phân tích đánh giá
VI NHỮNG ĐÓNG GÓP MỚI
iệu quả và chất lượng trong dạy học ph thuộc vào nhiều yếu tố Tuy nhiên việc giáo viên nhận thức vấn đề c sâu sắc, chính xác hay kh ng, chuẩn bị thiết kế c chu đáo hay kh ng cũng như trong phương pháp giảng dạy việc nêu vấn đề và giải quyết vấn đề đối với một bài học đ ng một vai trò quan trọng Một cách nhận thức, cách hiểu, phân tích và đưa ra các chương trình c thể mà
t i đưa ra sau đây, hy vọng sẽ g p một phần nhỏ định hướng để đồng nghiệp rút kinh nghiệm trong nhiệm v giảng dạy tốt m n Tin học
Trang 3PHẦN NỘI DUNG
I CƠ SỞ LÍ LUẬN
Ng n ngữ lập trình (programming language) là một tập con của ng n ngữ
máy tính Đây là một dạng ng n ngữ được chuẩn h a (đối lập với ng n ngữ tự nhiên) N được dùng để miêu tả những quá trình, những ngữ cảnh một cách rất chi tiết
Ng n ngữ lập trình là một hệ thống được ký hiệu h a để miêu tả những tính toán (qua máy tính) trong một dạng mà cả con người và máy đều c thể đọc và hiểu được
Theo định nghĩa ở trên thì một ng n ngữ lập trình phải thỏa mãn được hai điều kiện cơ bản là:
1 N phải dễ hiểu và dễ s d ng đối với người lập trình, để con người c thể dùng n giải quyết các bài toán khác
2 N phải miêu tả một cách đầy đủ và rõ ràng các tiến trình (process), để
c thể chạy được trên các máy tính khác
Chương trình con (subprograms) là một phép toán trừu tượng được định
nghĩa bởi người lập trình Chương trình con c các đặc tính như sau:
Mỗi chương trình con c một điểm vào duy nhất
Chương trình gọi tạm ngừng việc thực hiện trong quá trình thực hiện chương trình con
Ðiều khiển lu n được trả về chương trình gọi khi sự thực hiện chương trình con kết thúc
Khi n i đến chương trình con, chúng ta quan tâm đến hai khía cạnh: sự định nghĩa chương trình con và lời gọi thực hiện chương trình con
Sự đặc tả chương trình con bao gồm:
* Tên của chương trình con
* Số lượng các tham số, thứ tự của chúng và kiểu dữ liệu của mỗi một tham
số
* Số lượng các kết quả, thứ tự của chúng và kiểu dữ liệu của mỗi một kết quả
* oạt động được thực hiện bởi chương trình con
Chương trình con biểu diễn một hàm toán học, là một ánh xạ từ tập hợp các tham số đến tập hợp các kết quả
Trang 4- Chương trình con trả về một kết quả duy nhất trong tên chương trình con thường được gọi là một hàm Cú pháp điển hình đặc tả hàm được quy định trong
ng n ngữ lập trình Pascal:
Function Ten_ham(Danh sách các tham số cùng với kiểu dữ liệu tương ứng): Kiểu kết quả trả về
Ví d :
Function FN(x:real; y:integer) : real
Ðặc tả này xác định hàm FN : REAL x INTEGER -> REAL
- Chương trình con trả về nhiều hơn một kết quả hoặc kh ng c kết quả trả
về trong tên chương trình con thường được gọi là thủ t c (procedure hoặc subroutine) Cú pháp điển hình đặc tả thủ t c được quy định trong ng n ngữ lập trình Pascal:
Procedure Ten_thu_tuc(Danh sách các tham số cùng với kiểu dữ liệu tương ứng)
Ví d :
Procedure SUB(X:real; Y:Integer; Var Z:Real; Var U:boolean);
Trong sự đặc tả này, tham số c tên đứng sau VAR biểu thị một kết quả hoặc một tham số c thể bị thay đổi Cú pháp của sự đặc tả này là:
Procedure SUB(X: IN Real; Y: IN Integer; Z: IN OUT Real; U: OUT
Boolean)
Thủ t c này khai báo một chương trình con với sự xác định:
SUB : Real x Integer x Real -> Real x Boolean
Các từ IN, OUT và IN OUT phân biệt ba trường hợp sau đây: IN chỉ định một tham số kh ng thể bị thay đổi bởi cương trình con, IN OUT chỉ định một tham số c thể bị thay đổi và OUT chỉ định một kết quả
Như vậy, việc đưa ra cách nhận biết và truyền tham số sẽ làm cho học sinh hiểu rõ hơn tầm quan trọng của chương trình con đồng thời cũng như càng làm tăng khả năng tư duy của học sinh đối với các bài toán khác
II CƠ SỞ THỰC TIỄN
* Điều kiện của Nhà trường: Cũng như tình trạng chung của các trường
T PT trong tỉnh n i riêng và cả nước n i chung trang thiết bị của Nhà trường còn nhiều thiếu thốn đối với tất cả các m n học chức kh ng riêng gì bộ m n Tin học Mặt khác, trang thiết bị đối với bộ m n lại c khối lượng kinh phí lớn Vì vậy, trang thiết bị tin học còn khá khiêm tốn, thiếu thốn cả về lượng và chất số lượng máy tính ít (còn chưa đủ 2 học sinh/01 máy tính trong giờ thực hành), trang thiết bị hỗ trợ cho phòng máy hầu như kh ng c gì
Trang 5* Điều kiện của giáo viên: Nhà trường c 03 giáo viên tin học đều đạt chuẩn, tuổi đời trẻ, c năng lực, c ý thức học hỏi để nâng cao trình độ chuyên
m n của bản thân, lu n cố gắng khắc ph c mọi kh khăn tận d ng mọi trang thiết bị hiện c để c những bài giảng hay và sinh động nhằm truyền tải một cách tốt nhất kiến thức tới học sinh
* Điều kiện học sinh: ầu hết học sinh đều là con em ở n ng th n Nhưng
do kinh tế địa phương những năm gần đây phát triển mạnh, các dịch v Internet
và kinh doanh máy tính trên địa bàn cũng phát triển vì vậy học sinh ít nhiều đã được tiếp cận máy tính và Internet Mặt khác, đây là m n học mới lại được ứng
d ng nhiều trên thực tế đời sống Vì vậy, học sinh cũng khá hứng thú và c ý thức với m n học nên trong các tiết học hầu hết các em đều hăng say xây dựng bài và tìm hiểu thực tế đối với m n học Tuy nhiên, đây là m n học kh đồng thời lại liên quan đến rất nhiều lĩnh vực khoa học tự nhiên, xã hội nên việc tiếp cận của học sinh cũng tương đối kh
III ĐẶT VẤN ĐỀ
Khi giảng dạy về phần chương trình con (CTC) – Tin học 11 tôi nhận thấy hầu hết học sinh rất bỡ ngỡ với các khái niệm hoàn toàn mới mẻ mang tính trừu tượng như: Danh sách tham số, tham số giá trị (tham trị), tham số biến (tham biến), tham số hình thức, tham số thực sự…
Điều làm tôi không khỏi băn khoăn đ là làm thế nào để học sinh hiểu và nắm bắt được các khái niệm này một cách hiệu quả nhất, nhằm tránh những sự hiểu lầm giữa các khái niệm tham biến và tham trị
iện nay hầu hết các ngôn ngữ bậc cao đều tổ chức hai cách truyền tham số khi gọi một CTC, đ là truyền theo trị và truyền theo biến Việc truyền tham chiếu theo hai cách khác nhau nhiều khi gây ra những kết quả khác nhau không mong muốn, điều này dẫn đến những lỗi logic rất khó phát hiện
Bài viết này không ngiêng về thuật toán của các bài toán khó mà chỉ đưa ra các bài toán có thuật toán đơn giản nhất để giáo viên và học sinh không rơi vào việc giải quyết thuật toán mà chú trọng đến vấn đề của bài viết
IV GIẢI QUYẾT VẤN ĐỀ
1 Khái niệm về tham biến và tham trị
Theo SGK Tin học 11, tham biến và tham trị được định nghĩa như sau:
* Tham trị: Trong lệnh gọi CTC, các tham số hình thức được thay bằng các tham số thự sự tương ứng là các giá trị c thể được gọi là các tham số giá trị
(tham trị)
Trang 6* Tham biến: Trong lệnh gọi CTC, các tham số hình thức được thay bằng
các tham số thự sự tương ứng là tên các biến được gọi là các tham số biến (tham
biến)
2 Truyền tham số khi dùng tham biến và tham trị
Nếu một CTC có danh sách tham số thì các tham số phải được khai báo ở phần đầu sau tên CTC, trong cặp dấu ngoặc tròn Khai báo một tham số có nghĩa
là chỉ ra nó thuộc loại tham số nào (tham số biến hay tham số trị) và nó có kiểu
dữ liệu là gì?
Ví d : Procedure Test(x, y: integer ; var z: boolean);
Function Delta( a, b, c: real): real;
- Danh sách tham số là x, y, z, a, b
- x, y có kiểu dữ liệu Integer (số nguyên);
- a, b, c có kiểu dữ liệu real (số thực);
- z c kiểu dữ liệu boolean (logic)
Vậy trong các tham số x, y, z, a, b đâu là tham biến, đâu là tham trị?
Bằng trực quan ta dễ dàng nhận thấy:
- z là tham biến vì z có từ khoá Var đứng trước;
- x, y, a, b, c là tham trị vì không có từ khoá Var đứng trước
Để thấy rõ hơn về bản chất sự khác nhau giữa tham biến và tham trị ta xét
ví d sau:
Ví d 1:
Progam Vidu1;
var a, b, c: Integer;
Procedure Exp(x, y: Integer; Var z: Integer );
Begin
End;
Begin
End
Nhìn vào chương trình, chủ quan người đọc c thể đưa ra kết quả
Trang 750 10 15 (*)
Nhưng kết quả nhận được sau khi chạy chương trình là:
5 10 15 (**)
Vậy tại sao lại có kết quả này?
Thật vậy, do x và y là tham trị nên khi có lời gọi Exp(a,b,c) thì x nhận được giá trị của a, y nhận được giá trị của b (c nghĩa a, b vẫn c giá trị như ban đầu a
= 10, b = 3) Nhưng còn z là tham biến nên khi có lời gọi Exp(a,b,c) thì z nhận được biến c
M tả thực hiện chương trình c thể theo thứ tự lệnh:
Lệnh Kết quả CT chính Kết quả CT con Diễn giải
(1) a = 5
(2) a = 5, b = 10
(3) a = 5, b = 10 và c = 7
(5) a = 5, b = 10 và c = 15 In kết quả (**)
Nhận xét: khi chạy chương trình thì tham số thực sự truyền cho tham biến
có kết quả thay đổi (theo CTC) còn tham số thực sự truyền cho tham trị có kết quả không thay đổi, đ chính là sự khác nhau cơ bản giữa tham biến và tham trị,
ta xét ví d sau
Ví d 2:
Program Vidu2 ;
Var a, b: Integer ;
Procedure Hoan_doi(x, y: Integer);
var tg:Integer;
Begin
End;
Begin
Trang 8Writeln(a:5, b:5); (5)
Readln;
End
Kết quả xuất hiện trên màn hình khi chương trình được thực hiện:
5 10 (*)
5 10 (*)
Thủ t c oandoi(a,b) trong ví d này dùng để đổi giá trị giữa 2 biến nguyên a và b Tuy nhiên khi chạy chương trình, điều này kh ng xảy ra Giá trị của 2 biến nguyên a và b trước và sau khi gọi thủ t c oan_doi(a,b) vẫn kh ng đổi: a = 5 và b = 10
Tại sao lại như vậy?
Lý do: trong m tả thủ t c oan_doi thì x và y là tham trị nên khi c lời gọi oan_doi(a,b) thì x nhận được giá trị chứa trong a còn y nhận được giá trị chứa trong b
M tả thực hiện chương trình c thể theo thứ tự lệnh:
Lệnh Kết quả CT chính Kết quả CT con Diễn giải
(1) a = 5
(2) a = 5 và b = 10
Ví d 3:
Program Vidu3;
Var a, b: Integer ;
Procedure Hoan_doi(x: Integer; var y: Integer);
var tg:Integer;
Begin
End;
Begin
Trang 9a:= 5; (1)
Writeln(a:5,b:5); (3)
Hoan_doi(a,b); (4)
Writeln(a:5,b:5); (5)
Readln;
End
Kết quả xuất hiện trên màn hình khi chương trình được thực hiện:
5 10 (*)
5 5 (**)
Trong ví d này khi chạy chương trình ta lại thấy chỉ c biến b thay đổi còn biến a lại được giữ nguyên
Lý do trong m tả thủ t c oan_doi thì x là tham trị và y là tham biến nên khi c lời gọi oan_doi(a,b) thì x nhận được giá trị chứa trong a còn y nhận được biến b
M tả thực hiện chương trình c thể theo thứ tự lệnh:
Lệnh Kết quả CT chính Kết quả CT con Diễn giải
(1) a = 5
(2) a = 5 và b = 10
(4) Gọi CT con x = 5 và y = b(10) Truyền tham số
Vậy, nếu s a lại việc khai báo các tham số trong thủ t c Hoan_doi là truyền theo biến bằng cách thay phần khai báo tên thủ t c lại như sau:
Procedure Hoan_doi(var x, y: Integer);
thì chương trình sẽ cho kết quả như mong muốn là:
5 10
10 5
Nhận xét: Khi đã nhận biết được sự khác nhau giữa tham biến và tham trị thì một CTC có tham số lúc nào cần đến tham biến, lúc nào cần đến tham trị là một vấn đề ta cần phải quan tâm khi s a d ng trong những chương trình c thể
Vì vậy, ta xét tiếp một ví d sau đây:
Ví d 4:
Trang 10Program Vidu4;
Var tu,mau,d:word;
Function UCLN(Var a,b:Word):Word;
Begin
While a<>b Do
If a>b Then a:= a-b
Else b:= b-a;
UCLN:= a;
End;
Begin
Write('nhap tu so:'); Readln(tu);
Write('nhap mau so:'); Readln(Mau);
d:= UCLN(tu,mau);
If d>1 Then
Begin
Tu:= tu Div d;
mau:= mau Div d;
End;
Writeln(tu,'/',mau);
End
Chương trình trên s d ng hàm UCLN(a, b) để tối giản một phân số khi nhập từ bàn phím các giá trị t số và mẫu số của nó
Khi chạy chương trình, ta luôn nhận được kết quả không mong muốn là 1/1 cho mọi phân số Vậy lỗi do đâu?
Lỗi này xảy ra do hai tham số hình thức của hàm UCLN: a, b là tham biến, nên sau lời gọi d:= UCLN(tu,mau), thì a nhận được là tu; b nhận được là mau và khi đ trong quá trình thực hiện hàm
d = tu = mau dẫ đến kết quả luôn là 1/1
Để chương trình cho kết quả đúng ta phải s a lại việc khai báo các tham số trong phần mô tả hàm như sau:
Function UCLN(a,b:Word):Word;
Nhận xét: Việc xác định truyền theo tham trị hay truyền theo tham biến cho một tham số là không thể tuỳ ý vì nó có thể dẫn đến những kết quả sai với yêu cầu của bài toán
Tuy nhiên đối với một chương trình khi x d ng CTC, việc xác định được một tham số hình thức là tham biến hoặc tham trị còn chưa đủ, ta nên nhớ một