Re: konstante Arrys Kategorie: Programmierung (von Michi, http://www.elektronik.co.at - 26.01.2007 9:54) | ||
Als Antwort auf Re: konstante Arrys von olaf - 24.01.2007 16:03 | ||
| ||
Hallo nochmals zu den Arraygrö�en ! Die Array Endmarkierung gefällt mir auch gut, vielleicht besser als mein Längeneintrag in [0]. Nur scheint mir damit ein Problem naturgemä� noch nicht lösbar: Man mu� zur Enderkennung einen Leseversuch machen, der au�erhalb des Arrays liegen kann, wenn man die Endmarkierung vergessen hat. Man könnte halt versehentlich sehr weit au�erhalb lesen. Aber eine gute Idee ! Michael > Hallo Steffan, > ich kenne keine funktion wie Array.lenght in c2 die du hier benötigst um die vom > compiler bestimmte Länge zu ermitteln. > Aber programatisch könnte man es entweder durch eine spezielle array end Markierung lösen (z.B. "-1"), > bis zu welcher deine Schleife dann läuft. > In meiner Haussteurung habe ich die gesamte Menü Darstellung und Navigation allerdings sehr generisch > gelöst. Dort exisistieren mehrere grosse arrays, die menu-item tags, typen, ressourcen > und unter menü-strukturen definieren. > Die algorithmen sind generisch und rekursiv, so dass sich (theoretisch) beliebig tiefe menü > strukturen aufbauen lassen. Die array Konstanten sehen dann so aus: > > > const MENU_TAGS[] = "Hauptmenü", // 0 > "untermenü1", // 1 > "untermenü2", // 2 > > const MENU_TYPE[] = MENUITEM_SUBMENU, //0 > MENUITEM_SUBMENU, //1 > MENUITEM_SUBMENU, //2 > > const MENU_RESOURCES[]= 0, //0 > 0, //1 > 0, //2 > 0, //3 > > const MENU_SUBSTART[] = 1, //0 > 10, //1 > 20, //2 > > const MENU_SUBEND[] = 6, //0 > 15, //1 > 22, //2 > > > > > das hei�t in dem fall das ein Menüeintrag ein untermenü beschriebt, so sind an der selben index position > von SUBSTART und SUBEND die offsets in das untermenü definiert. > Die Algorithmen für anzeige und navigation bzw. aktionsauslösung im menü arbeiten damit lediglich > auf dieser struktur und sind rekursiv. > > > function navigateMenu( byte pcfLCD, byte startingPos ) returns byte > { > menuPos pos; > > pos.firstDisplayedLine = c.MENU_SUBSTART[ startingPos ]; > pos.selectedLine = c.MENU_SUBSTART[ startingPos ]; > pos.startingLine = c.MENU_SUBSTART[ startingPos ]; > pos.endingLine = c.MENU_SUBEND[ startingPos ]; > pos.refreshNeeded = 1; > > > zur Anzeige des Hauptmenüs wird diese funktion dann einfach von dem für das betreffende Display > zuständigen thread so aufgerufen: > > menu.navigateMenu(pcfLCD,0); > > jeder Untermenü Aufruf ruft die funktion rekursiv auf. > > Damit gibt es nirgendwo eine Schleife oder ähnliches die über die arraystrukturen läuft, > sondern sie beschrieben sich selbst. > Das gesamte menü sowie die Menü/Untermenüstruktur wird lediglich über die Arraykonstanten definiert. > > Das nur so als Tip. Funktioniert bei meiner Lösung schon seit 4 Jahren wunderbar und die Architektur > hat schon entliche Erweiterungen "überlebt". > > ... sorry code kann ich leider nicht zur Verfügung stellen.. > > Gru� Olaf > > > > > Hallo, > > > > ich hab heute mal intensiv Lektüre und natürlich auch das Forum zu einer Problemstellung > > zu konstanten Arrays befragt, aber leider doch keine Antwort gefunden. Und zwar geht es um > > folgendes Problem: > > > > Ich habe konstante benannte Arrays deklariert und möchte nun in meinem Programm die Anzahl > > der Elemente ermitteln. Ich komm hier einfach nicht auf eine passende Idee. Das sieht ungefähr > > so aus: > > > > const MENUE1[] = "Füllen", "Michen", "Leeren"; > > const MENUE2[] = "Heben", "Senken"; > > ... > > > > Nun möchte ich auf die einzelnen Elemente der Arrays zugreifen. Dazu durchlaufe ich eine Schleife > > und lese die Elemente über den Index aus. > > > > str = MENUE1[i]; > > > > Da die einzelnen Arrays eine unterschiedliche Anzahl von Elementen besitzen, brauche ich dazu > > die Anzahl der Elemente, sonst kommt es zu einer Verletzung des zulässigen Indexbereiches. > > In VBA gibt es zu diesem Problem eine Lösung z.B. mit "UBound()". > > Gibt es hier auch so etwas ähnliches? > > > > Wäre super, wenn mir jemand weiterhelfen könnte. > > > > Viele Grü�e > > Steffan Meine Seite: http://www.elektronik.co.at | ||
Antwort schreiben Antworten: |