Trước hết, Biến trung gian phải xem là không phải biến ban đầu đã cho của bài toán. Phải dùng đến biến khác với biến đã cho là vì, với biến đã cho bài tập khó làm (có khi không làm được). Thay biến đã cho bởi một biến khác là mong rằng: Bài tập với biến mới dễ giải hơn bài toán đã cho.Biến trung gian cũng có thể hiểu đúng với ý nghĩa của từ trung gian (tức là không chính). Theo nghĩa này, đáng lẽ ra ta phải tìm biến đã cho của bài toán thì ta lại đi tìm biến trung gian. Sau khi tìm được biến trung gian ta trở về tìm biến ban đầu.Việc giải bài tập bằng cách dùng biến trung gian có thể xem như là đáng lẽ ta phải đi theo đường thẳng thì ta lại đi theo đường vòng nhưng dễ đi hơn để tới đích.
Trang 1CỘNG HOÀ XÃ HỘI CHỦ NGHĨA VIỆT NAM
Độc lập - Tự do - Hạnh phúc BÁO CÁO KẾT QUẢ HOẠT ĐỘNG SÁNG KIẾN
Kính gửi: - Hội đồng sáng kiến cấp cơ sở huyện ;
Tên đề tài sáng kiến: Sử dụng biến và biến trung gian trong pascal cho đối
tượng học sinh lớp 8, lớp 9 (cuối cấp THCS)
1- Chủ đầu tư tạo ra sáng kiến: (trường hợp tác giả không đồng thời là
chủ đầu tư tạo ra sáng kiến)
2- Lĩnh vực áp dụng sáng kiến: Giảng dạy môn Tin học sinh lớp 8, lớp 9
(cuối cấp THCS)
3- Ngày sáng kiến được áp dụng lần đầu hoặc áp dụng thử (bắt buộc
phải ghi để làm cơ sở đánh giá tính khả thi, hiệu quả của sáng kiến): Năm học
2016 – 2017; Năm học 2017 – 2018
4- Mô tả bản chất của sáng kiến (đề nghị ghi rõ để làm cơ sở xét sáng
kiến, nếu bỏ qua các bước này thì sáng kiến có thể không đề nghị công nhận)
4.1 Phân tích tình trạng giải pháp đã biết:
4.1.1 Đối với học sinh
Sử dụng biến và biến trung gian là những nội dung quan trọng trong chương trình tin học phổ thông, thường gặp trong các đề kiểm tra tin, thi chọn học sinh giỏi tin;
Nhiều khi để sử dụng biến không đúng cách sẽ dẫn đến các bài tập khá phức tạp Để khắc phục tình trạng đó, có thể dùng phương pháp đặt biến để chuyển về
các dạng quen thuộc mà ta đã biết cách làm Biến là yếu tố như một nhịp cầu nối
bài toán cần tìm ra cách giải với bài toán đã biết cách giải.
Chương trình hiện hành không dạy học một cách tường minh về sử biến trong giải bài tập tin học 8 nên đại đa số học sinh gặp khó khăn ngay cả với những bài tập nhìn vào đã thấy ngay biến trung gian Cụ thể, sử dụng biến chủ yếu được giới thiệu trong phần bài thực hành số 3 ( Chẳng hạn bài 1, Tr 35, SGK Tin học 8 và bài 2, Tr 36, SGK Tin học 8 ); các bài toán đó là rất dễ nhưng chương trình vẫn hướng dẫn chi tiết đặt các biểu thức nào bằng biến mới Tuy nhiên, có rất nhiều học sinh không hiểu và xem đó là mảng kiến thức không quan trọng, dẫn đến bỏ qua công cụ hữu hiệu này
4.1.2 Đối với giáo viên:
-
Trang 21 Nhiều giáo viên chưa quan tâm đúng mực đến sử dụng biến trong các bài tập
có sử dụng biến trung gian chỉ giới thiệu qua loa nên học sinh không thấy được vai trò của biến trung gian và sớm đi vào quên lãng;
- Đã có một số giáo viên dành nhiều thời gian, tâm huyết để bồi dưỡng cho
học sinh về chủ đề sử dụng biến, trong đó có phương pháp đặt biến trung gian, tuy nhiên chỉ bó hẹp cho các đối tượng học sinh giỏi, học sinh có năng khiếu về tin, cách dạy lại thiên về luyện thi kiểu “gà chọi” nên không đem lại được hứng thú học tập cho học sinh, không cho học sinh thấy được bản chất và sức mạnh của việc
sử dụng biến và biến trung gian
4.2 Nội dung đã cải tiến, sáng tạo để khắc phục những nhược điểm của giải pháp đã biết:
- Có rất nhiều tài liệu viết về sử dụng biến nhưng chưa có bất kỳ sản phẩm nào hội tụ các yếu tố (1) Dùng cho đối tượng học sinh lớp 8, lớp 9 ( cuối cấp THCS; (2) Được xây dựng một cách lôgic, đầy đủ; (3) Sử dụng biến trung gian làm công cụ để giải; (4) Là tài liệu giúp học sinh tự học, tự nghiên cứu; là tài liệu phục vụ trực tiếp cho việc dạy học của giáo viên và phụ huynh học sinh
Qua thực tiễn giảng dạy và nghiên cứu, tác giả nhận thấy để học sinh có thể
sử dụng hiệu quả biến trong giải bài tập tin học 8 cấp THCS, nâng cao hiệu quả dạy học môn Tin học 8 cần quan tâm cả bốn yếu tố đã nêu ở trên
4.2.1 Biến trung gian là gì?
Trước hết, Biến trung gian phải xem là không phải biến ban đầu đã cho của bài toán Phải dùng đến biến khác với biến đã cho là vì, với biến đã cho bài tập khó làm (có khi không làm được) Thay biến đã cho bởi một biến khác là mong rằng: Bài tập với biến mới dễ giải hơn bài toán đã cho
Biến trung gian cũng có thể hiểu đúng với ý nghĩa của từ trung gian (tức là không chính) Theo nghĩa này, đáng lẽ ra ta phải tìm biến đã cho của bài toán thì ta lại đi tìm biến trung gian Sau khi tìm được biến trung gian ta trở về tìm biến ban đầu
Việc giải bài tập bằng cách dùng biến trung gian có thể xem như là đáng lẽ
ta phải đi theo đường thẳng thì ta lại đi theo đường vòng nhưng dễ đi hơn để tới đích
Mặt khác cũng do trước hết ta tìm biến trung gian rồi mới trở về tìm biến ban đầu; cho nên cũng có thể xem việc giải bài tập bằng cách dùng biến trung gian như là một công việc được tách thành hai công đoạn dễ làm hơn
Đây là trường hợp giải các bài tập sử dụng biến nói chung
4.2.2 Sử dụng biến và biến trung gian trong chương trình
* Cú pháp khai báo biến: Var < Danh sách biến > : < Kiểu dữ liệu>;
dongia, thanhtien : Real;
Trang 3* Cú pháp gán giá trị cho biến: < Tên biến > := < Biểu thức >;
soluong := 10;
* Cú pháp gán giá trị cho biến bằng câu lệnh nhập từ bàn phím:
* In giá trị của biến ra màn hình:
Dạng 1: Bài toán cơ bản
Ví dụ: Viết chương trình nhập hai số, đổi giá trị hai số rồi in ra hai số.
a Hướng dẫn:
- Dùng các biến a, b để lưu hai số được nhập từ bàn phím;
- Gán cho biến tg (biến trung gian) giá trị của a.
- Gán giá trị của b cho a (Sau lệnh này a có giá trị của b)
- Gán giá trị của tg cho cho b (Sau lệnh này b có giá trị của tg = a).
b Chương trình:
Program Doi_Gia_Tri;
uses crt;
var a, b, tg:real;
Begin
clrscr;
write('nhap a: '); readln(a);
write('nhap b: '); readln(b);
writeln('Truoc khi doi a =',a:0:2,' va b= ',b:0:2);
tg:=a;
a:=b;
b:=tg;
writeln('Sau khi doi a =',a:0:2,' va b= ',b:0:2);
Readln;
End
Dạng 2: Bài toán mở rộng
Ví dụ: Viết chương trình nhập vào một mảng gồm N số nguyên Sắp xếp lại
mảng theo thứ tự tăng dần và in kết quả ra màn hình
a.Hướng dẫn:
Trang 4- Dùng biến n để lưu lượng số cần nhập.
- Dùng mảng để lưu các số vừa nhập
- Cho biến i chạy từ 1 đến N-1, đồng thời cho biến j chạy từ i+1 đến N: Nếu A[i]>A[j] thì đổi chổ A[i], A[j]
b Chương trình:
Program sapxepdayso;
Uses Crt;
Type Mang = ARRAY[1 50] Of Integer;
Var A:Mang;
N,i,j,Tg:Integer;
Begin
{Nhập mảng}
Write(‘Nhap N=’); Readln(N);
For i:=1 To N Do
Begin
Write(‘A[‘,i,’]=’); Readln(A[i]);
End;
{Sắp xếp}
For i:=1 To N-1 Do
For j:=i+1 To N Do
If A[i]>A[j] Then
Begin
Tg:=A[i];
A[i]:=A[j];
A[j]:=Tg;
End;
{In kết quả ra màn hình}
Writeln(‘Ket qua sau khi sap xep:’);
For i:=1 To N Do Write(A[i]:5);
Readln;
End
Dạng 3: Bài toán nâng cao dàng cho học sinh bồi dưỡng tin học THCS
Ví dụ: Hè đến rồi, Nam được bố dẫn đi chơi công viên Trong công viên có
nhiều gian hàng trò chơi, trong đó Nam thích nhất là gian trò chơi chọn số Người
ta viết sẵn một số dãy số số nguyên dương không được sắp xếp ( dãy này có N phần tử, các phần tử có giá trị khác nhau đôi một, N<=10000, các số của dãy có giá trị từ 1 đến 30000), sau đó họ đưa ra 1 số M (M<=N) và yêu cầu người chơi tìm số lớn thứ M trong dãy số này Nam vốn tính toán nhanh lẹ, nhưng đứng trước câu đố
Trang 5này Nam cũng nói: “Phải nhờ lập trình ta mới biết nhanh được!” Bạn hãy giúp Nam thực hiện công việc này
Dữ liệu vào: từ file văn bản CHONSO.INP bao gồm:
- Dòng đầu tiên là số N và M
- N dòng tiếp theo, mỗi dòng môt số là giá trị của các số trong dãy số
Dữ liệu ra: file văn bản CHONSO.OUT, gồm 1 dòng chứa 2 số K, L trong đó K chỉ số thứ tự của số cần tìm trong dãy và L là giá trị của số cần tìm
Ví dụ:
10 3 16 57 20 19 38 41 6 13 25 32
5 38
Chương trình:
program bt;
type mang=array[1 10000] of integer;
var n,m:integer;a,b:mang;f:text;
const fi='chonso.inp';
fo='chonso.out';
procedure nhap;
var i:integer;
begin
assign(f,fi);
reset(f);
read(f,n,m);
for i:=1 to n do
read(f,A[i]);
close(f);
end;
procedure sx;
var i,j,tam:integer;
begin
for i:=1 to n do
b[i]:=a[i];
for i:=1 to n-1 do
for j:=i+1 to n do
Trang 6if A[i]<A[j] then
begin
tam:=A[i];
A[i]:=a[j];
A[j]:=tam;
end;
end;
procedure xuli;
var i:integer;
begin
assign(f,fo);
rewrite(f);
for i:=1 to n do
if b[i]=a[m] then
begin
write(f,i,' ',A[m]);
close(f);
exit;
end;
end;
begin
nhap;
sx;
xuli;
end
Chú ý: Nếu trong bài tập xuất hiện “ Nhập số liệu bất kỳ” và “Hoán đổi” thì
ta thường sử dụng biến và biến trung gian; tương tự nếu trong bài tập xuất hiện nhập dữ liệu thì ta thường sử dụng biến Một điều lưu ý nữa là khi sử dụng biến nên đặt tên dễ hiểu có ý nghĩa liên quan đến các bài tập cho việc viết chương trình đơn giản dễ nhớ nhất
BÀI TẬP TỔNG HỢP
Câu 1: Viết chương trình nhập vào số kg gạo Giả sử ta có 1 số bao như sau: 20
kg, 10 kg, 5 kg, 2 kg, 1 kg
Tìm tất cả các cách cho gạo vào bao tương ứng với số gạo đã có
Ví dụ:
- Nhập số kg gạo: 8
- Cách 1: Bao 1kg: 8
- Cách 2: Bao 2kg: 1; Bao 1kg: 6
- Cách 3: Bao 5kg: 1; Bao 1kg: 3
- Cách 4: Bao 5kg: 1; Bao 2kg: 1; Bao 1kg: 1
- Cách 5: Bao 2 kg: 4
- Cách 6: Bao 5 kg: 1; Bao 1 kg: 3
Trang 7- Cách 7: Bao 2 kg: 2; Bao 1 kg: 4.
Chương trình:
uses crt;
var a,b20,b10,b5,b2,b1,c:integer;
begin
clrscr;
write('Nhap vao so kg gạo: ');
readln(a);
c := 1;
for b20 := 0 to a div 20 do
for b10 := 0 to a div 10 do
for b5 := 0 to a div 5 do
for b2 := 0 to a div 2 do
for b1:=0 to a do
begin
if b20*20+b10*10+b5*5+b2*2+b1=a then
begin
writeln('==> Cach: ',c);
c := c + 1;
if b20>0 then writeln('Bao 20: ',b20);
if b10>0 then writeln('Bao 10: ',b10);
if b5>0 then writeln('Bao 5: ',b5);
if b2>0 then writeln('Bao 2: ',b2);
if b1>0 then writeln('Bao 1: ',b1);
end; end;
readln;
end
Câu 2: Tiền điện sinh hoạt (Kỳ thi học sinh giỏi lớp 9 cấp thành phố Tam Kỳ năm học 2015 – 2016)
Để khuyến khích tiết kiệm điện, giá điện sinh hoạt được tính theo kiểu lũy tiến; nghĩa là nếu sử dụng càng nhiều điện thì giá mỗi số điện (1kWh) càng tăng lên Sau đây là bảng giá áp dụng cho các mức tiêu thụ điện năng:
Các bậc tiêu thụ điện (đồng/kWh)Giá
Bậc 1: Cho kWh từ 0 đến 50 1454
Bậc 2: Cho kWh từ trên 50 đến 100 1502
Bậc 3: Cho kWh từ trên 100 đến 200 1750
Bậc 4: Cho kWh từ trên 200 đến 300 2197
Bậc 5: Cho kWh từ trên 300 đến 400 2453
Bậc 6: Cho kWh từ trên 400 trở lên 2535
Hãy viết chương trình cho phép thực hiện các cơng việc sau:
Trang 8a) Tính số tiền cần thanh toán khi biết số kWh điện sử dụng trong tháng?
b) Tính số kWh điện đã sử dụng trong tháng khi biết số tiền được yêu cầu thanh toán?
Ví dụ:
Số kWh: 120 a) So tien: 182800 =1454*50 + 1502*50+ 1750*20
So tien: 182800 b) Số kWh: 120 Ngược lại
Chương trình:
Program tien_dien;
Var sochu, sotien,gia:real;
i:longint;
Begin
Repeat
Write('Nhap so kWh su dung: '); Readln(sochu);
until sochu>=0;
sotien:=0;
if sochu>400 then Begin sotien:=sotien+(sochu-400)*2535; sochu:=400 end;
if sochu>300 then Begin sotien:=sotien+(sochu-300)*2453; sochu:=300 end;
if sochu>200 then Begin sotien:=sotien+(sochu-200)*2197; sochu:=200 end;
if sochu>100 then Begin sotien:=sotien+(sochu-100)*1750; sochu:=100 end;
if sochu> 50 then Begin sotien:=sotien+(sochu- 50)*1502; sochu:= 50 end; sotien:=sotien+sochu*1454;
Writeln('a) So tien phai tra la: ',sotien:0:2);
repeat
Write('Nhap so tien phai tra: ');Readln(sotien);
until sotien>=0;
i:=0;
While sotien>=0 do
Begin
i:=i+1;
Case i of
0 50: gia:=1454;
51 100: gia:=1502;
101 200: gia:=1750;
201 300:gia:=2197;
301 400: gia:=2453
else gia:=2535;
end;
sotien:=sotien-gia;
End;
i:=i-1; sotien:=sotien+gia;
sochu:=i+ sotien/gia;
Writeln('b) So chu dien da dung: ',sochu:0:2);
Trang 9readln;
End
Câu 3: MUA HÀNG (Kỳ thi học sinh giỏi tin học lớp 9 cấp tỉnh Quảng Nam năm học 2016 – 2017)
Tâm mở một cửa hàng bán văn phòng phẩm Trong ngày khai trương, để “mua may bán đắt”, Tâm quan niệm rằng khi khách hàng mua một sản phẩm nào đó thì
phải trả đúng với số tiền của sản phẩm để Tâm không phải trả lại tiền thừa cho khách hàng
Nam là bạn thân của Tâm đến mua hàng Nam hiện có N tờ tiền, mỗi tờ tiền M đều có giá trị khác nhau Giả thiết rằng với số tiền của Nam hiện có đều có thể mua được một số sản phẩm trong cửa hàng
Yêu cầu: Vì Nam không quen với việc tính toán, em hãy giúp Nam tính xem với N
tờ tiền như vậy thì Nam không thể mua sản phẩm có giá trị nhỏ nhất (Min) là bao nhiêu?
Dữ liệu vào: File văn bản BUY.INP
- Dòng thứ nhất là số N (0 < N ≤ 100);
- Dòng thứ hai có N tờ tiền, mỗi tờ tiền M cách nhau một khoảng trắng (0<M<109)
Dữ liệu ra: File văn bản BUY.OUT
- Gồm một số nguyên dương Min cần tìm.
5
1 2 4 9 100
8
3
1 2 3
7
Chương trình :
const fi='buy.inp';
fo='buy.out';
maxn=100;
var a:array[1 maxn] of longint;
pos:byte;
N,dem:longint;res:qword;
f:text;
procedure input;
var i:longint;
begin
assign(f,fi); reset(f);
readln(f,N);
Trang 10for i:=1 to N do read(f,a[i]);
close(f);
end;
procedure sapxep;
var i,j:byte; tg:longint;
begin
for i:=1 to n-1 do
for j:=i+1 to n do
if a[i]>a[j] then
begin
tg:=a[i];
a[i]:=a[j];
a[j]:=tg;
end;
end;
procedure solu;
var i:longint;
begin
sapxep;
res:=1;
for i:=1 to N do
if res<a[i] then break
else res:=res+a[i];
end;
procedure output;
var i:byte;
begin
assign(f,fo); rewrite(f);
writeln(f,res);
close(f);
end;
begin
input;
solu;
output;
end
4.3 Các điều kiện, phương tiện cần thiết để thực hiện và áp dụng giải pháp
- Sáng kiến có thể áp dụng vào các tiết học trên lớp trong hoạt động tìm tòi và
mở rộng dạy học theo chuổi các hoạt động của năm học 2019 – 2020; giáo viên có thể dạy lồng ghép trong các tiết ngoại khóa; đặc biệt sáng kiến áp dụng rất hiệu quả trong việc bồi dưỡng học sinh giỏi môn Tin lớp 8, lớp 9
Trang 11- Sáng kiến có thể được sử dụng làm tài liệu tự học, tự nghiên cứu cho đối tượng học sinh khá giỏi môn Tin lớp 8, lớp 9 (cuối cấp THCS) hoặc làm tài liệu giảng dạy cho giáo viên bộ môn và quý phụ huynh học sinh
4.4 Các bước thực hiện giải pháp, cách thức thực hiện giải pháp
Như đã trình bày ở các mục trên sáng kiến có thể áp dụng cho các đối tượng học sinh lớp 8, lớp 9 (cuối cấp THCS), tuy nhiên sẽ thuận lợi hơn nếu học sinh đã được học về sử dụng biến trong các tiết dạy chính khóa
Ghi chú: Nếu áp dụng sớm cho đối tượng là học sinh lớp 8 thì giáo viên cần
dành thời gian nhất định để bổ túc kiến thức cho học sinh, giúp các em vượt qua những khó khăn ban đầu
Nhằm đem lại hiệu quả cao nhất, việc triển khai sáng kiến này vào trong thực tiễn dạy học cần được lên kế hoạch thực hiện một cách chi tiết về nội dung, phương pháp, phương tiện, thời gian, cách thức tổ chức dạy học và nên thực hiện theo quy trình sau:
Bước 1: Giúp học sinh nắm vững cách sử dụng biến (thông qua các tiết dạy
chính khóa, ngoại khóa, …tùy vào đối tượng học sinh);
Bước 2: Tuần tự giới thiệu cho học sinh các dạng biến như trình bày trong
sáng kiến và kế hoạch đã lập ra ở bước 1;
Bước 3: Đánh giá khả năng đạt được bằng việc lồng ghép các các biến trong
các bài kiểm tra (chính khóa, ngoài giờ lên lớp), các tình huống thực tiễn, các đề thi học sinh giỏi các cấp
Việc lập kế hoạch phải căn cứ vào kế hoạch năm học của nhà trường và tình hình thực tế của giáo viên, học sinh Có thể thực hiện một cách linh động theo các hình thức dưới đây:
- Lồng ghép trong các tiết dạy chính khóa (mở rộng kiến thức)
- Kết hợp trong các tiết ngoại khóa, các tiết sinh hoạt chuyên đề
- Dạy chuyên đề bồi dưỡng học sinh giỏi
- Phát tài liệu và hướng dẫn học sinh tự học, tự nghiên cứu
4.5 Chứng minh khả năng áp dụng của sáng kiến
- Sáng kiến đã được áp dụng vào dạy trong các tiết dạy bồi dưỡng học sinh giỏi môn Tin năm 2017 và kết quả bồi dưỡng học sinh giỏi: Năm học 2016 – 2017:
Vị thứ tư toàn đoàn cấp huyện môn Tin 8; Năm học 2017 – 2018: Vị thứ Nhì toàn đoàn cấp huyện môn Tin 8
- Sáng kiến có thể áp dụng vào các tiết học trên lớp trong hoạt động tìm tòi
và mở rộng dạy học theo chuổi các hoạt động của năm học 2019 – 2020, giáo viên
có thể dạy lồng ghép trong các tiết ngoại khóa, đặc biệt sáng kiến áp dụng rất hiệu quả trong việc bồi dưỡng học sinh giỏi lớp 8, bồi dưỡng học sinh giỏi lớp 9