Stránka 1 z 1
Počet položek za příkazem Data 1,2,4,5
Napsal: 15 čer 2010, 18:35
od michalino
Dobrý den, prosím Vás ještě o radu se zjištěním počtu položek za příkazem data v Bascomu.
Data 21, 54, 54, 68, 98
Potřeboval bych poradit, jak získaz a zjistit počet položek, např. dle data nahoře: 5 = počet všech čísel
Díval jsem se do nápovědy na VAL, DATA, LEN, atd..ale ty nevypadají na tohle užití...
Děkuji
Napsal: 15 čer 2010, 19:02
od Hill
Za instrukcí DATA v jakémkoli Basicu můžeš zadat libovolný počet hodnot, které program bude číst v žádaném pořadí. Nemusíš snad definovat, kolik jich bude, nanejvýš jako poslední zadáš hodnotu, jaká se mezi ostatními nevyskytuje, a programově budeš testovat, zda smyčka našla tuto hodnotu. V tom případě restartuješ načítání dat od začátku, jinak ti po dočtení řádku DATA vypadne dál a pokusí se interpretovat další bajty z paměti jako data.
Druhá možnost je použití smyčky FOR-TO / NEXT, kde nadefinuješ počet průchodů. Po posledním průchodu restartuješ čítač dat atd...
Napsal: 15 čer 2010, 19:11
od Crifodo
basic v ZX spectru po snaze číst za koncem položek DATA vyhodil chybu Out of DATA, bascom tuhle chybu v error codes nemá, takže tu situaci asi nemá ošetřenu. Takže když si tam nasázíš do tabulky dat hodnoty a nevíš kolik jich je, leda jak říká Hill v cyklu pak číst položky a po poslední se objeví nesmyslný údaj, takže stačí se podívat na počet průchodů cyklem. Možná při znalosti interní organizace bascomu to řekne nějaká systémová proměnná.
Napsal: 15 čer 2010, 19:15
od michalino
Děkuji, děkuji za náměty...
Ještě zkusím koumat ostatní příkazy, snad něco najdu.. pak to tady dám, případně když budete někdo vědět jinou cestu pomocí příkazu, prosím vás o radu, děkuji
Napsal: 15 čer 2010, 19:30
od popopepe
On na to Bascom taky upozorňuje:
When your program flow enters the DATA lines, unpredictable results will occur.
So as in QB, the DATA statement is best be placed at the end of your program or in a place that program flow will no enter.
Takže raději nepřetékat
![Smile :-)](./images/smilies/icon_smile.gif)
Napsal: 15 čer 2010, 19:31
od michalino
Děkuji Popopepe...
![Very Happy :D](./images/smilies/icon_biggrin.gif)
Napsal: 15 čer 2010, 19:41
od Crifodo
Zdá se, že i tohle měla parta okolo sira Cliva vymyšleno líp
![Twisted Evil :twisted:](./images/smilies/icon_twisted.gif)
jen ten compiler v tom neměli.
když zkusím
Dim A As String * 1
Dim N As Byte
For N = 0 To 10
A = Lookupstr(n , Tabulka)
Print "a:" ; A
Print "n:" ; N
Next N
End
Tabulka:
Data "a" , "b" , "c" , "d"
tak to fakt vesele sděluje hovadiny po konci tabulky.
Na druhou stranu: položky v DATA zadáváš ručně takže asi nepůjdou do tisíců a měly by se dát spočítat při tvorbě seznamu.
Napsal: 15 čer 2010, 19:52
od popopepe
Crifodo: máš pravdu, pokud je tam budeš bouchat ručně, tak se asi dopočítáš. Ale pomocí DATA se čtou taky data z EEPROM, a tam už těch dat může být požehnaně
![Smile :-)](./images/smilies/icon_smile.gif)
A přesně jak říkáš, problém je v tom, že to bude číst dál naprosté nesmysly, ale pořád to budou data
![Smile :-)](./images/smilies/icon_smile.gif)
Napsal: 15 čer 2010, 19:56
od Crifodo
no dobře, ale pořád snad platí presumpce příčetnosti autora programu, který by měl vědět jaká data dovnitř a jaká ven
K ukončení pohyblivého počtu dat snad byl kdysi zaveden znak EOF?
Napsal: 15 čer 2010, 19:58
od popopepe
Souhlasí, pokud je programátor prase, správná data ho nezachrání
![Smile :-)](./images/smilies/icon_smile.gif)
Napsal: 16 čer 2010, 10:36
od AB1
Protože víš, kolik znaků píšeš do tabulky,
můžeš si jejich počet poznamenat do konstanty.
Kód: Vybrat vše
Const Table1_pocet = 5
Const Table2_pocet = 4
Dim X As Integer
Dim B1 As Byte
Dim W1 As Word
Do
B1 = 3
X = Lookdown(b1 , Table1 , Table1_pocet) '3
W1 = 4000
X = Lookdown(w1 , Table2 , Table2_pocet) '4
Loop
End
Table1:
Data 1 , 2 , 3 , 4 , 5
Table2:
Data 1000% , 2000% , 3000% , 4000%
Napsal: 16 čer 2010, 10:47
od michalino
Děkuji za rady, příspěvky, upozornění, už vše chápu!
Ještě jednou díky všem!