Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лекции по Информатике.doc
Скачиваний:
0
Добавлен:
01.05.2025
Размер:
1.45 Mб
Скачать

Программирование разветвляющихся вычислительных процессов

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

Рассмотрим следующую задачу: вычислить значение у для различных значений х по формуле

Рассмотрим область определения функции:

X

y =

y =

y =

y =

Функция определена на всей числовой оси Х.

Рассмотрим алгоритм вычисления значения функции в зависимости от значения аргумента х. (рис. )

Для организации ветвлений используются операторы GOTO, IF и Select Case.

Оператор GOTO

GOTO – оператор безусловного перехода.

Синтаксис: GoTo Метка.

Метка – это обычный идентификатор. Меткой помечается оператор, на который происходит переход. Одной меткой может быть помечен только один оператор Стандартный порядок выполнения программы – выполнение операторов в порядке их записи. Если нужно изменить последовательность выполнения операторов, используют оператор GoTo.

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

Пример:

. . .

Goto Num1 Метки: Num1 и Num2

. . .

Num1

BtnStart. Enable = true

Goto Num2

. . .

Num2: Имя метки может заканчиваться «:»

TxtY.text = CStr(Y)

. . .

Оператор GoTo часто использовать не рекомендуется, т.к. это делает текст программы мало понятным.

Условный оператор if (если)

Оператор If реализует ветвление и изменяет порядок выполнения операторов программы в зависимости от истинности или ложности некоторого

условия. Имеет три формы записи:

1). Запись в строку (линейная форма). Синтаксис оператора:

I

(если) (то) (иначе)

f Условие Then группа_операторов 1 Else группа_операторов 2

Это полная форма оператора If.

Раздел Else не обязателен - сокращенная форма if. Синтаксис:

If Условие Then группа_операторов

«Условие» в операторе – это выражение логического типа, составленное с помощью операций отношения (сравнения), >, <, < > и др. и логических операций and, or, not, xor и др. Результат вычисления логического выражения имеет тип Boolean, т.е. может принимать значения true и false.

Полной форме оператора If соответствует блок-схема:

Сокращенной форме If соответствует блок-схема:

Frame34

Если «условие» выполняется, т.е. логическое выражение имеет значение true, то выполняется группа операторов, записанная между Then и Else, а операторы после Else пропускаются, и выполняется следующий за if оператор. Если «условие» не выполняется, (false), то операторы между Then и Else пропускаются, выполняются операторы после Else, а затем следующий за if оператор.

При использовании сокращенной формы if выполняются операторы после Then, если условие выполняется. Если условие не выполняется, то операторы после Then пропускаются, и управление передается следующему за if оператору.

Линейная форма оператора if может приводить к длинной строке (когда «группы операторов» содержат большое число операторов), неудобной для чтения. В этом случае применяется блоковая форма записи if.

2). Блоковая форма записи if. Синтаксис оператора:

If Условие Then

Оператор 1 Полная форма

Оператор 2

………….

Оператор n

Else

Оператор n+1

…………..

Оператор m

End if

Раздел Else не обязателен (сокращенная форма):

If Условие Then

Оператор 1

Оператор 2

………….

Оператор n

End if

Напишем фрагмент программы для вычисления у с использованием оператора GoTo и линейной и блоковой записи оператора if:

  • линейная форма оператора if

If x < -5 Then y = x + 1 Else (x > = -5) and (x < 0) Then _

y = x + 2 Else if (x > = 0) and (x < -10) Then y = x + 3 else y = x + 4

  • блоковая форма оператора if:

if x < - 5 Then

y = x + 1

Else

If (x > = -5) and (x < 0) Then

Y = x + 1

Else

If x > = 0 and x < = 10 Then

Y = x + 3

Else

Y = x + 4

End if

End if

End if

  • С оператором GoTo

If x < -5 Then GoTo 1 Else GoTo 2

1: y = x + 1

GoTo 5

2: if (x > = -5) and (x < 0) Then GoTo 3 Else GoTo 4

3: y = x + 2

GoTo 5

4: if( x > = 0) and( x < = 10) Then y = x + 3 Else y = x + 4

5: txtY.Text = y

3). Блоковая форма записи оператора if с разделом Elseif

При необходимости проверить несколько условий подряд, как в нашем примере, пришлось использовать несколько операторов if. В этом случае удобнее использовать if в форме, где Else заменяется произвольным числом разделов Elseif.

Запишем фрагмент программы с использованием этой формы if.

If x < -5 Then

Y = x + 1

Elseif (x > = -5) and (x < 0) Then

Y = x + 2

Elseif (x > = 0) and (x < = 10) Then

Y = x + 3

Else

Y = x + 4

End if

Оператор выбора Select Case

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

Синтаксис оператора:

Select Case Выражение

Case Список 1

Группа_опер_1

Case Список 2

Группа_опер_2

Case Список n

Группа_опер n

Case Else

Группа_опер n+1

End Select

Здесь «Выражение» может быть любым числовым или строковым выражением, в том числе константой, логическим выражением, переменной, функцией.

«Список» - список одного или нескольких значений, список интервалов значений, с которыми сравнивается значение «Выражения».

