Beispielprogramm: Notenspiegel

Zur Wiederholung der Stoffs des ersten Semesters wurde im Wintersemester 2008/2009 eine Aufgabe ausführlich behandelt und gelöst. Der Aufgabentext lautet:


    Notenspiegel

    Es soll ein Programm erstellt werden, das nacheinander die Anzahl der Noten eins bis sechs abfragt, und danach folgende Kennzahlen ausgibt:

    • Anzahl der Noten eins bis vier
    • Anzahl der Noten fünf und sechs
    • Notendurchschnitt

    Das Programm meldet sich mit einer Überschrift, fragt die Anzahl der Noten ab, gibt die berechneten Werte aus und endet mit einer Schlussmeldung.

    Die Anzahl pro Note muss zwischen null und 999 liegen. Die Benutzerabfrage erfolgt absturzsicher.

    Programmierumgebung: Visual C++, Konsoleanwendung, Standard C.


Wir haben in der Vorlesung alle geforderten Aufgabenteile extrahiert und an der Tafel notiert. Danach haben wir einen groben Programmablauf in Form eines Struktogramms entwickelt und eine Funktion zum Einlesen der Anzahl einer Note genauer betrachtet. Schließlich sind wir an die Implementation gegangen und folgenden Quellcode erstellt:


    /*
    Name der Datei: main.c
    Autor: Robert Heß / E2a
    Version: 1.0
    Datum: 22.9.2008
    Beschreibung:
    */
    
    #include <stdio.h>
    
    int Notenanzahl(int Note);
    
    int main()
    {
        int Note[6];        /* Anzahl der Noten 1 bis 6 */
        int i;              /* lokale Laufvariable */
        int bestanden;      /* Anzahl der bestandenen Schüler */
        int nichtBestanden; /* Anzahl der durchgefallenen Schüler */
        double Durchschnitt;/* Notendurchschnitt */
    
        /* Überschrift ausgeben */
        printf("   >>> NOTENSPIEGEL <<<\n");
    
        /* Anzahl der Noten abfragen */
        for(i=0; i<6; i++)
            Note[i] = Notenanzahl(i+1);
    
        /* Berechnungen zum Notenspiegel durchführen */
        bestanden = Note[0]+Note[1]+Note[2]+Note[3];
        nichtBestanden = Note[4]+Note[5];
        Durchschnitt = 0;
        for(i=0; i<6; i++) Durchschnitt += Note[i]*(i+1);
        if(bestanden+nichtBestanden>0)
            Durchschnitt /= (bestanden+nichtBestanden);
    
        /* Ergebnisse ausgeben */
        printf("bestanden:       %d\n", bestanden);
        printf("nicht bestanden: %d\n", nichtBestanden);
        if(Durchschnitt>0)
            printf("Durchschnitt:    %.2lf\n", Durchschnitt);
        else
            printf("Durchschnitt:    ?\n");
    
        /* Schlussmeldung */
        printf("Das war's!\n");
    
        return 0;
    }
    
    int Notenanzahl(int Note)
    {
        int Anzahl=0;   /* Anzahl der Noten */
        int korrekt=0;  /* zeigt eine korrekte Eingabe an */
    
        do {
            /* Annahme: kein Fehler */
            korrekt = 1;
    
            /* Benutzerabfrage */
            printf("Bitte geben Sie die Anzahl der Note %d ein: ", Note);
            fflush(stdin);
    
            /* Test, ob Zahl eigegeben wurde */
            if(scanf("%d", &Anzahl)!=1) {
                printf("   Das war keine Zahl!\n");
                korrekt = 0;
            }
    
            /* Wertebereich testen */
            if(korrekt && (Anzahl<0 || Anzahl>999)) {
                printf("    Bitte nur der Wertebereich 0 bis 999!\n");
                korrekt = 0;
            }
        } while(!korrekt);
    
        return Anzahl;
    }
    

Ein Programm muss getestet werden. Zu diesem Zweck sind wir alle Anforderungen aus der Aufgabenstellung, die wir zu Beginn extrahiert haben, durchgegangen und haben geprüft, ob unser Programm diese erfüllt. Abschließend hier ein Probelauf:


       >>> NOTENSPIEGEL <<<
    Bitte geben Sie die Anzahl der Note 1 ein: 3
    Bitte geben Sie die Anzahl der Note 2 ein: zwei
       Das war keine Zahl!
    Bitte geben Sie die Anzahl der Note 2 ein: -2
        Bitte nur der Wertebereich 0 bis 999!
    Bitte geben Sie die Anzahl der Note 2 ein: 1000
        Bitte nur der Wertebereich 0 bis 999!
    Bitte geben Sie die Anzahl der Note 2 ein: 2
    Bitte geben Sie die Anzahl der Note 3 ein: 5
    Bitte geben Sie die Anzahl der Note 4 ein: 3
    Bitte geben Sie die Anzahl der Note 5 ein: 2
    Bitte geben Sie die Anzahl der Note 6 ein: 0
    bestanden:       13
    nicht bestanden: 2
    Durchschnitt:    2.93
    Das war's!
    Press any key to continue
    

In der Vorlesung wurde noch stichprobenartig die Berechnung der Werte überprüft.

Die Aufgabe sollte mit Ihren Kenntnissen aus dem ersten Semester zu lösen sein. Sie ist vom Umfang her kleiner als eine Praktikumsaufgabe. Auch sollte die Ausarbeitung ausführlicher ausfallen und durch eine Programmbeschreibung und Struktogramme ergänzt werden.

Seite 11