Prace laboratoryjne z podstaw programowania

2.1. Zestawienie funkcji przedstawionych analitycznie
i zbiegają się w pobliżu

Cel pracy

· Utrwalenie wiedzy teoretycznej na temat podstaw organizacji struktur rozgałęzionych i cyklicznych.

· Nabycie praktycznych umiejętności programowania z wykorzystaniem struktur rozgałęzionych i cyklicznych w systemie Visual Basic.

W VB istnieją trzy typy instrukcji pętlowych:

cykl zliczania: Do...Do...Następnego

pętle z warunkami wstępnymi: Do While...Loop, Do Until...Loop, While...WEnd

· pętle z warunkami końcowymi: Do...Loop While, Do...Loop Until.

Pętla zliczająca – pozwala na cykliczne przeglądanie zestawu instrukcji określoną liczbę razy. Jego składnia jest następująca:

Dla lada = Początek Do koniec

[operatorzy]

[operatorzy]

Następny [ lada]

Parametr lada to zmienna numeryczna (typ całkowity, rzeczywisty lub typu Data, Wariant, Waluta), która jest automatycznie zwiększana po każdym powtórzeniu. Wartość początkowa lada równy parametrowi Początek, i ostatni parametr – koniec. Jeśli nie określono, krok jest uważany za równy 1; wartość kroku można zmienić. Może to być liczba dodatnia lub ujemna.

Istnieją cztery konstrukcje syntaktyczne pętli Do....:

Instrukcje pomiędzy słowami kluczowymi Do... Loop są wykonywane określoną liczbę razy, w zależności od warunku. Przykładowo w poniższym fragmencie programu, gdy C = 100, warunek zostanie spełniony i nastąpi wejście w pętlę. Wewnątrz pętli wywoływana jest procedura i wartość C zmniejszana jest o 1. Następnie ponownie sprawdzany jest warunek (C > 0) i ponownie wykonywane są operatory pętli (w sumie zostaną wykonane 100 razy), aż C = 0. Gdy warunek C > 0 stanie się fałszywy i pętla się zatrzyma.

Wykonaj, gdy C > 0

Ten sam fragment programu wykonany przy użyciu pętli z warunkiem wstępnym w składni 2:

W tym przypadku pętla działa tak długo, jak warunek ma wartość Fałsz, w przeciwieństwie do poprzedniego przypadku, czyli jest kontynuowana zanim spełnienie warunku C = 0.

Instrukcje pętli 3 i 4 mają bardzo podobną składnię do pierwszych dwóch, z wyjątkiem warunku Nie jest obliczana do momentu wykonania pętli przynajmniej raz.

W tych składniach pętli można używać bezwarunkowych instrukcji wyjścia pętli Exit For i Exit Do w celu przekazania sterowania operatorowi znajdującemu się za pętlą. Na przykład w poniższym fragmencie programu, jeśli początkowa wartość C jest > 50, to pętla natychmiast się zatrzyma.



Rób do C<= 0

MsgBox „Start” wartość jest większa od dopuszczalnej”, „Błąd wejścia”

Pętla While...Wend była używana we wczesnych wersjach Visual Basic. Jego składnia jest następująca:

Chwila<условие>

<Операторы>

W przeciwieństwie do pętli Do..Loop, pętla While ..Wend nie posiada drugiej opcji, w której sprawdzany jest warunek na końcu pętli. Ponadto nie ma dla niego instrukcji wyjścia z pętli, takiej jak Exit Do.

Zdarzają się sytuacje, gdy program VBA ma obowiązek wykonać kilka razy z rzędu ten sam zestaw działań (czyli kilkukrotnie powtórzyć ten sam blok kodu). Można to zrobić za pomocą pętli VBA.

Dla instrukcji pętli w Visual Basic

Struktura instrukcji pętli Dla w Visual Basic można zorganizować w jednej z dwóch form: jako pętlę W następnym lub jak cykl Dla każdego.

Cykl „Dla...Dalej”

Cykl W następnym wykorzystuje zmienną, która sekwencyjnie przyjmuje wartości z zadanego zakresu. Przy każdej zmianie wartości zmiennej wykonywane są akcje zawarte w treści pętli. Łatwo to zrozumieć na prostym przykładzie:

Dla i = 1 do 10 Razem = Razem + iArray(i) Następny i

W tej prostej pętli W następnym używana jest zmienna I, który kolejno przyjmuje wartości 1, 2, 3, ... 10 i dla każdej z tych wartości wykonywany jest kod VBA wewnątrz pętli. Zatem ta pętla sumuje elementy tablicy iArray w zmiennej Całkowity.

W powyższym przykładzie nie określono kroku przyrostu pętli, więc należy zwiększyć zmienną I Od 1 do 10 wartością domyślną jest przyrost 1 . Jednak w niektórych przypadkach konieczne jest użycie różnych wartości przyrostu pętli. Można to zrobić za pomocą słowa kluczowego Krok, jak pokazano w poniższym prostym przykładzie.

Dla d = 0 do 10 Krok 0.1 dTotal = dTotal + d Następny d

Ponieważ w powyższym przykładzie krok zwiększania jest ustawiony na 0.1 , a następnie zmienna dRazem dla każdego powtórzenia cyklu przyjmuje wartości 0,0, 0,1, 0,2, 0,3,… 9,9, 10,0.

Aby określić krok pętli w VBA, możesz użyć wartości ujemnej, na przykład w następujący sposób:

Dla i = 10 Do 1 Krok -1 iArray(i) = i Następny i

Tutaj jest krok przyrostu -1 , więc zmienna I przy każdym powtórzeniu cyklu przyjmuje wartości 10, 9, 8,… 1.

Dla każdej pętli

