Студопедия.Орг Главная | Случайная страница | Контакты | Мы поможем в написании вашей работы!  
 

End Sub. Цикл завершується тоді, коли значення лічильника стає більшим, ніж його кінцеве значення



Цикл завершується тоді, коли значення лічильника стає більшим, ніж його кінцеве значення. Для від’ємного кроку цикл завершується коли значення лічильника стає меншим, ніж його кінцеве значення. Цикл це є ітерація. Якщо при повтореннях змінюється не одна величина а дві (або більше), і при кожному значенні однієї величини інша величина «пробігає» всі свої значення, то для програмування таких циклічних процесів застосовуються вкладені цикли. Принцип роботи вкладеного циклу такий: при кожному значенні лічильника зовнішнього циклу А лічильник внутрішнього циклу Б «пробігає» всі свої значення, при цьому при кожному значенні лічильника внутрішнього циклу Б виконується оператори, що повторюються.

Наприклад. Потрібно розрахувати сумарні витрати на рік (СР) на ремонт приміщення, якщо відомі витрати за кожний місяць фінансового року (Mi) Сумарні витрати за рік розрахувати за формулою:

СР =

Значення витрат за кожний місяць ввести за допомогою функції InputBox.

На формі розташувати такі поля: перше текстове поле (Text1) розташувати на формі для відображення вибраного значення періоду проведення ремонтних робіт, друге поле (Text 2) для введення значення, що дорівнює 1, а в третє (Text 3) – значення, яке дорівнює 12, це діапазон початкових даних. Період проведення ремонтних робіт ввести, переміщенням повзунка смуги прокручування. Над діапазоном початкових даних розмістити надпис: «Введіть кількість місяців», між значеннями діапазону ввести надпис «Діапазон». На ескізі форми розташувати малюнок.

Для подійної процедури обчислення сумарних річних витрат на ремонтні роботи і виведення результату розв’язання задачі використати кнопку керування.

Інтерфейс розв’язання задачі наведений на рис. 14.

 
 

Рисунок 14. Інтерфейс розв’язання задачі

Текст програми має такий вигляд:

Private Sub CommandButton1_Click()

Dim Місяць As Integer ' Поточний місяць

Dim КМіс As Integer ' Загальна кількість місяців або період

Dim Мсум As Currency ' Місячна сума планових витрат на ремонт

Dim Річна_сума As Currency ' Сума декількох місяців (до 12) планових витрат на ремонт

Річна_сума = 0

КМіс = TextBox1.Text

For Місяць = 1 To КМіс

Мсум = Val(InputBox("Введіть місячну витрату", Str(Місяць) + "-й місяць"))

Річна_сума = Річна_сума + Мсум

Річна_сума = Format(Річна_сума, "#,###.##")

Next Місяць

MsgBox "Загальні витрати" + Str(Річна_сума) + " Грн", 0, "Річні витрати"

End Sub

Private Sub ScrollBar1_Change()

TextBox1.Text = ScrollBar1.Value

End Sub

Форматування річної суми здійснюється за допомогою функції Format, перший аргумент у функції це змінна, другий вказує на те як відобразити цілу та дробову частину змінної: Format(Річна_сума, "#,###.###").

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

Синтаксис циклу з умовою має два різновиди:

Do Умова Do

Оператори, що повторюються Оператори, що повторюються

Loop Loop Умова

Умова буває двох типів: While (умова з продовженням циклу)та Until (умова завершення циклу), які записуються після ключових слів Do та Loop а потім записується сама умова.

Наприклад

Do While Умова Do Until Умова Do Do

Оператори Оператори Оператори Оператори

Loop Loop Loop While Умова Loop Until Умова

Для негайного виходу із циклу використовується оператор Exit Do.

Розглянемо задачу з використанням оператора Do While...... Loop. У річному фінансовому плані на ремонт приміщення планують витрати протягом кожного місяця, при відомій максимальній річній сумі. Потрібно визначити, за скільки місяців можна провести ремонтні роботи, поки не буде витрачена максимальна сума. Інтерфейс розв’язання задачі наведений на рис. 15.

Рисунок 15. Інтерфейс розв’язання задачі

Текст програми має такий вигляд:

Private Sub CommandButton1_Click()

Dim Місяць As Integer 'Поточний місяць

Dim МCум As Currency 'Місячна сума планових витрат на ремонт

Dim Залишок As Currency 'Макс_Річна_Сума-Річна_Сума

Dim Річна_Сумма As Currency 'Сума декількох місяців (до 12) планових витрат на ремонт

Dim Макс_Річна_Сумма As Currency

