Tải bản đầy đủ (.doc) (15 trang)

skkn sử dụng hàm sinh số ngẫu nhiên random tạo test cho một số bài tập cơ bản tin học 11

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (99.69 KB, 15 trang )

MỤC LỤC
TRANG
1. MỞ ĐẦU......................................................................................................2
1.1
1.2
1.3
1.4

Lý do chọn đề tài..............................................................................2
Mục đích nghiên cứu........................................................................2
Đối tượng nghiên cứu.......................................................................3
Phương pháp nghiên cứu..................................................................3

2. NỘI DUNG CỦA SÁNG KIẾN KINH NGHIỆM....................................3
2.1. Cơ sở lý luận của sáng kiến kinh nghiệm.................................................3
2.2. Thực trạng vấn đề trước khi áp dụng sáng kiến kinh nghiệm...................3
2.3. Các sáng kiến kinh nghiệm hoặc các giải pháp đã sử dụng
để giải quyết vấn đề...................................................................................4
2.3.1Sinh một số, kí tự ngẫu nhiên…………………………………….....5
2.3.2 Sinh mảng N số ngẫu nhiên, xâu kí tự có độ dài ngẫu nhiên……….6
2.3.3 Sinh ngẫu nhiên tệp…………………………………………………7
2.3.4 Một số ví dụ…………………………………………………………8
2.4. Hiệu quả của sáng kiến kinh nghiệm đối với hoạt động
giáo dục, với bản thân, đồng nghiệp và nhà trường...................................12
3. KẾT LUẬN, KIẾN NGHỊ..........................................................................12
1. Kết luận...................................................................................................12
2. Kiến nghị.................................................................................................12

1



1. MỞ ĐẦU
1.1 Lý do chọn đề tài:

Sự bùng nổ thông tin đã tác động lớn đến công cuộc phát triển kinh tế xã hội
người. Với con người của thời đại hiện nay ngoài các kiến thức về chuyên môn thì
hầu hết mọi người luôn sử dụng máy tính như một công cụ trợ giúp. Đảng và Nhà
nước đã xác định rõ ý nghĩa và tầm quan trọng của tin học và công nghệ thông tin,
truyền thông cũng như những yêu cầu đẩy mạnh của ứng dụng công nghệ thông tin,
đào tạo nguồn nhân lực đáp ứng yêu cầu công nghiệp hóa, hiện đại hóa, mở cửa và
hội nhập, hướng tới nền kinh tế tri thức của nước ta nói riêng – thế giới nói chung.
Chính vì xác định được tầm quan trọng đó nên Nhà nước ta đã đưa môn tin
học vào trong nhà trường và ở chương trình THPT tin học còn cho học sinh một
vốn kiến thức về công nghệ thông tin và các kỹ năng để có thể làm việc sau khi tốt
nghiệp phổ thông.
Học sinh THPT là nguồn lao động trẻ có thể sử dụng ngay sau khi tốt nghiệp
do vậy việc được tiếp cận công nghệ thông tin từ trong nhà trường phổ thông sẽ
giúp cho học sinh có thể tự tin hơn trong công việc. Trong trường ngoài các tiết lý
thuyết về công nghệ thông tin thì việc thực hành đóng một vai trò quan trong và
quyết định đến các kỹ năng sau này của học sinh. Từ lâu nay HS có thể rất thuộc lý
thuyết nhưng khi bắt tay vào thực tế thì thường rất lúng túng và không có khả năng
làm việc theo nhóm độc lập và theo nhóm.
Các bài tập và thực hành trong chương trình lớp 11 giúp học sinh:
+ Biết một số khái niệm cơ bản về lập trình và ngôn ngữ bậc cao
+ Vận dụng các cơ sở dữ liệu và kiến thức về thuật toán
+ Hình thành và phát triển tư duy logic
+ Hình thành các bước để giải quyết vấn đề nêu ra
+ Có thể áp dụng lập trình vào giải các bài toán thực tế
+ Có thái độ ham thích môn học và có tính kỷ luật cao và có khả năng làm
việc theo nhóm.
Kiểm tra đánh giá các thuật toán của học sinh thường chỉ được chạy thử với

các test nhỏ do vậy không phản ánh được chính xác sự tối ưu của thuật toán. Việc
tạo ra các test lớn bằng cách thủ công rất mất thời gian, nhàm chán. Với những lý
do trên tôi chọn đề tài về “Sử dụng hàm sinh số ngẫu nhiên Random tạo test cho
một số bài tập cơ bản tin học 11”
1.2 Mục đích nghiên cứu.

Đưa ra một số đoạn chương trình tạo những test để chạy thử các bài toán cơ
bản và nâng cao trong chương trình lớp 11. Việc tạo test bằng hàm random sẽ
nhanh chóng hơn và tùy theo yêu cầu bài toán mà giáo viên có thể định hướng được
2


kết quả theo ý mình. Việc tạo các test lớn cũng sẽ giúp học sinh nhận ra các sai lầm
của mình khi thiết kế thuật toán chạy với bộ dữ liệu lớn.
1.3 Đối tượng nghiên cứu.
Học sinh khối 11 trường THPT Nông Cống 1.
Máy tính, máy chiếu để chạy thử.
1.4 Phương pháp nghiên cứu

Phương pháp phân tích thuật toán, kiểm tra đánh giá năng lực học sinh, phát
triển tư duy logic. Một số tài liệu tham khảo và tìm kiếm thông tin trên internet.
2. Nội dung sáng kiến
2.1. Cơ sở lí luận của sáng kiến kinh nghiệm.
Nghị quyết số 29/NQ-TW Hội nghị Trung ương 8 khóa XI về đổi mới căn bản,
toàn diện giáo dục và đào tạo nêu rõ: "Tiếp tục đổi mới mạnh mẽ phương pháp dạy
và học theo hướng hiện đại; phát huy tính tích cực, chủ động, sáng tạo và vận dụng
kiến thức, kỹ năng của người học; khắc phục lối truyền đạt một chiều, ghi nhớ máy
móc. Tập trung dạy cách học, cách nghĩ, khuyến khích tự học, tạo cơ sở để người
học tự cập nhật và đổi mới tri thức, kỹ năng, phát triển năng lực". Nhận thức được
tầm quan trọng của việc tăng cường đổi mới kiểm tra, đánh giá thúc đẩy đổi mới

phương pháp dạy học, Sở Giáo dục và Đào tạo đã tập trung chỉ đạo đổi mới các
hoạt động này nhằm tạo sự chuyển biến cơ bản về tổ chức hoạt động dạy học, góp
phần nâng cao chất lượng giáo dục trong các trường trung học.
+ Chỉ thị 40/CT của Ban bí thư Trung ương Đảng: Đổi mới nội dung chương
trình là tích cực áp dụng một cách sáng tạo của phương pháp tiên tiến, hiện đại,
ứng dụng công nghệ thông tin vào hoạt động dạy và học...
+ Xã hội hiện nay thì những kiến thức cơ bản về thông tin và các công nghệ
cao là những kiến thức rất cần thiết đối với mỗi người nhất là thế hệ trẻ hiện nay.
2.2. Thực trạng vấn đề trước khi áp dụng sáng kiến kinh nghiệm.
Việc học ngôn ngữ lập trình pascal giúp học sinh phát triển tư duy khá tốt
nhưng việc tạo hứng thú và tạo sự yêu thích môn học cho học sinh lại khó khăn.
Quá trình thực hiện đề tài tại trường THPT Nông Cống 1 tôi có một số thuận
lợi và khó khăn sau:
2.2.1. Thuận lợi:
* Nhà trường:
- Nhà trường đã tạo điều kiện để học sinh có điều kiện tốt nhất để học, tạo
điều kiện sắm sửa máy móc, trang thiết bị phục vụ cho việc dạy và học môn Tin
học. Nhà trường đã tạo điều kiện tối đa để HS có đủ thời gian và máy móc để thực
hành.
3


- Nhà trường đã có 2 phòng tin (mỗi phòng 25 máy+1 máy chiếu) trong đó
có một phòng máy tính xách tay.
* Học sinh:
Đầu vào của học sinh các năm của trường khá cao đó là tiền đề tốt để phát
triển môn học lập trình. Đa số học sinh có ý thức học tập và có nhiều em yêu thích
môn lập trình.
2.2.2. Khó khăn:
* Nhà trường:

