[C] Berechnen, wieviele Tage in einem best. Jahr verstrichen sind

beten

Lt. Junior Grade
Registriert
Juni 2003
Beiträge
286
moin Community

Ich hab ein kleines Problem, und zwar sollen wir in der Schule ein Programm schreiben.
Der Benutzer soll dort ein Datum eingeben und das Prog. soll berechnen, wieviel Tage in dem angegebenen Jahr schon verstrichen sind.

z.B.: Eingabe: 17.04.2002
Ausgabe: 107 Tage


Jetzt kommt aber noch hinzu, dass es beachten soll ob das Jahr ein Schaltjahr ist oder nicht.

* Glatt durch 4 teilbare Jahre sind Schaltjahre.
* Glatt durch 100 teilbare Jahre sind jedoch keine Schaltjahre.
* Glatt durch 400 teilbare Jahre sind aber wieder Schaltjahre.


Eine weitere Beschränkung ist, dass wir das alles nur mit IF-Abfragen machen sollen.
Da das aber ziemlich viel ist wollte ich fragen ob es irgend eine Formel oder sonstwas gibt, womit man das einfacher hinkriegt.

mfg beten
 
Kurze Frage: Studierst Du NWI an der Uni Bielefeld? Ich weiß, du schreibst "Schule" aber das ist GENAU die Aufgabe die wir gerade haben in "Technische Informatik II".
 
@ MarcDK
Er ist 1987 geboren, hm ich fänd es komisch wenn er schon studiert! :)

Zu dem Problem ich wüsste jetzt nicht genau wie man das Programmieren kann aber ich hab ne idee und ich dachte mir eben die kann ich ja einfach mal posten. :D

Also du müsstest 3 eingaben machen
Tag
Monat
Jahr

Dann eine abfrage ob, das Jahr durch 4 teilbar ist! (Ich hatte mal QBasic gelernt und da gab es einen schönen befehl: MOD, dieser Befehl war dafür verandwortlich um festzustellen ob es einen Rest bei einer Division gibt) Gibt es sowas auch für c/c++?

Fals er 4 ohne rest teilen kann müsstest du halt noch die 2 anderen einschränkungen abfragen! :)

Also ich habe jetzt festgestellt das es auf diesen "MOD" befehl ankommt. Fänd ich sehr interessant ob es sowas für C/C++ gibt oder ob es da noch andere Möglichkeiten gibt?!

Ich hoffe ich konnte dir trotz keinem Code, wenigstens ein bisschen helfen! :)


edit: PS: Was mein Lehrer mir immer Predigt --> Struktogramm! :D Hast du schon mal eins davon gemacht, hilft manchmal wunder! :)
 
Zuletzt bearbeitet:
@ Harrold
Sowas finde ich ja total Langweilig. :D
Ist echt cool wenn du weißt wie es geht und auch gut geschrieben, aber darf ich dich bitten nicht den ganzen Code hier zu posten? Mich würde interessieren wie du meine "Frage" löst?! Aber den rest will ich vieleicht selber noch machen! Sonst macht es ja keinen Spaß. :D

Harrold schrieb:
sofern du weißt wie das geht.
eben! das wüsste ich gerne! Muss auch nicht unbedingt Code sein! ;)
 
Zuletzt bearbeitet:
Tob schrieb:
Also ich habe jetzt festgestellt das es auf diesen "MOD" befehl ankommt. Fänd ich sehr interessant ob es sowas für C/C++ gibt oder ob es da noch andere Möglichkeiten gibt?!

Es gibt sowas, der Befehl lautet %

Deine Einstellung ist sehr gut, so lernt am besten :daumen:
 
ja klar:

die modulo operation gibt den Rest bei ganzahliger Division an.

Ist ganz einfach wie man es in der Grundschule lernt, teilt man eine Zahl x durch eine Zahl y so erhält man: x=n*y+r , r ist das was mod zurückgibt.

beispiel y=3

0 mod 3=0 n=0
1 mod 3=1 n=0
2 mod 3=2 n=0
3 mod 3=0 n=1
4 mod 3=1 n=1
5 mod 3=2 n=1
6 mod 3=0 n=1
7 mod 3=1 n=2
....

jetzt klarer? ziehe z.B. von einer Zahl solange 3 ab bis sie negativ wird, sobals es soweit ist hast du den Rest. Man muß sich am Anfang ein bißchen reindenken
 
