5 / 5 / 1
Регистрация: 03.09.2011
Сообщений: 152
1

Тест, перетасовка вопросов и самих ответов в вопросах

07.11.2011, 20:04. Показов 4767. Ответов 15
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте, объясните как сделать так, чтобы при запуске теста вопросы меняли свой порядок случайным образом, то есть вопрос например 5, стал 1, 4, 2 и т.д. и ещё чтобы ответы в вопросе менялись, то есть то что было под буквой а, стало под буквой в ... тоже случайным образом, не прошу писать за меня , хотя бы подскажите?!
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
07.11.2011, 20:04
Ответы с готовыми решениями:

Написать тест, состоящий из вопросов и 5 вариантов ответов
Мне нужно написать тест, состоящий из вопросов и 5 вариантов ответов. В некоторых вопросах один...

Как написать тест? 10 вопросов с выбором ответов да/нет
Кто-нибудь может помочь написать тест по психологии для iPad. Только начал знакомиться с XCode. С...

Разработать тест, состоящий из 5 вопросов c возможностью выбора нескольких правильных ответов.
(Работа с TRadioButton и CheckBox). Разработать тест, состоящий из 5 вопросов c возможностью...

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

15
5702 / 2293 / 466
Регистрация: 20.11.2009
Сообщений: 7,714
Записей в блоге: 1
07.11.2011, 20:10 2
вопросы где хранятся? в массиве?
допустим в массиве, в нем 5 вопросов
Delphi
1
2
3
4
5
6
A: Array[1..5] of String;
i: Integer;
begin
i := Random (5)+1;
// например вывели вопрос под номером который сгенерировался рандомом
Label1.Caption := A[i];
код писать не буду, так как просили просто на путь наставить, вот вам для начала
1
474 / 337 / 36
Регистрация: 31.05.2011
Сообщений: 1,156
08.11.2011, 00:09 3
разве при запуске повторятся не будет?
0
5702 / 2293 / 466
Регистрация: 20.11.2009
Сообщений: 7,714
Записей в блоге: 1
08.11.2011, 00:25 4
Цитата Сообщение от БогДелфей Посмотреть сообщение
разве при запуске повторятся не будет?
ты на Randomize намекаешь?
0
13097 / 5878 / 1706
Регистрация: 19.09.2009
Сообщений: 8,808
08.11.2011, 00:36 5
Например, если вопросы записаны в массив, то элементы этого массива можно переставить случайным образом.
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
const
  M = 10;
var
  Arr : array[1..M] of String;
  i, j : Integer;
  S : String;
begin
...
  Randomize;
  for i := 1 to M do begin
    j := 1 + Random(M);
    S := Arr[i];
    Arr[i] := Arr[j];
    Arr[j] := S;
  end;
...
end;
0
474 / 337 / 36
Регистрация: 31.05.2011
Сообщений: 1,156
08.11.2011, 00:55 6
Arcor, да
0
55 / 30 / 4
Регистрация: 03.11.2011
Сообщений: 130
08.11.2011, 01:00 7
Arcor,
Mawrat,
Не пойму, как вы храните вопросы-ответы в массиве.
при каждом запуске программы пишете
Delphi
1
2
 Arr[1,1]="Где зимуют раки?";
Arr[2,1]="Там где Макар телят не гонял"
Задание напоминает программу колледжей.
Сентябрь - учим кнопочки, списочки и тд.
Октябрь - учим следующую вкладку (внезапно,да?)
Ноябрь - резко делаем тест (имея мемо,гриды и тд - это быстро и просто.) [вопросы-ответы храним в текстовом файле ]
Декабрь - пишим игру, желательно с "искусственным интеллектом" (крестики-нолики на 3....шашки с более-менее толковым компьютером...тут всё понятно...).
_______________________________________________________

