Bloembollen probleem
Een leerling heeft me een gekleurde opdracht meegeven: waarom werkt mijn bloemige script niet? Hij handelt in bollen, geinspireerd door Peter Kassenaar en zijn PHP-boek. Maar wat ik ook probeer, ik kom er niet uit, ga navelstaren en kweek van lieverlee narcissusbollen. Maar ook die worden niet voor nul verkocht. Wat is het probleem? Afgezien van wat commentaar op het script (daar gaat het dus niet om) blijft het probleem in de switch: bij "aantal=0" neemt de switch de optie van de 2de (dus aantal tussen 10 en 100 met een stukprijs=1,35 in plaats van het "logische" 1,51). Volgorde omgooien, omdraaien, upside down in het script, >=-1 of wat dan ook, heeft noch mij, noch de student, noch een ander weldenkend collega soulaas geboden en de fout laten oplossen. Kan iemand de bloemetjes voor de juiste prijs buitenzetten en ons vertellen welke 0 we voor null aan het slijten zijn? De case = 0 heb ik gedeactiveerd: die doet het prima. Maar waarom doet het script het zo niet goed? Met 0,00000001 bol krijgen we namelijk onze bollen prima verkocht, maar met nul (0 of 0.0) gaat het mis...
Reacties
Harry van Breugel
Geplaatst op 26 juni 2009 11:21
Johnny, enorm bedankt voor de zeer duidelijke uitleg! Hier kan ik ook weer mee naar de leerlingen!groeten Harry
Frans Peeters
Geplaatst op 25 juni 2009 11:18
Johnny van de Laar schrijft dit: http://www.informaticavo.nl/docs/2009/switch.pdf
Harry van Breugel
Geplaatst op 08 juni 2009 23:02
(beetje laat op de avond, dus nogmaals) Frans, je hebt vermoedelijk wel gelijk, maar wat ons intrigeert is waarom de switch er dan juist bij de tweede optie uitspringt. Dat is voor ons zo curieus!
Frans Peeters
Geplaatst op 06 juni 2009 14:22
Nu snap ik pas wat je bedoelt. Als je bij www.informaticavo.nl/php/bloembollen3.html opgeeft dat je 0 bloembollen wil kopen, dan krijg je een verkeerde stuksprijs inderdaad. Ik denk dat de waarde 0 als false wordt gelezen en niet als nul/geen. Zie www.informaticavo.nl/php/bloembollen3.txt voor de code.
Harry van Breugel
Geplaatst op 06 juni 2009 13:46
Frans, je hebt een case 0 ingevoerd. Die stond er bij mij ook en zoals ik in eerste instantie al zei, werkt die. Maar 0 blijft kleiner dan 10 en dus zou het ook zonder die case 0 moeten werken. Of niet??? En dan: waarom niet??
Frans Peeters
Geplaatst op 06 juni 2009 10:23
Ik had gewoon mijn uitwerking van het boek bladzijde 4.86 geplaatst. Daar wordt niet gesproken over een stuksprijs. Ik heb nu een stuksprijs toegevoegd en volgens mij werkt de berekening goed. Je kunt het controleren met: www.informaticavo.nl/php/bloembollen.html De code staat in www.informaticavo.nl/php/bloembollen2.txt Ook als je 0 invoert, krijg je 0. Misschien is het trouwens wel leuk om de uitwerkingen van het Instruct boekje eens uit te wisselen. En ik zal nog eens wat navraag doen bij een php programmeur over die switch, want het is een interessante discussie.
Frans Peeters
Geplaatst op 06 juni 2009 09:17
Pierre, kijk eens naar dit voorbeeld op php.net dan: http://nl.php.net/manual/en/control-structures.switch.php#88643
Paul van Dijk
Geplaatst op 05 juni 2009 23:01
Toch raar, dat het switch statement wel feilloos werkt met operatoren, als het aantal maar niet exact 0 is. Ook in het betreffende boek van Peter Kassenaar wordt de switch uitgelegd met een operator. Wat ons ook verbaast (Harry en ik hebben al heel wat uurtjes zwart gewerkt in de bloembollen) is de onvoorspelbaarheid wáár (bij welke case) de switch verlaten wordt als het aantal exact 0 is.
Pierre Gorissen
Geplaatst op 05 juni 2009 20:23
Ook het script van Frans \'selecteert\' de onjuiste prijs per stuk. Het wordt niet zichtbaar omdat alleen de totaalprijs getoond wordt. Het probleem zit hem in het switch() statement. Je kunt switch($aantal) niet combineren met boolean operators. Dan moet je exacte waarden in de case statements gebruiken. Als je boolean operators gebruikt (zoals in dit script), dan moet je switch(true) gebruiken. Vervang switch ($aantal) door switch (true) en het oorspronkelijke script werkt zonder problemen. Dat geldt ook voor het script van Frans.
Harry van Breugel
Geplaatst op 05 juni 2009 20:10
Frans, ik wist dat je de case om zou moeten draaien. Je eigen script werkt prima, maar geeft geen stukprijs. Waar het mij nu om gaat is waarom het bijgeleverde script van die jongen niet goed werkt, zoals je ook op deze site kunt zien (mijn dank!). We hebben binnen dat script alles al geprobeerd, zoals de case van groot naar klein laten lopen... maar toch komt de verkeerde stukprijs naar boven. Ik ben echt benieuwd waar de fout in dat script zit.
Frans Peeters
Geplaatst op 05 juni 2009 18:34
Harry, ik draai die case die je gemaakt hebt liever om. Begin met de grootste, dus: case ($aantal >= 250) Dan kun je met de volgende cases gewoon omlaag gaan, bijvoorbeeld: case ($aantal < 250) case ($aantal < 100) enzovoorts. Ik heb even een voorbeeld geplaatst op: http://www.informaticavo.nl/docs/2009/bloembollen.txt Ik heb jouw script online gezet en guess what? www.informaticavo.nl/php/bloembollen.php