(→Bascom Tabellen) |
(→Bascom Tabellen) |
||
Zeile 1: | Zeile 1: | ||
== Bascom Tabellen == | == Bascom Tabellen == | ||
{{Baustelle|PicNick}} | {{Baustelle|PicNick}} | ||
+ | An sich sind Tabellen in Bascom recht einfach anzuwenden. Man schreib einfach bei einer Feld-dimensionierung eine Zahl dazu, und schon gibt es dieses Feld mehrfach | ||
+ | DIM tabelle(24) as byte | ||
+ | DIM strings(8) as string * 18 | ||
+ | Um ein Element zu adressieren, wird einfach nur zusätzlich zum Feldnamen der Index angegeben | ||
+ | strings(4) = "viertes Element" | ||
+ | strings(7) = "siebtes Element" | ||
+ | Damit lassen sich auch sehr effiziente Schleifen bauen | ||
+ | dim indexwert as byte | ||
+ | for indexwert = 1 to 8 | ||
+ | print strings(indexwert) | ||
+ | next | ||
+ | Dabei ist zu beachten, daß Basic allgemein und daher auch Bascom die Elemente mit "1" beginnend adressiert und nicht mit "0", wie z.B C. Die Angabe "BASE", um das zu ändern, gibt's bei Bascom nicht, also soll es halt so sein. Man darf das halt bei irgendwelchen Rechnungen nie vergessen. | ||
+ | ===mehrdimensionale Tabellen=== | ||
+ | So direkt hat das der Bascom nicht drauf. Aber man kann sich natürlich helfen. | ||
+ | '''Beispiel''' | ||
+ | Es wird eine 2 dimensionale Tabelle von Words benötigt, sagen wir 6 x 14. Man definiert also | ||
<pre> | <pre> | ||
− | + | const Max_x = 6 | |
− | + | const Max_y = 14 | |
− | + | const Max_z = Max_x * Max_y ' 6 * 14 = 84 | |
− | + | ||
− | + | ||
− | + | ||
− | ' | + | |
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | DIM Tabelle(Max_z) as word | |
− | + | DIM tab_index as byte ' der berechnetet eindimensionale index | |
− | ' | + | DIM tab_x as byte |
− | + | DIM tab_y as byte | |
− | ' | + | DIM help as byte ' Ein Hilfsfeld zum rechnen |
− | + | ||
− | + | ||
− | ' | + | ' wir wollen das element 4 , 7 adressieren (cave: 1 - max_x und 1 - max_y, s.o) |
− | + | tab_x = 4 | |
− | + | tab_y = 7 | |
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | help = tab_x - 1 | |
− | + | help = help * Max_y | |
− | + | tab_index = help + 1 | |
− | + | tab_index = tab_index + tab_y | |
− | + | tab_index = tab_index - 1 | |
− | + | Tabelle(tab_index) = wert | |
− | + | ||
− | + | ||
+ | </pre> | ||
+ | Wenn man einmal eine Funktion tab_index = f (x, y) definiert und schreibt, ist das nicht mehr so schlimm. | ||
− | + | ===Tabellen im Programmspeicher=== | |
− | + | Auch die gibt es, nur funktioniert die Sache da etwas anders. Der Zugriff mittels "RESTORE" und "READ" ist natürlich wie gewohnt möglich, nur ist so kein direkter Zugriff in vernünftiger Zeit zu machen | |
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | Beim Anlegen der Tabelle müssen natürlich die Werte gleich reingeschrieben werden, zur Laufzeit geht da nix mehr. | |
+ | <pre> | ||
+ | Byte_Tabelle: | ||
+ | DATA &H00, &H01, 23, ........... | ||
+ | Integer_Tabelle: | ||
+ | DATA &H00%, &H01%, 23%, -23%, ........... ' da gehen dann auch negative Zahlen | ||
+ | Long_Tabelle: | ||
+ | DATA 0&, 3840&, 23&, -23&, ........... | ||
+ | Single_Tabelle: | ||
+ | DATA 0.44!, 3840!, 23.67!, -23!, ........... | ||
+ | </pre> | ||
+ | Klarerweise geht nur lesen, z.B. | ||
+ | Hier ist auf die richtige definition von "Wert" zu achten, die muß zu der Tabelle passen | ||
+ | DIM Wert as Byte | ||
+ | Wert = LOOKUP (12, Byte_tabelle) | ||
− | + | DIM Wert as Integer | |
− | + | Wert = LOOKUP (12, Integer_tabelle) | |
− | + | ||
− | + | ||
− | ' | + | ''' Vorsicht: das erste Byte wird hier mit "0" angesprochen''' |
− | ' | + | |
− | ' | + | |
− | + | ||
− | + | ||
− | + | ||
− | + | Natürlich lassen sich auch mehrdimensionale Tabellen simulieren, genau wie bei den SRAM /EPROM Tabellen | |
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
==Autor== | ==Autor== |
Version vom 18. Januar 2006, 20:31 Uhr
Inhaltsverzeichnis
Bascom Tabellen
An diesem Artikel arbeitet gerade Mitglied PicNick.
Am besten momentan noch keine gravierenden Ergänzungen / Änderungen vornehmen. Dieser Hinweis verschwindet wenn der Autor soweit ist. Sollte dieser Hinweis länger als drei Tage auf einer Seite sein, bitte beim Autor PicNick per PM / Mail oder Forum nachfragen ob er vergessen wurde. |
An sich sind Tabellen in Bascom recht einfach anzuwenden. Man schreib einfach bei einer Feld-dimensionierung eine Zahl dazu, und schon gibt es dieses Feld mehrfach
DIM tabelle(24) as byte DIM strings(8) as string * 18
Um ein Element zu adressieren, wird einfach nur zusätzlich zum Feldnamen der Index angegeben
strings(4) = "viertes Element" strings(7) = "siebtes Element"
Damit lassen sich auch sehr effiziente Schleifen bauen dim indexwert as byte
for indexwert = 1 to 8 print strings(indexwert) next
Dabei ist zu beachten, daß Basic allgemein und daher auch Bascom die Elemente mit "1" beginnend adressiert und nicht mit "0", wie z.B C. Die Angabe "BASE", um das zu ändern, gibt's bei Bascom nicht, also soll es halt so sein. Man darf das halt bei irgendwelchen Rechnungen nie vergessen.
mehrdimensionale Tabellen
So direkt hat das der Bascom nicht drauf. Aber man kann sich natürlich helfen. Beispiel Es wird eine 2 dimensionale Tabelle von Words benötigt, sagen wir 6 x 14. Man definiert also
const Max_x = 6 const Max_y = 14 const Max_z = Max_x * Max_y ' 6 * 14 = 84 DIM Tabelle(Max_z) as word DIM tab_index as byte ' der berechnetet eindimensionale index DIM tab_x as byte DIM tab_y as byte DIM help as byte ' Ein Hilfsfeld zum rechnen ' wir wollen das element 4 , 7 adressieren (cave: 1 - max_x und 1 - max_y, s.o) tab_x = 4 tab_y = 7 help = tab_x - 1 help = help * Max_y tab_index = help + 1 tab_index = tab_index + tab_y tab_index = tab_index - 1 Tabelle(tab_index) = wert
Wenn man einmal eine Funktion tab_index = f (x, y) definiert und schreibt, ist das nicht mehr so schlimm.
Tabellen im Programmspeicher
Auch die gibt es, nur funktioniert die Sache da etwas anders. Der Zugriff mittels "RESTORE" und "READ" ist natürlich wie gewohnt möglich, nur ist so kein direkter Zugriff in vernünftiger Zeit zu machen
Beim Anlegen der Tabelle müssen natürlich die Werte gleich reingeschrieben werden, zur Laufzeit geht da nix mehr.
Byte_Tabelle: DATA &H00, &H01, 23, ........... Integer_Tabelle: DATA &H00%, &H01%, 23%, -23%, ........... ' da gehen dann auch negative Zahlen Long_Tabelle: DATA 0&, 3840&, 23&, -23&, ........... Single_Tabelle: DATA 0.44!, 3840!, 23.67!, -23!, ...........
Klarerweise geht nur lesen, z.B. Hier ist auf die richtige definition von "Wert" zu achten, die muß zu der Tabelle passen
DIM Wert as Byte Wert = LOOKUP (12, Byte_tabelle)
DIM Wert as Integer Wert = LOOKUP (12, Integer_tabelle)
Vorsicht: das erste Byte wird hier mit "0" angesprochen
Natürlich lassen sich auch mehrdimensionale Tabellen simulieren, genau wie bei den SRAM /EPROM Tabellen