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

Лабораторная работа №3 программирование разветвляющихся процессов

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

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

Оператор условного перехода может иметь как линейный, так и блочный синтаксис.

Линейный синтаксисоператораIF…THENимеет следующий формат:

IF<условие>THEN<оператор1>

<оператор2>

<оператор3>

Если <условие>,расположенное после ключевого словаIFсоблюдается, то выполняется<оператор1>,затем последовательно выполняются операторы:<оператор2> и<оператор3>. В случае несоблюдения условия <оператор1> пропускается, а выполняются операторы:<оператор2>и<оператор3>.

Блок–схема данного формата имеет вид:

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

, наиболее распространенной является следующая ошибка:

IF a>b THEN y=a-b

y=a+b

Проанализируем работу данного фрагмента при следующих заданных значениях параметров . При данных значениях параметрови, условие расположенное после ключевого словаIFне соблюдается, а следовательно, результатом выполнения программного кода будет значение. Начинающий программист, проверив на тестовом примере программу, убеждается в правильности ее работы. Но, в программе имеется логическая ошибка! При значениях параметров, условие расположенное после ключевого словаIFсоблюдается, и начинают выполняться два оператора присваивания: сначала, а затем - оператор. Таким образом, окончательным значением арифметического выражения будет 8, что приведет, при истинности условия, к неверному результату, хотя при несоблюдении условия программа работает корректно. Для того, чтобы избежать подобные недоразумения, в первых версиях языка программированияBasicиспользовался оператор безусловного переходаGOTO. Этот оператор передает управление на строчку программного кода приложения, перед которой ставится метка. Формат оператора безусловного перехода имеет следующий вид:

<операторы>

GOTO<метка>

<операторы>

<метка>:

<операторы>

Фрагмент программы, рассмотренного выше примера, будет корректно работать, если в нее внести следующие изменения:

IF a>b THEN y=a-b : GOTO m1

y=a+b

m1:

Однако следует заметить, что в настоящее время использование оператора GOTOв программном коде является плохим стилем программирования, а в учебном процессе может привести к снижению оценки при решении задачи, так какVisualBasicв своем арсенале содержит достаточное количество управляющих конструкций, позволяющих избежать использование оператораGOTO.

Линейный синтаксис оператора условного перехода имеет второй вид формата, который наиболее подходит к решению рассмотренной выше задачи:

IF<условие>THEN<оператор1>ELSE<оператор2>

<оператор3>

Если <условие>,расположенное после ключевого словаIFсоблюдается (является истинным), то выполняется<оператор1>,<оператор2>пропускается, затем выполняется<оператор3>.При несоблюдении условия<оператор1>пропускается, а выполняются операторы<оператор2>и<оператор3>. Блок-схема данного типа синтаксиса условного оператора имеет вид:

Рассмотренный выше фрагмент программного кода, при использовании данного формата оператора записывается следующим образом:

IF a>b THEN y=a-b ELSE y=a+b

Рассмотрим следующий пример. Пусть требуется вычислить значение выражения в зависимости от условий.

Составим блок-схему алгоритма решения данной задачи.

Напишем программный код данного приложения. Форма приложения будет иметь следующий вид (см рис. 7).

Рис. 7. Изображение формы приложения.

Таблица 6. Описание интерфейса

Объект

Свойство

Значение

Текстовое окно

(TextBox)

Name

Text1

Text

Height

285

Width

1215

Left

600

Top

720

Текстовое окно

(TextBox)

Name

Text2

Text

Height

285

Width

1215

Left

600

Top

1320

Метка (Label)

Name

Label1

Caption

X

Left

360

Top

720

AutoSize

True

Метка (Label)

Name

Label2

Caption

Y

Left

360

Top

1320

AutoSize

True

Командная кнопка (CommandBatton)

Name

Command1

Caption

РЕШЕНИЕ

Left

480

Top

2040

Width

1335

Height

375

Командная кнопка (CommandBatton)

Name

Command2

Caption

ВЫХОД

Left

2160

Top

2040

Width

1335

Height

375

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

Private SubCommand1_Click()

Dim x As Single, y As Single

x = CSng(Text1.Text)

If x >= 7 Then y = Sqr(x) Else y = Sqr(Abs(x - 7))

Text2.Text = CStr(y)

End Sub

Private Sub Command2_Click()

End

End Sub

Рассмотренная выше задача может быть решена еще одним способом:

Private SubCommand1_Click()

Dim x As Single, y As Single

x = CSng(Text1.Text)

If x >= 7 Then y = Sqr(x)

If x<7 Then y = Sqr(Abs(x - 7))

Text2.Text = CStr(y)

End Sub

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

Изображение формы приведено на рисунке 8.

Рис. 8. Рисунок формы.

Блок-схема для решения данной задачи изображена ниже:

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

Программный код задачи приведен ниже:

Private Sub Command1_Click()

Dim a As Integer, b As Integer, y As Single

a = CInt(InputBox("a="))

b = CInt(InputBox("b="))

If a < b Then y = a + b

If a = b Then y = (a + b) / 2

If a > b Then y = a - b

MsgBox "y=" + CStr(y)

End Sub

Private Sub Command2_Click()

End

End Sub

Рассмотрим одну из распространенных ошибок наиболее часто встречающуюся при решении таких задач. Следующий программный код будет неверен!

Private Sub Command1_Click()

Dim a As Integer, b As Integer, y As Single

a = CInt(InputBox("a="))

b = CInt(InputBox("b="))

If a < b Then y = a + b

If a = b Then y = (a + b) / 2 Else y = a - b

MsgBox "y=" + CStr(y)

End Sub

Здесь ошибка заключается в том, что при соблюдении условия a<b, выполнится оператор присваиванияy=a+bи управление будет передано на следующий операторIF. При выполнении второго оператора условного перехода условиеa=bне соблюдается (так какa<b) и выполняется ветвьELSE. В результате значение параметраyстанет равнымy=a-b, а значениеy=a+bбудет утрачено. Для решения такого типа задач рекомендуется использовать блочный синтаксис оператора условного перехода.

Блочный синтаксисоператора условного перехода может иметь следующие виды форматов:

1)

IF<условие>THEN

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

END IF

Если <условие>, расположенное после ключевого слова IFсоблюдается, то выполняется<блок операторов>, расположенный между ключевыми словамиTHENиEND IF, затем управление передается на следующий оператор, расположенный за ключевым словомEND IF. В случае, когда условие не соблюдается, <блок операторов>пропускается и управление передается на следующий оператор, который расположен после ключевого словаEND IF.Признаком блочного синтаксиса является переход на следующую строчку после ключевого словаTHENи наличие ключевого словаEND IF. Под обозначением<блок операторов>подразумевается любое количество различных операторовVisualBasic.

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

Private Sub Command1_Click()

Dim a As Integer, b As Integer, y As Single

a = CInt(InputBox("a="))

b = CInt(InputBox("b="))

If a < b Then

y = a + b

End If

If a = b Then

y = (a + b) / 2

End If

If a > b Then

y = a - b

End If

MsgBox "y=" + CStr(y)

End Sub

Private Sub Command2_Click()

End

End Sub

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

2) Второй вариант формата блочного синтаксиса оператора условного перехода представлен ниже:

IF<условие>THEN

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

ELSE

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

END IF

Данный формат оператора работает следующим образом. Если <условие>, расположенное после ключевого словаIFсоблюдается, то выполняется<блок операторов №1>,расположенный межу ключевыми словамиTHENиELSE. Затем, управление передается на оператор, следующий после ключевого словаEND IF. При несоблюдении условия,<блок операторов №1>пропускается, выполняется<блок операторов №2>,находящийся между ключевыми словамиELSEиEND IFи управление передается на следующий оператор, расположенный после ключевого словаEND IF.

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

Private SubCommand1_Click()

Dim x As Single, y As Single

x = CSng(Text1.Text)

If x >= 7 Then

y = Sqr(x)

ELSE

y = Sqr(Abs(x - 7))

END IF

Text2.Text = CStr(y)

End Sub

3) Третий вариант формата блочного синтаксиса оператора условного перехода может быть представлен следующим образом:

IF<условие №1>THEN

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

[ ELSEIF<условие №2>THEN

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

[ ELSEIF<условие №3>THEN

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

[ ELSEIF<условие №4>THEN

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

[ ELSE

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

END IF

Если <условие №1>,расположенное после ключевого словаIFсоблюдается, то выполняется<блок операторов №1>,находящийся между ключевым словомTHENи строкой программного кодаELSEIF<условие №2>THEN, затем, управление передается на следующий оператор, который располагается за ключевым словомEND IF. При несоблюдении<условия №1>,осуществляется проверка<условия №2>. При соблюдении данного условия выполняется блок<операторов №2> и управление передается на оператор, расположенный после ключевого словаEND IF, которое обозначает конец блочного оператора условного перехода. Таким образом, последовательно осуществляется проверка условий и, в зависимости от их истинности выполняется тот или иной блок операторов. В случае, когда ни одно из условий не соблюдается, выполняется блок<операторов №5>, расположенный между ключевыми словамиELSEиEND IFи управление передается на следующий оператор, который располагается после ключевого словаENDIF. Рассмотрим пример программного кода вычисления функции

для данного формата оператора:

Private Sub Command1_Click()

Dim a As Integer, b As Integer, y As Single

a = CInt(InputBox("a="))

b = CInt(InputBox("b="))

If a < b Then

y = a + b

ElseIf a = b Then

y = (a + b) / 2

Else

y = a - b

End If

MsgBox "y=" + CStr(y)

End Sub

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

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

Private Sub Command1_Click()

Dim x As Single, y As Single

x = CInt(Text1.Text)

If x<3 Then

y = x^2+3*x^3

ElseIf x=3 Then

y = (2*x^3+x)/(2*x^3-Exp(x))

Else

y = Log(Abs(x-1))

End If

Text2.Text=CStr(y)

End Sub

Private Sub Command2_Click()

End

End Sub

ЗАДАНИЕ:

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

Private Sub Command1_Click()

Const p=3.1415926

Dim x As ______, y As _________

__ = CInt(Text1.Text)

If ______ Then

y = ___________

ElseIf _______ Then

y = ___________

Else

y = ___________/_______

End If

Text2.______=CStr(___)

End Sub

Private Sub Command2_Click()

_______

End Sub

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