Dobre, autor pisze, że nie kuma pętli a wy o matematyce, składni konkretnych języków i nie wiadomo czym jeszcze... Spróbuję po swojemu.
Problem:
Czasami pisząc program trzeba wykonać jakiś kawałek kodu więcej niż 1 raz. Żeby nie utknąć w samym algorytmie przykład kompletnie abstrakcyjny - mamy wypisać wszystkie liczby z przedziału 0..9. kod wyglądałby tak:
Kopiuj
drukuj 0
drukuj 1
drukuj 2
drukuj 3
drukuj 4
drukuj 5
drukuj 6
drukuj 7
drukuj 8
drukuj 9
To co widać wyżej zadziała, ale trzeba pisać dużo kodu, co z jednej strony jest czasochłonne, z drugiej łatwo się pomylić, a czasami będzie niemożliwe (np. dla przedziału 0..1000000).
Żeby jakoś rozwiązać te niedogodności, języki programowania odpowiadają na tę potrzebę poprzez umożliwienie zapętlania kodu, w najprostszym wydaniu wygląda to tak:
Kopiuj
licznik := 0 //przypisz licznikowi wartość 0
#hop //po prostu miejsce w kodzie, oznaczenie miejsca, do którego program może skoczyć
drukuj licznik
licznik := licznik + 1 //zwiększ wartość licznika o 1
jeżeli licznik <= 9 to skocz do #hop
Czyli mamy kod do wykonania, jakiś warunek i jeżeli ten warunek jest spełniony, to program ma skoczyć w określone miejsce (cofnąć się do początku bloku pętli. W "normalnym" kodzie można do tego użyć pętli for:
Kopiuj
for(<coś co ma być wykonane przed wejściem w pętlę>; <warunek skoku>; <coś co ma być wykonane po każdym skoku>){
<instrukcje, które maja być wykonane w każdym przebiegu pętli>
}
Czyli właściwy kod, przy użyciu pętli for będzie wyglądał tak:
Kopiuj
for(int licznik = 1; licznik <=9; licznik = licznik +1){
print(licznik);
}
Teraz zmieńmy zadanie - wypiszmy każdą możliwą kombinację cyfr 0..9: 0-0, 0-1 ... 9-9. Zrobimy to dzięki temu, że częścią instrukcji wykonywanych w pętli może być kolejna pętla:
Kopiuj
for(int licznik = 1; licznik <=9; licznik = licznik +1){
for(int drugiLicznik = 0; drugiLicznik <= 9; drugiLicznik = drugiLicznik + 1){
print(licznik+"-"+drugiLicznik);
}
}
W każdym z 10 przebiegów głównej pętli wykonywane jest 10 przebiegów pętli wewnętrznej i to jest cała tajemnica "podwójnej pętli". Warto pamiętać, że pętle nie mogą się "przecinać". Dodatkowo, oprócz pętli for z licznikiem mogą być używane inne konstrukcje: while, do..while, które czasami pozwalają na prostsze zapisanie konkretnych algorytmów.