Технология выполнения работы

  1. Разработать алгоритм для написания программы в виде блок-схемы.
  2. Написать программу.
  3. Протестировать ее с разными исходными данными.

Содержание отчета

  1. Цель работы, условие задачи
  2. Алгоритм в виде блок-схемы.
  3. Исходный текст программы.
  4. Вводимые данные и результаты.
  5. Фрагменты экрана с диалоговыми окнами Excel.
  6. В программе предусмотреть сбойные ситуации (деление на ноль, извлечение квадратного корня из отрицательного числа и т. д.).
  7. Результат работы программы должен иметь наглядный вид.

Вопросы для защиты работы

  1. Какая конструкция у оператора повтора?
  2. Какие операторы разветвления Вы знаете?
  3. Чем заканчивается оператор IF, если в ветке «да» несколько операторов?
  4. Как выглядит полная форма оператора IF?
  5. Как выглядит оператор IF, если в ветке «нет» отсутствуют операторы?

Лабораторная работа № 3.

Циклические алгоритмы. Работа с массивами

Время выполнения

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 задания с использованием подпрограмм.

Задания 6. Составить подпрограммы:

1. Сколько положительных элементов содержит матрица размера 10х10, если a [i,j]=sin(i+j/2).

2. Определить сумму отрицательных элементов матрицы размера 20х10, если a [i,j]=cos(i-5*j).

3. В матрице размера 3х5 найти среднее арифметическое каждого из столбцов.

4. В матрице размера 4х3 найти значение максимального элемента в каждой строке.

5. В матрице размера 4х3 найти разность между суммой и произведением элементом.

6. Найти сумму и количество положительных элементов матрицы размера 4х4.

7. Найти место расположения максимального по модулю элемента матрицы размера 5х3 указав номер строки и столбца.

8. Найти разность между максимальным элементом матрицы размера 4х4 и суммой ее положительных элементов.

9. Определить сумму и произведение элементов матрицы размера 4х5, имеющих оба четных индекса.

10.Найти сумму элементов матрицы размера 4х4 в четных строках и произведение элементов в нечетных строках.

11.Найти среднее арифметическое наибольшего и наименьшего значений элементов матрицы размера 4х3.

12.В матрице размера 5х4 найти сумму наибольших значений элементов ее строк.

13.В матрице размера 6х3 найти номера строк, все элементы которых положительны.

14.В матрице размера 4х4 найти номера (i,j) и определить сумму отрицательных элементов.

15.Преобразовать матрицу размера 4х4 по правилу: вторую строку сделать четвертым столбцом, а четвертый столбец - второй строкой.

16.В матрице размера 4х4 найти сумму элементов над главной диагональю.

17.В матрице размера 4х4 найти максимальный по модулю элемент на побочной диагонали.

18.Преобразовать матрицу размера 4х4, поменяв местами в каждой строке элементы главной и побочной диагонали.

19.Определить является ли целочисленная матрица размером 4х4 симметричной относительно главной диагонали.

20.Сделать целочисленную матрицу размером 4х4 симметричной относительно главной диагонали, заменяя при отсутствии симметрии меньший элемент на больший.

21.В целочисленной матрице размера 4х5 все элементы с наибольшим значением заменить суммой положительных элементов.

22.В целочисленной матрице размера 4х5 определить количество наибольших по модулю элементов и их номера.

23.В матрице размером 5х3 поменять местами строку с наибольшим элементом и строку с наименьшим элементом.

24.В матрице размера 4х3, все элементы которые различны, найти произведение элементов строки, содержащие наибольший по модулю элемент матрицы.

25.Если в матрице размера 4х4 произведение элементов побочной диагонали отрицательно, то все элементы на главной диагонали заменить на 0, если положительно - на 1.

26.В символьной матрице размера 5х5 заменить все буквы W на букву Q, если количество букв W больше 3.

27.В символьной матрице размера 4х4 определить количество цифр и если оно больше 2, то все цифры заменить на &.

28.В символьной матрице размера 5х5 определить количество цифр и все цифры заменить латинскими буквами по правилу: 1-А; 2-В; 3-С... О-J (не используя 10 раз подряд оператор IF).

29.Определить, сколько прописных букв латинского алфавита содержит символьная матрица 4х5.

30.Определить сумму и произведение цифр, расположенных на главной диагонали символьной матрицы размера 5х5.


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: