window.onload = function() { generateQuestions(); } function generateQuestions() { var section = document.querySelector("section.genpriklady"); var header = section.appendChild(document.createElement("h2")); header.innerHTML = "Příklady k procvičení" for (var i = 0; i < examples.length; i++) { var ex = section.appendChild(document.createElement("div")) ex.className = "question"; ex.setAttribute("data-index", i); ex.innerHTML = generovatNahled(i); //examples[i].task } } var otazky = []; var spravne = []; function Otazka() { this.parametry = new Array() this.vystupy = new Array() this.zadani = "" this.setParametry = function(retez) { var pole = retez.split("\n"); for (var i= 0; i< pole.length; i++) { this.parametry = this.parametry.concat(pole[i].split("$")) } } this.setVystupy = function(retez) { var pole = retez.split("\n"); this.vystupy = new Array() for (var i= 0; i< pole.length; i++) { this.vystupy = this.vystupy.concat(pole[i].split("$")) } } } var actQuestion = null; var actSet = null; function generatePreviews() { var section = document.querySelector(".foundlist"); section.innerHTML = ""; var header = section.appendChild(document.createElement("h2")); header.innerHTML = actSet.title //"Příklady k procvičení" for (var i = 0; i < actSet.examples.length; i++) { var ex = section.appendChild(document.createElement("div")) ex.className = "question"; ex.setAttribute("data-index", i); ex.innerHTML = generovatNahled(i); //examples[i].task } } function log(arg) { return Math.log(arg)/Math.LN10 } function ln(arg) { return Math.log(arg) } function sin(arg) { return Math.sin(arg) } function cos(arg) { return Math.cos(arg) } function tg(arg) { return Math.tan(arg) } function exp(arg) { return Math.exp(arg) } function sqrt(arg) { return Math.sqrt(arg) } function pow(arg1, arg2) { return Math.pow(arg1, arg2) } function des_carka(cislo) { var vystup = "" + cislo; vystup = vystup.replace(/\./g,","); if (vystup.charAt(0) ==",") vystup = "0" + vystup; return vystup } function nahodne(spodni, horni,step) { if (typeof spodni == "object") { //zadano pole var index = Math.floor(spodni.length*Math.random()); return spodni[index]; } if (typeof spodni == "number" && typeof horni == "number") { return spodni + Math.random()*(horni-spodni) } return null; } function zaokrouhlit(cislo, mista) { var cislo2 = Number(cislo) var pocet = Number(mista); return Math.round(cislo2 * Math.pow(10, pocet))/ Math.pow(10, pocet); } function roundToMF(cislo, mfs) { var nonzero = false; return cislo; var cislo2 = Number(cislo) var pocet = Number(mista); var power = Math.pow(10, pocet) return Math.round(cislo2 * power)/ power; } function interpol(poleX, poleY, x0) { var imin =0; var imax=0; for (var i = 1; i< poleX.length; i++) { if (poleX[i-1] < x0 && poleX[i] > x0) { imin = i-1; imax = i; break; } } return poleY[imin] + (poleY[imax]-poleY[imin])/(poleX[imax]-poleX[imin])*(x0 - poleX[imin]) } function regenerate(node) { var question = node.parentNode.parentNode var index = parseInt(question.getAttribute("data-index")); question.innerHTML = generovatNahled(index); } function formatovatCislo(cislo) { cislo = Number(cislo); return cislo; } function generovatNahled(index) { var vystup =""; var otazka = examples[index]; if (window.reactions) { otazka.reactions = otazka.reactions || getReactionLists(otazka); } var task = otazka.task //priklady[index*3 + 2] actQuestion = otazka; otazka.params = {}; otazka.used = []; var solution = otazka.solution.join(""); for (var i= 0; i< otazka.param_in.length; i++) { var vals = otazka.param_in[i].split(";"); var newParam = { name: vals[0], value: "XXX", type: vals[1], round: 0, sf: 0, dp: 0 }; /* type: nm - rucne zaokrouhleny, nr - zaokrouleny po vypoctu, t - textovy parametr, b - logicky parametr - t/f sf - pocet platnych cislic (significant figures) dp - pocet desetinnych mist (decimal places) */ if (vals.length > 3) { newParam.round = vals[3]; } report("-- " + newParam.name); report(vals[2]); nahrada = new RegExp("{" + newParam.name + "}","g"); var result = evalExpr(otazka.used, vals[2], newParam.type) newParam.value = result[1]; newParam.raw = result[1]; var newValue = newParam.value; if (newParam.type === "nm") { var round = parseInt(vals[3]); newParam.value = zaokrouhlit(newParam.raw, vals[3]); var fixed = newParam.raw.toFixed(vals[3]); if (vals[3] == 0) fixed += "."; newParam.sf = getSigFigs(fixed); newParam.dp = round; report("NM: " + newParam.raw + ", rounded: " + newParam.value.toFixed(vals[3]) + ", sf: " + newParam.sf + ", dp:" + newParam.dp) newValue = newParam.raw.toFixed(vals[3]); } otazka.params[newParam.name] = newParam; otazka.used.push(newParam); task = task.replace(nahrada, (""+newValue).replace(".", ",")) solution = solution.replace(nahrada, (""+newParam.value).replace(".", ",")) } for (var i= 0; i< otazka.param_sol.length; i++) { var vals = otazka.param_sol[i].split(";"); var newParam = { name: vals[0], value: 0}; for (var j = 0; j < otazka.used.length; j++) { var par = otazka.used[j]; vals[1] = vals[1].replace(new RegExp(par.name, "g"), par.value ) } nahrada = new RegExp("{" + newParam.name + "}","g"); newParam.value = eval(vals[1]); if (vals[2].indexOf("nz") < 0) { newParam.value = zaokrouhlit(newParam.value, vals[2]); getCipherCount(newParam); } otazka.used.push(newParam); var val2 = ("" + newParam.value).replace(".", ",") solution = solution.replace(nahrada, val2) } report("--- param out ----") //vstupni policka spravne[index] = new Array(); for (i= 0; i< otazka.param_out.length; i++) { var vals = otazka.param_out[i].split(";"); var newParamOut = { name: vals[0], value: "XXX", type: vals[1], round: 0, sf: 0, dp: 0, tol: 0 } report("-- " + newParamOut.name); var result = evalExpr(otazka.used, vals[2], newParam.type) newParamOut.value = result[1]; var rounded = result[0].afterDot; //parseInt(vals[3]); var newValue = newParamOut.value; var nazev = ":n" + (i+1); if (newParamOut.type === "nm") { newParamOut.value = zaokrouhlit( newParamOut.value, rounded ); newParamOut.dp = rounded; } if (newParamOut.type === "nr") { newValue = newParamOut.value.toFixed(rounded); newParamOut.dp = result[0].afterDot; newParamOut.sf = result[0].sigFigs; } var tolerance = vals[4].trim(); if (tolerance.indexOf("%") > -1) { tolerance = tolerance.substring(0, tolerance.length-1); tolerance = parseFloat(tolerance)/100*newParamOut.value; } tolerance = zaokrouhlit(tolerance, newParamOut.dp); newParamOut.tol = tolerance; var nahrada = new RegExp("{" + newParamOut.name + "}","g"); var nahrada_prec = ""; if (task.indexOf(newParamOut.name + "-dp") > -1) { nahrada_prec = new RegExp("{" + newParamOut.name + "-dp}","g"); } var prec = "(zaokrouhlete na "; if (newParamOut.dp == 0) { prec += "celé číslo)" } if (newParamOut.dp == 1) { prec += "1 des. místo)" } if (newParamOut.dp > 1 && newParamOut.dp < 5) { prec += newParamOut.dp + " des. místa)" } if (newParamOut.dp > 5) { prec += newParamOut.dp + " des. míst)" } var tolerance = ""; if (newParamOut.type == "nm" || newParamOut.type == "nr") { tolerance = " ± " + newParamOut.tol; } if (newParamOut.type == "t") { prec = ""; newParamOut.tol = "" } if (tolerance == " ± 0" || tolerance == " ± NaN" ) { tolerance = ""; } var qid = "ot" + i + "_" + newParamOut.type + "_" + newParamOut.name; var fieldSize = ""; var valLength = ("" + newValue + tolerance).length fieldSize = " style=' max-width: " + (valLength*0.8) + "em'" if (nahrada_prec == "") { task = task.replace(nahrada," " + prec); } else { task = task.replace(nahrada," "); task = task.replace(nahrada_prec, prec); } solution = solution.replace(nahrada, ("" + newValue + tolerance).replace(".", ",") ); spravne[index].push(newParamOut); otazka.params[newParamOut.name] = newParamOut; otazka.used.push(newParamOut); } task = "
" + task + "
" task += "
 
" task += "
" task += "
"; task += solution; task += "
"; if (task.indexOf("{schema}") > -1) { console.log("Schema") task = task.replace(/\{schema\}/g, generateSchema(actQuestion.reaction)); } if (task.indexOf("{equation}") > -1) { task = task.replace(/\{equation\}/g, generateReaction(actQuestion.reaction)); } //task += "
"; //task += "
"; return vystup + task; } function generateSchema(reaction) { var out = [""]; for (var i = 0; i < reaction.reagents.length; i++) { var item = reaction.reagents[i] if (i > 0) { out.push("+") } out.push(getHTMLFormula(item)); } out.push("") for (var i = 0; i < reaction.products.length; i++) { var item = reaction.products[i] if (i > 0) { out.push("+") } out.push(getHTMLFormula(item)); } out.push("") return out.join(" "); } function generateReaction(reaction) { var out = [""]; for (var i = 0; i < reaction.reagents.length; i++) { var item = reaction.reagents[i] var index = item.koef; if (index == 1) index = ""; if (i > 0) { out.push("+") } out.push(index + " " + getHTMLFormula(item)); } out.push("") for (var i = 0; i < reaction.products.length; i++) { var item = reaction.products[i] var index = item.koef; if (index == 1) index = ""; if (i > 0) { out.push("+") } out.push(index + " " +getHTMLFormula(item)); } out.push("") return out.join(" "); } function getHTMLFormula(item) { var text = item.formula; var charge = "" if (text.indexOf("$")> 0) { var parts = text.split("$") text = parts[0] charge= "" + parts[1] + ""; } text = text.replace(/(\d+)/g, "$1") + charge; text = text.replace(/<\/sub>/g, "").replace(/-/g, "−").replace(/#/g, "≡"); return "" + text + ""; } function getReactionLists(example) { var list = [[],[],[],[]]; if (!example.prereq ) { for (var i = 0; i < reactions.length; i++) { for (var j = 0; j < reactions[i].length; j++) { list[i].push(j); } } return list; } /* if (!example.prereq || example.prereq.length == 0) { return reactions; } */ var isSr = example.prereq.indexOf("solution-reagent") > -1; var isGr = example.prereq.indexOf("gas-reagent") > -1; var isSp = example.prereq.indexOf("solution-product") > -1; var isGp = example.prereq.indexOf("gas-product") > -1; if (isSr && isSp) return index_srsp; if (isSr && isGp) return index_srgp; if (isSp && isGr) return index_grsp; if (isSr) return index_sr; if (isSp) return index_sp; if (isGr) return index_gr; if (isGp) return index_gp; return list; } function toggleSolution(input) { var sol = input.parentNode.parentNode.querySelector(".solution"); if (sol.style.display && sol.style.display == "block") { sol.style.display = "none"; input.value = "Zobrazit řešení" } else { sol.style.display = "block"; input.value = "Skrýt řešení" } } function getCipherCount(param) { var val = "" + param.value; param.afterDot = 0; param.sigFigs = 0; if (val.indexOf(".") > -1) { param.afterDot = val.length - 1 - val.indexOf("."); val = val.replace(".", ""); var nonzero = false; for (var i = 0; i < val.length; i++) { if (!nonzero && val[i] == "0") { continue; } if (!nonzero) { param.sigFigs++; nonzero = true; continue; } if (nonzero) { param.sigFigs++; } } } else { var nonzero = false; for (var i = val.length-1; i >-1; i--) { if (!nonzero && val[i] == "0") { continue; } if (!nonzero) { param.sigFigs++; nonzero = true; continue; } if (nonzero) { param.sigFigs++; } } } console.log( "Param: " + param.name + ", " + param.value + ", desetiny: " + param.afterDot + ", pc: " + param.sigFigs) } function getSigFigs(nb) { var val = "" + nb; val = val.replace("-", "") var mf = 0; if (val.indexOf(".") > -1) { val = val.replace(".", ""); var nonzero = false; for (var i = 0; i < val.length; i++) { if (!nonzero && val[i] == "0") { continue; } if (!nonzero) { mf++; nonzero = true; continue; } if (nonzero) { mf++; } } } else { var nonzero = false; for (var i = val.length-1; i >-1; i--) { if (!nonzero && val[i] == "0") { continue; } if (!nonzero) { mf++; nonzero = true; continue; } if (nonzero) { mf++; } } } return mf; } function evalExpr(params, expr, type) { //var expr = vals[1]; var node = jsep(expr); return [node, evalExprNode (node)] } function evalExprNode( node, type) { //report(node.type) if (node.type == "Literal") { getCipherCount(node); node.sigFigs = 100; node.afterDot = 100; report("literal: " + node.value + ", sf: " + node.sigFigs + ", ad: " + node.afterDot); return node.value; } if (node.type == "Identifier") { var prom = actQuestion.params[node.name]; node.value = prom.value; node.sigFigs = prom.sf; node.afterDot = prom.dp; report("Param: " + prom.name + ", val:" + node.value + ", sf: " + node.sigFigs + ", ad: " + node.afterDot) return prom.value; } if (node.type == "UnaryExpression") { report("UE: " + node.operator); if (node.operator == "-") { node.value = -evalExprNode(node.argument,type); node.sigFigs = node.argument.sigFigs; node.afterDot = node.argument.afterDot; return node.value; } } if (node.type == "BinaryExpression") { // report("BE: " + node.operator) var left = evalExprNode(node.left,type); var right = evalExprNode(node.right,type) var minAfter = Math.min(node.left.afterDot,node.right.afterDot); if (node.operator == "+") { node.afterDot = Math.min(node.left.afterDot,node.right.afterDot); node.afterDot = Math.max(node.afterDot,0); node.value = left + right; //zaokrouhlit(left + right, node.afterDot); node.sigFigs = getSigFigs(zaokrouhlit(node.value, node.afterDot)); /* report("BE+l sf: " + node.left.sigFigs + ", ad: " + node.left.afterDot) report("BE+r sf: " + node.right.sigFigs + ", ad: " + node.right.afterDot) report("BE+ val:" + node.value + ", sf: " + node.sigFigs + ", ad: " + node.afterDot) */ return node.value; } if (node.operator == "-") { node.afterDot = Math.min(node.left.afterDot,node.right.afterDot); node.afterDot = Math.max(node.afterDot,0); node.value = left - right; node.sigFigs = getSigFigs(zaokrouhlit(node.value, node.afterDot)); report("BE-l val:" + node.left.value + ", sf: " + node.left.sigFigs + ", ad: " + node.left.afterDot) report("BE-r val:" + node.right.value + ", sf: " + node.right.sigFigs + ", ad: " + node.right.afterDot) report("BE- val:" + node.value + ", sf: " + node.sigFigs + ", ad: " + node.afterDot) return node.value; } if (node.operator == "*") { node.sigFigs = Math.min(node.left.sigFigs,node.right.sigFigs); node.value = left * right; node.afterDot = 0; var sigs = node.value.toPrecision(limitSigFigs(node.sigFigs)); var dot = sigs.indexOf("."); if (dot > -1) { node.afterDot = sigs.length - dot - 1; } report("BE*l val: " + node.left.value + ", sf: " + node.left.sigFigs + ", ad: " + node.left.afterDot) report("BE*r val: " + node.right.value + ",sf: " + node.right.sigFigs + ", ad: " + node.right.afterDot) report("BE* val:" + node.value + ", sf:" + node.sigFigs) //console.log("* " + node.sigFigs); return node.value; } if (node.operator == "/") { node.sigFigs = Math.min(node.left.sigFigs,node.right.sigFigs); node.value = left / right; node.afterDot = 0; var sigs = node.value.toPrecision(limitSigFigs(node.sigFigs)); var dot = sigs.indexOf("."); if (dot > -1) { node.afterDot = sigs.length - dot - 1; } report("BE/l val: " + node.left.value + ", sf: " + node.left.sigFigs + ", ad: " + node.left.afterDot) report("BE/r val: " + node.right.value + ", sf: " + node.right.sigFigs + ", ad: " + node.right.afterDot) report("BE/ val:" + node.value + ", sf:" + node.sigFigs + ", ad:" + node.afterDot) return node.value; } } if (node.type == "CallExpression") { console.log("CallExpression: " + node.callee.name); if (node.callee.object) { var name2 = node.callee.object.name, prop = node.callee.property.name; report("-- fc:" + name2 + "." + prop); if (node.arguments.length == 2) { report("-- fc2 arg:" + node.arguments[0].type); return window[name2][prop](evalExprNode(node.arguments[0],type), evalExprNode(node.arguments[1],type)) } if (node.arguments.length == 1) { var arg = evalExprNode(node.arguments[0],type); node.value = window[name2][prop](arg) if (prop == "floor") { node.afterDot = 0; node.sigFigs = 100;//getSigFigs(val.toFixed(0)); } report("-- fc1 val: " + node.value + ", sf: " + node.sigFigs + ", ad: " + node.afterDot); return node.value; } if (node.arguments.length == 0) { node.sigFigs = 100; node.afterDot = 100; node.value = window[name2][prop](); report("-- fc0 val:" + node.value + ", sf: " + node.sigFigs + ", ad: " + node.afterDot); return node.value; } } if (node.callee.name == "getRandomElement") { actQuestion.element = getRandomElement(); return actQuestion.element; } if (node.callee.name == "getRandomIon") { actQuestion.element = getRandomIon(); return actQuestion.element; } if (node.callee.name == "getRandomReaction") { actQuestion.reaction = getRandomReaction(); return actQuestion.reaction; } if (node.callee.name == "getReagent") { console.log("getReagent: " + node.arguments[0].toString()); return getReagent(node.arguments[0].value); } if (node.callee.name == "nahodne") { if (node.arguments.length == 2) { return nahodne(node.arguments[0].value, node.arguments[1].value) } if (node.arguments.length == 1) { report("arg: " + node.arguments[0]) return nahodne(evalExprNode(node.arguments[0],type)) } } if (node.callee.name == "log") { var argObj = node.arguments[0]; var arg = evalExprNode( argObj, type); node.value = log(arg); node.afterDot = argObj.sigFigs; node.sigFigs = getSigFigs(zaokrouhlit(node.value, node.afterDot)); report("----log: val: " + node.value + ", sf:" + node.sigFigs + ", ad:" + node.afterDot); return node.value; } if (node.callee.name == "pow") { var argObj = node.arguments[0]; var argObj2 = node.arguments[1]; var arg1 = evalExprNode( argObj, type); var arg2 = evalExprNode( argObj2, type); node.value = pow(arg1, arg2); report("----pow: val: " + node.value + ", sf:" + argObj2.sigFigs + ", ad:" + argObj2.afterDot); node.sigFigs = argObj2.afterDot; var prec = node.value.toPrecision(limitSigFigs(node.sigFigs)); node.afterDot = Math.max(0, prec.length - prec.indexOf(".") -1); return node.value; } if (node.arguments.length == 0) { return window[node.callee.name]() } if (node.arguments.length == 1) { return window[node.callee.name](evalExprNode(node.arguments[0],type)) } } if (node.type == "MemberExpression") { var name = node.object.name || node.object.object.name , prop = node.property.name; report("Obj: " + name + "." + prop); console.log("Obj: " + name + "." + prop); if ( name == "data" ) { return window[node.object.name][node.property.name]; } if (node.object.object) { report("Obj.obj.val: " + window[node.object.object.name][node.object.property.name][actQuestion.params[node.property.name].value]); return window[node.object.object.name][node.object.property.name][actQuestion.params[node.property.name].value]; } if (name != "data" && name != "Math") { if (name.indexOf("data_") == 0) { var index = actQuestion.params[prop].value node.value = window[name][index]; report("Array: " + name + "." + prop + " val: " + node.value); return node.value; } return actQuestion.params[name].value[prop]; // } } } function getFirstNonZero(number) { return 2; } function checkAnswers(index) { var ok = true; var vystup =""; var question = document.querySelectorAll(".question")[index] var fb = question.querySelector(".feedback") var inputs = question.querySelectorAll("input[type=text]"); for (var i =0; i< inputs.length; i++) { var parts = inputs[i].name.split("_"); var pType = parts[1]; var pname = parts[2]; var hodnota = inputs[i].value; hodnota = hodnota.trim(); hodnota = hodnota.replace(/,/g, "."); if (pType.indexOf("n") > -1) { hodnota = Number(hodnota); if (isNaN(hodnota)) { fb.innerHTML = "Špatně. Zadejte číslo!"; return; } } /* } */ var spr = getCorrect(index, pname); console.log("Spravne: " + spr.value) var tolerance = spr.tol; /*if (tolerance.indexOf("%") > -1) { tolerance = parseInt(tolerance.substring(0, tolerance.length-1), 10); tolerance = spr.value * tolerance/100; }*/ var spravna = spr.value; console.log("T: " + spravna + " " + hodnota) if (pType == "t" && hodnota != spravna) { ok = false; } if (pType.indexOf("n") > -1) { if (hodnota > spravna + tolerance || hodnota < spravna - tolerance) ok = false; } } if (ok) vystup = "Správně." else vystup = "Špatně."; fb.innerHTML = vystup; } function getCorrect(index, name) { for(var i = 0; i < spravne[index].length; i++) { if (spravne[index][i].name == name) return spravne[index][i]; } return null; } function limitSigFigs(sfCount) { var out = Math.max(sfCount,1); out = Math.min(sfCount,21); return out; } //parsovani vzorce - zjisteni poctu atomu, molarni hmotnosti var actMol = null; function Group() { this.atoms = []; this.multiply = 1; this.sub = [] this.parent = null; } function getMolarWeight(reagent) { actMol = new Group(); parseGroup(reagent.formula, actMol); decimalPlaces = 10; var out = getGroupMr(actMol); return out //.toFixed(decimalPlaces); } function parseGroup(text, group) { var pos = 0; var start = text.charAt(0); //console.log(text + ", " + group); if (start == "(") { var end = text.indexOf(")"); var subtext = text.substring(pos + 1, end); end++ var number = "" while ("1234567890".indexOf(text.charAt(end)) > -1 && end < text.length) { number += text.charAt(end); end++; } if (number == "") {number = 1;} else {number = parseInt(number, 10)} var subgroup = new Group(); subgroup.multiply = number; parseGroup(subtext, subgroup); group.sub.push(subgroup); //console.log("Skupina - " + number) if (end < text.length) { parseGroup(text.substring(end), group) } return; } if (start == "[") { var end = text.indexOf("]"); var subtext = text.substring(pos + 1, end); end++ var number = "" while ("1234567890".indexOf(text.charAt(end)) > -1 && end < text.length) { number += text.charAt(end); end++; } if (number == "") {number = 1;} else {number = parseInt(number, 10)} var subgroup = new Group(); subgroup.multiply = number; parseGroup(subtext, subgroup); group.sub.push(subgroup); //console.log("Skupina - " + number) if (end < text.length) { parseGroup(text.substring(end), group) } return; } var elemName = "" if (isUppercase(start)) { elemName = start; pos++; var next = text.charAt(pos); if(isLowercase(next) ) { elemName += next; pos++; } var atom = [-1, 1]; atom[0] = getAtomIndex(elemName); var number = "" while ("1234567890".indexOf(text.charAt(pos)) > -1 && pos < text.length) { number += text.charAt(pos); pos++; } if (number == "") {number = 1;} else {number = parseInt(number, 10)} atom[1] = number; group.atoms.push(atom); //console.log(znacky[atom[0]] + " - " +atom[1] ) if (pos < text.length) { parseGroup(text.substring(pos), group) } } } function isUppercase(char) { var code = char.charCodeAt(0); return (code > 64 && code < 91); } function isLowercase(char) { var code = char.charCodeAt(0); return (code > 96 && code < 123); } function getAtomIndex(atom) { //console.log ("Hledam atom: " + atom) var index = znacky.indexOf(atom); return index; } var decimalPlaces = 10; function getGroupMr(group) { var mr = 0; for (var i = 0; i < group.atoms.length; i++) { var atom = group.atoms[i] var Ar0 = Ar_hodnoty[atom[0]] decimalPlaces = Math.min(decimalPlaces, getDecimalPlaces(Ar0)); mr += group.multiply*Ar0*atom[1]; } for (var i = 0; i < group.sub.length; i++) { mr += getGroupMr(group.sub[i]); } return mr; } function getGroupElems(group) { var elems = []; for (atom of group.atoms) { elems.push(atom[0]); } for (var i = 0; i < group.sub.length; i++) { elems = elems.concat(getGroupElems(group.sub[i])); } return elems; } function getDecimalPlaces(number) { var nString = "" + number; var places = nString.substring(nString.indexOf(".")+1).length console.log("" + number + ": " + places); return places; } //pomocne funkce function getValue(nodeId) { return document.getElementById(nodeId).value; } function setValue(nodeId, code) { document.getElementById(nodeId).value = code; } function setHTML(nodeId,code) { document.getElementById(nodeId).innerHTML = code; } function getHTML(nodeId) { return document.getElementById(nodeId).innerHTML; } function show(nodeId) { document.getElementById(nodeId).style.visibility = "visible"; } function hide(nodeId) { document.getElementById(nodeId).style.visibility = "hidden"; } function showBlock(nodeId) { document.getElementById(nodeId).style.display = "block"; } function hideBlock(nodeId) { document.getElementById(nodeId).style.display = "none"; } function disable (nodeId) { document.getElementById(nodeId).disabled = true; } function enable (nodeId) { document.getElementById(nodeId).disabled = false; } function Expr() { this.val = 0; this.roundCount = 0; this.sigFig = 0; this.tree = null; this.type = "simple"; this.children = []; this.getRoundCount = function () { if (this.type == simple) return this.roundCount; if (this.type == "addition" || this.type == "subtraction") { return Math.min(this.children[0], this.children[1]); } if (this.type == "multiplication" || this.type == "division") { return Math.min(this.children[0], this.children[1]); } } } function report(text) { document.getElementById("report").innerHTML += "

" + text + "

" } //window.addEventListener("load", initBase);