Skip to content

Commit 30e009d

Browse files
authored
Correcting some mistakes
1 parent f125c72 commit 30e009d

File tree

1 file changed

+22
-33
lines changed

1 file changed

+22
-33
lines changed

chapter-07-complex-loops.md

Lines changed: 22 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -29,9 +29,9 @@
2929
**Стъпката** е тази **част** от конструкцията на **`for`** цикъла, която указва с **колко** да се **увеличи** или **намали** стойността на **водещата** му променлива. Тя се декларира последна в скелета на **`for`** цикъла.
3030

3131
Най-често е с **размер `1`** и в такъв случай, вместо да пишем **`i += 1`** или **`i -= 1`**, можем да използваме операторите
32-
**`i++`** или **`i--`**. Ако искаме стъпката ни да е **различна от 1**, при увеличение използваме оператора **`i +=` + `размера на стъпката`**, а при намаляване **`i -=` + `размера на стъпката`**. При стъпка 10, цикълът би изглеждал по следния начин:
32+
**`i++`** или **`i--`**. Ако искаме стъпката ни да е **различна от 1**, при увеличение използваме оператора **`i +=` + `размера на стъпката`**, а при намаляване **`i -=` + `размера на стъпката`**. При стъпка 3, цикълът би изглеждал по следния начин:
3333

34-
![](/assets/old-images/chapter-7-images/00.Step-explanation-01.png)
34+
![](/assets/chapter-7-1-images/00.For-cycle-with-step.png)
3535

3636
Следва поредица от примерни задачи, решението на които ще ни помогне да разберем по-добре употребата на **стъпката** във **`for`** цикъл.
3737

@@ -140,9 +140,9 @@
140140

141141
За да решим задачата, можем да използваме следния алгоритъм:
142142

143-
* Създаваме променлива **`num`**, на която присвояваме целочислената стойност, получена от входа на конзолата.
143+
* Създаваме променлива **`n`**, на която присвояваме целочислената стойност, получена от входа на конзолата.
144144
* За условие на цикъла слагаме израз, който е **`true`**, ако числото от входа **не е** в диапазона посочен в условието.
145-
* В **тялото на цикъла**: отпечатваме съобщение със съдържание "**Invalid number!**" на конзолата, след което присвояваме нова стойност за **`num`** от входа на конзолата.
145+
* В **тялото на цикъла**: отпечатваме съобщение със съдържание "**Invalid number!**" на конзолата, след което присвояваме нова стойност за **`n`** от входа на конзолата.
146146
* След като вече сме валидирали въведеното число, извън тялото на цикъла отпечатваме стойността на числото.
147147

148148
Ето и примерна реализация на алгоритъма чрез **`while` цикъл**:
@@ -214,7 +214,12 @@ print а;
214214

215215
Следващият цикъл, с който ще се запознаем, е **`do-while`**, в превод - **прави-докато**. По структура, той наподобява **`while`**, но има съществена разлика между тях. Тя се състои в това, че **`do-while`** ще изпълни тялото си **поне веднъж**. Защо се случва това? В конструкцията на **`do-while`** цикъла, **условието** винаги се проверява **след** тялото му, което от своя страна гарантира, че при **първото завъртане** на цикъла, кодът ще се **изпълни**, а **проверката за край на цикъл** ще се прилага върху всяка **следваща** итерация на **`do-while`**.
216216

217-
![](/assets/old-images/chapter-7-images/00.Do-while-01.png)
217+
```cpp
218+
do{
219+
//Тяло на цикъла
220+
}
221+
while (true) // Условие
222+
```
218223

219224
Следва обичайната поредица от примерни задачи, чиито решения ще ни помогнат да разберем по-добре **`do-while`** цикъла.
220225

@@ -357,8 +362,6 @@ print а;
357362

358363
![](/assets/chapter-7-1-images/00.Break-in-infinite-loop-01.PNG)
359364

360-
Забележка: макар кодът по-горе да е коректен, той няма да работи, ако вместо числа потребителят въведе текст, например “**Invalid number**”. Тогава парсването на текста към число ще се счупи и програмата ще покаже **съобщение за грешка (изключение)**. Как да се справим с този проблем и как да прихващаме и обработваме изключения чрез **`try-catch` конструкцията** ще научим след малко.
361-
362365
#### Тестване в Judge системата
363366

364367
Тествайте решението си тук: [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
462465

463466
* Създаваме променлива **`n`**, на която присвояваме целочислена стойност от входа на конзолата.
464467
* Създаваме променлива **`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.
467470
* В тялото на вложения цикъл:
468471
* Проверяваме дали **`col > 1`**, ако да – принтираме разстояние. Ако не направим тази проверка, а директно принтираме разстоянието, ще имаме ненужно такова в началото на всеки ред.
469472
* **Отпечатваме** числото **`num`** в текущата клетка на таблицата и го **увеличаваме с 1**.
@@ -514,49 +517,35 @@ Fn = Fn-1 + Fn-2
514517

515518
Можем да използваме **`for`** цикли със **стъпка**:
516519

517-
```csharp
518-
for (var i = 1; i <= n; i+=3)
520+
```cpp
521+
for (int i = 1; i <= n; i+=3)
519522
{
520-
Console.WriteLine(i);
523+
cout << i << endl;
521524
}
522525
```
523526

524527
Циклите **`while`** / **`do-while`** се повтарят докато е в сила дадено **условие**:
525528

526-
```csharp
529+
```cpp
527530
int num = 1;
528531
while (num <= n)
529532
{
530-
Console.WriteLine(num++);
533+
cout << num++ << endl;
531534
}
532535
```
533536

534537
Ако се наложи да **прекъснем** изпълнението на цикъл, го правим с оператора **`break`**:
535538

536-
```csharp
537-
var n = 0;
539+
```cpp
540+
int n = 0;
538541
while (true)
539542
{
540-
n = int.Parse(Console.ReadLine());
543+
cin >> n;
541544
if (n % 2 == 0)
542545
{
543546
break; // even number -> exit from the loop
544547
}
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;
560549
}
561-
// Ако int.Parse(…) гръмне, ще се изпълни catch { … } блокът
550+
cout << "Even number entered: " << n << endl;
562551
```

0 commit comments

Comments
 (0)