Programm zum Namen sortieren



  • Hallo Leute 🙂

    ich bin Student im Maschinenbau und habe auch Informatik als Modul.

    Ich soll ein Programm schreiben, das mir eine beliebige Anzahl (fiktiver) Studenten nach Eingabe ihres Vor- und Nachnamens sowie ihrer Matrikelnummer diese nur nach ihrem Nachnamen sortiert.

    Soweit so gut, das Programm funktioniert, aber: Wenn ich dann die geforderten Daten eingebe, dann sortiert mir das Programm alles, nicht nur die Nachnamen.

    Also aus beispielsweise:

    Robert Mueller 123456
    Albert Einstein 654321
    Nikola Tesla 987654

    macht er mir:

    Robert Einstein 123456
    Albert Mueller 654321
    Nikola Tesla 987654

    Finde leider den Fehler im Code nicht 😕 Könntet ihr eventuell darüber gucken?

    #include <iostream>
    #include <cmath>
    #include <string>
    #include <iomanip>
    using namespace std;
    void main(void)
    {
    	int g, i, j, n;
    	string vn[100];
    	string nn[100];
    	string k;
    	int mnr[100];
    	cout << "Bitte geben Sie die Anzahl der Studenten ein..." << endl;
    	cin >> n;
    	cout << "Bitte geben Sie den Vor- und Nachnamen sowie die Matrikelnummer ein..." << endl;
    	for (i = 0; i < n; i++)
    	{
    		cin >> vn[i] >> nn[i] >> mnr[i];
    		vn[i][0] = toupper(vn[i][0]);
    		nn[i][0] = toupper(nn[i][0]);
    		for (j = 1; j < vn[i].size(); j++)
    		{
    			vn[i][j] = tolower(vn[i][j]);
    		}
    		for (j = 1; j < nn[i].size(); j++)
    		{
    			nn[i][j] = tolower(nn[i][j]);
    		}
    	}
    	for (i=0;i<n;i++)
    	{
    		for (j = i + 1;j < n;j++)
    		{
    			if (nn[i] > nn[j])
    			{
    				k = nn[i];
    				nn[i] = nn[j];
    				nn[j] = k;
    			}
    		}
    	}
    	cout << "Nach Nachnamen sortiert:" << endl;
    	for (i = 0;i < n;i++)
    	{
    		cout << vn[i] << "\t" << nn[i] << "\t" << mnr[i] << endl;
    	}
    }
    


  • Sorry, etwas dumm formuliert: Das Programm sortiert mir die Eingabe nur nach dem Nachnamen. Allerdings sollen Vorname, Nachname und Matrikelnr. übereinstimmen und alphabetisch nach Nachnamen sortiert werden.



  • Weißt du denn, wo in deinem Programm sortiert und wie das gemacht wird?



  • Ferovic schrieb:

    Hallo Leute :)Finde leider den Fehler im Code nicht 😕 Könntet ihr eventuell darüber gucken?

    In deinem Code ist kein Fehler, er tut genau das was er soll. Du verstehst ihn aber offenbar nicht, wie kann das sein? Also ich hoffe bei euch Schlossern ist das keine Siebklausur 😃
    Hier bietet es sich an, aus den drei Arrays eins zu machen, mit 3 Spalten, oder besser 4. Für die erste Spalte würde ich einen fortlaufenden Index nehmen.
    Vielleicht solltest du dir aber mal Gedanken machen, wieso es nicht das tut was du willst und deinen eigenen Code verstehen...



  • Du änderst nur die Reihenfolge im Array nn, daher stimmt da die Ordnung. Das Array vv und mnr bleiben in der alten Reihenfolge.

    Btw: In C++ würde man std::vector für dynamische Array Größen und sonst std::array verwenden.
    Und wenn der Benutzer deines Programms mehr als 100 Studenten eingeben wollen würde, würde dein Programm abstürzen.

    Anbieten würde sich eine Klasse Student mit einer < Relation auf Nachnamen, und dann die Sortierung mit std::sort 😉



  • Hab den Fehler - oder eher meine Dummheit 🙄 - gefunden. Bei mir hats abgeholfen, in der letzten if-Schleife noch vn und mnr einzufügen. Seitdem klappts 🙂 Danke an alle Beteiligten!




Log in to reply