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

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

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

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