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

§ 21. Застосування циклів

У цьому параграфі розглянемо метод перебирання варіантів і ал­горитмічну конструкцію «вкладені цикли», обчислення за реку­рентною формулою, метод пошуку даних у списку, а також ал­горитм визначення простих чисел.

1. Вкладені цикли, або як визначити щасливі числа. Розглянемо задачі, які розв’язують методом перебирання й аналізу всіх можли­вих варіантів (методом перебору).

Задача 1. Скільки є «щасливих» чисел серед чотиризначних з ді­апазону від 1000 до 9999? «Щасливим» вважають число, якщо сума перших двох цифр дорівнює сумі двох останніх, наприклад, 4527.

Розв’язування. Нехай значення чотирьох цифр у числі (зліва на­право) є і, j, k, т. Щасливе число — це число, для якого виконуєть­ся умова і + j = k + т. Числа j, k, т можуть набувати значення від 0 до 9, а число і — від 1 до 9. Чисел є 9000. Перебрати і проаналі­зувати всі числа можна за допомогою конструкції «вкладені цикли For». Розгляньте код розв’язування задачі.

'Щасливі числа

Dim s, і, j, k, m As Integer

s = 0 's - кількість шуканих чисел

For і = 1 То 9

For j = 0 То 9

For k = 0 То 9

For m = 0 То 9

If і + j = k + m Then s = s + 1

Next m

Next k

Next j

Next і

<вивести s>

Завдання 1. Розв’яжіть задачу 1 в консольному режимі.

Завдання 2. Розв’яжіть задачу 1 для шестизначних чисел.

Завдання 3. Виведіть всі чотиризначні числа, сума цифр яких дорівнює добутку цифр, наприклад, 1421. Ключ до розв’язку: шука­ні числа (для яких виконується умова i+j+k+m=i*j*k*m) дасть змінна b, де b = 1000 * і + 100 * j + 10 * k + m.

2. Поняття про рекурентні формули, або як полічити кроликів. У XIII столітті італійський математик Фібоначчі побудував матема­тичну модель (одну з можливих) розмноження кроликів. Він зробив такі припущення: у деякому місяці народилась пара кроликів, кро­лики починають розмножуватися на третій місяць від народження так: кожна пара плодить одну пару кроликів щомісяця. Смертність кроликів не розглядається.

Задача 2. Побудувати таблицю, що демонструє ріст популяції кроликів, починаючи з третього місяця до кінця року. Скільки кро­ликів буде через 12 місяців?

Розв’язування. Розглянемо послідовність чисел, де перші два числа — це 1 (оскільки першого і другого місяців є лише одна пара кроликів).

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

П’ятого місяця буде п’ять пар (до трьох попередніх пар дода­дуться дві новонароджені пари від старших і молодших пар кроли­ків, а наймолодша пара потомства ще не дала) і т. д.

Отримаємо таку послідовність чисел: 1, 1, 2, 3, 5. Видно, що кожне наступне число є сумою двох попередніх. Такі числа назива­ють числами Фібоначчі.

Математична модель задачі. Математично розв’язок задачі опи­сують співвідношенням (формулою, рівнянням), яке називають ре­курентним або ітераційним:

ап =an—1+an-2, де n — 3, 4, ..., 12, а1=1, a2=1.

У цій рекурентній формулі кожне наступне значення визнача­ється через два попередні.

Алгоритм обчислення десяти наступних чисел: а3, а4,..., а11, а12 за наведеним рекурентним рівнянням такий:

а3 = а2 + а1;

а4 = а3 + а2;

а5 = а4 + а3;

a12 = а11 + а10.

Кодування. Для реалізації алгоритму потрібні три змінні: дві (b, а) — для відомих значень (аn-1; аn-2) і третя (с) — для шуканого значення п). Код буде такий:

’ Числа Фібоначчі

<вивести "Місяці Пар кроликів">;

Dim а, b, с

а = 1 : b = 1

For n = 3 То 12

с = b + а : <вивести n, с>

a = b 'змінна а отримує наступне значення

b = с 'змінна b отримує наступне значення

Next n

Результати. Отримаємо таб­лицю, що демонструє числа Фі­боначчі та ріст популяції кро­ликів, починаючи з третього місяця.

Завдання 1. Виконайте код і переконайтеся, що наприкін­ці року пар кроликів буде 144.

З авдання 2*. Модифікуйте рекурентне рівняння і код для такої умови: кролики живуть 6 місяців.

З*. Як з’ясувати, чи повторюється деяке прізвище у списку. Роз­глянемо алгоритм пошуку потрібних даних у списку.

