Wochentag vom Jahr ausgeben

  • Hi Leute,

    ich hoffe ihr habt Weihnachten gut verbracht.

    Ich überlege grad an einem Programm wo man die Jahreszahl eingibt und es gibt mir dann den Wochentag vom 24. Dezember aus.

    Eine Idee habe ich zwar, aber umsetzen kann ich sie nicht.

    Und zwar habe ich mir gedacht die Wochentage in einem array tag[6] mit 7 Plätzen zu speichern.
    Von der eingegebenen Jahreszahl z.B. 2007 subtrahiert man 2006 (denn ich weiß ja dass 2006=Sonntag).

    Die Ausgabe würde dann tag[6+1] lauten und das heisst tag[0]=Montag.
    Wenn man 2008 eingibt, dann tag[6+2]=Dienstag usw...

    Wie aber weisst man einem bestimmten Platz von einem Array einen "string" zu, so dass dieser dann ausgegeben werden kann?

    Oder ist die Idee falsch und man kann es anders/besser machen?

    Mein Code sieht so aus (die Zuweisungen sind offensichtlich falsch)


    Danke fürs Lesen und einen schönen Abend euch noch.

  • wenn es von 1901 bis 2099 reicht:

    Code
    t = (floor(jahr * 365.25) - 620628) mod 7


    (floor = auf die nächstkleinere ganze zahl abgerundet)

    wobei t = 0 für sonntag, 1 für montag,..., 6 für samstag.

  • Hi,

    danke für den Tipp.

    Bei mir erkennt er "floor" nicht. Muss man eine bestimmte Bibliothek einbinden?

    Und wie kommt man auf die Formel? Ist es irgendwo beschrieben?

    Es geht also nur um den Tag vom 24. Dezember.


  • Bei mir erkennt er "floor" nicht. Muss man eine bestimmte Bibliothek einbinden?

    die funktion habe ich jetzt erfunden. aber evtl. gibt es eine funktion, die einfach auf die nächstgelegene ganze zahl abrundet. (sonst musst du sie dir selber basteln)

    Zitat

    Und wie kommt man auf die Formel? Ist es irgendwo beschrieben?

    das ist die gaußsche formel, nur mit den fixwerten 24 für tag und 12 für monat eingesetzt.


  • die funktion habe ich jetzt erfunden. aber evtl. gibt es eine funktion, die einfach auf die nächstgelegene ganze zahl abrundet. (sonst musst du sie dir selber basteln)

    mdk, du machst doch Sysprog ;)

    Code
    #include <math.h>

    Dann sollte floor bekannt sein. :)

    das ist die gaußsche formel, nur mit den fixwerten 24 für tag und 12 für monat eingesetzt.

    Selbstverständlich gibt es detaillierte Beschreibungen zu dieser Formel, zum Beispiel in der Wikipedia. :)

  • Danke für die Hinweise!

    @Paulchen
    Danke für den Link.


    In einer Zeile mit modulo nimmt er es nicht an. Also hab ich

    Code
    t = ((jahr * 365.25) - 620628);
    t=t % 7;

    Und das mit dem Abrunden, also für t nehme ich ja den Datentyp float.
    Wenn ich aber dann t an eine integer Variable übergebe, müsste er dann nicht automatisch abrunden?

  • In einer Zeile mit modulo nimmt er es nicht an.

    Zumindest der gcc nimmt % auch nur für Operanden von ganzzahligen Typen (int, ...).

    Wenn ich aber dann t an eine integer Variable übergebe, müsste er dann nicht automatisch abrunden?

    Probieren geht über studieren:

    Code
    int x;
    float t=2.2;
    x=t;
    printf("%i\n",x);
  • Zitat


    Selbstverständlich gibt es detaillierte Beschreibungen zu dieser Formel, zum Beispiel in der Wikipedia.

    Wie Gauß auf diese Formel gekommen ist, bzw wie man sie herleitet steht da allerdings nicht.
    Da sie allerdings defakto selbstherleitend ist -> egal.

    Ad probieren geht über studieren:

    Code
    int x;
       float t=-2.2;
       int y = floor (t);
       x=t;
       printf("%i\n",x);
       printf("%i\n",y);


    Trading for a living [equities,futures,forex]

  • Hallo Leute,

    danke nochmal und frohes neues Jahr euch!

    Habe etwas rumprobiert, aber so nichts hinbekommen.

    Jetzt habe ich die math.h eingebunden und habe floor wie mdk es gezeigt hat benutzen können.


    Code
    t = (floor(jahr * 365.25) - 620628);
    t =t%7;
    
    
    
    
    printf("%d", t);

    Das Problem ist, wenn ich eingebe...

    2006 -> 0 (ok)
    2007 -> 1 (ok)
    2008 -> 3, müsste 2 sein ?!
    2009 -> 4, müsste 3 sein?
    2010 -> 5
    2011 -> 6

    2012 -> 1


    Also noch stimmt was nicht, oder habe ich was vergessen?

Jetzt mitmachen!

Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!