Adrenalin88 Geschrieben 30. März 2011 Teilen Geschrieben 30. März 2011 Hallo zusammen, hier erstmal der Code: void selection_sort(int A[],int l,int r) { int i,j,min; for(i=l;i<r;i++) { min=i; for(j=i+1;j<=r;j++) { if(A[j]<A[min]) min=j; } exchange(A,A[min]); } } Ich muss noch die Funktion exchange erstellen. Aber irgendwie bekomme ich das nicht hin. Der Compiler gibt immer eine Fehlermeldung aus. Ich dachte mir folgenden Code, aber das klappt leider nicht: void exchange(int *A,int * { int temp; temp=*A; *A=*B; *B=temp; } Wäre nett, wenn mir einer da weiterhelfen könnte. Adrenalin88 Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Klotzkopp Geschrieben 30. März 2011 Teilen Geschrieben 30. März 2011 Entweder übergibst du beim Aufruf die Adressen der Arrayelemente, oder du änderst die Parametertypen in Referenzen (nur C++). Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Adrenalin88 Geschrieben 30. März 2011 Autor Teilen Geschrieben 30. März 2011 Ja, das habe ich mir auch gedacht, dass ich die Adressen der Arrayelemente übergebe. Nur was ich mich frage ist halt, ob der Funktionsrumpf überhaupt korrekt ist, sprich, muss ich dem Compiler klarmachen, dass es sich hierbei um Arrayelemente handelt also exchange(int *A[],int *B[]) ??? Ich weiss leider nicht, wie ich dem Compiler klar machen soll, dass es sich um Arrayelemente handelt. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Klotzkopp Geschrieben 30. März 2011 Teilen Geschrieben 30. März 2011 Ich weiss leider nicht, wie ich dem Compiler klar machen soll, dass es sich um Arrayelemente handelt.Das brauchst du nicht. Die Funktion tauscht zwei ints, fertig. Dass das hier zwei Elemente eines Arrays sind, ist für die Tauschfunktion uninteressant. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Adrenalin88 Geschrieben 30. März 2011 Autor Teilen Geschrieben 30. März 2011 Ja das habe ich mir auch schon gedacht. Aber wenn ich das jetzt folgendermaßen mache: void exchange(int *a,int * { int temp; temp=*a; *a=*b; *b=temp; } und wie du schon sagtest die Adressen der Arrayelemente übergeben, sprich: exchange(&A,&A[min]); Dann spuckt der Compiler mir ne Warnung und ne Fehlermeldung aus: warning C4013: 'exchange' undefiniert; Annahme: extern mit Rückgabetyp int error C2371: 'exchange': Neudefinition; unterschiedliche Basistypen Was ist bitte daran falsch??? Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Klotzkopp Geschrieben 30. März 2011 Teilen Geschrieben 30. März 2011 (bearbeitet) Du verwendest exchange, ohne die Funktion vorher deklariert zu haben. In C nach dem Standard von 1990 ist das erlaubt, aber der Compiler geht dann davon aus, dass die Funktion den Rückgabetyp int hat. Das ist die Warnung. Im weiteren Verlauf findet der Compiler dann die Funktionsdefinition von exchange, aber da hat sie den Rückgabetyp void. Das passt nicht zur vorausgegangenen (impliziten) Deklaration, daher der Fehler. Du kannst das verhindern, indem du exchange vor der Verwendung in selection_sort deklarierst: void exchange(int *A,int *;[/code] In diesem einfachen Fall könntest du auch einfach die exchange-Funktion vor die selection_sort-Funktion stellen. Bearbeitet 30. März 2011 von Klotzkopp Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Adrenalin88 Geschrieben 30. März 2011 Autor Teilen Geschrieben 30. März 2011 Funktioniert jetzt! Danke! Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Empfohlene Beiträge
Dein Kommentar
Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.