Лабораторные VBA
.pdfначало |
|
1 |
1 |
a,b,n,eps |
16 |
|
s,st,delta,it |
2 |
|
st=F(b)-F(a) |
|
3 |
конец |
|
|
it=0 |
|
4 |
|
dx=(b-a)/2 |
|
5 |
|
s=(fa+fb)/2 |
|
6 |
|
x=a, i=1 |
условие внутреннего цикла |
|
|
7 |
не |
i<=n |
|
8 да |
|
x=x+dx |
|
9 |
|
s=s+f(x) |
|
10 |
|
i=i+1 |
|
11 |
|
s=s*dx |
|
12 |
вычисление погрешности |
delta=(s-st)/st |
|
13 |
удвоение числа разбиения |
n=n*2 |
|
14 |
|
it=it+1 |
|
|
условие внешнего цикла |
15delta<eps |
|
1 |
|
Рисунок 5.2 – Схема алгоритма программы
Программа, реализованная в соответствии с алгоритмом (рисунок 5.2), имеет вид:
Dim A As Double, B As Double, N As Integer, S As Double, St As Double, delta As Double, dX As Double
Dim X As Double, I As Integer, eps As Double, It As Integer
Private Sub CommandButton1_Click() A = Val(TextBox1.Text)
B = Val(TextBox2.Text)
N = Val(TextBox3.Text) eps = Val(TextBox4.Text)
St = (B - Sin(B)) - (A - Sin(A)) It = 0
Do
dX = (B - A) / N
S = (((Sin(A)) ^ 2 / (1 + Cos(A))) + ((Sin(B)) ^ 2 / (1 + Cos(B)))) / 2 X = A
For I = 2 To N - 1
X = X + dX
S = S + (Sin(X)) ^ 2 / (1 + Cos(X))
Next I
S = S * dX
delta = Abs((St - S) / St) N = N * 2
It = It + 1
Loop While delta > eps
TextBox5.Text = Str(S)
TextBox6.Text = Str(St)
TextBox7.Text = Left(Str(delta), 5) + Right(Str(delta), 4)
TextBox8.Text = Str(It)
End Sub
Лабораторная работа № 6
ОБРАБОТКА ДВУМЕРНЫХ МАССИВОВ
Цель работы - овладение навыками алгоритмизации и программирования структур с вложенными циклами, навыками использования приемов программирования во вложенных циклах, способами ввода и вывода двумерных массивов.
Задания для самостоятельной подготовки
1.Изучить:
-правила организации вложенного цикла с учетом порядка перебора элементов двумерного массива;
-правила использования приемов программирования в структурах с вложенными циклами;
-способы ввода и вывода матриц, имеющиеся в языке программирова-
ния.
2. Разработать алгоритм решения в соответствии с заданием.
3. Создать форму с необходимыми объектами.
4. Составить программу решения задачи.
5. Подготовить тестовый вариант программы и исходных данных.
Задание к работе
1.Обработать на ЭВМ матрицу в соответствии с вариантом задания, указанного в таблице 6.1.Результаты и исходную матрицу представить в общепринятом виде.
2.Проверить правильность выполнения программы с помощью тестового варианта.
Таблица 6.1
Ва- |
Имя мат- |
|
Условия |
|
ри- |
рицы и |
Действия |
и огра- |
|
ант |
размеры |
|
ничения |
|
1 |
2 |
3 |
4 |
|
|
|
Вычислить и запомнить сумму и число положи- |
|
|
1 |
А(10,15) |
тельных элементов каждого столбца матрицы. |
|
|
|
|
Результаты вывести в виде двух строк. |
|
|
|
|
Вычислить и запомнить суммы и числа элемен- |
N 20 |
|
2 |
А(N,M) |
тов каждой строки матрицы. Результаты вывести |
||
M 15 |
||||
|
|
в виде двух столбцов. |
||
|
|
|
||
3 |
В(N,N) |
Вычислить сумму и число элементов матрицы, |
N 12 |
|
находящихся под главной диагональю и на ней. |
||||
|
|
|
||
|
|
Вычислить сумму и число положительных эле- |
|
|
4 |
С(N,N) |
ментов матрицы, находящихся над главной диа- |
N 12 |
|
|
|
гональю. |
|
|
|
|
Записать на место отрицательных элементов |
|
|
5 |
D(K,K) |
матрицы нули и вывести ее в общепринятом ви- |
K 10 |
|
|
|
де. |
|
|
|
|
Записать на место отрицательных элементов |
|
|
6 |
D(10,10) |
матрицы нули, а на место положительных - еди- |
|
|
ницы. Вывести на нижнюю треугольную матри- |
|
|||
|
|
цу в общепринятом виде. |
|
Продолжение табл. 6.1
1 |
2 |
3 |
4 |
|
|
|
Найти в каждой строке матрицы максимальный |
|
|
|
|
и минимальный элементы и поместить их на ме- |
N 20 |
|
7 |
F(N,M) |
сто первого и последнего элемента строки соот- |
||
M 10 |
||||
|
|
ветственно. Матрицу вывести в общепринятом |
||
|
|
|
||
|
|
виде. |
|
|
|
|
Транспонировать матрицу и вывести элементы |
|
|
8 |
F(10,8) |
главной диагонали и диагонали, расположенной |
|
|
под главной. Результаты разместить в двух стро- |
|
|||
|
|
|
||
|
|
ках. |
|
|
|
|
Для целочисленной матрицы найти для каждой |
|
|
9 |
N(10,10) |
строки число элементов, кратных пяти, и наи- |
|
|
|
|
большее из полученных результатов. |
|
|
|
|
Из положительных элементов матрицы N сфор- |
|
|
|
|
мировать матрицу М (10, KMAX), располагая их |
|
|
|
|
в строках матрицы подряд, где KMAX - макси- |
|
|
10 |
N(10,10) |
мальное число положительных элементов строки |
|
|
|
|
матрицы N. Записать нули на место отсутст- |
|
|
|
|
вующих элементов. Вывести обе матрицы в об- |
|
|
|
|
щепринятом виде. |
|
|
|
|
Найти в каждой строке наибольший элемент и |
|
|
11 |
Р(N,N) |
поменять его местами с элементом главной диа- |
N 15 |
|
гонали. Вывести полученную матрицу в обще- |
||||
|
|
|
||
|
|
принятом виде. |
|
|
12 |
R(K,N) |
Найти наибольший и наименьший элементы |
K 20 |
|
матрицы и поменять их местами. |
N 10 |
|||
|
|
|||
|
|
Вывести исходные данные в первые 24 строки и |
|
|
|
|
первые 7 столбцов. Вычислит среднее арифме- |
|
|
|
|
тическое значение элементов каждой строки и |
|
|
13 |
S(25,8) |
записать его в 8-й столбец, а также среднее |
|
|
|
|
арифметическое каждого столбца и записать его |
|
|
|
|
в 25-ю строку. Вывести полученную матрицу в |
|
|
|
|
общепринятом виде. |
|
|
|
|
Найти строку с наибольшей и наименьшей сум- |
N 20 |
|
14 |
T(N,M) |
мой элементов. Вывести найденные строки и |
||
M 15 |
||||
|
|
суммы их элементов. |
||
|
|
|
||
|
|
Упорядочить по возрастанию элементы каждой |
|
|
15 |
V(15,10) |
строки матрицы. Вывести полученную матрицу |
|
|
|
|
в общепринятом виде. |
|
Пример выполнения работы
Выполнить на ЭВМ решение задачи. Найти среднее арифметическое
членов массива M(N,N), N=10.
Программа состоит из двух процедур. Первая процедура организует массив с использованием функции RND и выводит массив в ListBox1 построчно с использованием метода AddItem, вторая обрабатывает массив и выводит результат в окно MsgBox.
Для оформления интерфейса создадим форму пользователя:
-заходим в редактор VBA (Alt+F11);
-в меню выбираем команду: Insert→UserForm;
-изменяем название формы Caption (в окне Properties UserForm1) на «Иванов И.И. гр.101317 Лабораторная работа №6»;
-вставляем в форму из панели инструментов Toolbox/Controls необходимые объекты и изменяем их заголовки как показано на рисунке 6.1.
Двойным щелчком по кнопке «Задать массив» заходим в окно редактирования кода программы. В открывшемся окне набираем код процедур, алгоритмы которых представлены на рисунках 6.2 и 6.3.
Рисунок 6.1 – Вид интерфейса программы
Программа, реализующая алгоритмы решения задачи на VBA, имеет
вид:
Const N = 10
Dim M(1 To N, 1 To N) As Integer
Private Sub CommandButton1_Click()
Label2.Caption = "Исходный массив"
Randomize
For i = 1 To N
L = ""
For j = 1 To N
начало
1
Randomize
2 i<=N |
нет |
да
3
L=” ”
4 j<=N |
нет |
да
5
M(i,j)=RND99
6
L=L+" "+ Str(M(i,j))
7
j=j+1
8
L
9
i=i+1
инициализация генератора случайных чисел
условие (начало) внешнего цикла
создание пустой строки
условие (начало) внутреннего цикла
присвоение члену массива случайного числа
добавления числа в строку
увеличение параметра внутреннего цикла
вывод строки (ListBox.AddItem)
увеличение параметра внешнего цикла
конец Рисунок 6.2 – Схема алгоритма ввода-вывода двумерного массива
начало
1
|
S=0 |
|
2 |
i<=N |
нет |
|
да |
|
3 |
j<=N |
нет |
да
4
S=S+M(i,j)
5
j=j+1
6
i=i+1
7
S=S/(N*N)
8
S
конец
условие (начало) внешнего цикла
условие (начало) внутреннего цикла
расчет суммы элементов массива
увеличение параметра внутреннего цикла
увеличение параметра внешнего цикла
расчет среднего арифметического
вывод среднего арифметического
(MsgBox)
Рисунок 6.3 – Схема алгоритма расчета ввода-вывода двумерного массива
M(i, j) = Rnd * 99
If M(i, j) > 9 Then
L = L + " " + Str(M(i, j))
Else
L = L + " " + Str(M(i, j))
End If
Next j
ListBox1.AddItem (L)
Next i
End Sub
Private Sub CommandButton2_Click()
S = 0
For i = 1 To N
For j = 1 To N
S = S + M(i, j)
Next j
Next i
Sr = S / (N * N)
Res = MsgBox(Sr, , "Среднее арифметическое")
End Sub
Лабораторная работа № 7
ПРОГРАММИРОВАНИЕ И ИСПОЛЬЗОВАНИЕМ ПОДПРОГРАММ ПОЛЬЗОВАТЕЛЯ
Цель работы - овладение навыками алгоритмизации и программирования задач с использованием процедур и функций пользователя, овладение навыками написания функций и обращения к ним.
Задания для самостоятельной подготовки
1. Изучить:
-правила записи подпрограмм различных видов и способов обращений
кним;
-способы передачи параметров в подпрограмму;
-правила записи программ, использующих подпрограммы различных
видов;
-порядок выполнения программ, использующих подпрограммы.
2.Разработать алгоритм решения в соответствии с заданием.
3.Создать форму с необходимыми элементами.
4. Составить программу решения задачи.
5. Подготовить тестовый вариант программы и исходных данных.
Задание к работе
1.Выполнить на ЭВМ программу, использующую подпрограммуфункцию, в соответствии с заданием, указанным в таблице 7.1.
2.Проверить правильность выполнения программы с помощью тестового варианта.
|
Таблица 7.1 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Ва- |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
ри- |
|
|
|
|
|
|
|
Условие задачи |
||||||
ант |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Вычислить большие корни квадратных уравнений |
|||||||||||||
1 |
|
|
|
|
|
|
|
|
x2 ax b 0 |
|||||
|
|
|
|
|
|
|
|
cy2 dy f 0 |
||||||
2 |
Подсчитать число точек, находящихся внутри круга радиусом R с цен- |
|||||||||||||
тром в начале координат; координаты заданы массивами Х(100), Y(100) |
||||||||||||||
|
||||||||||||||
|
Определить периметры треугольников, заданных координатами их |
|||||||||||||
3 |
вершин |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
XA(5), XB(5), XC(5) |
|||||||
|
|
|
|
|
|
|
|
|||||||
|
|
|
|
|
|
|
|
YA(5), YB(5), YC(5) |
||||||
|
Подсчитать число точек, находящихся внутри круга радиусом R с цен- |
|||||||||||||
4 |
тром в точке с координатами (1,1); |
координаты заданы массивами |
||||||||||||
|
Х(80), Y(80). |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Вычислить, |
z |
v1 v2 v3 |
где v1,v2,v3 |
|
- объемы шаров с радиусами |
||||||||
5 |
|
|
|
|||||||||||
|
|
|
|
|
3 |
|
|
|
|
|
|
|||
|
r1,r2,r3 соответственно |
|
|
|
|
|
|
|||||||
6 |
Вычислить |
суммы |
положительных элементов массивов Х(N), Y(M), |
|||||||||||
Z(K). |
|
|
|
|
|
|
|
|
|
|
|
|
||
|
|
|
|
|
|
|
|
|
|
|
|
|
||
7 |
Вычислить |
среднее |
арифметическое |
положительных элементов для |
||||||||||
массивов А(N1), B(N2), C(N3). |
|
|
|
|||||||||||
|
|
|
|
|||||||||||
8 |
Подсчитать количество элементов матриц Х(10,15) и Y(20,12), удовле- |
|||||||||||||
творяющих условиям 0 xij 1 и 0 yij 1. |
|
|||||||||||||
|
|
|||||||||||||
9 |
Вычислить суммы положительных элементов каждой строки для мат- |
|||||||||||||
риц А(10,12) и В(15,10). |
|
|
|
|
|
|
||||||||
|
|
|
|
|
|
|
||||||||
|
Вычислить |
z |
|
xmin1 xmax 2 |
z |
|
|
xm1 xm2 |
, где xmin1 и xmin2 - наименьшие |
|||||
10 |
|
|
|
|
||||||||||
|
|
|
|
2 |
|
|
|
2 |
|
|||||
|
элементы массивов Х1(70), Х2(80). |
|
|
|||||||||||
11 |
Вычислить |
суммы |
элементов |
главных диагоналей матриц A(N,N), |
||||||||||
B(M,M). |
|
|
|
|
|
|
|
|
|
|
|
|
||
|
Вычислить |
z |
S1 S2 |
, где S1 - сумма положительных элементов мас- |
||||||||||
12 |
|
|||||||||||||
|
2 |
|
|
|
|
|
|
|
|
|||||
|
сива X(50); S2 - сумма отрицательных элементов массива Y(60). |
|||||||||||||
13 |
Подсчитать число нулевых элементов для матриц A(N,M) и B(M,N). |
|||||||||||||
14 |
Вычислить сумму элементов нижних треугольных матриц для матриц |
|||||||||||||
А(15,15) и В(20,20). |
|
|
|
|
|
|
|
|
||||||
15 |
Определить число положительных элементов до первого отрицательно- |
|||||||||||||
го в массивах X(40), Y(50), Z(N). |
|
|
|
Пример выполнения работы
Выполнить на ЭВМ решение задачи. Определить ближайшую к началу координат точку, находящуюся в верхней полуплоскости, и наиболее удаленную точку, лежащую в нижней полуплоскости. Координаты точек, находящихся в верхней полуплоскости, заданы массивами X1(N) и Y1(N), а лежащих в нижней полуплоскости - массивами X2(N) и Y2(N), где N 40.
Для каждой точки верхней полуплоскости следует определить расстояние от начала координат. Из этих расстояний необходимо найти наименьшее. Такие же действия выполнить для точек, находящихся в нижней полуплоскости, однако найти наибольшее расстояние от начала координат.
Ввод массивов будем производить их строк TextBox с использованием процедуры пользователя StrVec c входным параметром St типа String и передаваемым параметром Mas1 пользовательского типа Mas.
Вычисление расстояний от начала координат выполним в подпрограм- ме-функции Distance типа Single, с двумя аргументами X и Y типа Single.
Описание типа пользователя Mas, глобальных константы и переменных, процедуры и функции пользователя разместим в стандартном модуле
Module1.
Ниже приведены схемы алгоритмов подпрограмм пользователя (рисунки 7.1, 7.2) и программный код, помещенный в окне Module1.
начало
расчет расстояния от точки с
Distance=(X^2+Y^2)^(1/2) координатами (X,Y) до начала
координат (0,0)
конец
Рисунок 7.1 – Схема алгоритма функции пользователя
Код модуля Module1 Public Const NN = 40 Public Type Mas
Vec(1 To NN) As Single End Type
Public X1 As Mas, Y1 As Mas, X2 As Mas, Y2 As Mas Public i As Integer, N As Integer
Public R1 As Single, R2 As Single
Public Sub StrVec(St As String, Mas1 As Mas) Dim jn As Integer, jk As Integer
St = " " + Trim(St) + " "