Dim Перевищення As Currency 'Річна_Сума-Макс_Річна_Сума

Річна_Сумма = 0

Макс_Річна_Сумма = Val(InputBox("Введіть максимальну річну суму", "Значення максимальної суми витрат"))

TextBox1.Text = Format(Макс_Річна_Сумма, "#,###.###")

Місяць = 0

Do While Річна_Сумма < Макс_Річна_Сумма

Місяць = Місяць + 1

МCум = Val(InputBox("Введіть предбачувані витрати", Str(Місяць) + "-й Місяць"))

Річна_Сумма = Річна_Сумма + МCум

If Місяць = 12 Then

Залишок = Макс_Річна_Сумма - Річна_Сумма

MsgBox "Планування витрат на фінансовий рік завершено" & "За 12 міс ви плануєте витратити" + Str(Річна_Сумма) + " Грн." + "Залишок становить" + Str(Залишок) + " Грн.", 0, "Річні витрати"

End

End If

Loop

Перевищення = Річна_Сумма - Макс_Річна_Сумма

MsgBox "Ви маєте намір витратити" & Str(Річна_Сумма) + " Грн." + "за" + Str(Місяць) + " Міс.," + "що перевищує максимально допустиму суму на" + Str(Перевищення) + " Грн.", 0, "Річні витрати”

6. Алгоритми обробки даних складних типів

В обчислювальних процесах використовуються такі складні дані:

Масиви змінних.

Масиви елементів керування.

Типи даних що визначаються користувачем.

Файли послідовного та довільного доступу.

Масиви змінних. Масив – упорядкований набір однотипних елементів з одним ім’ям. Масиви змінних -упорядкований набір однотипних змінних які мають певні номера. Наприклад, рядок тексту може бути поданий у вигляді масиву символів, вектор – у вигляді масиву дійсних чисел, а матриця – у вигляді масиву векторів. За визначенням усі елементи масиву мають однаковий тип. Однак бувають винятки: коли тип даних масиву є типом Variant, окремі елементи можуть містити дані різних типів (об’єкти, рядки, числа). Кожний елемент масиву має свій порядковий номер (індекс). Кількість індексів визначає вимірність масиву. Масиви можуть бути одновимірними (вектори), двовимірними (матриці), тривимірними і т.д. Межі індексів (індексу) вказують на кількість елементів в масиву. Номера елементів масиву можуть відраховуватись від нуля або одиниці, Наприклад, масив A(4) містить чотири елемента а двовимірний масив A(3,4) має 12 елементів.

Для опису масиву виділяється неперервна область оперативної пам’яті, в якій розташовані всі його елементи. Ємність пам’яті залежить від кількості елементів масиву та їх типу. У мові Visual Basic розрізняють статичні й динамічні масиви. Межі статичного масиву встановлюються на етапі розроблення і можуть змінюватися тільки в новій версії програми. Динамічний масивів дозволяє змінювати межі в ході виконання програми. При роботі з масивами використовують індексовані змінні. На відмінну від звичайної змінної, індексована змінна має не тільки ім’я але й індекс який вказує місце знаходження цієї змінної в масиві тобто її номер, індекс це ціле невід’ємне число, індекс беруть в круглі дужки. Для двовимірних масивів використовують два індекси, для трьохвимірних три (третій номер вказує на номер двовимірного масиву, так як двовимірних масивів у трьохвимірному може бути декілька) і т.д., індекси в багатовимірних масивах теж беруть в дужки.

Щоб індексовані змінні можна було використовувати в програмі, потрібно спочатку об’явити масив.

Наприклад:

Dim A(19) As String

Це означає що масив містить 20 індексованих змінних, рахують починаючи з нуля. Якщо потрібно рахувати елементи масиву починаючи з одиниці тоді треба в секції (General) (Declaration) у вікні розроблення програмного коду вказати оператор Option Base 1.

Наприклад:

(General) (Declaration)

Option Base 1

Dim A(20) As String

Індексовані змінні масиву: A(1), A(2).........A(20).

Двовимірний масив оголошується аналогічно одновимірному, тільки в дужках вказують два індекси які роз’єднані комою.

Наприклад:

(General) (Declaration)

Option Base 1

Dim A(3,4) As String

Цей масив містить дванадцять індексованих змінних: A(1,1), A(1,2), A(1,3), A(1,4)- перший рядок змінних масиву; A(2,1), A(2,2)........A(2,4) – другий рядок; A(3,1), A(3,2),.....A(3,4) – третій рядок масиву.

Оголошення області видимості масиву

