C++

Der Sinn von Hausaufgaben ist es entweder, das gelernte zu wiederholen oder sich in ein Thema einzuarbeiten. Bei dem Versuch, jemandem das Programmieren beizubringen häufig letzteres... Und manche Menschen tun sich damit leichter oder schwerer als andere. So oder so ist das Recherchieren doch immer Teil des Entwickelns und gerade wenn man noch ganz ohne Erfahrung ist, gehört nachzufragen eigentlich immer dazu. Das planen die Profs/Lehrer ja auch mit ein.

Zudem hat pertrr nicht nach einer Lösung gefragt, sondern nach einer Idee, wie es zu lösen wäre. Die hat er eben schon bekommen. Der Titel des Threads ist tatsächlich daneben, da genau null aussagekräftig... Aber daran rummeckern kann man auch noch nachdem die eigentliche Fragestellung erledigt ist. Es ist nur schade, dass die meisten Leute, die ja hier Hilfe von anderen erwarten, sich trotzdem nicht einmal die Mühe machen kurz zu schauen, wie sie ihnen die Sache denn so angenehm wie möglich machen können und wenigstens mal die Formatierung kurz austesten.
 
Das ist sicherlich kein heldenhafter C++ Code, aber ich weiß ja sowieso nicht, wie weit ihr schon mit Manipulatoren seid. Also sollte das verständlich genug sein:
C++:
#include <iostream>
#include <time.h>
#include <locale.h>
#include <string.h>
#include <stdlib.h>

using namespace std;

int main()
{
    char input[7][20] = { "lakritz", "karamel", "schokolade", "keks", "marzipan", "honigbonbon", "" };
    setlocale(LC_ALL, "de-DE");
  
    int year = 0;
    cout << "choose a year: ";
    cin >> year;
    year = year < 1900 ? 1900 : year - 1900;
    srand(year);

    tm tm_time = { 0, 0, 0, 1, 0, year, 0, 0, 0 };
    time_t cal_time = mktime(&tm_time);
    tm_time = *localtime(&cal_time);
    cout << ctime(&cal_time);

    int mon = tm_time.tm_mon;
    int bounty = 6;
    char frm[30];
    char buffer[30];
    while (tm_time.tm_year == year)
    {
        // gib den monat aus
        strftime(buffer, 30, "%B", &tm_time);
        cout << buffer << endl;

        while (tm_time.tm_mon == mon)
        {
            bounty = tm_time.tm_mon == 11 && tm_time.tm_mday < 25 ? rand() % 6 : 6; // bestimme belohnung
            sprintf(frm, "%%d %s", input[bounty]);          // baue belohnung in formatstring fürs datum ein
            strftime(buffer, 30, frm, &tm_time);            // formatiere datum
            cout << buffer << endl;                         // gib datum aus

            cal_time = mktime(&tm_time);                    // timestamp <- datum
            cal_time += 86400;                              // timestamp +1 tag
            tm_time = *localtime(&cal_time);                // timestamp -> datum
        }
        mon = tm_time.tm_mon;
        cout << endl;
    }

    return 0;
}

Auf diese Weise bekommst du nicht nur eine pseudozufällige Auswahl an Belohnungen im Advent, sondern bei jedem Aufruf fürs selbe Jahr die selbe, was in meinen Augen das ganze etwas sinnvoller macht.

Sieh dir zum Verständnis unbedingt die verwendeten Funktionen an:
C Library - <time.h> - Tutorialspoint

Meine Ausgabe hier:
choose a year: 2020
Januar
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31

Februar
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29

Mõrz
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31

April
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30

Mai
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31

Juni
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30

Juli
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31

August
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31

September
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30

Oktober
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31

November
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30

Dezember
01 schokolade
02 keks
03 marzipan
04 karamel
05 honigbonbon
06 karamel
07 karamel
08 honigbonbon
09 marzipan
10 lakritz
11 keks
12 schokolade
13 schokolade
14 honigbonbon
15 honigbonbon
16 keks
17 honigbonbon
18 honigbonbon
19 keks
20 marzipan
21 lakritz
22 karamel
23 karamel
24 marzipan
25
26
27
28
29
30
31
Das ist sicherlich nicht sehr hübsch, aber so wie ich es verstanden habe, erfüllt es die Anforderungen.
 
Zuletzt bearbeitet:
Das Ergebnis davon wird sein: Copy/Paste und fertig, aber nix gelernt. Erlebt man doch immer wieder in Foren.
Das Ergebnis hängt von der Einstellung des Threaderstellers ab... Aber ist es unsere Aufgabe dessen Absicht zu bewerten? Wenn der Threadersteller die Frage mit der Absicht stellt, zu lernen wie es geht, wird er diesen Code lesen, versuchen zu verstehen und bei Bedarf nachfragen. Wenn das nicht seine Absicht ist, würde entweder jetzt gar nichts mehr kommen und der Thread offen bleiben - das würde mich nerven und eine verpasste Gelegenheit für eventuell lernwillige Mitleser darstellen - oder sowohl Threadersteller als auch eigentlich bereitwillige Helfer würden genervt oder sich gar querstellen und nur noch widerwillig auf den anderen eingehen. Sowohl eine konstruktive Entwicklung des Themas als auch das Mitlesen wären müßig und der Lernfortschritt sich in Grenzen halten, da sich das Interesse an der Sache sowieso nur noch auf die Erledigung beschränken würde.

Ich halte die Sache da lieber einfach, hoffe dass die Antwort hilfreich war und dass Rückfragen kommen, sollte der Code dem Ersteller noch etwas undurchsichtig erscheinen.

An der Stelle kann ich aber als gut gemeinten Rat wirklich bestätigen, was hier genannt wurde. In meinem Studium habe ich auch immer wieder beobachten können, wie diejenigen, die sich von Anfang an auf Lösungen verlassen, die sie nicht selber durchdacht und verstanden haben, ALLE auf der Strecke blieben und nie wirklich ins Thema hineinfanden. Von daher: Frag nach.

Gruß,
Neonof
 
@Neonof Neono
Ich glaube deine Lösung geht über das hinaus, was gefordert ist. Der TE soll 10000 Kalender generieren mit je 24 zufällig gewählten Süßigkeiten aus der Liste. Ich denke das es nachfolgend irgendwelche Statistiken geben wird.
Bei Hausaufgaben ist das Problem, das man nicht genau weiß was die Schüler an der Stelle lernen sollen. Vor allem wenn man die Originalaufgabe nicht vorliegen hat. Und da wurde ja schon mehrfach nach gefragt.
 
Zurück