IPB
ЛогинПароль:

> ВНИМАНИЕ!

Прежде чем задать вопрос, смотрите FAQ.
Рекомендуем загрузить DRKB.

> Тест в Делфи на основе позиционной игры, с вектором выигрышей и min\max
neZvezda
сообщение 19.11.2005 21:47
Сообщение #1


Новичок
*

Группа: Пользователи
Сообщений: 19
Пол: Женский

Репутация: -  0  +


Берутся вопросы из файла, скорее всего рандомом. Все файлы лежат в БД.
По кол-ву отвеченных вопросов следует выдать тестируемому человеку оценку.
А оценка определяется кол-вом правильных ответов и сложностью вопроса.
Т.е. начинает ученик отвечать на вопросы. Ответил на первый со сложностью средней, к примеру.
Дальше тест определяет уровень сложности следующего вопроса. Если ученик ответил правильно, то тест может повысить уровень сложности. А если ученик ответил неправильно, то понизить уровень сложности.

И еще составляется матрица игры. В ней расписаны стратегии игроков.

Задается вектор выигрышей самостоятельно.
Т.е. все возможные варианты действий тестируемого и кол-во баллов, полученных при каждой ситуации.

--------------------------------
В чем проблема:
в принципе, все это реализовать я смогу. Но я не понимаю, как это дело все собрать в кучу. И оформление. Чтобы выглядело как тест с 5ю вопросами, по прохождению которых выдавалась бы оценка.
?

Вот код похожей программки:

unit Pozigr1;

interface

uses
  SysUtils, WinTypes, WinProcs, Messages, Classes, Graphics, Controls,
  Forms, Dialogs, Grids, StdCtrls, Spin;

type
  TForm1 = class(TForm)
    Label1: TLabel;
    Button1: TButton;
    SpinEdit1: TSpinEdit;
    StringGrid1: TStringGrid;
    StringGrid2: TStringGrid;
    Label2: TLabel;
    Label3: TLabel;
    CheckBox1: TCheckBox;
    procedure FormCreate(Sender: TObject);
    procedure Button1Click(Sender: TObject);
    procedure SpinEdit1Change(Sender: TObject);
    procedure CheckBox1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

const
   Nmax = 5;

type
   Matr = array [ 1..32{2^5},1..16{2^(5-1)} ] of real;
   Vekt = array [ 1..32 ] of real;

var
  Form1: TForm1;
  M : Matr;
  W : Vekt;
  N,D1,D2 : integer;

implementation

function DvaVStepeni ( n : integer ) : integer;
   begin
      DvaVStepeni:=1 shl n;
      end;

function Bit ( x{число} : integer;  n{номер от конца} : integer ) : integer;
   var   b : integer;
   begin
      b:=1 shl (n-1);
      Bit:=0;
      if (x and b)<>0 then Bit:=1;
      end;

function Vektor ( x,n : integer ) : string;
   var   i : integer;   s : string;
   begin
      s:='( ';
      for i:=1 to n do begin
         if Bit(x,n-i+1)=0
            then s:=s+'1, '
            else s:=s+'2, ';
         end;
      s[length(s)-1]:=' ';
      s[length(s)]:=')';
      Vektor:=s;
      end;

function Nomer ( n1,n2,n : integer ) : integer;
   var   i,k,rez : integer;
   begin
      k:=Bit(n1,n);
      rez:=k shl (n-1);
      for i:=n-1 downto 1 do begin
         if (i and 1)=0
            then begin {ход второго по n2}
               k:=Bit(n2 shl k,i);
               rez:=rez or (k shl (i-1));
               end
            else begin {ход первого по n1}
               k:=Bit(n1 shl k,i+1);
               rez:=rez or (k shl (i-1));
               end;
         end;
      Nomer:=rez;
      end;

{$R *.DFM}

procedure TForm1.FormCreate(Sender: TObject);
   begin
      Randomize;
      StringGrid1.Cells[0,0]:='Выигрыш в партии:';
      StringGrid1.Cells[1,0]:='Составляет:';
      StringGrid2.ColWidths[0]:=100;
      SpinEdit1.Value:=3;
      SpinEdit1.MaxValue:=Nmax;
      end;

