• Иллюстрированный самоучитель по Mathematica 5

    Факторизация дробей

    Loop While strTemp = ","
    And (Response = vbYes)
    ' Выполняем цикл, пока не обработаем все множители
    ' или не обнаружим ошибку
    If strTemp = "}" Then
    ' Список должен заканчиваться
    ' закрывающейся скобкой
    (Selection.Delete Unit: = wdCharacter, Count: = 1
    ' Удаляем скобку
    Else
    Response = MsgBox("***0шибка: в конце списка нет }... " _
    + Msg, Style, Title)
    If Response = vbYes Then
    ' Пользователь выбрал Yes (Да)
    MyString = "Yes"
    ' Запомним, что выбрал пользователь
    Else ' Пользователь выбрал No (Нет)
    MyString = "No".
    ' Запомним, что выбрал пользователь
    End If End If End If
    Options.PasteSmartCutPaste" = OptPasteSmartCutPaste
    End Sub
    Function Multiplier()
    ' Обработка множителя (и его степени)
    ' Макрос записан 26.10.2003 Яков Шмидский
    Dim strTemp As String
    Dim Msg, Style, Title, Help, Ctxt, Response, MyString
    Msg = "Хотите продолжить?"
    ' Вопрос к пользователю
    Style = vbYesNo + vbCritical + vbDefaultButton2
    ' Кнопки
    Title = "Очередной множитель: степень простого"
    ' Заголовок окна
    Response = vbYes ' Пока ошибки не обнаружены
    strTemp = Selection.Text
    ' Выбираем очередной символ
    Selection.MoveRight Unit: = wdCharacter,
    Count: = 1, Extend: = wdExtend
    If strTemp = "{" Then
    ' Если отрывающая скобка - начало множителя
    Selection.Delete Unit: = wdCharacter, Count: = 1
    ' Скобку удаляем
    Selection.Extend Character: = ","
    ' Расширили выделение до,
    Selection.MoveLeft Unit: = wdCharacter, Count: = 1,
    Extend: = wdExtend
    ' Отменили выделение, BaseRepresent
    Selection.MoveRight Unit: = wdCharacter, Count: = 1
    ' Основание Selection.MoveRight Unit: = wdCharacter,
    Count: = l, Extend: = wdExtend strTemp = Selection.Text
    ' Основание отделяется, от показателя
    If strTemp = "," Then
    ' Разделитель нашли PowExp
    ' Обрабатываем показатель
    Selection.MoveRight Unit: = wdCharacter, Count: = 1, Extend: = wdExtend
    strTemp = Selection.Text
    ' Этот символ завершает множитель
    If strTemp = "}" Then
    ' Это должна быть закрывающая скобка
    Selection.Delete Unit: = wdCharacter, Count: = 1
    ' - Удалить ее Else
    ' Но ведь в коде же должна быть закрывающая скобка
    Response = MsgBox("***0шибка в сомножителе: нет }... " + Msg, Style, Title) If Response = vbYes Then
    ' Пользователь выбрал Yes (Да)
    MyString = "Yes"
    ' Запомним, что выбрал пользователь
    Else' Пользователь выбрал No (Нет)
    MyString = "No"
    ' Запомним, что выбрал пользователь
    End If End If Else ' Иначе - а где же запятая?
    Response = MsgBox("***0шибка в сомножителе: нет,... " + Msg, Style, Title) If Response = vbYes Then
    ' Пользователь выбрал Yes (Да)
    MyString = "Yes"
    ' Запомним, что выбрал пользователь
    Else ' Пользователь выбрал No (Нет)
    MyString = "No"
    ' Запомним, что выбрал пользователь
    End If
    End If
    End If
    Multiplier = Response End Function
    Sub PowExp()
    ' Обработка показателя
    Dim strTemp As String
    Selection..Delete Unit: = wdCharacter, Count: = 1
    ' Удаляем символ
    Selection.Extend Character: = "}"
    ' Расширили выделение до }
    Selection.MoveLeft Unit: = wdCharacter, Count: = 1, Extend: = wdExtend
    ' Отменили выделение }
    strTemp = Selection.Text
    ' Это и есть показатель
    If strTemp = "1" Then
    ' Если показатель равен 1
    Selection.Delete Unit: = wdCharacter, Count: = 1
    ' Удаляем его Else
    ' В противном случае форматируем его как надстрочный
    With Selection.Font
    .Superscript = True 'Надстрочный
    End With Selection.MoveRight Unit: = wdCharacter, Count: = 1
    Selection.Font.Reset 'Восстановить стиль
    End If End Sub
    Sub BaseRepresent() Dim strTemp As String
    strTemp = Selection.Text ' Основание
    If Not MultiplierQ(strTemp) Then
    ' Selection.MoveLeft Unit: = wdCharacter, Count: = 1
    Selection.InsertBefore "("
    ' Перед основанием вставим символ {
    Selection.InsertAfter ")"
    ' А после него вставим символ)
    End If
    End Sub
    Function MultiplierQ(strTemp) ret = True
    If Left(strTemp, 1) = "-"
    Then ret = False MultiplierQ = ret
    End Function
    Если Вы заметили ошибку, выделите, пожалуйста, необходимый текст и нажмите CTRL + Enter, чтобы сообщить об этом редактору.