Как трипаразировать значения ячеек, чтобы сформировать полиномиальное выражение?


EDIT: наиболее переработанный код, опубликованный ниже.

EDIT: я хочу, чтобы пользователь ввел полиномы, такие как: A(n) * X^n + A(n-1)*X^(n-1) + A(n-2)*X^(n-2) + ... + A (0)

У меня есть макрос Excel в процессе демонстрации теоремы о промежуточном значении. Пользователь вводит степень в A2, коэффициент в B2.

В настоящее время MsgBox может возвращать полином первого порядка в виде коэффициента * x^степени. Я хочу, чтобы MsgBox мог возвращать более сложные полиномы, чтобы пользователь мог подтвердить правильный полином был введен.

Вот код:

Sub Function1()
MsgBox "Enter polynomial by terms."

counter = 1
counter = counter + 1
Degree = Cells(counter, 1).Value 'A2
Coefficient = Cells(counter, 2).Value 'B2
'   If cell value is null stop
If IsNull(Degree) = True Then
    MsgBox "IsNull(Degree)=True"
End If
If IsNull(Coefficient) Then
    MsgBox "IsNull(Coefficient)=True"
End If
If IsNumeric(Len(Trim(Degree))) = True And IsNumeric(Len(Trim(Coefficient))) Then
    MsgBox "Degree is numeric"
    If Degree Mod 1 = 0 Then
        MsgBox "Degree is integer"
    End If
End If
MsgBox Coefficient & "x^" & Degree
'   How repeat this process to show in MsgBox entire polynomial?
End Sub

EDIT: пересмотренный код:

Option Explicit
Sub Function1()
Dim Polynomial As String
Dim Sign
Dim counter As Integer
Dim Degree
Dim Coefficient

While Cells(counter + 1, 1).Value <> "" And Cells(counter + 1, 2).Value <> "" '+1 because top row occupied by column A, column B titles. If cell is empty stop.
MsgBox "Enter polynomial by terms."
Degree = Cells(counter + 1, 1).Value 'A2
Coefficient = Cells(counter + 1, 2).Value 'B2
If (Coefficient < 0) Then Sign = " - " ' if coefficient negative
    Else: If Coefficient > 0 Then Sign = " + " ' if coefficient positive
End If
Polynomial = Polynomial & " " & Coefficient & "x^" & Degree 'concatenation string, list polynomial.
counter = 1
counter = counter + 1
Wend
MsgBox poly
End Sub
1 2

1 ответ:

Вам нужно построить цикл вокруг того, что вы уже написали, и объединить Coefficient & "x^" & Degree внутри переменной String. Это может выглядеть так:

Dim poly as String
Dim sign as String

' Iterate over data cells:
while Cells(counter,1).Value <> ""
    ' What you're already doing...
    ' ...plus:
    IIf(Coefficient < 0, sign = " - ", sign = " + ")

    ' String concatenation:
    poly = poly & " " & Coefficient & "x^" & Degree
    counter=counter+1
Wend
' Finally:
Msgbox poly

EDIT: кроме того, если вы хотите проверить пустые значения, используйте If Cells(counter,1).value = "" Then .... IsNull используется для проверки пустоты объектов; простые типы данных инициализируются с помощью "" для String и 0 для чисел и, таким образом, никогда не вызовут isNull.