• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Jak działa ten kod z modulo ?

Object Storage Arubacloud
–1 głos
1,544 wizyt
pytanie zadane 1 maja 2019 w Rozwój zawodowy, nauka, praca przez Kubs Mądrala (5,190 p.)

Witajcie,

jak dokładnie wykonuje się to modulo?

if (n%2==0) {    //jeśli n jest parzyste
....
} 

 

3 odpowiedzi

0 głosów
odpowiedź 1 maja 2019 przez Paweł123 Nałogowiec (33,500 p.)
edycja 1 maja 2019 przez Paweł123
 
Najlepsza

Modulo – operacja wyznaczania reszty z dzielenia jednego typu liczbowego przez drugi.

 Czyli masz coś takiego

if(1%2==0) czyli reszta nie wynosi 0, czyli ten if się nie wykona

if(2%2==0) reszta wynosi 0, czyli to co jest w tym ifie się wykona

Modulo jest to coś takiego ile razy dana liczba zmieści się w danej liczbie. W liczbie 6 zmieszczą się trzy 2, a reszta z dzielenia będzie równa 0, a w liczbie 9%2 zmieszczą się cztery dwójki, a reszta będzie 1

komentarz 1 maja 2019 przez Kubs Mądrala (5,190 p.)
Ach ok, doskonale, rozumiem.

Czyli tutaj to 0 wskazuje na 'jeśli nie będzie reszty z modulo' ,tak?
komentarz 1 maja 2019 przez Chess Szeryf (76,710 p.)
edycja 1 maja 2019 przez Chess

@Paweł123;

if(1%2==0) czyli reszta wynosi 0.5, czyli ten if się nie wykona

Zacytowany fragment jest błędny, powinno być:

if(1%2==0) czyli reszta wynosi 1.0, czyli ten if się nie wykona

@Kubs; jeśli masz np. taki przykład z użyciem modulo, a znak modulo w pewnych językach najczęściej to % lub mod:

  3
____
  7/2
 -6
____
  1 <-- Rest of Division

Another Example

  3
____
  6/2
 -6
____
  0 <-- Rest of Division 

(mod 0 2) => 0 (mod 1 2) => 1 (mod 2 2) => 0 (mod 3 2) => 1 (mod 4 2) => 0.

Powyższy zapis oznacza: pierwszy argument, to jakaś nazwa np. funkcji a następnie argumenty np. funkcji. Inaczej można zapisać to w ten sposób: (1 mod 2). Pierwszy zapis stosuje się np. w jezyku programowania Common Lisp.

Modulo oznacza resztę z "dzielenia całkowitoliczbowego", czyli tak jak w powyższym przykładzie 7/2=3.5, ale już nie dokładamy zera na dole, ponieważ modulo oznacza resztę, więc tak nie robimy:

  3.5
____
  7/2
 -6
____
  10
 -10
____
  00

Liczymy wszystko do kropki, a nie po kropce, czyli rezultat z 7/2 wynosi 3.5, a reszta z dzielenia to 0, ponieważ liczymy wszystko do x.0, a nie do x.p, gdzie x to jest obojętnie jaka liczba, a p to obojętnia jaka liczba różna od zera (z wykluczeniem zera).

Przeczytaj definicję parzystości liczby. Liczba jest parzysta wtedy kiedy jej ostatnią cyfrą jest: 0, 2, 4, 6, 8.

komentarz 1 maja 2019 przez Paweł123 Nałogowiec (33,500 p.)

@ Chess

Już poprawiłem :)

komentarz 1 maja 2019 przez Chess Szeryf (76,710 p.)
edycja 1 maja 2019 przez Chess
Nie wiem, czy rozumiesz, co napisałeś. Wyjaśniłeś użytkownikowi @Kubs pojęcie i podałeś przykład, w którym jest błąd nawet po poprawieniu. Jeśli reszta wynosi 1 po podzieleniu przez 2, to ta liczba jest nieparzysta, a jeśli reszta po podzieleniu przez 2 wynosi 0, to liczba ta jest parzysta.

1%2==1 // return true

Jeden jest liczbą nieparzystą, a dzielimy przez 2, więc reszta wynosi jeden. Ty zaś napisałeś, że owa reszta to 0, co nie jest prawdziwe.

W poprzednim komentarzu zamieściłem pare przykładów, zobacz.

Kontekst - dzielenie przez 2:

Gdy reszta wynosi:

1 - liczba nieparzysta

0 - liczba parzysta
komentarz 2 maja 2019 przez Kubs Mądrala (5,190 p.)

