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

VB_NET

.pdf
Скачиваний:
9
Добавлен:
22.02.2016
Размер:
3.43 Mб
Скачать

4. Структуровані типи даних

91

Дуже часто доводиться знаходити в одновимірному масиві індекс елемента, який збігається із заданим значенням (задача пошуку). Розрізняють задачі пошуку першого і/або останнього входження елемента, а також пошук усіх входжень елемента в масив. У мові VB.NET для реалізації пошуку найкраще скористатися методом IndexOf для об’єкта Array (див. табл. 4.2).

Приклад 4.21. Пошук в одновимірному масиві індексу першого входження елемента, який дорівнює x.

Module Module1 Sub main()

Dim a(), x As Single Dim n, i, k As Integer

Do : n = InputBox("Введіть n>0 і n<=20")

Loop Until n > 0 And n <= 20

ReDim a(n - 1) For i = 0 To n - 1

a(i) = InputBox("Введіть елемент масиву!") Console.Write(a(i) & " ") ' масив

Next i : Console.WriteLine()

x = InputBox("Введіть число", "Введення") i = 0 : k = -1

Do While i < n And k = -1 k = a.IndexOf(a, x) i = i + 1

Loop

If k <> –1 Then

MsgBox(" 1-e входження " & x & " з " & k & " індексом")

Else

MsgBox(" Не знайдено!")

End If

End Sub

End Module

Приклад 4.22. Пошук в одновимірному масиві індексу останнього входження елемента, який дорівнює x. Основний фрагмент програми

i = n - 1 : k = -1

Do While i >= 0 And k = -1

k = a.IndexOf(a, x, i) : i = i - 1

Loop

92

Програмування мовою Visual Basic.NET

4.3.Матричні задачі

Устандартній матричній задачі може бути потрібно:

отримати нову матрицю за певним правилом;

знайти деяку величину, використовуючи елементи зазначеної матриці;

перетворити матрицю певним чином;

визначити, чи володіє матриця певною властивістю;

виконати над матрицею (матрицями) певну операцію.

При реалізації матричних задач використовують вкладені цикли, які налічують всередині себе один або декілька інших циклів.

Приклад 4.23. Дано натуральне число n. a[i, j]i, j=1,..., n , для якої виконуються умови:

 

(i + j)2 ,

якщо i <

 

 

якщо i =

a[i, j] = 2,

 

2i +5 j,

якщо i >

 

 

 

 

Отримати дійсну матрицю

j; j; j.

Індекс i позначає рядок квадратної матриці, а j – стовпець. Рівні індекси (i=j) мають елементи головної діагоналі. Умова i<j вказує на те, що елементи розташовані над головною діагоналлю, а i>j – елементи розташовані під головною діагоналлю.

Module Module1

Public Sub main()

Dim a(,) As Integer Dim i, j, n As Byte

Do : n = InputBox("Введіть n>0 і n<=20")

Loop Until n > 0 And n <= 20

ReDim a(n – 1, n – 1) For i = 0 To n – 1

a(i, i) = 2

Next i

For i = 0 To n - 2

For j = i + 1 To n – 1

a(i, j) = (i + j + 2) ^ 2

Next j Next i

For i = 1 To n – 1

4. Структуровані типи даних

93

For j = 0 To i - 1

a(i, j) = 2 * (i + 1)+ 5 * (j + 1)

Next j

Next i

For i = 0 To n – 1

For j = 0 To n - 1

Console.Write(a(i, j) & " ")

Next j

Console.WriteLine()

Next i

Console.ReadLine()

End Sub

End Module

Приклад 4.24. Дано натуральне число n. Визначити, скільки додатних елементів містить матриця a[i, j]i, j=1,..., n , у якої a[i, j] = sin(i + j).

Шукане число можна знайти і без оголошення масиву, використовуючи тільки формулу, що задає вигляд елементів масиву.

Module Module1

Public Sub main()

Dim i, j, k, n As Byte

Do : n = InputBox("Введіть n>0 і n<=20")

Loop Until n > 0 And n <= 20 k =0

For i = 0 To n – 1 For j = 0 To n – 1

If sin(i + j + 2) > 0 Then k += 1

Next j Next i

MsgBox("k=" & k)

End Sub End Module

Приклад 4.25. Дано натуральне число n. Визначити суму тих елементів матриці a[i, j]i, j=1,..., n , які розташовано на головній діагоналі або над

нею, що перевищують усі елементи, розташовані під головною діагоналлю.

94

Програмування мовою Visual Basic.NET

Серед елементів матриці, розташованих під головною діагоналлю, знайдемо найбільший елемент. Тоді елементи, які розташовані на головній діагоналі або над нею і є більшими за знайдений найбільший елемент, будуть задовольняти умові задачі.

Module Module1 Sub main()

Dim a(,), max, s As Single Dim i, j, n As Byte

Do : n = InputBox("Введіть n>0 і n<=20")

