Кабардино-Балкарский государственный университет
Опубликован: 11.11.2008 | Доступ: свободный | Студентов: 7214 / 2118 | Оценка: 4.16 / 3.99 | Длительность: 04:36:00
Дополнительный материал 3:

Тексты программ на Паскале для решения задач оценивания тестирования

< Дополнительный материал 2 || Дополнительный материал 3: 1234

Задача 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.
< Дополнительный материал 2 || Дополнительный материал 3: 1234
Татьяна Кожушко
Татьяна Кожушко
Евгения Уразаева
Евгения Уразаева