Zweites(Zeiger?) Array sortieren



  • Danke, ich habe mir die Funktion malloc durchgelesen.

    Korrigiere mich bitte wenn ich etwas falsch (oder garnicht) verstanden habe:

    numArray2 = (int *) malloc(100);
    
    for(i=0;i<100;i++){
    numArray2[i]=numArray[i];
    }
    

  • Mod

    So muss das heißen, falls du 100 ints möchtest:

    numArray2 = (int *) malloc(100*sizeof(int));
    

    Den Cast kann man übrigens auch weglassen.

    Aber warum immer diese magische 100? Du weißt doch schon, dass du length Elemente benötigst und nicht 100!



  • SeppJ schrieb:

    Den Cast kann man übrigens auch weglassen.

    Sorry, aber was ist der "Cast"?

    SeppJ schrieb:

    Du weißt doch schon, dass du length Elemente benötigst und nicht 100!

    Bisher habeich leider noch keine Funktion zustande bekommen die mir ausgibt wie viele Datensätze ich habe, das heißt zurzeit weiß ich die Anzahl nur weil ich per Hand nachgezählt habe.



  • Cast "(int*)" bedeutet soviel wie explizite Typkonvertierung.

    Wieviele Elemente in deinem Array vorhanden sind, musst du dir entweder vorher in einer extra Variablen merken, oder du kennzeichnest das letzte Element in dem Array mit einem Wert, welcher nicht vorkommen darf, also zB -1, wenn klar ist, dass keine negativen Werte vorkommen.



  • Ich habe jetzt eine Variable "laenge", in der die Anzahl der Datensätze gespeichert ist, die Funktion müsste dann also:

    numArray2 = (int) malloc(laenge*sizeof(int));	
    
    for(i=0;i<100;i++){
    numArray2[i]=numArray[i];
    }
    

    heißen, ist das richtig?

    Wenn ja würde mich das ein großes Stück weiterbringen! 🙂



  • statt

    for(i=0;i<100;i++){
    

    lieber

    for(i=0;i<laenge;i++){
    

    Das sollte dann so passen.



  • Und wieder was übersehen, danke für die Hilfe 😉



  • Ich habe jetzt einen Testlauf gemacht, bekomme aber eine Fehlermeldung:
    "numArray2 undeclared".
    Muss ich das zu erzeugende Array nun noch vor der main-Funktion deklarieren?
    Wäre das dann "int numArray2" oder "int numArray2[]" oder wie müsste das dann aussehen?


  • Mod

    Metalmind01 schrieb:

    Ich habe jetzt einen Testlauf gemacht, bekomme aber eine Fehlermeldung:
    "numArray2 undeclared".
    Muss ich das zu erzeugende Array nun noch vor der main-Funktion deklarieren?
    Wäre das dann "int numArray2" oder "int numArray2[]" oder wie müsste das dann aussehen?

    Code herzeigen!



  • void Bubblesort(int *array)    //Bubblesort-Funktion
    {
        int i;
        int j;
        int laenge;
        for (i=0;i<laenge;++i) {
            for (j=0;j<laenge-i-1;++j) {
     	    if (array[j]>array[j+1]) {
     	        int tmp = array[j];
     		array[j] = array[j+1];
     		array[j+1] = tmp;
                }
            }
        }
    }
    
    int laenge;    //Anzahl der Datensätze, die in numArray gespeichert werden
    int numArray[100];
    
    int main (void)
    {
    
        laenge=10;    //zum Beispiel, wird eigendlich durch eine weitere Funktion ermittelt
    
        numArray2 = (int) malloc(laenge*sizeof(int));   //Zweites Array der Länge "laenge" erstellen
        for(i=0;i<laenge;i++){                         //und dynamisch mit dem ersten bespeichern
            numArray2[i]=numArray[i];
        }
    

    Mir geht es jetzt hauptsächlich um den Teil, in dem das Zweite Array erzeugt werden soll, hier bekomme ich den besagten Fehler, dass numArray2 nicht deklariert wurde.


  • Mod

    Es wurde ja auch nirgends deklariert!

    int *numArray2 = (int*) malloc(laenge*sizeof(int));
    


  • Der Fehler in der Zeile

    numArray2[i]=numArray[i];
    

    wird jetzt durch die Meldung:
    "error: subscripted value is neither array nor pointer" ersetzt, wobei numArray eindeutig ein funktionierendes Array ist, es muss also an numArray2 liegen.



  • Habe es schon selbst gelöst, nochmal Danke an alle die mir geholfen haben!


Anmelden zum Antworten