Для створення відкритого масиву (Public array) треба використати оператор Public у секції процедури Declaration. Для створення масиву рівня модуля (module level array) треба використати оператор Private у секції процедури Declaration модуля. Для створення локального масиву (local array) треба використати оператор Private у секції процедури об’єкта.

Масиви елементів керування

Це набір елементів керування одного типу з одним і тим самим ім’ям. Створюється цей масив копіюванням елементів керування через буфер пам’яті. Розглянемо задачу на використання індексованих змінних масиву.

Постановка задачі. На m складах підприємства знаходиться n видів продукції. Відомо кількість продукції aij на кожному складі та вартість bj одиниці продукції. Потрібно визначити:

Скільки продукції кожного виду знаходиться на всіх складах.

Скільки продукції всіх видів знаходиться на кожному зі складів.

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

Яка сумарна вартість продукції, що зберігається на кожному зі складів.

Яка сумарна вартість продукції, що зберігається на всіх складах підприємства.

Покласти m = 3, n = 4.

Етапи розв’язання задачі. Продукцію, що є на складах, подамо у вигляді матриці А з елементами aij, де перший індекс означає номер складу, а другий - вид продукції, тобто матриця має вигляд

В i- му рядку цієї матриці записано кількість продукції n – го виду на i – му складі, а в j – му стовпці – кількість продукції j – го виду на різних складах.

Вартість продукції кожного виду запишемо у вигляді вектора-стов

пця

де bj – вартість j-го виду продукції.

Для визначення кількості продукції j-го, що зберігається на всіх складах, необхідно визначити суму елементів кожного стовпця матриці А:

де j = 1.

Для визначення сумарної кількості продукції всіх видів, що зберігається на i – му складі, тобто суму елементів кожного рядка матриці А:

де i=1.

Для розрахунку сумарної вартості продукції, що зберігається на кожному зі складів, треба помножити матрицю А на матрицю В:

C = A*B

*

де Ci - сумарна вартість продукції всіх видів, що зберігається на i – му складі й розраховується за формулою

Для розрахунку сумарної вартості продукції, що зберігається на всіх складах підприємства, потрібно визначити суму елементів вектора С:

Спроектована форма для діалогу користувача при рішенні задачі показана на рис. 16.

Рисунок 16. Екранна форма рішення задачі

Кількість продукції та вартість кожного виду продукції вводиться при запуску програми в роботу.

Елементи керування які використанні при створенні інтерфейсу та властивості Caption (заголовок) подані в таблиці 6.

Таблиця 6. Властивості Caption

Елемент керування Значення властивості
  Label1 Номер складу
  Label2 Вид продукції за номером
  Label3 Вектор-стовпець вартості кожного виду продукції
  CommandButton1 Обчислити, скільки продукції всіх видів знаходиться на вибраному складі
  CommandButton2 Обчислити, скільки продукції заданого виду знаходиться на всіх складах
  CommandButton3 Пошук максимальної кількості продукції
  CommandButton4 Обчислити сумарну вартість продукції, що зберігається на кожному зі складів.
  CommandButton5 Обчислити сумарну вартість продукції, що зберігається на всіх складах підприємства

Текст програми має такий вигляд:

Option Base 1

Const m = 3

Const n = 4

Dim b(n) As Currency

Dim a(m, n) As Single

Dim c(m) As Currency

Dim Q As Single

Private Sub CommandButton1_Click()

a(1, 1) = Val(TextBox1): a(1, 2) = Val(TextBox2.Text)

a(1, 3) = Val(TextBox3.Text): a(1, 4) = Val(TextBox4.Text)

a(2, 1) = Val(TextBox5.Text): a(2, 2) = Val(TextBox6.Text)

a(2, 3) = Val(TextBox7.Text): a(2, 4) = Val(TextBox8.Text)

a(3, 1) = Val(TextBox9.Text): a(3, 2) = Val(TextBox10.Text)

a(3, 3) = Val(TextBox11.Text): a(3, 4) = Val(TextBox12.Text)

Q = 0

i = Val(InputBox("Виберіть номер складу зі списку:1,2,3", "Вибір номера складу"))

If i > 3 Then

MsgBox ("номер складу не повинен бути більше ніж 3"): i = 3

End If

For j = 1 To 4: Q = a(i, j) + Q: Next j

MsgBox "На " & i & " складі зберігається " & Q & " одиниць продукції", 0, "Розрахунок сумарної кількості продукції всіх видів на " & i & " складі"

End Sub

Private Sub CommandButton2_Click()

a(1, 1) = Val(TextBox1): a(1, 2) = Val(TextBox2.Text)

a(1, 3) = Val(TextBox3.Text): a(1, 4) = Val(TextBox4.Text)

