prog zur datumsanalyse net

  • Themenstarter Themenstarter SBDevil
  • Beginndatum Beginndatum
S

SBDevil

hiho ich hab ein problem ... Ich hab ein Programm geschrieben (in c) das bei eingeben des Datums die Tage zählt ab den 1.1.1 bis halt zum eingegebenen Datums. Außerdem soll das Prog den Wochentag angeben. Aber es funktioniert nicht richtig (Wochentag wird nicht richtig angezeigt) ... das problem ist glaub ich mit den juianischen und gregorianischen Kalender! Und da wollte ich Euch ma fragen ob mir vielleicht einer helfen kann :) aber ich zeig am besten mal den quelltext:
Code:
#include <iostream>
#include <stdlib.h>
#include <stdio.h>

int main(int argc, char *argv[]){
    int tag, monat, jahr, gesamt, schaltj, tageimmonat, wochentag, monatstage, zsumme;
    char e;
           // gesamt= gesamttage seid 1.1.1 bis eingegebenes datum
           // schaltj= anzahl der vorkommenden schaltjahre
           // tageimmonat= wieviele tage der monat hat
           // monatstage= wieviele tage vergangen sind bis zum aktuellen monat
           // zsumme= zwischensumme zur berechnung der schaltj
                         
                         
    // Anfang (Datumseingabe)
    
    do {
        printf("Bitte geben sie das Datum ein! \n");
        printf("Geben Sie den Tag ein (zb: 1 oder 31): \n");
        scanf("%d", &tag);
        printf("Geben Sie den Monat ein (zb: 1 oder 12): \n");
        scanf("%d", &monat);
        printf("Geben Sie das Jahr ein (zb: 1 oder 2004): \n");
        scanf("%d", &jahr);
        printf(" \n");
        printf("------------------------------------------ \n");
        printf("Das eingegebene Datum lautet: %d.%d.%d \n", tag, monat, jahr);
        getchar();
        
        // Monat und tage in vollen monaten (monat-1) werden errechnet

        if (monat==1) {tageimmonat=31; printf("Der Monat heisst: Januar \n"); monatstage=0;}
        if (monat==2) {tageimmonat=28; printf("Der Monat heisst: Februar \n"); monatstage=31;}
        if (monat==3) {tageimmonat=31; printf("Der Monat heisst: Maerz \n"); monatstage=59;}
        if (monat==4) {tageimmonat=30; printf("Der Monat heisst: April \n"); monatstage=90;}
        if (monat==5) {tageimmonat=31; printf("Der Monat heisst: Mai \n"); monatstage=120;}
        if (monat==6) {tageimmonat=30; printf("Der Monat heisst: Juni \n"); monatstage=151;}
        if (monat==7) {tageimmonat=31; printf("Der Monat heisst: Juli \n"); monatstage=181;}
        if (monat==8) {tageimmonat=31; printf("Der Monat heisst: August \n"); monatstage=212;}
        if (monat==9) {tageimmonat=30; printf("Der Monat heisst: September \n"); monatstage=243;}
        if (monat==10) {tageimmonat=31; printf("Der Monat heisst: Oktober \n"); monatstage=273;}
        if (monat==11) {tageimmonat=30; printf("Der Monat heisst: November \n"); monatstage=304;}
        if (monat==12) {tageimmonat=31; printf("Der Monat heisst: Dezember \n"); monatstage=334;}
        printf("Tage im monat: %d \n", tageimmonat);
        
        // Rechnung für Anzahl der Tage
        
        gesamt=365*(jahr-1);     // jahr-1 weil im aktuelle jahr nicht alle 365 tage verwendet wurden 
        gesamt=gesamt+monatstage;  // Tage in den vollen monaten werden adiert
        gesamt=gesamt+tag;         // restliche tage vom restlichen monat werden adiert
        schaltj=jahr/4;            // wegen schaltjahr ... wurde ja vom 1.1.1 schon gemacht
        if (jahr>1582) {           // weil diese rechnungen erst nach 1582 gemacht wurden
                gesamt=gesamt-11;  // wegen sprung vom julianischem zum gregorianischem kalender
                jahr=jahr-1582;      // ab 1582 gab es kein schaltjahr wenn durch 100 teilbar
                zsumme=jahr/100;       // nicht vorhandene schltjahre werden ausgerechnet
                schaltj=schaltj-zsumme;     // nicht vorhandene schaltjahre werden abgezogen
                zsumme=jahr/400;           // allerdings doch wenn durch 400 teilbar
                schaltj=schaltj+zsumme;    // durch 400 teilbare schaltjahre werden wieder adiert
        }
        gesamt=gesamt+schaltj;
        
        // Wocehntag ... war denn der 1.1.1 ein montag?
        
        wochentag=gesamt%7;   // rest 0 muss montag sein, rest 1 dienstag usw.
        
        if (wochentag==0) {printf("Der Wochentag heisst: Montag \n");}
        if (wochentag==1) {printf("Der Wochentag heisst: Dienstag \n");}
        if (wochentag==2) {printf("Der Wochentag heisst: Mittwoch \n");}
        if (wochentag==3) {printf("Der Wochentag heisst: Donnerstag \n");}
        if (wochentag==4) {printf("Der Wochentag heisst: Freitag \n");}
        if (wochentag==5) {printf("Der Wochentag heisst: Samstag \n");}
        if (wochentag==6) {printf("Der Wochentag heisst: Sonntag \n");}
        
        // Restliche Ausgabe
        
        printf("------------------------------------------ \n");
        printf("Tage seid dem 1.1.1 ohne beruecksichtigung vom Schaltjahr: %d \n", gesamt);
        
        printf("Tage seid dem 1.1.1 (mit Schaltjahrberuecksichtigung):     %d \n", gesamt);
        printf("Anzahl der Schaltjahre: %d \n", schaltj);
        printf("------------------------------------------ \n");
        
        
        // Abschluss
        
        printf(" \n");
        printf("Soll ein weiteres Datum eingegeben werden? [j/n] \n");
        e=getchar();
        printf("\n\n\n\n");
        } while (e=='j' || e=='J');
}
 
