Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
2179Програмування лінійних та розгалужених обчислювальних процесів” засобами VBA.doc
Скачиваний:
7
Добавлен:
07.02.2016
Размер:
3.38 Mб
Скачать

1.3 Приклади розв’язання завдання на програмування лінійних та розгалужених обчислювальних процесів

Розглянемо типові алгоритми лінійних та розгалужених процесів.

Приклад 1.3.1 За заданим значенням аргументу х обчислити значення функції .

Знайти середнє арифметичне х і у .

Для наданої задачі розглянемо три способи рішення.

Спосіб 1

Початкове значення х введемо за допомогою вбудованого вікна вводу InputBox , а результати підрахунків виведемо у діалогове вікно виводу MsgBox . Додамо до проекту модуль на ім’я “Приклад1_1”, як показано на рис. 1.4 .

Рисунок 1.4 – Додавання модуля до проекту VBA

Запишемо код цього модуля у відповідному вікні.

Код програми:

Sub pr1_1()

Dim x As Single, y As Single, sa As Single

x = InputBox("Ввести х=", "Вікно вводу значення х")

y = (Sin(x) - 2.7) / (Abs(x) + Sqr(x ^ 4 + 1))

sa = (x + y) / 2

MsgBox "x=" & x & "; y=" & y & _

"; середне арифметичне x та y=" & sa , , "Вікно результатів"

End Sub

Результати роботи програми наведено на рис. 1.5 та на рис. 1.6 :

Рисунок 1.5 – Вікно введення х

Рисунок 1.6 – Вікно результатів роботи програми

Спосіб 2

Для відображення початкового значення х та розрахункових значень використовуємо “Лист1” EXCEL. Значення х введемо у клітину А2 . Результати обчислень виведемо відповідно у клітини B2, C2 , як показано на рис. 1.7 .

Рисунок 1.7 – Інтерфейс Лист1

Додамо до проекту модуль на ім’я “Приклад1_2” . Запишемо код цього модуля у відповідному вікні:

Код програми:

Sub pr1_2()

Dim x As Single, y As Single, sa As Single

x = Worksheets("Лист1").Range("A2").Value

y = (Sin(x) - 2.7) / (Abs(x) + Sqr(x ^ 4 + 1))

sa = (x + y) / 2

Worksheets("Лист1").Range("B2").Value = y

Worksheets("Лист1").Range("C2").Value = sa

End Sub

Результати роботи програми наведено на рис. 1.8 .

Рисунок 1.8 – Результати роботи програми

Спосіб 3

Для рішення цієї задачі додамо до проекту форму на ім’я Приклад1_3 , як на рис. 1.9 і розробимо її інтерфейс.

Рисунок 1.9 – Додавання форми до проекту VBА

На формі розмістимо такі елементи керування, як показано на рис. 1.10 :

  • написи Label1, Label2, Label3, у яких властивості Caption змінені на тексти-коментарі відповідних текстових полів. Крім того, у написів змінена властивість Font – шрифт, розмір – 10 і жирність – Bold;

  • текстові поля Text1, Text2, Text3 – для введення значення х і виведення результатів розрахунків. У цих об’єктів також змінена властивість Font;

  • командна кнопка CommandButton1 , з якою пов’язана процедура рішення задачі. Змінені властивості Caption на текст, що відображається на кнопці, а також Font;

  • для самої форми змінено властивості Name та Caption на текст Приклад1_3;

Рисунок 1.10 – Форма Приклад1_3

Код програми, пов’язаний з командною кнопкою:

Private Sub CommandButton1_Click()

Dim x As Single, y As Single, sa As Single

x = TextBox1.Text

y = (Sin(x) – 2.7) / (Abs(x) + Sqr(x ^ 4 + 1))

sa = (x + y) / 2

TextBox2.Text = y

TextBox3.Text = sa

End Sub

Результати розрахунків наведені на рис. 1.11 .