Zuletzt bearbeitet:
1. Ich mache ne Ausbildung zum Informationstechnische Assistenten am BK-Olsberg :)

2. Das mit den Schaltjahr herausfinden hab ich soweit geschafft. Aber gibt es irgendeine Möglichkeit, auf einfachste Weise auszurechnen wieviel Tage schon im Jahr vergangen sind?
Da müsste ich ja für jeden Monat ne Abfrage machen, oder nicht?


Ja, vom Struktogramm hab ich auch schon gehört :D
Also bei der Abfrage wegen des Schaltjahres hab ich eins gemacht.

-----------------------------

Modulo(%):

Gibt an, ab sich eine Zahl restlos durch eine Zweite teilen lässt.
Ist das der Fall kommt als Ergebnis 0 raus
z.B.: 2000 % 4 = 0

wenn noch etwas übrig bleibt dann kommt dieser Wert heraus
z.B.: 2001 % 4 = 1
2007 % 4 = 3


mfg beten
 
Zuletzt bearbeitet:
du könntest in einem konstanten array die vergangenen Tag speichern

a[1]=31
a[2]=49
...

dazu addierst du den Tag, wenn das Jahr ein Schaltjaht ist und das Datum ab dem 29 februar ist kannst du um eins inkrementieren

Eingabe:

t m j

Ausgabe

t+a[m] + (1?)
 
Hm warum day = day? Das verstehe ich noch nicht! Und warum month = month *30 -30? Warum ziehst du wieder 30 ab? Und manche monate habe doch mehr als 30 Tage! :confused_alt:

Also einabe und so hab ich auch und ich habe jetzt einfach mal wie Bacchisio gesagt hat für jeden Monat ein Array genommen!? Ich hoffe ich habe das so richtig verstanden. Das würde mir auch einleuchten!

Nur bei der if abfrage hängts gerade. Da bin ich mir noch nicht sicher.

Wie ist das denn wenn das jahr durch 4 glatt teilbar ist, durch 100 NICHT, und durch 400 NICHT? Ist das dann ein schaltjahr oder nicht? Denn das jahr erfüllt ja die beiden ersten bedingungen?!

Edit: Man macht das spaß mit euch! :D
 
Zuletzt bearbeitet:
das jahr muss entweder durch 4 und nicht durch 100 teilbar sein, oder durch 400, dein Beispiel ist also schaltjahr, z.B. 2004

Es ist ein array für 12 Monaten, du nimmst für jeden Monat a[m] eine Zwischensumme
 
day = day hab ich für mich zur Orientierung genommen :D

month = month * 30 - 30 hab ich weil:
Ein Monat hat 30 Tage (wirtschaftlich gesehen)
Also rechnet er "Monat * 30"
Damit ich dann aber auf die "Tage" zurückkommen kann, muss ich 30 Tage abziehen, weil immer ganze Monate gerechnet werden.

Also bekomme ich beim 17.04.2002 genau 107 Tage raus.
 
aha jetzt habe ich verstanden warum du das so machst Harrold!

Ich versuche es ein bisschen anders und bekomme es nicht hin! :( Ich hab Probleme mit dem Array, scheinbar habe ich es so ganz doch noch net kapiert! :)

Ich geh jetzt erstmal zu einem kumpel ich hoffe ich kann nachher noch mal rein oder ich schneide das morgen noch mal an! :D Viel spaß euch noch!
 
Harrold schrieb:
Ein Monat hat 30 Tage (wirtschaftlich gesehen)
Also rechnet er "Monat * 30"
Damit ich dann aber auf die "Tage" zurückkommen kann, muss ich 30 Tage abziehen, weil immer ganze Monate gerechnet werden.

Also bekomme ich beim 17.04.2002 genau 107 Tage raus.


Das stimmt schon, aber mein Lehrer will das genau wissen.
Beim 23.11.2006 (327 Tage) z.B. fehlen nach deiner Rechnung 5 Tage (323 Tage).

mfg beten
 
warum machst du es nicht mit dem array, sind nur 12 Werte

int tvm[12] = {0,31,49,80,...};

jetzt kannst du mit tvm[monat-1] zugreifen, und es ist genau
 
Zuletzt bearbeitet:
Zurück
Oben