Visual Basic, .NET, ASP, VBScript
 

   
   
     

Форум - VBA

Страница: 1 |

 

  Вопрос: Задача про ГРАФЫ!! Хелп!! нужен только АЛГОРИТМ!! Добавлено: 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..
кароче, он попросил чтобы это работала без вынесения примера на страницу ворда.
ПОМОГИТЕ!! пожалуйста!! меня иначе не допустят к экзамену..

Ответить

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

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


 

Разработчик Offline Client

Вопросов: 236
Ответов: 8362
 Профиль | | #1 Добавлено: 13.05.06 21:16
это работала без вынесения примера на страницу ворда

они и так вроде никуда невыводит :)


а чем тебе помочь? код прокоментировать, за тебя операторы выучить или что?

Ответить

Номер ответа: 2
Автор ответа:
 Горе_Студент



Вопросов: 1
Ответов: 2
 Web-сайт: makangel.by.ru
 Профиль | | #2
Добавлено: 15.05.06 11:29
для начала высчитывания нужна выделить пример, который напечатан в доке.
вот он:
((1-1)*5)*(10-5)*(((5+4)+3)*2)-1


после выделения его мышкой запускашь бэйзик и только тогда он отображает подсчёты:
((1-1)*5)*(10-5)*(((5+4)+3)*2)-1

||___|  | |____| |||___|  |  |
|_______|        ||_______|  |
                 |___________|



а препод хочет чтобы ничё выделять в доке не не надо было, типа мы это не проходили и т.д.

так как это сделать?
Очень жду ответа.

Ответить

Номер ответа: 3
Автор ответа:
 Горе_Студент



Вопросов: 1
Ответов: 2
 Web-сайт: makangel.by.ru
 Профиль | | #3
Добавлено: 21.05.06 17:11

Ладно объясните хотя бы от эту строку, остальное вроде понел..

Dim s As String
s = ThisDocument.Application.Selection
 Debug.Print s



Ответить

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


 

Разработчик Offline Client

Вопросов: 236
Ответов: 8362
 Профиль | | #4 Добавлено: 21.05.06 23:20
Dim s As String 'объяв строк переменная
'заносится в неё, то что выделено
s = ThisDocument.Application.Selection
'печатается в окошко отладки
Debug.Print s

Ответить

Страница: 1 |

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



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