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

JS Tablica + Pętla - Sumowanie parzystych liczb

0 głosów
7,106 wizyt
pytanie zadane 26 marca 2018 w JavaScript przez TerryCrow Początkujący (340 p.)

Cześć Wam, 

Mam takie pytanko... potrzebuję napisać kod, który stworzy tablicę z 10 dowolnymi liczbami, dodatkowo w pętli for wypisze które liczby są parzyste a na koniec wypisze w konsoli sumę wszystkich parzystych liczb. Na razie mam coś takiego:

var myNumbers = [1,2,3,4,5,6,7,8,9,10];
var sum = 0;

for (var i = 0; i < myNumbers.length; i++) {

    console.log(myNumbers[i]);

    if (i % 2 == 0) {
        console.log("");
    }
    else {
        console.log("parzysta");
    }
}

Co w jakimś tam stopniu jest może poprawne ale nie wiem jak do tego dopisać instrukcję, która zsumuje liczby parzyste. Pomoże ktoś?

komentarz 26 marca 2018 przez k.wichura Pasjonat (19,870 p.)
nie da sie usuwac komentarzy ?

sorki

3 odpowiedzi

0 głosów
odpowiedź 26 marca 2018 przez Tomek Sochacki Ekspert (227,490 p.)
wybrane 26 marca 2018 przez TerryCrow
 
Najlepsza

Ok, więc zacznijmy od początku. 

"Stwórz tablicę z 10 dowolnymi liczbami . W pętli for sprawdź, które są parzyste. Wypisz w konsoli sumę wszystkich parzystych liczb."

Czyli rozumiem, że zostajemy przy opcji, że sam deklarujesz tablicę i sam określasz jakie liczby się w niej znajdą. Zróbmy więc tablicę:

const numbers = [1,2,3,4,5,6,7,8,9,10];

Dalej jednak z zadania rozumiem, że nie masz wypisywać wszystkich liczb z informacją o parzystości lub nie, a jedynie masz w konsoli wypisać ostateczną sumę liczb parzystych. Pętla natomiast ma tu posłużyć do samego sumowania (tak na marginesie to nie jedyna metoda).

Jeśli tak to zróbmy pętlę, w której sprawdzimy czy kolejne liczby z tablicy są parzyste i jeśli tak, to zwiększmy ogólną sumę:

let sum = 0; //początkowa suma równa zero

for(let i = 0; i < numbers.length; i += 1) {
    //sprawdzamy czy reszta z dzielenia przez 2
    //jest równa zero:
    if(numbers[i] % 2 === 0) {
        //jeśli tak to mamy liczbę parzystą
        sum += numbers[i];
    }
}

sum; //30

Zastosowałem tutaj bezpośrednie przyrównanie numbers[i] % 2 === 0. Ty w swoim kodzie użyłeś "if (i % 2 == 0)" co działa nie tak jak oczekujesz, ponieważ jeśli liczba jest parzysta to n%2 jest zerem (np. 4%2 = 0), a zero jest konwertowane na false, więc warunek nie zostanie spełniony. Ponad to badasz tutaj "i" zamiast numbers[i].

Na koniec wypisujemy ostateczną sumę liczb parzystych.

A teraz taka mała podpowiedź - nie musimy tutaj iterować po wszystkich liczbach. Jeśli się zastanowić, to liczby parzyste są wielokrotnością dwójki, więc pętla może wyglądać:

for(let i = 1; i < numbers.length; i += 2) {
    if(numbers[i] % 2 === 0) {
        sum += numbers[i];
    }
}

Zwróć uwagę na trzeci parametr pętli for. Celowo nie użyłem zapisu i++ we wcześniejszym przykładzie, aby wyraźnie wskazać, że można to użyć do skakania na co drugim elemencie tablicy. I tutaj uwaga... tablice zawsze indeksowane są od zera, więc numbers[0] = 1, a numbers[1] = 2. Dlatego pierwszy parametr to nie i=0 jak poprzednio ale i=1.

