Loop untuk deskripsi vba excel. "Pernyataan Loop VBA

Loop memungkinkan Anda untuk mengeksekusi satu atau lebih baris kode beberapa kali. VBA mendukung loop berikut:

Untuk...Berikutnya Untuk Setiap...Berikutnya Lakukan... Loop

Untuk konstruksi. . . Berikutnya. Ketika jumlah pengulangan diketahui sebelumnya, loop For digunakan. . . Berikutnya. Loop For menggunakan variabel yang disebut variabel loop atau penghitung loop yang bertambah atau berkurang dengan jumlah tertentu setiap kali loop berulang. Sintaks untuk konstruksi ini adalah:

Untuk penghitung = mulai Untuk mengakhiri pernyataan Berikutnya

Parameter penghitung (counter), mulai (siklus awal), akhir (akhir siklus) dan kenaikan (increment) adalah numerik.

Catatan. Parameter kenaikan dapat berupa positif atau negatif. Jika positif, parameter awal harus kurang dari atau sama dengan parameter akhir, jika tidak, loop tidak akan berjalan. Jika parameter kenaikan negatif, maka parameter awal harus lebih besar dari atau sama dengan nilai parameter akhir untuk mengeksekusi badan perulangan. Jika parameter Langkah tidak diatur, maka nilai default dari parameter kenaikan adalah 1.

VBA mengeksekusi loop For dalam urutan berikut:

1. Mengatur penghitung variabel loop untuk memulai.

2. Membandingkan nilai penghitung variabel loop dan nilai parameter akhir. Jika variabel counter lebih besar, VBA mengakhiri loop. (Jika nilai parameter kenaikan negatif, maka VBA mengakhiri loop jika nilai penghitung variabel loop kurang dari nilai parameter akhir.)

3. Mengeksekusi pernyataan dari pernyataan badan perulangan.

4. Meningkatkan nilai penghitung variabel loop sebesar 1, atau dengan nilai parameter kenaikan, jika diberikan.

5. Ulangi langkah 2 sampai 4.

Perhatikan sebuah contoh: Hitung nilai fungsi f(t)

diberikan a, b, n, jika t berubah dari a ke b dengan kenaikan Dt=(b-a)/(n-1).

Sub example3() Dim f() As Single Dim a As Single, b As Single, t As Single, dt As Single Dim i As Integer, n As Integer Call read("a1", a) : Call read("b1" , b) : Call read("c1", n) RedDim f(1 To n - 1) dt = (b - a) / (n - 1) : t = a Call out("a2", "i") : Call out("b2", "t") : Call out("c2", "f(t)") Untuk i = 1 Sampai n - 1 t = t + dt Jika t<= -1 Then f(i) = -1 ElseIf t >1 Kemudian f(i) = 1 Lain f(i) = t End If Call out("a" & (2 + i), i) : Call out("b" & (2 + i), t) : Call out("c" & (2 + i), f(i)) Next i End Sub

Konstruk Untuk Setiap. . . Lanjut

Untuk Setiap putaran. . . Berikutnya seperti perulangan For. . . Selanjutnya, tetapi mengulangi sekelompok pernyataan untuk setiap elemen dari satu set objek atau dari array, alih-alih mengulangi pernyataan beberapa kali. Hal ini sangat berguna ketika Anda tidak tahu berapa banyak elemen dalam set.

Sintaks dari konstruksi For Every loop. . . Berikutnya adalah:

Untuk Setiap elemen Dalam pernyataan grup Elemen berikutnya

Perhatikan batasan berikut saat menggunakan perulangan Untuk Setiap. . . Lanjut:

Untuk set, parameter elemen hanya dapat berupa variabel varian tipe, variabel umum tipe objek, atau objek yang terdaftar di Object Browser

Untuk array, parameter elemen hanya dapat berupa variabel bertipe Variant

Anda tidak dapat menggunakan perulangan Untuk Setiap. . . Selanjutnya dengan array tipe yang ditentukan pengguna karena variabel varian tipe tidak dapat berisi nilai tipe yang ditentukan pengguna

Lakukan...Desain lingkaran

Loop Do digunakan untuk mengeksekusi blok pernyataan dalam jumlah yang tidak terbatas. Ada beberapa variasi dari konstruksi Do. . . Loop, tetapi masing-masing mengevaluasi ekspresi kondisional untuk menentukan kapan harus keluar dari loop. Seperti dalam kasus konstruksi If. . . Maka kondisinya harus berupa nilai atau ekspresi yang mengevaluasi False (nol) atau True (bukan nol).

Dalam konstruksi berikut, Lakukan . . . Pernyataan loop dieksekusi selama nilai kondisinya Benar (True):

Pernyataan Do While Condition Loop

Saat menjalankan loop ini, VBA terlebih dahulu memeriksa kondisinya. Jika kondisinya False, ia akan melewatkan semua pernyataan loop. Jika Benar, VBA mengeksekusi pernyataan loop, kembali ke pernyataan Do While lagi, dan menguji kondisinya lagi.

Oleh karena itu, loop yang diwakili oleh konstruk ini dapat dieksekusi beberapa kali selama nilai kondisinya tidak nol atau True. Perhatikan bahwa pernyataan dari badan loop tidak pernah dieksekusi jika kondisi pertama kali diperiksa ternyata salah (False).

Perhatikan sebuah contoh: Hitung jumlah deret

dengan akurasi yang diberikan.

Sub example4() Dim e As Single, x As Single, s As Single Dim m As Single, p As Single, i As Single Call read("a1", x) : Call read("b1", e) s = 0 : i = 1: m = 1: p = -1 Call out("a2", "i") : Call out("b2", "m") : Call out("c2", "s") Do While Abs(m) >= e p = -p * x m = p / i s = s + m Call out("a" & (2 + i), i) : Call out("b" & (2 + i), Abs (m)) : Call out("c" & (2 + i), s) i = i + 1 Loop End Sub

Variasi lain dari konstruksi Do. . . Loop pertama-tama mengeksekusi pernyataan dari badan loop, dan kemudian memeriksa kondisinya setelah setiap eksekusi. Variasi ini memastikan bahwa pernyataan di badan loop dieksekusi setidaknya sekali:

Apakah pernyataan Loop While kondisi

Dua varietas lain dari konstruksi loop serupa dengan yang sebelumnya, kecuali bahwa loop dieksekusi saat kondisinya salah (False):

Loop tidak dieksekusi sama sekali atau dieksekusi berkali-kali:

Lakukan sampai kondisi

Pernyataan lingkaran

Loop dijalankan setidaknya sekali:

operator

Kondisi Loop Hingga

7.2 Loop bersarang.

Anda dapat meletakkan struktur kontrol di dalam struktur kontrol lain (misalnya, sebuah If . . . Then blok di dalam For . . Next loop). Struktur kontrol yang ditempatkan di dalam struktur kontrol lain dikatakan bersarang.

Kedalaman struktur kontrol bersarang di VBA tidak terbatas. Untuk meningkatkan keterbacaan kode, merupakan praktik umum untuk menggeser badan konstruk keputusan atau loop dalam program ketika struktur kontrol bersarang digunakan.

Saat membuat satu atau lebih loop lain dalam satu loop, seseorang berbicara tentang loop bersarang, yang membedakan antara loop luar (melampirkan) dan dalam (bersarang).

Perhatikan contoh penjumlahan elemen Aij dari matriks A(n,m) baris demi baris.

Sub example5() Dim a() As Single, s() As Single Dim n As Integer, m As Integer Dim i As Integer, j As Integer Call read("a1", n): Call read("b1", m ) Redim a(1 Ke n, 1 Ke m), s(1 Ke n) "Baca matriks Untuk i = 1 Ke n Untuk j = 1 Ke m Panggil readcell(i + 1, j, a(i, j)) Selanjutnya j Selanjutnya i "Perhitungan Untuk i = 1 Ke n s(i) = 0 Untuk j = 1 Ke m s(i) = s(i) + a(i, j) Selanjutnya j Call outcell(i + 1, m + 1 , s(i)) Selanjutnya i End Sub

Perhatikan bahwa Next pertama menutup loop For dalam, dan Next terakhir menutup loop For luar. Demikian pula, untuk pernyataan If bersarang, pernyataan End If secara otomatis diterapkan untuk menutup pernyataan If terdekat. Struktur bersarang Lakukan . . . Loop bekerja dengan cara yang sama: pernyataan Loop terjauh sesuai dengan pernyataan Do terjauh.

Saat input/output elemen array dua dimensi pada lembar kerja Microsoft Excel, akan lebih mudah untuk menggunakan prosedur input/output kustom:

Sub readcell(i As Integer, j As Integer, val As Variant) val = Leaf1.Cells(i, j).Nilai End Sub Sub outcell(i As Integer, j As Integer, val As Variant) Leaf1.Cells(i, j).Nilai = nilai Akhir Sub

di mana saya adalah nomor baris, j adalah nomor kolom lembar kerja.

Meninggalkan struktur kontrol

Pernyataan Keluar memungkinkan Anda untuk keluar langsung dari perulangan For, perulangan Do, prosedur Sub, atau prosedur Fungsi. Sintaks dari pernyataan Keluar sederhana:

For counter = start To end [statement block] [statement block] Selanjutnya Lakukan [(While | Hingga) condition] [statement block] [statement block] Loop

Exit For di dalam loop For dan Exit Do di dalam loop Do dapat muncul beberapa kali.

Pernyataan Exit Do bekerja dengan semua variasi sintaks loop Do.

Pernyataan Exit For dan Exit Do digunakan ketika diperlukan untuk segera mengakhiri loop, tanpa melanjutkan iterasi lebih lanjut atau tanpa menunggu eksekusi blok pernyataan di badan loop.

Saat Anda menggunakan pernyataan Keluar untuk keluar dari loop, nilai variabel loop bergantung pada bagaimana loop berakhir:

Ketika loop berakhir secara normal, nilai variabel loop adalah satu lebih dari batas atas pada jumlah loop

Ketika loop berakhir sebelum waktunya, variabel loop mempertahankan nilainya, yang diterimanya, dengan mempertimbangkan aturan biasa

Ketika loop berakhir pada akhir set, variabel loop adalah Nothing jika itu adalah variabel objek, atau Empty jika itu adalah Varian.

Pembaruan terakhir: 30/10/2015

Jenis lain dari struktur kontrol adalah loop. VB.NET menggunakan beberapa jenis loop.

Untuk... Putaran Berikutnya

Loop ini dieksekusi beberapa kali, dan nomor ini diatur oleh penghitung:

For i As Integer = 1 To 9 Console.WriteLine("Kuadrat dari (0) adalah (1)", i, i * i) Next

Di sini variabel i berperan sebagai penghitung. Setelah kata Ke kami menempatkan nilai maksimum penghitung. Dengan setiap siklus, nilai counter bertambah satu. Dan nilai ini dibandingkan dengan nilai setelahnya Ke. Jika kedua nilai ini sama, maka loop berakhir.

Saat bekerja dengan loop, kita dapat meningkatkan nilai penghitung dengan setiap lintasan, tidak hanya dengan satu, tetapi dengan angka apa pun secara umum. Untuk melakukan ini, Anda harus menggunakan kata kunci melangkah dan setelah itu, tentukan langkah loop di mana nilai penghitung akan meningkat, atau Anda dapat meningkatkan penghitung langsung di loop:

For i As Integer = 1 To -9 Step -1 For j As Integer = 1 To 9 Console.WriteLine("Produk dari i dan j adalah (0)", i * j) j += 1 Next Next

Perhatikan bahwa nilai negatif dipilih sebagai langkah dalam loop pertama, dan nilai penghitung berkurang satu dengan setiap lintasan. Di loop dalam, penghitung j bertambah 2 pada setiap lintasan, karena penghitung itu bertambah satu secara default, dan kita secara eksplisit menambahkannya satu dalam loop. Akibatnya, loop dalam bekerja lima kali, dan loop luar sembilan, yaitu, pada kenyataannya, diperoleh 45 siklus.

Untuk Setiap ... Loop Berikutnya

