![]() |
Главная Случайная страница Контакты | Мы поможем в написании вашей работы! | |
|
Розглянуті вище функції є вбудованими (системними) функціями Visual Basic, але кожен програміст може визначити і свої власні (визначені) функції.
Наприклад, можна визначити функцію Гіпотенуза (а, b), що обчислює довжину гіпотенузи трикутника за теоремою Піфагора: s = Sqr(a^2 + b^2), де a, b — довжини катетів, s — довжина гіпотенузи.
Як це можна робити, ми розглянемо далі, у 1-й главі 2-ї частини посібника, яка призначена процедурам і функціям, які визначаються розробником.
Розглянуті в цьому розділі види функцій і окремі функції — не єдині в Бейсік. Є й інші, про них Ви довідаєтеся в наступних розділах цієї глави (та інших главах).
Крім того, цікаво відзначити тісний зв'язок, що існує між поняттями функції і виразу: вираз (наприклад, арифметичний) можна вважати частковим випадком функції!
Hові поняття:
функція, вбудовані функції, обумовлені функції, математичні функції, фінансові функції, системні функції, функція Вікно вводу, функція Вікно повідомлення.
Питання для роздумів
Як Ви думаєте, чим відрізняються поняття функції в математиці і поняття функції в інформатиці?
Приведіть приклади функцій одного, двох і трьох аргументів у мові Бейсік.
Як Ви думаєте, чим відрізняється функція Int (x) від функції Fix (x)? А функція CInt (x) від функції Fix (x)? Приведіть приклади, що демонструють ці відмінності.
Які значення мають складові Op l і Op 2 аргументу Опція функції MsgBox у прикладах, приведених на мал. 4.2? (Відповідь: 16+1, 32+4, 48+2, 64+0).
4.3. Обробка рядкових виразів
У розд. 3.1 було сказано, що рядок — це значення змінної типу String. Насамперед уточнимо це поняття.
Рядок — це впорядкована послідовність символів (Символ — це знак, для якого на Вашому комп'ютері встановлений визначений код — число від 0 до 255 (код ASCII). Багато символів (але не всі) Ви можете відшукати на клавіатурі. Тут ми не будемо докладно заглиблюватися в питання про коди ASCII), або порожній рядок. Для позначення рядка використовуються лапки:
"" — позначення порожнього рядка.
"Іван" — приклад заповненого рядка.
Між лапками при позначенні порожнього рядка пробіл ставити не можна, тому що пробіл — це теж символ.
Число символів рядка називається довжиною рядка. Довжина порожнього рядка дорівнює нулю.
Кожен символ рядка має свою позицію — порядковий номер при рахунку зліва направо. Наприклад, символ 1 в рядку " Іван " має позицію 1, а символ н — позицію 4.
У Бейсіку використовується поняття підрядка. Строго визначати його ми не будемо, обмежимося прикладами:
"Іван" — це підрядок рядка "Іванов";
"+1" — це підрядок рядка "Число+100";
"01" не є підрядком рядка "Число+100".
(чи можете Ви самі за цими прикладами визначити поняття підрядка?)
Підрядок S1 рядка S називається лівим підрядком, якщо їхні перші символи збігаються ("Іван" — лівий підрядок рядка "Іванов").
Підрядок S1 рядка S називається правим підрядком, якщо їхні останні символи збігаються ("ов" — правий підрядок рядка "Іванов").
Конкатенацією двох рядків S1 і S2 називається такий рядок S, для якого S1 і S2 — це лівий і правий підрядки, а довжина S дорівнює сумі довжин S1 і S2. Приклад: "12345678" — це конкатенація рядків "12345" і "678".
Рядковий вираз — це рядок, або рядок і рядковий вираз, між якими стоїть знак конкатенації. (Визначення рекурсивне!)
Знак конкатенації у Visual Basic — це знак +. Але не треба плутати конкатенацію рядків з додаванням чисел в арифметичних виразах, хоча знак використовується той самий!
У мові Visual Basic застосовується ще один знак конкатенації: & (амперсанд). З його допомогою можна піддати конкатенації не тільки рядки, але і числа. При цьому числа будуть спочатку перетворені в рядки (обрамлені лапками). І результат теж буде рядком.
Приклад 4.4. Код 4.3 демонструє конкатенацію рядків і чисел за допомогою знака &:
Код 4.3 |
Dim Рядок1, Рядок2 As Sting Dim Результат As Sting Рядок1 = "Об'єм кімнати" Рядок2 = "куб.метрів" Результат = Рядок1 & 2.5 * 3 * 5 & Рядок2 |
Після виконання цього коду значенням змінної Результат буде рядок: "Обсяг кімнати 37.5 куб. метрів".
А тепер представимо деякі найбільш розповсюджені функції, що мають справу з рядками — обробляють їх, або повертають їх як свої значення.
Аргументи у визначеннях функцій будемо записувати із суфіксами — для вказівки їхнього типу.
Функція визначення довжини рядка. Синтаксис функції:
Len(Рядок$) |
Функція повертає довжину Рядок$. Наприклад:
Len ("Іван" + "Іванович") повертає 12;
Len ("Іван" + " "+"Іванович") повертає 13;
Len (900 & "-" & 4567) повертає 8.
Функції виділення підрядка. Таких функцій три:
Mid(Рядок$, Позиція& [, Довжина&]) |
У Рядку$ виділяється підрядок починаючи від заданої Позиції&. Довжину& виділеного підрядка можна не вказувати: тоді буде повернутий підрядок від даної Позиції& до кінця Рядка$.
Наприклад:
Mid ("Іван"+"Іванович", 6) повертає "Іванович";
Mid ("Іван Іванович", 6, 2) повертає "Верб".
Left(Рядок$, Довжина) |
У Рядку$ виділяється лівий підрядок Довжиною&. Він і буде значенням, що повертається. Наприклад:
Left ("Іванович", 4) повертає "Іван".
Right(Рядок$, Довжина&) |
У Рядку$ виділяється правий підрядок Довжиною&. Він і буде значенням, що повертається. Наприклад:
Right ("Іван Іванович", 8) повертає "Іванович".
Функція пошуку підрядка. Синтаксис функції:
Instr([Старт&,] Рядок$, Підрядок&) |
В Рядку$ шукається те місце, де знаходиться Підрядок$. Повертається позиція першого символу Підрядка$. Якщо Підрядок$ не знайдено, повертається 0.
Старт& — необов'язковий аргумент — номер тієї позиції, з якої починається пошук. Наприклад:
InStr (" ІванІванович", "Іван") повертає 1;
InStr (" ІванІванович", "Петро") повертає 0;
InStr (1, " ІванІванович", "Іван") повертає 1;
InStr (2, " ІванІванович", "Іван") повертає 6;
Функції перетворення. Таких функцій у Visual Basic досить багато. Їхнє призначення — перетворення даних з одного типу в іншій. Наприклад, цілий ряд функцій покликаний перетворювати рядки в різні числові і нечислові типи (З однією з таких функцій Ви вже познайомилися — це згадана в розд. 4.2 функція CInt. У загальному випадку ця функція перетворить рядок символів у ціле число, наприклад, рядок "25" у число 25). Розглянемо тільки 4 функції цього виду.
Val(Рядок&) |
Ця функція перетворить Рядок у число. Наприклад:
Val ("2.5") повертає 2.5.
Дана функція часто застосовується для перетворення рядків, що вводяться користувачем через Вікна вводу чи текстові поля екранної форми, у числа, що потім використовуються при обчисленнях (Саме з такою метою ми вже застосовували функцію Val у програмі, розглянутій у гл. 2 (код 2.1)).
Str(Число) |
Ця функція перетворює Число будь-якого типу в рядок. Наприклад:
Str (5E+25) повертає "5E+25"
Дана функція часто застосовується для перетворення чисел, що виходять у результаті зроблених програмою обчислень, у рядки, що поміщаються в текстові поля екранної форми чи Вікна повідомлень (Саме з такою метою ми вже застосовували функцію Str у програмі, розглянутій в гл. 2 (код 2.1)).
Ще кілька корисних функцій обробки рядків розглянуті в останньому розділі даної глави.
Нові поняття:
рядок, функції обробки рядків, символ, код ASCII, позиція символу, підрядок, лівий підрядок, правий підрядок, конкатенація рядків, рядковий вираз.
Питання для роздумів
Як Ви думаєте, чи виконується переставний закон для операції + над рядками (для конкатенації)? Іншими словами, чи завжди справедлива рівність А + У = У + А?
Як Ви думаєте, скільки початкових позицій може бути в підрядку довжиною M у рядку довжиною N (N>M)? (Відповідь: N — M+ 1.)
Як Ви думаєте, скільки початкових позицій може мати порожній підрядок в непорожньому рядку? Перевірте! (Відповідь: Скільки завгодно.)
Яке значення поверне функція Val ("2Е5")? (Відповідь: 200000.)
Уважно подивіться на код 4.3 (приклад 4.4). Як Ви думаєте, яка з двох операцій — множення чи конкатенація виконується раніше? Чи можете Ви зробити висновок про те, що всі арифметичні операції "старші" від конкатенації"?
Дата публикования: 2014-12-28; Прочитано: 336 | Нарушение авторского права страницы | Мы поможем в написании вашей работы!