@Chess, Super dzięki. Bo mam taki kodu do rysowania zygzaka i zastanawiam się dlaczego tam jest `(n+1)` ,i czy nie mogłoby być bez tego czyli

 var x= startX +  zigzagSpacing;
                var startX = 85;
                var startY = 70;
                var zigzagSpacing = 60;

                for  (var n = 0; n<7; n++) {
                    var x= startX + ((n+1) * zigzagSpacing); // TUTAJ
                    var y;
                    if (n%2==0){
                        y = startY +100;
                    }
                    else {
                        y = startY;
                    }
                    context.lineTo (x,y);
                }

 

1
komentarz 2 maja 2019 przez Chess Szeryf (76,710 p.)
edycja 3 maja 2019 przez Chess
((n+1) * zigzagSpacing)

Jest to tzw. offset - przesunięcie linii od np. osi, czyli jeśli masz punkt o współrzędnych (0,0), to on po offset'cie x=10 pójdzie na (10, 0).

if (n%2==0){

Sprawdza, czy liczba jest parzysta, jeśli tak to wykonuje kod pod spodem, jeśli nie to wykonuje kod z else.

canvas-zigzagMimo iż, nie ustawiasz ctx.moveTo(x, y);, to skrypt/parser automatycznie, to za Ciebie zrobi, jeśli później napiszesz ctx.lineTo(x, y);, to w miejsce tych x,y będzie to x, y dla moveTo. Chyba, że dodasz jakąś linię kodu, która zakotwiczy punkt ctx.moveTo(x, y) w miejscu.

Na obrazku widać, że skala - szerokość, wysokość kratki to 50 jednostek. Dalej sumując zmienną początkową x'ową 150 z 1*50, 2*50 dostajesz kolejno następne punkty w układzie współrzędnych.

komentarz 3 maja 2019 przez Kubs Mądrala (5,190 p.)

Doskonale, dziękuje :)

przy okazji zapytam Cię jeszcze o ten kod

angle  += (Math.PI *2) / 50;

var x = canvas.width/2 + radius *Math.cos (angle);

var y = canvas.height/2 + radius *Math.sin (angle);

Co dokladnie dzieje sie w tych linijkach bo nie do kona rozumiem.

Kod dotyczy rysowania spirali

komentarz 3 maja 2019 przez Chess Szeryf (76,710 p.)

Zadałeś pytanie, które jest offtop tego wątku. Załóż nowy temat, ponieważ ten tyczy się modulo, a nie funkcji trygonometrycznych.

Odsyłam do: https://www.matemaks.pl/funkcje-trygonometryczne-kata-ostrego-w-trojkacie-prostokatnym.html

Twój temat z 4programmers: https://4programmers.net/Forum/Webmastering/326075-rysowania_zygzaka_w_canvas?p=1587923#id1587923

komentarz 4 maja 2019 przez Kubs Mądrala (5,190 p.)
Tak tylko chcialem dopytac odnosnie spirali. Dzieki, zerkne na link.
0 głosów
odpowiedź 1 maja 2019 przez Secrus Nałogowiec (32,880 p.)
Pod operację n%2 podstawiany jest wynik modulo, czyli reszta z dzielenia, w tym przypadku przez 2. Jesli reszta z modulo 2 jest 0, to kod sie wykona
komentarz 1 maja 2019 przez Kubs Mądrala (5,190 p.)
Kiedy wykonuje się warunek if to najpierw mam wartość 1 czyli:

1%2 = 0.5

czyli mamy więcej niż 0 więc tym razem się nie wykona, tak?

Ale 0.5 to przecież nie jest reszta z dzielenia przez 2, a po prostu wynik.
0 głosów
odpowiedź 1 maja 2019 przez niezalogowany
Najłatwiej z przybliżeniem czym jest modulo w matematyce.

Dajmy na przykład:

N % k = a

oznacza to, że liczbę N można zapisać jako k*b + a

gdzie b jest jakąś (w operacji modulo nie jest to ważne) liczbą całkowitą oraz a < k.
komentarz 1 maja 2019 przez Kubs Mądrala (5,190 p.)
Dziękuję bardzo. Ach ta matematyka :)

Podobne pytania

+2 głosów
2 odpowiedzi 400 wizyt
pytanie zadane 19 września 2021 w JavaScript przez Doge Gaduła (3,370 p.)
+1 głos
2 odpowiedzi 152 wizyt
pytanie zadane 5 maja 2017 w Rozwój zawodowy, nauka, praca przez Michał_Warmuz Mądrala (5,830 p.)
0 głosów
1 odpowiedź 866 wizyt

92,551 zapytań

141,393 odpowiedzi

319,523 komentarzy

61,936 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...