Prezentowane materiały są przeznaczone dla uczniów szkół ponadgimnazjalnych Autor artykułu: mgr Jerzy Wałaszek |
©2014 mgr
Jerzy Wałaszek
|
Iteracja to numerowany obieg pętli, czyli obieg z numerem. Pętla iteracyjna wykonuje obiegi numerowane. Do tego celu musi posiadać zmienną, w której będzie przechowywać numer obiegu.
Pętlę iteracyjną można zrealizować za pomocą poznanych dotąd pętli warunkowych:
Code::Blocks | |
// Pętla iteracyjna // Koło informatyczne // (C)2015 I LO w Tarnowie //------------------------ #include <iostream> using namespace std; int main() { int i; i = 1; while(i < 10) { cout << "Obieg nr " << i << endl; i++; } return 0; } |
// Pętla iteracyjna // Koło informatyczne // (C)2015 I LO w Tarnowie //------------------------ #include <iostream> using namespace std; int main() { int i; i = 1; do { cout << "Obieg nr " << i << endl; i++; } while(i < 10); return 0; } |
Przyjrzyj się pierwszej pętli. Składa się z kilku części:
i = 1; | inicjalizacja licznika pętli |
while(i < 10) | warunek kontynuacji pętli |
cout << ... | instrukcja powtarzana |
i++ | modyfikacja licznika wykonywana na końcu obiegu |
Ponieważ pętle tego typu są powszechnie stosowane w programowaniu, język C++ posiada specjalną instrukcję dla tworzenia pętli iteracyjnej:
for(a;b;c) instrukcja;
Za słówkiem kluczowym for pojawia się nawias, w którym są trzy elementy:
a | inicjalizacja, czyli kod wykonywany przed pierwszym obiegiem |
b | warunek kontynuacji, musi być prawdziwy, aby pętla wykonała obieg |
c | modyfikacja, czyli kod wykonywany na końcu każdego obiegu |
Nasza pętla wygląda teraz następująco:
Code::Blocks |
// Pętla iteracyjna // Koło informatyczne // (C)2015 I LO w Tarnowie //------------------------ #include <iostream> using namespace std; int main() { int i; for(i = 1; i < 10; i++) cout << "Obieg nr " << i << endl; return 0; } |
Czy instrukcja for jest niezbędna? Nie, nie jest, lecz ułatwia życie programistom. W zwykłej pętli warunkowej elementy a, b i c są rozrzucone w kodzie programu. W instrukcji for mamy je wszystkie zgrupowane wewnątrz zawiasów za słowem kluczowym for. Poza tym instrukcja ta umożliwia pisanie krótszych bardziej zwięzłych programów. Pętla for nie jest nowym typem pętli w języku C++. Wewnętrznie jest ona i tak zawsze przekształcana na pętlę while.
Kiedy stosujemy pętlę typu for? Stosujemy ją najczęściej wtedy, gdy należy wykonać zadaną liczbę obiegów lub instrukcje wykonywane w obiegu wykorzystują numer tego obiegu.
Ćwiczenie czyni mistrza, zatem poćwiczmy:
Code::Blocks |
// Pętla iteracyjna // Koło informatyczne // (C)2015 I LO w Tarnowie //------------------------ #include <iostream> using namespace std; int main() { int i; for(i = 10; i <= 20; i++) cout << "Obieg nr " << i << endl; return 0; } |
Code::Blocks |
// Pętla iteracyjna // Koło informatyczne // (C)2015 I LO w Tarnowie //------------------------ #include <iostream> using namespace std; int main() { int i,a,b; cout << "a = "; cin >> a; cout << "b = "; cin >> b; for(i = a; i <= b; i++) cout << "Obieg nr " << i << endl; return 0; } |
Code::Blocks |
// Pętla iteracyjna // Koło informatyczne // (C)2015 I LO w Tarnowie //------------------------ #include <iostream> using namespace std; int main() { int i,a,b; cout << "a = "; cin >> a; cout << "b = "; cin >> b; for(i = a + (a % 2); i <= b; i+=2) cout << "Obieg nr " << i << endl; return 0; } |
Teraz napiszemy pętlę, która wyrysuje kostki do gry z oczkami od 1 do 6:
Code::Blocks |
// Pętla iteracyjna // Koło informatyczne // (C)2015 I LO w Tarnowie //------------------------ #include <iostream> using namespace std; int main() { int i; for(i = 1; i <= 6; i++) { cout << " ----- \n"; switch(i) { case 1: cout << "| |\n" "| o |\n" "| |\n"; break; case 2: cout << "| o|\n" "| |\n" "|o |\n"; break; case 3: cout << "| o|\n" "| o |\n" "|o |\n"; break; case 4: cout << "|o o|\n" "| |\n" "|o o|\n"; break; case 5: cout << "|o o|\n" "| o |\n" "|o o|\n"; break; case 6: cout << "|o o|\n" "|o o|\n" "|o o|\n"; break; } cout << " ----- \n"; } return 0; } |
Czy powyższy program da się uprościć? Tak, jeśli dodamy pętlę wewnętrzną, która będzie wyświetlać poszczególne wiersze kostek w zależności od liczby ich oczek.
Oczka | Kostka | Każda kostka składa się z pięciu wierszy. Wiersze o
numerach 0 i 4 są takie same. Pozostałe składają się z pięciu różnych
typów wierszy: ----- – a – b| o | – c| o| – d|o | – e|o o| – fDla każdej wartości oczek kostki wiersze 0 i 4 to typ a. Poniższa tabelka określa rodzaj wiersza w zależności od jego numeru i liczby oczek:
Teraz dokonujemy syntezy: wiersz nr 1: b (1), d (2,3), f (4,5,6) wiersz nr 2: b (2,4), c (1,3,5), f (6) wiersz nr 3: b (1), e (2,3), f (4,5,6) Zwróć uwagę, że wiersz 1 i 3 różnią się tylko d i e. Obserwacja ta uprości program. |
||||||||||||||||||||||||||||||||||
1 |
0 ----- a 1 | | b 2 | o | c 3 | | b 4 ----- a |
|||||||||||||||||||||||||||||||||||
2 |
0 ----- a 1 | o| d 2 | | b 3 |o | e 4 ----- a |
|||||||||||||||||||||||||||||||||||
3 |
0 ----- a 1 | o| d 2 | o | c 3 |o | e 4 ----- a |
|||||||||||||||||||||||||||||||||||
4 |
0 ----- a 1 |o o| f 2 | | b 3 |o o| f 4 ----- a |
|||||||||||||||||||||||||||||||||||
5 |
0 ----- a 1 |o o| f 2 | o | c 3 |o o| f 4 ----- a |
|||||||||||||||||||||||||||||||||||
6 |
0 ----- a 1 |o o| f 2 |o o| f 3 |o o| f 4 ----- a |
Code::Blocks |
// Pętla iteracyjna // Koło informatyczne // (C)2015 I LO w Tarnowie //------------------------ #include <iostream> using namespace std; int main() { int i,j; for(i = 1; i <= 6; i++) for(j = 0; j < 5; j++) switch(j) { case 0: ; case 4: cout << " ----- \n"; break; case 1: ; case 3: if(i == 1) cout << "| |\n"; else if(i < 4) { if(j == 1) cout << "| o|\n"; else cout << "|o |\n"; } else cout << "|o o|\n"; break; case 2: if(i == 6) cout << "|o o|\n"; else if(i % 2) cout << "| o |\n"; else cout << "| |\n"; break; } return 0; } |
I Liceum Ogólnokształcące |
Pytania proszę przesyłać na adres email: i-lo@eduinf.waw.pl
W artykułach serwisu są używane cookies. Jeśli nie chcesz ich otrzymywać,
zablokuj je w swojej przeglądarce.
Informacje dodatkowe