Skip to content

ost-ptk/Mathematical_simulator

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

29 Commits
 
 
 
 
 
 

Repository files navigation

Опис програми "Математичний тренажер".

Вона складається з декількох частин. Основної функції function training і декількох допоміжних function mathOp та function randomInt.

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 та повертається основній програмі.

Function mathOp

Ця функція зрівнює параметр 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.

Function training

Це основна програма.

  1. Спочатку ми оголошуємо змінні з якими будемо працювати.
	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 присвоюється знак математичної операції.
  1. Запускаємо цикл 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));
		}
	}
  1. Оформлення результату.

Дальше працюємо з документом 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[] та виводитимемо їх в новому рядку.

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published