Assign_12

Assign12

by dhizzybusy

HTML

Enter the values:<br />
<br>
X: <input type="text" id="x" /> <br />
<br>
Y: <input type="text" id="y" /> <br />
<br>
<input type='button' value='Calculate' onclick='calculate();' /> <br /><br />
<span id='output' />

JavaScript

window.calculate = function() {
  var output = document.getElementById('output');
  var x = document.getElementById('x').value.trim();
  var y = document.getElementById('y').value.trim();
  x = parseFloat(x);
  y = parseFloat(y);
  if (isNaN(x) || isNaN(y)) {
    output.innerHTML = "Error: X or Y is not a number!"; //When not a numeric value
    return;
  }
  var l3 = new leaf(3); //assign l3 value 3
  var lx = new leaf("x"); //assign lx value x
  var l5 = new leaf(5); //assign l5 value 5
  var ly = new leaf("y"); //assign ly value y
  var mul1 = new node("*", l5, ly); // Last part of equation : 5 * y
  var add1 = new node("+", lx, mul1); // Last equation : x + 5 * y
  var mul2 = new node("*", l3, add1); // Full equation : 3 * (x + 5 * y)
  var values = {};
  values["x"] = x; 
  values["y"] = y;
  var res = mul2.traverse(values);
  output.innerHTML = "X = " + x + ", Y = " + y + ", Output = " + res;
};

function leaf(value) {
  this.value = value;
}

function node(sym, l, r) {
  this.sym = sym;
  this.l = l;
  this.r = r;
}
leaf.prototype.traverse = function(values) {
  if (isNaN(this.value)) {
    return values[this.value];
  }
  return this.value;
};
node.prototype.traverse = function(values) {
  var l = this.l.traverse(values);
  var r = this.r.traverse(values);
  var sym = this.sym;
  if (sym == '+') {
    return l + r;
  }
  if (sym == "-") {
    return l - r;
  }
  if (sym == '*') {
    return l * r;
  }
  if (sym == '/') {
    return l / r;
  }
  return 0;
};