InforMATTics Geschrieben 7. September 2007 Geschrieben 7. September 2007 Hi, habe da ein Verständnisproblem. Ich will die Tage von Monaten addieren, um so rauszubekommen, wieviel Tage seit 1.1. vergangen sind. Beispiel: 15.1. = 14 Tage, usw. Nur weiß ich nicht, wie ich da vorgehe. Ok, ich muss erstmal für jeden Monat die Anzahl der Tage festlegen. Mach ich das vielleicht in Variablen, das ich z.B. alle Monate gleicher länge einer Variable zuordne? Hat da jemand Tipps oder Infos oder ähnliche Beispiele? Gruß InforMATTics Zitieren
Cadpax Geschrieben 7. September 2007 Geschrieben 7. September 2007 Ich würde die Monatstage in einem short Array eingeben. months[0] = 31 //Januar months[1] = 28 //Februar months[2] = 31 //März .... Das andere finde ich pers. etwas umständlich, da du dann mit 2 Arrays und dem Februar rumhantierst. Als erstes muss der Monat ausgewertet werden. Dann stehst du vor der Aufgabe, des simplen addierens. ;-) *Tipp* Bedenke mal wieder die falschen Eingaben. (z.B. 30.2, Schaltjahr berücksichtigen) Mit freundlichen Grüßen, Cadpax Zitieren
InforMATTics Geschrieben 7. September 2007 Autor Geschrieben 7. September 2007 Hi Cadpax, Danke für die Info. Ich bin noch ziemlich am Anfang, habe ein paar Grundlagen, wie Struktogramme erstellt werden. Wie kann ich das Array entsprechend umsetzten? Stimmt, das Schaltjahr, das sollte als Optimierung/Verbesserung im 2. Schritt dran kommen. Mir geht es erstmal zu verstehen, wie ich die Tage der Monate addiere. Dadurch, das ich weiß, außnahme Februar wegen Schaltjahr, wieviel Tage welcher Monat hat, würde ich das eben in Variablen packen. Sprich, alle Monate mit 30 Tagen in a, 31 Tage in b. Aber wie komme ich dann zu der addition? Manuell schreibe ich die Tageszahl untereinander und addiere sie dann. Gruß InforMATTics Zitieren
geloescht_Newlukai Geschrieben 8. September 2007 Geschrieben 8. September 2007 Die BEschreibung Deines Verständnisproblems ist etwas dünn. "Aber wie komme ich dann zu der Addition? Manuell ...". Tjoa. Je nach Programmiersprache (aber da sind sich , glaub ich, alle mal einig) reicht ein simples +. Das "Problem", das ich bei dem Spaß sehe: 12.3. und 9.4. sind nicht etwa 3 Tage Unterschied, sondern sondern eben (31-12) + (9-1). D. h. Du mußt die "kleinere" Datumsangabe finden und Dich von dieser zeitlich nach vorne durcharbeiten (oder eben umgekehrt). So simpel ist das Addieren also nicht. Zitieren
Cadpax Geschrieben 8. September 2007 Geschrieben 8. September 2007 Dein Problem stellt aber nicht die Aufgabe Newlukai. Ich will die Tage von Monaten addieren, um so rauszubekommen, wieviel Tage seit 1.1. vergangen sind. @InforMATTics Du meinst, wie du das Array in ein Struktogramm umsetzen kannst? Zur Addition kommst du relativ einfach. Du überprüfst, ob der Monat > 1 ist Wenn ja, kannst du in einer Schleife die Monate addieren. In einer Zählerschleife addierst du die Tage aus dem Array in eine Variable. (komisch ausgedrückst) (Sorry wenn unverständlich, letzte Nacht war lang, ich hoffe du wirst draus schlauf. , wenn nicht fragen. ;-) ) Mit freundlichen Grüßen, Cadpax Zitieren
geloescht_Newlukai Geschrieben 8. September 2007 Geschrieben 8. September 2007 Dein Problem stellt aber nicht die Aufgabe Newlukai. Hmm. Stimmt. Bei näherem Hinschauen ... Hab' wieder zu kompliziert gedacht. Zur Addition kommst du relativ einfach. Du überprüfst, ob der Monat > 1 ist Wenn ja, kannst du in einer Schleife die Monate addieren. Kleine Optimierung: Bei geschickter Variablensetzung entfällt die Überprüfung auf den Monat 1, da man sie von der Zählschleife erledigen lassen könnte. Zitieren
InforMATTics Geschrieben 9. September 2007 Autor Geschrieben 9. September 2007 Das Prinzip habe ich so verstanden: 1. Eingeben des Datums: Tag.Monat.Jahr 2. Erstmal prüfen, ob Schaltjahr. 3. Addieren der Monatsläge zusammen. 4. Ergebnis ausgeben. Nun, das Jahr kann man prüfen und dann den Februar definieren. Also: Prüfen ob Jahr : 4 gerade teilbar ist und prüfen ob Jahr nicht durch 100 ist und prüfen ob Jahr : 400 gerade teilbar ist. Als Ergebnis diesen Vergleiches weiße ich 29 dem Februar zu. Ansonsten 28. Soweit, sogut. Aber wie gehe ich jetzt mit dem addieren der Monate weiter. Wenn z.B. die Eingabe ist: 15.07.2007 Gruß InforMATTics Zitieren
geloescht_Newlukai Geschrieben 9. September 2007 Geschrieben 9. September 2007 Das Prinzip habe ich so verstanden: 1. Eingeben des Datums: Tag.Monat.Jahr 2. Erstmal prüfen, ob Schaltjahr. 3. Addieren der Monatsläge zusammen. 4. Ergebnis ausgeben. Nun, das Jahr kann man prüfen und dann den Februar definieren. Also: Prüfen ob Jahr : 4 gerade teilbar ist und prüfen ob Jahr nicht durch 100 ist und prüfen ob Jahr : 400 gerade teilbar ist. Als Ergebnis diesen Vergleiches weiße ich 29 dem Februar zu. Ansonsten 28. Soweit, sogut. Jopp, klingt gut. Aber wie gehe ich jetzt mit dem addieren der Monate weiter. Wenn z.B. die Eingabe ist: 15.07.2007 Und wo genau hakt's da? Ich meine, mich erinnern zu können, daß Du noch nie programmiert hast, kann das sein? Da vorgefertigte Lösungen nie zum Lernen beitragen, versuche ich es anders: Was würdest Du tun, müßtest Du diese Aufgabe selbst lösen? Du würdest Dir, ganz simpel, erst mal darüber klar werden, was gegeben ist: Du sollst vom 1.1. die Anzahl der Tage zum 15.07. berechnen. Zudem kennst Du die Zahl der Tage pro Monat: monat[0] = 31; monat[1] = 28 bzw. 29; monat[2] = 31; //usw ...[/PHP] Mehr will ich eigentlich nicht verraten. Probier's erst mal und melde Dich, falls Du Probleme hast. Zitieren
Cadpax Geschrieben 9. September 2007 Geschrieben 9. September 2007 Nun, das Jahr kann man prüfen und dann den Februar definieren. Also: Prüfen ob Jahr : 4 gerade teilbar ist und prüfen ob Jahr nicht durch 100 ist und prüfen ob Jahr : 400 gerade teilbar ist. Das ist so nicht ganz richtig geschrieben, obwohl vermutlich richtig gemeint: 1. Prüfen ob Jahr:4 gerade teilbar ist UND 2. Prüfen ob Jahr nicht durch 100 Teilbar ist [U]ODER[/U] 3. Prüfen ob Jahr durch 400 gerade Teilbar ist. Ansonsten wie Newlukai sagte: Was würdest du tun, müsstest du die Aufgabe selbst lösen? Zitieren
InforMATTics Geschrieben 9. September 2007 Autor Geschrieben 9. September 2007 @ Newlukai, danke für Deine Bestätigung, das hilft. Was würdest Du tun, müßtest Du diese Aufgabe selbst lösen? Tja, wenn ich das wüsste, dann würde ich nicht posten. *seufz* Richtig, bin neu in dem Bereich der Programmierung. Haben nur ein paar Grundlagen und wie ein Struktogramm aufgebaut ist. An der Umsetzung hapert es. Ich kann mir nicht vorstellen, wie das umgesetzt wird. Mich interessiert erstmal, wie ich das in ein Sturktogramm korrekt darstelle. Ok, wenn ich die Monate einen Wert zuweise, was dann? @ Cadpax Stimmt, sollte ein oder sein, habs auch beim jetzigen lesen entdeckt. (Jahr mod 4) und (Jahr mod 400) und Nicht(Jahr mod 100) = Schaltjahr. Aber wie ich das löse, habe ich keine Ahnung. Ich kann mir das noch nicht richtig vorstellen. Puh, fällt mir im Moment recht schwer, da durchzublicken. Sicher fehlen mir auch noch irgendwelche Grundlagen, nur welche? Muss mal drüber grübbeln. Gruß InfoMATTics Zitieren
Cadpax Geschrieben 9. September 2007 Geschrieben 9. September 2007 Wie würdest du es den generell, ohne Programmiertechnischen Hintergrund machen? Du kennst die Anzahl der Monate und sollst das machen. Zitieren
InforMATTics Geschrieben 9. September 2007 Autor Geschrieben 9. September 2007 Hmm. Jede Tageszahl eines Monats untereinanderschreiben, was halt gebraucht wird. Und dann addieren. Das nützt mir nur leider nichts, da ich noch nicht verstehe, wie ich das umsetzen kann. Sicher, Schleife ist mir klar, aber nicht wie. Müsste was sein, bei 04.05., wie: Anzahl = Januar + Februar + März + April + Tage (von Mai) Aber es klickt irgendwie nichts. Gibt es vielleicht ein ähnliches ausführliches Beispiel, in dem man das Prinzip erkennt? Gruß InfoMATTics Zitieren
Cadpax Geschrieben 9. September 2007 Geschrieben 9. September 2007 Hast ne Private Nachricht. Mit einer Schleife kannst du ein Array durchlaufen for(z = 0; z < AnzahlMonate; z++) z = 0; --> Variable Zähler ist null. z < AnzahlMonate; --> Solange z kleiner als unsere Monatsanzal ist z++ --> Zähle Variable eins hoch. Damit kannst du nun das Array durchlaufen, und die Tage addieren. Zitieren
flashpixx Geschrieben 9. September 2007 Geschrieben 9. September 2007 Hallo, warum wird hier immer mit Arrays o.ä. versucht das Problem zu lösen? Verstehe ich nicht so ganz. Das Datum in einen Unixtimestamp umwandeln, die gewünschten Tage in Sekunden umrechen, aufaddieren und den Timestamp wieder in ein Datum konvertieren. Die meisten Sprachen beherrschen diese Konvertierung. Gruß Phil Zitieren
Cadpax Geschrieben 9. September 2007 Geschrieben 9. September 2007 Die meisten Sprachen beherrschen diese Konvertierung. Antwort gegeben. Es soll eine generelle Lösung darstellen. Zitieren
geloescht_Newlukai Geschrieben 9. September 2007 Geschrieben 9. September 2007 Um mal ganz allgemein zu bleiben und nicht in irgendwelche Programmiersprachen zu rutschen: tageDerMonate als Feld[0..11] von Ganzzahl ---------- tageDerMonate[0] := 31 ---------- tageDerMonate[1] := 28 ---------- tageDerMonate[2] := 31 ---------- ... ---------- |solange zaehler von 0 bis 11, Schrittweite 1 | ---------- | | Ausgabe tageDerMonate[zaehler] ---------- Ist jetzt natürlich etwas abgekürzt. Aber ich hoffe, das Prinzip einer Array-Iteration wird klar. Zitieren
InforMATTics Geschrieben 9. September 2007 Autor Geschrieben 9. September 2007 @Newlukai Wenn ich Dich richtig verstanden habe, dann müsste es für die Addition heißen: solange zaehler von 0 bis 11, Schrittweite 1 anzahl = 0 anzahl = anzahl + tageDerMonate[zaehler] nach der Schleife noch anzahl = anzahl + tage (die von der Eingabe her kommen) Ausgabe: anzahl Natürlich noch das Schaltjahr berücksichtigen. Wo finde ich den ausführlichere Informationen über Schleifen mit Beispielen? Buch oder Link-Tipp? Gruß InforMATTics Zitieren
geloescht_Newlukai Geschrieben 10. September 2007 Geschrieben 10. September 2007 @Newlukai Wenn ich Dich richtig verstanden habe, dann müsste es für die Addition heißen: solange zaehler von 0 bis 11, Schrittweite 1 anzahl = 0 anzahl = anzahl + tageDerMonate[zaehler] nach der Schleife noch anzahl = anzahl + tage (die von der Eingabe her kommen) Ausgabe: anzahl Natürlich noch das Schaltjahr berücksichtigen. Schade. Fast. Du bist ganz nah dran. Zwei Denkfehler hast Du noch in Deiner Schleife. Laß Dir gesagt sein, daß die Anweisungen im Schleifenrumpf bei jedem Schleifendurchlauf durchgeführt werden. Das könnte für einen Fehler helfen. Wo finde ich den ausführlichere Informationen über Schleifen mit Beispielen? Buch oder Link-Tipp? In jedem Hinz- und Kunz-Programmieranfänger-Buch. Hier mal eine Übersicht guter IT-Bücher. Und im speziellen die Grundlagen der Programmierung aus dem Kompendium der Informationstechnik. Oder ein Auszug aus dem Buch, das mir den Weg in die objektorientierte Programmierung geebnet hat. Ich hoffe, das hilft erstmal Zitieren
Jan Jansen Geschrieben 10. September 2007 Geschrieben 10. September 2007 Such mal im Internet nach "ewiger Kalender", eventuell zusätzlich noch "Programmierung" Es gibt eine Formel mit der man die Anzahl aller Tage seit einem bestimmten Ur-Datum berechnen kann. Dein Programm würde die Anzahl der Tage für ein Eingabedatum - die Anzahl der Tage für den 01.01. des eingegeben Jahres berechnen. Das ist eine Standardaufgabe in vielen Programmierkursen und der Weg ist schöner/systematischer als sich über xx Schleifen und Abfragen zu einer Lösung durchzuhangeln. Zitieren
Klotzkopp Geschrieben 15. September 2007 Geschrieben 15. September 2007 Da der Thread sich ab hier um eine konkrete Programmiersprache dreht, habe ich den Rest abgetrennt: http://forum.fachinformatiker.de/c-c/108934-tage-kalkulieren.html Zitieren
Empfohlene Beiträge
Dein Kommentar
Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.