background image

IV.

Konstrukcje języka Visual Basic 2010 pozwalające na wielokrotne 
wykonywanie zestawu instrukcji – pętle programowe

Wiele rzeczywistych działań polega na powtarzaniu pewnej czynności tak długo, aż osiągnie się 

określony cel. Podobnie w programowaniu istnieją konstrukcje – pętle (ang. loop) programowe – po-

zwalające na wielokrotne powtórzenie zadanego ciągu instrukcji. Język Visual Basic 2010 posiada 

cztery typy pętli, niektóre z nich mogą występować dodatkowo w kilku rodzajach. Podział na typy jest  

następujący:

While

 … 

End While

 (Podczas gdy; Kiedy…)

Do

 … 

Loop

 (Wykonaj … )

For

 … 

Next

 (Dla … Następny)

For

 

Each

 … 

Next

 (Dla każdego … Następny)

IV.1.

Pętla While … End While

Przypomnijmy sobie Kopciuszka postawionego przed zadaniem oddzielenia grochu od soczewi -

cy. Gdyby dziewczynka zapytała macochę jak długo ma wykonywać tą czynność, to usłyszałaby za-

pewne, że tak długo, aż w soczewicy nie będzie grochu. Nie wiadomo ile jest groszków w soczewicy,  

dlatego nie można określić momentu zakończenia zadania przez podanie konkretnej liczby przeszu-

kiwań miski z soczewicą. Jednak zadanie będzie ukończone wtedy, gdy z soczewicy usunie się każ-

dy groszek.

Do takich zadań służy właśnie pętla While. Jej składnia jest następująca:

While Warunek

Instrukcja_1
Instrukcje_dalsze

End While

Warunek, podobnie jak w konstrukcji warunkowej, to wyrażenie logiczne. Jeśli Warunek ma 

wartość True to instrukcje zawarte w bloku pętli zostaną wykonane. Po wykonaniu wszystkich instruk-

cji następuje powrót do początku pętli i ponowne sprawdzenie wartości warunku. Jeśli jest to False, 

to instrukcje pętli zostaną pominięte i aplikacja rozpocznie wykonywanie pierwszej instrukcji występu-

jącej w kodzie po słowach kluczowych  

End

 

While

. Przypadkiem, nad którym warto się przez mo-

ment zatrzymać, jest ten, w którym warunek ma wartość False już w momencie rozpoczęcia pracy 

pętli. Instrukcje zostaną pominięte, wynika z tego, że blok instrukcji pętli 

While

 może nie zostać wy-

konany.

Wewnątrz bloku instrukcji pętli 

While

 można użyć instrukcji 

Exit

 

While

 przerywającej pracę 

pętli. Sterowanie przechodzi do pierwszej instrukcji po słowach 

End

 

While

. Kolejne ćwiczenie poka-

zuje wykorzystanie pętli  

While

  do „napełniania” wodą akwarium przy użyciu dowolnego naczynia. 

background image

Programista nie wie jakie są wymiary akwarium, nie wie też jaka jest pojemność naczynia. Program 

uzna, że akwarium jest pełne wtedy, gdy dolewana woda osiągnie, lub przekroczy pojemność zbiorni -

ka.

Ćwiczenie 37
Zapoznać się z użyciem pętli While … End While.

1. Utwórz Projekt_037 aplikacji konsolowej.

2. Zadeklaruj w procedurze Main zmienne: dblWysokość, dblSzerokość i dblDługość typu 

Double.

Uwaga. Jeśli zmienne są tego samego typu i nie ma potrzeby nadawania im wartości początko-

wej, to można użyć skróconej formy deklarowania:

Dim dblWysokość, dblSzerokość, dblDługość As Double

3. Zaprogramuj pobieranie zmierzonych przez użytkownika wymiarów akwarium i zapamię-

tanie ich w odpowiednich zmiennych (funkcja konwersji do typu Double to CDbl; użyj 

schematu wprowadzonego w ćwiczeniu 28).

4. Zadeklaruj zmienną dblPojemnośćNaczynia.

5. Zaprogramuj pobranie od użytkownika pojemności naczynia używanego do napełniania 

