Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Выражение с корнями, под корень часто попадают отрицательные значения.... / 14 сообщений из 14, страница 1 из 1
10.03.2011, 17:46
    #37158151
Sergey Mikhaylov
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выражение с корнями, под корень часто попадают отрицательные значения....
Сам вопрос вот в чем.. Нужно составить программу ЛИНЕЙНОЙ структуры.... Т.е тут мне операторы не помогут...
Как сделать чтобы не выдавало ошибок... корень из отрицательного числа то не посчитаешь... может как то исправить ситуацию можно. Конечно хотел поставить в выражении под корнями Abs(x1) и Abs(x2) но будет "палевно"....
Вот весь код
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
Private Sub Command1_Click()
    'Объявляем переменные
    Dim x1 As Single
    Dim x2 As Single
    Dim y As Single
    Dim z As Single
    Dim a As Integer
    Dim b As Integer
    Dim c As Integer
    
    'Константа Экспоненты
    Const e =  2 . 71828182845905 
'Присваиваем переменным значения вводимые в TextBox с клавиатуры, Функция Val служит для перевода "строки" в число
a = Val(Text1.Text)
b = Val(Text2.Text)
c = Val(Text3.Text)

x1 = (b + Sqr(Abs((b ^  2 ) - ( 4  * a * c)))) / ( 2  * a)
x2 = (b - Sqr(Abs((b ^  2 ) - ( 4  * a * c)))) / ( 2  * a)

y = (e ^ (-x1) + e ^ (-x2)) / ( 2 )
z = (a * Sqr(x1) - b * Sqr(x2)) / (c)


Label4.Caption = y
Label5.Caption = z

End Sub
...
Рейтинг: 0 / 0
10.03.2011, 17:48
    #37158154
Sergey Mikhaylov
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выражение с корнями, под корень часто попадают отрицательные значения....
Код: plaintext
z = (a * Sqr(x1) - b * Sqr(x2)) / (c)

