staging.inyokaproject.org

Wochentagsberechner

Status: Ungelöst | Ubuntu-Version: Nicht spezifiziert
Antworten |

Mixer

Anmeldungsdatum:
2. Februar 2008

Beiträge: Zähle...

Hallo,

nachdem ich vor kurzem in einer Doku gesehen habe, wie jemand blitzschnell den Wochentag eines beliebigen Datums errechnen kann habe ich mal genauer nachgeforscht wie das ganze funktioniert. Ich habe bei Wikipedia eine gute Anleitung fuer eine der verschiedenen moeglichen Methoden gefunden und mit dieser auch gleich mal ein paar Tage ausgerechnet: http://de.wikipedia.org/wiki/Wochentagsberechnung Die Ueberpruefung habe ich mit dem Kalender von http://www.ewigerkalender.de/ gemacht.

Da das ganze jedoch relativ aufwendig ist und ich sowieso ein paar freie Minuten hatte habe ich mir kurzerhand ein Hilfsprogramm gebastelt, dass die Bereitstellung von Zufallsdaten sowie die Ueberpruefung macht. Zusaetzlich gibts auch noch Statistiken ueber richtig/falsch sowie die Zeit fuer die Berechnungen.

Ich weiss nicht ob jemand anderes damit auch was anfangen kann, aber wenn jemand das ganze auch so interessant findet wie ich und es sich beibringen will kann das Hilfsprogramm durchaus interessant sein. Das ganze ist nicht besonders gut/schoen programmiert, aber ich bin ja auch kein Informatiker 😉

Hier ist der Quellcode:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
// Copyright by Christoph Schwarz
//
// Ressources: http://de.wikipedia.org/wiki/Wochentagsberechnung
//
//


#include <stdio.h>
#include <stdio_ext.h>
#include <stdlib.h>
#include <time.h>

struct date{
    unsigned int day;
    unsigned int month;
    unsigned int year;
    unsigned int weekday;
};



int main(int argc, char *argv[]){

    time_t start, end, seedval;
    double timestat = 0.0;
    char buffer;
    int quit = 1;
    int fail = 0;
    int win = 0;
    struct date new;   
    int MonthValues[] = {0, 3, 3, 6, 1, 4, 6, 2, 5, 0, 3, 5};
    int decade, century, month;
    time(&seedval);
    printf("\n --- Day Calculator --- \
            \n                        \
            \n type Day or q to quit  \
            \n  ...and have fun!!!    \
            \n                        ");
    srand(seedval);
    do{
        new.year = (rand()%300)+1800;
        new.month = (rand()%12)+1;
        new.day = (rand()%28)+1;
        new.weekday = 0;
        printf("\n\n----------");
        printf("\n%2i.%2i.%i",new.day, new.month, new.year);
        printf("\n----------\n");
        time(&start);
        new.weekday = new.day;
        month = MonthValues[new.month-1];
        decade = new.year%100;
        decade = (decade + (decade/4));
        century = new.year/100;
        century = (3 - (century%4))*2;
        new.weekday = (new.day + month + decade + century);
        if(new.month < 3){
            if((new.year % 4) == 0){
                if((new.year % 100) != 0){
                     new.weekday -= 1;
                }
                else if((new.year % 100) == 0 && (new.year & 400) == 0){
                    new.weekday -= 1;
                }
            }
        }
        new.weekday = new.weekday % 7;
        buffer = getchar();
        time(&end);
        __fpurge(stdin);
        if(buffer == 'q')
            quit = 0;
        else{
            timestat += difftime(end,start);
            printf("Time to solve: %.1f s \n", difftime(end,start));
            if(buffer == new.weekday + 48){
                printf("Congratulations - you are right!"); 
                win++;
            }
            else{
                printf("Sorry - right answer is %i...", new.weekday);
                fail++;
            }
        }


    }while(quit);

    printf("\nEnd - your statistics: \nRight: %i  \nWrong: %i \nRatio: %.2f %% \nAverage time: %.2f s \n", win, fail, ((double)win/(double)(fail+win))*100.0, (timestat/(double)(win+fail)) );
            

    return 0;
}

Diesen Quellcode in einer Datei, z.B. main.c speichern und dann mit

1
gcc -o main main.c

compilieren. Die erzeuge Datei kann dann mit

1
./main

aufgerufen werden.

Es wird jeweils ein Zufallsdatum erzeugt und angezeigt. Den Wochentag kann man ueber eine Zahl eingeben (0 = Sonntag, 1 = Montag, ..., 6 = Samstag). Moechte man das ganze beenden einfach q eingeben und Enter druecken. Dann bekommt man eine kurze Auswertung seiner Berechnungen.

Im Anhang ist noch ein Screenshot von dem Programm.

Viele Gruesse

Mixer

Bilder

radopi

Anmeldungsdatum:
25. Oktober 2012

Beiträge: 465

Hi,

sehr cool. Hast du noch Fragen dazu?

LG radopi

Mixer

(Themenstarter)

Anmeldungsdatum:
2. Februar 2008

Beiträge: 153

Hallo radopi,

nein, habe keine Fragen mehr dazu. Wollte das kleine "helferlein" nur hier mal reinstellen, falls es da draussen noch mehr "Wochentagsberechner" gibt.

Gruss

radopi

Anmeldungsdatum:
25. Oktober 2012

Beiträge: 465

Hi,

OK. ich finde das Programm auf jeden Fall sehr cool. Ich lerne grad die ganzen Zahlen auswendig.

LG radopi

Antworten |