Kalender programmieren auf C+

  • Hallo zusammen.
    Ich sitzt eben vor einem kleine Problem, bei dem ihr mir hoffentlich weiterhelfen könnt: Es geht um das programmieren eines Kalenders auf C+.
    Darin sieht die Aufgabenstellung wie folgt aus:

    Erstellen Sie zuerst das Struktogramm und dann das zugehörige C-Programm für folgende
    Aufgabe. Es soll ein Monatskalender ausgegeben werden:
    So Mo Di Mi Do Fr Sa
    1 2 3 4 5
    6 7 8 9 10 11 12
    13 14 15 16 17 18 19
    20 21 22 23 24 25 26
    27 28 29 30
    Vor der Ausgabe werden folgende Eingaben abgefragt:
    1. Mit welchem Wochentag beginnt der Monat? (Sonntag=0, Montag=1, ... )
    2. Wieviel Tage hat der Monat?
    Entsprechend den Antworten soll Ihr Programm einen Kalender in der angegebenen Formatierung
    ausgeben.
    Nach der Ausgabe des Kalenders wird der Anwender gefragt, ob ein weiterer Monatskalender
    ausgegeben werden soll. Gibt er 1 ein, wird wieder nach den Eingabedaten gefragt.
    Jede andere Antwort führt zum Abbruch des Programms.


    Das Problem ist, dass ich nicht mal richtig weiß, wie ich die Aufgabenstellung anpacken soll. Für Punkt 1 hätte ich eine Case-Auswahl gewählt, die von 1-8 die jeweiligen Wochentagen, bzw 8 eine Fehlermeldung ansteuern sollte. Aber wie bekomme ich nun die Monatstag (von 1-30) in der jeweiligen Zeilen und Spaltenanordnung zugeordnet? Wäre um jeden kleine Rat oder Tip dankbar.
    Ich bin mit c+ noch kaum vertraut (studiere eigentlich Maschinenbau)

    MfG smartie

  • denk dir das einfach durch, wie du das händisch machen würdest, am Besten auf kariertem Papier - die Ausgabe ist streng Zeilen- und Spalten-Orientiert.

    Prinzipiell mal hast du folgende ausgabe, das ist fix:

    Code
    SO MO DI MI DO FR SA


    d.h. 2-Tages-Kürzel, dann genau 1 Leerzeichen.

    Angenommen, der 1. Tag ist der Sonntag (einfachster Fall). Dann hast du folgendes zu tun:
    "1" ausgeben - Leerzeichen - "2" ausgeben - Leerzeichen etc. Das Problem ist, dass das eigentlich nur mit 2-stelligen Zahlen klappt (sonst siehts so aus wie in deinem 1. Post :-)). Hier hilft

    Code
    printf("%2d", 1)


    das %2d (also eigentlich die 2) sorgt dafür, dass vor eine einstellige Zahl ein Leerzeichen geschrieben wird, d.h. genau das, was wir brauchen.
    Am Ende der Woche machst du noch zusätzlich ein

    Code
    printf("\n")


    das bewirkt einen Zeilenumbruch. Dann gehts wieder von vorne los.

    Wenn du das mal hast, sollte der nächste Schritt, also die Einbeziehung des 1. Tages (z.B. Dienstag) nicht schwer sein - einfach am Anfang pro zu überspringenden Tag 3 Leerzeichen machen, und erst dann mit der eigentlichen Ausgabe anfangen.

    i don't like signatures

  • So, also erstmal eine herzlichen Dank für die rasche antwort. Auch wenn ich für heute den Stift (die Tastatur) bei Seite legen werde, wollte ich noch schnell posten, was ich mir bisher zusammen gefriemelt habe.
    Das Programm ist noch nicht ganz fertig, da die case-anweisungen noch für die Eingabe vom Wert 30 und 31 erfolgen muss. Aber vielleicht könnt ihr mir ja ein kurzes Statement geben, ob dass so funktionieren könnte, oder irgendwo der Hund begraben ist.
    (weiß z.B.nicht. ob man in eine Case-Anweisung eine Schleife einbauen darf)


    int main ()
    {
    double i, j, tage;
    printf "Geben sie eine Zahl von 0 bis 6 fuer den ersten Wochentag des Monats ein , Mo (0),Di (1),Mi(2),Do(3), Fr(4), Sa(5), So(6)\n");
    scanf ("%d", &i);
    printf "Geben sie 28, 30, oder 31 für die Anzahl der Tage des Monats ein\n");
    scanf ("%d", &tage);
    printf "Mo%2d Di%2d Mit%2d Do%2d Fr%2d Sa%2d So%2d\n");

    if (tage==28)
    switch
    {
    case 0
    j=0;
    do j=j+1
    while j<=7;
    printf ("j%d");
    if j=7
    "\n";
    do j=j+1
    while i<=14;
    printf ("j%d");
    if j=14
    "\n";
    do j=j+1
    while j<=21
    printf ("j%d");
    if j=21;
    "\n";
    do j=j+1
    while i<=28
    printf ("j%d");
    if j=28
    "\n";
    do j=j+1
    while j<=tage;
    printf ("j%d")
    break;

    case 1
    j=1;
    do {j=j+1;}
    while j<=7;
    printf ("j%d");
    if j=7
    "\n";
    do {j=j+1;}
    while j<=14;
    printf ("j%d");
    if j=14
    "\n";
    do {j=j+1;}
    while {j<=21;}
    printf ("j%d");
    if j=21;
    "\n";
    do {j=j+1;}
    while j<=28
    printf ("j%d");
    if j=28
    "\n";
    do {j=j+1;}
    while j<=tage;
    printf ("j%d")
    break;

    case 2
    j=2;
    do {j=j+1;}
    while j<=7;
    printf ("j%d");
    if j=7
    "\n";
    do {j=j+1;}
    while j<=14;
    printf ("j%d");
    if j=14
    "\n";
    do {j=j+1;}
    while j<=21
    printf ("j%d");
    if j=21;
    "\n";
    do {j=j+1;}
    while j<=28
    printf ("j%d");
    if j=28
    "\n";
    do {j=j+1;}
    while j<=tage;
    printf ("j%d")
    break;

    case 3
    j=3;

    do {j=j+1;}
    while j<=7;
    printf ("i%d");
    if j=7
    "\n";
    do {j=j+1;}
    while j<=14;
    printf ("j%d");
    if j=14
    "\n";
    do {j=j+1;}
    while j<=21
    printf ("j%d");
    if j=21;
    "\n";
    do {j=j+1;}
    while j<=28
    printf ("j%d");
    if j=28
    "\n";
    do {j=j+1;}}
    while j<=tage;
    printf ("j%d")
    break;

    case 4
    j=4;

    do {j=j+1;}
    while j<=7;
    printf ("j%d");
    if j=7
    "\n";
    do {j=j+1;}
    while j<=14;
    printf ("j%d");
    if j=14
    "\n";
    do {j=j+1;}
    while j<=21
    printf ("j%d");
    if j=21;
    "\n";
    do {j=j+1;}
    while j<=28
    printf ("j%d");
    if j=28
    "\n";
    do {j=j+1;}
    while j<=tage;
    printf ("j%d")
    break;

    case 5
    j=5;

    do {j=j+1;}
    while j<=7;
    printf ("j%d");
    if j=7
    "\n";
    do {j=j+1;}
    while j<=14;
    printf ("j%d");
    if j=14
    "\n";
    do {j=j+1;}
    while j<=21
    printf ("j%d");
    if j=21;
    "\n";
    do {j=j+1;}
    while j<=28
    printf ("i%d");
    if j=28
    "\n";
    do {j=j+1;}
    while j<=tage;
    printf ("j%d")
    break;

    case 6
    j=6

    do {j=j+1;}
    while j<=7;
    printf ("j%d");
    if j=7
    "\n";
    do {j=j+1;}
    while j<=14;
    printf ("j%d");
    if j=14
    "\n";
    do {j=j+1;}
    while j<=21
    printf ("j%d");
    if j=21;
    "\n";
    do {j=j+1;}
    while j<=28
    printf ("j%d");
    if j=28
    "\n";
    do {j=j+1;}
    while j<=tage;
    printf ("j%d");
    break
    return 0

Jetzt mitmachen!

Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!