Задача 3. У список введено прізвища декількох осіб, які можуть повторюватися. Перевірити, чи повторюється задане прізвище у списку. Якщо так, то скільки разів.

Розв’язування. Вставимо на форму такі елементи керування: список ListBox1, два поля і дві кнопки. Список з прізвищами створи­мо за допомогою кнопки «Створити список» (див. тему «Списки») у VBA або як колекцію в конструкторі форми у VB. Поле TextBox1 призначене для задания критерію пошуку — прізвища, яке переві­рятимемо, чи воно повторюється. Поле TextBox2 призначене для ви­ведення повідомлення про результати пошуку (кількість повторень прізвища у списку), наприклад, «2 у списку». В коді кнопки «Пере­вірити» реалізуємо алгоритм перегляду списку і пошуку конкретно­го прізвища з підрахунком кількості повторень цього прізвища у списку.

У VB код кнопки «Перевірити» має такий вигляд:

Dim і As Integer, к As Integer

к = 0 'к - кількість повторень прізвища у списку

For і = 1 То ListBoxl.Items.Count

If ListBoxl.Items.Item(i -1) = TextBox1.Text Then k = k + 1

Next

TextBox2.Text = Str(k) + " у списку"

У VBA код кнопки «Перевірити» має такий вигляд:

Dim і As Integer, k As Integer

k = 0 'k - кількість повторень прізвища у списку

For і = 1 То ListBoxl.ListCount

If ListBoxl.List(i -1) = TextBox1 .Text Then k = k + 1

Next

TextBox2.Text = Str(k) + " у списку"

Завдання 1. Реалізуйте проект розв’язування задачі 2. Додат­кове завдання: прізвища з першого списку занесіть без повторень у другий список.

Завдання 2*. Визначіть, скільки разів кожне прізвище трапля­ється у першому списку.

Завдання 3*. З’ясуйте, яке прізвище найчастіше трапляється у першому списку.

4*. Змінні-прапорці, або як з’ясувати, чи ціле число просте. Прості числа діляться лише на 1 і на себе.

Задача 4. Визначити і вивести на екран всі прості числа від 3 до 100: 3, 5, 7, 11,..., 97.

Розв’язування. Треба послідовно проаналізувати всі числа. Не розглядатимемо парні числа, бо вони непрості. Кожне непарне чис­ло і на парні числа націло не ділиться, тому перевіримо, чи воно ді­литься націло на непарні числа 3, 5, 7, 9, ..., і / 2.

Розглянемо додаткову змінну flag типу boolean, яка сигналізуватиме про те, що число просте. Якщо число ділиться націло на інше, то воно непросте, змінній flag надаємо значення false і аналізуємо наступне число. Якщо число не ділиться націло на деяке непарне число, то перевіряємо, чи воно ділиться націло на наступне непарне число. Якщо після всіх перевірок flag=true (а це і є «сигнал», що число просте), то виведемо на екран число, яке розглядаємо.

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

Dim і, n As Integer, flag As Boolean

For і = 3 To 100

If і mod 2 = 1 Then 'Розглядаємо лише непарні числа

flag = true 'Це ознака простого числа

n = 3 'Аналізуємо ділення на всі непарні числа

While n < і / 2 And flag

If і mod n = 0 Then flag = false Else n = n + 2

Wend

If flag = true Then <вивести i>

End If

Next і

Змінні, які сигналізують про настання деякої події, у програму­ванні називають змінними-прапорцями.

Завдання 1. Виведіть прості числа: а) у список; б) у файл.

Завдання 2*. Створіть інший код розв’язування задачі 4.

Вправи

  1. Виведіть всі двозначні числа, які діляться на 3 і на 5.

  2. Визначіть кількість тризначних чисел, сума цифр яких дорівнює за­даному числу л.

  3. Виведіть усі числа Армстронга з першої тисячі. Число Армстронга — це число, сума кубів цифр якого дорівнює цьому числу.

  4. Нехай СТО, СОТ і ТОС — тризначні числа такі, що СТО 4- COT = TOC. Визначіть цифри С, Т. О. Ключ: СТО = С * 100 + Т * 10 + О.

  5. Згенеруйте і виведіть послідовність чисел за таким правилом:

ап = 2аn-1 + аn-2, де п = 3, 4, ..., 12, a1 = 1, а2 = 1.

6*. Обчисліть наближено площу під кривою у = sinx на проміжку х ≥ 0 і х ≤ π методом: а) Монте-Карло; б) «лівих прямокутників» (про суть і формули методів дізнайтеся з мережі).

7*. Розв’яжіть наближено рівняння 2пх = 1 + sinx а) методом простих ітерацій; б) ітераційним методом Ньютона (дані знайдіть у мережі).