Mengen aus einer Zahl
Matthias
- php
Guten Tag,
ich habe folgendes Scenario:
Es geht um die Verrechnung von Tauchgaengen in einem Tauchshop.
Dort werden zum einen einzelne Tauchgaenge, als auch spezielle
Pakete angeboten.
In etwa wie folgt:
1 Tauchgang = 10 eur
10 " = 90 eur
20 " = 180 eur
30 " = 270 eur
etc..
Jetzt habe ich die Anzahl der Tauchgaenge eines Kunden.
Angenommen er hat 47 mal getaucht. So soll es wie folgt berechnet werden:
Nun meine Frage, wie ich am Besten die Funktion schreibe, die mir das
dynamisch berechnen kann. Habe es bisher mit dem Modulus probiert - kam
damit allerdings nicht viel weiter und stehe daher grade ein wenig auf
dem Schlauch.
Waere nett, wenn mir einer mal einen kleinen Denkanstoss geben koennte.
Danke,
Matthias
Guten Tag,
also ich habe jetzt eine Loesung gefunden:
<?
$pkg = array();
$pkg[0] = 50;
$pkg[1] = 40;
$pkg[2] = 30;
$pkg[3] = 25;
$pkg[4] = 20;
$pkg[5] = 10;
$pkg[6] = 5;
calculate(87,$pkg);
function calculate($dives,$pkgs)
{
foreach($pkgs as $value)
{
if($dives>=$value)
{
$dives_left = $dives-$value;
echo "<br>1 Package á ".$value." Dives";
return calculate($dives_left,$pkgs);
}
}
echo "<br>$dives single Dives";
}
?>
Ausgabe:
1 Package á 50 Dives
1 Package á 30 Dives
1 Package á 5 Dives
2 single Dives
Gibt es daran irgendetwas auszusetzen?
mfg
Matthias
Hi,
Gibt es daran irgendetwas auszusetzen?
Probier mal calculate(400,$pkg);
Für das größte Paket mußt Du gucken, wie oft das reinpaßt.
Für die kleineren Pakete ist das _in deinem speziellen Fall_ nicht nötig, weil die restlichen Pakete zufällig nicht mehr als einmal in das jeweils nächstgrößere Paket passen.
cu,
Andreas
Hallo Andreas,
Gibt es daran irgendetwas auszusetzen?
Probier mal calculate(400,$pkg);
Das fuehrt bei mir zu folgendem Ergebnis:
1 Package á 50 Dives
1 Package á 50 Dives
1 Package á 50 Dives
1 Package á 50 Dives
1 Package á 50 Dives
1 Package á 50 Dives
1 Package á 50 Dives
1 Package á 50 Dives
0 single Dives
Also 8 x das 50er Paket. So ist es ja richtig.
Für die kleineren Pakete ist das _in deinem speziellen Fall_ nicht nötig, weil die restlichen Pakete zufällig nicht mehr als einmal in das jeweils nächstgrößere Paket passen.
Gluecklicherweise ;)
mfg
Matthias
Hi,
Das fuehrt bei mir zu folgendem Ergebnis:
1 Package á 50 Dives
1 Package á 50 Dives
1 Package á 50 Dives
1 Package á 50 Dives
1 Package á 50 Dives
1 Package á 50 Dives
1 Package á 50 Dives
1 Package á 50 Dives
0 single DivesAlso 8 x das 50er Paket. So ist es ja richtig.
Ich hielte folgendes für sinnvoller:
8 Packages á 50 Dives
0 single Dives
Und das rekursiv zu lösen, ist m.E. auch nicht sinnvoll.
Abgesehen davon, das französische "á" wird zwar bei uns benutzt, in der englischen Sprache ist m.W. aber eher "of" üblich.
cu,
Andreas
echo $begrüßung;
Abgesehen davon, das französische "á" wird zwar bei uns benutzt, in der englischen Sprache ist m.W. aber eher "of" üblich.
Außerdem ist es à statt á.
echo "$verabschiedung $name";
Hallo,
Jungs, das war doch nur ein Beispiel ;-)
Es findet keine Ausgabe statt.
mfg
Matthias
Hallo Matthias,
Angenommen er hat 47 mal getaucht. So soll es wie folgt berechnet werden:
- 1 Paket á 30 Tauchgaenge (270 eur)
- 1 10er Paket (90 eur)
- 7 einzelne Tauchgaenge (70 eur)
In dem Beispiel waere der Preis fuer die 47 Tauchgaenge also bei 430 eur.
oops,
da wird IMHO der Kunde aber sehr sauer werden.
Der einzelne Tauchgang kostet 10 Euro
ab 10 Tauchgängen gibt es Rabatt, also 9 Euro.
Der Kunde hat 47 Tauchgaenge, 47 ist größer als 9, also 47 * 9 = 423 Euro
Und als Funktion:
<?php
function get_preis($anzahl) {
return ($anzahl > 9) ? $anzahl * 9 : $anzahl * 10;
}
/* Beispiel */
$TG = array(1,3,5,7,9, 11, 13, 15, 17, 19);
foreach($TG as $tauchg) {
echo 'Tauchgänge:'.sprintf('% 3s',$tauchg).' = '.sprintf('% 5s', get_preis($tauchg))." &euro\n";
}
?>
Also:
Warum einfach, wenn es auch kompliziert geht ... ;-)
m.b.G. Rolf
Guten Tag Rolf!
da wird IMHO der Kunde aber sehr sauer werden.
Die Regeln macht natuerlich der Diveinstructor - nicht ich. Von daher soll mich das nicht weiter stoeren ;-)
Der einzelne Tauchgang kostet 10 Euro
ab 10 Tauchgängen gibt es Rabatt, also 9 Euro.
Das ist anders zu verstehen. Es ist nicht so, dass man einfach drauf los taucht und nachher schaut, wieviele Tauchgaenge man gemacht hat, sondern man muss vorher einen Tauchgang - oder eben ein Paket - bestellen. Andere, weitere Tauchgaenge, die nach Ablauf des Paketes gemacht werden, sind unabhaengig von den Vorherigen.
mfg
Matthias
Hallo Matthias,
wenn das so sein soll, wie Du jetzt angibst, dann kann man aus der Zahl 47
niemals eineindeutig auf die Preisgruppen schliessen. Schlimmstenfalls hat
der Kunde 47 Einzeltauchgänge absolviert und darf gar keinen Rabatt haben.
Im Moment der Buchung sollte das Paket und sein Preis schon erfasst werden.
Abschliessend werden offenen Buchungen ausgelesen und Preise addiert - fettisch.
m.b.G. Rolf