Вопрос: Задача про ГРАФЫ!! Хелп!! нужен только АЛГОРИТМ!!
Добавлено: 11.05.06 22:40
Автор вопроса: Горе_Студент | Web-сайт:makangel.by.ru
вот сиё:
________________________________________
Sub graf()
Dim s As String
s = ThisDocument.Application.Selection
Debug.Print s
Dim a(100) As Byte 'массив для скобок
Dim b As Byte
'Dim c As Byte
Dim i As Byte
Dim j As Byte
Dim under As Boolean
'ПОИСК ВСЕХ ОТКРЫВАЮЩИХ СКОБОК
i = 1
'все открывающие
b = InStrRev(s, "(", -1) 'поиск справа
If b <> 0 Then a(i) = b
While (b > 1)
i = i + 1
b = InStrRev(s, "(", a(i - 1) - 1) 'поиск справа
If b <> 0 Then a(i) = b
Wend
If a(i) <> 0 Then i = i + 1
'все закрывающие
b = InStrRev(s, ")", -1) 'поиск справа
If b <> 0 Then a(i) = b
While b > 1
i = i + 1
b = InStrRev(s, ")", a(i - 1) - 1) 'поиск справа
If b <> 0 Then a(i) = b
Wend
If a(i) = 0 Then i = i - 1
'СОРТИРОВКА
'в массиве будет положение всех скобок по положению в строке начиная с конца строки
For O = 1 To i - 1
j = O
For p = j + 1 To i
If a(p) > a(j) Then
j = p
End If
Next p
b = a(O)
a(O) = a(j)
a(j) = b
Next O
'СОЗДАНИЕ СТРОКИ ДЛЯ ПЕЧАТИ
Lab2:
S1 = ""
If i = 0 Then Exit Sub
j = i
For q = 1 To Len(s)
If j <> 0 Then
If (q <> a(j)) Then
If under Then 'пространство между скобками, т.е. (...)
S1 = S1 + "_"
Else
S1 = S1 + " "
End If
End If
If q = a(j) Then
S1 = S1 + "|" 'прямо под скобкой
If under Then 'отработали между скобок
under = False
a(j) = 0 'убираем метку для закрывающей скобки
a(j + 1) = 0 'убираем метку для открывающей скобки
Else
If j > 1 Then
If (Mid$(s, a(j), 1) = "(") And (Mid$(s, a(j - 1), 1) = ")") Then 'проверка, после откытой скобки идет закрытая
under = True
End If
End If
End If
j = j - 1
End If
End If
Next q
Debug.Print S1 'вывод сгенерированной строки
'убираем метки равные 0, т.е. уже обработанные скобки
'простой сдвиг элементов массива
e = 1
While e <= i
If a(e) = 0 Then
For r = e To i
a(r) = a(r + 1)
Next r
i = i - 1
e = e - 1
End If
e = e + 1
Wend
If i > 1 Then GoTo Lab2
End Sub
___________________________
я вообще мало что смыслю в WORD ВБА, объясните пожалуйста русским языком как работает это программа!
И ещё препод по информатике попросил без Application..
кароче, он попросил чтобы это работала без вынесения примера на страницу ворда.
ПОМОГИТЕ!! пожалуйста!! меня иначе не допустят к экзамену..
Dim s As String 'объяв строк переменная
'заносится в неё, то что выделено
s = ThisDocument.Application.Selection
'печатается в окошко отладки
Debug.Print s