akwarium i zapamiętanie tej wartości w zmiennej dblPojemnośćNaczynia.

6. Zadeklaruj zmienną dblPojemnośćAkwarium.

7. Zaprogramuj:

obliczenie   pojemności   akwarium

=WSD

i   zapamiętanie   tej   wartości 

w zmiennej dblPojemnośćAkwarium,

wyświetlenie obliczonej wartości w konsoli.

8. Zadeklaruj zmienną dblWlanoLitrów typu Double o wartości początkowej 0.

9. Utwórz blok pętli While z warunkiem sprawdzającym czy wartość zmiennej dblWlanoLi-

trów jest mniejsza niż wartość zmiennej dblPojemnośćAkwarium. Edytor wspomaga pro-

gramistę – wystarczy po wpisaniu warunku nacisnąć klawisz Enter, a konstrukcja pętli 

zostanie dokończona. Kursor tekstowy ustawiony będzie w pierwszym wierszu bloku in-

strukcji pętli While.

Przykład.

    While dblWlanolitrów < dblPojemnośćAkwarium

    End While

background image

10. Zaprogramuj w pętli:

dodawanie do zmiennej dblWlanoLitrów wartości zmiennej dblPojemnośćNaczy-

nia,

Uwaga. Zamiast wykonywać obliczenia w sposób standardowy:

dblWlanoLitrów = dblWlanoLitrów + dblPojemnośćNaczynia

można użyć skróconej formy:

dblWlanoLitrów += dblPojemnośćNaczynia 'Występują również operatory: -=, *=, /=

wyświetlanie w konsoli aktualnej wartości zmiennej dblWlanoLitrów.

11. Dodaj pusty wiersz przed końcem procedury Main i zaprogramuj w nim wyświetlenie in-

formacji o tym, że akwarium zostało napełnione.

12. Skompiluj projekt i uruchom aplikację, zapoznaj się z treścią komunikatów konsoli.

13. Zakończ działanie aplikacji.

Może się okazać (patrz: Rys. 14), że wlano do akwarium więcej wody niż wynosi jego pojem-

ność. Można się przed tym zabezpieczyć stosując instrukcję 

Exit

 

While

. Ilustruje to kolejne ćwicze-

nie.

Ćwiczenie 38
Wykorzystać instrukcję Exit While do przerwania pracy pętli While.

1. Dodaj pusty wiersz na początku bloku instrukcji pętli While.

Rysunek 14: "Przepełnione akwarium" – Projekt_036.

background image

2. Zaprogramuj  konstrukcję warunkową,  której  instrukcje  będą wykonywane  tylko  wtedy, 

gdy suma zmiennych dblWlanoLitrów i dblPojemnośćNaczynia jest większa niż wartość 

zmiennej dblPojemnośćAkwarium, w bloku instrukcji konstrukcji warunkowej zaprogra-

muj:

wyświetlenie komunikatu „Uważaj, nie przelej”,

przerwanie działania pętli przez użycie instrukcji Exit While.

3. Sprawdź działanie aplikacji.

Należy mocno skupić uwagę w chwili konstruowania warunku. Jeśli zostanie użyty warunek, 

którego wartość jest zawsze równa True, to pętla nigdy nie zakończy swojego działania. Oto przykład 

takiego warunku: x * x >= 0, spowoduje on nieskończone wykonywanie pętli. Jeśli programista roz-

myślnie chce utworzyć nieskończoną pętlę to może użyć następującego zapisu: 

While

 True … 

End 

While

. W takim przypadku sposobem na zakończenie pętli jest użycie instrukcji 

Exit

 

While

.

Pętla 

While

 zawsze sprawdza warunek na początku „formułując” w ten sposób myśl, że „może 

nie ma potrzeby wykonywania pętli”. Jeśli programista ma pewność, że pętla powinna być wykonana 

choćby raz, albo chce wymusić z jakichś powodów przynajmniej jednokrotne wykonanie bloku pętli, 

to powinien użyć pętli typu opisanego w kolejnym punkcie.

IV.2.

Pętla Do … Loop

Występują cztery rodzaje pętli Do … Loop. Składnię każdego z nich przedstawiono poniżej.

Do

