Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
My_VisBasic_ЛР.doc
Скачиваний:
1
Добавлен:
01.04.2025
Размер:
701.95 Кб
Скачать

Среднее арифметичехкое среди введенных четных чисел равно 6, в полученный результат равен 2.

  1. Проверить работу процедуры. Для этого:

  • установить точку останова в строку с вызовом процедуры MsgBox;

  • выполнить действия пункта 17;

  • после остановки работы программы в окне редактора кода просмотреть значения переменных влияющих на результат. Просмотреть значения можно в окне Watshes, но мы воспользуемся другим способом (окном Data Tips). Установить указатель мыши на переменную sa (в операторе sa=sum/k), значение переменной отобразится во всплывающей подхказке. Если этого не произошло, следует установить опцию Auto Data Tips на вкладке Editor в окне команды Tools\Options.. Просмотреть значение переменных sum и k. Значение переменной sum равно 10 и это неправильный результат, так как сумма четных чисел 30. Значение переменной sum вычисляется в операторе sum = summ + b(i). Просмотреть значения переменных влияющих на результат. Переменная summ = Empty. В программе ошибка, вместо summ в выражении должна быть sum. Ошибка в имени переменной привела к появлению новой переменной, которая не имеет значения, и это повлияло на конечный результат. Чтобы избежать подобных ошибок, нужно с помощью опции Option Explicit установить обязательное явное объявление вхе переменных в модуле;

  • вставить Option Explicit в хекцию General;

  • повторно запустить программу, ввести числа и выполнить процедуру нахождения среднего арифметичехкого. Процедура завершается аварийно, так как было обнаружено, что не вхе переменные объявлены (ошибка: compile error: Variable not defined). Необъявленная переменная выделяется;

  • исправить имя переменной и нажать кнопку (Start). После чего будет получен верный результат.

  1. Ввести большие числа 11111, 22222, 33333, 44444 и т.д. При вводе числа большего 32767 программа завершается аварийно, так как возникает ошибка выполнения - Run-time error ‘6’ - Overflow (переполнение). В окне с сообщением об ошибке нажать кнопку Debug для перехода в режим отладки. Цветом выделяется строка с оператором, выполнение которого привело к возникновению ошибки. Это строка, в которой вызывается функция InputBox для ввода значения в элемент массива b(i). Так как тип элементов массива Integer, то вводимое значение не должно превышать 32767. Если требуется работать с большими по значению целыми числами, нужно выбрать тип Long.

  2. Перейти из режима отладки в режим конструктора. Для этого нажать кнопку (End) и в хекции General изменить тип элементов массива b Integer на Long. Запустить программу и повторить ввод больших чисел. Затем проверить работу процедур нахождение суммы чисел и среднего арифметичехкого четных чисел. В случае возникновения ошибки Overflow (переполнение), изменить тип переменной, при работе с которой произошло переполнение.

  3. Ввести числа 1, 3, 5, 7, 9, 11, 13, 15, 17, 19 (кнопка Ввод чисел). Найти среднее арифметичехкое (кнопка Ср.арифм. четных чисел). Программа завершается аварийно, возникла ошибка выполнения - Overflow (переполнение). Нажать кнопку Debug. Цветом выделяется строка с оператором sa = sum / k. Чтобы определить причину возникновения ошибки, следует просмотреть значения вхех переменных процедуры. Можно воспользоваться любым из рассмотренных выше способов просмотра значения переменной, однако мы сделает это новым способом – нажать кнопку (Locals Window). В окне Locals отображаются вхе локальные переменные и их текущее значение. Использовать возможности отладчика, и посмотреть, почему переменные sum и k остаются равными нулю. Для этого:

  • переместить маркер по полосе индикатора вверх и установить на строке sum = 0;

  • выполнить трассировку процедуры, наблюдая за выделением в строках и значением переменных в окне Locals. При выполнении строки с оператором If выделяется цветом только часть строка, это означает, что операторы sum = sum + b(i) и k = k + 1 не выполняются, поэтому значения переменных sum и k остаются равными 0.

  • перейти из режима отладки в режим конструктора. Для этого нажать кнопку (End).

В данном случае ошибка выполнения - Overflow (переполнение) возникла при делении нуля на нуль, и произошло это в том случае, когда были введены одни нечетные числа. Следует предусмотреть в алгоритме процедуры обработку ошибок выполнения.

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

  1. Добавить процедуру Function в модуль формы. Для этого:

  • выбрать команду Tools\Add Procedure;

  • ввести имя Obr_Err;

  • выбрать переключатель, задающий тип процедуры – Function, нажать Ok.

  1. Ввести текст процедуры:

Public Function Obr_Err(Err_Num As Integer) As Integer

Dim txt As String, res As Integer

Select Case Err_Num

Case 6 ‘ переполнение переменной

txt = "Среди элементов массива нет четных чисел, повторите ввод чисел"

Obr_Err = 2

Case 11 ‘ деление на нуль

txt = "деление на нуль"

Obr_Err = 2

Case Else ‘ нераспознанная ошибка

txt = "Нераспознанная ошибка выполнения " & Err_Num

Obr_Err = 3

End Select

Err.Clear

MsgBox txt, vbOKOnly, "Ошибки выполнения"

End Function

Функция анализирует передаваемый ей код ошибки (Err_Num), выдает предупредительное сообщение и возвращает числовое значение, определяющее дальнейшее действие программы.

  1. Отредактировать процедуру cmdSa_Click() в соответствии с приведенным ниже текстом:

Private Sub cmdSa_Click()

Dim i As Byte, k As Byte

Dim sum As Single, sa As Single

On Error GoTo Err_Label

sum = 0

For i = 1 To 10

If b(i) Mod 2 = 0 Then sum = sum + b(i): k = k + 1

Next

sa = sum / k

MsgBox "Среднее арифметичехкое четных чисел" + Str(sa), _

vbOKOnly, "Результат"

Exit Sub

Err_Label:

Select Case Obr_Err(Err.Number)

Case 0: Resume

Case 1: Resume Next

Case 2: Exit Sub

Case 3: End

End Select

End Sub

Добавляемые в процедуру строки выделены курсивом. Оператор On Error GoTo Err_Label при возникновении ошибки выполнения передаст управление оператору, помеченному меткой Err_Label. Оператор Select Case в зависимости от значения, возвращаемого функцией Obr_Err передаст управление нужному оператору, тем самым, продолжив выполнение программы. И только в случае обнаружения нераспознанной ранее ошибки работа программы будет завершена.

  1. Проверить работу функции Obr_Err. Для этого запустить программу, ввести только нечетные числа и найти среднее арифметичехкое.

  2. Самостоятельно добавить кнопку в форму Отладка и связать ее с процедурой процедуру нахождения частного от деления среднего арифметичехкого среди нечетных чисел на минимальное число. В процедуре предусмотреть обработку ошибок выполнения: деление на нуль (возникнет, ехли минимальное число равно 0) и переполнение (возникнет, ехли нет нечетных чисел).

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]