Приклади задач на операції з цілими числами

При вивченні основ програмування для прикладів доводиться розв’язувати прості задачі з тієї чи іншої галузі, переважно з математики або фізики. Одним з таких “полігонів” може бути множина натуральних чисел, оскільки їх властивості відомі широкому загалу користувачів з ранніх шкільних років. Цей матеріал пропонує читачеві ознайомитися з основними алгоритмічними конструкціями Visual Basic (OOo Basic) на прикладі задач про натуральні числа.

Над цілочисельними даними в Visual Basic можна виконувати спеціальні арифметичні операції:

  • ділення k на m націло, позначається знаком “k \ m” (знак зворотний “слеш”);
  • остача від ділення k на m, позначається “k mod m”.

Ці дві операції дозволяють, наприклад, перевірити парність числа (для парних чисел n mod 2 = 0) чи встановити кількість десятків у записі цілого числа (n \ 10 mod 10).

Задача 1 (лінійний структура). Для введеного з клавіатури трицифрового натурального числа вивести суму та добуток його цифр.

Розв’язання. Для визначення першої цифри трицифрового числа можна поділити його націло на 100 (n\100), останньої — отримати остачу від ділення (n mod 10). А от для встановлення другої цифри потрібно спочатку відкинути останню цифру діленням на 10 націло, а потім вже отримати остачу від ділення отриманого результату на 10 (n\10 mod 10). Отримаємо такий код:

Sub Sample1()
Dim n As Integer
Dim s As Integer
Dim d As Integer
n = InputBox(“Введіть трицифрове число”)
s = n\100 + n\10 mod 10 + n mod 10
d = (n\100) * (n\10 mod 10) * (n mod 10)
MsgBox “Сума цифр “ & s & Chr(13) & “Добуток цифр “ & d
End Sub

Задача 2 (розгалужена структура). Перевірити чи цифри введеного з клавіатури чотирицифрового натурального числа утвоюють зростаючу послідовність.

Розв’язання. Для зберігання цифр числа скористаємося додатковими змінніми n1, n2, n3 та n4.
Умову того, що цифри утворюють зростаючу послідовність запишемо за допомогою логічної операції “і” (And) – перша цифра менша за другу і друга менша за третю і третя менша за четверту. Орієнтовний код процедури:

Sub Sample2()
Dim n As Integer
Dim n1 As Integer, n2 As Integer
Dim n3 As Integer, n4 As Integer
n = InputBox(“Введіть чотирицифрове число”)
n1 = n\1000 : n2 = n\100 mod 10
n3 = n\10 mod 10 : n4 = n mod 10
If (n1 < n2) And (n2 < n3) And (n3 < n4) Then
MsgBox “Цифри числа утворюють зростаючу послідовність”
Else
MsgBox “Цифри не утворюють зростаючої послідовності”
End If
End Sub

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

Розв’язання задачі полягає в послідовній перевірці того чи ділиться задане число на 2, 3, … Якщо число n ділиться на число k націло, то остача від ділення повинна дорівнювати 0. Відомий з теорії чисел факт стверджує, що якщо натуральне число має дільник більший за свій корінь квадратний, то воно матиме і дільник менший ніж його корінь. Тобто, пошук дільників достатньо проводити серед натуральних чисел від 2 до Int(Sqr(n))+1 — найближчого цілого числа, більшого за корінь квадратний з n. Для перебору дільників використаємо цикл з параметром For, отримаємо таку процедуру:

Sub Sample3()
Dim n As Integer, k As Integer, f As Boolean
n = InputBox(“Введіть натуральне число”)
f = True
For k = 2 To Int(Sqr(n))+1
If n mod k = 0 Then
f = False
End If
Next k
If f Then
MsgBox “Число просте”
Else
MsgBox “Число складене”
End If
End Sub

В наведеному вище коді використано логічну змінну-”прапорець” f, яка залишиться істинною, якщо число n не поділиться на жоден із перелічених дільників і це буде ознакою того, що число n просте. Якщо ж n поділиться на котресь із значень k, то оператор If у тілі циклу присвоїть змінній f значення False. В запропонованому вище коді перевірка подільності здійснюватиметься для всіх значень k від 2 до Int(Sqr(n))+1, навіть, якщо вже відомо якийсь дільник числа і ми впевнені, що число не є простим. Вихід з циклу перевірки після першого ж знайденого дільника можна здійснити використавши замість циклу For цикл While:

Sub Sample3a
Dim n As Integer, k As Integer, f As Boolean
n = InputBox(“Введіть натуральне число”)
f = True
k = 2
While k<=Int(Sqr(n))+1 And f
If n mod k = 0 Then
f = False
End If
k = k + 1
Wend
If f Then
MsgBox “Число просте”
Else
MsgBox “Число складене”
End If
End Sub

3 comments

  1. Andrew коментує:

    В останніх двох прикладах розгалуження
    If n mod k = 0 Then
    f = False
    End If

    Можна замінити присвоєнням
    f = Not(n mod k = 0)

  2. admin коментує:

    Справді.
    Так елегантніше, але незрозуміло для початківців.

  3. Carltonoi коментує:

    Very nice!

Напишіть відгук

Ваша пошт@ не публікуватиметься. Обов’язкові поля позначені *

*

Можна використовувати XHTML теґи та атрибути: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>