Mám drobný dotaz, sice mě to funguje, ale zdá se mi to kostrbatý.
Jak by jste nejlépe vyřešili podmínku tak, že pokud se číslo nachází mezi Max a Min hodnotou aby se cosi vykonalo. Tedy pokud je číslo v zadaném intervalu např.: Max=10, Min=5, tedy čísla 6,7,8,9 toto splňují. Já to vyřešil pomocí if, ale zkoumám jestli to nejde nějak lépe, elegantněji.
Díky
Příklad kódu:
void pohyb_serva_x (void)
{
if (stav_x > PRICTI_10) // kdyz je adcx vetsi nez pricti 10
{
count_x+=5;
zpozdeni=50;
}
if (stav_x < PRICTI_10) // kdyz je adcx mensi nez pricti 10 a vetsi nez pricti 1
{
if (stav_x > PRICTI_1)
{
count_x+=1;
zpozdeni=10;
}
}
if (stav_x < PRICTI_1) // kdyz je adcx mensi nez pricti1 a vetsi nez odecti 1
{
if (stav_x > ODECTI_1)
{
count_x=count_x-1;
zpozdeni=10;
}
}
if (stav_x < ODECTI_1) // kdyz je adcX mensi nez odec1
{
count_x=count_x-5;
zpozdeni=50;
}
}
Seřaď podmínky podle velikosti porovnávané konstanty. Tady budu předpokládat, že platí PRICTI_10>PRICTI_1>ODECTI_1 :
void pohyb_serva_x (void)
{
if (stav_x > PRICTI_10) // kdyz je adcx vetsi nez pricti 10
{
count_x+=5;
zpozdeni=50;
return; // žádná další podmínka už nemůže být splněna
}
/*
if (stav_x < PRICTI_10) // kdyz je adcx mensi nez pricti 10 a vetsi nez pricti 1
*/ // Tahle podmínka je splněna vždy, když neprojde ta první => vyhodit.
{
if (stav_x > PRICTI_1)//
{
count_x+=1;
zpozdeni=10;
return; // žádná další podmínka už nemůže být splněna
}
}
/*
if (stav_x < PRICTI_1) // kdyz je adcx mensi nez pricti1 a vetsi nez odecti 1
*/ // Tahle podmínka je splněna vždy, když neprojdou ty pedchozí => vyhodit.
{
if (stav_x > ODECTI_1)
{
count_x=count_x-1;
zpozdeni=10;
return; // žádná další podmínka už nemůže být splněna
}
}
/*
if (stav_x < ODECTI_1) // kdyz je adcX mensi nez odec1
*/ // Tahle podmínka je splněna vždy, když neprojdou ty pedchozí => vyhodit.
{
count_x=count_x-5;
zpozdeni=50;
}
// Tady už return dávat nemusíš, pokud nebudeš ještě nějaké podmínky přidávat.
}
Kromě toho jsi neměl ošetřený stav, kdy se hodnota proměnné stav_x shodovala s některou z konstant… To by se Ti neprovedla ani jedna akce.
Díky, returny jsem tam dát mohl a to vyhození jedný podmínky mi nějak nedošlo, a přitom je jasný že se to vylučuje, když tam má > a potom <, nojo, člověk se furt učí.