Strona główna » Kursy » Kurs C# » Pętla For
 

Pętla For

Wstęp

Pętla for to prawdopodobnie najczęściej używana pętla wśród programistów. Pozwala ona na bardzo intuicyjne zapisanie ile razy dany zestaw instrukcji ma zostać wykonany. W tym artykule chciałbym przybliżyć ideę pętli for i przedstawić kilka przykładów jak ją wykorzystać.

Zapis

Pętla for rozpoczyna się od słowa kluczowego for. Potem w nawiasie okrągłym należy kolejno podać instrukcję początkową, warunek i instrukcję do wykonania na koniec iteracji, a wewnątrz pętli instrukcje do powtórzenia. Oto szkic wyglądu funkcji:

  1. for ([instr. początkowa]; [warunek]; [instr. po iteracji]) {
  2.   [instrukcje];
  3. }

Instrukcja początkowa jest to instrukcja wykonywana przed pętlą i zazwyczaj się inicjalizuje tam zmienną, która będzie iterować kolejne powtórzenia. Warunek zapisuje się tka samo jak w pętli while. Jest on sprawdzany przed każdą iteracją. Z kolei instrukcja po iteracji wywołuje się na zakończenie każdej iteracji. W tym miejscu najczęściej zwiększa się licznik.

Zastosowanie

Wypisanie liczb od 1 do 10

W celu wypisania liczb będzie potrzebne zadeklarowanie zmiennej, która będzie przechowywać aktualną wartość do wypisania. Do tego można wykorzystać warunek początkowy, aby przypisać zmiennej pewną wartość początkową, którą będziemy zwiększać na koniec każdej iteracji.

  1. for(int i = 1; i <= 10; i++) {
  2.   Console.Write("{0} ", i);
  3. }

Jak instrukcję początkową wstawiamy inicjalizację zmiennej i na wartość 1. Następnie sprawdzamy czy spełniony jest warunek 1 <= 10. Jest on spełniony, więc przechodzimy do wypisania zmiennej, a potem zwiększamy wartość zmiennej i o 1. Przed wykonaniem następnej iteracji warunek jest ponownie sprawdzany dla nowej wartości zmiennej i.

Po uruchomieniu program wypisze na ekran:

  1. 1 2 3 4 5 6 7 8 9 10

Kolejne potęgi 2

Na koniec iteracji można użyć dowolnej instrukcji, więc można przykładowo wartość nie zwiększać o 1, a mnożyć razy dwa. Kolejne wartości można wypisać, aby użytkownik mógł zobaczyć kolejne potęgi liczby 2.

  1. for (int i = 1; i <= 1024; i *= 2) {
  2.   Console.Write("{0} ", i);
  3. }

Tym razem wewnątrz pętli for instrukcją wykonywaną na koniec iteracji jest mnożenie aktualnej wartości przez 2.

Po uruchomieniu program wypisze na ekran:

  1. 1 2 4 8 16 32 64 128 256 512 1024

Kilka instrukcji

W przypadku pętli while po każdej iteracji możliwe jest zmodyfkowanie wartości kilku zmiennych (albo wykonanie kilku operacji). W poprzednim przykładzie wyliczone zostały kolejne potęgi dwójki, ale niewiadomo, która wartość to 2 podniesiona do której potęgi. Z tego powodu przydałoby się równocześnie zmieniać indeks potęgi oraz jej wartość. Można to zrobić następująco:

  1. for (int x = 0, y = 1; x < 5; x++, y *= 2) {
  2.   Console.WriteLine("2^{0} = {1}", x, y);
  3. }

Jak można zauważyć, kolejne instrukcje początkowe jak i po iteracji można rozdzielać przecinek. Jest to konstrukcja, której nie wykorzystuje się zazwyczaj do pisania algorytmów, ale warto wiedzieć, że taka istnieje możliwość.

Po uruchomieniu program wypisze na ekran:

  1. 2^0 = 1
  2. 2^1 = 2
  3. 2^2 = 4
  4. 2^3 = 8
  5. 2^4 = 16

Błędy implementacji

Pętlą for można utworzyć nieskończoną pętle poprzez usunięcie jakichkolwiek instrukcji oraz warunku. Poniższy kod będzie wykonywać się w nieskończoność:

  1. for(;;;);

Użycie powyższego przykładu jest bardzo wątpliwe. Typowym błędem, który występuje podczas stosowania pętli for (jak również innych pętli) dotyczy wykonania instrukcji o jedną iterację za dużo lub za mało. Błąd też może dotyczyć nieodpowiedniego warunku, który powoduje, że program będzie wykonywać się w nieskończoność. Weźmy pod uwagę poniższy kod:

  1. for(int i = 0; i == 9; i += 2) {
  2.   Console.Write("{0} ", i);
  3. }

Warunek jest niepoprawny, ponieważ zmienna iterująca i nigdy nie będzie miała wartości nieparzystej, a więc warunek nie zostanie spełniony. W tym przypadku należałoby go zamienić np. na > lub >=, aby program zakończył wypisywanie.

Zadania

Zadanie 1

Wczytaj od użytkownika dwie liczby a i b, a następnie wyświetl wszystkie liczby nieparzyste z podanego zakresu. Po wykonaniu iteracji licznik powinien być zwiększany o 2.

Przykładowo dla wartości a = 8 i b = 15 program powinien wypisać:

  1. 9 11 13 15

Zadanie 2

Napisz program, który zsumuje wszystkie wartości od 1 do n, gdzie n jest wartością wczytaną od użytkownika. W rozwiązaniu programu nie stosuj wzoru na sumę n pierwszych liczb naturalnych!

Przykładowo dla wartości a = 8 i b = 15 program powinien wypisać:

  1. 9 11 13 15

Zadanie 3

Napisz program, który wczyta wartość n od użytkownika, a nastepnie wypisze tabelkę według następującego wzoru:

*1234..n
11234..n
22468..2n
336912..3n
4481216..4n
..............
nn2n3n4n..n2

W celu wyrównania kolumn danych warto zastosować znak specjalny '\t'.

Przykładowo dla wartości n = 3 program powinien wypisać:

  1. *     1     2     3
  2. 1     1     2     3
  3. 2     2     4     6
  4. 3     3     6     9