Instrukcje

Loop Until Warunek

Do

Instrukcje

Loop While Warunek

Do Until Warunek

Instrukcje

Loop

Do While Warunek

Instrukcje

Loop

Warunek to wyrażenie logiczne, którego wartość wpływa na przerwanie, lub kontynuację działa-

nia pętli. Wewnątrz bloku każdego rodzaju można użyć instrukcji  

Exit

 

Do

  przerywającej działanie 

pętli, następną wykonywaną instrukcją będzie pierwsza instrukcja programu występująca po wierszu, 

ze słowem 

Loop

, który kończy konstrukcję pętli. Tworzenie pętli 

Do

 … 

Loop

 jest wspomagane przez 

edytor kodu źródłowego.

Pętla ze słowem kluczowym 

Until

 (Dopóki nie) wykonywana jest tak długo, jak długo Warunek 

ma wartość False. Innymi słowy, pętla wykonywana jest do chwili, w której warunek osiągnie wartość 

True, wtedy jej działanie jest przerywane.

Pętla ze słowem kluczowym 

While

 wykonywana jest tak długo, jak długo warunek ma wartość 

True. Innymi słowy, pętla wykonywana jest do chwili, w której warunek osiągnie wartość False, wtedy 

jej działanie jest przerywane.

background image

Jeśli słowa 

Until

While

 występują po słowie 

Loop

, to instrukcje bloku pętli zostaną wykona-

ne przynajmniej jeden raz. Jeśli słowa te występują po słowie 

Do

, to sprawdzenie wartości warunku 

następuje przed wykonaniem pętli i może spowodować, że instrukcje bloku nie zostaną wykonane 

nawet raz.

Należy zauważyć, że pętla  

Do While

  Warunek …  

Loop

  nie różni się w działaniu od pętli 

While

 Warunek … 

End While

. Oznacza to, że poznanie składni pętli 

Do

 … 

Loop

 zwalnia programi-

stę od konieczności zapoznawania się ze składnią pętli 

While

 … 

End While

.

Podobnie jak w przypadku pętli 

While

 … 

End While

, pętle 

Do

 stosuje się wtedy, gdy liczba 

wykonań pętli nie jest określona, a zakończenie działania pętli zależy od pewnego warunku. Kolejne  

ćwiczenie polega na zastosowaniu pętli 

Do

 … 

Loop Until

 do realizacji prostej zabawy – Zgadnij, 

którą liczbę z przedziału <1, 100> wybrałem.

Do wykonania ćwiczenia potrzebna jest wiedza na temat metod Randomize oraz Rnd. Deklara-

cje tych metod zawarte są w module VBMath, który znajduje się w przestrzeni nazw Microsoft.Visual-

Basic. Wymienione wcześniej metody wykorzystywane są w programach, których działanie bazuje 

na przetwarzaniu liczb losowych. Wynikiem funkcji Rnd jest wartość losowa typu 

Single

 z przedziału 

<0, 1). Sekwencja liczb losowych zwracanych przez funkcję po uruchomieniu aplikacji jest zawsze 

identyczna. Taka sytuacja jest przydatna w aplikacjach, które mają działać zawsze w oparciu o ten 

sam ciąg liczb losowych. Jeśli aplikacja powinna działać za każdym razem w oparciu o inny ciąg liczb 

losowych, to należy przed wygenerowaniem ciągu zainicjować generator tych liczb. Służy do tego 

procedura Randomize.

Przykład.

Randomize()
While Rnd() > 0.1

Console.WriteLine("Wylosowano liczbę większą niż 0,1")

End While

Liczba wykonań pętli zależy od tego kiedy funkcja Rnd zwróci wartość mniejszą (lub równą) 0,1. 

Przy każdym uruchomieniu przedstawionego ciągu instrukcji liczba wykonań będzie inna. Jeśli nie 

zostanie użyta procedura Randomize, to liczba wykonań pętli zawsze będzie taka sama.

Drugi   problem   polega   na   uzyskaniu   liczby   losowo   wybranej   z   określonego   zakresu, 

np. <Min, Maks>. Dla ustalenia uwagi niech Min wynosi 1, a Maks 100. Funkcja Rnd zwraca wartości 

typu 

Single

 nie mniejsze niż zero i mniejsze niż 1. Jeśli pomnożyć wartość funkcji przez 100, to otrzy-

mamy wartości nie mniejsze niż zero i mniejsze niż 100. Interesują nas części całkowite tych liczb, 

dlatego należałoby użyć funkcji  Int, która zwraca część całkowitą liczby. Odpowiednie wywołanie 

wygląda następująco:

Int(Rnd() * 100)

background image

Zwracane wartości to liczby typu 

Single

 o wartościach całkowitych z przedziału <0, 99>. Doda-

nie jedynki przenosi nas do przedziału <1, 100>. Ostatecznie wyrażenie:

Int(Rnd() * 100) + 1

zwraca wartości z przedziału postulowanego na początku. Uogólniając można napisać następujący 

wzór spełniający wcześniejsze żądanie – liczba losowa z przedziału <Min, Maks>:

Int(Rnd() * (Maks – Min + 1)) + Min

Ćwiczenie 39
Zaprojektować   aplikację   konsolową,   która   pozwala   użytkownikowi   odgadnąć 
wylosowaną przez program liczbę.

1. Utwórz Projekt_039 aplikacji konsolowej.

2. Zainicjuj w procedurze Main generator liczb losowych wywołując procedurę Randomize.

3. Zadeklaruj zmienną sngLiczbaLosowa typu Single.

4. Przypisz zmiennej sngLiczbaLosowa wartość obliczoną z wzoru Int(Rnd() * 100) + 1.

5. Zadeklaruj zmienną sngLiczbaUżytkownika typu Single. Zmienna posłuży do przechowy-

wania wartości typowanych przez użytkownika.

6. Utwórz pętlę Do … Loop, wpisując Do i naciskając klawisz Enter. Zauważ, że pętla nie  

zawiera słów kluczowych While (Until) oraz warunku.

7. Zaprogramuj w pętli:

pobranie od użytkownika liczby i przypisanie jej wartości do zmiennej sngLiczbaU-

żytkownika,

konstrukcję warunkową lub wyboru, która w przypadku gdy:

wartość   zmiennej   sngLiczbaUżytkownika   jest   większa   niż   wartość   zmiennej 

sngLiczbaLosowa, wyświetli komunikat „Za duża”,

wartość zmiennej sngLiczbaUżytkownika jest mniejsza niż wartość zmiennej 

sngLiczbaLosowa, wyświetli komunikat „Za mała”.

8. Dodaj po słowie Loop kończącym pętlę słowo kluczowe Until i warunek porównujący war-

tości zmiennych sngLiczbaLosowa i sngLiczbaUżytkownika.

9. Dodaj pusty wiersz przed końcem procedury Main i zaprogramuj w nim wyświetlenie ko-

munikatu o trafieniu.

10. Sprawdź działanie aplikacji.

background image

Użytkownik musi podać przynajmniej jedną liczbę, żeby program mógł porównać ją z liczbą wy-

losowaną. Jeśli trafi, to program się zakończy, jeśli nie, pętla będzie się wykonywać do skutku. Każdy 

z czterech rodzajów pętli można przekształcić w pozostałe trzy. Łatwo sprawdzić, że w niektórych 

przypadkach bardziej czytelny i zwarty kod otrzymujemy stosując jeden rodzaj pętli, a w innych przy-

padkach – jeden z pozostałych. Wybór odpowiedniego rodzaju zależy od zadania i od przyzwyczajeń  

programisty.

IV.3.

Pętla For … Next

Pętle opisane we wcześniejszych punktach stosuje się wtedy, gdy nie wiadomo ile razy pętla 

będzie wykonana, bo zależy to od pewnego warunku, którego wartość jest zmienna. W przypadku, 

gdy znamy liczbę wykonań pętli, albo wynika ona jasno ze ściśle określonych wartości: początkowej, 

końcowej i przyrostu, należy zastosować pętlę 

For

 … 

Next

 o następującej składni:

For ZmiennaSterującaPętlą = WartośćPoczątkowa To WartośćKońcowa Step Przeskok

Instrukcje_Pętli

Next

Instrukcje pętli nie muszą zależeć od wartości zmiennej sterującej pętlą. Zmiennej tej, przy uru-

chomieniu pętli przypisywana jest wartość początkowa, która w ogólności może być wyrażeniem. Je-

śli w tym momencie wartość zmiennej sterującej pętlą jest mniejsza od, lub równa wartości końcowej 

(ta również może być określona poprzez wyrażenie), to zostaną wykonane instrukcje pętli. Po zakoń-

czeniu bloku instrukcji następuje zwiększenie, o wartość (wyrażenia) Przeskok, zmiennej sterującej 

pętlą i powrót do początku bloku. Następuje ponowne sprawdzenie, czy zmienna sterująca pętlą jest 

mniejsza od, lub równa wartości końcowej. Jeśli warunek nie jest spełniony wykonanie pętli jest prze-

rywane i sterowanie przenosi się do pierwszego wiersza po słowie 

Next

.

Powyższe   jest   prawdziwe   wtedy,   gdy  wartość   Przeskok   jest   nieujemna.   Gdy  Przeskok   jest 

mniejszy od zera, to sprawdzane jest, czy zmienna sterująca pętlą ma wartość większą od, lub rów-

ną, wartości końcowej. Jeśli wartość Przeskok jest dodatnia, to wartość zmiennej sterującej podczas 

wykonania pętli rośnie, a jeśli ujemna – maleje.

Jeśli programista pominie słowo kluczowe 

Step

, to musi również pominąć wyrażenie Przeskok. 

W takim przypadku Przeskok ma wartość domyślną 1.

Zmienna sterująca pętlą może być dowolnego typu, dla którego możliwe jest zastosowanie ope-

ratorów: 

<=

>=

+

-

. Wartości wyrażeń WartośćPoczątkowa, WartośćKońcowa oraz Przeskok obli-

czane są tylko raz, w momencie uruchomienia pętli. Jeśli instrukcje pętli zmieniają w jakiś sposób  

wartości tych wyrażeń, to zmiana taka nie ma wpływu na krotność wykonania pętli. Jeśli instrukcje 

bloku pętli zmieniają wartość zmiennej sterującej pętlą, skutki działania pętli mogą być trudne do 

przewidzenia. Wykonanie pętli 

For

 można przerwać stosując instrukcję 

Exit

 

For

.

background image

Ćwiczenie 40
Zaprojektować   aplikację,   która   „przygotowuje”   nakrycia   stołowe   dla   podanej   liczby 
osób.

1. Utwórz Projekt_040 aplikacji konsolowej.

2. Zadeklaruj zmienną intLiczbaOsób typu Integer.

3. Zaprogramuj pobranie od użytkownika liczby osób, które zasiądą do stołu.

4. Zadeklaruj zmienną intLicznik typu Integer; posłuży jako zmienna sterująca pętlą.

5. Utwórz konstrukcję pętli For, w tym celu:

wpisz słowo kluczowe For i, po spacji, nazwę zmiennej sterującej pętlą – intLicz-

nik,

przypisz zmiennej sterującej (intLicznik) wartość początkową 1 (numer pierwszej 

osoby),

wpisz słowo kluczowe To i wyrażenie określające maksymalną liczbę osób – in-

tLiczbaOsób,

naciśnij Enter i zauważ, że edytor wspiera działania programisty – dodaje słowo  

Next kończące pętlę i pusty wiersz w bloku instrukcji pętli, a także umieszcza w 

nim kursor tekstowy.

Przykład.

For intLicznik = 1 To intLiczbaOsób

Next

6. Zaprogramuj w pętli wypisywanie w konsoli nazw elementów zastawy (widelec, talerz 

płytki, talerz głęboki, nóż, łyżka), dodając do nich wartość bieżącą zmiennej intLicznik 

(np. widelec1, talerz płytki1, talerz głęboki1, nóż1 itd.).

7. Sprawdź działanie aplikacji.

Wynik działania aplikacji może być taki, jak przedstawiony poniżej:

Rysunek 15: "Zastawiony stół" – Projekt_039.

background image

Zmiennej intLiczbaOsób przypisano 6, zatem zmienna sterująca intLicznik zmieniała się pod-

