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 && 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>