Вот сдесь всегда ошибку выдает... ((((( Ребят помогите....
...
Рейтинг: 0 / 0
10.03.2011, 17:48
    #37158156
Konst_One
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выражение с корнями, под корень часто попадают отрицательные значения....
проверяй аргументы на валидность и выдавай предупреждение
...
Рейтинг: 0 / 0
10.03.2011, 18:42
    #37158255
Akina
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выражение с корнями, под корень часто попадают отрицательные значения....
Код: plaintext
Sqr(x1+Sign(x1))
Не такое палево, как ABS() - хотя тоже бредятина...
...
Рейтинг: 0 / 0
10.03.2011, 18:43
    #37158256
Akina
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выражение с корнями, под корень часто попадают отрицательные значения....
пардон, не плюс, а умножение, конечно.
...
Рейтинг: 0 / 0
10.03.2011, 19:45
    #37158359
.Михаил.
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выражение с корнями, под корень часто попадают отрицательные значения....
Sergey MikhaylovВот сдесь всегда ошибку выдает...
Первое что приходит в голову - x1 или/и x2 отрицательные.
...
Рейтинг: 0 / 0
10.03.2011, 20:24
    #37158409
timtim
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выражение с корнями, под корень часто попадают отрицательные значения....
Sergey MikhaylovКак сделать чтобы не выдавало ошибок...
Код: plaintext
On Error Resume Next
Панацея от ошибок.
...
Рейтинг: 0 / 0
10.03.2011, 20:25
    #37158410
timtim
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выражение с корнями, под корень часто попадают отрицательные значения....
timtimSergey MikhaylovКак сделать чтобы не выдавало ошибок...
Код: plaintext
On Error Resume Next
Панацея от ошибок.
В зачётке, правда, будет - неуд
...
Рейтинг: 0 / 0
10.03.2011, 21:39
    #37158515
Выражение с корнями, под корень часто попадают отрицательные значения....
Sergey Mikhaylov
Код: plaintext
z = (a * Sqr(x1) - b * Sqr(x2)) / (c)

Вот сдесь всегда ошибку выдает... ((((( Ребят помогите....
Проверяйте значения аргумента перед извлечением квадратого корня. Если ТЗ ограничивается областью действительных чисел, то сойдет так:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
Private Sub Command1_Click()
    'Объявляем переменные
    Dim x1 As Single
    Dim x2 As Single
    Dim y As Single
    Dim z As Single
    Dim a As Integer
    Dim b As Integer
    Dim c As Integer
    Dim s As String
    
    'Константа Экспоненты
    Const e =  2 . 71828182845905 
    Const Im = "<комплексное>"
'Присваиваем переменным значения вводимые в TextBox с клавиатуры, Функция Val служит для перевода "строки" в число
a = Val(Text1.Text)
b = Val(Text2.Text)
c = Val(Text3.Text)

x1 = (b + Sqr(Abs((b ^  2 ) - ( 4  * a * c)))) / ( 2  * a)
x2 = (b - Sqr(Abs((b ^  2 ) - ( 4  * a * c)))) / ( 2  * a)

y = (e ^ (-x1) + e ^ (-x2)) / ( 2 )

If x1 <  0  Or x2 <  0  Then
  s = Im  
Else 
  z = (a * Sqr(x1) - b * Sqr(x2)) / (c)
  s = CStr(z)
End If


Label4.Caption = y
'Label5.Caption = z
Label5.Caption = s

End Sub
...
Рейтинг: 0 / 0
10.03.2011, 23:16
    #37158663
Antonariy
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выражение с корнями, под корень часто попадают отрицательные значения....
Код: plaintext
1.
x1 = (b + Sqr(Abs((b ^  2 ) - ( 4  * a * c)))) / ( 2  * a)
x2 = (b - Sqr(Abs((b ^  2 ) - ( 4  * a * c)))) / ( 2  * a)
За это тоже по головке не погладят.
Sqr и т.д. достаточно тяжелое действие, а выполняется дважды. При выполнении этого кода в цикле, например, будет двойная порция тормозов. Плюс b ^ 2 гораздо медленнее, чем b * b.
Код: plaintext
1.
2.
sq = Sqr(Abs((b * b) - ( 4  * a * c)))
x1 = (b + sq)/( 2 *a)
x1 = (b - sq)/( 2 *a)
...
Рейтинг: 0 / 0
10.03.2011, 23:28
    #37158678
Sergey Mikhaylov
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выражение с корнями, под корень часто попадают отрицательные значения....
Спасибо большое Ребята! Просто линейно тут никак походу нельзя обойтись... Условие проверять обязательно!
Иначе как тут... хмм.... никак
...
Рейтинг: 0 / 0
10.03.2011, 23:57
    #37158707
Выражение с корнями, под корень часто попадают отрицательные значения....
Sergey MikhaylovСпасибо большое Ребята! Просто линейно тут никак походу нельзя обойтись... Условие проверять обязательно!
Иначе как тут... хмм.... никакможно и линейно...
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
' {skipped}

y = (e ^ (-x1) + e ^ (-x2)) / ( 2 )

Label5.Caption = "при вычислении Z получили ошибку"
On Error Resume Next

z = (a * Sqr(x1) - b * Sqr(x2)) / (c)

On Error GoTo  0 


Label4.Caption = y
Label5.Caption = z

' {skipped}
...
Рейтинг: 0 / 0
12.03.2011, 01:31
    #37160725
AndreTM
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выражение с корнями, под корень часто попадают отрицательные значения....
Аллё...
А причём здеь палево? Алгебру забыли?
В первую очередь, проверяться на знак должен дискриминант
Код: plaintext
(b ^ 2) - (4 * a * c)
И вот на основе этого решаться количество корней и их действительность/мнимость.

ON ERROR RESUME - оставьте для обработки исключений...
...
Рейтинг: 0 / 0
16.03.2011, 18:52
    #37168566
AndreTM
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выражение с корнями, под корень часто попадают отрицательные значения....
Извиняюсь, видимо, читал через слово. Один пост пропустил - вот и наврал.

Если решение нужно в действительных - то будет достаточно и ABS():
Код: plaintext
z = (a * Sqr(Abs(x1)) - b * Sqr(Abs(x2))) / (c)
Иначе - проще использовать условие.
...
Рейтинг: 0 / 0
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Выражение с корнями, под корень часто попадают отрицательные значения.... / 14 сообщений из 14, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]