- Notifications
You must be signed in to change notification settings - Fork30
Loops: while and for#75
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 ourterms of service andprivacy statement. We’ll occasionally send you account related emails.
Already on GitHub?Sign in to your account
base:master
Are you sure you want to change the base?
Uh oh!
There was an error while loading.Please reload this page.
Changes fromall commits
04ea0ba
1adcfac
b6729e7
aa4c2fe
13c4805
b04d24e
039f50e
f8e70d6
3139b59
0614e86
0b880d0
File filter
Filter by extension
Conversations
Uh oh!
There was an error while loading.Please reload this page.
Jump to
Uh oh!
There was an error while loading.Please reload this page.
Diff view
Diff view
There are no files selected for viewing
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,10 +1,10 @@ | ||
ważność: 3 | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others.Learn more. Please do not translate YAML metadata | ||
--- | ||
#Ostatnia wartość pętli | ||
Jaka jest ostatnia wartość pokazana przez ten kod? Dlaczego? | ||
```js | ||
let i = 3; | ||
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,30 +1,30 @@ | ||
Zadanie pokazuje, w jaki sposób formypostfix/prefixmogą prowadzić do różnych wyników w przypadku ich wykorzystania w porównaniach. | ||
1. **Od 1do 4** | ||
```js run | ||
let i = 0; | ||
while (++i < 5) alert( i ); | ||
``` | ||
Pierwszą wartością jest`i = 1`,ponieważ `++i`najpierw powiększy `i`, a następnie zwraca nową wartość. Tak więc pierwsze porównanie jest `1 < 5`, a`alert`pokazuje `1`. | ||
Następnie podążając `2, 3, 4...` --wartości pojawiają się jedna po drugiej. Porównanie zawsze używa zwiększonej wartości, ponieważ `++`jest przed zmienną. | ||
W końcu, `i = 4`jest zwiększone do `5`,porównanie`while(5 < 5)`zawodzi, a pętla się zatrzymuje. Tak więc`5`nie jest pokazane. | ||
2. **Od 1do 5** | ||
```js run | ||
let i = 0; | ||
while (i++ < 5) alert( i ); | ||
``` | ||
Pierwszą wartością jest ponownie`i = 1`.Przyrostkowa forma`i++`zwiększa `i`, a następnie zwraca *starą* wartość, więc porównanie`i++ < 5`użyje`i = 0` (w przeciwieństwie do `++i < 5`). | ||
Ale zawołanie `alert`jest osobne. Jest to kolejna stwierdzenie, która wykonuje się po inkrementacji i porównaniu. Więc dostaje bieżący `i = 1`. | ||
Potem kolejno `2, 3, 4…` | ||
Zatrzymajmy się na `i = 4`.Forma prefiksu`++i`zwiększyłaby go i użyła`5`w porównaniu. Ale tutaj mamy formę przyrostkową`i++`.Zwiększa więc`i`do `5`,ale zwraca starą wartość. Stąd porównanie`while(4 < 5)`jest prawdziwe, a kontrola przechodzi do `alert`. | ||
Wartość`i = 5`jest ostatnią, ponieważ w następnym kroku`while(5 < 5)`jest fałszywe. |
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,20 +1,20 @@ | ||
ważność: 4 | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others.Learn more. Please do not translate YAML metadata | ||
--- | ||
#Jakie wartości pokazuje pętla while? | ||
Dla każdej iteracji pętli zapisz, jaką wartość ona generuje, a następnie porównaj ją z rozwiązaniem. | ||
Obie pętle ogłoszą (`alert`) te samewartości, czy nie? | ||
1.Forma prefiksowa `++i`: | ||
```js | ||
let i = 0; | ||
while (++i < 5) alert( i ); | ||
``` | ||
2.Forma przyrostkowa (postfix) `i++` | ||
```js | ||
let i = 0; | ||
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,17 +1,16 @@ | ||
**Odpowiedź: od `0`do `4`w obu przypadkach.** | ||
```js run | ||
for (let i = 0; i < 5; ++i) alert( i ); | ||
for (let i = 0; i < 5; i++) alert( i ); | ||
``` | ||
Można to łatwo odczytać z algorytmu `for`: | ||
1.Wykonać raz `i = 0`przed wszystkim (początek). | ||
2.Sprawdzić warunek `i < 5` | ||
3.jeśli `true` --wykonaj ciało pętli`alert(i)`,a potem `i++` | ||
Przyrost `i++` jest oddzielony od sprawdzenia warunku (2). To tylko kolejne stwierdzenie. | ||
Wartość zwracana przez przyrost nie jest tutaj używana, więc nie ma różnicy między `i++` a `++i`. | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others.Learn more. Please add a blank line between line 15 and 16 |
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,19 +1,19 @@ | ||
ważność: 4 | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others.Learn more. Please do not translate YAML metadata | ||
--- | ||
#Jakie wartości pokazuje pętla"for"? | ||
Dla każdej pętli zapisz, jakie wartości ma ona pokazywać. Następnie porównaj z odpowiedzią. | ||
Obie pętle ogłaszają (`alert`) tesamewartości, czy nie? | ||
1.Forma przyrostkowa: | ||
```js | ||
for (let i = 0; i < 5; i++) alert( i ); | ||
``` | ||
2.Forma prefixowa: | ||
```js | ||
for (let i = 0; i < 5; ++i) alert( i ); | ||
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -8,4 +8,4 @@ for (let i = 2; i <= 10; i++) { | ||
} | ||
``` | ||
Używamy operatora"modulo" `%`aby uzyskać resztę i sprawdzić tutaj równomierność. |
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,9 +1,9 @@ | ||
ważność: 5 | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others.Learn more. Please do not translate YAML metadata | ||
--- | ||
#Zwróć numery parzyste w pętli | ||
Użyj pętli `for`do wyprowadzenia parzystych liczb od`2`do `10`. | ||
[demo] |
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -3,7 +3,7 @@ | ||
```js run | ||
let i = 0; | ||
while (i < 3) { | ||
alert( `liczba ${i}!` ); | ||
i++; | ||
} | ||
``` | ||
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,14 +1,14 @@ | ||
ważność: 5 | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others.Learn more. Please do not translate YAML metadata | ||
--- | ||
#Zastąp "for"pętlą "while" | ||
Przepisz ponownie kod zmieniając pętlę `for`na`while`bez zmiany jej zachowania (wyjście powinno pozostać takie samo). | ||
```js run | ||
for (let i = 0; i < 3; i++) { | ||
alert( `liczba ${i}!` ); | ||
} | ||
``` | ||
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,13 +1,13 @@ | ||
ważność: 5 | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others.Learn more. Please do not translate YAML metadata | ||
--- | ||
#Powtarzaj do momentu, aż wejście będzie prawidłowe | ||
Napisz pętlę, która pyta o liczbę większą niż`100`.Jeśli odwiedzający wprowadzi inną liczbę - poproś go o jej ponowne wprowadzenie. | ||
Pętla musi pytać o liczbę, dopóki użytkownik nie wprowadzi liczby większej niż`100`lub nie anuluje wejścia/wprowadzi pustą linię. | ||
Tutaj możemy założyć, że odwiedzający wprowadza tylko numery. Nie ma potrzeby implementowania specjalnej obsługi dla nie-numerycznych danych wejściowych w tym zadaniu. | ||
[demo] |
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,29 +1,29 @@ | ||
Istnieje wiele algorytmów dla tego zadania. | ||
Użyjmy pętli zagnieżdżonej: | ||
```js | ||
Dla każdego iw przedziale { | ||
sprawdź jeśli ima dzielnik od 1..i | ||
jeśli tak =>wartość nie jest liczbą pierwszą | ||
jeśli nie =>wartość jest liczbą pierwszą, pokaż ją | ||
} | ||
``` | ||
Kod używając etykiety: | ||
```js run | ||
let n = 10; | ||
nextPrime: | ||
for (let i = 2; i <= n; i++) { //dla każdego i... | ||
for (let j = 2; j < i; j++) { //szukaj dziewlnika.. | ||
if (i % j == 0) continue nextPrime; //nie liczba pierwsza idź do następnego i | ||
} | ||
alert( i ); //liczba pierwsza | ||
} | ||
``` | ||
Jest dużo miejsca na optymalizację. Na przykład, możemy szukać dzielników od`2`do pierwiastka kwadratowego`i`.Ale tak czy inaczej, jeśli chcemy być naprawdę wydajni w dużych odstępach czasu, musimy zmienić podejście i polegać na zaawansowanych matematykach i złożonych algorytmach, takich jak [Sito kwadratowe](https://pl.wikipedia.org/wiki/Sito_kwadratowe), [Ogólne sito ciała liczbowego](https://pl.wikipedia.org/wiki/GNFS) itd. |
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,17 +1,17 @@ | ||
ważność: 3 | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others.Learn more. Please do not translate YAML metadata | ||
--- | ||
#Zwróć liczby pierwsze | ||
Liczba całkowita większa od`1`nazywana jest [liczbą pierwszą](https://pl.wikipedia.org/wiki/Liczba_pierwsza), jeśli nie może być podzielona bez reszty przez nic poza`1`i samą siebie. | ||
Innymi słowy, `n > 1`jest liczbą pierwszą, jeśli nie można jej równo podzielić przez nic poza `1`i `n`. | ||
Na przykład, `5`jest liczbą pierwszą, ponieważ nie można jej podzielić bez reszty przez`2`, `3`i `4`. | ||
**Napisz kod, który wyprowadza liczby pierwsze w przedziale od`2`do `n`.** | ||
Dla `n = 10`wynik będzie `2,3,5,7`. | ||
P.S.Kod powinien działać dla każdego`n`,nie powinien być dostosowany na stałe do żadnej wartości. |
Uh oh!
There was an error while loading.Please reload this page.