Показать сообщение отдельно
  #7 (permalink)  
Старый 14.11.2014, 13:18
Профессор
Посмотреть профиль Найти все сообщения от krutoy
 
Регистрация: 09.11.2014
Сообщений: 610

Сообщение от Аркадий Укупник
но лучше сделать по уму. для начала входной текст нужно разбить на токены. потом читаем про обратную польскую нотацию на википедии и создаем расово верный калькулятор.
Причем тут обратная польская запись?
Если надо без эвала, можно вот так сделать:
<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>


Если писать каждую хуйню вручную, позаниматься числоебством -- это умно, а сократить запись, сделать код лаконичным и выразительным -- это тупо, тогда это вариант для "умных".
Ответить с цитированием