Skip to content

Commit ecced8d

Browse files
authored
Merge pull request #79 from otmon76/1.2.13
Loops: while and for
2 parents 642b4a1 + fb0c0cf commit ecced8d

File tree

15 files changed

+221
-221
lines changed

15 files changed

+221
-221
lines changed
Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
The answer: `1`.
1+
Odpověď: `1`.
22

33
```js run
44
let i = 3;
@@ -8,18 +8,18 @@ while (i) {
88
}
99
```
1010

11-
Every loop iteration decreases `i` by `1`. The check `while(i)` stops the loop when `i = 0`.
11+
Každá iterace cyklu sníží `i` o `1`. Ověření `while(i)` zastaví cyklus, když `i = 0`.
1212

13-
Hence, the steps of the loop form the following sequence ("loop unrolled"):
13+
Jednotlivé kroky cyklu tedy vytvoří následující posloupnost:
1414

1515
```js
1616
let i = 3;
1717

18-
alert(i--); // shows 3, decreases i to 2
18+
alert(i--); // zobrazí 3, sníží i na 2
1919

20-
alert(i--) // shows 2, decreases i to 1
20+
alert(i--) // zobrazí 2, sníží i na 1
2121

22-
alert(i--) // shows 1, decreases i to 0
22+
alert(i--) // zobrazí 1, sníží i na 0
2323

24-
// done, while(i) check stops the loop
24+
// hotovo, ověření while(i) ukončí cyklus
2525
```

1-js/02-first-steps/13-while-for/1-loop-last-value/task.md

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,9 +2,9 @@ importance: 3
22

33
---
44

5-
# Last loop value
5+
# Poslední hodnota v cyklu
66

7-
What is the last value alerted by this code? Why?
7+
Jaká je poslední hodnota, kterou vypíše tento kód? Proč?
88

99
```js
1010
let i = 3;
Lines changed: 12 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1,30 +1,31 @@
1-
The task demonstrates how postfix/prefix forms can lead to different results when used in comparisons.
1+
Tato úloha ukazuje, jak může prefixová a postfixová notace vést k rozdílným výsledkům, když je použijeme v porovnání.
22

3-
1. **From 1 to 4**
3+
1. **Od 1 do 4**
44

55
```js run
66
let i = 0;
77
while (++i < 5) alert( i );
88
```
99

10-
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`.
10+
První hodnota je `i = 1`, jelikož `++i` nejprve zvýší `i` a pak vrátí novou hodnotu. První porovnání je tedy `1 < 5` a `alert` zobrazí `1`.
1111

12-
Then follow `2, 3, 4…` -- the values show up one after another. The comparison always uses the incremented value, because `++` is before the variable.
12+
Následují `2, 3, 4…` -- hodnoty se zobrazí jedna po druhé. Porovnání se vždy dívá na zvýšenou hodnotu, protože `++` je před proměnnou.
1313

14-
Finally, `i = 4` is incremented to `5`, the comparison `while(5 < 5)` fails, and the loop stops. So `5` is not shown.
15-
2. **From 1 to 5**
14+
Nakonec `i = 4` se zvýší na `5`, porovnání `while(5 < 5)` neuspěje a cyklus skončí. Takže `5` se nezobrazí.
15+
16+
2. **Od 1 do 5**
1617

1718
```js run
1819
let i = 0;
1920
while (i++ < 5) alert( i );
2021
```
2122

22-
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`).
23+
První hodnota je opět `i = 1`. Postfixová notace `i++` zvýší `i` a pak vrátí *starou* hodnotu, takže porovnání `i++ < 5` se dívá na `i = 0` (na rozdíl od `++i < 5`).
2324

24-
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`.
25+
Avšak `alert` se volá odděleně. Je to další příkaz, který se spustí až po zvýšení a porovnání. Proto obdrží aktuální `i = 1`.
2526

26-
Then follow `2, 3, 4…`
27+
Následují `2, 3, 4…`
2728

28-
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`.
29+
Zastavme se u `i = 4`. Prefixová notace `++i` by je zvýšila a v porovnání by použila `5`. Tady však máme postfixovou notaci `i++`. Ta zvýší `i` na `5`, ale vrátí starou hodnotu. Proto se provede porovnání `while(4 < 5)` -- pravda, tudíž řízení přejde k `alert`.
2930

30-
The value `i = 5` is the last one, because on the next step `while(5 < 5)` is false.
31+
Hodnota `i = 5` je poslední, jelikož další krok `while(5 < 5)` dává nepravdu.

1-js/02-first-steps/13-while-for/2-which-value-while/task.md

Lines changed: 5 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -2,19 +2,18 @@ importance: 4
22

33
---
44

5-
# Which values does the while loop show?
5+
# Které hodnoty zobrazí cyklus while?
66

7-
For every loop iteration, write down which value it outputs and then compare it with the solution.
7+
Pro oba cykly si zapište hodnoty, které budou vypsány, a pak je porovnejte s řešením.
88

9-
Both loops `alert` the same values, or not?
10-
11-
1. The prefix form `++i`:
9+
Vypíše `alert` v obou cyklech stejné hodnoty, nebo ne?
1210

11+
1. Prefixová notace `++i`:
1312
```js
1413
let i = 0;
1514
while (++i < 5) alert( i );
1615
```
17-
2. The postfix form `i++`
16+
2. Postfixová notace `i++`
1817

1918
```js
2019
let i = 0;
Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,17 +1,17 @@
1-
**The answer: from `0` to `4` in both cases.**
1+
**Odpověď: od `0` do `4` v obou případech.**
22

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

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

