Wyjaśnienie działania kodu


(Matriks87) #1

Witam ponownie mam jeszcze pytanko odnośnie jednej sprawy mianowicie odnośnie działania tego kodu

if ($i % 3 == 2)

            $o .= '

'; $o .= '
'.$filenames[$i].''; if ($i % 3 == 1 || $i == count($filenames) - 1) $o .= '
'; [/code]

$i % 3 to modulo (reszta z dzielenia)

Jeżeli resztą z dzielenia jest 2 to otwiera

table-row (odpowiednik )

Niezależnie od powyższego dodaje

table-cell (odpowiednik ) z obrazkiem.

Następnie sprawdza czy modulo jest równe 1 lub czy obrazki się skończyły.

Jeżeli tak to zamyka

table-row

$i % 3 to reszta z dzielenie $i przez 3

zakładając, że $i ma kolejne wartości:

2 3 4 5 6 7 8 9 10

$i%3 wyniesie odpowiednio:

2 0 1 2 0 1 2 0 1

tam gdzie są dwójki zaczyna się wiersz tabeli - przed wstawieniem otwierany jest

tam gdzie jedynki (lub jeśli jest to ostatni obrazek) po wstawieniu wiersz jest zamykany

w rezultacie elementy układają się według tego schematu:

\div
\div
\div

nie bardzo rozumiem jeżeli pod $i podstawie 2 i podzielę przez 3 to otrzymam 0,6666666666666666666666 wiec czemu napisaleś że reszta z dzielenia jest 2?


(kostek135) #2

Otrzymasz najbliższa podzielną liczbę przez 3 (zaokrąglając w dół) i tego czego brakuje będzie resztą 2 % 3 = 0(c.c.) + 2(r.)

Tak to działa w znanej algebrze liczb całkowitych. W programowaniu uważałbym raczej na liczby ujemne z dziwnego powodu w php i wielu językach -2 % 3 = -2 co jest błędem z algebraicznego punktu widzenia, bo w algebrze r należy do zbioru <0,1,2,...> i -2 % 3 = 1

Może trochę zamotałem ale idea schematu wyobrażenia sobie jest taka czy a jest podzielne przez b (jest podzielne znaczy dzieli się bez reszty), jeżeli tak wyświetl licznik reszty, jeżeli nie od a odejmij 1 oraz zwiększ licznik o jeden i rekurencyjnie wywołaj schemat.