Javascript-форум (https://javascript.ru/forum/)
-   Элементы интерфейса (https://javascript.ru/forum/dom-window/)
-   -   При запуске теста вопросы в произвольеном порядке (https://javascript.ru/forum/dom-window/58582-pri-zapuske-testa-voprosy-v-proizvolenom-poryadke.html)

Dr.Maksss 29.09.2015 20:34

При запуске теста вопросы в произвольеном порядке
 
Доброго времени суток!
Только начал изучать JS и столкнулся с проблемой.
Пишу тест для студентов.....на зачете будут искать на вопросы правильный ответ. Один из четырех.
В алгоритме не знаю, как сделать так, чтобы при прохождении одного теста последующий тест был из других вопросов, т.е. вопросы брались в произвольном порядке.
Вопросов 50, а для тестирования хватит 15, но нужно, чтобы каждый раз они запускались в произвольном порядке.
Постарался объяснить.
Может, кто знает как это организовать?
мой скрипт
<script type="text/javascript">

var countQuest = 0;
var plus = 0;
var test_start = 0;

function check(num){

if(num == 4){

document.getElementById('area').style.display='blo ck'; //
document.getElementById('start').style.display='no ne';
document.getElementById('end').style.display='inli ne';

if(test_start == 0){

//Массив вопросов
var questions = ["1. Яку мінімальну кількість зон повинен мати випробовувальний майданчик для сертифікації будівельних і дорожніх машин?\n",
"2. Що перевіряють у першій зоні на випробовувальному майданчику?\n",
"3. Що перевіряють у другій зоні на випробовувальному майданчику?\n",
"4. Що перевіряють у третій зоні на випробовувальному майданчику?\n",
"5. Які існують способи ідентифікації зразків?\n",
"6. Яким приладом проводять контрольні вимірювання лінійних розмірів?\n",
"7. Яку назву мають пристрої захисту від перекидання та падаючих предметів?\n",
"8. Система конструктивних елементів, змонтованих на машині для забезпечення захисту оператора від падаючих предметів називається\n",
"9. Система конструктивних елементів, змонтованих на машині для збереження життєвого простору в кабіні оператора при перекиданні машини називається\n",
"10. Захисні властивості систем ROPS та FOPS випробовуються\n",
"11. Сукупність конструктивних і експлуатаційних особливостей спецтехніки, спрямованих на попередження або зниження важкості дорожньо-транспортної пригоди, пошкодження спеціального засобу внаслідок перекидання або падіння на нього предметів називається\n",
"12. Пасивна безпека досягається використанням:\n",
"13. Що не перевіряється при проходженні випробувань?\n",
"14. Яку кількість раз необхідно проводити випробування машини на режимі вільного прискорення?\n",
"15. Після перевірки на режимі вільного прискорення, димність на режимі максимальної частоти обертання перевіряють"];

//Массивы вариантов ответов
var number1 = ["2","Оглядовість та освітлення","Оглядовість та освітлення","Оглядовість та освітлення","Візуальний","Лі нійкою","COPS та ROPS","COPS","COPS","При створенні кабіни на заводі\n",
"Активна безпека","Тільки пасків безпеки","Мікроклімат у кабіні","Не менше 6"];
var number2 = ["3","Кути з’їзду та заїзду","Кути з’їзду та заїзду","Кути з’їзду та заїзду","Візуальний і по документації","Курвиметр","RO PS та FOPS","FOPS","FOPS","Під час проведення сертифікації\n",
"Пасивна безпека","Поперечних брусів в дверях ТЗ","Зусилля на органах управління","7"];
var number3 = ["4","Гальмівну систему та поперечну стійкість машини","Гальмівну систему та поперечну стійкість машини","Гальмівну систему та поперечну стійкість машини","По документації","Рулеткою","FOPS та COPS","ROPS","ROPS","Одразу після установки на трактор\n",
"Безпека","Дуг безпеки","Товщина скла кабіни","Не більше 10"];
var number4 = ["5","Візуальну відповідність машини нормативним документам","Візуальну відповідність машини нормативним документам","Візуальну відповідність машини нормативним документам","Не існує таких","Далекоміром","ROВS та FOBS","FOBS","FOBS","Вони стандартні і не перевіряються\n",
"ROPS та FOPS","Всього переліченого","Питомий тиск гусениці на грунт","5"];


document.getElementById('question').innerHTML=ques tions[countQuest];

document.getElementById('option1').innerHTML=numbe r1[countQuest];
document.getElementById('option2').innerHTML=numbe r2[countQuest];
document.getElementById('option3').innerHTML=numbe r3[countQuest];
document.getElementById('option4').innerHTML=numbe r4[countQuest];


//Массив правильных ответов
var answer = [1,3,2,0,1,2,1,1,2,0,1,3,2,0,0];

test_start = 1;
}
}
else{
//Массив вопросов
var questions = ["1. Яку мінімальну кількість зон повинен мати випробовувальний майданчик для сертифікації будівельних і дорожніх машин?\n",
"2. Що перевіряють у першій зоні на випробовувальному майданчику?\n",
"3. Що перевіряють у другій зоні на випробовувальному майданчику?\n",
"4. Що перевіряють у третій зоні на випробовувальному майданчику?\n",
"5. Які існують способи ідентифікації зразків?\n",
"6. Яким приладом проводять контрольні вимірювання лінійних розмірів?\n",
"7. Яку назву мають пристрої захисту від перекидання та падаючих предметів?\n",
"8. Система конструктивних елементів, змонтованих на машині для забезпечення захисту оператора від падаючих предметів називається\n",
"9. Система конструктивних елементів, змонтованих на машині для збереження життєвого простору в кабіні оператора при перекиданні машини називається\n",
"10. Захисні властивості систем ROPS та FOPS випробовуються\n",
"11. Сукупність конструктивних і експлуатаційних особливостей спецтехніки, спрямованих на попередження або зниження важкості дорожньо-транспортної пригоди, пошкодження спеціального засобу внаслідок перекидання або падіння на нього предметів називається\n",
"12. Пасивна безпека досягається використанням:\n",
"13. Що не перевіряється при проходженні випробувань?\n",
"14. Яку кількість раз необхідно проводити випробування машини на режимі вільного прискорення?\n",
"15. Після перевірки на режимі вільного прискорення, димність на режимі максимальної частоти обертання перевіряють"];

//Массивы вариантов ответов
var number1 = ["2","Оглядовість та освітлення","Оглядовість та освітлення","Оглядовість та освітлення","Візуальний","Лі нійкою","COPS та ROPS","COPS","COPS","При створенні кабіни на заводі\n",
"Активна безпека","Тільки пасків безпеки","Мікроклімат у кабіні","Не менше 6","Не пізніше 60 секунд"];
var number2 = ["3","Кути з’їзду та заїзду","Кути з’їзду та заїзду","Кути з’їзду та заїзду","Візуальний і по документації","Курвиметр","RO PS та FOPS","FOPS","FOPS","Під час проведення сертифікації\n",
"Пасивна безпека","Поперечних брусів в дверях ТЗ","Зусилля на органах управління","7","Через 10 секунд"];
var number3 = ["4","Гальмівну систему та поперечну стійкість машини","Гальмівну систему та поперечну стійкість машини","Гальмівну систему та поперечну стійкість машини","По документації","Рулеткою","FOPS та COPS","ROPS","ROPS","Одразу після установки на трактор\n",
"Безпека","Дуг безпеки","Товщина скла кабіни","Не більше 10","Не раніше 2 хвилин"];
var number4 = ["5","Візуальну відповідність машини нормативним документам","Візуальну відповідність машини нормативним документам","Візуальну відповідність машини нормативним документам","Не існує таких","Далекоміром","ROВS та FOBS","FOBS","FOBS","Вони стандартні і не перевіряються\n",
"ROPS та FOPS","Всього переліченого","Питомий тиск гусениці на грунт","5","Через 30 хвилин"];


//Массив правильных ответов
var answer = [1,3,2,0,1,2,1,1,2,0,1,3,2,0,0];

if(num == answer[countQuest]) plus++;

if(questions.length - 1> countQuest){

countQuest++;

document.getElementById('question').innerHTML=ques tions[countQuest];

document.getElementById('option1').innerHTML=numbe r1[countQuest];
document.getElementById('option2').innerHTML=numbe r2[countQuest];
document.getElementById('option3').innerHTML=numbe r3[countQuest];
document.getElementById('option4').innerHTML=numbe r4[countQuest];


}
else{

document.getElementById('area').style.display='non e';
alert('Ви маєте ' + plus + ' вірних відповіді(ей)!');
}
}
}

</script>

Заранее спасибо всем откликнувшимся!

рони 29.09.2015 20:55

Цитата:

Сообщение от Dr.Maksss
Вопросов 50, а для тестирования хватит 15, но нужно, чтобы каждый раз они запускались в произвольном порядке.

<script language="JavaScript" type="text/javascript">
function random(min,max,l)
{var arr = [],m = [],n = 0;
  if (max - min < l-1) return;
  for (var i=0; i<=(max-min); i++)m[i] = i + min;
  for (var i=0; i<l; i++) {n = Math.floor(Math.random()*(m.length)); arr[i]=m.splice(n,1)[0];};
  return arr
}
for (var i=0; i<5; i++)  {
document.write(JSON.stringify(random(1,50,15))+"<br>")

}
</script>

ksa 30.09.2015 08:21

Dr.Maksss, хранить всю информацию в разных массивах плохая практика... :(

join 30.09.2015 08:30

у Рони, иногда вопросы(числа) повторяются.

join 30.09.2015 08:31

ksa,
Почему? Есть наглядный пример что это плохо?

ksa 30.09.2015 08:56

Цитата:

Сообщение от join
Почему?

Это разные элементы... Они ни как не связаны... Т.о. никакой манипуляции с ними не сделать.
Даже редактирование будет затруднено...

Вот более приемлемое хранение

var questions=[
	{
		text: 'Текст вопроса',
		answers: [
			{
				text: 'Текст ответа',
				correct: true
			}
		]
	}
];

join 30.09.2015 09:06

ksa,
Ок. Наглядно. Хранить вопрос, ответ, корректность ответа и тд, всё в одном "объекте-вопросе". Массив состоит их этих объектов.

ksa 30.09.2015 09:49

Цитата:

Сообщение от join
у Рони, иногда вопросы(числа) повторяются.

Вот мои 5коп случайных выборок из массива...

var a=[0,1,2,3,4,5,6,7,8,9];
alert(portion(a,5));
function portion(Arr,N) {
	var a=[];
	var prt=[];
	if (N>Arr.length) return [];
	for (var i=0; i<Arr.length; i++) a[i]=Arr[i];
	for (var i=0; i<N+1; i++) {
		var itm=Math.floor(Math.random()*a.length);
		prt[i]=a[itm];
		a.splice(itm,1);
	};
	return prt;
};

рони 30.09.2015 15:36

Цитата:

Сообщение от join
у Рони, иногда вопросы(числа) повторяются.

в 15 наугад ? не должно
если в разных 15 это нормально, а как иначе?

рони 30.09.2015 15:37

ksa,
по моему твой и мой код одинаковы


Часовой пояс GMT +3, время: 04:26.