Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Microsoft Office и VBA программирование > Microsoft Office Excel
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 29.09.2009, 22:07   #1
Ludanka_V
 
Аватар для Ludanka_V
 
Регистрация: 29.09.2009
Сообщений: 3
По умолчанию Логарифмы

HELP!!! При вычислении функции, код полностью не компилирует, останавливается на логарифме . Может кто подскажет, что не так?

Sub zad2()
Const Alfa = 0.5, Betta = 0.2 'задание значений в разделе констант
Dim A, B, C, D As Double 'объявление переменных
Dim F1, F2, F3, F4 As Double
Dim Y, X As Double
Dim dx As Double
Dim i As Integer
A = 3.4 ' Присвоение значений
B = 12.6
C = 15.8
D = 17.6
'создание шапки для таблицы
Cells(1, 2) = "y"
Cells(1, 3) = "x"
i = 2 'номер строки
dx = 0.5 'шаг вычисления
For X = -5 To 5 Step dx
If X > 4 Then 'проверка условия
F1 = Sqr(Alfa * X) + 8.5 * A
Y = F1
Else
If (X >= 1) And (X <= 4) Then 'проверка условия
F4 = Sqr(A * X + B * X ^ 2)
Y = F4
Else
If (X >= 0) And (X <= 1) Then 'проверка условия
F2 = Log(B * X / (C * X ^ 2 + D))
Y = F2
Else: F3 = 1.3 + 2 * Exp(Abs(Betta * X + C))
Y = F3
End If
End If
End If
Cells(i, 2) = Y 'вывод значений x и y в i-ю строку 2-ого столбца на Листе 1
Cells(i, 3) = X
i = i + 1
Next X
End Sub
www.weblancer.net/users/-Stardust-/portfolio/
Ludanka_V вне форума Ответить с цитированием
Старый 29.09.2009, 23:49   #2
Sasha_Smirnov
Особый статус
Участник клуба
 
Аватар для Sasha_Smirnov
 
Регистрация: 24.11.2008
Сообщений: 1,535
По умолчанию

Компилируется-то нормально. Но когда, уже при работе программы, функции Log передаётся X, равный 0, возникает переполнение.
Вложения
Тип файла: rar zad2.rar (9.2 Кб, 10 просмотров)

Последний раз редактировалось Sasha_Smirnov; 29.09.2009 в 23:51.
Sasha_Smirnov вне форума Ответить с цитированием
Старый 29.09.2009, 23:49   #3
Sasha_Smirnov
Особый статус
Участник клуба
 
Аватар для Sasha_Smirnov
 
Регистрация: 24.11.2008
Сообщений: 1,535
По умолчанию

Вот ваш вариант в рабочем виде. В zad2.xls запускается по Ctrl-s.

Код:
Sub LogTable()

Const Alfa = 0.5, Betta = 0.2 'задание значений в разделе констант'
Dim A, B, C, D As Double 'объявление переменных'
Dim F1, F2, F3, F4 As Double
Dim Y, X As Double
Dim dx As Double
Dim i As Integer

A = 3.4 ' Присвоение значений'
B = 12.6
C = 15.8
D = 17.6
'создание шапки для таблицы'
Cells(1, 2) = "x"
Cells(1, 3) = "y"

i = 2 'номер строки'
dx = 0.5 'шаг вычисления'

For X = -5 To 5 Step dx
    If X > 4 Then 'проверка условия'
        F1 = Sqr(Alfa * X) + 8.5 * A
        Y = F1
    Else
        If (X >= 1) And (X <= 4) Then 'проверка условия'
            F4 = Sqr(A * X + B * X ^ 2)
            Y = F4
        Else
            If (X > 0) And (X <= 1) Then 'проверка условия'
            F2 = Log(B * X / (C * X ^ 2 + D)) 'X и B не должны быть = 0'
            Y = F2
            Else: F3 = 1.3 + 2 * Exp(Abs(Betta * X + C))
            Y = F3
            End If
        End If
    End If
    Cells(i, 2) = X
    Cells(i, 3) = Y 'вывод значений x и y в i-ю строку 3-го столбца на Листе 1
    i = i + 1
