Примеры решения задач с условными ветвлениями

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

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

Содержание работы

Примеры решения задач с условными ветвлениями

1.1.  Задача. Вычислить значение функции в точке а.

Алгоритм решения данной задачи:

1.  Необходимо объявить переменные: а – будет обозначать точку, в которой будет вычисляться значение функции и f, которое будет хранить значение функции;

2.  Запросить у пользователя значение для переменной а;

3.  Произвести анализ: если а меньше 5, то функция f=-х,  если х меньше 5 и больше –5, то , иначе

4.  Вывести значение f.

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


Для решения данной задачи лучше всего использовать блочную вложенную структуру IF

IF … THEN

  ELSEIF … THEN

  ………………….

END IF

Программа на языке VBA выглядит следующим образом:

Подпись: Sub f_от_а()
'Объявляем переменные
Dim a As Single, f As Double

'Запрашиваем значение для а
a = InputBox("Введите значение для а", "Ввод значения для переменной а")
If a < -5 Then
 f = -a
 ElseIf a >= -5 And a < 5 Then
   f = x ^ 2
    Else: f = Exp (Abs (1 - a))
 End If
 'выводим значение переменной f
 MsgBox "Значение функции равно " & Format(f, ".00")
End Sub

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

Предпоследняя строка программы выводит сообщение со значением переменной f. Это значение, являясь вещественным числом, может содержать много знаков в дробной части. Чтобы ограничить количество знаков после запятой при выводе, используется функция Format. В нашем случае эта функция имеет два аргумента: имя переменной, значение которой необходимо вывести и формат вывода (в виде строки, в двойных кавычках). Формат вывода “.00” указывает на то, что при выводе значения переменной f на печать, необходимо оставить только два знака после запятой.

! Распространенные ошибки

При решении задач с условными ветвлениями распространенной является ошибка замены бока вложенных IF ..ELSEIF …на последовательность однострочных операторов IF.

Подпись: Sub Так_не_надо_делать()
'Объявляем переменные
Dim a As Single, f As Double

'Запрашиваем значение для а
a = InputBox("Введите значение для а", "Ввод значения для переменной а")
If a < -5 Then f = -a
 If a >= -5 And a < 5 Then f = x ^ 2 Else f = Exp(Abs(1 - a))
 
 'выводим значение переменной f
 MsgBox "Значение функции равно " & Format(f, ".00")

End Sub

Так задача 1.1 студентами часто решается следующим образом:

Эта программа выдаст неверный результат, если, например, переменной а присвоить значение равное –6.

Сначала будет проверено условие If a < -5 и функция будет вычислена правильно, по правилу f = –a. Но затем, будет проверяться следующее условие: If a >= -5 And a < 5. Это условие при вычислении даст ЛОЖЬ и, поэтому значение переменной f будет пересчитано:

f = Exp(Abs(1 - a))

1.2.  Задача. Дано три различных целых числа. Вывести на печать минимальное из них.

Алгоритм решения:

1.  Объявить три переменные;

2.  Запросить для них значения;

3.  Сделать анализ на минимальность;

4.  Вывести минимальное число.


Блок-схема:

Подпись: Sub min_item()
'Объявляем переменные целого типа
Dim a As Integer, b As Integer, c As Integer
'Делаем первый лист активным
Worksheets(1).Activate
'Значения чисел возьмем с листа, из ячеек A1,B1,C1
a = Range("A1").Value
b = Cells(1, 2).Value
c = Cells(1, 3).Value
'найдем минимум из трех чисел
If a < b Then
  If a < c Then
     MsgBox "Минимальным  является число а, равное " & a
     Else: MsgBox "Минимальным  является число c, равное " & c
  End If
ElseIf b < c Then
       MsgBox "Минимальным является число b, равное " & b
Else: MsgBox "Минимальным является число c, равное " & c
End If
     
End Sub

Программа на языке VBA выглядит следующим образом:

! Распространенные ошибки

Задача 1.2 часто решается студентами нерационально, например, так:

Подпись: Sub Нерациональное_решение()
'Объявляем переменные целого типа
Dim a As Integer, b As Integer, c As Integer
'Делаем первый лист активным
Worksheets(1).Activate
'Значения чисел возьмем с листа, из ячеек A1,B1,C1
a = Range("A1").Value
b = Cells(1, 2).Value
c = Cells(1, 3).Value
'найдем минимум из трех чисел
If a < b And a < c Then MsgBox "Минимальным  является число а, равное " & a
If b < a And b < c Then MsgBox "Минимальным  является число b, равное " & b
If c < a And c < b Then MsgBox "Минимальным  является число c, равное " & c
End Sub

Нерациональность данного решения заключается в том, что вместо того, чтобы проверить всего лишь три условия, как в предыдущем варианте программы, вычисляется шесть условий (сравнений), которые кроме всего прочего еще должны быть объединены с помощью логического оператора And. А, как известно, львиная доля времени выполнения программы тратится на выполнение присваиваний и сравнений, т.е. второй вариант программы, хоть и дает верный результат, но выполняется дольше.

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

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