Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Loops: while and for #84

Merged
merged 31 commits into from
Aug 21, 2021
Merged
Show file tree
Hide file tree
Changes from 13 commits
Commits
Show all changes
31 commits
Select commit Hold shift + click to select a range
7af7b49
article while loops
vahmelk99 Aug 16, 2021
8f4f536
break translated
vahmelk99 Aug 18, 2021
794be86
article done
vahmelk99 Aug 20, 2021
371b28c
ex1 translated
vahmelk99 Aug 20, 2021
88e3ddd
exs translated
vahmelk99 Aug 21, 2021
0ae628f
Update 1-js/02-first-steps/13-while-for/article.md
vahmelk99 Aug 21, 2021
feb54b2
Update 1-js/02-first-steps/13-while-for/2-which-value-while/solution.md
vahmelk99 Aug 21, 2021
3cc0808
Update 1-js/02-first-steps/13-while-for/5-replace-for-while/task.md
vahmelk99 Aug 21, 2021
998b003
Update 1-js/02-first-steps/13-while-for/6-repeat-until-correct/soluti…
vahmelk99 Aug 21, 2021
763c6f2
Update 1-js/02-first-steps/13-while-for/7-list-primes/solution.md
vahmelk99 Aug 21, 2021
ffb0e12
Update 1-js/02-first-steps/13-while-for/7-list-primes/task.md
vahmelk99 Aug 21, 2021
38730de
7th sol fix
vahmelk99 Aug 21, 2021
9bb925b
Merge branch 'master' into master
vahmelk99 Aug 21, 2021
5806f13
Update 1-js/02-first-steps/13-while-for/7-list-primes/solution.md
vahmelk99 Aug 21, 2021
e653e50
Update 1-js/02-first-steps/13-while-for/article.md
vahmelk99 Aug 21, 2021
6f701c6
Update 1-js/02-first-steps/13-while-for/article.md
vahmelk99 Aug 21, 2021
df1e71f
Update 1-js/02-first-steps/13-while-for/article.md
vahmelk99 Aug 21, 2021
9f90054
Update 1-js/02-first-steps/13-while-for/article.md
vahmelk99 Aug 21, 2021
14c423e
Update 1-js/02-first-steps/13-while-for/article.md
vahmelk99 Aug 21, 2021
4ccbb8f
Update 1-js/02-first-steps/13-while-for/article.md
vahmelk99 Aug 21, 2021
6482c5d
Update 1-js/02-first-steps/13-while-for/article.md
vahmelk99 Aug 21, 2021
3f2c9c8
Update 1-js/02-first-steps/13-while-for/article.md
vahmelk99 Aug 21, 2021
132ebde
Update 1-js/02-first-steps/13-while-for/article.md
vahmelk99 Aug 21, 2021
8cef7f2
Update 1-js/02-first-steps/13-while-for/article.md
vahmelk99 Aug 21, 2021
4927262
Update 1-js/02-first-steps/13-while-for/article.md
vahmelk99 Aug 21, 2021
a84d5d3
Update 1-js/02-first-steps/13-while-for/article.md
vahmelk99 Aug 21, 2021
74574c7
Update 1-js/02-first-steps/13-while-for/article.md
vahmelk99 Aug 21, 2021
a76316c
Update 1-js/02-first-steps/13-while-for/article.md
vahmelk99 Aug 21, 2021
b032a1f
Update 1-js/02-first-steps/13-while-for/article.md
vahmelk99 Aug 21, 2021
6ba30b1
Update 1-js/02-first-steps/13-while-for/article.md
vahmelk99 Aug 21, 2021
2de07d1
Update 1-js/02-first-steps/13-while-for/article.md
vahmelk99 Aug 21, 2021
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
14 changes: 7 additions & 7 deletions 1-js/02-first-steps/13-while-for/1-loop-last-value/solution.md
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
The answer: `1`.
Պատասխան՝ `1`։

```js run
let i = 3;
Expand All @@ -8,18 +8,18 @@ while (i) {
}
```

Every loop iteration decreases `i` by `1`. The check `while(i)` stops the loop when `i = 0`.
Ցիկլի ամեն իտերացիա `i`֊ն նվազեցնում է `1`֊ով։ `while(i)` ստուգումը կանգ կառնի, երբ `i = 0`։

Hence, the steps of the loop form the following sequence ("loop unrolled"):
Հետևաբար ցիկլը բաղկացած կլինի հետևյալ քայլերից ("բացենք ցիկլը")․

