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);} }
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; }
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;
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.
Aihe on jo aika vanha, joten et voi enää vastata siihen.