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.
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
V =W∗S∗D
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
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.
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.
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)
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.
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
.
Ć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.
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.
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.
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,
▪
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