GELÖST Sprache: C, Berechnung der wievielte Tag des Jahres es ist.

Diskutiere Sprache: C, Berechnung der wievielte Tag des Jahres es ist. im Programmierung Forum im Bereich Software Forum; Hallo alle miteinander. Ich hab mal wieder ein kleines Programmierproblem: Ich hab ein kleines Programm entwickelt, in dem man eine...
M

m.molitor

Threadstarter
Mitglied seit
17.04.2007
Beiträge
189
Alter
32
Standort
Finnentrop
Hallo alle miteinander.

Ich hab mal wieder ein kleines Programmierproblem:

Ich hab ein kleines Programm entwickelt, in dem man eine Datumseingabe macht. Diese Eingabe wird auf Gültigkeit geprüft (sprich, ist der Tag möglich, Schaltjahre, 12monate ect.)

Nun möchte ich zusätzlich, dass das Programm ausgibt der wievielte Tag im Jahr das eingegebene Datum ist.

Der Tag alleine ist eine Variable, so dass es kein Problem ist zu sagen der wievielte Tag im Monat es ist. Jedoch wird der Monat nur auf die Länge überprüft. Es ist also nicht einzeln für jeden Monat hinterlegt wieviele Tage er hat sondern die Monatslänge wird nur für den eingegebenen Monat gesetzt.

Wäre hilfreich für Denkanstöße.
 
S

Secula

Mitglied seit
02.10.2006
Beiträge
583
Hallo,

meinst Du sowas?

short getAnzahlTageImMonat(const UINT uMonat, const UINT uJahr)
{
// ungült,Jan,Feb,Mrz,Apr,Mai,Jun,Jul,Aug,Sep,Okt,Nov,Dez
int arrTageImMonat[13] = { 0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 };

if (uMonat == 2)
{
// Februar: Schaltjahr unterscheiden
if (istEinSchaltjahr(uJahr))
return 29;
else
return 28;
}

if ((uMonat >= 1) && (uMonat <= 12))
return arrTageImMonat[uMonat];
else
{
_ASSERT(0); // ungültiger Monat !
return 0;
}
}
 
M

ModellbahnerTT

Mitglied seit
20.04.2005
Beiträge
3.778
Alter
39
Hier steht die Lösung in der ersten Hälfte des Dokuments.
 
M

m.molitor

Threadstarter
Mitglied seit
17.04.2007
Beiträge
189
Alter
32
Standort
Finnentrop
Hallo Secula

Diese Zeile verstehe ich ehrlich gesagt noch nicht mit meinen begrenzten Kenntnissen:

int arrTageImMonat[13] = { 0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 };


Kann C so automatisch dem Monatswert (der User gibt zb. 6 für Juni ein) ermitteln und dass Programm ordnet diesem dann automatisch den 6.ten Wert zu?
 
A

AlienJoker

Gast
Diese zeiel baut ein Array von integern auf (also eine variable, die mehrere ints enthalten kann, hier sinds 13) und darin hat er die Montaslängen abgelegt.

Die 0 am Anfang hat er drinstehen, weil die einzelnen Werte dann mit
arrTageImMonat[0] und arrTageImMonat[1] usw aufgerufen werden und so arrTageImMonat[1] wirklich dem januar antspricht.
 
M

m.molitor

Threadstarter
Mitglied seit
17.04.2007
Beiträge
189
Alter
32
Standort
Finnentrop
Mhm. SO wirklich lösen tut dies mein Problem nicht. Es ist zwar etwas eleganter gelöst als bei mir mit der Monatszuordnung, jedoch möchte ich halt berechnen der wievielte Tag des Jahres dem eingegebenem Datum entspricht.

Folgendes Szenario:
Der User gibt für die Variable "Tag" den Wert 29 ein.
Für die Variable "Monat" gibt er 2 ein.
Für die Variable "Jahr" gibt er 2000 ein.

Mein Programm prüft dieses Datum nun auf Richtigkeit. Läuft soweit allles und es wird korrekt eingeordnet dass der Monat Februar (2) im Jahre 2000, 29 Tage hatte.

Nun soll das Programm jedoch noch ausgeben, dass der 29.02.2000 der 60te Tag des Jahres ist (sprich Variable Tag + Monatslänge Januar).