Рисунок 1.11 – Форма з результатами обчислень

Приклад 1.3.2 Обчислити площину трикутника зі сторонами a , b , с за формулою Герона:

,

де р = (а+b+c) / 2 .

Для наданої задачі розглянемо два способи рішення.

Спосіб 1

Початкові значення a, b, с введемо за допомогою вбудованого вікна вводу InputBox , а результати підрахунків виведемо у діалогове вікно виводу MsgBox.

Додамо про проекту модуль на ім’я “Приклад2_1”. Запишемо код цього модуля у відповідному вікні.

Код програми:

Sub Площина()

Dim a As Single, b As Single, с As Single, p As Single, s As Single

a = InputBox(«Перша сторона а=», «Введення початкових»)

b = InputBox(«Друга сторона b=», «Введення початкових»)

c = InputBox(«Третя сторона c=», «Введення початкових»)

Перевіримо, чи можуть бути a,b,c сторонами трикутника

If (a + b > c) And (a + c > b) And (b + c > a) Then

p = (a + b + c) / 2

s = Sqr(p * (p – a) * (p – b) * (p – c))

MsgBox Площина трикутника= & s , , Результат

Else

MsgBox Введені значення не можуть бути сторонами & _

трикутника, vbCritical, Увага, помилка!

End If

End Sub

На рис. 1.12 наведені вікна в процесі роботи програми для а=2, b=3, c=4 :

Рисунок 1.12 – Результати роботи програми

Спосіб 2

Для відображення початкових значень a, b, c та розрахункових значень використовуємо “Лист2” EXCEL. Значення a у клітині B1, значення b у клітині B2, значення c у клітині B3.

Результати обчислень виведемо відповідно у клітину D2, як показано на рис. 1.13 . На цьому ж листі розмістимо командну кнопку CommandButton1 , з якою пов’язана процедура рішення задачі. Для кнопки змінимо властивості Caption на текст Розрахунки, властивість Font: розмір, жирність.

Рисунок 1.13 – Інтерфейс „Лист2”

Код програми:

Private Sub CommandButton1_Click()

Dim a As Single, b As Single, с As Single, p As Single, s As Single

Worksheets(«Лист2»).Activate

a = Range(«B1»).Value

b = Range(«B2»).Value

c = Range(«B3»).Value

Перевіримо, чи можуть бути a,b,c сторонами трикутника

If (a + b > c) And (a + c > b) And (b + c > a) Then

p = (a + b + c) / 2

s = Sqr(p * (p – a) * (p – b) * (p – c))

Range(D2).Value = s

Else

MsgBox Введені значення не можуть бути сторонами & _

трикутника, vbCritical, Увага, помилка!

End If

End Sub

Якщо задані помилкові значення для a, b, c , то виводиться відповідне повідомлення (рис. 1.14 )

Рисунок 1.14 – Результати роботи програми

Приклад 1.3.3 Співробітникам фірми виплачується річна премія в залежності від стажу роботи:

  • до одного року – премії немає;

  • від одного до п’яти років – 10% від зарплатні;

  • більш ніж п’ять і до десяти років – 20% від зарплатні;

  • більш ніж десять років – 30% від зарплатні;

Обчислити розмір премії робітника, якщо його зарплатня дорівнює Z , а стаж роботи – К років.

Початкові значення Z , K введемо за допомогою вбудованого вікна вводу InputBox , а результати підрахунків виведемо у діалогове вікно виводу MsgBox.

Додамо про проекту модуль на ім’я “Приклад3_1”. Запишемо код цього модуля у відповідному вікні.

Код програми:

Sub Премія()

Dim Z As Single, K As Single, pr As Single

Z = InputBox(Введіть зарплатню=, Введення початкових)

K = InputBox(Введіть стаж роботи=, Введення початкових)

Select Case K

Case Is < 1

pr = 0

Case 1 To 5

pr = Z * 0.1

