JS - funkcja wyświetlającą obliczenia

0

Dzień dobry,
mam problem z funkcją analyze(data). Zgodnie z zadaniem f. powinna odebrać dane przekazane w parametrze data, a funkcje liczące statystyki powinny być niezależne od głównej funkcji i jedynie wykonywać swoje zadania. Kiedy usuwam funkcję analyze wszystko pięknie się liczy i wyświetla, ale problem w tym aby to właśnie analyze wyświetlało wyniki.

        // Średnia arytmetyczna:
        function average(numbers){
            let ave = sum(numbers)/amount(numbers);
            return ave;
        }

        // Suma wartosci:
        function sum(numbers){
            let sumx = 0;
            for (let i of numbers) {
                sumx += i;
            }
            return sumx;
        }

        // Liczba próbek:
        function amount(numbers){
            let amo = numbers.length;
            return amo;
        }

        // Mediana:
        function median(numbers){
            numbers.sort((a,b)=>a-b);
            let middle = Math.round(numbers.length / 2);

            if (numbers.length%2 == 0){
                let med = (numbers[middle] + numbers[middle - 1])/2;
                return med;
            }
            else {
                let med = numbers[middle - 1];
                return med;                        
            }
        }

        // Wariancja:
        function variance(numbers){
            let vx = 0;
            for (let i in numbers) {                  
                vx += (Math.pow(numbers[i] - (average(numbers)), 2))/numbers.length;
            }
            return vx;
        }
                        
        // Odchylenie standardowe:
        function deviation(numbers){
            let dev = Math.sqrt(variance(numbers));
            return dev;
        } 

        numbers = [1, 3, 7, 5];


        function analyze(data){

            console.log(
                "\n Tablica liczb: " + numbers +    
                "\n\n Średnia arytmetyczna: " + average(numbers) +
                "\n Suma wartosci: " + sum(numbers) +
                "\n Liczba próbek: " + amount(numbers) +
                "\n Mediana: " + median(numbers) +
                "\n Wariancja: " + variance(numbers) +
                "\n Odchylenie standardowe: " + deviation(numbers)
            );

        }

Dostałam też podpowiedź aby analyze wyglądało jak poniżej:

   function analyze(data){
         console.log(
                 "n Tablica liczb: " + data +    
                 "nn Średnia arytmetyczna: " + average(data) +
                 "n Suma wartosci: " + sum(data) +
                 "n Liczba próbek: " + amount(data) +
                 "n Mediana: " + median(data) +
                 "n Wariancja: " + variance(data) +
                 "n Odchylenie standardowe: " + deviation(data)
         );
   }

...ale przecież to nie ma racji działać, ponieważ w żaden sposób nie odwołuje się do mojej tablicy oraz wcześniejszych funkcji. Będę wdzięczna za pomoc.

Pozdrawiam!

0

nie znasz podstaw, i nie wiem dalej co chcesz osiągnąć w tym zadaniu.

function analyze(data){
​
            console.log(
                "\n Tablica liczb: " + data +    
                "\n\n Średnia arytmetyczna: " + average(data) +
                "\n Suma wartosci: " + sum(data) +
                "\n Liczba próbek: " + amount(data) +
                "\n Mediana: " + median(data) +
                "\n Wariancja: " + variance(data) +
                "\n Odchylenie standardowe: " + deviation(data)
            );
​
        }
​
analyze(numbers)

zapewne o to ci chodzi

0

Sądząc po wcieciach w kodzie i tym, że mówisz że po usunięciu funkcji Ci działa sądzę, że cały ten kod masz wewnątrz jakiejś innej funkcji. Zauważ, że wewnątrz funkcji twój argument nazywa się data a w pierwszym przykładzie korzystasz z numbers ... które nie są argumentem funkcji a zmienną twojej "zewnętrznej" funkcji do której ma dostęp analyze. Więc tutaj musisz zmienić tak jak jest w drugim przykładzie. Druga rzecz, to co masz to na razie jest tylko deklaracja funkcji, której nigdzie nie wywolujesz, musiałabyś ją jeszcze wywołać przekazując argument numbers.

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Functions

1

Trochę to upiększyłem* (moim zdaniem)*.

Komentarze do wywalenia - nic nie wnoszą.
Zmienne w funkcjach też w większości przypadków niepotrzebne.
ES6 jest fajne. Warto używać.

const numbers = [1, 3, 7, 5];

function average(numbers) {
  return sum(numbers) / amount(numbers);
}

function sum(numbers) {
  return numbers.reduce((prev, current) => prev + current);
}

function amount(numbers) {
  return numbers.length;
}

function median(numbers) {
  numbers.sort((a, b) => a - b);
  let middle = Math.round(numbers.length / 2);

  if (numbers.length % 2 == 0) {
    return (numbers[middle] + numbers[middle - 1]) / 2;
  } else {
    return numbers[middle - 1];
  }
}

function variance(numbers) {
  return numbers.reduce((prev, number) => {
    return prev + Math.pow(number - average(numbers), 2) / numbers.length;
  }, 0);
}

function standardDeviation(numbers) {
  return Math.sqrt(variance(numbers));
}

function analyze(data) {
  console.log(
    `Tablica liczb: ${data}

    Średnia arytmetyczna: ${average(data)} 
    Suma wartości: ${sum(data)} 
    Liczba próbek: ${amount(data)} 
    Mediana: ${median(data)} 
    Wariancja: ${variance(data)} 
    Odchylenie standardowe: ${standardDeviation(data)}
 `
  );
}

analyze(numbers);

1 użytkowników online, w tym zalogowanych: 0, gości: 1