Door
Johannes Vlot
op 28-01-2019 14:19
gewijzigd op 28-01-2019 15:10
1.636 views
Goeiemiddag,
Ik ben nieuw met programmeren maar ik weet wel zo het een en ander.
Nu heb ik een probleempje met een berekening.
Ik heb een variabele waar het totaal aantal beugels in staan : $allebeugels.
Deze heb ik nodig om te berekenen welk pakket beugels ik het best kan bestellen:
6 stuks = 15,32 euro
of 25 stuks 52,02 euro.
Mijn vraag is hoe kan ik dit het best doen met een if statement zodat hij automatisch de beste aankoop berekend naar het aantal beugels.
Misschien is dit niet de juiste categorie om dit in te vragen maar ik ben niet ervaren met php hulp en kon geen beter categorie vinden.
Alvast bedankt.
Kun je een stukje code geven? Het is erg lastig te begrijpen zo... Hoe ziet $allebeugels er uit bijvoorbeeld?? Als je een stuk code geeft kan ik je denk ik wel helpen
Kun je een stukje code geven? Het is erg lastig te begrijpen zo... Hoe ziet $allebeugels er uit bijvoorbeeld?? Als je een stuk code geeft kan ik je denk ik wel helpen
Nou er is nog geen code voor... er moet een rekensom voor komen in php.
$allebeugels is een getal wat kan verschillen en dan moet er een berekening bij in php wat de beste aankoop berekend voor het aantal beugels: ?x 6 stuks of ?x 25 stuks. Ik hoop dat het zo duidelijker is.
Bedoel je:
- iemand zoekt 20 beugels.
- dat kan met 4x 6 stuks a 15,32 = 65,28
- of met 1x 25 stuks = 52,02
In dit geval is de versie met 1x 25 stuks dus de beste oplossing.
En dan nog uitgebreider voor 40 stuks:
- 7x 6 stuks
- 1x 25 stuks + 3x 6 stuks
- 2x 25 stuks
En dan weer uitzoeken wat de goedkoopste combi is?
Bedoel je:
- iemand zoekt 20 beugels.
- dat kan met 4x 6 stuks a 15,32 = 65,28
- of met 1x 25 stuks = 52,02
In dit geval is de versie met 1x 25 stuks dus de beste oplossing.
En dan nog uitgebreider voor 40 stuks:
- 7x 6 stuks
- 1x 25 stuks + 3x 6 stuks
- 2x 25 stuks
En dan weer uitzoeken wat de goedkoopste combi is?
dat moet naar boven afgerond om te bepalen dat je dus 2 pakketten nodig hebt.
<?php $benodigd = ceil(10 / 6); // = 2 ?>
even zo :
<?php $benodigd = ceil(6/ 6); // = 1 ?>
<?php $benodigd = ceil(13 / 6); // = 3 ?>
dankjewel! maar wat nou als ik 24 beugels heb dan geeft hij aan dat ik 4 pakketten van 6 nodig heb maar mijn bedoeling is dan dat hij berekend dat ik beter een pakket van 25 stuks kan kopen.
bijvoorbeeld ipv 4x6stuks 1x25stuks
Als je nu eerst eens een vraagstelling opstelt. Dit bevat in principe een specificatie van wat je dient te programmeren.
Dit wordt zoiets als:
Gegeven een gewenste hoeveelheid beugels X, zoek een minimale hoeveelheid combinatie van pakketten Y, zodanig dat deze ten minste X beugels bevatten, en tevens het goedkoopste is.
Wie zegt trouwens dat alle pakketten hetzelfde moeten zijn? Dit geef je zelf ook al aan.
Een mogelijke strategie is de volgende: ga er vanuit dat de gemiddelde stukprijs lager is als je een groter pakket koopt, dit is in ieder geval het geval bij bovenstaande hoeveelheden (stukprijs 2.553 per 6, 2.081 per 25).
Kun je dit dan niet gewoon behandelen als een (staart)deling met rest waarbij je start met het grootste pakket? Zolang een pakket "past" in het (resterende) aantal benodigde beugels, koop zo vaak mogelijk het grootste pakket als mogelijk?
Zie je dat dit een stuk makkelijker is? Gewoon even wat op papier kladderen nog zonder een letter te programmeren? Je hebt nu een strategie waarmee je aan het programmeren kunt slaan.
EDIT: en dan zijn er dus aan het einde nog wat randgevallen waar het soms voordeliger is om een groter pakket te kopen, dit wordt bepaald door hoeveel beugels je nog minimaal je nodig hebt, en hoeveel dat kost. Dat omslagpunt zul je dus per geval moeten inspecteren.
Maar dit laatste is een apart probleem wat apart opgelost kan worden. Voor het grootste deel van de berekening kun je bovenstaande strategie toepassen.
EDIT2: hmm, en dit probleem kan zich dus mogelijk herhalen als je veel verschillende pakketten hebt. Zodra een bepaald pakket niet meer past in het restant is dit een moment om te kijken wat de beste combinatie is. Als dit weer een restant oplevert herhaalt dit proces zich. Is dit een recursief probleem? :p