Visual Basic. Программирование на Visual Basic

..........................................................................................................................

[ Главная ] [ Статьи ] [ Для новичков ] [ Примеры ] [ Программы ] [ Microsoft Agent 2.0 ] [ Пособие ] [ Уроки ] [ Разное ]
..........................................................................................................................


Урок № 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). Поэтому логично этот участок оформить в виде процедуры, параметрами которой будут значения для меток.

Ну, что ж, приступим?

Сначала напишем функцию для вычисления дискриминанта. Чтобы вычислить дискриминант необходимо знать 3 параметра - коэффициенты a, b и с. Функция будет возвращать значение - дискриминант. Чтобы самому не писать заготовку для этой функции, Visual Basic предоставляет возможность для автоматического создания такой заготовки. Для этого выберите в главном меню VB: Tools->Add Procedure... Появится окно, в котором вас попросят указать вид добавляемой процедуры. Отметьте радиокнопку Function. В поле "Name:", укажите имя добавляемой функции. Давайте назовём её, например, как CalcDiscremenant. Не бойтесь давать длинные названия процедурам и функциям! Всё равно, когда вы захотите использовать эту процедуру в коде, вам не придётся полностью набивать на клавиатуре её имя. Но об этом чуть ниже.

Итак, нажмите OK и Visual Basic создаст для вас следующую заготовку:

Public Function CalcDiscremenant()

End Function

Теперь модифицируем её так, чтобы функция принимала 3 аргумента (параметра) типа Double, и возвращала значение, которое тоже будет иметь тип Double:

Public Function CalcDiscremenant(a As Double, _
b As Double, c As Double) As Double

End Function

Осталось добавить код в нашу заготовку. Сделать это не трудно:

Public Function CalcDiscremenant(a As Double, _
b As Double, c As Double) As Double
    CalcDiscremenant = (b * b) - (4 * a * c)
End Function

Необходимо подчеркнуть, что в Visual Basic параметры можно передавать двумя способами: по значению и по ссылке. Первый способ передает в процедуру (или функцию) только значение передаваемой переменной. Внутри функции изменить значение такой переменной будет нельзя. Второй способ передаёт в функцию ссылку на передаваемую переменную, и её значение легко может быть изменено в теле функции. По умолчанию, Visual Basic всегда передает параметры по ссылке. В нашем случае параметры a, b и c не изменяются внутри функции. Поэтому можно сделать так, чтобы параметры передавались по значению. Для этого перед именем переменной необходимо поставить ключевое слово ByVal (By Value), вот так:

Public Function CalcDiscremenant(ByVal a As Double, _
ByVal b As Double, ByVal c As Double) As Double

В принципе, делать это не обязательно, но всё же желательно. Это повышает наглядность. Теперь, любой, кто воспользуется нашей функцией сразу будет знать, что значения передаваемых переменных внутри функции меняться не будут (да и не могут).

Теперь у нас есть функция, которая будет принимать 3 коэффициента a, b, c и вычислять дискриминант. Давайте опробуем её в действии. Для этого замените в нашей программе строчку, где вычислялся дискриминант:

D = (paramB * paramB) - (4 * paramA * paramC)

на строчку:

D = CalcDiscremenant(paramA, paramB, paramC)

Здесь читатель может возразить - "Как же? Вы же говорили, что имя функции не придётся набирать на клавиатуре!". Так оно и есть! Самый быстрый способ заменить старую строчку на новую такой: (не пользуясь Ctrl+C,Ctrl+V, конечно :) выделите всё, что находится после знака "=". Удалите клавишей Delete. Нажмите Ctrl+J. Visual Basic выдаст вам окно, в котором находятся все доступные на данный момент функции, константы, свойства, перечисления... и т.п., включая пользовательские, т.е. наши ;). Нажмите на клавиатуре всего одну букву "c", и вы увидите нашу, только что созданную функцию!:

Visual Basic - здесь можно почитать и скачать статьи, книги, примеры, описания к API функциям

Теперь нажмите пробел. Всё! Полное имя функции за вас набрал VB.

Если после имени функции открыть круглую скобку, то Visual Basic для удобства выдаст вам параметры этой функции:

Visual Basic - здесь можно почитать и скачать статьи, книги, примеры, описания к API функциям

Это очень удобно. Не нужно всегда помнить все параметры всех функций. Достаточно написать имя функции и поставить круглую скобку.

Примечание: Если у вас пропала такая всплывающая подсказка (например, вы кликнули в другом месте кода программа), то вернуть её можно, снова поставив открывающую круглую скобку после имени функции. А можно ещё проще - нажать комбинацию клавиш Ctrl + Shift + I.

Как видите, программировать на Visual Basic очень просто. Причём, эта простота очень хорошо сочетается с богатыми возможностями самого языка. В результате чего, на VB можно легко написать даже очень мощную программу. Конечно, нашу программу мощной не назовёшь, но ведь это только маленький пример возможностей VB! Творите! Всё в ваших руках!

Теперь, можете проверить работоспособность нашей функции. Как видите, всё прекрасно работает.

Осталось написать процедуру для вывода результатов в метки. Добавим затоговку так же, как и в предыдущем случае (Tools->Add Procedure). Только на этот раз не будем отмечать радиокнопку Function, а оставим всё как есть (Sub). В качестве имени процедуры можно ввести, ну, скажем WriteResultsInLabels. Чем длиннее название, тем понятнее, чем занимается данная процедура или функция. Нажмём ОК:

Public Sub WriteResultsInLabels()

End Sub

Сделаем так, чтобы наша процедура принимала 3 параметра - значения, которые необходимо вывести в соответствующие метки:

Public Sub WriteResultsInLabels (lblDCapt As String, _
lblX1Capt As String, lblX2Capt As String)

End Sub

Входные параметры имеют тип String, т.к. передавать в процедуру мы будем именно строки.

Для того, чтобы процедура работала, необходимо добавить в неё код:

Public Sub WriteResultsInLabels (lblDCapt As String, _
lblX1Capt As String, lblX2Capt As String)
    lblD.Caption = lblDCapt
    lblX1.Caption = lblX1Capt
    lblX2.Caption = lblX2Capt
End Sub

Готово. Можно использовать процедуру. Давайте заменим каждые 3 строчки, где мы выводили значения в метки. Получится нечто подобное:

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

Программа готова. Конечно можно было бы ещё оформить функцию, для проверки правильности введённых в поля (TextBox) значений. Функцию для вычисления корней уравнения и т.д. Дело ваше. Ведь это был всего лишь вводный курс. Я только хотел показать, как можно использовать возможности Visual Basic на примере простой программки - программки для решения квадратных уравнений. Конечно, многое осталось за кадром. Например, использование других компонентов Visual Basic, таких как Timer, PictureBox и многих других, а также дополнительных OCX компонентов, использование API функций Windows, создание ActiveX компонентов, классов и т.д. и т.п. Всего и не перечислишь. Может быть как-нибудь напишу и об этом. А пока, переходим к последнему уроку - компиляции приложения.



..........................................................................................................................

[ Главная ] [ Диски ] [ Книги ] [ Архив рассылки ] [ Архив новостей ] [ Готовые кусочки программ ] [ Карта сайта ]
..........................................................................................................................

По страницам сайта Visaul Progs
или Изучение Visual Basic
Рассылка 'По страницам сайта Visaul Progs' >>> Подпишись на рассылку - будешь получать новые статьи , примеры и много полезной информации из первых рук!!! >>>Если у вас есть статья которой нет на сайте
пришлите ее мне-------->
Послать статью
>>>Если вы хотите задать вопрос
пишите-------->
Мне нужна помощь


Рейтинг сайтов YandeG Rambler's Top100
Реклама:

...:::Design by Mystf0rse 2005-2010 year:::...