Die Tabelle(n) dürfen den gesamten, nicht mit Programmkode belegten Teil, des Anwender-Programmspeichers belegen. Bei CC-I-2.0(OS-V.2.07) entspricht dies bei z.B. 114 Bytes Programmlänge = (9724 Bytes - 114 Bytes) = 9610 Bytes.
Bild 1: C-Control I 2.0
Man muss noch bedenken dass für jedes 'Element' der Tabelle 2 Bytes (16 Bits) im Programmspeicher belegt werden. Aus 16 Bits lassen sich 65536 unterschiedliche Kombinationen bilden. Dies ist gut geeignet für die maschinengerechte Darstellung einer Zahl von (-32768...32767) in einem Tabellenelement.
Für die verwendeten 1-stelligen Zahlen (0...9) könnte die Tabellenstruktur sicher noch platzoptimert werden, bei gleicher Funktionalität auf ein Viertel des jetzigen Umfangs.
Im geposteten Beispiel kann die Tabelle derzeit nur max. 9610 / 2 = 4805 Elemente enthalten, bevor die fehlerhafte Ausgabe erscheint.
Man könnte das Problem angehen indem man einen kompatiblen Kontroller mit erweitertem Programmspeicher hernimmt, z.B. die C-Control I 2.0-Advanced oder die Open-Maxi. Wer eine C-Control I 1.1 besitzt kann deren Speicher nachträglich noch erweitern. Letzteres haben wir heute mit einer 32500 Elemente umfassenden Tabelle ausprobiert. Ergebnis: Das in Beitrag 16286 gepostete Programm funktioniert einwandfrei.
evt. Programmstruktur optimieren
Wir verstehen es so dass die Tabelle genutzt wird weil die Abfolge der Ziffern
0...9 innerhalb der Ausgabesequenz (auch) völlig unregelmässig verteilt sein
kann oder durch Auswechseln einer externen Tabellendatei leicht veränderbar sein soll.
(Ist das so richtig?)
Anderenfalls könnte man evt. mit einer Zählschleife oder dem Zufallszahlenfunktion (RAND) das Programm kompakter gestalten.
Wir versuchen gerne Hilfestellung
das |_ Team
> Ein Hallo, an die C-Control Gemeinde,
>
> ich habe ein kleineres Problem mit der LOOKTAB Funktion, und vielleich hat ja jemand einen
> Lösungsvorschlag für mich.
> Ich möchte aus einer Tabelle Werte auslesen die ich dann weiter verarbeiten möchte.
> Die Tabelle beinhaltete 5000 Stellen mit je einer Zahl zwischen 0 bis 9.
> Ich hab nun ein kleines Programm geschrieben was die Zahlen aus der Tabelle auslesen soll.
> Nun zu meinem Problem:
> Anfangs liest das Programm die Tabelle richtig aus aber ab der Stelle 4795
> kommen da nur noch falsche Daten an. Anstatt einer 2 steht dann dort 962 z.B.
> Habe ich da etwas falsch programmiert? (bin noch Anfänger)
> oder kann mann so viele Stellen nicht in das Programm einbetten.
> Über eine Vorschlag oder eine Lösung wäre ich Dankbar.
>
> Viele Grüße
> Stephan
>
> Ich benutze eine M-Unit 2 mit der OS.V2.07 für dieses Projekt.
>
>
>
> Programmcode:
>
> define i as word
> define datavar as word
>
> Print " Anfang: "&LBound(Eins)&" Ende: "&uBound(Eins)
> pause 50
>
> #loop
>
> For i =LBound(Eins) to UBound(Eins)
> LOOKTAB(Eins,i,datavar)
> print "i: "&i&" Datavar: " & datavar
> next i
> print "Fertig"
> pause 200
>
> end
>
> '-------------------------
> TABLE Eins
> import "eins.tab"
> END TABLE
>
> '----- Tabelle "eins.tab" beinhaltet 5000 Stellen mit
> '----- je einer Zahl zwischen 0 bis 9 -- -- 2 4 7 9 3 1 7....usw.
|