Array von Struct an Funktion übergebn
-
danke!
leider sagt mein dev c++ compiler: n was not declared in this scope:(
-
Wenn ich das richtig im Kopf habe, benutzt der einen (alten) gcc. Schreib mal -std=c99 in die Compileroptionen - allerdings sollte der sich aber so oder so über Arrays variabler Länge beschweren.
Und wird Dev-C++ nicht seit mehreren Jahren nicht mehr weiterentwickelt? Ich würde mich an deiner Stelle mal nach einem zeitgemäßen Compiler bzw. einer zeitgemäßen IDE umsehen.
-
Jürgen123 schrieb:
leider sagt mein dev c++ compiler: n was not declared in this scope:(
Lies mal das:
http://www.c-plusplus.net/forum/viewtopic-var-t-is-237002.html
-
danke für die Tips!
benutze jetzt code blocks, is ja auch echt ein viel besserer editor!
das problem habe ich jetzt erstmal damit gelöst dass ich die "struct arrays" einfach global definiert habe.
habe allerdings schon wieder ein neues problem:)
und zwar gehts um qsort was ich gerne benutzen würde...
also wie schon vorher habe ich:enum{n=10); struct data { int val; int zahl; }; struct data foo[n][n];
jetzt würd ich gern alle foo[n][n] nach foo[n][n].val aufsteigend sortieren. dafür gibts ja eigentlich schon qsort
http://www.c-plusplus.net/forum/viewtopic-var-t-is-241826.html hier wurde das schonmal gemacht, allerdings benutzen die einen struct-pointer array, was auch immer das bringt:)
da brauch ich irgendne compare funktionint compar(const void *A, const void *B) { jo *a=(data *)A; jo *b=(data *)B; if(a->batch_release > b->batch_release) return 1; if(a->batch_release< b->batch_release) return -1; } qsort(foo,n,sizeof(data),compar);
nunja leider scheint das vorne und hinten nich zu funktionieren und ich weiss uach nich wirklich was ich da mach:)
würd mich freun wenn mir noob nochmal jemand helfen könnte:)
-
Jürgen123 schrieb:
int compar(const void *A, const void *B) { jo *a=(data *)A; jo *b=(data *)B; if(a->batch_release > b->batch_release) return 1; if(a->batch_release< b->batch_release) return -1; } qsort(foo,n,sizeof(data),compar);
Wer schreibt denn sowas?! Machs lieber so:
int compar(const void *A, const void *B) { return ((data *)A)->batch_release - ((data *)B)->batch_release; }
Die Fallunterscheidung ist völlig unnötig, und der Fall, dass die beiden gleich sind, sollte auch berücksichtigt werden. Ein vernünftiger Compiler sollte bei der Wolfroutine da oben bemerken, dass sie nicht in allen Fällen was zurückgibt.
Sodann: willst du nach
val
oder nachzahl
sortieren? Und wie ist das mit der 2. Dimension deines Arrays?
-
hey danke schonmal:)
diesen quellcode den ich da geschrieben hab hab ich nur irgendwo im itnernet gefunden:)
eigentlich hat das array mittlerweile schon 3 dimensionen, macht das n unterschied?
ups und ich seh gerade dass ich in meinem post beim kopieren n bisschen was vermixt habe. das batch_release is in meinem programm im struct drin, aber nich so wichtig..
also wenn ich habeenum{n=10); struct data { int val; int zahl; }data foo[n][n][n];
will ich z.b. nach aufsteigender zahl sortieren.
was ich später auch noch machen werden muss ist zuerst nach zahl sortieren, unnd für gleiche zahl dann nahc val sortieren.. ohje ohje :))
-
enum{n=10); struct data { int val; int zahl; }data foo[n][n][n];
Wozu eigentlich dieses enum?
Jürgen123 schrieb:
eigentlich hat das array mittlerweile schon 3 dimensionen, macht das n unterschied?
...
will ich z.b. nach aufsteigender zahl sortieren.Gute Idee, mach das. Ich frag mich nur: was soll das heissen? Willst du jede Zeile sortieren? Oder jede Spalte? Die 3. Dimension sprech ich lieber erst mal gar nicht an...
-
ich will soviel sortieren hahaha:)
ne also z.b.:for(i=0;i<n;i++){ for j=0,j<n;j++){ sort foo[1][i][j].val;}}
das problem bei mir ist halt auch die variabilität, einmal will ich nach der einen variable z.b. zahl, dann wieder nach val, das eine mal absteigend und das andere mal aufsteigend, und wieder das eine mal die ganze matrix, und dann vielleicht nur die eine spalte der matrix.
also echt kompliziert, da wäres echt besser wenn man ahnung von der sache hat:)
-
Du brauchst für die verschiedenen Arten des Sortierens jeweils eine eigene Sortierfunktion.
(Ok, das war jetzt wohl nicht sehr hilfreich :D.)
Willst du z.B. nur eine Spalte sortieren, so kopierst du sie in einen Zwischenpuffer. Diesen Puffer sortierst du und schreibst ihn zurück in die Matrix. Hier spielt die Dimension prinzipiell keine Geige.
Eventuell könnte es hilfreich sein sich zu überlegen, ob sich die Aufgabe (welche auch immer) ohne mehrdimensionale Matrizen einfacher lösen lässt.Gru-huß,
B.B.
-
enum hab ich als define alternative genommen, (für die globalen fixen variablen) leider brauch ich mindestens 2 dimensionen;(
und klar brauch ich verschiedene funktionen z.b. fürs auf und absteigend sortieren, aber vom prinzip her werden sie ja gleich sein (und das prinzip fehlt mir noch:) )
das mit dem rauskopieren ist ne gute idee nur vielleicht etwas langsam.das ganze wird übrigens n metaheuristik algo(tabusearch) zur maschinenbelegungsoptimierung. das muss ja mal gesagt sein wo ihr mir ja immer schon so gute tips gebt.