Kelthagor,
если вопросы-ответы в файле, то тебе надо случайным образом выбрать с какой строчки считывать.
Обычно умные люди делают структуру файла удобной и высчитать строчку считывания того или иного вопроса не составляет сложности. Номера строчек загоняешь в массив, алгоритм перемешки описан выше.
0
474 / 337 / 36
Регистрация: 31.05.2011
Сообщений: 1,156
08.11.2011, 01:16 8
тут видимо у старттопа вопросы и ответы в разных файлах, на каждый вопрос три варианта ответа(a,b,c). он хочет штоб не тока вопросы, но и три варианта ответов менялись местами, ведь если они будут статичны, то стоит раз пройти тест, записать варианты ответов и в следующий раз можно тупо отвечать по записи например: в вопросе о чём-то вариант ответа - b и т.д.
0
5 / 5 / 1
Регистрация: 03.09.2011
Сообщений: 152
08.11.2011, 04:07  [ТС] 9
Вот как вопросы/ответы записаны:
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
unit Unit2;
 
interface
 
uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, ExtCtrls;
 
type
  TForm2 = class(TForm)
    Timer1: TTimer;
    Label1: TLabel;
    Label2: TLabel;
    Label3: TLabel;
    Label4: TLabel;
    Label5: TLabel;
    Bevel1: TBevel;
    RadioButton1: TRadioButton;
    RadioButton2: TRadioButton;
    RadioButton3: TRadioButton;
    Button1: TButton;
    Label6: TLabel;
    Label7: TLabel;
    Label8: TLabel;
    Button2: TButton;
    Label9: TLabel;
    Label10: TLabel;
    Label11: TLabel;
    Label12: TLabel;
    Button3: TButton;
    Button4: TButton;
    procedure Timer1Timer(Sender: TObject);
    procedure FormClose(Sender: TObject; var Action: TCloseAction);
    procedure FormShow(Sender: TObject);
    procedure Button1Click(Sender: TObject);
    procedure FormCreate(Sender: TObject);
    procedure Button2Click(Sender: TObject);
    procedure Button3Click(Sender: TObject);
    procedure Button4Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;
 
var
  Form2: TForm2;
   i,ocen,num,ball,sec,sec1,min:integer;
 
implementation
 
uses Unit1, Unit3, Unit5, Unit4;
 
{$R *.dfm}
 
procedure TForm2.Timer1Timer(Sender: TObject);
 
begin
inc(sec); //Sec увеличиваем на 1
inc(sec1);
  Label1.Caption:=IntToStr(sec);
  min:= Trunc(sec/60);
  Label3.Caption:= IntToStr(min);
  if sec1 >= 60 then sec1:= 0;
  Label5.Caption:= IntTostr(sec1);
  if label3.caption=inttostr(45) then
timer1.Enabled:=False;
if label3.caption=inttostr(45) then
form3.Show;
end;
 
procedure TForm2.FormClose(Sender: TObject; var Action: TCloseAction);
begin
Form1.Close;
end;
 
procedure TForm2.FormShow(Sender: TObject);
begin
Timer1.Enabled:= true;
Timer1.Interval:=1000;
 
 
end;
 
procedure TForm2.Button1Click(Sender: TObject);
begin
if RadioButton1.Checked=true then
ball:= ball+1
else
ball:= ball;
Label7.Caption:='Под благом в экономике понимается';
RadioButton1.Caption:= 'все, что человек использует для удовлетворения своих желаний и получения удовольствия';
RadioButton2.Caption:= 'коломенская православная радиостанция';
RadioButton3.Caption:= 'верного ответа нет';
Button1.Visible:= false;
Button2.Top:= Button1.Top;
Button2.Left:= Button1.Left;
Button2.Visible:= true;
num:=num+1;
label10.Caption:=inttostr(num);
 
Label8.Caption:= 'Вопрос № ' + IntToStr(num);
 
 
 
end;
 
procedure TForm2.FormCreate(Sender: TObject);
begin
button1.Click;
Form2.Position:= poDeskTopCenter;
//ball:= 0;
//num:=1;
//sec:=0;
 
Label10.Caption:= IntToStr(num);
Label11.Caption:= '';
Label11.Visible:= false;
 
