26.10.2014, 22:38
|
Новичок на форуме
|
|
Регистрация: 26.10.2014
Сообщений: 7
|
|
Сообщение от kostyanet
|
Ваша роль заключается в том чтобы мозги парить?
|
Да, моя роль заключается в том, чтобы пытаться решать задачи нетривиальным путем для тренировки алгоритмического мышления, а не совать в eval пользовательскую строку. Вообще, я предполагал, что форум -- это место, где дают ответы на добровольной основе, то есть если кому-то кажется, что ему парят мозги -- то он не отвечает. Если, конечно, это адекватный форум; мне казалось, что этот таков. Если я ошибся, то прошу поправить.
Проще говоря, я не понял, в чем ценность данного ответа в теме.
|
|
26.10.2014, 22:40
|
Новичок на форуме
|
|
Регистрация: 26.10.2014
Сообщений: 7
|
|
Сообщение от рони
|
Scampada,
примерно так без скобок и синусов
function calc(str)
{
str = str.replace(/\s+/g, '');
var re = /(\d+(\.\d+)*)\!/;
for (; re.test(str);) {str = str.replace(re,
function (a, b)
{
var temp = 1;
b = parseInt(b);
while(b) temp *= b--;
return temp.toFixed(10).toString();
}
)
};
re = /(\d+\.?\d*)\^(\d+\.?\d*)/;
for (; re.test(str);) {str = str.replace(re,
function (a, b, c)
{
return Math.pow(b, c).toFixed(10).toString();
}
)
};
re = /(-*\d+\.?\d*)\/(-*\d+\.?\d*)/;
for (; re.test(str);) {str = str.replace(re,
function (a, b, c)
{
return (b / c).toFixed(10).toString();
}
)
};
re = /(-*\d+\.?\d*)\*(-*\d+\.?\d*)/;
for (; re.test(str);) {str = str.replace(re,
function (a, b, c)
{
return (b * c).toFixed(10).toString();
}
)
};
re = /(-*\d+\.?\d*)\-(-*\d+\.?\d*)/;
for (; re.test(str);) {str = str.replace(re,
function (a, b, c)
{
return (b - c).toFixed(10).toString();
}
)
};
re = /(-*\d+\.?\d*)\+(-*\d+\.?\d*)/;
for (; re.test(str);) {str = str.replace(re,
function (a, b, c)
{
return (+b + +c).toFixed(10).toString();
}
)
};
return str
}
alert([calc('2^2^2'),calc('2^2 + 2! -3^1'),calc('-5 + -5')])
|
Спасибо. Возьму на заметку.
|
|
26.10.2014, 23:58
|
|
Профессор
|
|
Регистрация: 22.03.2012
Сообщений: 3,744
|
|
Сообщение от Scampada
|
Вообще, я предполагал, что форум -- это место, где дают ответы на добровольной основе, то есть если кому-то кажется, что ему парят мозги -- то он не отвечает. Если, конечно, это адекватный форум; мне казалось, что этот таков. Если я ошибся, то прошу поправить.
|
да, ты ошибся, это только твои желания, каждый здесь по своей причине и делает то, что считает нужным, а адекватность можно оценить только будучи адекватным
|
|
27.10.2014, 00:55
|
Новичок на форуме
|
|
Регистрация: 26.10.2014
Сообщений: 7
|
|
|
|
27.10.2014, 20:47
|
|
Профессор
|
|
Регистрация: 22.03.2012
Сообщений: 3,744
|
|
Сообщение от Scampada
|
Ясно. Да не вопрос. То есть, если мне тоже захочется пофлудить, потроллить и пооскорблять, то можно?
|
можно креститься, когда кажется
|
|
28.10.2014, 03:32
|
Профессор
|
|
Регистрация: 23.10.2010
Сообщений: 2,718
|
|
Это называется токенизер, токенизатор - в основе любого парсера лежит распознавание токенов.
Распознавать токены математического выражения сейчас имеет смысл если они вам нужны. Типа юзер вкатал выражение, вы из него параметры настроек достали.
А если нужен только результат вычисления выражения, тогда eval и капец.
|
|
|
|