Bestand darf nicht unter 0
Jasmin
- php
Hallo liebe Forumsbenutzer,
ich möchte mit PHP einen Bestand ausrechnen.
Zuerst haben ich einen Anfangsbestand.
$bestand = 100;
Außerdem nimmt der Bestand zu, z.B. alle zwei Sekunden um fünf:
$bestand = 100 + floor($t / 2) * 5;
Außerdem nimmt der Bestand auch noch gleichzeitig ab, z.B.:
$bestand = 100 + floor($t / 2) * 5 - floor($t / 2) * 10;
Das funktioniert soweit. Allerdings wird so der Bestand irgendwann unter Null sein. Das soll er aber nicht; Wenn das der Fall wäre, soll nichts mehr abgezogen werden (es soll nur nach einer bestimmten Zeit etwas abgezogen werden, im Bsp. zwei Sekunden). max() hilft mir in diesem Fall leider nicht weiter.
Am Schluss möchte ich auch noch berechnen, wieviel nach einer bestimmten Zeit jetzt wirklich abgezogen worden ist.
Hallo,
entscheide Dich bitte, wie Du Stammdaten, Bewegungsdaten und Regeln verwalten willst, bzw. definiere erst einmal klare Regeln.
Dann findet sich bestimmt auch ein Verfahren, wie Du das machen kannst.
LG
Chris
Hallo,
Hallo
entscheide Dich bitte, wie Du Stammdaten, Bewegungsdaten und Regeln verwalten willst
Verwalten?
definiere erst einmal klare Regeln.
Ich dachte das würde aus meiner Beschreibung hervorgehen.
Man könnte natürlich mit einer Schleife jeden Zeitschritt durchgehen, addieren und wenn t >= 0 subtrahieren (wobei Pkt. 3 dann nicht erfüllt wäre). Das möchte ich aber nicht, ich möchte es berechnen.
Gruß
Jasmin
Hallo Jasmin,
und soll das Ganze virtuell oder in Realtime stattfinden?
Wenn es nur um die Berechnung geht, handelt es sich sicher um zwei harmonisierte Schleifen. Finde einen gemeinsamen Quotienten für die Zeiteinheiten und lass beides in einer Schleife berechnen.
Iteration ist der gemeinsame Quotient. Der Operator "modul" (%) dürfte dann Dein Freund sein.
http://de2.php.net/manual/en/language.operators.arithmetic.php
LG
Chris
Hallo Chris,
erstmal Danke für eure Antworten.
und soll das Ganze virtuell oder in Realtime stattfinden?
In Echtzeit!
Wenn es nur um die Berechnung geht, handelt es sich sicher um zwei harmonisierte Schleifen. Finde einen gemeinsamen Quotienten für die Zeiteinheiten und lass beides in einer Schleife berechnen.
Iteration ist der gemeinsame Quotient. Der Operator "modul" (%) dürfte dann Dein Freund sein.
http://de2.php.net/manual/en/language.operators.arithmetic.php
Das habe ich mir auch schon überlegt, hoffe aber das man das auch (auf einmal) berechnen kann. Wäre es sehr rechenintensiv wenn der Zeitquotient eine Sekunde wäre und die gesamte Zeit vier Wochen? (diese Frage ist nicht rethorisch ;))
Hallo Jasmin,
und soll das Ganze virtuell oder in Realtime stattfinden?
In Echtzeit!
Dann scheint mir hier noch Diskussionsbedarf zu bestehen.
Wodurch wird das einzelne Ereignis ausgelöst, und was muss dann geschehen?
Wie hoch ist die maximal zulässige Ereignisdichte? Also wieviele Eriegnisse können maximal pro Millisekunde, Sekunde, Stunde, Tag,... stattfinden?
Wann muss berechnet werden? Sofort nach jedem Ereigneis, oder nach festen Zeitabschnitten?
LG
Chris
Hallo Chris,
ich habe es jetzt selbst hinbekommen. Manchmal braucht es eben nur einen Stoß in die richtige Richtung ;). Vielen Dank für deine Hilfe.
Gruß
Jasmin
Hallo Jasmin,
- Pro variablem Zeitschritt wird ein Betrag addiert
- Pro variablem Zeitschritt wird ein Betrag subtrahiert
bis hierher würde ich sagen, dass sich das Problem nicht nur iterativ, sondern durch eine (exponentielle) Funktion in Abhängigkeit der Schritte geschlossen lösen lässt. Das ist allerdings eine Vermutung.
- Die beiden Zeitschritte muessen unterschiedlich groß sein können.
Oops, jetzt wird's schon spannender, da ist es mit der Berechnung wohl schon vorbei. Das ist allerdings eine Vermutung.
- Würde das subtrahieren des Wertes den Bestand unter 0 bringen, wird nicht subtrahiert.
Dann müsste die Funktion sozusagen ahnen, dass im siebenhundertachtunddreissigsten Schritt nicht subtrahiert werden darf. Dafür gibt es wohl erst recht keine geschlossene Lösung. Das ist allerdings auch eine Vermutung.
Da Du keinen Algorithmus, sondern eine Funktion suchst, hat das Ganze mit php eigentlich nichts zu tun sondern ausschließlich mit Mathematik.
Diplommathematiker vor ...
Gruß
Andree
Hallo Jasmin,
Hallo,
- Die beiden Zeitschritte muessen unterschiedlich groß sein können.
Oops, jetzt wird's schon spannender, da ist es mit der Berechnung wohl schon vorbei. Das ist allerdings eine Vermutung.
Nunja, da geht schon noch, in meinem ersten Posting hab ich das mit
$bestand = 100 + floor($t / 2) * 5 - floor($t / 2) * 10;
realisiert. Die beiden 2er könnten ja unterschiedliche Zahlen sein. Vielleicht hast du mich falsch verstanden.
- Würde das subtrahieren des Wertes den Bestand unter 0 bringen, wird nicht subtrahiert.
Dann müsste die Funktion sozusagen ahnen, dass im siebenhundertachtunddreissigsten Schritt nicht subtrahiert werden darf.
Das denke ich auch.
Diplommathematiker vor ...
Genau ;)
Gruß
Jasmin