Hướng dẫn học sinh lớp 11 trường THPT bá thước 3 phân biệt tham biến, tham trị trong NNLT pascal

13 232 0
Hướng dẫn học sinh lớp 11 trường THPT bá thước 3 phân biệt tham biến, tham trị trong NNLT pascal

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

Thông tin tài liệu

MỤC LỤC đầu Mở 1 Mở đầu 1.1 Lí chọn đề tài Khi giảng dạy phần chương trình ( CTC ) ngôn ngữ lập trình (NNLT) Pascal – Tin học 11 nhận thấy hầu hết học sinh bỡ ngỡ với khái niệm hoàn toàn mẻ mang tính trừu tượng như: Danh sách tham số, tham số giá trị, tham số biến, tham số hình thức, tham số thực sự… Điều làm không khỏi băn khoăn làm để học sinh hiểu nắm bắt khái niệm cách hiệu nhất, nhằm tránh hiểu lầm khái niệm tham biến tham trị Hiện hầu hết ngôn ngữ lập trình bậc cao tổ chức hai cách truyền tham số gọi CTC, truyền theo trị truyền theo biến Việc truyền tham chiếu theo hai cách khác nhiều gây kết khác không mong muốn, điều dẫn đến lỗi logic khó phát Đề tài lỗi thường gặp đồng thời tìm cách truyền tham chiếu cho để đạt mục đích đề chương trình Bài viết không trọng vào thuật toán toán khó mà đưa toán có thuật toán đơn giản để hướng dẫn học sinh, giúp em dễ nắm bắt Bài viết trọng đến vấn đề: “Hướng dẫn học sinh lớp 11 trường THPT Thước phân biệt tham biến, tham trị NNLT pascal” Đây vấn đề không phức tạp đem lại hiệu thực tế công tác giảng dạy 1.2 Mục đích nghiên cứu Trong đề tài xây dựng đề xuất: Hướng dẫn học sinh lớp 11 trường THPT Thước phân biệt tham biến, tham trị NNLT pascal 1.3 Đối tượng nghiên cứu Học sinh lớp 11 trường THPT Thước năm học từ 2011 – 2012 đến năm học 2015-2016 1.4 Phương pháp nghiên cứu - Phương pháp quan sát sư phạm; - Phương pháp nêu vấn đề giảng dạy; - phương pháp thống kê, tổng hợp, so sánh Nội dung sáng kiến kinh nghiệm 2.1 Cơ sở lí luận sáng kiến kinh nghiệm - Những lý luận, lý thuyết sau giúp cho định hướng việc nghiên cứu tìm kiếm giải pháp, biện pháp cho việc giảng dạy: - Phương pháp dạy học ngôn ngữ lập trình từ hoạt động chia nhỏ thành hoạt động nhỏ để học sinh dễ hiểu: - Phương pháp phát vấn; - Phương pháp quy nạp; - Lý thuyết khái niệm vai trò chương trình con, khái niệm vai trò loại tham số sử dụng chương trình 2.2 Thực trạng vấn đề trước áp dụng sáng kiến kinh nghiệm  Thuận lợi: - Có nhiều tài liệu viết chương trình - Thời lượng cho tiết tập thực hành Tin học khối 11 nhiều thuận lợi cho việc áp dụng tập sáng kiến vào dạy - Các phòng học có máy chiếu, có phòng máy đáp ứng yêu cầu giảng dạy môn có máy chiếu, máy kết nối internet - Sự quan tâm đạo kịp thời Ban giám hiệu nhà trường  Khó khăn: - Chương trình phần khó học sinh - Môn tin môn học không học sinh đầu tư nhiều thời gian môn học khác - Để học tốt chương trình tin học 11 học sinh phải có kiến thức môn toán tốt - Phần lớn học sinh trường THPT Thước người dân tộc thiểu số, sống khu vực đặc biệt khó khăn nên tiếp xúc với máy tính hạn chế (rất nhà học sinh có máy tính) - Đầu vào học sinh thấp, kiến thức môn toán hạn chế - Vốn tiếng Anh hạn chế - Hầu hết học sinh trường THCS khu vực Quốc Thành chưa học môn tin học ảnh hưởng trực tiếp đến chất lượng môn tin cấp THPT - Kết khảo sát năm học 2011-2012 HS giải HS lúng túng HS STT Lớp Sĩ số SL % SL % SL % 11A1 40 12.5 10 25 25 62.5 11A2 42 9.52 12 28.57 26 61.9 11A3 43 13.95 14 32.56 23 53.49 - Kết khảo sát năm học 2012-2013 HS giải HS lúng túng HS STT Lớp Sĩ số SL % SL % SL % 11A1 44 15.9 12 27.27 25 56.83 11A2 42 16.7 11 26.19 24 57.11 11A3 45 17.8 13 28.9 24 53.3 2.3 Các giải pháp sử dụng để giải vấn đề 2.3.1 Những tình xảy sử dụng tham biến tham trị NNLT pascal Nếu CTC có danh sách tham số tham số phải khai báo phần đầu sau tên CTC, cặp dấu ngoặc tròn Khai báo tham số có nghĩa thuộc loại tham số ( tham số biến hay tham số trị ) có kiểu liệu gì? Ví dụ: Procedure Delta (Var x: integer ; y: real); Function Beta ( a, b: real): real; Danh sách tham số x, y, a, b Với x có kiểu liệu Integer y, a, b, có kiểu số thực Vậy danh sách tham số x, y, a, b đâu tham biến, đâu tham trị? Bằng trực quan ta dễ dàng nhận thấy x tham biến x có từ khoá Var đứng trước; y, a, b tham trị từ khoá Var đứng trước Để thấy rõ chất khác tham biến tham trị ta xét ví dụ sau: Ví dụ1: Progam Vidu1; Procedure Tong_hieu(a, b: Integer; Var c, d: Integer ); Begin c:= a – b ; d:= a + b ; a:= a*b ; End; Begin clrscr; a:= 10; b:= 3; c:= 5; d:= 6; Tong_hieu(a,b,c,d); Write(a,b,c,d); Readln; End Mới nhìn vào chương trình nhiều học sinh chủ quan đưa giá trị 30, 3, 7, 13 tương ứng với tham số a, b, c, d Nhưng kết qủa nhận sau chạy chương trình lại 10, 3, 7, 13 tương ứng với tham số a, b, c, d Vậy lại có kết này? Thật vậy, a, b truyền theo trị nên có lời gọi Tong_hieu(a,b,c,d) giá trị a, b giữ nguyên ban đầu a = 10, b = c, d truyền theo biến nên có lời gọi Tong_hieu(a,b,c,d) giá trị c, d thay đổi c = 7, d = 13 Nhận xét: Qua ví dụ 1, sau chạy chương trình tham biến có kết thay đổi tham trị kết không thay đổi, khác tham biến tham trị, ta xét ví dụ sau Ví dụ 2: Program VD2; Var x,y: Integer ; Procedure Thamso(Var Z: Integer ; W: Integer); Begin Z:= 1; W:=1; End; Begin {chuong trinh chinh} x:= 0; y:= 0; Writeln(x:5,y:5); Thamso(x,y); Writeln(x:5,y:5); Readln; End Kết xuất hình chương trình thực hiện: 0 0 0 0 1 1 0 Bước vào thân chương trình ban đầu x y có giá trị (do lệnh x:= 0, y:= 0) Khi gọi thủ tục Thamso(x,y), tham số biến thay biến x Điêù có nghĩa thao tác z thủ tục xẩy x; cụ thể lệnh gán z:= x:= 1, tức gán giá trị cho biến x Còn gọi thủ tục Thamso(x,y) tham số w thay biến y; giá trị biến y chép sang cho biến w Tức w có giá trị Khi bước vào thân thủ tục liên quan biến y với w, lệnh gán w:= không ảnh hưởng đến giá trị y Như vậy, giá trị x in 1, y Với thủ tục Procedure Thamso(Var z: Integer ; w: Integer ) lời gọi sau có hợp lý không? Thamso(x + 1, y) hay Thamso(2, y) Khi thay lời gọi Thamso(x,y) lời gọi máy báo lỗi Bởi lời gọi CTC tham số biến phép thay biến kiểu, không hằng(2) hay biểu thức(x+1), tham số giá trị phép thay hằng, biểu thức biến đơn Sự thay phải theo trật tự tham số khai báo đầu CTC Ngoài lời gọi Thamso(x,y) lời gọi Thamso(x,y+1); Thamso(x,3); không hợp lý Đây khác tham biến tham trị Nhận xét: Khi nhận biết khác tham biến tham trị CTC có tham số lúc cần đến tham biến, lúc cần đến tham trị? Ví dụ 3: Program VD3; Var x,y: Integer; Procedure Hoandoi(x,y:Integer); Var t:Integer; Begin t:= x; x:= y; y:= t; End; Begin x:=1; y:= 2; Hoandoi(x,y); Writeln(‘Hai so chua hoandoi:’,x:2,y:2); Write('x=',x:2,' y=',y:2); Readln; End Thủ tục Hoandoi(x,y) ví dụ dùng để đổi giá trị biến nguyên x y Tuy nhiên chạy chương trình, điều không xẩy Giá trị biến nguyên x y trước gọi thủ tục x có giá trị 1, y có giá trị sau gọi thủ tục Hoandoi(x,y) giá trị x, y có giá trị không đổi: x=1, y=2 Vậy lỗi xảy thủ tục Hoandoi(x,y) tổ chức truyền theo trị nên giá trị biến x y không bị ảnh hưởng lệnh đổi giá trị thủ tục Nếu sữa lại việc khai báo tham số thủ tục tráo đổi truyền theo biến (thêm từ khoá Var trước x, y phần đầu thủ tục) chương trình cho kết mong muốn: x=2, y=1 Ví dụ 4: Program VD4; Var tu,mau,d:word; Function UCLN(Var a,b:Word):Word; Begin While ab 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); writeln('d =:',d); If d>1 Then Begin Tu:= tu Div d; mau:= mau Div d; End; Writeln('phan so duoc toi gian la:',tu,'/',mau); Readln; End Chương trình sử dụng hàm UCLN(a, b) để tối giản phân số nhập từ bàn phím giá trị tử số mẩu số Nhìn vào chương trình ta bàn đến tính đắn công thức Vì ta thấy chương trình trả UCLN hai số nguyên dương a b dùng hàm để tính d UCLN tử mẫu Phân số tối giản nhận cách chia tử mẫu cho d Tuy nhiên chạy chương trình, ta nhận kết không mong muốn 1/1 cho phân số Vậy lỗi đâu? Lỗi logic xảy hàm UCLN tổ chức truyền theo tham biến, nên sau lời gọi d:= UCLN(tu,mau) , ta đồng thời giá trị d, tu, mau d Để chương trình cho kết ta phải sửa lại việc khai báo tham số hàm UCLN truyền theo tham trị ( bỏ từ khoá Var trước a, b) Nhận xét: Việc tổ chức truyền theo trị hay truyền theo biến cho tham số tuỳ tiện dẫn đến kết sai với yêu cầu toán Qua hai ví dụ minh hoạ tình xảy Ví dụ cho kết sai truyền theo trị sửa lại việc khai báo tham số thủ tục Hoandoi truyền theo tham biến chương trình cho kết với yêu cầu toán Còn ví dụ cho thấy kết sai truyền theo tham biến Ví dụ 5: Program VD5; Var a: Byte; Function F(Var x:Byte):Byte; Begin x:=x+1; F:=x; End; Begin a:=5; Writeln(F(a)+F(a)); Readln; End Chương trình đơn giản đưa hình giá trị F(a)+F(a) với a = Bằng suy luận thông thường, kết phải 12 a = 5, F (a) cho giá trị Tuy nhiên chạy chương trình ta nhận kết 13 Có thể sửa biểu thức F(a)+F(a) thành biểu thức 2*F(a) lúc ta nhận kết 12 Chương trình thực lệnh mà ta viết, có điều xuất hiệu ứng phụ hàm F tổ chức truyền theo biến tham biến x Lệnh x:= x + hàm F làm biến a tăng lên đơn vị gọi F(a) thực hịên biểu thức F(a)+F(a), giá trị F(a) gọi hai lần Tại lần thứ a = 5, F(a) = , lần gọi thứ hai lúc a = F(a) = ta nhận kết 13 Trong biểu thức 2*F(a) gọi giá trị F(a) lần mà ta nhận kết 12 Nếu sửa lại việc truyền cho tham biến x hàm F theo trị không khác Nhận xét: Như vậy, truyền tham số cho CTC, ta muốn bảo vệ giá trị tham số khỏi bị CTC “ vô tình phá” tham số phải dùng tham trị Khi cho phép giá trị đầu vào tương ứng hằng, biểu thức biến nguyên Còn tham số muốn dùng để lấy kết (những biến đổi) chương trình đem lại tham số phải tham biến giá trị đầu vào tương ứng biến 2.3.2 Xây dựng số câu hỏi trắc nghiệm tập phục vụ cho tiết kiểm tra Câu 1: Với a tham biến, b tham trị khai báo phần đầu cho thủ tục sau đúng? (a, b có kiểu DL Integer) A Procedure M(Var a:Integer ; b: Integer ); B Procedure M(a,b: Integer ); C Procedure M(Var a,b: Integer ); D Procedure M(a: Integer ; Var b: Integer ) ; Đáp án: A Câu2: Cho biết giá trị tương ứng cho biến a, b, c, d sau chạy thử chương trình : Progam Vidu1; Procedure Tong_hieu(a, b: Integer; Var c, d: Integer ); Begin c:= a – b ; d:= a + b ; a:= a*b ; End; Begin clrscr; a:= 10; b:= 3; c:= 5; d:= 6; Tong_hieu(a,b,c,d); Write(a,b,c,d); Readln; End A 30, 3, 7, 13 B 10, 3, 7, 13 C 10, 3, 5, D 30, 3, 5, Đáp án: B Câu 3: Số in hình thực chương trình sau? Program c3; Var a,b:byte; Procedure Thu1(Var a:byte); Begin a:= 2*a; b:=b+5; End; Begin a:= 3; b:= 7; Thu1(b); a:= a+b; Writeln(a); Readln; End A 13 B 19 C 22 D…… (Một đáp án khác) Đáp án: C Câu 4: Số in hình thực chương trình sau? program C4; Var x:integer; Procedure Thaydoi( x:integer); Begin x:=1; end; Begin x:=0; Thaydoi(x); Writeln(x:3); readln End A B C D Đáp án: B Câu 5: Chương trình sau cho kết gì? Program VD5; Var a: Byte; Function F(Var x:Byte):Byte; Begin x:=x+1; F:=x; End; Begin a:=5; Writeln(F(a)+F(a)); Readln; End A 10 B 11 C 12 D 13 Đáp án: D Câu 6: (Ta có câu hỏi sau Vd5): Hãy sửa lỗi chương trình để chương trình có kết 12 ? Đáp án: Cách 1: Function F( x:Byte):Byte; Cách 2: Thay biểu thức (F(a)+F(a))thành biểu thức (2*F(a)) Câu 7: Với đầu thủ tục: Procedure N( x:Integer ; Var y:Integer ); m biến nguyên, lời gọi sau lời gọi hợp lệ? A N(m,m+3); B N(2,m); C N(m+1,4); D N(2,3*m+5); Đáp án: B Câu 8: Hãy sữa lỗi chương trình sau cho biết chương trình sau làm việc gì? Program C8; Var n:integer; Begin Function fibo( Var n: longint):longint; Begin If n

Ngày đăng: 17/10/2017, 09:30

Từ khóa liên quan

Tài liệu cùng người dùng

Tài liệu liên quan