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

Średnia arytmetyczna elementów z przedziału

Aruba Cloud - Virtual Private Server VPS
+1 głos
536 wizyt
pytanie zadane 30 stycznia 2021 w JavaScript przez St000lar Nowicjusz (160 p.)

Cześć! Napotkałem na pewne trudności w zadaniu i kompletnie nie wiem, gdzie popełniłem błąd. Mam do napisania funkcję, która dla n-elementowej tablicy, liczy średnią arytmetyczną jej elementów z przedziału. Kombinowałem na wiele sposobów posiłkując się przykładami robionymi na zajęciach i doszedłem do tego punktu. Oto kod:

    function sredniaDane(tab, n) {

var i, suma;

suma = 0;

        for (i=0; i<n; ++i) suma += tab[i];

        return suma/n;

    }

    function sredniaPrzedz(tab, n, a, b) {

        var srw = new Array(n);

        var i, num, tab1;



        tab1 = Array(n);

        num = 0;

        for (i=0; i<n; ++i) srw[i] = sredniaDane(tab[i], n);

        for (i=0; i<n; ++i)

            if (tab[i]>a && tab[i]<b) tab1[num++] = tab[i];

        for (i=0; i<n; ++i) document.writeln("średnia ", " ", srw[i], "<BR>");

    }

Po wywołaniu: sredniaPrzedz(new Array(1, 2, 3, 4, 5, 6, 2), 7, 1, 6) otrzymuje następujący wynik:

 

Czy znajdzie się jakieś wprawne oko i dobra duszyczka, która wskaże błędy? smiley 
Zaznaczam, że w temacie JS jestem raczkujący.

1 odpowiedź

+1 głos
odpowiedź 30 stycznia 2021 przez Tnifey Pasjonat (24,190 p.)
wybrane 30 stycznia 2021 przez St000lar
 
Najlepsza
do sredniaDane w parametrze tab przekazujesz jedną liczbę a traktujesz przy sumowaniu jako tablicę (linia 7)

offtop: używając pętli używaj klamer, żeby to ładnie wyglądało {}, w js nie trzeba podawać wielkości Array tworząc go, możesz użyć kwadratowych nawiasów żeby zrobić pustą tablicę []
komentarz 30 stycznia 2021 przez St000lar Nowicjusz (160 p.)

Wielkie dzięki, jeden błąd zniwelowany! cool Natomiast w tym momencie strona zwraca następujące wartości:

 

Finalnie średnia z całego Array powinna zostać obliczana w jednym wierszu i tam zwracany całkowity wynik. Jak osiągnąć taki efekt końcowy? smiley

komentarz 30 stycznia 2021 przez Tnifey Pasjonat (24,190 p.)
edycja 30 stycznia 2021 przez Tnifey

zapewne usunąłeś [i] z 7 linii (tam powinieneś zostawić iterowanie po tablicy), zamiast usunąć [i] z 25 gdzie podajesz tą te liczby do przemielenia,

srw[i] = sredniaDane(tab, n);

bo ta średnia powinna wynosić coś koło 3.2, a u Ciebie pokazuje tylko te cyfry które podałeś :P

 

komentarz 30 stycznia 2021 przez St000lar Nowicjusz (160 p.)

Rzeczywiście, masz rację usunąłem tam, gdzie nie potrzeba i do tego za dużo cheeky (błędy początkującego). Natomiast teraz owszem, średnia liczy się elegancko, ale po wpisaniu: sredniaPrzedz(new Array(1, 3, 5, 6, 7), 5, 1, 6) - ostatnie dwie liczby wyjściowo mają określać przedział liczonej średniej. A aktualnie mam dwa wiersze (sądzę, że są one z powodu tego, że 3 i 5 mieszczą się w przedziale) z tą samą średnią. 

komentarz 30 stycznia 2021 przez Tnifey Pasjonat (24,190 p.)

mógłbyś napisać, jaki rezultat chciałbyś uzyskać? czy jeśli przedział to 1, 6 to nie chcesz brać pod uwagę tej liczby 7 z tablicy? jeśli w ten sposób to musisz zrobić filtrowanie

var wejscie = [1,3,5,6,7];

var a = 1; // minimalna liczba
var b = 6; // maksymalna liczba
var liczby = wejscie.filter(sprawdzCzyJestWPrzedziale); // [1,3,5,6]

function sprawdzCzyJestWPrzedziale(liczba) {
  return (liczba >= a && liczba <= b);
}
komentarz 30 stycznia 2021 przez St000lar Nowicjusz (160 p.)
edycja 30 stycznia 2021 przez St000lar

Tak, dokładnie tak jak mówisz. Tylko wtedy gdzie to umieścić i jak odpowiednio wywołać ?
Oto kod:

    function sredniaDane(tab, n) {
        var i, suma;
        suma = 0;
        for (i=0; i<n; ++i) suma += tab[i];

        return suma/n;
    }
    function sredniaPrzedz(tab, n, a, b) {
        var srw = new Array(n);
        var i, num, tab1;

        tab1 = Array(n);
        num = 0;
        for (i=0; i<n; ++i) srw[i] = sredniaDane(tab, n);
        for (i=0; i<n; ++i)
            if (tab[i]>a && tab[i]<b) tab1[num++] = tab[i];

        for (i=0; i<num; ++i) document.writeln("średnia ", " ", srw[i], "<BR>");
    }

kombinuje na różne sposoby, a i tak średnią oblicza mi ze wszystkich liczb w tablicy 

Podobne pytania

0 głosów
0 odpowiedzi 348 wizyt
pytanie zadane 1 listopada 2021 w C i C++ przez Flaxi Nowicjusz (120 p.)
0 głosów
1 odpowiedź 1,058 wizyt
pytanie zadane 10 sierpnia 2020 w SPOJ przez AgentTecza Obywatel (1,810 p.)
0 głosów
1 odpowiedź 629 wizyt
pytanie zadane 2 lutego 2020 w C i C++ przez Sashimo Użytkownik (740 p.)

93,335 zapytań

142,331 odpowiedzi

322,415 komentarzy

62,670 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

Wprowadzenie do ITsec, tom 1 Wprowadzenie do ITsec, tom 2

Można już zamawiać dwa tomy książek o ITsec pt. "Wprowadzenie do bezpieczeństwa IT" - mamy dla Was kod: pasja (użyjcie go w koszyku), dzięki któremu uzyskamy aż 15% zniżki! Dziękujemy ekipie Sekuraka za fajny rabat dla naszej Społeczności!

...