Stránka 1 z 1

rotace voleb v C

Napsal: pát 12. úno 2010, 15:50
od M4r1hu4n3
Jak by šlo udělat rotaci voleb v C? Jedná se mi o to že při stisku tlačítka se posune volba o jednu dál, když dojde na určitou volbu tak při dalším stisknutí potřebuju vrátit na začátek. Zkusil jsem kontrolovat hodnotu switche, a pokud by bylo stisklé tlačítko a zároveň hodnota switche by byla na maximu tak přiřazení switchi hodnotu 1, to mi moc nechce spolupracovat. Má někdo lepší nápad? Spíš asi teorii, nejedná se úplně o čisté C, ale o Wired.

tohle mi volí nahoru, pak potřebuju skočit zas na 1 a pořád dokola:

Kód: Vybrat vše

if (tlacitko == HIGH && switch < 3) {
switch++;
}

Re: rotace voleb v C

Napsal: pát 12. úno 2010, 15:55
od Zivan

Kód: Vybrat vše

if ([stisknuto tlacitko]) {
  volba++;
  if(volba > maximum)
    volba = 1;
}

Re: rotace voleb v C

Napsal: pát 12. úno 2010, 15:58
od Exp
Do programátora mám hodně daleko, ale co to zkusit takhle?

if (tlacitko == HIGH) {
if (switch < 3) switch++;
else switch = 1;
}

Re: rotace voleb v C

Napsal: pát 12. úno 2010, 16:01
od M4r1hu4n3
Super, funguje Zivan. Díky moc. Mě trubku nenapadlo použít tu hodnotu maximum. :-D
Exp, myslím že by to taky pracovalo jak na to tak koukám. Že mi takhle rychle odpoví dva lidi jsem nečekal, opravdu moc děkuju.

Re: rotace voleb v C

Napsal: pát 12. úno 2010, 19:49
od OndraSter
Anebo nejkratší...

switch = switch == maximum ? 1 : ++switch;

by taky mělo jít :D .

Re: rotace voleb v C

Napsal: pát 12. úno 2010, 20:02
od Zivan
Mas tam chybu, kdyz switch = maximum, tak to stejne pricte jeste 1 :)

Ale timhle bych mu nepletl hlavu, to se za chvili dostane k:

Kód: Vybrat vše

s=++s>m?1:s;


// OndraSter - Jo máš recht, opraveno na ==, díky

Re: rotace voleb v C

Napsal: pát 12. úno 2010, 20:58
od Maranov
OndraSter píše:Anebo nejkratší...

switch = switch == maximum ? 1 : ++switch;

by taky mělo jít :D .
Tyhle zápisy jsou v C prý nebezpečné, protože není přesně jasné, kdy dojde ke zvýšení... některé kompilátory (gcc) jsou v tomhle neexaktní a překládají si to různě.
Beztak tam nějaký ten Jump(If)Equal bude muset být, takže tahle kontrukce je jen kratší na zápis. :-)

Re: rotace voleb v C

Napsal: pát 12. úno 2010, 22:15
od OndraSter
Co si budem namlouvat, on opravdu každý kompilátor si dělá co chce (nedávno známý řešil problém s šablonami v c++, kde gcc odmítalo kód (deklarace funkce s mapou?), který pod VC fungoval tak, jak měl). Prostě opensource no :roll: .


Jinak to moje by opravdu mělo fungovat tak, jak se očekává (podle logiky), pokud kompilátor je správně napsaný... Musím to někdy ozkoušet :D .

Re: rotace voleb v C

Napsal: pát 12. úno 2010, 22:30
od Maranov
Logicky ano, slyšel jsem o tom ale na škole - tam jsme používali gcc, podle něj je v

Kód: Vybrat vše

c = c++;
(tedy když jde o tu samou proměnnou vlevo i vpravo) nejasně definované pořadí výpočtu.

Re: rotace voleb v C

Napsal: ned 14. úno 2010, 10:46
od matajon
OndraSter: Kromě toho, že to není nejkratší, tak to ani není nejčitelnější. :)

Já bych se asi úplně vyhnul nějakým podmínkám a použil jenom -

Kód: Vybrat vše

switch = (switch + 1) % pocetMoznosti


// OndraSter - ok, vyhrál jsi :-D