Prezentowane materiały są przeznaczone dla uczniów szkół ponadgimnazjalnych. Autor artykułu: mgr Jerzy Wałaszek, wersja1.0 |
©2010 mgr
Jerzy Wałaszek |
Pomoce:
Instalacja Code Blocks i
tworzenie projektu aplikacji konsoli.
System uzupełnień do podstawy - U2
Wprowadzenie do języka C++, strumienie i zmienne
Komputer podejmuje decyzje
Pętla (ang. loop) to cykliczne powtarzanie wykonywania wybranej instrukcji lub grupy instrukcji w programie. Obiegiem pętli (ang. loop pass) nazywamy pojedynczy cykl wykonania powtarzanej instrukcji lub grupy instrukcji. Pętla warunkowa (ang. conditional loop) wykonuje powtarzanie obiegów w zależności od wybranego warunku. W języku C++ mamy dwie podstawowe instrukcje pętli warunkowych. Pierwsza z nich to pętla typu while:
while
(warunek) instrukcja;
while
- słowo
kluczowe języka C++ oznaczające instrukcję pętli warunkowej
warunek
- dowolne wyrażenie arytmetyczne.
Warunek jest prawdziwy (true), jeśli ma wartość
różną od zera. Warunek jest fałszywy (false),
jeśli ma wartość zero.
instrukcja
- powtarzana w pętli instrukcja.
Pętla typu while działa następująco. Na początku każdego obiegu komputer oblicza wartość warunku. Jeśli wynik jest różny od zera, to zostaje wykonana instrukcja i komputer rozpoczyna nowy obieg od ponownego obliczenia wartości warunku. Jeśli warunek ma wartość równą zero, instrukcja w pętli nie zostaje wykonana i pętla kończy działanie.
// Kolejne liczby naturalne od 1 do 10 // (C)2010 I LO w Tarnowie //------------------------ #include <iostream> using namespace std; int main() { int i; i = 1; while(i <= 10) cout << i++ << endl; return 0; } |
// Kolejne liczby naturalne od 10 do 1 // (C)2010 I LO w Tarnowie //------------------------ #include <iostream> using namespace std; int main() { int i; i = 10; while(i >= 1) cout << i-- << endl; return 0; } |
Ponieważ warunek jest sprawdzany na początku każdego obiegu pętli przed wykonaniem instrukcji zawartej w pętli, to jeśli jest on już od początku fałszywy, pętla nie wykona ani jednego obiegu.
// Fałszywy warunek // (C)2010 I LO w Tarnowie //------------------------ #include <iostream> using namespace std; int main() { int i; i = 11; while(i <= 10) cout << i++ << endl; return 0; } |
// Fałszywy warunek // (C)2010 I LO w Tarnowie //------------------------ #include <iostream> using namespace std; int main() { int i; i = 0; while(i >= 1) cout << i-- << endl; return 0; } |
Drugi rodzaj pętli warunkowej to pętla do while:
do
instrukcja; while(warunek);
do
- słowo kluczowe języka C++ oznaczające początek pętli warunkowej
instrukcja - powtarzana w pętli instrukcja. Zwróć uwagę, że
musi ona kończyć się średnikiem.
while
- słowo kluczowe
oznaczające sekcję sprawdzania warunku.
warunek
- dowolne wyrażenie arytmetyczne. Warunek
jest prawdziwy (true), jeśli ma wartość różną od
zera. Warunek jest fałszywy (false), jeśli ma
wartość zero.
Pętla typu do...while nieznacznie różni się od pętli while. W każdym obiegu najpierw wykonywana jest instrukcja, a dopiero po jej wykonaniu komputer oblicza i sprawdza warunek. Jeśli ma on wartość różną od zera, to wykonywany jest następny obieg pętli, Jeśli warunek ma wartość zero, pętla nie wykonuje dalszych obiegów i jest przerywana.
// Kolejne liczby naturalne od 1 do 10 // (C)2010 I LO w Tarnowie //------------------------ #include <iostream> using namespace std; int main() { int i; i = 1; do cout << i++ << endl; while(i <= 10); return 0; } |
// Kolejne liczby naturalne od 10 do 1 // (C)2010 I LO w Tarnowie //------------------------ #include <iostream> using namespace std; int main() { int i; i = 10; do cout << i-- << endl; while(i >= 1); return 0; } |
Ponieważ warunek kontynuacji jest sprawdzany w pętli do...while na końcu obiegu po wykonaniu powtarzanej instrukcji, to pętla wykonuje zawsze przynajmniej jeden obieg bez względu na wartość warunku - czyli inaczej niż pętla while, która przy fałszywym warunku nie wykonywała się ani jeden raz.
// Fałszywy warunek // (C)2010 I LO w Tarnowie //------------------------ #include <iostream> using namespace std; int main() { int i; i = 11; do cout << i++ << endl; while(i <= 10); return 0; } |
// Fałszywy warunek // (C)2010 I LO w Tarnowie //------------------------ #include <iostream> using namespace std; int main() { int i; i = 0; do cout << i-- << endl; while(i >= 1); return 0; } |
Jeśli w pętli chcemy powtarzać więcej niż jedną instrukcję, to stosujemy instrukcję blokową (po klamerce zamykającej nie musimy wstawiać średnika):
while(warunek) |
do |
// Kolejne liczby parzyste od 2 do n // (C)2010 I LO w Tarnowie //------------------------ #include <iostream> using namespace std; int main() { int i,n; cin >> n; i = 2; while(i <= n) { cout << i << " "; i += 2; } cout << endl; return 0; } |
// Kolejne liczby nieparzyste od 2 do n // (C)2010 I LO w Tarnowie //------------------------ #include <iostream> using namespace std; int main() { int i,n; cin >> n; i = 1; while(i <= n) { cout << i << " "; i += 2; } cout << endl; return 0; } |
// Sumy kolejnych liczb od 1 do n // (C)2010 I LO w Tarnowie //------------------------ #include <iostream> using namespace std; int main() { int i,n,s; cin >> n; i = 1; s = 0; while(i <= n) { s += i++; cout << s << endl; } return 0; } |
// Kolejne potęgi liczby 2 // (C)2010 I LO w Tarnowie //------------------------ #include <iostream> using namespace std; int main() { unsigned long long i,n; cin >> n; i = 1; while(i <= n) { cout << i << endl; i *= 2; } return 0; } |
// Silnia n! // (C)2010 I LO w Tarnowie //------------------------ #include <iostream> using namespace std; int main() { int i,n,s; cin >> n; s = i = 1; while(i <= n) { s *= i++; cout << s << endl; } 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