Главная Обратная связь

Дисциплины:






Циклические конструкции



 

Циклы являются важнейшими структурами программ. Ни одна сложная программа не обходится без циклических конструкций.

Циклом называется многократное повторение одной или нескольких инструкций, составляющих тело цикла. Существует два основных вида циклов: циклы со счетчиком (For…Next) и циклы по условию (Do…Loop).

 

Циклы со счетчиком (For…Next)

 

Циклы со счетчиком часто еще называют циклами по параметру. Конструкция For...Next используется для выполнения группы инструкций указанное число раз. Циклы For используют в качестве счетчика переменную, значение которой увеличивается или уменьшается при каждом выполнении цикла.

 

Синтаксис:

 

For счетчик = начало To конец [Step шаг]

[инструкции]

[Exit For]

[инструкции]

Next [счетчик]

 

Синтаксис конструкции For…Next содержит следующие элементы:

Счетчик (обязательный) - числовая переменная, используемая в качестве счетчика цикла. Эта переменная записывается после ключевого слова For и не может принадлежать к типу Boolean или быть элементом массива.

Начало (обязательный) - начальное значение переменной счетчик. Является числом или числовой переменной, определяемой перед входом в цикл и записывается после параметра счетчик и знака равно (=).

Конец (обязательный) - конечное значение переменной счетчик. Является числом или числовой переменной, определяемой перед входом в цикл и записывается после ключевого слова To.

Шаг (необязательный) - является числом или числовой переменной, определяемой перед входом в цикл. Записывается после ключевого слова Step, обозначающего значение, на которое изменяется счетчик при каждом выполнении тела цикла. Если это значение не задано, по умолчанию шаг равен единице. Аргумент параметра шаг может быть как положительным, так и отрицательным. Если шаг больше нуля, то параметр начало должен быть меньше параметра конец. Если шаг меньше нуля, то параметр начало должен быть больше параметра конец. Если эти условия не соблюдаются, то инструкции внутри цикла выполнятся не будут и программа начнет выполнятся с инструкции следующей после ключевого слова Next.

Инструкции (необязательный) - одна или несколько инструкций между For и Next, которые выполняются указанное число раз.

Альтернативный способ выхода из цикла предоставляет инструкция Exit For. В любых местах цикла может размещаться любое число таких инструкций. Инструкция Exit For часто применяется вместе с проверкой некоторого условия (например, If...Then). Эта инструкция передает управление инструкции, непосредственно следующей за инструкцией Next.

Цикл For…Next работает следующим образом:



1. Переменной счетчикприсваивается значение параметра начало:

счетчик = начало

2. Далее осуществляется вход в тело цикла и выполняются инструкции в теле цикла.

Если встречается инструкция Exit Forпроисходит выход из цикла и выполняется инструкция непосредственно следующей за ключевым словом Next.

3. Дойдя до ключевого слова Next программа изменяет значение счетчик на величину указанную в параметре шаг после ключевого слова Step (счетчик = счетчик + шаг) или на единицу если ключевое слово Step отсутствует (счетчик = счетчик + 1).

4. Если значение счетчик выйдет за пределы параметра конец, то выполнение цикла прекратится и будет выполнена инструкция непосредственно следующей за ключевым словом Next. Если значение счетчик меньше или равно параметру конец, то произойдет возврат на первую инструкцию после внутри цикла.

Инструкции внутри цикла выполняются до тех по, пока значение счетчика не сравняется со значением параметра конец. После этого цикл завершается, и выполнение программы продолжается с инструкции, следующей за инструкцией Next.

Допускается организация вложенных циклов For...Next (один цикл For...Next располагается внутри другого). В этом случае счетчик каждого цикла должен иметь уникальное имя.

 

For I = 1 To 10

For J = 1 To 10

For K = 1 To 10

...

Next K

Next J

Next I

 

По правилу хорошего стиля программирования инструкции внутри конструкции For…Next должны писаться с отступом вправо. Это улучшает читаемость программы. Если в программе встречаются вложенные конструкции For…Next или другие конструкции (If…Then…Else If…End If, Select Case…End Select, Do…Loop и другие), то внутри этих конструкции инструкции также сдвигаются на несколько пробелов вправо. Далее, в примерах, видно как это делается.

Пример. Вычислить сумму ряда

Создадим модуль, который содержит следующую процедуру:

 

Sub summa()

Dim S As Single 'переменная (Сумма)

Dim k As Integer 'счетчик

 

S = 0 'Начальное значение суммы

For k = 3 To 8

'Накапливаем сумму

S = S + (k + Sqr(k)) / (2 - Sin(k))

Next k

MsgBox "Сумма ряда = " & S

End Sub

 

В этом примере отсутствует ключевое слово Step, т.к. шаг равен 1.

Если требуется вычислить произведение ряда, то в рассмотренном при­мере необходимо начальное значение произведения задать равным 1.

 

Задача. Составить программу для вычисления значений функции ,на отрезке с шагом h. Результат представить в виде таблицы в документе Word, первый столбец которой содержит значения аргумента, второй — соот­ветствующие значения функции. Программе должна соответствовать форма с элементами управления для ввода данных. В результате работы программы составляется отчет, который должен содержать задание и таблицу расчета функции.

Решение.Подобные задачи называются табулированием функции и применяются для построения графиков функций.

1. Создадим форму рис. 7

 

 

Рис. 7. Форма для расчета табуляции функции.

2. Для кнопки Рассчитать (cmdRaschet) создадим код:

 

Private Sub cmdRaschet_Click()

 

'Объявляем переменные которые показывают, являются ли введенные данные числами

Dim AA As Boolean

Dim BB As Boolean

Dim HH As Boolean

 

Dim docNew As Document 'объявляем новый документ

Dim tblNew As Table 'объявляем новую таблицу

 

'Выясняем являются ли введенные данные числами

'Если да, то переменные примут значение True, если не числа то False

 

AA = IsNumeric(txtA.Text)

BB = IsNumeric(txtB.Text)

HH = IsNumeric(txtH.Text)

 

If txtA.Text = "" Then 'заполнено ли текстовое поле a

MsgBox ("Не введена начальная точка")

txtA.SetFocus

ElseIf Not (AA) Then 'Если введено не число

MsgBox ("Не правильно введена начальная точка")

txtA.SetFocus

ElseIf txtB.Text = "" Then 'заполнено ли текстовое поле b

MsgBox ("Не введена конечная точка")

txtB.SetFocus

ElseIf Not (BB) Then 'Если введено не число

MsgBox ("Не правильно введена конечная точка")

txtB.SetFocus

ElseIf txtH.Text = "" Then 'заполнено ли текстовое поле h

MsgBox ("Не введена величина шага")

txtH.SetFocus

ElseIf Not (HH) Then 'Если введено не число

MsgBox ("Не правильно введена величина шага")

txtC.SetFocus

ElseIf Not (HH) Then 'Если введено не число

MsgBox ("Не правильно введена величина шага")

txtC.SetFocus

Else

'переводим данные в числовую форму

a = CSng(txtA.Text)

b = CSng(txtB.Text)

h = CSng(txtH.Text)

 

 

frmTabulation.Hide

 

'создаем новый документ и устанавливаем на него ссылку

Set docNew = Documents.Add

With Selection

'Печатаем заголовок

.InsertAfter "Использование цикла For...Next. Табулирование функции"

'напечатанный заголовок форматируем по середине

.ParagraphFormat.Alignment = wdAlignParagraphCenter

'создаем отступ для первой строки

.ParagraphFormat.FirstLineIndent = CentimetersToPoints(0.7)

'устанавливаем для заголовка полужирный шрифт, 14 размера

.Font.Bold = True

.Font.Size = 14

'вставляем два параграфа

.InsertParagraphAfter

.InsertParagraphAfter

'Перемещаем курсор в конец документа

.EndOf Unit:=wdSection

'Печатаем задание

.InsertAfter "Задание. "

.ParagraphFormat.Alignment = wdAlignParagraphJustify

.Font.Bold = True

.EndOf Unit:=wdSection

.InsertAfter "Составить программу для вычисления значений функции "

.Font.Bold = False

.EndOf Unit:=wdSection

 

'Печатаем формулу

.Fields.Add Range:=Selection.Range, Type:=wdFieldEmpty, PreserveFormatting:=False

.TypeText "EQ F(x) = \F(x \s("

.Font.Size = Selection.Font.Size - 4

.TypeText "3"

.Font.Size = Selection.Font.Size + 4

.TypeText ");x+1) sin(x)"

.Fields.ToggleShowCodes

.EndOf Unit:=wdSection

 

'Печатаем оставшуюся часть задания

.InsertAfter "на отрезке [а, b] с шагом h. Результат представить в виде таблицы в документе Word, первый столбец которой - значения аргумента, второй - соответствующие значения функции. Программа должна содержать форму с элементами управления для ввода данных. Программа должна составить отчет, который должен содержать задание, таблицу расчета функции."

 

'Вывод результатов в отчет

.Font.Bold = False

.InsertParagraphAfter

.InsertAfter "Решение. "

.EndOf Unit:=wdSection

.InsertParagraphAfter

End With

 

'создаем таблицу, состоящую из 1 строки и 2 столбцов

Set tblNew = docNew.Tables.Add(Selection.Range, 1, 2)

 

'заполняем первую строку программы

With tblNew

.Cell(1, 1).Range.InsertAfter "x"

.Cell(1, 2).Range.InsertAfter ("F(x)")

 

For x = a To b Step h

Selection.InsertRowsBelow 'вставляем новую строку в конец таблицы

If x = -1 Then 'Если знаменатель формулы равен нулю

.Cell(.Rows.Count, 1).Range.InsertAfter x

.Cell(.Rows.Count, 2).Range.InsertAfter "Значение не определено"

Else

'рассчитываем и заполняем таблицу

Fx = x ^ 3 * Sin(x) / (x + 1)

.Cell(.Rows.Count, 1).Range.InsertAfter x

.Cell(.Rows.Count, 2).Range.InsertAfter Fx

End If

Next x

 

'используем стиль таблицы для ее оформления

.AutoFormat (wdTableFormatClassic1)

'Осуществляем автоподбор ширины столбцов по содержимому

.Columns.AutoFit

'Помещаем таблицу по центру листа

.Rows.Alignment = wdAlignRowCenter

End With

 

'Показываем форму

frmTabulation.Show

End If

End Sub

 

 





sdamzavas.net - 2019 год. Все права принадлежат их авторам! В случае нарушение авторского права, обращайтесь по форме обратной связи...