Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
informatika / Вариант1.doc
Скачиваний:
90
Добавлен:
16.04.2015
Размер:
1.9 Mб
Скачать

Лабораторная работа № 5 программирование циклов с предусловием

Цель работы – научиться составлять циклические алгоритмы и программы используя оператор цикла с предусловием.

ТЕОРЕТИЧЕСКАЯ ЧАСТЬ:

Оператор цикла с предусловием целесообразно использовать в случаях, когда число повторений тела цикла заранее неизвестно и тело цикла может ни разу не выполниться В языке программирования VisualBasic, цикл с предварительным условием может быть организован четырьмя способами: с помощью операторов условного и безусловного перехода, с помощью операторов циклаDO WHILELOOP,DO UNTILLOOP,WHILEWEND. ОператорWHILEWENDполностью соответствует операторуDO WHILELOOP, за исключением ключевых слов.

Рассмотрим основные форматы перечисленных выше операторов цикла с предварительным условием. Первый оператор имеет следующий формат:

DO WHILE <условие>

<тело цикла>

LOOP

Условие, расположенное после ключевого слова WHILEпредставляет собой логическое выражение. Его значение вычисляется при каждом выполнении цикла. Пока условие соблюдается, (логическое выражение является истинным –True), выполняются операторы, составляющие тело цикла. Как только логическое выражение станет ложным, произойдет выход из цикла и управление будет передано на оператор, расположенный после ключевого словаLOOP.

В качестве примера рассмотрим программу, вычисляющую значения функции на промежутке [a,b]cшагомh. Пусть функция имеет следующий вид:

.

Составим блок-схему алгоритма и программу решения данной задачи. Переменной - параметру цикла должно быть присвоено значение до начала работы цикла. Также, данная переменная должна изменять свое значение (в большую или меньшую сторону, в зависимости от условия), чтобы не произошло «зацикливание» программы. Форма приложения изображена на рисунке 17.

Рис. 17. Изображение формы со списками.

Блок – схема алгоритма будет иметь следующий вид:

В приведенной выше блок-схеме, жирным подчеркнутым курсивом отмечены блоки, отвечающие за организацию цикла с предусловием. Программный код решения задачи будет иметь следующий вид:

Private SubCommand1_Click()

Dim a As Single, b As Single, h As Single

Dim x As Single, y As Single

a = CSng(Text1.Text)

b = CSng(Text2.Text)

h = CSng(Text3.Text)

x = a

Do Whilex <= b

If x < -1 Then

y = x * x

ElseIf x >= 1 Then

y = 3 * x

Else

y = -x ^ 3

End If

List1.AddItem (CStr(x))

List2.AddItem (CStr(y))

x = x + h

Loop

End Sub

Private Sub Command2_Click()

End

End Sub

Рассмотренная выше задача может быть решена вторым способом. Блок – схема и рисунок формы остаются без изменения. Используемый здесь оператор цикла с предусловием будет иметь следующий формат:

DO UNTIL <условие>

<тело цикла>

LOOP

Данный оператор работает следующим образом. Пока <условие>, расположенное после ключевого словаUNTILне соблюдается – выполняются операторы, составляющие тело цикла. Как только логическое выражение, записанное в условии станет истинным, то есть будет соблюдаться – произойдет выход из цикла и управление будет передано на следующий оператор, находящийся после ключевого словаLOOP. Программный код приложения, использующего операторDO UNTILLOOPимеет вид:

Private SubCommand1_Click()

Dim a As Single, b As Single, h As Single

Dim x As Single, y As Single

a = CSng(Text1.Text)

b = CSng(Text2.Text)

h = CSng(Text3.Text)

x = a

Do Until x > b

If x < -1 Then

y = x * x

ElseIf x >= 1 Then

y = 3 * x

Else

y = -x ^ 3

End If

List1.AddItem (CStr(x))

List2.AddItem (CStr(y))

x = x + h

Loop

End Sub

Private Sub Command2_Click()

End

End Sub

Оператор WHILE…WENDимеет следующий формат:

WHILE <условие>

<тело цикла>

WEND

Данный оператор работает следующим образом. При соблюдении условия, расположенного после ключевого слова WHILE, выполняется тело цикла. Как только условие перестанет соблюдаться (станет ложным), произойдет выход из цикла и управление будет передано на оператор, находящийся после ключевого словаWEND. Проиллюстрируем работу данного оператора на примерах. Программный код представленной выше задачи при помощи оператораWHILEWENDбудет иметь вид:

Private SubCommand1_Click()

Dim a As Single, b As Single, h As Single

Dim x As Single, y As Single

a = CSng(Text1.Text)

b = CSng(Text2.Text)

h = CSng(Text3.Text)

x = a

While x <= b

If x < -1 Then

y = x * x

ElseIf x >= 1 Then

y = 3 * x

Else

y = -x ^ 3

End If

List1.AddItem (CStr(x))

List2.AddItem (CStr(y))

x = x + h

Wend

End Sub

Private Sub Command2_Click()

