Skip to content

Реализация математических функций. Задача 1

Первый пример после введения может кому-то показаться страшным и непонятным, но не волнуйтесь, всё разберём по полочкам и даже неопытный кодер поймёт какие возможности нам открывает VBA.

Итак, перед нами задача:

Реализовать в VBA математические функции, вывести сумму этих функций в ячейки напротив заданных Х. Сами Функции таковы:
render
render (1)
gif

Приступаем! Сначала определитесь, где вы будете писать. Есть вариант писать программу на самом Листе, но помните, !! если удалите случайно лист, на котором вы писали код то все ваши труды пойдут прахом!!. Вот эти листы и есть, те самые, которые у вас на Главной.
Снимок
Снимок1
Так что я вам советую создать модуль (Дополнительный блок), с которым могут быть связанны все Листы в ваше книге. Для этого в нашей среде нажимаем Insert —> Module. Дальше открываем его двойным щелчком (если не открылся автоматически).
Снимок2
Переходим к коду.

Public Sub prog1()
Dim x() As Double
Dim f1 As Double
Dim f2 As Double
Dim f3 As Double
Dim f As Double
Dim i As Integer
Dim s As Integer

Здесь идёт объявление: самой функции(Sub), динамического массива х(), который нужно потом переопределить (всегда! при работе с динамическим массивом в VBA), f1, f2, f3 результат наших трёх функций, f — сумма результатов функций, i, s — необходимые переменные для промежуточных действий.

В относительно далёкие времена использовалось объявление через %s, %d и т.д., но данное нами объявление считается грамотным и современным на дату публикации.=)

On Error GoTo errHandler
Do
ReDim x(s - 1) As Double
x(i) = Cells(2 + i, 1)
If x(i) >= 0 Or Tan(2 ^ x(i)) <> 0 Then
    f1 = Log(x(i)) / Log(2)
    f2 = Tan(1 / (x(i) ^ 3))
    f3 = Log(Abs(Tan(2 ^ x(i)))) / Log(2)
    f = f1 + f2 + f3
    Cells(2 + i, 3) = f
    i = i + 1
Else: MsgBox ("Error!")
    i = i + 1
End If
Loop Until i = s - 1
Exit Sub
errHandler:
  MsgBox Err.Description, vbCritical, "Error No: " & Err.Number
End Sub

Теперь рассмотрим самую главную часть нашего кода. Я решил не разрывать на части и рассказывать о каждом в отдельности, а разжевать этот большой кусок, чтобы вы могли видеть полную картину происходящего.

On Error GoTo errHandler эта штука позволяет ловить ошибки, которые возникают во время прохождения по коду. При ошибке компилятор переходит к блоку, где описано действие при ошибке. Внизу программы после Exit Sub и ключевой строки errHandler:.

Do — начало обычного цикла, обычно используется с while или until. Заканчивается этот цикл строкой Loop Until i = s — 1. Это означает, цикл заканчивается при условии i = s — 1 и это условие проверяется только после прохождение цикла. То есть: Действие -> Проверка условия -> либо снова действие либо идём дальше.

ReDim — та самая команда переопределения динамического массива, о которой я упоминал в начале.С помощью неё мы говорим, что массив Х будет иметь s — 1 элементов.

Cells() — команда для обращения к ячейки, в её параметры мы записываем «координаты» ячейки.

If x(i) >= 0 Or Tan(2 ^ x(i)) <> 0 Then — здесь мы проверяем подходит ли на введённые пользователем Х. Это условие следует из области допустимых значений для того или иного уравнения.

Далее, думаю, понятно. Приравниваем наши f# соответствующим уравнениям и суммируем их в f. Записываем результат в ячейку командой cells() = . И увеличиваем счётчик по i.
Else выполняется в том случае, если Х не прошёл проверку.

MsgBox выводит сообщение в диалоговом окне.

Запомните, в этом языке каждый If имеет свой End If. Кроме тех случаев, когда условие задано в одну строку.

Предпоследняя страшная строка MsgBox Err.Description, vbCritical, «Error No: » & Err.Number, благодаря On Error GoTo errHandler срабатывает только во время ошибки в самом процессе, например, введён неверный тип данных.

Err.Description — обращение к объекту Err(Error) к параметру Description.

vbCritical — отвечает за значок, выводимый в окошке.

«Error No: » & Err.Number: то что в кавычках, просто символьная строка, & — знак логической «И» (синоним And) и Err.Number опять же обращение к объекту Err и к его параметру Number, что, как вы наверное догадались, значит номер ошибки.

Наш вывод.
Снимок3
Вот, собственно, и всё. Задавайте вопросы в комментариях. Надеюсь Вы прониклись магией VBA, если же нет, читайте продолжение. =)

Скачать исходники

Опубликовано вVBA

Будьте первым, кто оставит комментарий

    Добавить комментарий