Megnyitod a fájlt, beolvasod egy memóriaterületre. Lehet ez String, vagy byte/char tömb (inkább ez utóbbi). Innen már csak karakterenként végigmész a szövegen és látod, hogy mi, mi. Legrosszabb esetben a karakter kódokat vizsgálod, bár C#-han biztos van elegánsabb módszer. Ha meg jönnek sorban a karakterek akkor egy egyszerű IF-el eldöntheted, hogy mi az. A számoknál van nagyobb gond, de biztos van erre beépített függvény, vagy józan paraszt ésszel írsz egyet, ami ha talál egy számjegyet akkor "kiveszi" a számot a szövegből.
A lényeg, hogy a kapott szövegből kell az elejétől indulva végigmenni és vizsgálni a karaktereket. (Az meg egyszerű kellene hogy legyen.)
Köszi, engem elsősorban az érdekelne hogy fájlból hogyan lehet a kiolvasott valamiről eldönteni hogy az szám-e vagy műveleti jel. Magát az értelmezőt már rég megírtam, csak idáig nme a fájlból olvasta az adatokat. Bocs ha az előbb rosszul fogalmaztam.
kb egy hónapja írtam egy mat. kif. értelmezőt C# nyelven. Gondolkodj és rájösz. Egyébként műveleti fát pl építhetsz hozzá. Műveletek precedenciája alapján mindig két részformulára bontod a kifejezést és szúrod be az operátorokat a fába. A levélelemek pedig már csak számok lesznek így lentről fölfelé haladva elvégezheted a műveleteket és a gyökér(operátor) végrehajtásával eredményed is lesz. Vagy éppen ezt a fát átadod egy másik programegységnek ami mondjuk egy matematikai függvényt vár.
Segítséget szeretnék kérni a következő dologban:
Adott egy fájl, benne egy matematikai kifjezés
Mondjuk
( 3.2 + 4.8 ) * ( 9.5 + 6.0 ) / 2
Egy C/C++ -ban írt értelmező ezt a fájlt megnyitja, majd ebből kéne eldöntenie, hogy az épp beolvasott "valami" szám-e, szimbólum-e ( '(' ')' '+' '*' , stb..) vagy 'whitespace' és eszerint kéne tudnia lekezelni majd elraktározni a kapott kifejezéseket.
Az 'fscanf' függvény erre a célra használhatatlan, mivel nem tudja hogy a következő "valami" szám-e avagy szimbólum..
Hogy lehet beolvasni ezeket a kifejezéseket?
Azt sem bánom ha minden "valami" közé egy space-t kell tennem, ha van erre megoldás.
Az OOP-s megoldást nem ismerem, én fordított lengyel módszerrel csináltam amikor szükségem volt rá. Egy matematikai kifejezés t aránylag könnyű RPN formába helyezni, onnantól kezdve pedig gyerekjáték kiértékelni, ráaadásul az RPN formában tárolt változat megőrizhető, így legközelebb még gyorsabb lehet az értelmezés.
Én most írtam egy BASIC fordítót/értelmezőt PIC mikrokontrollerre, C++ Builderben van +írva a fordító,mindenféle C operátort ismer. Nem nagy durranás, rekurzív függvényhívogatással, postorder bejárással könnyen megoldható.
Ha megertetted az OOP megoldas lenyeget, akkor probald meg sztem a kodot megirni sajat magad.
Tenyleg sok hasznod lesz belole, es ha jol gondolkodsz, akkor meg tokeletesiteni es gyorsitani is tudod a kodot.
Tudna valaki segíteni? A prog.hu Matematikai kifejezések értelmezése - OOP-s megoldás cikkben leírt forráskódhoz kellene valami egyszerű példa, hogy hogyan tudnám használni a progsit...