Visual Basic, .NET, ASP, VBScript
 

   
   
     

Форум - Общий форум

Страница: 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-сайт: hw.t-k.ru
 Профиль | | #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.
Затем сделай двойной клик по избражению кнопки. Откроется редактор кода на процедуре
Private Sub Сommand1_Click()

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
    ;Dim D As Double
Почему именно byvaloо(ом) а не Byrefom....и вообще основные моменты по этой функции поясните если не сложно.Заранее спасибо

Ответить

Номер ответа: 6
Автор ответа:
 Victor



ICQ: 345743490 

Вопросов: 42
Ответов: 385
 Web-сайт: vt-dbnz.narod.ru
 Профиль | | #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-сайт: vt-dbnz.narod.ru
 Профиль | | #13
Добавлено: 03.03.06 16:18
Если применено ByVal (by value) - в функцию передается значение переменной или параметра. Исключение - переменная типа String.
Если я правильно понял, это намек на то, что если я строчку передам ByVal, она все равно будет ByRef? Если да, то я скажу, что это неправда.

Option Explicit

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:
Not modified
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.

Ответить

Страница: 1 | 2 |

Поиск по форуму



© Copyright 2002-2011 VBNet.RU | Пишите нам