Содержание
ВНИМАНИЕ | Для получения программы своего варианта пишите на наш электронный адрес proglabs@mail.ru |
💡 Время нашего ответа обычно составляет не более 10 минут. |
Цель работы
Приобретение навыков написания программ на VBA с использованием циклических алгоритмов.
Постановка задания (задача №1)
Задание для всех вариантов звучит так (или, возможно, немного изменено, так как могут быть разные издания учебного пособия):
Написать программу вычисления суммы (произведения) конечного числа элементов ряда с использованием цикла с параметром.
Варианты заданий
№ | Сумма (произведение) ряда |
1 | $S_n = \sum\limits_{n = 1}^{50} \frac{\cos(nx) \ + \ \sin(nx)}{n \ + \ 1}$, |
2 | $P_n = \prod\limits_{n = 1}^{10} \frac{n \ \cdot \ \sin(n \ + \ 2)}{n^2 \ + \ 2}$ |
3 | $S_n = \sum\limits_{n = 1}^{25} \frac{n^3 \ + \ 5n^2 \ — \ 7n \ + \ 14 \ + \ 2\cos(n)}{n^5 \ + \ 2n^3 \ — \ 4n \ + \ 11}$ |
4 | $P_n = \prod\limits_{n = 1}^{20} \frac{n^4 \ + \ 10n^3 \ — \ 8n^2 \ + \ 15n \ — \ 2n \ + \ 7}{3n^5 \ + \ 2n^3 \ — \ n \ + \ 17}$ |
5 | $S_n = \sum\limits_{n = 1}^{50} \frac{\sin(nx) \ — \ \cos(nx)}{n^3 \ + \ 4n \ + \ 5}$, $x$ вводится пользователем с клавиатуры |
6 | $P_n = \prod\limits_{n = 1}^{10} \frac{a \ + \ n}{\cos(a^n) \ \cdot \ n}$, $a$ вводится пользователем с клавиатуры |
7 | $S_n = \sum\limits_{n = 1}^{100} \frac{a \ \cdot \ \sin(a^n)}{n \ + \ a}$, |
8 | $P_n = \prod\limits_{n = 1}^{10} \frac{n^x}{n^{x + 1} \ + \ 5n}$, $x$ вводится пользователем с клавиатуры |
9 | $S_n = \sum\limits_{n = 1}^{50} \frac{n \ \cdot \ \sin(n)}{n \ \cdot \ \sin(n) \ + \ 5n \ + \ 4}$ |
10 | $P_n = \prod\limits_{n = 1}^{5} \frac{\cos\frac{1}{n} \ + \ n}{\cos\frac{1}{n} \ + \ n \ + \ n^2}$ |
Образец выполнения (вариант №1)
Условие задания
$S_n = \sum\limits_{n = 1}^{50} \frac{\cos(nx) \ + \ \sin(nx)}{n \ + \ 1}$, $x$ вводится пользователем с клавиатуры |
Решение задачи с использованием макроса на VBA
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 | ' процедура (запускается при помощи макроса), вычисляющая конечную сумму ряда Sub Sum() ' раздел объявления переменны Dim x As Double ' значение, вводимое пользователем в ячейку A2 Dim S As Double ' рассчитываемая сумма конечного ряда Dim n As Integer ' счетчик цикла с параметром Dim current As Double ' значение текущего слагаемого ряда ' производим очистку от прошлых выводов Worksheets("Task1").Cells(2, "B").ClearContents S = 0 ' перед накоплением суммы необходимое стартовое обнуление ' считываем значение переменной х, введенное пользователем в ячейку А2 x = Worksheets("Task1").Cells(2, 1) ' в цикле от 1 до 50 вычисляем очередной член ряда и добавляем к результирующей сумме For n = 1 To 50 Step 1 ' получаем значение текущего члена ряда конечной суммы current = (Cos(n * x) + Sin(n * x)) / (n + 1) ' добавляем значение текущего члена к итоговой сумме S = S + current Next n ' конец цикла со счетчиком ' выводим значение рассчитанной суммы в ячейку B2 Worksheets("Task1").Cells(2, 2) = S End Sub |
Решение задачи с использованием функции на VBA
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 | ' функция (выбираемая пользователем вручную), вычисляющая конечную сумму ряда ' x - входной параметр, значение которого вводит пользователь с клавиатуры в ячейку А2 Function GetSum(x As Double) As Double ' раздел объявления переменны Dim S As Double ' рассчитываемая сумма конечного ряда Dim n As Integer ' счетчик цикла с параметром Dim current As Double ' значение текущего слагаемого ряда ' производим очистку от прошлых выводов Worksheets("Task1").Cells(2, "B").ClearContents S = 0 ' перед накоплением суммы необходимое стартовое обнуление ' в цикле от 1 до 50 вычисляем очередной член ряда и добавляем к результирующей сумме For n = 1 To 50 Step 1 ' получаем значение текущего члена ряда конечной суммы current = (Cos(n * x) + Sin(n * x)) / (n + 1) ' добавляем значение текущего члена к итоговой сумме S = S + current Next n ' конец цикла со счетчиком GetSum = S ' возвращаем результат из функции End Function |
Результаты работы программы
Поскольку интерфейс программы одинаков, то приведем обобщенные результаты.
➡ Важно понимать, что для одного и того же значения переменной $x$, как макрос, так и функция получит одинаковый результат.
ВНИМАНИЕ | Для получения макроса или функции своего варианта пишите на наш электронный адрес proglabs@mail.ru |
💡 Время нашего ответа обычно составляет не более 10 минут. |
Постановка задания (задача №2)
Задание для всех вариантов звучит так (или, возможно, немного изменено, так как могут быть разные издания учебного пособия):
К задаче своего варианта необходимо написать пять программ, используя циклы с предусловием и постусловием.
Варианты заданий
№ | Условие |
1 | Вычислить произведение вводимых пользователем с клавиатуры чисел, если числа считываются до тех пор, пока не будет введена единица. |
2 | Вычислять и выводить в ячейки рабочего листа кубы вводимых пользователем с клавиатуры чисел до тех пор, пока не будет введено $3$. |
3 | Вычислять и выводить в ячейки рабочего листа члены арифметической прогрессии до тех пор, пока очередной член прогрессии не окажется большим $50$. Первый член арифметической прогрессии равен $2$, разность равна $5$. |
4 | Вычислять и выводить в ячейки рабочего листа члены геометрической прогрессии до тех пор, пока очередной член прогрессии не окажется большим $250$. Первый член геометрической прогрессии равен $3$, знаменатель равен $4$. |
5 | Общий член последовательности задан формулой: $a_n = \frac{n^2}{5}$. Вычислить сумму $n$ первых членов последовательности, меньших $75$. |
6 | Общий член последовательности задан формулой: $a_n = \frac{5n}{n^2 \ + \ 1}$. Вычислить сумму $n$ первых членов последовательности, больших $1$. |
7 | Общий член последовательности задан формулой: $a_n = \frac{n}{5} \ + \ 2n \ + \ 1$. Суммировать первые $n$ членов последовательности, до тех пор, пока сумма не окажется большей $100$. Вывести значение суммы и последнего $n$-го члена последовательности. |
8 | Общий член последовательности задан формулой: $a_n = \frac{n}{3} \ + \ n \ + \ 4$. Вычислять произведение первых $n$ членов последовательности до тех пор, пока произведение не окажется большим $1000$. Вывести значение произведения и последнего $n$-го члена последовательности. |
9 | Первый член арифметической прогрессии равен $-50$, разность равна $7$. Вывести на в ячейки рабочего листа все члены данной арифметической прогрессии, меньшие нуля. |
10 | Первый член арифметической прогрессии равен $90$, разность равна $-8$. Вычислить сумму всех положительных членов данной арифметической прогрессии. |
Образец выполнения (вариант №1)
Условие задания
Вычислить произведение вводимых пользователем с клавиатуры чисел, если числа считываются до тех пор, пока не будет введена единица. |
Решение задачи с использованием макросов на VBA
Всего было закодировано $5$ различных макросов для всех видов циклов с пред- и постусловием.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 | ' решение задачи с использование цикла While-Wend Sub While_Wend() ' раздел объявления переменных Dim x As Integer ' значение, вводимое пользователем с клавиатуры Dim P As Long ' накапливаемое произведение вводимых чисел P = 1 ' при расчете произведения следует присвоить изначально результату 1 ' запрашиваем 1ое число от пользователя x = InputBox("Введите число х: ", "Сообщение для пользователя") ' пока пользователь не введет число, равное единице, продолжаем вычисления ' цикл выполняется, пока условие в заголовке цикла является ИСТИННЫМ While (x <> 1) P = P * x ' запрашиваем очередное число от пользователя x = InputBox("Введите число х: ", "Сообщение для пользователя") Wend ' выводим накопленное произведение в соот-щую ячейку листа Excel Worksheets("Task2").Cells(5, "B") = P End Sub |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 | ' решение задачи с использование цикла Do While-Loop Sub Do_While_Loop() ' раздел объявления переменных Dim x As Integer ' значение, вводимое пользователем с клавиатуры Dim P As Long ' накапливаемое произведение вводимых чисел P = 1 ' при расчете произведения следует присвоить изначально результату 1 ' запрашиваем 1ое число от пользователя x = InputBox("Введите число х: ", "Сообщение для пользователя") ' пока пользователь не введет число, равное единице, продолжаем вычисления ' цикл выполняется, пока условие в заголовке цикла является ИСТИННЫМ Do While (x <> 1) P = P * x ' запрашиваем очередное число от пользователя x = InputBox("Введите число х: ", "Сообщение для пользователя") Loop ' выводим накопленное произведение в соот-щую ячейку листа Excel Worksheets("Task2").Cells(6, "B") = P End Sub |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 | ' решение задачи с использование цикла Do Until-Loop Sub Do_Until_Loop() ' раздел объявления переменных Dim x As Integer ' значение, вводимое пользователем с клавиатуры Dim P As Long ' накапливаемое произведение вводимых чисел P = 1 ' при расчете произведения следует присвоить изначально результату 1 ' запрашиваем 1ое число от пользователя x = InputBox("Введите число х: ", "Сообщение для пользователя") ' пока пользователь не введет число, равное единице, продолжаем вычисления ' цикл выполняется, пока условие в заголовке цикла является ЛОЖНЫМ Do Until (x = 1) P = P * x ' запрашиваем очередное число от пользователя x = InputBox("Введите число х: ", "Сообщение для пользователя") Loop ' выводим накопленное произведение в соот-щую ячейку листа Excel Worksheets("Task2").Cells(7, "B") = P End Sub |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 | ' решение задачи с использование цикла Do-Loop While Sub Do_Loop_While() ' раздел объявления переменных Dim x As Integer ' значение, вводимое пользователем с клавиатуры Dim P As Long ' накапливаемое произведение вводимых чисел P = 1 ' при расчете произведения следует присвоить изначально результату 1 ' пока пользователь не введет число, равное единице, продолжаем вычисления ' цикл выполняется, пока условие в заголовке цикла является ИСТИННЫМ Do ' запрашиваем очередное число от пользователя x = InputBox("Введите число х: ", "Сообщение для пользователя") ' если введенное число не равно 1, то пересчитываем произведение If (x <> 1) Then ' пересчитываем произведение P = P * x End If Loop While (x <> 1) ' выводим накопленное произведение в соот-щую ячейку листа Excel Worksheets("Task2").Cells(8, "B") = P End Sub |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 | ' решение задачи с использование цикла Do-Loop Until Sub Do_Loop_Until() ' раздел объявления переменных Dim x As Integer ' значение, вводимое пользователем с клавиатуры Dim P As Long ' накапливаемое произведение вводимых чисел P = 1 ' при расчете произведения следует присвоить изначально результату 1 ' пока пользователь не введет число, равное единице, продолжаем вычисления ' цикл выполняется, пока условие в заголовке цикла является ЛОЖНЫМ Do ' запрашиваем очередное число от пользователя x = InputBox("Введите число х: ", "Сообщение для пользователя") ' если введенное число не равно 1, то пересчитываем произведение If (x <> 1) Then ' пересчитываем произведение P = P * x End If Loop Until (x = 1) ' выводим накопленное произведение в соот-щую ячейку листа Excel Worksheets("Task2").Cells(9, "B") = P End Sub |
Результаты работы программы
Программа имеет следующий интерфейс:
Для тестирования задачи необходимо последовательно запустить каждый из созданных нами ранее $5$ макросов:
Покажем результаты работы программы только при запуске макроса «While — Wend», так как результаты для других макросов будут абсолютно аналогичными.
Будем последовательно вводить следующие числа: $2$, $5$, $4$, $3$, $1$. При вводе числа $1$ программа прекратит свое исполнение и отобразит результат в соответствующей ячейке.
Каким должен быть ответ? Наша цель — найти произведение введенных чисел, то есть ответ будет равен — $2 \ \cdot \ 5 \ \cdot \ 4 \ \cdot \ 3 = 120$.
В конечном итоге, после последовательного запуска всех макросов, в ячейки электронной таблицы будет выведен следующий результат:
💡 Делаем вывод, что все макросы отработали успешно и все заданные циклы с пред- и постусловием отработали корректно.
ВНИМАНИЕ | Для получения $5$ процедур своего варианта пишите на наш электронный адрес proglabs@mail.ru |
💡 Время нашего ответа обычно составляет не более 10 минут. |
Добавить комментарий