czas wykonywania pętli o 1, od wartości początkowej 1 do wartości końcowej 6. Po zakończeniu pętli 

wartość zmiennej sterującej jest równa 7.

Ćwiczenie 41
Zaprojektować   aplikację,   która   wypisze   liczby   parzyste   z   podanego   przedziału   <Min, 
Maks>.

1. Utwórz Projekt_041 aplikacji konsolowej.

2. Zadeklaruj dwie zmienne intMinimalna, intMaksymalna typu Integer.

3. Zaprogramuj pobieranie od użytkownika granic: dolnej i górnej przedziału.

4. Zaprogramuj zwiększenie o 1 granicy dolnej, jeśli nie jest liczbą parzystą.

5. Zadeklaruj zmienną sterującą pętlą intParzyste typu Integer.

6. Utwórz pętlę, której zmienna sterująca zmienia się od wartości intMinimalna do wartości 

intMaksymalna, z przeskokiem równym 2.

Przykład.

For intParzyste = intMinimalna To intMaksymalna Step 2

Next

7. Zaprogramuj w pętli wyświetlanie w konsoli wartości zmiennej sterującej.

8. Sprawdź działanie aplikacji.

Efekt działania aplikacji może być podobny do przedstawionego poniżej:

Liczba 25 nie jest wartością parzystą, więc intMinimalna, w wyniku wykonania konstrukcji wa -

runkowej przechowuje wartość 26. Od tej wartości „startuje” zmienna sterująca pętlą. Po wykonaniu 

bloku instrukcji pętli zmienna sterująca zostaje powiększona o 2 (wartość po słowie 

Step

). Ponieważ 

28 jest mniejsze niż, lub równe, 32, to pętla wykonywana jest ponownie. Przy wartości 32, po wyko -

naniu bloku instrukcji pętli, następuje zwiększenie zmiennej sterującej pętlą do 34. Jest to wartość 

większa niż 32 (intMaksymalna), dlatego działanie pętli zostaje przerwane.

Rysunek 16: Projekt_040 podaje liczby parzyste z zadanego przedziału.

background image

Napisano wcześniej, że zmienna sterująca może być dowolnego typu, w którym działają relacje: 

<=

>=

 oraz operatory: 

+

 i 

-

. Do typów takich należy np. Double.

Ćwiczenie 42
Zaprojektować aplikację, która wyświetli wartości trzecich poteg (x

3

) dla argumentów x 

należących do przedziału <xmin, xmax>, przy tym wartości potęg mają być wyświetlone 
w kolejności malejących argumentów, zmieniających się o wartość dx.

1. Utwórz Projekt_042 aplikacji konsolowej.

2. Zadeklaruj zmienne: dblMinimalneX, dblMaksymalneX, dblPrzyrostX, typu Double.

3. Zaprogramuj pobieranie od użytkownika granic przedziału oraz wielkości przyrostu argu-

mentu.

4. Zadeklaruj zmienną sterującą pętlą dblBieżąceX typu Double.

5. Utwórz konstrukcję pętli, w której zmienna sterująca zmienia się od wartości początkowej 

dblMaksymalneX do wartości końcowej dblMinimalneX z przeskokiem równym ujemnej 

wartości dblPrzyrostX.

Przykład.

For dblBieżąceX = dblMaksymalneX To dblMinimalneX Step –dblPrzyrostX

Next

6. Zaprogramuj w pętli wyświetlanie wartości zmiennej sterującej pętlą oraz wartości funkcji 

trzeciej potęgi tej zmiennej.

7. Sprawdź działanie aplikacji.

Efekt działania aplikacji może być podobny do przedstawionego poniżej:

Ponieważ wartość 31,5 (35-3,5) nie jest większa niż, lub równa, 34,5 (dblMinimalneX), to ostat-

nia użyta wartość wynosi 35.

Każdą pętlę 

For

 … 

Next

 można przetworzyć na pętlę 

Do

 … 

Loop

.

Pętle 

For

 

Each

 … 

Next

 zostaną omówione po wprowadzeniu zmiennych tablicowych (V.2.).

Rysunek 17: Projekt_041 w działaniu.

