array sortieren

nee, nix informatisches, eher biologisch ;)

Ich habe (unter anderem) dieses Array gebaut und anschließen dann deinen Code eingefügt

Ich häng mal den in meinen Augen interessanten Teil des Codes an

Code:
//make new list in order of number of flows that contribute to the runon
	for (int i=0; i<xsize; i++)
          for (int j=0; j<ysize; j++)
          {
            surroundFlow[i][j]=0;
            //Anzahl der 8 umgebenden Zellen, die in die angeschaute entleeren; im ganzen Grid auf 0 setzen
          }




        //Array initialisieren, mit i Reihen und 3 Spalten, in dem das komplette Grid aufgelistet wird
        for (int i=0; i< xsize * ysize;i++)
            {//1
                runoff_list [i] [0] =-1;
                runoff_list [i] [1] =-1;
                runoff_list [i] [2] =-1;
             }//1


       //gesamtes Grid durchgehen
        for (int i=0; i<xsize; i++)
          for (int j=0; j<ysize; j++)
            {
              //Die 8 umgebenden Zellen jeder Zelle durchgehen
              for (int k=max(0,i-1); k<=min(i+1,xsize-1); k++)
                for (int l=max(0,j-1); l<=min(j+1,ysize-1); l++)
                {
                  if (((runoffdirection[k][l]-runoffdirection[k][l]%ysize)/ysize == i) && (runoffdirection[k][l]%ysize == j))
                  //wenn die angeschaute der umgebenden Zellen in die angeschaute [i][j] Zelle entleert
                  {
                     surroundFlow[i][j]++;
                     //dann wird dieser Wert aufsummiert -> am Ende hat man die Anzahl der zufließenden umgebenden Zellen
                  }

                }

                     helpFlow = surroundFlow[i][j];
                     //Den Wert der zufließenden Zellen an Variable übergeben

                     runoff_list [position][0] = helpFlow;
                     //Den Wert in die erste Spalte des Arrays eintragen (0 wenn keine Zelle etwas einträgt)

                     runoff_list [position][1] = i;
                     //i-Position in die zweite Spalte

                     runoff_list [position][2] = j;
                     //j-Position in die dritte Spalte

                     position++;
                     //Position im Array immer eins weiter gehen (von 0 bis 99) -> so viele Reihen wie das Grid Zellen hat
            }

         writeFlowList();
         //Datei mit der Anzahl der entleerenden Zellen schreiben


//sortieren
/*  int comp_3(const void *v1, const void *v2)
  {
  int* a = (int*)v1;
  int* b = (int*)v2;

  if (x[0] != y[0]) return x[0] - y[0];
  else return x[1] - y[1];
}*/
 
Hattest du nicht gesagt, das dort kein anderer Code mehr steht? Irgendwie reden wir aneinander vorbei.

Du weißt schon, das du eine Funktionsdefinition nicht einfach mitten in eine andere Funktionsdefinition schreiben kannst? :suspekt:

Gruß
 
warum? weil es mir absolut schwer fällt in programmsprache zu denken

unter meine obige funktion hab ich nun dies geschrieben:

Code:
int comp_3(const void *v1, const void *v2) {
  int* a = (int*)v1;
  int* b = (int*)v2;

  if (a[0] != b[0]) return a[0] - b[0];
  else return a[1] - b[1];
}



qsort(runoff_list, position, sizeof(runoff_list[0]),comp_3);

1. bei qsort sagt er mir, dass ein typname erwartet wird und dass die konvertierung von int [3] nach int nicht möglich ist

2. wie ruf ich diese funktion auf? schreib ich an der stelle wo sie sein soll comp_3(); ?

achso, position ist bei mir der erste wert des array[position][3]
 
Code:
qsort(runoff_list, position, sizeof(runoff_list[0]),comp_3);

1. bei qsort sagt er mir, dass ein typname erwartet wird und dass die konvertierung von int [3] nach int nicht möglich ist
Es scheint du hast du notwendige Headerdatei immer noch nicht eingebunden.
2. wie ruf ich diese funktion auf? schreib ich an der stelle wo sie sein soll comp_3(); ?
Nein, du mußt die Adresse der Funktion übergeben, nicht aufrufen.
achso, position ist bei mir der erste wert des array[position][3]
Das ist dann falsch. Als 2. Argument muss qsort() die Anzahl der Elemente übergeben werden. Ansonsten sollte es schon stimmen.

Gruß
 
ok, bis auf den fehler mit dem typnamen stimmt es jetzt

headerdateien bei mir sind (u. a.), die in der hilfe angegebenen
#include <stdio.h>
#include <stdlib.h>
#include <string.h>



danke auf jeden fall für eure geduld! ich bin ja doch etwas begriffsstutzig :D
 
Zurück