Wróć do informacji o e-podręczniku Wydrukuj Pobierz materiał do PDF Pobierz materiał do EPUB Pobierz materiał do MOBI Zaloguj się, aby dodać do ulubionych Zaloguj się, aby skopiować i edytować materiał Zaloguj się, aby udostępnić materiał Zaloguj się, aby dodać całą stronę do teczki

Algorytm iteracyjny w C++

Zanim napiszesz swój pierwszy program realizujący algorytm iteracyjny w języku C++, musisz się dowiedzieć, jak w takim programie zastosować pętle. PętlapętlaPętla pozwala na wykonanie sekwencji instrukcji w programie określoną liczbę razy. Wyobraźmy sobie, że chcemy wypisać na ekranie wszystkie liczby z zakresu od 1 do 50 i dla każdej z nich wyświetlić komunikat, czy jest ona liczbą podzielną przez 4. Pięćdziesięciokrotne zapisanie ciągu tych samych poleceń byłoby bardzo żmudne i czasochłonne, a kod długi i niezbyt czytelny. Dlatego podczas pisania programu skorzystamy z instrukcji pętli, które znacząco przyspieszą i ułatwią pracę. Jakie instrukcje iteracyjne mamy zatem do dyspozycji w języku C++?

Ważne!

W języku C++ możemy korzystać z następujących instrukcji iteracyjnych:

  • while

  • do‑while

  • for

Pętla while

Zacznijmy od omówienia pętli while. Jej składnia w języku C++ wygląda następująco:

Linia 1. while otwórz nawias okrągły warunekWykonaniaPętli zamknij nawias okrągły otwórz nawias klamrowy. Linia 2. prawy ukośnik prawy ukośnik ciąg instrukcji. Linia 3. zamknij nawias klamrowy.

Na początku pętli musi pojawić się słowo kluczowe while. W przypadku spełnienia warunku warunekWykonaniaPętli zostanie wykonany ciąg instrukcji wewnątrz nawiasów klamrowych. Instrukcje będą cyklicznie wykonywane do momentu, gdy warunek pętli przestanie być spełniony. Jeżeli już na początku warunek nie będzie spełniony, polecenia w pętli nie zostaną ani razu wykonane.

Algorytm iteracyjny z wykorzystaniem instrukcji while

Zobaczmy teraz, jak będzie wyglądała pętla dla konkretnego problemu. Napiszmy zatem część programu realizującego algorytm zadany na początku tej sekcji niniejszego e‑materiału. Niech zostaną wypisane wszystkie liczby z zakresu od 1 do 50 z odpowiednim komunikatem o podzielności liczby przez 4.

Linia 1. kratka include otwórz nawias ostrokątny iostream zamknij nawias ostrokątny. Linia 3. int main otwórz nawias okrągły zamknij nawias okrągły otwórz nawias klamrowy. Linia 4. int i znak równości 1 średnik. Linia 6. while otwórz nawias okrągły i otwórz nawias ostrokątny znak równości 50 zamknij nawias okrągły otwórz nawias klamrowy. Linia 7. std dwukropek dwukropek cout otwórz nawias ostrokątny otwórz nawias ostrokątny i otwórz nawias ostrokątny otwórz nawias ostrokątny std dwukropek dwukropek endl średnik. Linia 9. if otwórz nawias okrągły otwórz nawias okrągły i procent 4 zamknij nawias okrągły znak równości znak równości 0 zamknij nawias okrągły otwórz nawias klamrowy. Linia 10. std dwukropek dwukropek cout otwórz nawias ostrokątny otwórz nawias ostrokątny cudzysłów Liczba cudzysłów otwórz nawias ostrokątny otwórz nawias ostrokątny i otwórz nawias ostrokątny otwórz nawias ostrokątny cudzysłów jest podzielna przez 4 cudzysłów otwórz nawias ostrokątny otwórz nawias ostrokątny std dwukropek dwukropek endl średnik. Linia 11. zamknij nawias klamrowy else otwórz nawias klamrowy. Linia 12. std dwukropek dwukropek cout otwórz nawias ostrokątny otwórz nawias ostrokątny cudzysłów Liczba cudzysłów otwórz nawias ostrokątny otwórz nawias ostrokątny i otwórz nawias ostrokątny otwórz nawias ostrokątny cudzysłów nie jest podzielna przez 4 cudzysłów otwórz nawias ostrokątny otwórz nawias ostrokątny std dwukropek dwukropek endl średnik. Linia 13. zamknij nawias klamrowy. Linia 15. i plus plus średnik. Linia 16. zamknij nawias klamrowy. Linia 18. return 0 średnik. Linia 19. zamknij nawias klamrowy.

