ПЕРЕЛІК ДИСЦИПЛІН:
  • Адміністративне право
  • Арбітражний процес
  • Архітектура
  • Астрологія
  • Астрономія
  • Банківська справа
  • Безпека життєдіяльності
  • Біографії
  • Біологія
  • Біологія і хімія
  • Ботаніка та сільське гос-во
  • Бухгалтерський облік і аудит
  • Валютні відносини
  • Ветеринарія
  • Військова кафедра
  • Географія
  • Геодезія
  • Геологія
  • Етика
  • Держава і право
  • Цивільне право і процес
  • Діловодство
  • Гроші та кредит
  • Природничі науки
  • Журналістика
  • Екологія
  • Видавнича справа та поліграфія
  • Інвестиції
  • Іноземна мова
  • Інформатика
  • Інформатика, програмування
  • Юрист по наследству
  • Історичні особистості
  • Історія
  • Історія техніки
  • Кибернетика
  • Комунікації і зв'язок
  • Комп'ютерні науки
  • Косметологія
  • Короткий зміст творів
  • Криміналістика
  • Кримінологія
  • Криптология
  • Кулінарія
  • Культура і мистецтво
  • Культурологія
  • Російська література
  • Література і російська мова
  • Логіка
  • Логістика
  • Маркетинг
  • Математика
  • Медицина, здоров'я
  • Медичні науки
  • Міжнародне публічне право
  • Міжнародне приватне право
  • Міжнародні відносини
  • Менеджмент
  • Металургія
  • Москвоведение
  • Мовознавство
  • Музика
  • Муніципальне право
  • Податки, оподаткування
  •  
    Бесплатные рефераты
     

     

     

     

     

     

         
     
    Про користь циклів
         

     

    Інформатика, програмування

    Про користь циклів.

    Розкажу трохи про цикли. Адже майже не один, навіть дуже простенька програма, не обходиться без циклів. Цикли дозволяють виконати одну або кілька рядків коду кілька разів. Visual Vasic підтримує такі конструкції:

    Do ... Loop

    For ... Next

    For Each ... Next

    Конструкція Do ... Loop.

    Цей цикл використовують у тому випадку, якщо Вам самим невідомо скільки разів повинен бути виконаний набір інструкцій. Наприклад ось коротка програма, яка просто зчитує весь текст з файлу:

    1. Створіть на диску з: який-небудь текстовий файл (бажано кілька рядків), допустимо text.txt.

    2. Впишіть в модуль:

    Sub Main ()

    оголошуємо змінну, яка приймає рядки

    Dim Linia As String

    оголошуємо змінну, яка міститиме весь текст

    Dim AllText As String

    Open "c: text.txt" For Input As # 1 відкриваємо файл text.txt для читання

    ! запускаємо цикл, який триває до тих пір, поки

    не буде досягнуто кінець файлу EOF (End Of File)!

    Do Until EOF (1)

    Line Input # 1, Linia вводимо лінію за лінією в змінну Linia

    записуємо кожну новою лінію + перехід на новий рядок

    AllText = AllText + Linia + Chr (13) + Chr (10)

    Loop

    Close # 1 закриваємо файл

    MsgBox AllText виводимо на екран повідомлення

    End Sub

    Це приклад показав, що програміст не знає КОЛИ настане кінець файлу, але задав умова припиниться як тільки кінець файлу буде досягнутий. Тепер про те, як можна працювати з цим циклом.

    По-перше, можна створювати конструкції зі словами Until і While:

    Do [Until | While] умова

    Якщо Встановлено ключове слово While, то цикл буде запускатися до тих пір, поки умова істинно, а Until "крутить" цикл поки умова помилково. Зараз поясню. У нашому прикладі варто

    Do Until EOF (1)

    тобто поки EOF (1) = False цикл працює. Іншими словами рядка зчитуються поки НЕ досягнуто кінець файлу. Можна поставити замість цього це:

    Do While Not EOF (1)

    Тепер робота циклу нітрохи не зміниться. Адже ми хоч і поміняли умова, але мета залишили колишньою! Not EOF (1) значить що EOF (1) помилково, кінець файлу не досягнуто. А так як While працює тільки тоді, коли умова неправдиво, і продовжує цикл працювати!

    По-друге, ці ключові слова можна міняти місцями і ставити можна як в початок циклу:

    Do [Until | While] умова

    так і в кінець циклу

    Loop [Until | While] умова

    Різниця полягає в тому, що цикл може здійснитися хоча б один раз або не виповниться взагалі. У нашому випадку слово Until стоїть на початку, означає якщо файл виявиться порожнім, то тут же буде досягнуто кінець файлу, умова відразу стане помилковим і цикл відразу перестає працювати! Спробуйте тепер взяти і перенести слова Until EOF (1) на один пробіл від Loop. Запустіть проект. Ага! Помилка! Знаєте чому? Тому що оператор Line Input # намагається вважати рядок у той час як кінець файла вже досягнутий. Цикл упустив цей момент, тому що засікти він його може в кінці, а до кінця він не дійде. Наведу так же приклад з мого прикладу в "Практиці":

    Do

    за допомогою InStr отримуємо місце розташування шуканого символу

    якщо воно дорівнює нулю, залишаємо цикл

    ReturnNumber = InStr (1, Stroka, Symbol): If _

    ReturnNumber = 0 Then Exit Do

    рядку присвоюються всі символи ліворуч до шуканого символу і праворуч

    Stroka = Left (Stroka, ReturnNumber - 1) + _

    Right (Stroka, Len (Stroka) - ReturnNumber)

    Loop

    Тут неможливо скористатися ні Until, ні While, і ось чому: якщо ReturnNumber буде дорівнює нулю, то, скажімо, тут

    Left (Stroka, ReturnNumber - 1)

    виникне помилка, тому що мінімальну довжину функція Left розуміє тільки 0, а тут виходить -1 (0 - 1)! Тому

    Do Until ReturnNumber = 0

    поставити не можна, адже мінлива Integer "від народження" дорівнює нулю і цикл проігнорує сам себе тут же. OK, але ми можемо перш написати:

    ReturnNumber = 1

    ТАК! І цикл відкриється, зробити все і як треба, але коли шукані символи закінчаться і ReturnNumber знову буде дорівнює нулю ПІСЛЯ перевірки і тому знову виникає помилка! Тоді ставимо перед Loop

    Until ReturnNumber = 0

    в кінець. І тут знову та ж сама біда - ReturnNumber дорівнюватиме нулю тепер ДО перевірки і ЗНОВУ помилка! Залишається одне - скористатися в потрібному місці виходом з циклу Exit Do. Де це потрібне місце? А там де функцмя тільки дізнається, що шукаються символів більше немає, тобто відразу після неї ставимо умову:

    If ReturnNumber = 0 Then Exit Do

    Конструкція For ... Next.

    Отже, цикл For ... Next це, напевно, найпростіший і потрібний цикл в програмування на Visual Basic. Його застосовують, коли кількість повторень відомо заздалегідь. У відміну від циклу Do, в циклі For використовується змінна, звана змінної циклу або лічильником циклу. Яка збільшується або зменшується на задану величину при кожному повторенні циклу. Самий-самий простий приклад, який призводить скрізь, де наводиться ;-):

    For x = 1 To 3 змінну x, що дорівнює 1, зводимо до 3

    Beep "бібікаем" ;-)

    Next x йдемо в початок циклу

    Visual Basic виконує цикл For ... Next у наступній послідовності:

    1. Прісваевает змінної х на 1.

    2. Порівнює присвоєння значення ікса і те, яке треба присвоїти (3). Якщо х більше, або дорівнює трьом припиняє своє виконання, за умови, що задані "кроки" (Step) не негативні.

    3. Виконує оператори в тілі циклу.

    4. У велічівает змінну x на один, бо кроки не задані.

    5. Повторює пункти з 2 по 4.

    Ще один приклад (друкує на формі імена всіх наявних шрифтів):

    1. Створюємо форму.

    2. Відкриваємо вікно Code.

    3. Вибираємо подія Click

    4. Вписуємо:

    Dim I As Integer оголошуємо меременную - лічильник

    запускаємо цикл стільки разів, скільки є шрифтів

    (Screen.FontCount повертає кількість всіх шрифтів)

    For I = 0 To Screen.FontCount

    друкує кожне ім'я

    Print Screen.Fonts (I)

    Next

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

    Кострукцін For Each ... Next.

    Цикл For Each ... Next схожий на цикл For ... Next, але він повторює групу операторів для кожного елемента з набору об'єктів або з масиву. Про його користь судити я не можу, але можу тільки сказати, що мені він ще жодного разу не знадобився. Хоча я нічого корисного-то і не робив ;-)).

    Коротше, якщо Вам потрібно змінити за раз всі елементи масиву або колекції, Ви можете використовувати цей цикл. Наприклад ось код, що:

    1. Створює масив.

    2. Збільшує всі елементи на один.

    Отже, пишемо в модуль:

    Sub Main ()

    Dim a (6) As Integer оголошуємо масив з шести осередків

    оголошуємо "універсальну" змінну, яку

    використовують як елемент масиву або набору об'єктів

    Dim Element As Variant

    запускаємо цикл стільки разів, скільки всього осередків у масиві а

    For x = 0 To UBound (a)

    a (x) = x прісваеваем кожному осередку значення

    Debug.Print a (x) виводимо на екран, тільки що отримане значення

    Next

    запускаємо цикл For Each .. Next, де буде змінюватися Element в масиві а

    For Each Element In a

    Element = Element + 1 увелчіваем кожен елемент на один

    Debug.Print Element висновок на екран збільшений елемент

    Next в початок циклу

    End Sub

    В вікні Immediant з'являться цифри від 0 до 6 - це колишні значення масиву а, і слідом цифри від 1 до 7, а це нові значення, збільшені на один.

    І ще один приклад, де всі об'єкти на формі рухаються в право. Але, по-перше, розповім що таке Controls. Controls - це група, де зберігаються всі об'єкти форми. Набір Controls створюється автоматично при відкритті нової форми і поповнюється при додаванні нових об'єктів.

    Щоб послатися на який-небудь об'єкт, потрібно написати Controls (Index). Увага! Важливо знати, що Visual Basic зберігає всі об'єкти у зворотному порядку їх створення. Наприклад, якщо у Вас на формі був створений Text1, потім Label1, а потім Combo1, то Combo1 матиме індекс 0, Label1 - 2, і Text1 буде мати 3. Незручно, чи не так? А тепер приклад:

    1. Створіть форму.

    2. На ній створіть купу об'єктів.

    3. Клацніть два рази на формі і відкрийте вікно Code.

    4. Виберіть подія Click.

    5. Впишіть наступне:

    Private Sub Form_Click ()

    Dim Element As Variant

    For Each Element In Controls

    Element.Left = Element.Left + 100

    Next Element

    End Sub

    Ну, от і поповзли всі об'єкти вліво. Тільки будьте обережні, якщо ви будете клацати по об'єктах, а не за формою, вони будуть стояти як укопані.

    Список літератури

    Для підготовки даної роботи були використані матеріали з сайту http://visualprogs.narod.ru/

         
     
         
    Реферат Банк
     
    Рефераты
     
    Бесплатные рефераты
     

     

     

     

     

     

     

     
     
     
      Все права защищены. Reff.net.ua - українські реферати ! DMCA.com Protection Status