Cykl Dla każdego wygląda jak cykl W następnym, ale zamiast zapętlać sekwencję wartości dla zmiennej licznika Dla każdego wykonuje zestaw akcji dla każdego obiektu w określonej grupie obiektów. W poniższym przykładzie użycie pętli Dla każdego Wyświetla listę wszystkich arkuszy w bieżącym skoroszycie programu Excel:

Przyciemnij wSheet jako arkusz dla każdego arkusza w arkuszach MsgBox "Znaleziono arkusz: " & wSheet.Name Następny wSheet

Wyjdź dla operatora przerwania pętli

Operator Wyjdź dla używany do przerwania cyklu. Gdy tylko ta instrukcja zostanie napotkana w kodzie, program kończy wykonywanie pętli i bezpośrednio po tej pętli wykonuje instrukcje znalezione w kodzie. Można tego użyć na przykład do wyszukania określonej wartości w tablicy. Aby to zrobić, użyj pętli, aby przejrzeć każdy element tablicy. Po znalezieniu potrzebnego elementu nie ma potrzeby przeglądania reszty – cykl zostaje przerwany.

Aplikacja operatora Wyjdź dla zademonstrowano w poniższym przykładzie. Tutaj pętla przechodzi przez 100 wpisów tablicy i porównuje każdy z wartością zmiennej dWart. Jeśli zostanie znalezione dopasowanie, pętla zostanie przerwana:

Dla i = 1 do 100 Jeśli dValues(i) = dVal Następnie IndexVal = i Wyjdź do końca Jeśli Dalej i

Wykonaj pętlę While w Visual Basic

Cykl Zrób podczas wykonuje blok kodu, o ile spełniony jest zadany warunek. Poniżej znajduje się przykład procedury Pod, w którym za pomocą pętli Zrób podczas Liczby Fibonacciego nieprzekraczające 1000 są wyświetlane sekwencyjnie:

„Procedura Sub wypisuje liczby Fibonacciego nieprzekraczające 1000 Sub Fibonacci() Dim i As Integer „licznik wskazujący położenie elementu w sekwencji Dim iFib As Integer „przechowuje bieżącą wartość sekwencji Dim iFib_Next As Integer” następna wartość sekwencji Dim iStep As Integer „przechowuje wielkość kolejnego przyrostu” „inicjuje zmienne i oraz iFib_Next i = 1 iFib_Next = 0 „pętla Do While będzie wykonywana aż do momentu, gdy wartość „bieżącej liczby Fibonacciego przekroczy 1000 Do” Podczas gdy iFib_Next< 1000 If i = 1 Then "особый случай для первого элемента последовательности iStep = 1 iFib = 0 Else "сохраняем размер следующего приращения перед тем, как перезаписать "текущее значение последовательности iStep = iFib iFib = iFib_Next End If "выводим текущее число Фибоначчи в столбце A активного рабочего листа "в строке с индексом i Cells(i, 1).Value = iFib "вычисляем следующее число Фибоначчи и увеличиваем индекс позиции элемента на 1 iFib_Next = iFib + iStep i = i + 1 Loop End Sub

W podanym przykładzie warunek iFib_Next< 1000 sprawdzane na początku cyklu. Dlatego jeśli pierwsza wartość iFib_Next Gdyby było ich więcej niż 1000, pętla nie zostałaby wykonana ani razu.

Inny sposób implementacji pętli Zrób podczas– umieść warunek nie na początku, ale na końcu pętli. W takim przypadku pętla zostanie wykonana co najmniej raz, niezależnie od tego, czy warunek jest spełniony.

Schematycznie taki cykl Zrób podczas po sprawdzeniu warunku na końcu będzie to wyglądać następująco:

Wykonaj...Zapętlaj podczas iFib_Next< 1000

Wykonaj pętlę Until w Visual Basic

Cykl Rób dopóki bardzo podobny do cyklu Zrób podczas: Blok kodu w ciele pętli jest wykonywany wielokrotnie, aż do spełnienia określonego warunku (wynikiem wyrażenia warunkowego jest PRAWDA). W poniższej procedurze Pod za pomocą pętli Rób dopóki wyodrębnia wartości ze wszystkich komórek w kolumnie A arkusza kalkulacyjnego, aż w kolumnie pojawi się pusta komórka:

IRow = 1 Do Until IsEmpty(Cells(iRow, 1)) "Wartość bieżącej komórki jest przechowywana w tablicy dCellValues ​​dCellValues(iRow) = Cells(iRow, 1).Value iRow = iRow + 1 pętla

W powyższym przykładzie warunek JestPusty(Komórki(iRow, 1)) znajduje się na początku konstrukcji Rób dopóki, dlatego pętla zostanie wykonana co najmniej raz, jeśli pierwsza pobrana komórka nie będzie pusta.

Jednakże, jak pokazano na przykładach pętli Zrób podczas, w niektórych sytuacjach chcesz, aby pętla została wykonana przynajmniej raz, niezależnie od początkowego wyniku wyrażenia warunkowego. W takim przypadku wyrażenie warunkowe należy umieścić na końcu pętli, w następujący sposób:

Wykonaj... Pętla aż do IsEmpty(Cells(iRow, 1))

Lekcja z cyklu: „ Programowanie w Visual Basic.NEN dla uczniów”

Zapoznałeś się z kontrolką ComboBox.
Podczas tej lekcji będziemy kontynuować naukę operatorów języka Visual Basic.Net, koncentrując się na operatorach pętli.
Istnieją trzy typy cyklicznych struktur algorytmicznych:

  1. pętle licznikowe, w których treść pętli jest wykonywana określoną liczbę razy;
  2. pętle do przetwarzania tablic lub kolekcji;
  3. pętle warunkowe, w których ciało pętli jest wykonywane, gdy warunek jest spełniony (lub dopóki warunek nie stanie się prawdziwy).

W tej lekcji przyjrzymy się operatorowi pętli z licznikiem (For... Next). Napiszmy projekt używając tego operatora.

Cykl z licznikiem Dla. . . Dalej t stosuje się, gdy z góry wiadomo, ile powtórzeń należy wykonać.

Schemat blokowy

Ogólny widok operatora

Dla licznika = Wartość początkowa do wartości końcowej Treść pętli Następny [Licznik]

Składnia operatora jest następująca: linia rozpoczynająca się słowem kluczowym For jest początkiem pętli, natomiast linia zawierająca słowo kluczowe Next oznacza koniec pętli, pomiędzy nimi znajdują się instrukcje będące treścią pętli.

Algorytm wykonywania operatora For. . . Następny

  1. Wartość zmiennej Counter jest równa StartValue.
  2. Warunek Licznik jest sprawdzany<= КонЗнач
  3. Jeśli warunek jest spełniony, wykonywane jest ciało pętli. Zmienna Licznik zmieniana jest o wartość kroku: Licznik = Licznik + krok.
  4. Gdy zmienna Counter osiągnie wartość ConValue, pętla kończy się i wykonywane są następujące instrukcje.

Programista może zorganizować przedwczesne wyjście z pętli za pomocą konstrukcji Exit For. W takim przypadku pętla zostaje automatycznie opuszczona, a sterowanie przekazywane jest do następnego polecenia następującego po pętli.

Projekt „Dochód z depozytu”

Napisz projekt obliczający dochód z lokaty oraz obliczający odsetki proste i składane. Odsetki proste naliczane są na koniec okresu lokaty, odsetki składane naliczane są co miesiąc i dodawane do początkowej kwoty lokaty, a w następnym miesiącu naliczane są odsetki od nowej kwoty. Zalecaną formę pokazano na rysunku.

Technologia wykonania

W tym samouczku pokazano, jak używać pętli For...Next do powtarzania kodu określoną liczbę razy.

Algorytm cyklu For….Next pokazano na rys. 5.28.

Lada – dowolna zmienna numeryczna VBA, zwykle zmienna typu Integer lub Long.

Początek - dowolne wyrażenie liczbowe i określa wartość początkową zmiennej Licznik.

Koniec – wyrażenie liczbowe określające ostateczną wartość zmiennej Lada .

Sprawozdania – jeden, kilku lub brak operatorów. Instrukcje te wykonują ciało pętli. VBA wykonuje każdą z tych instrukcji za każdym razem, gdy wykonywana jest pętla.

Słowo kluczowe Następny

Licznik=licznik+StepSise

Ryc.9.28. Dla… Algorytm następnej pętli

Słowo kluczowe Następny informuje VBA, że osiągnięto koniec pętli. Opcjonalna zmienna Counter po słowie kluczowym Next musi być tą samą zmienną Counter, która została określona po słowie kluczowym For na początku struktury pętli.

Składnia:

Dla licznika = Od początku do końca

Podczas wykonywania pętliDlaNastępny VBAprzebiega w następujący sposób:

Przypisuje wartość reprezentowaną przez Gwiazda , zmienny Z ciocia .

Wykonuje wszystkie instrukcje reprezentowane przez Sprawozdania aż dotrze do słowa kluczowego Następny . Słowo kluczowe Następny wskazuje VBA, że osiągnięto koniec treści pętli.

Modyfikuje zmienną Z ciocia według kwoty Rozmiar kroku (jeśli zawarte jest opcjonalne słowo Krok) Jeżeli Krok nie jest zdefiniowany, to VBA zwiększa zmienną licznika o 1.

Wraca na początek pętli i porównuje bieżącą wartość zmiennej Z ciocia z wartością reprezentowaną przez End. Jeśli wartość Z ciocia mniej niż wartość Koniec , VBA kontynuuje wykonywanie od pierwszej instrukcji po słowie kluczowym Następny .

9.2.4. We/wy tablic jednowymiarowych i dwuwymiarowych

Szyk(szyk) to zbiór zmiennych o wspólnej nazwie i typie podstawowym. Tablica to wygodny sposób przechowywania wielu powiązanych elementów danych w jednym kontenerze, co zapewnia większą wygodę i efektywność programowania. Wszystkie elementy danych przechowywane w tablicy muszą być tego samego typu.

Tablica umożliwia przechowywanie wielu elementów danych i manipulowanie nimi za pomocą jednej zmiennej. Oprócz zmniejszenia ogólnej liczby różnych nazw zmiennych, które należy śledzić, inną główną zaletą używania tablic jest to, że można używać pętli do łatwego przetwarzania różnych elementów tablicy. Łącząc tablice i struktury pętlowe (zwykle For....Next), można napisać niewielką liczbę instrukcji przetwarzających dużą ilość danych. Wykonywanie tych samych zadań przy użyciu poszczególnych zmiennych może wymagać napisania setek instrukcji.

Wymiar tablicy

Języki programowania zazwyczaj wykorzystują tablice jednowymiarowe i wielowymiarowe, z których niektóre opisują stosunkowo proste, a inne bardziej złożone obiekty.

Tablice jednowymiarowe

Przykład tablicy jednowymiarowej podano w tabeli nr 9.9.

Tabela nr 9.9

W programowaniu powszechnie stosuje się numerację od zera.

Aby uzyskać dostęp do danych przechowywanych w określonym elemencie tablicy, należy podać nazwę tablicy, po której następuje liczba zwana indeksem elementu. Indeks podano w nawiasach. Na przykład, jeśli tablica w tabeli nr 1.1 nosi nazwę DoubleArray, wówczas poniższa instrukcja przypisuje liczbę 45 do zmiennej DoubleAny.

DoubleAny = Podwójna tablica (3)

W tej instrukcji liczba 3 jest indeksem tablicy. Ponieważ numeracja elementów zaczyna się od zera, element, do którego odwołuje się operator, jest w rzeczywistości czwartym elementem DoubleArray.

Podczas wykonywania instrukcji DoubleArray VBA wybiera wartość 45 i zapisuje ją w zmiennej DoubleArray.

