MetodyCzęść NR.6Pętle w programowaniu są powszechne, gdyż wykonywanie jakiejś czynności X razy z innymi parametrami jest na porządku dziennym.
Oczywiście zmorą każdego początkującego programisty jest fakt ,że pętle muszą się kiedyś skończyć.
Jednak nie ma w nich nic strasznego, jeśli się pamięta o paru podstawowych rzeczach.
Pętla While
Pętla while powtarza blok kodu tak długo ,aż warunek jest prawidłowy. Składnia pętli while jest następująca.
while (warunekbool)
{
operacje
}
Jeśli warunek bool jest false na start pętla nie wykona nawet pierwszej iteracji.
Jak zapewne zdałeś sobie sprawę trzeba bardzo uważać by pętla była skończona, czyli trzeba w jakiś sposób zmienić warunek bool w bloku, gdzie wykonuje się pętla.
int i = 0;
while (i < 5)
{
Console.WriteLine(i++);
}
Pętla For
Pętla For jest jedną z najczęściej spotykanych pętli w C# . Jest ona stworzona do operacji iteracyjnych z określoną ilością , a ponieważ aby jej użyć trzeba (powiedzmy) zadeklarować zmienną pomocniczą, liczącą iteracje, to na pewno o niej nie zapomnisz.
Ciało pętli for wygląda następująco. Każdy element pętli for w nawiasie musi być odseparowany średnikiem.
for (inicjalizacja zmiennej; warunek logiczny;
zaktualizowanie zmiennej)
{
//blok kodu
}
Oto pętla for, która robi dokładnie to samo, co pierwszy przykład pętli while.
for (int i = 0; i < 5; i++)
{
Console.WriteLine(i);
}
Aktualizowanie zmiennej może nastąpić poprzez inkrementacje lub dekrementację oraz poprzez wyrażenia, które zwiększają daną liczbę o samą siebie. Obrazek powyżej reprezentuje moją próbę napisania pętli for, która zwiększałaby liczbę o wartość 3. Jak widać o czymś ważnym zapomniałem ,a dokładniej mówiąc o znaku równa się.
Prawidłowe zapis pętli w inny sposób niż inkrementacja i dekrementacja jest następujący.
for (int j = 21; j >= 7 ; j = j - 3)
{
Console.WriteLine(j);//21,18,15,12,9
}
for (int j = 21; j >= 7 ; j -= 3)
{
Console.WriteLine(j);//21,18,15,12,9
}
for (decimal i = 0.7m; i <= 1; i = i + 0.1m)
{
Console.WriteLine(i); //0.7,0.8,0.9,1.0
}
for (float i = -0; i <= 1; i = i + 0.1f)
{
Console.WriteLine(i);
//...0.7,0.8,0.9,1.0 spodziewany rezultat
}
for (float i = -2.5f; i <= 1; i = i + (1f / 3f))
{
Console.ForegroundColor = ConsoleColor.Yellow;
Console.WriteLine(i);
}
Console.ReadKey();
int i = 0;
for (;i < 5;)
{
Console.WriteLine(i++);
}
W pętli for bez problemu możemy zawrzeć kolejną pętle for. Trzeba tylko pamiętać by nasz zmienna pomocnicza była inna niż w pierwszej pętli.
for (int i = 0; i < 2; i++)
{
for (int j = 9; j >= 7 ; j--)
{
Console.WriteLine(i + j);//9,8,7,10,9,8 }
}
Jeśli zaistnieje taka potrzeba można w pętli for zainicjalizować wiele zmiennych, ale wyrażenie warunkowe bool będzie zawsze jedno ,ale może być ono złożone z nawiasami. Nie zobaczysz często takich zapisów w programowaniu zresztą na pierwszy rzut oka nawet ja nie bardzo wiedziałem co się dzieje w takim losowym kodzie, który napisałem.
for (int i = 0, j = -10, k = 1; i > (j + k); i--, j++, k++)
{
Console.WriteLine(" i = " + i.ToString() + " j =
" + j.ToString() + " k = " + k.ToString());
}
Pierwsza iteracja: 0 > (-10 + 1)
Druga iteracja: -1 > (-9 +2)
Trzecia iteracja: –2 > (-8 + 3)
Czwarta iteracja: –3 > ( –7 + 4) || warunek niespełniony przerwanie pętli.
Tak jak w przypadków if i else zmienne zadeklarowane w pętli for jak “i’,”j”,”k” istnieją tylko w tym bloku kodu i nie są dostępne poza nimi. Zmienne zadeklarowane w pętli nie mogą być zadeklarowane wcześniej w kodzie.
Pętla “Do While”
Pętle for i while sprawdzają swój warunek na początku pętli. Są jednak algorytmy, które wymagają aby kod w pętli wykonał się na początku i chociaż raz, bądź warunek jest sprawdzany zaraz po wykonaniu pierwszej iteracji .
W pętli for bądź while, jeśli warunek logiczny ma wartość false pętla nie wykona się ani razu.
Do tego właśnie celu mamy pętle “do while” co w bezpośrednim tłumaczeniu brzmi “zrób to dopóki” trafnie opisując działanie pętli.
int b = 0;
do{
b += 2;
Console.WriteLine(b);
}
while (b < 9);
Skróty Arytmetyczne
Tajemniczy zapis b+=2 zwiększa zmienną b co 2 ,jest to skrócony zapis b = b + 2;
Przy okazji umieszczę tutaj tabelkę związaną z tymi skrótowymi zapisami, ponieważ najwyraźniej zapomniałem wspomnieć o tym w poprzednich rozdziałach. A to może być pomocne przy pętlach.
Normalny zapis | Skrócony zapis |
b = b +2; | b += 2; |
b = b / 2; | b /= 2; |
b = b % 2; | b %=2; |
b = b –2; | b –=2; |
b = b * 2; | b *= 2; |
Continue i Break
Czy istnieje jakiś inny sposób przerwania pętli? Oczywiście ,że tak.
Break jak dobrze pamiętasz z “zeskakiwała” z konstrukcji switch. Tak samo jest z pętlami, kiedy blok kodu pętli napotka słowo kluczowe break pętla jest natychmiast przerywana i wykonuje się następne wyrażenie, które jest już po pętli.
Natomiast Continue zatrzymuje daną iteracje i zmusza program do przejścia do następnej. Oto fragment kodu, który rzuci więcej światła na te słowa kluczowe.
int b = 0;
do{
b += 2;
if (b == 12)
break;
else if ((b == 4) || (b == 10))
continue;
Console.WriteLine(b);
} while (true); //2,6,8
Jak widzisz pętla zastanie przerwana gdy zmienna “b” dojdzie do 12 dzięki słowu kluczowemubreak. Natomiast liczby 4 i 10 nie zostaną wyświetlone w konsoli, ponieważ słowo kluczowe continue przerwało daną iteracje, więc kod “Console.WriteLine” się nie wykonał.
Debugowanie kodu i śledzenie działania pętli
Powinien coś wspomnieć o możliwości śledzenia kodu w Visual Studio 2010. Na ślepo nie będziesz śledził pętli.
Pamiętaj jak w czasach pisania algorytmów w “turbo pascalu” rozpisywałem sortowania i grafy na kartce papieru.
Więcej o tym, jak Visual Studio może pomóc w śledzeniu kodu w tym wpisie.
Tyle o pętlach
W C# została do poznania tylko jedna pętla foreach, ale do zrozumienia jak ona działa najpierw musiałbym powiedzieć coś o kolekcjach, dlatego na razie o tym nie myśl i przygotuj się na przedostatni wpis z podstaw C# mówiący o błędach i wyjątkach.