Joka toinen rivi eri värillä

Mureakuha

Loikkaa: valikkoon, hakuun

Aloittelijat kysyvät usein miten joka toisen (tai joka n rivi) saisi loopissa tulostettua eri värillä tai jotain vastaavaa. Helpoin tapa tehdä tämä ei ehkä aukene ihan helposti itse ajattelemalla jos ei ole ennestään kokemusta ohjelmoinnista. Kyseiseen ongelman voi ratkaista monellakin tavalla, yleisimmät lienevät kuitenkin jakojäännös tai muuttujan "flippaaminen".

Jakojäännös

Tämä tapa perustuu jo peruskoulussa opitun jakojäännöksen käyttämiseen. Jos rivi on jaollinen kahdella jakojäännös on 0, jos taas ei ole jakojäännös on jotain muuta. Eli vertailemalla silmukkamuuttujan jakojäännöstä voi helposti saada if-ehdon joka täyttyy joka toinen kerta.

for (i = 1; i < 10; i++) {
    if (i % 2 == 0) {
        puts("parillinen");
    } else {
        puts("pariton");
    }
}

Jos haluaa esimerkiksi vain joka kolmannen rivin täsmäämään tarvitsee vain vaihtaa luvun 2 tilalle luku 3.

Flippaus

Tämä tapa perustuu boolean-muuttujaan jonka arvoa vaihdetaan 1/0 välillä joka silmukkakierros

int i;
int b = 0;
for(i = 0; i < 10; i++) {
    if(!b) {
        puts("parillinen");
    } else {
        puts("pariton");
    }
    b = !b;
}

Bittioperaatiot

Mikäli haetaan nopeinta tapaa toteuttaa asia, niin kannattanee käyttää AND-bittioperaatiota yleensä paljon kalliita kellosyklejä vievän kokonaislukujakolaskun sijasta. Tätä käytettäessä on kuitenkin otettava huomioon, että vaihtoehtoina on ainoastaan luvut jotka ovat luvun 2 potensseja, eli esimerkiksi kolmea (3) vaihtoehtoa et saa näin tasaisesti ulos.

Kokonaisluvun parillisuudenhan kertoo yksinkertaisesti sen vähiten merkitsevä bitti, joka saadaan selville ANDaamalla se luvulla yksi (1). Lue lisää: bittioperaatiot.

int i;
for (i=0; i < 10; i++) {
  if(i&1) {
      puts("pariton");
  } else {
      puts("parillinen");
  }
}

Vastaavasti neljän eri vaihtoehdon setti toteutetaan testaamalla i&3 ja yleisesti n vaihtoehdon setti i&(n-1), jossa n on muotoa 2m.

Henkilökohtaiset työkalut