03.05 11:41Утренний позитив! Неудачные фото знаменитостей (ФОТО - ЖЕСТЬ)[УКРАИНСКИЙ МУЗЫКАЛЬНЫЙ ПОРТАЛ]
03.05 11:32Экс-солистка группы "Рефлекс" Ирина Нельсон развлеклась в Арабских Эмиратах! (Cоблазнительные ФОТО)[УКРАИНСКИЙ МУЗЫКАЛЬНЫЙ ПОРТАЛ]
02.05 18:0045-летняя Дэми Мур разделась для журнала после пластики (ФОТО)[УКРАИНСКИЙ МУЗЫКАЛЬНЫЙ ПОРТАЛ]
02.05 15:44Мухи 3D[Film.Ru]
02.05 15:44Милые мелочи[Film.Ru]
02.05 15:44Новый фильм Клинта Иствуда будет комедией[Film.Ru]
02.05 15:44"SuperПерец" Иона Хилл намерен проникнуть в "Трансформеры 2"[Film.Ru]
02.05 15:44Рыжий да красный -- человек опасный[Film.Ru]
02.05 15:44Николь Кидман сыграет проблемную звезду 60-х Дасти Спрингфилд[Film.Ru]
02.05 15:44Брэд Питт заинтересовался "Взрослением на метамфетамине"[Film.Ru]
Время - это:
Результат
Архив

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


Автоматизированная система распределения мест и оценок качества олимпиадных заданий - Педагогика - Скачать бесплатно


  except
                      Application.MessageBox('Ошибка      создания      базы
данных!','Внимание',mb_OK+mb_IconHand);
                  Exit;
                end;
        Form1.Table1.Active:=True;
        Form1.dsOlymp.DataSet:=Form1.Table1;
        Form1.DBGrid1.DataSource:=Form1.dsOlymp;
        Comm:=TStringList.Create;
        Comm.Clear;
        Comm.Add(Edit2.Text);
        Comm.SaveToFile('Bases'+Edit1.Text+'.olp');
        Comm.Free;
        Form1.Label1.Caption:='Описание БД: '+Edit2.Text;
        ModalResult:=mrNo;
end;

end.

Модуль 6.
Этот модуль  отвечает  за  весь  процесс  оценки  качества  заданий.  В  нем
рассчитываются все параметры, и строятся необходимые диаграммы.
unit Unit7;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls,
Forms,
  Dialogs, ExtCtrls, StdCtrls, Buttons, Grids, DBGrids, TeEngine, Series,
  TeeProcs, Chart, DB, DBTables, INIFiles;

type
  TForm7 = class(TForm)
    Panel1: TPanel;
    BitBtn1: TBitBtn;
    Chart1: TChart;
    Series1: TBarSeries;
    DataSource1: TDataSource;
    Query1: TQuery;
    GroupBox1: TGroupBox;
    Label1: TLabel;
    Label2: TLabel;
    Label4: TLabel;
    Label5: TLabel;
    Chart2: TChart;
    Series2: TBarSeries;
    Chart3: TChart;
    Series3: TLineSeries;
    Series4: TBarSeries;
    Series5: TBarSeries;
    Label3: TLabel;
    Series6: TLineSeries;
    procedure BitBtn1Click(Sender: TObject);
    procedure FormShow(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form7: TForm7;
  Cf1:TIniFile;

implementation

uses Unit1, Unit5, foxsoft;

{$R *.dfm}

procedure TForm7.BitBtn1Click(Sender: TObject);
begin
 ModalResult:=mrOk;
end;

procedure TForm7.FormShow(Sender: TObject);
var
  i,j,NumI,kl,kz,nz,gr:integer;
  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']+Query1.FieldValues['MARK4'];
           block3:=Query1.FieldValues['MARK5']+Query1.FieldValues['MARK6'];
           dx1:=dx1+sqr(block1-srbl1);
           dx2:=dx2+sqr(block2-srbl2);
           dx3:=dx3+sqr(block3-srbl3);
           Query1.Next;
        end;
      sdxq1:=dx1/Query1.RecordCount;
      sdxq2:=dx2/Query1.RecordCount;
      sdxq3:=dx3/Query1.RecordCount;
      sigm1:=sqrt(sdxq1);
      sigm2:=sqrt(sdxq2);
      sigm3:=sqrt(sdxq3);
      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));
      kn[3]:=((m-srbl3)*((m-srbl3)*srbl3-sqr(sigm3))/(m*sqr(sigm3)-(m-
srbl3)*srbl3))-1;
      kp[3]:=1-((srbl3*((m-srbl3)*srbl3-sqr(sigm3)))/(m*sqr(sigm3)-(m-
srbl3)*srbl3));
      Series3.Clear;
      for i:=1 to 3 do
      Series3.AddXY(kn[i],kp[i]);
    end;

   m:=0;
   Series6.Clear;
     for i:=0 to 20 do
        begin
           Series6.AddXY(m,-1*m);
           m:=m+2;
        end;
