Wie am elegantesten Ausrechnen?
-
Hallo,
ich habe folgendes Problem und zwar ist folgendes gegeben:2007 = gelb
2008 = rot
2009 = grün
2010 = blau
2011 = weiß
2012 = gelb
2013 = rot
2014 = grün
2015 = blau
2016 = weißWie man sieht wiederholt sich alles. Wie kann ich nun ausrechnen welche Farbe z.B. im Jahre 2064 sein wird? Oder welche Farbe im Jahre 1600 war? Mir fällt dazu leider keine elegante Lösung ein
Ich möchte das jedenfalls später gerne in PHP-Code umsetzen nur fehlt mir da die passende Formel zu...
Vielen Dank im Voraus
BlubBlubBlub
-
Offenbar ist der Zyklus 4 lang, also dividierst du die Zahl durch 4 und guckst dir den Rest an. Alle Zahlen, die den Rest 0 haben, sind zB rot, etc.
-
-> PHP und viele andere Programmiersprachen bietet dafür den Modulo-Operator an (a % b = Rest der Ganzzahldivision von a / b)
MfG SideWinder
-
((jahreszahl + 3) mod 6) sollte dir einen index von 0 bis 4 geben.
-
std::string farben[5]; farben[0] = "blau"; farben[1] = "weiß"; farben[2] = "gelb"; farben[3] = "rot"; farben[4] = "grün"; std::string gesuchte_farbe = farben[jahreszahl % 5];
Musst nach PHP portieren, sollte aber klappen.
-
Vielen Dank! Das ich da nicht selber drauf gekommen bin
function getColourByYear( $Year ) { $Farben = array( "Gelb", "Rot", "Grün", "Blau", "Weiß" ); return $Farben[($Year + 3) % 5]; }
Ich denke den Code kann ich so stehlen lassen? Oder sollte ich noch was ändern?
Viele Grüße
BlubBlubBlub
-
a) Variablennamen klein hat sich eingebürgert
b) Ordne die Farben anders an, dann kannst du dir das +3 sparen?!
c) Ich hoffe PHP legt das Array nicht bei jedem Funktionsaufruf neu an sondern macht daraus autom. das was in C++ als static bekannt istMfG SideWinder
-
Korrektur
( feste Referenz )
int main() { char* f[5] = {"gelb", "rot", "gruen", "blau", "weiss" }; int referenz = 1597; int jahr = 2016; printf("%s\n", f[abs( referenz - jahr )%5] ); return 0; }
-
proggingmania schrieb:
Kuckuck !
Du brauchst erstmal einen Nullpunkt bzw. eine Referenz, z.B. das Jahr
2007.den hat er ja...btw deine indices sind um 1 daneben
ich dachte, dass er evtl. den richtigen index braucht. wenn es nur darum geht den richtigen string zu wählen, dann ist zutitzzs variante besser.
-
dot schrieb:
den hat er ja...btw deine indices sind um 1 daneben
Wieso ? 5 Farben, Index 0 bis 4.
dot schrieb:
ich dachte, dass er evtl. den richtigen index braucht.
Ja, für den Index kann man auch statt char* f
int index nehmen oder so.dot schrieb:
wenn es nur darum geht den richtigen string zu wählen, dann ist zutitzzs variante besser.
Wieso, weils C++ ist und nicht C ?
-
Axoh, die abs Funktion kann ja jetzt auch rausfliegen.
-
SideWinder schrieb:
a) Variablennamen klein hat sich eingebürgert
b) Ordne die Farben anders an, dann kannst du dir das +3 sparen?!
c) Ich hoffe PHP legt das Array nicht bei jedem Funktionsaufruf neu an sondern macht daraus autom. das was in C++ als static bekannt istMfG SideWinder
Hi, das mit der Variable Farben macht mir auch sorgen, aber ich weiß nicht wie ichs ohne lösen soll...
function getColourForYear( $year ) { return ( array( "Gelb","Rot","Grün","Blau","Weiß" )[($year + 3) % 5] ); }
Das kann PHP scheinbar nicht... Wie könnte man das mit dem Array noch sinnvoller lösen?
Danke
-
BlubBlubBlub schrieb:
Ich denke den Code kann ich so stehlen lassen?
Du kannst beruhigt sein, den Code stiehlt dir keiner.
MfG, der Beruhiger.
-
proggingmania schrieb:
dot schrieb:
den hat er ja...btw deine indices sind um 1 daneben
Wieso ? 5 Farben, Index 0 bis 4.
rechne mal nach. bei dir wäre 2007 "weiss"
proggingmania schrieb:
Ja, für den Index kann man auch statt char* f
int index nehmen oder so.oO warum sollte man für einen index char* verwenden !?
proggingmania schrieb:
Wieso, weils C++ ist und nicht C ?
nein. weil er sich die addition spart, was aber nur funktioniert, solange man eben nur den richtigen string auswählen will.
-
Zu 1.) Nööö
Zu 2.) Nööö
Zu 3.) NöööEdit: Zu 3.) Nööö