Next X

End Sub
Sasha_Smirnov вне форума Ответить с цитированием
Старый 30.09.2009, 11:09   #4
Ludanka_V
 
Аватар для Ludanka_V
 
Регистрация: 29.09.2009
Сообщений: 3
По умолчанию

Цитата:
Сообщение от Sasha_Smirnov Посмотреть сообщение
Компилируется-то нормально. Но когда, уже при работе программы, функции Log передаётся X, равный 0, возникает переполнение.
Большое спасибо за помощь!
www.weblancer.net/users/-Stardust-/portfolio/
Ludanka_V вне форума Ответить с цитированием
Старый 01.10.2009, 15:05   #5
Ludanka_V
 
Аватар для Ludanka_V
 
Регистрация: 29.09.2009
Сообщений: 3
Вопрос

Цитата:
Сообщение от Sasha_Smirnov Посмотреть сообщение
Компилируется-то нормально. Но когда, уже при работе программы, функции Log передаётся X, равный 0, возникает переполнение.
Оказывается в задаче для функции с логарифмом нет уловия (перепутала). Теперь код прописала так. не запускается.. Если прописывать условие x<>0, то получится уже не по условию задачи.. Или вообще тогда смысла нет функцию с логарифмом писать? Помогите, пожалуйста, еще раз

Option Explicit
Sub Zadanie_2()
Const Alfa = 0.5, Betta = 0.2 'задание значений в разделе констант'
Dim A, B, C, D As Double 'объявление переменных'
Dim F1, F2, F3, F4 As Double
Dim Y, X As Double
Dim dx As Double
Dim i As Integer

A = 3.4 ' Присвоение значений'
B = 12.6
C = 7.8
D = 1.6
'создание шапки для таблицы'
Cells(1, 2) = "x"
Cells(1, 3) = "y"
i = 2 'номер строки'
dx = 0.5 'шаг вычисления'

For X = -5 To 5 Step dx
If X > 4 Then 'проверка условия'
F1 = Sqr(Sin(Alfa * X)) + 8.5 * A
Y = F1
Else
If (X >= 1) And (X <= 4) Then 'проверка условия'
F4 = Sqr(A * X + B * X ^ 2) / Alfa
Y = F4
Else
If (X >= 0) And (X <= 1) Then 'проверка условия'
F2 = 1.3 + 2 * Exp(Abs(Betta * X + C))
Y = F2
Else
F3 = Log(B * X / (C * X ^ 2 + D)) 'x и B не должны быть равны 0
Y = F3


End If
End If
End If
Cells(i, 2) = X
Cells(i, 3) = Y 'вывод значений x и y в i-ю строку 3-го столбца на Листе 1
i = i + 1
Next X
End Sub
www.weblancer.net/users/-Stardust-/portfolio/
Ludanka_V вне форума Ответить с цитированием
Старый 01.10.2009, 16:08   #6
Teslenko_EA
Участник клуба
 
Регистрация: 10.08.2009
Сообщений: 1,796
По умолчанию

Здравствуйте Ludanka_V.
не вникая в суть вопроса, проверить "x и B не должны быть равны 0" можно так:
Код:
If Not x * B = 0 Then F3 = Log(B * X / (C * X ^ 2 + D))
Евгений.
P.S. для удобочитаемость заключайте вводимый код в тэги [соde]... ...[/соde]

Последний раз редактировалось Teslenko_EA; 01.10.2009 в 16:12.
Teslenko_EA вне форума Ответить с цитированием
Старый 11.10.2009, 05:00   #7
Sasha_Smirnov
Особый статус
Участник клуба
 
Аватар для Sasha_Smirnov
 
Регистрация: 24.11.2008
Сообщений: 1,535
По умолчанию Тип

Код:
Dim A, B, C, D As Double 'объявление переменных'

в этом языке пишется так:
Код:
Dim A As Double, B As Double, C As Double, D As Double

Не очень изящно, но что поделаешь... можно, кстати и просто вот так:
Код:
Dim A, B, C, D 'объявление переменных'

Это лаконичнее;-)
Sasha_Smirnov вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц