• 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

Object Storage Arubacloud
+1 głos
382 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 253 wizyt
pytanie zadane 1 listopada 2021 w C i C++ przez Flaxi Nowicjusz (120 p.)
0 głosów
1 odpowiedź 834 wizyt
pytanie zadane 10 sierpnia 2020 w SPOJ przez AgentTecza Obywatel (1,810 p.)
0 głosów
1 odpowiedź 389 wizyt
pytanie zadane 2 lutego 2020 w C i C++ przez Sashimo Użytkownik (740 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!

...