Notendurchschnitt berechnen (Programm funktioniert nicht)



  • Habe eine neue Ausbildung als Technischer Assistent für Informatik angefangen und wollte bisschen vorarbeiten leider kann ich mein geschriebenes Programm nicht öffnen könntet Ihr mir bitte lösungsvorschläge geben bzw was ich falsch gemacht habe oder auch Tipps?
    Danke schon mal im vorraus 🙂

    // Tai 11.cpp: Definiert den Einstiegspunkt für die Konsolenanwendung.
    //

    #include <iosstream>
    using namespace std;

    // Programm zum ausrechnen des Notendurchschnitts

    int main() {
    unsigned char klassenstärke = 0;
    unsigned char note1 = 0;
    unsigned char note2 = 0;
    unsigned char note3 = 0;
    unsigned char note4 = 0;
    unsigned char note5 = 0;
    unsigned char note6 = 0;
    unsigned char notenanzahl = 0;
    unsigned char ergebnis = 0;

    cout << "Notendurchschnitts Kalkulator /n";
    cout << "Geben Sie bitte die Klassenstärke ein."; // Eingabehinweis
    cin >> klassenstärke;
    cout << "/n Geben Sie bitte die Anzahl der Schüler mit der Note 1 ein.";
    cin >> note1;
    cout << "/n Geben Sie bitte die Anzahl der Schüler mit der Note 2 ein.";
    cin >> note2;
    cout << "/n Geben Sie bitte die Anzahl der Schüler mit der Note 3 ein.";
    cin >> note3;
    cout << "/n Geben Sie bitte die Anzahl der Schüler mit der Note 4 ein.";
    cin >> note4;
    cout << "/n Geben Sie bitte die Anzahl der Schüler mit der Note 5 ein.";
    cin >> note5;
    cout << "/n Geben Sie bitte die Anzahl der Schüler mit der Note 6 ein.";
    cin >> note6;
    
    sum notenanzahl = note1 + note2 + note3 + note4 + note5 + note6;
    
    if ((klassenstärke == notenzahl) == false) {
    	cerr << "Notenanzahl stimmt nicht mit der Klassenstärke überein"
    		exit(1);
    }
    
    if ((klassenstärke == notenzahl) == true) {
    	sum ergebnis = ((note1 * 1) + (note2 * 2) + (note3 * 3) + (note4 * 4) + (note5 * 5) + (note6 * 6)) / notenanzahl;
    	cout << "/n/n Der Durchschnitt beträgt /n" ergebnis;
    
    	return 0;
    
    }
    

    }



  • Ich hab eher das Gefühl Du hast dieses Programm bekommen und sollst alle Fehler finden. Habe ich nicht Recht?

    Ansonsten leuchtet es mir nicht ein, wie man als Anfänger 60 Zeilen Programmcode schreiben kann, ohne davor ein einziges mal zwischendurch das Programm zu kompilieren, auszuführen und zu testen.

    Edit: Geheimtipp, anstatt 6 einzelne Variablen für Noten zu nehmen und für jede Variable 6 Mal denselben Code zu schreiben, nimm std::array und for-Schleifen. Das gilt aber fürs Allgemeine; In diesem Fall reicht eine einzige Variable, in der Du direkt alle Noten aufaddierst gleich nach dem Einlesen.

    LG



  • @harteware
    das programm hab ich heute selber geschrieben habe morgen zum ersten mal das fach Anwendungsentwicklung
    das war nur ein Test mich wunderts nur warum das PRogramm nicht funktionier und was ich dabei falsch gemacht habe



  • Was heißt genau, es funktioniert nicht?
    Und was genau wundert dich daran?



  • @inkognito Wenn Du mal versuchst das Programm zu kompilieren, wirst Du abhängig vom verwendeten Compiler Fehlermeldungen und/oder Warnungen bekommen. Mal als Beispiel:

    fatal error: iosstream: No such file or directory
     #include <iosstream>
              ^~~~~~~~~~~
    compilation terminated.
    

    oder

    error: 'iosstream' file not found
    

    Den ersten Fehler beheben -> Fehlermeldung in die Suchmaschine deines Vertrauens kopieren (das ganze spezifische wie Pfade und Zeilennummern entfernen) und siehe da, schon vor dem ersten Suchergebnis kommt:

        Did you mean: error: 'iostream' file not found 
    

    Noch ein Beispiel:

    error: use of undeclared identifier 'notenzahl'
    

    Wir schauen hoch wo die Variable definiert wurde:

    unsigned char notenanzahl = 0;
    

    notenzahl != notenanzahl. Beim programmieren muss es ganz genau sein.

    Semikolon am Ende der Zeile vergessen kommt auch gerne vor (oder eines zu viel, wo eigentlich keins hin soll). Da sind die Fehlermeldungen mittlerweile ziemlich gut:

    main.cpp:53: error: expected ';' after expression
    

    Und wenn Du mit einer bestimmten Fehlermeldung nicht weiterkommst, kannst Du sie immernoch hier reinkopieren und wir versuchen zu helfen. Aber ein ganzes Programm hinklatschen nach dem Motto "geht nicht" und erwarten, dass jemand alle Fehler sucht, das ist nicht ok.



  • Vielen Dank für die tipps insbesondere für den mit dem debuggen lediglich habe ich noch fehlercodes mit denen ich nichts anfangen kann:

    • LNK 1120 Anzahl nicht aufgelöste externe an
    • E2138 der Ausdruck muss einen arithmetischen Enumerationstyp oder einen Enumerationstyp ohne Bereichseinschränkung aufweisen ( Befindet sich in der Zeile 44)
    • LNK 2019 nicht aufgelöstes externes Symbol 'Symbol"verwiesen wird, in der Funktion"Funktion"

    Bitte um Hilfe tut mir leid das ich euch so eine arbeit mache aber es interessiert mich was ich falsch gemacht habe ich will die ausbildung mehr als nur erfolgreich zu bestehen und will immer der beste sein lediglich stehe ich recht am anfang der Anwendungsentwicklung und will viel lernen bzw. in der Praxis können und würde so auch immer vorarbeiten das ich immer die Antworten im Unterricht weiß es ist sehr schwer am anfang ich bitte um verständnis und entschuldige mich für diese Umstände. Danke.

    #include "iostream"

    using namespace std;

    // Programm zum ausrechnen des Notendurchschnitts

    int main() {
    unsigned char klassenstärke = 0;
    unsigned char note1 = 0;
    unsigned char note2 = 0;
    unsigned char note3 = 0;
    unsigned char note4 = 0;
    unsigned char note5 = 0;
    unsigned char note6 = 0;
    unsigned char notenanzahl = 0;
    unsigned char ergebnis = 0;

    cout << "Notendurchschnitts Kalkulator /n";
    cout << "Geben Sie bitte die Klassenstärke ein."; // Eingabehinweis
    cin >> klassenstärke;
    cout << "/n Geben Sie bitte die Anzahl der Schüler mit der Note 1 ein.";
    cin >> note1;
    cout << "/n Geben Sie bitte die Anzahl der Schüler mit der Note 2 ein.";
    cin >> note2;
    cout << "/n Geben Sie bitte die Anzahl der Schüler mit der Note 3 ein.";
    cin >> note3;
    cout << "/n Geben Sie bitte die Anzahl der Schüler mit der Note 4 ein.";
    cin >> note4;
    cout << "/n Geben Sie bitte die Anzahl der Schüler mit der Note 5 ein.";
    cin >> note5;
    cout << "/n Geben Sie bitte die Anzahl der Schüler mit der Note 6 ein.";
    cin >> note6;
    
    (notenanzahl) = note1 + note2 + note3 + note4 + note5 + note6;
    
    while ((klassenstärke == (notenanzahl)) == false) {
    	cerr << "Notenanzahl stimmt nicht mit der Klassenstärke überein";
    	exit(1);
    }
    
    while ((klassenstärke == (notenanzahl)) == true) {
    	ergebnis = ((note1 * 1) + (note2 * 2) + (note3 * 3) + (note4 * 4) + (note5 * 5) + (note6 * 6)) / notenanzahl;
    	cout << -("Der Notendurchschnitt der Klasse beträgt")- (ergebnis);
    
    	return 0;
    
    }
    

    }
    #include "stdafx.h"



  • #include "stdafx.h" am Dateiende?

    Für deine Lernprojekte brauchst du keine precompiled header. Entferne das include und schalte die precompiled header in den Projekteigenschaften aus. Möglicherweise behebt das schon deine Fehler.

    Die Fehlermeldungen in der Error Tab sind verstümmelt. Schau dir die Meldungen im Output Tab an. Fange mit der ersten an.



  • @inkognito
    (notenanzahl) = Was sollen hier die Klammern?



  • Zu den precompiled headern, bei meiner Visual Studio Version muss ich immer "Windows Desktopassistent" wählen anstatt "Windows Konsolenanwendung", damit ich das ausschalten kann und ein leeres Projekt bekomme. Bin aber kein Experte mit VS also könnte auch einfacher gehen.

    #include "iostream"
    

    mit <> war schon richtig:

    #include <iostream>
    

    Man sollte keine Zeichen wie ä, ü, ä, ß usw. vewenden, sondern nur "normale" Buchstaben aus der ASCII Tabelle. Das kann nämlich Probleme bereiten.

    while ((klassenstaerke == (notenanzahl)) == true)
    

    Das ist Quark (explizite Vergleiche mit true/false), man würde diesen Ausdruck so schreiben:

    while (klassenstaerke == notenanzahl)
    

    genauso:

    while ((klassenstaerke == (notenanzahl)) == false)
    // -->
    while (klassenstaerke != notenanzahl)
    

    P.S.: Bei mir kommt noch die Fehlermeldung:

     error: wrong type argument to unary minus
         cout << -("Der Notendurchschnitt der Klasse beträgt")- (ergebnis);
    

    Das ist vermutlich das Equivalent zu dieser von Dir genannten Meldung:

    E2138 der Ausdruck muss einen arithmetischen Enumerationstyp oder einen Enumerationstyp ohne Bereichseinschränkung aufweisen ( Befindet sich in der Zeile 44)
    

    LG



  • while (klassenstärke != notenanzahl) {
    	ergebnis = ((note1 * 1) + (note2 * 2) + (note3 * 3) + (note4 * 4) + (note5 * 5) + (note6 * 6)) / notenanzahl;
    	cout << ("Der Notendurchschnitt der Klasse beträgt") (ergebnis);
    

    wenn ich jedoch das - weglasse dann kommt die Fehlermeldung E0109 (Der Ausdruck vor den Klammern des sichtbaren Aufrufs muss einen Funktionstyp (pointer-to-) aufweisen)



  • @inkognito sagte in Notendurchschnitt berechnen (Programm funktioniert nicht):

    cout << ("Der Notendurchschnitt der Klasse beträgt") (ergebnis);

    cout << "Der Notendurchschnitt der Klasse beträgt " << ergebnis;