Loop Until n > 0 And n <= 20

ReDim a(n - 1, n - 1) For i = 0 To n - 1

For j = 0 To n - 1

a(i, j) = Rnd() * 10 Console.Write(a(i, j) & " ")

Next j Console.WriteLine()

Next i

max = a(1, 0)

For i = 2 To n - 1 ' визначення максимума

For j = 0 To i - 1

If a(i, j) > max Then max = a(i, j)

Next j Next i

s = 0

For i = 0 To n - 1 For j = i To n - 1

If a(i, j) > max Then s = s + a(i, j)

Next j Next i

MsgBox("s=" & s)

End Sub

End Module

Приклад 4.26. Дано натуральне число n і деяка квадратна матриця a[i, j]i, j=1,..., n . Перетворити цю матрицю так, щоб перший рядок помінявся місцями з останнім, другий – з передостаннім і т.д.

Module Module1

Sub main()

4. Структуровані типи даних

95

Dim a(,), x As Integer Dim i, j, n As Byte

Do : n = InputBox("Введіть n>0 і n<=20")

Loop Until n > 0 And n <= 20

ReDim a(n - 1, n - 1) For i = 0 To n - 1

For j = 0 To n - 1 a(i, j) = i + j

Console.Write(a(i, j) & " ")

Next j Console.WriteLine()

Next i Console.WriteLine()

For i = 0 To (n - 1) \ 2

For j = 0 To n - 1

x = a(i, j) : a(i, j) = a(n - i - 1, j) a(n - i - 1, j) = x

Next j Next i

For i = 0 To n - 1 For j = 0 To n - 1

Console.Write(a(i, j) & " ")

Next j Console.WriteLine()

Next i Console.ReadLine()

End Sub End Module

Приклад 4.27. Написати фрагменти програм, які реалізують основні операції над матрицями: 1) додавання (віднімання) двох матриць; 2) множення матриці на скаляр; 3) множення двох матриць; 4) транспонування квадратної матриці.

1) Матриці, які беруть участь в операціях додавання (віднімання), повинні мати однакові розміри, адже ці операції виконуються поелементно.

For i = 0 To m – 1 For j = 0 To n – 1

c(i, j) = a(i, j) + b(i, j)

Next j Next i

96

Програмування мовою Visual Basic.NET

Для визначення різниці матриць достатньо змінити “+” на “–”. 2) Множення матриці на скаляр також виконується поелементно:

For i = 0 To m – 1 For j = 0 To n – 1

c(i, j) = a(i, j) * р

Next j Next i

3) Матриці, які беруть участь в операції множення мають такі розміри:

m

n

n

k

m

k

 

A ×

 

B =

 

C . Тоді будь-який елемент c (i =1...m; j =1...k)

 

 

 

 

 

ij

n

визначають за формулою cij = ail blj :

l =1

For i = 0 To m – 1 For j = 0 To k – 1 s = 0

For l = 0 To n – 1

s = s + a(i, l) * b(l, j)

Next l c(i, j) = s

Next j Next i

4) Транспонування квадратної матриці полягає у заміні рядків матриці відповідними стовпцями, і навпаки (тобто елементи dij і d ji мають помі-

нятися місцями). Під час транспонування головна діагональ матриці залишається без змін, а обмін здійснюємо тільки для елементів, розташованих над цією діагоналлю (елементи під діагоналлю поміняються автоматично внаслідок симетрії).

For i = 0 To n - 2

For j = i+1 To n – 1

s = d(i, j)

d(i, j) = d(j, i)

d(j, i) = s

Next j

Next i

4. Структуровані типи даних

97

4.4. Структури

Поруч з масивами, як сукупністю однотипних елементів, існує ще один структурований тип даних – структура, яка складається з декількох різнотипних елементів (або полів). Структури в літературі можна ще називати так:

тип, визначений користувачем;

власний тип даних;

запис.

Синтаксис опису структури:

[Private | Public | Protected] Structure назва [Dim | Private | Public | Friend] Елемент1 As Тип

[Dim | Private | Public | Friend] [Елемент2 As Тип

End Sructure

Зауваження. Усередині структури можна використовувати масиви, а також попередньо описані структури.

Визначення структури можливе на рівні проекту або модуля у секції (GeneralDeclarations). Визначивши структуру, можна використовувати її для оголошення змінних цього типу. Доступ до елементів змінної типу структури здійснюють шляхом позначення крапки після назви змінної.

Приклад 4.28. Уведення власного типу та його використання.

Module Module1

Structure Client Dim Name As String

Dim Adress As String

Dim Phone As Integer

End Structure Sub main()

Dim MyCl As Client MyCl.Name = "Перебендя Іван"

MyCl.Adress = "вул. С.Бандери, 7/45" MyCl.Phone = 789439

MsgBox(MyCl.Name & " " & MyCl.Adress & " " & MyCl.Phone)

End Sub

End Module

98

Програмування мовою Visual Basic.NET

4.5. Перерахування

Перерахування (enumerations) – зручний спосіб роботи із взаємозв’язаними константами, що дає змогу асоціювати їхні значення із зрозумілими назвами. Синтаксис:

[{Public | Protected | Friend | Protected Friend | Private }] [ Shadows ]

Enum name [ As type] MemberName_l [ = Expression_l ] MemberName_2 [ = Expression_2 ]

MemberName_n [ = Expression_n ]

End Enum

name назва перерахування;

MemberName назва константи. За домовленістю значення першої константи дорівнює 0, другої 1 і т.д. Через параметр Expression константам можна призначати довільні значення.

Визначення перерахування можливе на рівні проекту або модуля у секції (GeneralDeclarations). Визначивши перерахування, можна використовувати його для оголошення змінних цього типу. Доступ до констант змінної-перерахування здійснюють шляхом позначення крапки після назви змінної.

Приклад 4.29. Уведення перерахування та його використання.

Module Module1

Enum SecurityLevel

Normal = 0 : MinSecurity = -1 : MaxSecurity = 1

End Enum Sub main()

Dim n As SecurityLevel

n = SecurityLevel.MaxSecurity

If n = SecurityLevel.MinSecurity Then

MsgBox("Мінімальний")

ElseIf n = SecurityLevel.MaxSecurity Then

MsgBox("Максимальний")

Else : MsgBox("Нормальний")

End If End Sub

End Module

4. Структуровані типи даних

99

Запитання для самоперевірки

1.Що таке масив?

2.Яка різниця між статичним і динамічним масивом?

3.Як описують одновимірний масив?

4.Як описують багатовимірний масив?

5.Опишіть основні методи класу Array?

6.Напишіть фрагмент програми множення матриць.

7.Напишіть фрагмент програми транспонування матриці.

8.Що таке структура? Як описують структуру?

9.Що таке перерахування?

Завдання для програмування

Завдання 4.1. Дано натуральне число n і дійсні числа а1, а2,..., аn. Скласти програми розв’язання таких задач (у задачах 1-5 передбачити опрацювання ситуації відсутності від’ємних елементів):

1.Знайти добуток елементів масиву, розташованих після останнього ві- д’ємного числа.

2.Знайти середнє арифметичне елементів масиву, розташованих після останнього від’ємного числа.

3.Замінити всі елементи, розташованих перед першим від’ємним числом, на число 2.

4.Замінити всі елементи, розташованих після останнього від’ємного числа, на число 10.

5.Знайти середнє арифметичне елементів масиву, розташованих між першим та останнім від’ємним числом.

6.Замінити всі від’ємні числа на їхні квадрати і впорядкувати після цього масив за незростанням.

7.Замінити всі від’ємні числа на їхні модулі і впорядкувати після цього масив за незростанням.

8.Знайти добуток елементів масиву, розташованих після останнього входження найменшого числа.

9.Знайти суму елементів масиву, розташованих перед останнім вхо дженням найменшого числа.

10.Знайти середнє арифметичне елементів масиву, розташованих після останнього входження найбільшого числа.

100

Програмування мовою Visual Basic.NET

11.Знайти добуток елементів масиву, розташованих перед останнім входженням найбільшого числа.

12.Знайти середнє арифметичне елементів масиву, розташованих між останніми входженнями найбільшого та найменшого числа.

13.Знайти суму елементів масиву, розташованих між першими входженнями найбільшого та найменшого чисел.

14.Замінити всі додатні числа на їхні квадрати і впорядкувати після цього масив за незростанням.

15.Замінити всі нульові числа на число 3 і впорядкувати після цього масив за незростанням.

Завдання 4.2. Дано цілочисельну прямокутну матриця. Скласти програми розв’язання наступних задач:

1.Визначити кількість рядків, які не містять нулів.

2.Визначити кількість стовпців, які не містять нулів.

3.Визначити кількість стовпців, які містять хоча б один нуль.

4.Визначити кількість рядків, які містять хоча б один нуль.

5.Визначити добуток елементів у кожному рядку, що не містить нуля.

6.Визначити добуток елементів у кожному стовпці, що не містить нуля.

7.Визначити суму елементів у кожному рядку, що не містить від’ємних чисел.

8.Визначити суму елементів у кожному стовпці, що не містить від’ємних чисел.

9.Визначити середнє арифметичне елементів у кожному рядку, який містить хоча б один нуль.

10.Визначити середнє арифметичне елементів у кожному стовпці, який містить хоча б один нуль.

11.Визначити суму елементів у кожному рядку, який містить хоча б одне від’ємне число.

12.Визначити суму елементів у кожному стовпці, який містить хоча б одне від’ємне число.

13.Визначити номер першого з рядків, що не містить від’ємних чисел.

14.Визначити номер останнього з рядків, що не містить від’ємних чисел.

15.Визначити номер останнього зі стовпців, що не містить нуля.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]