Case Is <= 10

pr = Z * 0.2

Case Else

pr = Z * 0.3

End Select

MsgBox Зарплатня= & Z & , Стаж роботи= & K & _

, Премія= & pr , , Результати підрахунків

End Sub

На рис. 1.15 наведені вікна в процесі роботи програми для Z=1000 , K=3 :

Рисунок 1.15 – Результати роботи програми

Приклад 1.3.4 За заданим значенням аргументу х обчислити значення функції y=f(x) , графік залежності якої наведений на рис. 1.16 .

Рисунок 1.16 – Графік функції

Для наданої задачі розглянемо два способи рішення.

Спосіб 1

Додамо до проекту модуль на ім’я “Приклад4_1”. Для обчислення значення у використаємо умовний оператор if-then-else. Запишемо код цього модуля у відповідному вікні.

Код програми:

Sub pr4_1()

Dim x As Single, y As Single

x = InputBox(Ввести значення х=, Початкові)

If x <= 2 Then

y = x

ElseIf x <= 4 Then

y = 2

ElseIf x <= 6 Then

y = Sqr(4 – (x – 4) ^ 2)

Else

y = 0

End If

MsgBox Для x= & x & y= & y , , Результат

End Sub

Спосіб 2

Для рішення цієї задачі додамо до проекту форму на ім’я Приклад4_2”, інтерфейс якої показано на рис. 1.17 .Для обчислення значення у використаємо оператор вибору Select case .

Рисунок 1.17 – Форма Приклад4_2”

Встановимо слідуючи властивості елементів управління форми:

Елемент(ім’я)

Властивість

Значення властивості

UserForm1

Name

Приклад4_2

Caption

Label1

Caption

x=

Font(Начертание; Размер)

жирный; 12

Label2

Caption

y=

Font(Начертание; Размер)

жирный; 12

TextBox1

Font(Начертание; Размер)

жирный; 12

TextBox2

Font(Начертание; Размер)

жирный; 12

CommandButton1

Caption

Розрахунки

Font(Начертание; Размер)

жирный; 14

Код програми:

Private Sub CommandButton1_Click()

Dim x As Single, y As Single

x = TextBox1

Select Case x

Case Is <= 2

y = x

Case Is <= 4

y = 2

Case Is <= 6

y = Sqr(4 - (x - 4) ^ 2)

Case Else

y = 0

End Select

TextBox2 = y

End Sub

Результати розрахунків наведені на рис. 1.18.

Рисунок 1.18 – Форма з результатами обчислень

Приклад 1.3.5 Задане дійсне a . Обчислити або площину кола такого радіуса, або площину прямокутника одна сторона якого дорівнює заданому а , а друга в тричі більша.

Для наданої задачі розглянемо два способи рішення.

Спосіб 1

Для рішення цієї задачі додамо до проекту форму на ім’я Приклад5_1, інтерфейс якої показано на рис. 1.19 .

Рисунок 1.19 – Форма Приклад5_1

Встановимо слідуючи властивості елементів управління форми:

Елемент(ім’я)

Властивість

Значення властивості

UserForm1

Name

Приклад5_1

Caption

Label1

Caption

a=

Font(Начертание; Размер)

жирный; 12

Label2

Caption

Відповідь

Font(Начертание; Размер)

жирный; 12

TextBox1

Font(Начертание; Размер)

жирный; 12

TextBox2

Font(Начертание; Размер)

жирный; 12

MultiLine

True

ScrollBars

3

CommandButton1

Caption

Розрахунки

Font(Начертание; Размер)

жирный; 14

OptionButton1

Caption

Площина круга

Font(Начертание; Размер)

жирный; 12

OptionButton2

Caption

Площина прямокутника

Font(Начертание; Размер)

жирный; 12

Код програми:

Private Sub CommandButton1_Click()

Dim a As Single, p As Variant, pi As Single, b As Single

pi = 3.141592

