Tvořím aplikaci na procvičování převodů jednotek a vytvořil jsem
množinu jednotek (zatím jen vzdálenost, ale chci více druhů), které se
sami vybírají. Potřebuju aby se vygenerované jednotky nerovnaly, protože
pak by příklad neměl smysl. Také potřebuji správně definovat vztah mezi
jednotkami o kolik je daná jednotka vůči druhé menší/větší. Moc si s
tím nevím rady, něco jsem hledal, něco jsem zkoušel... Doufám že mi tady
poradíte
<!DOCTYPE HTML>
<html >
<head>
<title>Převodník jednotek</title>
</head>
<body>
<div id="container">
<h1>Převodník jednotek</h1>
<form action="#">
<p>Převeď centimetry na metry. <br> Jako destinnou čárkou používej tečku.</p>
<p>Příklad č. <a id="priklad">0</a></p>
<input id="generated" type="text" readonly>
<label id="zadani0"></label>
<label> = </label>
<input id="number" >
<label id="zadani1"></label>
<label id="spravny_vysledek" style="color:red;"></label>
<label id="test"></label>
<br>
<p>Pokusy: <a id="pokus">0</a><br>
Správně: <a id="spravne">0</a><br>
Špatně <a id="spatne">0</a></p>
<button id="button" type="button">Zkontrolovat</button>
<br>
<br>
<button id="generovat" type="button">Generovat nový příklad</button>
</form>
</div>
<script>
(function( d ) {
d.getElementsByTagName( 'form')[0].reset();
document.getElementById("generovat").addEventListener( "click" , generator );
var priklad = 0;
var pokus = 0;
var spravne = 0;
var spatne = 0;
function generator(){
priklad += 1;
document.getElementById("priklad").innerHTML = priklad;
var zadani = [
"mm",
"cm",
"dm",
"m",
"km"
];
var zadani0 = zadani[Math.floor(Math.random()*zadani.length)];
var zadani1 = zadani[Math.floor(Math.random()*zadani.length)];
if (zadani0 == zadani1) {
zadani1 = zadani[0];
}
elseif (zadani0 == zadani1) {
zadani1 = zadani[2];
}
else {
}
d.getElementById("zadani0").innerHTML = zadani0;
d.getElementById("zadani1").innerHTML = zadani1;
d.getElementById( 'generated' ).value = Math.floor(( Math.random() * 10001 ) - 5000) / 10;
d.getElementById("spravny_vysledek").innerHTML = "";
d.getElementById("number").value = "";
d.getElementById("test").innerHTML = "";
};
d.getElementById( 'button' ).addEventListener( 'click',
function() {
pokus += 1;
document.getElementById("pokus").innerHTML = pokus;
var x = d.getElementById( 'generated' ).value;
var y = d.getElementById( 'number' ).value;
var z = 1;
var a = x / z;
var jednotka = d.getElementById("zadani1").innerHTML;
if ( a == y ) {
text = "✔";
vysledek = "";
spravne += 1;
}
else {
text = "✘";
vysledek = "Správný výsledek je " + a + " " + jednotka;
spatne += 1;
}
document.getElementById("test").innerHTML = text;
document.getElementById("spravny_vysledek").innerHTML = vysledek;
document.getElementById("spatne").innerHTML = spatne;
document.getElementById("spravne").innerHTML = spravne;
}, false );
}( document ));
</script>
</body>
</html>
function $(id) {returndocument.getElementById(id);} // to by ti tam zjednodusilo praci...function rnd(n) {return Math.floor(Math.random()*n);}
x = zadani.length; // nepouzivej opakovane pole.length, pokud ti zalezi na rychlosti
a = rnd(x)
b = rnd(x)
while (a==b) {b = rnd(x)} // jenze to muze provest treba 1-1000 opakovani takze by mozna bylo lepcejsi...if (a==b) {b = (b+1+rnd(x-1)) % x}
// cili b+1, aby posun byl min +1// rnd(x-1), aby posun nebyl max protoze by ses dostal na zacatek// % x je zbytek po celeciselne deleni, to funguje tak, ze vraci f(cislo, x) = 0 az x-1 = (cislo/x - floor(cislo/x)) * x
x = 3
a = 1
b = 1
---
b+1 = 2
rnd(x) kdyby ti vyslo 2, cili max hodnota
b+1+2 = 2+2 = 44 % 3 = 1 == a, coz se rovna puvodne 'a' a tos nechtel, tak proto rnd(x-1)
---
b + 1 proto, ze rdn vychazi i 0, takze by mohl nastat pripad
b + rnd(x-1) = b + 0
Díky za rady, vykoumal jsem to trošku jinak, ale pomohli jste mi. Ještě
bych ale potřeboval nějak definovat vztahy mezi jednotkama. Ve smyslu že 1 m
= 100 cm atd... Mám řešení s podmínkou, ale řekl bych že to je přímo
prasácký xD. Uvítal bych rady
Pouzij tabulku osami x-x, to mi prijde jednoduche, prehledne, snadno
doplnitelne treba o prevody u prace na joule-watt.
.001 = 1e-3
1000 = 1e3
1000000 = 1e6
No, tabulku x-x. Nevim, jak to rici jinak. Bud mas tabulku x+radky nebo x-y
nebo jinou. popisky z x pouzijes pro y. Jsem teda predpokladal asi mysle, ze
umis tabulku zapsat do js array.
y\x mm cm dm
mm 00.10.01
cm 1000.1
dm 100100
y = dm z jednotek
x = mm do jednotek
nasobek = tab[y][x] = 100// zapisuje se to takto// tab = []// tab[2] = []// tab[2][0] = 100// nebo// tab = []// tab[2] = [100, 10, 0, 0.1]// nebo
tab = [
[0, 0.1, 0.01],
[10, 0, 0.1, 0.01], // v podstate zkopirujes radek a pred prvni cislo napises nove; cisla na konci nemusis mazat
[100, 0, 0.1, 0.01] // posledni je bez carky
]
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.