Visual Basic, .NET, ASP, VBScript
 

   
   
     

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

Страница: 1 |

 

  Вопрос: Обработка строки Добавлено: 26.03.08 15:49  

Автор вопроса:  Bonapart | Web-сайт: team16.tut.su | ICQ: 175256 
Я делаю программу для построения графиков, можете помочь найти и посчитать функции Sin,Cos,Tg,Ctg,Arctg ... и подобные . Выделить из текста и посчитать.

Ответить

  Ответы Всего ответов: 6  

Номер ответа: 1
Автор ответа:
 Winand



Вопросов: 87
Ответов: 2795
 Web-сайт: winandfx.narod.ru
 Профиль | | #1
Добавлено: 26.03.08 19:34
в чем проблема? В парсинге текста?

Ответить

Номер ответа: 2
Автор ответа:
 Bonapart



ICQ: 175256 

Вопросов: 32
Ответов: 108
 Web-сайт: team16.tut.su
 Профиль | | #2
Добавлено: 27.03.08 11:30
Вот код может кому надо
Проблема в том что у меня не получается вообще выделять функции из строки, и в том что в VB нету функций arcsin,arccos,целая часть,дробная часть,sign. Помогите кто может..



Public Function inter(stroka As String) As Double
'Деление строки на элементы
k = 0
Dim funk() As Byte, per() As Double
For i = 1 To Len(stroka)
b = Mid(stroka, i, 1)
If b = "+" Or b = "-" Or b = "*" Or b = "/" Then
If b = "-" And tmp = "" Then GoTo jg
k = k + 1
ReDim Preserve funk(k)
ReDim Preserve per(k)
If b = "+" Then funk(k) = 4
If b = "-" Then funk(k) = 3
If b = "*" Then funk(k) = 2
If b = "/" Then funk(k) = 1
per(k) = tmp
tmp = ""
Else
jg:
tmp = tmp + b
End If


Next i
ReDim Preserve per(k + 1)
per(k + 1) = tmp

'For p = 1 To UBound(funk)
'MsgBox per(p)
'MsgBox funk(p)
'Next
'MsgBox (per(p))


lk = 1
Do While lk <= UBound(funk)

If funk(lk) = 2 Then

per(lk) = per(lk) * per(lk + 1)

For k = lk + 1 To UBound(per) - 1
per(k) = per(k + 1)
Next k
ReDim Preserve per(UBound(per) - 1)

For k = lk To UBound(funk) - 1
funk(k) = funk(k + 1)
Next k
ReDim Preserve funk(UBound(funk) - 1)

Else
lk = lk + 1
End If

Loop


Do While UBound(funk) > 0
lk = 1
Do While lk <= UBound(funk)

If funk(lk) = 1 Then

per(lk) = per(lk) / per(lk + 1)

For k = lk + 1 To UBound(per) - 1
per(k) = per(k + 1)
Next k
ReDim Preserve per(UBound(per) - 1)

For k = lk To UBound(funk) - 1
funk(k) = funk(k + 1)
Next k
ReDim Preserve funk(UBound(funk) - 1)

Else
lk = lk + 1
End If

Loop



lk = 1
Do While lk <= UBound(funk)

If funk(lk) = 3 Then

per(lk) = per(lk) - per(lk + 1)

For k = lk + 1 To UBound(per) - 1
per(k) = per(k + 1)
Next k
ReDim Preserve per(UBound(per) - 1)

For k = lk To UBound(funk) - 1
funk(k) = funk(k + 1)
Next k
ReDim Preserve funk(UBound(funk) - 1)

Else
lk = lk + 1
End If

Loop



lk = 1
Do While lk <= UBound(funk)

If funk(lk) = 4 Then

per(lk) = per(lk) + per(lk + 1)

For k = lk + 1 To UBound(per) - 1
per(k) = per(k + 1)
Next k
ReDim Preserve per(UBound(per) - 1)

For k = lk To UBound(funk) - 1
funk(k) = funk(k + 1)
Next k
ReDim Preserve funk(UBound(funk) - 1)

Else
lk = lk + 1
End If

Loop

Loop

inter = per(1)
End Function

Public Function mat(a As String) As String
s1 = ""

ni = InStrRev(a, ";)";)
' If Mid(a, i2, 1) = ";)" Then ni = i 'запоминает положение последней )
If ni > 0 Then
i2 = InStrRev(a, ";(";) 'если встречает (, значит это и есть самая глубокая ( )
 
 For j = i2 + 1 To ni
 
 If Mid(a, j, 1) = ";)" Then
    b = Mid(a, 1, i2 - 1) + Trim(Str(inter(Trim(s1)))) + Mid(a, 2 + i2 + Len(s1), Len(a) - j) '
        ' delete(a,i,2+len(s1)) 'удаляет исходную скобку…
        ' insert(rasstr(s1),a,i) '… и вставляет вместо нее значение скобки
        'возвращается выше на скобку и продолжает далее цикл
    s1 = ""
    mat = mat(Trim(b))
 Else
    s1 = s1 + Mid(a, j, 1)
 End If


 Next j

End If


mat = inter(a) 'расчет конечного результата
End Function

Ответить

Номер ответа: 3
Автор ответа:
 Winand



Вопросов: 87
Ответов: 2795
 Web-сайт: winandfx.narod.ru
 Профиль | | #3
Добавлено: 27.03.08 16:28
Ааа.. Ну дык используй это: http://vbnet.ru/forum/show.aspx?id=163253
Или какую-нибудь другую библиотеку типа MTParser.
Надобность в написании функции пропадает. Проверено=)

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

Ответить

Номер ответа: 4
Автор ответа:
 Sharp


Лидер форума

ICQ: 216865379 

Вопросов: 106
Ответов: 9979
 Web-сайт: sharpc.livejournal.com
 Профиль | | #4
Добавлено: 27.03.08 20:16
в VB нету функций arcsin,arccos,целая часть,дробная часть,sign

Вранье.

Ответить

Номер ответа: 5
Автор ответа:
 



Администратор

ICQ: 278109632 

Вопросов: 42
Ответов: 3949
 Web-сайт: domkratt.com
 Профиль | | #5
Добавлено: 28.03.08 00:47
Bonapart, эт что за код такой мегадлинный? Все может быть гораздо короче =)

Ответить

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



Вопросов: 87
Ответов: 2795
 Web-сайт: winandfx.narod.ru
 Профиль | | #6
Добавлено: 28.03.08 00:55
вместо такого лучше select case
If b = "+" Then funk(k) = 4
If b = "-" Then funk(k) = 3
If b = "*" Then funk(k) = 2
If b = "/" Then funk(k) = 1

Ответить

Страница: 1 |

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



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