cz4

cz4



Programowanie

ABC... C Jak zrobić pętlę tak by się nie zapętlić...

W C występują trzy różne instrukcje pętli. Jeśli programowałeś w BASCOM-ie na pewno same nazwy nie są Ci obce. Rzeczywiście pętle do-while oraz while odpowiadają dość dokładnie znanym z BASCOM-a do-Ioop-until oraz while-wend. Zwróć jednak szczególną uwagę na pętlę for. W C ma ona znacznie większe możliwości niż w językach pokrewnych Basicowi.


1    lko wtedy, gdy

warunek jest spełniony (wartość całego wyrażenia jest równa prawdzie).


Instrukcja - może to być instrukcj a prosta - obowiązkowo żaki

Izaakiem średnika (;), lub instrukcja złożona utworzona z dowo instrukcji prostych wziętych w nawiasy klamrowe. Instrukcja U ciało pęlli i jest wykonywana przy każdym jej przebiegu.


\


whi 1 e(jfiarunek_trwanfał <fTstrukc;



doCjriśtrukcTŁ>wht 1 e«jarunek_ trwania^* for(i nstrukcja_i ni cjacj

_t


<Sarunek-trwania? instrukcja_pętli) CostrukcilO


Warunek trwania

W tym miejscu możemy korzystać z dowolnego warunku. Więcej miejsca temu tematowi poświęciłem przy omawianiu instrukcji if. Pętla zawsze jest wykonywana tak długo, dopóki warunek jest spełniony.

Ciało pętli

Ciało pętli to instrukcja prosta lub złożona. Aby uzyskać pustą pętlę, można zaraz za instrukcją pętli umieścić znak średnika (;). W ten sposób tworzymy pętlę której jedynym zadaniem jest oczekiwanie, aż warunek stanie się fałszywy. W pętli for dodatkowo wykonana zostanie inicjacja i wywoływana będzie instrukcja pętli. Równie dobrze możesz umieścić w takim miejscu puste nawiasy klamrowe. Polecam Ci tę właśnie metodę. W ten sposób zaznaczasz, że nie popełniłeś błędu i na pewno chciałeś stworzyć pustą pętlę. AVR-GCC to nie przeszkadza, ale niektóre kompilatory przy wykorzystaniu pierwszego rozwiązania zgłaszają ostrzeżenie. Jak to dokładniej wygląda, możesz zobaczyć na listingu 15. Pusta pętla jest wykorzystywana w otoczeniu punktu O.

Pętla while

Jest to najprostsza z dostępnych pętli. Zanim ciało pętli zostanie wykonane, testowany jest warunek trwania. Jeśli od początku jest on niespełniony, ciało pętli nie zostanie wykonane ani razu. W tym przypadku zwykle na ciele pętli spoczywa odpowiedzialność takiego wpłynięcia na warunek, aby w odpowiednim momencie przestał być spełniany. Z drugiej strony, warunkiem może być na przykład oczekiwanie na odpowiedni stan na wyprowadzeniu portu.

Pętla do-while

Pętla utworzona za pomocą tej instrukcji nie jest bardziej skomplikowana niż pętla while. Różnica jest jednak taka, że warunek sprawdzany jest po wykonaniu ciała pętli. Oznacza to, że ciało pętli zostanie wykonane przynajmniej raz, nawet jeśli początkowo warunek jest niespeł-

Pętia for

Niech nie przeraża Cię bardziej rozbudowana składnia pętli for. W BASCOM-ie miałeś do czynienia z pętlą, która umożliwia jedynie

zwiększanie lub zmniejszanie wartości wybranej zmiennej. Warunkiem zakończenia było zawsze dojście do odpowiedniej wartości. Łatwo osiągnąć identyczny rezultat. Wystarczy odpowiednio dobrać instrukcje inicjacji oraz instrukcję pętli:

for(n=0; n<4; n-) (...)

for(n=4; n>0; n+=2) (...)

Zauważ jednak, że przedstawiona składnia jest znacznie bardziej uniwersalna. Na przykład możesz zadbać o to, aby zmienna, która jest testowana, była przesuwana w lewo czy prawo, aby po każdym przejściu pętli zmniejszała się lub powiększała na przykład 10 razy: for(n=l; n<(l«7); r.«=l) (...) for(n=1000; n>0; n/=10) (...)

Możliwe jest nawet odniesienie instrukcji inicjacji, warunku oraz instrukcji pętli do różnych zmiennych. Jednak ze względu na czytelność kodu nie robi się tego. W takim przypadku lepiej jest wykorzystać jedną z wcześniejszych pętli i wspomniane instrukcje dopisać (odpowiednio) przed oraz we wnętrzu pętli.

zmienna przyjmie wartość równą zero. Okazuje się, że nasz kompilator tak właśnie zrobił. Wykrył, że zmienna n nie jest wykorzystywana we wnętrzu pętli. Oznacza to, że chcemy jedynie jej ciało powtórzyć 4 razy, nieważne w jaki sposób. Jeśli masz ochotę - możesz sprawdzić ten fragment za pomocą AYRStudio. Dla uproszczenia symulacji jeszcze przed pętlą główną możesz dopisać:

WyświetlDEC(10000) ;

Spowoduje to już na początku skok do interesującego nas fragmentu. Sprawdź, jakie wartości przyjmuje zmienna n. Powinno to być 3, 2, 1, 0, czyli inaczej niż zostało zapisane, a jednak program jest wykonywany popra-


| (var=1234) j


Rys. 24 Działanie funkcji WyswietIDEC.


NIE. W C wszystkie wyrażenia stałe są obliczane przez kompilator. Adres tablicy jest wyrażeniem stałym. Program nie będzie więc naprawdę wykonywał odejmowania. Po prostu wykorzysta adres do tablicy mniejszy o 1.

Zauważ, że przedstawiony na rysunku 24 sposób obliczeń umożliwia wyświetlanie nie tylko w kodzie dziesiętnym. Można przetwarzać liczby na dowolny kod. Należy zmienić jedynie współczynnik, przez który liczba jest dzielona (zarówno przy uzyskiwaniu reszty, jak i przy przesuwaniu). Podstawowym ograniczeniem od góry bazy, z jaką może odbywać się przetwarzanie, jest liczba pozycji w tablicy g_WzoryCyfr.

Interesująca sprawa dotycząca specyfiki procesorów AVR jest związana z punktem © na listingu 15. Ta część kodu jest odpowiedzialna za wyświetlenie kresek na wyświetlaczach, jeśli zakres możliwych do wyświetlenia wartości został przekroczony. Zauważ teraz, że formalnie zmienna w pętli for przyjmuje wartości od 0 do 3 włącznie. Jednak ze względu na zbiór instrukcji procesora okazuje się, że mniejszym nakładem kodu można przerwać wykonywanie pętli, gdy dana

Elektronika dla Wszystkich Wrzesień 2005 39


Wyszukiwarka

Podobne podstrony:
cz4 Programowan ie Jak to robi GCC Co to są tak naprawdę zmienne lokalne? Kiedy zdefiniujesz jakąś
cz4 Programowanie ABC... C static, volatile Oprócz tego, że zmienna może być na przykład typu int c
cz5 5 Programowanie ABC... C Napisy w C Napisy w C tworzą tak zwane łańcuchy znakowe. Idea jest bard
Image245 Programowanie ABC... C Jak działają strumienie? Pamiętasz, jak do tej pcry obsługiwaliśmy n
ZAMKI! > (lOtlO) mi Jakie wartości wydrukuj* ponlłaiy prograa b) Zaproponuj tulany w Mtodil* add.
21196 sr7 cie ich jako miary wzorcowej). Wbijcie w ziemię najpierw dwie iyki ukośnie tak, by się kr
memo zwierzęta1 Wytnij obrazki. Potasuj. Odwróć je tak, by zwierzęta nie były widoczne. Następnie od
img251 (4) 2. JAK PAKOWAĆ PACZKI I JAK ZROBIĆ PUDEŁKA BEZ SKLEJANIA Bardzo często musimy owijać
36
page0380 373 PLATON. przełożeni misteryów pochwalali tak szczytne tłumaczenie, nie wiadomo; występow
sen w pracy Jak spać w pracy, żeby szef się nie zorientował ■■■ Najlepsze pozycje ■■■Na
File0388 C i turyści wybrali się na wycieczkę wr góry. Narysuj każdemu właściwym kolorem drogę tak,

więcej podobnych podstron