Elektroda.pl
Elektroda.pl
X
Proszę, dodaj wyjątek www.elektroda.pl do Adblock.
Dzięki temu, że oglądasz reklamy, wspierasz portal i użytkowników.

Zagnieżdżanie if else w C

figa_miga 05 Lis 2012 22:22 1215 4
  • #1 05 Lis 2012 22:22
    figa_miga
    Poziom 19  

    Mam kilka (lub kilkanaście) zmiennych do porównania które muszą się mieścić w jakiejś tolerancji- w tedy zwiększam x. Jeśli któryś z warunków nie zostanie spełniony to x ma być zmniejszony, jak to powinno wyglądać w zgodzie ze sztuką?.

    a, b, c to elementy do porównania, t to tolerancja. W pierwszym przypadku nie za bardzo też wiem jak rozegrać przypadek gdy np już drugi element nie zmieści się w tolerancji- jak w tedy przerwać dalsze sprawdzanie i zmniejszyć x.

    Kod: c
    Zaloguj się, aby zobaczyć kod


    Kod: c
    Zaloguj się, aby zobaczyć kod


    Pisownia okropna - poprawiłem.
    Proszę zwracać uwagę na pisownię - regulamin p.3.1.13
    [zumek]

    0 4
  • #2 05 Lis 2012 22:55
    piotrva
    Moderator na urlopie...

    Twój ostatni kod działa tak:
    1. Jeśli wszystkie warunki są spełnione - zwiększ x
    2. Jeśli którykolwiek z warunków nie jest spełniony (przynajmniej jeden dowolny) - zmniejsz x
    Ten drugi kod jest poprawny, ba jeśli któryś z warunków nie zostanie spełniony to kolejne nie będą sprawdzane.

    0
  • #3 05 Lis 2012 23:05
    figa_miga
    Poziom 19  

    Poprawny... OK, ale sposób?. Jeśli w takim if'ie przyjdzie sprawdzić kilkanaście warunków to:
    1. łamać linie i pisać w nowym wierszu
    2. lepiej trzymać się sposobu z klamrami

    No i jeśli już poruszamy pierwszy przypadek to jak powinna wyglądać jego poprawna wersja na przykładzie tych dwóch ifów?

    0
  • #4 05 Lis 2012 23:26
    tmf
    Moderator Mikrokontrolery Projektowanie

    IMHO oba kody robią to samo, z tym, że pierwszy nie zmniejsza x, ale łatwo to poprawić. Jeśli takich warunków masz dużo to widzę dwie możliwości:
    1. W miarę paskudna to makro, które będzie rozwijane do porównania jakie masz, będzie przejrzyściej.
    2. Skoro zawsze sprawdzasz zakres b+/-t to można użyć wyliczonych wartości, wtedy będzie tylko a>bmin && a<bmax. A dalej to kolejne uproszczenie - zmienne a, c itd. umieścić w tablicy i sprawdzanie robić pętlą indeksując tablicę. Dodatkowo jeśli zmienne są typu int to można wykorzystać switch/case i rozszerzenie gcc umożliwiające podawanie zakresów w klauzuli case.
    Można też przejść na C++, ale to już inna bajka.

    0
  • #5 06 Lis 2012 13:37
    perlon
    Poziom 19  

    Rozwinę trochę myśl kolegi tmf

    Kod: c
    Zaloguj się, aby zobaczyć kod

    0