procedure TForm1.Button1Click(Sender: TObject);
   var   i,k,maxmin,minmax : integer;
         min,max : Vekt;
   begin
      for i:=1 to D1 do begin
         W[i]:=StrToFloat(StringGrid1.Cells[1,i]);
         end;
      for i:=1 to D1 do for k:=1 to D2 do begin
         M[i,k]:=W[Nomer(i-1,k-1,N)+1];
         end;
      for i:=1 to D1 do for k:=1 to D2 do begin
         if CheckBox1.Checked
            then StringGrid2.Cells[k,i]:=Vektor(Nomer(i-1,k-1,N),N)
            else StringGrid2.Cells[k,i]:=FloatToStrF(M[i,k],ffFixed,11,3);
         end;
      for i:=1 to D1 do begin
         min[i]:=M[i,1];
         for k:=1 to D2 do
            if M[i,k]<min[i] then min[i]:=M[i,k];
         end;
      for k:=1 to D2 do begin
         max[k]:=M[1,k];
         for i:=1 to D1 do
            if M[i,k]>max[k] then max[k]:=M[i,k];
         end;
      maxmin:=1;
      for i:=1 to D1 do
         if min[i]>min[maxmin] then maxmin:=i;
      minmax:=1;
      for k:=1 to D2 do
         if max[k]<max[minmax] then minmax:=k;
      Label3.Caption:='Ответ:  '+Vektor(Nomer(maxmin-1,minmax-1,n),n);
      end;

procedure TForm1.SpinEdit1Change(Sender: TObject);
   var   i,k : integer;
   begin
      N:=SpinEdit1.Value;
      D1:=DvaVStepeni(N);
      D2:=DvaVStepeni(N-1);
      StringGrid1.RowCount:=D1+1;
      StringGrid2.RowCount:=D1+1;
      StringGrid2.ColCount:=D2+1;
      if N=3
         then begin
            k:=1;
            for i:=1 to 8 do begin
               W[i]:=k*i;   k:=-k;
               end;
            end
         else begin
            for i:=1 to D1 do begin
               k:=random(20);   W[i]:=k-10;
               end;
            end;
      for i:=1 to D1 do begin
         StringGrid1.Cells[0,i]:='                  W '+Vektor(i-1,N)+'  = ';
         StringGrid1.Cells[1,i]:=FloatToStrF(W[i],ffFixed,11,3);
         end;
      for i:=1 to D1 do begin
         StringGrid2.Cells[0,i]:=Vektor(i-1,N);
         end;
      for i:=1 to D2 do begin
         StringGrid2.Cells[i,0]:=Vektor(i-1,N-1);
         end;
      for i:=1 to D1 do for k:=1 to D2 do
         StringGrid2.Cells[k,i]:='';
      Label3.Caption:='';
      end;

procedure TForm1.CheckBox1Click(Sender: TObject);
   begin
      Button1Click(Sender);
      end;

end.


 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
 
 Ответить  Открыть новую тему 
Ответов(1 - 6)
neZvezda
сообщение 19.11.2005 21:49
Сообщение #2


Новичок
*

Группа: Пользователи
Сообщений: 19
Пол: Женский

Репутация: -  0  +


Могу более подробно объяснить, что мне нужно.
И то, как я это делаю. Просто приведенная программа чем-то на мою должна быть похожа.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
Altair
сообщение 20.11.2005 0:00
Сообщение #3


Ищущий истину
******

Группа: Модераторы
Сообщений: 4 824
Пол: Мужской
Реальное имя: Олег

Репутация: -  45  +


посмотри вот это... в одной из модификаций найдешь много полезного
http://pascal.dax.ru/files/program/alaric/testing.zip
http://pascal.dax.ru/files/program/alaric/testing_addon.zip
http://pascal.dax.ru/files/program/alaric/testing_ru.zip
http://pascal.dax.ru/files/program/alaric/testing2.zip
http://pascal.dax.ru/files/program/alaric/testing3.zip
http://pascal.dax.ru/files/program/alaric/testing_final.zip


