Ik ben aan 't hobbyen binnen PHP met een methode die uiteindelijk een rekensom + antwoord moet gaan genereren, waarbij de som is verwerkt in een gewone vraag. Een voorbeeld van zo'n vraag kan zijn:
"Jan heeft %d voetbalplaatjes, Piet steelt er %d en de politie geeft er vervolgens %d terug. Hoeveel voetbalplaatjes heeft Jan nu?"
Zoals je ziet is het optellen en aftrekken gemengd in de vragen en dat maakt het best pittig.
Ik zet alle sommen met bijbehorende attributen in een CSV bestand, met de volgende indeling:
De vraag spreekt voor zich, hierin zou letterlijk het eerder genoemde voorbeeld kunnen staan.
Er worden random getallen gegenereerd die ik een maximale waarde mee wil geven, zo kan Piet niet ineens 23528 voetbalplaatjes stelen, 20 lijkt me realistischer maar dat verschilt per vraag, vandaar.
De sleutel ziet er in deze vraag als volgt uit: %d-%d+%d. Er wordt eerst een waarde van het begingetal afgetrokken, en vervolgens wordt er iets bij opgeteld. Op deze wijze kan ik vragen zo uitgebreid en ingewikkeld maken als ik zelf wil. Maar hier zit ook meteen m'n probleem.
Laten we zeggen dat Jan begint met 20 voetbalplaatjes. Piet steelt er 18 en Jan krijgt er 2 terug. Uitkomst is 4. 't Kan ook zijn dat Jan begint met 2 voetbalplaatjes, Piet er vervolgens 7 steelt en de politie er 19 terugbrengt. Da's een beetje raar natuurlijk, en daarvoor moet ik een aantal controles doen en de sommen stap voor stap doorlopen.
Goed, logisch denken is niet m'n sterkste kant (ik werk eraan) dus ik zie er een beetje tegenop, maar het is wel een oefening en vooral uitdaging om het voor elkaar te krijgen.
Hoe kan ik dit probleem ondervangen ? Ik dacht zelf hieraan:
- Bij elke stap controleren of de tussenuitkomst niet onder de nul uitkomt.
- In het geval van de voetbalplaatjes controleren of de tussenuitkomst niet boven het begingetal uitstijgt. Maar goed, dit geldt natuurlijk niet voor alle situaties dus dat is een attribuut die ik aan bepaalde vragen moet toevoegen.
Ik zit ook met het punt van het uitrekenen van de sommen. Is de beste methode hiervoor eval() met output buffering? Dit lijkt me één van de weinige situaties waarin eval() wenselijk is.
Ik snap dat dit topic meer met boerenverstand te maken heeft dan met programmeerkennis. Toch wou ik 'm posten omdat ik op dit moment een beetje vastloop en graag wat frisse input wil hebben waardoor ik er wat luchtiger over na kan denken.
"Jan heeft %d voetbalplaatjes, Piet steelt er %d en de politie geeft er vervolgens %d terug. Hoeveel voetbalplaatjes heeft Jan nu?"
Zoals je ziet is het optellen en aftrekken gemengd in de vragen en dat maakt het best pittig.
Ik zet alle sommen met bijbehorende attributen in een CSV bestand, met de volgende indeling:
code:
1
| vraag;maximale waarde gegenereerd getal;sleutel;niveau;geslacht |
De vraag spreekt voor zich, hierin zou letterlijk het eerder genoemde voorbeeld kunnen staan.
Er worden random getallen gegenereerd die ik een maximale waarde mee wil geven, zo kan Piet niet ineens 23528 voetbalplaatjes stelen, 20 lijkt me realistischer maar dat verschilt per vraag, vandaar.
De sleutel ziet er in deze vraag als volgt uit: %d-%d+%d. Er wordt eerst een waarde van het begingetal afgetrokken, en vervolgens wordt er iets bij opgeteld. Op deze wijze kan ik vragen zo uitgebreid en ingewikkeld maken als ik zelf wil. Maar hier zit ook meteen m'n probleem.
Laten we zeggen dat Jan begint met 20 voetbalplaatjes. Piet steelt er 18 en Jan krijgt er 2 terug. Uitkomst is 4. 't Kan ook zijn dat Jan begint met 2 voetbalplaatjes, Piet er vervolgens 7 steelt en de politie er 19 terugbrengt. Da's een beetje raar natuurlijk, en daarvoor moet ik een aantal controles doen en de sommen stap voor stap doorlopen.
Goed, logisch denken is niet m'n sterkste kant (ik werk eraan) dus ik zie er een beetje tegenop, maar het is wel een oefening en vooral uitdaging om het voor elkaar te krijgen.
Hoe kan ik dit probleem ondervangen ? Ik dacht zelf hieraan:
- Bij elke stap controleren of de tussenuitkomst niet onder de nul uitkomt.
- In het geval van de voetbalplaatjes controleren of de tussenuitkomst niet boven het begingetal uitstijgt. Maar goed, dit geldt natuurlijk niet voor alle situaties dus dat is een attribuut die ik aan bepaalde vragen moet toevoegen.
Ik zit ook met het punt van het uitrekenen van de sommen. Is de beste methode hiervoor eval() met output buffering? Dit lijkt me één van de weinige situaties waarin eval() wenselijk is.
Ik snap dat dit topic meer met boerenverstand te maken heeft dan met programmeerkennis. Toch wou ik 'm posten omdat ik op dit moment een beetje vastloop en graag wat frisse input wil hebben waardoor ik er wat luchtiger over na kan denken.