Perulangan Untuk Setiap iterasi atas elemen dalam grup tertentu, seperti larik atau koleksi. Misalkan kita memiliki beberapa array tipe Integer dan kita perlu menginisialisasi array ini dengan nilai acak dan kemudian menampilkan semua elemennya di layar:

"Buat array lima angka Dim nums(4) As Integer Dim r As New Random() "inisialisasi array For i As Integer = 0 To nums.Length - 1 nums(i) = r.Next(100) Next " Menampilkan array elemen Untuk Setiap i Sebagai Integer Dalam nums Console.Write("(0)", i) Next

Dalam pernyataan Untuk Setiap, pertama-tama kita tentukan variabel yang akan mengambil nilai dari elemen array. Dan setelah kata kunci Di Tentukan grup di mana Anda ingin menyortir semua elemen.

loop sementara

Dalam while loop, dijalankan selama kondisi tertentu, ditentukan setelah kata While, terpenuhi:

Dim j As Integer = 10 While j > 0 Console.WriteLine(j) j -= 1 End While

Lakukan putaran

Perulangan Do, seperti perulangan While, dijalankan selama kondisi tertentu terpenuhi. Namun memiliki bentuk yang berbeda. Jadi, dalam contoh berikut, kondisinya diperiksa terlebih dahulu, dan kemudian blok kode yang didefinisikan dalam loop dieksekusi:

Dim j As Integer = 10 Lakukan Sementara j > 0 Console.WriteLine(j) j -= 1 Loop

Dalam hal ini, loop dieksekusi ketika nilai j lebih besar dari nol. Tapi ada entri lain di mana kata While digunakan sebagai pengganti kata Sampai, dan loop dijalankan sampai kondisi tertentu terpenuhi, yaitu sampai nilai j menjadi kurang dari nol:

Dim j As Integer = 10 Lakukan Hingga j< 0 Console.WriteLine(j) j -= 1 Loop

Jika awalnya kondisi yang ditentukan dalam loop salah, maka loop tidak akan berfungsi. Tetapi kita dapat mendefinisikan tanda centang di akhir loop, dan dengan demikian loop kita akan berjalan setidaknya sekali:

Dim j As Integer = -1 Lakukan Console.WriteLine(j) j -= 1 Loop Hingga j< 0 "либо Do Console.WriteLine(j) j -= 1 Loop While j > 0

Lanjutkan dan Keluar dari Pernyataan

Seringkali ada kebutuhan untuk tidak menunggu akhir siklus, tetapi untuk segera keluar dari siklus, jika kondisi tertentu terpenuhi. Untuk melakukan ini, gunakan operator KELUAR, diikuti dengan jenis loop untuk keluar, misalnya, Exit Do (Exit While):

Dim r As New Random() Dim num As Integer = r.Next(100) For i As Integer = 0 Sampai 100 num -= 1 If num< 50 Then Exit For Next Console.WriteLine(num)

Ada tugas lain - untuk keluar bukan dari loop, tetapi dari pass atau iterasi saat ini dan pergi ke yang berikutnya. Untuk melakukan ini, gunakan pernyataan Lanjutkan, setelah itu mereka menunjukkan jenis loop dari mana keluar dibuat, misalnya, Lanjutkan Sementara:

Dim r As New Random() Dim num As Integer = r.Next(100) For i As Integer = 0 Sampai 10 num -= 7 If num< 50 AndAlso num >25 Kemudian Lanjutkan Untuk Berakhir Jika Console.WriteLine(num) Next

Dalam hal ini, di setiap lintasan loop, kita mengurangi angka 7 dari num dan kemudian melihat apakah angka num termasuk dalam interval dari 25 hingga 50. Dan jika ya, kita pergi ke iterasi baru dari loop, dan jika tidak, kami menampilkannya di layar.

Pekerjaan laboratorium tentang dasar-dasar pemrograman

2.1. Tabulasi fungsi direpresentasikan secara analitik
dan konvergen di dekatnya

Objektif

· Konsolidasi pengetahuan teoritis tentang dasar-dasar organisasi percabangan dan struktur siklik.

· Akuisisi keterampilan pemrograman praktis menggunakan percabangan dan struktur siklik dalam sistem Visual Basic.

Ada tiga jenis pernyataan loop di VB:

siklus penghitungan: Untuk…Ke…Selanjutnya

Loop dengan prasyarat: Do While...Loop, Do Hingga...Loop, While…WEnd

Loop dengan postconditions: Do...Loop While, Do...Loop Hingga.

Menghitung siklus - memungkinkan Anda untuk menggilir serangkaian pernyataan beberapa kali. Sintaksnya adalah sebagai berikut:

Untuk menangkal = Awal Ke tamat

[operator]

[operator]

Lanjut[ menangkal]

Parameter menangkal adalah variabel numerik (integer, real, atau Date, Variant, Currency) yang secara otomatis bertambah setelah setiap iterasi. Nilai awal menangkal sama dengan parameter Awal, dan parameter terakhir adalah tamat. Jika tidak ditentukan, maka langkah dianggap sama dengan 1, nilai langkah dapat diubah. Ini bisa berupa angka positif atau negatif.

Ada empat konstruksi sintaksis untuk Do….Loop:

Pernyataan antara kata kunci Do...Loop dieksekusi beberapa kali tergantung pada kondisinya. Misalnya, pada fragmen program berikut, ketika C = 100, kondisi akan terpenuhi dan loop akan masuk. Di dalam loop, prosedur dipanggil dan nilai C berkurang 1. Kemudian kondisi diperiksa kembali (C > 0) dan pernyataan loop dieksekusi berulang kali (total akan dieksekusi 100 kali), hingga C = 0. Ketika kondisi C > 0 menjadi salah dan loop berhenti.

Lakukan Sementara C > 0

Fragmen program yang sama dieksekusi menggunakan loop prasyarat dalam sintaks 2:

Dalam hal ini, loop dieksekusi saat kondisinya False, berbeda dengan kasus sebelumnya, yaitu berlanjut sebelum pemenuhan kondisi C = 0.

Pernyataan loop dalam sintaks 3 dan 4 sangat mirip dengan dua yang pertama, kecuali bahwa kondisinya bukan dievaluasi sampai loop telah dieksekusi setidaknya sekali.

