Опубликован: 11.11.2008 | Уровень: специалист | Доступ: платный | ВУЗ: Кабардино-Балкарский государственный университет
Дополнительный материал 3:
Тексты программ на Паскале для решения задач оценивания тестирования
Задача 4.
program P4; uses crt; type mas=array[1..10,1..10] of integer; int_vect=array[1..10] of integer; var aa:mas ; nn,mm:integer; bb:int_vect; procedure Input_7; var i,j:integer; begin write('Количество тестированных n='); readln(nn); write('Длина теста m='); readln(mm); writeln('Введите результаты тестирования'); for i:=1 to nn do for j:=1 to mm do begin write('a[',i,',',j,']='); readln(aa[i,j]); end; writeln; writeln('Введите эталонные результаты'); for i:=1 to mm do begin write('b[',i,']='); readln(bb[i]); end; end; procedure Output_7(a:mas;n,m:integer); var i,j:integer; begin for i:=1 to n do begin for j:=1 to m do write(a[i][j]:6,' '); writeln; end end; procedure CheckAnsw(a:mas;b:int_vect;n,m:integer;var stud_bal:int_vect); var i,k,j,s_tr,s_fl:integer; Disp_all,Stand_otkl_all:real; tru_ans_count:array[1..100] of integer; r,c,d,y,x,disp,std_otk:array[1..100] of real; function SA_7:real; var s:real; i:integer; begin s:=0; SA_7:=0; for i:=1 to m do s:=s+disp[i]; if (m<>0) then SA_7:=s/m; end; function Dispersia_7:real; var s:real; i:integer; sa:real; begin sa:=SA_7; s:=0; for i:=1 to m do s:=s+sqrt(disp[i]); Dispersia_7:=abs((s-m*sqrt(sa))/(m-1)); end; procedure PrintResult; var i:integer; begin writeln('Вектор весов выполнения :'); for i:=1 to m do write(c[i]:8:2); writeln; writeln; writeln('Вектор весов невыполнения :'); for i:=1 to m do write(d[i]:8:2); writeln; writeln; writeln('Дисперсии каждого задания :'); for i:=1 to m do write(disp[i]:8:2); writeln; writeln; writeln('Стандартное отклонение каждого задания :'); for i:=1 to m do write(std_otk[i]:8:2); writeln; writeln; writeln('Общая дисперсии по всему тесту:',Disp_all:8:2); writeln; writeln('Стандартное отклонение по всему тесту:',Stand_otkl_all:8:2); writeln; writeln('Коэффициенты корреляции :'); for i:=1 to m do begin write(r[i]:8:2); if (r[i]>0.3) then writeln(' Валидное.') else writeln(' Невалидное.') end; end; begin for i:=1 to n do begin k:=0; for j:=1 to m do if (a[i,j]=b[j]) then inc(k); stud_bal[i]:=k; end; for j:=1 to m do begin k:=0; s_tr:=0; s_fl:=0; for i:=1 to n do if (a[i,j]=b[j]) then begin inc(k); s_tr:=s_tr+stud_bal[i]; end else s_fl:=s_fl+stud_bal[i]; tru_ans_count[j]:=k; if (k<>0) then x[j]:=s_tr/k else x[j]:=0; if (k<>n) then y[j]:=s_fl/(n-k) else y[j]:=0; if (k<>0) then c[j]:=n/k else c[j]:=0; if (k<>n) then d[j]:=n/(n-k) else d[j]:=0; disp[j]:=c[j]*d[j]; std_otk[j]:=sqrt(disp[j]); end; Disp_all:=Dispersia_7; Stand_otkl_all:=sqrt(Dispersia_7) ; for j:=1 to m do if (Stand_otkl_all>0) then r[j]:=(x[j]-y[j])*Std_otk[j]/Stand_otkl_all else r[j]:=0; PrintResult; end; procedure Main; var bx,by,x,y:int_vect; var ax,ay:mas; var mx,my:integer; var i,j:integer; function Koeff_Korell:real; var sxy,sx,sy,sx2,sy2,vall:real; var i:integer; begin sxy:=0; sx:=0; sy:=0; sx2:=0; sy2:=0; for i:=1 to nn do begin sxy:=sxy+x[i]*y[i]; sx:=sx+x[i]; sy:=sy+y[i]; sx2:=sx2+sqr(x[i]); sy2:=sy2+sqr(y[i]); end; val1:=(sqrt(sx2-sqr(sx)/nn)*sqrt(sy2-sqr(sy)/nn)); if (val1<>0) then Koeff_Korell:=(sxy-sx*sy/nn)/val1 else Koeff_Korell:=0; end; var rXY,r:real; begin mx:=0; my:=0; if (mm>1) then mm:=2*(mm div 2); for j:=1 to mm do if (j mod 2=0) then begin inc(mx); bx[mx]:=bb[j] ; for i:=1 to nn do ax[i,mx]:=aa[i,j] end else begin inc(my); by[my]:=bb[j]; for i:=1 to nn do ay[i,my]:=aa[i,j] end; writeln('Масив X:'); Output_7(ax,nn,mx); CheckAnsw(ax,bx,nn,mx,x); writeln; writeln('Масив Y:'); Output_7(ay,nn,my); CheckAnsw(ay,by,nn,my,y); writeln; rXY:=Koeff_Korell; writeln('Коэффициент корреляции X и Y:',rXY:8:2); r:=2*rXY/(1+rXY); writeln('Надежность всего теста:',r:8:2); end; begin clrscr; Input_7; clrscr; Main; readln; readln; end.