Ich soll ein C-Programm schreiben, wie viele Tage ein Monat hat, Wie siehts für Februar aus: if (jahr%400==0 || jahr%4==0 && jahr%400!=0) ... 29 else... 28?

... komplette Frage anzeigen

4 Antworten

Fast. Ein Jahr ist ein Schaltjahr, wenn es durch 400 Teilbar ist ODER wenn es durch 4, aber nicht durch 100 teilbar. Das ist die minimale Bedingung und abgesehen von einer Zahl hast du sie schon korrekt notiert.

Randnotiz: Bitte quetsche nicht die ganze Frage in den Titel. Das macht es schwerer zu lesen.

Antwort bewerten Vielen Dank für Deine Bewertung

Zum Beispiel So:

void Schaltjahr(int jhr, int (*sp))
{
/*
* Wenn Jahreszahl ohne Rest durch Vier teilbar ist,
* ist die Jahreszahl ein Schaltjahr.
* Ausnahme1:
* Wenn die Jahreszahl durch 100 teilbar ist, dann
* liegt kein Schaltjahr vor(sp=0).
* Ausnahme von der Ausnahme1:
* Wenn die Jahreszahl durch 400 teilbar ist, liegt doch
* ein Schaltjahr vor(sp=1).
* Beispiel: Das Jahr 1900 ist zwar durch 100, aber nicht durch
* 400 teilbar, also kein Schaltjahr)
*/
int dsp, s1, s2, s3;
dsp = 0;
s1 = jhr % 4;
s2 = jhr % 400;
s3 = jhr % 100;
if ((s1 == 0) || (s2 == 0))
{
dsp = 1;
monlen[1] = 29;
}
if ((s2 != 0) && (s3 == 0))
{
dsp = 0;
monlen[1] = 28;
}

(*sp) = dsp;
}

Antwort bewerten Vielen Dank für Deine Bewertung

Vielen Dank

...

case 2:
   printf("Geben Sie das Jahr ein: ");
   scanf("%i", &jahr);
   if  (  jahr%400 == 0  ||  jahr%4 == 0  &&  jahr%100 = 0)  {
      printf("...hat 29 Tage");
   }
   else {
      printf("...hat 28 Tage");
   }
break;

...

Funktioniert so einwandfrei.

Antwort bewerten Vielen Dank für Deine Bewertung
Kommentar von ceevee
17.10.2016, 19:24

Das ist aber falsch. Zum einen müsste die letzte Bedingung "jahr % 100 == 0" lauten (zwei mal "="), zum anderen würde diese Abfrage behaupten, dass das Jahr 2100 ein Schaltjahr ist. Und das ist verkehrt.

0

Nee, das sieht nicht gut aus. 

1900 war meine ich kein Schaltjahr, aber das rechts vom Oder würde true ergeben. Die Zahl ist durch 4 teilbar und nicht durch 400.

Antwort bewerten Vielen Dank für Deine Bewertung
Kommentar von Suboptimierer
17.10.2016, 18:24

...&&jahr%100!=0 müsste es glaube ich heißen.

Ich würde außerdem die Klammern setzen, damit du dich nicht immer wieder neu erinnern musst, wie die Rangfolge ist.

1

Was möchtest Du wissen?