Autor Zpráva
TomV
Profil *
Prosím o rychlé řešení, spěchá, už dnes do odpoledne...
Zdravím, dělám stránku na počítání slovních úloh o pohybu.

1. Chyba nastává při zvolení úloh Proti sobě, vyplnění rychlosti 1, 2, času navíc (např. t + 2) a celkové dráhy. V tomto případě vychází mínusové výsledky, např. t= -0.13333333333333333h. V kódu se jedná o hned první případ, if s if. Nevíte tedy, proč to vychází záporně a nevychází zkouška?

2. Chyba je u slovních úloh za sebou bez vyplněného času, zde se to také nerovná... Nevíte někdo, proč? V kódu se jedná o else else.

3. Chyba nastává u slovních úloh za sebou s vyplněným časem, zase např. 2 h. Tentokrát to neukazuje vůbec s1, s2 a zkoušku. Pokud Vám to ukazuje, obnovte si stránku a zadejte tam tyto hodnoty znovu. Po kliknutí na tlačítko jsou tyto 3 prázdné, bez výsledků. Nevíte, proč? V kódu se jedná o else if.

                    function solve(){
                     var inputSpeed1 = parseInt(document.getElementById("inputSpeed1").value, 10);
                     var inputSpeed2 = parseInt(document.getElementById("inputSpeed2").value, 10);
                     var inputTime1 = parseInt(document.getElementById("inputTime1").value, 10);
                     var overallLength = parseInt(document.getElementById("overallLength").value, 10);
                        if (document.getElementById("against_each_other").checked == true) {
                            var lengthSum = inputSpeed1 + inputSpeed2;
                            document.getElementById("equation").innerHTML = "s1 + s2 = s";
                            if(inputTime1 > 0) {
                                var x = inputSpeed1*inputTime1;
                                var y = overallLength-x;
                                document.getElementById("procedure").innerHTML = inputSpeed1 + " · (t + " + inputTime1 + ") + " + inputSpeed2 + "t = " + overallLength + "<br>" + inputSpeed1 + "t + " + x + " + " + inputSpeed2 + "t = " + overallLength + " /- " + x + "<br>" + lengthSum + "t = " + y + " /: " + lengthSum + "<br>" + "t = " + y/lengthSum + "h";
                                var result = (overallLength - inputTime1 * inputSpeed1)/(inputSpeed1 + inputSpeed2);
                                document.getElementById("resultTime").innerHTML = result;
                                var t1 = result + inputTime1;
                                document.getElementById("t1").innerHTML = t1;
                                var s1 = inputSpeed1 * (result + inputTime1);
                                s1 = document.getElementById("s1").innerHTML;
                                var s2 = inputSpeed2 * result;
                                s2 = document.getElementById("s2").innerHTML;
                                document.getElementById("test").innerHTML = s1 + s2 + "=" + overallLength;
                            }
                            else {
                                document.getElementById("procedure").innerHTML = inputSpeed1 + "t + " + inputSpeed2 + "t = " + overallLength + "<br>" + lengthSum + "t = " + overallLength + " /: " + lengthSum + "<br>" + "t = " + overallLength/lengthSum + "h";                                
                                var result = overallLength / (inputSpeed1 + inputSpeed2);
                                document.getElementById("resultTime").innerHTML = result;
                                document.getElementById("t1").innerHTML = result;
                                var s1 = inputSpeed1 * result;
                                document.getElementById("s1").innerHTML = s1;
                                var s2 = inputSpeed2 * result;
                                document.getElementById("s2").innerHTML = s2;
                                document.getElementById("test").innerHTML = s1 + s2 + "=" + overallLength;
                            }
                        }
                        else {
                            document.getElementById("equation").innerHTML = "s1 = s2";
                            if(inputTime1 > 0){
                                var x = inputSpeed1*inputTime1;
                                var y = inputSpeed2-inputSpeed1;
                                document.getElementById("procedure").innerHTML = inputSpeed1 + " · (t + " + inputTime1 + ") = " + inputSpeed2 + "t" + "<br>" + inputSpeed1 + "t + " + x + " = " + inputSpeed2 + "t" + " /- " + inputSpeed1 + "t" + "<br>" + x + " = " + y + "t /: " + y + "<br>" + "t = " + x / y + "h";
                                var result = (inputSpeed1 * inputTime1) / (inputSpeed2 - inputSpeed1);
                                document.getElementById("resultTime").innerHTML = result;
                                var t1 = result + inputTime1;
                                document.getElementById("t1").innerHTML = t1;
                                var s1 = inputSpeed1 * (result + inputTime1);
                                s1 = document.getElementById("s1").innerHTML;
                                var s2 = inputSpeed2 * result;
                                s2 = document.getElementById("s2").innerHTML;
                                document.getElementById("test").innerHTML = s1 + "=" + s2;
                            }
                            else {
                                document.getElementById("procedure").innerHTML = inputSpeed1 + "t = " + inputSpeed2 + "t /: " + inputSpeed1 + "<br>" + "t = " + inputSpeed2/inputSpeed1 + "h";
                                var result = inputSpeed2/inputSpeed1
                                document.getElementById("resultTime").innerHTML = result;
                                document.getElementById("t1").innerHTML = result;
                                var s1 = inputSpeed1 * result;
                                document.getElementById("s1").innerHTML = s1;
                                var s2 = inputSpeed2 * result;
                                document.getElementById("s2").innerHTML = s2;
                                document.getElementById("test").innerHTML = s1 + "=" + s2;
                            }
                        }
                    }
                </script>
        </section>
    </body>
</html>



Přitom var s1 = inputSpeed1 * (result + inputTime1); by mělo být správně pro 3. chybu, tudíž nevím, proč se to nezobrazuje vůbec.
Kajman
Profil
Prohlížeče mají vývojářskou konzoli (často dostupnou přes F12), tam lze procházení skriptu krokovat. Tak si tím skript řádek pořádku projděte a kontrolujte hodnoty proměnných, jestli v nich je to, co čekáte.
Tomášeek
Profil
TomV:
Ono to má víc problémů.

Pokud zadám typ "Proti sobě" a vyplním číselně první 3 hodnoty (kromě "Celkem", které mi to má asi spočítat), mám ve výsledkové části místo půlky výpočtů NaN. Zkoumat a opravovat ten script se mi ale nechce.
TomV
Profil *
Vše opraveno a dokonce jsem stihl i více věcí. Děkuji teda za snahu.

Vaše odpověď

Mohlo by se hodit

Neumíte-li správně určit příčinu chyby, vkládejte odkazy na živé ukázky.
Užíváte-li nějakou cizí knihovnu, ukažte odpovídajícím, kde jste ji vzali.

Užitečné odkazy:

Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm: