Array  break  case  catch  const  continue  default  Date  do Error  else  Function  false  finally  for

function  if  in  instanceof  Infinity  Math  NaN  Number  new  null  Object  Promise  prototype  RegExp

return  String  switch  this  then  throw  try  true  undefined  var  with  while
	
alert(s)
appendChild(tagName)
fillRect()
pow(base, n)
sin(radians)
cos(radians)
random()
isNaN()
test()
sqrt(n)
prompt(s)
parseInt(s) parseFloat(s)
floor(f) 
ceil(f)
charAt(n)
indexOf(substring, offset)
substring(start, end)
replace(pattern, replacement)
toLowerCase(s)
toUpperCase(s)
abs(n)
splice(start, length, newItem1, newItem2, ...)
split(pattern, limit)
toString()
createElement(tagName)

getElementById(id)

getContext(contextType)

removeChild(domElement)

strokeText(text, x, y)

fillText(text, x, y)

measureText(text)

setItem(key, value)

join(delimeter)

round(floatNumber)
	

Арифметические операции

Простые вычисления

Вычислить

Здесь все просто, вспоминаем про приоритеты математических операций, в любом компиляторе или интерпретаторе они точно такие же. То есть деление и умножение выполняются раньше сложения и вычитания. Скобки имеют наивысший приоритет. Значит, пишем

	function example_1() {
		var x = readln('Введите x'),
			y = readln('Введите y');
		var result = ( (x + y) / (x*x - x*y) ) - ( (3*x + y) / (y*y - x*x) );
		writeln('Результат: ' + result);
	}

Проверив для x = 12 и y = 45 мы можем убедиться, что:

12 + 45 = 57

144 - 540 = -396

36 + 45 = 81

2025 - 144 = 1881

57/-396=−0,143939394

81/1881=0,043062201

−0,143939394 - 0,043062201 = −0,187001595

Что полностью соответствует выводу приложения в "псевдоокне". Однако, успокаиваться рано.

Запустим пример и введем в качестве x и y единицы. Результат будет не очень хороший: мы ожидаем получить какое-то числовое значение, но мы видем в выводе:

NaN

Происходит это потому, что я совершенно не учел в примере, что в результате вычисления выражений в знаменателе может получиться 0.

Например в C/C++ или Pascal, при такой ситуации возникла бы ошибка при выполнении программы - там деление на 0 это невозможно. Но в JavaScript в таком случае получается специальное значние "Бесконечность" - Infinity. Однако, вычесть из одной бесконечности другую мы не можем, в результате у нас получается другое специальное значение: NaN - "не число".

Добавлю контроль того, что получается в знаменателе, а заодно и контроль вводимых значений:

	function example_1() {
		var x = parseInt( readln('Введите x') ),
			y = parseFloat( readln('Введите y') ),
			denominator_1 = x*x - x*y,
			denominator_2 = y*y - x*x;
			if(isNaN(x) || isNaN(y) ) {//если x не число или y не число
				writeln('x и y должны быть числами!');
				return;
			}
			if(!denominator_1 || !denominator_2 ) {
				writeln('Деление на 0! Аварийный выход.');
				return;
			}
		var result = ( (x + y) / denominator_1 ) - ( (3*x + y) / denominator_2 );
		writeln('Результат: ' + result);
	}

Я привожу х к целому числу, y к дробному. Если бы пришлось писать подобную функцию на практике я бы скорее всего привел к дробному в обоих случаях. Но у меня появился шанс рассказать о стандартной функции parseInt и я не стал его упускать. Эта функция берет свой аргумент и пытается опознать в нем целое число. Самостоятельно добавьте в текст программки несколько строк вида

writeln('value = ' + parseInt(a));

вместо a используйте различные строковые значения (строковые константы), например '123adsafdads', 'dsadss1123', 'a5'.

parseInt может принимать второй аргумент. Он указывает основание системы счисления, например

parseInt('a5', 16);
вернет число, в отличии от parseInt('a5'). Потому что а в шестнадцатиричной системе счисления вполне допустимая цифра, а если не передавать второй аргумент, parseInt пытается работать в десятиричной.

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

isNaN - смотрите подсказку к

NaN

Две прямых линии - оператор алгебры логики "Или"

Восклицательный знак перед именем переменной - оператор алгебры логики "Не". Его использование пожалуй стоит рассмотреть чуть подробнее.

function ifExample () {
	var a = false, b = true; //Записали в а значение "Ложь", в b "Истина"
	if (!a) { //Если не а
		alert("а- ложно");
	}
	if (b) { //Если b
		alert("b - истинно");
	}
	//Условие !a будет также выполняться, если a равно 0, '0', '' (пустой строке), NaN, undefined
}

Вычисления с использованием математических функций

Вычислить

Пример мало чем отличается от предыдущего, однако тут появилась функция косинуса угла. Также, нам понадобится вычислить квадратный корень. Возьмем предыдущий пример и немного перепишем его для данной нам формулы.

	function example_2() {
		var alpha = parseInt( readln('Введите угол альфа в градусах') ),
					cosAlpha = Math.cos(Math.PI * alpha/ 180);
			denominator_1 = 1 + cosAlpha,
			denominator_2 = 1 - cosAlpha;
			if(isNaN(alpha) ) {//если альфа не число
				writeln('альфа должны быть числом!');
				return;
			}
			if(!denominator_1 || !denominator_2 ) {
				writeln('Деление на 0! Аварийный выход.');
				return;
			}
		var result = Math.sqrt(denominator_2 / denominator_1) - Math.sqrt(denominator_1 / denominator_2);
		writeln('Результат: ' + result);
	}

Так как я работаю только с косинусом введенного числа, я тут же получаю его с помощью объекта Math, вызвав его метод cos. Наверное не ошибусь, если скажу, что большинство из нас привыкло измерять углы в градусах. Но Math.cos ждет от нас радианы. Я перевожу его в радианы, умножив на 3,14 и разделив на 180.

Ну и далее я использую метод Math.sqrt для того, чтобы извлечь квадратный корень. Остальные моменты примера вам должныбыть понятны, если это не так, вернитись к предыдущему примеру.

Задачка на сообразительность

Дано действительное число x. Не пользуясь никакими другими арифметическими операциями, кроме умножения, сложения и вычитания, вычислить за минимальное число операций

Посчитаем, сколько операций выполняется при простом вычислении.

	var result = 2 * x * x * x * x - 3 * x * x * x  + 4 * x * x - 5 * x + 6; //15 (операция присваивания = - тоже операция)

Но мы можем преобразовать выражение:

	var result = 2 * x * x * (x * x + 2) + 6 - x * (3 * x * x + 5); //12 операций

В полном коде проверю, не ошибся ли я с преобразованием.

	function example_3() {
		var x = parseInt( readln('Введите х') );
		if(isNaN(x) ) {//если x не число
			writeln('x должен быть числом!');
			return;
		}
		var result = 2 * x * x * (x * x + 2) + 6 - x * (3 * x * x + 5),
		controlResult = 2 * x * x * x * x - 3 * x * x * x  + 4 * x * x - 5 * x + 6;
		if (result != controlResult) {
			alert('Видимо что-то не так!');
		}
		writeln('Результат: ' + result);
	}
Тест на новые слова

  • Несохраненный_файл.js
Строка: 0, Символ: 0

  • {name}
  • У вас пока нет файлов
 

Проверьте себя,
знаете ли вы значение слов, использующихся в программном коде на уже прочтенных страницах.

 

Правильно!

Не забывайте переодически проходить этот тест по мере чтения новых статей.

 

Ошибка!

 

Осталось: 0 сек.

Health:

Score:

 

Что значит:

 

 

 


Информация

Загрузите файл с исходным кодом программы на языке яваскрипт.

Файл должен содержать одну главную функцию, имя которой должно совпадать с именем файла.

Например, файл называется task1.js, имя главной функции должно быть task1.

Все остальные функции должны быть определены внутри главной.

*

Информация

Сохраняемый код должен содержать одну главную функцию.

Например:

function myFirstProgram() {
	//Тут все остальное, включая вспомогательные функции
}
					




Простой пароль
Пароли не совпадают