// Scientific Calculator written by Eni Generalic - http://www.periodni.com/ // Copyright © 2010 by EniG. If you use a variant of this in your page, please email me at eni.generalic@gmail.com // Eni Generalic, Split, Create: 1999/10/14; Update: 2010/05/2 // Atomic Weights of the Elements 2007, Pure & Appl. Chem., Vol. 80, No. 11, (2009) 2131-2156. var EniG = "Operations listing:"; var que = ""; var ans = 0; var mem = 0; var broj = "0"; var tocka = 0; var eksp = 0; var baza = ""; var eksponent = 3; var rjesenje = 0; var decimala = 14; var asf = 0; var rdg = 0; var sep1000 = 0; var enter = ""; var mr = ""; var pi = 3.141592653589793; var e = 2.71828182845905; var abc = ""; //window.onerror = handleError; function start(){ enter = "\r\n"; mr = document.racunalo.memorija.value; document.racunalo.notes.value = EniG + enter + enter; document.racunalo.zadatak.focus(); } function handleError() { //alert("YOU HAVE ENCOUNTERED A JAVASCRIPT ERROR"); document.racunalo.notes.value += " = Syntax Error\r\n"; document.racunalo.rezultat.value = "Syntax Error"; document.racunalo.zadatak.focus(); return true; } function memory(operator) { switch(operator) { case 1: // MS memorija = document.racunalo.rezultat.value; memorija = memorija.replace(/ /g,''); document.racunalo.memorija.value = memorija; document.racunalo.MR.title = mr + " (" + memorija + ")"; mem = parseFloat(memorija); stanje = (document.getElementById('nummem').style.color == '#000') ? '#ccc' : '#000'; document.getElementById('nummem').style.color = stanje; break; case 2: // MR var memorija = document.racunalo.memorija.value; if (memorija==0 || slovo(memorija.charAt(0))) {memorija = ""} document.racunalo.zadatak.value += memorija; break; case 3: // CLS if (document.racunalo.zadatak.value == "") {document.racunalo.rezultat.value = "";} else {document.racunalo.zadatak.value = ""; } break; case 4: // Mode vidi('numformat'); break; case 5: // Reset document.racunalo.notes.value = enter + EniG + enter; document.racunalo.memorija.value = ""; document.racunalo.MR.title = mr; decimala = 14; asf = 0; rdg = 0; sep1000 = 0; mem = 0; ans = 0; document.getElementById('numauto').style.color = '#000'; document.getElementById('numsci').style.color = '#ccc'; document.getElementById('numfix').style.color = '#ccc'; document.getElementById('nummem').style.color = '#ccc'; document.getElementById('numrad').style.color = '#000'; document.getElementById('numdeg').style.color = '#ccc'; document.getElementById('numgrad').style.color = '#ccc'; break; } document.racunalo.zadatak.focus(); } function dodajBroj(noviznak) { document.racunalo.zadatak.focus(); document.racunalo.zadatak.value += noviznak } function dodajConst(noviznak) { document.racunalo.zadatak.focus(); document.racunalo.zadatak.value += noviznak; vidi('konstante') } function izracunaj(zarez) { var pitanje = ""; var odgovor = ""; var mem = 0; //onerror = handleError; if (zarez >= 1) { if (document.racunalo.zadatak.value == "") { broj = document.racunalo.rezultat.value; } else { broj = document.racunalo.zadatak.value; if (ubacirezultat(broj.charAt(0))) { broj = document.racunalo.rezultat.value + broj; } } } for (var i=0; i= 10 && zarez <= 12) { if (zarez == 10) { pitanje = "atan" + pitanje; rjesenje = atan(rjesenje) } else if (zarez == 11) { pitanje = "acos" + pitanje; rjesenje = acos(rjesenje) } else if (zarez == 12) { pitanje = "asin" + pitanje; rjesenje = asin(rjesenje) } if (document.racunalo.stupnjevi[1].checked) {rjesenje = (rjesenje * 180) / PI} else if (document.racunalo.stupnjevi[2].checked) {rjesenje = (rjesenje * 200) / PI} } else if (zarez >= 14 && zarez <= 16) { if (document.racunalo.stupnjevi[1].checked) {radijani = (rjesenje / 180) * PI} else if (document.racunalo.stupnjevi[2].checked) {radijani = (rjesenje / 200) * PI} else {radijani = rjesenje} if (zarez == 14) { pitanje = "tan" + pitanje; rjesenje = tan(radijani) } else if (zarez == 15) { pitanje = "cos" + pitanje; rjesenje = cos(radijani) } else if (zarez == 16) { pitanje = "sin" + pitanje; rjesenje = sin(radijani) } } else if (zarez == 17) { pitanje = pitanje + "%"; rjesenje = rjesenje/100 } else if (zarez == 18) { pitanje = pitanje + "ppm"; rjesenje = rjesenje/1000000 } else if (zarez == 20) { pitanje = pitanje + "!"; rjesenje = factorial(rjesenje) } else if (zarez == 21) { eksponent = prompt("Unesite eksponent / Please enter exponent", 3); pitanje = pitanje + "^" + eksponent; rjesenje = pow(rjesenje, eksponent) } else if (zarez == 22) { eksponent = prompt("Unesite korijen / Please enter root", 3); pitanje = pitanje + "^(1/" + eksponent + ")"; rjesenje = pow(rjesenje, (1/eksponent)) } } document.racunalo.notes.value += pitanje; document.racunalo.upit.value = pitanje; return rjesenje; } function zagrada(xbroj) { var intZagClose = 0 var intZagOpen = 0 var intXbroj = 0 var strNoviXbroj = "" var strNoviZbroj = ""; do { //document.racunalo.notes.value += enter + "intXbroj = " + intXbroj; 2+(2*(2+4)+3)^3+5 xbroj = xbroj.replace(/--/g,"-1*-"); intZagClose = xbroj.indexOf(")"); if (intZagClose != -1) { for (var i = intZagClose; i >= 0; i--) { if (xbroj.charAt(i)=="(") { intZagOpen = i; strNoviZbroj = xbroj.substring(intZagOpen+1,intZagClose); break; } } } else { strNoviZbroj = xbroj; } strNoviZbroj = strNoviZbroj + "*1"; strNoviZbroj = postotak(strNoviZbroj); strNoviZbroj = trigonometrija(strNoviZbroj); strNoviZbroj = logaritam(strNoviZbroj); strNoviZbroj = potencija(strNoviZbroj); strNoviZbroj = racun(strNoviZbroj); if (intZagClose != -1) { xbroj = xbroj.replace(xbroj.substring(intZagOpen, intZagClose+1), strNoviZbroj); } else { xbroj = strNoviZbroj; } } while (intZagClose > 0) return xbroj; } function racun(zbroj) { with (Math) {zbroj = eval(zbroj);} return zbroj; } function potencija(ulaz) { var intZagClose = 0 var intZagOpen = 0; var intXbroj = ulaz.indexOf("^"); //2+2^3+2,15^2+4 while (intXbroj > 0) { for (var i = intXbroj - 1; i >= 0; i--) { if (operator(ulaz.charAt(i)) && ulaz.charAt(i-1)!="e") { //if (i > 0 && operator(ulaz.charAt(i-1))) { intZagOpen = i+1; break; } } if (ulaz.charAt(i) == "-"){ if (i == 0) {intZagOpen = 0;} else if (i > 0 && operator(ulaz.charAt(i-1))) {intZagOpen = i;} } var strNoviXbroj = ulaz.substring(intZagOpen,intXbroj); for (var i = intXbroj + 2; i < ulaz.length; i++) { if (operator(ulaz.charAt(i)) && ulaz.charAt(i-1)!="e") {intZagClose = i-1; break} } var strNoviYbroj = ulaz.substring(intXbroj+1,intZagClose+1); if (strNoviXbroj == 'e') {strNoviXbroj = e}; //cps with (Math) { intXbroj = pow(strNoviXbroj, strNoviYbroj); } //if (i != 0 && ulaz.charAt(i-1)) {} // za negativne brojeve -3^2 = -9 ili 9 ulaz = ulaz.replace(ulaz.substring(intZagOpen, intZagClose+1), intXbroj); intXbroj = ulaz.indexOf("^"); } return ulaz; } function postotak(ulaz) { var intZagClose = 0; var intZagOpen = 0; var strDesnoFun = new Array ("!", "%"); for (var f = 0; f < 2; f++) { var intXbroj = ulaz.indexOf(strDesnoFun[f]); while (intXbroj > 0) { for (var i = intXbroj - 1; i >= 0; i--) { if (operator(ulaz.charAt(i)) && ulaz.charAt(i-1)!="e") {intZagOpen = i+1; break} } var strNoviXbroj = ulaz.substring(intZagOpen,intXbroj); intZagClose = intXbroj+1; with (Math) { if (f == 0) { intXbroj = factorial(strNoviXbroj); } else { intXbroj = strNoviXbroj/100; } } ulaz = ulaz.replace(ulaz.substring(intZagOpen, intZagClose), intXbroj); intXbroj = ulaz.indexOf(strDesnoFun[f]); } } return ulaz; } function trigonometrija(kut) { var intZagClose = 0 var intKut = 0 var strNoviKut = "" var strKrozPi = ")" var strPiKroz = ")"; switch(rdg) { case 1: strKrozPi = ")*180/pi"; strPiKroz = "*pi/180)"; break; case 2: strKrozPi = ")*200/pi"; strPiKroz = "*pi/200)"; break; default: strKrozPi = ")"; strPiKroz = ")"; } var strTrigFun = new Array ("sin", "cos", "tan"); for (var f = 0; f < 3; f++) { intKut = kut.indexOf(strTrigFun[f]); if (intKut >= 0) { do { //document.racunalo.notes.value += enter + intKut + enter; cos(2*(3+5)+3*(2+4))+1 2+(2*(2+cos(4))+3)+(3^3+5)*4 intZagClose = kut.length; for (var i = intKut+4; i < intZagClose; i++) { if (operator(kut.charAt(i)) && kut.charAt(i-1)!="e") { intZagClose = i; strNoviKut = kut.substring(intKut+3, intZagClose); break; } } if (intKut>0 && kut.charAt(intKut-1)=="a") { intKut = intKut - 1; strNoviKut = "a" + strTrigFun[f] + "(" + strNoviKut + strKrozPi; } else { strNoviKut = strTrigFun[f] + "(" + strNoviKut + strPiKroz; } strNoviKut = racun(strNoviKut); strNoviKut = Math.round(strNoviKut * Math.pow(10,14)) / Math.pow(10,14); kut = kut.replace(kut.substring(intKut, intZagClose), strNoviKut); intKut = kut.indexOf(strTrigFun[f]); } while (intKut != -1); } } return kut; } function logaritam(kut) { var intZagClose = 0 var intKut = 0 var strNoviKut = "" var strKrozPi = ")" var strPiKroz = ")"; // var e = 2.71828182845905 var strLogFun = new Array ("ln", "log"); for (var f = 0; f < 2; f++) { intKut = kut.indexOf(strLogFun[f]); if (intKut >= 0) { do { intZagClose = kut.length; for (var i = intKut; i < intZagClose; i++) { if (operator(kut.charAt(i)) && kut.charAt(i-1)!="e") { intZagClose = i; strNoviKut = kut.substring(intKut+strLogFun[f].length, intZagClose); break; } } if (f == 0) { if (intKut>0 && kut.charAt(intKut-1)=="a") { intKut = intKut - 1; strNoviKut = "pow(E," + strNoviKut + ")"; } else { strNoviKut = "log(" + strNoviKut + ")"; } } else { if (intKut>0 && kut.charAt(intKut-1)=="a") { intKut = intKut - 1; strNoviKut = "pow(10," + strNoviKut + ")"; } else { strNoviKut = "log(" + strNoviKut + ")/LN10"; } } strNoviKut = racun(strNoviKut); kut = kut.replace(kut.substring(intKut, intZagClose), strNoviKut); intKut = kut.indexOf(strLogFun[f]); } while (intKut != -1); } } return kut; } function izazareza(novibroj) { with (Math) { if (eksp == -1) { var duzina = tocka; if (duzina == -1) {duzina = novibroj.length} var desni = ""; if (duzina > 16) { var privremeni = round(novibroj*pow(10, 16)) + " "; var novie = privremeni.indexOf("e"); var lijevi = (privremeni.substring(0,novie)); lijevi = round(lijevi*pow(10, 15))/pow(10, 15) + " "; desni = (privremeni.substring(novie+2,privremeni.length-1)); desni = "e+" + (desni-18); } else { var lijevi = round(novibroj*pow(10, decimala))/pow(10, decimala) + " "; } } else { var lijevi = novibroj.substring(0,eksp); var desni = novibroj.substring(eksp,novibroj.length); lijevi = round(lijevi*pow(10, decimala))/pow(10, decimala) + " "; } lijevi = lijevi.substring(0,lijevi.length - 1); if (lijevi.charAt(0) == ".") {lijevi = "0" + lijevi;} if (decimala < 14) { if (lijevi.indexOf(".") == -1 && decimala != 0) {lijevi += "."} var nula = (tocka + decimala) - (lijevi.length - 1); if (nula > 0 && decimala > 0) { for (var n = 0; n < nula; n++) { lijevi += "0"; } } } return (lijevi + desni); } } function factorial(n) { if ((n == 0) || (n == 1)) { return 1; } else { var odgovor = (n * factorial(n-1)); return odgovor; } } function masa(atom) { with (Math) { var atominfo = false; var mm=""; var mmdn=""; var mmup=""; var znak=""; var izraz=""; var Pi=pi; var H=1.0079; var He=4.0026; var Li=6.941; var Be=9.0122; var B=10.811; var C=12.011; var N=14.007; var O=15.999; var F=18.998; var Ne=20.18; var Na=22.99; var Mg=24.305; var Al=26.982; var Si=28.086; var P=30.974; var S=32.065; var Cl=35.453; var Ar=39.948; var K=39.098; var Ca=40.078; var Sc=44.956; var Ti=47.867; var V=50.942; var Cr=51.996; var Mn=54.938; var Fe=55.845; var Co=58.933; var Ni=58.693; var Cu=63.546; var Zn=65.38; var Ga=69.723; var Ge=72.64; var As=74.922; var Se=78.96; var Br=79.904; var Kr=83.798; var Rb=85.468; var Sr=87.62; var Y=88.906; var Zr=91.224; var Nb=92.906; var Mo=95.96; var Tc=98; var Ru=101.07; var Rh=102.91; var Pd=106.42; var Ag=107.87; var Cd=112.41; var In=114.82; var Sn=118.71; var Sb=121.76; var Te=127.6; var I=126.9; var Xe=131.29; var Cs=132.91; var Ba=137.33; var La=138.91; var Ce=140.12; var Pr=140.91; var Nd=144.24; var Pm=145; var Sm=150.36; var Eu=151.96; var Gd=157.25; var Tb=158.93; var Dy=162.5; var Ho=164.93; var Er=167.26; var Tm=168.93; var Yb=173.05; var Lu=174.97; var Hf=178.49; var Ta=180.95; var W=183.84; var Re=186.21; var Os=190.23; var Ir=192.22; var Pt=195.08; var Au=196.97; var Hg=200.59; var Tl=204.38; var Pb=207.2; var Bi=208.98; var Po=209; var At=210; var Rn=222; var Fr=223; var Ra=226; var Ac=227; var Th=232.04; var Pa=231.04; var U=238.03; var Np=237; var Pu=244; var Am=243; var Cm=247; var Bk=247; var Cf=251; var Es=252; var Fm=257; var Md=258; var No=259; var Lr=262; var Rf=267; var Db=268; var Sg=271; var Bh=272; var Hs=277; var Mt=276; var Ds=281; var Rg=280; var Cn=285; // Pure Appl. Chem., Vol. 81, No. 11, (2009) 2131-2156 for (var i=0; i= 0) {return true} {return false} } function ubacirezultat(znak) { var ubacirezultat="^*/+"; for (var i=0; i 3) {izgledbroja(broj)} } function izgledbroja(broj) { var nule = "000000000000000"; var minus = ""; if (broj.charAt(0) == "-") {minus = "-";} // if (asf == 2) { // if (Math.eval(broj+"*"+minus+"1-1e-"+decimala) < 0) {broj = "0"} // } var eplace = broj.indexOf("e"); if (eplace > 0) { var x = broj.substring(0, eplace); var y = broj.substring(eplace); } else if (asf == 1) { var x = parseFloat(broj) * 1E50; broj = x.toString(); eplace = broj.indexOf("e"); x = broj.substring(0, eplace); var y = broj.substring(eplace+1); y = parseInt(y) - 50; y = "e" + y; } else { var x = broj; var y = ""; } var oplace = broj.indexOf("."); broj = parseInt(x); if (oplace == -1) {x = "0";} {x = "0" + x.substring(oplace);} x = parseFloat(x); with (Math) { x = round(x * pow(10,decimala)) / pow(10,decimala); broj = abs(broj) + x; } x = broj.toString(); oplace = x.indexOf("."); //document.racunalo.notes.value += enter + "oplace_1 = " + oplace; if (oplace == 0) { broj = "0" + x + nule.substring(0, decimala); } else if (oplace > 0) { x = x.concat(nule); broj = x.substring(0, oplace); broj += x.substring(oplace, oplace+decimala+1); } else { broj = x + "." + nule.substring(0, decimala); } if (decimala == 14) {broj = parseFloat(broj)} broj = minus.concat(broj, y); //PROBA POCETAK if (sep1000) { //document.racunalo.notes.value += enter + "separator_1 = " + broj; var rezultat = ""; var strexp = ""; oplace = broj.indexOf('.'); //if (oplace == -1) {oplace = 0;} eplace = broj.indexOf('e'); if (eplace == -1) {eplace = broj.length;} {strexp = " " + broj.substring(eplace);} var tri = 0; for (var i=oplace+1; i=0; i--) { if (tri == 3) { rezultat = broj.charAt(i) + " " + rezultat; tri = 0; } else { rezultat = broj.charAt(i) + rezultat; } tri += 1; } } rezultat = rezultat.replace("- ", "-"); broj = rezultat; //document.racunalo.notes.value += enter + "separator_3 = " + rezultat; } //PROBA KRAJ document.racunalo.rezultat.value = broj; document.racunalo.notes.value += " = " + broj + enter; return broj; } function zaokruzi_new(ebroj) { // max 16 decimala //var n=16; var x=ebroj.toExponential(decimala); document.racunalo.notes.value += enter + "toExponential = " + x + enter; var x=ebroj.toPrecision(decimala); document.racunalo.notes.value += "toPrecision = " + x + enter; var x=ebroj.toFixed(decimala); document.racunalo.notes.value += "toFixed = " + x + enter; document.racunalo.rezultat.value = x; document.racunalo.notes.value += " = " + x + enter; } function vidi(me) { //if (document.getElementById) { var stanje = (document.getElementById(me).style.display == 'block') ? 'none' : 'block'; document.getElementById(me).style.display = stanje; //document.getElementById(me).style.visibility = stanje //} } //Eni Generalic, Split, Create: 1999/10/14; Update: 2010/05/2 // Copyright © 2010 by EniG. All rights reserved.