Ga naar inhoud

[Javascript] rekenmachine


Aanbevolen berichten

[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]
Link naar reactie
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).
Link naar reactie
Stacks werken in principe als een object waarop je een aantal bewerkingen kunt uitvoeren, zoals een nieuw item toevoegen ([i:1900922bf3]push[/i:1900922bf3]) en het bovenste item verwijderen en retourneren ([i:1900922bf3]pop[/i:1900922bf3]). De implementatie gebeurt over het algemeen met een array of vector, maar dat is niet noodzakelijk. Wat de stack kan hangt af van wat je erin programmeert aan functies. Een [url=http://samuel.trygger.nu/devzone/javascript/UDC/c_stack/]simpel voorbeeld[/url] vond ik met [url=http://www.google.com/search?q=javascript+stack+push+pop&sourceid=mozilla-search&start=0&start=0&ie=utf-8&oe=utf-8]Google[/url]. Kijk er even naar, misschien verduidelijkt het iets... - Bas
Link naar reactie

Om een reactie te plaatsen, moet je eerst inloggen

Gast
Reageer op dit topic

×   Geplakt als verrijkte tekst.   Herstel opmaak

  Er zijn maximaal 75 emoji toegestaan.

×   Je link werd automatisch ingevoegd.   Tonen als normale link

×   Je vorige inhoud werd hersteld.   Leeg de tekstverwerker

×   Je kunt afbeeldingen niet direct plakken. Upload of voeg afbeeldingen vanaf een URL in

  • Populaire leden

    Er is nog niemand die deze week reputatie heeft ontvangen.

  • Leden

    Geen leden om te tonen

×
×
  • Nieuwe aanmaken...