"Sortierfunktion"



  • Hallo zusammen,
    könnte jemande mir in diese Aufgabe helfen :

    Gegeben sei die folgende Datenstruktur für Speicherung von Studentendaten:

    typedef struct {
    char Name[20];
    unsigned long Matrikelnummer;
    } StudentT;
    wowie eine Funktion compareByName, die zwei Studentendatensätze s1 und s2 nach
    dem Namen vergleicht. Die Funktion liefert einen Wert < 0 zurück, falls der
    Name von s1
    kleiner ist als der von s2, 0 falls die Namen gleich sind und einen Wert > 0
    falls Name von
    s2 größer als der von s1.
    int compareByName(StudentT s1, StudentT s2){
    return strcmp(s1.Name, s2.Name);
    }
    1.Definieren Sie eine Funktion sortStudents, welche ein Array von
    StudentTElementen nach einem durch eine „Call-Back“-Funktion vorgegebenes
    Vergleichskriterium sortiert.
    Der Funktion sollen drei Parameter übergeben werden: s = zu sortierendes Array
    von Studenten, n = Anzahl Elemente des Arrays und cmp = Zeiger auf eine
    Vergleichsfunktion mit einer Signatur entsprechend den obigen
    Vergleichsfunktionen. Verwenden Sie für die Implementierung einen
    Sortieralgorithmus Ihrer Wahl.

    2. Schreiben Sie ein Hauptprogramm, in dem ein (kleines, mindestens drei
    Elemente umfassendes) Array von Studenten definiert und initialisiert wird.
    Notieren Sie die Anweisungen um dieses Array mit Hilfe der Funktion
    sortStudents nach Name bzw.nach Matrikelnummer zu sortieren.

    Ich danke für Ihre Hilfe



  • Was hast du denn bereits gemacht? Hier wird dir bestimmt keiner die Aufgabe einfach vorloesen - da braucht es schon etwas mehr Eigeninitiative.

    Fange mal an und wenn du konrekte Fragen hast, dann stelle sie hier. Dann wird dir auch sicher geholfen.

    PS:
    Bitte cpp-Tags verwenden. Sonst kann man deinen Code nicht lesen.



  • Ich möchte darauf hinweisen, dass diese Aufgabe erst mal wenig mit C++ zu tun hat, sondern eher nach C-Stil aussieht.

    > könnte jemande mir in diese Aufgabe helfen

    Klar! Gerne! Wo hakt es denn? Wie weit bist Du? Was ist unklar?



  • Dieser Thread wurde von Moderator/in pumuckl aus dem Forum C++ (auch C++0x, bzw. C++11) in das Forum C (C89 und C99) verschoben.

    Im Zweifelsfall bitte auch folgende Hinweise beachten:
    C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?

    Dieses Posting wurde automatisch erzeugt.



  • Wow, die Übungszeit für Studies mit Progaufgaben mit einem harten und motivierenden Bezug zum Leben ist ausgebrochen.
    Der wievielte Thread ist das, wo einer nach Lösung seiner Matrikel-Studienamen Aufgabe quäkt?



  • Semester ist/geht halt vorbei. Was hast du erwartet 🙂



  • Es ist echt köstlich, vor allem da diese Aufgaben für etwas motiviertere Achtklässler zu lösen wären.



  • Besonders nett wenn sich die faulen Säcke Frauennamen geben und damit größere Hilfsbreitschaft verschaffen wollen.
    Da war mal was mit einer Tanja.



  • icarus2 schrieb:

    Was hast du denn bereits gemacht? Hier wird dir bestimmt keiner die Aufgabe einfach vorloesen - da braucht es schon etwas mehr Eigeninitiative.

    Fange mal an und wenn du konrekte Fragen hast, dann stelle sie hier. Dann wird dir auch sicher geholfen.

    PS:
    Bitte cpp-Tags verwenden. Sonst kann man deinen Code nicht lesen.

    so habe den Versucht erst für den 1.Frage:

    #include <stdlib.h>

    int cmpFunc(const void* _s1, const void* _s2)
    {

    if(*s1 > *s2) return1;
    else
    if(*s1 == *s2) return 0;
    else return -1;
    }
    void Student()
    {
    char* s=studentT;
    qsort((void*) s,20,sizeof(s),cmpFunc);

    }
    habe da übrigens was richtig...bin halt anfänger 🙄 ...danke



  • diana.2020 schrieb:

    icarus2 schrieb:

    PS:
    Bitte cpp-Tags verwenden. Sonst kann man deinen Code nicht lesen.

    so habe den Versucht erst für den 1.Frage:

    #include <stdlib.h>
    
    int cmpFunc(const void* _s1, const void* _s2)
    {
    
          if     (*s1 > *s2)  return1;         
          else if(*s1 == *s2) return  0;   
          else                return -1;    
    }
    
    void Student()
    {
         char* s=studentT;
         qsort((void*) s,20,sizeof(s),cmpFunc);
    
    }
    

    Die cpp Tags benutzt du, indem du den Code markierst und den C/C++ Button unter den 🙂 😃 anklickst. Dann sieht das so schön bunt aus.



  • DirkB schrieb:

    diana.2020 schrieb:

    icarus2 schrieb:

    PS:
    Bitte cpp-Tags verwenden. Sonst kann man deinen Code nicht lesen.

    so habe den Versucht erst für den 1.Frage:

    #include <stdlib.h>
    
    int cmpFunc(const void* _s1, const void* _s2)
    {
    
          if     (*s1 > *s2)  return1;         
          else if(*s1 == *s2) return  0;   
          else                return -1;    
    }
    
    void Student()
    {
         char* s=studentT;
         qsort((void*) s,20,sizeof(s),cmpFunc);
    
    }
    

    Die cpp Tags benutzt du, indem du den Code markierst und den C/C++ Button unter den 🙂 😃 anklickst. Dann sieht das so schön bunt aus.

    danke für deine Anmerkung 😉



  • kann jemand schreiben was da falsch habe ???...danke



  • #include <stdlib.h>

    int compareByName(const void* _s1, const void* _s2)
    {

    if (*s1 > *s2) return1;
    else
    if(*s1 == *s2) return 0;
    else return -1;
    }

    void Student()
    {
    char* s=studentT;
    qsort((void*) s,20,sizeof(s[0]),compareByName);

    }

    ist das so richtig ??



  • diana.2020 schrieb:

    ist das so richtig ??

    Nein.

    cpp Tags vergessen (kannst du als Mitglied noch nachliefern)

    Im Funktionskopf steht _s1, im Rumpf dann s1
    Was soll *s1 bei void sein?

    Das meckert doch der Compiler schon an, also ist doch die Frage: "Was ist da falsch?"

    Such doch mal im Forum nach qsort. Da gibt es einige Beispiele.



  • DirkB schrieb:

    Such doch mal im Forum nach qsort.

    Oder ein C Buch im (Online)Laden deiner Wahl. Und dann dieses gruendlich durchlesen.


Anmelden zum Antworten