Brauche dringend eure Hilfe,bei diesem Programm!Bitte!



  • Das fertige Programm soll wie folgt funktionieren
    (Eingaben des Benutzers sind fett gedruckt: 1 2 3 ...):
    Noten im Format ganze,zehntel eingeben (Ende mit Strg-D):
    2,7 2.1 2-3 2.0 2,5 2.3
    Unzulaessige Note 2.1 wird ignoriert!
    Unzulaessige Note 2-3 wird ignoriert!
    Unzulaessige Note 2,5 wird ignoriert!
    Strg-D
    Anzahl beruecksichtigter Noten: 3
    Beste Note: 2.0
    Schlechteste Note: 2.7
    Durchschnitt: 2.3

    Sie sollen also zählen, wieviele zulässige Noten der Benutzer eingegeben hat, und zum Schluss die beste und schlechteste Note sowie den Durchschnitt ausgeben. Bei Noten, die in der Prüfungsordnung nicht vorgesehen sind, sollen Sie eine Fehlermeldung ausgeben und die Note ignorieren. Ganze Note und Zehntelnote darf der Benutzer mit Komma oder Punkt trennen.
    ich hoffe ihr könnt mir helfen!!

    // Aufgabe3.cpp
    //
    // Programmiertechnik Übungsaufgabe 3: Klausurnoten
    //
    // Liest Klausurnoten im Format ganze,zehntel oder ganze.zehntel ein und
    // bestimmt die beste und die schlechteste Note sowie den Durchschnitt.
    // 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.
    //
    // Das Programm gibt als Klausurergebnis folgende Werte aus:
    // - die Anzahl der beruecksichtigten Noten
    // - die beste Note
    // - die schlechteste Note
    // - den Durchschnitt
    //
    // Autor(en): ...
    // Erstellt am: ...
    //

    #include <iostream>
    #include <iomanip>

    #ifdef NO_FIXED
    // Falls fixed in der Standardbibliothek fehlt
    // (ist z.B. beim gcc 2.95.2 der Fall), muss es selbst definiert werden.
    namespace std
    {
    inline ostream& fixed (ostream& s)
    {
    return s << resetiosflags(ios::scientific) << setiosflags(ios::fixed);
    }
    }
    #endif

    struct KlausurNote
    {
    int ganze; // [1..5]
    int zehntel; // [0, 3, 7] fuer Noten 1 bis 3, nur 0 fuer Noten 4 und 5
    };

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

    KlausurNote note;
    char komma;

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

    while (std::cin >> note.ganze >> komma >> note.zehntel)
    {
    //------------------------------------------------------ Eingabe pruefen
    /* 2: Direkt nach diesem Kommentar
    Anweisungen fuer das Pruefen der eingegebenen Note schreiben */

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

    }

    if (! std::cin.eof())
    {
    std::cout << "Ende wegen falscher Eingabe!\n";
    }

    //------------------------------------------------------ Ergebnis ausgeben
    /* 4: Direkt nach diesem Kommentar
    Anweisungen zum Ausgeben des Klausurergebnisses schreiben */

    }

    😕 😕
    könntet ihr mir den Programmcode eventuell vervollständigen??
    Mein Programm läuft einfach nicht!
    bin am verzweifeln 😞 🙄

    gruß daniel



  • Original erstellt von Dadu2002:
    while (std::cin >> note.ganze >> komma >> note.zehntel)

    na, das geht so wohl nicht. du musst eine eingabezeile komplett einlesen, (z.b. in einen string) und dann nach den einzelnen noten durchforsten.
    etwa so:

    string eingabe;
    cin >> eingabe; 
    /* Wenn er nur bis zum ersten leerzeichen liest, versuch entweder
    cin.getline oder ein while { cin >> eingabe; machwasdamit(); } */
    // nachdem du deine noten in stringform drin hast, musst du nur noch rausfinden, 
    // von wo bis wo eine ziffer steht
    for (int i = 0; i < eingabe.length(); ++i)
    {
        if (!isdigit(eingabe[i])) continue; // wir wollen nur zahlen behandeln  
        string zahl_string;
        int zahl, kommarest;
        while (i < eingabe.length() && isdigit(eingabe[i])) 
            zahl_string += eingabe[i++];
        zahl = atoi(zahl.c_str());
        if (!(i < eingabe.length())) continue; // ende des strings erreicht, finito
        if (!(eingabe[i] == '.' || eingabe[i] == ',')) continue; // keine kommazahl, also weiter
        ++i; eingabe.clear();
        while (i < eingabe.length() && isdigit(eingabe[i])) 
            zahl_string += eingabe[i++];
        kommarest = atoi(eingabe.c_str());
    }
    

    oder so ähnlich (is nur n anhaltspunkt)



  • genau das Gleiche hast du doch vor 2 Tagen schon mal gepostet. Hast du in dieser Zeit gar nichts zustande gebracht????? Wenn doch, dann poste das doch mal. Wenn nicht, dann ist dies ziemlich unverfroren von dir, denn du scheinst zu erwarten, daß andere deine Aufgaben lösen!!!


Anmelden zum Antworten