Tuy nhà trường đã có 2 phòng máy nhưng cũng chỉ thực hiện được một phần
nào số tiết thực hành vì số lớp đông (24 lớp).
Nhà trường chưa có giáo viên chuyên trách để quản lý phòng máy nên nhiều
lúc máy tính trục trặc không sửa chữa kịp thời. Phòng Thực hành tin học chưa đủ
tiêu chuẩn(phòng chật, không thông thoáng) nên cũng gây khó khăn cho các tiết
thực hành nhất là những hôm thời tiết quá nóng.
* Giáo viên:
Tài liệu của môn tin học trong nhà trường khá ít do đó gây khó khăn cho việc
nâng cao trình độ.
Đời sống giáo viên còn nhiều khó khăn nên việc tập trung tối đa cho môn
học cũng bị ảnh hưởng.
* Học sinh:
Lập trình có đặc trưng riêng so với các môn học khác nên sự tiếp cận của học
sinh khá khó khăn.
Môn lập trình đòi hỏi phải có máy tính để có thể kiểm tra các chương trình
nhưng phần lớn học sinh không có máy tính riêng. Thời gian học cũng khó sắp xếp
do vậy nhiều học sinh yêu thích môn tin cũng không có điều kiện phát triển.
Tư tưởng học để thi đại học vẫn còn nặng trong học sinh nên thời gian học
các môn không phải môn khối là không đủ để phát triển.
2.3 Các sáng kiến kinh nghiệm hoặc các giải pháp đã sử dụng để giải quyết
vấn đề.
Trong ngôn ngữ lập trình Pascal hàm random(N) sinh một số ngẫu nhiên, với
N kiểu Word thì thì hàm random(N) sinh một số ngẫu nhiên kiểu nguyên nằm trong
khoảng 0 đến N-1. Hàm Random() sinh một số ngẫu nhiên trong đoạn (0..1). Dựa
vào hàm Random này tôi đưa ra một số đoạn chương trình tạo một test cho một số
bài tập đơn giản và nâng cao trong chương trình lớp 11. Trước khi gọi hàm Random
ta cần gọi thủ tục Randomize để máy tính khởi động cơ chế phát sinh số ngẫu
nhiên.
4