--------------------
Помогая друг другу, мы справимся с любыми трудностями!
"Не опускать крылья!" (С)
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
neZvezda
сообщение 20.11.2005 0:20
Сообщение #4


Новичок
*

Группа: Пользователи
Сообщений: 19
Пол: Женский

Репутация: -  0  +


Это я уже скачала по поиску из предыдущих тем. Спасибо. Хотелось бы еще мыслей.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
Altair
сообщение 20.11.2005 1:14
Сообщение #5


Ищущий истину
******

Группа: Модераторы
Сообщений: 4 824
Пол: Мужской
Реальное имя: Олег

Репутация: -  45  +


каких ? вопрос в чем конкретно ? интерфейс?
5 вопросов - 10 переключателей.
вопрос1 овтет1 () овтет2 ()
вопрос2 овтет1 () овтет2 ()
...
вопрос5 овтет1 () овтет2 ()

Внизу кнопка отправить (ответить) обработкик смотрит на переключатели и считает все что надо.. и выводит окно с результатами..
чем не вариант ?


--------------------
Помогая друг другу, мы справимся с любыми трудностями!
"Не опускать крылья!" (С)
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
neZvezda
сообщение 20.11.2005 1:47
Сообщение #6


Новичок
*

Группа: Пользователи
Сообщений: 19
Пол: Женский

Репутация: -  0  +


Вопрос с тестом.

Пусть переговоры закончатся в N=5 тура.
И пусть каждая из сторон в каждом туре имеет только две альтернативы, два варианта выдвигаемого предложения.
Ученик имеет-"верно" и "неверно" ответить. ТЕСТ имеет "повысить сложность" и "понизить сложность"

Далее переговоры ведутся так. Первая сторона (ученик) отвечает на вопрос ("верно" или "неверно").
В ответ вторая сторона (ТЕСТ), рассмотрев это предложение, высказывает своё предложение ("повысить сложность" или "понизить").
После этого первая сторона, зная уже две составляющие ситуации (своё первое предложение и ответ контрагента), высказывает новое предложение (третье число 1 или 2). И т.д. до 5 шага.
Бинарное дерево если нарисовать, то у меня возникает вопрос:
если ученик ответил неправильно, то у ТЕСТА 2 альтернативы "повысить" или "понизить". Тогда ТЕСТУ всегда предлагать "понизить"? А повысить тогда не рассматривать? Или даже при неверном ответе ТЕСТ может "повышать сложность" Т.к. по логике, если человек отвечает неправильно, то уровень сложности понижается. Но тут может быть 2 варианта действия теста. Так вот как это запрограммировать? Каков алгоритм?

Сообщение отредактировано: neZvezda - 20.11.2005 13:26
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
neZvezda
сообщение 20.11.2005 13:25
Сообщение #7


Новичок
*

Группа: Пользователи
Сообщений: 19
Пол: Женский

Репутация: -  0  +


Интересует вектор выигрышей.
Он должен заполняться автоматически. Т.к. в тесте 5 вопросов и это 9 уровней бинарного дерева. Т.е. 2^9=512 вариантов завершения теста.
Все вручную заполнять-глупо. Надо сделать так, чтобы эти 512 вариантов заполнились каким-то количеством баллов, по которым впоследствии можно будет оценить ученика.

Т.е. если он на все 5 вопросов ответил правильно, и тест в своих 4х ходах повысил сложность, то у ученика должно быть максимальное кол-во баллов. И наоборот, если ученик не ответил ни на один вопрос, и тест в своих 4х ходах понижал сложность вопроса, то ученик получет минимальное количествоа баллов.
А вот остальные вектора выигрышей надо как-то заполнить автоматически, исходя из того, на сколько вопросов ученик ответил правильно, и у скольки вопросов тест повышал или понижал сложность.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

 Ответить  Открыть новую тему 
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 

- Текстовая версия 23.07.2025 15:29
Хостинг предоставлен компанией "Веб Сервис Центр" при поддержке компании "ДокЛаб"