Цикли. Предназначение и приложение. Видове
Цикълът представлява група повтарящи се действия, които се изпълняват за различни стойности на участващите в тях величини. Всеки цикъл би могъл да се разгледа като съставен от четири основни части:
- Инициализация – в нея задаваме начални стойности на участващите в цикъла величини
- Тяло на цикъла – това са операторите, които се изпълняват многократно.
- Актуализация – тук задаваме нови стойности на някои от участващите в тялото на цикъла величини и ги подготвяме за следващото изпълнение
- Условие за край на цикъла – това е логически израз, в зависимост от чиято стойност цикълът продължава да се изпълнява или се прекратява.
В зависимост от определеността на броя на повторенията, има два вида циклични процеси:
- индуктивни (определени) – при които броят на повторенията е известен предварително;
- итеративни (неопределени) – при които броят на повторенията не е известен предварително; при тях броят на повторенията зависи от някакво условие.
В зависимост от начина на изпълнение, делим циклите на следните видове:
- Цикъл с предусловие – при него условието за край на цикъла се проверява най-напред и в зависимост от това, дали е вярно или не, тялото на цикъла се изпълнява. Не е трудно да преценим, че такъв цикъл може да не се изпълни и нито веднъж, ако още в началото условието не е изпълнено.
- Цикъл с постусловие (следусловие) – при него първо се изпълнява тялото на цикъла, а чак след това се проверява верността на условието за край. Такъв цикъл се изпълнява минимум един път.
- Цикъл с управляваща променлива (броячен цикъл) – това е цикъл, при който задаваме начална и крайна стойност на управляващата променлива и той се изпълнява определен брой пъти. Основно реализира индуктивни циклични процеси.
Общо взето нещата във Visual Basic по отношение на циклите не са по-различни от другите езици за програмиране. И тук има три основни вида цикли – с предусловие, с постусловие и броячен цикъл. По-голямо е разнообразието на съответните оператори.
1. Цикли с предусловие
Това са цикли, при които първо се проверява дали е изпълнено някакво условие. Ако това условие е изпълнено, се изпълнява тялото на цикъла. В противен случай програмата продължава да се изпълнява от следващата след цикъла инструкция.
Във Visual Basic има два оператора за цикъл с предусловие: Do While и Do Until.
1.1 Оператор Do While… Loop
Общият вид на оператора е:
Do While Условие
Инструкции
Loop
Условието трябва да е променлива или израз, чиято стойност е True или False. Тялото на цикъла може да се състои от една или повече инструкции.
Цикълът се изпълнява, докато стойността на условието е True (do while се превежда – изпълнявай докато е (истина)). Такъв цикъл може и да не се изпълни нито веднъж, ако първоначалната стойност на условието е False. За да се избегне възникването на безкраен цикъл, в тялото на цикъла трябва да се променя стойността на поне една от променливите, участващи в проверяваното условие.
Пример:
Counter =0 ‘Инициализация на променливата Counter
Do While Counter <>5 ‘Проверка на условието за край на цикъл
Counter = Counter+1 ‘Актуализация на променливата Counter
txtCounter.Text=CStr(Counter) ‘CStr преобразува променливата в низ
Loop
1.2 Оператор Do Until…Loop
Общият вид на оператора е:
Do Until Условие
Инструкции
Loop
Условието трябва да е променлива или израз, чиято стойност е True или False. Тялото на цикъла може да се състои от една или повече инструкции.
Цикълът се изпълнява докато стойността на условието е False (do until се превежда – изпълнявай докато стане (истина)). Когато условието стане True, цикълът спира.
Такъв цикъл може и да не се изпълни нито веднъж, ако първоначалната стойност на условието е True. За да се избегне възникването на безкраен цикъл, в тялото на цикъла трябва да се променя стойността на поне една от променливите, участващи в проверяваното условие.
Пример:
M=0
Do Until M>25
M=2*M+1
Loop
2. Цикли с постусловие
Това са цикли, при които първо се изпълнява тялото на цикъла и чак след това се проверява дали е изпълнено някакво условие.
Във Visual Basic има два оператора за цикъл с постусловие: Do-Loop While и Do-Loop Until.
2.1 Оператор Do…Loop While
Общият вид на оператора е:
Do
Инструкции
Loop While Условие
Условието трябва да е променлива или израз, чиято стойност е True или False. Тялото на цикъла може да се състои от една или повече инструкции.
Първо се изпълнява тялото на цикъла и след това се проверява условието. Ако стойността му е True, цикълът се изпълнява отново. Ако стойността е False, цикълът се прекратява. Цикълът Do…Loop While се изпълнява поне веднъж. За да се избегне възникването на безкраен цикъл, в тялото на цикъла трябва да се променя стойността на поне една от променливите, участващи в проверяваното условие.
Пример:
Counter=0
Do
Counter=Counter+1
Loop While Counter < 13
2.2 Оператор Do…Loop Until
Общият вид на оператора е:
Do
Инструкции
Loop Until Условие
Условието трябва да е променлива или израз, чиято стойност е True или False. Тялото на цикъла може да се състои от една или повече инструкции.
Първо се изпълнява тялото на цикъла и след това се проверява условието. Ако стойността му е False, цикълът се изпълнява отново. Ако стойността е True, цикълът се прекратява, т.е. цикълът спира, когато условието стане истина.
Цикълът Do-Loop Until се изпълнява поне веднъж. За да се избегне възникването на безкраен цикъл, в тялото на цикъла трябва да се променя стойността на поне една от променливите, участващи в проверяваното условие.
Пример:
M=0
N=1
Do
M=2*M+2
N=N-1
Loop Until M+N>25
3. Броячен цикъл FOR
Цикълът For се използва тогава, когато предварително е известно колко пъти трябва да се изпълни, най-често при работа с масиви. Желателно е специално за него да бъде декларирана управляваща променлива, която да не се използва за друго.
Общият вид на оператора е:
For Брояч = Начало To Край Step X
Инструкции
Next Брояч
Тук Брояч е управляващата променлива. Начало и Край задават съответно началната и крайната стойност на управляващата променлива. Х е стъпката на изменение на управляващата променлива. Изпълнението на оператора е аналогично на оператора For в другите езици за програмиране.
По подразбиране броячът на цикъла се увеличава или намалява с 1. Така че ако изпуснем частта Step X стъпката е 1.
Пример:
For X = 5 To 10
Print X
Next X
!!! Броячът не бива да променя стойността си в тялото на цикъла.
Стъпката на изменение не е задължително да бъде цяло число.
Пример:
For X = 15 To 10 Step -1.5
Print X
Next X
4. Влагане на цикли
Visual Basic дава на програмиста пълна свобода да влага едни в други толкова на брой цикли, колкото е необходимо. В такъв случай трябва внимателно да се проверява дали вложените цикли не променят случайно условията или променливите, изпълняващи ролята на броячи на циклите, в които са вмъкнати. В противен случай може да се получи зацикляне.
Трябва да внимаваме и при затварянето на вложените цикли, защото има възможност да се получи „преплитане” (пресичане), т.е. да затворим външния цикъл преди вътрешния.
Например следващия код е грешен, поради пресичане на циклите:
For X = 1 To 10 Step 2
For Y= 2 To 20 Step 4
Print Y
Next X
Next Y
5. Преждевременно напускане на цикъл
Ако е необходимо да излезем преждевременно от един цикъл, можем да използваме оператор Exit Do или съответно Exit For.
Пример:
Do While X < 5
X = X + 1
If X = 4 Then Exit Do
Loop
N=40
For X = 1 to 50
N=N-1
If X+N = 25 Then Exit For
Next X
Когато използваме командите Exit Do или Exit For в цикъл, който е вложен в друг цикъл, тези команди карат програмата да напусне само текущия цикъл, като управлението се предава на външния цикъл.