Выдаёт ошибку- не пойму почему?

Программирование на Visual Basic, главный форум. Обсуждение тем программирования на VB 1—6.
Даже если вы плохо разбираетесь в VB и программировании вообще — тут вам помогут. В разумных пределах, конечно.
Правила форума
Темы, в которых будет сначала написано «что нужно сделать», а затем просьба «помогите», будут закрыты.
Читайте требования к создаваемым темам.
*Qwerty*
Новичок
Новичок
Аватара пользователя
 
Сообщения: 41
Зарегистрирован: 10.05.2004 (Пн) 4:01
Откуда: Енакиево

Выдаёт ошибку- не пойму почему?

Сообщение *Qwerty* » 31.10.2004 (Вс) 13:26

Здравствуйте, товарищи.
Помогите, пожалста, не пойму в чем дело?
Пишу программу (это задание по информатике) вычисляющую значение функции:
y= cos (pi/4)^4 + (a+1.5)^(1/5) + a*b^8 + b/lg(abs(a)^2)
(записал выражение сразу на васике, а то тут редактора функций нету, чтобы записать это в математическом виде),
где a=-3.45, b=349.1

Вот мой текст программы:
Код: Выделить всё
Private Sub Form_Load()
'S razbivkoy na chasti
Dim a, b, y As Double
Dim c, d, e As Currency
Const pi As Currency = 3.1416
a = -3.45: b = 349.1
c = (Cos(pi / 4)) ^ 4
d = (a + 1.5) ^ (1 / 5)
e = a * b ^ 8
f = b / (Log(Abs(a)) ^ 2)
y = c + d + e - f
MsgBox (y)
End Sub

Так вот: при запуске программы выдается окошко с сообщением об ошибке "Run- time error 5
Invalid procedure call or argument" и выдиляет строку "d = (a + 1.5) ^ (1 / 5)", далее если пропустить эту ошибку появляется следующая в следующей строке "Run- time error 6"

И ещё: есть ли в ВБ6 константа PI?
И как вычислить функцию lg (x) (а то я нашёл только функцию ln x(в бейсике это log)).

Вобщем заранеее большое спасибо, буду бесконечно признателен если поможете.
Последний раз редактировалось *Qwerty* 31.10.2004 (Вс) 18:02, всего редактировалось 1 раз.
BASIC-программисты – люди меченые, путем насилия или подкупа нас можно заставить работать на другом языке, но думать-то мы все равно будем на BASIC (c) C.Г.Зиновьев

RayShade
Scarmarked
Scarmarked
Аватара пользователя
 
Сообщения: 5511
Зарегистрирован: 02.12.2002 (Пн) 17:11
Откуда: Russia, Saint-Petersburg

Сообщение RayShade » 31.10.2004 (Вс) 15:14

Во первых неясно, зачем изспользовать тип Currency, если все переменные можно объявить как Double. И потом, pi лучше написать как 3.1415926538 :) а то погрешность большая будет :)
I don't understand. Sorry.

Amed
Алфизик
Алфизик
 
Сообщения: 5346
Зарегистрирован: 09.03.2003 (Вс) 9:26

Сообщение Amed » 31.10.2004 (Вс) 15:22

Насчёт 3.1415926538
Точности 3.14159 вполне хватает, проверьте сами :)

Подставьте 3.14159 и 3.1415926538 и сравните ответ. Он будет одинаковым.

*Qwerty*
Новичок
Новичок
Аватара пользователя
 
Сообщения: 41
Зарегистрирован: 10.05.2004 (Пн) 4:01
Откуда: Енакиево

Сообщение *Qwerty* » 31.10.2004 (Вс) 18:07

RayShade писал(а):Во первых неясно, зачем изспользовать тип Currency, если все переменные можно объявить как Double. И потом, pi лучше написать как 3.1415926538 :) а то погрешность большая будет :)

Я не спрашивал, правильно ли я выбрал тип переменных и точность PI, я спросил: "почему появляется ошибка?".
BASIC-программисты – люди меченые, путем насилия или подкупа нас можно заставить работать на другом языке, но думать-то мы все равно будем на BASIC (c) C.Г.Зиновьев

GSerg
Шаман
Шаман
 
Сообщения: 14286
Зарегистрирован: 14.12.2002 (Сб) 5:25
Откуда: Магадан

Сообщение GSerg » 31.10.2004 (Вс) 18:17

Потому что ты возводишь в дробную степень отрицательное число. Результатом является число комплексное. Оно в VB не поддерживается.
Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас

A.A.Z.
Член-корреспондент академии VBStreets
Член-корреспондент академии VBStreets
 
Сообщения: 3035
Зарегистрирован: 30.06.2003 (Пн) 13:38

Сообщение A.A.Z. » 31.10.2004 (Вс) 18:38

Не-а! :!:

a = -3.45
d = (a + 1.5) ^ (1 / 5)

(a + 1.5) = -1.95
-1.95 ^ (1 / 5) = корень пятой степени из -1.95

Я пробовал, если поставить d = -1.95# ^ 0.2#: MsgBox d, он выдаст -1,14289..., т.е. дело не в этом, дело, ИМХО, в переменных... :roll:

GSerg
Шаман
Шаман
 
Сообщения: 14286
Зарегистрирован: 14.12.2002 (Сб) 5:25
Откуда: Магадан

Сообщение GSerg » 31.10.2004 (Вс) 18:47

Кофейник, я ведь в маткаде проверил :wink:

Попробуй так: d=(-1.95)^0.2 - хотя, думаю, ты и без теста поймёшь, в чём фишка :)
Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас

A.A.Z.
Член-корреспондент академии VBStreets
Член-корреспондент академии VBStreets
 
Сообщения: 3035
Зарегистрирован: 30.06.2003 (Пн) 13:38

Сообщение A.A.Z. » 31.10.2004 (Вс) 19:15

Есть город в Финляндии - Лохья (Lohja), так вот, это про меня :)

unreal666
Начинающий
Начинающий
 
Сообщения: 5
Зарегистрирован: 25.12.2004 (Сб) 15:53

Сообщение unreal666 » 30.12.2004 (Чт) 19:01

(-1.95)^(1/5) - это возможно. Ответом будет отрицательное число.
И вообще такое возможно, если в знаменателе нечетное число.
Только в VB это почему-то не прокатывает.

xolod
Гуру
Гуру
 
Сообщения: 1162
Зарегистрирован: 15.01.2004 (Чт) 0:42
Откуда: Moscow

Сообщение xolod » 31.12.2004 (Пт) 0:15

to *Qwerty*
Не понял..? А где объявление переменной 'f'?
А вообще, перепеши так, все работает
Код: Выделить всё
Const pi As Currency = 3.1416

Dim a As Double, b As Double, y As Double
Dim c As Double, d As Double, e As Double
Dim f As Double

a = -3.45: b = 349.1
c = (Cos(pi / 4)) ^ 4
d = -1.95 ^ 0.2
e = a * b ^ 8
f = b / Log(Abs(a)) ^ 2
y = c + d + e - f

MsgBox "Val: " & CStr(y)

Constant ERROR_SUCCESS deprecated. I'm so happy.
Программирование и дизайн – http://www.macrointellect.ru

Андрей Васюта
Обычный пользователь
Обычный пользователь
Аватара пользователя
 
Сообщения: 91
Зарегистрирован: 20.07.2004 (Вт) 19:40

Сообщение Андрей Васюта » 02.01.2005 (Вс) 13:45

:? Не успел, Xolod меня опередил...
Всех с прошедшим NY :wink:
Большой программе - большие глюки.


Вернуться в Visual Basic 1–6

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

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

    TopList