[JavaScript] Berechnende Funktionen greifen nicht...

Dieses Thema im Forum "Webentwicklung" wurde erstellt von Tha-Don, 19. März 2007 .

  1. 19. März 2007
    Berechnende Funktionen greifen nicht...

    Hey Leutz,
    ich habe mal wieder eine Bitte um eine Fehlersuche bei der Informatikhausaufgabe meiner Freundin.

    Aufgabe:


    Erstelle ein HTML-Dokument, das mit Hilfe von Funktionen in JavaScript
    und Formularelementen einen kleinen Additionstrainer realisiert,
    wobei der Benutzer zwischen drei Schwierigkeitsstufen wählen kann.

    Tipps:

    Hinweise zur Programmumsetzung:

    - Bei leichten Aufgaben sollen beide Summanden zwischen 1 und 10 liegen.
    - Bei mittlerern Aufgaben sollen beide Summanden zwischen 11 und 100 liegen.
    - Bei schweren Aufgaben sollen beide Summanden zwischen 101 und 500 liegen.
    - Zufallszahl:

    //var zufallszahl = Math.floor(Math.random()*n+1);

    - Speichere die Lösung einer Aufgabenstellung unter einem beliebigen Variablennamen
    in dem Moment, zu dem die Aufgabe generiert wird.

    Das hier ist ihr Ansatz, allerdings scheinen die Funktionen irgedwie nicht greifen zu wollen.

    Ansatz:

    Code:
    <html>
    <head>
    <title></title>
    <meta name="author" content="Schueler">
    <meta name="generator" content="Ulli Meybohms HTML EDITOR">
    </head>
    <body text="#000000" bgcolor="#FFFFFF" link="#FF0000" alink="#FF0000" vlink="#FF0000">
    
    <script language="JavaScript">
    <!--
    
    function aufg()
    { if(document.form.grad[0].checked == true)
     var x = Math.floor(Math.random()*10+1);
     var y = Math.floor(Math.random()*10+1);
    document.form.aufgabe.value = ' ' + String(x)' + ' + String(y);
     if(document.form.grad[1].checked == true)
     var x = Math.floor(Math.random()*100+1);
     var y = Math.floor(Math.random()*100+1);
    document.form.aufgabe.value = String(x) + String(y);
     if(document.form.grad[2].checked == true)
     var x = Math.floor(Math.random()*500+1);
     var y = Math.floor(Math.random()*500+1);
    document.form.aufgabe.value = String(x) + String(y);
     }
    
    
    function kont()
    { b = x + y
    
     if (b == "Antwort")
     document.form.kommentar.value = "Richtig!"
     else
     document.form.kommentar.value = "Falsch!"
    }
    
    
    function loesung()
    { var l = x + y
     document.form.antwort.value = String(l)
    
    }
     //-->
    </script>
    <noscript></noscript>
    
    
    <div align="center">
    <p><b>KLEINER ADDITIONSTRAINER</b></p>
    <p><b>Schwierigkeitsgrad</b></p>
    
    <form name="form">
    <input type="Radio" name="grad" value="v">leicht
    <input type="Radio" name="grad" value="v" checked>mittel
    <input type="Radio" name="grad" value="v">schwer<br><br>
    
    <b>Aufgabe</b><br>
    <input type="Text" name="aufgabe" value="" size="30" maxlength="30" sytle="border.color: transparent" style="border style: none"><br><br>
    
    <b>Meine Antwort</b><br>
    <input type="Text" name="Antwort" value="" size="10" maxlength="50"><br><br>
    
    <input type="Button" name="Aufgabe" value=" AUFGABE " onclick="aufg()">
    <input type="Button" name="Kontrolle" value=" KONTROLLE " onclick="kont()">
    <input type="Button" name="Lösung" value=" LÖSUNG " onclick="loesung()"><br><br>
    
    <input type="Text" name="kommentar" value="" size="30" maxlength="30" sytle="border.color: transparent" style="border style: none">
    
    
    </form>
    </div>
    </body>
    </html>
    
    Diese Probleme treten auf:

    - Aufgabe erscheint nicht -> keine weiteren Eingaben möglich
    - Buttons funktionieren nicht bzw. greifen nicht auf die Funktion zu




    Bewertungen sind für alle drinne die helfen (selbstverständlich)...

    Hoffe auf Hilfe.

    Bb MfG Tha-Don
     
  2. 19. März 2007
    AW: Berechnende Funktionen greifen nicht...

    der grund warums nicht funktioniert liegt in zeile 16, da fehlt ein +
    aber auch dann sind noch einige fehler im script, z.B. fehlen geschweifte klammern, ausserdem werden x und y nicht global gespeichert, daher kann das ergebniss nachher nicht kontrolliert werden
    aber ich will dir ja nicht die hausaufgabe machen, deshalb kannst du das auch selber verbessern
     
  3. 19. März 2007
    Genau das ist es was meine Freundin wollte. Anregungen wo das Problem liegt und KEINE Kompletthausaufgabe, denn dann wird die nächste Arbeit wieder ein 1 Punkt Festival.

    Vielen Dank! Wenn weitere Probleme auftauchen, werde ich diesen Post hier editieren oder neu posten.

    Bb MfG Tha-Don

    2. Beitrag: (zusammengefügt)
    Das hier ist nun die veränderte Funktion, bei der der leichte Schwierigkeitsgrad jetzt zwar funktioniert, jedoch immer noch nicht unter Kontrolle ist, obwohl x und y global gespeichert sind.

    Einige Klammerfehler wurden möglicherweise behoben, fehlende wurden jedoch nicht erkannt.

    Code:
    <html>
    <head>
    <title></title>
    <meta name="author" content="Schueler">
    <meta name="generator" content="Ulli Meybohms HTML EDITOR">
    </head>
    <body text="#000000" bgcolor="#FFFFFF" link="#FF0000" alink="#FF0000" vlink="#FF0000">
    
    <script language="JavaScript">
    <!--
    var x = Math.floor(Math.random()*n+1);
    var y = Math.floor(Math.random()*n+1);
    
    function aufg()
    { if(document.form.grad[0].checked == true)
     var x = Math.floor(Math.random()*10+1);
     var y = Math.floor(Math.random()*10+1);
    document.form.aufgabe.value = String(x)+ ' + ' + String(y);
    }
    { if(document.form.grad[1].checked == true)
     var x = Math.floor(Math.random()*100+1);
     var y = Math.floor(Math.random()*100+1);
    document.form.aufgabe.value = String(x)+ ' + ' + String(y);
    }
    { if(document.form.grad[2].checked == true)
     var x = Math.floor(Math.random()*500+1);
     var y = Math.floor(Math.random()*500+1);
    document.form.aufgabe.value = String(x)+ ' + ' + String(y);
     }
    
    
    function kontroll()
    { b = x + y
    
    if (b == "Antwort")
     document.form.kommentar.value = "Richtig!"
    else
     document.form.kommentar.value = "Falsch!"
    }
    
    function loesung()
    { var l = x + y
     document.form.antwort.value = String(l);
    
    }
     //-->
    </script>
    <noscript></noscript>
    
    <div align="center">
    <p><b>KLEINER ADDITIONSTRAINER</b></p>
    <p><b>Schwierigkeitsgrad</b></p>
    
    <form name="form">
    <input type="Radio" name="grad" value="v" checked>leicht
    <input type="Radio" name="grad" value="v" checked>mittel
    <input type="Radio" name="grad" value="v" checked>schwer<br><br>
    
    <b>Aufgabe</b><br>
    <input type="Text" name="aufgabe" value="" size="30" maxlength="30" sytle="border.color: transparent" style="border style: none"><br><br>
    
    <b>Meine Antwort</b><br>
    <input type="Text" name="Antwort" value="" size="10" maxlength="50"><br><br>
    
    <input type="Button" name="Aufgabe" value=" AUFGABE " onclick="aufg()">
    <input type="Button" name="Kontrolle" value=" KONTROLLE " onclick="kontroll()">
    <input type="Button" name="Lösung" value=" LÖSUNG " onclick="loesung()"><br><br>
    
    <input type="Text" name="kommentar" value="" size="30" maxlength="30" sytle="border.color: transparent" style="border style: none">
    
    
    </form>
    </div>
    </body>
    </html>
    
    Ich muss leider noch einmal fragen, da sie nicht weiterkommt.

    Bb MfG Tha-Don
     
  4. 19. März 2007
    AW: Berechnende Funktionen greifen nicht...

    Naja, ich wollte grad schon den ganzen Code posten, aber du hast natürlich recht: selber lernen ist immer besser
    Also, folgende Fehler:
    - das if-Statement bezieht sich ohne Klammerung nur auf die Zeile darunter!
    if(document.form.grad[0].checked == true)
    var x = Math.floor(Math.random()*10+1);
    var y = Math.floor(Math.random()*10+1);
    document.form.aufgabe.value = String(x)+ ' + ' + String(y);

    Die letzten beiden Zeilen werden also IMMER ausgeführt.

    - var x = Math.floor(Math.random()*n+1); <-- ?
    lass einfach überall das 'var' vor den Variablen x und y weg, damit sind sie automtaisch global.

    - die Berechnung ist auch falsch, bei dir geht der Bereich der Zahlen immer von 0 bis MAX! Müsste so in der Art richtiger sein:
    y = Math.floor((Math.random()*(500-101+1))+101);

    - du solltest eine init-Funktion haben, da das "checked" bei der zweiten Checkbox nicht unbedingt von JavaScript erkannt wird. Du musst erst auf etwas klicken, bevor eine Aufgabe erscheint.
    z.b.:
    function init()
    {
    document.form.grad[1].checked = true;
    x = 0;
    y = 0;
    }

    die könntest du mit onLoad="init()" im body-Tag laden lassen. Dazu müsstest du aber (glaub ich) den Script-Bereich aus dem Body in den Head packen.

    - ich würde die Felder Aufgabe und Kommentar auf nur-lesen setzen und die doppelten style-angaben sind nicht zulässig. Also z.b.:
    <input type="Text" name="kommentar" value="" size="30" maxlength="30" sytle="border-color: transparent;border-style: none;" readonly>

    - Zudem fehlen in den unteren Funktionen Semikolons und ich würde sowas vorziehen. if (b == parseInt(document.form.antwort.value))

    So... nen bisschen Schützenhilfe ^^
    Gruß

    P.S.: deine jetzige Klammerung der if-Anweisungen ist ziemlich falsch
     
  5. Video Script

    Videos zum Themenbereich

    * gefundene Videos auf YouTube, anhand der Überschrift.