|
29 | 29 | **Стъпката** е тази **част** от конструкцията на **`for`** цикъла, която указва с **колко** да се **увеличи** или **намали** стойността на **водещата** му променлива. Тя се декларира последна в скелета на **`for`** цикъла.
|
30 | 30 |
|
31 | 31 | Най-често е с **размер `1`** и в такъв случай, вместо да пишем **`i += 1`** или **`i -= 1`**, можем да използваме операторите
|
32 |
| -**`i++`** или **`i--`**. Ако искаме стъпката ни да е **различна от 1**, при увеличение използваме оператора **`i +=` + `размера на стъпката`**, а при намаляване **`i -=` + `размера на стъпката`**. При стъпка 10, цикълът би изглеждал по следния начин: |
| 32 | +**`i++`** или **`i--`**. Ако искаме стъпката ни да е **различна от 1**, при увеличение използваме оператора **`i +=` + `размера на стъпката`**, а при намаляване **`i -=` + `размера на стъпката`**. При стъпка 3, цикълът би изглеждал по следния начин: |
33 | 33 |
|
34 |
| - |
| 34 | + |
35 | 35 |
|
36 | 36 | Следва поредица от примерни задачи, решението на които ще ни помогне да разберем по-добре употребата на **стъпката** във **`for`** цикъл.
|
37 | 37 |
|
|
140 | 140 |
|
141 | 141 | За да решим задачата, можем да използваме следния алгоритъм:
|
142 | 142 |
|
143 |
| -* Създаваме променлива **`num`**, на която присвояваме целочислената стойност, получена от входа на конзолата. |
| 143 | +* Създаваме променлива **`n`**, на която присвояваме целочислената стойност, получена от входа на конзолата. |
144 | 144 | * За условие на цикъла слагаме израз, който е **`true`**, ако числото от входа **не е** в диапазона посочен в условието.
|
145 |
| -* В **тялото на цикъла**: отпечатваме съобщение със съдържание "**Invalid number!**" на конзолата, след което присвояваме нова стойност за **`num`** от входа на конзолата. |
| 145 | +* В **тялото на цикъла**: отпечатваме съобщение със съдържание "**Invalid number!**" на конзолата, след което присвояваме нова стойност за **`n`** от входа на конзолата. |
146 | 146 | * След като вече сме валидирали въведеното число, извън тялото на цикъла отпечатваме стойността на числото.
|
147 | 147 |
|
148 | 148 | Ето и примерна реализация на алгоритъма чрез **`while` цикъл**:
|
@@ -214,7 +214,12 @@ print а;
|
214 | 214 |
|
215 | 215 | Следващият цикъл, с който ще се запознаем, е **`do-while`**, в превод - **прави-докато**. По структура, той наподобява **`while`**, но има съществена разлика между тях. Тя се състои в това, че **`do-while`** ще изпълни тялото си **поне веднъж**. Защо се случва това? В конструкцията на **`do-while`** цикъла, **условието** винаги се проверява **след** тялото му, което от своя страна гарантира, че при **първото завъртане** на цикъла, кодът ще се **изпълни**, а **проверката за край на цикъл** ще се прилага върху всяка **следваща** итерация на **`do-while`**.
|
216 | 216 |
|
217 |
| - |
| 217 | +```cpp |
| 218 | +do{ |
| 219 | + //Тяло на цикъла |
| 220 | +} |
| 221 | +while (true) // Условие |
| 222 | +``` |
218 | 223 |
|
219 | 224 | Следва обичайната поредица от примерни задачи, чиито решения ще ни помогнат да разберем по-добре **`do-while`** цикъла.
|
220 | 225 |
|
@@ -357,8 +362,6 @@ print а;
|
357 | 362 |
|
358 | 363 | 
|
359 | 364 |
|
360 |
| -Забележка: макар кодът по-горе да е коректен, той няма да работи, ако вместо числа потребителят въведе текст, например “**Invalid number**”. Тогава парсването на текста към число ще се счупи и програмата ще покаже **съобщение за грешка (изключение)**. Как да се справим с този проблем и как да прихващаме и обработваме изключения чрез **`try-catch` конструкцията** ще научим след малко. |
361 |
| - |
362 | 365 | #### Тестване в Judge системата
|
363 | 366 |
|
364 | 367 | Тествайте решението си тук: [https://judge.softuni.bg/Contests/Practice/Index/1368#10](https://judge.softuni.bg/Contests/Practice/Index/1368#10).
|
@@ -462,8 +465,8 @@ Fn = Fn-1 + Fn-2
|
462 | 465 |
|
463 | 466 | * Създаваме променлива **`n`**, на която присвояваме целочислена стойност от входа на конзолата.
|
464 | 467 | * Създаваме променлива **`num`** с начална стойност 1. Тя ще пази броя на отпечатаните числа. При всяка итерация ще я **увеличаваме** с **1** и ще я принтираме.
|
465 |
| -* Създаваме **външен** **`for`** цикъл, който ще отговаря за **редовете** в таблицата. Наименуваме променливата на цикъла **`row`** и ѝ задаваме начална стойност 0. За условие слагаме **`row < n`**. Размерът на стъпката е 1. |
466 |
| -* В тялото на цикъла създаваме **вътрешен** **`for`** цикъл, който ще отговаря за **колоните** в таблицата. Наименуваме променливата на цикъла **`col`** и ѝ задаваме начална стойност 0. За условие слагаме **`col < row`** (**`row`** = брой цифри на ред). Размерът на стъпката е 1. |
| 468 | +* Създаваме **външен** **`for`** цикъл, който ще отговаря за **редовете** в таблицата. Наименуваме променливата на цикъла **`row`** и ѝ задаваме начална стойност 0. За условие слагаме **`row <= n`**. Размерът на стъпката е 1. |
| 469 | +* В тялото на цикъла създаваме **вътрешен** **`for`** цикъл, който ще отговаря за **колоните** в таблицата. Наименуваме променливата на цикъла **`col`** и ѝ задаваме начална стойност 0. За условие слагаме **`col <= row`** (**`row`** = брой цифри на ред). Размерът на стъпката е 1. |
467 | 470 | * В тялото на вложения цикъл:
|
468 | 471 | * Проверяваме дали **`col > 1`**, ако да – принтираме разстояние. Ако не направим тази проверка, а директно принтираме разстоянието, ще имаме ненужно такова в началото на всеки ред.
|
469 | 472 | * **Отпечатваме** числото **`num`** в текущата клетка на таблицата и го **увеличаваме с 1**.
|
@@ -514,49 +517,35 @@ Fn = Fn-1 + Fn-2
|
514 | 517 |
|
515 | 518 | Можем да използваме **`for`** цикли със **стъпка**:
|
516 | 519 |
|
517 |
| -```csharp |
518 |
| -for (var i = 1; i <= n; i+=3) |
| 520 | +```cpp |
| 521 | +for (int i = 1; i <= n; i+=3) |
519 | 522 | {
|
520 |
| - Console.WriteLine(i); |
| 523 | + cout << i << endl; |
521 | 524 | }
|
522 | 525 | ```
|
523 | 526 |
|
524 | 527 | Циклите **`while`** / **`do-while`** се повтарят докато е в сила дадено **условие**:
|
525 | 528 |
|
526 |
| -```csharp |
| 529 | +```cpp |
527 | 530 | int num = 1;
|
528 | 531 | while (num <= n)
|
529 | 532 | {
|
530 |
| - Console.WriteLine(num++); |
| 533 | + cout << num++ << endl; |
531 | 534 | }
|
532 | 535 | ```
|
533 | 536 |
|
534 | 537 | Ако се наложи да **прекъснем** изпълнението на цикъл, го правим с оператора **`break`**:
|
535 | 538 |
|
536 |
| -```csharp |
537 |
| -var n = 0; |
| 539 | +```cpp |
| 540 | +int n = 0; |
538 | 541 | while (true)
|
539 | 542 | {
|
540 |
| - n = int.Parse(Console.ReadLine()); |
| 543 | + cin >> n; |
541 | 544 | if (n % 2 == 0)
|
542 | 545 | {
|
543 | 546 | break; // even number -> exit from the loop
|
544 | 547 | }
|
545 |
| - Console.WriteLine("The number is not even."); |
546 |
| -} |
547 |
| -Console.WriteLine("Even number entered: {0}", n); |
548 |
| -``` |
549 |
| - |
550 |
| -Вече знаем как да прихващаме **грешки** по време на изпълнението на програмата ни: |
551 |
| - |
552 |
| -```csharp |
553 |
| -try |
554 |
| -{ |
555 |
| - Console.Write("Enter even number: "); |
556 |
| - n = int.Parse(Console.ReadLine()); |
557 |
| -} |
558 |
| -catch |
559 |
| - Console.WriteLine("Invalid number."); |
| 548 | + cout << "The number is not even." << endl; |
560 | 549 | }
|
561 |
| -// Ако int.Parse(…) гръмне, ще се изпълни catch { … } блокът |
| 550 | +cout << "Even number entered: " << n << endl; |
562 | 551 | ```
|
0 commit comments