a(2, 1) = Val(TextBox5.Text): a(2, 2) = Val(TextBox6.Text)

a(2, 3) = Val(TextBox7.Text): a(2, 4) = Val(TextBox8.Text)

a(3, 1) = Val(TextBox9.Text): a(3, 2) = Val(TextBox10.Text)

a(3, 3) = Val(TextBox11.Text): a(3, 4) = Val(TextBox12.Text)

Q = 0

j = Val(InputBox("Виберіть вид продукції зі списку:1,2,3,4 ", "Вибір виду продукції"))

For i = 1 To 3: Q = a(i, j) + Q: Next i

MsgBox "Сумарна кількість продукції " & j & " виду на всіх складах становить " & Q & " одиниць продукції", 0, "Підрахунок сумарної кількості продукції " & j & " виду"

End Sub

Private Sub CommandButton3_Click()

a(1, 1) = Val(TextBox1): a(1, 2) = Val(TextBox2.Text)

a(1, 3) = Val(TextBox3.Text): a(1, 4) = Val(TextBox4.Text)

a(2, 1) = Val(TextBox5.Text): a(2, 2) = Val(TextBox6.Text)

a(2, 3) = Val(TextBox7.Text): a(2, 4) = Val(TextBox8.Text)

a(3, 1) = Val(TextBox9.Text): a(3, 2) = Val(TextBox10.Text)

a(3, 3) = Val(TextBox11.Text): a(3, 4) = Val(TextBox12.Text)

Maxi = 1: Maxj = 1: Max = a(1, 1)

For i = 1 To 3

For j = 1 To 4

If a(i, j) > Max Then

Max = a(i, j)

Maxi = i

Maxj = j

End If

Next j, i

MsgBox "Максимальна кількість продукції " & Maxj & " виду" & " на " & Maxi & " складу становить " & Max & " одиниць", 0, "Максимальна кількість продукції"

End Sub

Private Sub CommandButton4_Click()

a(1, 1) = Val(TextBox1): a(1, 2) = Val(TextBox2.Text)

a(1, 3) = Val(TextBox3.Text): a(1, 4) = Val(TextBox4.Text)

a(2, 1) = Val(TextBox5.Text): a(2, 2) = Val(TextBox6.Text)

a(2, 3) = Val(TextBox7.Text): a(2, 4) = Val(TextBox8.Text)

a(3, 1) = Val(TextBox9.Text): a(3, 2) = Val(TextBox10.Text)

a(3, 3) = Val(TextBox11.Text): a(3, 4) = Val(TextBox12.Text)

b(1) = Val(TextBox20): b(2) = Val(TextBox21): b(3) = Val(TextBox22): b(4) = Val(TextBox23)

For i = 1 To m

c(i) = 0

For k = 1 To n

c(i) = c(i) + a(i, k) * b(k)

Next k

Next i

MsgBox "Вартість продукції на 1-му складі = " & Str(c(1)) & " грн." & " Вартість продукції на 2-му складі = " & Str(c(2)) & " грн. " & " Вартість продукції на 3-му складі = " & Str(c(3)) & " грн.", 0, "Вартість продукції"

End Sub

Private Sub CommandButton5_Click()

a(1, 1) = Val(TextBox1): a(1, 2) = Val(TextBox2.Text)

a(1, 3) = Val(TextBox3.Text): a(1, 4) = Val(TextBox4.Text)

a(2, 1) = Val(TextBox5.Text): a(2, 2) = Val(TextBox6.Text)

a(2, 3) = Val(TextBox7.Text): a(2, 4) = Val(TextBox8.Text)

a(3, 1) = Val(TextBox9.Text): a(3, 2) = Val(TextBox10.Text)

a(3, 3) = Val(TextBox11.Text): a(3, 4) = Val(TextBox12.Text)

b(1) = Val(TextBox20): b(2) = Val(TextBox21): b(3) = Val(TextBox22): b(4) = Val(TextBox23)

For i = 1 To m

c(i) = 0

For k = 1 To n

c(i) = c(i) + a(i, k) * b(k)

Next k

Next i

SUM = 0

For i = 1 To 3

SUM = SUM + c(i)

Next i

MsgBox "Сумарна вартість продукції на всіх складах підприємства становить " & Str(SUM) & " грн.", 0, "Сумарна вартість продукції на всіх складах підприємства"

End Sub





Дата публикования: 2014-11-26; Прочитано: 327 | Нарушение авторского права страницы | Мы поможем в написании вашей работы!



studopedia.org - Студопедия.Орг - 2014-2024 год. Студопедия не является автором материалов, которые размещены. Но предоставляет возможность бесплатного использования (0.025 с)...