Главная    Почта    Новости    Каталог    Одноклассники    Погода    Работа    Игры     Рефераты     Карты
  
по Казнету new!
по каталогу
в рефератах

Автоматизированная система распределения мест и оценок качества олимпиадных заданий

;
  ind,per,block1,block2,block3,coun,coun1,coun2,coun3,n1,n2,n3,k:double;
  p1,p2,p3:array [1..50] of double;
  GrPar, GrPercent, parm:array[1..200] of double;
  MCon, Default,maxb:string;
  sbl1,sbl2,sbl3:double;
  kn, kp:array[1..3] of double;
  srbl1,srbl2,srbl3,sdxq1,sdxq2,sdxq3:double;
  dx1,dx2,dx3,sigm1,sigm2,sigm3,m:double;
begin
 try
  with Query1 do
   begin
    Active:=False;
    SQL.Clear;
    SQL.Add('Select * from "'+Form1.Table1.TableName+'"');

    ExecSQL;
   end;
   Query1.Active:=True;

   Chart1.Enabled:=True;

  except
   Application.MessageBox('Ошибка инициализации БД. Возможно не установлен
BDE, или база не открыта.','Ошибка',mb_Ok+MB_ICONHAND);
   Chart1.Enabled:=False;

   Exit;
  end;
  if Query1.RecordCount=0 then
   begin
    Application.MessageBox('В БД нет ни одной
записи.','Сообщение',mb_Ok+MB_ICONASTERISK);
    Exit;
   end;
  Cf1:=TIniFile.Create(GetCurrentDir+'Config.ini');
 try
  with Cf1 do
   begin
    MCon:=ReadString('MARK_CONFIG','MARKS_TYPE',Default);
    if MCon='ONE_IN_ONE' then
      begin
        maxb:=ReadString('MARK_CONFIG','MARKS_VALUE',Default);
      end;
    MCon:=ReadString('BLOCK_CONFIG','NUM_BLOCKS',Default);
   end;
 NumI:=StrToInt(maxb);
   Cf1.Free;
 except
  Application.MessageBox('Ошибка чтения из INI-файла. Проверьте
конфигурацию.','Ошибка',mb_Ok+mb_IconHand);
  Exit;
 end;
  for i:=0 to 200 do
   begin
     GrPar[i]:=0;
     GrPercent[i]:=0;
     parm[i]:=0;
   end;
  per:=0;
  ind:=0;
  Query1.First;
  for j:=1 to Query1.RecordCount do
         begin
           parm[j]:=Query1.FieldValues['SUMMARK'];
           Query1.Next;
         end;
     ind:=0;
     for i:=1 to 6*NumI+1 do
      begin
         for j:=1 to Query1.RecordCount do
           begin
             if ind=parm[j] then per:=per+1;
           end;
        GrPar[i]:=ind;
        GrPercent[i]:=per/Query1.RecordCount;
        per:=0;
        ind:=ind+1;
      end;
     Series1.Clear;
     Chart1.BottomAxis.Title.Caption:='Суммарный балл';
     Chart1.BottomAxis.Minimum:=0*NumMarks;
     Chart1.BottomAxis.Maximum:=ind-1;
     For i:=0 to 6*NumI+1 do
      begin
       Series1.AddXY(GrPar[i],GrPercent[i]);
      end;
  if MCon='2' then
    begin
     with Query1 do
      begin
       Series2.Clear;
       Chart2.BottomAxis.Maximum:=RecordCount;
       Chart2.BottomAxis.Minimum:=0;
       n1:=0;
       k:=1;
       coun:=0;
       First;
       for i:=1 to RecordCount do
        begin

block1:=FieldValues['MARK1']+FieldValues['MARK2']+FieldValues['MARK3'];

block2:=FieldValues['MARK4']+FieldValues['MARK5']+FieldValues['MARK6'];
         Series2.AddXY(k,block1-block2);
         if block1-block2>=0 then coun:=coun+1;
         Next;
         k:=k+1;
        end;
     end;
   n1:=coun/Query1.RecordCount;
   Label1.Caption:='Надежность реализации - '+FloatToStr(n1*100)+'%.';
  end;

  if MCon='3' then
    begin
     with Query1 do
      begin
       Series2.Clear;
       Series4.Clear;
       Series5.Clear;
       Chart2.BottomAxis.Maximum:=RecordCount+10;
       Chart2.BottomAxis.Minimum:=0;
       n1:=0; n2:=0; n3:=0;
       k:=1;
       coun:=0; coun2:=0; coun3:=0;
       First;
       for i:=1 to RecordCount do
        begin
         block1:=FieldValues['MARK1']+FieldValues['MARK2'];
         block2:=FieldValues['MARK3']+FieldValues['MARK4'];
         block3:=FieldValues['MARK5']+FieldValues['MARK6'];
         Series2.AddXY(k,block1-block2);
         Series4.AddXY(k,block2-block3);
         Series5.AddXY(k,block1-block3);
         if block1-block2>=0 then coun1:=coun1+1;
         if block2-block3>=0 then coun2:=coun2+1;
         if block1-block3>=0 then coun3:=coun3+1;
         Next;
         k:=k+1;
        end;
     end;
   n1:=coun1/Query1.RecordCount;
   n2:=coun2/Query1.RecordCount;
   n3:=coun3/Query1.RecordCount;
   Label1.Caption:='Надежность реализации -
'+FloatToStr(Okrugl(n1*100,2))+'%, '+FloatToStr(Okrugl(n2*100,2))+'%,
'+FloatToStr(Okrugl(n3*100,2))+'%.';
  end;
  if MCon='1' then
    begin
      Series2.Clear;
      Series4.Clear;
      Series5.Clear;
      Label1.Caption:='Параметр не имеет смысла с 1 блоком.';
    end;
  Label3.Caption:='Количество блоков задач - '+Mcon;
  Label5.Caption:='Обшее количество участников
'+IntToStr(Query1.RecordCount)+'.';
  Label4.Caption:='Максимальный балл равен '+IntToStr(NumI)+'.';

  if MCon<>'1' then
   begin
     Query1.First;
     for i:=1 to Query1.RecordCount do
       begin
         p1[i]:=Query1.FieldValues['PARAM1'];
         p2[i]:=Query1.FieldValues['PARAM2'];
         p3[i]:=Query1.FieldValues['PARAM3'];
         Query1.Next;
       end;
     kl:=0;
     j:=1;
     kz:=Query1.RecordCount;
     nz:=0;
     gr:=0;
     for i:=1 to kz do
       begin
        with Query1 do
         begin
          Active:=False;
          SQL.Clear;
          SQL.Add('Select * from "'+Form1.Table1.TableName+'"');
          SQL.Add('where (PARAM1='+FloatToStr(p1[j])+') and
(PARAM2='+FloatToStr(p2[j])+') and (PARAM3='+FloatToStr(p3[j])+')');
          ExecSQL;
          Active:=True;
          kl:=Query1.RecordCount;
          if kl=1 then j:=j+1;
          if kl>1 then
           begin
            j:=j+kl;
            nz:=nz+kl;
            gr:=gr+1;
           end;
        end;
      end;
   Label2.Caption:='Коэффициент мест - '+FloatToStr(Okrugl((kz-
nz+gr)/kz,2))+'.';
  end
   else Label2.Caption:='Для одного блока не рассчитывается.';
   //This is a demo-code for KN & KP
  try
   with Query1 do
     begin
      Active:=False;
      SQL.Clear;
      SQL.Add('Select * from "'+Form1.Table1.TableName+'"');
      ExecSQL;
     end;
   Query1.Active:=True;
   Chart1.Enabled:=True;
  except
   Application.MessageBox('Ошибка инициализации БД. Возможно не установлен
BDE, или база не открыта.','Ошибка',mb_Ok+MB_ICONHAND);
   Chart1.Enabled:=False;
   Exit;
  end;

   sbl1:=0; srbl1:=0;
   sbl2:=0; srbl2:=0;
   sbl3:=0; srbl3:=0;
   dx1:=0; dx2:=0; dx3:=0;
   sdxq1:=0; sdxq2:=0; sdxq3:=0;
   sigm1:=0; sigm2:=0; sigm3:=0;
   Query1.First;

   if MCon='2' then
     begin
      for i:=1 to Query1.RecordCount do
        begin

block1:=Query1.FieldValues['MARK1']+Query1.FieldValues['MARK2']+Query1.Field
Values['MARK3'];

block2:=Query1.FieldValues['MARK4']+Query1.FieldValues['MARK5']+Query1.Field
Values['MARK6'];
          sbl1:=sbl1+block1;
          sbl2:=sbl2+block2;
          Query1.Next;
        end;
      srbl1:=sbl1/Query1.RecordCount;
      srbl2:=sbl2/Query1.RecordCount;
      Query1.First;
      for i:=1 to Query1.RecordCount do
        begin

block1:=Query1.FieldValues['MARK1']+Query1.FieldValues['MARK2']+Query1.Field
Values['MARK3'];

block2:=Query1.FieldValues['MARK4']+Query1.FieldValues['MARK5']+Query1.Field
Values['MARK6'];
           dx1:=dx1+sqr(block1-srbl1);
           dx2:=dx2+sqr(block2-srbl2);
           Query1.Next;
        end;
      sdxq1:=dx1/Query1.RecordCount;
      sdxq2:=dx2/Query1.RecordCount;
      sigm1:=sqrt(sdxq1);
      sigm2:=sqrt(sdxq2);
      m:=StrToFloat(maxb);
      kn[1]:=((m-srbl1)*((m-srbl1)*srbl1-sqr(sigm1))/(m*sqr(sigm1)-(m-
srbl1)*srbl1))-1;
      kp[1]:=1-((srbl1*((m-srbl1)*srbl1-sqr(sigm1)))/(m*sqr(sigm1)-(m-
srbl1)*srbl1));
      kn[2]:=((m-srbl2)*((m-srbl2)*srbl2-sqr(sigm2))/(m*sqr(sigm2)-(m-
srbl2)*srbl2))-1;
      kp[2]:=1-((srbl2*((m-srbl2)*srbl2-sqr(sigm2)))/(m*sqr(sigm2)-(m-
srbl2)*srbl2));
      Series3.Clear;
      for i:=1 to 2 do
      Series3.AddXY(kn[i],kp[i]);
    end;

    if MCon='1' then
     begin
      for i:=1 to Query1.RecordCount do
        begin
          block1:=Query1.FieldValues['SUMMARK'];
          sbl1:=sbl1+block1;
          Query1.Next;
        end;
      srbl1:=sbl1/Query1.RecordCount;
      Query1.First;
      for i:=1 to Query1.RecordCount do
        begin
           block1:=Query1.FieldValues['SUMMARK'];
           dx1:=dx1+sqr(block1-srbl1);
           Query1.Next;
        end;
      sdxq1:=dx1/Query1.RecordCount;
      sigm1:=sqrt(sdxq1);
      m:=StrToFloat(maxb);
      kn[1]:=((m-srbl1)*((m-srbl1)*srbl1-sqr(sigm1))/(m*sqr(sigm1)-(m-
srbl1)*srbl1))-1;
      kp[1]:=1-((srbl1*((m-srbl1)*srbl1-sqr(sigm1)))/(m*sqr(sigm1)-(m-
srbl1)*srbl1));

      Series3.AddXY(kn[1],kp[1]);
    end;

    if MCon='3' then
     begin
      for i:=1 to Query1.RecordCount do
        begin
          block1:=Query1.FieldValues['MARK1']+Query1.FieldValues['MARK2'];
          block2:=Query1.FieldValues['MARK3']+Query1.FieldValues['MARK4'];
          block3:=Query1.FieldValues['MARK5']+Query1.FieldValues['MARK6'];
          sbl1:=sbl1+block1;
          sbl2:=sbl2+block2;
          sbl3:=sbl3+block3;
          Query1.Next;
        end;
      srbl1:=sbl1/Query1.RecordCount;
      srbl2:=sbl2/Query1.RecordCount;
      srbl3:=sbl3/Query1.RecordCount;
      Query1.First;
      for i:=1 to Query1.RecordCount do
        begin
           block1:=Query1.FieldValues['MARK1']+Query1.FieldValues['MARK2'];
           block2:=Query1.FieldValues['MARK3']+Query
Пред.11121314
скачать работу

Автоматизированная система распределения мест и оценок качества олимпиадных заданий

 

Отправка СМС бесплатно

На правах рекламы


ZERO.kz
 
Модератор сайта RESURS.KZ