9-
That can be easily deducted from the algorithm of `for`:
9+
Lze to snadno odvodit z algoritmu pro `for`:
1010

11-
1. Execute once `i = 0` before everything (begin).
12-
2. Check the condition `i < 5`
13-
3. If `true` -- execute the loop body `alert(i)`, and then `i++`
11+
1. Nejdříve se jedenkrát vykoná `i = 0` (začátek).
12+
2. Ověří se podmínka `i < 5`.
13+
3. Je-li `true`, vykoná se tělo cyklu `alert(i)` a pak `i++`.
1414

15-
The increment `i++` is separated from the condition check (2). That's just another statement.
15+
Zvýšení `i++` je odděleno od testu podmínky (2). Je to jen další příkaz.
1616

17-
The value returned by the increment is not used here, so there's no difference between `i++` and `++i`.
17+
Hodnota vrácená zvýšením se tady nepoužívá, takže mezi `i++` a `++i` zde není žádný rozdíl.

1-js/02-first-steps/13-while-for/3-which-value-for/task.md

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -2,18 +2,18 @@ importance: 4
22

33
---
44

5-
# Which values get shown by the "for" loop?
5+
# Které hodnoty zobrazí cyklus „for?
66

7-
For each loop write down which values it is going to show. Then compare with the answer.
7+
Pro oba cykly zapište hodnoty, které budou zobrazeny, a pak je porovnejte s řešením.
88

9-
Both loops `alert` same values or not?
9+
Vypíše `alert` v obou cyklech stejné hodnoty, nebo ne?
1010

11-
1. The postfix form:
11+
1. Postfixová forma:
1212

1313
```js
1414
for (let i = 0; i < 5; i++) alert( i );
1515
```
16-
2. The prefix form:
16+
2. Prefixová forma:
1717

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

1-js/02-first-steps/13-while-for/4-for-even/solution.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,4 +8,4 @@ for (let i = 2; i <= 10; i++) {
88
}
99
```
1010

11-
We use the "modulo" operator `%` to get the remainder and check for the evenness here.
11+
K získání zbytku po dělení dvěma a ověření sudosti zde používáme operátor „modulo“ `%`.

1-js/02-first-steps/13-while-for/4-for-even/task.md

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,8 +2,8 @@ importance: 5
22

33
---
44

5-
# Output even numbers in the loop
5+
# Vypište sudá čísla v cyklu
66

7-
Use the `for` loop to output even numbers from `2` to `10`.
7+
Použitím cyklu `for` vypište sudá čísla od `2` do `10`.
88

99
[demo]

1-js/02-first-steps/13-while-for/5-replace-for-while/solution.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
```js run
44
let i = 0;
55
while (i < 3) {
6-
alert( `number ${i}!` );
6+
alert( `číslo ${i}!` );
77
i++;
88
}
99
```

1-js/02-first-steps/13-while-for/5-replace-for-while/task.md

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2,13 +2,13 @@ importance: 5
22

33
---
44

5-
# Replace "for" with "while"
5+
# Nahraďte cyklus „for“ cyklem „while
66

7-
Rewrite the code changing the `for` loop to `while` without altering its behavior (the output should stay same).
7+
Přepište kód tak, že cyklus `for` zaměníte za cyklus `while`, aniž by se změnilo jeho chování (výstup má zůstat stejný).
88

99
```js run
1010
for (let i = 0; i < 3; i++) {
11-
alert( `number ${i}!` );
11+
alert( `číslo ${i}!` );
1212
}
1313
```
1414

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,15 @@
11

22
```js run demo
3-
let num;
3+
let číslo;
44

