Урок № 16. Отладка программы
Поможем в ✍️ написании учебной работы
Поможем с курсовой, контрольной, дипломной, рефератом, отчетом по практике, научно-исследовательской и любой другой работой

Итак, на предыдущем уроке мы нашли баги (от слова Bug - жук) в нашей программе, т.е. недочёты (ошибки). От этих багов нужно избавиться. Посмотрим причину возникновения ошибок. Запустите программу. Ничего не вводя в поля, нажмите на кнопку. Visual Basic выдаст окно, в котором скажет: "Type mismatch", т.е. ошибка в типах. В окне доступны 3 кнопки:

End - завершить приложение
Debug - показать место возникновения ошибки, чтобы мы смогли от неё избавиться
Help - вызвать справку о возникшей ошибке.

Нажмите Debug. Visual Basic покажет вам причину возникновения ошибки:

Жёлтым цветом выделена строка - причина ошибки. Если навести курсор мыши на имя переменной, то всплывёт подсказка, в которой Visual Basic сообщит нам её значение. Такая возможноть доступна только в режиме Debug. Текущий режим можно узнать из заголовка окна Visual Basic. Например:

в режиме проектировки интерфейса это строка:
       Имя_Проекта - Microsoft Visual Basic [design]

при запущенном приложении:
       Имя_Проекта - Microsoft Visual Basic [run]

в режиме Debug:
       Имя_Проекта - Microsoft Visual Basic [break]

Давайте изменим код:

paramA = txtParamA.Text
paramB = txtParamB.Text
paramC = txtParamC.Text

На код:

paramA = Val(txtParamA.Text)
paramB = Val(txtParamB.Text)
paramC = Val(txtParamC.Text)

Нажимаем Debug и вот что видим:

Причина ошибка заключается в невозможности деления на 0, а paramA у нас как раз и равен 0. К тому при нулевых коэффициентах квадратное уравнение решается гораздо проще (например, если c=0, то x вынесем за скобку, ну а дальше всё просто). Избавимся от этого недоразумения. Для этого, вставим после присвоения значения свойства Text переменным ещё одну проверку - проверку на содержание нулей в переменных:

If paramA = 0 Or paramB = 0 Or paramC = 0 Then
MsgBox "Нули в качестве коэффициентов не допускаются!", _
vbCritical
Exit Sub
End If

Символ "_" используется в том случае, когда вы хотите перенести часть выражения на другую строчку. В данном случае мы переносим константу vbCritical.

Здесь мы проверяем переменные на содержание в них нулей. В принципе, можно было бы проверить не переменные, а сами тектовые поля (If Val(txtParamA.Text)=0 Then....). Это уже дело вкуса. Всё равно, результат одинаков.

Использование пошаговой трассировки:

Пошаговая трассировка - это метод отладки приложения, при котором можно выполнять код по одной команде и следить за ходом её выполнения. Это очень полезный метод! Таким методом можно находить те ошибки, которые не может найти Visual Basic. Такие ошибки называются логическими. Здесь я бы хотел привести очень интересный и поучительный отрывок из книги "Программирование в среде Visual Basic 5":

"Прежде чем отлаживать программу, необходимо убедиться в том, что она содержит ошибки. Поэтому тестирование программы является первым шагом на пути её отладки. Вот именно такая логическая ошибка оставила клиента без электричества. Для нахождения этих ошибок очень удобно использовать пошаговую трассировку.

. Нажмите правой кнопкой мыши на той строчке кода, где вы хотите поставить брикпоинт и в меню выбрать Toggle->Breakpoint. Замечание: такую точку нельзя ставить на строчке с объявлением переменной.














Обработка других ошибок

