"100 / n * n will always be 100" to be precise, not always - 100 / 0.3 * 0.3 results in 100.00000000000001. And the seemingly equivalent formula n * n / 100 can fail with n = Number.MAX_SAFE_INTEGER resulting in 8.112963841460667e+29. Still you're correct talking about mathematics and logic, as I doubt the intention here is to exploit Nie potrzeba sprawdzać każdej liczby, czy jest parzysta czy nieparzysta. Wystarczy policzyć, ile jest liczb w przedziale, i połowa z tej ilości będzie parzysta, a połowa nieparzysta, z uwzględnieniem krańców przedziału (tzn. czy zaczyna się lub kończy na liczbie parzystej bądź nieparzystej). Napisz program wypisujący na ekranie liczby parzyste z przedziału od 0 do wartości jaką wprowadził z klawiatury użytkownik. ( 2,4,6,8,10,12,16…). Question from @Nuxe - Liceum/Technikum - Informatyka n), który tworzy tablic¦ liczb pierwszych znajduj¡cych si¦ w zakresie od 2 do n. Nast¦pnie zaimplementuj publiczn¡ metod¦ int liczba(int m) zwracaj¡c¡ warto±¢ m-tej liczby pierwszej z tego zakresu. Funkcja ta powinna prawidªowo dziaªa¢ dla liczb od 0 do k, gdzie k to ilo±¢ liczb pierwszych w zakresie od 2 do n. Tu tworzymy programy, które tworzą listy liczb: parzystych, nieparzystych, podzielnych przez 3, nieujemnych i pierwszych. Contribute to mateuszglaz4/Liczby-parzyste-i-nieparzyste development by creating an account on GitHub. . Temat na dziś - operatory w JavaScript. Podejrzewam, że jeśli słyszysz słowo operatory, to Twoim pierwszym skojarzeniem jest zapewne matematyka. Słusznie, bo większość z omawianych operatorów znasz już na pewno z matematyki. W związku z tym nie będę się jakoś specjalnie rozpisywał w tym temacie. Operatory są to znaki, dzięki którym możemy wykonywać na zmiennych różne działania. W JavaScripcie operatory możemy pogrupować na: operatory arytmetyczne, operatory przypisania, operatory porównania, operatory logiczne oraz operatory od najprostszych czyli operatorów arytmetycznych. Takich operatorów używamy do prostej kalkulacji, tak samo jak w matematyce. Najlepiej będzie pokazać to na przykładzie:let x = 15; let y = 3; + y); //dodawanie, wynik 18 - y); //odejmowanie, wynik 12 * y); //mnożenie, wynik 45 / y); //dzielenie, wynik 5 % y); //reszta z dzielenia (tzw. modulo), wynik 0Myślę, że dodatkowy komentarz będzie potrzebny tylko przy ostatnim operatorze czyli reszcie z dzielenia (x % y). Jest to operator, który jak sama nazwa wskazuje zwraca nam resztę z dzielenia, o ile taka istnieje. Czyli dzieli x/y i zwraca resztę. Może dla jasności dodam więcej przykładów: % 4); //0, ponieważ 12 dzieli się przez 4, 3 razy bez reszty. % 5); //2, ponieważ 12 dzieli się przez 5, 2 razy i zostaje reszta 2. % 7); //5, ponieważ 12 dzieli się przez 7 - 1 raz i zostaje reszta że te przykłady na pewno rozjaśniły Ci jak działa operator modulo. Jako ciekawostkę dodam, że warto poznać dokładnie jak działa ten operator, ponieważ czasem pojawiają się na rozmowach kwalifikacyjnych zadania, gdzie właśnie należy użyć tego operatora. Sam miałem kiedyś rozmowę kwalifikacyjną na programistę C# i jednym z zadań, było napisanie metody, która z ciągu przykładowych liczb, zwraca tylko liczby parzyste. Należało, wtedy użyć warunku:x % 2 == 0; //liczby parzysteOperator + służy też do łączenia string'ów, pewnie zauważyłeś już tą operację w moich wcześniejszych firstName = 'Kazimierz'; ' + firstName)Wracając do tematu, w językach programowania istnieje również operator inkrementacji oraz dekrementacji. Inkrementacja dzieli się na postinkrementacje oraz preinkrementacja, podobnie dekrementacja dzieli się na postdekrementacje oraz predekrementacje. Inkrementacja:let x = 10; //10 //11, najpierw x zostanie zwiększony o 1, a następnie wypisany (preinkrementacja) x = 10; //10, najpierw nastąpi wypisanie x, czyli 10, a dopiero później zwiększenie wartości o 1 (postinkrementacja) //11Dekrementacja:let x = 10; //10 //9, najpierw x zostanie zmniejszony o 1, a następnie wypisany (predekrementacja) x = 10; //10, najpierw nastąpi wypisanie x, czyli 10, a dopiero później zmniejszenie wartości o 1 (postdekrementacja) //11Kolejnymi operatorami są operatory przypisania, z tym operatorem spotkałeś się mnóstwo razy w moich poprzednich artykułach. Przypisanie wartości dziesięć do zmiennej x:let x = 10;W poprzednim akapicie poznałeś również operator inkrementacji:x++;Operator ten dodaje 1 i przypisuje wartość do zmiennej x. A co jeśli chcielibyśmy dodać w taki sposób na przykład wartość 3? Zobacz, inkrementacja przy dłuższym zapisie wygląda tak:x = x + 1;oraz inny zapis:x += 1;Dlatego jeśli zamiast 1, chcesz dodać 3 to musisz to zrobić w taki sposób:x += 3;Ten zapis jest równy temu zapisowi:x = x + 3;Oprócz dodawania dokładnie w ten sam sposób możesz zapisać pozostałe działania takie jak odejmowanie, mnożenie, dzielenie oraz modulo:x = x - 3; x -= 3; x = x * 3; x *= 3; x = x / 3; x /= 3; x = x % 3; x %= 3;Myślę, że to wszystko jest jasne, w dzisiejszym artykule tyle. Zapraszam cię do kolejnej części tego artykułu już jutro. W jutrzejszym artykule omówię operatory porównania (relacyjne) , operatory logiczne oraz operatory wszystko co chciałem Ci przekazać w tym artykule. Zapraszam do kolejnego artykułu z serii podstawy programowania w języku artykuł - Operatory porównania, logiczne oraz przypisania w JavaScript. Autor artykułu: Kazimierz Szpin Programista C#/.NET. Specjalizuje się w Core, MVC, Web API, Blazor, WPF oraz Windows Forms. Autor bloga Nieważne, czy dopiero wkraczasz w świat programowania i JavaScript jest Twoim pierwszym językiem, czy może, tak jak ja, rozpoczynasz swoją przygodę z JS-em mając już solidne podstawy w pisaniu kodu – w obu przypadkach koniecznym jest znajomość kluczowych funkcji, które pozwolą Ci na znacznie łatwiejsze wykonywanie podstawowych operacji. W tym artykule skupimy się na prototypach funkcyjnych typu tablicowego oraz łańcuchowego. Pozwalają one, na przykład, na sortowanie tablicy, odfiltrowanie konkretnych elementów, lub wykonywanie jednej funkcji na wszystkich elementach macierzy. Lista funkcji przedstawionych w artykule: push() pop() shift() unshift() slice() splice() join() toString() concat() indexOf() sort() reverse() forEach() filter() map() push() Funkcja push() dodaje nowy element, podany jako argument funkcji, na koniec istniejącej tablicy. Co więcej, zwraca ona, po uprzednim dodaniu zadanego elementu, długość tablicy. Pamiętaj, że możesz dodać więcej niż jeden element na raz. Przykład: var mojaTablica = [ "kot", "pies", "szczur" ]; // [ "kot", "pies", "szczur", "małpa" ] var dlugoscTablicy = // [ "kot", "pies", "szczur", "małpa", "jeż" ] // 5 pop() Funkcja pop() jest przeciwieństwem funkcji push() – usuwa ona ostatni element istniejącej tablicy. Przy usuwaniu elementu funkcja zwraca usunięty element i skraca długość tablicy. Przykład: var mojaTablica = [ "kot", "pies", "szczur", "małpa", "jeż" ]; var usuniety = // [ "kot", "pies", "szczur", "małpa" ] // "jeż" shift() Kolejna funkcja do omówienia to shift(). Usuwa ona i zwraca pierwszy element danej tablicy, przesuwając wszystkie elementy o jedno miejsce w przód, celem załatania pozostałej „dziury”. Funkcja ta nie tworzy nowej tablicy, tylko modyfikuje już istniejącą. Przykład: var mojaTablica = [ "kot", "pies", "szczur", "małpa", "jeż" ]; var usuniety = // [ "pies", "szczur", "małpa", "jeż" ] // "kot" unshift() Podobnie jak to było w przypadku bliźniaczych funkcji push() i pop(), tak i shift() ma swoje przeciwieństwo – unshift(). Funkcja ta dodaje element(y) na początek tablicy, modyfikując ją, a następnie zwraca długość zmienionej tablicy. W celu dodania nowych elementów, indeksy wszystkich wartości w tablicy są inkrementowane o 1, a dodany element otrzymuje indeks 0. Przykład: var mojaTablica = [ "kot", "pies", "szczur" ]; // [ "małpa", "kot", "pies", "szczur" ] var dlugoscTablicy = // [ "jeż", "małpa", "kot", "pies", "szczur" ] // 5 slice() Funkcja slice() pozwala na „wycięcie” (ang. to slice -> kroić) dowolnej ilości elementów, rozpoczynając od dowolnego indeksu tablicy. Funkcja przyjmuje dwa argumenty – indeks, od którego chcemy rozpocząć wycinanie oraz indeks, na którym chcemy poprzestać. Działanie tej funkcji jest o tyle zawiłe, że nie wycina ona elementu o indeksie, który podaliśmy jako końcowy; przedział jej działania moglibyśmy wyrazić matematycznie jako odwracać), odwraca zawartość tablicy. Funkcja modyfikuje istniejącą tablicę i nie zwraca żadnej wartości. Ze względu na działanie na oryginalnej tablicy, należy używać jej ostrożnie, gdyż odwrócenie macierzy tylko w jednym miejscu programu poskutkuje odwróceniem jej dla całego kodu. Przykład: var posortowaneLiczby = [ 5, 25, 102, 500 ]; // [ 500, 102, 25, 5 ] forEach() Wraz z funkcją forEach() wkraczamy w rodzinę funkcji o podobnej zasadzie działania, do której zaliczają się: forEach(), map(), filter(), every() i some(). Wszystkie one wykonują zadaną operację na wszystkich elementach tablicy i wymagają callbacka jako pierwszego przekazywanego argumentu. Drugi, opcjonalny, argument pozwala na zdefiniowanie wartości operatora this wywołania zwrotnego. Jeśli w trakcie wykonywania funkcji forEach() do tablicy zostają dodane nowe elementy, to nie będą one uwzględnione podczas wykonywania wywołania zwrotnego na tablicy. Funkcja wykonuje operacje na oryginalnej tablicy i nie zwraca żadnej wartości. Przykład: var liczby = [ 9, 27, 93, 126, 300 ]; // definicja wywołania zwrotnego function podziel (element, indeks, tablica) { tablica[indeks] = tablica[indeks] / 3; // lub tablica[indeks] = element / 3; } // wykonanie funkcji forEach na tablicy liczby wraz z wywołaniem callbacka dla każdego elementu // [ 3, 9, 31, 42, 100 ] filter() Działanie funkcji filter() jest w pełni zgodne z jej nazwą – pozwala ona na odfiltrowanie elementów, które nie spełniają danego warunku. Funkcja ta wymaga przekazania wywołania zwrotnego jako pierwszego argumentu, które jest wykonywane na każdym elemencie tablicy. Jeśli dany element spełnia warunek, to zostaje dodany do nowej macierzy. Oryginalna tablica pozostaje niezmodyfikowana. filter() zwraca nową macierz elementów spełniających zadany warunek. Przykład: var liczby = [ 25, 30, 43, 47, 80, 84, 99, 100 ] // definicja wywołania zwrotnego function czyParzysta(liczba) { if (liczba % 2 == 0) return true; } var parzyste = // [ 30, 80, 84, 100 ] map() map() jest funkcją bardzo podobną do forEach(), jednakże z jedną istotną różnicą – oryginalna tablica jest w pełni zachowana, a funkcja zwraca nową, przetworzoną macierz. Podobnie jak w przypadku wyżej wspomnianej funkcji, map() wykonuje wywołanie zwrotne, które musi być przekazane jako pierwszy argument, na każdym elemencie tablicy, a następnie zwraca wszystkie przetworzone elementy w postaci nowej macierzy. Gdy funkcja jest wywołana, ma to miejsce z użyciem trzech argumentów – wartości bieżącego elementu, indeksu tego elementu, oraz tablicy, na której operacja jest wykonywana. Zwróć uwagę, że wywołanie zwrotne musi zwracać wartość, by została ona dodana do nowej macierzy. Przykład: var liczby = [ 9, 27, 93, 126, 300 ]; // definicja wywołania zwrotnego function pomnoz (element, indeks, tablica) { return element * 20; // lub tablica[indeks] * 20; } // wykonanie funkcji map na tablicy liczby wraz z wywołaniem callbacka dla każdego elementu var pomnozone = // [ 180, 540, 1860, 2520, 6000 ] Jest to pierwsza część artykułu na temat najbardziej przydatnych dla początkujących funkcji podstawowych typów danych używanych w języku JavaScript. Część drugą, dotyczącą funkcji typu łańcuchowego, znajdziesz tutaj. Nie są to jeszcze wszystkie funkcje, które chciałbym przedstawić, ale ze względu na chwilowy brak czasu pojawią się one później :) (reduce, some, lastIndexOf, reduceRight, every) Bibliografia: StringiW pierwszym przypadku zwróć uwagę na zastosowanie pojedynczych cudzysłowów, aby w środku umieścić jest "ona"?'); // Kim jest "ona"?W drugim przypadku nie użyliśmy tej sztuczki, więc podwójny cudzysłów w środku kończy stringa, a następnie otwiera nowy. Na szczęście w środku znajduje się znak +, który łączy dwa teksty w jeden. Zauważ podwójną spację pomiędzy "Użyję" a "by" w wyświetlonym "+" by dodać teksty"); // Użyję by dodać tekstyJeśli chcielibyśmy wypisać "+", to powinniśmy otoczyć cały tekst cudzysłowami "+" by dodać teksty'); // Użyję "+" by dodać tekstyW ostatnim przypadku popełniliśmy typowy błąd nowicjusza i zapomnieliśmy o użyciu spacji, gdy dodajemy dwa + "następny," + "jeszcze jeden"); // Tekst,następny,jeszcze jedenTo, co powinniśmy zrobić, to dodać tę spację albo w tekście po lewej, albo po prawej od znaku " + "następny, " + "jeszcze jeden"); // Tekst, następny, jeszcze jeden + " następny," + " jeszcze jeden"); // Tekst, następny, jeszcze jedenJavaScript jako * 2 + 3 * 4 + 5 * 6 + 7 * 8 + 9); // 109 * (2 + 3) * (4 + 5) * (6 + 7) * (8 + 9)); // 9945 // Różni się od poprzedniego, bo nawiasy wymuszają // dodawanie przed mnożeniem. * 2 / 3 * 4 / 5 * 6 / 7 * 8 / 9 * 10); // // musiało być większe od 1, bo ostatnie jest mnożenie. ** 10); // 1024 // to bardzo znana liczba w programowaniu // "kilo" w kontekście informatyki oznacza zwykle 1024, // w czasie gdy w innych kontekstach oznacza jako kalkulator porównującyW pierwszym przypadku mnożenie kończy się na 5, a więc możemy spodziewać się, że prawa strona jest większa. Poniższy kod to * 2 + 3 * 4 + 5 3 ** 15); // false, więc prawa strona jest większa ** 15 > 10 ** 4); // true, więc lewa strona jest większaMożemy też sprawdzić na ** 20 = 5; i--) { }Wypisz kolejne liczby od 5 do 30, z pominięciem (let i = 5; i = 0; i -= 2) { }Funkcjefunction printSum(a, b) { + b); } function printNumbers(a, b) { for (let i = a; i = b && a >= c) { return a; } else if (b >= c) { return b; } else { return c; } }JavaScript jako kalkulator ** 2 * // * 30 + 40)); // -5))); // // albo ** -5)); // 7))); // 2187 // albo ** 7)); // 2187Funkcje jako wartościspeak(cheerKids) — Hej, dzieci oraz Mowa...speak(cheerAll) — Hej, dzieci, Witam rodziców a potem Mowa...speak(cheerAll, bless) — Hej, dzieci, Witam rodziców, Mowa... i wreszcie Zdrowia!speak(bless) — Zdrowia! a potem Mowa...speak(undefined, bless) — Mowa... a potem Zdrowia!Obiektyconst user = { name: "Kuba", surname: "Wędrowycz", address: { country: "Polska", city: "Stary Majdan", postal: "22-120", street: null } }; const book = { title: "Karpie Bijem", releaseYear: 2019 }; // Użycie // Wędrowycz = "Jakub"; // Stary Majdan = "Bagnowska"; // 2019releaseYear nie powinien być oddzielony na osobny obiekt release, ponieważ nie ma to sensu, gdy nie interesuje nas nic więcej na temat tego wydania. Moglibyśmy tak zrobić, gdyby było (albo gdybyśmy się spodziewali, że będzie) więcej danych na temat wypuszczenia tej książki, na przykład releaseStatus czy z obiektamilet obj = {}; const obj2 = obj; = "Alek"; // Alek // Alek const obj3 = { name: }; // {name: "Alek"} obj = { size: "S" }; // undefined // S // AlekJSONPrzykładowa odpowiedź mogłaby wyglądać tak:{ "name": "Air Max 720", "brand": "Nike", "description": "Mają największą...", "size": 45, "imageUrl": " "price": { "value": " "currency": "PLN" } }Konto bankowefunction makeBankAccount() { return { balance: 0, deposit: function(amount) { += amount; return }, withdraw: function(amount) { if(amount > { amount = } -= amount; return amount; }, currentBalance: function() { return } } }function makeBankAccount() { return { balance: 0, deposit: function(amount) { += amount; return }, withdraw: function(amount) { amount = -= amount; return amount; }, currentBalance: function() { return } } }Konto bankowe z operatorem newfunction BankAccount() { = 0; = function(amount) { += amount; return }; = function(amount) { amount = -= amount; return amount; }; = function() { return }; }Konto bankowe przez definicję klasyclass BankAccount { constructor() { = 0; } deposit(amount) { += amount; return } withdraw(amount) { amount = -= amount; return amount; } currentBalance() { return } }Tworzenie i modyfikacja tablicconst values = [true, 42, "AAA"]; // "AAA" // 42 // [true, 88] const pets = ["dog", "cat"]; // ["dog", "pig"] const pet = // ["dog"] // "pig"Wielkość i elementy tablicyconst letters = ['A', 'B', 'C', 'D', 'E', 'F']; // 6 // E const numbers = [5, 6, 7, 8, 9, 10, 11, 12]; // 8 // 8forEachfunction printAllValues(values) { (value, index) { pozycji " + index + ' znajduje się "' + value + '"'); }); } function sumAll(numbers) { let sum = 0; (number) { sum += number; }); return sum; }mapfunction toFullNames(users) { return (user) { if( { return + " " + + " " + } else { return + " " + } }); }Funkcje strzałkowe przy przetwarzaniu kolekcjiconst list = students .filter(s => >= .filter(s => >= 20) .map(s => + ", " + .forEach(str => filtr można zamienić na pojedynczy, a mapowanie przed forEach jest niepotrzebnym list = students .filter(s => >= && >= 20) .forEach(s => + ", " + strzałkowe zamiast metodconst times = (a, b) => a * b; const compareScoresDescending = (s1, s2) => — const compareNames = (s1, s2) => { if( return 1; return 0; };Z funkcji strzałkowych do anonimowych i nazwanych// 1. Funkcje anonimowe const triple = function(i) { return i * 3; }; const first = function(arr) { return arr[0]; }; const bigger = function(a, b) { return a > b ? a : b; };// 2. Funkcje nazwane function triple(i) { return i * 3; } function first(arr) { return arr[0]; } function bigger(a, b) { return a > b ? a : b; } Tak jak mówiliśmy w poprzednich rozdziałach, każda linia kodu jest instrukcją. Te zaś wykonują się kolejno od góry do zostanie wypisane najpierw"); to potem"); // Wypisze: // To zostanie wypisane najpierw // a to potemKolejność wykonywania instrukcji nazywamy przepływem sterowania. Jest to istotne, ponieważ pewne instrukcje zmieniają ten przepływ. Jedną z nich już poznaliśmy — instrukcja if pozwala nam ominąć część kodu, gdy warunek nie jest spełniony. Do tej pory jednak nie byliśmy w stanie sprawić, by pojedyncze polecenie wykonało się więcej niż raz. Tę barierę przełamiemy dopiero teraz, a posłużą nam do tego właśnie whileDefinicja pętli while niewiele różni się od warunku if. Zmienia się tylko słowo kluczowe if na while. Zachowanie również jest do pewnego stopnia warunek nie jest spełniony (zwraca false), to ciało jest pomijane (podobnie jak w przypadku instrukcji warunkowej if).while (false) { tekst nigdy się nie wypisze"); } if (false) { tekst nigdy się nie wypisze"); } // Nic się nie wypiszeJeśli jednak warunek jest spełniony (zwraca true), to ciało zostanie wywołane. Tutaj while różni się od if tym, że warunek sprawdzamy ponownie, po czym, jeśli wciąż jest spełniony, to wywołujemy ciało raz jeszcze. Proces ten powtarzamy tak długo, aż warunek nie będzie poniższym przypadku pierwszy warunek będzie spełniony tylko raz, bo w ciele zmieniamy wartość zmiennej toBePrinted na false. Drugi będzie spełniony trzykrotnie, bo w ciele zwiększamy wartość zmiennej, aż w końcu jej wartość będzie większa od toBePrinted = true; while (toBePrinted) { wypisane tylko raz"); toBePrinted = false; } // Wypisze: // Będzie wypisane tylko raz let printedTimes = 0; while (printedTimes = 2) { dla " + n); n--; } // Wypisze: // Wypisane dla 4 // Wypisane dla 3 // Wypisane dla 2Zarówno operator inkrementacji ++ jak i dekrementacji -- możemy umieścić przed zmienną (++variable, --variable), jak i po zmiennej (variable++, variable--). Różnica między nimi wybiega poza zakres tej książki, ale zainteresowanym polecam poczytać o postinkrementacji i preinkrementacji (oraz postdekrementacji i predekrementacji).Pętla forPętle często wykorzystuje się, aby wykonać jakąś operację dla kolejnych liczb. Przy użyciu pętli while kolejne cyfry od 0 do 4 mogą być wyświetlone w następujący sposób:let i = 0; while (i = lastValue; i--) { // code } // Przykład for (let i = 3; i >= 0; i--) { } // Wypisze: // 3 // 2 // 1 // 0Zauważ, że wszystkie te modyfikacje mogą się łączyć na różne sposoby. Dla przykładu możemy zacząć od 10, zmniejszać o 2 w każdym kroku aż do 4, a na koniec pominąć ostatnią (let i = 10; i > 4; i = i - 2) { } // Wypisze: // 10 // 8 // 6Pętle w JavaScript wspierają także instrukcje break (powoduje natychmiastowe wyjście z pętli) oraz continue (ominięcie reszty ciała). Początkowo, naśladując większość książek, opisałem je, ale zdecydowałem się usunąć tę sekcję. Zrobiłem tak, ponieważ sam nie użyłem oraz nie widziałem ich w żadnym produkcyjnym kodzie co najmniej od roku. Aby mieć pewność, przeszukałem kilka dużych projektów JavaScript w firmie słynącej z dobrego kodu i również nie natknąłem się na ani jeden przykład ich zastosowania. Ponieważ celem tej książki jest skoncentrowanie się na aspekcie praktycznym, a nie samej teorii, usunąłem więc tą Przypadki użycia pętli for dla liczbZ wykorzystaniem pętli for:Wypisz liczby od 10 do liczby od 5 do 30, z pominięciem co drugą liczbę od 20 do że pętle same w sobie nie są współcześnie tak często używane, to jednak są bardzo istotną częścią programowania i ich rozumienie leży u podstaw myślenia programistycznego. To był bardzo ważny rozdział. Poznanie i zrozumienie pętli będzie przejdziemy do funkcjonalności, która zdominowała współczesne projekty programistyczne, a przez wielu ekspertów określana jest jako najistotniejsza funkcjonalność języków programowania. Czas pomówić o funkcjach. Cześć, Jestem tu nowy i niestety nie znalazłem żadnych podpowiedzi poprzez wyszukiwarkę. Pytanie moje może okazać się banalne, ale uczę się JS'a dopiero od kilku dni a mam pewne zadanie i kompletnie nie wiem jak się do tego zabrać (poniżej treść zadania). Samo wypisanie liczb nie będzie specjalnie trudne ale jak dołożyć do tego opis "parzysta" "nieparzysta"? Czy ktoś mógłby jakoś nakierować? Bardzo proszę o język zrozumiały dla raczkującego laika. W pliku napisz program, który na podstawie wartości zmiennej np. var n = 5; wypisuje wszystkie liczby od zera do n. Przy każdej liczbie program ma napisać, czy liczba jest parzysta czy nie. Np.: 0 – parzysta 1 – nieparzysta 2 – parzysta 3 – nieparzysta ... Podpowiedź: Jak sprawdzić czy liczba jest parzysta lub nieparzysta? Wystarczy podzielić ją modulo przez 2, jeżeli wynik to 0, wtedy liczba jest parzysta, w przeciwnym przypadku jest nieparzysta.

liczby parzyste od 0 do 100 javascript