SKKN 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

SKKN 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

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.

pdf 21 trang Người đăng phuongnguyen22 Ngày đăng 02/03/2022 Lượt xem 1646Lượt tải 3 Download
Bạn đang xem 20 trang mẫu của tài liệu "SKKN 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", để tải tài liệu gốc về máy bạn click vào nút DOWNLOAD ở trên
 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:  
 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 (ij) 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 ij 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 (N103). 
 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 

Tài liệu đính kèm:

  • pdfskkn_su_dung_phan_mem_cham_bai_themis_gop_phan_nang_cao_chat.pdf