Консультация № 200815
12.05.2021, 18:40
0.00 руб.
1 1 1
Здравствуйте! У меня возникли сложности с таким вопросом:
Написать программу для вычисления функции:
Заранее огромное спасибо, прилагаю изображение
Прикрепленные файлы:
Снимок экрана 2021-05-12 183913.png

Обсуждение

давно
Модератор
137394
1850
13.05.2021, 16:26
общий
это ответ
Код:
Sub Pgm()
Const Rbegin = "B2"
Const N = 100

ReDim Y(N, 1)

Dim ab, a_b, L2, Delta
ab = InputBox("Введите значения интервала a b" + vbCrLf + vbCrLf + "(образец приведен)", "Ввод данных", "-1,2 7,2")

If Len(ab) = 0 Then Exit Sub

a_b = Split(Replace(ab, ".", ","), " ")
L2 = UBound(a_b)

If L2 < 1 Then
MsgBox "Интервал не введен" + vbCrLf + vbCrLf + """" + ab + """"
Exit Sub
End If

If Not IsNumeric(a_b(0)) Or Not IsNumeric(a_b(L2)) Then
MsgBox "Значения интервала не корректны" + vbCrLf + vbCrLf + """" + a_b(0) + """ """ + a_b(L2) + """"
Exit Sub
End If

a_b(0) = CDbl(a_b(0))
a_b(L2) = CDbl(a_b(L2))
Delta = (CDbl(a_b(L2)) - CDbl(a_b(0))) / N

For i = 0 To N
Y(i, 0) = a_b(0) + Delta * i
Y(i, 1) = Func(a_b(0) + Delta * i)
Next

Sheets.Add After:=Sheets(Sheets.Count)
Range(Rbegin + ":" + Range(Rbegin).Offset(N, 1).Address) = Y

Dim NameList, Rdann, Rarg
NameList = ActiveSheet.Name

Rarg = Range(Rbegin).Offset(0, 0).Address + ":" + Range(Rbegin).Offset(N, 0).Address
Rdann = Range(Rbegin).Offset(0, 1).Address + ":" + Range(Rbegin).Offset(N, 1).Address

ActiveSheet.Shapes.AddChart.Select
ActiveChart.ChartType = xlLine
ActiveChart.SetSourceData Source:=Range(NameList + "!" + Rdann)

ShapeName = ActiveSheet.Shapes(1).Name

With ActiveSheet.Shapes(ShapeName)
.ScaleWidth 1.3, msoFalse, msoScaleFromBottomRight
.ScaleHeight 1.2, msoFalse, msoScaleFromBottomRight
.ScaleWidth 1.3, msoFalse, msoScaleFromTopLeft
.ScaleHeight 1.2, msoFalse, msoScaleFromTopLeft
End With

With ActiveChart
With .Axes(xlCategory)
.Select
.TickMarkSpacing = 5
.TickLabelSpacing = 5
.AxisBetweenCategories = False
.CrossesAt = 1
.HasMajorGridlines = True
End With
.PlotArea.Select
.SeriesCollection(1).XValues = "=" + NameList + "!" + Rarg
End With
Range(Rarg).NumberFormat = "0.00"
Range("A1").Select
End Sub

Function Func(x)
If x < -1 Then Func = 0
If -1 <= x And x < 0 Then Func = Cos(x * 3.14159265358979)
If 0 <= x And x < 2 Then Func = x ^ 2 + 1
If 2 <= x And x < 7 Then Func = 7 - x
If x >= 7 Then Func = 0
End Function
Макрос создает в книге новый лист, на нём размещает массив с результатом табулирования функции и строит график. Границы интервала вычисления функции вводятся.
Прикрепленные файлы:
5
Об авторе:
Понеже не словес красных бог слушает, но дел наших хощет
Форма ответа