Независимо от того, насколько качественно написано приложение, никогда нельзя полностью исключать возможность возникновения ошибки в программе. Вы видели такое окошко Windows: "Программа выполнила недопустимую операцию и будет закрыта...". Т.е. возникла исключительная ситуация, и Windows, не зная как можно обойти ошибку, выдаёт "общее" окно для всех таких ошибок. Так вот и в ваших программах тоже может возникнуть такая исключительная ситуация. Причин для этого ооочень много. Например, у пользователя программой сбои с жёстким диском, или глючит операционная система, или вирус удалил нужный вам файл и т.д. и т.п. В общем, в таких ситуациях желательно сообщить пользователю о том, что возникла ошибка и спокойно выйти/продолжить программу.. В данном случае используется объект Err.

Visual Basic располагает оператором, с помощью которого можно контролировать ход программы при возникновении ошибок. Это оператор On Error. Он имеет несколько видов:

On Error GoTo МЕТКА
On Error Resume Next
On Error GoTo 0

Первый оператор позволяет указать Visual Basic метку (номер строки) на которую передастся управление программы при возникновении ошибки. Рассмотрим пример использования этого оператора:

Private Sub Command1_Click()
Dim myString As String
On Error GoTo ERRH
myString = "ERROR HANDLING WITH VB IS COOL"
MsgBox Mid(myString, 0, 1) '<--- здесь ошибка (#)
Exit Sub '<--- досрочно выходим, если нет ошибок
ERRH: '<--- метка
MsgBox Error(Err.Number) '<--- выводим свою ошибку
End Sub











Урок № 17. Доводим до ума

На этом уроке мы научимся оформлять программу в виде функций и процедур. Это очень важно. Принцип модульного программирования очень облегчает программирование и отладку. Модульное программирование - означает разделение кода программы на отдельные куски, каждый из которых выполняет чётко определённую задачу. Это особенно важно для сложных программ.

Доведём до ума нашу программу, для вычисления корней квадратного уравнения. Давайте оформим некоторые части кода в виде процедур и функций. Например, напишем функцию для вычиления дискриминанта. И напишем процедуру, которая будет выводить полученные значения в метки. Почему именно процедуру? Потому что процедуры пишутся для выполнения некоторой последовательности действий, где не требуется возвращать какое-либо значение. Давайте ещё раз посмотрим на ту часть кода, где происходит проверка значения дискриминанта и вычисление корней уравнения:

If D > 0 Then
x1 = (paramB + Sqr(D)) / (2 * paramA)
x2 = (paramB - Sqr(D)) / (2 * paramA)
lblD.Caption = "Дискременант: " & D
lblX1.Caption = "Корень №1: " & x1 ' <- здесь
lblX2.Caption = "Корень №2: " & x2
ElseIf D = 0 Then
x1 = paramB / (2 * paramA)
x2 = x1
lblD.Caption = "Дискременант: " & D
lblX1.Caption = "Корень №1: " & x1 ' <- и здесь
lblX2.Caption = "Корень №2 = Корню №1"
ElseIf D < 0 Then
lblD.Caption = "Дискременант: " & D
lblX1.Caption = "Корней нет!" ' <- и здесь, тоже
lblX2.Caption = ""
MsgBox "Дискременант меньше нуля! Корней нет!", vbCritical
End If

Заметьте, что в каждом из ветвей оператора If наблюдается присвоения свойству Caption 3-х меток (lblD, lblX1, lblX2). Поэтому логично этот участок оформить в виде процедуры, параметрами которой будут значения для меток.


















Урок № 18. Компиляция

Теперь наша программа отлажена и готова к употреблению. Теперь настало время узнать, как же откомпилировать программу в exe файл?

Напомню, что Visual Basic предлагает 2 компилятора. Компиляция в P-код, и компиляция в Native-код. P-код - это старый компилятор и пользоваться им я не рекомендую. Всегда компилируйте приложение в Native-код. Выбор вида компиляции находится на вкладке Compile в меню Project->Project Properties. Там же можно указать несколько доступных видов оптимизации (о них ниже).

Итак, чтобы откомпилировать нашу программу, необходимо проделать следующие манипуляции:

1. В меню File выбрать Make имя_проекта.exe