Tego samego operatora można użyć podczas przechowywania danych w tablicy:

Podwójna tablica (5)=12.

Po wykonaniu tej instrukcji VBA umieszcza wartość 12 w określonym elemencie tablicy, zastępując poprzednią zawartość tego elementu.

Tablice jednowymiarowe są powszechnie używane do reprezentowania różnych list danych.

Tablice wielowymiarowe

Gdy konieczne jest przedstawienie tabel danych za pomocą danych zorganizowanych w formacie wierszy i kolumn, stosuje się w tym celu tablice wielowymiarowe.

W tablicy dwuwymiarowej adres każdej komórki składa się z dwóch liczb: numeru wiersza (pierwszy indeks) i numeru kolumny (drugi indeks). W VBA możesz tworzyć tablice o maksymalnie 60 wymiarach.

Jeśli liczba elementów w tablicy się nie zmienia, wówczas taką tablicę nazywamy statyczną.

Tablice statyczne i dynamiczne

Jeżeli podczas wykonywania programu VBA można zmienić liczbę elementów w tablicy, wówczas takie tablice nazywane są dynamicznymi. Aby zmienić rozmiar tablicy dynamicznej, użyj operatora ReDim.

VBA utrzymuje zarezerwowany obszar pamięci dla wszystkich elementów tablicy, o ile istnieje zmienna typu tablicy. Takie tablice nazywane są statycznymi, ponieważ liczba elementów w tablicy się nie zmienia.

OperatorOpcja Baza

Zwykle VBA używa tablic o wartości zerowej. Operator Option Base umożliwia określenie 0 lub 1 jako domyślnego źródła indeksów tablicy. Jeśli operatora Opcja Baza nie jest używany, VBA rozpoczyna numerację indeksów od 0 (domyślnie). Przed zadeklarowaniem jakichkolwiek zmiennych, stałych lub procedur należy umieścić instrukcję Option Base w obszarze deklaracji modułu. Nie można umieścić instrukcji Option Base wewnątrz procedury. W każdym module może znajdować się tylko jedna instrukcja Option Base.

Składnia:

Opcja Baza 0|1

Deklarowanie tablic

Deklarowanie tablicy za pomocą operatora Ciemny ma następującą składnię.

Składnia:

NazwaZmiany Wymiarów()

Dim VarName (górny, górny]….)[ Jak typ],

VarName – dowolna nazwa tablicy spełniająca reguły VBA dotyczące nazewnictwa identyfikatorów.

Indeks dolny – wymiar tablicy.

Jako typ - typ danych.

Dolna – dolna granica wartości indeksu.

Górna – górna granica wartości indeksu.

Typ – typ danych

Jeśli pominiesz typ, wszystkie elementy tablicy będą typu Variant. VBA inicjuje elementy tablic numerycznych na zera, a elementy tablic łańcuchowych na puste ciągi znaków.

Dim str_array (1 do 100) Jako ciąg

Przyciemnij wariant_array()

Dim str_Multiplication (0 do 15, 0 do 15) Jako ciąg

Korzystanie z tablic

Aby uzyskać dostęp do elementu tablicy, należy podać nazwę tablicy, po której następuje wartość indeksu ujęta w nawiasy.

Odwoływanie się do elementu tablicy ma następującą składnię.

Składnia.

nazwa tablicy(validIndex1,….)

validIndex – nazwa tablicy.

validIndex1 – poprawna wartość indeksu dla pierwszego wymiaru tablicy.

validIndex2 – poprawna wartość indeksu dla drugiego wymiaru tablicy.

Za każdym razem, gdy uzyskujesz dostęp do dowolnego elementu tablicy, musisz podać wartość indeksu dla każdego wymiaru tablicy.

We/Wy tablic jednowymiarowych

Wprowadzając tablicę jednowymiarową, należy wprowadzić kolejno pierwszą, drugą itd. elementy tablicy zachowują się podobnie podczas wyprowadzania. Aby wprowadzić lub wyprowadzić tablicę, musisz zorganizować pętlę. Najwygodniejszym sposobem wprowadzania i wyprowadzania tablicy jednowymiarowej jest użycie algorytmu wykorzystującego pętlę bezwarunkową.

Algorytm wejścia/wyjścia dla tablicy jednowymiarowej pokazano na rys. 5.29.

Procedura została wyjaśniona poniżej.

Sub Massiv() – nazwa procedury.

Dim Mas (5) As Integer - zadeklarowana jednowymiarowa tablica z 5 elementami, typem liczb są liczby całkowite.

Dim s As String – zadeklarowana zmienna robocza dla końcowego wyjścia danych z tablicy w oknie dialogowym. As String – typ danych w zmiennej przechowującej.

For i = 1 To 5 – procedura z pierwszej pętli For….Next pobiera liczby całkowite od 1 do 5 i umieszcza je w tablicy.

Mas (i) = InputBox (i) – wprowadzenie liczby całkowitej dla i-tego elementu.

Dalej – przejście do drugiego cyklu (elementy tablicy wprowadzane są do linii i wyświetlane w oknie dialogowym przy pomocy operatora MsgBox).

Dla i = 1 To 5 – elementy w linii 1 do 5.

s = s i Mas(i) & „;” - utworzenie ciągu znaków z elementów tablicy. Tablica jest drukowana w jednej linii. Elementy tablicy oddzielane są znakiem „;”.

MsgBox s – wynik wcześniej wprowadzonej tablicy.

Ryc.5.27. Jednowymiarowy algorytm wejścia-wyjścia

Ryż. 9.29. Algorytm i procedura wejścia-wyjścia tablicy jednowymiarowej

We/wy tablicy 2D

Algorytm i procedurę wprowadzania i wyprowadzania tablicy dwuwymiarowej przedstawiono na rys. 5.30.

Opis tej procedury:

Sub Massiv() – nazwa procedury

