Hogyan is kellene ezt megcsinalni?
Irjatok egy programot, matematikai mulveleteket kiszamolasara, ugy hogy az ertekek,
es a muveltek is ugyan abban a binaris faban legyenek tarolva. C-ben vagy C++-ban;
Pelda itt:
Nem varok kesz megoldast, csak otleteket, utmutatast segitseget, a megoldasban. Elore is koszonom :)
A lényeg az lenne hogy mindig megkeresed a legkisebb prioritású műveletet a kifejezésben, majd kettébontod a műveletnél a kifejezést, így két ágat formálva a műveletnek.
A legkisebb prioritású műveletet úgy találod meg, hogy számolod a zárójel-mélységet, és a 0 mélységű műveletek közül az utolsó legkisebb prioritású művelet kell neked.
Prioritások a következők: (* == /) > (+ == -)
A példád: (25+1)/(60-40)+2*30-777
A 0 mélységű műveletek:
- 2. művelet (osztás)
- 4. művelet (összeadás)
- 5. művelet (szorzás)
- 6. művelet (kivonás)
Ezek közül az összeadásnak és a kivonásnak kisebb a prioritása, és a kivonás van hátrébb a kettő közül.
Ha nincs 0 zárójel-mélységű művelet, akkor az azt jelenti, hogy az egész kifejezés egy nagy zárójelben van, törölni kell a külső zárójelet.
A példádban ezért a kivonás a fa gyökere, és a két ág a következő:
(25+1)/(60-40)+2*30
777
Itt hasonló módon megkeressük a legkisebb prioritású műveletet ami a 4. művelet lesz (összeadás) és újra szétbontjuk:
(25+1)/(60-40)
2*30
A 777 egy levél, azzal nem foglalkozunk már.
Ezt addig kell folytatni amíg már csak számok lesznek a levelek. Arra vigyázni kell hogy például a "(25+1)" nem tartalmaz 0 mélységű műveletet, ezért törölni kell a külső zárójelet amikor eléred és újra próbálkozni.
Kapcsolódó kérdések:
Minden jog fenntartva © 2024, 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!