Кабардино-Балкарский государственный университет
Опубликован: 11.11.2008 | Доступ: свободный | Студентов: 7320 / 2181 | Оценка: 4.16 / 3.99 | Длительность: 04:36:00
Темы: Программирование, Образование
Дополнительный материал 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.