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.