ĐỀ cƯƠng sÁng kiẾn - c2tqkhai.pgdninhhoa.edu.vn
TRANSCRIPT
UBND THỊ XÃ NINH HÒA
PHÒNG GIÁO DỤC VÀ ĐÀO TẠO
Kính gửi: Hội đồng Xét duyệt sáng kiến thị xã
ĐỀ CƯƠNG SÁNG KIẾN
Đề tài: “Sử dụng phần mềm chấm bài Themis góp phần nâng cao
chất lượng bồi dưỡng học sinh giỏi tin học 9”
Họ và tên: Trần Minh Thọ
Chức vụ: Giáo viên – Tổ phó tổ Toán, Tin, Thể dục
Đơn vị công tác: Trường THCS Trần Quang Khải
Đề tài chuyên môn: Môn tin học khối lớp 9
Tháng 8 năm 2020
2
CỘNG HÒA XÃ HỘI CHỦ NGHĨA VIỆT NAM
Độc lập - Tự do - Hạnh phúc
ĐỀ CƯƠNG SÁNG KIẾN
- Họ và tên: Trần Minh Thọ Giới tính: Nam
- Ngày, tháng, năm sinh: 19/08/1982
- Cơ quan, đơn vị công tác: THCS Trần Quang Khải
- Chức vụ/ chức danh: Tổ Phó tổ Toán, Tin, thể dục
- Trình độ chuyên môn: Đại học sư phạm
1. Tên sáng kiến:
Sử dụng phần mềm chấm bài Themis góp phần nâng cao chất lượng bồi
dưỡng học sinh giỏi tin học 9
2. Lĩnh vực áp dụng
2.1. Lĩnh vực áp dụng sáng kiến:
Áp dụng cho việc dạy học môn tin học phần ngôn ngữ lập trình Pascal và
đặc biệt là bồi dưỡng học sinh giỏi môn tin học.
2.2. Mục tiêu
Môn tin học ở trường phổ thông trang bị cho học sinh những hiểu biết cơ
bản về công nghệ thông tin và vai trò của nó trong xã hội hiện đại. Môn học này
giúp học sinh bước đầu làm quen với phương pháp giải quyết vấn đề theo quy
trình công nghệ và kĩ năng sử dụng máy tính phục vụ học tập và cuộc sống. Tin
học có ý nghĩa to lớn đối với sự phát triển trí tuệ, tư duy thuật toán, góp phần
hình thành học vấn phổ thông cho học sinh.
Bồi dưỡng học sinh giỏi là một trong những phong trào mũi nhọn của
trường và của Thị xã, Có học sinh giỏi các cấp nhất là học sinh giỏi Thị xã,
Tỉnh. Giáo viên mới thấy được sự thành công của mình trong sự nghiệp giáo dục
và sự tiến bộ nghề nghiệp đối với xã hội.
Để học tốt môn ngôn ngữ lập trình Pascal học sinh cần được hình thành
và rèn luyện tư duy lập trình, việc hình thành và rèn luyện được giáo viên chú
trọng thường xuyên thông qua một số bài toán đơn giản nhưng đòi hỏi phải có
sự vận dụng tư duy của học sinh.
Phần mềm Themis là phầm mềm chấm bài tự động là công cụ hỗ trợ
quan trọng của giáo viên và ban giám khảo các kì thi lập trình, phần mềm có
2
nhiều ưu điểm như: Tự động hóa các thao tác cho điểm, quá trình cho điểm hoàn
toàn khách quan, Giáo viên chấm bài của học sinh hoàn toàn tự động nên tiết
kiệm được thời gian đọc code đồng thời phát hiện được các giải thuật sáng tạo
của học sinh. Học sinh có thể tự luyện tập và dùng phần mềm để chấm điểm mà
không cần tới việc đọc code của giáo viên.
2.3.Đối tượng và phạm vi nghiên cứu
Học sinh đã và đang học lớp 8 và giáo viên tham gia bồi dưỡng học sinh
giỏi lớp 9 tại trường THCS Trần Quang Khải.
3. Cơ sở pháp lý
Thi học sinh giỏi là phong trào mũi nhọn của các trường THCS nói riêng
và của các Phòng GD&ĐT, Sở GD&ĐT nói chung, và hằng năm, Phòng và Sở
giáo dục đào tạo đều tổ chức thi học sinh giỏi môn tin học cấp thị xã, cấp Tỉnh.
Hội đồng đội tổ chức thi tin học trẻ không chuyên cấp thị xã và cấp Tỉnh và nội
dung thi học sinh giỏi tin học chính là ngôn ngữ lập trình mà các em được học ở
môn tin học lớp 8.
4. Thực trạng:
Trong 4 năm học môn tin học ở cấp THCS thì năm học lớp 8 các em sẽ
được học ngôn ngữ lập trình, mà cụ thể là ngôn ngữ lập trình Pascal, đây là một
chương trình khó nhất trong các chương trình mà các em được học ở cấp THCS.
Để học sinh học tốt môn tin học thì đòi hỏi nhà trường phải có trang bị
đủ máy vi tính và các em cũng phải có máy vi tính ở nhà. Các năm gần đây
trường THCS Trần Quang Khải đã trang bị phòng máy vi tính hiện đại đáp ứng
tốt cho việc dạy học. Tuy nhiên, về phần học sinh vì là con em của nông dân, gia
đình còn khó khăn nên nhiều em không có máy vi tính ở nhà gây khó khăn cho
việc tự học của các em.
Nhiều học sinh chưa được hình thành tư duy lập trình thường học trước
quên sau, học sau thì quên trước, do các em chưa nắm chắc cơ bản nên càng học
càng rối, dẫn đến những bài đã làm rồi có khi giáo viên cho làm lại hoặc cho
dạng tương tự thì lại không làm được.
Theo qui định của Sở GD&ĐT thì việc chấm bài thi học sinh giỏi môn
tin học sẽ được thực hiện trên máy và dùng phần mềm Themis (nghĩa là giám
khảo chuẩn bị sẵn test và đưa bài thực hành của học sinh cho máy vi tính chấm),
vì vậy trong quá trình làm bài các em chỉ cần sơ suất nhỏ (ví dụ khai báo dữ liệu
không đủ lớn), bài làm không xử lý được hết test thì sẽ bị điểm thấp.
3
5. Mô tả sáng kiến:
5.1. Về nội dung của sáng kiến:
Nội dung của sáng kiến là nêu lên các kinh nghiệm trong việc sử dụng
phần mềm chấm bài Themis để góp phần nâng cao chất lượng bồi dưỡng học
sinh giỏi môn tin học 9. Sáng kiến giúp cho giáo viên tiết kiệm nhiều thời gian
khi chấm bài (code) của học sinh, tạo tác phong làm việc chuyên nghiệm, khoa
học. Sáng kiến nhằm giúp cho học sinh có tư duy lập trình, giúp các em giải các
bài toán về lập trình tốt hơn, các em có hứng thú hơn khi học lập trình, không
còn thấy môn học khô khan, khó, đặc biệt là các em học sinh giỏi sẽ tìm ra các
giải pháp để giải các đề thi một cách trọn vẹn và làm được hết các test cũng như
yêu cầu mà đề đưa ra.
5.1.1. Hình thành lòng yêu thích học lập trình
Giáo viên cần tạo cho học sinh lòng yêu thích học lập trình thông qua
việc giới thiệu một số người thành đạt trên thế giới nhờ học giỏi về tin học và
được học lập trình từ nhỏ như tỉ phú Bill Gates - tác giả và chủ tịch tập
đoàn Microsoft, hãng phần mềm khổng lồ; Mark Elliot Zuckerberg là một
nhà lập trình máy tính người Mỹ, đồng sáng lập của Facebook; Larry
Page và Sergey Brin sáng lập Google từ năm 1998...
Giởi thiệu cho học sinh xem các video nói về việc dạy học lập trình từ
nhỏ cho học sinh tiểu học, ứng dụng lập trình pascal để điều khiển Robot....các
video nói về lợi ích của việc học lập trình
Thời sự VTV1 nói về tác dụng của học lập trình: https://youtu.be/cVs-
wqwCoQ8
Vì sao phải dạy lập trình cho con từ nhỏ:
https://youtu.be/7RlumXKoEXY
Tại sao mọi người nên học lập trình: https://youtu.be/OQAnhML3Q8g
Hào hứng ứng dụng thuật toán pascal để lập trình Robot:
https://dantri.com.vn/giao-duc-khuyen-hoc/hao-hung-ung-dung-thuat-toan-
pascal-de-lap-trinh-robot-20160411071310523.htm
5.1.2. Sử dụng phần mềm Themis
5.1.2.1. Giới thiệu về phần mềm:
Themis là phần mềm chấm bài tự động được phát triển theo yêu cầu của
Cục Khảo thí và Kiểm định chất lượng giáo dục, Bộ Giáo dục và Đào tạo. Sản
phẩm được thiết kế phục vụ ký thi học sinh giỏi Quốc gia hàng năm, nhưng
4
hoàn toàn có thể sử dụng trong tất cả các kì thi và bài kiểm tra tin học dùng cơ
chế chấm điểm tự động và bằng bộ test.
5.1.2.2. Cài đặt Themis:
Tải phần mềm về tại địa chỉ:
https://drive.google.com/file/d/1hz_QkTicnB7pHoR4M51fL5LMLucMU38l/view?usp=sharing
Hoặc link rút gọn: http://tiny.cc/themis
Nháy đúp vào tệp tin ThemisInstaller.exe và cài đặt bình thường, tương
đối đơn giản.
Cấu hình và cho điểm từng bài thi (nếu cần): Nháy chuột phải vào tên bài thi và
chọn cấu hình bài thi
5.1.2.3. Chuẩn bị 1 kì thi
a. Các bước thực hiện
Chuẩn bị thư mục mang tên kì thi
5
Trong thư mục này chứa 2 thư mục con là Đáp án và Thí Sinh, thư mục đáp án
chứa thư mục mang tên các đề thi và bộ test đáp án gồm file input và file output.
Thư mục Thí sinh chứa các thư mục con là Số báo danh của thí sinh trong mỗi
số báo danh lại chứa các tệp tin .pas là bài thi của học sinh.
6
Ví dụ tạo thư mục kì thi 01 để chứa đáp án bài thi và các bài làm của học sinh:
KÌ THI 01
ĐÁP ÁN
BÀI 1
TEST01
BAI1.INP
BAI1.OUT
TEST02
BAI1.INP
BAI1.OUT
TEST03
BAI1.INP
BAI1.OUT
...
BÀI 2
TEST01
BAI2.INP
BAI2.OUT
TEST02
BAI2.INP
BAI2.OUT
TEST03
BAI2.INP
BAI2.OUT
... ....
THÍ SINH
SBD01
BAI1.PAS
BAI2.PAS
BAI3.PAS
...
SBD02
BAI1.PAS
BAI2.PAS
BAI3.PAS
...
SBD03
BAI1.PAS
BAI2.PAS
BAI3.PAS
...
...
KÌ THI 02
...
7
b. Xem điểm và báo cáo kết quả
Phần mềm chấm và hiện kết quả điểm từng bài, điểm tổng cộng. Đối với những
bài bị lỗi thì hiện kí tự đặc biệt.
Ví dụ: bảng chấm điểm kiểm tra học kì 2 của nửa lớp 82 năm học 2019 – 2020
Đối với các bài có kí tự đặc biệt thì giáo viên kiểm tra lại bằng tay, để xem mức
độ làm bài của học sinh.
Sau đây là 2 trường hợp lỗi thường xảy ra đối với bài làm của học sinh
Một là học sinh chưa làm bài ví dụ bài 4 ở máy 10
Hai là bài dịch bị lỗi ví dụ bài 4 ở máy 9
Bài 3 ở máy 9 thì bài làm không qua được hết các test nên không đạt điểm tối đa
chỉ đạt 1,5/2. Còn bài 1 ở máy 9 thì không bị lỗi gì nhưng làm không đúng nên
bị điểm 0/4.
8
Đây là trường hợp không có bài của học sinh (do học sinh chưa làm bài này)
Đây là trường hợp dịch bị lỗi: Khi bài làm của học sinh còn lỗi biên dịch, học
sinh chưa chạy được chương trình mà đã nộp bài
9
5.1.3. Cách tạo bộ test cho mỗi bài tập, đề thi
5.1.3.1. Sự cần thiết phải có bộ Test
Bộ test có vai trò cực kì quan trọng, bộ test giúp phần mềm kiểm tra và
chấm bài của học sinh theo tiêu chuẩn do giáo viên đưa ra. Khi tạo bộ test giáo
viên cần tính hết các trường hợp mà học sinh có thể mắc phải sai lầm ví dụ như
khai báo biến có kiểu dữ liệu nhỏ, các trường hợp số âm, các trường hợp số rất
nhỏ, rất lớn,... Thông thường mỗi bài tập có từ 10 đến 20 bộ test. Một số trường
hợp thì ít nhất phải có 5 bộ test. Nếu bộ test không chuẩn, không lường hết
trường hợp thì giải thuật của học sinh không chính xác vẫn đạt điểm tối đa. Vì
vậy bộ test có vai trò cực kì quan trọng.
5.1.3.2. Cấu trúc bộ test
Mỗi bài đều có trúc bộ test như sau: (1 phần của ví dụ ở trên)
BÀI 1
TEST01
BAI1.INP
BAI1.OUT
TEST02
BAI1.INP
BAI1.OUT
TEST03
BAI1.INP
BAI1.OUT
...
Trong đó các tệp BAI1.INP Là dữ liệu nhập vào, ứng với nó BAI1.OUT là
dữ liệu xuất ra. Phần mềm sẽ căn cứ vào bộ test chuẩn này để chấm bài. Nếu
khớp thì sẽ cho điểm phần test đó, nếu không khớp thì test đó bị 0 điểm.
10
5.1.3.3. Xây dựng bộ test
Muốn xây dựng bộ test thì giáo viên cần có code đáp án (chương trình)
của bài thi. Rồi từ đó nhập các dữ liệu vào (tạo file BAI1.inp) lường hết các
trường hợp và thu được dữ liệu ra (chương trình tạo file BAI1.OUT)
5.1.4. Ví dụ một số bài tập và bộ test
Bài 1: Cặp số có tích lớn nhất
Cho dãy gồm N số nguyên A1, A2, ... , AN. Hãy tìm cặp số Ai, AJ
(1<=i#j<=N) sao cho tích của chúng là lớn nhất. Ví dụ với dãy số: 3, 4, 1, 2, 3,
9, 1, 3 thì hai số được chọn là 4 và 9 vì tích của chúng 4 x 9 =36 là lớn nhất.
Dữ liệu vào: Từ tệp văn bản BAI1.INP gồm:
+ Dòng đầu tiên ghi số nguyên N (2<=N<=107)
+ Dòng thứ hai ghi N số nguyên, A1, A2, ... , AN. Có giá trị tuyệt đối
không vượt quá 109.
Kết quả: ghi vào tệp văn bản BAI2.OUT một số nguyên duy nhất là tích
lớn nhất tìm được.
Ví dụ:
BAI1.INP BAI2.OUT
8
3 4 1 2 3 9 1 3
36
Khi giải bài này học sinh sẽ nghĩ ngay đến phương án vét cạn là dùng 2
vòng lặp for để xét hết tất cả các cặp số
Max:=lowlongint;
For i:=1 to n do
For j:=1 to n do
If (i<>j) and(a[i]*a[j]>max) then max:=a[i]*a[j];
Tuy nhiên với số lượng phần tử lớn thì cách làm trên không đảm bảo thời
gian. Do đó, không đạt được điểm tối đa, mà đối với bộ test nhỏ học sinh nhập
bằng tay sẽ không phát hiện được vấn đề. Nếu giáo viên tạo bộ test lớn thì khi
chấm bài học sinh sẽ không đạt điểm tối đa từ đó hướng dẫn học sinh tìm cách
giải khác, tối ưu hơn cho bài toán trên.
11
Để giải bài toán trên thì ta cần tìm tích 2 phần tử lớn nhất, gọi là tích 1, và
tìm tích 2 phần tử bé nhất (để phòng trường hợp là 2 số đều âm, thì tích của
chúng ra số dương nên cũng có thể là lớn nhất) gọi là tích 2, kết quả bài toán
chính là số lớn nhất của tích 1 và tích 2.
Để tìm 2 phần tử lớn nhất thì ta dùng cách sắp xếp 2 phần tử lớn nhất ra
đầu, sau đó để tìm 2 phần tử nhỏ nhất thì ta cũng sắp xếp 2 phần tử nhỏ nhất ra
đầu. Use math;
var a:array[1..100000]of longint;
i,n,t,tich1,tich2,j:longint;
f:text;
begin
assign(f,'BAI1.inp');
reset(f);
readln(f,n);
for i:=1 to n do read(f,a[i]);
close(f);
for i:=1 to 2 do
for j:=i+1 to n-1 do
if a[i]<=a[j] then
begin
t:=a[i];
a[i]:=a[j];
a[j]:=t;
end;
tich1:=a[1]*a[2];
for i:=1 to 2 do
for j:=i+1 to n-1 do
if a[i]>=a[j] then
begin
t:=a[i];
a[i]:=a[j];
a[j]:=t;
end;
tich2:=a[1]*a[2];
assign(f,'BAI1.OUT');
Rewrite(f);
write(f,max(tich1,tich2));
close(f);
readln
end.
Xây dựng bộ test
Khi xây dựng bộ test cần lưu ý đầy đủ các trường hợp
12
Test có 2 số dương có tích lớn nhất
Test có 2 số âm có tích lớn nhất
Test có số lượng phần tử rất lớn cụ thể là 100000 phần tử
Test BAI1.INP BAI1.OUT
01 5
1 9 3 4 5
45
02 10
1 4 -6 2 -5 5 2 2 -8 2
48
03 …..
04 100000
Bộ test lớn có 100000 phần tử trong
đó có 2 số dương có tích lớn nhất.
(vì số lượng phần tử
nhiều nên tôi không thể
đưa test vào đây)
05 100000
Bộ test lớn có 100000 phần tử trong
đó có 2 số âm có tích lớn nhất.
Đoạn code tạo test lớn: (Tạo test gồm 100000 phần tử nhận giá trị ngẫu
nhiên từ -1000 đến 1000
uses crt;
var n,i:longint;
f:text;
begin
randomize;
assign(f,'BAI1.inp');
rewrite(f);
writeln(f,100000);
for i:=1 to 100000 do
write(f,random(1001)-random(1001),' ');
close(f);
end.
Bài 2: Đoạn con có tổng lớn nhất
Đề bài: Nhập mảng gồm n phần tử (0<n<=1000), các phần tử nhận giá trị số
nguyên (-109<a[i]<109). Tìm đoạn mảng con có tổng lớn nhất
Dữ liệu vào: Từ tệp tin BAI2.INP gồm 2 dòng, dòng 1 là số nguyên n và dòng 2
là n số nguyên
Dữ liệu ra: Vào tệp tin BAI2.OUT Gồm 2 dòng, dòng 1 là tổng lớn nhất, dòng
2 là đoạn con có tổng lớn nhất, nếu có nhiều đoạn con thì xuất đoạn con có chỉ
số đầu nhỏ nhất
Ví dụ:
13
BAI2.INP BAI2.OUT
7
1 2 -4 3 5 -1 3
10
3 5 -1 3
Giáo viên cần giải bài trên để có code xây dựng bộ test:
var a:array[1..1000]of longint;
n,i,j,d,c,s,max:longint;
f:text;
Begin
Assgin(f,’BAI2.inp’);
Reset(f);
read(f,n);
for i:=1 to n do read(f,a[i]);
close(f);
max:=low(longint);
for i:=1 to n do
begin
s:=a[i];
for j:=i to n do
begin
if i<>j then s:=s+a[j];
if s>max then begin max:=s;d:=i;c:=j;end;
end;
end;
assign(f,’BAI2.OUT’);
rewrite(f);
writeln(f,max);
for i:=d to c do write(f,a[i],' ');
close(f);
end.
Xây dựng bộ test
Khi xây dựng bộ test cần lưu ý đầy đủ các trường hợp
Test có đoạn con là 1 số dương lớn nhất (03)
Test có đoạn con là 1 số âm lớn nhất (04)
Test toàn số dương (05)
Test toàn số âm (04)
Test có số âm và dương (01, 02)
Test có 2 đoạn có tổng bằng nhau(06)
14
Test BAI2.INP BAI2.OUT
01 7
1 2 -4 3 5 -1 3
10
3 5 -1 3
02 21
1 2 -4 3 5 -1 3 1 2 -4 3 5 -30 3 1 2 -4 3 5 -1 3
17
3 5 -1 3 1 2 -4 3 5
03 13
-8 -9 6 5 4 -8 -9 5 8 7 -100 80 -100
80
80
04 3
-8 -2 -9
-2
-2
05 3
1 2 3
6
1 2 3
06 9
-1 2 3 4 -10 5 2 2 -4
9
2 3 4
Bài 3: Phép cộng không nhớ
Bài tập về nhà của Tý trong môn Toán là phép tính có dạng: N+K=M
Trong đó N và K đã biết và M là số cần tìm. Rất nhanh chóng Tý tìm
được M. Tuy nhiên Tý lại nghĩ đến kết quả sẽ thế nào nếu phép tính N+K là
phép cộng không nhớ, nghĩa là với 2 chữ số a và b thì kết quả của a+b sẽ bị bỏ
đi chữ số hàng chục (nếu có).
Ví dụ: 8+9=7; 3+2=5; 8+3=1
Yêu cầu: Với hai số tự nhiên N và K có cùng số lượng chữ số, hãy tìm M
sao cho N+K=M với phép cộng không nhớ.
Dữ liệu vào: Từ tệp văn bản CONG.INP chứa 2 số N và K cách nhau
bằng 1 dấu cách (N, K 109).
Kết quả: Ghi vào tệp văn bản CONG.OUT số nguyên M.
Ví dụ:
CONG.INP CONG.OUT
612 401 13
896 426 212
111 999 0
15
Giáo viên cần giải bài trên để có code xây dựng bộ test :
var f,g:text;
N,K,M,x,y:longint;
Begin
assign(f,'CONG.INP'); reset(f);
assign(g,'CONG.OUT'); rewrite(g);
readln(f,N,K); close(f);
M:=0;
while N>0 do
begin
x:=N mod 10;
y:=K mod 10;
M:=M*10+(x+y) mod 10;
K:=K div 10;
N:=N div 10;
end;
N:=0;
While M>0 do
begin
N:=N*10+M mod 10; M:=M div 10;
end;
writeln(g,N);
close(g);
end.
Khi xây dựng bộ test cần lưu ý đầy đủ các trường hợp từ số nhỏ có 1 chữ số đến
số lớn 109
Test BAI3.INP BAI3.OUT
01 1 1 2
02 8 9 7
03 111 999 0
04 545 847 382
05 4237 6236 463
06 64590 38439 92929
07 437587 297535 624012
08 891773 567130 358803
09 96366277 27265630 13521807
10 383441522 477665112 750006634
16
Đối với bài toán về dãy số có có nhiều phần tử, cần bộ test lớn thì giáo
viên có thể dùng pascal để tạo các thư mục chứa test để tiết kiệm thời gian, xem
ví dụ ở bài 4 dưới đây:
Bài 4: Hộp kẹo thần kỳ
Tý rất thích ăn kẹo thần kỳ không chỉ vì vị ngọt mà kẹo thần kỳ còn tăng sức
mạnh cho Tý.
Tý có N hộp kẹo thần kỳ, các hộp được đánh số từ 1 đến N, hộp thứ i có ai
viên kẹo. Trong N ngày tới, mỗi ngày Tý chỉ được mở một hộp kẹo và ăn hết số
kẹo trong hộp đó. Nếu ngày thứ k Tý ăn hết hộp kẹo có x viên thì sức mạnh của
Tý tăng lên x.10k đơn vị sức mạnh.
Ví dụ: Tý có 3 hộp kẹo, số viên kẹo trong mỗi hộp lần lượt là 4 3 5. Nếu
ngày thứ nhất Tý ăn hết kẹo ở hộp thứ nhất, ngày thứ 2 ăn hết kẹo ở hộp thứ 2,
ngày thứ 3 ăn hết kẹo ở hộp thứ 3 thì tổng sức mạnh mà Tý nhận được là
4.10+3.100+5.1000=5340 đơn vị sức mạnh. Tuy nhiên, nếu ngày thứ nhất Tý ăn
hết kẹo ở hộp thứ 2, ngày thứ 2 ăn hết kẹo ở hộp thứ nhất, ngày thứ 3 ăn hết kẹo
ở hộp thứ 3 thì tổng sức mạnh mà Tý nhận được là 3.10+4.100+5.1000=5430
đơn vị sức mạnh.
Yêu cầu: Hãy cho biết số lượng viên kẹo Tý ăn ở mỗi ngày là bao nhiêu
để tổng sức mạnh tăng lên sau N ngày là lớn nhất?
Dữ liệu vào: Từ tệp văn bản BAI4.INP gồm:
Dòng đầu tiên ghi số nguyên dương N (N103).
Dòng thứ 2 ghi N số nguyên dương, với số thứ i là ai (i = 1..N; ai
104) là số viên kẹo ở hộp thứ i.
Kết quả: Ghi vào tệp văn bản BAI4.OUT gồm N số nguyên, trong đó
số thứ k là số lượng viên kẹo Tý ăn ở ngày thứ k (k = 1..N).
Ví dụ:
BAI4.INP BAI4.OUT
3
4 3 5
3 4 5
Bài này thực chất là sắp xếp mảng theo chiều tăng dần, code dùng để tạo
các thư mục chứa và tệp BAI4.INP như sau:
Chương trình dưới đây dùng để tạo 5 tệp BAI4.INP ngẫu nhiên, mỗi tệp
BAI4.INP trong các thư mục test...gồm 2 dòng: dòng đầu là số lượng phần tử
của dãy số, dòng thứ 2 là giá trị của các phần tử nhận giá trị ngẫu nhiên.
17
const n:array[0..9] of longint=(10,20,60,100,120);
var t,i:longint;
s:string;
f:text;
begin
randomize;
for t:=0 to 4 do
begin
str(t,s);
s:='test'+s;
mkdir(s);
s:=s+'/BAI4.inp';
assign(f,s);
rewrite(f);
writeln(f,n[t]);
for i:=1 to n[t] do write(f,random(n[t]*10)+1,' ');
close(f);
end;
end.
Ghi chú: Hàm mkdir(s) dùng để tạo thư mục s
Lưu ý: lúc này trong thư mục các test0 đến test4 chỉ chứa các file BAI4.INP
Để tạo file BAI4.OUT ta cần chạy đoạn chương trình sau (đây cũng gần là đáp
án của bài)
var n,i,j,tg,t:longint;
a:array[1..1000] of longint;
f,g:text;
s:string;
begin
for t:=0 to 4 do
begin
str(t,s);
s:='test'+s+’\’;
assign(f,s+'BAI4.INP'); reset(f);
assign(g,s+'BAI4.OUT'); rewrite(g);
readln(f,n);
for i:=1 to n do read(f,a[i]);
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;
for i:=1 to n do write(g,a[i],' ');
close(f); close(g);
end;
end.
18
Test BAI4.INP BAI4.OUT
0 10
71 65 28 37 9 15 43 39 99 64
9 15 28 37 39 43 64 65 71 99
1 20
176 84 117 164 65 187 22 194 177 99 85
188 2 106 75 79 183 79 88 88
2 22 65 75 79 79 84 85 88 88 99 106 117
164 176 177 183 187 188 194
2 60
367 452 32 227 476 289 292 515 218 79
55 466 115 447 5 232 18 379 471 294 171
580 67 269 509 293 450 528 466 423 462
566 524 431 329 231 461 294 212 180 209
258 389 171 42 362 116 328 98 530 323
58 49 98 584 587 215 481 529 296
5 18 32 42 49 55 58 67 79 98 98 115 116
171 171 180 209 212 215 218 227 231
232 258 269 289 292 293 294 294 296
323 328 329 362 367 379 389 423 431
447 450 452 461 462 466 466 471 476
481 509 515 524 528 529 530 566 580
584 587
3 100
107 786 490 178 304 969 703 852 399 119
162 279 366 120 466 666 674 632 609 899
496 722 654 419 149 510 332 638 925 501
824 960 275 416 781 914 220 210 149 647
176 544 881 661 926 14 514 575 57 373
625 125 40 890 311 216 917 662 436 820
772 668 394 496 274 515 292 804 449 350
20 704 217 556 330 686 672 925 550 205
244 771 58 510 634 340 160 599 375 589
374 858 738 949 772 692 242 931 333 87
14 20 40 57 58 87 107 119 120 125 149
149 160 162 176 178 205 210 216 217
220 242 244 274 275 279 292 304 311
330 332 333 340 350 366 373 374 375
394 399 416 419 436 449 466 490 496
496 501 510 510 514 515 544 550 556
575 589 599 609 625 632 634 638 647
654 661 662 666 668 672 674 686 692
703 704 722 738 771 772 772 781 786
804 820 824 852 858 881 890 899 914
917 925 925 926 931 949 960 969
4 120
650 934 152 129 196 486 93 447 110 401
594 359 1143 869 932 418 777 165 672
113 764 624 6 356 75 515 820 674 449
476 810 943 808 584 1150 872 174 260
164 94 102 1100 577 579 1086 408 1035
528 661 893 1017 240 487 1100 1154 31
200 376 565 894 1133 123 338 497 1116
524 792 521 19 284 408 780 1117 782 137
916 605 841 553 455 113 268 684 212
1118 712 744 862 957 326 477 571 388
980 1051 838 522 322 630 10 502 109 88
314 913 304 605 804 200 385 898 857
1058 15 1144 1021 1107 727 426 130
6 10 15 19 31 75 88 93 94 102 109 110
113 113 123 129 130 137 152 164 165
174 196 200 200 212 240 260 268 284
304 314 322 326 338 356 359 376 385
388 401 408 408 418 426 447 449 455
476 477 486 487 497 502 515 521 522
524 528 553 565 571 577 579 584 594
605 605 624 630 650 661 672 674 684
712 727 744 764 777 780 782 792 804
808 810 820 838 841 857 862 869 872
893 894 898 913 916 932 934 943 957
980 1017 1021 1035 1051 1058 1086
1100 1100 1107 1116 1117 1118 1133
1143 1144 1150 1154
5.2. Về khả năng áp dụng của sáng kiến:
Sáng kiến áp dụng tốt cho giáo viên giảng dạy bộ môn tin học lớp 8 và
dạy về ngôn ngữ lập trình pascal, đặc biệt là cho các giáo viên bồi dưỡng học
sinh giỏi.
Khi áp dụng sáng kiến này thì giáo viên có thể bổ sung thêm cho mình
về một số phương pháp trong dạy học tin học 8 và bồi dưỡng học sinh giỏi môn
tin học 8, 9.
19
Sáng kiến có thể áp dụng cho tất cả các trường có tham gia thi học sinh
giỏi môn tin học.
6. Các thông tin cần được bảo mật (không)
7. Kết luận.
Với mong muốn nâng cao chất lượng trong việc bồi dưỡng học sinh giỏi
môn tin học. Tôi đã dành thời gian để nghiên cứu, sử dụng phần mềm Themis và
viết ra sáng kiến này nhằm giúp cho công tác bồi dưỡng học sinh giỏi tốt hơn,
các em học sinh thêm yêu thích môn học, có hứng thú khi học tập không còn
thấy môn lập trình là khô khan, khó học.
Với thời gian không nhiều, và năng lực chuyên môn còn hạn chế, sáng
kiến không sao tránh khỏi thiếu sót, tôi mong nhận được sự góp ý chân thành từ
các bạn đồng nghiệp. Mong sao cho sự nghiệp giáo dục của thị xã Ninh Hòa
ngày càng phát triển. Phong trào bồi dưỡng học sinh giỏi các môn nói chung và
môn tin học nói riêng ngày ngày càng tiến bộ.
Xin chân thành cảm ơn!
THỦ TRƯỞNG ĐƠN VỊ
TÁC GIẢ
Trần Minh Thọ