Je slaagt erin om de vragen van het kind te beantwoorden, en samen kunnen jullie het eerste deel van het huiswerk afmaken. Maar dan lopen jullie vast als je bij het volgende gedeelte komt: gevorderde wiskunde.
Nu hebben de optelling en de vermenigvuldiging een verschillende prioriteit, maar de regels zijn nog altijd niet zoals je ze gewoon bent. In plaats daarvan heeft de optelling voorrang op de vermenigvuldiging.
Dit zijn nu de stappen die uitgevoerd worden om de uitdrukking 1 + 2 * 3 + 4 * 5 + 6
te evalueren:
1 + 2 * 3 + 4 * 5 + 6
3 * 3 + 4 * 5 + 6
3 * 7 * 5 + 6
3 * 7 * 11
21 * 11
231
Hier zijn de andere voorbeelden:
1 + (2 * 3) + (4 * (5 + 6))
wordt nog altijd 51
.2 * 3 + (4 * 5)
wordt 46
.5 + (8 * 3 + 9 + 3 * 4 * 3)
wordt 1445
.5 * 9 * (7 * 3 * 3 + 9 * 3 + (8 + 6 * 4))
wordt 669060
.((2 + 4 * 9) * (6 + 9 * 8 + 6) + 6) + 2 + 4 * 2
wordt 23340
.Wat krijg je als je volgens de nieuwe regels de resultaten voor de uitdrukkingen van het huiswerk bij elkaar optelt? Hiervoor ga je als volgt te werk:
evaluate
waaraan een uitdrukking moet doorgegeven worden (char*
). De functie moet het resultaat (int
) van de uitdrukking teruggeven.homework
waaraan de padnaam (char*
) van een tekstbestand met een reeks uitdrukkingen moet doorgegeven worden, één uitdrukking per regel. De functie moet de som (int
) van de resultaten van deze uitdrukkingen teruggeven.In deze interactieve sessie gaan we ervan uit dat het tekstbestand homework.txt
1 zich in de huidige directory bevindt.
> evaluate("1 + 2 * 3 + 4 * 5 + 6")
231
> evaluate("1 + (2 * 3) + (4 * (5 + 6))')
51
> evaluate("2 * 3 + (4 * 5)')
46
> evaluate("5 + (8 * 3 + 9 + 3 * 4 * 3)')
1445
> evaluate("5 * 9 * (7 * 3 * 3 + 9 * 3 + (8 + 6 * 4))')
669060
> evaluate("((2 + 4 * 9) * (6 + 9 * 8 + 6) + 6) + 2 + 4 * 2')
23340
> homework("homework.txt")
694173