Nie rozumiem jak działa mój skrypt.

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!

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

1

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/d/1n9UlAi-26o06gNiXrp_LIlXtAZQDhfcr/view?usp=sharing

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

0

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

1

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

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

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