SỞ GIÁO DỤC & ĐÀO TẠO NAM ĐỊNH
TRƯỜNG THPT CHUYÊN LÊ HỒNG PHONG
SÁNG KIẾN DỰ THI CẤP TỈNH
BÁO CÁO SÁNG KIẾN
TỔ CHỨC HỌC VÀ CHẤM BÀI QUA INTERNET
Tác giả: Phạm Hồng Thanh
Trình độ chuyên môn: Cử nhân
Chức vụ: Tổ phó tổ Toán Tin
Nơi công tác: Trường THPT chuyên Lê Hồng Phong
Nam Định, ngày 19 tháng 05 năm 2016
2
1. TÊN SÁNG KIẾN:
TỔ CHỨC HỌC VÀ CHẤM BÀI QUA INTERNET
2. LĨNH VỰC ÁP DỤNG SÁNG KIẾN:
Tổ chức tự học và kiểm tra đánh giá cho học sinh.
3. THỜI GIAN ÁP DỤNG SÁNG KIẾN:
Từ ngày 25 tháng 7 năm 2015 đến ngày 09 tháng 2 năm 2016
4. TÁC GIẢ:
Họ và tên: Phạm Hồng Thanh
Năm sinh: 1975
Nơi thường trú: 8/237 Hàn Thuyên, phường Vị Xuyên, TP Nam Định
Trình độ chuyên môn: Cử nhân
Chức vụ công tác: Tổ phó tổ Toán Tin
Nơi làm việc: Trường THPT chuyên Lê Hồng Phong
Điện thoại: 0915590781
Tỷ lệ đóng góp tạo ra sáng kiến: 100%
5. ĐỒNG TÁC GIẢ: Không
6. ĐƠN VỊ ÁP DỤNG SÁNG KIẾN:
Tên đơn vị: Trường THPT chuyên Lê Hồng Phong.
Địa chỉ: 76 Vị Xuyên, phường Vị Xuyên, TP Nam Định
Điện thoại: 0 350 3640297
3
BÁO CÁO SÁNG KIẾN
I. ĐIỀU KIỆN HOÀN CẢNH TẠO RA SÁNG KIẾN:
Trải qua những năm dạy Tin học cho học sinh đội tuyển Tin học thi học
sinh giỏi và chấm thi học sinh giỏi. Đặc thù của môn học là làm bài trên máy,
chấm bài trên máy theo các test. Khi chấm bài cho nhiều học sinh, mỗi học sinh
có một số bài nộp, mỗi bài chấm bằng nhiều test. Trước đây tôi đã viết chương
trình chấm bài cho học sinh còn có một số hạn chế, nay tôi bổ sung và mở rộng
phạm vi ứng dụng hơn.
Điều thứ hai là: hiện nay công nghệ điện toán đám mây đã được áp dụng
rộng rãi, việc tận dụng khả năng của công nghệ là cần thiết; tôi đã sử dụng tốt và
chia sẻ cho các đồng nghiệp trong bộ môn và nhà trường cùng áp dụng.
II. MÔ TẢ GIẢI PHÁP:
1. Mô tả giải pháp trước khi tạo sáng kiến:
Trước đây tôi đã nghiên cứu và viết ra một chương trình chấm. Chương
trình đó khi chấm vẫn cần nhập tên học sinh, thay đổi nhiều thông tin theo bài
cần chấm và chưa phù hợp với cách lựa chọn ngôn ngữ lập trình của học sinh
hiện nay. Khi chấm bài cho học sinh vẫn cần giáo viên có mặt trực tiếp hoặc
phải hướng dẫn cho học sinh cách sử dụng chương trình và giải thích lỗi khó
khăn.
Tôi cũng đã tham khảo chương trình chấm THEMIS của các thầy giáo
viết và dùng chấm thi học sinh giỏi Quốc gia, nhưng thường dùng cho kì thi là
phù hợp. Nhưng để giúp phát hiện những lỗi của học sinh khi học thì phải viết
thêm vào chương trình chấm, mà viết thêm phải chỉnh sửa theo yêu cầu của
chương trình, không biết và thống kê lỗi của từng test để rút kinh nghiệm được.
Trong quá trình giảng dạy các đối tượng học sinh, giáo viên thường phải
in bài hay gửi bài qua thư cho học sinh,học sinh lại làm ngược lại khi muốn báo
cáo kết quả. Việc trao đổi giữa giáo viên và học sinh vẫn bị động, bất tiện về
việc cập nhật thông tin, không theo dõi được tình hình học sinh làm bài, học
sinh làm bài bị phụ thuộc vào giáo viên chấm, nhận xét bài và thông báo cho học
sinh.
2. Mô tả giải pháp sau khi có sáng kiến:
* Tạo nơi học và làm việc online:
Học sinh tham gia vào lớp học có thể nhận đề bài và yêu cầu từ phía giáo
viên bất kì khi nào, bất kì ở đâu miễn là có kết nối internet. Học sinh có thể trao
4
đổi, đóng góp ý kiến của mình, nộp bài làm của mình và các chuyên đề được
giao. Cách làm việc này áp dụng được cho cả các môn học khác. Công việc này
có phân quyền cho từng học sinh, nơi nhận bài, nơi nộp bài làm để tránh học
sinh khác nộp hộ hay nhầm lẫn.
Tạo nơi làm việc trên internet có thể dùng các dịch vụ miễn phí được chia sẻ
của Google (drive.google.com), Microsoft (onedrive.live.com), Dropbox
(Dropbox.com), Box (Box.com), Youtube (Youtube.com), Mediafire, … Các
dịch vụ này đều có chung các đặc điểm:
1. Dịch vụ lưu trữ trực tuyến dựa trên nền tảng điện toán đám mây.
2. Cung cấp các gói miễn phí và trả phí.
3. Cho phép tăng dung lượng lưu trữ miễn phí
4. Cho phép chia sẻ và cộng tác file
5. Hỗ trợ chế độ chia sẻ file công cộng và riêng tư
6. Cho phép lưu trữ nhiều loại file gồm cả các file ảnh và video
7. Cho phép mở các file trực tuyến
8. Hỗ trợ siêu liên kết trực tiếp (direct/hot link)
9. Cho phép đồng bộ hoá và sao lưu file
10.Mã hoá file trên dịch vụ
11.Lưu file trực tiếp vào tài khoản người dùng
12.Có phần mềm hỗ trợ đa nền tảng
Ở đây tôi đã lựa chọn dịch vụ Box, Onedrive thấy có hiệu quả, phù hợp, đơn
giản; qua đó tôi giới thiệu cho mọi người cùng sử dụng. Hai dịch vụ này (có thể
dịch vụ khác cũng có nhưng không phải tất cả) chia sẻ, phân công việc cho
người tham gia đơn giản, giao diện thân thiện. Onedrive có giao diện tiếng Việt.
Phần hướng dẫn sử dụng ở trong phụ lục A.
* Bổ sung vào bộ chương trình chấm trước đây:
- Để đáp ứng với nhu cầu học tập, học sinh được học tập ở bất kì địa điểm
nào, vào thời điểm nào miễn là có kết nối internet. Học sinh nhận yêu cầu làm
việc, nộp kết quả làm bài vào đúng nơi được phép của giáo viên (ở phần tạo nơi
học và làm việc online). Với một chiếc máy tính kết nối internet luôn bật (hay
bật theo thời gian theo nhu cầu), hệ thống máy tính sẽ đồng bộ dữ liệu với nơi
lưu trữ trên mạng (các dịch vụ đám mây). Có chương trình chấm bài tự động
luôn chạy sẵn trong máy tính; tìm bài học sinh mới nộp; gọi đến chương trình
chấm bài tương ứng và thực hiện chấm; ghi nhận kết quả của học sinh và trả kết
5
quả cho học sinh đã nộp bài; hệ thống lại đồng bộ lên internet và học sinh nhận
được luôn kết quả của mình.
- Trong chương trình chấm bài cho học sinh trước đây, tôi đã tổ chức lại
chương trình chấm cũ để dễ bổ sung, sửa chữa hơn trước, đơn giản gộp trong tệp
cấu hình chấm _sys.txt. Giáo viên xem kết quả chấm của bài trong tệp
_ten_bai.txt tương ứng với bài làm yêu cầu và học sinh cũng nhận được phản
hồi về tình hình bài làm của mình. Trong tệp cấu hình cho phép lựa chọn:
+ Chọn ngôn ngữ lập trình là Pascal hay C++
+ Thay đổi bài chấm chuẩn (thường những bài yêu cầu cho biết kết quả,
không cần phương án giải quyết)
+ Lựa chọn nơi nộp bài học sinh linh động và nơi lưu bài học sinh sau khi
đã chấm.
+ Lựa chọn những test cần chấm riêng lẻ hay bỏ test tạm thời có lỗi.
+ Lựa chọn những test cần phân biệt bằng thời gian thực hiện và sử dụng
bộ nhớ phù hợp (đặt thời gian thực hiện theo phần nghìn giây, giới hạn sử dụng
bộ nhớ đến từng Kb để ngắt những chương trình của học sinh viết bị lặp vô hạn
hay chưa tối ưu về thời gian, bộ nhớ).
- Trong chương trình nguồn chấm bài có thể thay đổi cách thức thông báo
lỗi linh động hay thay đổi cách thức chấm bài (người sử dụng cần biết cách thức
sửa chương trình nguồn – mô tả thông qua ngôn ngữ lập trình Pascal). Hoặc
không cần sửa chữa gì nếu yêu cầu của bài đơn giản.
Phần bổ sung vào hệ thống chương trình cũ tôi nêu cụ thể trong phụ lục B.
III. HIỆU QUẢ DO SÁNG KIẾN ĐEM LẠI:
1. Hiệu quả kinh tế: (Không đánh giá được)
2. Hiệu quả về mặt xã hội:
Giảm bớt thời gian chấm bài của giáo viên khi muốn kiểm tra trình độ lập
trình của học sinh, đánh giá đúng, công bằng và có thể còn ghi lại những lỗi
trong các test mà học sinh mắc phải. Trong các năm áp dụng đều được cập nhật,
bổ sung chức năng.
+ Có phần ghi biên bản chấm thi: kết quả điểm theo test, số test lỗi.
+ Ghi số lỗi theo từng test: để biết được tình hình bài làm.
+ Chạy các test ngắt quãng bất kì, do lỗi nào đó.
+ Thông báo ngay kết quả bài làm của học sinh nếu học, làm bài và nộp
qua mạng LAN, WAN. Tạo hứng thú học tập cho học sinh.
6
Điều quan trọng nhất khi chấm bài là cần tạo ra bộ test “Tốt” sao cho có
thể kiểm tra và đánh giá đúng được cách làm, trình độ của học sinh. Nếu ai cần
tham khảo thì có thể liên hệ và trao đổi với tôi để hoàn thiện hơn.
Đây là những điều tôi rút ra được từ thực tế giảng dạy cho học sinh lớp
chuyên Tin học, bồi dưỡng thi học sinh giỏi Quốc gia môn Tin học, qua các kì
thi của tỉnh. Cách chấm bài này áp dụng được cho nhiều đối tượng học sử dụng
ngôn ngữ lập trình Pascal, C++; sử dụng trong các kỳ thi, kiểm tra, đánh giá học
sinh. Kinh nghiệm này cần đem ra cho các đồng nghiệp sử dụng trong các đợt
bồi dưỡng học sinh giỏi: cấp trung học phổ thông, trung học cơ sở, thi học sinh
giỏi chọn đội tuyển tỉnh tham dự kì thi học sinh giỏi Quốc gia.
IV. CAM KẾT KHÔNG SAO CHÉP HOẶC VI PHẠM BẢN QUYỀN
Tôi xin cam đoan những điều tôi nêu trong bản báo cáo sáng kiến kinh nghiệm
là do tôi đã độc lập nghĩ ra và áp dụng. Tôi không sao chép và vi phạm bản
quyền của bất kỳ cá nhân hay tổ chức nào. Nếu cá nhân hay tổ chức nào phát
hiện tôi có hành vi sai trái tôi xin chịu trách nhiệm hoàn toàn trước cơ quan pháp
luật.
CƠ QUAN ĐƠN VỊ
ÁP DỤNG SÁNG KIẾN
TÁC GIẢ SÁNG KIẾN
Phạm Hồng Thanh
7
SỞ GIÁO DỤC VÀ ĐÀO TẠO NAM ĐỊNH
(Xác nhâ nâ , đánh giá, xếp loại)
8
CÁC PHỤ LỤC
- Phụ lục A: Cách tạo, sử dụng nơi học và làm việc online
- Phụ lục B: Nâng cấp chương trình chấm bài
Phụ lục A: Cách tạo, sử dụng nơi học và làm việc online
Tôi sử dụng dịch vụ lưu trữ BOX miễn phí với người dùng cá nhân, tại địa
chỉ
https://www.box.com. Môi trường làm việc sử dụng ngôn ngữ tiếng Anh.
(Một số dịch vụ khác có cho lựa chọn tiếng Việt)
1. Đăng kí tài khoản
- Chọn Sign Up -> Personal Plans -> Free Sign Up (được 10Gb miễn phí)
- Nhập thông tin: tên truy cập thông qua tên hòm thư; mật khẩu tự chọn; chọn
Submit. Kiểm tra hòm thư để tiến hành kích hoạt tài khoản.
2. Đăng nhập:
- Nhập địa chỉ thư và mật khẩu
đúng đăng kí.
9
3. Tạo tổ chức dữ liệu:
Giao diện làm việc minh họa. Có các nút lựa chọn cho các công việc
- Tạo thư mục: Chọn nút New – Folder, nhập tên
- Tải dữ liệu lên để lưu trữ: chọn nút Upload, tiến hành lựa chọn dữ liệu tại máy
cá nhân. (Trợ giúp thao tác kéo – thả trực tiếp)
- Tải dữ liệu về máy: chọn chuột phải vào đối tượng cần, chọn download ...
Về thư muc
Nút chọn
Thư muc
Tệp
3. Tạo đồng bộ dữ liệu trên máy tính:
- Tải bộ cài đặt đồng bộ: Chọn danh sách ở nút thông tin cá nhân (góc trên bên
phải), chọn get box sync, chọn loại tệp chương trình cài đặt phù hợp. (kích thước
bộ cài đặt khoảng 30 Mb)
- Chạy chương trình cài đặt đã tải về. Lựa chọn thông số phù hợp cho chương
trình cài đặt.
- Tiến hành đăng nhập vào chương trình, thay đổi thông tin về nơi để dữ liệu
đồng bộ trên máy cá nhân (có tên thư mục là: Box sync trên ổ đĩa hệ thống)
Từ bây giờ cứ có sự thay đổi dữ liệu trong thư mục Box sync, sẽ được cập nhật
trên mạng và ngược lại.
- Lựa chọn thư mục đồng bộ/ tắt đồng bộ: Chọn chuột phải, properties, sync to
computer/unsync.
Và còn nhiều chức năng khác, người sử dụng tự khám phá tiếp để sử dụng.
10
4. Mời cộng tác làm việc/ chia sẻ dữ liệu:
- Mời cộng tác: chỉ những ai được mời, và cũng là thành viên của BOX (qua thư
chia sẻ) mới sử dụng được
Chọn chuột phải vào đối tượng, sharing, Invite Collaborator
Nhập danh sách người
cộng tác
Cho phép người cộng
tác sửa /chỉ xem
- Hủy cộng tác: chọn tên phía bên phải cửa sổ, chọn hủy đi.
- Chia sẻ: những ai có địa chỉ liên kết đều có thể: Chọn chuột phải vào đối tượng,
sharing, share link. Tại đây ta có thể lựa chọn sao chép link, chuyển chia sẻ cho
mọi người, hay hủy bỏ chia sẻ.
Tôi đã sử dụng tổ chức trên BOX để giao công việc, chuyển tài liệu cho
học sinh và học sinh gửi bài làm của mình online .
Tổ chức: tạo theo đối tượng học sinh: lớp 10, 11, 12, đội tuyển. Trong mỗi đối
tượng đều có mục tài liệu, nộp bài. Các tài liệu của từng đối tượng được tôi đưa
vào phù hợp. Các mục tài liệu, dùng chia sẻ để lấy link (chỉ được xem thông tin
hay tải về, tránh sai sót xóa nhầm, làm mất dữ liệu) và chuyển cho học sinh (rút
gọn đường dẫn tôi dùng thêm trang tinyurl.com để thuận tiện). Mục nộp bài
phải mời cộng tác và cho phép quyền sửa chữa để học sinh nộp bài đươc).
11
Tạo đồng bộ: tạo đồng bộ hết các mục để tiện chuyển giao tài liệu, lưu trữ tại
máy và trên mạng tránh các sự cố có thể gây mất dữ liệu. Tạo đồng bộ dữ liệu,
bật máy luôn online để chấm bài cho học sinh. Học sinh nộp bài và nhận kết quả
chấm bài tại nơi mình đã nộp.
12
Phụ lục B: Nâng cấp chương trình chấm bài
1. Tạo chương trình chấm bài tự động
* Giáo viên chủ động chạy chương trình này khi chấm bài cho học sinh, hoặc
đưa vào chế độ chạy tự động khi bật máy tính.
* Khi kết thúc chương trình, ta có thể biết được các bài đã chấm trong tệp
cham_them.txt và những bài học sinh nộp chưa đúng do nộp sai tên bài trong tệp
loichamtudong.txt.
* Muốn xem kết quả chấm của từng bài cụ thể thì vào nơi chứa bài chấm, có các
bộ test đặt sẵn, mở và xem trong tệp trùng tên bài đã chấm (bai_cham.txt).
* Tên chương trình chấm của từng bài luôn để ngầm định _tudong.exe
Nếu test của bài chỉ yêu cầu đưa ra 1 con số thì ta chỉ việc chép luôn tệp
_tudong.exe, nếu muốn chấm theo các tình huống của tệp output thì cần chỉnh
sửa tệp _tudong.pas.
Program DIEU_KHIEN_CHAM_TU_DONG;
Uses crt,dos;
Const
dc_ ='z:\'; { Nơi để bài chấm của học sinh; nếu nộp bài qua mạng cần
định hướng phần làm việc của học sinh về đây, tạo đĩa ảo z:}
Var
dsbai_,dshs_:array[-2..300] of string[30];
dacham :array[1..300]of byte;
sohs_,sobai_,baii_,hsi_,i,j:integer;
f1,f:text;
hs, bai, hscu, baicu, ngon_ngu, champas:string;
cham1,cham2:boolean;
{----------------------------------------------------}
Procedure lay_dshs;
{lấy danh sách học sinh tham gia vào bài học }
var dirinfo:searchRec;
i:integer;
Begin sohs_:=-2;
13
fillchar(dacham,sizeof(dacham),0);
Findfirst(DC_+'*',$10,dirinfo);
while DosError=0 do
Begin Inc(sohs_);
dshs_[sohs_]:=dirinfo.name;
Findnext(dirinfo);
End;
Writeln('danh sach co ',sohs_, ' hoc sinh');
End;
{-----------------------------------}
Procedure lay_dsbai(tenhs:string);
{Lấy các bài học sinh đã nộp }
var dirinfo:searchRec;
i:integer;
Begin sobai_:=0;
Findfirst(DC_+tenhs+'\*.'+ngon_ngu,$3F,dirinfo);
while DosError=0 do
Begin Inc(sobai_);
dsbai_[sobai_]:=dirinfo.name;
Findnext(dirinfo);
End;
If sobai_>0 then
Writeln('hoc sinh '+tenhs+' co ',sobai_, ' bai da nop');
End;
{-------------------------------}
Procedure chep_tep(nguon,dich:string);
var fn,fd:text;
st:string;
Begin assign(fn,nguon); reset(fn);
assign(fd,dich); rewrite(fd);
while not seekeof(fn) do
14
{copy/xoa: tranh ten tep dai>8 }
begin readln(fn,st); writeln(fd,st);
end;
close(fn); close(fd);
end;
{------------------------------------------}
Procedure xoa_tep(tep:string);
var f:text;
begin assign(f,tep);
erase(f);
end;
{--------------------------------------------}
BEGIN
hscu:=''; baicu:='';
LAY_DSHS;
assign(f1,'chamthem.txt');
{$I-} reset(f1); {$I+}
If ioresult<>0 then rewrite(f1)
else append(f1);
writeln(f1,'
CHAM THEM ');
close(f1);
ngon_ngu:='pas';
repeat
For i:=1 to sohs_ do
Begin hs:=dshs_[i];
lay_dsbai(hs);
If sobai_>0 then
For j:=1 to sobai_ do
Begin bai:=copy(dsbai_[j],1,length(dsbai_[j])-4); {lay ten tep}
cham1:=true; cham2:=true;
assign(f,bai+'\_tudong.exe');
15
{$I-} reset(f); {$I+}
If ioresult<>0 then cham1:=false;
If cham1=false then
begin assign(f,'_lam_xong\'+bai+'\_tudong.exe');
{$I-} reset(f); {$I+}
If ioresult<>0 then cham2:=false;
end;
{Khi cho học sinh làm bài, nhưng giáo viên chưa có test hay học sinh nộp sai bài
theo tên yêu cầu thì cần xử lí }
If (cham1=false) and (cham2=false) then
begin
assign(f,'loichamtudong.txt');
{$I-} reset(f); {$I+}
If ioresult<>0 then rewrite(f)
else append(f);
Writeln(f,hs:10,' nop bai: ',bai:10,' khong dung');
close(f);
chep_tep(DC_+hs+'\'+bai+'.'+ngon_ngu,DC_+hs+'\'+bai+'.'+copy(ngon_ngu,1,2
));
xoa_tep(DC_+hs+'\'+bai+'.'+ngon_ngu);
assign(f,dc_+hs+'\nopsai.txt');
{$I-} reset(f); {$I+}
If ioresult<>0 then rewrite(f)
else append(f);
writeln(f,' nop sai bai:
'+bai);
close(f);
end
Else
Begin close(f);
If cham1 then chdir(bai)
16
else
chdir('_lam_xong\'+bai);
If ngon_ngu='pas' then champas:='auto '
else champas:='autoc ';
SwapVectors;
Exec('_tudong.exe',champas+hs);
SwapVectors;
If cham1 then chdir('..')
else begin chdir('..'); chdir('..'); end;
{$I-} reset(f1); {$I+}
append(f1);
writeln(f1,hs:10,bai:15);
close(f1);
{ghi nhận thêm bài đã chấm }
end;
End;
End;
If ngon_ngu='cpp' then ngon_ngu:='pas'
else ngon_ngu:='cpp';
{ có thể đưa thêm bài làm bằng ngôn ngữ lập trình khác, nhưng cần điều chỉnh
phần dịch chương trình ở phần chương trình chấm bài cho phù hợp }
until keypressed;
END.
2. Bổ sung, chỉnh sửa chương trình chấm cũ
- Phần khai báo chung cho chương trình.
- Phần chấm một test.
- Phần dịch bài của học sinh.
- Phần điều khiển cho chạy các test, chấm điểm và ghi biên bản.
- Phần điểu khiển chấm bài tự động hay bán tự động.
2.1 Phần khai báo chung:
* Tệp cấu hình bài chấm: _sys.txt
17
Cải tiến lần này dùng chấm bài bằng ngôn ngữ lập trình Pascal, hay C++:
cần có tệp FPC.EXE hoặc G++.EXE và cần cấu hình đúng cho bộ dịch để nhận
được các thư viện có sẵn (đối với bộ dịch C++ cần sửa phần biến môi trường
PATH thêm nơi chứa tệp G++, tôi thường đặt thêm “d:\cpp\bin\G+
+.exe”
bai
=ten
{ sửa thành tên bài cần chấm }
ngon_ngu
=pas
{ hoặc cpp nếu là ngôn ngữ C++ }
dc_
=z:\
{ nơi để bài học sinh cần chấm }
dcluu_
=..\hsluu\
{ chấm xong bài học sinh, sẽ lưu vào đây }
_cactest
=1234567890
{ các test, chỉ dùng 1 kí tự cho 1 test}
_testngatTG
=1234567890.
{ các test cần ngắt thời gian chạy}
tep_dich
=\fpc\2.6.0\bin\i386-win32\fpc.exe
{nơi để tệp dịch Pascal }
tep_dich_CPP
=d:\cpp\bin\G++.exe
{nơi để tệp dịch C++ }
thoigian_bonho
= -T 1000 -M 500000000
{ thời gian ngắt ngầm định 1s, bộ nhớ 500Mb}
cham_rieng
=0
{ 0 /1 – chấm tự động/riêng theo tên học sinh }
_tongdiem
=10
{ điểm của bài, sẽ chia đều cho mỗi test }
kieu_test
=1
{ 1-Kieu test: TEN_BAI ?.inp/ 0 - TEN_BAI.in?
chuong_trinh_ngat='..\ngat_tg.exe';
{ nơi để chương trình ngắt }
* Phần đầu của chương trình _tudong.pas
PROGRAM
_tudong;
Uses
crt,dos;
Const chuong_trinh_ngat='..\ngat_tg.exe';
Var dc_,bai,dcluu_,_cactest,_testngatTG :string;
tep_dich,tep_dich_C,thoigian_bonho
:string;
cham_rieng,_tongdiem,kieu_test
:integer;
_diemtest,diem,muc
:real;
_loi_bai,hs_,f1,f2,tep,ss,ngon_ngu
:string;
18
tep_,bb_,bbloi_
bai_co_dich,bai_dich_loi
co_ngat_thoi_gian
_test
:text;
:boolean;
:byte;
:char;
2.2 Phần chấm một test của bài
+ Bổ sung tình huống chương trình học sinh không ghi gì vào tệp kết quả.
PROCEDURE CHAM_BAI_CUA_GV(_test:char;var _loi_bai:
string; var _diemtest:real);
Var x,y,i,j,sl
:integer;
mm_,mm,n,n_
:longint;
ss
:string;
_dung,ok
:boolean;
BEGIN
_loi_bai:='';
_diemtest:=0;
_dung:=true;
{
}
{Đọc dữ liệu vào file input, nếu cần }
If kieu_test=0 then assign(tep_,bai+'.in'+_test)
else
assign(tep_,bai+_test+'.inp');
reset(tep_);
readln(tep_,n_);
close(tep_);
{ Đọc kết quả ra chuẩn – mẫu }
If kieu_test=0
then assign(tep_,bai+'.ou'+_test)
else assign(tep_,bai+_test+'.out');
reset(tep_);
readln(tep_,mm_);
close(tep_);
{Đọc kết quả của học sinh – file output của học sinh}
assign(tep_,bai+'.out');
{$I-}reset(tep_); {$I+}
If ioresult=0 then
BEGIn
_dung:=true;
{ Xử lí khi không có output }
if seekeoln(tep_) or seekeof(tep_) then
Begin _loi_bai:=_loi_bai+' tep 0';
_dung:=false;
End
else
BEGin readln(tep_,mm);
19
If (mm>mm_) then
Begin
_loi_bai:=_loi_bai+' KQ >';
_dung:=false;
End
else
If (mm0 then
bai_co_dich:=false
else begin close(tep_);
chep_tep(tep,bai+'.'+ngon_ngu)
end;
If bai_co_dich then
begin
{xoa bai cu neu co}
assign(tep_,bai+'.exe');
{$I-} Reset(tep_);{$I+}
If ioresult=0 then begin close(tep_);
20
- Xem thêm -