Zacznijmy od wyjaśnienia pojęcia iteracja. Można powiedzieć,
że jest to jedno wykonanie wielokrotnie powtarzającej się czynności. Wyobraźmy
sobie sytuację, w której musimy napełnić 3 kufle piwem. Wykonując to zadanie powtórzymy
3 razy te same czynności:
- - przygotować kufel,
- otworzyć butelkę,
- nalać piwo do kufla,
- - znowu przygotować kufel,
- ...
Nasze zadanie składa się, więc z 3 iteracji.
Co mają wspólnego iteracje z programowaniem? Bardzo dużo,
ponieważ instrukcje iteracyjne pozwalają nam zmniejszyć ilość kodu źródłowego
oraz wykonać zadania, w których dopiero podczas działania programu wiadomo ile
instrukcji wymagają.
Instrukcje iteracyjnie potocznie nazywa się pętlami.
Potęgowanie
Potęgowanie może być dobrym przykładem instrukcji
iteracyjnej.
Bez instrukcji iteracyjnych nie jest łatwo napisać metodę
potrafiącą potęgować (należałoby skorzystać z rekurencji, której nie
poznaliśmy). Jednak używając pętli oraz operatorów „+” oraz „*” możemy osiągnąć
ten cel.
Algorytm wyglądałby mniej więcej tak:
-
podajemy podstawę potęgi,
-
podajemy wykładnik,
-
korzystając z pętli mnożymy podstawę przez siebie tyle razy ile wynosi
wykładnik pomniejszony o 1.
Pętla for
Jest to prawdopodobnie najczęściej stosowana instrukcja
warunkowa. Jej budowa (składnia) wygląda następująco:
for( liczba całkowita ; warunek logiczny ; instrukcja)
{
ciało pętli
}
„for” to słowo kluczowe rozpoczynające pętle. Wewnątrz
nawiasów znajdują się trzy części oddzielone średnikami. Pierwsza zawiera
instrukcje wykonującą się na początku każdej iteracji. Zazwyczaj deklaruje się
w niej liczbę, która będzie nam służyła jako indeksator iteracji, czyli w
uproszczeniu określi ile razy ciało pętli ma się wykonać. Druga będąca
warunkiem logicznym decyduje o zakończeniu wykonania pętli, jeśli warunek jest
prawdziwy rozpocznie się następna iteracja w przeciwnym wypadku pętla zakończy
się. Trzecia ostatnia część to instrukcja wykonująca się na końcu każdej
iteracji. Zazwyczaj zmieniana jest tam wartość indeksatora.
Czas na prosty przykład. Napiszmy program wypisujący na
ekranie trzy liczby od 1 do 3 na dwa sposoby: bez użycia oraz z użyciem
instrukcji iteracyjnych.
class
KlasaGlowna
{
static void
Main()
{
int a = 1;
int b = 2;
int c = 3;
System.Console.WriteLine(a);
System.Console.WriteLine(b);
System.Console.WriteLine(c);
System.Console.Read();
}
}
Wynik wykonania:

Teraz użyjmy instrukcji “for”.
class
KlasaGlowna
{
static void
Main()
{
for (int
indeksator = 1; indeksator <= 3; indeksator++)
{
System.Console.WriteLine(indeksator);
}
System.Console.Read();
}
}
Wynik będzie identyczny jak po wykonaniu poprzedniego
programu. Ktoś może się spytać po co, więc używać instrukcji warunkowych jeśli
poradziliśmy sobie bez nich. Po pierwsze to nie zawsze jest to możliwe, a po
drugie co wtedy jeśli mielibyśmy wypisać tysiąc kolejnych liczb?
Należy wiedzieć, że pętla „for” nie musi zawierać wszystkich
trzech części wewnątrz nawiasów. Dozwolona jest na przykład taka konstrukcja:
class
KlasaGlowna
{
static void
Main()
{
for (; ; )
{
System.Console.WriteLine("Hello");
}
}
}
Wynik niestety nie będzie zbyt sensowny, ponieważ w
nieskończoność wypisywane na ekranie będzie słowo “Hello”.

Za to poniższy kod jest jak najbardziej poprawny:
class
KlasaGlowna
{
static void
Main()
{
int indeksator = 1;
for (; indeksator <= 3; indeksator++)
{
System.Console.WriteLine(indeksator);
}
System.Console.Read();
}
}
Wynik będzie taki sam jak podczas wykonania programów z
początku rozdziału, a więc wypisane zostaną trzy kolejne liczby od 1 do 3.
Jednak powinno się unikać takich konstrukcji i używać pętli
„for” w standardowy sposób.
Przejdźmy teraz do potęgowania.
class
KlasaGlowna
{
static void
Main()
{
System.Console.WriteLine("Podaj
podstawę.");
string podstawa = System.Console.ReadLine();
System.Console.WriteLine("Podaj
wykładnik");
string wykladnik = System.Console.ReadLine();
int wynik = 1;
for (int i = 0;
i < int.Parse(wykladnik); i++)
{
wynik *=
int.Parse(podstawa);
}
System.Console.WriteLine("Wynik
wynosi: " + wynik);
System.Console.Read();
}
}
Najpierw podajemy dwie liczby będące podstawą i
wykładnikiem. Następnie określamy wynik jako „1”. W pętli wynik mnożymy przez
podstawę tyle razy ile wynosi wykładnik. Jeśli wykładnik wynosi „0” to nie
wykona się żadna iteracja pętli i wynik będzie wynosił „1”, czyli tyle ile
powinien (liczba podniesiona do potęgi „0” daje nam „1”). Zmienne „podstawa”
oraz „wykladnik” są typu string, ponieważ pobieramy ich wartości za pomocą
metody „WriteLine()”, która zwraca typ tekstowy jako wynik. Dlatego w dalszej
części programu musimy konwertować te zmienne z typu tekstowego na
całkowitoliczbowy za pomocą metody „Parse()”. A oto wynik działania naszego
programu:

Ćwiczenie
Za pomocą instrukcji „for” napisz program obliczający
silnię.
class
KlasaGlowna
{
static void
Main()
{
System.Console.WriteLine("Podaj
liczbę.");
string liczba = System.Console.ReadLine();
int wynik = 1;
for (int i = 1;
i <= int.Parse(liczba); i++)
{
wynik *= i;
}
System.Console.WriteLine("Wynik
wynosi: " + wynik);
System.Console.Read();
}
}