Pętle w języku C++ | Korepetycje do matury z informatyki - Maurycy Gast

Pętle w języku C++

W dzisiejszej części poznamy pętlę, czyli sposób na powtarzanie operacji, ­­­którą musimy wykonać kilka razy. Znajomość pętli umożliwi nam wykonywanie poszczególnych operacji dowolną ilość razy. Często wymagane jest wykonanie programu na wielu różnych danych. Dane można trzymać w tablicach, a do ich przetwarzania wykorzystać właśnie pętle. Jeśli zastanawiałeś się w jaki sposób można zaimplementować te same rozkazy dla wielu danych, dowiesz się tego właśnie w tym wpisie.

Uwaga! Zalecam zapoznać się z poprzednim wpisem dotyczącym tablic w języku C++. Kliknij, aby przejść do wpisu.

Pętle w języku C++

Pętla to nic innego jak instrukcja powtarzania. Informuje ona program, żeby wykonywał te same instrukcje po sobie. W języku C++ występują 3 rodzaje pętli. Zacznijmy od omówienia chyba najprostszej z nich – pętli while.

while (warunek) {
	// wykonywany kod
}

Powyższy zapis oznacza, że wpisany do pętli kod, będzie wykonywał się dopóki spełniony będzie warunek. Dla niektórych łatwiejszy do zrozumienia może okazać się poniższy zapis.

początek_pętli:
jeżeli spełniony jest warunek wykonuj:
	// wykonywany kod
	skocz na początek_pętli

Załóżmy, że chcemy wypisać liczby od 0 do 10 włącznie. Wówczas możemy zastosować pętlę while w następujący sposób:

int i = 0;
while (i <= 10) {
	cout << i;
	i = i + 1;
}

Dla takich sytuacji odpowiednia będzie jednak pętla for, która skróci powyższą pętlę while i w bardzo wielu przypadkach jest czytelniejsza. Konstrukcja pętli dla powyższego przykładu byłaby następująca:

for (int i = 0; i <= 10; i = i + 1) {
	cout << i;
}

Zwróćmy uwagę, które części kodu zostały przeniesione, do którego miejsca kodu. Czy porównując powyższe przykłady, jesteś w stanie sam odkryć zasadę działania pętli for? Pętlę for należy rozumieć w następujący sposób:

for (przed wejściem do pętli; warunek; ostatnia linijka pętli) {
	// wykonywany kod
}

Pętla „for”, co oznacza „dla”, służy do wykonywania operacji dla liczb od wartości początkowych do wartości końcowych, zazwyczaj ze skokiem 1.

Kolejnym, ostatnim już rodzajem pętli jest do while. Pętla ta bardzo podobna jest do pętli while z drobną różnicą, mianowicie warunek sprawdzany jest nie na początku, lecz na końcu pętli. Konstrukcja do while wygląda następująco:

do {
	// wykonywany kod
} while (warunek);

Użycie takiej konstrukcji wiąże się z tym, że zawsze wykonamy zawarty w niej kod przynajmniej raz. Jeśli chcielibyśmy zapisać tę pętlę w pseudokodzie w analogiczny sposób, w jaki zapisaliśmy pętlę while, wyglądała by ona następująco:

początek_pętli:
	// wykonywany kod
	jeżeli spełniony jest warunek skocz na początek_pętli

Jak widzimy, różnica polega tylko na tym, w którym miejscu wykonujemy sprawdzenie warunku pętli.

Instrukcje break i continue

Już w poprzedniej części kursu pojawiła się instrukcja break. Służyła ona do przerwania wykonywania instrukcji sterującej switch. Jej użycie okazuje się również bardzo przydatne w przypadku pętli. Wywołanie tej instrukcji w pętli while, for lub do while będzie skutkowało natychmiastowym opuszczeniem pętli i kontynuowaniem wykonywania kodu znajdującego się pod pętlą. Napiszmy przykładowo prostą grę, w której program będzie pobierał od użytkownika liczbę oraz wypisywał tę liczbę pomnożoną przez 2. Jeżeli liczba wpisana przez gracza będzie większa, gracz wygrywa. Jeśli nie, gra toczy się dalej.