2. Ввести имя выходного exe файла

3. Если необходимо, то выбрать некоторые опции, нажав на кнопку Options. (К этим опциям также можно добраться через меню Project->Project Properties).

4. Нажать ОК. И, если Visual Basic не найдёт никаких ошибок в программе, то откомпилирует её и сохранит в указанно вами каталоге под указанным вами именем.

Заключение

Вот мы и подошли к концу этого небольшого курса для начинающих. Мы рассмотрели основные принципы программирования на Visual Basic.

Успехов вам в программировании!

 

Литература:

1. Сайт http://vb.hut.ru

2. А. Волков - Электронный учебник «Visual Basic – крепкий орешек!».

3. Н. Угринович - Информатика и информационные технологии. 10-11 кл. М. БИНОМ, 2006.


 

Модель «Решение квадратного уравнения»

 

 

Private Sub cmdCalculate_Click()

'объявляем переменные

Dim paramA As Double

Dim paramB As Double

Dim paramC As Double

Dim R As Integer

Dim D As Double

Dim x1 As Double

Dim x2 As Double

   

'присваиваим им значения из текстовых полей

paramA = Val(txtParamA.Text)

paramB = Val(txtParamB.Text)

paramC = Val(txtParamC.Text)

   

'проверка на а=0

If paramA = 0 Then

MsgBox "А=0 не допускается!", vbCritical

Exit Sub

End If

 

'вычисляем дискреминант

D = paramB * paramB - 4 * paramA * paramC

'решаем уравнение и выводим результат в метки Label

If D > 0 Then

   x1 = (-paramB + Sqr(D)) / (2 * paramA)

   x2 = (-paramB - Sqr(D)) / (2 * paramA)

   lblD.Caption = "Дискреминант D=" & D

   lblX1.Caption = "x1 = " & x1

   lblX2.Caption = "x2 = " & x2

ElseIf D = 0 Then

   x1 = -paramB / (2 * paramA)

   lblD.Caption = "Дискреминант D=" & D

   lblX1.Caption = "x=" & x1

   lblX2.Caption = ""

Else

   lblD.Caption = "Дискреминант D=" & D

   lblX1.Caption = "Нет решений"

   lblX2.Caption = ""

       

   'можно добавить выводное поле с предупреждающей информацией

   R = MsgBox("Дискреминант меньше нуля! Корней нет!", 48, "Внимание!")  

End If

End Sub


 

Модель «Графики тригонометрических функций»

 

 

Программа (программный код):

 

Dim I As Integer

Dim X As Double

Dim Y As Double

Private Sub cmdCK_Click()

picGrap.Scale (-10, 5)-(10, -5)

picGrap.Line (-10, 0)-(10, 0)

For I = -10 To 10

picGrap.PSet (I, 0)

picGrap.Print I

Next I

picGrap.Line (0, -5)-(0, 5)

For I = -5 To 5

picGrap.PSet (0, I)

picGrap.Print I

Next I

End Sub

Private Sub cmdCLS_Click()

picGrap.Cls

End Sub

Private Sub cmdSin_Click()

For X = -10 To 10 Step 0.03

Y = Sin(X)

picGrap.PSet (X, Y)

Next X

End Sub

Private Sub cmdCos_Click()

For X = -10 To 10 Step 0.03

Y = Cos(X)

picGrap.PSet (X, Y)

Next X

End Sub

Private Sub cmdTg_Click()

For X = -10 To 10 Step 0.03

Y = Tan(X)

picGrap.PSet (X, Y)

Next X

End Sub

Private Sub cmdCtg_Click()

For X = -10 To 10 Step 0.03

Y = 1 / Tan(X)

picGrap.PSet (X, Y)

Next X

End Sub

 

Имеется возможность очистки экрана и построения графиков по одному, по два, по три или все четыре. А также замены функций на другой вид, до четырех видов, возможность графического решения уравнений и неравенств.



Дата: 2019-12-10, просмотров: 290.