Op deze website gebruiken we cookies om content en advertenties te personaliseren, om functies voor social media te bieden en om ons websiteverkeer te analyseren. Ook delen we informatie over uw gebruik van onze site met onze partners voor social media, adverteren en analyse. Deze partners kunnen deze gegevens combineren met andere informatie die u aan ze heeft verstrekt of die ze hebben verzameld op basis van uw gebruik van hun services. Meer informatie.

Akkoord

Vraag & Antwoord

Webprogrammeren & scripting

[Javascript] rekenmachine

BasHamar
4 antwoorden
  • [code:1:a9c16de24e] function calc(waarde) {
    // kijk of de uitkomst opgevraagd word.
    if(waarde == "=") {
    // zo ja, bereken de uitvoer.
    document.berekening.output.value = eval(document.berekening.output.value);
    } else {
    // zo niet, kijk of de correctie word opgevraagd.
    if(waarde == "C" ) {
    // uitvoer leegmaken.
    document.berekening.output.value = "";
    } else {
    // waarden bij de huidige waarde optellen.
    document.berekening.output.value += waarde;
    }
    }
    }

    </script>[/code:1:a9c16de24e]Ik ben bezig geweest met een onzinnige rekenmachine :lol: alleen krijg ik een klein schoonheidsfoutje niet weg.

    Wanneer er een berekening gemaakt is en op = gedrukt is krijg ik het antwoord, maar wanneer ik vervolgens een cijfer intyp komt deze erachter te staan.

    Het veld zou eigenlijk leeg gemaakt moeten worden wanneer er een cijfer ingevuld word, bij +,-, etc moet het getal blijven staan zodat er verder mee gerekend kan worden.

    hoe kan ik dit zo kort mogelijk noteren ?
    [code:1:a9c16de24e]} elseif(waarde == "0t/m9") {
    document.berekening.output.value = "";
    } else {
    // waarden bij de huidige waarde optellen.
    document.berekening.output.value += waarde;
    }[/code:1:a9c16de24e]
  • Er zijn vele wegen die naar Rome leiden en zo ook hier. Een optie is om een globale variabele bij te houden die "bijhoudt" of de vorige toets het "=" teken was. Zo ja, reset dan eerst de waarde (en ook meteen deze globale var natuurlijk).
    Een andere mogelijkheid is om te kiezen voor controle op de invoer van getallen (wat je zelf al aangaf) en daarvoor kan je bijvoorbeeld een [i:cbb685e0cf]regular expression [/i:cbb685e0cf]gebruiken.
    [code:1:cbb685e0cf]
    var re = /^[0-9]+$/;
    if (re.test(waarde)) { // leegmaken }
    [/code:1:cbb685e0cf]

    Maar eigenlijk een leukere oplossing (imho) is om een stack-based oplossing te maken. Alle ingevoerde waarde gooi je op een stack (lees: array van waarden) en deze lees je LIFO ([b:cbb685e0cf]l[/b:cbb685e0cf]ast [b:cbb685e0cf]i[/b:cbb685e0cf]n [b:cbb685e0cf]f[/b:cbb685e0cf]irst [b:cbb685e0cf]o[/b:cbb685e0cf]ut) weer uit. Zou weet je te allen tijde wat de laatste keuze was (bijv. het "=" teken) en aan de hand daarvan voer je een actie uit in je rekenmachine. Om bij de uitkomst te komen hoef je in principe alleen maar de stack (het 'rijtje') af te lopen en iets met de getallen of bewerkingen te doen. In het begin zal het misschien iets moeilijker lijken om te maken, maar uiteindelijk denk ik dat je stukje code een stuk overzichtelijker wordt. En daarnaast ook nog makkelijker uit te breiden (bijvoorbeeld extra bewerkingen toevoegen of tussenuitkomsten terugplaatsen op de stack).
  • ik ben reuze blij met je oplossing hehe je stack/lifo oplossing laat ik lekker achterwege. :P
  • ik heb de eerste misberekening alweer gemaakt :)

    Wanneer ik nu na het invoeren van een berekening een cijfer invoer valt hij ook weg, dus niet alleen nadat de uitkomst is getoond.

    kan je me wat meer over de stacks methode vertellen, mogelijk met klein voorbeeld ?

Beantwoord deze vraag

Dit is een gearchiveerde pagina. Antwoorden is niet meer mogelijk.