Консультация № 200490
25.03.2021, 19:03
0.00 руб.
1 6 1
Здравствуйте! Прошу помощи в следующем вопросе:
Помогите написать в макросе 2 задачки.
Извиняюсь что не прописываю формулой, заранее огромное спасибо
Прикрепленные файлы:
1240729a3018bd18579243eb88a8280c7c5bdfc0.png

Обсуждение

давно
Модератор
137394
1850
25.03.2021, 23:30
общий
26.03.2021, 00:33
Адресаты:
к задаче 3.12:




Об авторе:
Понеже не словес красных бог слушает, но дел наших хощет
давно
Модератор
137394
1850
26.03.2021, 00:15
общий
Адресаты:
Вы уверены, что задачу 3.11 надо решать макросом?
Об авторе:
Понеже не словес красных бог слушает, но дел наших хощет
давно
Посетитель
404319
21
26.03.2021, 09:09
общий
Адресаты:
Да, нужно на языке VBA это все расписать. Можете написать к задаче 3.11 если Вас не затруднит, к сожалению я не соображу как это все правильно прописать. Заранее спасибо
давно
Модератор
137394
1850
26.03.2021, 15:45
общий
26.03.2021, 15:48
Адресаты:
к задаче 3.11
С функцией всё понятно. Но надо получить уравнение касательной.




Для вычисления значений в таблице и построения графиков исходных хватает, не очень понимаю, какая задача у макроса: что он должен сделать.
Об авторе:
Понеже не словес красных бог слушает, но дел наших хощет
давно
Модератор
137394
1850
27.03.2021, 01:43
общий
это ответ
Здравствуйте, 23071996!

[i][b]Задача 3.11[/b][/i]
Функция задана, вычислить её значения в заданных точках не представляет труда. Однако задание требует построения касательной в заданной точке.
Получим уравнение касательной.



Вот макрос, который создаёт рабочий лист, помещает на него заданную затабулированную заданную функцию и касательную к ней с заданными условиями, строит графики функции и касательной.
Код:
Sub Job_3_1()

Const x1 = 0, x2 = 4, xd = 0.2, x0 = 0.5

Const R1 = "A1" 'Адрес левой верхней ячейки с данными
' Const R1 = "B2" 'Адрес левой верхней ячейки с данными

Dim i, Nx, x
Dim Fx0, F1x0
Dim R2, RRfunk
Dim WorkSh, DiagName

Nx = Round((x2 - x1) / xd, 0) + 1
ReDim Dann(1 To Nx, 1 To 3)

Fx0 = x0 * Sin(2 * x0)
F1x0 = Sin(2 * x0) + 2 * x0 * Cos(2 * x0)
x = x1
For i = 1 To Nx
Dann(i, 1) = x
Dann(i, 2) = x * Sin(2 * x)
Dann(i, 3) = F1x0 * (x - x0) + Fx0
x = x1 + xd * i
Next

Sheets.Add After:=Sheets(Sheets.Count)

R2 = Range(R1).Offset(Nx - 1, 2).Address
Range(R1 + ":" + R2) = Dann

RRfunk = Range(R1).Offset(0, 1).Address
RRfunk = RRfunk + ":" + R2

WorkSh = ActiveSheet.Name
Range(RRfunk).Select

ActiveSheet.Shapes.AddChart.Select

With ActiveChart
DiagName = Replace(.Name, WorkSh + " ", "")
.ChartType = xlLine
.SetSourceData Source:=Range("'" + WorkSh + "'!" + RRfunk)
.PlotArea.Select
.SeriesCollection(1).XValues = "=" + WorkSh + "!" + R1 + ":" + Range(R1).Offset(Nx - 1, 0).Address
With .Axes(xlCategory)
.TickLabels.NumberFormat = "# ##0.0"
.CrossesAt = 1
.AxisBetweenCategories = False
End With
End With

With ActiveSheet.Shapes(DiagName)
.ScaleWidth 1.1437, msoFalse, msoScaleFromBottomRight
.ScaleHeight 1.366, msoFalse, msoScaleFromBottomRight
.ScaleWidth 1.4025, msoFalse, msoScaleFromTopLeft
.ScaleHeight 1.085, msoFalse, msoScaleFromTopLeft
End With

Range("A1").Select
End Sub



[i][b]Задача 3.12[/b][/i]
Для оптимизации вычислений преобразуем приведенную формулу к виду:






Вот макрос, реализующий этот алгоритм:
Код:
Sub Job_3_2()

Const x = 1.5
Const N = 16

Dim Fx, Yi, dY, Zi, i

Fx = 0
Yi = x
dY = x ^ 0.2
Zi = -1

For i = 1 To N
Yi = Yi * dY
Zi = Zi * (-0.25)
Fx = Fx + Sin(Yi) * Zi
Next

MsgBox "x=" + CStr(x) + vbCrLf + "F(x)=" + CStr(Fx)

End Sub

Так как ничего не было сказано о способе ввода данных, значение x задаётся константой.

В прилагаемом файле ya210327.xlsm (33.6 кб) приведенные макросы, два рабочих листа с решением задач без макросов, как дополнительный контроль работы макроса, а также созданный макросом лист по задаче 3.11


5
Об авторе:
Понеже не словес красных бог слушает, но дел наших хощет
давно
Модератор
137394
1850
27.03.2021, 16:48
общий
Адресаты:
Цитата: Правила портала
Не задавайте несколько разных вопросов в одном.
Не задавайте несколько разных, не связанных с друг другом вопросов, в одном. Это не запрещено (если все вопросы относятся к теме рассылки), но вероятность того, что Вы получите на них ответы, будет гораздо выше, если Вы зададите их по отдельности. Например, мало кому из экспертов захочется отвечать на вопрос, в котором просто перечислено несколько задач из задачника. Отвечать на такие вопросы неудобно, ответы трудно читаются в выпусках рассылок, затрудняется обсуждение в форуме. Поэтому большинство экспертов просто игнорируют вопросы, в которых под видом одного дано несколько вопросов или задач. Гораздо лучше, если Вы в одном вопросе спросите про решение одной проблемы, особенно, если Вы покажете, что пытались решить ее самостоятельно, и укажете, что именно вызвало трудности. Тогда многие захотят Вам помочь.
Если в одном запросе несколько вопросов, есть вероятность, что часть вопросов у кого-то вызывают затруднения и требуют уточнения, а часть может быть решена быстро и ответы могут быть доведены до Вас быстрее. Задавая несколько вопросов в одном, Вы осложняете жизнь экспертам и, в конечном итоге, себе.
Об авторе:
Понеже не словес красных бог слушает, но дел наших хощет
Форма ответа