a = TextBox1.Text

If OptionButton1.Value = True Then

p = pi * a ^ 2

Label2.Caption = "Площина кола="

ElseIf OptionButton2.Value = True Then

b = 3 * a

p = a * b

Label2.Caption = "Площина прямокутника="

Else

p = "Необхідно вибрати площину якої фігури підрахувати!"

End If

TextBox2.Text = p

End Sub

Результати розрахунків наведені на рис. 1.20 .

Рисунок 1.20 – Форма з результатами обчислень

Спосіб 2

Для відображення початкового значеня a , та розрахункових значень використовуємо “Лист3 EXCEL. Значення a – у клітині B1. Результати обчислень виведемо відповідно у клітину В2 , як показано на рис. 1.21 . На цьому ж листі розмістимо два перемикачі OptionButton1 , OptionButton2 , та командну кнопку Command-Button1 , з якою пов’язана процедура рішення задачі.

Рисунок 1.21 – Інтерфейс “Лист3

Встановимо слідуючи властивості елементів управління форми:

Елемент(ім’я)

Властивість

Значення властивості

CommandButton1

Caption

Розрахунки

Font(Начертание; Размер)

жирный; 14

OptionButton1

Caption

Площина круга

Font(Начертание; Размер)

Backcolor

жирный; 12

сірий

OptionButton2

Caption

Площина прямокутника

Font(Начертание; Размер)

Backcolor

жирный; 12

сірий

Код програми:

Private Sub CommandButton1_Click()

Dim a As Single, p As Variant, pi As Single, b As Single

Worksheets("Лист3").Activate

pi = 3.141592

a = Range("B1").Value

If OptionButton1.Value = True Then

p = pi * a ^ 2

ElseIf OptionButton2.Value = True Then

b = 3 * a

p = a * b

Else

p = "Необхідно вибрати площину якої фігури підрахувати!"

Відформатуємо клітину “В2” під заданий текст

Range("B2").WrapText = True

Columns("B:B").ColumnWidth = 16

Rows("2:2").RowHeight = 49

End If

Range("B2").Value = p

End Sub

Результати розрахунків наведені на рис. 1.22 .

Рисунок 1.22 – Результати роботи програми

Приклад 1.3.6 Визначити, чи належить точка з заданими координатами х і у :

  • області 1 – колу;

  • області 2 – трикутнику;

  • обом областям одночасно.

Області зображені на рис. 1.23 .

Рисунок 1.23 – Зображення областей

Для рішення цієї задачі додамо до проекту форму на ім’я “Приклад1_3_6”. Розробимо відповідний інтерфейс, де вибирати потрібну область будемо за допомогою прапорців та змінимо властивості елементів управління згідно таблиці:

Елемент(ім’я)

Властивість

Значення властивості

UserForm1

Name

Приклад1_3_6

Caption

Label1

Caption

x=

Font(Начертание; Размер)

жирный; 10

Label2

Caption

y=

Font(Начертание; Размер)

жирный; 10

TextBox1

Font(Начертание; Размер)

жирный; 10

TextBox2

Font(Начертание; Размер)

жирный; 10

TextBox3

Font(Начертание; Размер)

жирный; 10

MultiLine

True

ScrollBars

3

CommandButton1

Caption

Перевірка належ-ності області

Font(Начертание; Размер)

жирный; 10

CheckBox1

Caption

Область1 ( круг)

Font(Начертание; Размер)

жирный; 10

CheckBox2

Caption

Область 2 (трикутник)

Font(Начертание; Размер)

жирный; 10

Код програми:

Private Sub CommandButton1_Click()

Dim x As Single, y As Single, st As String, r As Boolean

x = TextBox1.Text : y = TextBox2.Text

If CheckBox1.Value = True And CheckBox2.Value = True Then

r = x >= 0 And y >= 0 And (x ^ 2 + y ^ 2 <= 1) And (y <= -2 * x + 2)