Javascript Mathe Aufgabe

Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

  • Javascript Mathe Aufgabe

    Ja unzwar habe ich eien Hausaufgabe bekommen die ich lösen soll schön und gut bin nun weit gekommen aber nun bin ich durcheinander irgendwie spuckt er mir nicht das aus was ich will ich bitte um eure hilfe nein ihr müsst sie nicht lösen :D wäre natürlich extrem nett xD

    Also so weit bin ich gekommen:

    <script language="JavaScript" type="text/javascript">
    <!--

    var p = "2,10";
    p = p.split(',');
    p = p.join('');
    var b = "5,00";
    b = b.split(',');
    b = b.join('');

    var w = b-p;
    var mu = true;
    var zwei = true;
    var eins = true;
    var fuenfzig = true;
    var zwanzig = true;
    var zehn = true;
    var fuenf = true;
    var nullzwei = true;
    var nulleins = true;

    while(w > "0") {

    w--;
    mu++;

    if(mu == "200") {

    zwei++;
    mu = "0";

    }

    if(mu == "100") {

    eins++;
    mu = "0";

    }

    if(mu == "50") {

    fuenfzig++;
    mu = "0";

    }

    if(mu == "20") {

    zwanzig++;
    mu = "0";

    }

    if(mu == "10") {

    zehn++;
    mu = "0";

    }

    if(mu == "5") {

    fuenf++;
    mu = "0";

    }

    if(mu == "2") {

    nullzwei++;
    mu = "0";

    }

    if(mu == "1") {

    nulleins++;
    mu = "0";

    }

    }

    document.write("Wechselgeld: "+zwei+" Zwei EuroStuecke");

    //-->
    </script>


    und damit ihr überhaupt wisst um was es geht hier die Aufgabe:

    Fahrkartenautomat-Wechselgeld
    Am Fahrscheinautomat wählt man einen Fahrschein zu einem bestimmten Preis P. Anschließend bezahlt man den Betrag B und bekommt Wechselgeld W zurück. Dabei sorgt der Automat dafür, dass die Anzahl der Münzen im Wechselgeld möglichst gering ist. Also nie 2 x 1€, sondern 1x 2€.

    Schreibe ein Skript, das zu vorgegebenen Werten für den Preis und den bezahlten Betrag ausgibt, wie viele Münzen welcher Art wieder ausgeworfen werden.

    Beispiel: Preis 2,10€, eingeworfen 5€, ausgegeben werden: 1x 2€, 1x 50cent, 2x 20 cent.


    Was habe ich Falsch gemacht ?? den irgenwie taucht immer son nicht wegzuklickender button auf mit zahlen bsp: 258:11

    Vielen Dank im voraus
  • Ok, ich bin kein Profi in sachen Java-Script, aber ich versuchs mal...

    1. Du setzt Variablen wie "mu", "zwei", "eins", "fuenfzig", ... mit "true", also einem boolean Wert. Anschließend behandelst du sie aber, als wäre es ein integer indem du Sachen wie "zwei++" veranstaltest.
    2. Der Sinn hinter deiner Schleife ist doch, das wenn 200 mu gezählt wurde, eine 2€ Münze zum Wechselgeld dazu gerechnet wird. Er kommt aber nie bis mu=="200", weil er bereits bei mu=="1" abgefangen wird, und mu wieder auf 0 gesetzt wird.

    Dann würde ich dir noch raten aussagekräftigere Variablen-Namen zu wählen, mit "mu" und "p" und "b" kann in einem Jahr keiner mehr was anfangen, vor allem nicht, wenn er die Aufgabe nicht kennt. Man kann das ruhig ausschreiben, eine Variable darf ruhig "preis" oder "wechselgeld" heißen, da spricht nichts dagegen, eher dafür.
    Ach und benutze demnächst möglichst für Quellcode den entsprechenden Syntax-Highliter, das vereinfacht das lesen.

    Quellcode

    1. var p = "2,10";
    2. p = p.split(',');
    3. p = p.join('');
    4. var b = "5,00";
    5. b = b.split(',');
    6. b = b.join('');
    7. var w = b-p;
    8. var mu = true;
    9. var zwei = true;
    10. var eins = true;
    11. var fuenfzig = true;
    12. var zwanzig = true;
    13. var zehn = true;
    14. var fuenf = true;
    15. var nullzwei = true;
    16. var nulleins = true;
    17. while(w > "0") {
    18. w--;
    19. mu++;
    20. if(mu == "200") {
    21. zwei++;
    22. mu = "0";
    23. }
    Alles anzeigen


    So, und wenn ich jetzt schmuh erzählt hab, schlagt mich ;)
  • Ok,
    also zum einen veranstalltest du sowas:

    Quellcode

    1. ...
    2. var mu = true;
    3. ...
    4. mu++;
    5. ...

    Was soll deiner Meinung nach hier passieren?
    "mu++;" bedeutet so viel wie, zähle zu der Zahl die in mu drin steht eine 1 dazu. In mu steht aber kein Zahl, sondern ein Boolean-Wert, nämlich "true".
    Du könntest also schonmal damit anfangen, das du einheitliche Variablen-Typen verwendest. Das ganze also zum Beispiel so initialisierst:

    Quellcode

    1. var mu = 0;



    Etwas ähnliches ist das hier:

    Quellcode

    1. ...
    2. mu++;
    3. if(mu == "200") {
    4. ...

    "if(mu == "200")" vergleicht ob mu den Text "200" enthält, hier wird mu nun als Text-Variable behandelt, nicht als Integer, was es eigentlich sein sollte.
    Wobei es sein kann, wie gesagt ich bin kein Fachman für Java-Script, das sowas automatisch umgewandelt wird, da die beiden Typen Int und String gennerell schon in ein ander überführt werden können.
    Trotzdem wäre es einfacher mu weiter als Integer-Variable zu verwenden, denn wir brauchen sie ja noch öfter, und eigentlich nur dafür.


    Dann hast du dir eine schöne Schleife programmiert:

    Quellcode

    1. ...
    2. while(w > "0") {
    3. w--;
    4. mu++;
    5. if(mu == "200") {
    6. zwei++;
    7. mu = "0";
    8. }
    9. ...
    10. if(mu == "1") {
    11. nulleins++;
    12. mu = "0";
    13. }
    14. }
    15. ...
    Alles anzeigen

    Die Schleife läuft so lange, wie w größer dem Text "0" ist, hier haben wir wieder das Problem von oben, könnte klappen, is aber nicht grade elegant, einfach die "" weg lassen und es sieht schon viel besser aus.
    Um sicher zu gehn das w irgendwann wirklich kleiner wird, hast du "w--;" ein gebaut, gleichzeitig zählst du mu mit jedem Schleifendurchlauf hoch. So weit so richtig.
    Dann hast du da aber eine Reihe von if Abfragen.
    Erster Schleifendurchlauf kommt => "mu++;" mu wird von 0 auf 1 erhöht => "if(mu == "200")" ne, mu ist nicht 200, mu ist 1, also wird dieser if Zweig nicht aus geführt => "if(mu == "1") " Hey! Zufällig ist mu grade 1, also machen wir das doch mal => "nulleins++;" die Variable nulleins wird um 1 erhöht => "mu = "0";" die Variable mu wird wieder auf 0 gesetzt => nächster Schleifendurchlauf => "mu++;" mu wird wieder auf 1 erhöht => rate mal was jetzt kommt...
    Hat mu denn jehmals die Chance die 200 zu erreichen?


    Und dan wäre es durchaus von Vorteil sprechende Variablen-Namen zu wählen, das erleichtert das lesen imens.