1016 lines
23 KiB
JavaScript
1016 lines
23 KiB
JavaScript
|
// Scientific Calculator written by Eni Generalic - http://www.periodni.com/
|
|||
|
// Copyright <20> 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<broj.length; i++) {
|
|||
|
var mm = broj.charAt(i);
|
|||
|
var mmup = broj.charAt(i+1);
|
|||
|
var mmdn = broj.charAt(i-1);
|
|||
|
|
|||
|
if (mm == ",") {mm = ".";}
|
|||
|
else if (mm == "}" || mm == "]") {mm = ")";}
|
|||
|
else if (mm == "{" || mm == "[") {mm = "(";}
|
|||
|
else if (mm == " " || mm == "=") {mm = "";}
|
|||
|
else if (mm == "*" && mmup == "*") {mm = "^"; i += 1;}
|
|||
|
else if (mm == "+" && mmup == "-") {mm = "-"; i += 1;}
|
|||
|
else if (mm == "E" && kemilimat(mmup)) {mm = "e";}
|
|||
|
|
|||
|
if (mm == "." && BrojAtoma(mmdn)==false) {mm = "0.";}
|
|||
|
else if (velikoslovo(mm)) {var kem = 1;}
|
|||
|
|
|||
|
if (pitanje == "0") {
|
|||
|
if (operator(mm)) {}
|
|||
|
else if (mm != ".") {pitanje = "";}
|
|||
|
}
|
|||
|
//if (i == 0) {
|
|||
|
// if (mm == "0" && mmup == "0") {mm = "";}
|
|||
|
//}
|
|||
|
|
|||
|
pitanje += mm;
|
|||
|
}
|
|||
|
|
|||
|
if (zarez == 1) {
|
|||
|
document.racunalo.notes.value += pitanje;
|
|||
|
document.racunalo.upit.value = pitanje;
|
|||
|
if (kem == 1) {
|
|||
|
//var atom = "+" + pitanje;
|
|||
|
odgovor = masa(pitanje);
|
|||
|
}
|
|||
|
else {
|
|||
|
odgovor = zagrada(pitanje);
|
|||
|
}
|
|||
|
}
|
|||
|
else {
|
|||
|
for (var i=0; i<pitanje.length; i++) {
|
|||
|
if (operator(pitanje.charAt(i))) {
|
|||
|
pitanje = "(" + pitanje + ")";
|
|||
|
break;
|
|||
|
}
|
|||
|
}
|
|||
|
odgovor = matematika(zarez, pitanje)
|
|||
|
}
|
|||
|
|
|||
|
odgovor = odgovor.toString();
|
|||
|
document.racunalo.oldrezultat.value = odgovor;
|
|||
|
ans = parseFloat(odgovor);
|
|||
|
|
|||
|
izgledbroja(odgovor);
|
|||
|
|
|||
|
document.racunalo.zadatak.value = "";
|
|||
|
document.racunalo.zadatak.focus();
|
|||
|
}
|
|||
|
|
|||
|
|
|||
|
function matematika(zarez, pitanje) {
|
|||
|
var rjesenje = zagrada(pitanje);
|
|||
|
|
|||
|
with (Math) {
|
|||
|
if (zarez == 2) {
|
|||
|
pitanje = pitanje + "^2";
|
|||
|
rjesenje = pow(rjesenje, 2)
|
|||
|
}
|
|||
|
else if (zarez == 3) {
|
|||
|
pitanje = pitanje + "^(1/2)";
|
|||
|
rjesenje = sqrt(rjesenje)
|
|||
|
}
|
|||
|
else if (zarez == 4) {
|
|||
|
pitanje = pitanje + "*(-1)";
|
|||
|
rjesenje = -rjesenje
|
|||
|
}
|
|||
|
else if (zarez == 5) {
|
|||
|
pitanje = "ln" + pitanje;
|
|||
|
rjesenje = log(rjesenje)
|
|||
|
}
|
|||
|
else if (zarez == 6) {
|
|||
|
pitanje = "e^" + pitanje;
|
|||
|
rjesenje = pow(E, rjesenje)
|
|||
|
}
|
|||
|
else if (zarez == 7) {
|
|||
|
pitanje = "1/" + pitanje;
|
|||
|
rjesenje = 1/rjesenje
|
|||
|
}
|
|||
|
else if (zarez == 8) {
|
|||
|
pitanje = "log" + pitanje;
|
|||
|
rjesenje = log(rjesenje)/LN10
|
|||
|
}
|
|||
|
else if (zarez == 9) {
|
|||
|
pitanje = "10^" + pitanje;
|
|||
|
rjesenje = pow(10, rjesenje)
|
|||
|
}
|
|||
|
else if (zarez >= 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<atom.length; i++) {
|
|||
|
mm = atom.charAt(i);
|
|||
|
mmup = atom.charAt(i+1);
|
|||
|
bigup = mm.toUpperCase();
|
|||
|
mmdn = atom.charAt(i-1);
|
|||
|
|
|||
|
if (mm == "[") {mm = "("}
|
|||
|
else if (mm == "]") {mm = ")"}
|
|||
|
else if (mm == ",") {mm = "."}
|
|||
|
|
|||
|
if (slovo(mm)) {atominfo = true}
|
|||
|
if (matoperator(mm)) {atominfo = false; znak=""}
|
|||
|
if (atominfo) {
|
|||
|
if (matoperator(mmup)) {znak=")"}
|
|||
|
if (matoperator(mmdn)) {izraz += "(" + mm + znak}
|
|||
|
else if (mmdn=="(") {izraz += mm + znak}
|
|||
|
else if (mmdn=="[") {izraz += mm + znak}
|
|||
|
else if (slovo(mm)) {izraz += "+" + mm + znak}
|
|||
|
else if (BrojAtoma(mmdn)) {izraz += mm + znak}
|
|||
|
else if (BrojAtoma(mm)) {izraz += "*" + mm + znak}
|
|||
|
else {izraz += mm + znak}
|
|||
|
}
|
|||
|
else {izraz += mm}
|
|||
|
}
|
|||
|
odgovor = eval(izraz);
|
|||
|
return odgovor;
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
|
|||
|
function slovo(znak) {
|
|||
|
var slovo="(ABCDEFGHIKLMNOPRSTUVWXYZ";
|
|||
|
for (var i=0; i<slovo.length; i++)
|
|||
|
if (znak == slovo.charAt(i)) {return true} {return false}
|
|||
|
}
|
|||
|
|
|||
|
function velikoslovo(znak) {
|
|||
|
var slovo="ABCDEFGHIKLMNOPRSTUVWXYZ";
|
|||
|
for (var i=0; i<slovo.length; i++)
|
|||
|
if (znak == slovo.charAt(i)) {return true} {return false}
|
|||
|
}
|
|||
|
|
|||
|
function maloslovo(znak) {
|
|||
|
var slovo="abcdefghiklmnoprstuvwxyz";
|
|||
|
for (var i=0; i<slovo.length; i++)
|
|||
|
if (znak == slovo.charAt(i)) {return true} {return false}
|
|||
|
}
|
|||
|
|
|||
|
function matoperator(znak) {
|
|||
|
var matoperator="*/+-";
|
|||
|
for (var i=0; i<matoperator.length; i++)
|
|||
|
if (znak == matoperator.charAt(i)) {return true}
|
|||
|
if (znak == "") {return true}
|
|||
|
if (znak == null) {return true}
|
|||
|
return false
|
|||
|
}
|
|||
|
|
|||
|
function operator(znak) {
|
|||
|
var matoperator="^*/+-";
|
|||
|
if (matoperator.indexOf(znak) >= 0) {return true} {return false}
|
|||
|
}
|
|||
|
|
|||
|
function ubacirezultat(znak) {
|
|||
|
var ubacirezultat="^*/+";
|
|||
|
for (var i=0; i<ubacirezultat.length; i++)
|
|||
|
if (znak == ubacirezultat.charAt(i)) {return true}
|
|||
|
return false
|
|||
|
}
|
|||
|
|
|||
|
function BrojAtoma(znak) {
|
|||
|
var atom = "1234567890";
|
|||
|
for (var i=0; i<atom.length; i++)
|
|||
|
if (znak == atom.charAt(i)) {return true} {return false}
|
|||
|
}
|
|||
|
|
|||
|
function kemilimat(znak) {
|
|||
|
var atom = "rsu";
|
|||
|
if (atom.indexOf(znak) == -1) {return true} {return false}
|
|||
|
}
|
|||
|
|
|||
|
|
|||
|
function numformat(x){
|
|||
|
var kut = new Array("auto", "sci", "fix");
|
|||
|
decimala = x;
|
|||
|
var broj = document.racunalo.oldrezultat.value;
|
|||
|
|
|||
|
if (decimala < 13) {
|
|||
|
document.racunalo.notes.value += "[" + kut[asf] + decimala + "]";
|
|||
|
}
|
|||
|
else {
|
|||
|
decimala = 14;
|
|||
|
document.racunalo.notes.value += "[" + kut[asf] + "]";
|
|||
|
}
|
|||
|
|
|||
|
if (broj != "0" && broj != "") {
|
|||
|
izgledbroja(broj)
|
|||
|
}
|
|||
|
else {
|
|||
|
document.racunalo.notes.value += enter;
|
|||
|
}
|
|||
|
document.racunalo.zadatak.focus();
|
|||
|
}
|
|||
|
|
|||
|
|
|||
|
function scifix(x) {
|
|||
|
var kut = new Array("numauto", "numsci", "numfix");
|
|||
|
|
|||
|
document.getElementById(kut[asf]).style.color = '#ccc';
|
|||
|
|
|||
|
asf = x;
|
|||
|
var broj = document.racunalo.oldrezultat.value;
|
|||
|
switch(x) {
|
|||
|
case 1:
|
|||
|
document.getElementById('numsci').style.color = '#000';
|
|||
|
if (decimala == 14) {
|
|||
|
document.racunalo.notes.value += "[sci]";
|
|||
|
}
|
|||
|
else {
|
|||
|
document.racunalo.notes.value += "[sci" + decimala + "]";
|
|||
|
}
|
|||
|
break;
|
|||
|
case 2:
|
|||
|
document.getElementById('numfix').style.color = '#000';
|
|||
|
document.racunalo.izaZareza.options[2].selected = true;
|
|||
|
if (decimala == 14) {
|
|||
|
decimala = 2;
|
|||
|
document.racunalo.notes.value += "[fix2]";
|
|||
|
}
|
|||
|
else {
|
|||
|
document.racunalo.notes.value += "[fix" + decimala + "]";
|
|||
|
}
|
|||
|
break;
|
|||
|
default:
|
|||
|
document.getElementById('numauto').style.color = '#000';
|
|||
|
document.racunalo.izaZareza.options[14].selected = true;
|
|||
|
document.racunalo.notes.value += "[auto]";
|
|||
|
decimala = 14;
|
|||
|
}
|
|||
|
|
|||
|
if (broj != "0" && broj != "") {izgledbroja(broj)}
|
|||
|
document.racunalo.zadatak.focus();
|
|||
|
}
|
|||
|
|
|||
|
|
|||
|
function raddeg(x) {
|
|||
|
var kut = new Array("numrad", "numdeg", "numgrad");
|
|||
|
|
|||
|
document.getElementById(kut[rdg]).style.color = "#ccc";
|
|||
|
rdg = x;
|
|||
|
document.getElementById(kut[x]).style.color = "#000";
|
|||
|
document.racunalo.zadatak.focus();
|
|||
|
}
|
|||
|
|
|||
|
function seplk(kvacica) {
|
|||
|
var broj = document.racunalo.oldrezultat.value;
|
|||
|
sep1000 = (document.getElementById('tisucice').checked == true) ? 1 : 0;
|
|||
|
if (kvacica) {
|
|||
|
if (sep1000) {
|
|||
|
document.getElementById('tisucice').checked = false;
|
|||
|
sep1000 = 0;
|
|||
|
}
|
|||
|
else {
|
|||
|
document.getElementById('tisucice').checked = true;
|
|||
|
sep1000 = 1;
|
|||
|
}
|
|||
|
}
|
|||
|
if (broj.length > 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<eplace; i++) {
|
|||
|
tri += 1;
|
|||
|
if (tri == 3) {
|
|||
|
rezultat += broj.charAt(i) + " ";
|
|||
|
tri = 0;
|
|||
|
}
|
|||
|
else {
|
|||
|
rezultat += broj.charAt(i);
|
|||
|
}
|
|||
|
}
|
|||
|
rezultat += strexp
|
|||
|
//document.racunalo.notes.value += enter + "separator_2 = " + rezultat;
|
|||
|
if (oplace > -1) {
|
|||
|
rezultat = "." + rezultat;
|
|||
|
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 <20> 2010 by EniG. All rights reserved.
|
|||
|
|