daywandler Geschrieben 4. September 2008 Geschrieben 4. September 2008 Hallo wir haben heute in der Schule eine Aufgabe für ein Struktogramm bekommen. Es soll ein Kalender dargestellt werden. Jedoch stoße ich da auf einige Probleme. Es werden lediglich das Jahr eingegeben und der erste Wochentag im Jahr (z.B. 2008 und Dienstag). Aufgebaut soll das ganze so sein: Januar 1 2 3 4 5 6 7 .... 31 Di Mi Do Fr Sa So Mo ... Februar 1 2 3 4 5 ... 29 Fr Sa So ... usw. Anstatt die Monatsnamen können wir auch einfach 1 bis 12 ausgeben. Eine berechnung, ob sich das eingegebene Jahr um ein Schaltjahr handelt habe ich schon, jedoch weiß ich nicht wie ich die Monatstage ausrechnen bzw. ausgeben soll. Wär toll, wenn mir jemand einen Ansatz geben könnte. Danke schonmal. Zitieren
flashpixx Geschrieben 4. September 2008 Geschrieben 4. September 2008 Hallo, naja die Wochentage sind doch klar, wenn Du den ersten Tag des Jahres kennst. Die Wochentage wiederholen sich alle 7 Tage (Modulo als Stichwort). Je nach Möglichkeit gibt es aber dafür auch fertige Funktionen, mit denen man aus einem Datum den Wochentag bestimmen kann. Ist die Frage wie weit Du das aufschlüsseln musst Phil Zitieren
daywandler Geschrieben 4. September 2008 Autor Geschrieben 4. September 2008 Naja, wir haben bis jetzt noch keine weiteren Funktionen ausser mod. Wie berechne ich die Anzahl der Tage in einem Monat? Damit ich kein Trockentest machen muss, setze ich das ganze mit PHP um und schaue ob es funktioniert. Ein weiteres Problem ist, dass ich nicht weiß, wie ich die Wochentage hochzählen soll. Zitieren
MartinSt Geschrieben 4. September 2008 Geschrieben 4. September 2008 Hallo definiere erstmal was für ein Kalender. Maya-Kalender ? hebräischer ? oder evtl. der Deutsche ? Was soll dann deine Kalenderdarstellung können ? Zu Wochentagen hat die Flashpixx ja Hinweise gegeben, auch Google installieren und benutzen wäre hilfreich. Neben schon erwähnten Wochentage ist dann halt noch Schaltjahr und Feiertagsberechnung ein Thema, aber auch da kommst du mit den Grundrechenarten, Modulo und Runden durch. Gruß Martin Zitieren
daywandler Geschrieben 4. September 2008 Autor Geschrieben 4. September 2008 Danke für deine Antwort Die Darstellung des Kalenders habe ich in meinem ersten Post schon angegeben. Hier nochmal: Januar 1 2 3 4 5 ... 31 Di Mi do Fr Sa So ... Februar 1 2 3 4 5 ... 29 Fr Sa So Mo Di ... März usw. So will das unsere Lehrerin haben. Mit google habe ich keine Ansatz gefunden, zumindest keinen für mich verwertbaren. Feiertage sind vollkommen egal und für das Schaltjahr habe ich schon eine Berechnung gefunden. Meine derzeitigen Probleme liegen bei der Berechnung der Monatstage. Also die Schleife soll im Januar bis 31 zählen und ausgeben, im Februar 28 bzw. 29, März wieder 31 usw. Wie berechne ich das? Wie gebe ich eine Bedingung an, die mal bis 31, mal bis 28 und mal bis 30 zählt? Und dann noch das Problem mit den Wochentagen (Mo, Di, Mi usw.) damit komme ich erst recht nicht klar. Zitieren
flashpixx Geschrieben 4. September 2008 Geschrieben 4. September 2008 Und dann noch das Problem mit den Wochentagen (Mo, Di, Mi usw.) damit komme ich erst recht nicht klar. Noch einmal den Hinweis: Du kennst den 1.1 des Jahres und Du weißt dass sich alle 7 Tage die Tage wiederholen. Überlege Dir was Modul (in Deinem fall mod 7) macht und dann überlege Dir einmal was Du machen musst wenn Du z.b. den Tag das 3.9 des Jahres bestimmen musst Die Rechnung ist banal Phil Zitieren
daywandler Geschrieben 4. September 2008 Autor Geschrieben 4. September 2008 Na mod 7 prüft ob der Wert durch 7 teilbar ist. Aber wie soll ich das umsetzen? Ich zähle solange runter bis der Wert (31?) durch 7 teilbar ist. Dann bin ich bei 28. Dann gebe ich alles bis 28 aus. Und was ist mit dem Rest bis 30 / 31? Ich blick da irgendwie nicht durch Zitieren
flashpixx Geschrieben 4. September 2008 Geschrieben 4. September 2008 Na mod 7 prüft ob der Wert durch 7 teilbar ist. Nein, bitte einmal lesen: Division mit Rest ? Wikipedia Korrekt liefert Dir mod 7 die Restklasse zu 7. Ich zähle solange runter bis der Wert (31?) durch 7 teilbar ist. Dann bin ich bei 28. Dann gebe ich alles bis 28 aus. Und was ist mit dem Rest bis 30 / 31? Nein, Du kennst von jedem Monat die Anzahl der Tage, Du musst die Differenz zwischen dem Beginn des Jahres und dem Zieldatum bestimmen und über die Restklasse den Wochentag Phil Zitieren
daywandler Geschrieben 4. September 2008 Autor Geschrieben 4. September 2008 Okay, langsam leuchtet mir das ein ... Ich will alle Tage vom 1.1. bis zum 31.12. ausgeben und zwar in der gewünschen form wie ich oben geschrieben habe. Ich weiß jetzt wie ich den Wochentag berechne, jedoch nicht, wieich die Monatstage ausgebe: Wie kann ich also folgendes ausgeben: 1 bis 31 1 bis 29 1 bis 31 1 bis 30 Also kurz gesagt, wie krieg ich raus, wieviel Tage ein Monat hat? Geht das mit der Wochentagsberechnung? Wenn ja, wie? Zitieren
flashpixx Geschrieben 4. September 2008 Geschrieben 4. September 2008 Also kurz gesagt, wie krieg ich raus, wieviel Tage ein Monat hat? Bitte diese Frage noch einmal lesen, das meinst Du doch nicht ernst? :old Phil Zitieren
daywandler Geschrieben 4. September 2008 Autor Geschrieben 4. September 2008 Mir ist schon klar, dass der Januar 31, der Februar 28 bzw. 29 Tage hat usw .... Aber ich meine, muss ich das vorher festlegen in z.b. januar := 31 februar := 28 märz := 31 usw? oder gibt es eine lösung wie man die Tage eines Monats berechnen kann? Wenn ich die vorher festlege, dann sieht es so aus: $jahr = $_GET["jahr"]; $jan = 31; if ($jahr%100!=0) { if ($jahr%4=0) { if ($jahr%400=0) { $feb = 29; } else { $feb = 28; } } } $mar = 31; $apr = 30; $mai = 31; $jun = 30; $jul = 31; $aug = 31; $sep = 30; $okt = 31; $nov = 30; $dez = 31; for($monat=1; $monat <= 12; $monat++) { if ($monat = 1) {$monatstag = $jan;} if ($monat = 2) {$monatstag = $feb;} if ($monat = 3) {$monatstag = $mar;} if ($monat = 4) {$monatstag = $apr;} if ($monat = 5) {$monatstag = $mai;} if ($monat = 6) {$monatstag = $jun;} if ($monat = 7) {$monatstag = $jul;} if ($monat = 8) {$monatstag = $aug;} if ($monat = 9) {$monatstag = $sep;} if ($monat = 10) {$monatstag = $okt;} if ($monat = 11) {$monatstag = $nov;} if ($monat = 12) {$monatstag = $dez;} echo $monat."<br>"; for($i = 1; $i <= $monatstag; $i++) { echo $i; } echo "<br>"; } [/PHP] Da gibt es doch aber sicherlich einen effizienteren Weg oder? Natürlich erstmal ohne die Wochentagsberechnung. Zitieren
flashpixx Geschrieben 4. September 2008 Geschrieben 4. September 2008 Wie wäre es wenn Du ein Array verwendest? Phil Zitieren
daywandler Geschrieben 4. September 2008 Autor Geschrieben 4. September 2008 Für die Umsetzung in PHP eine gute Idee, doch bei der Umsetzung ins Struktogramm? Da haben wir derartiges noch nicht kennen gelernt und kann/darf daher nicht verwendet werden. Zitieren
flashpixx Geschrieben 4. September 2008 Geschrieben 4. September 2008 ein Array ist nichts anderes wie ein Funktion, bei dir mit 2 Parametern unsigned int Tagesanzahl(const unsigned int& lnMonat, const bool& llSchlatjahr) { switch (lnMonat % 12) { case 0 : return 31; case 1 : return (llSchaltjahr) ? 29 : 28; case 2 : return 31; case 3 : return 30; case 4 : return 31; case 5 : return 30; case 6 : return 31; case 7 : return 31; case 8 : return 30; case 9 : return 31; case 10 : return 30; case 11 : return 31; } return 0; } HTH Phil Zitieren
daywandler Geschrieben 4. September 2008 Autor Geschrieben 4. September 2008 Mh, wie gesagt, was wir im Unterricht noch nicht behandelt haben, kann/darf ich noch nicht verwenden. Ich weiß das es für Strucktogramme eine Art array gibt. Nur wie gesagt, ich kann/darf nicht. Ich gebs für heute auf und schreib mir die Lösung auf und werd sie hier posten. Zitieren
flashpixx Geschrieben 4. September 2008 Geschrieben 4. September 2008 Mh, wie gesagt, was wir im Unterricht noch nicht behandelt haben, kann/darf ich noch nicht verwenden. Ich weiß das es für Strucktogramme eine Art array gibt. Nur wie gesagt, ich kann/darf nicht. Wie Du siehst habe ich kein Array verwendet, sondern eine Funktion. Diese Funktion kannst Du entsprechend in einem Struktogramm umsetzen. Man kann auch die Funktion aus einem Struktogramm wiederum verwenden. Phil 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.