end;
end.
Модуль 7.
Этот модуль носит вспомогательный характер.  Он  необходим  для  правильного
округления десятичных чисел с указанной степенью точности.
unit foxsoft;

interface
uses SysUtils;
 function Okrugl(cs:double;numb:integer):double;
implementation
 function Okrugl(cs:Double;numb:integer):double;
  var
   db,db1,db2:double;
   i:int64;
   ii,ink,i1:integer;
   st:string;
  begin
   db:=db-int(cs);
   ink:=1;
   for ii:=1 to numb do ink:=ink*10;
   db1:=db*ink;
   db2:=cs*ink*100;
   i:=trunc(int(db2)/100);
   i1:=Trunc(db2-i*100);
   if i1>49 then inc(i);
   Result:=i/ink;
  end;

end.



                                 Литература.
   1. Кирьяков Б. С.    Педагогическая  модель  интеллектуального  испытания
      школьников. – Рязань: Изд-во «Русское слово», 2002.
   2. Кирьяков  Б.  С.  Педагогическая  модель  интеллектуального  испытания
      учащихся/Вестник    Рязанского    государственного     педагогического
      университета. Рязань: РГПУ, 2001.
   3.  Шарапков  А.  Н.,  Кирьяков  Б.  С.  Исследование  гуманности  режима
      соревнования  на  олимпиадах  школьников.  //   Рязанские   физические
      олимпиады // Рязань: «РИНФО», 2000. Выпуск 8.
   4. Кирьяков Б. С. Проблемы проведения олимпиад в условиях  дифференциации
      уровня  подготовки  школьников  //  Рязанские  физические  олимпиады//
      Выпуск 8, – Рязань: Изд-во «РИНФО», 2000.
   5. Кирьяков Б.  С.  Параметры  интеллектуального  испытания  учащихся  на
      олимпиаде// Рязанские физические олимпиады// Выпуск 9, – Рязань, 2001.

   6. Лишер Р. Delphi. Справочник. – Пер. с  англ.  –  СПб.:  «Символ-Плюс»,
      2001.
   7. Фаронов В. В. Delphi 5.  Руководство  программиста.  –  М.:  «Нолидж»,
      2001.
   8. Озеров В. Delphi. Советы программистов. – СПб.: «Символ-Плюс», 2003.
 

назад |  6 | вперед


Назад
 


Новые поступления

Украинский Зеленый Портал Рефератик создан с целью поуляризации украинской культуры и облегчения поиска учебных материалов для украинских школьников, а также студентов и аспирантов украинских ВУЗов. Все материалы, опубликованные на сайте взяты из открытых источников. Однако, следует помнить, что тексты, опубликованных работ в первую очередь принадлежат их авторам. Используя материалы, размещенные на сайте, пожалуйста, давайте ссылку на название публикации и ее автора.

281311062 (руководитель проекта)
401699789 (заказ работ)
© il.lusion,2007г.
Карта сайта
  
  
 
МЕТА - Украина. Рейтинг сайтов Союз образовательных сайтов