Dalam sintaks loop ini, Anda dapat menggunakan operator Exit For dan Exit Do untuk keluar dari loop tanpa syarat, memungkinkan Anda mentransfer kontrol ke operator di belakang loop. Sebagai contoh, pada fragmen program berikut, jika nilai awal C >50, maka perulangan akan segera berhenti.



Lakukan Sampai C<= 0

MsgBox "Mulai. nilainya lebih besar dari yang diizinkan”, “Kesalahan input”

Perulangan While...Wend digunakan pada versi awal Visual Basic. Sintaksnya adalah sebagai berikut:

Ketika<условие>

<Операторы>

Berbeda dengan Do..Loop, loop While ..Wend tidak memiliki opsi kedua, di mana pengujian kondisi dilakukan di akhir loop. Selain itu, ia tidak memiliki pernyataan keluar loop seperti Exit Do.

VBA. Organisasi siklus.

Pernyataan loop digunakan untuk mengulang eksekusi suatu tindakan atau sekelompok tindakan beberapa kali. Jumlah pengulangan (iterasi loop) dapat ditentukan sebelumnya atau dihitung.

VBA mendukung dua jenis konstruksi perulangan:

  1. Loop dengan jumlah pengulangan yang tetap ( siklus dengan penghitung).
  2. Loop dengan jumlah pengulangan yang tidak terbatas ( loop bersyarat).

Untuk semua jenis siklus, konsep yang digunakan tubuh lingkaran A yang mendefinisikan blok pernyataan yang diapit antara pernyataan awal dan akhir perulangan. Setiap pengulangan pernyataan dalam badan perulangan disebut pengulangan .

Siklus Tetap

VBA menyediakan dua struktur kontrol untuk mengatur loop tetap: For ... Next (loop dengan counter) dan For Every ... Next (loop dengan enumeration).

Untuk…Pernyataan berikutnya itu adalah loop khas dengan penghitung yang melakukan sejumlah iterasi tertentu. Sintaks dari pernyataan For … Next adalah:

Untuk<счетчик> = <начЗначение>Itu<конЗначение>

<блок операторов>

Lanjut[<счетчик>]

Contoh penggunaan pernyataan For … Next.

Listing 1. Untuk … Pernyataan selanjutnya

'TUJUAN: Menulis program yang menerima dua angka dari pengguna.

' Tambahkan semua angka dalam rentang yang diberikan oleh dua angka itu, dan kemudian

' Menampilkan jumlah yang dihasilkan.

Sub sampel7()

Dim i As Integer 'loop counter

Dim sMulai 'mulai nilai penghitung

Redupkan nilai akhir penghitung

Dim sSum Selama 'jumlah yang dihasilkan

sStart = InputBox("Masukkan bilangan pertama :")

sEnd = InputBox("Masukkan bilangan kedua :")

sJumlah = 0

Untuk i = CInt(sStart) Ke CInt(sEnd)

sSum = sSum + i

Selanjutnya saya

MsgBox “Jumlah bilangan dari ” & sStart & ” hingga ” & sEnd & ” adalah: ” & sSum

sub akhir

Untuk Setiap ... Pernyataan Loop Berikutnyatermasuk dalam kategori operator tipe objek, mis. berlaku terutama untuk koleksi objek serta array . Tubuh loop dieksekusi beberapa kali, sesuai dengan jumlah elemen dalam array atau koleksi. Format pernyataan For Each … Selanjutnya adalah:

Untuk setiap<элемент>Di<группа> <блок операторов>Lanjut[<элемент>]

Loop bersyarat (loop tak tentu)

Loop bersyarat digunakan ketika tindakan berulang perlu dilakukan hanya dalam kondisi tertentu. Jumlah iterasi tidak ditentukan dan dalam kasus umum bisa sama dengan nol (khususnya, untuk loop dengan prasyarat). VBA menawarkan pengembang beberapa struktur kontrol untuk mengatur loop bersyarat:

  • Empat jenis loop Do..Loop, yang berbeda dalam jenis kondisi yang diperiksa dan waktu pelaksanaan pemeriksaan ini.
  • Sebuah while yang tidak terputus ... Wend loop.

Lakukan Sementara... Loop - Khas loop dengan prasyarat. Kondisi diperiksa sebelum tubuh loop dieksekusi. Siklus melanjutkan pekerjaannya sampai<условие>dijalankan (yaitu Benar). Karena pemeriksaan dilakukan di awal, badan perulangan mungkin tidak akan pernah dieksekusi. Format Do While … Loop:

Lakukan Sementara<условие>

<блок операторов>

lingkaran

Listing 2. Do While … Loop

'TUJUAN: Menulis program yang menerima input pengguna

' urutan angka yang sewenang-wenang. Entri harus dihentikan

' hanya setelah jumlah angka ganjil yang dimasukkan melebihi 100.

Sub sampel8()

Dim OddSum Sebagai Integer

Dim OddStr As String 'string dengan angka ganjil

Dim Num 'untuk menerima nomor input

OddStr = "" 'inisialisasi string keluaran

OddSum = 0 ‘inisialisasi jumlah OddSum

Lakukan Sementara OddSum< 100 ‘начало цикла

Angka = InputBox("Masukkan Angka : ")

Jika (Bilangan Mod 2)<>0 Kemudian 'genap paritas'

OddSum = OddSum + Num ‘akumulasi jumlah bilangan ganjil

OddStr = OddStr & Angka & ” ”

Berakhir jika

lingkaran

'keluarkan string dengan angka ganjil

MsgBox prompt:=”Angka ganjil: ” & OddStr

sub akhir

Lakukan...Loop While Pernyataanditujukan untuk organisasiloop dengan postcondition. Kondisi diperiksa setelah badan loop dieksekusi setidaknya sekali. Siklus berlanjut sampai<условие>tetap benar. Format Do...Loop While:

Mengerjakan<блок операторов>lingkaran sementara<условие>

Listing 3. Loop dengan postcondition

TUJUAN: Membuat program untuk permainan “Tebak Angka”. Program harus acak

