![]() |
Прежде чем задать вопрос, смотрите FAQ.
Рекомендуем загрузить DRKB.
![]() |
neZvezda |
![]()
Сообщение
#1
|
Новичок ![]() Группа: Пользователи Сообщений: 19 Пол: Женский Репутация: ![]() ![]() ![]() |
Берутся вопросы из файла, скорее всего рандомом. Все файлы лежат в БД.
По кол-ву отвеченных вопросов следует выдать тестируемому человеку оценку. А оценка определяется кол-вом правильных ответов и сложностью вопроса. Т.е. начинает ученик отвечать на вопросы. Ответил на первый со сложностью средней, к примеру. Дальше тест определяет уровень сложности следующего вопроса. Если ученик ответил правильно, то тест может повысить уровень сложности. А если ученик ответил неправильно, то понизить уровень сложности. И еще составляется матрица игры. В ней расписаны стратегии игроков. Задается вектор выигрышей самостоятельно. Т.е. все возможные варианты действий тестируемого и кол-во баллов, полученных при каждой ситуации. -------------------------------- В чем проблема: в принципе, все это реализовать я смогу. Но я не понимаю, как это дело все собрать в кучу. И оформление. Чтобы выглядело как тест с 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.
|
![]() ![]() |
neZvezda |
![]()
Сообщение
#2
|
Новичок ![]() Группа: Пользователи Сообщений: 19 Пол: Женский Репутация: ![]() ![]() ![]() |
Могу более подробно объяснить, что мне нужно.
И то, как я это делаю. Просто приведенная программа чем-то на мою должна быть похожа. |
Altair |
![]()
Сообщение
#3
|
![]() Ищущий истину ![]() ![]() ![]() ![]() ![]() ![]() Группа: Модераторы Сообщений: 4 824 Пол: Мужской Реальное имя: Олег Репутация: ![]() ![]() ![]() |
посмотри вот это... в одной из модификаций найдешь много полезного
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 -------------------- Помогая друг другу, мы справимся с любыми трудностями!
"Не опускать крылья!" (С) |
neZvezda |
![]()
Сообщение
#4
|
Новичок ![]() Группа: Пользователи Сообщений: 19 Пол: Женский Репутация: ![]() ![]() ![]() |
Это я уже скачала по поиску из предыдущих тем. Спасибо. Хотелось бы еще мыслей.
|
Altair |
![]()
Сообщение
#5
|
![]() Ищущий истину ![]() ![]() ![]() ![]() ![]() ![]() Группа: Модераторы Сообщений: 4 824 Пол: Мужской Реальное имя: Олег Репутация: ![]() ![]() ![]() |
каких ? вопрос в чем конкретно ? интерфейс?
5 вопросов - 10 переключателей. вопрос1 овтет1 () овтет2 () вопрос2 овтет1 () овтет2 () ... вопрос5 овтет1 () овтет2 () Внизу кнопка отправить (ответить) обработкик смотрит на переключатели и считает все что надо.. и выводит окно с результатами.. чем не вариант ? -------------------- Помогая друг другу, мы справимся с любыми трудностями!
"Не опускать крылья!" (С) |
neZvezda |
![]()
Сообщение
#6
|
Новичок ![]() Группа: Пользователи Сообщений: 19 Пол: Женский Репутация: ![]() ![]() ![]() |
Вопрос с тестом.
Пусть переговоры закончатся в N=5 тура. И пусть каждая из сторон в каждом туре имеет только две альтернативы, два варианта выдвигаемого предложения. Ученик имеет-"верно" и "неверно" ответить. ТЕСТ имеет "повысить сложность" и "понизить сложность" Далее переговоры ведутся так. Первая сторона (ученик) отвечает на вопрос ("верно" или "неверно"). В ответ вторая сторона (ТЕСТ), рассмотрев это предложение, высказывает своё предложение ("повысить сложность" или "понизить"). После этого первая сторона, зная уже две составляющие ситуации (своё первое предложение и ответ контрагента), высказывает новое предложение (третье число 1 или 2). И т.д. до 5 шага. Бинарное дерево если нарисовать, то у меня возникает вопрос: если ученик ответил неправильно, то у ТЕСТА 2 альтернативы "повысить" или "понизить". Тогда ТЕСТУ всегда предлагать "понизить"? А повысить тогда не рассматривать? Или даже при неверном ответе ТЕСТ может "повышать сложность" Т.к. по логике, если человек отвечает неправильно, то уровень сложности понижается. Но тут может быть 2 варианта действия теста. Так вот как это запрограммировать? Каков алгоритм? Сообщение отредактировано: neZvezda - 20.11.2005 13:26 |
neZvezda |
![]()
Сообщение
#7
|
Новичок ![]() Группа: Пользователи Сообщений: 19 Пол: Женский Репутация: ![]() ![]() ![]() |
Интересует вектор выигрышей.
Он должен заполняться автоматически. Т.к. в тесте 5 вопросов и это 9 уровней бинарного дерева. Т.е. 2^9=512 вариантов завершения теста. Все вручную заполнять-глупо. Надо сделать так, чтобы эти 512 вариантов заполнились каким-то количеством баллов, по которым впоследствии можно будет оценить ученика. Т.е. если он на все 5 вопросов ответил правильно, и тест в своих 4х ходах повысил сложность, то у ученика должно быть максимальное кол-во баллов. И наоборот, если ученик не ответил ни на один вопрос, и тест в своих 4х ходах понижал сложность вопроса, то ученик получет минимальное количествоа баллов. А вот остальные вектора выигрышей надо как-то заполнить автоматически, исходя из того, на сколько вопросов ученик ответил правильно, и у скольки вопросов тест повышал или понижал сложность. |
![]() ![]() |
![]() |
Текстовая версия | 23.07.2025 15:29 |