int liczba_gracza, liczba_programu;
while (true) {
	cin >> liczba_gracza;
	liczba_programu = 2 * liczba_gracza;
	cout << liczba_programu << endl;
	if (liczba_gracza <= liczba_programu) {
		cout << „Wygrałem, zagramy jeszcze raz” << endl;
	}
	else {
		cout << „O nie, odkryłeś sposób na wygranie” << endl;
		break;
	}
}

Zauważ, że powyższa pętla zawiera warunek true. Oznacza to, że będzie wykonywać się zawsze, gdy dojdzie do sprawdzenia warunku. Innymi słowy, bez użycia instrukcji break, pętla ta wykonywała by się w nieskończoność. Jednak w tym wypadku zostanie przerwana, gdy gracz wpisze liczbę ujemną, ponieważ tylko w takim wypadku jego liczba będzie większa niż liczba programu.

Podobną, lecz rzadziej wykorzystywaną instrukcją jest continue. Powoduje ona pominięcie kolejnych kroków pętli i przeskok na jej koniec. Użycie continue w pętli while oraz do while spowoduje zatem sprawdzenie warunku, a w pętli for – wykonanie „instrukcji powiększenia (lub pomniejszenia) zmiennej” oraz sprawdzenie warunku.

Pętle zagnieżdżone

Myślę że w tym miejscu najlepszym pomysłem będzie przypomnienie sobie tabliczki mnożenia, którą zrobiliśmy w poprzedniej części kursu. Zadeklarowana wówczas tablica była napisana ręcznie. Było to rozwiązanie prymitywne, które na pewno nie sprawdziłoby się na maturze z informatyki przede wszystkim ze względu na czas, który tracimy na jej napisanie. Spróbujmy więc wypełnić taką tablicę w sposób, który zajmie nam znacznie mniej czasu. Z pomocą przychodzi nam zagnieżdżanie pętli. Polega to na wykonywaniu pętli w innej pętli.

const int N = 11;
int tabliczka_mnozenia[N][N];
for (int i = 0; i < N; i++) {
	for (int j = 0; j < N; j++) {
		tabliczka_mnozenia[i][j] = i * j;
 	}
}

Zwróć uwagę na zastosowaną składnię i++ oraz j++. Jest to tzw. inkrementacja. Taka instrukcja oznacza w przybliżeniu i = i + 1 lub i +=1. Rozróżniamy preinkrementację oraz postinkrementację. Zachęcam Cię do zapoznania się z tymi hasłami oraz z post- i pre- dekrementacją, jeśli planujesz używać takiego zapisu w swoich projektach. Jeśli jednak zależy Ci na jak najszybszym przygotowaniu się do matury z informatyki, a instrukcje te sprawiają Ci problem, nie warto zaprzątać sobie nimi głowy. Wówczas należy stosować zapis i += 1 lub i = i + 1, i zrezygnować ze składni i++, ++i, i– oraz –i.

Jeżeli chcesz dowiedzieć się więcej o różnicy między post- a pre- inkrementacją, zajrzyj tutaj (wpis w języku angielskim).

Praca domowa

  1. Napisz program, który wczyta od użytkownika 10 wyrazów, a następnie wypisze je wszystkie oddzielone przecinkami. Spróbuj użyć stałej i ustaw liczbę wczytywanych wyrazów tak, aby w dowolnym momencie, można było ją zmienić w kodzie.
  2. Napisz program, który pobierze od użytkownika liczbę całkowitą, a następnie wczyta następne liczby, których ilość została pobrana na początku i wyświetli na koniec ich sumę. Nie używaj tablic. Zastanów się, jak to zrobić bez ich użycia.
  3. Napisz program, który będzie wczytywał od użytkownika liczby, dopóki ten nie wpisze liczby 13. Użyj instrukcji break oraz pętli do while.

Wpisy, które mogą Cię zainteresować



Dodaj komentarz