Deklaracja zmiennych używanych w tej procedurze:

Dim Mas (5, 5) As Integer - zadeklarowana dwuwymiarowa tablica z 5 kolumnami i pięcioma wierszami, typem liczb są liczby całkowite.

Dim s As String – zadeklarowana zmienna robocza dla końcowego wyjścia danych z tablicy w oknie dialogowym. As String – typ danych w zmiennej przechowującej

Następnie i – koniec operacji przypisania zmiennej

Wprowadzanie elementów tablicy do pamięci komputera:

Dla i = 1 To 5 – wprowadzanie odbywa się od pierwszego elementu pierwszej linii, potem od drugiego, itd.

Dla j = 1 Do 5 do końca pierwszej linii, potem od pierwszego elementu drugiej linii itd.

Mas(i,j) = InputBox(i,j) – operator wprowadzania elementów tablicy do pamięci komputera

Ryż. 9.30. Algorytm i procedura wejścia-wyjścia tablicy dwuwymiarowej

Algorytmy porządkowania tablic

Jako przykład podajemy algorytm i procedurę sortowania tablicy jednowymiarowej metodą „bąbelkową”.

Wyprowadzanie elementów wprowadzonej tablicy z pamięci komputera:

Dla i = 1 To 5 – wyjście odbywa się analogicznie jak wejście

s = s & Mas (i,j) & „; ”

s = s & Chr (13) – przesunięcie wiersza (wyjście nie w jednej linii, ale w kilku, jak w tablicy wejściowej)

Następny i – koniec operatora For….Next

MsgBox s – wyprowadź wcześniej wprowadzoną tablicę do okna dialogowego

End Sub – koniec procedury.

Składnia operatora:

DlaLada= Początek ToKoniec[KrokKrok]

Blok_Operatorów

NastępnyLada

Tutaj jest to wskazane:

Dla Dla (wymagane słowo kluczoweVB);

Do zanim (wymagane słowo kluczoweVB);

Blok_Operatorów– zadzwonił jeden lub więcej operatorów treść cyklu;

Lada - zmienna całkowita, która zlicza liczbę wykonanych pętli;

Początek, koniec - początkowe i końcowe wartości liczników;

Krok krok(słowo kluczoweVB);

Krok – krok zmiany licznika; może być ujemny; parametr jest opcjonalny, ponieważ jeśli krok wynosi 1, możeszStep Krok niżej;

Dalej – dalej (wymagane słowo kluczowe VB, wpis operatora końca pętli).

Wartość licznika (Początek Koniec) może być stałe numeryczne lub zmienne typu całkowitego lub rzeczywistego, mogą być liczbami ujemnymi lub dodatnimi. Aby ciało pętli mogło zostać wykonane przynajmniej raz, musi zaistnieć Początek ≤ Koniec, Jeśli Krok> 0 oraz Początek ≥ Koniec, Jeśli Krok< 0. Gdy tylko się to okaże Lada>Koniec ( Jeśli Początek< Конец), Wykonywanie pętli kończy się. Jeśli Zacznij =Koniec, pętla zostanie wykonana jednokrotnie;

Przykład 9.1 .Ocena funkcjiY = 2 – 1.5 Sinxgdy X zmienia się w krokach co 0,2 w zakresie.

Fragment programu obliczającego Y i wyprowadzającego argument X oraz funkcję Y:

Dla X = 0 do 2,4 Krok 0.2

Y = 2 – 1,5*Sin(X)

Aby zrozumieć, jak działa ta pętla, oto program dla podobnej pętli utworzonej za pomocą operatorIść do, tagi, operatorJeśliNastępnie.

M1: X = X + 0,2

Jeśli X<= 2.4 Then

Y = 2 – 1,5*Sin(X)

Przyjrzyjmy się, jak działa ten program. Pierwsze obliczenie Y jest niestandardowe, jakby wypadło z cyklu. Cykl rozpoczyna się po pierwszym przekazaniu kontroli GoToM1 na etykietę M1. W wierszu oznaczonym M1 argument X zwiększa się o krok 0,2 i natychmiast sprawdzane jest, czy nowa wartość X przekracza końcową wartość 2,4. Jeżeli nie przekroczy, to obliczenia Y powtarzane są z tym nowym X. Następnie ponownie wykonywany jest operator GoToM1 - przekazujący sterowanie na linię oznaczoną M1. Te iteracje (cykle) obliczania Y zakończą się, gdy tylko X przekroczy 2,4.

Porównajmy teraz program z pętlą If do For...Next.

Dla X = 0 do 2,4 Krok 0.2

zastępuje dwie linie

M1: X = X + 0,2

Jeśli X<= 2.4 Then

W pętli For wykonywane są dwie ostatnie linie kodu, ale ich nie widzimy. Zakodowaliśmy je linią cFor... Linia kodu GoTo M1 jest zakodowana słowem Next X (dosłownie: next X). Rezultatem jest zwarta konstrukcja.

Używając pętli For...Next, musisz nauczyć się korzystać z licznika pętli do rozwiązywania różnych problemów. Aby dowiedzieć się, jak wykorzystać licznik do rozwiązania problemu, musisz to zrobić przeanalizować sformułowanie problemu, znaleźć wzorce zmian niektórych parametrów problemu.

Przykład 9.2 . Wyznaczanie sumy elementów szeregu: .

Fragment programu:

S = 0’ S – suma szeregów

Dla i = 1 Do 16 licznik i jest mianownikiem ułamka

S = S + 1/i’ akumulacja sumy

Drukuj „S =”; S ' wyprowadź kwotę S do formularza

Dla każdej wartości licznika i wyrażenie 1/i tworzy sekwencyjnie elementy szeregu, zaczynając od 1.

Przykład 9.3 . Obliczanie sumy szeregu elementów
.

Fragment programu:

S = 0’ S – suma szeregów

Dla i = 1 To 18’ licznik i – licznik