' dengan cara menghasilkan angka dalam kisaran 1 hingga 1000, pengguna harus

'Tebak nomor ini. Program ini menampilkan petunjuk untuk setiap nomor yang dimasukkan.

' "lebih atau kurang".

Sub sampel8()

Randomize Timer 'inisialisasi generator nomor acak

Redupkan pesan Sebagai String 'pesan string

Redup SecretNumber Selama, UserNumber Sebagai Varian

Mulai: SecretNumber = Round(Rnd * 1000) ‘nomor yang dihasilkan komputer

UserNumber = Kosongkan ‘nomor yang dimasukkan oleh pengguna

Lakukan permainan

Pilih Kasus Benar

Case IsEmpty(UserNumber): msg = "Silakan masukkan nomor"

Case UserNumber > SecretNumber: msg = “Terlalu banyak!”

Nomor Pengguna Kasus< SecretNumber: msg = “Слишком мало!”

Akhiri Pilih

UserNumber = InputBox(Prompt:=msg, Judul:=”Tebak Nomornya”)

Loop Sementara UserNumber<>nomor rahasia

' penyelidikan

If MsgBox("Apakah Anda ingin bermain lagi?", vbYesNo + vbQuestion, "Tebakan Anda benar!") = vbYes Then

Mulai

Berakhir jika

sub akhir

Lakukan Hingga … Loop dan Do … Loop Hingga Loop adalah inversi dari loop kondisional yang sebelumnya dianggap. Secara umum, mereka bekerja dengan cara yang sama, kecuali bahwa badan loop dieksekusi dalam kondisi yang salah (mis.<условие>= Salah). Format dari Do Hingga ... Loop adalah:

Lakukan sampai<условие> <блок операторов>lingkaran

Format dari Do … Loop Hingga loop adalah:

<блок операторов>

Putar Sampai<условие>

Tugas praktis:Tulis ulang program di Daftar 10 dan 11 menggunakan pernyataan loop terbalik.

Sementara Loop ... Wend juga berlaku untuk loop bersyarat. Pernyataan ini sepenuhnya sesuai dengan struktur Do While … Loop. Format dari while … Wend loop adalah:

Ketika<условие>

<блок операторов>

Pergi ke

Ciri khas dari pernyataan ini adalah ketidakmungkinan penghentian paksa (interupsi) dari badan loop (pernyataan Exit Do tidak berfungsi di while ... Wend loop).

Gangguan lingkaran

Pernyataan Keluar digunakan untuk mengakhiri iterasi dan keluar dari perulangan. Pernyataan ini dapat diterapkan pada semua struktur siklik, kecuali While ... Wend. Sintaks umum untuk menggunakan Exit untuk memutus loop adalah:

<начало_цикла>

[<блок операторов1>]

Keluar (Untuk | Lakukan)

[<блок операторов2>]

<конец_цикла>

Ketika pernyataan Exit dieksekusi, loop diinterupsi dan kontrol dipindahkan ke pernyataan yang mengikuti pernyataan<конец_цикла>. Badan loop dapat berisi beberapa pernyataan Keluar.

Daftar 4. Keluar loop paksa

Sub sampel9()

Untuk i = 1 Sampai 10000000

Jika i = 10 Kemudian Keluar Untuk ' keluar dari loop ketika penghitung mencapai 10

Lanjut

Sintaks operator:

UntukMenangkal= Awal THaiAkhir[melangkahMelangkah]

Pernyataan_Blok

LanjutMenangkal

Ini ditandai di sini:

Untuk untuk (kata kunci VB wajib);

Ke sebelum (kata kunci VB wajib);

Pernyataan_Blok satu atau lebih operator yang disebut tubuh siklus;

Menangkal - variabel integer yang menghitung jumlah siklus yang akan dieksekusi;

Awal, Akhir - nilai awal dan akhir penghitung;

melangkah langkah (kata kunci VB);

Melangkah - langkah perubahan kontra; mungkin negatif; parameternya opsional, karena jika langkahnya 1, Anda bisa Langkah Melangkah lebih rendah;

Berikutnya - berikutnya (kata kunci VB wajib, catatan pernyataan akhir loop).

Nilai kontra (Mulai, Akhir) dapat konstanta numerik atau variabel bilangan bulat atau tipe nyata, dapat berupa angka negatif atau positif. Agar tubuh loop dieksekusi setidaknya sekali, itu harus Mulai Akhir, jika Melangkah> 0, dan Mulai Akhir, jika Melangkah< 0. Begitu ternyata Menangkal>Akhir ( jika Awal< Конец), eksekusi loop berakhir. Jika sebuah Mulai =Akhir, loop akan dieksekusi sekali;

Contoh 9.1 .Evaluasi fungsikamu = 2 – 1.5 sinxsaat mengubah X dengan penambahan 0,2 dalam rentang .

Sebuah fragmen dari program untuk menghitung Y dan mengeluarkan argumen X dan fungsi Y:

Untuk X = 0 Sampai 2.4 Langkah 0.2

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

Untuk memahami cara kerja loop ini, berikut adalah program untuk loop serupa yang dibuat menggunakan operatorpergi ke, label, operatorJikaKemudian.

M1:X=X+0.2

Jika X<= 2.4 Then

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

Mari kita analisis bagaimana program ini bekerja. Perhitungan pertama Y tidak standar, seolah-olah keluar dari loop. Loop dimulai setelah transfer pertama kontrol GoToM1 ke label M1. Pada baris berlabel M1, argumen X ditingkatkan dengan langkah 0,2 dan segera dilakukan pemeriksaan apakah nilai baru X tidak melebihi nilai akhir 2,4. Jika tidak melebihi, maka perhitungan Y diulang dengan X baru ini. Kemudian operator GoToM1 dijalankan lagi - mentransfer kontrol ke saluran dengan label M1. Pengulangan (siklus) penghitungan Y ini akan berakhir segera setelah X melebihi 2,4.

Sekarang program If sebanding dengan loop For…Next.

Untuk X = 0 Sampai 2.4 Langkah 0.2

menggantikan dua baris

M1:X=X+0.2

Jika X<= 2.4 Then

