Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Лабораторные VBA

.pdf
Скачиваний:
60
Добавлен:
31.05.2015
Размер:
690.07 Кб
Скачать

начало

 

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) + " "