Mennyi 12+23-4/6*8+12/7777+55-777*9999 értéke?
Tisztelt matematikusok. A programozás rovatban merült fel az alábbi kérdés, miszerint egy beviteli mezőben lévő string, jelen esetben 12+23-4/6*8+12/7777+55-777*9999 értékét a műveleti jelek alapján számoljuk ki. Ha valaki megtenné, hogy ezt szépen levezetné sokat dobna a meddő vitákon - leprogramozni nem nagy dolog, de már kb. 40 hozzászólás érkezett a semmiről -.
Előre is köszönöm.
Ezt nekem nem könnyű egyszerűen elmagyarázni, mert régen tanultam és máshogy, nem teljesen hatékony módszerrel esnék neki, mint azt lent látod is.
LL1 parser -t pont erre szokták használni!
Ez nagyon gyors, pontos, egymás után elemez szintaktikát és szemantikát. Jelzi a hiba helyét!
L - balról jobbra halad
L - Left most derivation-t használ
1 - egy karaktert olvas be
Itt van egy komolyabb irodalom hozzá
Lehet találni előadásokat is a témában:
Nem tudom ebből mit tudsz kihámozni, de ha komolyan érdekel a dolog, ebbe az irányba menj el!
== == == == == ==
Én úgy állnék hozzá, hogy definiálnám a precedenciákat.
Első körben azokra illesztenék (reguláris kifejezésekkel: [link] )
Kiszámolnám az értékét.
Visszahelyettesíteném.
tovább folytatnám a számolást.
Ebben nincs bemeneti hibakezelés (syntax)! Azt külön kell megcsinálni! Ez csak szemantika.
I) zárójelek
1) zárójelek egyeztetése.
2) legbelső zárójel kiértékelése
3) legbelső zárójelbe az eredmény behelyettesítés
4) (ha már nincs belső zárójel) legelső zárójel kiértékelése
5) legelső zárójelbe az eredmény behelyettesítés
II) osztás
1) műveletet és mellette a két értéket elkapni.
2) műveletet elvégezni és visszahelyettesíteni.
III) szorzás
1) műveletet és mellette a két értéket elkapni.
2) műveletet elvégezni és visszahelyettesíteni.
IV) kivonás
1) műveletet és mellette a két értéket elkapni.
2) műveletet elvégezni és visszahelyettesíteni.
V) összeadás
1) műveletet és mellette a két értéket elkapni.
2) műveletet elvégezni és visszahelyettesíteni.
Ha más is marad, mint egy szám, akkor hiba van a bemenetben!
Ha bárhol elakadt a részlet számolás hiba van a bemenetben, vagy a változó kezelésedben (nem elég jó változó típussal számolsz).
Syntax elemző kb az lehetne, hogy illesztesz a következőkre:
1) a zárójeleknek párosával () kell lenniük!
2) zárójel felbontás (zárójel előtt és )zárójel után csak műveleti jel lehet.
3) két szám között pontosan egy műveleti jelnek kell lennie
Tudod mit! B+ meg a 30 éves programozói múltadat!
30 év programozás után ilyen hülye kérdéssel jössz ide, aztán fikázod azt, aki segíteni akar.
Közben nem vagy képes egy értelmes kérdést sem feltenni!
3. féléves anyag programozóknak az ilyen szintű példa. Nem 60.
Egy átkozott troll lakik benned!
Amíg ezt nem űzöd ki magadból, sajnálom minden egyes segítőkész betűmet, amit ide pazaroltam.
Minden kedves, és segítőkész válaszra volt valami rossz szavad.
Neked pszichológus kell, nem gyakorik kérdések!
Kapcsolódó kérdések:
Minden jog fenntartva © 2025, www.gyakorikerdesek.hu
GYIK | Szabályzat | Jogi nyilatkozat | Adatvédelem | Cookie beállítások | WebMinute Kft. | Facebook | Kapcsolat: info(kukac)gyakorikerdesek.hu
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!