S = S + i/(i + 1)’ mianownik jest o 1 większy od licznika

Drukuj „S =”; S ' wyprowadź kwotę S do formularza

Przykład 9.4 . Obliczanie sumy: 5 + 8 + 11 + … + 32 + 35

Fragment programu:

S = 0’ S – suma szeregów

Dla i = 5 To 35 Krok 3 „otrzymujemy arytmetykę _

progresja z mianownikiem 3

Drukuj „S =”; S

Przykład 9.5. Obliczanie sumy dla danego x:

Analiza problemu pokazuje, że stopień X waha się od 1 do 10. W tym przypadku licznik we współczynniku X jest większy od stopnia o 1, a mianownik o 2. Wartość stopnia ustalimy za pomocą licznik I. Następnie możesz utworzyć taki program (fragment):

S = 1 ‘ S – suma szeregu

Dla i = 1 do 10’, jak licznik i, stopień zmienia się w X

S = S + (-1)^i*(i + 1)*x^i / (i + 2)

Drukuj „S =”; S

CykleDlaNastępnyużywany dowejście wyjście Iprzetwarzanie tablicowe .

Przykład 9.6. Wejście i wyjście wartości elementów tablicy B(N).

Fragment programu:

‘ Pomijamy przypisanie wartości zmiennej N, _

wpisane na formularzu w polu tekstowym txtN:

B(i) = InputBox("Wprowadź element B(" & i & ")", _

„Tablica wejściowa B(” & N & „)”)

Drukuj „”; B(i);

Funkcjonować Pole wprowadzania() wyświetla okno dialogowe z przyciskiem zamykania, określonym komunikatem, polem wejściowym i przyciskami OK,Anulować, z danym nagłówkiem (lub bez niego). Jeżeli zostanie wpisana liczba 12 - rozmiar tablicy N, to w naszym przykładzie, gdy pojawi się ona po raz pierwszy, okno to będzie wyglądać następująco:

Jak widzimy, wiadomość Wprowadź element B(1) wyświetla monit o wprowadzenie wartości pierwszego elementu w polu tekstowym. To okno pojawi się 12 razy, ponieważ tablica zawiera 12 elementów. Wynika to z tytułu formularza. Indeks elementu B(i) w zaproszeniu będzie się wahał od 1 do 12.

Jeżeli na formularzu chcemy wyświetlić tylko wartości elementów tablicy B(N) to ciało pętli będzie składać się z jednej instrukcji:

Przeglądanie elementów tablicy w celu wykonania na nich pewnych akcji odbywa się również za pomocą operatora pętli For...Next.

Dajmy przykłady przetwarzania tablic jednowymiarowych.

Przykład 9.7 . Wyznaczanie maksymalnego elementu tablicy B(M).

Wyłączając wprowadzanie danych początkowych i wyprowadzanie wyników, krótko opisujemy algorytm:

    Zadeklarujmy zmienną Bmax, w której wpiszemy wartość pierwszego elementu tablicy oraz zmienną Imax, której przypiszemy 1 – indeks pierwszego elementu tablicy.

    W pętli za pomocą operatora For...Next przeglądamy wszystkie elementy tablicy zaczynając od drugiego. Za pomocą operatora If...Then porównujemy ich wartości z wartością zapisaną w zmiennej Bmax.

    Jeżeli okaże się, że wartość elementu tablicy jest większa od wartości Bmax, wówczas Bmax przypisuje się wartość tego elementu, a wartości Imax przypisuje się indeks tego elementu tablicy.

Po zakończeniu pętli zmienna Bmax będzie zawierać wartość elementu maksymalnego, a Imax będzie zawierała jego indeks (liczbę).

Program dla tej części algorytmu.

Bmax = B(1): Imax = 1

Jeżeli B(i) > Bmax To Bmax = B(i): Imax = i

Przykład 9.8. Wyznaczanie sumy, iloczynu i liczby elementów dodatnich tablicyD(M).

Zmienne: S, P, K – odpowiednio suma, iloczyn i liczba elementów dodatnich.

Algorytm taka definicja:

    Zmiennym S i K przypisujemy zero, a zmiennej P przypisujemy 1. Z reguły zmienne, w których gromadzi się suma, tutaj jest to S i k, są zawsze zerowane przed pętlą, a zmienne w którego obliczany jest iloczyn, przypisuje się 1.

    Korzystając z pętli For...Next, przeglądamy wszystkie elementy tablicy i sprawdzamy, czy są one dodatnie (D(i) > 0).

    Jeśli okaże się, że element jest dodatni, to dodajemy jego wartość do wartości sumy S i nową sumę zapisujemy w tej samej zmiennej. Mnożymy zmienną P przez dodatnią wartość elementu i zapisujemy ją również w zmiennej P. Dodajemy 1 do zmiennej K i przechowujemy nową wartość w tej samej zmiennej

Program Ta część algorytmu wygląda następująco:

S = 0: P = 1: K = 0

Jeżeli D(i) > 0 To

S = S + D(i) „w ten sposób gromadzi się kwota _

dodatnie wartości elementów tablicy D(i)

P = P*D(i)’ definicja iloczynu dodatniego

elementy tablicy

K = K + 1 ‘ ten operator nazywa się LICZNIK, oto on

‘ określa liczbę dodatnich elementów tablicy

Przykład 9.9. Znajdowanie sumy, iloczynu, liczby i średniej nieparzystych elementów tablicyD(M).

Oto fragment programu dla takiej definicji.

S = 0: P = 1: K = 0

Jeśli D(i) Mod 2<>0 Następnie

Ssr = S/k ‘ obliczanie średniej elementów nieparzystych

