ВІКІСТОРІНКА
Навигация:
Інформатика
Історія
Автоматизація
Адміністрування
Антропологія
Архітектура
Біологія
Будівництво
Бухгалтерія
Військова наука
Виробництво
Географія
Геологія
Господарство
Демографія
Екологія
Економіка
Електроніка
Енергетика
Журналістика
Кінематографія
Комп'ютеризація
Креслення
Кулінарія
Культура
Культура
Лінгвістика
Література
Лексикологія
Логіка
Маркетинг
Математика
Медицина
Менеджмент
Металургія
Метрологія
Мистецтво
Музика
Наукознавство
Освіта
Охорона Праці
Підприємництво
Педагогіка
Поліграфія
Право
Приладобудування
Програмування
Психологія
Радіозв'язок
Релігія
Риторика
Соціологія
Спорт
Стандартизація
Статистика
Технології
Торгівля
Транспорт
Фізіологія
Фізика
Філософія
Фінанси
Фармакологія


Опишіть принципи використання рекурсій у Visual Basic.

Рекурсивна процедура - це процедура, яка викликає сама себя.Как правило, це не найефективніший спосіб написання коду Visual Basic.

Наведена нижче процедура використовує рекурсію для обчислення факторіала вихідного аргументу:

VB

Function factorial (ByVal n As Integer) As Integer

If n <= 1 Then

Return 1

Else

Return factorial (n - 1) * n

End If

End Function

Розгляд рекурсивних процедур

Обмежуючі умови. Необхідно розробити рекурсивну процедуру для перевірки принаймні одного умови, яка може перервати рекурсію, а також необхідно розглянути випадки, коли така умова не виконується протягом розумного числа рекурсивних визовов.Без, принаймні, одного умови, яке може бути виконано без помилок, виникає великий ризик виконання в нескінченному циклі.

Використання пам’яті. Додаток має обмежений обсяг простору для локальних переменних. Кожний раз, коли процедура викликає саму себе, вона використовує більше цього простору для додаткових копій її локальних переменних. Якщо цей процес триватиме невизначено довго, він в кінцевому рахунку викличе помилку StackOverflowException.

Еффектівность. Майже завжди можна замінити цикл для рекурсіі. Цикл не має додаткових витрат аргументів передачі, ініціалізації додаткового сховища і повернення значеній. Проізводітельность може бути набагато вище без рекурсивного виклику.

Взаємна рекурсія. Можна спостерігати дуже низьку продуктивність або навіть нескінченний цикл, якщо дві процедури викликають один друга. Такий макет представляє ті ж проблеми, що і одна рекурсивна процедура, але це може бути складніше виявити і налагодити.

Виклик зі дужками. Коли процедура Function рекурсивно викликає саму себе, після імені процедури слід ставити дужки, навіть якщо відсутня список аргументов. В іншому випадку ім'я функції сприймається як її повертається значення.

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

Опишіть принципи та синтаксис функцій роботи з рядками у Visual Basic.

Для опрацювання текстової інформації в мові програмування Visual Basic існує тип даних String (рядок). Значення типу String є послідовністю символів, яка береться в лапки. Наприклад: “добрий ранок”, “група 31”. Рядки є наборами символів, нумерація яких розпочинається з 1. Майже всі рядки, що використовуються в програмах, належать до рядків змінної довжини і можуть містити до 2 мільярдів символів. Рядки фіксованої довжини — це рядки постійного розміру (до 64000 символів). Якщо рядковій змінній присвоєно вираз, довжина якого менша оголошеної довжини змінної, то вільне місце заповнюється пробілами. Змінні рядкового типу можна оголошувати: За допомогою ключового слова As: Dim g As String; Використовуючи метод суфіксів типів даних: Dim g$. Для задання змінної фіксованої довжини використовується оператор виду: Dim ім’я As String*довжина. Функції роботи з рядковими величинами 1) Конкатенація рядків Конкатенація рядків — об’єднання їх з допомогою символу &. Dim G, F, H, K As String G = "apple" F = "GREEN" H = F & G K = G & F Console.WriteLine(H) Console.WriteLine(K) Console.ReadLine() 2) Визначення довжини рядка Функція повертає число символів, з яких утворено рядок. Синтаксис функції: N=Len(strF). 3) Функції перетворення Функція Str() та Val()перетворюють значення одного типу в значення іншого. Dim n, i, S1 As Integer Dim s As String s = "f1hjhjhj25" For i = 0 To Len(s) - 1 n = Val(s(i)) Console.Write(n) Next Результат: 0100000025 Зауваження: нажаль, функція VAL (в консольному додатку) не обробляє рядки, введені з клавіатури, а лише працює з рядками-константами. 4) Обрізання рядків Обрізання рядка означає відкидання його частини з метою отримання більш короткого рядка. Dim G$, F$, H$ Dim k As Byte G = "green apple" F = Left(G, 3) H = Right(G, 2) Console.WriteLine(F) Console.WriteLine(H) Console.ReadLine() Результат: gre le 5) Одержання підрядка Функція Mid(strG, i, n) повертає n символів з рядка, починаючи i з місця. Dim G$, F$, H$ Dim k As Byte G = "ІНФОРМАТИКА" H = Mid(G, 3, 5) Console.WriteLine(H) Console.ReadLine() Результат: ФОРМА 6) Заміна символів усередині рядка Функція Replace(strG, strG1, strG2) виконує пошук (strG1) та заміну (strG2) шуканого підрядка в даному рядку (strG). Dim G$, H$ G = "туристи" H = Replace(G, "рис", "мал") Console.WriteLine(H) Console.ReadLine() Результат: тумалти 7) Пошук символів у рядку Функція InSrt(strG, strG1) шукає входження підрядка (strG1) в рядок (strG), вказуючи номер першого символу підрядка у рядку. Dim G$ Dim H As Byte G = "туристи" H = InStr(G, "рис") Console.WriteLine(H) Console.ReadLine() Результат: 3 У випадку, якщо підрядок (strG1) не входить в рядок (strG) то значення функції дорівнює 0. Dim G$ Dim H As Byte G = "туристи" H = InStr(G, "а") Console.WriteLine(H) Console.ReadLine() Результат: 0