Algorytm ten jest algorytmem iteracyjnym. Na początku deklarujemy zmienną całkowitą i, w której zapiszemy wartość 1. Dopóki wartość zapisana w i będzie mniejsza lub równa 50, program będzie wypisywał ją na ekranie – dzięki temu zostaną wypisane wszystkie liczby z zakresu 1 do 50. Następnie sprawdzamy, czy reszta z dzielenia danej liczby przez 4 jest równa 0. Jeśli tak, oznacza to, że jest podzielna przez 4, wyświetlamy zatem odpowiedni komunikat. W przeciwnym razie wypisujemy, że liczba nie jest podzielna przez 4. Na koniec w pętli inkrementujemyinkrementacjainkrementujemy zmienną i, aby móc poddać analizie kolejną liczbę.

Pętla do‑while

Przedstawmy teraz składnię pętli do‑while w języku C++:

Linia 1. do otwórz nawias klamrowy. Linia 2. prawy ukośnik prawy ukośnik ciąg instrukcji. Linia 3. zamknij nawias klamrowy while otwórz nawias okrągły warunekWykonaniaPętli zamknij nawias okrągły średnik.

W przypadku tej instrukcji pętla rozpoczyna się słowem kluczowym do, a kończy się while. Ponownie wykonywany jest ciąg instrukcji zawarty w nawiasach klamrowych, gdy spełniony zostaje warunekWykonaniaPętli. Tym razem jednak jest on sprawdzany na końcu pętli. Oznacza to, że mamy pewność, iż instrukcje zostaną wykonane co najmniej jeden raz.

Algorytm iteracyjny z wykorzystaniem instrukcji do‑while

Sprawdźmy instrukcję do‑while w praktyce. Napiszmy algorytm iteracyjny, który wypisze liczby od 35 do 12, a na końcu wyświetli sumę wypisanych liczb.

Linia 1. kratka include otwórz nawias ostrokątny iostream zamknij nawias ostrokątny. Linia 3. int main otwórz nawias okrągły zamknij nawias okrągły otwórz nawias klamrowy. Linia 4. int i znak równości 35 średnik. Linia 5. int suma znak równości 0 średnik. Linia 7. do otwórz nawias klamrowy. Linia 8. std dwukropek dwukropek cout otwórz nawias ostrokątny otwórz nawias ostrokątny i otwórz nawias ostrokątny otwórz nawias ostrokątny std dwukropek dwukropek endl średnik. Linia 9. suma plus znak równości i średnik. Linia 10. i minus minus średnik. Linia 11. zamknij nawias klamrowy while otwórz nawias okrągły i zamknij nawias ostrokątny znak równości 12 zamknij nawias okrągły średnik. Linia 13. std dwukropek dwukropek cout otwórz nawias ostrokątny otwórz nawias ostrokątny cudzysłów Suma wszystkich liczb wynosi dwukropek cudzysłów otwórz nawias ostrokątny otwórz nawias ostrokątny suma średnik. Linia 14. return 0 średnik. Linia 15. zamknij nawias klamrowy.

W powyższym algorytmie deklarujemy zmienną, której nadajemy wartość 35. W tym przypadku zmienna i będzie zmniejszana, ponieważ chcemy wyświetlać liczby malejąco. Deklarujemy także zmienną suma, w której będą przechowywane aktualne wartości sumy wyświetlanych liczb.

