Skip to content

Commit 48d68e3

Browse files
authored
Merge pull request #30 from fcrezza/id-loops
Loops: while and for
2 parents daf40cf + edb67f3 commit 48d68e3

File tree

14 files changed

+196
-198
lines changed

14 files changed

+196
-198
lines changed
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
The answer: `1`.
1+
Jawabanya: `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+
Setiap pengulangan mengurangi `i` oleh `1`. Cek `while(i)` menghentikan perulangan ketika `i = 0`.
1212

13-
Hence, the steps of the loop form the following sequence ("loop unrolled"):
13+
Oleh karena itu, langkah-langkah perulangan membentuk urutan berikut ("perulangan terbuka"):
1414

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

18-
alert(i--); // shows 3, decreases i to 2
18+
alert(i--); // menampilkan 3, mengurangi i ke 2
1919

20-
alert(i--) // shows 2, decreases i to 1
20+
alert(i--) // menampilkan 2, mengurangi i ke 1
2121

22-
alert(i--) // shows 1, decreases i to 0
22+
alert(i--) // menampilkan 1, mengurangi i ke 0
2323

24-
// done, while(i) check stops the loop
24+
// selesai while(i) cek menghentikan pengulangan
2525
```

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

+3-3
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,10 @@
1-
importance: 3
1+
nilai penting: 3
22

33
---
44

5-
# Last loop value
5+
# Nilai terakhir perulangan
66

7-
What is the last value alerted by this code? Why?
7+
Apa nilai terakhir yang diperingatkan oleh kode ini? Mengapa?
88

99
```js
1010
let i = 3;
Original file line numberDiff line numberDiff line change
@@ -1,30 +1,30 @@
1-
The task demonstrates how postfix/prefix forms can lead to different results when used in comparisons.
1+
Tugas mendemonstrasikan bagaimana bentuk postfix/prefix dapat menyebabkan hasil yang berbeda ketika digunakan dalam perbandingan
22

3-
1. **From 1 to 4**
3+
1. **Dari 1 ke 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+
nilai pertama adalah `i = 1`, karena `++i` pertama menaikan `i` dan mengembalikan nilai baru. Jadi perbandingan pertama adalah `1 < 5` dan `alert` menampilkan `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+
lalu diikuti `2, 3, 4…` -- nilainya muncul satu per satu. Perbandingan selalu menggunakan nilai yang ditambah, karna `++` sebelum variabel.
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+
Akhirnya, `i = 4` naik menjadi `5`, perbandingan `while(5 < 5)` gagal, dan pengulangan berhenti. Jadi `5` tidak ditampilkan.
15+
2. **Dari 1 ke 5**
1616

1717
```js run
1818
let i = 0;
1919
while (i++ < 5) alert( i );
2020
```
2121

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`).
22+
Lagi, nilai pertama adalah `i = 1`. bentuk postfix dari `i++` menaikan `i` lalu mengembalikan nilai yang *lama*, jadi perbandinganya `i++ < 5` akan menggunakan `i = 0` (berbeda dengan `++i < 5`).
2323

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`.
24+
Namun panggilan `alert` terpisah. ini adalah pernyataan lain yang berjalan setelah kenaikan dan perbandingan. Jadi ini mendapatkan yang sekarang `i = 1`.
2525

