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 ist

    MfG 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 ist

    MfG 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ööö

    🙂


Anmelden zum Antworten