math-program / / [-] / [@htm-math-program] / math-program.htm


  <script>
  JSoutput = function(a) {
      var str = "["
      if (typeof(a)=="object" && a.length) {
          for (var i=0; i < a.length; i++) 
              if (typeof(a[i])=="object" && a[i].length) {
                  str += (i==0?"":" ")+"["
                  for (var j=0; j<a[i].length; j++) 
                      str += a[i][j]+(j==a[i].length-1?
                              "]"+(i==a.length-1?"]":",")+"\n":", ");
              } else str += a[i]+(i==a.length-1?"]":", ");
      } else str = a;
      return str;
  }
  
  write = function(str) {
      var outnode = document.getElementById("JSoutput");
      outnode.value += JSoutput(str);
  }
  
  writeln = function(str) {
      if (!str) str="";
      var outnode = document.getElementById("JSoutput");
      outnode.value += JSoutput(str)+"\n";
  }
  
  JSrun = function() {
      var str;
      var outnode = document.getElementById("JSoutput");
      outnode.value = "";
      d = new Date().getTime();
      try {
          with (Math) {
              str = JSoutput(eval(document.getElementById("JSprogram").value));
          }
      } catch(e) {
          str = e.name+" at line "+(e.lineNumber-56)+": "+e.message;
      }
      var tnode = document.getElementById("JStiming");
      tnode.innerHTML = ""+(new Date().getTime()-d)/1000;
      outnode.value += str;
  }
  
  JSselect = function() {
      var id = document.getElementById("JSexamples").value;
      var str = document.getElementById(id).value;
      document.getElementById("JSprogram").value = str;
      JSrun();
  }
  
  keyUp = function(event){
    if (event.which==77 && event.ctrlKey) JSrun();
  }
  
  
  random_list = function(n, r, s) {
      var a = [];
      for (var i = 0; i < n; i++) {
  	a[i] = Math.floor(Math.random()*(s-r+1)) + r;
      }
      return a;
  }
  
  
  random_matrix = function(m, n, r, s) {
      var A = [];
      for (var i = 0; i < m; i++) {
          A[i] = [];
          for (var j = 0; j < n; j++)
              A[i][j] = Math.floor(Math.random()*(s-r+1)) + r;
      }
      return A;
  }
  
  
  factorial = function(n) { // simple version
      if (n <= 0) return 1;
      else return n*factorial(n-1);
  }
  
  
  fibonacci = function(n) {
      var a = 0;
      var b = 1;
      for (var i=0; i
  <script>
  function page() { JSrun(); }
  function slide() { JSrun(); }
  </script>
  
  <center>
  <table width="100%">
  <tr><td><b>type <a href=reference-js.html target=_top>javascript</a></b>: 
  <select id="JSexamples" onchange="JSselect()">
  <option value="maximum" selected>maximum element</option>
  <option value="randomlist">random list</option>
  <option value="linear">linear search</option>
  <option value="binary">binary search</option>
  <option value="bubble">bubble sort</option>
  <option value="base">convert base</option>
  <option value="powermod">modular exponentiation</option>
  <option value="gcd">greatest common divisor</option>
  <option value="factor">prime factorization</option>
  <option value="factorial">factorial recursion</option>
  <option value="fibonacci">fibonacci numbers</option>
  <option value="combinations">combinations</option>
  <option value="randommatrix">random matrix</option>
  <option value="matrixmult">matrix multiplication</option>
  </select>
  </td><td>
  <input type="button" value="run (Ctrl-m)" onclick="JSrun()"/>
  timing:<span id="JStiming"></span> s> <span id="JStiming"></span> s
  </td></tr>
  <tr><td width="50%" style="padding:1px">
  <textarea id="JSprogram" style="height:5in; width:100%;" onkeyup="keyUp(event)">
  // Find the maximum value in a list of numbers
  
  max = function(a) {
      var m = a[0];
      for (var i = 1; i < a.length; i++) {
          writeln("m = "+m);
          if (m < a[i]) m = a[i];
      }
      return m;
  }
  
  a = random_list(6,1,10);
  writeln(a);
  max(a);
  </textarea>
  </td>
  <td width="50%" style="padding:1px">
  <textarea id="JSoutput" style="height:5in; width:100%">
  </textarea></td>
  </tr>
  </table>
  </center>
  
  <textarea id="maximum" style="display:none">
  // Find the maximum value in a list of numbers
  
  max = function(a) {
      var m = a[0];
      for (var i = 1; i < a.length; i++) {
          writeln("m = "+m);
          if (m < a[i]) m = a[i];
      }
      return m;
  }
  
  a = random_list(6,1,10);
  writeln(a);
  max(a);
  </textarea>
  
  <textarea id="randomlist" style="display:none">
  // Construct a list of  n  random integers from  r  to  s
  // random() returns a uniformly distributed random number in [0,1)
  
  random_list = function(n, r, s) {
      var a = [];
      for (var i = 0; i < n; i++) {
          a[i] = floor(random()*(s-r+1)) + r;
      }
      return a;
  }
  
  random_list(100,1,10)
  </textarea>
  
  <textarea id="linear" style="display:none">
  // Find first occurrence of an element in a list of numbers
  
  linear_search = function(x,a) {
      var i = 0;
      while (i < a.length &amp;&amp; x != a[i]) {
          writeln("i = "+i);
          i = i+1;
      }
      if (i < a.length) return i;
      else return "not found";
  }
  
  a = random_list(6,1,10);
  writeln(a);
  linear_search(3,a);
  </textarea>
  
  <textarea id="binary" style="display:none">
  // Find first occurrence of an element in a *sorted* list of numbers
  binary_search = function(x,a) {
      var i = 0;           // i is the left endpoint of the search interval
      var j = a.length-1;  // j is the right endpoint of the search interval
      while (i < j) {
          writeln("i="+i+", j="+j);
          m = floor((i+j)/2);
          if (x > a[m]) i = m+1;
          else j = m;
      }
      if (x == a[i]) return i;
      else return "not found";
  }
  
  binary_search(3, [1,2,2,2,3,3,4,5,6,7,8]);
  </textarea>
  
  <textarea id="bubble" style="display:none">
  // Sort a list of numbers using (inefficient) bubble sort
  
  bubble_sort = function(a) {
      var t;
      for (var i = 0; i < a.length-1; i++) 
          for (var j = 0; j < a.length-i; j++) 
              if (a[j] > a[j+1]) {
                  writeln("swap "+a[j]+", "+a[j+1]);
                  t = a[j];
                  a[j] = a[j+1];
                  a[j+1] = t;
              }
      return a;
  }
  
  a = random_list(6,1,10);
  writeln(a);
  bubble_sort(a);
  </textarea>
  
  <textarea id="base" style="display:none">
  // Convert a positive base 10 integer to another base
  
  convert = function(n,b) {
      var m = [];
      while (n > 0) {
          m = [n % b].concat(m);
          n = floor(n/b);
      }
      return m;
  }
  
  convert(123456789,5);
  </textarea>
  
  <textarea id="powermod" style="display:none">
  // Calculate the n-th power mod m efficiently
  
  powermod = function(b,n,m) {
      var x = 1;
      var p = b % m;
      while (n > 0) {
          if (n%2 == 1) x = (x*p) % m;
          p = (p*p) % m;
          n = floor(n/2);
          writeln("n = "+n+", x = "+x);
      }
      return x;
  }
  
  powermod(123456789, 543, 12345);
  </textarea>
  
  <textarea id="gcd" style="display:none">
  // Find the greatest common divisor of two positive integers
  // using the Euclidean algorithm
  
  gcd = function(a,b) {
      var r;
      while (b > 0) {
          writeln("a = "+a+", b = "+b);
          r = a % b;       // remainder
          a = b;
          b = r;
      }
      return a;
  }
  
  gcd(49,84);
  
  //gcd(fibonacci(15),fibonacci(14));
  </textarea>
  
  <textarea id="factor" style="display:none">
  // Find the prime factors of a positive integer (inefficiently)
  
  primefactors = function(n) {
      var p = 2;
      var a = [];
      while (p*p <= n) {
          if (n\%p == 0) {
              n = floor(n/p);
              writeln(n*p+" = "+p+" * "+n);
              a = a.concat([p]);
          } else p = p+1;
      }
      return a.concat([n]);
  }
  
  primefactors(1234567891011);
  //primefactors(2*3*5*7*11*13 + 1);
  //primefactors(123456789123451);
  </textarea>
  
  <textarea id="factorial" style="display:none">
  // Calculate the factorial of a natural number using recursion
  
  factorial = function(n) { // simple version
      if (n <= 0) return 1;
      else return n*factorial(n-1);
  }
  
  factorialw = function(n) { // write intermediate results
      var k;
      if (n <= 0) return 1;
      else {
          writeln("n = "+n);
          k = n*factorialw(n-1);
          writeln("k = "+k);
          return k;
      }
  }
  
  factorialw(10);
  </textarea>
  
  <textarea id="fibonacci" style="display:none">
  // Calculate the n-th Fibonacci number iteratively
  
  fibonacci = function(n) {
      var a = 0;
      var b = 1;
      for (var i=0; i<n; i++) {
          write(a+" ");
          b = a+b;
          a = b-a;
      }
      writeln("\n");
      return a;
  }
  
  fibonacci(50);
  
  
  <textarea id="combinations" style="display:none">
  // Calculate the binomial coefficient C(n,k)
  
  C = function(n,k) {
      var c = 1;
      for (var i=1; i<=k; i++) {
          writeln("c = "+c);
          c = c*(n-k+i)/i;
      }
      return c;
  }
  
  C(50,20);
  </textarea>
  
  <textarea id="randommatrix" style="display:none">
  // Construct a matrix of m x n random integers from r to s
  
  random_matrix = function(m, n, r, s) {
      var A = [];
      for (var i = 0; i < m; i++) {
          A[i] = [];
          for (var j = 0; j < n; j++)
              A[i][j] = Math.floor(Math.random()*(s-r+1)) + r;
      }
      return A;
  }
  
  random_matrix(3,3,0,4)
  </textarea>
  
  <textarea id="matrixmult" style="display:none">
  // multiply two matrices
  
  mult = function(A,B) {
      var C = [];
      for (var i = 0; i < A.length; i++) {
          C[i] = [];
          for (var j = 0; j < B[0].length; j++) {
              C[i][j] = 0;
              for (var k = 0; k < A[0].length; k++) 
                  C[i][j] = C[i][j] + A[i][k]*B[k][j];
          }
      }
      return C;
  }
  
  A = random_matrix(3,3,0,4); writeln(A)
  B = random_matrix(3,3,0,4); writeln(B)
  mult(A,B)
  </textarea>
  
  <script>
  JSrun();
  </script>