1. Dashboard
  2. Forum
    1. Unerledigte Themen
  3. Mitglieder
    1. Letzte Aktivitäten
    2. Benutzer online
    3. Team-Mitglieder
    4. Trophäen
    5. Mitgliedersuche
  4. Tutorial Bereich
  • Deutsch
  • Anmelden
  • Registrieren
  • Suche
Dieses Thema
  1. Informatik Forum
  2. Webmaster & Internet
  3. Entwicklung

Wochentag vom Jahr ausgeben

  • xxyy
  • 26. Dezember 2006 um 21:11
  • Unerledigt
  • xxyy
    6
    xxyy
    Mitglied
    Punkte
    350
    Beiträge
    57
    • 26. Dezember 2006 um 21:11
    • #1

    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)

    Code
    #include <stdio.h>
    
    
    
    
    int main()
    {
    
    
    
    
    int zeichen[6];
    
    
    tag[0] = 'Montag';
    tag[1] = 'Dienstag';
    tag[2] = 'Mittwoch';
    tag[3] = 'Donnerstag';
    tag[4] = 'Freitag';
    tag[5] = 'Samstag';
    tag[6] = 'Sonntag';
    
    
    printf("Jahreszahl: ");
    scanf("%d",&jahr);
    
    
    jahr=jahr-2006;
    
    
    
    
    printf("%c", tag[6+jahr]);
    
    
    }
    Alles anzeigen


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

  • mdk
    26
    mdk
    Emeritus
    Reaktionen
    130
    Punkte
    7.120
    Beiträge
    1.390
    • 26. Dezember 2006 um 21:32
    • #2

    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.

  • Lord Binary
    18
    Lord Binary
    Mitglied
    Reaktionen
    11
    Punkte
    3.301
    Beiträge
    647
    • 26. Dezember 2006 um 21:44
    • #3

    Wochentagsalgorithmus von Gauß implementieren.


    Trading for a living [equities,futures,forex]

  • mdk
    26
    mdk
    Emeritus
    Reaktionen
    130
    Punkte
    7.120
    Beiträge
    1.390
    • 26. Dezember 2006 um 21:45
    • #4
    Zitat von Lord Binary

    Wochentagsalgorithmus von Gauß implementieren.

    meine formel ist genau dieser algorithmus, nur dadurch, dass man für tag und monat konstanten annehmen kann, wesentlich vereinfacht. :)

  • Lord Binary
    18
    Lord Binary
    Mitglied
    Reaktionen
    11
    Punkte
    3.301
    Beiträge
    647
    • 26. Dezember 2006 um 21:48
    • #5

    Ist schon klar, hab Deinen Post zu spät gesehen :)


    Trading for a living [equities,futures,forex]

  • xxyy
    6
    xxyy
    Mitglied
    Punkte
    350
    Beiträge
    57
    • 26. Dezember 2006 um 22:24
    • #6

    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.

  • mdk
    26
    mdk
    Emeritus
    Reaktionen
    130
    Punkte
    7.120
    Beiträge
    1.390
    • 26. Dezember 2006 um 22:28
    • #7
    Zitat von xxyy


    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.

  • Paulchen
    1
    Paulchen
    Gast
    • 26. Dezember 2006 um 23:09
    • #8
    Zitat von mdk


    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 :winking_face:

    Code
    #include <math.h>

    Dann sollte floor bekannt sein. :)

    Zitat von mdk

    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. :)

  • xxyy
    6
    xxyy
    Mitglied
    Punkte
    350
    Beiträge
    57
    • 26. Dezember 2006 um 23:26
    • #9

    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?

  • Paulchen
    1
    Paulchen
    Gast
    • 26. Dezember 2006 um 23:49
    • #10
    Zitat von xxyy

    In einer Zeile mit modulo nimmt er es nicht an.

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

    Zitat von xxyy

    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);
  • Lord Binary
    18
    Lord Binary
    Mitglied
    Reaktionen
    11
    Punkte
    3.301
    Beiträge
    647
    • 26. Dezember 2006 um 23:58
    • #11
    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]

  • xxyy
    6
    xxyy
    Mitglied
    Punkte
    350
    Beiträge
    57
    • 27. Dezember 2006 um 00:13
    • #12

    @Paulchen

    Was meinst du mit gcc?
    Weil bei mir kommt ein Fehler beim Kompilieren (wegen modulo von float t)

  • Paulchen
    1
    Paulchen
    Gast
    • 27. Dezember 2006 um 01:37
    • #13
    Zitat von xxyy

    Was meinst du mit gcc?

    Den C-Compiler aus der GNU Compiler Collection.

  • Plantschkuh!
    24
    Plantschkuh!
    Mitglied
    Reaktionen
    163
    Punkte
    6.173
    Beiträge
    1.181
    • 27. Dezember 2006 um 17:50
    • #14
    Zitat von Paulchen

    Probieren geht über studieren:


    Oder auch "probieren geht in Richtung Sachen lernen, die bei dieser Version von diesem Compiler so sind, aber bei einem anderen Compiler oder auch nur einer anderen Version von diesem Compiler vielleicht ganz anders".

    *plantsch*

  • xxyy
    6
    xxyy
    Mitglied
    Punkte
    350
    Beiträge
    57
    • 2. Januar 2007 um 20:00
    • #15

    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?

  • mdk
    26
    mdk
    Emeritus
    Reaktionen
    130
    Punkte
    7.120
    Beiträge
    1.390
    • 2. Januar 2007 um 20:12
    • #16

    2008 ist ein schaltjahr.

  • xxyy
    6
    xxyy
    Mitglied
    Punkte
    350
    Beiträge
    57
    • 5. Januar 2007 um 01:28
    • #17

    Ah danke für den Hinweis! Jetzt ist es einwandfrei!

    Danke nochmal!!

  • Maximilian Rupp 27. Dezember 2024 um 12:05

    Hat das Thema aus dem Forum Programmieren nach Entwicklung verschoben.

Jetzt mitmachen!

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

Benutzerkonto erstellen Anmelden

Benutzer online in diesem Thema

  • 1 Besucher

Rechtliches

Impressum

Datenschutzerklärung

  • Alles
  • Dieses Thema
  • Dieses Forum
  • Seiten
  • Forum
  • Lexikon
  • Erweiterte Suche
  • Deutsch
  • English
Zitat speichern