Ich bin dabei in Richtung for-Schleife am überlegen. Mir fehlt nur irgendwie der Denkanstoß.
 
A

AlienJoker

Gast
also, nehmen wir statt februar den 29. Juli an (oder besser den 29.07)
also musst du aus dem Array alle werte mit index < Monatszahl(7) aufsummieren und dann die 29(tag) aufaddieren
ist zwar vbcode, sollte aber leicht zu transferieren sein:

dim tageszahl as integer, i as integer
tageszahl=i=0

for i= 1 to monatszahl-1
____tageszahl+=arrTageImMonat
next i
tageszahl+=aktuellesTagesdatum

fertig
 
M

ModellbahnerTT

Mitglied seit
20.04.2005
Beiträge
3.778
Alter
39
Eine andere einfache Lösung wäre das Jahr aus der Eingabe zu ermitteln und davon dann die sekunde seit Start der Zeitrechnung zu ermitteln und dann das des Tages. Dann einfach die Differenz in sek errechnet. Diese dann umrechnen in Tage und schon weist du welcher Tage des Jahres es ist.
 
M

m.molitor

Threadstarter
Mitglied seit
17.04.2007
Beiträge
189
Alter
32
Standort
Finnentrop
@AlienJoker

In C also quasi so (bitte verbessern):

int TagImJahr=0;

for (i = Monat; i = 0; i--)
{
TagImJahr = TagImJahr + TageImMonat;
}

TagImJahr = TagImJahr + Tag;




@ModellbahnerTT:

Danke für den Vorschlag aber den Lösungsvorschläg find ich verdammt kompliziert. Die Funktionen von time.h kenn ich kein Stück und damit werd ich momentan auch noch nicht klarkommen.
 
S

Secula

Mitglied seit
02.10.2006
Beiträge
583
Der wievielte Tag des Jahres ist ein bestimmtes Datum :

short getTagDesJahres(const UINT uTag, const UINT uMonat, const UINT uJahr)
{
// Der wievielte Tag des Jahres ist dieser Tag
if ((uMonat == 0) || (uMonat > 12))
{
_ASSERT(0);
return -1;
}

UINT uLokalTag = uTag;
UINT uLokalMonat = uMonat;

while (uLokalMonat > 1)
{
uLokalMonat--;
uLokalTag += getAnzahlTageImMonat(uLokalMonat, uJahr);
}

return uLokalTag;
}
 
Thema:

Sprache: C, Berechnung der wievielte Tag des Jahres es ist.

Sucheingaben

codesys Tag des Jahres ermitteln

,

der wievielte tag des jahres ist ein bestimmtes datum

Sprache: C, Berechnung der wievielte Tag des Jahres es ist. - Ähnliche Themen

  • Sprache nach English umstellen

    Sprache nach English umstellen: Hi. Ich wollte kurz fragen, ob jemand weiß wie man die Sprache für Windows ändert. Ich habe eine Methode auf YouTube gefunden, doch diese geht...
  • Wie bekomme ich in Einstellungen Sprache: Deutsch als erste Sprache?

    Wie bekomme ich in Einstellungen Sprache: Deutsch als erste Sprache?: Wenn ich in Einstellungen und dort unter Sprache mich einwähle, bekomme ich als 1. Sprache "Afrikans" und als 2. Sprache "Deutsch" angezeigt. Die...
  • Textvorschläge in mehreren Sprachen gleichzeitig für Windows 10 Tastatur aktivieren - So geht es!

    Textvorschläge in mehreren Sprachen gleichzeitig für Windows 10 Tastatur aktivieren - So geht es!: Nicht immer arbeitet man nur mit einer Sprache wenn man seine Texte verfasst, sei es weil man es aus beruflichen Gründen benötigt oder weil man...
  • Wie kriege ich dauerhaft Englisch als System-Sprache?

    Wie kriege ich dauerhaft Englisch als System-Sprache?: Ich habe eine deutsche Windows-Version (1809). Man dürfte auch umschalten können (Deutsch/Englisch).
  • Falsche Sprache bei Mails von Microsoft

    Falsche Sprache bei Mails von Microsoft: Hallo, ich habe das gleiche Problem wie andere Mitglieder, dass wenn ich eine Mail von Microsoft erhalte zum Beispiel wegen Passwortänderung, ist...
  • Ähnliche Themen

    Oben