Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- <html>
- <head>
- <script type="text/javascript">
- function FormulaEvaluator()
- {
- this.main = function() {
- // prompt user for formula string
- var formula = prompt( "Enter a formula.", "");
- // variables will be presumed to be single, lower-case
- // alphabetical characters - kill everything else
- var variables = this.kernel(
- formula.replace( new RegExp( "[^a-z]", "g"), "" )
- );
- // to collect values or each variable
- var values = new Array( variables.length );
- // for each lower-case variable name, collect value
- for (var i = 0; i < variables.length; i++) {
- values[ i ] = prompt(
- "Enter the value of the variable " +
- variables.charAt( i ) + ": "
- );
- }
- // copy original formula
- var evaluable = formula;
- // substitute the corresponding value for each variable
- // in the original formula
- for (var i = 0; i < variables.length; i++) {
- evaluable = evaluable.replace(
- new RegExp( variables.charAt( i ), "g"), values[ i ]
- );
- }
- // evaluate the formula
- var result = eval( evaluable );
- // compose output to report
- var rpt = "formula: " + formula + "\nwith variables:";
- for (var i = 0; i < variables.length; i++) {
- rpt += "\n " + variables.charAt( i ) + " = " +
- values[ i ];
- }
- rpt += "\ntranslates to: " + evaluable + " and " +
- "\nevaluates to: " + result;
- alert( rpt );
- };
- // Return unique elements
- this.kernel = function(a) {
- // Set hashtable style associative array working storage.
- var r = new Array();
- // For each element in a...
- for (var i = 0; i < a.length; i++) {
- // ...assign key/value pair - repeated values have same key &
- // replace one another, leaving only single instance of value.
- r[a[i]] = a[i];
- }
- // Initialize return.
- var k = "";
- // For each key in r...
- for (var el in r) {
- // ...set value into index-oriented array.
- k += r[el];
- }
- return k;
- };
- };
- window.onload = function() {
- (new FormulaEvaluator()).main();
- };
- </script>
- </head>
- <body></body>
- </html>
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement