[OT] Arduino

David Obdrzalek David.Obdrzalek na mff.cuni.cz
Neděle Leden 7 12:49:25 CET 2024


Ne-e. Pokud se to zavolá s parametrem 0 (cislo=0), tak to projede tabulkou a až to 
dojede na její poslední řádek (index bude 5), už nebude splněna podmínka ve while, 
protoze 0 není < 0, takže se neudělá index++, smyčka skončí a následně to vrátí znak 
'0' z posledního řádku tabulky.

Naopak pokud by tam bylo <=, tak to ten index i na posledním řádku tabulky zvýší 
(protože 0<=0), vyjede z tabulky a ... :-(

S parametrem větším nebo rovno 994 to skončí už na prvním řádku tabulky, 908 až 993 
na druhém, 807 až 907 na třetím atd. a poslední řádek odchytne všechno od 0 do 481.

D.O.

On 7 Jan 2024 at 10:37, Petr Simek wrote:

> On Sun, 7 Jan 2024, Jaroslav Buchta wrote:
> 
> > Podle me to bude fungovat, while preskace polozky dokud nebude cislo < nez v 
> > tabulce.
> > Problem vidim akorat u 0, kdy to utece mimo tabulku navzdy, melo by byt IMHO 
> > <= misto <
> >
> 
> No jasne ono to postupuje dokud cislo neni mensi nez cislo v tabulce.
> Ale pokud cislo bude nula tak nule neni mensi nez nula a skonci to
> ve smycce.. Takze to fungovat bude dokud nenavzorkuje nulu.
> 
> 
> *------------------------------------------------------------------------*
> |                          Petr Simek   APS JU                           |
> |                             psimek na jcu.cz                              |
> *------------------------------------------------------------------------*
> 
> 
> > Dne 07.01.2024 v 9:17 Petr Simek napsal(a):
> >> On Sat, 6 Jan 2024, David Obdrzalek wrote:
> >> 
> >>> D.O.
> >>> 
> >>> (*) Jeden příklad za všechny:
> >>> https://robodoupe.cz/2018/programatorske-poznamky-k-jednomu-arduino-projektu/ 
> >> 
> >> Dival jsem se na tu vasi stranku a moc se mi nezda priklad :
> >> 
> >>   typedef struct{
> >>     uint16_t cislo;
> >>     char pismeno;
> >>   } tabulka_t;
> >> 
> >>   tabulka_t tabulka[] = {
> >>     {994, 0},
> >>     {908, 'D'},
> >>     {807, 'A'},
> >>     {724, 'B'},
> >>     {482, 'C'},
> >>     {0, '0'}
> >>   };
> >> 
> >>   char urciPismeno(uint16_t cislo)
> >>   {
> >>     uint8_t index=0;
> >>     while( cislo < tabulka[index].cislo ) index++;
> >>     return tabulka[index].pismeno;
> >>   }
> >> 
> >> 
> >> Prijde mi ze kdyz je 'cislo' mensi nez 994 tak to vzdy vrati
> >> prvni radek z tabulky - nulu a kdyz bude cislo 994 nebo vetsi
> >> tak se to rozbehne po pameti nez to nekde narazi na dvojbajt
> >> s vyssi hodnotou (a vrati to nejaky nesmysl) nebo to pojede
> >> v cyklu navzdy.
> >>
> 





Další informace o konferenci Hw-list