Zum Inhalt springen

Empfohlene Beiträge

Geschrieben

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

Geschrieben

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

Geschrieben

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

Geschrieben

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.

Geschrieben

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

Geschrieben
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.

Geschrieben

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

Geschrieben
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.

Geschrieben
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?

Geschrieben

@ 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

Geschrieben

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

Geschrieben

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.

Geschrieben

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

Geschrieben

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.

Geschrieben

@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

Geschrieben
@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 ;)

Geschrieben

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.

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.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...