Advertisement
Guest User

expressionCALC

a guest
Jul 28th, 2016
45
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
HTML 7.09 KB | None | 0 0
  1. <!DOCTYPE html>
  2. <html>
  3. <body>
  4.     <h1>Expression calculator</h1>
  5.     <p>Example:</p>
  6.     <a href="#" onclick="document.getElementById('inp').value = '1+2'">1+2</a><br>
  7.     <a href="#" onclick="document.getElementById('inp').value = '2*3-4/5+6'">2*3-4/5+6</a><br>
  8.     <a href="#" onclick="document.getElementById('inp').value = '2/3+((4-5)*(6*7)-8*9'">2/3+((4-5)*(6*7)-8*9</a><br>
  9.     <input type="text" id="inp">
  10.     <button id="btn">Calc</button>
  11.     <p id="rs"></p>
  12.     <script>
  13.         var i, m, n, k, l;
  14.         var a1, a2, s, str = '', tmp;
  15.         var more, bkmore;
  16.  
  17.         function F_elms(inp) { //Get the 2 sides
  18.             a1 = ''; a2 = ''; more = true;
  19.             n = i - 1;
  20.             while (
  21.                 inp[n] == 'e' ||
  22.                 inp[n] == '.' ||
  23.                 !isNaN(+inp[n]) ||
  24.                 ( inp[n] == '-' && a1.indexOf('-') == -1 && (isNaN(+inp[n-1])||n == 1) )
  25.            ) { a1 = inp[n] + a1; n-- }
  26.             l = n + 2;
  27.             if (n == 1 && inp[n] == '-') a1 = '-' + a1;
  28.             if (a1 === '') a1 = '0';
  29.             n = i + 1;
  30.             while ( inp[n] == 'e' || inp[n] == '.' || (n == i+1 && inp[n] == '-') || !isNaN(+inp[n]) ) { a2 += inp[n]; n++ }
  31.             if (a2 === '') a2 = '0'
  32.         }
  33.  
  34.         function F_bkupd() { //Replace old part in bracket with calculated calc
  35.             s = s.substr(0,k) + str + s.substr(k+tmp.length,s.length-k-tmp.length);
  36.             document.getElementById('rs').innerHTML += ' =' + s + '<br>';
  37.             tmp = str
  38.         }
  39.  
  40.         document.getElementById('btn').onclick = function() {
  41.             m = 0; n = 0;
  42.             s = document.getElementById('inp').value;
  43.             document.getElementById('rs').innerHTML = '';
  44.             for (i=0; i<s.length; i++) { if (s[i] == '(') m++; if (s[i] == ')') n++ }
  45.            for (i=0; i<m-n; i++) s += ')'; for (i=0; i<n-m; i++) s = '(' + s;
  46.            if (m != n) document.getElementById('rs').innerHTML += ' =' + s + '<br>';
  47.             do {
  48.                 bkmore = false;
  49.                 for (m=s.length-1; m>=0; m--) if (s[m] == '(') {
  50.                     n = m + 1; k = n; bkmore = true; str = '';
  51.                     while (s[n] != ')') {str += s[n]; n++}
  52.                     tmp = str; //Use when there's no + - * / ^ in bracket
  53.                     do {
  54.                         more = false;
  55.                         for (i=0;i<str.length;i++) if (str[i] == '^') {
  56.                            tmp = str; F_elms(str);
  57.                            str = str.substr(0,l-1) + Math.pow(+a1,+a2) + str.substr( l+(a1+a2).length, str.length-l-(a1+a2).length );
  58.                            F_bkupd(); break
  59.                        }
  60.                    } while (more === true);
  61.                    do {
  62.                        more = false;
  63.                        for (i=0;i<str.length;i++) if (str[i] == '/') {
  64.                            tmp = str; F_elms(str);
  65.                            str = str.substr(0,l-1) + ((+a1)/(+a2)) + str.substr( l+(a1+a2).length, str.length-l-(a1+a2).length );
  66.                            F_bkupd(); break
  67.                        }
  68.                    } while (more === true);
  69.                    do {
  70.                        more = false;
  71.                        for (i=0;i<str.length;i++) if (str[i] == '*') {
  72.                            tmp = str; F_elms(str);
  73.                            str = str.substr(0,l-1) + ((+a1)*(+a2)) + str.substr( l+(a1+a2).length, str.length-l-(a1+a2).length );
  74.                            F_bkupd(); break
  75.                        }
  76.                    } while (more === true);
  77.                    do {
  78.                        more = false;
  79.                        for (i=0;i<str.length;i++) if (str[i] == '-' && !isNaN(+str[i-1]) ) {
  80.                            tmp = str; F_elms(str);
  81.                            str = str.substr(0,l-1) + ((+a1)-(+a2)) + str.substr( l+(a1+a2).length, str.length-l-(a1+a2).length );
  82.                            F_bkupd(); break
  83.                        }
  84.                    } while (more === true);
  85.                    do {
  86.                        more = false;
  87.                        for (i=0;i<str.length;i++) if (str[i] == '+') {
  88.                            tmp = str; F_elms(str);
  89.                            str = str.substr(0,l-1) + ((+a1)+(+a2)) + str.substr( l+(a1+a2).length, str.length-l-(a1+a2).length );
  90.                            F_bkupd(); break
  91.                        }
  92.                    } while (more === true);
  93.                    s = s.substr(0,k-1)+s.substr(k,tmp.length)+s.substr(k+tmp.length+1,s.length-k-tmp.length);
  94.                    document.getElementById('rs').innerHTML += ' =' + s + '<br>';
  95.                     break
  96.                 }
  97.             } while (bkmore === true);
  98.             do {
  99.                 more = false;
  100.                 for (i=0; i<s.length; i++) if (s[i] == '^') {
  101.                    F_elms(s);
  102.                    s = s.substr( 0, s.indexOf(a1+'^'+a2) ) + Math.pow(+a1,+a2) + s.substr( s.indexOf(a1+'^'+a2)+(a1+a2).length+1, s.length-s.indexOf(a1+'^'+a2)-(a1+a2).length-1 );
  103.                    document.getElementById('rs').innerHTML += ' =' + s + '<br>'; break
  104.                 }
  105.             } while (more === true);
  106.             do {
  107.                 more = false;
  108.                 for (i=0; i<s.length; i++) if (s[i] == '/') {
  109.                    F_elms(s);
  110.                    s = s.substr( 0, s.indexOf(a1+'/'+a2) ) + ((+a1)/(+a2)) + s.substr( s.indexOf(a1+'/'+a2)+(a1+a2).length+1, s.length-s.indexOf(a1+'/'+a2)-(a1+a2).length-1 );
  111.                    document.getElementById('rs').innerHTML += ' =' + s + '<br>'; break
  112.                 }
  113.             } while (more === true);
  114.             do {
  115.                 more = false;
  116.                 for (i=0; i<s.length; i++) if (s[i] == '*') {
  117.                    F_elms(s);
  118.                    s = s.substr( 0, s.indexOf(a1+'*'+a2) ) + ((+a1)*(+a2)) + s.substr( s.indexOf(a1+'*'+a2)+(a1+a2).length+1, s.length-s.indexOf(a1+'*'+a2)-(a1+a2).length-1 );
  119.                    document.getElementById('rs').innerHTML += ' =' + s + '<br>'; break
  120.                 }
  121.             } while (more === true);
  122.             do {
  123.                 more = false;
  124.                 for (i=0; i<s.length; i++) if ( s[i] == '-' && !isNaN(+s[i-1]) ) {
  125.                    F_elms(s);
  126.                    s = s.substr( 0, s.indexOf(a1+'-'+a2) ) + ((+a1)-(+a2)) + s.substr( s.indexOf(a1+'-'+a2)+(a1+a2).length+1, s.length-s.indexOf(a1+'-'+a2)-(a1+a2).length-1 );
  127.                    document.getElementById('rs').innerHTML += ' =' + s + '<br>'; break
  128.                 }
  129.             } while (more === true);
  130.             do {
  131.                 more = false;
  132.                 for (i=0; i<s.length; i++) if (s[i] == '+') {
  133.                    F_elms(s);
  134.                    s = s.substr( 0, s.indexOf(a1+'+'+a2) ) + ((+a1)+(+a2)) + s.substr( s.indexOf(a1+'+'+a2)+(a1+a2).length+1, s.length-s.indexOf(a1+'+'+a2)-(a1+a2).length-1 );
  135.                    document.getElementById('rs').innerHTML += ' =' + s + '<br>'; break
  136.                 }
  137.             } while (more === true)
  138.         }
  139.     </script>
  140. </body>
  141. </html>
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement