Grunnleggende om dataoverføring av det fysiske laget. Forelesninger Datanettverk. Fysisk lag. Infrarøde og millimeterbølger

I tillegg til beslutningsstrukturer er det en annen type kontrollstruktur som kalles en loop.

Syklus er en algoritmisk struktur som implementerer flere repetisjoner av setningsblokker.

Det er tre hovedtyper av løkker i Visual Basic, som er implementert ved å bruke For: Next, Do: Loop og While: Wend-konstruksjonene.

For: Neste sløyfe. Den brukes når antall repetisjoner av en gitt blokk med utsagn er kjent på forhånd. Denne konstruksjonen ser slik ut:

For teller = startverdi Til sluttverdi Operatører1 Operatører2 Neste [teller]

Når setningene ovenfor utføres for første gang, blir tellervariabelen tildelt en startverdi, hvoretter to alternativer er mulige. Hvis verdien True ble oppnådd som et resultat av å kontrollere tilstanden teller> sluttverdi, slutter løkken, og setningene1 og setninger2-blokkene blir aldri utført. På den annen side, hvis resultatet av å kontrollere tilstanden er falsk, blir setningsblokkene utført for første gang, hvoretter overgangen til begynnelsen av syklusen skjer. Videre økes verdien av tellervariabelen med et trinn plassert etter trinn-nøkkelordet (hvis det er fraværende, settes trinn = 1). Etter det kontrolleres sannheten til tilstandtelleren> sluttverdi osv. igjen, slutten av syklusen inntreffer i det øyeblikket resultatet av denne testen blir verdien True.

Det er ofte nødvendig å "unormalt" avslutte syklusen når en tilleggsbetingelse er oppfylt. I dette tilfellet, inne i loopen, bør du bruke tjenestefrasen Exit: For, som vanligvis er plassert i kontrollstrukturen, for eksempel:

Hvis tilstand Deretter Avslutt For

Hvis resultatet av å sjekke betingelsen er True, vil kjøringen av løkken bli avsluttet, og setningsblokken vil bli utført på nytt, men setningsblokk 2 vil ikke.

Loop Do: Loop. Den brukes når antall repetisjoner av løkkekroppsoperatørene ikke er kjent på forhånd. Det er fire varianter av dette designet. Når du bruker de to første, vil sløyfen enten kjøre mange ganger eller ikke kjøre i det hele tatt.

Gjør til tilstand Loop-uttalelser

Hvis resultatet av å kontrollere tilstanden er verdien False, utføres blokken med setninger, ellers utføres overgangen til setningen som ligger etter tjenesteordet Loop. På den annen side, hvis den første kontrollen av betingelsen returnerer True, vil ikke loopen bli utført en gang.

Gjør mens tilstandsløkkeerklæringer

Hvis betingelsen er sann, blir blokken med setninger utført, hvis den er usann, det vil si at resultatet av kontrollen er False, vil ikke syklusen bli utført en gang.

Hvis de to siste konstruksjonene brukes, vil løkken bli utført minst én gang.

Gjør sløyfe til tilstand

Blokken med setninger utføres så lenge resultatet av tilstandstesten er False, ellers slutter løkken.

Gjør sløyfe mens tilstand

Hvis betingelsen er usann, utføres blokken med utsagn, men hvis den er sann, dvs. resultatet av kontrollen er verdien True, deretter inntreffer slutten av syklusen.

Mens loop: Vend. Den brukes også når antall repetisjoner av loop body-setningene ikke er kjent på forhånd, og har følgende syntaks:

Mens tilstand Operatører Wend

Hvis resultatet av å kontrollere tilstanden er verdien True, utføres blokken med setninger, ellers utføres overgangen til setningen som ligger etter tjenesteordet Wend. På den annen side, hvis den første testen av betingelsen returnerer False, vil ikke loopen bli utført en gang.

Det er situasjoner når et VBA-program kreves for å utføre det samme settet med handlinger flere ganger på rad (det vil si gjenta den samme kodeblokken flere ganger). Dette kan gjøres ved hjelp av VBA-løkker.

For Loop Operator i Visual Basic

Strukturen til sløyfeoperatøren Til i Visual Basic kan organiseres i en av to former: som en loop For ... Neste eller som en løkke For hver.

Syklus "For ... Neste"

Syklus For ... Neste bruker en variabel som sekvensielt tar verdier fra et gitt område. Med hver endring av verdien til variabelen utføres handlingene som er innesluttet i syklusens kropp. Dette er lett å forstå fra et enkelt eksempel:

For i = 1 til 10 Totalt = Totalt + iArray (i) Neste i

I denne enkle løkken For ... Neste variabel brukes Jeg, som sekvensielt tar verdiene 1, 2, 3, ... 10, og for hver av disse verdiene utføres VBA-koden inne i løkken. Dermed summerer denne sløyfen elementene i matrisen. iArray i variabel Total.

I eksemplet ovenfor er løkkeøkningen ikke spesifisert, så for å øke variabelen Jeg fra 1 til 10, er standarden en økning 1 ... I noen tilfeller er det imidlertid nødvendig å bruke forskjellige inkrementverdier for løkken. Dette kan gjøres ved å bruke nøkkelordet Steg som vist i følgende enkle eksempel.

For d = 0 Til 10 Trinn 0.1 dTotal = dTotal + d Neste d

Siden i eksemplet ovenfor er inkrementtrinnet satt lik 0.1 , deretter variabelen dTotalt for hver repetisjon av syklusen antar verdiene 0,0, 0,1, 0,2, 0,3,… 9,9, 10,0.

For å bestemme løkketrinnet i VBA, kan du bruke en negativ verdi, for eksempel slik:

For i = 10 til 1 trinn -1 iArray (i) = i Neste i

Her er økningen -1 , så variabelen Jeg med hver repetisjon av syklusen får verdiene 10, 9, 8, ... 1.

Loop "For Every"

Syklus For hver ligner på en syklus For ... Neste, men i stedet for å iterere over sekvensen av verdier for tellervariabelen, loopen For hver utfører et sett med handlinger for hvert objekt fra den angitte gruppen av objekter. I følgende eksempel bruker du en løkke For hver oppregner alle ark i gjeldende Excel-arbeidsbok:

Dim wSheet som regneark for hvert wSheet i regneark MsgBox "Ark funnet:" & wSheet.Name Neste wSheet

Sløyfeavbruddserklæring "Avslutt for"

Operatør Avslutt for brukes til å avbryte syklusen. Så snart denne setningen påtreffes i koden, avslutter programmet utførelsen av løkken og fortsetter til kjøringen av setningene som er i koden umiddelbart etter denne løkken. Dette kan for eksempel brukes til å søke etter en bestemt verdi i en matrise. For å gjøre dette, ved hjelp av en løkke, skannes hvert element i matrisen. Så snart det nødvendige elementet er funnet, er det ikke nødvendig å se gjennom resten - syklusen avbrytes.

Operatørapplikasjon Avslutt for vist i følgende eksempel. Her itererer loopen over 100 array-oppføringer og sammenligner hver med verdien til variabelen dVal... Hvis en match blir funnet, avsluttes loopen:

For i = 1 Til 100 Hvis dValues ​​(i) = dVal Så IndexVal = i Avslutt For End If Next i

Do While-løkken i Visual Basic

Syklus Gjør mens kjører en kodeblokk så lenge den angitte betingelsen er oppfylt. Følgende er et eksempel på en prosedyre Under, der bruker løkken Gjør mens Fibonacci-tall som ikke overstiger 1000 vises sekvensielt:

"Subprosedyre gir ut Fibonacci-tall som ikke overstiger 1000 Sub Fibonacci () Dim i As Integer" teller for å indikere posisjonen til et element i sekvensen Dim iFib As Integer "lagrer gjeldende verdi av sekvensen Dim iFib_Next As Integer" lagrer neste verdi av sekvensen Dim iStep As Integer "lagrer størrelsen på neste inkrement "initialiser variablene i og iFib_Next i = 1 iFib_Next = 0" Do While-løkken vil kjøre til verdien "for det gjeldende Fibonacci-tallet overstiger 1000 Do While 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

I eksemplet ovenfor, tilstanden iFib_Next< 1000 sjekket i begynnelsen av syklusen. Derfor, hvis den første verdien iFib_Next ville være mer enn 1000, så ville løkken aldri bli utført.

En annen måte å implementere en loop Gjør mens- Plasser tilstanden ikke i begynnelsen, men på slutten av syklusen. I dette tilfellet vil sløyfen bli utført minst én gang, uavhengig av om betingelsen er oppfylt.

En slik syklus er skjematisk Gjør mens med en sjekket tilstand på slutten vil det se slik ut:

Gjør ... Loop mens iFib_Next< 1000

Do Until-løkken i Visual Basic

Syklus Gjør til veldig lik en løkke Gjør mens: kodeblokken i løkkens kropp utføres om og om igjen til den spesifiserte betingelsen er oppfylt (resultatet av det betingede uttrykket er ekte). I følgende prosedyre Under ved hjelp av en løkke Gjør til henter verdier fra alle cellene i en kolonne EN regneark til det er en tom celle i kolonnen:

IRow = 1 Do Until IsEmpty (Cells (iRow, 1)) "Verdien til gjeldende celle er lagret i matrisen dCellValues​dCellValues​(iRow) = Celler (iRow, 1) .Value iRow = iRow + 1 Loop

I eksemplet ovenfor, tilstanden IsEmpty (celler (iRow, 1)) er i begynnelsen av byggingen Gjør til, derfor vil sløyfen bli utført minst én gang hvis den første cellen som tas ikke er tom.

Imidlertid, som vist i loop-eksemplene Gjør mens, i noen situasjoner er det nødvendig at løkken kjøres minst én gang, uavhengig av det første resultatet av det betingede uttrykket. I dette tilfellet bør det betingede uttrykket plasseres på slutten av løkken, slik:

Gjør ... Loop Til IsEmpty (Cells (iRow, 1))

En loop er en algoritmisk struktur, ved hjelp av hvilken multiple repetisjoner av setningsblokken implementeres.

Motsløyfeoperatør (For ... Neste)

For... Next-setningen lar deg syklisk utføre et sett med instruksjoner (operatører) et spesifisert antall ganger. Instruksjonssyntaks:

Til teller = startverdi Til sluttverdi

[bruksanvisning]

[bruksanvisning]

Neste [ disk]

Parameter disk Er en numerisk variabel som automatisk endrer verdien med verdien steg etter hver repetisjon av syklusen. Syklusen går til kl disk£ sluttverdi med en positiv verdi av parameteren steg eller til disk³ sluttverdi med en negativ verdi av parameteren steg... Dermed vil sløyfen ikke bli utført en gang med en positiv trinnverdi startverdi mer enn sluttverdi... Hvis trinn-parameteren steg er utelatt, er inkrementet til tellervariabelen som standard satt lik 1.

Exit For-setningen avslutter utførelsen av løkken før tidsplanen og overfører kontrollen til setningen etter setningen i løkken. Exit For er vanligvis plassert i en betinget setning, for eksempel:

Hvis tilstand Deretter Avslutt For

Merk. I henhold til syntaksen til For-setningen, parameteren disk- en aritmetisk variabel av enhver type, er det fortsatt bedre å bruke heltallstypen til variabelen, siden brøkdelen av verdien av en variabel av en reell type vanligvis har en feil. Det har å gjøre med måten tall lagres på i en datamaskin.

Eksempel 1

Finn summen av den første 10 naturlige tall: S = 1 + 2 + 3 + ...+ 10 ... Fragment av programmet:

Dim I som heltall, S som heltall

S = 0 " Nullstilling av verdien av variabelen S

For i = 1 til 10 " Begynnelsen av syklusen. Stille inn start- og sluttverdier
"løkkeparameter. Standard loop-trinn er 1.

S = S + i " Oppdragsoperatøren utføres på hver
"utfører loopen, i dette eksemplet 10 ganger

Neste I " Slutt på syklusen. Sløyfeparameterverdien økes.

I dette programfragmentet vil loopen bli utført nøyaktig 10 ganger.

Eksempel 2

Skriv ut i den første kolonnen i regnearket (startende fra den andre raden) verdiene til x i området fra 0 til 3,2 i trinn på 0,4.

Offentlig underfane ()

Dim x Som singel, i som heltall

For x = 0 Til 3.2 Trinn 0.4

Selv om intervalllengden er nøyaktig delelig med trinnet 0,4, ser resultatet på regnearket slik ut:

Hva bør gjøres?

1. Du kan øke den endelige verdien litt, i dette eksemplet, i stedet for 3.2, skriv 3.201.

2. Bestem antall repetisjoner av en chicle og skriv en løkke over en heltallstypeteller.

I dette tilfellet vil programmet ha formen:

Offentlig underfane1 ()

Dim x Som enkelt, i Som heltall, n Som heltall

n = CInt ((3,2 - 0) / 0,4)

For i = 0 Til n Trinn 1

Celler (i + 2, 1) = x

For hver ... Next Loop Statement

For Every... Next-løkken lar deg gjenta utførelsen av en gruppe setninger for hvert element i en matrise eller familie. Denne instruksjonen har følgende syntaks:

For hver element I gruppe

[bruksanvisning]

[bruksanvisning]

Neste [ element]

Parameter element Er en variabel som representerer et medlem av en familie eller matrise. Argument gruppe- navnet på matrisen eller familien. Instruksjoner utføres kun én gang for hvert medlem av gruppen. Det er praktisk å bruke en instruksjon fordi du ikke trenger å vite på forhånd hvor mange elementer som er i en matrise eller familie. Variabel element må være av typen Variant.

Eksempel 1

Finn det aritmetiske gjennomsnittet av alle elementene i det valgte området

Offentlig funksjon Gjennomsnitt (område som rekkevidde) som dobbelt

Dim element som variant

Dim Sum som dobbel

Dim nummer som heltall

Antall = 0

For hvert element i utvalget

Sum = Sum + Element

Antall = Antall + 1

Neste element

Gjennomsnitt = Beløp / Mengde

Applikasjon. Det valgte området med tilstøtende celler må inneholde tall. Tall i tomme celler anses å være 0. Tekst i en celle vil resultere i en feil.

Ovennevnte If... End If, Select... Case, For... Next, For Every... Next-setninger er en gruppe kontrollsetninger som endrer rekkefølgen kommandoene utføres i. Kontrollinstruksjoner kan nestes i hvilken som helst rekkefølge.