Страница: 1 | 2 |
Вопрос: Вызов функции
Добавлено: 25.02.06 12:59
Автор вопроса: Anton | ICQ: 308496507
Здравствуйте,мне уже на вашем форуме помогали,но вот загвостка программа
Function GetResult(ByVal a As Double, ByVal b As Double, ByVal c As Double, arrResult() As Double) As Long
Dim D As Double
D = (b ^ 2 - 4 * a * c)
If D < 0 Then
GetResult = 0 'если < 0 - решений нет
Exit Function
End If
D = Sqr(D)
arrResult(0) = (-b + D) / (2 * a)
arrResult(1) = (-b - D) / (2 * a)
GetResult = 1 'решения есть, они в массиве arrResult(он же массив Result)
End Function
Private Sub Form_Load()
Dim a As Double 'описания переменных
Dim b As Double
Dim c As Double
Dim Result(2) As Double
Dim ret As Long
'ввод переменных
a = InputBox("Введите коэффициент 'a'")
b = InputBox("Введите коэффициент 'b'")
c = InputBox("Введите коэффициент 'c'")
'получение результата
ret = GetResult(ByVal a, ByVal b, ByVal c, Result())
'вывод результата
If ret <> 0 Then
MsgBox "x1 = " & Result(0) & vbNewLine & "x2 = " & Result(1)
Else
MsgBox "Решений нет"
End If
End Sub
в принципе все правильно,но преподаватель просит чтобы был вызов функции,формирование функции,и сказал еще что переменная и результат должны быть с одним именем,что ему не нравиться не понимаю.....
Помогите кто может! а то предмета VIsual Basic у меня не было а сдвать надо....заранее благодарен!
Ответы
Всего ответов: 21
Номер ответа: 1
Автор ответа:
sne
Разработчик Offline Client
ICQ: 233286456
Вопросов: 34
Ответов: 5445
Web-сайт:
Профиль | | #1
Добавлено: 25.02.06 13:29
Да их вечно не понять... Хоть бы выражались нормальным языком
Возможно он хочет чтобы массив был не в параметре, а как возвращаемое значение функции?
Номер ответа: 2
Автор ответа:
Anton
ICQ: 308496507
Вопросов: 2
Ответов: 12
Профиль | | #2
Добавлено: 25.02.06 14:51
НЕ ЗНАЮ....я так понял что должен идит вызов функции,например при двойном клике...только как это сделать....как же всетки сложно сдавать премет который ранее не изучался((( кто может подсобите,завтра в 10 сдавать надо)))))
Номер ответа: 3
Автор ответа:
HOOLIGAN
Вопросов: 0
Ответов: 1066
Профиль | | #3
Добавлено: 25.02.06 15:35
Положи на свою форму кнопку (думаю, это не оч. сложно), и назови её Command1.
Затем сделай двойной клик по избражению кнопки. Откроется редактор кода на процедуре
End Sub
То, что раньше было написано в Form_Load() перенеси в процедуру Сommand1_Click().
Теперь твоя программа будет считать корни, когда ты будешь нажимать кнопку.
Т.е. при нажатии кнопки будет происходить событие Сommand1_Click, и выполняться код, вписанный в одноименную процедуру.
Выясни у преподавателя, что он подразумевает под словами "формирование функции"? Функцию невозможно сформировать по ходу выполнения программы. Она формируется, когда ты набираешь текст. Набор текста это и есть формирование функции.
Вызов функции - вот он:
ret = GetResult(ByVal a, ByVal b, ByVal c, Result())
Переменная не может иметь одно и то же имя с результатом, по одной простой причине: у результата нет имени, т.к. результат - это число.
В общем, уточни у преподавателя, что он подразумевает под теми или иными терминами. Либо возьми у кого-нибудь конспекты, может там найдешь определения.
Номер ответа: 4
Автор ответа:
Anton
ICQ: 308496507
Вопросов: 2
Ответов: 12
Профиль | | #4
Добавлено: 25.02.06 17:08
спасибо....я думаю это моя вина я скорее всего чего-нибудь как всегда напутал.....спасибо Хулиган! Опять выручаешь!
Номер ответа: 5
Автор ответа:
Anton
ICQ: 308496507
Вопросов: 2
Ответов: 12
Профиль | | #5
Добавлено: 02.03.06 17:18
Объясните пожалуйста вот эту строчку Function GetResult(ByVal a As Double, ByVal b As Double, ByVal c As Double, arrResult() As Double) As Long
 im D As Double
Почему именно byvaloо(ом) а не Byrefom....и вообще основные моменты по этой функции поясните если не сложно.Заранее спасибо
Номер ответа: 6
Автор ответа:
Victor
ICQ: 345743490
Вопросов: 42
Ответов: 385
Web-сайт:
Профиль | | #6
Добавлено: 02.03.06 17:36
Можно и ByRef. Если ByVal, то сразу ясно, что процедурка не изменит значений переданных переменных. Вот только ByVal'ами не стоит злоупотреблять при передаче строк. А массивы и UDT вообще ByVal не передаются.
Номер ответа: 7
Автор ответа:
HOOLIGAN
Вопросов: 0
Ответов: 1066
Профиль | | #7
Добавлено: 02.03.06 19:15
Если применено ByVal (by value) - в функцию передается значение переменной или параметра. Исключение - переменная типа String. Адрес переменной в функции будет недоступен, и редактировать её не получится.
Если применено ByRef (by reference) - передается ссылка на переменную (её адрес). Функция, имея адрес переменной, может как прочитать, так и модифицировать её содержимое.
В данном случае a, b и c изменять нет необходимости, поэтому для них применено ByVal, а для массив arrResult просто невозможно применить ByVal, поэтому передается ByRef (если специально не указано ByVal, по умолчанию применяется ByRef).
Номер ответа: 8
Автор ответа:
Anton
ICQ: 308496507
Вопросов: 2
Ответов: 12
Профиль | | #8
Добавлено: 02.03.06 20:30
ОО круто....я так и не думал...а вот про то что Реф идет по умолчанию не знал,спасибки))) и опять Хулиган...спасибо тебе)
Номер ответа: 9
Автор ответа:
LamerOnLine
ICQ: 334781088
Вопросов: 108
Ответов: 2822
Профиль | | #9
Добавлено: 03.03.06 14:34
Чей то я в этом топике спьяну не отметился
Функцию невозможно сформировать по ходу выполнения программы.
Легко. Реферишь ScriptControl и вперед!
Исключение - переменная типа String.
А также практически все Object'ы в пределах процесса.
если специально не указано ByVal
Если не указано - писал ламер оффлайновый Для удобного чтения всегда надо указывать конкретно - ByVal or ByRef.
Уф, нафлудился... )
Номер ответа: 10
Автор ответа:
HOOLIGAN
Вопросов: 0
Ответов: 1066
Профиль | | #10
Добавлено: 03.03.06 15:14
LamerOnLine
ScriptControl к языку программирования visual basic отношения не имеет, а чел занят именно изучением языка, а не посторонних контролов и библиотек. Нужно как можно проще и доступней.
А если мы сейчас начнём брызгать налево-направо мозгами, советуя подключать библиотеки и создавать объекты, у него в голове такая каша заварится - хрен когда разгребёт.
Поэтому кончай умничать/флудить
P.S.
Понятие об удобстве чтения у каждого своё. Мне, например, удобнее без ByRef, чем с ним. Так что могу заявить: если указано ByRef - писал ламер, который не знает, что ByRef по умолчанию уже задействовано.
Номер ответа: 11
Автор ответа:
LamerOnLine
ICQ: 334781088
Вопросов: 108
Ответов: 2822
Профиль | | #11
Добавлено: 03.03.06 15:31
ScriptControl к языку программирования visual basic отношения не имеет, а чел занят именно изучением языка, а не посторонних контролов и библиотек.
ScriptControl позволяет создавать функции на VBScript, что для такого чела практически эквивалентно VB. И библа это не посторонняя, а дефолтовая от милкасофта.
ЗЫ Флудить сёдня весь день бум, настроение такое
Понятие об удобстве чтения у каждого своё. Мне, например, удобнее без ByRef, чем с ним. Так что могу заявить: если указано ByRef - писал ламер
Неудобнее тому кто будет читать. Возможно.
А в принципе, можно заявить что писал ламер вне зависимости от ByRef/ByVal
ЗЫЫ Недавно как раз про эти две ипостаси поднимал темку, предлагаю там отметиться
Номер ответа: 12
Автор ответа:
HOOLIGAN
Вопросов: 0
Ответов: 1066
Профиль | | #12
Добавлено: 03.03.06 15:44
Если не нравится функция - претензии к преподавателю. Она была доведена до такого состояния в попытках угодить ему Этот вариант оказался наиболее близким к его стилю.
P.S.
Ещё раз: чел изучает язык, а не библы, пусть даже дефолтовые, и от самого микрософта.
Номер ответа: 13
Автор ответа:
Victor
ICQ: 345743490
Вопросов: 42
Ответов: 385
Web-сайт:
Профиль | | #13
Добавлено: 03.03.06 16:18
Private Sub Form_Load()
Dim St As String
St = "Not modified"
ModifyStringByVal St
Debug.Print St
ModifyStringByRef St
Debug.Print St
End Sub
Sub ModifyStringByVal(ByVal St As String)
St = "ByVal"
End Sub
Sub ModifyStringByRef(ByRef St As String)
St = "ByRef"
End Sub
Результат в Immediate:
ByRef
PS. Забавно. Оказывается я ламер. Я люблю писать ByRef. Хотя знаю, что оно так по умолчанию.
Номер ответа: 14
Автор ответа:
LamerOnLine
ICQ: 334781088
Вопросов: 108
Ответов: 2822
Профиль | | #14
Добавлено: 03.03.06 16:20
Да оно всё понятно, просто пофлудить охота.
А то уж дюжа активность на форуме низкая
Номер ответа: 15
Автор ответа:
LamerOnLine
ICQ: 334781088
Вопросов: 108
Ответов: 2822
Профиль | | #15
Добавлено: 03.03.06 16:25
ЗЫ VB создает копию строки. А передает все же указатель, т.е. ByRef. Как говорится, this behavior is by design.