• 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

Object Storage Arubacloud
0 głosów
6,221 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,510 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,510 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,510 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,510 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,510 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,510 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ź 7,406 wizyt
pytanie zadane 28 października 2018 w C i C++ przez Paweł123 Nałogowiec (33,500 p.)
0 głosów
2 odpowiedzi 1,278 wizyt
pytanie zadane 24 listopada 2020 w C i C++ przez Wolv63 Użytkownik (630 p.)
0 głosów
2 odpowiedzi 3,110 wizyt
pytanie zadane 1 grudnia 2017 w Java przez Patrycja Ły Początkujący (270 p.)

92,576 zapytań

141,426 odpowiedzi

319,651 komentarzy

61,961 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!

...