26-
Then follow `2, 3, 4…`
26+
Lalu diikuti `2, 3, 4…`
2727

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`.
28+
Mari berhenti di `i = 4`. bentuk prefix `++i` akan menaikannya dan menggunakan `5` di perbandingan. Tapi disini kita mempunyai bentuk postfix `i++`. jadi ini menaikan `i` ke `5`, namun mengembalikan nilai yang lama. Karna perbandingan yang sebenarnya adalah `while(4 < 5)` -- benar, dan kontrol berlanjut ke `alert`.
2929

30-
The value `i = 5` is the last one, because on the next step `while(5 < 5)` is false.
30+
Nilai `i = 5` adalah yang terkahir, karena pada langkah berikutnya `while(5 < 5)` adalah salah.

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

+6-6
Original file line numberDiff line numberDiff line change
@@ -1,20 +1,20 @@
1-
importance: 4
1+
nilai penting: 4
22

33
---
44

5-
# Which values does the while loop show?
5+
# Nilai mana yang ditampilkan perulangan while?
66

7-
For every loop iteration, write down which value it outputs and then compare it with the solution.
7+
Setiap perulangan, tulis nilai yang dikeluarkan dan bandingkan dengan solusinya.
88

9-
Both loops `alert` the same values, or not?
9+
Kedua perulangan `alert` nilai yang sama, atau tidak?
1010

11-
1. The prefix form `++i`:
11+
1. Bentuk prefix `++i`:
1212

1313
```js
1414
let i = 0;
1515
while (++i < 5) alert( i );
1616
```
17-
2. The postfix form `i++`
17+
2. Bentuk postfix `i++`
1818

1919
```js
2020
let i = 0;
Original file line numberDiff line numberDiff line change
@@ -1,17 +1,17 @@
1-
**The answer: from `0` to `4` in both cases.**
1+
**Jawabanya: dari `0` ke `4` di kedua kasus.**
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+
Itu dapat dengan mudah dikurangkan dari algoritma dari `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. Jalankan sekali `i = 0` sebelum apapun (mulai).
12+
2. Cek kondisinya `i < 5`
13+
3. Jika `true` -- jalankan badan perulangan `alert(i)`, lalu `i++`
1414

15-
The increment `i++` is separated from the condition check (2). That's just another statement.
15+
Kenaikan `i++` terpisah dari pengecekan kondisi (2). itu hanya pernyataan lain.
1616

17-
The value returned by the increment is not used here, so there's no difference between `i++` and `++i`.
17+
Nilai yang dikembalikan oleh kenaikan tidak digunakan disini, jadi tidak ada bedanya antara `i++` dan `++i`.

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

+6-6
Original file line numberDiff line numberDiff line change
@@ -1,19 +1,19 @@
1-
importance: 4
1+
nilai penting: 4
22

33
---
44

5-
# Which values get shown by the "for" loop?
5+
# Nilai mana yang ditampilkan oleh perulangan "for" ?
66

7-
For each loop write down which values it is going to show. Then compare with the answer.
7+
Untuk setiap perulangan tulis nilai mana yang akan ditampilkan. lalu bandingkan dengan jawabanya
88

9-
Both loops `alert` same values or not?
9+
Kedua perulangan `alert` nilai yang sama atau tidak?
1010

11-
1. The postfix form:
11+
1. Bentuk postfix:
1212

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

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

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

+1-1
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+
Kita menggunakan operator "modulo" `%` untuk mendapatkan sisanya dan untuk mengecek kegenapan disini.
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,9 @@
1-
importance: 5
1+
nilai penting: 5
22

33
---
44

5-
# Output even numbers in the loop
5+
# Menghasilkan angka genap di perulangan
66

7-
Use the `for` loop to output even numbers from `2` to `10`.
7+
Gunakan perulangan `for` untuk menghasilkan angka genap dari `2`sampai `10`.
88

99
[demo]

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

+3-3
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,10 @@
1-
importance: 5
1+
nilai penting: 5
22

33
---
44

5-
# Replace "for" with "while"
5+
# Ganti "for" dengan "while"
66

7-
Rewrite the code changing the `for` loop to `while` without altering its behavior (the output should stay same).
7+
Tulis ulang kode ubah perulangan `for` ke `while` tanpa mengubah perlakunya (hasilnya harus tetap sama).
88

99
```js run
1010
for (let i = 0; i < 3; i++) {

1-js/02-first-steps/12-while-for/6-repeat-until-correct/solution.md

+5-5
Original file line numberDiff line numberDiff line change
@@ -3,13 +3,13 @@
33
let num;
44

55
do {
6-
num = prompt("Enter a number greater than 100?", 0);
6+
num = prompt("Masukan angka lebih dari 100?", 0);
77
} while (num <= 100 && num);
88
```
99

10-
The loop `do..while` repeats while both checks are truthy:
10+
Perulangan `do..while` diulangi selagi kedua cek itu bernilai benar:
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 a empty string. Then the `while` loop stops too.
12+
1. Cek untuk `num <= 100` -- itu adalah, nilai yang dimasukan masih tidak lebih besar dari `100`.
13+
2. Cek `&& num` adalah salah ketika `num` adalah `null` atau sebuah string kosong. lalu perulangan `while` berhenti juga.
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. Jika `num` adalah `null` lalu `num <= 100` adalah `true`, jadi tanpa pengecekan kedua perulangan tidak akan berhenti jika pengguna mengeclick CANCEL. Kedua cek dibutuhkan.
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,13 @@
1-
importance: 5
1+
nilai penting: 5
22

33
---
44

5-
# Repeat until the input is correct
5+
# Ulangi sampai inputnya benar
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+
Tulis sebuah perulangan yang meminta angka lebih dari `100`. Jika pendatang memasukan angka lainnya -- tanya mereka untuk menginput lagi.
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+
Perulangan harus bertanya untuk sebuah angka sampai pengunjung memasukan angka lebih dari `100` atau membatalkan input/memasukan sebuah baris kosong.
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+
Disini kita dapat menganggap bahwa pengunjung hanya menginput angka. Tidak perlu menerapkan penanganan spesial untuk input non-numerik di tugas ini.
1212

1313
[demo]
Original file line numberDiff line numberDiff line change
@@ -1,29 +1,29 @@
1-
There are many algorithms for this task.
1+
Ada banyak algoritma untuk tugas ini.
22

3-
Let's use a nested loop:
3+
mari gunakan perulangan bersarang:
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+
Untuk setiap i dalam interval {
7+
cek jika i memiliki pembagi dari 1..i
8+
if yes => nilainya bukan prima
9+
if no => nilainya prima, tampilkan
1010
}
1111
```
1212

13-
The code using a label:
13+
Kode menggunakan label:
1414

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

1818
nextPrime:
19-
for (let i = 2; i <= n; i++) { // for each i...
19+
for (let i = 2; i <= n; i++) { // untuk setiap 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++) { // mencari pembagi..
22+
if (i % j == 0) continue nextPrime; // bukan prima, pergi selanjutnya i
2323
}
2424

25-
alert( i ); // a prime
25+
alert( i ); // prima
2626
}
2727
```
2828

29-
There's a lot of space to opimize 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+
Ada banyak ruang untuk mengoptimalkannya. Misalnya, kita dapat mencari pembagi dari `2` ke akar kuadrat dari `i`. Tapi bagaimanapun juga, jika kita ingin menjadi sangat efisien untuk interval besar, kita perlu mengubah pendekatan dan mengandalkan pada matematika lanjutan dan algotima kompleks seperti [Quadratic sieve](https://en.wikipedia.org/wiki/Quadratic_sieve), [General number field sieve](https://en.wikipedia.org/wiki/General_number_field_sieve) dsb.
Original file line numberDiff line numberDiff line change
@@ -1,17 +1,17 @@
1-
importance: 3
1+
nilai penting: 3
22

33
---
44

5-
# Output prime numbers
5+
# Menghasilkan bilangan prima
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+
Angka integer lebih dari `1` disebut [bilangan prima](https://en.wikipedia.org/wiki/Prime_number) jika itu tidak bisa dibagi tanpa sisa oleh siapapun kecuali `1` dan bilangan itu sendiri.
88

9-
In other words, `n > 1` is a prime if it can't be evenly divided by anything except `1` and `n`.
9+
Dengan kata lain, `n > 1` adalah prima jika tidak dapat dibagi secara merata oleh apapun kecuali `1` dan `n`.
1010

11-
For example, `5` is a prime, because it cannot be divided without a remainder by `2`, `3` and `4`.
11+
Contohnya, `5` adalah prima, karna tidak bisa dibagi tanpa sisa oleh `2`, `3` and `4`.
1212

13-
**Write the code which outputs prime numbers in the interval from `2` to `n`.**
13+
**Tulis kode yang menghasilkan bilangan prima dalam interval dari `2` sampai `n`.**
1414

15-
For `n = 10` the result will be `2,3,5,7`.
15+
Untuk `n = 10` hasilnya akan `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. Kode harus bekerja untuk segala `n`, tidak disetel untuk nilai tetap apapun.

0 commit comments

Comments
 (0)