Ini adalah dua baris kode terakhir yang dieksekusi dalam perulangan For, tetapi kita tidak melihat ini. Kami mengkodekannya dengan string cFor... Baris kode GoTo M1 dikodekan dengan kata Next X (harfiah: next X). Ini menghasilkan desain yang kompak.

Saat menggunakan loop For…Next, Anda perlu mempelajari cara menggunakan penghitung loop saat menyelesaikan berbagai masalah. Untuk mengetahui bagaimana Anda dapat menggunakan penghitung untuk menyelesaikan masalah, Anda perlu untuk menganalisis pernyataan masalah, untuk menemukan pola perubahan dalam beberapa parameter masalah.

Contoh 9.2 . Menentukan jumlah anggota suatu deret: .

Fragmen program:

S = 0 ‘S adalah jumlah deret

Untuk i = 1 Sampai 16 ' counter i adalah penyebut dari pecahan

S = S + 1/i ‘jumlah akumulasi

Cetak "S="; S ' output dari jumlah S ke bentuk

Untuk setiap nilai penghitung i, ekspresi 1/i secara berurutan membentuk elemen-elemen deret, mulai dari 1.

Contoh 9.3 . Menghitung jumlah deret elemen
.

Fragmen program:

S = 0 ‘S adalah jumlah deret

Untuk i = 1 Sampai 18 ' counter i - pembilang

S = S + i/(i + 1) ‘ penyebut lebih besar dari pembilang dengan 1

Cetak "S="; S ' output dari jumlah S ke bentuk

Contoh 9.4 . Perhitungan jumlah: 5 + 8 + 11 + ... + 32 + 35

Fragmen program:

S = 0 ‘S adalah jumlah deret

Untuk i = 5 Sampai 35 Langkah 3 ‘dapatkan aritmatika _

progresi dengan penyebut 3

Cetak "S="; S

Contoh 9.5. Menghitung jumlah untuk x yang diberikan:

Analisis masalah menunjukkan bahwa derajat di X berubah dari 1 menjadi 10. Dalam hal ini, pembilang dalam koefisien di X lebih besar dari derajat dengan 1, dan penyebutnya adalah 2. Nilai derajat akan terbentuk menggunakan penghitung i. Kemudian Anda dapat menulis program berikut (fragmen):

S = 1 ‘S adalah jumlah deret

Untuk i = 1 Sampai 10' sebagai counter i, derajatnya berubah pada X

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

Cetak "S="; S

SiklusUntukLanjutDigunakan dalaminput output danpemrosesan larik .

Contoh 9.6. Input dan output nilai elemen array B(N).

Fragmen program:

' Hilangkan penugasan nilai N ke variabel, _

dimasukkan pada formulir di bidang teks txtN:

B(i) = InputBox("Masukkan elemen B(" & i & ")", _

"Array masukan B(" & N & ")")))

cetak " "; Dua);

Fungsi Kotak Masukan() menampilkan kotak dialog dengan tombol tutup, pesan yang diberikan, bidang input, tombol Oke,Membatalkan, tajuk (atau tanpa itu). Jika angka 12 dimasukkan - ukuran array N, maka dalam contoh kita, pada tampilan pertama, jendela ini akan terlihat seperti:

Seperti yang Anda lihat, pesannya Masukkan elemen B(1) meminta Anda untuk memasukkan nilai elemen pertama di kotak teks. Jendela ini akan muncul 12 kali karena array berisi 12 elemen. Ini mengikuti dari header formulir. Indeks elemen B(i) dalam prompt akan bervariasi dari 1 hingga 12.

Jika diperlukan untuk menampilkan hanya nilai elemen array B(N) pada formulir, maka badan perulangan akan terdiri dari satu pernyataan:

Melihat elemen array untuk melakukan beberapa tindakan pada elemen tersebut juga terjadi dengan menggunakan operator loop For…Next.

Ayo bawa contoh pemrosesan array satu dimensi.

Contoh 9.7 . Penentuan elemen maksimum dalam array B(M).

Tidak termasuk input data awal dan output hasil, kami menjelaskan algoritma secara singkat:

    Mari kita deklarasikan variabel Bmax, di mana kita akan memasukkan nilai elemen pertama array, dan variabel Imax, yang akan kita tetapkan 1 - indeks elemen pertama array.

    Dalam loop, menggunakan operator For…Next, kita melihat semua elemen array, mulai dari yang ke-2. Menggunakan operator If…then, kami membandingkan nilainya dengan nilai yang disimpan dalam variabel Bmax.

    Jika ternyata nilai elemen array lebih besar dari Bmax, maka Bmax diberikan nilai elemen ini, dan nilai Imax adalah indeks elemen array ini.

Setelah akhir loop, variabel Bmax akan berisi nilai elemen maksimum, dan Imax akan berisi indeksnya (angka).

Program bagian dari algoritma ini.

Bmaks = B(1): Imaks = 1

Jika B(i) > Bmax Maka Bmax = B(i): Imax = i

Contoh 9.8. Menentukan jumlah, produk, dan jumlah elemen array positifD(M).

Variabel: S, P, K masing-masing adalah jumlah, produk, dan jumlah elemen positif.

algoritma definisi ini:

    Kami menetapkan nol untuk variabel S dan K, menetapkan 1 untuk variabel P. Sebagai aturan, variabel di mana jumlah diakumulasikan, ini dia S dan k, direset ke nol sebelum siklus, dan variabel di mana produk dihitung ditugaskan 1.

    Menggunakan loop For…Next, kita menelusuri semua elemen array dan memeriksa apakah mereka positif (D(i) > 0).

    Jika ternyata elemennya positif, maka kita menambahkan nilainya ke nilai jumlah S dan menyimpan jumlah baru dalam variabel yang sama. Kami mengalikan variabel P dengan nilai positif dari elemen dan menyimpannya dalam variabel P juga. Dan kami menambahkan 1 ke variabel K dan menyimpan nilai baru di variabel yang sama

Program bagian dari algoritma ini terlihat seperti:

S=0: P=1: K=0

Jika D(i) > 0 Maka

S = S + D(i)’ beginilah akumulasi penjumlahan _

nilai positif elemen array D(i)

