Морев Николай, Забрудская Наталья
Для объективной оценки знаний учащегося необходимо использовать современные стандартизированные методы оценки учебных достижений, т.е. тестирование. Правильно составленный тест представляет собой совокупность сбалансированных тестовых заданий. Количество заданий в тесте должно быть таким, чтобы пропорционально отразить основное содержание. Трудность заданий должна быть сбалансирована таким образом, чтобы обеспечить равносложность различных вариантов тестов. Дифференцирующая сила тестовых заданий должна обеспечивать надежную дифференциацию уровня подготовки учащихся. Разработка современных контролирующих тестов представляет собой сложную и трудоемкую научную задачу. Практическое использование современных контролирующих тестов дает учащимся возможность объективно оценить уровень своих знаний. Эта услуга пользуется все возрастающим спросом. Общепринято мнение, что, только используя современные технологии в образовании, возможно снижение риска принятия неверного решения, как на уровне управления образованием, так и на уровне отдельного учащегося. Неверно или предвзято поставленные в школе оценки могут неверно сориентировать учащегося и его родителей в дальнейшем, что неизбежно приведет к излишним дополнительным трудностям и проблемам.
В современном мире значение английского языка велико. Он фактически стал международным, на нем говорят носители совершенно разных языков и культур. На английском языке печатается большинство научных работ, технических текстов, самые популярные периодические издания. Любая новая информация изначально появляется именно на английском языке и уже затем переводится на другие языки мира. Поэтому любой человек должен владеть английским языком, чтобы свободно общаться и получать всю необходимую информацию как можно быстрее.
Компьютерная техника применяется в различных областях деятельности человека. Она предоставляет новые возможности, отсутствовавшие ранее. Жизнь современного человека немыслима без компьютера. Применение компьютеров в образовании позволяет использовать более эффективно время и деньги (на покупку тетрадей, книг, пишущих принадлежностей и др.). Специальное обучающее программное обеспечение позволяет интенсифицировать процесс обучения. Поэтому мы решили создать программу, которая могла бы облегчить работу учителя и ученика по контролю знаний учащегося по английскому языку.
Разработка программы для контроля знаний ученика в виде тестирования в среде Turbo Pascal 7.0.
Программа позволяет проводить тестирование по любым темам. При этом программой используется файл теста, в котором находятся вопросы и ответы на них. Файл теста специально отформатирован для программы и зашифрован для того, чтобы тестируемый не мог подсмотреть правильные ответы. Наша программа составлена в соответствии со школьным курсом и отличается тщательно продуманной внутренней структурой, позволяющей использовать ее и как курс-тренинг, и как пособие при подготовке к контрольным работам по грамматике английского языка, а также к Всероссийскому централизованному тестированию, позволяющему сдать одновременно выпускные и вступительные экзамены. Наш тест уникален тем, что вопросы в нем расположены не в порядке возрастания степени их сложности. Мы считаем, что, во-первых это облегчит работу ученика с тестом, во-вторых, увеличится процент самостоятельно принятых решений, в-третьих, надо учитывать то, что на выполнение одного задания выделяется только одна минута, что поможет ученику правильно и экономно расходовать отведенное ему время. По истечении отведенного времени ответ на текущий вопрос засчитывается как неверный, и автоматически на экран выводится следующее задание. Мы считаем, что именно такая структура тестирования поможет наиболее объективно оценить знания учащихся по заданным темам с наименьшими потерями времени, так на тест из 20 вопросов будет отведено 20 минут, что поможет учителю лучше спланировать свое время.
Выбор такого малого промежутка времени обусловлен тем, что разговорная речь, как и письменная, требует четкого знания грамматики и быстрой реакции, поэтому, если знания систематизированы вам не составит большого труда такое небольшое испытание, как наш тест.
Требования к программному и аппаратному обеспечению компьютера для запуска программы:
Безусловно, разработка контролирующих компьютерных программ - это очень перспективное направление в учебной деятельности. Эти внедрения позволят полностью компьютеризировать процесс обучения, который будет соответствовать современному уровню развития техники.
Мы надеемся, что наша программа поможет облегчить работу учителя и позволит более эффективно использовать учебное время.
Текст программы для удобства разбит на части, выполняющие различные функции:
Текст основной программы:
(* * (x) 2001, Nikolay Morev, Natalya Zabrudskaya * Vladimir, Russia. School #31, form 11b. * * Test program. * Version 1.0. *) {$I-} program TestProgram; uses crt,graph,dos, lang,monobmp,mycrypt; type tStrings = array[0..254] of string; const TestsPath = 'Tests\'; PicsPath = 'Pics\'; ESCAPE = '%escape%'; CLEAR = '%clear%'; fResults = 'results'; fAbout = 'about.txt'; fHelp = 'help.txt'; var items: byte; fnames: ^tStrings; captions: ^tStrings; gd,gm: integer; lng: tLng; testname: string; srec: SearchRec; i: byte; f: text; label main_menu; procedure randombitmap; var srec: SearchRec; i: word; begin i:=0; findfirst(PicsPath+'\*.bmp',AnyFile,srec); while DosError=0 do begin inc(i); findnext(srec); end; i:=random(i)+1; findfirst(PicsPath+'\*.bmp',AnyFile,srec); while (DosError=0) and (i<>0) do begin dec(i); findnext(srec); end; showbmp(PicsPath+'\'+srec.name); end; procedure drawbutton(x,y,xdim,ydim: word; caption: string; active: boolean); const col = LightCyan; acol = LightRed; shadecol = Cyan; ashadecol = Red; textcol = Black; atextcol = White; begin setlinestyle(SolidLn,0,ThickWidth); setfillstyle(SolidFill,LightGray); bar(x,y,x+xdim,y+ydim); if active then setcolor(acol) else setcolor(col); line(x,y,x+xdim,y); line(x,y,x,y+ydim); if active then setcolor(ashadecol) else setcolor(shadecol); line(x+xdim,y+ydim,x+xdim,y); line(x+xdim,y+ydim,x,y+ydim); if active then setcolor(atextcol) else setcolor(textcol); settextstyle(DefaultFont,HorizDir,0); outtextxy (x+(xdim-textwidth(caption)) div 2, y+(ydim-textheight(caption)) div 2, caption); end; procedure StatusLine(st: string); const x = 10; y = 455; dx = 10; xdim = 620; ydim = 16; clear = '%clear%'; begin setviewport(x,y,x+xdim,y+ydim,true); clearviewport; if st<>clear then begin setlinestyle(SolidLn,0,NormWidth); setcolor(LightGray); line(xdim,ydim,0,ydim); line(xdim,ydim,xdim,0); setcolor(DarkGray); line(0,0,0,ydim); line(0,0,xdim,0); setcolor(White); settextstyle(SmallFont, HorizDir, 0); outtextxy(dx, (ydim - textheight(st)) div 2, st); end; setviewport(0,0,getmaxx,getmaxy,false); end; function menu (count: integer; const values,captions: array of string; x,y,xdim,ydim,time: word): string; const kUp = #72; kDown = #80; kEnter = #13; kEsc = #27; skipbutton = 4; skipempty = 10; var cy,active: integer; time0,timec,timelast: longint; i,hour,min,sec: word; st: string; begin active:=0; while (captions[active]='') and (active<count) do inc(active); if time<>0 then begin gettime(hour,min,sec,i); time0:=hour*60*60+min*60+sec; timelast:=time0; end; repeat cy:=y; for i:=0 to count-1 do if captions[i]<>'' then begin drawbutton(x, cy, xdim, ydim, captions[i], i = active); cy:=cy+(ydim+skipbutton); end else cy:=cy+skipempty; if time<>0 then repeat gettime(hour,min,sec,i); timec:=hour*60*60+min*60+sec; if (timec-time0)>=time then begin menu:=''; exit; end; if timec-timelast = 2 then begin str(time-(timec-time0),st); setcolor(White); settextstyle(SmallFont,HorizDir,0); StatusLine(lng.status_test+' - '+ lng.time_left+' '+st+' '+lng.sec); timelast:=timec; end; until keypressed; case readkey of kUp: repeat dec(active); until (captions[active]<>'') and (active<count); kDown: repeat inc(active); until (captions[active]<>'') and (active>=0); kEsc: begin menu:=ESCAPE; exit; end; kEnter: begin menu:=values[active]; exit; end; end; if active<0 then begin active:=count-1; while (captions[active]='') and (active>=0) do dec(active); end else if active>count-1 then begin active:=0; while (captions[active]='') and (active<count) do inc(active); end; until false; end; procedure test(name: string); const tests = 4; txdim = 500; ty = 80; lnskip = 10; right = '%right%'; question = '??'; comments = '#'; var f,fTest: text; captions,values: array[1..tests] of string; st,tmpst,ans: string; capts,cstr,rand,i,bottomy: word; rightans, quest: real; month,day,hour,minute: word; label end_of_test; begin assign(fTest, name); reset(fTest); if IOResult<>0 then begin closegraph; writeln(lng.file_not_found); halt; end; rightans:=0; quest:=0; repeat setcolor(White); cleardevice; randombitmap; capts:=1; cstr:=0; repeat if eof(fTest) then goto END_OF_TEST; readln(fTest,st); st:=decrypt(st); if pos(comments,st)=1 then continue else if pos(question,st)=1 then begin captions[capts]:=copy(st,1+length(question), length(st)-length(question)); inc(capts); if capts>tests then break; end else begin settextstyle(0,0,0); outtextxy((getmaxx-txdim) div 2 + 5, 5+ty+cstr*(textheight(st)+lnskip),st); inc(cstr); end; until false; setlinestyle(SolidLn,0,NormWidth); bottomy:=ty + (textheight(st)+lnskip)*cstr; rectangle((getmaxx-txdim) div 2, ty, (getmaxx-txdim) div 2 + txdim, bottomy); StatusLine(lng.status_test); rand:=random(4)+1; for i:=1 to tests do values[i]:=''; values[rand]:=right; tmpst:=captions[1]; captions[1]:=captions[rand]; captions[rand]:=tmpst; ans:=menu(tests,values,captions, (getmaxx-230) div 2,bottomy+50,230,30,60); quest:=quest+1; if ans=right then rightans:=rightans+1; if ans=ESCAPE then begin setcolor(White); cleardevice; randombitmap; goto END_OF_TEST; end; until false; END_OF_TEST: close(fTest); assign(f,fResults); append(f); if IOResult<>0 then rewrite(f); writeln(f); getdate(i,month,day,i); gettime(hour,minute,i,i); writeln(f,day,'.',month,' ',hour,':',minute); setlinestyle(SolidLn,0,NormWidth); rectangle (90, 90, 300, 170); settextstyle(DefaultFont,HorizDir,0); str(trunc(rightans),st); str(trunc((rightans/quest)*100),tmpst); outtextxy(100,100,lng.results_right+st+' ('+tmpst+'%)'); writeln(f,lng.results_right+st+' ('+tmpst+'%)'); str(trunc(quest),st); outtextxy(100,150,lng.results_all+st); writeln(f,lng.results_all+st); StatusLine(lng.status_text); close(f); readkey; end; procedure TextFile(fname: string); const x = 100; y = 100; xdim = 400; ydim = 200; var f: text; s: string; cy: word; label end_of_proc; begin setviewport(x,y,x+xdim,y+ydim,true); clearviewport; setlinestyle(SolidLn,0,NormWidth); setcolor(DarkGray); line(xdim,ydim,0,ydim); line(xdim,ydim,xdim,0); setcolor(LightGray); line(0,0,0,ydim); line(0,0,xdim,0); setcolor(White); settextstyle(SmallFont, HorizDir, 0); assign(f, fname); reset(f); cy:=10; if IOResult<>0 then begin outtextxy(20,cy, lng.file_not_found); goto end_of_proc; end else while not eof(f) do begin readln(f,s); outtextxy(20, cy, s); inc(cy,textheight(s)+2); end; close(f); end_of_proc: StatusLine(lng.status_text); readkey; setviewport(0,0,getmaxx,getmaxy,false); cleardevice; end; procedure GraphDrv; external; {$L egavga.obj} procedure LittFont; external; {$L litt.obj} procedure SansFont; external; {$L sans.obj} begin randomize; lng_read(lng); RegisterBGIDriver(@GraphDrv); RegisterBGIFont(@LittFont); RegisterBGIFont(@SansFont); initgraph(gd,gm,''); items:=4; findfirst(TestsPath+'\*.enc',AnyFile,srec); while DosError=0 do begin inc(items); findnext(srec); end; getmem(captions,sizeof(string)*items); getmem(fnames,sizeof(string)*items); i:=0; findfirst(TestsPath+'\*.enc',AnyFile,srec); while DosError=0 do begin fnames^[i]:=TestsPath+'\'+srec.name; assign(f,fnames^[i]); reset(f); readln(f,captions^[i]); delete(captions^[i],1,1); captions^[i]:=decrypt(captions^[i]); close(f); inc(i); findnext(srec); end; fnames^[items-4]:=''; fnames^[items-3]:=fAbout; fnames^[items-2]:=fHelp; fnames^[items-1]:=''; captions^[items-4]:=''; captions^[items-3]:=lng.menu_about; captions^[items-2]:=lng.menu_help; captions^[items-1]:=lng.menu_quit; MAIN_MENU: randombitmap; settextstyle(SansSerifFont, HorizDir, 0); setcolor(LightRed); outtextxy(101,51,lng.header); setcolor(White); outtextxy(100,50,lng.header); StatusLine(lng.status_menu); testname:=menu(items,fnames^,captions^, (getmaxx-250) div 2,150,250,30,0); if (testname=fAbout) or (testname=fHelp) then begin StatusLine(CLEAR); TextFile(testname); goto MAIN_MENU; end else if testname=ESCAPE then halt else if testname<>'' then test(testname); closegraph; end.
This document was generated using the LaTeX2HTML translator Version 2K.1beta (1.48)
Copyright © 1993, 1994, 1995, 1996,
Nikos Drakos,
Computer Based Learning Unit, University of Leeds.
Copyright © 1997, 1998, 1999,
Ross Moore,
Mathematics Department, Macquarie University, Sydney.
The command line arguments were:
latex2html -nonavigation -split 0 -local_icons -address kolyuchiy@gmail.com -no_auto_link project.tex
The translation was initiated by Kolia Morev on 2003-06-14
Обновлено Tue Apr 15 21:27:20 2014 +0400