Brauche ein Datums Allgorithmus.



  • Hallo,
    Ich soll Programm erstellen,das folgendes können soll,man gibt den Tag in einem Jahr ein z.b 22 von 2005,und es soll dann das aktuelle Datum erstellt werden.Naja hab jetzt das Proggi soweit fertig,bis auf den Schönheitsfehler das es halt nicht dem Orginaldatum entspricht,weil der Jahresanfang ja immer an einem anderen Tag anfängt.
    Es muß doch einen Allgorithmus dafür geben,so das man es genau berechnen kann, wann der Tag an einem Jahr anfängt.Ich hab mir überlegt in der standart Library in C gibt es doch die Date.c.Aber da kenne ich mich zu wenig aus.Könnte mir da jemand helfen,mein Proggi noch etwas besser zu machen.

    # include<stdio.h>
    
    int main()
    {
    int tag=0;
    int monat=1;
    int jahr=0;
    int schalt=0;
    int i=0;
    int j=0;
    int t=0;
    
    system("clear");
    printf("Geben Sie das Jahr ein:");
    scanf("%i",&jahr);
    printf("Geben Sie den Tag ein:");
    scanf("%i",&tag);
    printf("\n");
    
    for(i=1;i<=12;i++){
    
    if((jahr%4==0)&&(jahr%100!=0)||(jahr%400==0)){schalt=1;}
    
    if(schalt==1)
    {
    if((i==1)||(i==3)||(i==5)||(i==7)||(i==8)||(i==10)||(i==12)){j+=31;}
    if((i==2)&&(schalt==1)){j+=29;}
    if ((i==4)||(i==6)||(i==9)||(i==11)){j+=30;}
    if(tag<=31){t=tag;}
    if(tag>j){monat++;t=tag%j;}
    }
    else
    {
    if((i==1)||(i==3)||(i==5)||(i==7)||(i==8)||(i==10)||(i==12)){j+=31;}
    if((i==2)){j+=28;}
    if ((i==4)||(i==6)||(i==9)||(i==11)){j+=30;}
    if(tag<=31){t=tag;}
    if(tag>j){monat++;t=0;t=tag%j;}
    }}
    printf("----------------------------------------------------\n");
    printf("Datum:%i.%i.%i  Tag:[%d von %d]   [schaltjahr=%i]\n",t,monat,jahr,tag,j,schalt);
    printf("----------------------------------------------------\n\n");
    }
    


  • machs doch teilweise so:

    int monate[] = {31,28,31,30,31,30,31,31,30,31,30,31}

    und schaltjahralgo:

    int schaltjahr(int j)
    {
    return j%400 ? (j%100 ? (j%4 ? 0 : 1) : 0) : 1;
    }

    dann musst du nur beim schaltjahr im februar (monate[1]) eins draufzählen.



  • c.rackwitz schrieb:

    machs doch teilweise so:

    int monate[] = {31,28,31,30,31,30,31,31,30,31,30,31}

    und schaltjahralgo:

    int schaltjahr(int j)
    {
    return j%400 ? (j%100 ? (j%4 ? 0 : 1) : 0) : 1;
    }

    dann musst du nur beim schaltjahr im februar (monate[1]) eins draufzählen.

    Hey cooler Allgo. 😃 Thanks!


Anmelden zum Antworten