Сообщение от Аркадий Укупник
|
но лучше сделать по уму. для начала входной текст нужно разбить на токены. потом читаем про обратную польскую нотацию на википедии и создаем расово верный калькулятор.
|
Причем тут обратная польская запись?
Если надо без эвала, можно вот так сделать:
<html>
<head>
<meta charset="windows-1251">
</head>
<body>
<input type="text" value="10+sin(1)" id="a">
<input type="button" value="запуск" OnClick="zap()">
<script>
function zap(){
var a=document.querySelector("#a").value
var test=function(){
var re=/\s*(\d+)\s*([-+*\/])\s*(cos|sin)\s*\(\s*(\d+)\s*\)\s*/i
if(!re.test(a)) return alert ("NO valid data")
var expr=a.match(re),
dig=(+expr[1]),
operator=expr[2],
resultOfFunc=Math[expr[3]](+expr[4]),
sum=function(x, y){return x + y},
mul=function(x, y){return x * y},
div=function(x, y){return x / y},
sub=function(x, y){return x - y},
getResult=function(operator){
return operator(dig, resultOfFunc)
}
switch(operator){
case "+": return getResult(sum)
case "-": return getResult(sub)
case "*": return getResult(mul)
case "/": return getResult(div)
}
}
alert (test())
}
</script>
</body>
</html>
Если писать каждую хуйню вручную, позаниматься числоебством -- это умно, а сократить запись, сделать код лаконичным и выразительным -- это тупо, тогда это вариант для "умных".