NOVINKA - Online rekvalifikační kurz Java programátor. Oblíbená a studenty ověřená rekvalifikace - nyní i online.
NOVINKA – Víkendový online kurz Software tester, který tě posune dál. Zjisti, jak na to!
Avatar
Pluhtík
Člen
Avatar
Pluhtík:13.1.2017 21:49

Ahojte,
chtěl bych vytvořit program, který mi vypočítá průměr známek v JS (abych ho mohl snadno sdílet se spolužáky), ale nemůžu se dostat přes tyhle kódy - viz níže. Jednak mi nefunguje celý javascriptový soubor (propojené soubory ale jsou, to vím na 100%) a jednak netuším, jak hodnotu vybraného option v selectu přeměnit na desetinné číslo. Předpokládám, že na konci bych měl mít 10 takových řádků na známek.
Prvně vím, že mi něco chybí mezi getElementById a .value. Potom netuším, jak vytáhnout číslo, které je zapsané v textovém poli. Počítám, že musím každému textovému poli (až jich tam dám těch 10) přiřadit jiné ID a z těchto ID pak udělat součet? Pokud by mě někdo nakopl, byl bych moc vděčný.

HTML soubor:

<!DOCTYPE html!>
<html>
  <head>
  <meta http-equiv="content-type" content="text/html; charset="utf-8">
  <title>Výpočet průměru známek pro OA Přerov</title>
  <script src="script.js"></script>
  </head>
  <body>
  <button id="tlacitko">Click</button>
    <p><table>
      <tr><th>Typ zkoušení</th><th>Známka</th></tr>
      <tr><td>
        <select id="vyber">
          <option value="0">Vyberte typ zkoušení</option>
          <option value="0,1">Malý domácí úkol</option>
          <option value="0,2">_20</option>
          <option value="0,333">_33,3</option>
          <option value="0,4">Pětiminutovka - krátké opakovací zkoušení</option>
          <option value="0,4">Samostatná práce</option>
          <option value="0,4">_40</option>
          <option value="0,6">Desetiminutovka - krátké opakovací zkoušení</option>
          <option value="0,6">Referát</option>
          <option value="0,6">Domácí úkol</option>
          <option value="0,6">_60</option>
          <option value="0,666">_66,6</option>
          <option value="0,8">Dvacetiminutovka - opakovací zkoušení</option>
          <option value="0,8">_80</option>
          <option value="1">Ústní zkoušení</option>
          <option value="1">Čtvrtletní zkoušení</option>
          <option value="1">Písemné zkoušení</option>
          <option value="1">_100</option
        </select>
      </td><td><input type="text" id="cislo"></td></tr>
    </table></p>
  </body>
</html>

JS soubor:

window.onload function () {
function prumer () {
 var a = getElementById("vyber").value;
 var b = getElementById("cislo").value;
 var x = Number(a);
 var y = Number(b);
 var z = x + y;
 alert(z);
}

tlacitko.onclick = prumer;
}

Alert v JS mám jen na vlastní zkoušku a takhle jsem zjistil, že mi to vůbec nefunguje.

 
Odpovědět
13.1.2017 21:49
Avatar
Michal
Člen
Avatar
Odpovídá na Pluhtík
Michal:13.1.2017 23:12

Ahoj.

Proč se vůbec nespouští funkce prumer()?
Událost po kliknutí na tlačítko tlacitko.onclick = prumer je třeba napsat dovnitř metody window.onload, která zajistí, že se veškerý kód uvnitř ní spustí až po načtení stránky. Také zde chybí rovnítko:

window.onload = function() {
   document.getElementById('tlacitko').onclick = prumer;
}

function prumer() {...}

Jak hodnotu ze selectu přeměnit na číslo?
V tomto případě bych ti doporučoval vůbec nepoužívat desetinné čárky, ale tečky. Je to rychlejší a bezproblémovější řešení:

// HTML
<select id="vyber">
   <option value="0.4">_40</option>
<select>

// JavaScript
var vaha = document.getElementById('vyber').value;

Jak získat hodnotu z textového pole?
Pokud zde je jedno pole, můžeš dané textové pole vybrat pomocí ID. Při větším množstvím polí můžeš ale použít document.getE­lementsByTagNa­me().

// HTML
<input type="text" id="cislo">

// JavaScript
var znamka = document.getElementById('cislo').value;

Pokusil jsem se vytvořit také ukázku jednoduchého programu, do kterého se postupně zadávají známky a jejich váhy. Při každém přidání se vypíše průměr do níže položeného odstavce.

 
Nahoru Odpovědět
13.1.2017 23:12
Avatar
Pluhtík
Člen
Avatar
Pluhtík:13.1.2017 23:38

Děkuji moc za rady. Můžeš mi jen vysvětlit, co má dělat tato funkce?

function pridatZnamku() {
    var vaha = document.getElementById('vyber').value * 10;
    var znamka = document.getElementById('cislo').value;

    for (var i = 0, l = vaha; i < l; i++) {
        znamky.push(znamka);
    }

    document.getElementById('prumerna-znamka').innerHTML = spocitejPrumer(znamky);
}

Pro upřesnění průměru. Průměr se (alespoň u nás na škole) počítá tak, že mám-li dvě známky:
1 a 2, přičemž první známka je 100% a druhá jen 50%, tak průměr se vypočítá (1+2) / (1+1,5).

Editováno 13.1.2017 23:41
 
Nahoru Odpovědět
13.1.2017 23:38
Avatar
Pluhtík
Člen
Avatar
Pluhtík:13.1.2017 23:45

Hloupost samozřejmě, ten průměr. Ale už mi to nejde opravit :/

 
Nahoru Odpovědět
13.1.2017 23:45
Avatar
Michal
Člen
Avatar
Odpovídá na Pluhtík
Michal:14.1.2017 9:18

Ta funkce nejdříve vezme hodnotu ze <select>, kde je uložena váha známky (např. 0.2) a vynásobí ji deseti, bude zde tedy uložena hodnota 2. Poté se z textového pole načte hodnota, která reprezentuje samotnou známku (např. 3) a nakonec tuto známku vloží do pole se všemi známkami tolikrát, jako je váha známky.

Ukážu to na tvém příkladu. Máš-li dvě známky, 1 (váha 1) a 2 (váha 0,5), výsledné pole se všemi známkami bude vypadat jako:

znamky = [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2]; // Odpovídá průměru 1,333...

Posledním krokem je už jen vypsání průměru pole se všemi známkami do odstavce.

 
Nahoru Odpovědět
14.1.2017 9:18
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.

Zobrazeno 5 zpráv z 5.