Monatskalender



  • Heyho 🙂
    Ich habe mich bis weilen noch überhaupt nicht mit der C-Programmierung auseinander gesetzt und bitte daher um Nachsicht 😃
    Ich habe eine Aufgabenstellung (s.u.) und komm einfach auf keinen Vernünftigen Ansatz, bzw. weiß nicht ob das so stimmt.
    Die Aufgabenstellung lautet:
    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 ...usw.

    Vor der Ausgabe werden folgende Eingaben abgefragt
    1. Mit welchem Wochentag beginnt der Monat? (SO=0, MO=1,...)
    2. Wie viele 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 Kalender ausgegeben werden soll. Gibt er 1 ein, wird wieder nach den Eingabedaten gefragt. Jede andere Antwort führt zum Abbruch des Programms.

    Das wäre die Aufgabenstellung. Ich wäre nun wie folgt rangegangen:

    #include <studio.h>
    int main (void)
    {
    int wt,tm,ja; //Variablen (Muss ich auch So-Sa deklarieren?)

    do
    {
    printf("Wochentag\n"),scanf("%d",&wt);
    if(0<=wt<=6)
    { //hier bräuchte ich ja dann noch eine Fkt.?
    printf("\nTage des Monats\n"),scanf("%d",&tm);
    if (28<=tm<=31)
    { //noch eine Fkt.?
    }}
    else
    {} //muss hier was rein?
    printf("\nNeuer Kalender?\n"),scanf("%d",&ja);
    }
    while (ja==1); //bedeutet das es bei 1 nochmal durchläuft?
    return 0;
    }

    Wäre wirklich top wenn mir einer von Euch helfen könnte 👍 🙂



  • #include <stdio.h>
    
    void clear( FILE * input )
    {
    	int ch;
    	while( ( ch = fgetc( input ) ) != EOF && ch != '\n' );
    }
    
    void print_month( unsigned first_day, unsigned num_days )
    {
    	char spacer[] = "                     ";
    	unsigned i;
    
    	puts( "SO MO DI MI DO FR SA" );
    	spacer[ first_day * 3 ] = '\0';
    	printf( "%s", spacer );
    
    	for( i = 1; i <= num_days; ++i ) {
    		printf( "%2d ", i );
    		if( ( i + first_day ) % 7 == 0 )
    			putchar( '\n' );
    	}
    	putchar( '\n' );
    }
    
    int main( void )
    {
    
    	unsigned first_day;
    	unsigned num_days;
    	int input;
    
    	do {
    
    		do {
    			printf( "Erster Tag des Monats (SO = 0, MO = 1, DI = 2, ..., SA = 6): " );
    			input = scanf( " %u", &first_day );
    			clear( stdin );
    		} while( input != 1 || first_day > 6 );
    
    		do {
    			printf( "Anzahl der Tage des Monats (28, 29, 30 or 31): " );
    			input = scanf( " %u", &num_days );
    			clear( stdin );
    		} while( input != 1 || ( num_days < 28 || num_days > 31 ) );
    
    		print_month( first_day, num_days );
    		printf( "\nNochmal (Ja = 1)? " );
    
    	} while( scanf( " %d", &input ) == 1 && input == 1 );
    
    	puts( "\nbye.\n" );
    }
    


  • Ich hab jetzt Swordfishs Beitrag nicht untersucht (weil er schon immer relativ zuverlässig ist), ist aber immer schön zu sehen wenn jemand deine Hausaufgaben macht.
    Lerneffekt geht stramm gegen Null. Ein Minus für Swordfish von meiner Seite.



  • OnKeL schrieb:

    Ich habe mich bis weilen noch überhaupt nicht mit der C-Programmierung auseinander gesetzt und bitte daher um Nachsicht 😃

    ... und steht plötzlich vor solch einer Aufgabe? Lernwille erkennbar?



  • Danke dir Swordfish,
    das ist sehr hilfreich. Ich muss das nur etwas anders machen, da wir die meisten Befehle noch nicht gelernt haben. Ist ziemlich ärgerlich, weil das Programm mit den ganzen if-Sätzen ultra lang wird -.-
    Naja...aber jetzt weiß ich dank dir, das es auch eine Kurzversion gibt, Danke nochmal
    🙂


Log in to reply