if Logik
-
Hallo!
Bin leider mit meinen logischen Fähigkeiten am Ende.
Ich habe Daten, den Tag, den Monat und das Jahr mehrerer Aufzeichnungen
und brauche eine if-Bedingung die einen Zeitraum begrenzt.Ich habe zum Beispiel folgende Datenliste
08.02.03
04.03.03
10.03.03
13.03.03
18.03.03
12.04.03
15.04.03und möchte nun nur die Einträge im Zeitraum 12.03.03 - 03.04.03 haben
also 13.03.03 und 18.03.03eingefallen ist mir nur
if(Tag >= TagStart && Tag <= TagEnde
&& Monat >= MonatStart && Monat <= MonatEnde
&& Jahr >= JahrStart && Jahr <= JahrEnde)was aber zum Scheitern verurteilt ist, da wenn man einen größeren Zeitraum meinetwegen über 3 Monate abdecken will, der Tag des 2 Monats sehr wohl kleiner sein darf als TagStart, gleichermassen verhält sich dies mit Monaten wenn man einen Zeitraum über mehrere Jahre darstellen will.
-
Von möglichen Tippfehlern abgesehen geht das so:
typedef struct _DATUM { int jahr; int monat; int tag; } DATUM; //VglDatum() : Vergleicht zwei Datumsangaben //int : Negativ ==> Datum2 kommt vor Datum1; // Positiv ==> Datum2 kommt nach Datum1; // 0 ==> Datum1 und Datum2 stimmen ueberein //d1 : Datum1 //d2 : Datum2 int VglDatum(DATUM* d1, DATUM* d2) { if(d1->jahr < d2->jahr) return 1; if(d1->jahr > d2->jahr) return -1; if(d1->monat < d2->monat) return 1; if(d1->monat > d2->monat) return -1; if(d1->tag < d2->tag) return 1; if(d1->tag > d2->tag) return -1; return 0; } //Hauptprogramm static DATUM start = { 2003, 3, 12 }; static DATUM ende = { 2003, 4, 3 }; DATUM* d = datumArray; for(i = 0; i < anzahl; ++i, ++d) { if((VglDatum(&start, d) >= 0) && (VglDatum(&ende, d) <= 0)) DatumUebernehmen(d); else DatumIgnorieren(d); }
-
Vielen Dank für deine Hilfe. Dein Beitrag hat wesentlich zur Lösung des
Problems beigetragen auch wenn ichs letztendlich etwas anders gemacht habe.
Jetzt funktioniert es. Nochmals Danke.