Кабардино-Балкарский государственный университет
Опубликован: 11.11.2008 | Доступ: свободный | Студентов: 7329 / 2183 | Оценка: 4.16 / 3.99 | Длительность: 04:36:00
Темы: Программирование, Образование
Дополнительный материал 3:
Тексты программ на Паскале для решения задач оценивания тестирования
Задача 3.
program P3;
uses crt;
var
a:array[1..100,1..100] of integer;
n,m:integer;
b,stud_bal,tru_ans_count:array[1..100] of integer;
r,c,d,y,x,disp,std_otk:array[1..100] of real;
Disp_all,Stand_otkl_all:real;
procedure Input_6;
var i,j:integer;
begin
write('Количество тестированных n=');
readln(n);
write('Длина теста m=');
readln(m);
writeln('Введите результаты тестирования');
for i:=1 to n do
for j:=1 to m do
begin
write('a[',i,',',j,']=');
readln(a[i,j]);
end;
writeln;
writeln('Введите эталонные результаты');
for i:=1 to m do
begin
write('b[',i,']=');
readln(b[i]);
end;
end;
procedure Output_6;
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;
function SA_6:real;
var s:real;
i:integer;
begin
s:=0;
SA_6:=0;
for i:=1 to m do
s:=s+disp[i];
if (m<>0)
then SA_6:=s/m;
end;
function Dispersia_6:real;
var s:real;
i:integer;
sa:real;
begin
sa:=SA_6;
s:=0;
for i:=1 to m do
s:=s+sqrt(disp[i]);
Dispersia_6:=abs((s-m*sqrt(sa))/(m-1));
end;
procedure CheckAnsw;
var i,k,j,s_tr,s_fl:integer;
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_6;
Stand_otkl_all:=sqrt(Dispersia_6) ;
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;
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
clrscr;
Input_6;
clrscr;
Output_6;
CheckAnsw;
PrintResult;
readkey;
end.