Если «Выражение» имеет значение, указанное в «Списке», то выполняется группа операторов, следующая за Case с этим списком, если нет – Else.

Пример записи «Списков»:

Case 3, 5, 10 – если «Выражение» = 3 или 5 или 10

Case 0 To 2- - если «Выражение»  0 и  20 (в литер.)

Case is > 15 - если «Выражение» > 15

Case a - если «Выражение» = a

Фрагмент программы вычисления Y с оператором Select Case.

Select Case Х

Case is < -5

Y = x + 1

Case –5 To 0

Y = x + 2

Case 0 To 10

Y = x + 3

Case else

Y = x + 4

End Select

Блок-схема, соответствующая оператору Select Case:

Создадим приложение (проект) для вычисления у в нашем примере.

1). Введем переменные:

х – значение аргумента типа Single

y – значение функции типа Single

2). Создадим форму следующего вида:

Разветвляющийся ВП

КОНЕЦ

3

Конец

). Разработаем алгоритм работы с приложением.

Решение задачи начинается со щелчка на кнопке Start. В текстовом окне для ввода Х появляется курсор ввода, а рядом с окном подсказка «Введите значение Х и нажмите Enter». Вводится значение Х и нажимается Enter. Появляется подсказка «Нажмите кнопку Вычислить», и кнопка Вычислить становится активной. При нажатии кнопки Вычислить вычисляется y, и его значение выводится в соответствующее текстовое окно, обе подсказки убираются из окна формы, кнопка Вычислить становится недоступной. Если нужно ввести другое значение Х, нажимается Start: появляется подсказка «Введите …», текстовые окна для ввода х и вывода у очищаются. Далее действия повторяются.

4). Зададим начальные значения свойств объектов управления.

Свойства

Объект

Name

Caption

Text

Enabled

1

2

3

4

5

6

7

8

9

10

11

Form 1

Comm 1

Comm 2

Comm 3

Text1

Text2

Label1

Label2

Label3

Label4

OLE

Vetvlen

btnStart

btnOption

btnStop

txtX

txtY

Label 1

Label2

Label3

Label4

OLE1

Разветвляющиеся ВП

Start

Вычислить

Конец

«пусто»

«пусто»

Значение Y

Расчетные формулы

«пусто»

«пусто»

false

5). Напишем программный код.

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

Private Sub btnStop_Click()

End

End Sub

Private Sub btnStart_Click()

Label1.Caption=”Введите значение Х и нажмите клавишу Enter”

txtX.SetFocus ‘курсор помещается в текстовое окно для ввода Х

txtX.Text=”” ‘очистка текстового окна для ввода Х

txtY.Text=”” ‘очистка текстового окна для вывода Y

Label2.Caption=”” ’убирается 2-я подсказка из окна формы

End Sub

Private Sub btnOption_Click()

Dim x as Single, y as Single ‘объявляются переменные

Label1.Caption=”” ‘убираются подсказки

‘из окна формы

Label2.Caption=””

BtnOption.Enabled = False ‘кнопка «Вычислить» становится

‘недоступной

x=Val(txtX.Text) ‘присваивание переменной Х введенного значения

if x<-5 then

‘вычисление Y с использованием

‘оператора if

end if

txtY.Text=CStr(Y) ‘вывод Y в текстовое окно

End Sub

Когда при выполнении приложения пользователь нажимает клавишу клавиатуры, происходит событие KeyPress (нажатие клавиши), с которым связана процедура обработки события:

Private Sub ControlName_KeyPress (KeyASCii as Integer),

где ControlName – имя элемента управления, вызвавшего событие;

KeyPress – имя события;

KeyASCii – параметр процедуры – код ASCII той клавиши, которая была нажата.

Каждой клавише соответствует свой код ASCII – целое число в диапазоне 0  255. Когда нажимается клавиша, VB записывает код этой клавиши в переменную KeyASCii, и код становится доступным данной процедуре. Например, при нажатии клавиши с буквой «F» значение переменной KeyASCii будет = 70, т.к. 70 – код заглавной «F», и при нажатии «f» - KeyASCii = 102; цифры 0 – 9 имеют коды 48 – 57. В нашем приложении пользователь вводит в текстовое окно txtХ значения Х – несколько символов (например, «1», «.», «5»). При нажатии очередной клавиши ее код записывается в переменную KeyASCii, заменяя код предыдущей клавиши. Таким образом, в переменной KeyASCii находится код последней нажатой клавиши. После ввода значения Х пользователь нажимает клавишу Enter, и ее код 13 запишется в KeyASCii, т.е. нажатие клавиши Enter можно считать признаком конца ввода значения Х. Напишем процедуру обработки события KeyPress, в которой анализируем код нажатой клавиши. При нажатии Enter (код 13) выведем подсказку и сделаем активной кнопку Вычислить.

Private Sub txtX_KeyPress(KeyASCii as Integer)

If KeyASCii = 13 then

Label2.Caption = «Нажмите кнопку Вычислить»

BtnOption.Enabled=True

End if

End Sub

Для вывода в окно программных кодов шаблона этой процедуры нужно дважды щелкнуть на текстовом окне для ввода Х и из списка событий в окне кодов выбрать событие KeyPress.