Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Метод_пособие_укр.doc
Скачиваний:
4
Добавлен:
11.11.2019
Размер:
1.22 Mб
Скачать

Лабораторна робота 6 Масиви. Опис і створення масивів. Динамічні масиви

Масив – це індексована група значень, узагалі говорячи, того самого типу. Синтаксис опису масиву:

dim <ім'я масиву> [(розмірність)] [as <тип елементів>]

Якщо тип елементів масиву не зазначений, то за замовчуванням вони мають тип Variant.

<розмірність> допускає до 60 елементів і має синтаксис:

[min1 to] max1, [min2 to] max2, …

Якщо min явно не зазначений, то індексація починається з 0.

Приклад:

dim a(5) as double ‘ масив 6 елементів.

dim b(2,3) as string ‘масив 3-x рядків і 4-х стовпців.

Якщо необхідна індексація з 1, то на початку програми використовується опція Option Base 1 або використовується другий спосіб опису масивів, наприклад:

dim a (1 to 5) as double

dim b (1 to 2, 1 to 3) as string

Приклад 1

option base 1

sub proc1()

dim a(3) as integer

a(1) =10

a(2) =20

a(3) =30

msgbox “a(1)=”&a(1)

end sub

Значення змінної можна подивитися не тільки за допомогою функції Msgbox, але й через вікно налагодження Immediate. Для цього перед end sub у програму додамо команду debug.print <список змінних> , наприклад:

debug.print “a(2)=”,a(2), “a(3)=”,a(3)

У VBA існує унікальна можливість обійти визначення масиву як набору однотипних елементів. Для цього потрібно визначити масив як Variant.

Приклад 2

Створимо масив елементів різних типів.

Option Base 1

Sub pr2()

dim b(4,3) as variant

b(1,1) = “VBA”

b(1,2) = “C++”

b(1,3) = “Математичні моделі”

b(2,1) = 4

b(2,2) = 5

b(2,3) = 6.5

b(3,1) = #01/01/82#

b(3,2) = #05/07/93#

b(3,3) = #01/01/99#

b(4,1) = FALSE

b(4,2) = TRUE

b(4,3) = FALSE

debug.print “b(4,2)=”,b(4,2)

msgbox “b(1,3)=” & b(1,3)

end sub

Динамічні масиви використовуються, якщо в процесі роботи програми потрібно змінити розмірність масиву.

Синтаксис:

dim <ім'я масиву> () as <тип елементів>

При цьому в програмі обов'язково повинна бути інструкція, що визначає розміри масиву, до його першого використання.

redim <ім'я масиву> (<розмірність>) as <тип>

При цьому перевизначати можна тільки розмірність, але не тип масиву.

Приклад 3

dim c() as variant

redim c(2)

c(1)=5 : c(2)=6

debug.print c(1), c(2)

redim c(3,2)

c(1,1) = “краще”

c(1,2) = “менше”

c(2,1) = “,”

c(2,2) = “так”

c(3,1) = “краще”

c(3,2) = “.”

debug.print c(1,1), c(1,2), c(2,1)

debug.print c(2,2), c(3,1), c(3,2)

Передати значення елементів одного масиву іншому масиву можна тільки поелементно.

Завдання до лабораторної роботи 6

Створити 2 масиви:

1) елементів типу, визначеного користувачем;

2) елементів різних типів.

Ініціювати елементи масиву й вивести їх значення на екран двома способами (використовуючи msgbox і вікно налагодження).

Лабораторна робота 7 Масив і діапазон робочого листа. Функції для роботи з масивами

1. Масив можна вивести в діапазон робочого листа без циклу по всіх елементах масиву, привласнивши властивості Value діапазону ім'я масиву:

Range (<діапазон>). Value =<ім'я масиву>

2. Дані з діапазону легко перенести в масив VBA, привласнивши масиву значення властивості Value зазначеного діапазону:

<ім'я масиву> = Range (<діапазон>). Value.

При цьому масив повинен бути описаний як змінна типу Variant.

3. Функції VBA для роботи з масивами