```js
let i = 3;

alert(i--); // shows 3, decreases i to 2
alert(i--); // ցույց կտա 3, կնվազեցնի i֊ն 1֊ով՝ դարձնելով 2

alert(i--) // shows 2, decreases i to 1
alert(i--) // ցույց կտա 2, կնվազեցնի i֊ն 1֊ով՝ դարձնելով 1

alert(i--) // shows 1, decreases i to 0
alert(i--) // ցույց կտա 1, կնվազեցնի i֊ն 1֊ով՝ դարձնելով 0

// done, while(i) check stops the loop
// վերջ, while(i) ստուգումը կդադարեցնի ցիկլը
```
4 changes: 2 additions & 2 deletions 1-js/02-first-steps/13-while-for/1-loop-last-value/task.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,9 +2,9 @@ importance: 3

---

# Last loop value
# Ցիկլի վերջին արժեքը

What is the last value alerted by this code? Why?
Ի՞նչ արժեք ցույց կտա այս ծրագիրը ամենավերջում և ինչու՞։

```js
let i = 3;
Expand Down
22 changes: 11 additions & 11 deletions 1-js/02-first-steps/13-while-for/2-which-value-while/solution.md
Original file line number Diff line number Diff line change
@@ -1,30 +1,30 @@
The task demonstrates how postfix/prefix forms can lead to different results when used in comparisons.
Այս առաջադրանքը ցուց է տալիս, թե ինչպես նախածանցի/վերջածանցի կիրառումը կարող է բերել տարբեր արդյունքների, երբ դրանք օգտագործվում են համեմատության մեջ։

1. **From 1 to 4**
1. **1֊ից մինչև 4**

```js run
let i = 0;
while (++i < 5) alert( i );
```

The first value is `i = 1`, because `++i` first increments `i` and then returns the new value. So the first comparison is `1 < 5` and the `alert` shows `1`.
Առաջին արժեքը `i = 1`, քանի որ `++i`֊ն սկզբում աճեցնում է `i`֊ի արժեքը, և հետո նոր վերադարձնում ստացված նոր աժեքը։ Այսպիսով առաջին համեմատությունը կլինի `1 < 5` և `alert`֊ը ցույց կտա `1`։

Then follow `2, 3, 4…` -- the values show up one after another. The comparison always uses the incremented value, because `++` is before the variable.
Ապա կհաջորդի `2, 3, 4…` -- արժեքները կցուցադրվեն մեկը մյուսի հետևից։ Համեմատումը միշտ օգտագործում է ավելացված արժեքը, քանի որ `++`֊ը գրված է փոփոխականից առաջ։

Finally, `i = 4` is incremented to `5`, the comparison `while(5 < 5)` fails, and the loop stops. So `5` is not shown.
2. **From 1 to 5**
Եվ վերջապես `i = 4` ավելացվում է դառնալով `5`, `while(5 < 5)` համեմատումը կլինի սխալ, և ցիկլը կավարտվի։ Այսպիսով `5`֊ը չի երևա էկրանին։
2. **1֊ից մինչև 5**

```js run
let i = 0;
while (i++ < 5) alert( i );
```

The first value is again `i = 1`. The postfix form of `i++` increments `i` and then returns the *old* value, so the comparison `i++ < 5` will use `i = 0` (contrary to `++i < 5`).
Առաջին արժեքը կրկին `i = 1` է։ `i++`֊ը աճեցնում է `i`֊ն, և ապա վերադարձնում *հին* արժեքը, այսպիսով `i++ < 5` համեմատության մեջ `i = 0` (ի տարբերություն `++i < 5`֊ի)։

But the `alert` call is separate. It's another statement which executes after the increment and the comparison. So it gets the current `i = 1`.
Բայց `alert`֊ի կանչը առանձին է։ Այն առանձին հատված է, որը կատարվում է փոփոխականի աճից և համեմատումից հետո։ Այսպիսով այն ստանում է ընթացիկ `i = 1`։

Then follow `2, 3, 4…`
Ապա հետևում են `2, 3, 4…`։

Let's stop on `i = 4`. The prefix form `++i` would increment it and use `5` in the comparison. But here we have the postfix form `i++`. So it increments `i` to `5`, but returns the old value. Hence the comparison is actually `while(4 < 5)` -- true, and the control goes on to `alert`.
Կանգ առնենք `i = 4` դեպքի վրա։ `++i`֊ն կաճեցներ `i`֊ն և կօգտագործեր `5` արժեքը համեմատման համար։ Բայց այստեղ օգտագործվում է `i++`, որը աճեցնում է `i`֊ն՝ դանձնելով `5`, և վերադարձնում հին արժեքը։ Հետևաբար համեմատումը կլինի `while(4 < 5)` -- որն էլ ճիշտ է, և `alert`֊ը ցույց կտա `5` արժեքը։

The value `i = 5` is the last one, because on the next step `while(5 < 5)` is false.
`i = 5` արժեքի դեպքում հաջորդ քայլում կունենանք `while(5 < 5)`, որն էլ սխալ է։
10 changes: 5 additions & 5 deletions 1-js/02-first-steps/13-while-for/2-which-value-while/task.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,19 +2,19 @@ importance: 4

---

# Which values does the while loop show?
# Ինչպիսի՞ արժեքներ ցույց կտա while ցիկլը

For every loop iteration, write down which value it outputs and then compare it with the solution.
Ամեն իտերացիայի համար գրառեք, թե ինչպիսի արժեքներ ցույց կտա ցիկլը, և համեմատեք ձեր պատասխանները լուծման հետ։

Both loops `alert` the same values, or not?
Արդյո՞ք երկու ցիկլերն էլ ցույց `alert` կանեն նույն արժեքները, թե ոչ։

1. The prefix form `++i`:
1. `++i` նախածանցով (prefix).

```js
let i = 0;
while (++i < 5) alert( i );
```
2. The postfix form `i++`
2. `i++` վերջածանցով (postfix).

```js
let i = 0;
Expand Down
14 changes: 7 additions & 7 deletions 1-js/02-first-steps/13-while-for/3-which-value-for/solution.md
Original file line number Diff line number Diff line change
@@ -1,17 +1,17 @@
**The answer: from `0` to `4` in both cases.**
**Պատասխան՝ `0`֊ից մինչև `4`, երկու դեպքում էլ։**

