<HEAD> <SCRIPT LANGUAGE="JavaScript"> <!-- Begin
// ************************************************* sCal2-06r.htm // // sCal - small, scientific, script Calculator // // Copyright (C) 2003 R. Mohaupt // // This program is free software; you can redistribute it and/or // modify it under the terms of the GNU General Public License // as published by the Free Software Foundation; either version 2 // of the License, or any later version. // // This program is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with this program; if not, write to the Free Software // Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA // 02111-1307 USA // --- mgineer1@netscape.net // ABOUT sCal: R.Mohaupt, Feb, 2003 // // GENERAL: sCal is a scientific, programmable calculator form // --predominately generated in HTML in a relatively short BODY of // code at the end (approximately the last 20%, depending on how // much additional code has been added). The HEAD contains JavaScript // (JScript, ECMA std.262 Script, or JS) programming language. // Therefore, one only needs a JS-enabled web browser (Microsoft // Internet Explorer, Mozilla, Netscape Navigator, versions 5+, have // been checked & provided for) to operate sCal, and a text editor // (usually accessable within the browser) to modify. The HEAD has // 3 commented purposes: // // I. CALCULATOR OPERATION FUNCTIONS: Basic instructions to // handle I/O (Input / Output) to the calculator form BODY. These // are named Ix, Ox, Im, Om etc. {coding convention might have // named these get_x, put_x, etc.} for I/O to the x-display, memory, // etc. All areas of sCal can be modified by the user; however, // special care should be taken in this area since so much other // code depends on operation of these functions. The key function // is "xEval()" which, after some checking for use of the '^' to // take x to the y power, calls the JS "eval('string')" function. // // II. MENU GROUPS WITH STRINGS OF JS SOURCE CODE: Operation of // the menu structure is fairly simple: observing 'Catagory' drop- // down menus in the upper-right cell of the Calculator BODY, to // select 'Groups' of individual operations from the drop-down // menus in the upper-left cell. Programming this requires some // study of the included source examples. As in any coding effort, // it is VERY important to mimic the location of commas, quotes, // semi-colons, etc. exactly. More interesting and challenging is // creation of JS-coded strings, often multi-line statements, to // perform computational desires. These vary from the application // of a simple factor (the majority of x}conversions do this) to // somewhat elaborate mini-programs, identifiable by some dense // string construction. The function "eval" expects a string of // JS code. This is what appears in the x-display when the [JS] // button clicked. Data additions in *}functions are made in the // x-display. Code can be modified there, too. But for code // modifications, or addition of new procedures, to become 'per- // manent', they need to be added to the source. Here one must // keep in mind that STRINGS are being built. Single and double- // quotes only provide 2-levels. Prompts in the n[0...19] array // require another level, hence the supplemental strings of dense // code appearing immediately before the Group Menu layouts. // A few comments are in order here: // // * Operational Summary: sCal conventions suggest that the // following 'codes' be observed. (The program does not key on // these, but they give the user a hint of what to expect.) // x} in description, user click [>x] button to convert or // operate on value in x-display. // s} user click [JS] to view text (script) in x-display // *} click [JS], user seeks comment or other areas in text to // place or replace a value into a procedure, ->[=]. // n} click [JS] to fill-in the n[0..19] array for the program: // prompt 'input <' means value to be entered in next column // label 'output >' designates the computed output to right // '_column_head_' may indicate that I/O values are below // // * String Media: All Programs & Functions could have been built // into sCal and skip the call to 'eval()' to interpret strings; // however, that would be a different process from allowing the // user to modify or creat new programming in the x-display. // // * Finding Code: Sub-menus are called by exactly the first 7- // characters of the catagory name. The specific code in the HEAD // is placed roughly in the order of Menu appearance, but it may // be easier to locate by using the text editor's 'Find' function. // These 7-characters can 'Find' the code area: sub-menu selections // will be below the 'found', and additional strings to execute // them (if any) are in the block immediately above it. // // * JS References: Many excellent books are available on the // topic, as well as tutorials and code examples on the Web. Both // Netscape and Microsoft have extensive (though not all-inclusive) // Guides and References that can be downloaded. sCal contains // only a sub-set of JS language elements--mostly listed in the // JavaScript examples Group. Comments are provided, but there // are never enough. // // * Reliability: NO EXHAUSTIVE ERROR CHECKING HAS BEEN CONDUCTED! // Some errors can be anticipated. Conversion factors and procedure // output should be checked before relying upon the results. And, // of course, the user is expected to know when a computation is // applicable to the problem at hand. Tho some simple discussion // and an example may be included in the string or an s}(script), // there is no substitute for comprehensive knowledge and // experience. // // * Philosophy: sCal is not intended to compete with big, slick // full-blown applications in any areas it touches. It is intended // to be highly portable (hence JS & HTML); use only one "small" // file (both source & executable, with no supplemental image, // sound, .ddl etc. files to be installed); handy for the rare use // of a procedure or quick implementation of a special calculation // not warranting development of a large program. It will not have // extensive help files, options, and error-checking. // // III. BROWSER DETERMINATION - MENU POPULATION: A small set // of variables and functions at the end of the HEAD, before the // BODY, to provide settings for browser variable text size and // default menu groups. sCal is set up to run properly with recent // versions of Netscape, Mozilla, or Internet Explorer (trademarks // of respective providers) in their default, out-of-the-box set- // tings. If a user has made modifications, their impact on sCal is // unpredictable. If unsatisfactory, some CSS instructions can be // added, or direct code modifications made. // // BODY: The running sCal calculator is divided in a 2x2 table. // The cell boundries are clearly commented in the source code // and can be compared to the visible form. HTML is in the order // of appearance. Brief operating instructions are given in the // lowest 2 cells. Experimentation and reading this source code // are highly recommended. // // **************************************************************
// *********************************** I. CALCULATOR OPERATION FUNCTIONS
var x = ""; // Display: by loose typing, 'x' mostly a string, sometimes a number // Advantages & Disadvantages. Big problem is use of '+' to add strings. // Often necessary to induce JavaScript to treat variable as a number by // dividing it by 1: i.e. +x adds x-string, +x/1 adds numeric value of x. // A stray '/1' is seen in many formulations to use less code than eval(). var m = ""; // stores Memory var nFlag = "0"; // determines function of [n] keys n = new Array(20);// stores variables used in programming, initialize as empty strings for (i=0; i<20; i++) {n[i]="";} var temp = "";
function Ix() {x = document.sCal.IOx.value;} // Input synch to x-string. Do since TextArea can be changed from keyboard function Ox() {document.sCal.IOx.value = x;} // Output x-string change to display
function xEval() {Ix(); Im(); // --- MAIN Evaluation Routine, invoked by screen [ = ] click --- for (i=0; i<20; i++) {nI(i);} var j = x.indexOf('^'); // check to see if there is an x^y function if (j > 0) { // all to left of '^' is taken as base and all right as exponent if (x.indexOf('^',j+1) > 0) {alert("WARNING! Only 1 [^] allowed in expression! Math.pow(x,y) preferred.");} else { // likewise, entire x-value is used as function argument, not just last term document.sCal.IOx.value = Math.pow(eval(x.substring(0,j)),eval(x.substring(j+1)));}} else { // check to see if a program, update variables for keyboard entries if (x.indexOf('=')>-1) { // Note: certain calls reserved for programs ('=' designated) temp=x; eval(x); x=temp; Ox();} // original x not changed in a program else {document.sCal.IOx.value = eval(x);} } // end of nested if-else statements Ix(); Om(); On();}
function xPlusEq(s) {Ix(); x += s; Ox();} // --- DISPLAY x functions --- function xMultEq(s) {xEval(); x *= s; Ox();} function Clear() {x = ""; Ox();} // Clearing x often necessary when switching functions. function BkSpace() {Ix(); x = x.substring(0,x.length-1) ; Ox();} function recip() {xEval(); x = 1/(x); Ox();} function xEnd() {Ix(); return x.substr(x.length-1,1);} // allows last char. of x to be a Flag; // click display button, or key if cursor placed at end of x, for a control. {x[i] doesn't work}
function JSwork(s) // --- determine what to do with incoming MENU (s) values from [JS] button --- {if (s.indexOf('n[1]')>-1) //-if there is program (indicated by presence of n[1]), {x=""; Ox(); xPlusEq(s); xEval();} // fill in array. ERROR if x-display not cleared prior. else {xPlusEq(s);} } function Xwork(s) // --- determine what to do with incoming MENU (s) values from [Do] button --- {if (isNaN(s)) {if (s.indexOf('x')>-1) //-if expression, s, is f(x), i.e.Method, {xEval(); x = eval(s); Ox();} // figure x, & substiture in function else {x += eval(s); Ox();} } //-if a Property or program, add 's' value else {xPlusEq(s);} } //-if numeric constant, append like JSwork function DoRecip(s) //--- does [1/d]: inverse [Do] eg. ft>m becomes m>ft. NOT ALWAYS SENSIBLE! --- {Ix(); temp=eval(s); if (s.indexOf('x')>-1) {x=x*x/temp} else {x=1/temp} Ox();}
function Im() {m = document.sCal.IOm.value;} // --- MEMORY functions: (similar to Ix() & Ox()) function Om() {document.sCal.IOm.value = m;} function XtoM() {Ix(); Im(); m += x; Om(); x=""; Ox();} // Memory click operations: function MtoX() {Ix(); Im(); x += m; Ox();} function Mplus() {xEval(); if (m=="") {m=0} // --- note that Mplus can accumulate: if (isNaN(m) && m.charAt(0)=="/"){m+=x+"/"}// string of data values, triggered by starting '/' else {m=parseFloat(m)+parseFloat(x)} // & using '/' as delimiter between values, Om(); x=""; Ox();} // or as summation & storage of a single value. function Mclear() {m = ""; Om();} // - Use MtoX to view/edit the string of values.
function nI(k) {n[k] = eval("document.sCal.n"+k+".value");} // --- for n[.] DATA ARRAY --- // for consistency with Ix() & Im() this would have been named In, except its reserved function On() { // function On(k) like Ox() & Om(). document.sCal.n0.value = n[0]; // These are values of the text boxes document.sCal.n1.value = n[1]; // on the right cell of sCal. document.sCal.n2.value = n[2]; // {This is not ellegant code document.sCal.n3.value = n[3]; // but the prior form of n[k]= document.sCal.n4.value = n[4]; // eval("document.sCal.n"+k+".value") document.sCal.n5.value = n[5]; // in the 'input' nI form, but document.sCal.n6.value = n[6]; // contrary to Netscape documentation, document.sCal.n7.value = n[7]; // eval("document.sCal.n"+k+".value") document.sCal.n8.value = n[8]; // =n[k] for On, doesn't work.} document.sCal.n9.value = n[9]; document.sCal.n10.value=n[10]; document.sCal.n11.value=n[11]; document.sCal.n12.value=n[12]; document.sCal.n13.value=n[13]; document.sCal.n14.value=n[14]; document.sCal.n15.value=n[15]; document.sCal.n16.value=n[16]; document.sCal.n17.value=n[17]; document.sCal.n18.value=n[18]; document.sCal.n19.value=n[19];} function setNflag1() {nFlag="1";} // sets flag to insert 'n[k]' in x-display function setNflag2() {nFlag="2";} // sets flag to insert value of n[k] in x function nData(k) { // similar to Memory functions if (nFlag=="0") {n[k] = x; On();} if (nFlag=="1") {Ix(); x += "n["+k+"]"; Ox(); nFlag="0";} // Nflag is reset to 0 if (nFlag=="2") {Ix(); nI(k); x += n[k]; Ox(); nFlag="0";}}// after each use. function Nclear() {for (i=0; i<20; i++) {n[i] = "";} On();} // clears entire n-array // --- except when data is specifically intended to carry over, it is good practice // to clear the n-data array (AND the x-display) when switching to a new function. function Mr(val,place) {var d=Math.pow(10,place); //--- MISC. UTILITY FUNCTIONS --- return Math.round(d*val)/d;} //--- Output decimal places --- function Fo(val) {var d=0; if (val<100){ // format output to 3 +/- significant figures if (val<10){d=2} else {d=1}} return Mr(val,d)} function fact(q) {var j=q; for (i=q;i>1;i--) {j*=fact(j-1)} return j};// factorial, n!=1*2*3*...*n // note recursion: fact(q) calls itself, above. var Pi =Math.PI; // Consideration has been given to streamlining all Math. fcn. calls by defining // them in a cluster; eg. sin(a)=Math.sin(a*PI/180) {in degrees vs. radians}, etc. // With the math intensity of sCal, there would be a savings in code size (and it // has been done in the cases above), but it would not encourage good JS coding. // Not a big matter of principle, tho. User could do it, looking like VB.script.
/* ****************************** II. MENU GROUPS WITH STRINGS OF JS SOURCE CODE:
All of sCal is user-programmable, of course. But the following Menu-Value setups should be particularly useful to engineers & scientific professionals for adding new functions, often just because many formulae are too easily forgettable. --- Follow working code closely. --- GROUP MENU options format = "('selected.text','selected.value')", "('','')", <-copy/paste to fill in new options in chosen group Watch length of .text to avoid overrun of cell width (obvious when border blows). Last option must end with ); close parentheses & semi-colon, to end array. > < use EXACTLY 7-characters of group name .text & EXACT CASE! */
var A234567_nA = new Array("('A23456789 sample NAME','COMPUTATION string')", "('x} . NAME','COMP')", "('x} . . .','')", // copy this section to start a new catagory; "('x} . . .','')", // paste it to an appropriate location in the code; "('x} . . .','')", // fill in the blanks with desired name, comp; "('x} . . .','')", // copy the top catagory name to the desired option select "('x} . . .','')", // menu (top, right cell) to make available for use. "('x} . . .','')", "('x} . . .','')", // adding a calculation to an existing catagory: simply "('x} . . .','')", // add blank lines where needed. Delete these comments. "('x} . . .','')", // Note that final line ending with semi-colon = critical. "('x} . . .','')", "('x} . . .','')", // There are better blanks (less editing required) at "('','')"); // Catagory 3: Special for User_01; User_02; User_03.
// *********************** Catagory 1: default selection of conversions********* // // Sources (numerous, some discrepancies, potential transcription errors:) // ASHRAE, Handbook of Fundamentals, Subcommittee Bryan, Wm. L, et al, 1972; // Engineering Manual, Perry, Robert H, 3rd. Ed, McGraw Hill, 1976; // Engineers Manual, Hudson, 2nd Ed, Ralph G, Wiley & Sons, 1944; // Handbook of Chemistry and Physics, 47th Ed, CRC, 1966-67; // Timber Construction Manual, American Inst. of Timber Constr, 2nd Ed, 1974;
var General_nA = new Array("('General: convert x}. Pi .','Math.PI')", "('len. x}. inch > millimeter','x*25.4')", "('length x} . . feet > meter','x*0.3048')", "('length x} . . . feet > mile','x/5280')", "('len. x} . mile >kilometer','1.609344*x')", "('area x} . ft^2 > meter^2','0.092903*x')", "('area x} . . feet^2 > acre','x/43560')", "('area x} . acre >hectare','0.404686*x')", "('area x} . acre > mile^2','x/640')", "('vol. x} . . ft^3 > meter^3','0.0283168*x')", "('vol. x} . . . . ft^3 > gallon','7.4805*x')", "('vol. x} .yd^3 > meter^3','0.764555*x')", "('force . . . lb(f) > Newton','4.44822*x')", "('mass x} . . . lb.US > kg','0.45359*x')", "('x} . . .','')", "('n} Rect.-Polar Convert',R_PCon)", // code for this is is at Analytic Geometry "('x} . . .','')", "('temp. . . C deg > F deg','9*x/5+32')", "('temp. . . F deg > C deg','5*(x-32)/9')", "('temp. . . C deg > K deg','x-273.15')");
var Length__nA = new Array("('length x} . feet > meter','x*0.3048')", "('x} . . . inch > millimeter','x*25.4')", "('x} . . . . . . yard > meter','x*0.9144')", "('x} . . .ft(us) > ft(survey)','x*0.9999980315')", "('x} . . . . . . feet > link','x/0.66')", "('x} . . . . . . feet > rod','x/16.5')", "('x} . . . . . . feet > chain','x/66')", "('x} . . . . . . feet > inch','x*12')", "('x} . . . . . . feet > hand','x*3')", "('x} . . . . . . feet > cubit','x/1.5')", "('x} . . . . . . feet > yard','x/3')", "('x} . . . . . feet > fathom','x/6')", "('x} . . . . . feet > furlong','x/660')", "('x} . . . . . . feet > cable','x/720')", "('x} . . . . . . feet > mile','x/5280')", "('x} feet > mile(int.naut.)','x/6076.115485')", "('x} . . . mile > kilometer','x*1.609344')", "('x} mile > league(stat.)','x/3')", "('x} mile>league(intnat)','x/3.45')", "('x} . mile > astrom.unit','x/92955763.342')", "('x} . . . . . mile > parsec','x/1.917377515e13')", "('x} . . . mile > light year','x/5.87851323e12')", "('x} . . .','')", "('x} . . inch > pica(print)','x*6')", "('x} . .inch > point(print)','x*72')", "('x} . . .','')", "('x} . . . meter > micron','x*1e6')", "('x} . meter > angstrom','x*1e10')"); var Area_co_nA = new Array("('Area conv.x} f^2 >m^2','x*0.092903')", "('x} . . . . . feet^2 > inch^2','x*144')", "('x} . . . . . . inch^2 > cm^2','x*6.4516')", "('x} . . . . .feet^2 > yard^2','x/9')", "('x} . . .yard^2 > meter^2','x*0.83612736')", "('x} . . . . . . . feet^2 > acre','x/43560')", "('x} . . . . . acre > hectare','x*0.40468564')", "('x} . . . . . .mile^2 > km^2','x*2.589988')", "('x} . . . . . . feet^2 > rood','x/10890')", "('x}acre>sq.mi.(section)','x/640')", "('x} . . mile^2 > township','x/36')", "('x} . . .','')", "('x} circular inch > sq.in.','x*Math.PI/4')", "('x} circular mm > sq.mm','x*Math.PI/4')", "('x} circular in. > circ.mil','x*1000000')", "('x} circular in. > circ.mm','x*645.16')", "('x} . . .','')", "('x} . . .','')", "('x} . . .','')"); var Volume__nA = new Array("('Vol. conv. x} ft^3 > m^3','x*0.0283168')", "('x} . . . . . feet^3 > inch^3','x*1728')", "('x} . . . . . .inch^3 > cm^3','x*16.387064')", "('x} . . . . .feet^3 > yard^3','x/27')", "('x} . . .yard^3 > meter^3','x*0.764555')", "('x} . . . .acre.ft > meter^3','x*1233.48')", "('x} . . .','')", "('x} gallon(US)>gal(Imp.)','x*0.83261')", "('x} fl.oz(us) > teaspoon','x*6')", "('x} fl.oz(us)>tablespoon','x*2')", "('x} . fl.oz(us) > fl.oz(Brit)','x*1.04')", "('x} .fluid oz(us) > inch^3','x*1.8')", "('x} . .fluid oz(us) > cm^3','x*29.573')", "('x} fluid ounce(us) >cup','x/8')", "('x} . . .fl.oz(us) > pint(us)','x/16')", "('x} fl.oz(us) >quart(fl.us)','x/32')", "('x} . . . . . . fl.oz(us) > liter','x/33.8146282')", "('x} quart(us)liquid > dry','x*0.8594')", "('x} quart(us.liq) >gallon','x/4')", "('x} . . . . . feet^3 > gallon','x*7.4805')", "('x} ft^3>bushel(us.dry)','x*0.80356')", "('x} feet^3 > bbl(us.liq)','x*0.237483')", "('x} feet^3 > bbl(us.oil)','x*0.17811')", "('x} feet^3 > bbl(us.dry)','x*0.2449')", "('x} ft^3>ton(us.shipng)','x/40')", "('x} ton(register)>m^3','x*2.8317')", "('x} . . .','')", "('x} . . feet^3 > board.ft','x*12')", "('x} . ft^3 > cord(wood)','x/128')"); var Time_Ve_nA = new Array("('Time_Velocity x} hr > s','x*3600')", "('x} . . . day > second','x*86400')", "('x} . sec.> nanosecond','x*1e9')", "('x}sec(sidereal)>s(solr)','x*0.9972695')", "('x} day > day(sidereal)','x*1.0027379')", "('x} year > yr.(sidereal)','x*0.999298')", "('x} year > day(actual)','x*365.24')", "('','')", "('x} velocity: ft/s > mi/hr','x*0.68181818')", "('x} . meter/sec > km/hr','x*3.6')", "('x} . . . . . . mi/hr > km/hr','x*1.609344')", "('x} . . . . . . mi/hr > knot','x*0.86898')", "('x} . . . mi/hr > Mach no.','x/741.5444')", "('x} C(light speed) >m/s','x*2.99792458e8')", "('','')", "('','')");
var Mass_Fo_nA = new Array("('Mass_Force x} lb > kg','x/2.204634')", "('x} lb(pound.av)>lb.troy','x*1.215 //avoirdupois is common used here')", "('x} . . . . lb > oz(avoir.)','x*16')", "('x} . . . . lb > oz (troy)','x*14.58')", "('x} . . lb > carat(metric)','x*2267.95')", "('x} gram > carat(metric)','x*5')", "('x} gram > grain','x*15.432')", "('','')", "('x}pound(lb.mass)>slug','x/32.174')", "('x} . . . . lb > grains','x*7000')", "('x} . . lb > stone(Brit)','x/14')", "('x} . . . . . lb > ton','x/2000')", "('x} . . . . . lb > ton(metric)','x/2204.634')", "('x} . . . . . lb > ton(long)','x/2240')", "('x} . . .','')", "('s} DEFINITION F=MA','if a=g~9.8m/sec^2, kg * g = N (Newton)')", "('x} . . .','')", "('x} . kg(f) > Newton','x*9.80665')", "('x} . . kg.m/sec > N','x*1.0')", "('x} . . . . . . . J/m > N','x*1.0')", "('x} . . . . . .dyne > N','x/10000')", "('x} . . . . gram(f) > dyne','x*980.665')", "('x} . . . . . . lb(f) > N','x*4.44822')", "('x} . . . . . . lb(f) > kip','x/1000')", "('x} . . . . . lb(f) > poundal','x*32.174')", "('x} . . .','')", "('x} . . .','')");
var Pressur_nA = new Array("('Pressure x} p.s.i. > Pa','x*6894.757')", "('x} . . N/sq.m > Pascal','x*1.0 // definition')", "('x} . . dyne/sq.cm > Pa','x*0.1')", "('x} . . . . . lb(f)/sq.ft > Pa','x*47.88')", "('x} . tons/s.f. > kg/cm^2','x*0.9765')", "('x} . . . . kg(f)/sq.m > Pa','x*9.80665')", "('x} Newton/cm^2 > Pa','x*10000')", "('x} . . . . . . . cm Hg > Pa','x*1333.224')", "('x} . . . in Hg(32 F) > Pa','x*3386.38')", "('x} . . . in Hg(60 F) > Pa','x*3376.85')", "('x} . . .','')", "('x} . atmosphere > Pa','x*101325')", "('x} . . . . atm(std) > p.s.i.','x*14.69595')", "('x} . . . . . atm(std) > bar','x*1.01325')", "('x} . . . . . bars > Pascal','x*100000')", "('x} . . .atm(std) > in Hg','x*29.92')", "('x} . . atm(std) > ft.water','x*33.899')", "('x} . . .','')", "('x} . .','')"); var Density_nA = new Array("('Density x} p/cf >kg/m^3','x*16.02')", "('x} . lb/gal(us) > kg/cu.m','x*119.83')", "('x} . . g/cu.cm > kg/cu.m','x*1000')", "('x} milligram/liter > kg/l','x*1e-6')", "('x} megag./cu.m. > kg/l','x*1.0')", "('x} . oz/gal(us)>kg/c.m','x*7.489')", "('x} oz/gal(us)>oz/g(uk)','x*1.2')", "('x} . ton/c.y. > kg/liter','x*1.18655')", "('x} g/cu.cm > spec.grav','x*1.0')", "('x} . . g/cc = kg/l > s.g.','x*1.0')", "('x} . . . . . . lb/cu.ft > s.g.','x/62.428')", "('x} . . . . . . lb/cu.in > s.g.','x/0.036127')", "('x} . . . . . . . lb/gal > s.g.','x/8.345')", "('x} . . .','')", "('s} TYP. Values of S.G.','see Materials charts in this catagory.')", "('s} . . .','')", "('s} . . .','')", "('s} . . .','')");
var Energy__nA = new Array("('Energy_or work s} Def.','Energy=work ~F*dist')", "('x} . . Watt.sec > Joule','x*1.0 //definition')", "('x} . . . . Watt.hr > Joule','x*3600')", "('x} . . . kWatt.hr > Joule','x*3600000')", "('x} . . . . Btu(mean) > J','x*1054.35')", "('x} . . . . . . Btu(ISO) > J','x*1055.06')", "('x} . . . . . . . . . ft.lb(f) > J','x*1.355818')", "('x} . . . . . . . . . kg.m > J','x*9.80665')", "('x} . . . . . . . . . . kCal > J','x*4186.75')", "('x} . . . . . . . . . therm > J','x*105506000')", "('x} . . . . . therm(us) > J','x*105480400')", "('x} tonsTNT equiv >J','x*4200000000')", "('x} horsepower.hr >J','x*2.6845e6')", "('x} . . metric HP.hr > J','x*2.648e6')", "('x} liter.atmosphere>J','x*101.33')", "('x} . . . . . . dyne.cm > J','x/10000000')", "('x} . . . . dyne.cm > erg','x*1.0 //definition')", "('x} . . .','')", "('x} . .','')"); var Power_r_nA = new Array("('Power_rate of Work s}','Power ~energy/time')", "('x} . . . . . Watt > Btu/hr','x*3.414426')", "('x} . . . kw > Btu/sec','x*0.9478')", "('x} . . . kw > poncelet','x*1.02')", "('x} . . . kw > kg.m/sec','x*102')", "('x} . . . Watt > cal/sec','x*0.23885')", "('x}W>candle pow(sp.)','x*53.2481363')", "('x} . . . . . W > erg/sec','x*10000000')", "('x} . . . W > ft.lb(f)/sec','x*0.737562')", "('x} W > HP (550ft.lb/s)','x/745.7')", "('x} . . . W > HP (metric)','x/735.5')", "('x} . . . . . . . W > lumen','x*668.45')", "('x} W > tons.refrigerat.','x/3516.9')", "('x} tons.refrig >BTU.hr','x*1200')", "('x} . . .','')", "('x} . . .','')", "('','')"); var HtRes="R =resistance to heat flow (reciprocal of conductivity). R values are added to obtain "; HtRes +="reciprocal of overall heat transmission of a building surface, U. eg. for a frame wall: "; HtRes +="Outside surf.15mph wind R~0.17 deg.F/Btu/hr/sf; wood siding, 1/2in.w/laps R~0.81; "; HtRes +="Sheathing, 1/2in. asph.impreg.board R~1.32; Insulation, 4in.fiberglass R~11; Gypsum wall"; HtRes +="board R~0.45; Inside surf. still air R~0.68; ->Total R=14.43 =1/U -> U=0.0697Btu/hr.sf.F"; HtRes +=" adjust for framing:2x4 @ 16in.cts ->U*1.08 =0.075. Heating capacity needed is then "; HtRes +="computed from sq.ft of walls, adj. windows, doors, ceiling, etc. Apply to design temp.";
var Heat_Te_nA = new Array("('Heat_Temperature: s}','meas. of atomic kinetic energy')", "('x}. . . C deg > F deg','9*x/5+32')", "('x}. . . F deg > C deg','5*(x-32)/9')", "('x}. . . C deg > K deg','x-273.15')", "('x} . . .F deg > R deg','x-458.57')", "('x} . . .','')", "('x} . BTU/lb > J/kg','x*2326')", "('x} . . cal/g > J/kg','x*4186')", "('x} . . . C/m>W/m.C','x*1.0')", "('x} . . .','')", "('s} __HEAT FLOW__','rate of Heat per area')", "('x} Watt/cm^2 >Btu/hr.sf','x*3170')", "('x} watt/cm^2 >Btu/dy.sf','x*76081')", "('x} w/cm^2 >cal/hr.cm^2','x*860')", "('x} w/cm^2 > cal/s.cm^2','x*0.2388')", "('s} _CONDUCTANCE_','=heat flow per deg.F or deg.C temperature gradient')", "('x} w/cm^2.C>Btu/hr.sf.F','x*1761')", "('x} w/sm.C>cal/hr.sm.C','x*860')", "('x} w/smC>cal/s.sm.C','x*0.2388')", "('x}Btu/hr.sf.F>W/s.sm.C','x*5.6784')", "('x}kcal/hr.sm.C>w/sm.C','x*1.163')", "('s}_CONDUCTIVITY, k','conductance through a thickness of material')", "('x} w/scm(cm/C)>Btu/h..','x*57.79 // watt/cm^2(cm/C)>Btu/hr.sf(ft/F)')", "('x} w/sm(cm/C)>cal/h...','x*860 // watt/sm(cm/C)>cal/h.sm(cm/C)')", "('x} Btu/s.sf(in/F)>cal..','x*1.2405 // Btu/s.sf(in/F)>cal/s.cm^2(cm/C)')", "('x}Btu/hr.sf.(in/F)>w/m.C','x*0.1442')", "('s}_RESISTIVITY,1/k_',HtRes)", "('x} . . .','')", "('x} . . .','')", "('','')");
var Light_R_nA = new Array("('Light_Rad. lux>lum./sm','x*1.0')", "('x} . candle pow.>lumen','x*12.556')", "('x} . . . . lumen > watt','0.001496')", "('x} . . . . lux > ft.candle','x*0.0929')", "('x} . ft.candle>lumen/s.f','x*0.0929')", "('x} . . .','')", "('x} candela/s.in>ft.lam.','x*452.389 //c./sq.inch>foot.lambert')", "('x} candela/s.in>c./s.m','x*1550')", "('x} . . .','')", "('x}rayleigh>ph./sm.sec','1.0E10 //photon emission/sq.m.Second')", "('x} roentgen>coul./kg','x*2.57976E-4')", "('x} . . dose rad > J/kg','x/100')", "('x} . . Rutherford > Bq','x*1000000 // disintegrations/second')", "('x} . . curie >disinteg/s','x*3.7e10')", "('x} . . .','')", "('','')"); var DMStoDeg="var dg=(/*Deg*/ ); var mn=(/*min*/ ); var sc=(/*sec*/ ); /*CLICK[=]*/ "; DMStoDeg +="m=dg + mn/60 + sc/3600; "; var AZtoBEAR="var Az=(/*Azimuth 0-deg @ N, rotate to E.(right)*/ ); /*CLICK[=]*/ "; AZtoBEAR +="var Quad=Math.floor(Az/90); while (Quad>=4) {Quad-=4} var d=Az%90; "; AZtoBEAR +="if (Quad==0||Quad==3) {m='N';} else {m='S';} if (Quad==1 || Quad==3) "; AZtoBEAR +="{d=90-d} m+=Mr(d,4); if (Quad>1) {m+='W'} else {m+='E'}"; var Angular_nA = new Array("('Angular x} . . deg > rad','x*Math.PI/180')", "('x} . . . . grad > degrees','x*360/400')", "('x} . . . . .mils > degrees','x*360/6400 // 1/tan(grad)=1018.6 ie.~1unit wide @ 1000unit dist.')", "('x} . . .','')", "('x} . degrees > arc.min.','x*60')", "('x} . degrees > arc.sec.','x*3600')", "('x} deg,min,sec > deg.',DMStoDeg)", "('x} . . .','')", "('*} d.azimuth > bearing',AZtoBEAR)", "('n} Rect.-Polar Convert',R_PCon)", "('x} . . .','')", "('x} . . .','')", "('x} . . .','')", "('','')");
var Electri_nA = new Array("('Elect,Magnet. EMU >F','x*1000000000')", "('x} capacit: ESU>Farad','x*1.11265E-12')", "('x} charge/mole>Farad','x*1.036484E-5')", "('x} . . Amp.hr>Faraday','x/26.811639')", "('x} . . Amp.hr>Coulomb','x*3600')", "('x} Coulomb > Faraday','x*1.03603431E-5')", "('x} electron.volt>Joule','1.60219e-19')", "('x} current Amp.>EMU','x/10')", "('x} . . . Ampere > ESU','x/3.3356E-10')", "('x} . . . Ampere > mA','x*1000')", "('x} . . . A > abampere','x/10')", "('x} . . . A > statampere','x/3.33564E-10')", "('x} micrOhm.cm>O.cm','x*1e-6 //O.cm=Ohm.cm^2/cm')", "('x} mO>circ.mil.Ohm/ft','x*6.0153049')", "('x} mO>mOhm.in^2/in','x/2.54')", "('','')", "('x} induct: Henry>ESU','x/8.987554E11')", "('x} . . . . . Henry > EMU','x/1.0E-9')", "('x} m.fild:A/m>Oersted','x/79.5775')", "('x} mmf: A.turn >gilbert','x*1.256637')", "('x} . . .','')", "('x} . . . gauss > tesla','x*1e-4')", "('x} . maxwell > webber','x*1e-8')", "('x} unit.pole>maxwell','x*12.5664')", "('','')");
var MscKCode="n[0]='_key_below_'; n[10]='_unicode_no_'; for (j=1;j<10;j++){n[j+10]=n[j].charCodeAt(0)}"; var Misc_Un_nA = new Array("('Misc_Units each >doz.','x/12')", "('x} . bytes > kilobyte','x/1024')", "('x} . each > score','x/20')", "('x} . each > gross','x/144')", "('x} each > ream(paper)','x/500')", "('x} . . .','')", "('n} Key > char code',MscKCode)", "('x} . . .','')", "('x} . . .','')", "('x} . . .','')", "('x} . . .','')", "('x} . . .','')", "('x} . . .','')", "('','')");
var GrabNval="function GrabN(s){for (j=10;j<20;j++){n[j]=s[j-10]}} var j=n[1]; "; //fill s-array to n[10..20] var MatP="/* Material Properties are given in tables: Select->[JS]->[=]. Descriptors prefixed by * have "; MatP +="additional beyond-cell info. [c]->[nx]->[n?] display in full in x-display. Same process to "; MatP +="transfer data from the n-cell to manipulate/convert units/apply in the x-display.*/"; var Mat0=GrabNval+" n[0]='*__Material__characteristics can be highly variable, especially those that "; Mat0 +="absorb water, eg. stone agg. & wood '; "+MatP; Mat0 +="n[1]='*Specific Grav. water based: S.G =1 =1kg/liter =1g/cc =62.4lb/c.f =8.34lb/gal'; "; Mat0 +="n[2]='atom.No/wt if an element'; n[3]='melt/boil C.deg'; n[4]='*therm.conductivity, "; Mat0 +="water @20deg.C std. =0.346 Btu/hr.sf(deg.F/ft) =4.15 Btu/hr.sf.(deg.F/in) "; Mat0 +="=0.006 Watt/cm.deg.C =0.00143 cal/sec.cm2(deg.C/cm) =1/R'; "; Mat0 +="n[5]='*Specific Heat water std. =1Btu/lb.deg.F =1cal/g.deg.C =4186.8J/kg.C =1.163watt.h/kg.C'; "; Mat0 +="n[6]='*coef.lin.expansion*E6 per deg.C eg. L1=L0*(1+coeff*(deg.C1-deg.C0))'; "; Mat0 +="n[7]='*sound.speed m/sec'; n[8]='*Strength: tensile/yield/Mod of Elast, all kips/s.in'; "; Mat0 +="n[9]='*electrical resistivity, ohm.cir.mil/ft =0.1662426 microhm.cm =0.06545 mOhm.in'; s =new Array"; var MAcou=Mat0+"('Acoustic Tile',0.4,'','',0.1,'','','1600','',''); GrabN(s);"; var MAir =Mat0+"('Air @ STP',0.00125,'N2%78,O2%21-,A%1-,CO2%.03,etc','',0.04,'','',340,'',''); GrabN(s);"; var MAlum=Mat0+"('Aluminum',2.65,'Al 13/26.98','660/2467',368,0.226,23.8,16400,'13-24/5-22/10E3',18); GrabN(s);"; var MAsph=Mat0+"('Asphalt, Tar',1.3,'','',1.23,0.22,'','','',''); GrabN(s);"; var MBras=Mat0+"('Brass(.7Cu,.3Zn)',8.53,'','',210,0.0917,18.7,11400,'53/20/16E3',42); GrabN(s);"; var MBron=Mat0+"('Bronze(.9Cu,.1Zn)',8.6,'','',49,0.086,27,1250,'61/54/17E3',65); GrabN(s);"; var MBric=Mat0+"('Brick',1.9,'','',1.15,0.2,9.5,12000,'',''); GrabN(s);"; var MCast=Mat0+"('Cast Iron',7.6,'Fe 26/55.85','1535/2750',79.3,0.119,79.3,16900,'25+//13E3',60); GrabN(s);"; var MCCok=Mat0+"('Coal -coke',1.2,'','',1.6,0.36,'','','',''); GrabN(s);"; var MCChr=Mat0+"(' -charcoal',2.4,'','',0.09,0.2,'','','',''); GrabN(s);"; var MCCin=Mat0+"(' -cinders',0.7,'','','','','','','',''); GrabN(s);"; var MCBit=Mat0+"(' -bituminous',1.35,'','',0.25,0.201,'','','',''); GrabN(s);"; var MCAnt=Mat0+"(' -anthracite',1.55,'','','','','','','',''); GrabN(s);"; var MCCLt=Mat0+"('Concrete, lite',1.6,'','',0.22,'','','','',''); GrabN(s);"; var MCHol=Mat0+"('Conc, hollow core',1.55,'','',0.86,'','','','',''); GrabN(s);"; var MCPla=Mat0+"('Conc, plain',2.3,'','',1.56,0.271,'','','0.55//',''); GrabN(s);"; var MCRen=Mat0+"('Conc, reinforced',2.4,'','','','','','','',''); GrabN(s);"; var MCopp=Mat0+"('Copper',8.9,'Cu 29/63.55','1083/2567',562,0.093,16.8,12500,'30-60//17E3',10.3); GrabN(s);"; var MCork=Mat0+"('Cork',0.24,'','',0.04,0.485,'',1640,'',''); GrabN(s);"; var MCorn=Mat0+"('Corn',0.7,'','','','','','','',''); GrabN(s);"; var MCotH=Mat0+"('Cotton; Hemp',1.5,'','',0.04,0.362,'','','',''); GrabN(s);"; var MEaDL=Mat0+"('Earth:dry loose',1.2,'','',0.3,'','','','',''); GrabN(s);"; var MEaMP=Mat0+"('Earth:moist pack',1.6,'','',2.5,'','','','',''); GrabN(s);"; var MEaSG=Mat0+"(' . Sand; Gravel',1.9,'','',1.5,'','','','',''); GrabN(s);"; var MFlOa=Mat0+"('Flour; Oats',0.5,'','','','','','','',''); GrabN(s);"; var MGaso=Mat0+"('Gasoline',0.7,'','',0.2,0.5,'','','',''); GrabN(s);"; var MGold=Mat0+"('Gold',9.3,'Au 79/196.97','1064/2808',494,0.0321,14.3,6660,'17.5-30//10.8E3',14.7); GrabN(s);"; var MGlFl=Mat0+"('Glass: flint',3.8,'','',1.7,0.18,7.88,12200,'',''); GrabN(s);"; var MGlSi=Mat0+"('Glass: silica',2.2,'','',1.7,0.18,'',18900,'',''); GrabN(s);"; var MGyps=Mat0+"('Gypsum',0.9,'','',0.72,0.26,'','','',''); GrabN(s);"; var MHayB=Mat0+"('Hay, baled',0.3,'','','','','','','',''); GrabN(s);"; var MInsB=Mat0+"('Insulation, bat',0.1,'','',0.07,0.16,'','','',''); GrabN(s);"; var MInsR=Mat0+"('Insul, rigid board',0.3,'','',0.09,0.3,'','','',''); GrabN(s);"; var MLead=Mat0+"('Lead',11.4,'Pb 82/207.2','327.5/1740',58,0.0297,29.4,3900,'3/2/2E3',124); GrabN(s);"; var MMerc=Mat0+"('Mercury',13.6,'Hg 80/200.59','-38.9/356.6',13.9,0.0331,'',4750,'0','576'); GrabN(s);"; var MOil=Mat0+"('Oil (variable)',0.9,'','','','','','','',''); GrabN(s);"; var MPlsr=Mat0+"('Plaster',1.6,'','',1.24,'','','','',''); GrabN(s);"; var MPlLu=Mat0+"('Plastic-lucite',1.18,'','','','','',6000,'',''); GrabN(s);"; var MPlPs=Mat0+"('Plastic-polystyrene',1.06,'','','','','',7350,'7/5E3',''); GrabN(s);"; var MPlNe=Mat0+"('Plastic-neoprene',1.33,'','','','','','','',''); GrabN(s);"; var MSilv=Mat0+"('Silver',10.5,'Ag 47/107.87','961.9/2212',705,0.056,18.8,8790,'23-43/12-38/10.5E3',9.8); GrabN(s);"; var MStel=Mat0+"('Steel',7.9,'','',75,0.118,13.6,'16800','60/36-60/30E3','60-600'); GrabN(s);"; var MSton=Mat0+"('Stone s.g.x0.8 if crushed','','','','','','','','',''); GrabN(s);"; var MStSa=Mat0+"('Stone, sand',2.3,'','','','','0.5 fused quartz','','',''); GrabN(s);"; var MStLi=Mat0+"('Stone, lime',2.5,'','',1.6,0.2,'','','',''); GrabN(s);"; var MStGr=Mat0+"('Stone, granite',2.65,'','',3.2-6,0.191,8.3,1250,'',''); GrabN(s);"; var MStIO=Mat0+"('Stone, iron ore',5.2,'','','','','','','',''); GrabN(s);"; var MTiCl=Mat0+"('Tile:shingles,clay',1.3,'','','',0.22,'',11400,'',''); GrabN(s);"; var MTiAA=Mat0+"('Tile:asphalt/agg',1.5,'','',0.3,0.35,'','','',''); GrabN(s);"; var MTiMa=Mat0+"('Tile: marble',2.7,'','',4.3,0.206,1-15,1250,'',''); GrabN(s);"; var MTin=Mat0+"('Tin',7.36,'Sn 50/118.71','232/2270',108,0.0556,26.9,9000,'4//6E3',66); GrabN(s);"; var MWatr=Mat0+"('Water, 4-degC',1.00,'','',1.00,1.00,'',4915,'',''); GrabN(s);"; var MWSea=Mat0+"('Water, Sea','1.03','','','','','','','',''); GrabN(s);"; var MWIce=Mat0+"('Water, Ice',0.9,'','',2.8,0.505,51,'','',''); GrabN(s);"; var MWdCe=Mat0+"('Wood: Cedar',0.35,'','','','','','','.4-.7/.7-1/750',''); GrabN(s);"; var MWdPS=Mat0+"('Wood: pine,spruce',0.45,'','',0.18,0.67,'','','.4-.7/.8-1.2/1.1e3',''); GrabN(s);"; var MWdMW=Mat0+"('Wood: maple,walnut',0.6,'','','0.22-.29','0.45-.65',6.58,13500,'',''); GrabN(s);"; var MWdPl=Mat0+"('Wood: plywood',0.6,'','',0.23,'','','','/1.2-2/.9-1.8e3',''); GrabN(s);"; var MWdYR=Mat0+"('Wood: yel.pine,red.oak',0.65,'','',0.31,'','','','.8-1.2/1-1.8/1.7e3',''); GrabN(s);"; var MWdWO=Mat0+"('Wood: white oak',0.77,'','',0.31,'','',12600,'',''); GrabN(s);"; var MZinc=Mat0+"('Zinc',7.2,'Zn 30/65.39','419.6/907',187,0.095,26.3,12600,'10//',36.6); GrabN(s);";
var Materia_nA = new Array("('Materials, Elements s}',MatP)", "('x} . . .','')", "('s} . Acoustic Tile',MAcou)", "('s} . Air @ STP',MAir)", "('s} . Aluminum',MAlum)", "('s} . Asphalt, Tar',MAsph)", "('s} . Brass(.7Cu,.3Zn)',MBras)", "('s} . Bronze(.9Cu,.1Zn)',MBron)", "('s} . Brick',MBric)", "('s} . Cast Iron',MCast)", "('s} . Coal-coke',MCCok)", "('s} . . -charcoal',MCChr)", "('s} . . -cinders',MCCin)", "('s} . . -bituminous',MCBit)", "('s} . . -anthracite',MCAnt)", "('s} . Concrete-lite',MCCLt)", "('s} . . -hollow core',MCHol)", "('s} . . -plain',MCPla)", "('s} . . -reinforced',MCRen)", "('s} . Copper',MCopp)", "('s} . Cork',MCork)", "('s} . Corn',MCorn)", "('s} . Cotton, Hemp',MCotH)", "('s} . Earth-dry,loose',MEaDL)", "('s} . . -moist,pack',MEaMP)", "('s} . . -sand,gravel',MEaSG)", "('s} . Flour, Oats',MFlOa)", "('s} . Gasoline',MGaso)", "('s} . Gold',MGold)", "('s} . Glass-flint',MGlFl)", "('s} . . -silica',MGlSi)", "('s} . Gypsum',MGyps)", "('s} . Hay, baled',MHayB)", "('s} . Insulation-bat',MInsB)", "('s} . . -rigid board',MInsR)", "('s} . Lead',MLead)", "('s} . Mercury',MMerc)", "('s} . Oil (var)',MOil)", "('s} . Plaster',MPlsr)", "('s} . Plastic-lucite',MPlLu)", "('s} . . -polyethylene',MPlPs)", "('s} . . -neoprene',MPlNe)", "('s} . Silver',MSilv)", "('s} . Steel',MStel)", "('s} . Stone x.8 crushed',MSton)", "('s} . . -sandstone',MStSa)", "('s} . . -limestone',MStLi)", "('s} . . -granite',MStGr)", "('s} . . -iron ore',MStIO)", "('s} . Tile-shingles, clay',MTiCl)", "('s} . . -asphalt,aggreg.',MTiAA)", "('s} . . -marble',MTiMa)", "('s} . Tin',MTin)", "('s} . Water',MWatr)", "('s} . . -seawater',MWSea)", "('s} . . -ice',MWIce)", "('s} . Wood-cedar',MWdCe)", "('s} . . -pine,spruce',MWdPS)", "('s} . . -maple,walnut',MWdMW)", "('s} . . -plywood',MWdPl)", "('s} . . -yel.pine, red oak',MWdYR)", "('s} . . -white oak',MWdWO)", "('s} . Zinc',MZinc)", "('s} . . .','')", "('s} . . .','')", "('x} . . .','')", "('x} . . .','')", "('x} . . .','')", "('x} . . .','')", "('x} . . .','')", "('x} . . .','')", "('x} . . .','')", "('x} . . .','')", "('x} . . .','')", "('x} . . .','')", "('x} . . .','')", "('','')");
var Math_Sc_nA = new Array("('Math_Science s} . Pi .','Math.PI')", "('Nat.Log base, e','Math.E')", "('common log (10) of e','Math.LOG10E')", "('Euler constant','0.5772156649')", "('Golden ratio','1.61803398875')", "('','')", "('Unified AMU, g','1.66053873E-24')", "('hydrogen atom mass','1.67339E-24 // g')", "('electron mass, g','9.10938188E-28')", "('proton mass, g','1.67262158E-24')", "('','')", "('Avagadro No./mole','6.02214199E23')", "('pres.vol of gas','2271.16 // joules/mole at 0C & 0 pressure')", "('mole vol,ideal gas,stp','0.022413996 //m^3/mol')", "('','')", "('Boltzmann con, J/K','1.3806503E-23')", "('Faraday, coulomb','96484.6')", "('Fermi coupling con,','1.16639E-5 // Ge/v^2')", "('Gravitational con,','6.673E-11 // m^3/kg/s^2')", "('std.accel.Grav, m/s^2','9.80665')", "('permiability of space,','8.854187817E-12 //N/A^2')", "('permitivity of space,','1.2566370614E-6 //F/m')", "('Plank constant, J.s','6.62606876E-34')", "('Stefan-Boltzmann,','5.6704E-8 // W/m^2/K')", "('Wien displac.law con,','0.0028977686 // m K')", "('strong coupling con,','0.1185')", "('weak mixing angle','0.23117')", "('W boson mass,','80.419 // Ge/v^2')", "('Z boson mass,','91.1882 // Ge/v^2')", "('','')", "('sound speed, air, m/s','340')", "('light speed c, m/sec','299792458')", "('light speed c, mi./sec','186300')"); var Geo_Phy_nA = new Array("('Geo_Physical cnst. s}','Earth characteristics')", "('s} . . Earth mass, kg','5.97E24')", "('s} radius @Equator,km','6378.388')", "('s} radius @ Poles, km','6356..912')", "('s} mean density, g/cc','5.522')", "('s} atmos. press, bars','1.013')", "('s} . . .','')", "('x} deg.latitude>naut.mi','x*60')", "('x} naut.mile > stat. mi','x*1.15078 //=1852 m =6076.115 ft')", "('*} deg.longitude, n.mi.','Math.cos((/*lat.deg*/ )*Math.PI/180)*60')", "('x} deg.longitude > hour','x/15')", "('s} . . .','')", "('s} inclin. to axis, deg','23.45')", "('s} rotation period, hrs','23.9')", "('s} revolution per., day','365.26')", "('s} avg. orbit vel, mi/s','18.46')", "('s} escape vel, mi/sec','6.96')", "('s} . . .','')", "('s} avg.dist.to Sun, mi','92960000')"); var Prefixe_nA = new Array("('Prefixes to Units s}','names for powers')", "('s} . . .yotta- Y','1E24')", "('s} . . .zetta- Z','1E21')", "('s} . . .exa- E','1E18')", "('s} . . .peta- P','1E15')", "('s} . . .tera- T','1E12')", "('s} . . .giga- G','1E9')", "('s} . . .mega- M','1E6')", "('s} . . .kilo- k','1E3')", "('s} . . .hecto- h','1E2')", "('s} . . .deka- da','1E1')", "('s} . -no prefix','1')", "('s} . . .deci- d','1E-1')", "('s} . . .centi- c','1E-2')", "('s} . . .milli- m','1E-3')", "('s} . . micro- mu','1E-6')", "('s} . . .nano- n','1E-9')", "('s} . . .pico- p','1E-12')", "('s} . . .femto- f','1E-15')", "('s} . . .atto- a','1E-18')", "('s} . . .zepto- z','1E-21')", "('s} . . .yocto- y','1E-24')"); var dec_bin="var j=(/*start No.*/ ); for(i=j;i<j+20;i++){n[i-j]=i+', '+i.toString(2)}"; var dec_oct="var j=(/*start No.*/ ); for(i=j;i<j+20;i++){n[i-j]=i+' octal,'+i.toString(8)}"; var ASCIIhex="var j=(/*start No.*/ ); for(i=j;i<j+20;i++){var k=i.toString(16); "; ASCIIhex +="n[i-j]=i+' hex,'+k+' .'+unescape('%'+k)}"; var dec_bse="var j=(/*start No.*/ ); var k=(/*2 to 36: base:*/ ); for(i=j;i<j+20;i++) "; dec_bse +="{n[i-j]=i+' b'+k+','+i.toString(k)}"; var CharSin="var j=(/*SIN deg.start*/ ); var k=(/*deg.increm.*/5 ); for(i=0;i<20;i++) "; CharSin +="{n[i]='sin('+(j+i*k)/1+')='+Math.sin((j+i*k)*Math.PI/180)};"; var CharCos="var j=(/*COS deg.start*/ ); var k=(/*deg.increm.*/5 ); for(i=0;i<20;i++) "; CharCos +="{n[i]='cs('+(j+i*k)/1+')='+Math.cos((j+i*k)*Math.PI/180)};"; var CharTan="var j=(/*TAN deg.start*/ ); var k=(/*deg.increm.*/5 ); for(i=0;i<20;i++) "; CharTan +="{n[i]='tan('+(j+i*k)/1+')='+Math.tan((j+i*k)*Math.PI/180)};"; var CharLn="var j=(/*LN start*/ ); var k=(/*increm.*/1 ); for(i=0;i<20;i++) "; CharLn +="{n[i]='ln('+(j+i*k)/1+')='+Math.log(j+i*k)};"; var CharLog="var j=(/*LOG start*/ ); var k=(/*increm.*/1 ); for(i=0;i<20;i++) "; CharLog +="{n[i]='log('+(j+i*k)/1+')='+Math.log(j+i*k)*Math.LOG10E};"; var ChaRoot="var j=(/*SQUARE ROOT start*/ ); var k=(/*increm.*/1 ); for(i=0;i<20;i++) "; ChaRoot +="{n[i]='sr('+(j+i*k)/1+')='+Math.sqrt(j+i*k)};"; var CharPow="var j=(/*POWER base start*/ ); var ex=(/*exponent*/ ); var k=(/*increm.*/1 ); "; CharPow +="for(i=0;i<20;i++) {n[i]=(j+i*k)/1+'p'+ex+'='+Math.pow(j+i*k,ex)};"; var CharFac="var k=(/*FACTORIAL start*/ ); for (j=k;j<20;j++) {n[j-k]=j+'!='+fact(j)};";
var Charts__nA = new Array("('Charts_Series, misc. s}','various series, display in n[]')", "('*} . . decimal, binary',dec_bin)", "('*} . . decimal, octal',dec_oct)", "('*} . . dec, hex, ASCII',ASCIIhex)", "('*} . . dec, spec. base',dec_bse)", "(' . . .','')", "('*} . . Sine function',CharSin)", "('*} . . Cosine function',CharCos)", "('*} . . Tangent function',CharTan)", "('*} . . natural log(e)',CharLn)", "('*} . . common log(10)',CharLog)", "('*} . . square roots',ChaRoot)", "('*} . . power function',CharPow)", "(' . . .','')", "('*} . . factorial',CharFac)", "('x} . . .','')", "('x} . . .','')", "('x} . . .','')", "('','')"); // *************** Catagory 2: default sel. of ordinary math functions ************** var Ordinar_nA = new Array("('Ordinary Math x}. (x)^2','Math.pow(x,2)')", "('x} . . factorial . . . x! ','fact(x) //pos integer assumed; Source in upper area of code.')", "('(opp/hyp, deg.) . sin(x)','Math.sin(x*Math.PI/180)')", "('(adj/hyp, deg.) . cos(x)','Math.cos(x*Math.PI/180)')", "('(opp/adj, deg.) . tan(x)','Math.tan(x*Math.PI/180)')", "('x} . degrees > radians','Math.PI/180 *x')", "('*} Pythagorean hyp.','m=Math.sqrt(Math.pow((/*side1*/ ),2)+Math.pow((/*side2*/ ),2))')", "('*} Pythagorean side','m=Math.sqrt(Math.pow((/*hyp*/ ),2)-Math.pow((/*side*/ ),2))')", "('','')", "('(for deg.) . . arc sin(x)','Math.asin(x)*180/Math.PI')", "('(for deg.) . .arc cos(x)','Math.acos(x)*180/Math.PI')", "('(for deg.) . . arc tan(x)','Math.atan(x)*180/Math.PI')", "('','')", "(' . . natural log (base e)','Math.log(x)')", "('exponentiation: . . e^x','Math.exp(x)')", "(' common log (bse 10)','Math.log(x)*Math.LOG10E')", "('anti-log(common)10^x','Math.pow(10,x)')", "('','')", "('','')", "('','')", "('*} Count Down Timer',TimCntDn)", // source code with Time_Functions "('to 4-dec.places: round','Math.round(x*10000)/10000')", "('>Random Num. (0 - 1)','Math.random()')");
var Fj1_20 = "for (j=1; j<20; j++)"; //used for series expansions, eg. JavaScript w/o 'Math.'fcns var sinX="var i=1; var k=-1; var l=x; m=x; "+Fj1_20+"{i+=2; l=l*x*x; k=-k; m=m-l/(fact(i)*k)}"; // sin(x) =x -x^3/3! +x^5/5! -x^7/7! +...; x in radians, code convoluted to prevent string concatination. var cosX="x=3.14159265359/2-x; "+sinX; var atnX="var i=1; var k=-1; if (x*x<1) {m=x; var l=x; "+Fj1_20+" {l*=x*x; i+=2; k=-k; m=m-k*l/i}}"; // for x^2<1: atan(x) =x -x^3/3 +x^5/5 -x^7/7 +... atnX +=" else {i=-1; var l=1/x; var m=3.14159265359/2; "+Fj1_20+" {k=-k; l*=x*x; i+=2; m=m-k/(l*i)}"; // for x>1: atan(x) =PI/2 +series{-1/x +1/3x^2 -1/5x^5 +...}; if x<-1: atan(x) = -PI/2 +series. atnX +=" if (x<-1){m=m-3.14159265359}}"; var lnX ="var a=(x-1)/(x/1+1); var i=1; var k=a; m=a; "+Fj1_20+"{i+=2; k=k*a*a; m+=k/i} m*=2"; // ln(x) =2*(a +a^3/3 +a^5/5 +...) // limitations on series lnX: very good for small x, tho 0.03% error by x=8, and increasing var expX="var i=1; var k=1; m=1; "+Fj1_20+"{k*=x; i*=j; m+=k/i}"; // e^x =1 +x +x^2/2! +x^3/3! +... // limitations on series expX: very good for small x, tho 0.03% error by x=15, & increasing // note: power function x^y coded as exp(ln(x)*y); convert to common logs to avoid limitations? var Esoteri_nA = new Array("('Esoteric Math *}. (x)^y','Math.pow(x,y)')", "('(opp/hyp, rad.) . sin(x)','Math.sin(x)')", "('(adj/hyp, rad.) . cos(x)','Math.cos(x)')", "('(opp/adj, rad.) . tan(x)','Math.tan(x)')", "('*} Pythagorean hyp.','m=Math.sqrt(Math.pow((/*side1*/ ),2)+Math.pow((/*side2*/ ),2))')", "('*} Pythagorean side','m=Math.sqrt(Math.pow((/*hyp*/ ),2)-Math.pow((/*side*/ ),2))')", "('x} 3.14159265359 = PI','Math.PI')", "('s} reciprocal functions','csc=1/sin; sec=1/sin; cot=1/tan=cos/sin')", "('s} . . general triangles','a+b+c=180=Math.PI //deg or radians; note-A is side opp. angle a')", "('s} . . . . . . . law of sines','A/Math.sin(a) = B/Math.sin(b) = C/Math.sin(c)')", "('s} . . . . law of cosines','A*A = B*B + C*C -2BC*cos(a); B*B = A*A + C*C -2AC*cos(b); etc')", "('s} . . . .law of tangents','(A-B)/(A+B) = tan((a-b)/2)/tan((a+b)/2); etc')", "('','')", "('x} sin(x) ser.expans.',sinX)", "('x} cos(x) = sin(PI/2 -x)',cosX)", "('s} tan(x) = sin/cos','if Math not avail, code sinX & cosX, then do division')", "('','')", "('x} . degrees > radians','Math.PI/180 *x')", "('x}(for rad.) . arc sin(x)','Math.asin(x)')", "('x}(for rad.) .arc cos(x)','Math.acos(x)')", "('x}(for rad.) . arc tan(x)','Math.atan(x)')", "('','')", "('x} atan(x) ser.expans.',atnX)", "('x} (from atan) asin(x)','x=x/Math.sqrt(1-x*x); '+atnX)", "('s} (from asin) acos(x)','PI/2-asin(x)')", "(' . . . . ','')", "('x}Hyperbolic . sinh(x)','(Math.exp(x)-Math.exp(-x))/2')", "('x} . . . . . . . . . . . . cosh(x)','(Math.exp(x)+Math.exp(-x))/2')", "('x} . . . . . . . . . . . . tanh(x)','(Math.exp(x)-Math.exp(-x))/(Math.exp(x)+Math.exp(-x))')", "('s} reciprocal functions','csch=1/sinh; sech=1/cosh; coth=1/tanh=cosh/sinh')", "('','')", "('x} . . . . . . . arc sinh(x)','Math.log(x/1+Math.sqrt(x*x+1))')", "('x} . . . . . . . arc cosh(x)','Math.log(x/1+Math.sqrt(x*x-1))')", "('x} . . . . . . . arc tanh(x)','Math.log((1+x/1)/(1-x/1))/2')", "('','')", "('x} natural log (base e)','Math.log(x)')", "('x}<8,ln(x): ser. expans.',lnX)", "('x} exponentiation: e^x','Math.exp(x)')", "('x}<15,e^x: ser. expans',expX)", "('','')", "('','')", "('','')", "('','')"); var QuadEq="/*[-b +/-sqrt(bb-4ac)]/2a =roots*/ n[1]='Quadratic eq'; n[11]='axx+bx+c=0'; n[0]='';"; QuadEq +=" n[12]='- - data'; n[10]=''; n[2]=''; n[3]='coeff. . a . . <'; n[4]='coeff. . "; QuadEq +="b . . <'; n[5]='coeff. . c . . <'; n[16]=' - output -'; n[6]=''; n[7]=' = = x = =>';"; QuadEq +=" n[8]=' = = or x =>'; var sr=Math.sqrt(n[14]*n[14]-4*n[13]*n[15]); "; QuadEq +="n[17]=(-n[14]+sr)/(2*n[13]); n[18]=(-n[14]-sr)/(2*n[13]); n[9]=''; n[19]='';"; var Algebra_nA = new Array("('Algebra . . . . . s} . terms','definitions & laws:')", "('s} addition, subtraction','a+0 = a; a+b = b+a; a-b = -(b-a); a+(-a)=0')", "('s} . . multiplication','ab = ba; 0*a=0; c(ab)=abc; c(a+b)=ca+cb; a(-b)=-ab; (-a)(-b)=ab')", "('s} . . . . . . . division','a/b = 1/(b/a); a*(1/a)=1; (a/b)(b/a)=1')", "('s} . . . . . . powers I','a^2 = aa; a^1=a; a^0=1; (a^x)(a^y)=a^(x+y); (ab)^x=(a^x)(b^x)')", "('s} . . . . . .powers II','a^(-x) = 1/a^x; a^(1/x)=xth root of a; (a^x)^y=a^(xy)')", "('s} . . . . . powers III','(a+x)^2 = a^2 +2ax + x^2; (a-x)^2 = a^2 -2ax +x^2')", "('s} . . . . . powers IV','(a+b)^3 = a^3 +3ba^2 +3ab^2 +b^3')", "('s} . . common logs','(base 10): let x=10^a, then log(x)=a; operates like natural logs')", "('s} . Napierian logs','(base e): let x=e^a, then ln(x)=a; operates like common logs')", "('s} . . . logarithms I','ln(xy)=ln(x)+ln(y); ln(1/x)=-ln(x); ln(x/y)=ln(x)-ln(y)')", "('s} . . .logarithms II','ln(x^y)=y*ln(x); ln(x)=log(x)/log(e); log(x)=ln(x)/ln(10)')", "('s} . . logarithms III','log(10)=1; log(1)=0; e^a = EXP(a)')", "('s} . . . proportions','if a:b :: c:d or a/b=c/d, then ad=bc, a=bc/d, & (a+b)/b=(c+d)/d')", "('s} . . .','')", "('x} . . factorial . . . . x! ','fact(x)')", "('s} . . .','')", "('n} quadratic equation',QuadEq)", "('','')");
var RectCo="Axes x_ (abscissa), y| (ordinate), [& z/ if 3-dim.] at right angles. A point "; RectCo +="is located by (x,y[,z]) where +x is right of origin (intersection), +y is above."; var PoleCo="Point located by (r,a) where r is dist. from origin, a is angle /_ measured from "; PoleCo +="x-direction: + if counter-clockwise, toward the +y-direction."; var R_PCon="/*eg. from origin O(0,0) to rectang.coord. point P(3,4) -> r=5, a.deg=53.1; "; R_PCon +="the polar point of r=6, a.deg=30, gives the rectang.point x,y P(5.2,3).*/ "; R_PCon +="n[0]='Rectangular'; n[10]='->_to_Polar_'; n[1]='. . . x . . <'; n[2]='. . . y . . <';"; R_PCon +=" n[3]=' = = r = = >'; n[4]=' = a deg >'; n[14]=Math.atan(n[12]/n[11])*180/Math.PI; "; R_PCon +="n[13]=Math.sqrt(n[11]*n[11]+n[12]*n[12]); n[5]='__Polar__->'; n[15]='__Rectang__'; "; R_PCon +="n[6]='. . . r . . <'; n[7]=' . a deg . <'; n[8]=' = = x = = >'; n[9]=' = = y = = >'; "; R_PCon +="n[18]=n[16]*Math.cos(n[17]*Math.PI/180); n[19]=n[16]*Math.sin(n[17]*Math.PI/180);"; var AnLine="2 points: (x1,y1) & (x2,y2): Dist, d=sqrt((x2-x1)^2+(y2-y1)^2); midpoint between="; AnLine +="([x1+x2]/2,[y1+y2]/2); slope of line, a to x-axis =tan(a) =m =(y2-y1)/(x2-x1); "; AnLine +="slope.intercept eq. of line: y=mx+b; Lines parallel if m1=m2, perpendicular if m1=-1/m2."; var EqLine="/*eg. P1(3,7), P2(5,17) -> P1-P2 dist.=10.2; line y =5x-8.*/ "; EqLine +="n[0]='Point 1, x1 <'; n[1]=' . . . . . . . .y1<'; n[2]='Point 2, x2 <'; n[3]="; EqLine +="' . . . . . . . y2 <'; var dx=n[12]-n[10]; var dy=n[13]-n[11]; n[4]='P1-P2 dist >';"; EqLine +=" n[14]=Math.sqrt(dx*dx+dy*dy); n[5]='line_equation'; n[15]='y = mx +b'; "; EqLine +=" n[6]='. . slope, m >'; n[16]=dy/dx; n[7]='y-intercpt, b>'; n[17]=n[11]-n[16]*n[10]; "; EqLine +="n[8]='give X (-> y)'; n[18]='give Y (<- x)'; if (n[9]=='') {n[9]=(n[19]-n[17])/n[16]} "; EqLine +="else {n[19]=n[16]*n[9]+n[17]/1} //NOTE default is x solves y, clear x to solve from y"; var AnCirc="gen. eq. Rect.: sq(x-Cx)+sq(y-Cy)=sq(r), where (Cx,Cy)=center of circle, r=radius. "; AnCirc +="Polar Coord: sq(r)+sq(Cr)-2r*Cr*cos(a-Ca), where (Cr,Ca)=ctr.of circle. Special case"; AnCirc +=" if Origin (0,0)=center: sq(x)+sq(y)=sq(r); polar: r=numeric value of radius."; var AnConi="Locus of points, a constant ratio (eccentricity,e) of dist. from a point (focus,F) "; AnConi +="and from a line (directrix,D). If d=dist.F-D: sq(x)+sq(y)=sq(e)sq(d-x); r=de/(1-e*cos(a))"; AnConi +=". The Conic =Ellipse if e<1; =Parabola if e=1; =Hyperbola if e>1."; var AnEllip="Conic e<1: sq(x-Ex)/sq(Sx)+sq(y-Ey)/sq(Sy)=1, where center=(Ex,Ey), Sx & Sy are "; AnEllip +="semi-axes in x- & y-directions respectively, & as spec. cond. parallel || to axes."; var AnHyper="Conic e>1: sq((x-Ix)/b)-sq((y-Iy)/c)=1, (Ix,Iy)=intersection of asymptotes."; var PCurv="/*eg. if P1(1,1), P2(7,3), P3(13,11) -> equation: y = 0.0833xx -0.33x +1.25*/ "; PCurv +="n[0]='2-d polynomial'; n[10]='axx+bx+c=y'; n[1]='x: input_pairs'; n[11]='y:_3_points_'; "; PCurv +="n[5]='Coefficients>'; var A=(n[14]-n[12]-(n[13]-n[12])*(n[4]-n[2])/(n[3]-n[2]))/"; PCurv +="(n[4]*n[4]-n[2]*n[2]-(n[3]*n[3]-n[2]*n[2])*(n[4]-n[2])/(n[3]-n[2])); n[15]='a='+A; "; PCurv +="var B=(n[13]-n[12]-A*(n[3]*n[3]-n[2]*n[2]))/(n[3]-n[2]); n[6]='b='+B; n[17]=''; "; PCurv +="var C=n[12]-A*n[2]*n[2]-B*n[2]; n[16]='c='+C; n[7]=''; n[8]='enter_x_:_'; "; PCurv +="n[18]='y:_computed'; n[19]=A*n[9]*n[9]+B*n[9]+C; // enter x=2 per eg. -> y=0.916"; var mRegres="/*eg. P1(1,1), P2(7,3) -> y=1*pow(x,0.565); if x=2 -> y=1.48*/ "; mRegres +="n[0]='Regres.form'; n[10]='A*pow(x,B)=y'; n[1]='x: input_pairs'; n[11]='y:_2_points_';"; mRegres +=" n[4]='Coefficients>'; function L(v){return Math.log(v)} var x1=L(n[2]); "; mRegres +="var y1=L(n[12]); var x2=L(n[3]); var y2=L(n[13]); var B=(y2-y1)/(x2-x1); "; mRegres +="var A=Math.exp(y1-B*x1); n[4]='Coefficients>'; n[14]='A='+A; n[15]='B='+B; "; mRegres +="n[7]='enter_x_:_'; n[17]='y:_computed'; n[18]='>y='+A*Math.pow(n[8],B)"; var nRegres="/* form A*pow(x1,B)*pow(x12,C)=y: 3-point enter for 3-unk. Each point has 2 x-"; nRegres +="var: input x1 to n0, x12 to n1, y1 to n11; similarly x2 to n2, x22 to n3, etc. "; nRegres +="eg. (see Civil-hydrology) 1-acre sloping 3% -> Q2 =1.4cfs; 10ac @2% -> Q2 = 7.1cfs; "; nRegres +="100ac @1% -> Q2=31.1cfs. => Regression Formula for 2-yr.events: "; nRegres +="Q2 =0.8*pow(ac,.795)*pow(slope,.51) {note: some inputs choke algorithm}*/ "; nRegres +="function L(v){return Math.log(v)} n[10]='<x1/x12,_y1:'; n[12]='<x2/x22,_y2:'; "; nRegres +="n[14]='<x3/x32,_y3:'; var x1=L(n[0]); var x12=L(n[1]); var y1=L(n[11]); "; nRegres +="var x2=L(n[2]); var x22=L(n[3]); var y2=L(n[13]); var x3=L(n[4]); var x32= "; nRegres +="L(n[5]); var y3=L(n[15]); n[6]='Coefficients>';var R=(x3-x1)/(x2-x1); var "; nRegres +="C=(y3-y1-R*(y2-y1))/(x32-x12-R*(x22-x12)); n[17]='C='+C; var B=(y2-y1-C*(x22-x12))"; nRegres +="/(x2-x1); n[7]='B='+B; A=Math.exp(y1-B*x1-C*x12); n[16]='A='+A; n[18]='<x/x1_>?y_'; "; nRegres +="n[19]='>y='+A*Math.pow(n[8],B)*Math.pow(n[9],C); ";
var Analyti_nA = new Array("('Analytic Geometry . . s}','graphic coordinates')", "('s} Rectangular Coord.',RectCo)", "('s} . . . . . . Polar Coord.',PoleCo)", "('s} Rect.-Polar Convert','x=r*cos(a); y=r*sin(a); r=sqrt(xx+yy); tan(a)=y/x')", "('n} Rect.-Polar Convert',R_PCon)", "(' . . .','')", "('s} . . line: ax+by+c =0',AnLine)", "('n} . line equation, etc',EqLine)", "('s} circle:ax^2+by^2=rr',AnCirc)", "('s} . conic sections',AnConi)", "('s} . . . .ellipse:',AnEllip)", "('s} . . . parabola:','Conic e=1: sq(y-Vy)=b(x-Vx), (Vx,Vy)=virtex point, || to x-axis')", "('s} . . .hyperbola:',AnHyper)", "(' . . .','')", "('n} parabola curve fit',PCurv)", "(' . . .','')", "('n} linear regress. 1-var',mRegres)", "('n} linear regress.2-var',nRegres)", "(' . . .','')", "(' . . .','')", "('','')");
var FinanceBase="n[1]=' int. APR % <'; n[2]='no. of years<'; n[3]='periods / yr<'; "; FinanceBase +="n[6]='int% /period>'; n[16]=n[11]/n[13]; var I=n[16]/100; var N=n[12]*n[13]; "; FinanceBase +="var y=Math.pow(1+I,N); n[5]=' - OUTPUT -'; n[15]=' -------------'; "; var FinanceCR="/*CRF eg: 9%APR (=0.75%/mo.) for 36mo, repay $10000 @ $318/mo.*/ "+ FinanceBase; FinanceCR +="n[0]='Cap_Recov:'; n[10]='(loan_repay)'; n[4]=' Principal $ <'; "; FinanceCR +="n[7]='Payments $>'; n[17]= n[14]*I*y/(y-1); n[8]='Total paid $>'; "; FinanceCR +="n[18]=n[17]*N; n[9]='avg.int/per$>'; n[19]=(n[18]-n[14])/N"; var FinanceCA="/*SPCAF eg: $1000 invested @9%APR for 10 yrs. becomes $2367.*/ "+ FinanceBase; FinanceCA +="n[0]='Comp_Amt.'; n[10]='sgl_payment'; n[4]='P: banked $<'; "; FinanceCA +="n[7]=' in '+n[12] +' yr $>'; n[17]= n[14]*y; n[8]=' Total Int. $>'; "; FinanceCA +="n[18]=n[17]-n[14]; n[9]='avg.int/per$>'; n[19]=n[18]/N"; var FinanceCU="/*UCAF eg: @9%APR, $1000 invested/yr for 10yrs, yields $15193.*/ "+ FinanceBase; FinanceCU +="n[0]='Comp_Amt.'; n[10]='uniform_pay'; n[4]='bank/per. $<'; "; FinanceCU +="n[7]=' in '+n[12] +' yr $>'; n[17]= n[14]*(y-1)/I; n[8]=' Total Int. $>'; "; FinanceCU +="n[18]=n[17]-n[14]*N; n[9]='avg.int/per$>'; n[19]=n[18]/N"; var FinancePs="/*SPPWF eg: @9%APR, $1000 needed in 10yrs; bank $422 now.*/ "+ FinanceBase; FinancePs +="n[0]='Pres_Worth'; n[10]='sgl_payment'; n[4]='need in '+n[12]+'yr$<'; "; FinancePs +="n[7]='Bank Now $>'; n[17]= n[14]/y; n[8]=' Total Int. $>'; "; FinancePs +="n[18]=n[14]-n[17]; n[9]='avg.int/per$>'; n[19]=n[18]/N"; var FinancePu="/*UPWF eg: @9%APR, $1000 needed annually for 10yrs; bank $6418 now.*/ "+ FinanceBase; FinancePu +="n[0]='Pres_Worth'; n[10]='uniform_pay'; n[4]='need / year $<'; "; FinancePu +="n[7]='Bank Now $>'; n[17]= n[14]*(y-1)/(y*I); n[8]=' Total Int. $>'; "; FinancePu +="n[18]=n[14]*N-n[17]; n[9]='avg.int/per$>'; n[19]=n[18]/N"; var FinanceSF="/*SFF eg: @9%APR, $1000 needed in 10yrs; bank $66 annually.*/ "+ FinanceBase; FinanceSF +="n[0]='Sinking_Fund'; n[10]='uniform_pay'; n[4]='need in '+n[12]+'yr.$<'; "; FinanceSF +="n[7]='Bank/per.$>'; n[17]= n[14]*I/(y-1); n[8]=' Total Int. $>'; "; FinanceSF +="n[18]=n[14]-n[17]*N; n[9]='avg.int/per$>'; n[19]=n[18]/N"; var IntFact="Tables vary. The discrete interest factors: CRF SCAF, UCAF, SPWF, UPWF, & SFF, are "; IntFact +="standard, end-of-period, where APR(annual percent rate)/(no.pay./yr)=effective "; IntFact +="interest. Arithmatic series factors are extensions where a repeated regular payment "; IntFact +="is required. When interest quoted at less than 1-year, effective annual interest = "; IntFact +="SCAF-1. Interest compounded Continuously is handy when payments made at irregular times."; IntFact +=" Factor is not much more than effective rate componuded 365 days/year."; var IntEff="var ipp=(/*Int.%/period*/ ); var n=(/*periods/yr*/ ); m='eff.%='+(Math.pow(1/1+ipp/100,n)-1)"; IntEff +="*100; /*eg. 1.5% per month (12x per year) = 19.56% anual effective interest rate.*/"; var IntCont="n[0]='Cont.eff_i% <'; n[1]='no.perds, n <'; n[2]='Nom.int,_r%>'; "; IntCont +="n[12]=Math.log(n[10]/100+1/1)*100; var r=n[12]/100; var f=Math.exp(r*n[11]); "; IntCont +="n[3]='S.CapAmF >'; n[13]=f; n[4]='S.PresWrF >'; n[14]=1/f; n[5]='CapRecoF >'; "; IntCont +="n[15]=r*f/(f-1); n[6]='U.PresWrF >'; n[16]=1/n[15]; n[7]='SinkFundF >'; "; IntCont +="n[17]=r/(f-1); n[8]='U.CapAmF >'; n[18]=1/n[17]; n[9]=' . ArithSerF >'; "; IntCont +="n[19]=1/(Math.exp(r)-1)-(n[11]/(f-1));"; var Finance_nA = new Array("('Finance fn} . . $ > Euro .','x*1.0034 //11-02 c} MUST UPDATE!')", "('x} . . . $US > $Can','x*1.58 //c}11-02')", "('x} . . . $ > Pound,Brit','x*0.6338 //c}11-02')", "('x} . . . $ > Peso,Mex','x*10.124 //c}11-02')", "('x} . . . $ > Yen','x*122.84 //c}11-02')", "('x} . . . $ > Yuan','x*8.227 //c}11-02')", "('','')", "('','')", "('n}Cap.Recov:loan pay',FinanceCR)", "('n} sgl.pay: Comp.Amt.',FinanceCA)", "('n} unif.pay: Comp.Amt.',FinanceCU)", "('n} sgl.pay: Pres.Worth',FinancePs)", "('n}unif.pay: Pres.Worth',FinancePu)", "('n} unif.pay: Sink.Fund',FinanceSF)", "('','')", "('s} Interest Rate terms',IntFact)", "('*} Effective Int. Rate',IntEff)", //eg: int. @1.5%/month (12x/yr) = 19.56%/yr "('n} Contin. Int. Factors',IntCont)", "('','')", "('','')", "('','')"); var JavaScr0="Samples of code. Note that program strings must be activated with the [js] key,"; JavaScr0 +=" initiated with the [=] key, fill in the unknowns, and [=] again to calculate."; var JS_sCal="sCal uses a limited set of JavaScript language elements, listed following: "; JS_sCal +="(Use the browser->source text->find 'code element name' as shown below to "; JS_sCal +="view (hopefully sound) example.) {MATH} Math.E; Math.PI; Math.LOG10E; Math.abs; "; JS_sCal +="Math.acos; Math.asin; Math.atan; Math.cos; Math.exp; Math.log; Math.pow; Math.random;" JS_sCal +="Math.round; Math.sin; Math.sqrt; Math.tan; {STRING} eval(x); x.indexOf(; length; "; JS_sCal +="x.substr(; x.substring(; parseFloat(; parseInt(; charAt; charCodeAt; .slice(; split;"; JS_sCal +=" toString; unescape; {MORE} appName; document.captureEvents; inform; onkeypress; "; JS_sCal +=".options; onLoad; isNaN; {TECHNIQUES} interpolation; fact(q) {regression}; "; JS_sCal +="{TIME} .getDate(); .getDay(); .getFullYear(); .getMonth(); .getTime; "; var JavaScr1="n[0]='start point . <'; n[1]='increment . <'; n[2]='-- number --'; n[12]='-- "; JavaScr1 +="value --'; for (i=1; i<8; i++) {n[2+i]=i; n[12+i]=parseInt(n[10])+i*n[11]}"; var J_Graph="for (j=0;j<10;j++){n[j]=Math.round(Math.random()*120)}; /*<-generate data for eg."; J_Graph +="->graph*/ var s='::::!::::!::::!::::!::::!'; var max=n[0]; var min=n[0]; for "; J_Graph +="(j=1;j<10;j++){if (n[j]<min){min=n[j]} if (n[j]>max){max=n[j]}} var unit="; J_Graph +="(max-min)/25; for (j=10;j<20;j++){n[j]=s.slice(0,Math.round((n[j-10]-min)/unit))}"; J_Graph +=" On(); m='Graph Random Data: base='+min+'; units/colon='+unit"; var FcnGraf="/*Graphs a Function (eg. y=Math.sin(a) within the a-limits of 0 to 2*PI, & -1<y-limit<1)."; FcnGraf +=" These values, including the fcn, can be replaced in the following code.*/ "; FcnGraf +="var s=' '; for (j=1;j<20;j++){s+=' '} s+=' | '+s; /*built std. blank, next set parameters.*/"; FcnGraf +=" var aStart=0; var aEnd=2*Math.PI; var yMin=-1; var yMax=1; var unit=(yMax-yMin)/20; "; FcnGraf +="var loEnd=Math.abs(yMin/unit); s=s.slice(20-loEnd); var aIncrem=(aEnd-aStart)/10; "; FcnGraf +="for (j=0;j<10;j++){var a=aStart +j*aIncrem; n[j]=Fo(a)+' a|y '+Fo(Math.sin(a)); "; FcnGraf +="var i=Math.round(Math.sin(a)/unit+loEnd+1); n[j+10]=s.substr(0,i)+':'+s.substr(i+1);}"; var Interp="n[0]='__x:_data__'; n[10]='__y:_data__'; for (j=1;j<7;j++){n[j]=j*2; n[j+10]="; Interp +="Math.pow(n[j],1.6);} /*generate data for eg. ->do interpolation*/ n[7]='__x: input__'; "; Interp +="n[17]='_interp. y:_'; if (n[8]<=n[1]){n[18]=n[11]+(n[8]-n[1])*(n[12]-n[11])/(n[2]-n[1])};"; Interp +=" for (j=1;j<6;j++) {if (n[8]>n[j]&&n[8]<=n[j+1]) {n[18]=n[j+10]+(n[8]-n[j])*"; Interp +="(n[j+11]-n[j+10])/(n[j+1]-n[j])} } if (n[8]>n[6]) {n[18]=n[16]+(n[8]-n[6])*"; Interp +="(n[16]-n[15])/(n[6]-n[5])}; n[9]=' actual y = >'; n[19]=Math.pow(n[8],1.6);"; var JavaScr_nA = new Array("('s} JavaScript samples',JavaScr0)", "('s} sCal used Elements',JS_sCal)", "('n}start>increment code',JavaScr1)", "('*} Square function','function Square(a) {return a*a} Square(/*insert no. to square*/ );')", "('x} xEnd() function','xEnd()')", "('','')", "('x} Bar-Graph Example',J_Graph)", "('x} Function Grapher','FcnGraf')", "('n} Interpolate / Extrap.',Interp)", "('','')", "('s} str.>str.(geo time)',TimeGeo)", // Source code at Time_Fcns "('n} data entry form 1',CivVC1)", // Source at Civ_Highway, Survey "('n} data for series 2',CivVC2)", // ditto "('','')");
var MenTerms="a=angle; b=base.width; d=diagonal; s=side; h=perpendicular.height; "; MenTerms += "A=area; V=volume; "; var CirArc="/*_where arc subtended by /_ angle a-radians, defining a cord, h=dist. between "; CirArc +="center of circle and center of cord.*/ arc.len =r*a; cord.len =2*Math.sqrt(r*r-h*h)"; CirArc +=" =2*r*Math.sin(a/2) =2*h*Math.tan(a/2); dist.cord-to-circumf.=H =r-h; "; CirArc +="h =Math.sqrt(4*r*-cord.len^2)/2 =cord.len/(2*tan(a/2); A.sector =r*arc.len/2 = "; CirArc +="r*r*a/2; A.segment =A.sector -A.triangle(ctr-cord) =r*r*(a-Math.sin(a))/2 "; CirArc +="=r*r*arc.cos((r-H)/r) -(r-H)*Math.sqrt(2*r*H-H*H)";
var Mensura_nA = new Array("('Mensuration .s} . terms',MenTerms)", "('s} . . . Triangle','A = b*h/2')", "('s} . . . Rectangle','A = b*h')", "('s} . . . Parallelogram','A = b*h =b*s*Math.sin(a)')", "('s} . . . Trapezoid','A = h*(b1+b2)/2')", "('s} .gen.Quadrilateral','A = d1*d2/2*sin(a) //a is acute angle between diagonals d1, d2')", "('s} reg.Polygon,n-sides','A = n*s*s/4*cot(180-deg/n)')", "('s} . . . Circle, rad=r','A = Math.PI*r*r = Math.PI*D*D/4')", "('s} . Circumference, C','C = 2*Math.PI*r = Math.PI*D')", "('s} Cir.arc, cord, segm,',CirArc)", "('s} . . . Ring','A= Math.PI*(r1*r1-r2*r2) =Math.PI*(r1+r2)*(r1-r2)')", "('s} . . . Ellipse','A = Math.PI*semi.axis.major*semi.axis.minor')", "('s} . . . Parabola','A = 2/3*b*h; height,h1 at given width,b1: h1 = (h/b^2)*(b*b-b1*b1')", "('s} . . . ','')", "('s} . . . Cube','V =s*s*s; A.all.surf. = 6*s*s; diagonal =s*Math.sqrt(3)')", "('s} rect.Parallelepiped','V =a*b*c; A.surf =2*(a*b+b*c+c*a); diag =Math.sqrt(a*a+b*b+c*c)')", "('s} . . . Prism','V = A.b * h')", "('s} . . . Pyramid','V = A.b*h/3')", "('s} . . . Cylinder','V = A.b * h; lateral.A.surf.rt.circ. =2*r*Math.PI')", "('s} . . . Cone','V =A.b*h/3; Rt.Circ.Cone.A.b =Math.PI*r*r; A.surf =PI*r*Math.sqrt(r*r+h*h)')", "('s} frustum rt.Cone','V =PI*h/3*(r1*r1+r1*r2+r2*r2); A.surf =PI*(r1+r2)*sqrt(h*h+(r1-r2)^2)')", "('s} . . . Sphere','V =4/3*PI*r^3; V.sector =2/3*PI*h*r^2; A.surf =4*PI*r^2')", "('s} . . . Ellipsoid','V =4/3*PI*a*b*c//semi-axes')", "('s} . . . Torus','V =2*PI^2*R*r^2; A.surf =4*PI^2*R*r //R is large rad, r is small')", "('','')", "('Irregular Area s}terms','area is split into equally spaced, h.dist, cords meas. y0,y1,..,yn')", "('s} . . Trapezoid rule','A =h/2*((y0+yn) +2*(y1+y2+...+y(n-1))')", "('s} . . Simpsons rule','A =h/3*((y0+yn) +4*(y1+y3+y5...) +2*(y2+y4+y6+...))')");
var PhysGen="Simplified formulae w/o calculus. Constants implied: eg. v=at may include an "; PhysGen +="initial vel. v =v0 +at. Observe unit consistency."; var PhysKin="x =v*t =a*t^2/2; v =a*t =x/t =(2*a*x)^.5; //x:distance; v:velocity,x/sec; "; PhysKin +="a:acceleration,x/sec^2; for freefall bodies a =g =9.8m/sec^2 =32.15ft/sec^2"; var PhysVec="scalar magnitude + direction: a, angle to x_axis, [=(90-deg -a)to y|axis] "; PhysVec +="V @.direct. to components: Vx =V*cos(@); Vy =V*sin(@); V=sqrt(Vx*Vx+Vy*Vy)"; var PhyProj="initial vel.v; angle.@ to horiz: Vy=g*t: at top of arc, Vy=0, solve for t; "; PhyProj +="returns to horiz. ground in t; then range, x =Vx*2*t"; var PhyNewt="I. Object at rest or unif. motion continues: inertia (if Fy=Fx=0, a=0), II. unless "; PhyNewt +="acted upon by unballanced force (F =ma); for which III. there is equal & opposite "; PhyNewt +="reaction: Fx =-Fx. Ft=mv=m2v2 {impulse=momentum). Weight,w =mg. Mass,m is scalar."; var PhyFric="Ff =Cf*normal force, where coeff.frict, Cf for brake.mat-c.iron =.4, .2 if wet; steel-"; PhyFric +="steel =.58 clean, .1 oiled; Rubber-solids =.2 to .6; Ice =.1 @ 0degC, .3@-12, .5@-70C."; var PhyUGr="Newton: F=GmM/r^2; m & M are 2 masses, r ctrs.dist; G=6.673E-11 newton-meter^2/kg^2"; var PhyWE="Work =Fs=force*dist.parallel to resisting F. Potential Energy: PE=Wh=mgh (against "; PhyWE +="gravity). Input.Work: (F1s1=F2s2) =Output.Work/efficiency. Kinetic Energy: KE=mv^2/2 "; PhyWE +=" Energy is Conserved."; var PhyPas="Pressure applied to incompressable fluid (liquid) is transmitted equally & normal to"; PhyPas +=" the walls throughout."; var PhyRot="follows pattern like translatory. angular a.vel*t; a.vel=a.acc*t =(2*a.acc*ang)^.5 "; PhyRot +=" =2*PI*r*n.rev/sec. Convert: s=r*ang; v=rv; a=ra; ang in radians, r=radius"; var PhySHM="approx. Unif. Circular Motion->Pendulum(ideal): T = 2p (L/g)^0.5 for swing +/-5deg."; var PhyWave="l=wave len, A=amplitude: v=nl. standing cord wave: n=1/(2L)((N^2T)/m)^0.5 "; PhyWave +="N, T, m, L =no. loops, tension, mass/length"; var PhyTex="L=Lo(1+aT), a is coef.linear expansion; V=Vo(1+BT), B is coef.vol. thermal expans."; PhyTex +=" B=>3a, For gasses B=>1/273 (for deg.C)"; var PhyHMeas="1 calorie (1 BTU) avg. raises temp. 1g (1 lb.) water 1 deg.C (deg.F). "; PhyHMeas +=" 1BTU=778 ft-lb =252cal =1053joule"; var PhyHCon="H/time=Ch*A*dT/thicknes; A=surf.area, dT=temp.dif Ch=Heat Conductivity. * selected"; PhyHCon +=" Ch as a fctr of water Ch=1, =0.348 BTU/(hr*sq.ft.*deg.F/ft.)=4.176 BTU/(hr*sq.ft."; PhyHCon +="*deg.F/in.)=0.60 Watt/(sq.m.*deg.C/m)=.6W/m*deg.K=0.518 kcal./(hr*sq.m.*deg.C/m) "; PhyHCon +=" Note: Insulation R-value =1/(Ch*water value)"; var PTherm0="System placed in contact with an infinite environment (a thermal reservoir) "; PTherm0 +="eventually comes to equlibrium with it. i.e. thermometer meas."; var PTherm1="When mechanical work is changed to heat, or heat to work, work=heat, but heat>work."; PTherm1 +=" -precludes perpetual motion of 1st kind."; var PTherm2="No continuous self-sustained process moves heat from cold to hot. Entropy (disorder)"; PTherm2 +=" of isolated syst. can't drop. -no perpetual motion of 2nd kind."; var PTherm3="Absolute Zero (-273.16 deg.C) can't be achieved physically."; var PhyESU="Electrostatic Unit (ESU or Stat-Coulomb) = positive charge which repels a like charge "; PhyESU +=" 1 cm apart in a vacuum with a force of 1 dyne (2.248E-6 pound). coulomb(6.25E18"; PhyESU +=" electron)/sec =ampere current,I"; var Physics_nA = new Array("('Physics . . . . . s} . terms',PhysGen)", "('s} Motion (kinematics)',PhysKin)", "('s} . . Vector Resolution',PhysVec)", "('s} . . Projectiles',PhyProj)", "('(kinetics) Newton laws',PhyNewt)", "('s} . . Friction',PhyFric)", "('s} Univ.law gravitation',PhyUGr)", "('s} . Work, Energy',PhyWE)", "('s} CIRCULAR motion','a(cir)=v^2/r; F(centripital)=mv^2/r')", "('s} . Rotary kinematics',PhyRot)", "('s} . Periodic Motion','frequency, n (cycles/s) =1/period, T')", "('s} simpl harmonic mot.',PhySHM)", "('s} . . .Wave Motion',PhyWave)", "('s} . . .Doppler Effect','n.observed= n(v+/-v.observer)/(v-/+v.source)')", "('s} electromag. spctrm','Light Speed, C=lf where l=wave length, f=frequency, c/s')", "('s} . . . MATTER','Solid=fixed struct; Fluid=liquid, free surf.; or gas, fills container')", "('s} . Hookes Law','within elastic limits, strain (distortion) is proportional to stress.')", "('s} . . . Modulii','(Young)Elasticity: E=(F/A)/(dL/L); Bulk Mod: B=(F/A)/(dV/V)=P/(dV/V)')", "('s} Density =m/Vol','Specific Gravity: S.g.x=density.x/density.water')", "('s} . Pascals Principle',PhyPas)", "('s} Liquid Pressure','P=h*density*g +P.over; h=ht of column (Atmos. 14.7psi=760mm Hg, etc')", "('s} Archimedes princip.','Body in fluid is buoyed up by a force=weight of fluid displaced.')", "('s} . Ideal Gas Law:','P1V1/T1=P2V2/T2, T=absol. temp, approx for real gas, best for H & He')", "('s} Bernoulli Principle','dV1^2 + P1 = dV2^2 + P2')", "('s} . . . HEAT','avg. atomic kinetic energy as meas. by temp.')", "('s} . thermal expans',PhyTex)", "('s} . heat measuremnt',PhyHMeas)", "('s} . Change of State','water: heat.vaporization(boil)=540 cal/g; of fusion(freeze)=80 cal/g')", "('s} . . .Heat Capacity','of x/water = Specific Heat of x.')", "('s} . . Heat Conduction',PhyHCon)", "('s} thermodynamics 0',PTherm0)", "('s} . 1st Law Thermo .',PTherm1)", "('s} . 2nd Law Thermo .',PTherm2)", "('s} . 3rd Law Thermo .',PTherm3)", "('s} ELECTricity & Mag',PhyESU)", "('s} . Coulombs Law','F=(qq1)/(Kr^2); q=charge,ESU; r=separatn, K=dialectric const.(1 in vacuum)')", "('s} Potnetial Difference','volts, V=IR, R,ohms(law)')", "('s} . Electric Power','watts, P=IV=I^2R')", "('s}Capacitor Reactnce','Xc=1/2pifC=V/I [A.C.]')", "('s}Inductive Reactance','Xi=2pi/L=V/I [A.C.]')", "('s}combined Impednce','Z=(R^2+(Xi-Xc)^2)^.5; V=IZ')", "('s} Inverse Square law','Radiation Intensity,I decreases as inv.sq. of dist,r: Ir^2=I1r1^2.')", "('s} . . .','')", "('s} . . .','')", "('s} . . Heisenberg','Uncertainty Principle: One cannot define both position & momentum of a particle.')", "('s} . . Einstein','E=mC^2; m=m1/(1-(v^2/C^2))^0.5')");
var MdataGet=" function MDG() {end =m.indexOf('/',start); temp = m.substr(start,end-start); start=end+1;} "; var MdataExtract=MdataGet+"var start=1; var end=0; MDG(); var lo=temp; var hi=temp; var i=0; "; var ProbTerm="if P=probability of outcome, P1 +P2 +P3 +... =1 (certainty). Statistics derived from "; ProbTerm +="representative data can determine probabilities. DATA can be entered in sCal by several"; ProbTerm +=" means: <=20 points to n-array; >20 pts to memory; or random number generator to test. "; ProbTerm +="Once DATA entered, run Stats on n-, or stats on m- or group- finds average, std.dev, etc."; var StatRndm="var No=(/*No.of points*/ ); var d=(/*size 1 to */100);/*CLICK[=]*/ if (No>20){m='/'} "; StatRndm +="for (j=0;j<No;j++) {temp=Math.round(Math.random()*d); if (No<21){n[j]=temp} else "; StatRndm +="{m+=temp+'/'}}; //procedure loads No random data values (1 to d) in n-array or m-series;"; var StatsN="var No=0; var Tot=0; for (j=0;j<20;j++){nI(j); if (n[j]!=''){Tot+=n[j]/1; No+=1}} var mean=Tot/No;"; StatsN +=" var variance2=0; for (j=0;j<20;j++){if (n[j]!=''){variance2+=Math.pow(n[j]-mean,2)}} var "; StatsN +="Std_Dev0=Math.sqrt(variance2/No); Std_Dev1=Math.sqrt(variance2/(No-1)); var d=2; if (mean>100)"; StatsN +="{d=0} if (mean<1){d=5} m='No of data points='+No+' Total='+Tot+' mean='+Mr(mean,d)+";//decimal out StatsN +="' Standard Deviation(n)='+Mr(Std_Dev0,d)+' Std.Dev(n-1)='+Mr(Std_Dev1,d)"; var StatsD="/*Enter data values one at a time in x-display, clicking [M+] after each (or simply start "; StatsD +="the data with a slash '/', place '/' between data values & at END, then click [x>m]). When "; StatsD +="finished, select 'Stats on m-DATA' or 'Group m-DATA' to analyse. CLICK[=] to initialize "; StatsD +="m-cell for data string:*/ m='/';"; var StatGp="var lw=(/*Set Group Ranges: Lowest value=*/ ); var r=(/*Range=*/ ); /*note: can enter odd-sized "; StatGp +="ranges manually--in same format (comment out for-loop to do this).*/ for (j=0;j<9;j++){n[j] "; StatGp +="=(lw+j*r)+'-'+(lw+(j+1)*r-1); n[j+10]=''} "; StatGp +="n[9]='. >'+(lw+9*r); n[19]=''; /*Place DATA in m (see 'DATA > 20 pts') & CLICK[=]*/"+MdataExtract; StatGp +=" start=1; do {MDG(); if (temp<lw){alert('value '+temp+' is less than least range '+lw)} var s=0; "; StatGp +="for (j=0;j<9;j++){i=n[j].indexOf('-'); if (temp>=n[j].substr(0,i)/1 && temp<=n[j].substr(i+1)/1) "; StatGp +="{n[j+10]=n[j+10]/1+1/1; s=1}} if (s!=1){n[19]=n[19]/1+1/1}} while (m.indexOf('/',start)>-1); "; var StatIn=MdataExtract+"var Tot=temp; var No=1; do {MDG(); if (temp!=''){Tot=Tot/1+temp/1; No+=1; "; StatIn +="if (temp<lo){lo=temp} if (temp>hi){hi=temp}}} while (m.indexOf('/',start)>-1); var mean=Tot/No; "; StatIn +="start=1; var variance2=0; do {MDG(); if (temp!=''){variance2+=Math.pow(temp-mean,2)}} "; StatIn +="while (m.indexOf('/',start)>-1); n[0]='_Statistics_'; n[10]='data_from_m'; n[1]='No. of points'; "; StatIn +="n[11]=No; n[2]='Total . . . . >'; n[12]=Tot; n[3]='Mean . . . . >'; n[13]=mean; n[4]='Std.dev.(n)"; StatIn +=" >'; n[14]=Math.sqrt(variance2/No); n[5]=' . . S.d.(n-1)>'; n[15]=Math.sqrt(variance2/(No-1)); "; StatIn +="n[6]='range.low val'; n[16]=lo; n[7]=' . . . . high val'; n[17]=hi; n[8]=' . mid-range >'; "; StatIn +="n[18]=(hi/1+lo/1)/2; n[9]='copy m-data >'; n[19]=m;"; var ProbComb="/*Number of outcomes for probability. eg. Have 6 books, can display 4 at a time; there are "; ProbComb +="15 diff. combinations possible, but 360 if the order of the 4 books included. In 3 Binomial "; ProbComb +="trials, where the probability of success, P(pass), is 0.8 in each trial, the prob. of only 1 "; ProbComb +="success =0.096*/ n[0]=' . # of items <'; n[1]=' . r at a time <'; var s=n[10]-n[11]; n[2]='"; ProbComb +="Combinations'; n[12]='________'; n[3]='. possible r >'; n[13]=fact(n[10])/(fact(n[11])*fact(s));"; ProbComb +=" n[4]='Permutations'; n[14]='________'; n[5]='. orders of r >'; n[15]=n[13]*fact(n[11]); n[6]="; ProbComb +="'Binoml.trials<'; n[7]=' . . P(pass) <'; n[8]=' . # passes <'; n[9]='probability >'; s=n[16]"; ProbComb +="-n[18]; n[19]=Math.pow(n[17],n[18])*Math.pow(1-n[17],s)*fact(n[16])/(fact(n[18])*fact(s));" var ProbPois="/*Where average rate defined for random events: eg. if avg. is 20 cars/min, in 0.5-min, EXACTLY"; ProbPois +=" 4 cars passing has a 1.9% chance.*/ n[0]='Poisson Dist.'; n[10]='_avg/interval'; "; ProbPois +="n[1]='known rate <'; n[2]=' . rev.intervl<'; n[3]='x.occuranc<'; n[4]='x.probability>'; "; ProbPois +="function PDist(s) {n[s]=Math.pow(n[11]*n[12],n[s-1])*Math.exp(-n[11]*n[12])/fact(n[s-1])} "; ProbPois +="PDist(14); n[5]=' . . x2.occur <'; n[6]=' . . x2.prob. >'; PDist(16); n[7]=' . . x3.occur <'; "; ProbPois +="n[8]=' . . x3.prob. >'; PDist(18); n[9]='sum of prob>'; n[19]=n[14]/1+n[16]/1+n[18]/1; "; var ProbNorm="/*Normal 'bell-curve' symmetrical about mean=median=mode. +/- 1 stdandard deviation covers ~68%"; ProbNorm +=" of data, +/- 2 s.d ~95%, 3 s.d virtually all. Probabilities,P, are areas under curve between "; ProbNorm +="points. eg. if mean=10, std.dev=1; from point 8.5 (15% of norm) the area outside (2-tails) "; ProbNorm +="=0.1336 or 13.4%; 43.3% will be on the low side of the mean, but still within 15% of it.*/ "; ProbNorm +="n[0]='Normal_Distr.'; n[10]='sampl.represent'; n[1]=' . mean val <'; n[2]=' . std.deviat<'; "; ProbNorm +="n[3]=' . . . . point.x <'; n[4]=' . x.ordinate >'; var s=n[13]-n[11]; n[14]=1/(Math.exp(s*s/"; ProbNorm +="(2*n[12]*n[12]))*n[12]*Math.sqrt(2*Pi)); n[5]='Z=(x-m)/s.d >'; var Z=s/n[12]; var Za=Math.abs(Z);"; ProbNorm +=" n[16]=1/Math.pow(1/1+Za*(0.04986735+Za*(0.02114101+Za*(0.00327763+Za*(0.0000380036+Za"; ProbNorm +="*(0.0000488906+Za*0.000005383))))),16); n[15]=Z; n[6]=' . P(2-tails) >'; n[7]=' . . P(m to x)>'; "; ProbNorm +="n[17]=(1-n[16])/2; n[8]=' . . P(1-tail) >'; n[18]=n[16]/2;"; var ProbX2="/*Hypothesis (Ho) Testing: Expected value,Ex, is compared to experimental observation,Ob, to "; ProbX2 +="find if Ho behind Ex is probable. The Chi-Square statistic, X2 =sum(sq(Ob-Ex))/Ex, and degree of "; ProbX2 +="freedom (d.f=No.Sets-1; if more than 1 group (+'blind'), d.f=(Sets-1)*(Groups-1)). eg. set of 100:"; ProbX2 +=" Ob: 45 got better, 25 worse, 30 same; but Ex was 1/3 (33.3)each case. X2 stat.=6.5 with d.f=2, "; ProbX2 +=" results in a 4% chance that Ex was correct. NOTE that formula used here is approx: +/- 1% for "; ProbX2 +="0.01<P<0.9 AND d.f<6. Layout here is for a SIMPLE case. n[17],n[18] are independent inputs of "; ProbX2 +="X2 statistic and deg.of freedom for GENERAL cases.*/ n[0]='Chi-Square'; n[10]='experim.data';"; ProbX2 +=" n[1]='__observ__'; n[11]='__expect__'; n[6]='___data___'; n[16]='___d.f=2__'; function X2(s) "; ProbX2 +="{return Math.pow(n[s-10]-n[s],2)/n[s]} n[5]=Mr(X2(12),2)+'|'+Mr(X2(13),2)+'|'+Mr(X2(14),2); n[7]="; ProbX2 +="'INPUT X2 <'; var X=X2(12)/1+X2(13)/1+X2(14)/1; n[15]='<X2='+X; X=n[17]; n[8]=' deg.freed.<';"; ProbX2 +=" var d=n[18]; n[9]='probability >'; var o=Math.pow(0.734,1/d); var p=Math.pow(d,0.00816); "; ProbX2 +="var q=Math.pow(d,1.58); var Pr=(-0.193+0.846*d-0.138*d*d+0.0059*d*d*d)*Math.pow(0.704*o*p,X)*"; ProbX2 +="Math.pow(X,(-26.36+8.8*q)/(156.4+1.58*d)); if (d<1.5){Pr*=1.2}; n[19]=Mr(Pr,2)";//~good @ 2 dec.pl. var Probabi_nA = new Array("('Probability, Statistic s}',ProbTerm)", "('s} DATA: <=20 points','Enter data (0 is legit, blank=pass) in cells. Use Stats on n-data to analyse.')", "('*} DATA: random gen.',StatRndm)", "('x} Stats on n-DATA',StatsN)", "('*} DATA > 20 points',StatsD)", "('n} Stats on m-DATA',StatIn)", "('n} Group m-DATA',StatGp)", "('*} n[1..19] > memory',DataNdM)", //source at Data Management, edit>select.all>copy>paste to text file>save "(' . . .','')", "('n} Combin,Permut,Bin.',ProbComb)", "('n} Poisson Distribution',ProbPois)", "('n} Normal Distribution',ProbNorm)", "('n} Chi-Square Distrib',ProbX2)", "(' . . .','')", "(' . . .','')", "(' . . .','')", "(' . . .','')");
var Time0 ="var now=new Date(); now.getTime();"; var Months=" var MonthAr =new Array('Jan','Feb','Mar','Apr','May','Jun','Jul','Aug','Sep','Oct','Nov','Dec');"; var WeekDay=" var DayAr = new Array('Sunday','Monday','Tuesday','Wednesday','Thursday','Friday','Saturday');"; var TimCntDn="var c=(/*Count Down from: seconds*/ );/*CLICK[=]*/ m=c; var a=new Date(); "; TimCntDn +="while (m>0) {var b=new Date(); m=c-eval(b-a)/1000;} alert('Time Up'); "; var JSdate="Date is measured in milliseconds (86,400,000 ms/day) since midnight Jan 1, 1970 UTC. "; JSdate +="Date object range is -100,000,000 days to 100,000,000 days relative to Jan 1, 1970 UTC. "; JSdate +="Universal Time (UTC) [aka Greenwich Mean Time (GMT)] is rel. to local time set on system."; JSdate +=" When date is entered as a string, form must be as 'Jan 4, 2003' with full 4-digit year."; var TimeDif="n[0]='Date_Difference'; n[10]='_Calculator_'; n[1]='. . NOW . . =>'; "+Time0+Months+WeekDay+" n[11]"; TimeDif +="=MonthAr[now.getMonth()]+' '+now.getDate()+', '+now.getFullYear(); n[12]='(note format)';"; TimeDif +=" n[3]='new date.1 <'; var New1=Date.parse(n[13]); n[4]=' . day of wk >'; var da=new Date(n[13]); "; TimeDif +="n[14]=DayAr[da.getDay()]; n[16]='(neg.=past)'; n[5]='to d.1, days>'; n[15]=(New1-now)/86400000; "; TimeDif +="n[7]='new date.2 <'; var New2=Date.parse(n[17]); n[8]='d.2-d.1, day>'; n[18]=(New1-New2)/86400000;"; TimeDif +=" n[9]=' . . . = years >'; n[19]=Mr(n[18]/365.24,3);"; var TimeDDif="var d=(/*neg.=past: Days from Now*/ ); "+Time0+Months+" var s=Date.parse(now)+d*86400000; "; TimeDDif +="var then=new Date(s); m=MonthAr[then.getMonth()]+then.getDate()+','+then.getFullYear();"; var TimePal="n[0]='PALEO_pds'; n[10]='B.P. . 570 mil'; n[1]='Cambrian'; n[11]='-trilobites'; "; TimePal +="n[2]='Ordovician'; n[12]='-coral 500 mil'; n[3]='Silurian'; n[13]='-clam 425 mil'; "; TimePal +="n[4]=' - 1st land'; n[14]='-plant,animal'; n[5]='Devonian'; n[15]='-fern 395 mil'; "; TimePal +="n[6]=' - anphibian'; n[16]='-shark,lungfish'; n[7]='Carboniferous'; n[17]='-insect 350m'; "; TimePal +="n[8]=' - forest'; n[18]='-early reptile'; n[9]='Permian'; n[19]='conifer 290m';"; var TimeMes="n[0]='MESO_pds'; n[10]='B.P. . 235 mil'; n[1]='Triassic'; n[11]=' -frog,turtle'; "; TimeMes +="n[2]=' - 1st mammal'; n[12]='-1st dinosaur'; n[3]=' -pangea split'; n[13]=''; "; TimeMes +="n[4]='Jurassic'; n[14]='-bird 190 mil'; n[5]=' - 1st flowers'; n[15]='-dinasaur age'; "; TimeMes +="n[6]='Cretaceous'; n[16]=' . . . . . 130 mil'; n[7]=' - late dinosaur'; n[17]='-var.mammal'; "; TimeMes +="n[8]=' - Rocky mts'; n[18]=''; n[9]=''; n[19]='';"; var TimeQuat="n[0]='Quatenary_Pd'; n[10]='Epochs follow'; n[1]='Pleistocene'; n[11]='B.P. . 1.8 mil'; "; TimeQuat +="n[2]=' -homo erectus'; n[12]='(1st human ancest)'; n[3]='-neanderthal'; n[13]=''; "; TimeQuat +="n[4]='Holocene'; n[14]='modrn 0.01m'; n[5]=' -dark ages'; n[15]=' . . 0.001m'; "; TimeQuat +="n[6]=' -moon landing'; n[16]=' . . 0.000035m'; n[7]=''; n[17]=''; n[8]=''; n[18]=''; "; TimeQuat +="n[9]=''; n[19]=''; "; var TimeCen="n[0]='CENO_periods'; n[10]='B.P. . . 65 mil'; n[1]='_Tertiary'; n[11]='Epochs follow'; "; TimeCen +="n[2]='. Paleocene'; n[12]='-1st primates'; n[3]='. Eocene'; n[13]='-cats . . . 55m'; "; TimeCen +="n[4]=' - bat,whale'; n[14]='-dog,penguin'; n[5]='. Oligocene'; n[15]='-monkey 38m'; "; TimeCen +="n[6]='. Miocene'; n[16]='-bear . . . 26m'; n[7]=' - alps,himalayas'; n[17]='-grass,1st ape'; "; TimeCen +="n[8]='. Pliocene'; n[18]='homo hab. 6m'; n[9]='/*Quaternary Pd*/'+TimeQuat; n[19]='[c][nx][n9][=]';"; var TimeGeo="n[0]='_EON_*Era_'; n[10]='_years_B.P_'; n[1]='Archeon'; n[11]='4.6 bil.'; n[2]='- 1st bacteria'; "; TimeGeo +="n[12]='4.2 bil'; n[3]='- Oxy to atm'; n[13]='3.5 bil'; n[4]='Proterozoic'; n[14]='2.5 bil'; "; TimeGeo +="n[5]='-proista,amoeba'; n[15]='1.2 bil'; n[6]='Phanerozoic'; n[16]=' . . 570 mil';"; TimeGeo +="n[7]='/* Paleozoic */ '+TimePal; n[17]='[c][nx][n7][=]'; ";// example of calling another set TimeGeo +="n[8]='/* Mesozoic */ '+TimeMes; n[18]=' . . 235 mil'; "; // of data via string to expand table. TimeGeo +="n[9]='/* Cenozoic */ '+TimeCen; n[19]=' . . . 65 mil';"; // Can extend from an extension, etc. var Time_Fu_nA = new Array("('Time_Functns: x} Now','Date()')", "('x}Time Code,milliSec.',Time0)", "('x}Universal(GMT)time',Time0+' now.toUTCString()')", "('','')", "('*} Count Down Timer',TimCntDn)", "('','')", "('s} Dates in JavaScript',JSdate)", "('*} . Days Difference',TimeDDif)", "('n} . Date Difference',TimeDif)", "('','')", "('','')", "('s} Geologic Timetable',TimeGeo)", // Source code at Time_Fcns "('','')", "('','')", "('','')");
// ****************************** Catagory 3: Special Programs - default selection *********
var Special_nA = new Array("('Special pg} root . (x)^.5','Math.pow(x,0.5)')", "('','')", "('n} Peak Flow, nwIL',CHpkILnw)", // source code at Civ_Hydro group "('n} Rational Meth, nwIL',CHratIln)", "('n} Stormwater Storage',CHdet)", "('n} Hyd.Control Struct.',CHydCStr)", "('n} Normal Open Chan.',CHydMan)", "('','')", "('n}Cap.Recov:loan pay',FinanceCR)", // source code at Finance group "('n} sgl.pay: Comp.Amt.',FinanceCA)", "('n} unif.pay: Comp.Amt.',FinanceCU)", "('n} sgl.pay: Pres.Worth',FinancePs)", "('n}unif.pay: Pres.Worth',FinancePu)", "('n} unif.pay: Sink.Fund',FinanceSF)", "('','')", "('','')", "('','')", "('','')", "('','')");
var User_01_nA = new Array("('User_01 . . . . . blank set','Set-up for user function group')", "('x} . . .','')", "('x} . . .','')", "('x} . . .','')", "('x} . . .','')", "('x} . . .','')", "('x} . . .','')", "('x} . . .','')", "('x} . . .','')", "('x} . . .','')", "('x} . . .','')", "('','')");
var User_02_nA = new Array("('User_02 . . . . . blank set','Set-up for user function group')", "('x} . . .','')", "('x} . . .','')", "('x} . . .','')", "('x} . . .','')", "('x} . . .','')", "('x} . . .','')", "('x} . . .','')", "('x} . . .','')", "('x} . . .','')", "('x} . . .','')", "('','')");
var User_03_nA = new Array("('User_03 . . . . . blank set','Set-up for user function group')", "('x} . . .','')", "('x} . . .','')", "('x} . . .','')", "('x} . . .','')", "('x} . . .','')", "('x} . . .','')", "('x} . . .','')", "('x} . . .','')", "('x} . . .','')", "('x} . . .','')", "('','')");
// GrabNval: sting containing function GrabN to populate s-array to n[st..en] located in Materials area var CivHS="/*Following stds tables based on typical values (IL DOT 1975). Consult local DOT. NOTES: "; CivHS +="Design Hourly Volume, DHV, typically 10-20% of Average Daily Traffic, ADT, enclosed in [ ] "; CivHS +="in tables. Slopes are denoted by horiz.dist : 1-vertical. Stopping Site Dist. approx. 6-sec"; CivHS +=" at design speed, Passing Site Dist.~25-sec. Minimum K (=L/A =vert.curve.length / algebraic"; CivHS +=" difference in grades) for drainage ~1.43. External, E=AL/8. Degree of Curve, D=5729.6/radius."; var CivHS0=GrabNval+" n[0]='Design, mph'; n[1]=' . . . Class'; n[2]='drainage, yr.';"; CivHS0 +=" n[3]='Site.d Stop,ft'; n[4]=' . . . . . Pass,ft'; n[5]='max.grade%'; n[6]='Sag Curve K'; "; CivHS0 +="n[7]='Crest: Stop,K'; n[8]='Crest: Pass,K'; n[9]='Horiz: max,D'; s =new Array"; var CivHS70=CivHS0+"(70,'Major','50-30[<750]',625,2500,'3up-5dn',1.45,2.6,23,3); GrabN(s,10,20);"; var CivHS60=CivHS0+"(60,'Area Service','50-30[<750]',525,2100,5,1,1.6,17.49,5); GrabN(s,10,20);"; var CivHS50=CivHS0+"(50,'Collectr[<750]','30-25',400,1800,6,0.75,0.9,9.84,7.5); GrabN(s,10,20);"; var CivHS40=CivHS0+"(40,'Collectr[<250]',20,275,1500,7,0.55,0.55,6.83,12.5); GrabN(s,10,20);"; var CivHS30=CivHS0+"(30,'Rd.Dist.[<150]','~10',200,1100,8,0.35,0.33,3.67,23); GrabN(s,10,20);"; var CivVC=" FCN. FOR VERT.CURVE CALCULATION*/ function GetEl(sta) {var xEl =0; if (sta/1 < PIst/1) "; CivVC +="{xEl=PIel-(PIst-sta)*G1/100; if (sta/1>PCst/1){xEl+=Math.pow((sta-PCst)*2/L,2)*Ex}} else "; CivVC +="{xEl=PIel-(PIst-sta)*G2/100; if (sta/1<PTst/1){xEl+=Math.pow((PTst-sta)*2/L,2)*Ex}} return xEl} "; // Vert.Curve is example of a data entry screen, with the data saved for use in a next screen // to generate a series of output values. Data could also be entered directly or pasted from // a text file. var CivVC1="/*READ! Vertical Curve contains 2 procedures: First for curve data: enter curve Length {eg.400};"; CivVC1 +=" grade,% to PI (all grades looking to increased stations, enter '-' for negative){eg.-2}; "; CivVC1 +="PI station (do not insert '+'){eg. sta 10+00=1000} & elevation {eg.200.00}; & grade,% away from"; CivVC1 +=" PI {eg. 1}. The V.C. E- & K-values will be displayed {eg. 1.5 & 133.3}. An unk. odd station may"; CivVC1 +=" be input {eg. 950} to obtain elev. {eg.201.844}. The Curve Data is saved to m-memory to be used"; CivVC1 +=" to compute elevations for a series of stations in Vert.Curve Series. "+CivVC+"n[0]='Vert.Curv,"; CivVC1 +=" L<'; var L=n[10]; n[1]=' . . to PI G% <'; var G1=n[11]; n[2]=' . . PI station <';"; CivVC1 +=" var PIst=n[12]; n[3]='PI elevation<'; var PIel=n[13]; n[4]='away PI G%<'; var G2=n[14]; "; CivVC1 +="var Ex=(G2-G1)*L/800; n[5]='E='+Ex; n[15]='K='+0.01*L/Math.abs(G2-G1); var PCst=PIst-L/2; "; CivVC1 +="n[6]='pc.sta='+PCst; var PCel=PIel -G1*L/200; n[16]='pc.el='+PCel; var PTst=PIst/1+L/2; "; CivVC1 +="n[7]='pt.sta='+PTst; var PTel=PIel/1 +G2*L/200; n[17]='pt.el='+PTel; n[8]='input station<'; "; CivVC1 +="n[9]='<data to m)'; var xSt=n[18]; n[19]='elev '+GetEl(xSt); /*end DATA ENTRY, SAVE DATA to"; CivVC1 +=" m-mem.*/ m='VC.dta,'+L+','+G1+','+PIst+','+PIel+','+G2+','+PCst+','+PTst+','+Ex; "; var CivVC2="/*READ! Vert.Curve Data must first be input to m-memory. This can be done by running Vert.Curve"; CivVC2 +=" data or pasting previously saved data from a text file to the m-box. The first point 'VC.dta' "; CivVC2 +="can be augmented with a name--include NO Comas! Then a series of stations based on starting "; CivVC2 +="station {eg.700} & increment {eg.50} can be slisted. Can repeat by changing start or increment. "; CivVC2 +=CivVC+"var VCd=m.split(','); L=VCd[1]; G1=VCd[2]; PIst=VCd[3]; PIel=VCd[4]; G2=VCd[5]; "; CivVC2 +="PCst=VCd[6]; PTst=VCd[7]; Ex=VCd[8]; n[0]='list:start sta <'; L=VCd[1]; G1=VCd[2]; PIst=VCd[3]; "; CivVC2 +="PIel=VCd[4]; G2=VCd[5]; PCst=VCd[6]; PTst=VCd[7]; Ex=VCd[8]; /*listing*/ var st=n[10]; "; CivVC2 +="n[1]=' . increment<'; var i=n[11]; for (j=0;j<8;j++){xSt=st/1+j*i; n[j+2]='sta '+xSt; "; CivVC2 +="n[j+12]='elev '+GetEl(xSt)}";
var Civ_Hig_nA = new Array("('Civ_Highway, Survey','')", "('s} __Geometric Stds__',CivHS)", "('s} Std. 70-mph design',CivHS70)", "('s} Std. 60-mph design',CivHS60)", "('s} Std. 50-mph design',CivHS50)", "('s} Std. 40-mph design',CivHS40)", "('s} Std. 30-mph design',CivHS30)", "('x} . . .','')", "('n} Vert.Curve data.in',CivVC1)", "('x} Vert.Curve series.out',CivVC2)", "('n} H.Curv. tan.offset.dta','')", "('x} . . .','')", "('n} H.Curv. deflect.dta','')", "('x} . . .','')", "('x} . . .','')", "('x} . . .','')", "('x} . . .','')", "('','')");
var CHyd0="Q=V*A // Continuity Equation: for consistent units: cubic feet (or meters)/sec "; CHyd0 += "= ft (or m)/sec, velocity * area, sq.ft (or sq.m). Without any inflow or outflow, "; CHyd0 += "Q is constant between sections 1 & 2, therefore: V1*A1 = V2*A2."; var CHydB="Z1 +V1*V1/(2*g) +density*V1 = Z2 +V2*V2/(2*g) +frict.head +density*V2 //Bernoulli"; var CHpkILnw="/*Hydrology highly dependent on local climate. These methods developed for northwest "; CHpkILnw +="Illinois. US units; 3-variations: eg. 330 acres, 1% impervious, main channel slope= "; CHpkILnw +="1.5%; output, in cfs, is for 4 recurrence intervals |2-yr|10yr||30yr|100y| the top, "; CHpkILnw +="n5, row computed by a strictly local method, depending only on area; the second row, n6, "; CHpkILnw +="modifies the first for urbanization; the 3rd row, n7, is from regional regression equations "; CHpkILnw +="(Curtis,USGS,1987) for unmod. rural basins. By the eg. inputs, the 2-year peaks estim. "; CHpkILnw +="114,116,97 cfs. 3.3 ft. on last line is APPROX. channel flow depth,2-yr (Prugh,USGS,1976).*/"; CHpkILnw +=" n[0]='_Peaks_cfs_'; n[10]='_for_n.w.IL_'; n[1]=' Drain acre<'; n[2]=' . imperv.%<'; "; CHpkILnw +="n[3]=' ch.slope%<'; n[4]='Q-2_|_-10 cfs'; n[14]='30yr_|_100yr'; var A=n[11]; "; CHpkILnw +="var i=n[12]; var s=n[13]; function OQ(q){var d=0; if (q<10){d=1} return Mr(q,d)} "; CHpkILnw +="/*WinCo comp.*/ var Q2=1.56*Math.pow(A,0.74); if (A>3200){Q2*=(2.42-0.176*Math.log(A))}"; CHpkILnw +=" function WinCo(y){var Qy = Q2*(9*Math.pow(y,0.17)-7.2)/(1.8+Math.pow(y,0.17)); "; CHpkILnw +="return Qy} /* built-in rel. s decrease as A incr.*/ n[5]=OQ(Q2)+' | '+OQ(WinCo(10));"; CHpkILnw +=" n[15]=OQ(WinCo(30))+' | '+OQ(WinCo(100)); function WUrb(y){return WinCo(y)*(1+0.02*i)}"; CHpkILnw +="n[6]=OQ(Q2*(1+0.02*i))+' | '+OQ(WUrb(10)); n[16]=OQ(WUrb(30))+' | '+OQ(WUrb(100)); "; CHpkILnw +="/*USGS comp.*/ function USG(y){var p=0.51*Math.pow(0.86,1/y)*Math.pow(y,0.028); "; CHpkILnw +="return OQ(34*Math.pow(0.29,1/y)*Math.pow(y,0.11)*Math.pow(A/640,0.786)*Math.pow(s*52.8,p))}"; CHpkILnw +=" n[7]=USG(2)+' | '+USG(10); n[17]=USG(30)+' | '+USG(100); /*Depth comp.*/ n[8]='chan_depth';"; CHpkILnw +=" n[18]='_aprox_ft_'; function Ud(y){var r=0.283*Math.pow(1.14,1/y)*Math.pow(y,-0.02); "; CHpkILnw +="return Mr(1.12*Math.pow(0.49,1/y)*Math.pow(y,0.104)*Math.pow(USG(2),r),1)}; "; CHpkILnw +="n[9]=' '+Ud(2)+' | '+Ud(10); n[19]=' '+Ud(30)+' | '+Ud(100)"; var CHratIln="/*Rational Formula: Q=ciA (based on 1-in/hr rainfall on 1 acre=1.008cfs) where c=runoff coeff."; CHratIln +="=runoff/rainfall; {depend. on soils, cover, rain, etc.} ~.9-.95 impervious, ~.2-.3 pervious, "; CHratIln +="composit~.45 for 25% imperv. urban subdiv, etc. i=rainfall,in/hr {key assumption: rain of "; CHratIln +="duration of time of concentration, for flow to travel from most remote part of drainage basin,"; CHratIln +=" herein based on ISWS Bul.70 for NW Illinois. There is a subroutine using Kirpick equation for"; CHratIln +=" Tc, minutes, flow in natural channels, grass ditches, bare-dirt overland. Multiply by "; CHratIln +="~2 grass overland, ~0.4 conc.sheet, ~0.2 paved channel: add components. Manual enter Final Tc."; CHratIln +=" eg. for 100-yr event, with channel travel 2300-ft & 50-ft fall yields 13.22-min in channel, "; CHratIln +="Enter 20-min to add ~7-m sheetfl (300ft w/4ft fall)x2 to channel (all depends on basin config.)"; CHratIln +=" With c=0.3 on 48 acres. Routine calculates 7 in/hour for 20-min, 100-yr rain [Total rain in "; CHratIln +="this time would be 7in/hr*20min/60min/hr =2.33-in.] Resulting Q=101-cfs.*/ n[1]='Design Yr. <';"; CHratIln +="n[0]='Rational_nwIL'; n[10]='_Q=ciA_cfs_'; n[2]='travel.dist,ft <'; n[3]=' . .Tc. . fall,ft <';"; CHratIln +=" n[4]='partl Tc,min>'; var d=n[12]; n[14]='__'+Mr(0.00781*Math.pow(d*d*d/n[13],0.385),2)+'__'; "; CHratIln +="n[5]='Fin. Tc,min <'; n[6]='compos. c <'; n[7]='drain.acres<'; n[8]='rain, i, in/hr >'; "; CHratIln +="n[18]=0.9465*Math.pow(0.843,1/n[11])*Math.pow(n[11],0.204)/(0.11+0.0211*Math.pow(n[15],0.805));"; CHratIln +=" n[9]=' . . . . Q, cfs >'; n[19]=n[16]*n[17]*n[18];"; var CHdet="/*2 calculations presented: first is a one-step route, VERY approximate but applicable "; CHdet +="anywhere, uses a triangular inflow hydrograph clipped by a triangular (at least on the "; CHdet +="rising limb) outflow at the time to peak of outflow. eg. 250cfs inflow peak at 30 minutes "; CHdet +="can be reduced to 200cfs outflow if about 2.5 acre.ft of storage applied. Secondly, in an "; CHdet +="algorithm tied to ISGS Bulletin 70 for Northwestern Illinois, the area and runoff coeff."; CHdet +=" and allowable release rate (in cfs per acre developed) are used to return a factor in "; CHdet +="ft.depth of storage required which becomes acre feet when multiplied by the acreage, eg. "; CHdet +="50 acres developed to a C-value of 0.95, if the allowable release is 0.2cfs/acre, needs 17.2"; CHdet +=" acre.feet of stormwater detention volume.*/ n[0]='Storage_Vol.'; n[10]='_acre_feet_'; "; CHdet +="n[1]='1-st pk, cfs <'; n[2]='. min. to pk<'; n[3]='. outflo,cfs <'; n[4]='vol.req. ac.ft>';"; CHdet +=" n[14]=(n[11]-n[13])*n[12]/600; n[5]='_nwIl_acre <'; n[6]='. runoff coef.<'; n[7]="; CHdet +="'. 0ut, cfs/ac <'; n[8]='stor.depth, ft>'; n[18]=0.27*n[16]/Math.pow(n[17],0.25) -0.04;"; CHdet +=" n[9]='vol.req. ac.ft>'; n[19]=n[18]*n[15];"; var CHydCStr="/*Three control structures share head Input. eg. with 2.75ft head, a 10ft long, broad "; CHydCStr +="crested weir spills 141 cfs. Using the same head, a rectangular orifice, 1ft wide by "; CHydCStr +="0.5ft high, passes 3.8cfs, a round orifice, 0.75ft (9-inch) dia. delivers 3.3cfs.*/"; CHydCStr +="n[0]='Head feet . <'; n[1]=' - WEIR Q ='; n[11]=' 3.1L*H**1.5'; n[2]='length, feet <'; "; CHydCStr +="n[3]='= Flow, cfs . >'; n[13]=3.1*n[12]*Math.pow(n[10],1.5); n[4]='-ORIFICE Q='; "; CHydCStr +="n[14]='0.6A(2gh)**.5'; n[5]='Rect:width ft<'; n[6]=' . . . height,ft.<'; n[7]=n[3]; "; CHydCStr +="n[17]=0.6*n[15]*n[16]*Math.pow(2*32.15*(n[10]-n[16]/2),0.5); n[8]='Circ: Dia. ft. <'; "; CHydCStr +="n[9]=n[3]; n[19]=0.6*3.1416*n[18]*n[18]/4*Math.pow(2*32.15*(n[10]-n[18]/2),0.5)"; var CHydMan="/*For Normal Flow: by gravity only, surface parallel to channel bottom. v, ft/sec =1.486*pow"; CHydMan +="(Hyd.rad,2/3)*sqrt(s,ft/ft)/n & Q=vA. {Hydraulic Radius =area of section,A/wetted perimeter}."; CHydMan +=" n =Manning roughness coeff. ~.009-.012 plastic,glass,conc.pipe; ~.013-.025: clay,brick,to "; CHydMan +="asphalt; ~.02-.025: corr.metal:paved bottom to plain; ~.025-.03: channel, straight,dirt to "; CHydMan +="short grass; ~.035-.04: smooth rip.rap to weedy; ~.06-.14+: brushy, winding, to extremely "; CHydMan +="dense. sCal uses a single form for full-pipe & trapezoidal channel analysis, so the n- & s-"; CHydMan +="inputs are shared. One ignores the inappropriate output. eg: a conc.pipe and a conc.channel,"; CHydMan +=" both with n=0.012 & s=0.5% (.5ft fall per 100ft run). The PIPE has dia. 1.25ft (15-inches) "; CHydMan +="yielding v=1.23 sq.ft & a Normal Q of 4.9cfs. The CHANNEL has a left side slope of 4:1 (4 "; CHydMan +="units horiz to 1 vert.); bottom width of 4ft, & right side slope of 2:1. Assuming a flow "; CHydMan +="depth of 1.5ft: the top width is 15ft, Froude no. of 1.52 (>1, supercritical), v=8.8ft/sec,"; CHydMan +=" and Q=139 cfs. [Note the flexibility of trapezoidal shape: v-ditch if bot.wid set to 0, "; CHydMan +="box-shape if side.slopes=0. As a trick feature, if either lt, rt or both side slopes set to "; CHydMan +="exactly 0.01, the respective boundry is ignored in the wet.perim calculation, allowing "; CHydMan +="subsections of complex channel/floodplain to add manually.]*/"; CHydMan +="n[0]=' Manning n <'; n[1]='lon.slope%<'; var sn=1.486*Math.sqrt(n[11]/100)/n[10]; /*<COMMON "; CHydMan +=". PIPE>*/ n[2]='PIPE dia, ft <'; var ap=3.1416*n[12]*n[12]/4; n[3]='A, s.f='+ap; "; CHydMan +="n[13]='Q,cfs=' +sn*Math.pow(n[12]/4,0.667)*ap; /*TRAP.CHANNEL>*/ n[4]='|_/Chan.lt.ss<'; "; CHydMan +="n[5]=' bot.width, ft <'; n[6]=' . . right.ss:1 <'; n[7]='flow depth,ft<'; var d2=n[17]*n[17];"; CHydMan +=" var tw=(n[14]*n[17]+n[15]/1+n[16]*n[17]); n[8]='top.w,ft='+tw; var ac=n[17]*(tw+n[15]/1)/2; "; CHydMan +="var wp=n[15]/1; if (n[14]!=0.01){wp+=Math.sqrt(n[14]*n[14]*d2+d2)}; if (n[16]!=0.01){wp+="; CHydMan +="Math.sqrt(n[16]*n[16]*d2+d2)}; var vc=sn*Math.pow(ac/wp,0.667); n[18]='V,ft/s='+vc; "; CHydMan +="n[9]='froud#='+vc/Math.sqrt(32.15*ac/tw); n[19]='Q,cfs='+ac*vc;"; var Civ_Hyd_nA = new Array("('Civ_Hydro-Hydraulics',CHyd0)", "('s} Energy Ballance',CHydB)", "('','')", "('n} Peak Flow, nwIL',CHpkILnw)", "('n} Rational Meth, nwIL',CHratIln)", "('n} Stormwater Storage',CHdet)", "('*} Brd.Crest Weir, Q,cfs','3.1*(/*weirLength,ft*/ )*Math.pow((/*head,ft*/ ),1.5)')", "('n} Hyd.Control Struct.',CHydCStr)", "('n} Normal Open Chan.',CHydMan)", "('','')", "('','')", "('','')"); var StrLL="var f=(/*TYP.Live Loads (see local code for actual) lb/sf >for kg/sm, replace 1 w/ 4.88*/1.0); "; StrLL +="n[0]='__Use__'; n[10]='_Typ_L.L_'; n[1]='heavy.mfg.'; n[11]=Mr(250*f,0); n[2]='l.mfg,warehse'; "; StrLL +="n[12]=Mr(125*f,0); n[3]='gym,dining'; n[13]=Mr(100*f,0); n[4]='hall,balcony'; n[14]=Mr(80*f,0); "; StrLL+="n[5]='1st.fl retail'; n[15]=Mr(75*f,0); n[6]='theater:fix.seat'; n[16]=Mr(60*f,0); n[7]='office,"; StrLL +="car.park'; n[17]=Mr(50*f,0); n[8]='residential'; n[18]=Mr(40*f,0); n[9]='no-access areas'; "; StrLL +="n[19]=Mr(20*f,0);"; var StrMat="/*(Youngs) MODULUS OF ELASTICITY, E: Mat'l: mod. E commonly: STEEL: mild structural (A36) 30 "; StrMat +="E+6 psi, high-strength 29 & variable many grades; WOOD: has even more grades. Machine stress "; StrMat +="rated lumber has some consistency: f(b) values run from 900psi to 3300psi (probably a rare "; StrMat +="piece of wood) in 300psi increments--with an extra desig. at 1650psi. Modulus of elasticity, "; StrMat +="E, varies from 1,000,000psi to 2,600,000 according to the general rule of E=1,200,000psi + "; StrMat +="(f(b)-1200)*2000/3, eg. 1200psi rated has typical E=1.2mil.psi; 1500psi ->E 1.4mil.psi. As "; StrMat +="for all timber, allowable f(b) can be increased by 15% if repetative members are used in an "; StrMat +="element. Thus, structural glue laminated timber runs f(b) from 1600-2400psi. (in 200psi "; StrMat +="increments) while E corresponds with 1.6-1.8 mil.psi. [Reduce both values by 20% for wet use "; StrMat +="conditions.] Visually rated lumber is more variable, TENDING to the samy TYPE of relation. "; StrMat +="Doug.Fir,Larch, Southern Pine have similar ranges: 1200-2000psi, E 1.5-1.9mil.psi for structural"; StrMat +=" types, S.Pine perhaps 10% higher. Other species 10% and more, lower. ALLOWABLE EXTREME FIBER "; StrMat +="STRESS IN BENDING: f(b)>M/s :typically STEEL-(By AISC in compact sections=0.66x Yield Strength, "; StrMat +="for non-compact=0.6x Fy ->) mild (A36 0.66*36ksi or 0.6*36) 24 0r 22 [ksi], {note F-ultimate"; StrMat +="~60+ksi}, high strength (Fy60) 39.6 or 60 [ksi] {F-ult.~85ksi}; WOOD-see discussion under mod.E"; StrMat +=" above. Code Max. DEFLECTION= L/360 for habitable floors, L/240 for ceilings w/o plaster. SHEAR,"; StrMat +=" fv [steel~.4fb, wood var] --allowable shear strength (US) lb/sq.in. or (SI) kg/sq.cm. to carry "; StrMat +="the shear stress in col.K-L. For STEEL, 0.4 * allowable extreme fiber stress in bending is "; StrMat +="general value, tho this operates only on the gross section = web thickness * beam depth. "; StrMat +="WOOD is susceptible to Horizontal Shear = 3/2 times the normal vertical shear, which is computed"; StrMat +=" in col.K-L. In other words, the computed shear stress must be <= 2/3 the Horiz. Shear Strength"; StrMat +="which varies greatly between species of wood, but little within each species for structural "; StrMat +="grades. eg. Douglas Fir, Larch, Hemlock: horiz.shear strength is 85 to 95 psi. 2/3 of that = "; StrMat +="60psi. <---value to enter. Similar 2/3 horiz.shear values: balsam fir, 40; Cal.redwood, 60 "; StrMat +="(or 97 for clear heart str.); eastern spruce, southern pine, 55; white pine, 43; Structural "; StrMat +="Glue Laminated timbers tend to have shorz.shear strengths 1.8x the single board strength if "; StrMat +="load is perpendicular to wide face, 1.6x if loaded parallel to wide face, deduct 20psf if under"; StrMat +=" wet service conditions. NOTE: These are generalities. Consult ratings specific to "; StrMat +="available grades. SPECIFIC GRAVITY: typically: STEEL mild (A36) 7.86, high-strength 8.0; WOOD"; StrMat +=" [at 12% moisture content, factor 1.15 for 20% moist, 0.92 oven dry]: HARDWOODS: Hickory 0.7, "; StrMat +="Oak, Birch, Maple .6, Elm .55, Poplar .43: SOFTWOODS: Southern Pine 0.52, Douglas Fir .48, "; StrMat +="Spruce .4, White Pine, Redwood .38, Cedar .35 */"; var StrSecR="/*Rectangular Section Properties: units either US or SI as long as consistent. eg. say units=i:"; StrSecR +=" Beam =2i wide x 6i deep, then A=12ii, moment of inertia,I=36iiii, section modulus,S=I/c=12iii,"; StrSecR +=" radius of gyration,r=1.73. All this is about a horiz.axis through the centroid,c=3i from base."; StrSecR +=" If the axis translated 3i from centroid (i.e. to base), I=144, r=3.46. {Note: move axis x "; StrSecR +="units, I=I+Axx} OR if the axis rotated 30-degrees, in std.directn: ccw from the horiz, I=28, "; StrSecR +="r=1.53.*/ n[0]='_Sect_Prop_'; n[10]='_rectangular_'; n[1]='base width <'; var b=n[11]; n[2]="; StrSecR +="'beam dep. <'; var d=n[12]; n[3]='A='+Fo(b*d); var I=b*d*d*d/12; n[4]='I='+Fo(I); n[13]='S="; StrSecR +="'+Fo(b*d*d/6); n[14]='r='+Fo(Math.sqrt(d*d/12)); n[5]='_move_axis_'; n[15]='>_centroid_>'; n[6]"; StrSecR +="='translate.c.<'; var c=n[16]; I+=b*d*c*c; n[7]='I='+Fo(I); n[17]='r='+Fo(Math.sqrt(I/(b*d))); "; StrSecR +="var a=n[18]; n[8]='rotate.h.ang<'; var c1=Math.sin(a*Math.PI/180); var c2=Math.cos(a*Math.PI/"; StrSecR +="180); c1=b*b*c1*c1 +d*d*c2*c2; n[9]='I='+Fo(b*d*c1/12); n[19]='r='+Fo(Math.sqrt(c1/12));"; var StrSecI="/*Rect. based shapes: Outer dimensions, base & depth entered. Rather than enter web & flange "; StrSecI +="thick., the inner rectangle entered. H-shape is ][ at y-axis. Definitions in 'Rectang.sect.'. "; StrSecI +="eg. 4x6 outside, 2x5 inside dim: A=14 for any orientation; S=17.1 as I-shape, etc, S=12.1 as "; StrSecI +="H.*/ n[0]='[],I,H shapes'; n[10]='_outer_dim_'; n[1]='base width <'; var b=n[11]; n[2]='beam "; StrSecI +="dep. <'; var d=n[12]; n[3]='. inner_wid.<'; var b1=n[13]; n[4]='.inner_dep.<'; var d1=n[14]; "; StrSecI +="n[5]=' . common >'; n[15]='A='+Fo(b*d -b1*d1); n[6]='I, [] shape_>'; var I=(b*d*d*d "; StrSecI +="-b1*d1*d1*d1)/12; n[16]='S='+Fo(I*2/d); n[7]='I='+Fo(I); n[17]='r='+Fo(Math.sqrt(I/"; StrSecI +="(b*d-b1*d1))); n[8]='_H shape_>'; var f=b-b1; var t=d-d1; I=(f*d*d*d +b1*t*t*t)/12; "; StrSecI +="n[18]='S='+Fo(I*2/d); n[9]='I='+Fo(I); n[19]='r='+Fo(Math.sqrt(I/(b*d-b1*d1)));"; var StrSecL="/*L & trapezoid shapes: eg. L-shape: 6d x 4w with stem thicknes of 1 & lower leg 0.5 thick; "; StrSecL +="A=7.5, centroid distance & S rel. to bottom =2.45, =11.06, I=27.1, r=1.9. eg. for trapezoidal "; StrSecL +="shape, L/: using same dimensions, except low leg thick n/a, centroid to bottom =2.4, A=15.0, "; StrSecL +="S rel.bottom=14.2, I=39.6, r=1.625.*/ n[0]='L & L/ sh.dp<'; var d=n[10]; n[1]='top, stem.w<'; "; StrSecL +="var t=n[11]; n[2]=' . bot.width <'; var b=n[12]; n[3]='L_bot.thick <'; var t2=n[13]; n[4]="; StrSecL +="'centroid-bot>'; var c=(t*d*d +(b-t)*t2*t2)/(2*(t*d+(b-t)*t2)); n[14]=c; n[5]='A='+(b*t2+t*"; StrSecL +="(d-t2))/1; var I=(b*c*c*c -(b-t)*(c-t2)*(c-t2)*(c-t2) +t*(d-c)*(d-c)*(d-c))/3; n[15]='S.bot='+"; StrSecL +="I/c; n[6]='I='+I; n[16]='r='+Math.sqrt(I/(b*t2 +t*(d-t2))); n[7]='L/ _centr-b_>'; "; StrSecL +="c=d*(2*t+b/1)/(3*(b/1+t/1)); n[17]=c; var A=d*(b/1+t/1)/2; n[8]='A='+A; I=d*d*d*(b*b+4*b*t+t*t)"; StrSecL +="/(36*(b/1+t/1)); n[18]='S.bot='+I/c; n[9]='I='+I; n[19]='r='+Math.sqrt(I/A);"; var StrSecO="/*Circular: eg. Solid dia.2, A=3.14, I=S=.785, etc. eg. pipe, inner dia 1.25, A=1.91, I=.66.*/"; StrSecO +=" n[0]='CIRCULAR'; n[10]='_solid_bar_'; n[1]=' . diameter <'; var d=n[11]; var PI=Math.PI; n[2]="; StrSecO +="'A='+PI*d*d/4; var I=PI*d*d*d*d/64; n[12]='S='+2*I/d; n[3]='I='+I; n[13]='r='+d/4; n[4]=''; "; StrSecO +="n[14]='_hollow_pipe'; n[5]=' . inner dia.<'; var d1=n[15]; n[6]='A='+PI*(d*d-d1*d1)/4; I=PI*"; StrSecO +="(d*d*d*d-d1*d1*d1*d1)/64; n[16]='S='+2*I/d; n[7]='I='+I; n[17]='r='+Math.sqrt(d*d+d1*d1)/4;"; var StrLum="/*US dimensional lumber up to 6-in, is dressed 1/2-inch less than nominal, 8-in & bigger is 3/4"; StrLum +="-inch short. eg. a 2x4 is 1.5-in x 3.5-in, has area=5.25sq.in, & S=3.06cu.in in 4-in directn. "; StrLum +="typical (MUST BE CONFIRMED!) spruce, white pine, etc. with allowable f-bending 900psi can "; StrLum +="a moment,M =230ft-lb, with compressive strength (parallel to grain, allow 900psi) C=31,500lb, "; StrLum +="& dead load (at 25 lb/c.f) w=0.9 lb/ft. Douglas fir, select structural, with f-b of 1600psi "; StrLum +="capacity M=408 ft.lb, C=47,250 lb (all subject to length/r for buckling), & w=1.1 lb/ft.*/ "; StrLum +="n[0]='Lumber_size'; n[10]='_nominal_'; n[1]=' . . width, in <'; var b=n[11]-0.5; if (b>6){b-="; StrLum +="0.25} n[2]=' . height, in <'; var d=n[12]-0.5; if (d>6){d-=0.25}; n[3]=' . . . . actual >'; "; StrLum +="n[13]=Fo(b)+' x '+Fo(d); n[4]='A,s.in.='+d*b; var S=b*d*d/6; n[14]='S,cu.in='+S; n[5]='I,in**4="; StrLum +="'+b*d*d*d/12; n[15]='r,in='+Math.sqrt(d*d/12); n[6]='_typ_spruce>'; n[16]='M,ft.lb='+900*S/12; "; StrLum +="n[7]='C,lb='+6000*b*d; n[17]='w,lb/ft='+25*b*d/144; n[8]='typ_d.fir_ss.>'; n[18]='M,ft.lb='"; StrLum +="+1600*S/12; n[9]='C,lb='+9000*b*d; n[19]='w,lb/ft='+30*b*d/144;"; var StBmSS="/*Simply Supported Beam: eg. 8-ft span, unif. load,w=50lb/ft; point load of 200lb located 6-ft "; StBmSS +="from left end. Check beam at 3-ft from left end: (Note- max moment,M will occur between the "; StBmSS +="mid-point (4-ft) & 6-ft where point loaded, this for illustration.) Beam f-b, allow. extreme "; StBmSS +="fiber strength in bending, 1400psi, and combined EI (mod. of elasticity 1.3E6 psi times I "; StBmSS +="assumed 178 in.-to-4th-power) =231.4E6 lb-sq.in. Output: left & right reactions, R=250 & 350 "; StBmSS +="lb, shear, V= 100lb. (V/A of section tests against f-v, 3V/2 for horiz.shear) Mx(at pt.x)=525ft"; StBmSS +="=.lb; min. S =M/f 4.5, deflection=0.028-in (genl: defl.<L/360 (8*12/360=0.26-in) if plastered, "; StBmSS +="L/240 otherwise).*/ n[0]='.--L--. Len,ft <'; var L=n[10]; n[1]='unif. w: lb/ft <'; var w=n[11];"; StBmSS +=" n[2]='sgl.ld: P,lb <'; var P=n[12]; n[3]='dist.P.left: ft<'; var a=n[13]; n[4]='chk.pt.x: "; StBmSS +="lt,ft<'; var X=n[14]; n[5]='Beam_f,psi<'; n[6]='combin.EI <'; var Rlw=w*L/2; var Rlp=P*(L-a)/L;"; StBmSS +=" n[7]='R-lt,lb='+(Rlw/1 +Rlp/1); var Rrw=w*L/2; var Rrp=P*a/L; n[17]='R-rt,lb='+(Rrw/1 +Rrp/1);"; StBmSS+=" var Vx=w*(L/2-X); var Mx=w*X*(L-X)/2; if (X<a){Vx+=Rlp; Mx+=Rlp*X} else {Vx+=Rrp; Mx+=Rrp*(L-X)}"; StBmSS +=" n[8]='Vx,lb='+Vx; n[18]='Mx,ft.lb='+Mx; n[9]='S,c.in>'+Mx*12/n[15]; var dx=P*1728/(6*n[16]*L);"; StBmSS +=" if (X<a){dx*=X*(L-a)*(L*L-(L-a)*(L-a)-X*X)} else {dx*=(L-X)*a*(L*L-a*a-(L-X)*(L-X))} "; StBmSS +="dx+=w*X*(L*L*L -2*L*X*X +X*X*X)*1728/(24*n[16]); n[19]='defl,in='+dx;"; var Civ_Str_nA = new Array("('Civ_Structures . . . s} . .','Def. in 1st ea. group: know thy limits!')", "('s} Typical L.L. table',StrLL)", "('s} Matl, Properties',StrMat)", "(' . . .','')", "('n} Section: Rectangle',StrSecR)", "('n} Sec: [], I, H shapes',StrSecI)", "('n} Sec: L, trap. shape',StrSecL)", "('n} Sec: Circular shape',StrSecO)", "('n} Sec: std.US lumber',StrLum)", "(' . . .','')", "('n} Beam: simple sup.',StBmSS)", "(' . . .','')", "(' . . .','')", "(' . . .','')", "('','')");
var DataSR="JavaScript is SAFE: no functions a virus can use to destroy data. Which makes saving "; DataSR +="data difficult -must use 'copy'&'paste'. TO SAVE 1)-Use text editor. (Easily obtained: "; DataSR +="View->Source Code->File->New gets NotePad from Internet Explorer; & ->composer page "; DataSR +="from Mozilla; etc.) 2)-Place cursor in box with data. 3)-Edit->Select All->Copy 4)-paste"; DataSR +=" to text file. Data in n[0..19] could be laborious, 1 at a time. sCal provides utility "; DataSR +="to dump all values to the m-cell. User can select order & delimiters (to transfer to a "; DataSR +="spreadsheet or database program); n[index] to restore to sCal (paste to x-cell); etc."; var DataNdM="var d=(/*delimiter*/', '); m=''; for (j=0;j<20;j++){m+=n[j]+d}"; var DataNsM="var d=(/*delimiter*/', '); m=''; for (j=0;j<10;j++){m+=n[j]+d+n[j+10]+d}"; var Quote="'"; var DataNaM="m=''; for (j=0;j<20;j++){m+='n['+j+']='+Quote+n[j]+Quote+'; '}"; var Data_Ma_nA = new Array("('Data_Management s}','for manipulating & displaying data')", "('s} save/restore Data',DataSR)", "('*} n[1..19] > memory',DataNdM)", "('*} n0, n10, n1, n11 >m',DataNsM)", "('x} n[0], n[1], . . . . . > m',DataNaM)", "('','')", "('n} parabola curve fit',PCurv)", //Source at Analytic Geometry "(' . . .','')", "('n} linear regress. 1-var',mRegres)",//Source at Analytic Geometry "('n} linear regress.2-var',nRegres)", //Source at Analytic Geometry "('s} Statistics on data','see Probability, Statistics group')", "('x} Pseudo-Graphing',J_Graph)", //Source at JavaScript samples "('n} Interpolate / Extrap.',Interp)", //Source at JavaScript samples "(' . . .','')", "('s} ext.Table(geo time)',TimeGeo)", // Source code at Time_Fcns "(' . . .','')", "('','')");
var RanderI="Instruct: 2 player; select Random Num. above; player-1: [Do], use [n0] to [n9] "; RanderI +="place in cell, [C] to clear x; player-2: [Do], use [n10] to [n19] to place in cell,"; RanderI +=" [C] to clear; back to player-1 & continue alternating until all 20 cells filled. "; RanderI +="OBJECT: place random numbers in order lowest to highest in column. [C]>[Do] Scorder."; var Scorder="var P1=10; P2=10; for (j=0;j<9;j++){if (n[j]>n[j+1]){P1--}} for (j=10;j<19;j++)"; Scorder +="{if (n[j]>n[j+1]){P2--}} m=' P1='+P1+'; P2='+P2"; var CasIns="INSTR: 1 player; select Random No.(1-11) above; [Do], use [n0] to [n19] to place "; CasIns +="in cell' [C] clear, repeat. OBJECT: obtain highest score of closest to 21 total in "; CasIns +="horiz. rows (like Blackjack) combined with highest score of matches (like slots) "; CasIns +="in vert. columns. [C]->[Do] ScoreCasandom to see total. (check source for score "; CasIns +="values; max. 378 on slots +360 blackjack =738, tho 400 good) Variant: 2 players: "; CasIns +="alternating columns for max. slot score. Player completing 21 awarded manual 50 pts."; var ScoreCas="var B=0; P=new Array(0,0); var t=0; var k=0; for(j=0; j<10; j++) {t=n[j]/1+n[j+10]/1;"; ScoreCas +=" if(t>15 && t<22) {B+=Math.pow(t-15,2)} for(i=0;i<2;i++) {k=10*i; if(j<9 && n[k+j]"; ScoreCas +="==n[k+j+1]){P[i]+=n[k+j]/1} if(j>0 && n[k+j]==n[k+j-1]){P[i]+=n[k+j]/1}}} m='Slot-1="; ScoreCas +="'+P[0]+'; Slot-2='+P[1]+'; BlackJack='+B+' for TOTAL='+parseInt(P[0]+P[1]+B)"; var Strateg_nA = new Array("('Strategic Planning . s}','These are games, random numbers, skill varies')", "('x} . . .','')", "('x} Random Num.(0 - 1)','Math.random()')", "('s} RANDER: order no',RanderI)", "('x} Scorder for Rander',Scorder)", "('x} . . .','')", "('x} Random No.(5 - 15)','Math.round(Math.random()*10)+5')", "('s} . . CASANDOM:',CasIns)", "('x} . Score Casandom',ScoreCas)", "('x} . . .','')", "('x} . NO.NINE','')", "('x} . . .','')", "('x} . . .','')", "('x} . . .','')", "(' . . .','')");
// ******** BROWSER DETERMINATION ** set Text size & [Enter] key to invoke xEval like [=] button
var Browser = navigator.appName.substr(0,9); // alert('Browser is '+Browser); var MemSize = "10"; var TxtAreaCol = "26"; // Default (MS Internet Explorer) Text size & TextArea columns if (Browser=='Netscape') // Mozilla is same as Netscape Navigator {MemSize="12"; TxtAreaCol="25";} // Other Browsers may need some manual code work here. function EnterKey_EqButton(e) { // Response to .onkeypress. Other keyCodes could be added. var k=0; if (Browser=='Netscape') {k=e.which} else {k=window.event.keyCode;} if (k==13) {xEval();} } // NOTE: CURSOR MUST BE IN TEXTAREA WHEN PRESSED, OR LAST // DIGIT IN X-DISPLAY IS APPENDED TO END OF EVALUATION. document.onkeypress = EnterKey_EqButton; // if (Browser='Netscape') {document.captureEvents(Event.KEYDOWN|Event.KEYUP);}
// *************************************** MENU POPULATION *****************
function populateGroup(inForm,selected) { // --- sets left GROUP MENUS to chosen right Category var selectedArray = eval(selected.substring(0,7) + "_nA"); while (selectedArray.length < inForm.options.length) { inForm.options[(inForm.options.length - 1)] = null;} for (var i=0; i < selectedArray.length; i++) { eval("inForm.options[i]=" + "new Option" + selectedArray[i]);} // OLDER BROWSERS MAY NEED FOLLOWING LINE TO DISPLAY OPTIONS, Leave out for newer ones: // window.history.go(0); } function setDefaultMenus() { populateGroup(document.sCal.group1,document.sCal.catagory1.options[0].text); populateGroup(document.sCal.group2,document.sCal.catagory2.options[0].text); populateGroup(document.sCal.group3,document.sCal.catagory3.options[0].text); }
// End of JavaScript Calculator sCal in HEAD -->
</script> </HEAD>
<!-- **************** HEAD *********************************************** --> <!-- ********************************************************************* --> <!-- ************************************** BODY ************************* -->
<BODY onLoad="setDefaultMenus()">
<!-- ----------------- JavaScript (sCal) Calculator in BODY of html documant: --> <!-- This is free, open-source, user-modifiable code. R.Mohaupt-Feb,2003 - No Warantee. -->
<form name="sCal"> <table border=1 cellspacing=0 cellpadding=0 width=480> <!-- assign sCal BGCOLOR below, MAIN 2 x 2 table; ^ coordinate TextArea COLS with WIDTH--> <tr valign=top BGCOLOR="yellow">
<td> <!-- *] [] top, left cell: sCal JavaScript Calculator layout table --> <!-- [] [] --------------------------------------- --> <table border=1 cellspacing=0 cellpadding=0 WIDTH=238> <tr> <td colspan=6><b><large><u> JavaScript Calculator </u> . sCal-1ce</large></b></td> </tr> <tr align="center"> <td colspan=1><small><small>Place</small></small></td> <td colspan=4><small><small>Constants, Functions</small></small></td> <td colspan=1><small><small>Apply</small></small></td> </tr> <!-- Top group1 drop-down SELECT menus: can change or add functions --> <tr align="center"> <td><input type="button" value="JS " onClick="JSwork(document.sCal.group1.options[document.sCal.group1.selectedIndex].value)"> </td> <td colspan=4><select name="group1"><option value='Math.PI'>General convert x}. Pi .</option> </select></td> <td><input type="button" Value=">x " onClick="Xwork(document.sCal.group1.options[document.sCal.group1.selectedIndex].value)"> </td> </tr> <!-- Middle group2 SELECT menu: --> <tr align="center"> <td><input type="button" value="JS " onClick="JSwork(document.sCal.group2.options[document.sCal.group2.selectedIndex].value)"> </td> <td colspan=4><SELECT name="group2"><option value="Math.pow(x,2)">Ordinary Math x} . (x)² .</option> </select></td> <td><input type="button" Value=">x " onClick="Xwork(document.sCal.group2.options[document.sCal.group2.selectedIndex].value)"> </td> </tr> <!-- Bottom group3 SELECT menu: Much PROGRAMMABLE AREA available --> <tr align="center"> <td><input type="button" value="JS " onClick="JSwork(document.sCal.group3.options[document.sCal.group3.selectedIndex].value)"> </td> <td colspan=4><SELECT name="group3"><option value="Math.sqrt(x)">Special: *} . root (x)½</option> </select></td> <td><input type="button" Value=">x " onClick="Xwork(document.sCal.group3.options[document.sCal.group3.selectedIndex].value)"> </td> </tr> <tr> <td colspan=6><small><small>Display - x</small></small></td> </tr> <tr> <script language="JavaScript" type="text/javascript"> <!-- document.write('<td colspan=6><TextArea name="IOx" rows=4 COLS='+TxtAreaCol+'></TextArea></td>'); --> </script> </tr> <tr> <td colspan=6><small><small>Memory - m</small></small></td> </tr> <!-- buttons & small MEMORY text box: --> <tr align="center"> <td><input type="button" Value="x›m" onClick="XtoM()"></td> <td><input type="button" Value="m›x" onClick="MtoX()"></td> <td colspan=2> <script language="JavaScript" type="text/javascript"> <!-- document.write('<INPUT TYPE="text" NAME="IOm" VALUE="" SIZE='+MemSize+'>'); --> </script> </td> <td><input type="button" Value="m+" onClick="Mplus()"></td> <td><input type="button" Value="mc" onClick="Mclear()"></td> </tr> <tr> <td colspan=6><small><small>.</small></small></td> </tr> <!-- main layout of CALCULATOR keypad buttons: --> <tr align="center"> <td><input type="button" Value=" 7 " onClick="xPlusEq(7)"></td> <td><input type="button" Value=" 8 " onClick="xPlusEq(8)"></td> <td><input type="button" Value=" 9 " onClick="xPlusEq(9)"></td> <td><input type="button" Value=" ( " onClick="xPlusEq('(')"></td> <td><input type="button" Value=" ) " onClick="xPlusEq(')')"></td> <td><input type="button" Value=" C " onClick="Clear()"></td> </tr> <tr align="center"> <td><input type="button" Value=" 4 " onClick="xPlusEq(4)"></td> <td><input type="button" Value=" 5 " onClick="xPlusEq(5)"></td> <td><input type="button" Value=" 6 " onClick="xPlusEq(6)"></td> <td><input type="button" Value=" * " onClick="xPlusEq('*')"></td> <td><input type="button" Value=" / " onClick="xPlusEq('/')"></td> <td><input type="button" Value=" < " onClick="BkSpace()"></td> </tr> <tr align="center"> <td><input type="button" Value=" 1 " onClick="xPlusEq(1)"></td> <td><input type="button" Value=" 2 " onClick="xPlusEq(2)"></td> <td><input type="button" Value=" 3 " onClick="xPlusEq(3)"></td> <td><input type="button" Value=" + " onClick="xPlusEq('+')"></td> <td><input type="button" Value=" - " onClick="xPlusEq('-')"></td> <td><input type="button" Value=" ^ " onClick="xPlusEq('^')"></td> </tr> <tr align="center"> <td><input type="button" Value=" 0 " onClick="xPlusEq('0')"></td> <td><input type="button" Value=" • " onClick="xPlusEq('.')"></td> <td><input type="button" Value=" +/- " onClick="xMultEq('-1')"></td> <td><input type="button" Value="1/x " onClick="recip()"> <td colspan=2><input type="button" Value="=, Enter" onClick="xEval()"></td> </tr> <tr> <td colspan=6 align="right"><small><small>Civil Engr. vers. r.m.02</small></small></td> </tr> </table> </td> <td> <!-- [] [* top, right cell: sCal2 Expansion layout table --> <!-- [] [] --------------------------- -->
<table border=1 cellspacing=0 cellpadding=0 WIDTH=238> <tr> <td colspan=6 align="center"><b><large><u>sCal2 Data Handling Expansion </u></large></b></td> </tr> <tr align="center"> <td><small><small>1/Do</small></small></td> <td colspan=4><small><small>CATAGORY of Const, Fcn.</small></small></td> <td><small><small>n[ ]</small></small></td> </tr> <!-- Top(catagory1) drop-down SELECT menus: can change or add CATEGORIES --> <tr align="center"> <td><input type="button" value="1/x" onClick="DoRecip(document.sCal.group1.options[document.sCal.group1.selectedIndex].value)"> </td> <td colspan=4><select name="catagory1" onChange="populateGroup(document.sCal.group1,document.sCal.catagory1.options[document.sCal.catagory1.selectedIndex].text)">
<!-- ***************** catagory1 -- User add conversions, cv} and constants, cs} ********** -->
<option selected value='Math.PI'>General: convert x}. Pi .</option> <option value=''>Length_convert x} ft>m</option> <option value=''>Area_convert x} ft² >m²</option> <option value=''>Volume_conv.x} ft³ >m³</option> <option value=''>Time_Velocity x} hr > s.</option> <option value=''>Mass_Force x} lb > kg</option> <option value=''>Pressure x} p.s.i. > Pa</option> <option value=''>Density x} p/cf > kg/m³</option> <option value=''>Energy_or work s} Def.</option> <option value=''>Power_rate of Work s}</option> <option value=''>Heat_Temperature: s}</option> <option value=''>Angular x} . . deg > rad</option> <option value=''>Electric, Magnetism x}</option> <option value=''>Light_Rad. lux>lum./sm</option> <option value=''>Misc_Units each >doz.</option> <option value=''></option> <option value=''>Materials, Elements s}</option> <option value=''>Math_Science cnst. s}</option> <option value=''>Geo_Physical cnst. s}</option> <option value=''>Prefixes to Units s}</option> <option value=''>Charts_Series, misc.s}</option> <option value=''></option> <option value=''></option> <!-- ----- end catagory1 ----- -->
</select></td> <td><input type="button" value="nx " onClick="setNflag2()"></td> </tr> <tr align="center"> <td><input type="button" value="1/x" onClick="DoRecip(document.sCal.group2.options[document.sCal.group2.selectedIndex].value)"> </td> <td colspan=4><SELECT name="catagory2" onChange="populateGroup(document.sCal.group2,document.sCal.catagory2.options[document.sCal.catagory2.selectedIndex].text)">
<!-- ***************** catagory2 -- User add ordinary and general functions, fn} ********** -->
<option selected value="Math.pow(x,2)">Ordinary Math x} . (x)² .</option> <option value="Math.pow(x,y)">Esoteric Math *} .(x)^y</option> <option value="">Algebra . . . . . s} . terms</option> <option value="">Analytic Geometry . . s}</option> <option value="">Mensuration .s} . terms</option> <option value="">*</option> <option value="">Finance *} . . . . . . $ > € .</option> <option value="">Physics . . . . . s} . terms</option> <option value="">Probability, Statistic s}</option> <option value="">Time_Function: x}Now</option> <option value="">*</option> <option value="">JavaScript samples</option> <option value="">*</option> <option value="">*</option> <option value="">*</option> <!-- ----- end catagory2 ----- -->
</select></td> <td><input type="button" value="n[ ]" onClick="setNflag1()"></td> </tr> <tr align="center"> <td><input type="button" value="1/x" onClick="DoRecip(document.sCal.group3.options[document.sCal.group3.selectedIndex].value)"> </td> <td colspan=4><SELECT name="catagory3" onChange="populateGroup(document.sCal.group3,document.sCal.catagory3.options[document.sCal.catagory3.selectedIndex].text)">
<!-- ***************** catagory3 -- User add special programs, pg} (or anything) ********** -->
<option selected value="Math.sqrt(x)">Special: pg} . . root (x)½</option> <option value="">User_01 . . . . . blank set</option> <option value="">User_02 . . . . . blank set</option> <option value="">User_03 . . . . . blank set</option> <option value="">*</option> <option value="">Civ_Highway-Survey</option> <option value="">Civ_Hydro-Hydraulics</option> <option value="">Civ_Structures . . . s} . .</option> <option value="">*</option> <option value="">Data_Management s}</option> <option value="">*</option> <option value="">Strategic Planning . s}</option> <option value="">*</option> <option value="">*</option> <option value="">*</option> <!-- ----- end catagory3 ----- -->
</select></td> <td><input type="button" value="nc " onClick="Nclear()"></td> </tr> <!-- begin layout of name/number n[0..20] data array --> <tr> <td align="right"><input type="button" value="n 0" onClick="nData(0)"></td> <script language="JavaScript" type="text/javascript"> <!-- document.write('<td colspan=2><input type="text" name="n0" size='+MemSize+'></td>'); // size set to browser document.write('<td colspan=2><input type="text" name="n10" size='+MemSize+'></td>'); // at end of HEAD --> </script> <td><input type="button" value="10 " onClick="nData(10)"></td> </tr> <tr> <td align="right"><input type="button" value="n 1" onClick="nData(1)"></td> <script language="JavaScript" type="text/javascript"> <!-- document.write('<td colspan=2><input type="text" name="n1" size='+MemSize+'></td>'); document.write('<td colspan=2><input type="text" name="n11" size='+MemSize+'></td>'); --> </script> <td><input type="button" value="11 " onClick="nData(11)"></td> </tr> <tr> <td align="right"><input type="button" value="n 2" onClick="nData(2)"></td> <script language="JavaScript" type="text/javascript"> <!-- document.write('<td colspan=2><input type="text" name="n2" size='+MemSize+'></td>'); document.write('<td colspan=2><input type="text" name="n12" size='+MemSize+'></td>'); --> </script> <td><input type="button" value="12 " onClick="nData(12)"></td> </tr> <tr> <td align="right"><input type="button" value="n 3" onClick="nData(3)"></td> <script language="JavaScript" type="text/javascript"> <!-- document.write('<td colspan=2><input type="text" name="n3" size='+MemSize+'></td>'); document.write('<td colspan=2><input type="text" name="n13" size='+MemSize+'></td>'); --> </script> <td><input type="button" value="13 " onClick="nData(13)"></td> </tr> <tr> <td align="right"><input type="button" value="n 4" onClick="nData(4)"></td> <script language="JavaScript" type="text/javascript"> <!-- document.write('<td colspan=2><input type="text" name="n4" size='+MemSize+'></td>'); document.write('<td colspan=2><input type="text" name="n14" size='+MemSize+'></td>'); --> </script> <td><input type="button" value="14 " onClick="nData(14)"></td> </tr> <tr> <td align="right"><input type="button" value="n 5" onClick="nData(5)"></td> <script language="JavaScript" type="text/javascript"> <!-- document.write('<td colspan=2><input type="text" name="n5" size='+MemSize+'></td>'); document.write('<td colspan=2><input type="text" name="n15" size='+MemSize+'></td>'); --> </script> <td><input type="button" value="15 " onClick="nData(15)"></td> </tr> <tr> <td align="right"><input type="button" value="n 6" onClick="nData(6)"></td> <script language="JavaScript" type="text/javascript"> <!-- document.write('<td colspan=2><input type="text" name="n6" size='+MemSize+'></td>'); document.write('<td colspan=2><input type="text" name="n16" size='+MemSize+'></td>'); --> </script> <td><input type="button" value="16 " onClick="nData(16)"></td> </tr> <tr> <td align="right"><input type="button" value="n 7" onClick="nData(7)"></td> <script language="JavaScript" type="text/javascript"> <!-- document.write('<td colspan=2><input type="text" name="n7" size='+MemSize+'></td>'); document.write('<td colspan=2><input type="text" name="n17" size='+MemSize+'></td>'); --> </script> <td><input type="button" value="17 " onClick="nData(17)"></td> </tr> <tr> <td align="right"><input type="button" value="n 8" onClick="nData(8)"></td> <script language="JavaScript" type="text/javascript"> <!-- document.write('<td colspan=2><input type="text" name="n8" size='+MemSize+'></td>'); document.write('<td colspan=2><input type="text" name="n18" size='+MemSize+'></td>'); --> </script> <td><input type="button" value="18 " onClick="nData(18)"></td> </tr> <tr> <td align="right"><input type="button" value="n 9" onClick="nData(9)"></td> <script language="JavaScript" type="text/javascript"> <!-- document.write('<td colspan=2><input type="text" name="n9" size='+MemSize+'></td>'); document.write('<td colspan=2><input type="text" name="n19" size='+MemSize+'></td>'); --> </script> <td><input type="button" value="19 " onClick="nData(19)"></td> </tr> </table> </td> <!-- end of top, right cell --> </tr> </FORM> <tr valign=top> <td> <!-- [] [] lower, left cell: sCal basic DOCUMENTATION --> <!-- *] [] ------------------------ -->
<table border=1 width=238> <tr><td><small><b>Notes on JavaScript Calculator - sCal</b></small></td></tr> <tr><td><small> <b> Operation</b> on lowest level = a simple calculator: click on-screen buttons <b>or</b> use keyboard <i>-- best for inserting values or programming. </i> On a higher level, some functions are available as buttons or from drop-down select menus: designated by <b>x}</b>. These operate directly on entire value in x-display, not just last term, when the <b>[>x]</b> clicked. <i>(The </i><b>[^]</b><i> takes all values left of it as base, all to the right as exponent.)</i> Trade values in and out of <b>Memory</b> to control. -Experiment-. Test on known data.<br> <b> *} Programs</b> invoked with the <b>[JS]</b> button, give much more control: replace alpha-characters with numeric, or insert after /*com'nt-prompt*/ ) before closing ')'. Write legitimate JavaScript expressions --evaluated according to interpreter's parser. NaN is Not a Number, can often correct.<br> <b> Programming</b> is on the highest level. Definitely <b>view source code</b>. Programming experience is desireable, but with minimal effort, one's most-used functions can be inserted in the source (well commented for the purpose). Copy - Paste from any TEXT file. <b>s}</b> comments can be set to display.<br> <b> GNU General Public License</b> Free, user-modifiable, NO WARANTEE. (c) 2003 <br> R. Mohaupt. <a href="http://scal-2.sourceforge.net">http://scal-2.sourceforge.net</a> </small></td> </tr> </table> </td> <td> <!-- [] [] lower, right cell: sCal2 Expansion DOCUMENTATION --> <!-- [] [* ----------------------------- -->
<table border=1 width=238> <tr><td><small><b>JavaScript Calculator Expansion - sCal2</b></small></td></tr> <tr><td><small> Basic <b>sCal</b> is designed for a small window, (floating over larger screens with other programs running, or alone on PDAs) to perform simple scientific calculations with a limited library of add-on procedures.<br> <b>    sCal2</b> is no vast increase in computing power but, doubling the footprint, adds: <b>Catagories</b> to systematically handle many times the conversion/procedure selection; <b>[1/x]</b> buttons to reciprocate conversions, eg. ft>m [>x] gets m>ft with [1/x], tan(x) becomes cotan(x), etc --but sometimes makes no sense, eg. 1/deg.C != deg.F;<br> <b>n[0..19]</b> array of additional variables for 20 more memory slots {click the desired <b>[n-]</b> button to put x to it} or programming input prompts and output labels. Procedures using this feature are designated by <b>n}</b>, invoke with the <b>[JS]</b> button, occasionally w/[=], run/rerun with new values [=, Enter], usually [c] clear between programs;<br> <b>[nx]</b> followed by the desired [n-] cell-button, moves that cell value to the x-disp. Similarly, <b>[n[]]</b> puts the next [n-] name in x, and <b>[nc]</b> clears all.<br> * sCal needs a JS-enabled browser and no additional files, for maximum portability.<br> * More documentation may be created.<br> * Compact display and file size are goals. </small></td> </tr> </table> </td> </tr> </table> </body> </html>
|
1 Comments
matt
Tuesday 29th of December 2009
thanks,im looking to cut designs with my cricut... any help ??