Версия для печати темы

Нажмите сюда для просмотра этой темы в обычном формате

Образовательный студенческий форум _ Информатика / Программирование _ Помогите найти ошибку в коде

Автор: Bigben 22.9.2010, 17:01

Всем привет.
Помогите, пожалуйста, найти ошибку в коде.
Данные на картинке.

Код:
Private Sub Command1_Click()
n = InputBox("Введите значение N", "Ввод исходных данных")
x = 0.254 / Cos(n)
c = Sin(2.6 * n)
If Tan(x) - Exp(-c) > 0.564 Then z = (Abs(Sin(x) ^ 3 - 12 * Cos( c))) ^ (1 / 5) Else z = Log(Abs((c - x) ^ Abs(x - c) - Log(x) / Log(10)))
If Tan(x) - Exp(-c) > 0.564 Then
l = MsgBox("Условие выполняетсяя!!!", vbOKOnly, "Выполняется ли условие???")
Else
l = MsgBox("Условие выполняется!!!", vbOKOnly, "Выполняется ли условие???")
End If
z = MsgBox("Z=" + Str(z), vbYes, "Результаты расчета")
End
End Sub

Private Sub Command2_Click()
End
End Sub

После попытки выполнить - выдаёт ошибку Run-time error '5': Invalid procedure call or argument. После debug выделяет сегмент, выделенный выше синим.. Чувствую, что что-то с логарифмом намудрил. Помогите плиз.
Это на Visual Basic 6

Изображение

Автор: tig81 22.9.2010, 17:06

Цитата(Bigben @ 22.9.2010, 20:01) *

Данные в прикреплённой картинке.

файла нет

Автор: Bigben 22.9.2010, 18:10

Сорри, файл был больше 500 кб, уже вставил.

Автор: Vahappaday 22.9.2010, 18:25

А зачем двоеточие после ELSE?

Автор: Bigben 22.9.2010, 18:28

Это как бы перенос на другую строку.. До этого просто я переносил.. Забыл убрать.
Сейчас убрал - ничего не поменялось, как была ошибка, так и есть((

Автор: Vahappaday 22.9.2010, 19:39

прогнал пооперационно, разбив на строчки....
ругается на возведение в степень отрицательного числа
предлагаю определиться с правилами возведения в степень отрицательных чисел и реализовать)

Автор: Bigben 22.9.2010, 19:52

Хм, а где ж там возведение в степень отр. числа... Вроде всё правильно..
А с логарифмами всё норм ? Я не уверен, что вместо ln можно писать log..

Автор: Vahappaday 22.9.2010, 20:04

C Log всё ок...
Выдаёт ошибку операция

Код
(c - x) ^ Abs(x - c)
, когда основание степени (с-x) отрицательное.
Так, например, происходит, когда n=11.

Автор: Bigben 22.9.2010, 20:06

Хм... В лабораторке написано, что значение n=номеру варианта. У меня 18-ый, пишу 18 - и вот такая байда..

Автор: Vahappaday 23.9.2010, 2:54

В общем, я бы сделал так

Код


Private Sub Command1_Click()
n = InputBox("A", "B")
x = 0.254 / Cos(n)
c = Sin(2.6 * n)
If Tan(x) - Exp(-c) > 0.564 Then
Z = (Abs(Sin(x) ^ 3 - 12 * Cos(c))) ^ (1 / 5)
Else
If ((Int(x - c) = (x - c)) And (Abs(x - c) Mod 2 = 0)) Then
Z = Log(Abs(Abs(c - x) ^ Abs(x - c) - Log(x) / Log(10)))
Else
Z = Log(Abs(Sgn(c - x) * Abs(c - x) ^ Abs(x - c) - Log(x) / Log(10)))
End If
End If
If Tan(x) - Exp(-c) > 0.564 Then
l = MsgBox("Условие выполняется!", vbOKOnly, "Выполняется ли условие?")
Else
l = MsgBox("Условие не выполняется!", vbOKOnly, "Выполняется ли условие?")
End If
Z = MsgBox("Z=" + Str(Z), vbYes, "Результаты расчета")
End
End Sub

Отдельно рассмотрены варианты с чётной степенью и со всеми остальными.

Автор: julia_lisha 27.9.2010, 5:15

ну всем помог)))

Автор: Vahappaday 27.9.2010, 11:39

хм... по-моему, автору поста решение не очень понравилось)) как-то он его проигнорировал)) так что, возможно, не помог))
но иного не знаю...

Автор: tig81 27.9.2010, 11:43

Спасибо, Vahappaday, за помощь.
Раз автору сложно это сказать.

Автор: Vahappaday 27.9.2010, 13:39

ды нет!! я не про то....
забыл, так, забыл, значит не надо))
мне кажется, что решение моё не по нраву, не подходит для данного случая...

Автор: tig81 27.9.2010, 13:59

Цитата(Vahappaday @ 27.9.2010, 16:39) *

забыл, так, забыл, значит не надо))

Нет, не забыл, 24 на форуме был. Посмотрите в профиле дату последнего посещения.

Автор: Vahappaday 27.9.2010, 14:17

ладно, ерунда это всё))

Автор: tig81 27.9.2010, 14:21

smile.gif

Автор: julia_lisha 1.10.2010, 16:15

ой да хватит! я всегда рада твоей помощиwink.gif

Русская версия Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)