```js run
for (let i = 0; i < 5; ++i) alert( i );

for (let i = 0; i < 5; i++) alert( i );
```

That can be easily deducted from the algorithm of `for`:
Այս պատասխանին կարող ենք հասնել դիտարկելով `for`֊ի աշխատելու ալգորիթմը․

1. Execute once `i = 0` before everything (begin).
2. Check the condition `i < 5`
3. If `true` -- execute the loop body `alert(i)`, and then `i++`
1. Կատարում է մի անգամ `i = 0`, ամեն ինչից առաջ (սկիզբ)։
2. Ստուգում է պայմանը `i < 5`։
3. Եթե ճիշտ է (`true`) -- կատարում է ցիկլի մարմինը՝ `alert(i)`, և ապա `i++`

The increment `i++` is separated from the condition check (2). That's just another statement.
`i++` աճը բաժանված է պայմանի ստուգման գործողությունից (2)։ Այն կոդի ուրիշ անկախ հատված է։

The value returned by the increment is not used here, so there's no difference between `i++` and `++i`.
Աճեցումից հետո վերադարձված արժեքը այստեղ չի օգտագործվում, այսպիսով տարբերություն չկա `i++`֊ի և `++i`֊ի միջև։
10 changes: 5 additions & 5 deletions 1-js/02-first-steps/13-while-for/3-which-value-for/task.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,18 +2,18 @@ importance: 4

---

# Which values get shown by the "for" loop?
# Ո՞ր արժեքները կցուցադրվեն "for" ցիկլի միջոցով

For each loop write down which values it is going to show. Then compare with the answer.
Ամեն ցիկլի համար գրառեք, թե ինչպիսի արժեքներ ցույց կտա ցիկլը, և համեմատեք ձեր պատասխանները լուծման հետ։

Both loops `alert` same values or not?
Արդյո՞ք երկու ցիկլերն էլ ցույց `alert` կանեն նույն արժեքները, թե ոչ։

1. The postfix form:
1. Վերջածանցով (postfix).

```js
for (let i = 0; i < 5; i++) alert( i );
```
2. The prefix form:
2. Նախածանցով (prefix).

```js
for (let i = 0; i < 5; ++i) alert( i );
Expand Down
2 changes: 1 addition & 1 deletion 1-js/02-first-steps/13-while-for/4-for-even/solution.md
Original file line number Diff line number Diff line change
Expand Up @@ -8,4 +8,4 @@ for (let i = 2; i <= 10; i++) {
}
```

