Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Візуал Бейсік 2010 Глінський.docx
Скачиваний:
0
Добавлен:
01.07.2025
Размер:
4.12 Mб
Скачать

§ 20. Задачі пошуку даних. Цикл «доки»

Пошук потрібних значень серед великої кількості даних — одне з найважливіших завдань інформатики. У цьому параграфі роз­глянемо типові задачі пошуку даних.

1. Розгалуження в циклі, або як знайти значення, які задоволь­няють деяку умову (критерій пошуку). Пошук даних виконують за допомогою алгоритмічної конструкції «розгалуження в циклі». Во­на є комбінацією циклу і розгалуження. Розгалуження в циклі ут­ворюють шляхом використання команди розгалуження If чи Select Case у циклі For або в іншому циклі.

Задача 1. Послідовність десяти чисел задана формулою ai = і2-30, і = 1,2, ..., 10. Вивести послідовність у вигляді таблиці: номер чис­ла, його значення. Додатково виконати пошук даних, що задоволь­няють критерії, сформульовані у завданнях.

Завдання 1. Вивести лише додатні елементи послідовності.

Завдання 2. Вивести елементи послідовності, що задовольня­ють умову 10 < а, < 50.

Завдання 3. Вивести всі елементи й обчислити кількість (k) від’ємних елементів.

Завдання 4. Вивести всі елементи і суму (s) додатних елементів.

Завдання 5. Вивести всі елементи і середнє арифметичне дода­тних елементів.

Завдання 6*. Скільки в послідовності є елементів, більших за середнє арифметичне значення додатних елементів?

Розв’язування. В основу проекту покладемо код розв’язування завдання 1. Код призначимо деякій кнопці на формі. Для виведен­ня таблиці застосуємо багаторядкове текстове поле TextBox1. У цикл For помістимо команду if з метою пошуку додатних елементів послі­довності. Критерій пошуку моделюємо нерівністю а > 0.

’ Послідовність чисел

Dim і, n, a, t

n = InputВох("Введіть кількість чисел")

TextBox1.Text =""

For і = 1 То n

а = і ^ 2 – 30

If а > 0 Then

t= Str(i) + ” "+Str(a)

TextBox1.Тext = TextBox1.Text +1 + vbCr VBA

End If

Next і

Переконайтеся, що результат буде такий:

6

6

7

19

8

34

9

51

10

70

Завдання 2-6 виконайте самостійно, використовуючи різні спо­соби виведення результатів. Головне — правильно записати крите­рій пошуку і перед циклом задати початкові значення змінним, як: змінюватимемо в циклі, наприклад, k = 0 чи s = 0. Ключ-підказка: виберіть з наступного списку відповідну команду розгалуження, яку треба вставити в цикл, щоб отримати потрібний код:

  1. If а > 0 Then s = s+ а

  2. If а < 0 Then k = k + 1

  3. If а > 10 And a < 50 Then <вивести і, a>

  4. If a > 0 Then s = s+a:k = k + 1

2. Як знайти найбільше (найменше) дане у послідовності, а та­кож номер такого даного. Типовою задачею інформатики е аналіз даних з метою знаходження найбільшого чи найменшого значення. Ця задача є моделлю багатьох реальних задач, наприклад:

  1. визначити найбільший дохід компанії за певний період;

  2. дослідити, в якому році (місяці) були найбільші втрати;

  3. з’ясувати, хто з менеджерів компанії реалізував товарів на найбільшу суму тощо.

Розглянемо задачу, яка може слугувати математичною моделлю вищеописаних задач.

Задача 2. У послідовності чисел, заданих формулою ai = і2 - 5і + 5, де і = 1, 2, 3, ..., 6, визначити найбільше число і його номер.

Розв’язування. Маємо таку послідовність: 1, -1, -1, 1, 5, 11. Пе­реконайтеся, що найбільше число тут — 11, а його номер у послідов­ності — 6. Однак формальний виконавець, яким є комп’ютер, очей не має і чисел не бачить. Щоб розв’язати цю задачу, він повинен «переглянути» і проаналізувати всі числа без винятку (запам’ятайте цей принцип).

Спочатку виконавець робить припущення, що найбільше число — перше і номер найбільшого числа, відповідно, 1.

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

За допомогою циклу виконавець «переглядає» всі інші числа і порівнює їх з еталоном. Якщо він виявить число, більше за еталон (оце удача!), то змінює еталон (max) на знайдене число, значення но­мера (nomer) змінює на нове і переглядає числа далі, порівнюючи їх уже з новим еталоном. Коли цикл завершиться, змінні max і птах міститимуть розв’язок задачі.

Розглянемо код описаного вище алгоритму:

' Найбільше число і його номер Dim і, n, a, max, nomer

n = InputВох(“Введіть кількість чисел”)

nomer = 1

max = nomer ^2 - 5* nomer + 5

For і = 2 To n

а = і^2-5*і + 5

<вивести і, a>

If a > max Then max = a : nomer = і

Next і

<вивести nomer, max>

Завдання 1. Реалізуйте задачу 2 як проект на формі.

Завдання 2. Визначіть мінімальний елемент і його номер.

Завдання 3*. Визначіть суму мінімального і максимального еле­ментів. Код має містити лише один цикл.

4. Цикл «доки». Команда циклу While. Розглянемо ще одну конст­рукцію циклу, яку називають цикл «доки» (інші назви — цикл While, цикл з умовою). Цей цикл вважають універсальним. Він при­значений для реалізації циклів як з відомою, так і з невідомою за­здалегідь кількістю повторень. Цикл має такий загальний вигляд у VB:

