Программирование разветвляющихся процессов. Линейный синтаксис

Страницы работы

10 страниц (Word-файл)

Фрагмент текста работы

Проанализируем работу данного фрагмента при следующих заданных значениях параметров a= 5, b= 7 . При данных значениях параметров a и b , условие расположенное после ключевого слова IF не соблюдается, а следовательно, результатом выполнения программного кода будет значение y= 5 + 7 =12 . Начинающий программист, проверив  на тестовом примере программу, убеждается в правильности ее работы. Но, в программе имеется логическая ошибка! При значениях параметров a= 5, b= 3, условие расположенное после ключевого слова IF соблюдается, и начинают выполняться два оператора присваивания: сначала y= 5 − 3 = 2, а затем - оператор y= 5 + 3 = 8 . Таким образом, окончательным значением арифметического выражения будет 8, что приведет, при истинности условия, к неверному результату, хотя при несоблюдении условия программа работает корректно. Для того, чтобы избежать подобные недоразумения, в первых версиях языка программирования Basic использовался оператор безусловного перехода GOTO. Этот оператор передает управление на строчку программного кода приложения, перед которой ставится метка. Формат оператора безусловного перехода имеет следующий вид:    <операторы>

GOTO <метка>

<операторы> <метка>:

<операторы>

Фрагмент программы, рассмотренного выше примера, будет корректно работать, если в нее внести следующие изменения: IF a>b THEN y=a-b : GOTO m1 y=a+b m1:

Однако следует заметить, что в настоящее время использование оператора GOTO в программном коде является плохим стилем программирования, а в учебном процессе может привести к снижению оценки при решении задачи, так как Visual Basic в своем арсенале содержит достаточное количество управляющих конструкций, позволяющих избежать использование оператора 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

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

                        если x < 7

y =                                   

                            если x ≥ 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

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

Name

Command1

Caption

РЕШЕНИЕ

Left

480

Top

2040

Width

1335

Height

375

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

Name

Command2

Caption

ВЫХОД

Left

2160

Top

2040

Width

1335

Height

375

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

Private Sub Command1_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 Sub Command1_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

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

условий:

a+b,

a+b

y=  ,

 2

ab,

если если если

a<b a=b a>b

Изображение формы приведено на рисунке 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, а значение

Похожие материалы

Информация о работе