Lbound (<ім'я масиву>[,<розмірність>])

Ubound (<ім'я масиву>[,<розмірність>])

Ці функції повертають відповідно мінімальне й максимальне припустимі значення зазначеної розмірності масиву, наприклад:

Dim A(1 to 100, 0 to 3, -3 to 4)

x=Lbound(A, 1) ``x=1

y=Ubound(A, 2) ``y=3

z =Lbound(A, 3) ``z=-3

Erase <ім'я масиву>[, <ім'я масиву>, …]

- для статичних масивів очищає всі елементи масиву: для чисел – заносить нулі, для рядків – порожній рядок, для variant – значення empty

- для динамічних масивів цілком видаляє масив і його зміст з оперативної пам'яті. Перед наступним звертанням програми до динамічного масиву необхідно використовувати Redim.

Array (<список аргументів>)

Створює масив типу Variant, привласнюючи список аргументів елементам масиву, наприклад:

Dim b as Variant

B= Array(10, 20, 30) 'b(0)=10, b(1)=20, b(2)=30.

На робочий лист масив array завжди виводиться в рядок і якщо треба вивести його в стовпець, його потрібно транспонувати, наприклад:

Range (“C10:C12”). Value =Application.Transpose (b)

Якщо масив array передати в діапазон робочого листа, а потім повернути його в інший масив, тобто привласнити змінній Variant, то звертатися до елементів нового масиву потрібно, як до двовимірного масиву, у якого один рядок і кілька стовпців, наприклад:

Dim b as Variant

Nums =array (10, 11, 12, 13, 14 )

Debug.print nums(4)

Range (“a1:e1”). Value =nums

B =Range(a1:e1”). Value

Debug.print b (1, 4) `елементи nums(4) і b(1, 4) однакові.

Array можна використовувати й для заповнення багатомірних масивів.

IsArray (<ім'я змінної>)

Повертає True, якщо ім'я змінної містить масив, False – у противному випадку.

Функції робочого листа Excel для роботи з масивами.

Count (<ім'я масиву>) – повертає кількість чисел у масиві

Count A (<ім'я масиву>) – повертає кількість елементів масиву

Sum (<ім'я масиву>) - суму елементів масиву

SumProduct (<ім'я масиву1>, <ім'я масиву2>, …) – суму добутків елементів масивів

SumSq (<ім'я масиву>) – повертає суму квадратів елементів масиву

SumXm2(<ім'я масиву1>, <ім'я масиву2>) – повертає суму квадратів різниць елементів двох масивів

Sum2Y2(<ім'я масиву1>, <ім'я масиву2>) – повертає суму різниць квадратів елементів двох масивов

Mmult (<ім'я масиву1>, <ім'я масиву2>) – повертає добуток двох матриць

Minverse (<ім'я масиву>) – повертає зворотну матрицю

Transpose (<ім'я масиву>) – повертає транспоновану матрицю

Mdeterm (<ім'я масиву>) – повертає визначник матриці

При цьому до всіх убудованих функцій робочого листа Excel звертатися необхідно, указуючи сам host-додаток, наприклад:

A =Application. Minverse (B).

Приклад 1

Option Base 1

Sub pr1( )

Dim a(5,5) as Integer, x as Integer, y as Integer, b as Variant

For x=1 to 5

For y=1 to 5

A (x, y)=x*y

Next y

Next x 'створення масиву

Worksheets (1). Activate

With Range (“A1:E5”). Value =a

Msgbox “масив уведений у діапазон” & .Address

End With

'передаємо масив діапазону робочого листа, можемо переглянути зміст 'робочого листа й одержати повідомлення про те, що масив уведений у діапазон з 'абсолютними координатами $A$1:$E$5.

B= Range (“A1:E5”).Value

MSgbox b (3,4)

Msgbox “діапазон уведений у масив” & Ubound (b, 1) & _

“на” & Ubound(b, 2).

'діапазон уведений у масив 3x4

With Range (“F3:H7”) Value =a

Msgbox “частина масиву а, уведена в діапазон” &.Address

End With

'у діапазон робочого листа можна ввести

`частину масиву, створений діапазон 3x5

End Sub.

Завдання до лабораторної роботи 7

1. Задати три масиви: за допомогою функції Array, Z поелементно в циклі.

Обчислити:

  • визначник для масиву Z;

  • суму добутків масивів X і Y ;

  • транспонований масив Y;

  • добуток матриць X і Z;

  • зворотну матрицю для масиву Z і перевірити отриманий результат множенням (Z*Z-1=E).

Усі результати вивести на робочий лист із заголовками:

“масив x”, “масив y”, “масив z”, “добуток x і z” і т.д.

2. Використовуючи вбудовані функції, обчислити значення виразу (табл. 12).

Таблиця 12

Вираз

1

2

1

де x, y – вектори з n компонентами,

b – матриця розмірності m×m, причому n=4, m=2,

x=(3, 1, 2, 3), y=(1, 7, 2, 3),

2

де a – вектор з m компонентів,

c – матриця розмірності n×n, причому n=3, m=4,

а=(3, 1, 2, 3),

Продовження табл. 12

1

2

3

де x, y – вектори з n компонентів,

b – матриця розмірності m×m, причому n=4, m=2,

x=(1, 2, 7, 4), y=(1, 7, 2, 3),

4

де a – вектор з m компонентів,

c – матриця розмірності n×n, причому n=3, m=4,

а=(3, 1, 2, 3),

5

де x, y – вектори з n компонентів, b – матриця розмірності m×m, причому n=4, m=2, x=(1, 2, 7, 4), y=(1, 7, 2, 3),

6

де a – вектор з m компонентів, c – матриця розмірності n×n, причому n=3, m=4, а=(3, 3, 1, 3),

Закінчення табл. 12

1

2

7

де x, y – вектори з n компонентів, причому n=4, x=(1, 2, 7, 4), y=(1, 7, 2, 3)

8

де a – вектор з m компонентів, c – матриця розмірності n×n, причому n=2, m=4, а=(1, 4, 1, 3),

9

де x, y – вектори з n компонентів, причому n=4, x=(7, 5, 7, 4), y=(2, 4, 2, 3)

10

де a – вектор з m компонентів, c – матриця розмірності n×n, причому n=3, m=4, а=(2, 1, 1, 3),