Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 23.10.2016, 20:48
Новичок на форуме
Отправить личное сообщение для vlad35 Посмотреть профиль Найти все сообщения от vlad35
 
Регистрация: 22.10.2016
Сообщений: 9

Пример простого калькулятора
Доброго времени суток, уважаемые форумчане. Я совсем недавно взялся за JavaScript, поэтому у меня масса, может нелепых вопросов. Я нашел пример простого калькулятора здесь: http://www.on-line-teaching.com/js/js.math.sample.htm или в песочнице http://https://jsfiddle.net/vlad35/1unqeec3/ . У меня такой вопрос. В скрипте постоянно используется переменная, принимающая то истинное, то ложное значение FlagNewNum. Мне не понятно для чего и зачем она нужна. Если есть какие-то мысли, помогите. Заранее спасибо.
Ответить с цитированием
  #2 (permalink)  
Старый 24.10.2016, 03:13
Профессор
Отправить личное сообщение для Bond Посмотреть профиль Найти все сообщения от Bond
 
Регистрация: 16.06.2013
Сообщений: 172

Название переменной само за себя говорит - флаг нового числа
Эта переменная становится true когда нажато + - = / * и тд.
То есть если FlagNewNum == true то поле калькулятора очищается и подставляется новая цифра в зависимости о того какая кнопка нажата, если же FlagNewNum == false то до существующего числа добавляется новая цифра путем конкатенации.
Ответить с цитированием
  #3 (permalink)  
Старый 24.10.2016, 09:57
Новичок на форуме
Отправить личное сообщение для vlad35 Посмотреть профиль Найти все сообщения от vlad35
 
Регистрация: 22.10.2016
Сообщений: 9

Bond, спасибо Вам огромное!
Ответить с цитированием
  #4 (permalink)  
Старый 25.10.2016, 13:25
Новичок на форуме
Отправить личное сообщение для vlad35 Посмотреть профиль Найти все сообщения от vlad35
 
Регистрация: 22.10.2016
Сообщений: 9

Уважаемый, Bond! Если Вам не сложно, помогите мне пожалуйста еще раз. В том же калькуляторе в скрипте есть эта функция:
function Operation (Op)
{
var Readout = Fcalc.ReadOut.value;
if (FlagNewNum && PendingOp != "=")
{
Fcalc.ReadOut.value = Currents;
}
else
{
FlagNewNum = true;
if ( '+' == PendingOp )
Currents += parseFloat(Readout);

else if ( '-' == PendingOp )
Currents -= parseFloat(Readout);
else if ( '/' == PendingOp )
Currents /= parseFloat(Readout);
else if ( '*' == PendingOp )
Currents *= parseFloat(Readout);
else
Currents = parseFloat(Readout);
Fcalc.ReadOut.value = Currents;
PendingOp = Op;
}
}
Вот над ней сижу уже два дня никак понять не могу. Не могли бы Вы ее расшифровать? Заранее спасибо! Не понятны переменные Currents и PendingOp?

Последний раз редактировалось vlad35, 25.10.2016 в 13:27.
Ответить с цитированием
  #5 (permalink)  
Старый 25.10.2016, 15:31
Профессор
Отправить личное сообщение для Bond Посмотреть профиль Найти все сообщения от Bond
 
Регистрация: 16.06.2013
Сообщений: 172

Функция Operation(op) срабатывает когда нажимается кнопка + - * / =
По сути здесь вся главная магия и происходит
В комменте так и написано
// обработчик нажатия
// кнопки действия
Функция принимает один параметр - значение кнопки что бы знать какая кнопка была нажата, собственно это и есть переменная PendingOp и она принимает новое значение после нажатия кнопок действия в этой строке
PendingOp = Op;

и по ней же проверяется какое действие производить над переменной currents.

Переменная Currents - это промежуточный результат вычисления и он выводится в поле только тогда когда нажата кнопка "=" и флаг нового числа == false (то есть когда пользователь нажал к примеру 3+3 и =) эти строки
Fcalc.ReadOut.value = Currents; //Здесь выводится в поле промежуточный результат вычисления


или же когда нажато не "=" и флаг нового числа == true ( то есть когда пользоваель нажал 3+3 и еще раз "+" или другое кроме =); в этих строках
if (FlagNewNum && PendingOp != "=")
		{
			Fcalc.ReadOut.value = Currents;
		}


Если же нажата одна из кнопок + - * / = то вычисляется новое значение currents. здесь

if ( '+' == PendingOp ) // Если ранее был нажат плюс
				Currents += parseFloat(Readout); // то к текущему промежуточному значению добавляем значение поля 
			else if ( '-' == PendingOp )
				Currents -= parseFloat(Readout); //  А здесь минусуем и т.д
			else if ( '/' == PendingOp )
				Currents /= parseFloat(Readout);
			else if ( '*' == PendingOp )
				Currents *= parseFloat(Readout);
                        else
				Currents = parseFloat(Readout);
			Fcalc.ReadOut.value = Currents; //Здесь выводится в поле промежуточный результат вычисления
			PendingOp = Op;

Не знаю доступно ли объяснил ))

Последний раз редактировалось Bond, 25.10.2016 в 17:30.
Ответить с цитированием
  #6 (permalink)  
Старый 25.10.2016, 18:24
Новичок на форуме
Отправить личное сообщение для vlad35 Посмотреть профиль Найти все сообщения от vlad35
 
Регистрация: 22.10.2016
Сообщений: 9

Да, все понятно, спасибо Вам огромное!!!
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Создание простого калькулятора Marker Events/DOM/Window 1 18.11.2013 14:48
Не работает скрипт калькулятора в FF 4.0 YaVolodya Firefox/Mozilla 2 01.11.2013 11:04
Помогите повторить пример (Яндекс-карт) hrundel Общие вопросы Javascript 0 19.09.2013 18:45
Пример из книги Ajax на практике Sadd AJAX и COMET 5 10.04.2010 18:20
Не работает пример использования AJAX nuker AJAX и COMET 4 19.03.2009 18:31