End

End Sub

Теперь рассмотрим пример вычисления факториала целого положительного числа N. Факториал числаNпредставляет собой произведение целых положительных чисел с шагом единица от единицы доNи обозначается следующим образом:

, где символозначает произведение целых чисел от 1 доN.

Форма приложения, реализующего вычисление факториала положительного числа N? изображена на рисунке 18.

Рис. 18. Форма приложения, реализующего вычисление факториала.

Блок – схема алгоритма будет иметь вид:

Подробнее рассмотрим схему алгоритма вычисления факториала. Факториал, как было отмечено выше, представляет собой произведение целых положительных чисел. В данном алгоритме переменнаяIявляется параметром цикла и задается до начала выполнения цикла. В теле цикла данная переменная на каждом шаге увеличивается на единицу. Тело цикла выполняется до тех пор, пока параметрIне станет больше чемN, когда произойдет выход из цикла. Всегда при вычислении произведения или суммы перед началом работы цикла им присваиваются значения, соответственно произведениюF=1, а суммеS=0. Затем в программе (алгоритме) используются рекуррентные формулы, содержащие в левой и правой части оператора присваивания одну и ту же переменную: в случае произведенияF=F*…, а в случае суммыS=S+…. Здесь вместо многоточия записывается переменная или выражение для вычисления. Пример программного кода решения нашей задачи представлен ниже:

Private SubCommand1_Click()

Dim F As Single, I As Integer, N As Integer

N= CInt(Text1.Text)

F=1

I=1

While I <= N

F=F*I

I=I+1

Wend

Text2.Text=Cstr(F)

End Sub

Private Sub Command2_Click()

End

End Sub

Приведем пример, как можно вычислить факториал с помощью оператора WHILE…WEND, используя меньшее число переменных. Блок-схема такого алгоритма приведена ниже:

Программный код приложения будет иметь следующий вид:

Private SubCommand1_Click()

Dim F As Single, I As Integer, N As Integer

N= CInt(Text1.Text)

F=1

While N

F=F*N

N=N-1

Wend

Text2.Text=Cstr(F)

End Sub

Private Sub Command2_Click()

End

End Sub

В этой программе, в качестве параметра цикла используется целочисленная переменная N. На первый взгляд, может показаться, что в строкеWhile Nсодержится ошибка. На самом деле ошибки нет. Дело в том, что при вычислении выражений, выступающих в качестве условий,VisualBasicзначение целочисленной переменной равное нулю интерпретирует какFalse(ложь, условие не соблюдается). Любое положительное целое число будет интерпретировано какTrue(истина, условие соблюдается). В нашей программе осуществляется ввод переменнойN, которая является целым положительным числом. ПокаNне равно нулю выполняется тело цикла – вычисляется произведение. На каждом шаге цикла значениеNуменьшается на единицу и в конечном итоге достигнет 0. ПриN=0 произойдет выход из цикла. Проанализировав программные коды приложений вычисления факториала, можно заметить, что в первом случае произведение вычисляется в последовательности 1∙2∙…∙(N-1)∙N, а во втором – наоборотN∙(N-1)∙…∙2∙1, но как известно, от перестановки сомножителей произведение не меняется, а память и время работы во втором программном коде экономится.

Рассмотренные выше циклы, являются циклами с предварительным условием. Так как условие в этих циклах располагается перед телом цикла, то цикл может выполниться несколько раз, а может - не выполнится ни разу, в зависимости от соблюдения или несоблюдения условия. В следующей лабораторной работе мы рассмотрим цикл с постусловием, тело которого всегда выполняется хотя бы один раз.

ПРИМЕР ВЫПОЛНЕНИЯ ЗАДАНИЯ:

Вычислить значения функции на промежутке [a,b]cшагомh

Изображение формы:

Программа:

Private SubCommand1_Click()

Dim a As Single, b As Single, h As Single

Dim x As Single, y As Single

a = CSng(Text1.Text)

b = CSng(Text2.Text)

h = CSng(Text3.Text)

x = a

Do Whilex <= b

If x < -1 Then

y = x * x

ElseIf x >= 1 Then

y = 3 * x

Else

y = -x ^ 3

End If

List1.AddItem (CStr(x))

List2.AddItem (CStr(y))

x = x + h

Loop

End Sub

Private Sub Command2_Click()

End

End Sub

Блок-схема алгоритма

ЗАДАНИЕ:

Вычислить значения функции на промежутке [a,b]cшагомh

Программный код:

Private Sub Command1_Click()

Dim __ As _______, __As ______, __As ______

Dim __As ______, __As ______

__ = ____(Text1.____)

__ = CSng(_____.Text)

__ = ____(_____.____)

__ = __

Do While______

If _______ Then

y = _________________

ElseIf _________ Then

y = _________________

Else

y = _________________

End If

____.AddItem (CStr(__))

List2._______ (____(__))

__________

Loop

End Sub

Private Sub Command2_Click()

_____

End Sub

Соседние файлы в папке informatika