Охарактеризуйте методи порівняння рядків у Visual Basic.

У Visual Basic можна порівнювати рядки, використовуючи Оператор Like (Visual Basic) з тим же успіхом, що й для числових операторів порівняння. Оператор Like дозволяє вказати шаблон. Рядок потім порівнюється з шаблоном, і якщо вона йому відповідає, то результатом порівняння буде True. В іншому випадку результатом буде False. Числові оператори дозволяють порівнювати значення String на основі їх порядку сортування, як це показано в наступному прикладі:

"73" <"9"

'The result of the preceding comparison is True.

Результатом попереднього прикладу є значення True, оскільки перший символ в першому рядку сортується до першого символу у другому рядку. Якщо перші символи рівні, триває порівняння наступних символів в обох рядках і т.д. Можна також перевірити рівність рядків за допомогою оператора рівності, як показано в наступному прикладі:

"734" = "734"

'The result of the preceding comparison is True.

Якщо в одному рядку префікс відрізняється, наприклад "аа" і "ааа", то той рядок, яка довший, вважається більше тієї рядка, який коротше. Це показано у наведеному нижче прикладі.

"aaa"> "aa"

'The result of the preceding comparison is True.

Порядок сортування грунтується на двоичном порівнянні або текстовому порівнянні залежно від настройки Option Compare. Додаткові відомості див. У розділі Оператор Option Compare.

Опишіть принципи використання масивів у Visual Basic.

Охарактеризуйте синтаксис та правила використання операторів для роботи з масивами у Visual Basic.

Опишіть алгоритми пошуку в одновимірному масиві.

Алгоритми пошуку застосовуються для знаходження, наприклад, у масиві елемента з потрібними властивостями. Звичайно розрізняють постановки завдання пошуку для першого й останнього входження елемента. В усіх нижче викладених алгоритмах будемо вважати, що виробляється пошук у масиві A з N цілих чисел елемента, рівного X.

Лінійний пошук

Лінійний пошук здійснюється циклом (while) з подвійною умовою. Перша умова контролює індекс на приналежність масиву, наприклад, (i<=N). Друга умова — це умова пошуку. У нашому випадку в циклі while ця умова продовження пошуку: (A[i]<>X), (A[i]=X). У тілі циклу звичайно пишеться тільки один оператор: зміна індексу в масиві. Після виходу із циклу необхідно перевірити, по якому з умов ми вийшли. В операторі if звичайно повторюють перша умова циклу. Можна говорити про успішний пошук із циклом while при виконанні цієї умови.

Приклад: Лінійний пошук C#