Label10.Visible:= false;
Label8.Caption:= 'Вопрос № ' + IntToStr(num);
Label12.Caption:= '';
Label12.Visible:= false;
end;
 
procedure TForm2.Button2Click(Sender: TObject);
begin
if RadioButton2.Checked= true then
ball:= ball+1
else
ball:= ball;
 
 
Label7.Caption:='2+2?';
RadioButton1.Caption:= '22';
RadioButton2.Caption:= '4';
RadioButton3.Caption:= '0';
 
Button2.Visible:= false;
Button3.Top:= Button1.Top;
Button3.Left:= Button1.Left;
Button3.Visible:= true;
num:= num+1;
Label10.Caption:= IntToStr(num);
 
 
Label8.Caption:= 'Вопрос № ' + IntToStr(num);
end;
 
 
 
 
 
procedure TForm2.Button3Click(Sender: TObject);
begin
if RadioButton3.Checked= true then
ball:= ball+1
else
ball:= ball;
 
Label7.Caption:='Меры измерения информации?';
RadioButton1.Caption:= 'синтаксическая,симантическая,прагматическая';
RadioButton2.Caption:= 'в битах,байтах';
RadioButton3.Caption:= 'нет меры измерения';
 
 
Button3.Visible:= false;
Button4.Top:= Button1.Top;
Button4.Left:= Button1.Left;
Button4.Visible:= true;
 
num:= num+1;
Label10.Caption:= IntToStr(num);
 
Label8.Caption:= 'Вопрос № ' + IntToStr(num);
end;
 
procedure TForm2.Button4Click(Sender: TObject);
begin
if RadioButton3.Checked= true then
ball:= ball+1
else
ball:= ball;
 
num:= num+1;
Label10.Caption:= IntToStr(num);
 
Label8.Caption:= 'Вопрос № ' + IntToStr(num);
 
if (ball <= 3) and  (ball>= 3)
then ocen:= 5;
 
if (ball = 2)and  (ball>= 2)
then ocen:= 4;
 
if (ball = 1) and  (ball>= 1)
then ocen:= 3;
 
if ball < 0
then ocen:= 2;
label11.Visible:=true;
label9.Visible:=true;
Label11.Caption:= IntToStr(ocen);
 
 
 
end;
 
end.
0
55 / 30 / 4
Регистрация: 03.11.2011
Сообщений: 130
08.11.2011, 13:09 10
Цитата Сообщение от Kelthagor Посмотреть сообщение
ball:= ball;

___
По теме. У тебя выбирается вопрос по клику кнопки, так создавай событие клика случайной кнопки из твоего списка.
0
5 / 5 / 1
Регистрация: 03.09.2011
Сообщений: 152
08.11.2011, 14:06  [ТС] 11
Цитата Сообщение от Sharpfellow Посмотреть сообщение

___
По теме. У тебя выбирается вопрос по клику кнопки, так создавай событие клика случайной кнопки из твоего списка.
Глумишься насчет балла?
Какой функцией это реализовать?
0
55 / 30 / 4
Регистрация: 03.11.2011
Сообщений: 130
08.11.2011, 15:14 12
Kelthagor,
Немного глумлюсь)
Я напишу примерно.

Delphi
1
2
3
4
5
6
7
8
9
10
Процедура Имя (параметр : интеджер) // параметр, как раз то,случайное число.
бегин
    case параметр of 
   1: button1.click(); //по-моему так кликать
   2: button2.click(); 
   3: button3.click(); 
..........................
   else end;
//контроллировать параметр (на повтор) надо ДО отправки в процедуру.
энд;
1
5 / 5 / 1
Регистрация: 03.09.2011
Сообщений: 152
08.11.2011, 16:36  [ТС] 13
Цитата Сообщение от Sharpfellow Посмотреть сообщение
Немного глумлюсь)
Так может откроешь глаза?)
Я понимаю ту функцию так:
Если радиобатон1.чекед=истинно то
баллу прибавляется 2 балла
иначе баллу присваивается 0

