- 01
- 02
- 03
- 04
- 05
- 06
- 07
- 08
- 09
- 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
- 37
- 38
- 39
- 40
- 41
- 42
- 43
- 44
- 45
- 46
- 47
- 48
- 49
- 50
- 51
- 52
- 53
- 54
- 55
- 56
- 57
- 58
- 59
- 60
- 61
- 62
- 63
- 64
- 65
- 66
- 67
- 68
- 69
- 70
Dim zn(10) As String, txt As String ' объявляем переменные zn для хранение знаков
Private Sub Command1_Click()
Dim raz As Byte ' эта переменная для того что бы происходили действие сначало * / а потом + -
raz = 0
For i = 1 To Len(Text1) Step 1 ' читаем текст
DoEvents
If Mid(Text1, i, 1) = " " Then 'ищем пробелы
Text1.SetFocus: Text1.SelStart = i - 1: Text1.SelLength = 1: Text1.SelText = "" ' если есть то убираем
End If
Next i
Text1 = "(" & Text1 & ")" ' ставим в скобки они мне нужны
txt = "" ' чистим переменную
For i = 1 To Len(Text1) Step 1 'читаем текст
For zn1 = 1 To 6 Step 1 ' перечисляем знаки
If Mid(Text1, i, 1) = zn(zn1) Then txt = txt & " " & zn(zn1) & " ": GoTo qw ' если есть то ставим пробелы возле знаков
Next zn1
txt = txt & Mid(Text1, i, 1) ' если нету то просто записывает символ
qw:
Next i
Text1 = txt ' записываем в text переменную txt
razz:
zad:
For i = 1 To Len(Text1) Step 1 ' читаем текст
DoEvents ' чтобы не зацикливался
If raz = 0 Then 'если первый раз проходит
If Mid(Text1, i, 1) = zn(1) Then Call mn(i, "*"): GoTo zad ' то делаем действие *
If Mid(Text1, i, 1) = zn(2) Then Call mn(i, "/"): GoTo zad ' и /
Else ' иначе
If Mid(Text1, i, 1) = zn(3) Then Call mn(i, "+"): GoTo zad 'делаем действие +
If Mid(Text1, i, 1) = zn(4) Then Call mn(i, "-"): GoTo zad ' и -
End If
Next i
If raz = 0 Then raz = 1: GoTo razz ' если первый раз то делаем второй круг
Text1 = Mid(Text1, 4, Len(Text1) - 6) ' убираем скобки
End Sub
Function mn(ByVal i1 As Integer, znak As String) ' что бы воспользоваться функцией надо указать позицию в тексте и у казать знак действие например mn(3,"*")
Dim ss1 As Double, ss2 As Double, sn As Integer, sk As Integer ' записываем переменные ss1 число перед знаком, sn её позиция то есть начало ,ss2 второе число после знака , sk позиция второго числа то есть конец
ss1 = 0: ss2 = 0 ' онулируем переменные чисел
For s1 = i1 - 1 To 1 Step -1 ' читаем текст от знака до начало
For zn1 = 1 To 6 Step 1 'ищем знаки( * / + - ( ) )
If Mid(Text1, s1, 1) = zn(zn1) Then ' сравниваем знаки с символом
'если символ это один из знаков то
sn = s1 ' записываем позицию
If Mid(Text1, s1, 1) = "(" Then s1 = s1 + 1 ' тут была ошибка когда была скобка я её избежал
ss1 = Val(Mid(Text1, s1, i1 - s1)) ' записываем число в переменную
GoTo выход1 ' выходим из цикла (я не использую exit for потому что тут не один цик )
End If
Next zn1
Next s1
выход1:
For s2 = i1 + 1 To Len(Text1) Step 1 'тут анологично только ищет и записывает второе число после знака
For zn1 = 1 To 6 Step 1
If Mid(Text1, s2, 1) = zn(zn1) Then
ss2 = Val(Mid(Text1, i1 + 1, s2 - i1))
sk = s2
GoTo выход2
End If
Next zn1
Next s2
выход2:
Text1.SetFocus: Text1.SelStart = sn + 1: Text1.SelLength = sk - sn - 3 ' выделяем число перед знаком знак и число после знака
Select Case znak
Case "*": Text1.SelText = ss1 * ss2: Case "/": Text1.SelText = ss1 / ss2: Case "+": Text1.SelText = ss1 + ss2: Case "-": Text1.SelText = ss1 - ss2 ' делаем действие между двумя числами от зависимости знака и записываем в это выделенное место число
End Select
i = i1
End Function
Private Sub Form_Load()
zn(1) = "*": zn(2) = "/": zn(3) = "+": zn(4) = "-": zn(5) = "(": zn(6) = ")" 'записываем в переменную знаки переменная с индексом"
End Sub
Исходник программы для пространственно-временного искажения.
В действии