Цикличният изчислителен процес е процес, за по-накратко наричан цикъл, който представлява многократното изпълнение на дадена последователност от операции с различни данни. Най-често се променя само една величина, която се нарича параметър на цикъла. При различните видове цикли програмният код се повтаря, докато е в сила определено предварително зададено условие или фиксиран брой пъти, които са упоменати в началото. Всеки цикличен процес се характеризира със следните елементи:
Инициализация – задава се началната стойност на параметъра на цикъла. Тяло на цикъла – инициализира се кодът, който трябва да се изпълни определен брой пъти. Актуализация – обновява се стойността на параметъра на цикъла. Прекъсващо условие – изразът, в зависимост от чиято стойност цикълът спира или продължава действието си.
Пропускането или неправилното задаване на някой от елементите на цикъла, може да доведе до грешка в изпълнението му или невъзможност за изпълнение.
В зависимост от мястото на прекъсващото условие, преди тялото на цикъла или след него, циклите се делят на цикли с предусловие и цикли със следусловие.
For цикъл Наименованието for произхожда от английската дума for – в превод на български – „за“, защото по време на изпълнението си тялото на цикъла се изпълнява за дадена променлива в самия цикъл. Думата for се използва като ключова в повечето езици за програмиране.
В компютърната наука for циклите са блокове от програмен код, които могат да се изпълняват, повтаряйки операциите, вписани в тях.
За разлика от останалите типове цикли, в структурата на for циклите се въвежда брояч, чрез който може да се контролира броя на извършваните итерации. For циклите са приложими, когато предварително е установено колко на брой итерации трябва да извърши дадената програма.
Структура Структурата на for циклите включва: а) инициализационен блок б) условие на цикъла в) команди за обновяване на водещите променливи г) Тяло на цикъла
Пример за представяне структурата на for цикъл в езика C#: for (инициализация-„а”; условие-„б”; обновяване на водещата променлива-”в”) { Тяло на цикъла – “г” }
Инициализация For циклите могат да имат инициализационен блок. Той се изпълнява само веднъж, точно преди влизане в цикъла и не се изпълнява повече, по време на работа на програмата. Инициализационият блок се използва за деклариране на водеща променлива – наричана още брояч и задаване на нейна начална стойност. Тази променлива може да се използва само в рамките на цикъла. Съществуват цикли, при които в инициализационния блок се декларира и инициализира повече от една променлива. Броячът на for цикъла го отличава от останалите видове цикли.
Съществува възможност водещата променлива да се декларира и инициализира извън цикъла. Тогава след изпълнението на цикъла тя ще запази последната си стойност, след последната итерация.
Един for цикъл може да има една или няколко водещи променливи, които се движат в нарастващ, намаляващ ред или с някаква стъпка, както и възможност едната променлива да се увеличава като стойност, а другата – да намалява.
Пример за инициализиране на променлива във for цикъл, в езика C#: for (int number = 1; …; …) { // Променливата number е видима тук и може да се използва само тук. }
Условие Условието за повторение, или наричано още условие за прекратяване () на цикъла, e булев израз, който се изпълнява веднъж, преди всяка итерация на цикъла, точно както при while циклите. Чрез него се определя в кой точно момент при коя по ред итерация да се прекрати изпълнението на цикъла. В случай, че условието има резултат true (истина) се изпълнява тялото на цикъла, а при false (неистина) то се пропуска, цикълът завършва и се преминава към останалата част от програмата, намираща се след цикъла.
Условието на цикъла винаги е булев израз. В случаите когато не е въведено условие за прекратяване на цикъла, тогава ще се изпълняват безкраен брой итерации.
Пример за представяне на условие във for цикъл, в езика C#: for (int number = 1; number < 20; …) { Tяло на цикъла; }
Обновяване на водещата променлива Изпълнява след всяка итерация на цикъла, след като е приключило изпълнението на програмата в тялото на цикъла. Използва за обновяване стойността на водещата променлива, чрез което се упражнява контрол върху броя на оставащите итерации (повторения). След това се проверява дали условието на цикъла е валидно или не.
Пример за обновяване на променлива във for цикъл, в езика C#: for (int number = 0; number < 20; number++) { Tяло на цикъла; }
Тяло на цикъла Тялото на цикъла съдържа същинската част на програмата – блок със сорс код (наричан още изходен код или програмен код). В него са достъпни променливите, декларирани в инициализациония блок на цикъла. Този код се изпълнява при всяка следваща итерация (повторение), докато условието за прекратяване на цикъла бъде изпълнено и се излезе от цикъла.
Примери Примери за реализирането на for цикъл в езика за програмиране C#:
for (int i = 2; i <= 20; i += 2) { Console.Write(i + " "); //При всяка итерация, се разпечатва следващото по ред четно число + един интервал. } // Резултат: 2 4 6 8 10 12 14 16 18 20
В посочения пример се извършват 10 итерации във for цикъл. Преди всяка една от тях, се проверява дали е изпълнено условието за прекратяване на цикъла – стойността на променливата i, да е по-голяма от 20. До момента в който не е изпълнено това условие – променливата i да има стойност по-малка или равна на 20, се разпечатват всички четни числа които са по-големи от 1 и по-малки или равни на 20.
Примери за реализирането на for цикъл в езика за програмиране C++:
for (int i= 5; i<= 50; i += 2){ printf("%d",i);
Аналогичен пример, при който се разпечатват четните числа от 6 до 50.
Примери за for цикъл в други програмни езици:
ActionScript 3 for (var counter:uint = 1; counter <= 5; counter++){ //statement; }
Ada for Counter in 1 .. 5 loop -- statements end loop;
AppleScript repeat with i from 1 to 5 -- statements log i end repeat
Bash # first form for i in 1 2 3 4 5 do # must have at least one command in loop echo $i # just print value of i done
# second form for ((i = 1; i <= 5; i++)) do # must have at least one command in loop echo $i # just print value of i done
Basic For I = 1 to 5; Print I; Next I
C for (initialization; condition; increment-decrement) { // Statements. }
Fortran do counter = 1, 5, 1 write(*, '(i2)') counter end do
Haskell forM_ [1..5] $ \indx -> do statements
statements_result_list <- forM [1..5] $ \indx -> do statements
Java for(int i = 0; i < 5; i++) { //perform functions within the loop; //can use the statement 'break;' to exit early; }
JavaScript for (var i = 0; i < 5; i++) { // ... }
Lua for i = start, stop, interval do -- statements end
for i = 1, 5, 2 do print(i) end
for name, phone, address in contacts() do -- contacts() must be an iterator function end
Mathematica Do[f[x], {x, 0, 1, 0.1}]
For[x=0, x <= 1, x += 0.1, f[x] ]
Matlab for i = 1:5 -- statements end
Maxima CAS for x:0.5 step 0.1 thru 0.9 do /* "Do something with x" */
Oberon-2, Oberon-07, or Component Pascal FOR Counter := 1 TO 5 DO (* statement sequence *) END
OCaml (* for_statement := "for" ident '=' expr ("to" ∣ "downto") expr "do" expr "done" *)
for i = 1 to 5 do (* statements *) done;;
for j = 5 downto 0 do (* statements *) done;;
Pascal for Counter := 1 to 5 do (*statement*);
Perl for ($counter = 1; $counter <= 5; $counter++) { # implictly or predefined variable # statements; } for (my $counter = 1; $counter <= 5; $counter++) { # variable private to the loop # statements; } for (1..5) { # variable impicitly called $_; 1..5 creates a list of these 5 elements # statements; } statement for 1..5; # almost same (only 1 statement) with natural language order for my $counter (1..5) { # variable private to the loop # statements; }
PHP for ($i = 0; $i < 5; $i++) { # statements; }
PL/I do counter = 1 to 5 by 1; /* "by 1" is the default if not specified */ /*statements*/; end;
PostScript 5 { STATEMENTS } repeat
Python for counter in range(1, 6): # range(1, 6) gives values from 1 to 5 inclusive (but not 6) # statements
Ruby for counter in 1..5 # statements end
5.times do |counter| # counter iterates from 0 to 4 # statements end
1.upto(5) do |counter| # statements end
Smalltalk 1 to: 5 do: [ :counter | "statements" ]
For цикъл с повече от една променлива За по-бързото и практично разрешаване на някои проблеми е нужна повече от една променлива. Понякога в работата е трябва да се използва допълнителна променлива в инициализацията на for цикъл, която да се променя с въртенето на цикъла.
Пример за for цикъл с повече от една променлива в C#
for (int i = 0, j = 2; i<5; i++, j*=10)
Console.WriteLine(j);
//резултат //2 //20 //200 //2000 //20000
Това, което трябва да се направи при декларирането на променливите в условието на for цикъла е да се зададе тяхната начална стойност и как ще се променят след всяко въртене. Условието за край на цикъла може да е обвързано само с едната или дори и с двете променливи едновременно. Когато то е достигнато това ще прекъсне работата на целия цикъл
Пример за for цикъл с повече от една променлива в C++
{ int i, j; for (i = 5, j = 10; i + j < 20; i++, j++) printf_s("\n i + j = %d", (i + j)); }
While и do-while цикли Цикълът while While (на български докато) цикълът е цикъл, който се изпълнява докато предварително зададено булево условие в началото на цикъла е истина.
Цикълът работи по следния начин: Проверява се условието и ако то е истина се продължава към кода в тялото на цикъла. В противен случай цикълът приключва. Изпълнява се кодът в тялото на цикъла. Отново се проверява условието на цикъла и т.н.
Тялото на цикъла трябва да бъде заградено в къдрави скоби({тяло на цикъла}), а условието в обикновени((условие)).
Пример за while цикъл в C#
int i = 0; while (i<10) //условие
Console.Write(i); //тяло на цикъла i++;
//резултат 0123456789
Зададена е променлива i, която е равна на 0. Условието на цикъла е да работи докато i е по-малка от 10. С всяко завъртане на цикъла i се увеличава с 1. В противен случай цикълът би бил безкраен и ще отпечатва 0 на екрана всеки път. При последното завъртане на цикъла, той отпечатва 9 на конзолата и увеличава стойността на i с единица. Вече i е рано на 10. При проверката на условието в началото на цикъла то вече е лъжа (false), защото i не е по-малко от 10, цикълът прекъсва работата си.
Пример за while цикъл в C++
int i = 0; while(counter < 5) # условие
cout << "i: " << i << "\n"; # тяло на цикъла i++;
Do-while цикъл Do-while конструкцията е подобна while цикъла, но с тази разлика, че условието е зададено в края т.е. проверката се прави след като се изпълни тялото на цикъла.
Пример за do-while цикъл в C#
int i = 0; do { Console.Write(i); //тяло на цикъла i++; } while (i < 10) //условие
Пример за while цикъл в C++
int i = 0; do
cout << "i: " << i << "\n"; #тяло на цикъла i++;
while(counter < 5) #условие
Примерите са аналогични на дадените примери за while цикъл и резултатът от тях ще бъде индентичен. While цикълът е този, който се използва по-често в практиката в сравнение с do-while.
Примери ActionScript 3 var counter:int = 5; var factorial:int = 1;
while (counter > 1) { factorial *= counter; counter--; } trace ("Factorial ", factorial);
Ada with Ada.Integer_Text_IO;
procedure Factorial is Counter : Integer := 5; Factorial : Integer := 1; begin while Counter > 0 loop Factorial := Factorial * Counter; Counter := Counter – 1; end loop;
Ada.Integer_Text_IO.Put (Factorial); end Factorial;
Bash counter=5 factorial=1 while [ $counter -gt 0 ]; do factorial=$((factorial * counter)) counter=$((counter – 1)) done
echo $factorial
Basic Dim counter As Integer = 10 ' init variable and set value
Do While counter > 0 counter = counter – 1 Loop ' program goes here, until counter = 0
C or C++ int main (void) { int counter = 5; long factorial = 1;
while (counter > 1)