2.3.1 Sinh một số, kí tự ngẫu nhiên.
a. Sinh một số ngẫu nhiên nguyên a không âm
Đoạn chương trình:
Procedure sinh(m:integer);
Begin
Randomize;
a:= random(m);
end;
b. Sinh một số ngẫu nhiên a
Đoạn chương trình:
Procedure sinh(n,m:integer);
Begin
Randomize;
a:= random(m)-random(m);
end;
c. Sinh số ngẫu nhiên nguyên từ n đếm m (nTa có random(m-n+1) sinh số ngẫu nhiên nguyên từ 0 đếm m-n do đó
n+random(m-n+1) sinh các số từ n đến n+m-n=m. Từ nhận xét đó ta có đoạn
chương trình sau:
Đoạn chương trình:
Procedure sinh(n,m:integer);
Begin
Randomize;
a:= n+random(m-n);
end;
d. Sinh một kí tự ngẫu nhiên.
Ta có các kí tự trong bảng mã ASCII có mã thập phân từ 0 đến 255 do đó ta sử
dụng hàm CHR(chuyển sang kí tự tương ứng với số thứ tự). Hàm chuyển như sau.
Đoạn chương trình:

Function kitungaunhien:char;
Begin
Kitungaunhien:=CHR(random(255));
End;
Khi ta muốn sinh ngẫu nhiên các kí tự ‘A’ đến ‘Z’ thì ta có nhận xét: Kí tự ‘A’
có số thứ tự 65 còn ‘Z’ có số thứ tự 90 do đó:
Kitungaunhien:=CHR(random(25)+60);
5


Từ ví dụ trên ta có thể sinh ngẫu nhiên một kí tự trong khoảng nào đó mà đề
bài quy định.
e. Sinh ngẫu nhiên một số thực.
Hàm Random(); sinh các số ngẫu nhiên trong khoảng (0,1) do vậy nếu ta chỉ
cần sinh các số ngẫu nhiên trong khoảng này thì chỉ cần viết câu lệnh a:=Random();
Nếu ta muốn sinh các số thực ngẫu nhiên lớn hơn một thì ta có thực hiện hàm.
Đoạn chương trình:
Function sothuc:real;
Begin
Sothuc:=random()*random(10000);
{nếu số thực âm thì sothuc:=random()*(random(10000)-random(10000));}
End;
Khi chúng ta thay đổi kiểu dữ liệu và tùy theo bài toán ta có thể tạo ra các test
để kiểm tra tính đúng đắn của các bài toán mà học sinh làm. Việc sinh một số ngẫu
nhiên, một kí tự ngẫu nhiên sẽ giúp giáo viên tạo các test cho các tập ở chương
III(SGK tin học 11) một cách dễ dàng từ đó có thể đánh giá các giải thuật của học
sinh một cách chính xác.
2.3.2 Sinh mảng N số ngẫu nhiên, xâu kí tự có độ dài ngẫu nhiên.
Sinh ngẫu nhiên N số, kí tự ngẫu nhiên sử dụng kiểu dữ liệu mảng để lưu.
a. Sinh n số ngẫu nhiên không âm cho

Đoạn chương trình:
Procedure sinh(m:word);
Var i:integer;
Begin
Randomize;
For i:=1 to n do a[i]:=random(m);
End;
b. Sinh n số ngẫu nhiên cho mảng a
Đoạn chương trình:
Procedure sinh(m:word);
Var i:integer;
Begin
Randomize;
For i:=1 to n do a[i]:=random(m)-random(m);
End;
c. Sinh ngẫu nhiên n số nguyên trong khoảng a đến b
6


Dựa vào nhận xét của mục a ta có thủ tục sinh ngẫu nhiên n số nguyên từ a
đến b(aĐoạn chương trình:
Procedure sinh(n,a,b:integer);
Var i:integer;
Begin
Randomize;
For i:=1 to n do songuyen[i]:=a+random(b-a+1);
End;
d. Sinh ngẫu nhiên N số thực cho mảng
Sử dụng đoạn chương trình sinh một số thực ở mục a ta sẽ có một mảng ngẫu

nhiên gồm n số thực.
Đoạn chương trình:
Function sothuc:real;
Var i:integer;
Begin
For i:=1 to n do
Sothuc[i]:=random()*random(10000);
{số thực âm thì sothuc[i]:=random()*(random(10000)-random(10000));}
End;
e. Sinh xâu kí tự có độ dài ngẫu nhiên.
Trong các bài toán xử lí xâu chúng ta thường tạo các test có số lượng kí tự nhỏ
vì việc gõ các test có lượng kí tự lớn rất mất thời gian và nhàm chán. Từ đó dễ dẫn
đến không kiểm tra được độ chính xác của giải thuật khi xử lý xâu lớn và không
kiểm tra đúng đắn thời gian chạy(có thể giải thuật sẽ tốn rất nhiều thời gian); đối
với việc bồi dưỡng học sinh giỏi thì thời gian chạy cũng rất quan trọng. Sau đây tôi
sẽ đưa ra một hàm tạo một xâu ngẫu nhiên gồm các kí tự từ ‘A’ đến ‘Z’ các trường
hợp còn lại làm tương tự.
Đoạn chương trình.
Function
xaungaunhien:ansistring;
Var
i,n:word;
Begin
Xaungaunhien:=’’;
N:=1+random(500);
For i:=1 to n do
xaungaunhien:=xaungaunhien+chr(random(25)+65);
End;

7



Nhận xét: Từ các đoạn chương trình trên ta có thể tạo ra các bộ test cho các
bài toán cơ bản trong chương IV(SGK tin học 11).
2.3.3 Sinh tệp ngẫu nhiên.
Sử dụng các đoạn chương trình ở mục a, b ta có thể lưu các giá trị ngẫu
nhiên sinh ra vào các tệp. Việc làm này sẽ giúp cho giáo viên dễ dàng hơn trong
việc kiểm tra và bồi dưỡng học sinh giỏi(việc tạo các tệp để test giúp chấm bằng
phần mềm tự động dễ dàng và nhanh chóng).
Sau khi có input bằng cách sinh số ngẫu nhiên ta chạy code của mình để sinh
output.
VD1: Tạo tệp chứa các số nguyên dương, mỗi số cách nhau bởi dấu cách.
Đoạn chương trình:
Procedure sinh(m:word);
Var i:integer;
Begin
Randomize;
For i:=1 to n do Write(f1,a[i]:=random(m)),’ ‘);
End;
VD2: Tạo tệp chứa xâu kí tự gồm các kí tự từ ‘A’ đến ‘Z’ có độ dài ngẫu nhiên(sử
dụng đoạn chương trình ở muc 2.3.2)
Đoạn chương trình.
Function
xaungaunhien:ansistring;
Var
i,n:word;
F1:text;
Begin
Assign(f1,’xaukitu.inp’);rewrite(f1);
Xaungaunhien:=’’;

N:=1+random(500);
For i:=1 to n do
xaungaunhien:=xaungaunhien+chr(random(25)+65);
write(f1,xaungaunhien);
close(f1);
End;
2.3.4 Một số ví dụ.
Dựa trên các hàm và thủ tục đã trình bày ở mục 2.3.3 tôi đưa ra một số bài
toán hay dùng trong chương trình.
Bài toán 1: Sinh một mảng ngẫu nhiên tăng.
Thuật toán:
- Sinh ngẫu nhiên phần tử đầu tiên: a[1]:=random(n);
8


- Phần tử thứ 2 trở đi thì được sinh bằng phần tử trước đó cộng thêm một
lượng ngẫu nhiên: a[i]:=a[i-1]+random(n);
Đoạn chương trình:
Procedure
sinh(n:integer);
Var
i:integer;
Begin
Randomize;
a[1]:=random(n);
for i:=2 to n do a[i]:=a[i-1]+random(n);
end;
{chương trình chính ta chỉ cần gọi sinh(n) để tạo mảng tăng dần}
Nhận xét: Từ bài toán này ta có thể sinh tệp ngẫu nhiên tăng như sau:
Procedure

sinh(n:integer);
Var
f:text;
i:integer;
x:longint;
Begin
Randomize;
Assign(f,fi);{fi được khai báo với một tên tệp cho trước}
x:=random(n);
for i:=2 to n do
begin
x:=x+random(n);
write(f,x,’ ‘);
end;
end;
Bài tập áp dụng: Sinh mảng giảm dần.
Bài toán 2: Sinh tệp cấp số cộng (Tạo test bài 5 trang 79 SGK tin học 11)
Thuật toán:
- Sinh số hạng đầu tiên và công sai d như sau: x:=random(n); d:=random(n)+1;
- Từ số thứ 2 sinh bằng cách lấy số trước đó cộng với d.
Đoạn chương trình:
Procedure sinh(n:integer);
Var f:text;
i,d:integer;
x:longint;
Begin
Randomize;
9



Assign(f,fi);{fi được khai báo với một tên tệp cho trước}
x:=random(n);
d:=random(n)+1; {cộng thêm 1 để tránh trường hợp d=0}
for i:=2 to n do
begin
x:=x+random(n);
write(f,x,’ ‘);
end;
end;
Nhận xét: Từ bài toán sinh mảng cấp số cộng ta có thể sinh mảng cấp số nhân một
cách dễ dàng.
Bài toán 3: Sinh ngẫu nhiên mảng có tỉ lệ 1:k
Thuật toán:
- t:=sum(a[1..n]) {t là tổng các số}
- Muốn chia mảnh thành hai phần a[1..i] và a[i+1..n] có tổng gấp nhau k lần
thì ta phải có:
+ Tổng các số phải chia hết cho (k+1): Giả sử t1=t div (k+1) và tk=t-t1;
+ Nếu tồn tại i (i<=i<=n) thì sum(a[1..i])=t1 hoặc sum(a[1..i])=tk.
Ta chọn d=random(m div 2)+1 là điểm chia hai phần. Ta lại chọn ngẫu nhiên
một trong hai trường hợp.
Trường hợp 1: Đoạn a[1..d] bằng k lần đoạn còn lại.
Trường hợp 2: Đoạn a[(d+1)..n] bằng k lần đoạn a[1..d].
Đoạn chương trình:
Procedure Sinh(m,k:word);
Var i,d,t:longint;
Begin
d:=random(m div 2)+1;
{d là điểm chia và trong khoảng từ 1 đến m div 2 - 1}
for i:=1 to d do
begin

a[i]:=random(m);
t:=t+a[i];
end;
if random(2)=0 then a[d]:=a[d]+ (k-1)*t
{đoạn a[1..d] gấp k lần đoạn a[(d+1)..n]}
else t:=t*k; {đoạn a[(d+1)..n] gấp k lần đoạn a[1..d]}
if i:=d+1 to n-1 do
begin
a[i]:=random(t);
10


t:=t=a[i];
end;
a[n]:=t;
end;
Nhận xét: Nếu k=1 thì bài toán trở thành bài toán chia tỉ lệ 1:1;
Bài toán 4: Sinh ngẫu nhiên đều.
Bài toán sinh ngẫu nhiên mảng nguyên a n phần tử tạo thành k đoạn liên tiếp
có tổng bằng nhau.
Thuật toán:
Chọn ngẫu nhiên số lượng phần tử trong đoạn là random(n div k)+1, khi đó
số lượng các phần tử phát sinh sẽ không vượt quá k*(n div k)<=n. Sau đó ta chỉnh
cho số lượng đúng bằng n.
- Giả sử a[c..d] là đoạn thứ i cần sinh ngẫu nhiên sao cho:
a[c]+a[c+1]+a[c+2]+..+a[d]=t;
- Ta sinh đoạn này như sau(ta làm tương tự như bài toán 3)
+ Gán t1:=t;{t1 là giá trị còn lại của tổng trong đoạn}
+ Gán giá trị ngẫu nhiên từ 0 đến t1 cho các phần tử a[c..d-1]
+ Đồng thời chỉnh giá trị còn lại của tổng đoạn: t1:=t1-a[i] (với i =c..d-1)

Khi đó thì ta có: a[c]+a[c+1]+a[c+2]+..+a[d-1]+ Ta đặt giá trị còn lại của tổng đoạn vào phần tử cuối: a[d]:=t1;
Đoạn chương trình.
Procedure sinh(n,k,t;integer);
Var i,j,p,s,t1:integer;
Begin
S:=n div k;{s là số phần tử tối đa trong đoạn}
i:=0;
for j:=1 to k do {sinh đoạn thứ j}
begin
t1:=t;
for p:=1 to random(s) do
begin
inc(i);
a[i]:=random(t1);
t1:=t1-a[i];
end;
inc(i); {phần tử cuối của đoạn}
a[i]:=t1;
end;
11


for i:=i+1 to n do a[i]:=0;{ các phần tử còn lại để giá trị bằng 0}
end;
Bài toán 5: Sinh ngẫu nhiên xâu đối xứng.
Bài toán kiểm tra một xâu có phải là xâu đối xứng hay không rất thường gặp
trong các đề thi do vậy việc tạo các test để kiểm tra cũng rất cần thiết.
Việc tạo các xâu không đối xứng khá đơn giản ta chỉ cần sinh xâu ngẫu nhiên
là được khi đó tỉ lệ xâu không đối xứng là rất cao. Do vậy ở đây tôi chỉ trình bày

sinh một xâu đối xứng.
Thuật toán:
+ Sinh ngẫu nhiên các kí tự trong bảng mã ASCII từ kí tự có số thứ tự 34 trở
đi.
Nếu n chẵn thì ta sinh ngẫu nhiên xâu có độ dài n div 2 sau đó gán giá trị cho
phần còn lại của xâu bằng xâu đảo ngược của xâu mới sinh ra.
Nếu n lẻ thì ta sinh ngẫu nhiên xâu có độ dài (n-1) div 2 kí tự giữa ta chọn
một kí tự ngẫu nhiên sau đó ta gán giá trị cho phần còn lại.
Đoạn chương trình:
procedure xaungaunhien(n:integer; st:ansistring);
Var i,n:word;
Xau:ansistring;
Begin
Xau:=’’;
If n mod 2 =0 then
Begin
For i:=1 to n div 2 do xau:=xau+chr(random(221)+34);
St:=xau;
For i:= n div 2 downto n do st:=st+xau[i];
End
Else
Begin
For i:=1 to (n-1) div 2 do xau:=xau+chr(random(221)+34);
St:=xau+chr(random(221)+34);
For i:= (n-1) div 2 downto n do st:=st+xau[i];
End;
End;
2.4. Hiệu quả của sáng kiến kinh nghiệm đối với hoạt động giáo dục, với bản
thân, đồng nghiệp và nhà trường.
Sau qua trình áp dụng đề tài vào giảng dạy, việc đánh giá, tinh chỉnh thuật toán

của học sinh khá tốt. Trong quá trình dạy thì việc kiểm thử kết quả của học sinh là
rất quan trọng từ đó có thể rút ra rất nhiều kinh nghiệm trong việc xử lý nhất là xử
12


lý số lớn. Việc sử dụng hàm random tạo các test giúp giáo viên có thể tạo ra các test
lớn một cách nhanh chóng qua đó việc kiểm tra đánh giá cũng hiệu quả hơn. Trong
quá trình học sinh làm bài thường chỉ kiểm tra các test nhỏ do đó việc kiểm tra
thuật toán có tính đúng đắn với các trường hợp khác mang tính cảm tính và cho
rằng thuật toán là đúng. Tuy nhiên nhiều trường hợp thuật toán đó chỉ đúng với một
vài test nhỏ còn khi chạy các test lớn hơn sẽ gặp nhiều khó khăn như: về kiểu dữ
liệu, thời gian… Trong qua trình dạy các lớp khối 11 giúp học sinh phân tích các ý
tưởng thuật toán của mình một cách logic hơn và giúp học sinh có cách suy nghĩ
bao quát vấn đề, tưu duy tốt hơn.
Đối với việc bồi dưỡng học sinh giỏi thì việc tạo các test lớn giúp giáo viên và
học sinh chỉ ra được nhiều vấn đề để điều chỉnh thuật toán, các lỗi thường gặp khi
chạy với bộ test lớn. Từ đó học sinh sẽ không bị mất điểm một cách đáng tiếc trong
các kỳ thi. Trong qua trình dạy bồi dưỡng học sinh khi áp dụng đề tài này tôi cũng
thu được nhiều kinh nghiệm quý từ đó có kết quả khá tốt. Cụ thể
- Năm 2012-2013: Đạt 3 giải (1 ba, 2 khuyến khích)
- Năm 2013-2014: Đạt 2 giải (1 nhì, 1 khuyến khích)
- Năm 2015-2016: Đạt 2 giải (1 nhì, 1 ba)
3. KẾT LUẬN, KIẾN NGHỊ
1. Kết luận
Thông qua sử dụng hàm sinh số ngẫu nhiên Random tạo test cho một số
bài tập cơ bản:
Học sinh và giáo viên đánh giá và lựa chọn được các phương án tối ưu để giải
quyết các bài toán. Việc kiểm thử với các test lớn giúp học sinh trưởng thành hơn
trong cách tư duy thuật toán, đúc kết nhiều kinh nghiệm trong quá trình thực hiện
chương trình.

Từ việc kiểm tra đánh giá học sinh giáo viên cũng rút ra được nhiều kinh nghiệm
và biết được cách suy nghĩ của học sinh từ đó điều chỉnh học sinh đi đúng hướng.
Tạo được kinh nghiệm quý báu cho các năm học tiếp theo.
2. Kiến nghị
Để tạo được nguồn lao động trẻ có chất lượng cao trong ngành công nghệ
thông tin thì ngay trong khi học THPT việc đầu tư cơ sở vật chất và áp dụng công
nghệ vào giảng dạy là rất quan trọng. Do vậy tôi kiến nghị các cấp, các ngành có cơ
chế tạo điều kiện xây dựng cơ sở vật chất và thời lượng chương trình để phát triển
môn lập trình trong trường THPT.
Trên đây là một số kinh nghiệm của tôi khi dạy chương trình tin học 11 và bồi
dưỡng học sinh giỏi. Tuy chỉ là một phần rất nhỏ về cách tạo một số test cơ bản để
đánh giá các thuật toán của học sinh nhưng cũng đã có tác dụng tốt trong dạy học
lập trình. Đề tài của tôi vẫn đang còn nhiều vấn đề cần hoàn thiện rất mong sự góp
13


ý của đồng nghiệp và các thầy cô giáo có kinh nghiệm để đề tài thực sự có hiệu quả
trong giảng dạy.
Xin chân thành cảm ơn.

Xác nhận của thủ trưởng đơn vị

Thanh Hóa, Ngày 05/05/2016
Tôi xin cam đoan đây là SKKN của mình
viết, không sao chép nội dung người khác.
NGƯỜI THỰC HIỆN ĐỀ TÀI

Vũ Anh Minh

14



TÀI LIỆU THAM KHẢO
1. Sách giáo khoa tin học 11 - Hồ Sĩ Đàm, NXB Giáo dục
2. Sách bài tập tin học 11 - Hồ Sĩ Đàm, Nguyễn Thanh Tùng, NXB Giáo dục
3. Sáng tạo trong thuật toán và lập trình (Tập 1) – Nguyễn Xuân Huy, NXB Giáo
dục
4. Tài liệu tập huấn bồi dưỡng học sinh giỏi Sở giáo dục và đào tạo Thanh Hóa
5. Một số tài liệu trên mạng Internet.

15



×