Уроки, Туториалы, Мануалы со всего света!

На этом форуме, будет находится огромное количество уроков и мануалов, сделайте небольшой вклад, и опубликуйте хотя бы один урок.
Текущее время: 19-05, 09:20

Часовой пояс: UTC + 3 часа




Начать новую тему Ответить на тему  [ 1 сообщение ] 
Автор Сообщение
СообщениеДобавлено: 05-02, 18:06 
Не в сети
Администратор
Аватара пользователя

Зарегистрирован: 13-12, 03:24
Сообщения: 89
Откуда: Украинос!
На этом уроке мы научимся оформлять программу в виде функций и процедур. Это очень важно. Принцип модульного программирования очень облегчает программирование и отладку. Модульное программирование - означает разделение кода программы на отдельные куски, каждый из которых выполняет чётко определённую задачу. Это особенно важно для сложных программ.

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

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 = "Корней нет!" ' <и>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", и вы увидите нашу, только что созданную функцию!:



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

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



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

Примечание: Если у вас пропала такая всплывающая подсказка (например, вы кликнули в другом месте кода программа), то вернуть её можно, снова поставив открывающую круглую скобку после имени функции. А можно ещё проще - нажать комбинацию клавиш 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 компонентов, классов и т.д. и т.п. Всего и не перечислишь. Может быть как-нибудь напишу и об этом.

_________________
Прочтите это одно правило, плиз :)
Большой мой вам совет!
Работа на дому
StimuL CompaNy
Turbo-Dizel


Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ 1 сообщение ] 

Часовой пояс: UTC + 3 часа


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 0


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения

Найти:
Перейти:  
cron
Powered by Forumenko © 2006–2014
Русская поддержка phpBB