Варианты заданий
Задание 1. Составить блок-схему и написать программу вычисления функции пользователя
Задание 2. Составить блок-схему и функцию пользователя согласно условию задачи.
1. Составить блок-схему и функцию пользователя для определения премии торговому агенту от суммы совершенной им сделки. Если объем сделки до 3000 рублей, то премия 1.5 %; если объем до 10000, то – 3 %; если выше 10000, то – 5 %. Предусмотреть проверку корректности данного «объем сделки».
2. Составить блок-схему и разработать функцию пользователя для вычисления годовой процентной ставки контракта по кредиту, взятого на определенный срок при известных сумме долга и сумме, подлежащей возврату. Используйте формулу:
,
где P – сумма кредита, S – сумма, подлежащая возврату, Т – срок кредита.
Предусмотреть проверку корректности данных.
Для проверки и отладки программы используйте следующие исходные данные: Т = 4 месяца, Р = 200 000, S = 210 000.
3. Составить блок-схему и разработать функцию пользователя для вычисления надбавки к стипендии по результатам сессии. Размер стипендии составляет 2 МРОТ (минимальный размер оплаты труда). Если три экзамена сданы на "5", то надбавка составляет 50 %, если есть одна "4" (при остальных "5"), то надбавка составит 25 %, если есть хотя бы одна "2", то стипендия не назначается, т. е. равна "0".
4. Составить блок-схему и разработать функцию пользователя для расчета суммы вклада с начисленным процентом в зависимости от вида вклада: до востребования – 2 %, праздничный – 5 %, срочный – 3 %.
Для проверки и отладки программы используйте данные для всех видов вкладов.
5. Составить блок-схему и разработать функцию пользователя для расчета реальной доходности с учетом налога на прибыль, которая вычисляется по формуле:
.
где i – годовая процентная ставка, g - налог на прибыль, выраженный в процентах, h - годовой темп инфляции, вычисляемый по формуле:
h=(1+h1/12)12- 1, где h1/12 – месячный темп инфляции.
Предусмотреть проверку корректности данных.
Для проверки и отладки программы используйте следующие исходные данные: i =60 %, h1/12 =3 %, g =25 %.
6. Составить блок-схему и разработать функцию пользователя расчета надбавки к окладу в зависимости от стажа работы сотрудников предприятия. Если стаж работы меньше 5 лет, то надбавка составляет 0 %, если стаж от 5 до 10 лет, то надбавка – 5 %, если стаж больше 10 лет, то надбавка – 10 %.
7. Составить блок-схему и разработать функцию пользователя определения комиссионных менеджеру по продажам от объема проданного товара. Если объем продажи до 8 000 рублей, то комиссионные 6 %; если объем до 16 000 рублей, то – 8 %; если объем до 32 000 рублей, то – 10 %; если выше 32 000, то – 12 %. Для обозначения ограничений объема продажи используйте константы.
8. Составить блок-схему и разработать функцию пользователя для расчета премиальных, выплачиваемых рабочему, размер выплаты которых определяется в зависимости от оклада и процента перевыполнения нормы выработки:
Ниже 100% - премия не назначается, т. е. равна нулю,
100% - премия 20% от оклада,
101-110% - премия 30% от оклада,
Выше 110% - премия 40% от оклада.
9. Составить блок-схему и разработать функцию пользователя, определяющую площадь треугольника по его сторонам по следующей формуле:
,
где a, b, c – стороны треугольника, р – полупериметр:
.
Предусмотреть проверку корректности данных.
10. Составить блок-схему и разработать функцию пользователя возвращающую большее из трех значений с указанием имени переменной.
11. Составить блок-схему и разработать функцию пользователя возвращающую меньшее из трех значений с указанием имени переменной.
12. Составить блок-схему и разработать функцию пользователя, возвращающую сумму первой и третьей по величине значений.
13. Составить блок-схему и разработать функцию пользователя, вычисляющую стоимость потребляемой энергии компанией в зависимости от установленной расценки и количества потребляемой энергии:
Первые 240 кВт/час: 1,62руб. за кВт/час,
Следующие 300 кВт/час: 2,10руб. за кВт/час,
Свыше 540 кВт/час: 2,76руб. за кВт/час.
Для обозначения тарифов в процедуре использовать константы.
14. Составить блок-схему и разработать функцию пользователя начисления премии сотрудникам малого предприятия в зависимости от стажа работы и объема продажи товаров. Если стаж работы меньше 2 лет и объем продажи больше 80 000руб., то премия составляет 1.5 %. Если стаж от 2 до 5 лет, а объем продажи больше 100 000 руб., то премия – 5 %, если стаж больше 5 лет, а объем продажи выше 100 000 руб., то премия – 7 %, в остальных случаях - премия – 1 % .
15. Составить блок-схему и разработать функцию пользователя начисления процента удержания у работников завода от начисленной заработной платы и количества иждивенцев по следующему правилу:
при количестве иждивенцев более трех – 0 %;
при трех иждивенцев – 5 %;
при двух иждивенцев – 10 %;
при одном иждивенце – 12 %;
если нет иждивенцев – 14 %. Технология выполнения работы
Разработать алгоритм для написания программы в виде блок-схемы.
Написать программу.
Протестировать ее с разными исходными данными.
Содержание отчета
Цель работы, условие задачи
Алгоритм в виде блок-схемы.
Исходный текст программы.
Вводимые данные и результаты.
Фрагменты экрана с диалоговыми окнами Excel.
В программе предусмотреть сбойные ситуации (деление на ноль, извлечение квадратного корня из отрицательного числа и т. д.).
Результат работы программы должен иметь наглядный вид.
Вопросы для защиты работы
Какая конструкция у оператора повтора?
Какие операторы разветвления Вы знаете?
Чем заканчивается оператор IF, если в ветке «да» несколько операторов?
Как выглядит полная форма оператора IF?
Как выглядит оператор IF, если в ветке «нет» отсутствуют операторы?
Лабораторная работа № 4 Visual Basic for Applications (VBA). Циклические алгоритмы. Работа с массивами Время выполнения – 8 часов. Цель работы
Научиться использовать язык программирования Visual Basic for Applications (VBA) для разработки модулей в Excel на основе циклических алгоритмов. Задачи лабораторной работы
После выполнения данной работы студент должен знать и уметь:
знать все операторы, используемые в программах;
уметь применять любые из изученных операторов для написания своих модулей;
уметь объяснить написанную программу.
Перечень обеспечивающих средств
Для обеспечения выполнения работы необходимо иметь компьютер со следующим математическим обеспечением: операционная система Windows XP, электронные таблицы Excel с приложением в виде языка Visual Basic for Applications. Общие теоретические сведения
VBA – это язык объектно-ориентированного программирования.
Основными парадигмами являются объект, свойство, метод, событие, класс и семейство объектов.
Объект – это инкапсуляция данных вместе с кодом, предназначенным для их обработки.
Семейство – объект, содержащий несколько других объектов того же типа.
Классы – это проект, на основе которого будет создан объект, т.е. класс определяет имя объекта, его свойства и действия, над ним выполняемые. А каждый объект, свою очередь, является экземпляром класса.
Методы – это действия, выполняемые над объектом.
Свойства – это атрибут объекта, определяющий его характеристики: размер, цвет, положение на экране или состояние (доступность, видимость).
События – это действия, распознаваемые объектом. Пример 1.
В массиве чисел М(10) очистить клетки с нулевыми значениями. Запись программы в виде блок-схемы (рис. 1) и визуальное представление ввода данных и вывода результата (рис. 2):
Рисунок 1 – Электронная таблица с исходными данными
Блок - схема
| Программа
|
|
Sub ОбнулениеКлетокС_НулевымиЗначениями()
For i = 1 To 10
If Cells(i, 1) = 0 Then Cells(i, 1).Clear
Next i
End Sub
|
Рисунок 2 – Результат работы программы Пример 2.
Выявить, есть ли в массиве число 10? Если есть, на каком месте оно стоит (известно, что число может встретиться несколько раз). Программный код
Sub Число()
Dim A As Variant
Dim i, k As Integer
i = 1
k = 0
A = Range("A1:A10")
For i = 1 To 10
If A(i, 1) = 10 Then
MsgBox ("Номер ячейки, содержащей число 10 - " & i)
k = k + 1
End If
Next i
MsgBox ("Число 10 встретилось следующее количество раз - " & k)
End Sub Пример 3.
Вычислить произведение ряда:
Программный код
Sub Main()
Dim x, n, res As Double
x = 3
n = 4
res = 1
For i = 2 To n
res = res * (i * x / (2 * i - 1))
Next i
MsgBox "res=" & CStr(res)
End Sub
Private Sub CommandButton4_Click()
Dim x, n, res As Double
x = Cells(36, 1)
n = Cells(36, 2)
res = 1
For i = 2 To n
res = res * (i * x / (2 * i - 1))
Next i
Cells(38, 2) = res
End Sub Визуальное представление ввода данных и вывода результата (рис. 3):
Рисунок 3 – Результат работы программы Пример 4.
Найти максимальное значение из значений элементов последовательности x1, x2, …, x20 (одномерного массива), используя оператор do while…loop Программный код
Private Sub CommandButton5_Click()
Dim x(20) As Double
Dim res, res1 As Double
i = 1
res = 0
Do While i < 20
x(i) = Cells(44 + i, 1)
If x(i) > res Then res = x(i)
i = i + 1
Loop
Cells(47, 4) = res
End Sub Визуальное представление ввода данных и вывода результата (рис. 4):
Рисунок 4 – Результат работы программы Пример 5.
Задан двумерный массив F(4 to 85, 2 to 6). Найти сумму элементов этого массива. Программный код
Private Sub CommandButton1_Click()
Dim f(6) As Integer
For j = 4 To 8
res = 0
For i = 2 To 6
f(i) = Cells(j, i)
res = res + f(i)
Next i
Cells(j, 7) = res
Next j
End Sub Пример 6.
Найти в процедуре сумму в каждом столбце. Программный код
Sub kol(ByRef x() As Integer, ByVal n As Integer, ByVal m As Integer)
Dim i, j, k(2) As Integer
For j = 0 To m
k(j) = 0
For i = 0 To n
k(j) = k(j) + x(i, j)
Next i
MsgBox "k(j)=" & CStr(k(j))
Next j
End Sub
Sub commandbutton1_click()
Dim i, j, n, m, x(4, 2) As Integer
Dim k(2) As Integer
n = 4
m = 2
For i = 0 To n
For j = 0 To m
x(i, j) = Cells(i + 1, j + 1)
Next j
Next i
kol x, n, m
End Sub Пример 7.
В процедуре найти сумму элементов 1 и 3 строки и записать их на место элементов 1 строки. Программный код
Sub kol(ByRef x() As Integer, ByVal n As Integer, ByVal m As Integer, k() As Integer)
Dim i, j As Integer
For j = 0 To m
x(1, j) = x(1, j) + x(3, j)
Next j
End Sub
Sub commandbutton1_click()
Dim i, j, n, m, x(4, 4) As Integer
Dim k(2) As Integer
n = 4
m = 4
For i = 0 To n
For j = 0 To m
x(i, j) = Cells(i + 1, j + 1)
Next j
Next i
kol x, n, m, k
For j = 0 To m
For i = 0 To n
Cells(i + 7, j + 1).Value = x(i, j)
Next i
Next j
End Sub Варианты заданий
Задание 1. Разработать алгоритм решения задачи и составить программу согласно варианта.
Определить порядковые номера нулей в массиве.
Все отрицательные элементы массива заменить нулями. Выдать сообщение о количестве таких замен.
Найти порядковый номер минимального числа в массиве.
Найти значение и координаты первого по порядку положительного элемента в массиве.
Найти количество единиц в массиве.
Каких чисел в массиве больше: положительных или отрицательных? (массив может содержать нулевые значения).
Исходные данные: В таблице 10 строк. Первый столбец – фамилия работника, второй – стаж работника.
По стажу работника определить, к какой группе он относится, если 1 группа – стаж до 3-х лет, 2 группа – до 5 лет, 3 группа – до 10 лет, 4 группа – свыше 10 лет.
Найти сумму диагональных элементов блока ячеек, состоящего из 5 строк и 5 столбцов.
Двадцати переменным массива присвоить одно и то же значение, равное наибольшему из них.
Дан массив чисел. В клетке С1 записано некоторое число. Определить порядковый номер этого числа в массиве. Если в массиве такого числа нет, выдать об этом сообщение.
Просуммировать положительные и отрицательные числа в массиве. Записать полученные суммы в ячейки В1 и В2. (в массиве могут быть нулевые значения).
В клетку А1 записать число, если количество положительных элементов массива больше количества отрицательных. В противном случае записать в клетку А1 любой текст.
Найти сумму положительных элементов массива, имеющих индекс 3, 5, 7 и т.д.
В блоке ячеек записана матрица чисел. Ячейки с отрицательными значениями закрасить синим цветом, с положительными – красным, с нулями – желтым.
Задание 2. По заданным значениям a, x и n найти сумму ряда.
-
1.
| 9.
| 2.
| 10.
| 3.
| 11.
| 4.
| 12.
| 5.
| 13.
| 6.
| 14.
| 7.
| 15.
| 8.
|
|
Задание 3. Решить задачу для своего варианта на одномерный массив двумя способами: с данными на рабочем листе и вводимыми по тексту программы.
Вычислить сумму элементов, стоящих на чётных местах в последовательности х (20), используя оператор цикла do_loop until
Вывести на печать номера элементов, попавших в диапазон (а, b) для последовательности а(30), используя оператор цикла for_next.
Вывести на печать количество элементов массива А1, А2, … А20, попавших в интервал [2, 5] и их сумму, используя оператор цикла do_loop while.
Вывести на печать номера элементов последовательности Х(20), значения которых равны заданному числу С, используя оператор цикла for_next.
Вычислить произведение элементов, стоящих на четных местах в последовательности Х(20), используя оператор цикла do while_loop.
Найти количество элементов последовательности А(20), значения которых равны нулю, используя оператор цикла do_loop until.
Вывести на печать номера и значения положительных элементов последовательности Х(20), используя оператор цикла do until_loop.
Вывести на печать номера с отрицательными значениями элементов для последовательности Х(20), используя оператор цикла for_next.
Найти минимальное значение из значений элементов последовательности А1, А2,…, А20, используя оператор цикла do_ loop while.
Найти минимальное значение из значений элементов последовательности Х1, Х2, … Х20, используя оператор цикла do_loop until.
В последовательности Х(20) вывести на печать номера элементов, значения которых равны t, используя оператор цикла do until_loop.
Найти количество отрицательных элементов в массиве С1, С2,…, С20, используя оператор цикла do until_loop.
Дана последовательность Х(10). Найти сумму отрицательных элементов и вывести на печать номера этих элементов, используя оператор цикла do_loop while.
Вычислить произведение элементов, стоящих на нечетных местах в последовательности Х(20), используя оператор цикла do while_loop.
Дана последовательность Х1, Х2, …, Х20. Заменить в ней отрицательные значения элементов на их квадраты. Вывести на печать полученную последовательность, используя оператор цикла do while_loop.
Задание 4. Решить задачу для своего варианта на двумерный массив двумя способами: с данными на рабочем листе и вводимыми по тексту программы.
Задан массив А(6,5). Найти номер строки и номер столбца с минимальным значением.
Задан массив А(4,5). Найти минимальное значение.
Задан массив х(5,5). Найти сумму отрицательных значений в каждой строке.
Задан массив х(5,5). Найти сумму положительных значений в каждом столбце.
Задан массив с(5,5) и число а. Найти количество элементов, равных по значению а.
Задан массив с(5,5) и число а. Найти сумму элементов, равных по значению а.
Задан массив х(5,5) и число а. Найти номера строк и столбцов элементов, равных по значению а.
Задан массив х(5,5) и интервал (а,b). Найти номера строк и столбцов элементов, попавших по значению в этот интервал.
Задан массив х(5,5) и интервал х[а,b]. Найти количество элементов, попавших по значению в этот интервал.
Задан массив х(5,5) и интервал х[а,b]. Найти сумму элементов, попавших по значению в этот интервал.
Задан массив А(6,4). Найти номер строки и номер столбца с максимальным значением.
Задан массив А(4,5). Найти максимальное значение.
Задан массив А(6,3). Найти номер строки и номер столбца с максимальным значением в каждом столбце.
Задан массив А(5,5). Найти номер строки и номер столбца с максимальным значением в каждой строке.
Задан массив А(4,5). Найти максимальное значение в каждой строке.
Задание 5. Решить задачи по условию 3 и 4 задания с использованием подпрограмм. |