Console.WriteLine("Введите число "); int n = Int32.Parse(Console.ReadLine()); int[] a = new int[n+1]; Random r = new Random(); int i, min, i1; for (i = 1; i <= n; i++) { a[i] = r.Next(100); Console.Write(a[i] + " "); } Console.WriteLine(); Console.WriteLine("Введите число "); int m = Int32.Parse(Console.ReadLine()); i = 1; while ((i < n) && (a[i] != m)) i++; { if (i < n) { Console.WriteLine("Перше входження" + m + "место" + i); } else { Console.WriteLine("Нет такого елемента"); } } Console.ReadLine(); //При пошуку останнього входження після уведення повинні йти оператори: Console.WriteLine("Введите число "); int n = Int32.Parse(Console.ReadLine()); int[] a = new int[n+1]; Random r = new Random(); int i, min, i1; for (i = 1; i <= n; i++) { a[i] = r.Next(100); Console.Write(a[i] + " "); } Console.WriteLine(); Console.WriteLine("Введите число "); int m = Int32.Parse(Console.ReadLine()); i = n; while ((i > 1) && (a[i] != m)) i--; { if (i > 1) { Console.WriteLine("Перше входження" + m + "место" + i); } else { Console.WriteLine("Нет такого елемента"); } } Console.ReadLine();

Пошук бар'єром

Ідея пошуку з бар'єром полягає в тому, щоб не перевіряти щораз у циклі умову, пов'язану із границями масиву. Це можна забезпечити, установивши в масив так званий бар'єр: будь-який елемент, що задовольняє умову пошуку. Тим самим буде обмежена зміна індексу. Вихід із циклу, у якому тепер залишається тільки умова пошуку, може відбутися або на знайденому елементі, або на бар'єрі. Таким чином, після виходу із циклу перевіряється, не чи бар'єр ми знайшли? Обчислювальна складність пошуку з бар'єром менше, ніж у лінійного пошуку, але також є величиною того ж порядку, що й N — кількість елементів масиву. Існує два способи установки бар'єра: додатковим елементом або замість крайнього елемента масиву.

Приклад: Пошук з бар'єром C#

Console.WriteLine("Введите число "); int n = Int32.Parse(Console.ReadLine()); int[] a = new int[n+2]; Random r = new Random(); int i, min, i1; for (i = 1; i <= n; i++) { a[i] = r.Next(100); Console.Write(a[i] + " "); } Console.WriteLine(); Console.WriteLine("Введите число "); int m = Int32.Parse(Console.ReadLine()); a[n + 1] = m; i = 1; while (a[i] != m) i++; { if (i <=n ) { Console.WriteLine("Перше входження" + m + "место" + i); } else { Console.WriteLine("Нет такого елемента"); } } Console.ReadLine();

Двійковий (БІНАРНИЙ) пошук

Алгоритм двійкового пошуку можна використати для пошуку елемента із заданою властивістю тільки в масивах, упорядкованих по цій властивості. Так при пошуку числа із заданим значенням необхідно мати масив, упорядкований по зростанню або по убуванню значень елементів. А, наприклад, при пошуку числа із заданою сумою цифрмасив повинен бути впорядкований по зростанню або по убуванню сум цифр елементів. Ідея алгоритму полягає в тому, що масив щораз ділиться навпіл і вибирається та частина, де може перебувати потрібний елемент. Розподіл триває поки частина масиву для пошуку більше одного елемента, після чого залишається перевірити цей елемент, що залишився, на виконання умови пошуку. Існують дві модифікації цього алгоритму для пошуку першого й останнього входження. Все залежить від того, як вибирається середній елемент: округленням у меншу або більшу сторону. У першому випадку середній елемент ставиться до лівої частини масиву, а в другому — до правого. У процесі роботи алгоритму двійкового пошуку розмір фрагмента, де цей пошук повинен тривати, щораз зменшується приблизно у два рази. Це забезпечує обчислювальну складність алгоритму порядку логарифма N по підставі 2, де N — кількість елементів масиву.

Приклад: Пошук в упорядкованому по зростанню масиві першого входження числа X. C#

Console.WriteLine("Введите число "); int n = Int32.Parse(Console.ReadLine()); int[] a = new int[n+2]; Random r = new Random(); int i; for (i = 1; i <= n; i++) { a[i] = r.Next(100); Console.Write(a[i] + " "); } Console.WriteLine(); for (i=1; i<=n-1;i++) for (int j = 1; j <= n - 1; j++) { if (a[j] > a[j + 1]) { int b = a[j]; a[j] = a[j + 1]; a[j + 1] = b; } } for (i = 1; i <= n; i++) { Console.Write(a[i] + " "); } Console.WriteLine(); Console.WriteLine("Введите число "); int m = Int32.Parse(Console.ReadLine()); int left = 1; int right = n; while (left < right) { int c = (left + right) / 2; Console.WriteLine(left+ " " + right + " " +c); if (m > a[c]) { left = c + 1; } else { right = c; } } if (m == a[left]) { Console.WriteLine("Перше входження" + m + "место" + left); } else { Console.WriteLine("Нет такого елемента"); } Console.ReadLine();

 

© 2013 wikipage.com.ua - Дякуємо за посилання на wikipage.com.ua | Контакти