Pętle

2016-11-13 22:44
Jacek Labudda
												

O co w tym chodzi

Na początek powiem, że nie wyobrażam sobie pisania programu bez pętli. Napisanie gry bez użycia pętli jest po prostu niemożliwe. Powiedzmy, że chcemy poinformować użytkownika programu o jakimś błędzie i chcemy zrobić to 10 razy, wiec robimy coś takiego:
cout << "error" << endl; cout << "error" << endl; cout << "error" << endl; ...
Otóż nie. Aby nie bawić się w powtarzanie tego samego, możemy użyć pętle, która nas wyręczy w pewien sposób. Każdy duży program składa się z jednej pętli głównej oraz wielu pętli podrzędnych. Pętle są instrukcją złożoną, które wykonują po kolei nadane jej instrukcje. W przypadku, gdy warunek danej pętli zostaje spełniony to ona powtarza swoje działanie.

Rodzaje pętli

Wyróżniamy następujące pętle: * for * while * do-while

Pętla for

img Pętla for działa na takiej zasadzie, że w jej instrukcji możemy zadeklarować pewną zmienną oraz nadać jej wartość początkową, po czym określamy warunek, aby pętla mogła się zakończyć w pewnym momencie oraz na końcu podajemy o ile ma się zmieniać wartość zmiennej, jest to tzw. licznik. Aby to wszystko było zrozumiałe zobrazuję to na przykładzie:
for(int zmienna = 0; zmienna < 10; zmianna++); // for(1; 2; 3); //1. tworzenie zmiennej i przypisanie wartosci //2. warunek //3. inkrementacja
Dlaczego powyżej napisałem, że możemy zadeklarować zmienną, przypisać warunek oraz licznik, a nie musimy??? Ponieważ, te instrukcje nie są potrzebne do działania pętli. Możemy stworzyć pętle w taki sposób:
for( ; ; );
Oczywiście bez podania instrukcji nasza pętla będzie pracowała, aż użytkownik zakończy działanie programu.

Pętla while

img Kolejna jest pętla while, która używana jest zazwyczaj jako pętla główna, o której wspomniałem wcześniej. W instrukcji pętli while podajemy tylko warunek, na takiej samej zasadzie jak w pętli for.
int zmienna = 0; while(zmienna < 10) //while(warunek) { zmienna++; }
Tutaj niestety nie możemy pozostawić warunku pustego. Działanie pętli zostanie zakończone w momencie, gdy warunek nie zostanie spełniony.

Pętla do-while

img No i ostatnia pętla do-while, która działa na trochę innej zasadzie jak jej poprzednik, czyli pętla while. Jeśli warunek w pętli while nie był spełniony, to pętla nie wykonywała się ani razu, zaś w pętli do-while warunek podajemy po wykonaniu pętli, czyli przy wejściu do pętli nie ma żadnego strażnika, który by sprawdzał wejściówki, za to na końcu przechodzimy kontrole, sprawdzane jest, czy spełniamy warunki, jeśli tak to zostajemy w pętli, a jeśli nie to zostajemy wyrzuceni :D. Możliwe jest, że nic nie rozumiesz z mojego tłumaczenia, więc zobrazuje operacje na petli do-while:
int zmienna = 0; do{ cout << "Podaj wartosc zmiennej: "; cin >> zmienna; }while(zmienna != 10); //pętla wykonywana dopoki uzytkownik nie poda liczby 10 //reszta programu

Słowo kluczowe break i continue

Spotkaliśmy się już wcześniej ze słowem kluczowym break w lekcji o przełącznikach. Jego zadaniem jest zakończenie wykonywania pętli. continue ma działanie podobne do break. Zakańcza bieżące przejście pętli w danym miejscu i próbuje ją wykonać kolejny raz.

Miejmy litość

Pętla w której wykonujemy skomplikowane obliczenia, potrafi zużywać dużą część procesora. Choć nie zawsze jest to konieczne. Np. w grze gdzie nie ma konieczności rysowania wszystkiego więcej niż 60 razy na sekundę, możemy narzucić ograniczenie. Służy to tego funkcja Sleep(time), która powoduje, że program zatrzymuje się na czas określony w argumencie tej funkcji. Czas podajemy w milisekundach. Przykład:
#include <iostream> #include <Windows.h> using namespace std; int main(){ int czas = 0; while(1){ system("cls"); cout << "Czas pracy programu: " << czas++ << endl; Sleep(1000); } return 0; }
Wynik: Czas pracy programu: X

Przykłady

A teraz przykład, żeby lepiej zobrazować operacje na każdej z pętli:
#include <iostream> using namespace std; int main(){ cout << "Wynik petli for: " << endl; for(int zmienna1 = 0; zmienna1 < 10; zmienna1++){ cout << "wynik: " << zmienna1 << endl; } cout << endl << "Wynik petli while: " << endl; int zmienna2 = 0; while(zmienna2 < 10){ cout << "wynik: " << zmienna2++ << endl; } cout << endl << "Wynik petli do-while: " << endl; int zmienna3 = 0; do{ cout << "wynik: " << zmienna3++ << endl; }while(zmienna3 < 10); cout << endl << "Dzialania wszystkich petli zakonczono sukcesem ;D" << endl; return 0; }
Wynik wygląda następująco: Wynik petli for: wynik: 0 wynik: 1 wynik: 2 wynik: 3 wynik: 4 wynik: 5 wynik: 6 wynik: 7 wynik: 8 wynik: 9 Wynik petli while: wynik: 0 wynik: 1 wynik: 2 wynik: 3 wynik: 4 wynik: 5 wynik: 6 wynik: 7 wynik: 8 wynik: 9 Wynik petli do-while: wynik: 0 wynik: 1 wynik: 2 wynik: 3 wynik: 4 wynik: 5 wynik: 6 wynik: 7 wynik: 8 wynik: 9 Dzialania wszystkich petli zakonczono sukcesem ;D Sądzę, że lekcja była dość łatwa i poradziłeś sobie z nieszczęsnymi pętlami. Jeśli nie to polecam przerobić lekcje od początku, a na pewno zrozumiesz działanie pętli. Jeśli jednak to nie pomoże zrozumieć, to polecam nasze forum. Jeśli jednak zrozumiałeś to możesz przejść do kolejnej lekcji, ale zanim to mam dla Ciebie takie krótkie zadanie. W końcu praktyka czyni mistrza. Zadanie: 1.Napisz prosty program, który poprosi użytkownika o podanie odpowiedniej liczby(to już zależy od Ciebie jakiej). Jeśli użytkownik poda odpowiednią liczbę, to program zakończy działanie, a jeśli nie, to będzie prosił o podanie poprawnej liczby. Potrzebne jest: - odpowiednia pętla; - znajomość operatorów; 2.Napisz program używając pętli, który pomoże Tobie osiągnąć poniższy efekt: = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = =

Użytkownicy
Logowanie:
Zaloguj
Polub nas na facebooku
Wyszukiwanie na stronie