PROG 1 – Aufgabe 3 (Klausurnoten)

Die Beschreibung des Programms findet ihr oben in der Lösung.

Programmiertechnik 1 – Aufgabe 3 (Klausurnoten)

Das Ergebnis wird als HTML Code ausgegeben und mit diesem Aufruf könnt ihr es direkt in die Datei schreiben. Jedenfalls unter Linux:
./Aufgabe3 > ergebniss.htm

Lösung:

//
// Aufgabe3.cpp
//
// Programmiertechnik Uebungsaufgabe 3: Klausurnoten
//
// Liest Klausurnoten im Format ganze,zehntel oder ganze.zehntel ein
// und bestimmt die beste und die schlechteste Note, den Durchschnitt
// sowie die Durchfallquote in Prozent.
// Das Programm beruecksichtigt dabei nur die nach Pruefungsordnung
// zulaessigen Noten (1,0 1,3 1,7 2,0 2,3 2,7 3,0 3,3 3,7 4,0 5,0),
// andere Noten werden unter Ausgabe einer Warnung ignoriert.
// Alle Noten bis 4.0 gelten als bestanden, nur die 5.0 als durchgefallen.
//
// Das Programm gibt als Klausurergebnis folgende Werte aus:
// - die Anzahl der beruecksichtigten Noten
// - die beste Note
// - die schlechteste Note
// - den Durchschnitt
// - die Durchfallquote
//
// Autor: Andreas Giemza
// Erstellt am: 9.11.2009
//

#include <iostream>
#include <iomanip>

int main ()
{
  //--------------------------------------------------------- Noten einlesen
  std::cout << "Noten im Format ganze,zehntel eingeben (Ende mit Strg-D):n";

  int ganzeNote;                                  // [1..5]
  char komma;
  int zehntelNote;                                // [0, 3, 7] fuer Noten 1 bis 3, nur 0 fuer Noten 4 und 5

  /* 1: Direkt nach diesem Kommentar
        weitere Variablen definieren */

  int anzahl = 0;
  struct Note
  {
    int ganze;
    int zehntel;
  } beste, schlechteste, durchschnitttemp;
  durchschnitttemp.ganze = 0;
  durchschnitttemp.zehntel = 0;
  int durchgefallen = 0;
  bool gueltigeEingabe;

  /* 1: Ende */

  while (std::cin >> ganzeNote >> komma >> zehntelNote)
  {
    //------------------------------------------------------ Eingabe pruefen
    /* 2: Direkt nach diesem Kommentar
          Anweisungen fuer das Pruefen der eingegebenen Note */

    gueltigeEingabe = true;

    if (komma == ',' || komma == '.')
    {
      switch (ganzeNote)
      {
        case 1:
        case 2:
        case 3:
          if (zehntelNote != 0 && zehntelNote != 3 && zehntelNote != 7)
            gueltigeEingabe = false;
          break;
        case 4:
        case 5:
          if (zehntelNote != 0)
            gueltigeEingabe = false;
          break;
        default:
          gueltigeEingabe = false;
          break;
      }
    }
    else
      gueltigeEingabe = false;

    if (gueltigeEingabe == false)
    {
      std::cout << "Unzulaessige Note " << ganzeNote << komma << zehntelNote << " wird ignoriert!n";
      continue;                                   // Keine gueltige Eingabe somit wird hiermit die Schleife neu gestartet ...
    }

    /* 2: Ende */

    //--------------------------------------------------- Noten aufsummieren
    /* 3: Direkt nach diesem Kommentar
          Anweisungen fuer das Aktualisieren von Notensumme, Anzahl Noten,
          Anzahl Durchgefallene, beste und schlechteste Note */

    // Beim ersten Durchgang beste und schlechteste Note mit der ersten gueltigen Eingabe fuellen
    if (anzahl == 0)
    {
      beste.ganze = ganzeNote;
      beste.zehntel = zehntelNote;
      schlechteste.ganze = ganzeNote;
      schlechteste.zehntel = zehntelNote;
    }

    // Zaehler updaten
    anzahl++;
    if (ganzeNote == 5)
      durchgefallen++;

    // Falls aktuelle Note schlechter als vorherige schleteste updaten
    if (schlechteste.ganze < ganzeNote || (schlechteste.ganze <= ganzeNote && schlechteste.zehntel < zehntelNote))
    {
      schlechteste.ganze = ganzeNote;
      schlechteste.zehntel = zehntelNote;
    }

    // Das gleiche fuer die beste Note
    if (beste.ganze > ganzeNote || (beste.ganze >= ganzeNote && beste.zehntel > zehntelNote))
    {
      beste.ganze = ganzeNote;
      beste.zehntel = zehntelNote;
    }

    // Durchschnitt updaten
    durchschnitttemp.ganze += ganzeNote;
    durchschnitttemp.zehntel += zehntelNote;

    /* 3: Ende */

  }                                               // while

  //------------------------------------------------------ Ergebnis ausgeben
  /* 4: Direkt nach diesem Kommentar
        Anweisungen zum Berechnen von Durchschnitt und Durchfallquote
        sowie zum Ausgeben des Klausurergebnisses */

  std::cout << "nAnzahl beruecksichtigter Noten: " << anzahl << "n";

  if (anzahl != 0)
  {
    std::cout << std::fixed << std::setprecision(1);

    std::cout << "Beste Note: " << beste.ganze << "." << beste.zehntel << "n";
    std::cout << "Schlechteste Note: " << schlechteste.ganze << "." << schlechteste.zehntel << "n";

    double durchschnitt = ((double)durchschnitttemp.ganze / (double)anzahl) + ((double)durchschnitttemp.zehntel / (double)anzahl * 0.1);
    std::cout << "Durchschnitt: " << durchschnitt << "n";

    double durchfallquote = ((double)durchgefallen / (double)anzahl * 100);
    std::cout << "Durchfallquote: " << durchfallquote << "%n";
  }
  /* 4: Ende */

}                                                 // main
This entry was posted in Programmiertechnik 1 and tagged . Bookmark the permalink.

Hinterlasse eine Antwort

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind markiert *

*

Du kannst folgende HTML-Tags benutzen: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>