Zum Inhalt springen

Empfohlene Beiträge

Geschrieben

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.

Geschrieben

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

Geschrieben

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.

Geschrieben

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

Geschrieben

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.

Geschrieben

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

Geschrieben

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 :(

Geschrieben
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

Geschrieben

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?

Geschrieben

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.

Geschrieben

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

Geschrieben

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.

Geschrieben
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

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