Eine zusätzliche Frage..könnte man das Array sensor_AND_1 in der
Funktion auch variabel machen, damit ich die ganze Sortiererei in eine
eigen Funktion packen kann? zb
Hallo.
da gab es keinen speziellen Grund, im aktuellen Code ist das jetzt
übernommen
Also ich möchte das 3D Array sensor_AND_1 an eine Funktion übergeben.
Mir ist diese Übergabe nicht klar
Also wenn ich mir das anschaue, dann kommt mir dein 2D-array schon
grundlegend verkorkst vor.
Du schreibst im Kommentar "swap id & state", dabei änder sich aber der
Index mit dem Namen "NUM_OF_MAX_SENSORS". Wie passt denn das zusammen?
Wenn Du 10 Sensoren hast, dann kann doch auf index Ungerade nicht die id
und auf Index Gerade der Zustand sein.
Bring das mal in Ordnung und verwende structs. Dann kapierst du und
Andere das auch.
Oder stammt das Konstrukt aus der Arduino-IDE? Das würde einiges
erklären!
Hans schrieb:> Also ich möchte das 3D Array sensor_AND_1
Aha, dachte ich es mir doch. Das ist kein 3D-array. Bring den Mist erst
mal auf ordentliche Beine und dann mach weiter.
Und danach nimm qsort aus der C-lib her ...
Das hilft mir jetzt leider nicht weiter. Ich möchte kein struct
verwenden, sondern ein mehrdimensionales Array.
Die Sortierung scheint in der jetzigen Version ja zu funkionieren, oder
sollte es nicht??
1
for(uint8_tc=0;c<NUM_OF_MAX_SENSORS-1;c++){// do a bubble sort
Hans schrieb:> Ich möchte kein struct> verwenden, sondern ein mehrdimensionales Array.
Geh doch mal auf mein Posting von 18:17 ein und versuch das zu erklären
was du da machst. IMHO ist das falsch.
Und wie viele Dimensionen hat dein Array jetzt? 2 oder 3?
Und du sollts dein mehrdimensionales array durch ein array von structs
ersetzen, weil das mit deiner id und state ganz offensichtlich in die
Hose gegangen ist. Der Grund ist, dass du deine Daten nicht ordentlich
strukturiert hast. Sowas fängt prinzipiell mit einem typedef an (ausser
den type gibt es schon).
Ich habe das Beispiel übernommen, weil ich selbst das nicht hinbekommen
habe mit mehreren Dimensionen.
Das Array ist so definiert:
byte sensor_AND_1[3][10] = { {0}, {0}, {0} };
Das ist dann wohl ein 2D array. Ich bin da auch nicht so firm in dem
ganzen und beschäftige mich nicht beruflich damit.
Das wäre das ganze Programm, welches wie gewünscht diese Aussage
erzeugt:
Es wird nach ID sortiert und alles ID>0 ausgegeben
Kennt sich jemand anders damit aus wie man das Array an eine Funktion
übergibt und dann damit weiter arbeitet?
Ich müsste 3 verschiedene Array sortieren. Jetzt kann ich natürlich
einfach 3 mal den Sortiercode untereinanderpacken, aber vielleicht ginge
es ja noch kompakter? Würde mich halt interessieren wie man das
übergibt, ansonsten lass ich es so, da es wunderbar funktioniert.
Nuja klar.. du kannst die Sortierschleife(n)
in eine funktion packen (void) und
der den pointer zu dem zu sortierenden Array übergeben,
welches Array du dann übergibst ist dann egal,
solange es passend dimensioniert und formatiert ist zur Sortierschleife
versteht sich.
'sid
> Kennt sich jemand anders damit aus wie man das Array an eine Funktion> übergibt und dann damit weiter arbeitet?> Ich müsste 3 verschiedene Array sortieren. Jetzt kann ich natürlich> einfach 3 mal den Sortiercode untereinanderpacken, aber vielleicht> ginge es ja noch kompakter?
Du vertauscht erstmal die beiden Indizes (array[type][i] ->
arry[i][type]). Als nächstes schaust du dir an, was Structs sind und
machst aus den "types" eine struct (byte array[i][type] -> struct foo
array[i]), und letzendlich schaust du dir die Doku zu qsort an.
Bei so kleinen Zahlen würd ich da gar nix sortieren. Mach ein Array bis
zu max ID und schreib da die Nummer vom Sensor rein? Danach einmal
Schleife übers Array und wieder ausgeben?
Das Problem sind nicht fehlende Experten oder Wille.
Das Problem ist ein völlig verkorksten Beispiel, aus dem nicht klar
wird, was oder warum Du tust.
Höchstwahrscheinlich sind Arrays hier für Dich zu schwierig, weil bei
ihnen die Größe nicht mit übergeben wird und die Bezeichnung der
Bestandteile (Elemente, eher Dimensionen) ... schwierig ist .
Schau Dir deshalb structs an oder erkläre Deine Absicht und finde einen
Kompromiss bei den Benennungen.
Hm, du versuchst zu Programmieren, indem du in irgendwelchen
heruntergeladenen Quellen versuchst, Teile zu modifizieren?
Vielleicht wäre es einfacher, sich erst einmal ein Basisbuch zur
Programmierung zu besorgen, damit man einzelne Konzepte versteht.
Mehrdimensionale Arrays in C sind immer etwas tricky, insbesondere wenn
man Teile davon an Funktionen übergeben möchte.
Da du anscheinend auf Arduino programmierst, könntest du auch C++ nehmen
Array in Klassen packen, und etwas Komplexität reduziert. Dann könnte
z.B. man Referenzen auf einzelne Zeilen übergeben. Aber auch dafür
fehlen wohl noch die Basics.
Fang mit einfacheren Sachen an.
>Fang mit einfacheren Sachen an.
Ich habe mir halt ein Gerät mit Display gebaut wofür ich es brauchte und
es läuft ja nun wie gewünscht. Vielleicht nicht die eleganteste und
minimalste Lösung, aber für die Praxis macht es keinen Unterschied.
Für Arrays habe ich mich entschieden, da ich einfacher auf bestimmte
Inhalte zugreifen kann. Auch verstehe ich leider nicht mehr wie sich das
mit typedef, struct und anderen Gebilden verhält. Eine für mich
verständliche Anleitung konnte ich nicht finden.
Es ist nicht, dass ich es nicht wollte, mir wird es leider einfach nicht
klar mit dem mir gefundenen Material. Allerdings habe ich mehrere Texte
gefunden, die Arrays structs vorziehen auf MCU.
>Das Problem ist ein völlig verkorksten Beispiel, aus dem nicht klar
Ich habe doch extra den ganzen Code inkl Ausgabe geteilt.
Was ist denn da nicht klar? Jeder kann es ausführen bei sich und sieht
was passiert.
qsort möchte ich vermeiden, da meine Arrays nicht groß sind und ich den
zusätzlichen Speicherplatz sparen möchte, den diese Funktion verbrauchen
würde. Laut Tests die ich gefunden habe, wäre das zudem bei meiner Größe
sogar langsamer. Wobei die Geschwindigkeit bei meiner Anwendung jetzt
keine Rolle spielt, aber der sehr knappe RAM schon.
>indem du in irgendwelchen heruntergeladenen Quellen versuchst, Teile zu
modifizieren?
Ja in diesem Fall habe ich es als Baustein gesehen
> Es ist nicht, dass ich es nicht wollte, mir wird es leider einfach nicht> klar mit dem mir gefundenen Material. Allerdings habe ich mehrere Texte> gefunden, die Arrays structs vorziehen auf MCU.
Es geht nicht um array oder struct - das sind zwei verschiedene Dinge,
die sich ergänzen.
Hallo,
danke ich versuche das mal nachzuvollziehen. Auf den ersten Blick ist
das für mich sogar nachvollziehbar. Ich werde mal versuchen, ob ich auf
die einzelnen Elemente zugreifen kann.
Diese ganze typedef-Geschichte sah für mich halt viel komplizierter und
verwirrender aus als wenn man einfach schreibt
byte sensor_AND_1[ARRAYTIEFE][NUM_OF_MAX_SENSORS] = { { 0 }, { 0 }, { 0
} };