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: