![]() |
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