Dzięki temu, że warunek w pętli do‑while sprawdzany jest na końcu, od razu wykonywane są instrukcje w nawiasach klamrowych. Wewnątrz pętli wyświetlamy aktualną wartość zmiennej i, po czym dodajemy tę wartość do zmiennej suma. Następnie dekrementujemydekrementacjadekrementujemy zmienną i. Na koniec sprawdzany jest warunek pozwalający na przejście do kolejnej iteracji.

Pętla for

Składnia pętli for wygląda następująco:

Linia 1. for otwórz nawias okrągły warunekPoczątkowy średnik warunekWykonywania średnik modyfikacja zamknij nawias okrągły otwórz nawias klamrowy. Linia 2. prawy ukośnik prawy ukośnik ciąg instrukcji. Linia 3. zamknij nawias klamrowy.

Pętla for zawiera na początku słowo kluczowe for. Z kolei warunekPoczątkowy służy do stworzenia potrzebnych zmiennych, np. iteratora. Następnie, jeżeli warunekWykonania jest spełniony, zostaje wykonywany ciąg instrukcji wewnątrz pętli. Ostatni element, czyli modyfikacja, jest instrukcją zmieniającą wartość wyrażenia inicjującego po każdej iteracji pętli.

Algorytm iteracyjny z wykorzystaniem instrukcji for

Napiszmy algorytm iteracyjny obliczający wartość 4! z wykorzystaniem pętli for.

Linia 1. kratka include otwórz nawias ostrokątny iostream zamknij nawias ostrokątny. Linia 3. int main otwórz nawias okrągły zamknij nawias okrągły otwórz nawias klamrowy. Linia 4. int podstawa znak równości 4 średnik. Linia 5. int silnia znak równości 1 średnik. Linia 7. if otwórz nawias okrągły podstawa wykrzyknik znak równości 0 zamknij nawias okrągły otwórz nawias klamrowy. Linia 8. for otwórz nawias okrągły int i znak równości 1 średnik i otwórz nawias ostrokątny znak równości podstawa średnik i plus plus zamknij nawias okrągły otwórz nawias klamrowy. Linia 9. silnia asterysk znak równości i średnik. Linia 10. zamknij nawias klamrowy. Linia 11. zamknij nawias klamrowy. Linia 13. std dwukropek dwukropek cout otwórz nawias ostrokątny otwórz nawias ostrokątny silnia średnik. Linia 14. return 0 średnik. Linia 15. zamknij nawias klamrowy.

W algorytmie deklarujemy zmienną podstawa i przypisujemy do niej liczbę, z której chcemy obliczyć silnięsilniasilnię. Z kolei w zmiennej silnia będzie zapisywany wynik obliczenia silni.

  • Wyrażeniem inicjującym jest zmienna i, której przypisujemy wartość 1.

  • Warunkiem wykonania pętli jest sprawdzenie, czy wyrażenie inicjujące jest mniejsze lub równe 4.

  • Wyrażeniem modyfikującym jest inkrementacja zmiennej i.

4! jest iloczynem liczb naturalnych mniejszych lub równych 4, czyli:

4!=1234

W związku z powyższym, zadaniem pętli będzie mnożenie wyniku silnia przez kolejne liczby naturalne: 1, 2, 3, 4. Oto polecenia wykonywane w ramach pętli for:

  1. Zaczynamy od wyrażenia inicjującego - zmiennej i przypisywana jest wartość 1.

  2. Sprawdzamy, czy zmienna i jest mniejsza lub równa zmiennej podstawa. Jeżeli tak, przechodzimy do kolejnego kroku; jeżeli nie – wychodzimy z pętli.

  3. Następnie wykonywane są instrukcje wewnątrz pętli.

  4. Zwiększona zostaje zmienna i w celu uzyskania kolejnej liczby.

  5. Następuje powrót do kroku 2.

Słownik

dekrementacja
dekrementacja

zmniejszenie wartości argumentu o 1

inkrementacja
inkrementacja

zwiększenie wartości argumentu o 1

pętla
pętla

instrukcja iteracyjna, która umożliwia cykliczne wykonywanie ciągu instrukcji

silnia
silnia

n! - iloczyn liczb naturalnych mniejszych lub równych n