anoniem Geplaatst: 5 januari 2004 Delen Geplaatst: 5 januari 2004 [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] Quote Link naar reactie
anoniem Geplaatst: 5 januari 2004 Auteur Delen Geplaatst: 5 januari 2004 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). Quote Link naar reactie
anoniem Geplaatst: 5 januari 2004 Auteur Delen Geplaatst: 5 januari 2004 ik ben reuze blij met je oplossing hehe je stack/lifo oplossing laat ik lekker achterwege. :P Quote Link naar reactie
anoniem Geplaatst: 5 januari 2004 Auteur Delen Geplaatst: 5 januari 2004 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 ? Quote Link naar reactie
anoniem Geplaatst: 6 januari 2004 Auteur Delen Geplaatst: 6 januari 2004 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 Quote Link naar reactie
Aanbevolen berichten
Om een reactie te plaatsen, moet je eerst inloggen