Вона складається з декількох частин. Основної функції function training і декількох допоміжних function mathOp та function randomInt.
Ця функція призначена для генерації випадкового числа з певного діапазону.
function randomInt(min, max){
var length = max - min + 1;
var rand = Math.floor(Math.random() * length) + min;
return rand;
}
В її основі використовуються математичний об'єкт Math
та два його методи .floor
та .random
.
Метод .random
- генерує два випадкових числа в діапазоні від 0 до 1.
Для генерації числа в певному діапазоні використовується наступний вираз:
(Math.random() * (max - min + 1)) + min;
де min
- початок діапазону, max
- кінець діапазону.
Для того що ми ортимали ціле значення, ми використовуємо метод .floor
. Цей метод округлює наше значення до меншого (вниз).
Після генерації та округлення числа, воно записується в змінну rand
та повертається основній програмі.
Ця функція зрівнює параметр op
та відповідно до нього записує результат однієї з математичних операцій до змінної res
та повертає його основній програмі.
function mathOp(a, b, op){
var res;
if (op == "+") {
res = a + b;
} else if (op == "-"){
res = a - b;
} else if (op == "*"){
res = a * b;
}else if (op == "/") {
if (b == "0"){
res = false;
} else{
res = a / b;
}
} else{
res = false;
}
return res;
}
Параметри a, b, op
ми отримуємо від function randomInt.
Це основна програма.
- Спочатку ми оголошуємо змінні з якими будемо працювати.
var x, y, code, op, ans, res, ansStr, error = 0, good = 0, erros = [];
var variants = ["+", "-", "*", "/"];
- Змінні
error
таgood
- це лічильники. Вони рахують кількість помилкових та правельних відповідей користувача. - В масив
errors
записуються помилкові відповіді користувача. - Масив
variants
містить перелік математичних операцій. - В змінні
x, y, code
- присвоюються числа які генерує функція function randomInt. - В змінну
ansStr
- присвоюється відповідь користувача. - В змінну
ans
присвоюється приведена в числовий формат відповідь користувача. - В змінну
res
присвоюється результат математичної операції для подальшого порівняння з відповідю користувача. - В змінну
op
присвоюється знак математичної операції.
- Запускаємо цикл
for
на 10 інтерацій.
for (var i = 0; i < 10; i++){
//код програми
}
де i
лічильник інтерацій.
- 2.1. Присвоєння значень в змінні для подальшої роботи.
x = randomInt(3, 15); //присвоюється випадкове число з діапазону від 3 до 15.
y = randomInt(3, 15); //присвоюється випадкове число з діапазону від 3 до 15.
code = randomInt(0, 3); //присвоюється випадкове число з діапазону від 0 до 3.
op = variants[code]; //витягує знак математичної операції із масиву variants по індексу.
res = mathOp(x, y, op); //присвоюється результат математичної операції.
- 2.2. Запускаємо цикл
do...while
.
Цикл призначений для перевірки значень які вводить користувач.
Спочатку він виводить вікно для користувача з завданням. Результат відповіді користувача записує в змінну ansStr
.
Потім присвоює приведену в числовий формат відповідь користувача.
do{
ansStr = prompt( x + '' + op + '' + y + " = ?" );
ans = +ansStr;
}
Додаткова змінна необхідна для перевірки відповіді користувача на пустий рядок. Також відбуваєтся перевірка на введення не числового значення.
while (ansStr == null || isNaN(ans));
Цикл працює поки одна з цих умов true.
- 2.3. Зрівнюємо відповідь користувача та результат нашої функції.
Використовуємо умовний оператор if
.
if (ans.toFixed(2) == res.toFixed(2)) {
good++;
} else{
error++;
erros.push(x + '' + op + '' + y + " = " + res.toFixed(2) + ". Your answer: " + ans.toFixed(2));
}
Так як в нас можлива операція ділення, ми використаємо метод .toFixed
для округлення відповідей до 2-х чисел після десяткової коми.
Методом .push
ми добавляємо в наш масив математичний вираз, його результат та відповідь користувача.
Повиний код циклу:
for (var i = 0; i < 10; i++){
x = randomInt(3, 15);
y = randomInt(3, 15);
code = randomInt(0, 3);
op = variants[code];
res = mathOp(x, y, op);
do{
ansStr = prompt( x + '' + op + '' + y + " = ?" );
ans = +ansStr;
}
while (ansStr == null || isNaN(ans));
if (ans.toFixed(2) == res.toFixed(2)) {
good++;
} else{
error++;
erros.push(x + '' + op + '' + y + " = " + res.toFixed(2) + ". Your answer: " + ans.toFixed(2));
}
}
- Оформлення результату.
Дальше працюємо з документом HTML.
document.querySelector('.good').innerHTML = good;
document.querySelector('.bad').innerHTML = error;
Даними командами ми додаємо в html файл, а саме до класу .good
, .bad
наші лічильники good
та error
.
Вони будуть виводити кількість правильних та неправельних відповідей.
Тепер ми виведемо користувачу список його помилок, та правельні відповідь.
Для цього створимо змінну та зітремо весь її вміст в html:
var divErrors = document.querySelector(".errors");
divErrors.innerHTML = " ";
Другий рядок необхідний для того, щоб при запуску тренажера ми бачили тільки поточні помилки.
Дальше запускаємо цикл для запису помилок в масив.
for(var i = 0; i < erros.length; i++){
divErrors.innerHTML += ("<p>" + erros[i] + "</p>");
}
Властивість масиву .lenght
допомагає нам визначити кількість елементів в масиві.
Дальше до класу .errors
ми додаватимоме всі помилки які записані в масиві errors[]
та виводитимемо їх в новому рядку.