P = P*D(i) ‘definisi hasil kali positif

'elemen larik

K = K + 1 ‘operator ini disebut COUNTER, ini dia

' menentukan jumlah elemen array positif

Contoh 9.9. Penentuan jumlah, produk, jumlah dan rata-rata elemen array ganjilD(M).

Kami menyajikan sebuah fragmen dari program definisi seperti itu.

S=0: P=1: K=0

Jika D(i) Mod 2<>0 Lalu

Ssr = S/k ‘perhitungan rata-rata elemen ganjil

Bandingkan fragmen program ini dengan program pada Contoh 9.8. Program ini hampir sepenuhnya mengulangi yang sebelumnya. Hanya kondisi dalam pernyataan If yang diubah. Kondisi D(i) Mod 2<>0 berarti kita mencari elemen array D(i) yang tidak habis dibagi 2, yaitu elemen ganjil. Jika kita memeriksa kondisi D(i) Mod 2 = 0, maka kita akan memilih elemen genap dari array.

Seperti yang Anda tahu, divisi Mod memberikan sebagai hasil sisa pembagian dalam bilangan bulat. Misalnya, setelah menjalankan operator d= 34Mod4, variabel d akan sama dengan 2. Oleh karena itu, untuk memilih elemen array yang kelipatan 4, Anda perlu memeriksa kondisi D(i) Mod 4 = 0. Kondisi akan serupa jika kita mencari elemen yang merupakan kelipatan dari bilangan lain. Alih-alih 4, angka-angka lain ini akan ditulis.

Contoh 9.10. Menulis elemen arrayR(N) habis dibagi 5 menjadi larik lain dan menampilkan larik baru pada formulir.

Array lainnya akan dilambangkan, misalnya, dengan R5(N). Ukuran array baru ini harus diasumsikan sama dengan yang asli, karena dalam kasus limit semua elemen dapat kelipatan 5.

Algoritma tugas:

    Kami mengatur ulang penghitung k. Menggunakan operator loop For…Next, kita melihat semua elemen larik R(N).

    Kami memeriksa setiap elemen untuk multiplisitas 5 menggunakan operator If…then dan pembagian elemen array oleh Mod.

    Jika elemennya adalah kelipatan 5, maka dengan menggunakan pencacah seperti k=k+ 1, kita membentuk indeks larik R5(N), mulai dari 1, dan menuliskannya ke larik lain ini –R5(N).

    Jika k bukan nol, keluarkan arrayR5() ke formulir.

    Jika k sama dengan nol, kita output: "Tidak ada elemen yang kelipatan 5".

Fragmen program:

Jika R(i) Mod 5 Maka k = k + 1: R5(k) = R(i)

jika k<>0 Lalu

Cetak “Tidak ada elemen yang habis dibagi 5”

Loop dapat bersarang di dalam loop lain.

Mari kita tunjukkan karyanya loop bersarang . Di bawah ini, program mengatur output dari nilai-nilai penghitung siklus i, j dan k. Dari output i,j,k menjadi jelas bagaimana loop bersarang dieksekusi.

Sub pribadi frmCycle_DblClick()

ScaleMode = 4 'unit - simbol

Untuk i = 1 Sampai 3 ‘lingkaran luar

Cetak "i="; saya;

Untuk j = 1 Sampai 4 'loop bersarang pertama

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

Cetak "j="; j;

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

Untuk k = 1 Sampai 5 ‘perulangan bersarang ke-2

Bentuk yang ditampilkan (Gbr. 1) menunjukkan hasil menampilkan penghitung dari ketiga loop: loop luar - penghitung i, loop bersarang pertama - penghitung, dan loop kedua, terdalam - penghitung. Seperti yang kita lihat, penghitung "paling lambat" dari loop luar(poi), dan "tercepat" adalah penghitung loop terdalam (menurutk).

Program dijalankan setelah mengklik dua kali formulir frmCicli dengan tombol kiri mouse.

CurrentX, CurrentY - properti formulir yang menentukan koordinat X, Y dari titik awal untuk keluaran informasi dengan metode Cetak (lihat lokasi sumbu X dan Y pada formulir pada Gambar 1).

TextWidth() adalah fungsi yang mengembalikan lebar teks yang diberikan dalam fungsi sebagai argumen dalam tanda kutip ganda.

Loop bersarang digunakan saat memproses array dua dimensi (matriks). Tetapi dalam beberapa tugas, tidak termasuk input dan output elemen array dua dimensi, Anda dapat membatasi diri Anda pada satu siklus. Perhatikan beberapa contoh pemrograman matriks.

Contoh 9.11. Input dan output matriks (array dua dimensi) bilangan bulatintA(N).

Anda dapat memasukkan matriks dengan baris dan kolom . Lebih mudah - baris demi baris, jika output dari elemen array ke formulir akan diprogram segera setelah inputnya.

Masukan dan keluaran matriksbaris demi baris - fragmen 1.

Redupkan M Sebagai Integer, N Sebagai Integer, i Sebagai Integer, j Sebagai Integer

Dim intA() Sebagai Integer 'mendeklarasikan array dinamis

M = Val(txtN.Text) ‘ M adalah jumlah baris

N = Val(txtN.Text) ‘ N adalah jumlah kolom

ReDim intA(M, N) As Integer 'mendefinisikan ulang array

Untuk i = 1 To M ' saya akan menjaga nilainya sampai sepenuhnya

'loop bersarang di j tidak akan dieksekusi

cetak " "; intA(i, j); 'keluaran baris demi baris

Cetak 'lompat ke awal baris baru

Untuk memasukkan matriks dengan kolom, perlu membuat loop luar pada j (menetapkan nomor kolom), dan loop dalam pada i (menetapkan nomor baris).

Masukan dan keluaran matriksmenurut kolom fragmen 2.

PrY = 2500: CurrentY = PrY ‘ PrY menetapkan koordinat Y awal

'keluarkan elemen pertama dari setiap kolom pada formulir

Untuk j = 1 Untuk N ' j akan mempertahankan nilainya sampai sepenuhnya

'loop bersarang pada saya tidak akan dieksekusi

