Nie rozumiem jak działa mój skrypt.

Odpowiedz Nowy wątek
2018-01-20 11:13
0

Witam serdecznie, jestem tu nowy. Uczę się PHP z książki Marcina Lisa PHP7. Miałem za zadanie przekształcić ten skrypt, tak aby nie wykorzystywał instrukcji continue...

for($i = 1; $i <= 20; $i++){
if($i % 2 != 0) continue;
echo "$i </br>";
}

Skrypt wyświetla liczby od 1 do 20 podzielne przez 2. Przekształciłem ten skrypt następująco:

for($i = 1; $i <= 20; $i++){
if($i % 2 != 1){
echo "$i </br>";
}
}

Problem w tym, że... działa... ale nie rozumiem dlaczego... Martwi mnie ten fragment ($i % 2 != 1), reszta z dzielenia wynosi 1, dlatego liczby wyświetlają się poprawnie - 2,4,6, itd. Gdy zamienię !=0 tak jak w pierwotnym skrypcie wyświetlają się liczby od 1-19, dlaczego tak się dzieje? Zrobiłem to źle? Jeśli jest dobrze, proszę mi to wytłumaczyć jak najprościej. Od razu zaznaczam, że z matmy nie byłem dobry nigdy, ale mam nadzieję, że w trakcie nauki rozwinę się intelektualnie.

Pozdrawiam!

Pozostało 580 znaków

2018-01-20 11:20
NazwaUser
1

'continue' oznacza przejscie do kolejnej iteracji petli, dalszy kod nie jest wykonywany
'!' oznacza negacje, czyli 'i%2 == 0' czytasz jako reszta z dzielenia rowna 0, a 'i%2 != 0' jako reszta z dzielenia rozna od 0

Pozostało 580 znaków

2018-01-20 13:41

Reszta z dzielenia liczby całkowitej przez dwa może wynosić albo 0, albo 1, więc:
$i % 2 == 0, to jest co samo, co $i % 2 != 1 - jeżeli ten warunek jest prawdziwy, to oznacza, że liczba jest parzysta
$i % 2 != 0, to jest to samo, co $i % 2 == 1 - jeżeli ten warunek jest prawdziwy, to oznacza, że liczba jest nieparzysta.

Stąd jeżeli zamieniłeś w swoim warunku != 1 na != 0 zacząłeś dostawać liczby nieparzyste, zamiast parzyste.

Tak wygląda diagram tego prostego algorytmu w wersji z continue, może jak zobaczysz to obrazowo to Ci się coś rozjaśni:
https://drive.google.com/file[...]IlXtAZQDhfcr/view?usp=sharing

Żeby pozbyć się continue wystarczy zanegować warunek i przenieść kod wypisujący liczbę do bloku if:
https://drive.google.com/file[...]mPFimulq6i1l/view?usp=sharing

edytowany 3x, ostatnio: Desu, 2018-01-20 13:54

Pozostało 580 znaków

2018-01-20 19:49
0

Bardzo dziękuję, już rozumiem o co chodzi :)

Pozostało 580 znaków

2018-01-21 01:08
1

Hmm, ja bym myślał, że raczej chodziło o

for($i = 2; $i <= 20; $i = $i + 2){
    echo "$i </br>";
}
edytowany 1x, ostatnio: enedil, 2018-01-21 01:08

Pozostało 580 znaków

Odpowiedz
Liczba odpowiedzi na stronę

1 użytkowników online, w tym zalogowanych: 0, gości: 1, botów: 0