Prorgamm zur Schaltjahrberechnung

Neue Frage »

Auf diesen Beitrag antworten »
Fulli Prorgamm zur Schaltjahrberechnung

Meine Frage:
Hallo,
haben eine Hausaufgabe in der Schule bekommen, wo wir ein Struktogramm gegeben haben und daraus ein Programm zur Schaltjahrberechnung schreiben müssen. Es soll ausgegeben werden ob das Jahr ein Schaltjahr ist oder nicht. Das Struktogramm habt ihr im Anhang.
Hab jetzt natürlich auch schon angefangen bischen zu probieren, komm allerdings jetzt nicht weiter:

#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
#pragma hdrstop
#pragma argsused
int main(void)
{
//lokale Variable
unsigned int jahr;

//Beschreibung

printf ("Programm zur Ausgabe ob ein Jahr ein Schaltjahr ist oder nicht");
//Jahr einlesen

printf ("Jahr eingeben: ");
scanf ("%d", &jahr);

//Berechnung
if (jahr >= 1585 && jahr % 4 == 0 && jahr % 100 == 0 && jahr % 400 != 0)
printf ("Das Jahr ist ein Schaltjahr");
else
printf ("Das Jahr ist kein Schaltjahr");

//Systempausieren

system("PAUSE");

return 0;
}

Das ist mein Quelltext bis jetzt und wenn ich diesen Ausführe und 1840 eingebe kommt allerdings raus dass das Jahr kein Schaltjahr ist obwohl es eines ist..

Hoffe auf Hilfe!

Meine Ideen:
siehe oben
 
Auf diesen Beitrag antworten »
Fulli

achja und was genau für eine Bibliothek muss ich hinzufügen damit er gotoxy versteht?
Auf diesen Beitrag antworten »
Karlito

Hallo,

deine Bedingung ist falsch! Sie wird nur wahr, wenn dein Jahr durch 100 und nicht durch 400 teilbar ist (neben deinen anderen Bedingungen).

Goto sollte auch ohne eine weitere Bibliothek funktionieren. Jedoch mit Leerzeichen zwischen goto und der Sprungmarke:
code:
1:
2:
3:
4:
5:
6:
goto Sprungmarke;
//Viel sinnvoller Quelltext
Sprungmarke:
//Quelltext hinter der Sprungmarke


VG,

Karlito
Auf diesen Beitrag antworten »
tops

Sprungmarken sind aus der guten alten Basic Zeit und zeugen von schlechtem Stil, gewöhn dir das also erst gar nicht an, es gibt genügend Kontrollstrukturen mit denen jegliche Programmierung auch ohne Sprünge auskommt wo du hier nichtmal Schleifen benötigst wo es die Konstrukte break und continue gibt.

Die Definition von Schaltjahren wie sie hier in Europa verstanden wir ist ganz einfach,

Jahre die durch 4 und 100 teilbar sind aber nicht durch 400, das in einen booleschen Ausdruck mittels Modulo Operator gefasst und das wars.
 
Auf diesen Beitrag antworten »
tops

Das kann man wie folgt schreiben, da jede zahl die durch 100 teilbar ist auch durch 4 teilbar ist:

if( (Jahr%4==0 && %400!=0) || (jahr%100=0 && jahr%400!=0)

durch Minimierung Booleschers Ausdrücke:

if(Jahr%400!=0 &&(Jahr%4==0 || Jahr%100=0))

Nicht alles und verknüpfen da liegt dein Fehler, denn 1840 ist durch 4 teilbar, aber nicht durch 100 und daher erfolgt bei dir die Ausgabe kein Schaltjahr.


Entweder ist das Jahr durch
 
Neue Frage »
Antworten »


Verwandte Themen

Die Beliebtesten »
Die Größten »
Die Neuesten »