Najlepiej rozpisz sobie obie pętle na kartce i sam analizuj co jest w każdej iteracji, łatwo wtedy załapiesz co i jak.

Jakby coś było niejasne to pisz :)

komentarz 26 marca 2018 przez TerryCrow Początkujący (340 p.)
Tomku, bardzo Ci dziękuję za tak szczegółowe wyjaśnienie. Chyba lepiej się już nie dało :) Teraz jest to już zdecydowanie bardziej przejrzyste dla mnie. Mam natomiast jeszcze jedno pytanie co do tego. W jaki sposób dołożyć tam jednak taką opcję żeby najpierw konsola pokazała te liczby, które są parzyste z opisem przy każdej np. "ta liczba jest parzysta" a dopiero później pokazała wynik z opisem, przykładowo "wynik dodawania tych liczb to: 30" ? Na przykładzie tego drugiego, krótszego kodu.
komentarz 26 marca 2018 przez Tomek Sochacki Ekspert (227,490 p.)
const numbers = [1,2,3,4,5,6,7,8,9,10];
let sum = 0;
 
for(let i = 0; i < numbers.length; i += 1) {
    let t = 'nieparzysta';
	if(numbers[i] % 2 === 0) {
        t = 'parzysta';
		sum += numbers[i];
    }
	console.log(`Liczba ${numbers[i]} jest ${t}`);
}
 
console.log(`Suma liczb parzystych: ${sum}`);

//I teraz to co wyrzuci konsola:

Liczba 1 jest nieparzysta
Liczba 2 jest parzysta
Liczba 3 jest nieparzysta
Liczba 4 jest parzysta
Liczba 5 jest nieparzysta
Liczba 6 jest parzysta
Liczba 7 jest nieparzysta
Liczba 8 jest parzysta
Liczba 9 jest nieparzysta
Liczba 10 jest parzysta
Suma liczb parzystych: 30

O coś takiego chodzi?

komentarz 26 marca 2018 przez TerryCrow Początkujący (340 p.)

W zasadzie tak, tylko użyłeś tu elementu $ którego jeszcze nie dane mi było poznać więc nie rozumiem tego zapisu.  Zrobiłem to tak i chyba też powinno być ok

var tab = [1,2,3,4,5,6,7,8,9,10];
var sum = 0;

for(var i = 1; i < tab.length; i += 2) {
    if(tab[i] % 2 === 0) {

        console.log(tab[i] + "- jest liczba parzysta");

        sum += tab[i];
    }
}
    console.log("Suma parzystych liczb z tablicy to: ", sum);

 

komentarz 26 marca 2018 przez Tomek Sochacki Ekspert (227,490 p.)
a tak, z przyzwyczajenia. To tzw. template string w JS, w wolnej chwili poczytaj sobie o tym np. na MDN. Jest to wg mnie przyjemniejsza forma bo nie robisz tego śmiesznego plusa, który sugerowałby jakieś "dodawanie" i de facto czasami może robić pewne problemy.
komentarz 26 marca 2018 przez TerryCrow Początkujący (340 p.)
Ok, jeszcze raz wielkie dzięki. Bardzo mi pomogłeś
komentarz 26 marca 2018 przez Tomek Sochacki Ekspert (227,490 p.)
Spoko, od tego jest to forum :)
0 głosów
odpowiedź 26 marca 2018 przez Snejki Stary wyjadacz (14,520 p.)
1. Na ten moment sprawdzasz czy iterator pętli jest parzysty.
W warunku musisz sprawdzić czy myNumbers[i] jest parzyste.

2. Twój if tak naprawdę wypisuje, że liczba jest parzysta gdy takową nie jest, wiięc musisz przenieść wypisywanie parzystości do instrukcji_T  w if'ie.