Zuletzt bearbeitet von einem Moderator:
da Kachelator grad nicht da ist :
CODE TAGS verwenden ! Die # oder [ code ] Hier mein Code[/ code]
Code:
#include <iostream>
#include <stdlib.h>
#include <stdio.h>

int main(int argc, char *argv[]){
int tag, monat, jahr, gesamt, schaltj, tageimmonat, wochentag, monatstage, zsumme;
char e;
// gesamt= gesamttage seid 1.1.1 bis eingegebenes datum
// schaltj= anzahl der vorkommenden schaltjahre
// tageimmonat= wieviele tage der monat hat
// monatstage= wieviele tage vergangen sind bis zum aktuellen monat
// zsumme= zwischensumme zur berechnung der schaltj


// Anfang (Datumseingabe)

do {
printf("Bitte geben sie das Datum ein! \n");
printf("Geben Sie den Tag ein (zb: 1 oder 31): \n");
scanf("%d", &tag);
printf("Geben Sie den Monat ein (zb: 1 oder 12): \n");
scanf("%d", &monat);
printf("Geben Sie das Jahr ein (zb: 1 oder 2004): \n");
scanf("%d", &jahr);
printf(" \n");
printf("------------------------------------------ \n");
printf("Das eingegebene Datum lautet: %d.%d.%d \n", tag, monat, jahr);
getchar();

// Monat und tage in vollen monaten (monat-1) werden errechnet

if (monat==1) {tageimmonat=31; printf("Der Monat heisst: Januar \n"); monatstage=0;}
if (monat==2) {tageimmonat=28; printf("Der Monat heisst: Februar \n"); monatstage=31;}
if (monat==3) {tageimmonat=31; printf("Der Monat heisst: Maerz \n"); monatstage=59;}
if (monat==4) {tageimmonat=30; printf("Der Monat heisst: April \n"); monatstage=90;}
if (monat==5) {tageimmonat=31; printf("Der Monat heisst: Mai \n"); monatstage=120;}
if (monat==6) {tageimmonat=30; printf("Der Monat heisst: Juni \n"); monatstage=151;}
if (monat==7) {tageimmonat=31; printf("Der Monat heisst: Juli \n"); monatstage=181;}
if (monat==8) {tageimmonat=31; printf("Der Monat heisst: August \n"); monatstage=212;}
if (monat==9) {tageimmonat=30; printf("Der Monat heisst: September \n"); monatstage=243;}
if (monat==10) {tageimmonat=31; printf("Der Monat heisst: Oktober \n"); monatstage=273;}
if (monat==11) {tageimmonat=30; printf("Der Monat heisst: November \n"); monatstage=304;}
if (monat==12) {tageimmonat=31; printf("Der Monat heisst: Dezember \n"); monatstage=334;}
printf("Tage im monat: %d \n", tageimmonat);

// Rechnung für Anzahl der Tage

gesamt=365*(jahr-1); // jahr-1 weil im aktuelle jahr nicht alle 365 tage verwendet wurden
gesamt=gesamt+monatstage; // Tage in den vollen monaten werden adiert
gesamt=gesamt+tag; // restliche tage vom restlichen monat werden adiert
schaltj=jahr/4; // wegen schaltjahr ... wurde ja vom 1.1.1 schon gemacht
if (jahr>1582) { // weil diese rechnungen erst nach 1582 gemacht wurden
gesamt=gesamt-11; // wegen sprung vom julianischem zum gregorianischem kalender
jahr=jahr-1582; // ab 1582 gab es kein schaltjahr wenn durch 100 teilbar
zsumme=jahr/100; // nicht vorhandene schltjahre werden ausgerechnet
schaltj=schaltj-zsumme; // nicht vorhandene schaltjahre werden abgezogen
zsumme=jahr/400; // allerdings doch wenn durch 400 teilbar
schaltj=schaltj+zsumme; // durch 400 teilbare schaltjahre werden wieder adiert
}
gesamt=gesamt+schaltj;

// Wocehntag ... war denn der 1.1.1 ein montag?

wochentag=gesamt%7; // rest 0 muss montag sein, rest 1 dienstag usw.

if (wochentag==0) {printf("Der Wochentag heisst: Montag \n");}
if (wochentag==1) {printf("Der Wochentag heisst: Dienstag \n");}
if (wochentag==2) {printf("Der Wochentag heisst: Mittwoch \n");}
if (wochentag==3) {printf("Der Wochentag heisst: Donnerstag \n");}
if (wochentag==4) {printf("Der Wochentag heisst: Freitag \n");}
if (wochentag==5) {printf("Der Wochentag heisst: Samstag \n");}
if (wochentag==6) {printf("Der Wochentag heisst: Sonntag \n");}

// Restliche Ausgabe

printf("------------------------------------------ \n");
printf("Tage seid dem 1.1.1 ohne beruecksichtigung vom Schaltjahr: %d \n", gesamt);

printf("Tage seid dem 1.1.1 (mit Schaltjahrberuecksichtigung): %d \n", gesamt);
printf("Anzahl der Schaltjahre: %d \n", schaltj);
printf("------------------------------------------ \n");


// Abschluss

printf(" \n");
printf("Soll ein weiteres Datum eingegeben werden? [j/n] \n");
e=getchar();
printf("\n\n\n\n");
} while (e=='j' || e=='J');
}
 
Zurück