55
do {
6-
num = prompt("Enter a number greater than 100?", 0);
7-
} while (num <= 100 && num);
6+
číslo = prompt("Zadejte číslo větší než 100", 0);
7+
} while (číslo <= 100 && číslo);
88
```
99

10-
The loop `do..while` repeats while both checks are truthy:
10+
Cyklus `do..while` se opakuje, dokud jsou obě podmínky splněny:
1111

12-
1. The check for `num <= 100` -- that is, the entered value is still not greater than `100`.
13-
2. The check `&& num` is false when `num` is `null` or an empty string. Then the `while` loop stops too.
12+
1. Podmínka `číslo <= 100` -- tedy že zadaná hodnota stále není větší než `100`.
13+
2. Podmínka `&& číslo` je nepravdivá, když `číslo` je `null` nebo prázdný řetězec. Pak se cyklus `while` rovněž zastaví.
1414

15-
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.
15+
P.S. Jestliže `číslo` je `null`, pak `číslo <= 100` vydá `true`, takže bez druhé podmínky by se cyklus nezastavil, kdyby uživatel stiskl Storno. Obě podmínky jsou zapotřebí.

1-js/02-first-steps/13-while-for/6-repeat-until-correct/task.md

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -2,12 +2,12 @@ importance: 5
22

33
---
44

5-
# Repeat until the input is correct
5+
# Opakujte, dokud vstup nebude správně
66

7-
Write a loop which prompts for a number greater than `100`. If the visitor enters another number -- ask them to input again.
7+
Napište cyklus, který se bude ptát na číslo větší než `100`. Pokud návštěvník zadá jiné číslo, zeptejte se ho znovu.
88

9-
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.
9+
Cyklus se musí ptát na číslo tak dlouho, až návštěvník zadá číslo větší než `100` nebo zruší vstup či zadá prázdný řádek.
1010

11-
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.
11+
Zde můžeme předpokládat, že uživatel zadává pouze čísla. V této úloze nemusíte implementovat zvláštní zacházení s nečíselnými vstupy.
1212

1313
[demo]
Lines changed: 13 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -1,29 +1,29 @@
1-
There are many algorithms for this task.
1+
Pro tuto úlohu existuje mnoho algoritmů.
22

3-
Let's use a nested loop:
3+
Použijeme vnořený cyklus:
44

55
```js
6-
For each i in the interval {
7-
check if i has a divisor from 1..i
8-
if yes => the value is not a prime
9-
if no => the value is a prime, show it
6+
pro každé i v intervalu {
7+
ověř, zda i má dělitele mezi 1..i
8+
pokud ano => i není prvočíslo
9+
pokud ne => i je prvočíslo, zobraz ho
1010
}
1111
```
1212

13-
The code using a label:
13+
Kód s použitím návěští:
1414

1515
```js run
1616
let n = 10;
1717

18-
nextPrime:
19-
for (let i = 2; i <= n; i++) { // for each i...
18+
dalšíPrvočíslo:
19+
for (let i = 2; i <= n; i++) { // pro každé i...
2020

21-
for (let j = 2; j < i; j++) { // look for a divisor..
22-
if (i % j == 0) continue nextPrime; // not a prime, go next i
21+
for (let j = 2; j < i; j++) { // hledáme dělitele...
22+
if (i % j == 0) continue dalšíPrvočíslo; // není to prvočíslo, přejdeme k dalšímu i
2323
}
2424

25-
alert( i ); // a prime
25+
alert( i ); // je to prvočíslo
2626
}
2727
```
2828

29-
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.
29+
Je zde mnoho prostoru k optimalizaci. Můžeme se například dívat jen na dělitele od `2` do odmocniny `i`. Kdybychom však chtěli být opravdu efektivní i pro velké intervaly, museli bychom změnit přístup a zaměřit se na vysokou matematiku a složité algoritmy, např. [kvadratické síto](https://en.wikipedia.org/wiki/Quadratic_sieve), [Obecné číselné teoretické síto (GNFS)](https://en.wikipedia.org/wiki/General_number_field_sieve) atd.

1-js/02-first-steps/13-while-for/7-list-primes/task.md

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -2,16 +2,16 @@ importance: 3
22

33
---
44

5-
# Output prime numbers
5+
# Vypište prvočísla
66

7-
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.
7+
Celé číslo větší než `1` se nazývá [prvočíslo](https://cs.wikipedia.org/wiki/Prvočíslo), jestliže není dělitelné beze zbytku jiným celým číslem než `1` a sebou samým.
88

9-
In other words, `n > 1` is a prime if it can't be evenly divided by anything except `1` and `n`.
9+
Jinými slovy, číslo `n > 1` je prvočíslo, jestliže není dělitelné beze zbytku jiným číslem než `1` a `n`.
1010

11-
For example, `5` is a prime, because it cannot be divided without a remainder by `2`, `3` and `4`.
11+
Například `5` je prvočíslo, protože není dělitelné beze zbytku číslem `2`, `3` ani `4`.
1212

13-
**Write the code which outputs prime numbers in the interval from `2` to `n`.**
13+
**Napište kód, který vypíše všechna prvočísla v intervalu od `2` do `n`.**
1414

15-
For `n = 10` the result will be `2,3,5,7`.
15+
Například pro `n = 10` bude výsledek `2,3,5,7`.
1616

17-
P.S. The code should work for any `n`, not be hard-tuned for any fixed value.
17+
P.S. Kód by měl fungovat pro jakékoli `n`. Neměl by být vyladěn jen pro nějakou pevnou hodnotu.

0 commit comments

Comments
 (0)