Počet položek za příkazem Data 1,2,4,5

Diskuze a poradna o programátorech a programování různých obvodů

Moderátor: Moderátoři

Odpovědět
Zpráva
Autor
Uživatelský avatar
michalino
Příspěvky: 348
Registrován: 03 srp 2009, 02:00

Počet položek za příkazem Data 1,2,4,5

#1 Příspěvek 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

Uživatelský avatar
Hill
Administrátor
Administrátor
Příspěvky: 18898
Registrován: 10 zář 2004, 02:00
Bydliště: Jičín, Český ráj

#2 Příspěvek 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...

Uživatelský avatar
Crifodo
Příspěvky: 14471
Registrován: 11 říj 2005, 02:00

#3 Příspěvek 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á.

Uživatelský avatar
michalino
Příspěvky: 348
Registrován: 03 srp 2009, 02:00

#4 Příspěvek 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

Uživatelský avatar
popopepe
Příspěvky: 548
Registrován: 26 říj 2005, 02:00

#5 Příspěvek 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 :-)

Uživatelský avatar
michalino
Příspěvky: 348
Registrován: 03 srp 2009, 02:00

#6 Příspěvek od michalino »

Děkuji Popopepe...
:D

Uživatelský avatar
Crifodo
Příspěvky: 14471
Registrován: 11 říj 2005, 02:00

#7 Příspěvek od Crifodo »

Zdá se, že i tohle měla parta okolo sira Cliva vymyšleno líp :twisted: 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.

Uživatelský avatar
popopepe
Příspěvky: 548
Registrován: 26 říj 2005, 02:00

#8 Příspěvek 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ě :-)
A přesně jak říkáš, problém je v tom, že to bude číst dál naprosté nesmysly, ale pořád to budou data :-)

Uživatelský avatar
Crifodo
Příspěvky: 14471
Registrován: 11 říj 2005, 02:00

#9 Příspěvek 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 :roll:
K ukončení pohyblivého počtu dat snad byl kdysi zaveden znak EOF?

Uživatelský avatar
popopepe
Příspěvky: 548
Registrován: 26 říj 2005, 02:00

#10 Příspěvek od popopepe »

Souhlasí, pokud je programátor prase, správná data ho nezachrání :-)

Uživatelský avatar
AB1
Příspěvky: 312
Registrován: 23 lis 2009, 01:00

#11 Příspěvek 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%

Uživatelský avatar
michalino
Příspěvky: 348
Registrován: 03 srp 2009, 02:00

#12 Příspěvek od michalino »

Děkuji za rady, příspěvky, upozornění, už vše chápu!

Ještě jednou díky všem!

Odpovědět

Zpět na „Programování PIC, ATMEL, EEPROM a dalších obvodů“