3. Suma to po prostu sum += myNumbers[i] w intrukcji_T if'a
0 głosów
odpowiedź 26 marca 2018 przez Tomek Sochacki Ekspert (227,490 p.)
edycja 26 marca 2018 przez Tomek Sochacki

Moim zdaniem nie spełniłeś warunków zadania:

 kod, który stworzy tablicę z 10 dowolnymi liczbami

ja to rozumiem tak, że ma powstać tablica, w której będzie 10 losowych liczb, nie koniecznie cyfr, w treści piszesz o liczbach, czyli np. coś w stylu:

const randomNumbers = (length) => { 
    const arr = Array.from({ length })
    return arr.map(v => Math.floor(Math.random() * 100 + 1));
};

const arr = randomNumbers(10);
arr; //[34, 57, 56, 28, 48, 78, 63, 20, 36, 63]

czyli zadaniem jest stworzenie wg mnie funkcji, która generuje tablicę dowolnych liczb, ja tu założyłem wskazywaną długość tablicy (można dać stałą jeśli jest w zadaniu sztywno 10 elementów) i zakres od 1 do 100, też można to ustawiać albo dać na sztywno.

dodatkowo w pętli for wypisze które liczby są parzyste a na koniec wypisze w konsoli sumę wszystkich parzystych liczb

Tutaj w pętli musisz po prostu uwzględnić zwiększanie się wartości Twojej "sum", czyli jeśli parzysta to:

sum += myNumbers[i];

 

komentarz 26 marca 2018 przez TerryCrow Początkujący (340 p.)
Sory Chłopaki ale już nic nie kumam... Uczę się JSa dopiero czwarty dzień więc wszystko jest dla mnie tajemnicą jak na razie. Może przytoczę dokładnie treść zadania:

"Stwórz tablicę z 10 dowolnymi liczbami . W pętli for sprawdź, które są parzyste. Wypisz w konsoli sumę wszystkich parzystych liczb."
komentarz 26 marca 2018 przez TerryCrow Początkujący (340 p.)
Nie chcę żebrać o gotowe rozwiązanie ale już mi się tak to namieszało że mam totalny mętlik. Da się to jakoś łatwiej wyjaśnić? Sory za głupie pytania
komentarz 26 marca 2018 przez Tomek Sochacki Ekspert (227,490 p.)
oki, rozpisze to później nieco prościej i z wyjasnieniem.
komentarz 26 marca 2018 przez TerryCrow Początkujący (340 p.)
Dzięki Tomek będę Ci bardzo wdzięczny. Muszę to zaczaić a mam na to tylko dwa dni...

Podobne pytania

0 głosów
1 odpowiedź 8,333 wizyt
pytanie zadane 28 października 2018 w C i C++ przez Paweł123 Nałogowiec (33,540 p.)
0 głosów
2 odpowiedzi 1,714 wizyt
pytanie zadane 24 listopada 2020 w C i C++ przez Wolv63 Użytkownik (630 p.)
0 głosów
2 odpowiedzi 3,595 wizyt
pytanie zadane 1 grudnia 2017 w Java przez Patrycja Ły Początkujący (270 p.)

93,632 zapytań

142,556 odpowiedzi

323,056 komentarzy

63,139 pasjonatów

Advent of Code 2025

Top 15 użytkowników

  1. 2900p. - dia-Chann
  2. 2870p. - DziarnowskiJ
  3. 2827p. - Łukasz Piwowar
  4. 2783p. - raydeal
  5. 2758p. - Adrian Wieprzkowicz
  6. 2713p. - rucin93
  7. 2579p. - Łukasz Eckert
  8. 2523p. - Maurycy W
  9. 2459p. - CC PL
  10. 2082p. - Michal Drewniak
  11. 1885p. - robwarsz
  12. 1851p. - Mariusz Fornal
  13. 1811p. - rafalszastok
  14. 1600p. - Rafał Trójniak
  15. 1588p. - Tomasz Bielak
Szczegóły i pełne wyniki

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

Kursy INF.02 i INF.03
...