- •Информатика. Основы программирования
- •Санкт-Петербург
- •Оглавление
- •Введение
- •Лабораторная работа № 1. Изучение интегрированной среды разработки Visual Basic 6
- •Основные сведения об интегрированной среде разработки
- •Элементы управления
- •Лабораторная работа №2. Отладка программ и обработка ошибок в Visual Basic 6 Цель лабораторной работы:
- •Основные сведения о средствах отладки и обработки ошибок
- •Выполнение лабораторной работы
- •Среднее арифметичехкое среди введенных четных чисел равно 6, в полученный результат равен 2.
- •Лабораторная работа №3. Создание и обработка файлов
- •Приложение 1 Основные сведения об операторах vba
Среднее арифметичехкое среди введенных четных чисел равно 6, в полученный результат равен 2.
Проверить работу процедуры. Для этого:
установить точку останова в строку с вызовом процедуры 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). После чего будет получен верный результат.
Ввести большие числа 11111, 22222, 33333, 44444 и т.д. При вводе числа большего 32767 программа завершается аварийно, так как возникает ошибка выполнения - Run-time error ‘6’ - Overflow (переполнение). В окне с сообщением об ошибке нажать кнопку Debug для перехода в режим отладки. Цветом выделяется строка с оператором, выполнение которого привело к возникновению ошибки. Это строка, в которой вызывается функция InputBox для ввода значения в элемент массива b(i). Так как тип элементов массива Integer, то вводимое значение не должно превышать 32767. Если требуется работать с большими по значению целыми числами, нужно выбрать тип Long.
Перейти из режима отладки в режим конструктора. Для этого нажать кнопку (End) и в хекции General изменить тип элементов массива b Integer на Long. Запустить программу и повторить ввод больших чисел. Затем проверить работу процедур нахождение суммы чисел и среднего арифметичехкого четных чисел. В случае возникновения ошибки Overflow (переполнение), изменить тип переменной, при работе с которой произошло переполнение.
Ввести числа 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 (переполнение) возникла при делении нуля на нуль, и произошло это в том случае, когда были введены одни нечетные числа. Следует предусмотреть в алгоритме процедуры обработку ошибок выполнения.
Так как одни и те же ошибки выполнения могут возникать при выполнении разных процедур модуля, то следует разработать процедуру – обработчик ошибок, общую для вхех процедур модуля формы.
Добавить процедуру Function в модуль формы. Для этого:
выбрать команду Tools\Add Procedure;
ввести имя Obr_Err;
выбрать переключатель, задающий тип процедуры – Function, нажать Ok.
Ввести текст процедуры:
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), выдает предупредительное сообщение и возвращает числовое значение, определяющее дальнейшее действие программы.
Отредактировать процедуру 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 передаст управление нужному оператору, тем самым, продолжив выполнение программы. И только в случае обнаружения нераспознанной ранее ошибки работа программы будет завершена.
Проверить работу функции Obr_Err. Для этого запустить программу, ввести только нечетные числа и найти среднее арифметичехкое.
Самостоятельно добавить кнопку в форму Отладка и связать ее с процедурой процедуру нахождения частного от деления среднего арифметичехкого среди нечетных чисел на минимальное число. В процедуре предусмотреть обработку ошибок выполнения: деление на нуль (возникнет, ехли минимальное число равно 0) и переполнение (возникнет, ехли нет нечетных чисел).
