(5,1)+(5,1)
((10,0),(2,0))
((5,1),7)+(5,1)
(((10,0),(1,0)),((8,0),(0,0)))
((5,1),7)*(5,1)
(((18,0),(5,0)),((40,0),(1,0)))
<script>
var pi = 3.14159265358979323846264338327950288419716939937510 ;
var n = 10;
var a = new Array (100);
var k = 0;
var i = 0;
var lexj = 0;
var lexi = 0;
var j;
var p = "5*x+2";
p = "sin(2*pi*1*x)+1/2*sin(2*pi*x*3*pi/4)";
p = "(5,1)+(5,1)";
function Complex (re, im) {
this.re = re;
this.im = im;
}
function cmult (p, q) {
var a = p.re;
var b = p.im
var c = q.re;
var d = q.im;
var a2;
var b2;
var c2;
var d2;
if ((typeof (a) == 'number') && (typeof (b) == 'number') && (typeof (c) == 'number') && (typeof (d) == 'number'))
return new Complex (a*c-b*d, a*d + b*c);
if (((typeof (a) == 'number')))
a2 = new Complex (a, 0);
else
a2 = a;
if (((typeof (b) == 'number')))
b2 = new Complex (b, 0);
else
b2 = b;
if (((typeof (c) == 'number')))
c2 = new Complex (c, 0);
else
c2 = c;
if (((typeof (d) == 'number')))
d2 = new Complex (d, 0);
else
d2 = d;
return new Complex(csub (cmult (a2, c2), cmult (b2, d2)), cadd (cmult (a2, d2), cmult (b2, c2)));
}
function cadd (p, q) {
var a = p.re;
var b = p.im
var c = q.re;
var d = q.im;
var a2;
var b2;
var c2;
var d2;
if ((typeof (a) == 'number') && (typeof (b) == 'number') && (typeof (c) == 'number') && (typeof (d) == 'number'))
return new Complex (a + c, b + d);
if (((typeof (a) == 'number')))
a2 = new Complex (a, 0);
else
a2 = a;
if (((typeof (b) == 'number')))
b2 = new Complex (b, 0);
else
b2 = b;
if (((typeof (c) == 'number')))
c2 = new Complex (c, 0);
else
c2 = c;
if (((typeof (d) == 'number')))
d2 = new Complex (d, 0);
else
d2 = d;
return new Complex (cadd (a2, c2), cadd (b2, d2));
}
function csub (p, q) {
var a = p.re;
var b = p.im
var c = q.re;
var d = q.im;
var a2;
var b2;
var c2;
var d2;
if ((typeof (a) == 'number') && (typeof (b) == 'number') && (typeof (c) == 'number') && (typeof (d) == 'number'))
return new Complex (a - c, b - d);
if (((typeof (a) == 'number')))
a2 = new Complex (a, 0);
else
a2 = a;
if (((typeof (b) == 'number')))
b2 = new Complex (b, 0);
else
b2 = b;
if (((typeof (c) == 'number')))
c2 = new Complex (c, 0);
else
c2 = c;
if (((typeof (d) == 'number')))
d2 = new Complex (d, 0);
else
d2 = d;
return new Complex (csub (a2, c2), csub (b2, d2));
}
function cdiv (p, q) {
var a = p.re;
var b = p.im
var c = q.re;
var d = q.im;
var a2;
var b2;
var c2;
var d2;
if ((typeof (a) == 'number') && (typeof (b) == 'number') && (typeof (c) == 'number') && (typeof (d) == 'number'))
return new Complex ((a*c+b*d)/(c*c+d*d), (b*c-a*d)/(c*c+d*d));
if (((typeof (a) == 'number')))
a2 = new Complex (a, 0);
else
a2 = a;
if (((typeof (b) == 'number')))
b2 = new Complex (b, 0);
else
b2 = b;
if (((typeof (c) == 'number')))
c2 = new Complex (c, 0);
else
c2 = c;
if (((typeof (d) == 'number')))
d2 = new Complex (d, 0);
else
d2 = d;
return new Complex (cdiv(cadd (cmult(a2, c2), cmult(b2, d2)), cadd(cmult(c2, c2), cmult (d2, d2))), cdiv (csub(cmult(b2, c2), cmult (a2, d2)), cadd(cmult (c2, c2), cmult (d2, d2))));
}
a = expr ();
window.document.write (p + "
");
output (a);
lexj = 0;
p = "((5,1),7)+(5,1)";
window.document.write ("
" + p + "
");
a = expr ();
output (a);
lexj = 0;
p = "((5,1),7)*(5,1)";
window.document.write ("
" + p + "
");
a = expr ();
output (a);
function output (a) {
window.document.write ('(');
if (typeof (a.re) == 'number')
window.document.write (a.re);
else
output (a.re)
window.document.write (',');
if (typeof (a.im) == 'number')
window.document.write (a.im);
else
output (a.im);
window.document.write (')');
}
var lexj;
function expr () {
var x;
var y;
x = term ();
y = expr2 ();
return cadd(x,y);
}
function expr2 () {
var x;
var y;
if(p.charAt(lexj) == '+') {
lexj++;
x = term ();
y = expr2 ();
return cadd(x, y);
}
else if(p.charAt(lexj) == '-') {
lexj++;
x = term ();
y = expr2 ();
return csub(x, y);
}
else
return new Complex (0, 0);
}
function term () {
var x;
var y;
x = factor ();
y = term2 ();
return cmult (x, y);
}
function term2 () {
var x;
var y;
if(p.charAt(lexj) == '*') {
lexj++;
x = factor ();
y = term2 ();
return cmult(x, y);
}
else if(p.charAt(lexj) == '/') {
lexj++;
x = factor ();
y = term2 ();
return cdiv(y, x);
}
else {
return new Complex (1, 0);
}
}
function factor () {
var z;
var x;
var y;
if(p.charAt(lexj) == '(') {
lexj++;
x = expr ();
if(p.charAt(lexj) == ')')
lexj++;
else if (p.charAt (lexj) == ',') {
lexj++;
y = expr ();
if (p.charAt (lexj) == ')') {
lexj++;
return new Complex (x, y);
}
else
parser_error ();
}
else
parser_error();
return x;
}
else if((p.charAt(lexj) == 's') && (p.charAt(lexj+1) == 'i') && (p.charAt(lexj+2) == 'n') && (p.charAt(lexj+3) == '(')) {
lexj+=4;
x = expr ();
y = new Complex (Math.sin (x.re)*Math.cosh (x.im), Math.cos (x.re)*Math.sinh (x.im));
if(p.charAt(lexj) == ')')
lexj++;
else
parser_error();
return y;
}
else if((p.charAt(lexj) == 'c') && (p.charAt(lexj+1) == 'o') && (p.charAt(lexj+2) == 's') && (p.charAt(lexj+3) == '(')) {
lexj+=4;
x = expr ();
y = new Complex (Math.cos (x.re)*Math.cosh (x.im), Math.sin (x.re)*Math.sinh (x.im));
if(p.charAt(lexj) == ')')
lexj++;
else
parser_error();
return y;
}
else if((p.charAt(lexj) >= 0) && (p.charAt(lexj) <= 9)) {
x = new Complex (p.charCodeAt(lexj)-48, 0);
lexj ++;
return x;
}
/*else if (p.charAt (lexj) == 'x') {
lexj++;
x = new Complex (Math.cos (1/2*pi), Math.sin (1/2*pi));
return x;
}*/
else if((p.charAt(lexj) == 'p') && (p.charAt(lexj+1) == 'i')) {
lexj+=2;
return new Complex (pi, 0);
}
else
parser_error();
}
function parser_error() {
alert("Parser Error");
exit ();
}
var x = document.getElementById ("myscript");
var content = myscript.innerHTML;
content = content.replace ("<", "<");
content = content.replace (">", ">");
content = content.replace(/(?:\r\n|\r|\n)/g, '
');
content = content.replace(/ /g, " ");
window.document.write (content);
(5,1)+(5,1)
((10,0),(2,0))
((5,1),7)+(5,1)
(((10,0),(1,0)),((8,0),(0,0)))
((5,1),7)*(5,1)
(((18,0),(5,0)),((40,0),(1,0)))