Porównaj ten fragment programu z programem z Przykładu 9.8. Ten program prawie całkowicie powtarza poprzedni. Zmienił się jedynie warunek w instrukcji If. WarunekD(i) Mod 2<>Wartość 0 oznacza, że ​​szukamy elementów tablicy D(i), które nie są równomiernie podzielne przez 2, czyli elementów nieparzystych. Jeśli sprawdzimy warunek D(i) Mod 2 = 0, to wybierzemy parzyste elementy tablicy.

Jak wiadomo, dzielenie przez mod podaje resztę dzielenia w liczbach całkowitych. Przykładowo po wykonaniu operatora d = 34Mod4 zmienna d będzie równa 2. Zatem aby wybrać elementy tablicy będące wielokrotnością 4 należy sprawdzić warunek D(i) Mod 4 = 0. Warunek będzie będą podobne, jeśli będziemy szukać elementów będących wielokrotnościami innych liczb. Te inne liczby zostaną zapisane zamiast 4.

Przykład 9.10. Zapisywanie elementów tablicyR(N), wielokrotności 5, do innej tablicy i wypisanie nowej tablicy do formularza.

Oznaczmy inną tablicę, na przykład R5(N). Należy przyjąć, że rozmiar tej nowej tablicy jest taki sam jak oryginalnej, ponieważ w skrajnym przypadku wszystkie elementy mogą być wielokrotnościami 5.

Algorytm problemu:

    Zresetuj licznik k. Używając operatora pętli For...Next, przeglądamy wszystkie elementy tablicy R(N).

    Sprawdzamy każdy element pod kątem wielokrotności 5, używając operatora If...Then i dzieląc element tablicy przez Mod.

    Jeżeli element jest wielokrotnością 5, to za pomocą licznika typu k=k+ 1 tworzymy indeksy tablicy R5(N) zaczynając od 1 i zapisujemy je do tej drugiej tablicy –R5(N).

    Jeżeli k jest różne od zera, wyświetl w formularzu tablicę R5().

    Jeśli k jest równe zero, wyprowadzamy: „Nie ma elementów podzielnych przez 5”.

Fragment programu:

Jeśli R(i) Mod 5 Wtedy k = k + 1: R5(k) = R(i)

Jeśli k<>0 Następnie

Drukuj „Brak elementów podzielnych przez 5”

Pętle można zagnieżdżać w innych pętlach.

Zademonstrujmy pracę pętle zagnieżdżone . Poniższy program wyświetla wartości liczników cykli i, j i k. Z wyniku i, j, k staje się jasne, w jaki sposób wykonywane są zagnieżdżone pętle.

Subskrybent prywatny frmCycle_DblClick()

ScaleMode = 4 jednostki – symbole

Dla i = 1 do 3’ pętla zewnętrzna

Drukuj „i =”; I;

Dla j = 1 do 4 „1. zagnieżdżona pętla

CurrentX = TextWidth("i = 1") + 5

Drukuj „j = „; J;

CurrentX = TextWidth("i = 1 j = 1 ") + 7

Dla k = 1 do 5 „2. pętla zagnieżdżona

Pokazany formularz (rys. 1) przedstawia wyniki wyprowadzania liczników wszystkich trzech pętli: pętli zewnętrznej – licznik i, pierwszej pętli zagnieżdżonej – licznik j i drugiej, najbardziej wewnętrznej pętli – licznik k. Jak widzimy, najwolniejszym licznikiem jest pętla zewnętrzna(poi) i „najszybszy” to licznik najbardziej wewnętrznej pętli (wgk).

Program uruchamia się po dwukrotnym kliknięciu lewym przyciskiem myszy na formularzu frmCicli.

CurrentX, CurrentY – właściwości formularza określające współrzędne X, Y punktu początkowego wyświetlania informacji metodą Print (położenie osi X i Y na formularzu patrz rys. 1).

TextWidth() to funkcja, która zwraca szerokość tekstu określonego w funkcji jako argument w podwójnym cudzysłowie.

Pętle zagnieżdżone są używane podczas przetwarzania tablic dwuwymiarowych (macierzy). Ale w niektórych zadaniach, z wyłączeniem wejścia i wyjścia elementów tablicy dwuwymiarowej, możesz ograniczyć się do jednej pętli. Spójrzmy na kilka przykładów programowania macierzowego.

Przykład 9.11. Wejście i wyjście macierzy (dwuwymiarowej tablicy) liczb całkowitychinA(N).

Można wejść do matrixa według wierszy i kolumn . Łatwiej jest – linia po linii, jeśli zaprogramujesz wyjście elementów tablicy do formularza zaraz po ich wpisaniu.

Wejście i wyjście macierzylinia po linii - fragment 1.

Dim M jako liczba całkowita, N jako liczba całkowita, i jako liczba całkowita, j jako liczba całkowita

Dim intA() As Integer ‘ zadeklaruj tablicę dynamiczną

M = Val(txtN.Text) ‘ M – liczba linii

N = Val(txtN.Text) ‘ N – liczba kolumn

ReDim intA(M, N) As Integer „przedefiniuj tablicę

Dla i = 1 To M „i zachowa swoją wartość aż do całkowitego zakończenia

„zagnieżdżona pętla na j nie zostanie wykonana

Drukuj „”; intA(i, j); „wyjście linia po linii

Drukuj „przejdź na początek nowej linii

Aby wprowadzić macierz kolumnami, należy wykonać pętlę zewnętrzną w j (określa numery kolumn), a pętlę wewnętrzną w i (określa numery wierszy).

Wejście i wyjście macierzywedług kolumn fragment 2.

PrY = 2500: CurrentY = PrY ' PrY ustawia współrzędną Y początku

' wyświetla pierwszy element każdej kolumny w formularzu

Dla j = 1 To N ' j zachowa swoją wartość aż do całkowitego

„zagnieżdżona pętla na i nie zostanie wykonana

intA (i, j) = InputBox("Wprowadź element intA(" & i & "," & j & ")", _

„Macierz wejściowa intA(” & M & „,” & N & „)”)

