Matrizen c++ Prüfungsaufgabe



  • Hallo kann mir bitte jemand bitte diese Aufgabe korrigieren ob den Code richtig ist oder falsch :

    Die Aufgabe lautet :
    ""( An einer Prüfung nehmen Studierende (max. 400) verschiedener Studiengänge
    (max. 10) teil. Die Bezeichnung eines Studiengangs enthält genau 1 Zeichen
    (Beispiel: e ... Elektrotechnik, i ... Informatik).
    Entwerfen Sie ein C++-Programm, das für eine absolvierte Prüfung den Anteil
    der Teilnehmer berechnet, die bestanden haben (ohne Unterscheidung der Studiengänge). Der Nutzer gibt die in der Klausur zu erreichende Gesamtpunktzahl
    ein. Eine Prüfung gilt als bestanden, wenn der Teilnehmer mindestens 40% der Gesamtpunktzahl erreicht ""))

    ich habe den Code so geschrieben :

    #include<isotream>
    #include<fstream>

    int main()
    {
    int ergebnis [400][10]
    for (int i=0 ;i<400; i++)
    {
    for (char j=0; j<10 ; j++)
    { cin >>ergebnis [i][j]
    }
    cout <<endl;
    }
    int N
    ifstream einlesen ("data.txt")
    einlesen >>N ;
    einlesen.close();

    int maxpunkt , minpunkt;
    cout >>"geben Sie die maximalpunkt ";
    cin<<maxpunkt;

    minpunkt =maxpunkt*0,4

    int bestehender=0
    while (ergebnis [i][j] > minpunkt)
    bestehender ++

    float anteil;
    anteil = bestehender/ N*100;
    cout>> anteil;

    return 0;



  • Der Code ist falsch.

    Aber das hätte ein Probelauf schon gezeigt.

    @peter00 sagte in Matrizen c++ Prüfungsaufgabe:

    while (ergebnis [i][j] > minpunkt)

    Welche Werte haben i und j an der Stelle?

    Du darfst gerne Debugausgaben (mit cout) in den Code einfügen.

    Du liest 4000 Werte von der Console ohne Hinweistexte ein.
    Du liest nur ein Wert aus einer Datei ein

    Und noch andere Fehler, die durch die Unformatierung nicht auffallen.



  • Geht das überhaupt ohne struct?



  • @ycbm Natürlich.



  • @ycbm sagte in Matrizen c++ Prüfungsaufgabe:

    Geht das überhaupt ohne struct?

    Will man es ohne struct realisieren?



  • Ich versuche auch grad das Prog zu schreiben. Ist dieses variable[x][y] der richtige weg? Gerne auch per pm will mich hier nicht einmischen



  • Habe das so geschrieben, wie ginge das besser? Ich verstehe nicht diese variable[x][y] nicht...

    #include<iostream>
    #include<fstream>
    
    using namespace std;
    
        void menue ();
    	void eintrag();
    	void ergebnisse();
    	void loeschen();	
    	
    
    	int menueeingabe = 0;	
    	int id = 0;
    	int studierende[400];
    	char studienfach[400];
    
    int main () {	
    	menue();	
    }
    
    //        Menü
    void menue () {
    	do {	
    	cout << "Abschlussergebnisse" << endl << endl
    	<< "(1) Eintrag" << endl
    	<< "(2) Ergebnisse" << endl
    	<< "(3) Formular loeschen " << endl
    	<< "(5) Programm beenden" << endl << endl
    	<< "Eingabe: ";  
    	
    	cin >> menueeingabe;
    	cout << endl << endl;
    	if (menueeingabe == 1) 
    	eintrag();
    	else if (menueeingabe == 2)
    	ergebnisse();
    	else if (menueeingabe == 3)
    	loeschen();
    	else if (menueeingabe == 5)
    	cout << "Programm beendet";
    	else
    	cout << "Falsche Eingabe" << endl;
    	
    	} while (menueeingabe != 5);
    }
    
    //        Eintrag
    void eintrag () {
    	cout << "Geben Sie Ihr Studienfach ein: "; 
        char studieneingabe;
    	cin >> studieneingabe;
    	studienfach[id] = studieneingabe;
    	cout << endl << "Geben Sie Ihre erreichte Punktzahl ein: ";
    	int punktzahl;
    	cin >> punktzahl;
    	studierende[id] = punktzahl;
    	ofstream schreiben;
    	schreiben.open("studienergebnisse.txt", ios::app);
    	schreiben << "Punktzahl: " << endl << punktzahl << endl << "Studienfach: " << endl << studieneingabe << endl;    schreiben.close();
    	id++;
    	system ("cls");
    	cout << "Eintrag erfolgreich" << endl << endl;
    
    	menue ();
    }
    
    //        Ergebnisse
    void ergebnisse() {
    	int bestanden = 0, durchgefallen = 0, fehlend = 400 - id;
    	for (int i = 0; i < id; i++) {
    		if (studierende[i] < 40)
    		durchgefallen++;
    		else if (studierende[i] >= 40)
    		bestanden++;		
    		}		
    	cout << "Bei einer Gesamtzahl von 400 Studierenden" << endl
    	<< "haben\t\t" << bestanden << " bestanden" << endl
    	<< "sind\t\t" << durchgefallen << " durchgefallen " << endl
    	<< "und haben\t" << fehlend << " nicht teilgenommen" << endl << endl;
    	system("pause");
    	system("cls");
    	menue();
    }
    
    //         Loeschen
    void loeschen() {
        ofstream loeschen;
        loeschen.open("studienergebnisse.txt");
        loeschen << "";
        loeschen.close();
        system("cls");
        cout << "Liste geloescht" << endl << endl;
        menue();
    }
    


  • Was meinst du denn mit variable[x][y] und was verstehst du daran nicht?

    Und ein paar Hinweise:

    • Vermeide globale Variablen!
    • Systemaufrufe (wie system(...)) solltest du gar nicht benutzen (ist ja plattformabhängig)!
    • Warum rufst du menue() rekursiv in den anderen Funktionen auf?
    • Du hast auch nicht die Gesamtpunktzahl eingeben lassen (und dementsprechend ist die Abfrage in ergebnisse() auch falsch).
    • Und die Liste der Studierenden und deren Punktzahl soll wohl aus einer Datei gelesen werden (wer will schon jedesmal diese Daten neu eintragen?).
    • Du solltest dann auch die IO-Funktionalität in eigene Funktionen auslagern.
    • Und sicherlich (wie schon angesprochen) macht es Sinn, eine Struktur (bzw. Klasse) hierfür anzulegen.


  • Den letzten Punkt dachte ich auch aber wenn er es nicht macht, hat er es wohl noch nicht gelernt und soll es ohne lösen.
    Mit dem auslesen stimmt auch, kann ich aber noch nicht, da file >> x >> etc. Ja nicht geht weils nicht nur zahlen sind, also erstmal gelassen

    Ich mein ich frag mich ganze zeit weshalb er variable[x][y] gemacht hat das ist doch einfach nur falsch oder? Er dachte wohl in y den studiengang speichern zu können? Ist es falsch oder verstehe ichs nicht. .

    Danke für die Tipps.



  • Achso, du meinst int ergebnis [400][10]. @peter00 hat damit wohl ein Array von je 400 Studierenden je Studiengang anlegen wollen (aber dann müßten die Studiengänge ja auf die Indizes 0-9 begrenzt sein, nicht einzelne Zeichen).
    Wobei ich aus der Aufgabenstellung keinen Sinn für die Lösung der Aufgabe sehe, den Studiengang noch einzulesen (wenn die aber in der einzulesenden Datei stehen, so müssen diese zumindestens überlesen werden).


Log in to reply