intA (i, j) = InputBox("Masukkan elemen intA(" & i & “,” & j & ")", _

"Input matriks intA(" & M & "," & N & ")")

Tab Cetak(6 * j); intA(i, j) 'tampilkan menurut kolom

CurrentY = PrY ' untuk menampilkan elemen pertama

' kolom berikutnya

Fragmen kedua dari program ini tidak mengulangi 5 baris pertama dari fragmen pertama. Fungsi Tab(6 * j) mengatur awal keluaran pada baris (dalam karakter) mulai dari tepi kiri formulir. Koordinat PrY di sini adalah 2500 twips, tetapi Anda dapat memilih nilai lain.

Contoh 9.12 . Memesan nilai elemen arrayV(N) Mendaki.

Ada beberapa algoritma untuk mengurutkan array. Inilah salah satunya: menggunakan loop bersarangUntukLanjutpilih elemen dari yang pertama hingga kedua dari belakang, dan bandingkan masing-masing dengan elemen berikutnya; jika ternyata elemen berikutnya kurang dari yang dipilih, tukarkan.

Sebuah fragmen dari program yang mengimplementasikan algoritma ini:

Untuk i = 1 Ke N - 1

Untuk j = i + 1 Ke N

Jika V(j)< V(i) Then P = V(i): V(i) = V(j): V(j) = P

Mari kita jelaskan bagian program ini.

Dengan bantuan loop luar dengan penghitung i, kami memilih elemen V (i) untuk perbandingan dengan elemen berikutnya. Loop dalam dengan counter j memilih elemen V(j) berikutnya untuk perbandingan. Nilai awal j adalah i + 1. Ini adalah elemen pertama dari berikut ini.

Untuk menukar nilai elemen V(i) dan V(j), kami memperkenalkan beberapa variabel P, di mana kami sementara "menyembunyikan" nilai salah satu elemen array (dalam program, ini adalah V(i )). Kemudian elemen V(i) diberi nilai elemen V(j), dan elemen V(j) diberi nilai V(i), yang disimpan dalam variabel P. Jika kita “menyembunyikan” nilai V(j) di P, maka kode pertukaran nilainya adalah sebagai berikut: P = V(j): V(j) = V(i): V(i) = P. hasilnya tidak akan berubah.

Ke urutkan array dalam urutan menurun, cukup dengan menuliskan syarat verifikasi dalam bentuk V(j) > V(i), yaitu mengubah tanda pertidaksamaan menjadi tanda pertidaksamaan lainnya.

Jika array bukan numerik, tetapi string, dan elemen array diisi dengan nama keluarga, maka dengan menggunakan program pada Contoh 9.12, Anda dapat mengurutkan daftar nama keluarga menurut abjad. Faktanya adalah bahwa untuk huruf-huruf alfabet yang digunakan di komputer, ketidaksetaraan itu benar: A< Б < В < Г….< Я и т. д., поскольку числовые коды букв алфавита последовательно увеличиваются, начиная с А и до конца алфавита. Это же справедливо и для букв английского алфавита.

Contoh 9.13 . Menghitung jumlah elemen positif untuk kolom ganjil suatu matriksF(M, N) dan menampilkan jumlah pada formulir.

Algoritma program:

    Menggunakan loop luar dengan langkah 2, kami membentuk indeks kolom ganjil dari matriks, mulai dari kolom pertama.

    Kami mengatur ulang jumlah S, di mana jumlah elemen positif akan diakumulasikan.

    Di loop dalam, kami memeriksa tanda elemen array.

    Jika elemen array positif (> 0), hitung jumlah S.

    Setelah akhir loop dalam, keluarkan jumlah S ke formulir.

Pecahan program:

Untuk j = 1 Ke N Langkah 2

Jika F(i, j) > 0 Maka S = S + F(i, j)

Cetak “Jumlah kolom”; j; ":"; S 'j adalah nomor kolom!

Loop bersarang memungkinkan Anda untuk mengatur penghitungan opsi dan memecahkan masalah yang tidak dapat diselesaikan secara analitis. Sebagai hasil dari enumerasi, solusi diperoleh, di antaranya dipilih satu atau lebih yang memenuhi kondisi masalah.

Contoh 9.14. Ada 1801 rubel. Berapa banyak Anda dapat membeli cokelat untuk 31 rubel. dan gulungan untuk 18 rubel untuk menghabiskan semua uang sepenuhnya.

Program:

Jumlah = 1801

AllChocolates = Jumlah \ 31: Semua Roti = Jumlah \ 18

Untuk i = 1 Untuk Semua Cokelat

Untuk j = 1 Untuk SemuaBulki

Harga = i * 31 + j * 18 ‘total harga pembelian

Jika Harga = 1801 Maka

Cetak "Cokelat:"; saya; Tab(19); "Bulu:"; j

Mari kita jelaskan program di mana kita menggunakan variabel bernama dalam bahasa Rusia.

Pertama, kami menentukan berapa jumlah maksimum cokelat saja atau hanya gulungan yang dapat dibeli untuk keseluruhan jumlah. Nilai VseChocolate dan VseBulki yang diperoleh digunakan untuk membatasi jumlah pencarian berdasarkan jumlah cokelat dan gulungan. Untuk setiap nilai jumlah cokelat (i) dan jumlah gulungan (j), kami menentukan total Harga untuk pembeliannya. Jika Harga yang dihitung adalah 1801, maka opsi yang dipilih adalah salah satu solusi dari masalah tersebut.

Fungsi Tab() menentukan pada posisi apa dari tepi formulir informasi yang mengikuti fungsi ini akan ditampilkan. Jika Tab(19), maka dari posisi ke-19.

Program ini menampilkan 3 kemungkinan opsi pembelian:

Cokelat 7, gulungan 88

Cokelat 25, gulungan 57

Cokelat 43, gulungan 26

Jika Anda ingin memberikan jawaban yang tidak ambigu, Anda harus merumuskan kondisi tambahan. Misalnya, "lebih sedikit roti yang dibeli daripada cokelat." Maka satu-satunya solusi adalah opsi ke-3.

Ada banyak masalah matematika yang hanya diselesaikan dengan iterasi melalui pemrograman loop bersarang.