Drukuj kartę (6 * j); intA(i, j) ‘ wynik według kolumn

CurrentY = PrY ', aby wyświetlić pierwszy element

następna kolumna

Ten drugi fragment programu nie powtarza pierwszych 5 linii z pierwszego fragmentu. Funkcja Tab(6 * j) ustawia początek wyjścia w wierszu (w znakach), zaczynając od lewej krawędzi formularza. Współrzędna PrY wynosi tutaj 2500 skrętów, ale możesz wybrać inną wartość.

Przykład 9.12 . Porządkowanie wartości elementów tablicyV(N) Rosnąco.

Istnieje kilka algorytmów porządkowania tablic. Oto jeden z nich: za pomocą zagnieżdżonych pętliDlaNastępnywybieramy elementy zaczynając od pierwszego do przedostatniego i każdy z nich porównujemy z kolejnymi elementami; jeśli okaże się, że kolejny element jest mniejszy od wybranego, zamieniamy je.

Fragment programu implementującego ten algorytm:

Dla i = 1 Do N – 1

Dla j = i + 1 Do N

Jeśli V(j)< V(i) Then P = V(i): V(i) = V(j): V(j) = P

Wyjaśnijmy ten fragment programu.

Korzystając z zewnętrznej pętli z licznikiem i, wybieramy element V(i) do porównania z kolejnymi elementami. Wewnętrzna pętla z licznikiem j wybiera do porównania kolejne elementy V(j). Wartość początkowaj to i+ 1. Jest to pierwszy element z kolejnych.

Aby zamienić wartości elementów V(i) i V(j), wprowadzamy jakąś zmienną P, w której chwilowo „ukrywamy” wartość jednego z elementów tablicy (w programie jest to V(i )). Następnie elementowi V(i) przypisuje się wartość elementu V(j), a elementowi V(j) przypisuje się wartość V(i), która jest przechowywana w zmiennej P. Jeśli „ukryjemy” wartość V(j) w P, to kod wymiany wartości będzie wyglądał następująco: P = V(j): V(j) = V(i): V(i) = P Wynik się nie zmieni.

Do posortuj tablicę w kolejności malejącej, wystarczy zapisać warunek weryfikacji w postaci V(j) > V(i), czyli zmienić znak nierówności na inny.

Jeżeli tablica nie jest tablicą numeryczną, lecz łańcuchową, a do elementów tablicy wpisano nazwiska, to korzystając z programu z przykładu 9.12, można uporządkować listę nazwisk alfabetycznie. Faktem jest, że dla liter alfabetu używanych w komputerze prawdziwe są następujące nierówności: A< Б < В < Г….< Я и т. д., поскольку числовые коды букв алфавита последовательно увеличиваются, начиная с А и до конца алфавита. Это же справедливо и для букв английского алфавита.

Przykład 9.13 . Obliczanie sumy elementów dodatnich dla nieparzystych kolumn macierzyF(M, N) i wyprowadź kwoty do formularza.

Algorytm programu:

    Korzystając z zewnętrznej pętli w kroku 2, tworzymy indeks nieparzystych kolumn macierzy, zaczynając od pierwszej kolumny.

    Resetujemy sumę S, w której będzie się kumulować suma elementów dodatnich.

    W pętli wewnętrznej sprawdzamy znak elementu tablicy.

    Jeśli element tablicy jest dodatni (> 0), obliczamy sumę S.

    Po zakończeniu wewnętrznej pętli wyświetlamy na formularzu sumę S.

Fragment programy:

Dla j = 1 Do N Krok 2

Jeśli F(i, j) > 0 To S = S + F(i, j)

Drukuj „Suma kolumnowa”; J; „:”; S’ j – numer kolumny!

Zagnieżdżone pętle umożliwiają organizację wyliczenie opcji i rozwiązywać problemy, których nie da się rozwiązać analitycznie. W wyniku wyszukiwania uzyskiwane są opcje rozwiązania, spośród których wybierana jest jedna lub więcej, spełniających warunki problemu.

Przykład 9.14. Jest 1801 rubli. Ile czekoladek można kupić za 31 rubli? i bułki za 18 rubli, aby całkowicie wydać wszystkie pieniądze.

Program:

Kwota = 1801

AllChocolates = Suma\31: AllBulks = Suma\18

Dla i = 1 dla wszystkich czekoladek

Dla j = 1 Do VseBulk

Cena = i * 31 + j * 18 „całkowita cena zakupu

Jeśli cena = 1801 To

Drukuj „Czekolada:”; I; Zakładka(19); „Bulok:”; J

Wyjaśnijmy program, w którym używamy zmiennych nazwanych w języku rosyjskim.

Na początek ustalamy jaka jest maksymalna ilość samych czekoladek lub samych bułek, którą można kupić za całą kwotę. Uzyskane wartości AllChocolates i AllBulks wykorzystujemy w celu ograniczenia liczby wyszukiwań liczby czekoladek i bułek. Dla każdej wartości liczby czekoladek (i) i liczby bułek (j) ustalamy całkowitą cenę za ich zakup. Jeśli obliczona Cena wynosi 1801, wówczas wybrana opcja jest jednym z rozwiązań problemu.

Funkcja Tab() określa od jakiego miejsca od krawędzi formularza będą wyświetlane informacje następujące po tej funkcji. Jeśli Tab(19), to z 19-tej pozycji.

Program wyświetla 3 możliwe opcje zakupu:

Czekolada 7, bułki 88

Czekolada 25, bułki 57

Czekolada 43, bułki 26

Jeśli chcesz dać jednoznaczną odpowiedź, musisz sformułować dodatkowy warunek. Na przykład „kupiono mniej bułek niż czekoladek”. Wtedy jedynym rozwiązaniem będzie opcja 3.

Istnieje wiele problemów matematycznych, które można po prostu rozwiązać brutalną siłą przy użyciu programowania w pętli zagnieżdżonej.