Берутся вопросы из файла, скорее всего рандомом. Все файлы лежат в БД. По кол-ву отвеченных вопросов следует выдать тестируемому человеку оценку. А оценка определяется кол-вом правильных ответов и сложностью вопроса. Т.е. начинает ученик отвечать на вопросы. Ответил на первый со сложностью средней, к примеру. Дальше тест определяет уровень сложности следующего вопроса. Если ученик ответил правильно, то тест может повысить уровень сложности. А если ученик ответил неправильно, то понизить уровень сложности.
И еще составляется матрица игры. В ней расписаны стратегии игроков.
Задается вектор выигрышей самостоятельно. Т.е. все возможные варианты действий тестируемого и кол-во баллов, полученных при каждой ситуации.
-------------------------------- В чем проблема: в принципе, все это реализовать я смогу. Но я не понимаю, как это дело все собрать в кучу. И оформление. Чтобы выглядело как тест с 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;