Bedingte Verzweigungen die 2.



  • So sollen wir Bedingte Verzweigungen lernen...Bestimmt geht es einfacher... aber... naja, 😞



  • Wenn ich == mache, Hört er gleich nach Durchschnitt auf und geht gar nicht mehr zu den ifs.....



  • mach das int notenanzahl mal zu nem float und schau was passiert 🙂

    ach ja das fällt mir jetzt erst auf : mach bei den if abfragen die hochkommas weg, damit signalisierst du dem compiler nur, das das ein char sein soll und in der ascii tabelle hat die 1 nicht den wert "1" sondern 97 oder so



  • Hochkommas weg, notenanzahl auf float, und trotzdem geht er immer nur bis zu die Durchschnittsnote ist... Wenn ich mit einem = mache, macht das Programm immer Sehr gut 😞



  • Du vergleichst nur auf ganze Zahlen. Was ist aber wenn der Durchschnitt z.B. 2.5 ist?
    Das passt dann in keine Abfrage rein.

    Versuche das mal so:

    if (durchschnitt >= 5.5)
    {
        cout << "Die Arbeit muss auf Grund zu schlechter Leistungen wiederholt werden!"; 
    }
    else if (durchschnitt >= 4.5)
    {
        cout << "Die Allgemeinen Leistungen sind Nicht Genügend!";
    }
    else if (durchschnitt >= 3.5)
    {
        cout << "Genügend!";
    }
    else if (durchschnitt >= 2.5)
    {
        cout << "Befriedigentd!";
    }
    else if (durchschnitt >= 1.5)
    {
        cout << "Gut!";
    }
    else
    {
        cout  << "Sehr Gut! ";
    }
    


  • Klappt leider auch nicht. Er bleibt immer bei Sehr gut! Muss man da noch Anweisungen dazwischenbauen???
    Ist else if denn überhaupt richtig???



  • Hallo,

    #include <iostream>
    
    using namespace std;
    
    int runden(float f) {
      int i = static_cast<int>(f);
    
      if ((f-i)>=0.5)
        ++i;
      return i;
    };
    
    int main() {
      char *noten[] = {"Sehr gut", "Gut", "Befriedigend", "Ausreichend", "Mangelhaft", "Ungenuegend"};
    
      int notenanzahl = -1;  //wegen überflüssiger Eingabe der 0 als Eingabeende gleich eins niedriger gesetzt
      float summe = 0.0;
      float note = 0.0;
      float durchschnitt=0.0;
    
      do {
        cout << "Bitte die Note eingeben: ";
        cin >> note;
    
        summe += note;
        ++notenanzahl;
      } while(note != 0.0);
    
      durchschnitt = summe/notenanzahl;
      cout<< "Die Durchschnittsnote ist: "<< durchschnitt <<'\n'; 
    
      cout<< noten[runden(durchschnitt)-1] <<'\n';
    
      return 0;
    };
    

    Ich hab's jetzt nicht getestet, u.U. sind noch n paar Fehler, hab hier grad keinen Compiler.

    EDIT: return 0 vergessen *duck* 😉

    MfG

    GPC



  • Sorry,

    aber für mich als Anfänger ist das zu harter Tobac, dass muss doch ohne static weiß ich was gehen...

    😕



  • static_cast ist einfach ein Cast, der mir in dem Fall den Ganzzahlanteil aus der Gleitkommazahl rauszieht, also aus 4.5 die 4 holt.
    Funktioniert meine Lösung eigentlich?

    MfG

    GPC



  • Ich habe das gerade mal getestet. Die Lösung von GPC und meine jetzige 😉 funktionieren beide.
    Editier einfach mal deinen aktuellen Code in den Startpost rein. Damit wir gucken können, was noch falsch ist.



  • int main ()
    {
    
    float notenanzahl=0; 
    float summe=0; 
    int note = 0; 
    float durchschnitt=0; 
    do 
    { 
     cout<< "Bitte die Note eingeben: ";
     cin>> note; 
    
     summe=summe+note; 
     notenanzahl++; 
    }
    while(note!=0); 
    notenanzahl--;   
    
    durchschnitt=summe/notenanzahl; 
    cout<< "Die Durchschnittsnote ist: "<< durchschnitt <<endl; 
    
    if (durchschnitt >= 1)
    {
    	cout  << "Sehr Gut! ";
    }
    
    else if (durchschnitt >= 2)
    {
    	cout << "Gut!";
    }
    
    else if (durchschnitt >= 3)
    {
    	cout << "Befriedigentd!";
    }
    else if (durchschnitt >=4)
    {
    	cout << "Genügend!";
    }
    else if (durchschnitt >= 5)
    {
    	cout << "Die Allgemeinen Leistungen sind Nicht Genügend!";
    }
    else if (durchschnitt >= 6)
    {
    	cout << "Die Arbeit muss auf Grund zu schlechter Leistungen wiederholt werden!";
    }
    
    return 0;
    }
    


  • Du prüftst ja zuerst, ob der durchschnitt größer als 1 ist. Das ist er aber auch wenn er z.b. 4 ist.
    Es wird also immer "sehr gut" ausgegeben...

    Schau dir den Post von C Newbie nochmal an.



  • Okay, jetzt hats gefunkt....

    Danke, ich hab mir den Post von C Newbie zu wenig genau angeguckt...

    Jetzt funktioniert es...

    Thanks... 👍



  • edit: verguckt 😣


Anmelden zum Antworten