background image

IV.4.

Zagnieżdżanie pętli

Zdarza się, że powtarzające się działanie, występujące w pewnym procesie, samo składa się z 

szeregu powtarzających się czynności. Przykładem może być końcówka linii produkcyjnej przygoto-

wująca produkt do dystrybucji. Następuje pakowanie kolejnych sztuk towaru w opakowanie jednost-

kowe, a opakowania jednostkowe pakowane są w opakowania zbiorcze. Opis można rozwijać doda-

jąc tworzenie palet opakowań zbiorczych, ładowanie paletami kontenerów itd.

W programowaniu podobne umieszczanie pętli w pętli nazywa się zagnieżdżaniem (podobnie 

jak w przypadku konstrukcji warunkowych). Zagnieżdżanie polega na umieszczeniu konstrukcji pętli 

(nazwijmy ją wewnętrzną) jako jednej z instrukcji bloku pętli zewnętrznej.

Przykład.

For intLicznik1 = Początek1 To Koniec1 Step Przeskok1

Instrukcje_1_1
For intLicznik2 = Początek2 To Koniec2 Step Przeskok2

Instrukcje_2

Next
Instrukcje_1_2

Next

W celu zwiększenia czytelności można po słowie 

Next

 umieścić nazwę zmiennej sterującej pę-

tlą. Nie wpływa to w jakikolwiek sposób na kod wykonywalny, stanowi jedynie znak rozpoznawczy 

końca pętli.

Ćwiczenie 43
Zaprojektować aplikację wyświetlającą tabliczkę mnożenia.

1. Utwórz Projekt_043 aplikacji konsolowej.

2. Zadeklaruj zmienne intWiersz, intKolumna typu Integer.

3. Utwórz   konstrukcję   „zewnętrznej”   pętli   ze   zmienną   sterującą   intWiersz   przebiegającą 

wartości od 1 do 10, a w niej:

utwórz konstrukcję „wewnętrznej” pętli ze zmienną sterującą intKolumna przebie-

gającą wartości od 1 do 10, a w niej:

zadeklaruj   zmienną   intIloczyn   typu   Integer   i   przypisz   jej   wartość   iloczynu 

zmiennych intWiersz i intKolumna,

zaprogramuj wyświetlenie w konsoli spacji oddzielającej wynik bieżący od po-

przedniego,

background image

zaprogramuj wyświetlenie w konsoli dodatkowych spacji, w zależności od tego 

ile cyfr ma wartość zmiennej intIloczyn:

intIloczyn < 10 – dwie spacje,

intIloczyn < 100 – jedna spacja.

zaprogramuj, po zakończeniu konstrukcji warunkowej, wyświetlenie w konsoli 

wartości zmiennej intIloczyn.

dodaj pusty wiersz po słowie Next kończącym pętlę wewnętrzną i zaprogramuj 

w nim wyświetlenie w konsoli nowego wiersza.

4. Sprawdź działanie aplikacji.

Efekt może być podobny do przedstawionego poniżej:

Zagnieżdżanie można pogłębiać, jednak należy zachować daleko idącą ostrożność, gdyż dzia -

łanie takie prowadzi do wydłużenia czasu działania danego fragmentu kodu tylokrotnie, ilokrotnie wy-

konana zostanie dodana pętla zewnętrzna. Przykładowo, jeśli występują trzy poziomy zagłębienia 

pętli i każda z nich wykonywana jest tysiąc razy, to instrukcje bloku pętli najbardziej wewnętrznej zo-

staną wykonane miliard razy. Jeśli to możliwe, należy przenosić instrukcje z pętli wewnętrznych do 

zewnętrznych. Każdy rodzaj pętli można zagnieżdżać w innych np. 

For

 … 

Next

 w 

Do

 … 

Loop

, albo 

While

 … 

End While

 w 

For

 … 

Next

. Użycie pętli zwiększa czytelność kodu i powinno być zasadą 

nawet wtedy, gdy ciąg instrukcji ma zostać wykonany tylko dwukrotnie.

Rysunek 18: Projekt_042 Tabliczka mnożenia - przykład zagnieżdżania pętli


Document Outline