Технология выполнения работы
1. Разработать алгоритм для написания программы в виде блок-схемы. 2. Написать программу. 3. Протестировать ее с разными исходными данными.
Содержание отчета 1. Цель работы, условие задачи 2. Алгоритм в виде блок-схемы. 3. Исходный текст программы. 4. Вводимые данные и результаты. 5. Фрагменты экрана с диалоговыми окнами Excel. 6. В программе предусмотреть сбойные ситуации (деление на ноль, извлечение квадратного корня из отрицательного числа и т. д.). 7. Результат работы программы должен иметь наглядный вид.
Вопросы для защиты работы 1. Какая конструкция у оператора повтора? 2. Какие операторы разветвления Вы знаете? 3. Чем заканчивается оператор IF, если в ветке «да» несколько операторов? 4. Как выглядит полная форма оператора IF? 5. Как выглядит оператор IF, если в ветке «нет» отсутствуют операторы? Лабораторная работа № 7
Время выполнения – 8 часов.
Цель работы Научиться использовать язык программирования Visual Basic for Applications (VBA) для разработки модулей в Excel на основе циклических алгоритмов.
Задачи лабораторной работы После выполнения данной работы студент должен знать и уметь: - знать все операторы, используемые в программах; - уметь применять любые из изученных операторов для написания своих модулей; - уметь объяснить написанную программу.
Перечень обеспечивающих средств Для обеспечения выполнения работы необходимо иметь компьютер со следующим математическим обеспечением: операционная система Windows XP, электронные таблицы Excel с приложением в виде языка Visual Basic for Applications.
Общие теоретические сведения VBA – это язык объектно-ориентированного программирования. Основными парадигмами являются объект, свойство, метод, событие, класс и семейство объектов. Объект – это инкапсуляция данных вместе с кодом, предназначенным для их обработки. Семейство – объект, содержащий несколько других объектов того же типа. Классы – это проект, на основе которого будет создан объект, т.е. класс определяет имя объекта, его свойства и действия, над ним выполняемые. А каждый объект, свою очередь, является экземпляром класса. Методы – это действия, выполняемые над объектом. Свойства – это атрибут объекта, определяющий его характеристики: размер, цвет, положение на экране или состояние (доступность, видимость). События – это действия, распознаваемые объектом.
Пример 1. В массиве чисел М (10) очистить клетки с нулевыми значениями.
Запись программы в виде блок-схемы (рис. 1) и визуальное представление ввода данных и вывода результата (рис. 2): Рисунок 1 – Электронная таблица с исходными данными
Рисунок 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.Разработать алгоритм решения задачи и составить программу согласно варианта. 1. Определить порядковые номера нулей в массиве. 2. Все отрицательные элементы массива заменить нулями. Выдать сообщение о количестве таких замен. 3. Найти порядковый номер минимального числа в массиве. 4. Найти значение и координаты первого по порядку положительного элемента в массиве. 5. Найти количество единиц в массиве. 6. Каких чисел в массиве больше: положительных или отрицательных? (массив может содержать нулевые значения). 7. Исходные данные: В таблице 10 строк. Первый столбец – фамилия работника, второй – стаж работника. 8. По стажу работника определить, к какой группе он относится, если 1 группа – стаж до 3-х лет, 2 группа – до 5 лет, 3 группа – до 10 лет, 4 группа – свыше 10 лет. 9. Найти сумму диагональных элементов блока ячеек, состоящего из 5 строк и 5 столбцов. 10. Двадцати переменным массива присвоить одно и то же значение, равное наибольшему из них. 11. Дан массив чисел. В клетке С1 записано некоторое число. Определить порядковый номер этого числа в массиве. Если в массиве такого числа нет, выдать об этом сообщение. 12. Просуммировать положительные и отрицательные числа в массиве. Записать полученные суммы в ячейки В1 и В2. (в массиве могут быть нулевые значения). 13. В клетку А1 записать число, если количество положительных элементов массива больше количества отрицательных. В противном случае записать в клетку А1 любой текст. 14. Найти сумму положительных элементов массива, имеющих индекс 3, 5, 7 и т.д. 15. В блоке ячеек записана матрица чисел. Ячейки с отрицательными значениями закрасить синим цветом, с положительными – красным, с нулями – желтым.
Задание 2. По заданным значениям a, x и n найти сумму ряда.
Задание 3. Решить задачу для своего варианта на одномерный массив двумя способами: с данными на рабочем листе и вводимыми по тексту программы. 1. Вычислить сумму элементов, стоящих на чётных местах в последовательности х (20), используя оператор цикла do _ loop until 2. Вывести на печать номера элементов, попавших в диапазон (а, b) для последовательности а (30), используя оператор цикла for _ next. 3. Вывести на печать количество элементов массива А1, А2, … А20, попавших в интервал [2, 5] и их сумму, используя оператор цикла do _ loop while. 4. Вывести на печать номера элементов последовательности Х (20), значения которых равны заданному числу С, используя оператор цикла for _ next. 5. Вычислить произведение элементов, стоящих на четных местах в последовательности Х (20), используя оператор цикла do while _ loop. 6. Найти количество элементов последовательности А ( 20), значения которых равны нулю, используя оператор цикла do _ loop until. 7. Вывести на печать номера и значения положительных элементов последовательности Х (20), используя оператор цикла do until _ loop. 8. Вывести на печать номера с отрицательными значениями элементов для последовательности Х (20), используя оператор цикла for _ next. 9. Найти минимальное значение из значений элементов последовательности А1, А2, …, А20, используя оператор цикла do _ loop while. 10. Найти минимальное значение из значений элементов последовательности Х1, Х2, … Х20, используя оператор цикла do _ loop until. 11. В последовательности Х (20) вывести на печать номера элементов, значения которых равны t, используя оператор цикла do until _ loop. 12. Найти количество отрицательных элементов в массиве С1, С2, …, С20, используя оператор цикла do until _ loop. 13. Дана последовательность Х (10). Найти сумму отрицательных элементов и вывести на печать номера этих элементов, используя оператор цикла do _ loop while. 14. Вычислить произведение элементов, стоящих на нечетных местах в последовательности Х (20), используя оператор цикла do while _ loop. 15. Дана последовательность Х1, Х2, …, Х20. Заменить в ней отрицательные значения элементов на их квадраты. Вывести на печать полученную последовательность, используя оператор цикла do while _ loop.
Задание 4. Решить задачу для своего варианта на двумерный массив двумя способами: с данными на рабочем листе и вводимыми по тексту программы. 1. Задан массив А (6, 5). Найти номер строки и номер столбца с минимальным значением. 2. Задан массив А (4, 5). Найти минимальное значение. 3. Задан массив х (5, 5). Найти сумму отрицательных значений в каждой строке. 4. Задан массив х (5, 5). Найти сумму положительных значений в каждом столбце. 5. Задан массив с (5, 5) и число а. Найти количество элементов, равных по значению а. 6. Задан массив с (5, 5) и число а. Найти сумму элементов, равных по значению а. 7. Задан массив х (5, 5) и число а. Найти номера строк и столбцов элементов, равных по значению а. 8. Задан массив х (5, 5) и интервал (а, b). Найти номера строк и столбцов элементов, попавших по значению в этот интервал. 9. Задан массив х (5, 5) и интервал х [ а, b ]. Найти количество элементов, попавших по значению в этот интервал. 10. Задан массив х (5, 5) и интервал х [ а, b ]. Найти сумму элементов, попавших по значению в этот интервал. 11. Задан массив А (6, 4). Найти номер строки и номер столбца с максимальным значением. 12. Задан массив А (4, 5). Найти максимальное значение. 13. Задан массив А (6, 3). Найти номер строки и номер столбца с максимальным значением в каждом столбце. 14. Задан массив А (5, 5). Найти номер строки и номер столбца с максимальным значением в каждой строке. 15. Задан массив А (4, 5). Найти максимальное значение в каждой строке.
Задание 5. Решить задачи по условию 3 и 4 задания с использованием подпрограмм.
|