We use the "modulo" operator `%` to get the remainder and check for the evenness here.
Մենք օգտագործում ենք "մնացորդի" օպերատոր `%`֊ը մնացորդը ստանալու համար, և ստուգում ենք թվի զույգությունը։
4 changes: 2 additions & 2 deletions 1-js/02-first-steps/13-while-for/4-for-even/task.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,8 +2,8 @@ importance: 5

---

# Output even numbers in the loop
# Ցուցադրել զույգ թվերը ցիկլի միջոցով

Use the `for` loop to output even numbers from `2` to `10`.
Օգտագործեք `for` ցիկլը ցուցադրելու զույգ թվերը `2`֊ից մինչև `10`։

[demo]
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@
```js run
let i = 0;
while (i < 3) {
alert( `number ${i}!` );
alert( `Համար ${i}!` );
i++;
}
```
Expand Down
6 changes: 3 additions & 3 deletions 1-js/02-first-steps/13-while-for/5-replace-for-while/task.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,13 +2,13 @@ importance: 5

---

# Replace "for" with "while"
# Փոխարինեք "for"֊ը "while"֊ով

Rewrite the code changing the `for` loop to `while` without altering its behavior (the output should stay same).
Վերաշարադրեք կոդը, փոխելով `for` ցիկլը `while`֊ով, առանց նրա կատարման արդյունքը փոխելու (ցուցադրվող արժեքները պետք է մնան նույնը)։

```js run
for (let i = 0; i < 3; i++) {
alert( `number ${i}!` );
alert( `Համար ${i}!` );
}
```

Original file line number Diff line number Diff line change
Expand Up @@ -3,13 +3,13 @@
let num;

do {
num = prompt("Enter a number greater than 100?", 0);
num = prompt("Ներմուծեք 100֊ից բարձր թիվ", 0);
} while (num <= 100 && num);
```

The loop `do..while` repeats while both checks are truthy:
`do..while` ցիկլը կրկնում է քանի դեռ երկու պայմաններն էլ ճշմարիտ են․

1. The check for `num <= 100` -- that is, the entered value is still not greater than `100`.
2. The check `&& num` is false when `num` is `null` or an empty string. Then the `while` loop stops too.
1. `num <= 100` ստուգումը նշանակում է, որ ներմուծված թիվը դեռ մեծ չէ `100`֊ից։
2. `&& num` ստուգումը սխալ է, երբ `num`֊ը `null` է կամ դատարկ տող։ Այդ դեպքում `while`֊ը կանգ է առնում։

P.S. If `num` is `null` then `num <= 100` is `true`, so without the 2nd check the loop wouldn't stop if the user clicks CANCEL. Both checks are required.
Եթե `num`֊ը `null` է, ապա `num <= 100` համեմատումը `true` է, այսինքն առանց երկրորդ պայմանի ցիկլը կանգ չէր առնի, եթե օգտատերը սեղմեր ՉԵՂԱՐԿԵԼ (CANCEL): Երկու պայմանն էլ պարտադիր են։
Original file line number Diff line number Diff line change
Expand Up @@ -2,12 +2,12 @@ importance: 5

---

# Repeat until the input is correct
# Կրկնել քանի դեռ ներմուծված արժեքը ճիշտ չէ

Write a loop which prompts for a number greater than `100`. If the visitor enters another number -- ask them to input again.
Գրել ցիկլ, որը կհարցնի (prompt) թիվ, որը պետք է լինի մեծ `100`֊ից։ Եթե օգտատերը ներմուծի ուրիշ թիվ (պայմանին չբավարարող) -- տալ նրան ներմուծել կրկին։

The loop must ask for a number until either the visitor enters a number greater than `100` or cancels the input/enters an empty line.
Ցիկլը պետք է ուզի թիվ օգտատերից, մինչև մուտքագրվի `100`֊ից մեծ թիվ կամ չեղարկվի (cancel) ներմուծումը (մուտքագրվի դատարկ տող)։

Here we can assume that the visitor only inputs numbers. There's no need to implement a special handling for a non-numeric input in this task.
Ենթադրվում է, որ օգտատերը ներմուծում է միայն թվային արժեքներ։ Լրացուցիչ դեպքեր պետք չէ դիտարկել ոչ թվային արժեքների համար։

[demo]
24 changes: 12 additions & 12 deletions 1-js/02-first-steps/13-while-for/7-list-primes/solution.md
Original file line number Diff line number Diff line change
@@ -1,29 +1,29 @@
There are many algorithms for this task.
Կան շատ տարբեր ալգորիթմներ այս խնդրիը լուծելու համար։

Let's use a nested loop:
Եկեք օգտագործենք ներդրված ցիկլեր․

```js
For each i in the interval {
check if i has a divisor from 1..i
if yes => the value is not a prime
if no => the value is a prime, show it
Բոլոր i֊երի համար հատվածից {
ստուգու է, արդյոք i֊ն բաժանվում է ինչ֊որ թվի միչև ինքը
vahmelk99 marked this conversation as resolved.
Show resolved Hide resolved
եթե այո => արժեքը պարզ չէ
եթե ոչ => արժեքը պարզ է և պետք է ցույց տալ այն
}
```

The code using a label:
Ծրագիրը օգտագործում է պիտակ (label)․

```js run
let n = 10;

nextPrime:
for (let i = 2; i <= n; i++) { // for each i...
for (let i = 2; i <= n; i++) { // ամեն i֊ի համար...
bugron marked this conversation as resolved.
Show resolved Hide resolved

for (let j = 2; j < i; j++) { // look for a divisor..
if (i % j == 0) continue nextPrime; // not a prime, go next i
for (let j = 2; j < i; j++) { // փնտրում է բաժանարար..
if (i % j == 0) continue nextPrime; // պարզ չէ, անցնում է հաջորդ i֊ին
}

alert( i ); // a prime
alert( i ); // պարզ թիվ
}
```

There's a lot of space to optimize it. For instance, we could look for the divisors from `2` to square root of `i`. But anyway, if we want to be really efficient for large intervals, we need to change the approach and rely on advanced maths and complex algorithms like [Quadratic sieve](https://en.wikipedia.org/wiki/Quadratic_sieve), [General number field sieve](https://en.wikipedia.org/wiki/General_number_field_sieve) etc.
Այս օրինակում կան շատ տեղեր, որ կարելի է ավելի օպտիմալ գրել։ Օրինակ մենք կարող ենք փնտրել բաժանարարները `2`֊ից մինչև արմատ `i`֊ն։ Մեծ ինտերվալների դեպքում մենք պետք է լավացնենք (այսինքն փոքրացնենք) փնտրման սահմանները, ավելի արդյունավետ ծրագիր ստանալու համար։ Դրա համար պետք է ծանոթ լինենք խորացված մաթեմատիկայի տարրերին և կոմպլեքս ալգորիթմներին, ինչպիսիք են [Քառակուսային մաղ (Quadratic sieve)](https://en.wikipedia.org/wiki/Quadratic_sieve), [Ընդհանուր թվերի դաշտային մաղ (General number field sieve)](https://en.wikipedia.org/wiki/General_number_field_sieve) և այլն։
14 changes: 7 additions & 7 deletions 1-js/02-first-steps/13-while-for/7-list-primes/task.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,16 +2,16 @@ importance: 3

---

# Output prime numbers
# Տպել պարզ թվերը

An integer number greater than `1` is called a [prime](https://en.wikipedia.org/wiki/Prime_number) if it cannot be divided without a remainder by anything except `1` and itself.
`1`֊ից մեծ ամբողջ թիվը կոչվում է [պարզ](https://hy.wikipedia.org/wiki/Պարզ_թիվ), եթե ունի միայն երկու բաժանարար, դրանք են՝ `1`֊ը և հենց ինքը։

In other words, `n > 1` is a prime if it can't be evenly divided by anything except `1` and `n`.
Այլ կերպ ասած, `n > 1` պայմանին բավարարող `n`֊ը պարզ է, եթե այն հնարավոր չէ անմնացորդ բաժանել կամայական ամբողջ թվի վրա, բացի `1`֊ից և `n`֊ից։

For example, `5` is a prime, because it cannot be divided without a remainder by `2`, `3` and `4`.
Օրինակ, `5`֊ը պարզ է, քանի որ այն չի բաժանվում `2`֊ի, `3`֊ի և `4`֊ի։

**Write the code which outputs prime numbers in the interval from `2` to `n`.**
**Գրել ծրագիր, որը կտպի բոլոր պարզ թվերը `2`֊ից մինչև `n` հատվածում:**

For `n = 10` the result will be `2,3,5,7`.
`n = 10` դեպքի համար արդյունքը պետք է լինի `2,3,5,7`։

P.S. The code should work for any `n`, not be hard-tuned for any fixed value.
Հ․Գ․ Ծրագիրը պետք է աշխատի կամայական `n`֊ի համար, այսինքն `n`֊ը պետք է հեշտ մոդիֆիկացվի։
Loading