Добавлено через 32 минуты
. .
0
55 / 30 / 4
Регистрация: 03.11.2011
Сообщений: 130
08.11.2011, 16:47 14
Kelthagor, открыл....
Не нашел нигде обнуления ball (кроме закомментированного в форм крейт), так что это
Цитата Сообщение от Kelthagor Посмотреть сообщение
Если радиобатон1.чекед=истинно то
баллу прибавляется 2 балла
иначе баллу присваивается 0
очень спорно.
Цитата Сообщение от Kelthagor Посмотреть сообщение
Я понимаю ту функцию так:
скорее всего неправильно.
Delphi
1
ball:= ball;
"Обнулит" только, если ball =0. 0=0 ИСТИНА!
Цитата Сообщение от Kelthagor Посмотреть сообщение
баллу прибавляется 2 балла
В первый раз прибавляется только 1, так как ball=0.
Во второй 2, в 3й -3 и тд. А при случайном выборе вопроса к радиобатон1 ball может быть равен 7.
и ball:=bal+1 - это НЕ +2 балла.
Delphi
1
2
3
if (ball <= 3) and  (ball>= 3)
if (ball = 2)and  (ball>= 2)
if (ball = 1) and  (ball>= 1)
Условие верно при ball=3
ball=2
ball=1
1
5 / 5 / 1
Регистрация: 03.09.2011
Сообщений: 152
08.11.2011, 17:27  [ТС] 15
Кроме случайного показа вопроса, в самих вопросах ответы должны меняться местами. Пробовал такую операцию:
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
randomize;
case random(3) of
1: RadioButton1.Caption:= '1';
2: RadioButton1.Caption:= '2';
3: RadioButton1.Caption:= '3';
   else end;
   case random(3) of
1: RadioButton2.Caption:= '1';
2: RadioButton2.Caption:= '2';
3: RadioButton2.Caption:= '3';
   else end;
   case random(3) of
1: RadioButton3.Caption:= '1';
2: RadioButton3.Caption:= '2';
3: RadioButton3.Caption:= '3';
   else end;
Но вот как сделать, чтобы кэпшоны не повторялись, то есть (RadioButton1.Caption)<>(RadioButton2.Caption)<>(RadioButton3.Caption) не были ровны?
И ещё, в случае случайного появления вопроса, один и тот же вопрос не будет повторяться несколько раз?

Delphi
1
2
3
4
5
6
7
8
9
10
11
12
procedure TForm2.FormCreate(Sender: TObject);
begin
randomize;
case random(20) of
1: Button1.Click();
2: Button2.Click();
3: Button3.Click();
4: Button4.Click();
5: Button5.Click();
.........
20: Button20.click()
else end;
0
55 / 30 / 4
Регистрация: 03.11.2011
Сообщений: 130
08.11.2011, 22:46 16
>> И ещё, в случае случайного появления вопроса, один и тот же вопрос не будет повторяться несколько раз?
Будет. Я писал же в посте Тест, перетасовка вопросов и самих ответов в вопросах
я описал примерную процедуру перехода к вопросу. Номера, которые "отработали" своё, кидаем в глобальный массив, а потом рандомим следующее число, пока она не будет в том массиве (при количестве вопросов<30 это не так страшно [долго] )
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
08.11.2011, 22:46
Помогаю со студенческими работами здесь

Массив: Реализация системы ответов и вопросов теста...
Всем привет,нужна помощь запутался в том как лучше реализовать работу с массивами, вообщем. Есть...

Написать программу-опрос с варьирующимся количеством вопросов и ответов
нужно написать программу-опрос с варьирующимся количеством вопросов и ответов, т.е. чтобы программа...

Создание базы данных вопросов/ответов для викторины
Появилась некая проблема. Я где-то слышала, что для создания тестов или викторины нужно создать...

Утилита составления вариантов тестов по таблице вопросов и ответов
Здравствуйте, прошу вашей помощи. В конце месяца нужна сдавать курсовую работу, тема которой :...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
16
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2023, CyberForum.ru