While <логічний вираз>

<серія команд>

End While

і такий у VBA:

While <логічний вираз>

<серія команд>

Wend

Якщо у середовищі VB написати слово Wend, середовище авто­матично замінить його на End While (без фіксування помилки).

Дія команди. Серія команд виконується в циклі, доки значення логічного виразу є істинне. Істинний логічний вираз описує умову продовження циклу.

Розгляньте графічні схеми циклу «доки» (рис. 1.25).

Запишемо код виведення таблиці квадратів чисел від 10 до 20 за і допомогою команди While:

і = 10

While і <= 20

<вивести і, і ^ 2>

і = і + 1

Wend

Рис. 1.25. Графічні схеми циклу «доки»

Правило 1. Усередині тіла циклу «доки» має бути команда змі­ни значення параметра (тут і = і + 1) чи деякого виразу.

Правило 2. Перед командою циклу має бути команда, що задає початкове значення параметра (тут і = 10) чи деякої змінної.

Задача 3. Скласти графічні схеми і код для обчислення суми чи­сел від 1 до 100, використавши команду While.

Розв’язування. Графічні схеми алгоритму зображені на рис. 1.26.

Рис. 1.26. Графічні схеми алгоритму обчислення суми чисел

Відповідний код має такий вигляд:

'Сума чисел

Dim Число As Integer, Сума As Integer, n As Integer

n = InputВох("Введіть n")

Сума = 0

Число = 1

While Число <= n

Сума = Сума + Число

Число = Число +1

Wend

<вивести Сума>

Завдання 1. Реалізуйте код розв’язування задачі 3.

Завдання 2. Обчисліть суму парних чисел від 20 до 100, вико­риставши команду While.

Завдання 3. Обчисліть 10!, використовуючи команду While. Пі­дказка: 10!=1*2*3*...*10 (добуток перших десяти чисел).

Завдання 4. Обчисліть суму, добуток і кількість парних чисел від 10 до ЗО, використавши одну команду While.

Завдання 5*. У текстовому файлі є стовпчик з невідомою кіль­кістю чисел. Обчислити їх суму. Підказка: застосуйте такий фраг­мент коду, де Eof — стандартна логічна функція «кінець файлу»:

s = 0

While Not Eof(nf)

Input #nf, z

s = s + z

Wend

< вивести s>

Команду While тут читають так: доки не кінець файлу з номером nf, то зчитувати з файлу одне значення і додавати його до s. У цьому циклі кількість повторень заздалегідь невідома, але їх можна визначити в процесі виконання циклу. Зробіть це.

5. Табулювання функції. Табулювання функції — це побудова таб­лиці зі значеннями аргументу і функції, де аргумент змінюється на деякому проміжку з деяким кроком.

Задача 4. Протабулювати функ­цію у = х3 на проміжку [-1; 1], змі­нюючи значення аргументу на крок 0,25, тобто для таких значень аргу­менту: -1, -0.75, -0.5, -0.25, 0, 0.25, 0.5, 0.75, 1. Застосувати підпрограму-функцію. Результати по­дати у вигляді таблиці. Обчислити суму, добуток і кількість додатних значень функції у.

Розв’язування. Головний код помістіть у процедуру Sub Маіn(), а перед ним розташуйте функцію у(х).

Function у(х)

у = х ^ 3

End Function

' Табулювання функції (головний код)

Dim s, k, d, х, у1, xk As Single

s = 0:k = 0:d = 1

x = -1 : xk = 1 : h = 0.25

While x <= xk

y1 = y(x)

<вивести X, y1>

If y1 >0 Then

s = s + y1:d = d*y1:k = k + 1

End If

x = x + h

Wend

<вивести "s = " + str(s) + " d = " + str(d) + " k = " + str(k)>

Виведення результатів організуйте командами Console.WriteLine (у VB) чи Debug.WriteLine (у VB чи VBA) — отримаєте результати, бли­зькі до тих, що подані на рисунку поряд з умовою задачі.

Завдання 1. Модифікуйте код для визначення найбільшого зна­чення функції і значення аргументу, для якого воно досягається.

Завдання 2. Модифікуйте код, застосувавши цикл «для» за­мість циклу «доки».

Висновок. Задачі пошуку потрібних даних розв’язують за допо­могою конструкції «розгалуження в циклі»: циклу For або While, в який для аналізу даних поміщено команду If.

Довідка. Окрім команд циклів For і While, є група команд циклів Do-Loop. їх ми не розглядатимемо.

Вправи

1. Які значення змінних s і d після виконання кодів:

а) s=0 : x=1

б)

d = 1

While х <= 5

m = 6 : x = 1

s = s + x

While x <= m

х = х + 2

d = d*x:x = x + m/2

Wend

Wend

в) d = 1 : a = 2

г)

s = 0 : x = 10

While а < 6

While x > 0

d=d*a:a=a+1

s = s + x:x = x-3

Wend

Wend

2. Використовуючи команду циклу While, виведіть у вигляді таблиці значень і, at послідовність чисел at = і2 - 36, де і = 1, 2, ..., 10 та:

а) визначіть суму додатних елементів послідовності;

б) кількість від’ємних елементів;

в) середнє арифметичне додатних елементів.

3*. Використовуючи цикл While, серед перших ста цілих чисел визна­чіть кількість парних чисел, які є:

а) кратні числу 3;

б) діляться без остачі на 3 і на 5.

4*. Розв’яжіть задачу № 9 свого варіанта з розділу «Задачі».

5**. Розв’яжіть задачу № 10 свого варіанта з розділу «Задачі».