Kuinka onnistuisi yksinkertaisen laskun suorittajan tekeminen?
Yritin tehdä silmukan, joka katsoisi seuraavan merkin ja tekisi sen perusteella laskutoimituksen, mutta se ei oikein toiminut.
Esimerkiksi: Ohjelmalle annettaisiin lasku 5+5*2, ja ohjelma palauttaisi luvun 20.
Ai ohjelman pitäis laskee väärin? 8D
Jos etsit jotain valmista "tulkkia" vai mikskä tuota nyt sanois niin DelphiWebScript 2 on ainakin vaihtoehto:
http://sourceforge.net/projects/dws/
Tein sillä joku vuos sitten graafisen laskimen joka siis erittäin nopeasti laskee jopa pascal kielen muodossa annetun koodin annetuilla parametreilla ja sijoittaa vastauksen muuttujaan/muuttujiin kunkin tarpeen mukaan. Päivä tai pari voi vierähtää tuota opetellessa.
Mutta joo ehkä tuo on sama kun ampus kärpästä tykillä tässä tapauksessa?
Tuon pyytämäsi väärin laskevan version saa aikaan vaikkapa näin:
program Viallinen_Laskin; function Laske(s: String): Integer; var tulos, luku: Integer; toimitus: Char; i: Integer; begin (* Lasku alkaa nyt leikisti '0+', tuloshan on sama *) tulos := 0; toimitus := '+'; (* Käsitellään koko teksti *) i := 1; while i <= Length(s) do begin (* Luetaan kokonaisluku *) luku := 0; while (i <= Length(s)) and (Ord('0') <= Ord(s[i])) and (Ord(s[i]) <= Ord('9')) do begin luku := 10 * luku + Ord(s[i]) - Ord('0'); Inc(i) end; (* Lasketaan aiemmin selvinnyt toimitus *) case toimitus of '+': tulos := tulos + luku; '-': tulos := tulos - luku; '*': tulos := tulos * luku; '/': tulos := tulos div luku; '%': tulos := tulos mod luku end; (* Jos tekstiä on vielä, luetaan uusi toimitus *) if i <= Length(s) then begin toimitus := s[i]; Inc(i) end end; (* Palautetaan tulos *) Laske := tulos end; var lauseke: String; begin lauseke := '15+24+33+42+51'; Writeln(lauseke, ' = ', Laske(lauseke)) end.
Ups. Tuon lausekkeen arvohan olisi 15, en kiiressä ehtinyt katsoa. Ja kiitos vastauksista. Tarkoitushan oli että se laskisi oikein. :S
Jos intoa riittää väkerrellä ja haluat oppia kunnolla niin suosittelen tutustumaan Reverese Polish notation:iin. ;)
http://en.wikipedia.org/wiki/
http://en.wikipedia.org/wiki/
Aihe on jo aika vanha, joten et voi enää vastata siihen.