Zur Übersicht - INFO - Neueste 50 Beiträge - Neuer Beitrag - Suchen - FAQ - Zum CC1-Forum - Zum CC-Pro-Forum

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
Ich nutze:
C-Control II Unit, OSOPT V3.0
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: