Sang kien kinh nghiem b4

9 12 0
Sang kien kinh nghiem b4

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

Thông tin tài liệu

VÝ dô 3 cho mét kÕt qu¶ sai khi truyÒn theo trÞ trong khi nÕu söa l¹i viÖc khai b¸o c¸c tham sè trong thñ tôc Hoandoi lµ truyÒn theo tham biÕn th× ch¬ng tr×nh sÏ cho kÕt qu¶ ®óng víi y[r]

(1)

A - Đặt Vấn đề

Khi giảng dạy phần chơng trình ( CTC ) 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 tơi khơng khỏi băn khoăn làm để học sinh hiểu nắm bắt đợc 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ữ 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 Dới trình bày sai lầm xảy sử dụng hai cách truyền tham chiếu cách dùng chúng cho để đạt đợc múc đích đề chơng trình

Bài viết khơng nghiêng thuật tốn tốn khó mà đa tốn có thuật tốn đơn giản để học sinh khơng rơi vào việc giải thuật tốn mà trọng đến vấn đề viết: “Một số sai lầm dùng tham biến tham trị PASCAL

B- Giải vấn đề:

(2)

Nếu CTC có danh sách tham số tham số phải đợc 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ừ khố Var đứng trớc; y, a, b tham trị khơng có từ khố 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. Nhng kết qủa nhận đợc 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 đợc truyền theo trị nên có lời gọi Tong_hieu(a,b,c,d) giá trị a, b đợc giữ nguyên nh ban đầu a = 10, b = 3 c, d đợc 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 cịn 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}

(3)

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 đợc 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 đợc 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 đợc thay biến y; giá trị biến y đợc chép sang cho biến w Tức w có giá trị Khi bớc vào thân thủ tục khơng 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 đợc 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 đợc phép thay biến kiểu, khơng đợc hằng(2) hay biểu thức(x+1), cịn tham số giá trị đợc 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 Ngồ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 đợc khác tham biến tham trị một 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

(4)

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 nh 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 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); 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 khơng phải 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 cách chia tử mẫu cho d Tuy nhiên chạy chơng trình, ta ln nhận đợc 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 đợc tổ chức truyền theo tham biến, nên sau lời gọi d:= UCLN(tu,mau) , ta đợc đồ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ố là khơng thể tuỳ tiện dẫn đến kết sai với yêu cầu tốn. Qua hai ví dụ minh hoạ tình xảy Ví dụ cho kết quả 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 tốn Cịn ví dụ cho thấy kết sai truyền theo tham biến Ví dụ 5:

(5)

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 đợc 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 đợc 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 đợc tổ chức truyền theo biến tham biến x Lệnh x:= x + 1 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) đợc 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 đợc kết 13

Trong biểu thức 2*F(a) gọi giá trị F(a) lần mà ta nhận đợc 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 cịn khác nh

Nhận xét: Nh vậy, truyền tham số cho CTC, ta muốn bảo vệ giá trị của tham số khỏi bị CTC vơ tình phá tham số phải đ“ ” ợc dùng nh 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 có thể bin.

2. Xây dựng số câu hỏi trắc nghiƯm vµ bµi 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;

(6)

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 no c 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 (Mt ỏp ỏn khỏc)

Đáp án: C

Câu 4: Số đợc 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;

(7)

A 10 B 11 C 12 D 13

Đáp ¸n: D

Câu 6: (Ta có câu hỏi nh sau Vd5):

Hãy sửa lỗi chơng trình để chơng trình có kết l 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<3 then fibo:= 1

Else fibo:= fibo(n-1)+fibo(n-2); End;

Write(‘nhap n:’); Readln; Writeln(fibo(n));

Readln;

End

Đáp án: Chơng trình đợc sữa lỗi: Program C8;

Var n:integer;

Function fibo(n: longint):longint; Begin

If n<3 then fibo:= 1

Else fibo:= fibo(n-1)+fibo(n-2); End;

Begin

Write(‘nhap n:’); Readln(n); Writeln(fibo(n));

Readln;

End

Chơng trình dùng hàm để tính dãy số Fibonaxi F1, F2, …, Fn

víi F1= F2=1

(8)

C- KÕt luËn

Đề tài thu đợc số kết sau:

 Xây dựng đợc hệ thống câu hỏi, tập để giảng dạy chơng VI – phần CTC lập trình có cấu trúc,

 Sử dụng ví dụ vào đề kiểm tra: tìm đáp án hay sửa lỗi chơng trình…

 Đề tài đợc ứng dụng để giảng dạy đạt kết tốt năm học vừa qua Phần lớn học sinh phân biệt đợc chất khác tham biến tham trị cách sử dụng chúng

D- KiÕn NghÞ

 Để tiết kiệm thời gian học đạt kết cao, giáo viên cần chuẩn bị sẵn chơng trình vào máy hay khổ giấy lớn Học sinh chạy chơng trình thử với test khác (Tốt dạy máy chiếu hầu hết trờng có)

 Bài viết phần CTC, chúng tơi mong có nhiều viết vấn đề cịn lại CTC để hồn thiện phần CTC

Th¸ng / 2008

(9)

1 Hồ Sĩ Đàm Hồ Cẩm Hà - Trần Đỗ Hùng Nguyễn Đức Nghĩa Nguyễn Thành Tùng Ngô ánh Tuyết Tin học 11(SGK thí điểm), NXB Giáo dục

2 Hồ Sĩ Đàm Hồ Cẩm Hà - Trần Đỗ Hùng Nguyễn Đức Nghĩa Nguyễn Thành Tùng Ngô ánh Tut Tin häc 11(SGV thÝ ®iĨm), NXBGD

3 Lê Khắc Thành Hồ Cẩm Hà - Nguyễn Vũ Quốc Hng Tài liệu bồi d-ỡng thờng xuyên cho GV THPT chu kú III (2004 – 2007)

Ngày đăng: 20/04/2021, 13:56