var otazky = new Array() var spravne = new Array() 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("$")) } } } 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 } } 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 cbrt(arg) { return Math.cbrt(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, krok) { if (krok != undefined) { var count = Math.floor((horni-spodni)/krok)+1; return spodni + krok*Math.floor(count*Math.random()); } else { return spodni + Math.random()*(horni-spodni) } } 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 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]; var task = otazka.task //priklady[index*3 + 2] var solution = otazka.solution; otazka.used = []; //vstupni parametry for (var i= 0; i< otazka.param_in.length; i++) { var vals = otazka.param_in[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] != "t" && vals[2].indexOf("nz") == -1 ) { newParam.value = zaokrouhlit(newParam.value, vals[2]) } otazka.used.push(newParam); var nahr2 = "" + newParam.value; if (vals[2] != "t" && nahr2.indexOf("e") > -1) { var mantisa = nahr2.substring(0, nahr2.indexOf("e")); var exp = nahr2.substring(nahr2.indexOf("e")+1); nahr2 = mantisa + "×10" + exp + ""; } task = task.replace(nahrada, nahr2); solution = solution.replace(nahrada, nahr2); } task = task.replace(/(\d)\.(\d)/g, "$1,$2"); task = task.replace(/×/g, "·"); //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: 0, tol: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 ) } if (vals[2] != "tf") { newParamOut.type= "n" newParamOut.value = eval(vals[1]); var rounded = parseInt(vals[2]) var nazev = ":n" + (i+1); newParamOut.value = zaokrouhlit( newParamOut.value, rounded ) var tolerance = parseFloat(vals[3]); newParamOut.tol = tolerance; newParamOut.tolType = "a" if (vals[3].indexOf("%") > -1) { newParamOut.tolType = "r"; newParamOut.tol /= 100; } var nahrada = new RegExp("<" + newParamOut.name + ">","g") var sprVal = "" + newParamOut.value + " ± " + ((newParamOut.tolType == "a") ? newParamOut.tol : newParamOut.tol*newParamOut.value); //task = task.replace(nahrada," ") task = task.replace(nahrada," ") solution = solution.replace(nahrada, sprVal); } else { //otazky t/f newParamOut.type= "r" newParamOut.value = eval(vals[1]); var nazev = ":r" + (i+1); var nahrada = new RegExp("<" + newParamOut.name + ">","g"); var repl = " "; repl += " "; task = task.replace(nahrada,repl); solution = solution.replace(nahrada,repl); } spravne[index].push(newParamOut); otazka.used.push(newParamOut); } if (otazka.param_sol && otazka.param_sol.length > 0) { 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]); //vals[1] if (vals[2] != "t" && vals[2].indexOf("nz") == -1 ) { newParam.value = zaokrouhlit(newParam.value, vals[2]) } otazka.used.push(newParam); var nahr2 = "" + newParam.value; if (vals[2] != "t" && nahr2.indexOf("e") > -1) { var mantisa = nahr2.substring(0, nahr2.indexOf("e")); var exp = nahr2.substring(nahr2.indexOf("e")+1); nahr2 = mantisa + "×10" + exp + ""; } solution = solution.replace(nahrada, nahr2); } } task += "
 
"; task += "
"; task += "

Řešení

" + solution +"
"; task += "
"; return vystup + task; } 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 pname = inputs[i].name; pname = pname.substring(pname.indexOf("_") + 1); var hodnota = inputs[i].value; hodnota = hodnota.replace(/\s/g, ""); hodnota = hodnota.replace(/,/g, "."); hodnota = Number(hodnota); if (isNaN(hodnota)) { fb.innerHTML = "Špatně. Zadejte číslo!"; return; } var spr = getCorrect(index, pname); var tolerance = spr.tol; var spravna = spr.value; //if (hodnota > spravna + tolerance || hodnota < spravna - tolerance) ok = false; //if (tolerance.charAt() ) if (spr.tolType == "a" && Math.abs(hodnota - spravna) > tolerance) ok = false; if (spr.tolType == "r" && Math.abs(hodnota - spravna)/spravna > tolerance) ok = false; } var isChecked = false; var radios = question.querySelectorAll("input[type=radio]"); for (var i =0; i< radios.length; i++) { var pname = radios[i].name; pname = pname.substring(pname.indexOf("_") + 1); var hodnota = radios[i].checked; var spr = getCorrect(index, pname); if (radios[i].checked) isChecked = true if ( i== 0 && radios[i].checked && !spr.value ) ok = false if ( i== 1 && radios[i].checked && spr.value ) ok = false } if (radios.length > 0 && !isChecked) 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 toggleSolution(input) { var sol = input.parentNode.nextElementSibling; if (sol.classList.contains("shown")) { input.value = "Ukázat řešení"; sol.classList.remove("shown"); } else { input.value = "Skrýt řešení"; sol.classList.add("shown"); } } //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; }