Kirjautuminen

Haku

Tehtävät

Keskustelu: Ohjelmointikysymykset: C: Koodin yksinkertaistaminen

Dukex [25.02.2007 19:04:48]

#

Eli itselläni on C-kieli alkutekjöissä joten apua tarvitsisin yksinkertaistamiseen. Eli pystyisikö seuraavaa koodia yksinkertaistamaan?

 while(1){

  if (jannite == 1){
  Step(5);}
    else
  if (jannite == 2){
  Step(10);}
    else
  if (jannite == 3){
  Step(15);}
    else
  if (jannite == 4){
  Step(20);}
    else
  if (jannite == 5){
  Step(25);}
    else
  if (jannite == 6){
  Step(30);}
    else
  if (jannite == 7){
  Step(35);}
    else
  if (jannite == 8){
  Step(40);}
    else
  if (jannite == 9){
  Step(45);}
    else
  if (jannite == 10){
  Step(0);}
    else
  if (jannite == 11){
  Step(0);}
    else
  if (jannite == 12){
  Step(45);}
    else
  if (jannite == 13){
  Step(40);}
    else
  if (jannite == 14){
  Step(35);}
    else
  if (jannite == 15){
  Step(30);}
    else
  if (jannite == 16){
  Step(25);}
    else
  if (jannite == 17){
  Step(20);}
    else
  if (jannite == 18){
  Step(15);}
    else
  if (jannite == 19){
  Step(10);}
    else
  if (jannite == 20){
  Step(5);}

}

L2-K2 [25.02.2007 19:05:54]

#

Käytä switch - case rakennetta.

switch (jannite)
{
    case 1:
        Step(5);
        break;
    case 2:
        Step(10);
        break;
    case 3:
        Step(15);
        break;
jne...
    case 20:
        Step(5);
        break;
    default:
        break;
}

Heikki [25.02.2007 19:13:36]

#

Toisaalta tuossahan on selvä säännönmukaisuus havaittavissa, joten yksinkertaistus menee ihan näinkin:

while(1) {
 if (jannite>0 and jannite<10)
   Step(jannite*5);
 if (jannite==10 or jannite==11)
   Step(0);
 if (jannite>11 and jannite<21)
   Step((21-jannite)*5);
}

Olettaen, että jannite on kokonaisluku, jolloin ei tarvi murehtia tapausta tyyliin jannte=2.71828;

Antti Laaksonen [25.02.2007 19:28:49]

#

Jos luvuissa ei olisi säännöllisyyttä, hyvä ratkaisu olisi sijoittaa ne taulukkoon:

int tiedot[] = {5, 10, 15, 20, 25, 30, 35,
                40, 45, 0, 0, 45, 40, 35,
                30, 25, 20, 15, 10, 5};

while (1) {
    if (jannite >= 1 && jannite <= 20) {
        Step(tiedot[jannite - 1]);
    }
}

Nyt taulukosta pystyy suoraan lukemaan tiettyä jännitettä vastaavan askeleen (taulukon ensimmäisen alkion kohta on nolla, minkä vuoksi jännitteestä täytyy vähentää yksi). Tämäkin koodi olettaa, että muuttuja jannite on kokonaisluku.

Vastaus

Aihe on jo aika vanha, joten et voi enää vastata siihen.

Tietoa sivustosta