C Aufgabe Schaltjahr
-
Sitze grad an einer Aufgabe für die Uni und komm einfach nicht auf meinen Fehler.
Das Programm lässt sich kompilieren, jedoch gibt es bei Schaltjahr null einen falsch Wert aus.#include <stdio.h>
int jahr = 0;
int istSchaltjahr = 0;printf("Jahreszahl: ");
scanf("%i, &jahr);if (jahr % 4 == 0){
if (jahr % 100 == 0){
if (jahr % 400 == 0){
if (jahr == 0){
istSchaltjahr = 1;
}
else {
istSchaltjahr = 0;
}
}
else {
istSchaltjahr = 1;
}
}
else {
istSchaltjahr = 0;
}
}
else {
istSchaltjahr = 0;
}if (istSchaltjahr == 1) {
printf("%i war ein Schaltjahr.\n", jahr);} else {
printf("%i war ein Schaltjahr.\n", jahr);
}
}Danke für eure Tips
Gruß
maxwell
-
Zunächst: sdfd (und ein wenig optische Struktur tut deinem Programm auch nicht schlecht)
maxwell schrieb:
if (jahr % 4 == 0) { if (jahr % 100 == 0) { if (jahr % 400 == 0) { if (jahr == 0) { istSchaltjahr = 1; } else { istSchaltjahr = 0; } } else { istSchaltjahr = 1; } } else { istSchaltjahr = 0; } } else { istSchaltjahr = 0; }
Zum Thema: Wozu hast du überhaupt die Sonderabfrage "jahr==0"? dort drin? So, wie die Struktur momentan aussieht, hast du die Schaltjahresregel falsch angewendet - Jahr 0 ist ein Schaltjahr, andere durch 400 teilbare Jahre nicht, ansonsten nur noch die durch 100 teilbaren Jahre.
-
Die Augabenstellung sieht wie folgt aus:
- Ein Jahr dessen Jahreszahl durch 4 teilbar ist, ist ein Schaltjahr
- ... außer wenn die Jahreszahl durch 100 teilbar ist.
- Ist die Jahreszahl durch 400 teilbar, dann ist das entsprechende Jahr aber trotzdem ein Schaltjahr.
- Das Jahr 0 war kein Schaltjahr.Programmier erst seit einer Woche .. daher bin ich noch etwas unbeholfen ...
-
Dann vertausch mal die ganzen 0 und 1 miteinander (oder du sagst "1 steht für 'kein Schaltjahr'" und drehst die if(istSchaltjahr) Abfrage entsprechend um.
der Teil hinter if() wird ausgeführt, wenn die Bedingung erfüllt ist, der Teil hinter else, wenn die Bedingung des zugehörigen if() nicht erfüllt war.
-
müsste eigentlich so reichen:
if (jahr%400 == 0 || (jahr%4 == 0 && jahr%100 !=0)) // februar hat 29 tage else // februar hat 28 tage
-
maxwell schrieb:
- Das Jahr 0 war kein Schaltjahr.
ein jahr 0 gab es nie.
-
CStoll schrieb:
Dann vertausch mal die ganzen 0 und 1 miteinander (oder du sagst "1 steht für 'kein Schaltjahr'" und drehst die if(istSchaltjahr) Abfrage entsprechend um.
der Teil hinter if() wird ausgeführt, wenn die Bedingung erfüllt ist, der Teil hinter else, wenn die Bedingung des zugehörigen if() nicht erfüllt war.
All das hatte ich schon versucht ..
leider erfolglos ..
-
Echt?
if (jahr % 4 == 0) if (jahr % 100 == 0) if (jahr % 400 == 0) if (jahr == 0) istSchaltjahr = 0; else istSchaltjahr = 1; else istSchaltjahr = 0; else istSchaltjahr = 1; else istSchaltjahr = 0;
So sollte es eigentlich das richtige Ergebnis liefern.
-
CStoll schrieb:
Echt?
if (jahr % 4 == 0) if (jahr % 100 == 0) if (jahr % 400 == 0) if (jahr == 0) istSchaltjahr = 0; else istSchaltjahr = 1; else istSchaltjahr = 0; else istSchaltjahr = 1; else istSchaltjahr = 0;
So sollte es eigentlich das richtige Ergebnis liefern.
Jetzt hats tatsächlich geklappt.
Danke Dir vielmals für deine Hilfe ..
-
doppelpost, sorry.
-
hier.. der code funktioniert..
falls du ihn noch brauchst..#include<stdio.h> #include<stdlib.h> void main() { int Jahr,Antw=1; do { do { system("cls"); printf("\n\t********Schaltjahrberechnung********\n\n"); printf("\n\tJahr >=1600 : ");scanf("%i",&Jahr); } while(!(Jahr>=1600)); if(Jahr%400==0) printf("\n\n\tJahr ist ein Schaltjahr\n\n"); else if(Jahr%100==0) printf("\n\n\tJahr ist kein Schaltjahr\n\n"); else if(Jahr%4==0) printf("\n\n\tJahr ist ein Schaltjahr\n\n"); else printf("\n\n\tJahr ist kein Schaltjahr\n\n"); do { printf("\t---------------------------------------"); printf("\n\n\tNochmal(0/1)< >\b\b",Antw);scanf("%i",&Antw); } while(Antw!=0&&Antw!=1); printf("\n\n\n\n"); } while(Antw);
-
...programmiert ihr immer so'n umständliches zeug?
#define IstSchaltjahr(x) ((!((x)%4)&&(x)%100)||!((x)%400))
^^sieht zwar doof aus, ist aber einfach in der anwendung.