Pętle

Xgrzyb90

Pętle w C

W języku programowania C istnieją zasadniczo 3 rodzaje pętli: for, while, do-while. 3 pętle różnią się zastosowaniem, ale w przeciwieństwie do innych języków programowania każda pętla jest w stanie (przy odrobinie pracy) wykonać to co może wykonać inna pęŧla (a nie jak for i while w pascal).

A więc zacznijmy omawiać poszczególne pętle:

1. pętla for

składnia:

for (inicjalizacja licznika; warunek działania; czynność po wykonaniu jednego obrotu pętli) {
instrukcje
} 

(Jeżeli pętla wykonuje jedną instrukcję można pominąć klamry)

przykład:

// W kwesti przypomnienienia nie można stosować czegoś takiego jak for (int i=1; ...) To dozwolone jest tylko w C++

for (i = 0; i<max; ++i) printf ('Oks');
lub
for (i = 1; i<max2; i += 2) printf ('s');

Pętla for najbardziej nadaje się w tedy gdy zazwyczaj wykonujemy określoną liczbę iteracji pętli.

Szczególne postacie pętli:

for (;;) printf ('A'); // nieskończona pętla odpowiednik (while(1))
for (; i<max;) //="//" odpowiednik="odpowiednik" while="while" (i<max)="(i&lt;max)" </pre="&lt;/pre">

2. pętla while

składnia:

while (warunek) {
instrukcje
} (klamry dla jednej instrukcji można ominąć)

np,

while (blokada!=false) {
printf ('Nie ma blokady dla licznika: %d', i);
++i;
}

Pętla while najbardziej nadaje się do wykonywania nieznanej ilości iteracji.

Np. Pętla wiadomości w WinApi

Szczególne przypadki:

while (1) {printf ('s');} // nieskońćzona pętla

3. pętla do while

składnia:

do {
instrukcje
} while (warunek);

(klamry dla jednej instrukcji można ominąć)
np,

do {
printf ('Nie ma blokady dla licznika: %d', i);
++i;
} while (i<12); // Tu zaznaczam że do while zawsze wykona się przynajmniej 1 w przeciwieństwie do while

Pętla do while najbardziej nadaje się do wykonywania nieznanej ilości iteracji>=1.

Np. Pętla wiadomości w WinApi

Szczególne przypadki:

do {} while (1); {printf ('s');} // nieskońćzona pętla

Alternatywne i szczegółne metody (w większości przypadków niepolecane):
1) rekurencja

Przykład

int silnia (int liczba) {
if (liczba==0 || liczba==1) return 1; else return liczba * silnia (liczba-1);
}

int NWD (int a, int b){}

int quick_sort (int *tablica, int rozmiar) {}

UWAGA: wywoływanie kosztuje w pamięci i obliczeniowo. Pamięć na stosie jest ograniczona.

2) zabawy z if i goto (metody ulubione w assemblerze ale nie w c/c++)

przykład:

etykieta:

if (i<12) goto etykieta;

Zaburza strukturę i zaciemnia ideę przewodnią programu.

Jeżeli chcesz stosować goto nagminnie do przejdź na asma.

0 komentarzy