O desvio padrão é uma importante medida de dispersão na análise estatística, sendo definido pela fórmula a seguir. dp = raiz_quadrada(somatório(xi – xm)2 / n), onde xi é um dos valores do conjunto, xm é a média e n é o tamanho do conjunto. William implementou a seguinte função, em JavaScript, para o cálculo do desvio padrão, onde x é um vetor com os valores do conjunto na amostra analisada. 1. const dp = (x) => { 2. let xm = 0, soma = 0; 3. for(let i=0; i<x.length; i++) 4. xm += x[i]; 5. xm /= x.length; 6. for(let xi of x) 7. soma += (xi-xm)^2; 8. return Math.sqrt(soma / x.length); 9. } No entanto, William, ao criar a função para cálculo do desvio padrão, cometeu um erro, e, para consertá-lo, ele precisa:
- A)utilizar o método size, no lugar do atributo length, para obter o tamanho do vetor, nas linhas 3, 5 e 8;
Errada, porque em JavaScript o tamanho de vetor é obtido por length, e não por size.
- B)reescrever a divisão na forma expandida, na linha 5, ficando no formato xm = xm / x.length;
Errada, pois a linha 5 já está correta ao dividir xm por x.length para calcular a média.
- C)utilizar Math.pow para elevar ao quadrado, na linha 7, no lugar do operador ^, ficando Math.pow(xi-xm,2);
Certa, porque ^ não representa potência em JavaScript e deve ser substituído por uma forma adequada de elevar ao quadrado, como Math.pow(xi - xm, 2).
- D)modificar a estrutura for, na linha 3, do modelo tradicional para o uso do operador of;
Errada, porque a estrutura for tradicional da linha 3 funciona corretamente e não precisa ser trocada por for...of.
- E)utilizar const no lugar de let para definir as variáveis soma e xm, na linha 2.
Errada, porque xm e soma precisam ser alteradas durante o cálculo, então let é adequado; const impediria a reatribuição.
Gabarito: C
O ponto central da questão é lembrar a diferença entre operadores em JavaScript. Na fórmula do desvio padrão, você precisa somar os desvios ao quadrado, isto é, cada valor menos a média, elevado a 2. Em JavaScript, o operador ^ não faz potência: ele faz XOR bit a bit. Parece detalhe de programador distraído, mas em prova isso derruba muita gente. Na função dada, as linhas 3 a 5 calculam corretamente a média, e a linha 8 usa Math.sqrt, que também está correta para tirar a raiz quadrada. O erro está na linha 7, porque (xi - xm)^2 não eleva ao quadrado de verdade. Para corrigir, deve-se usar uma forma própria para potência, como Math.pow(xi - xm, 2), ou outra técnica equivalente de exponenciação. Por isso o gabarito é a letra C. A banca quer que você perceba que ^ não serve para exponenciação em JavaScript. Esse é um erro clássico em linguagens de programação: símbolo parecido com o de matemática, mas significado diferente na linguagem. Resumo de prova: média com divisão, soma dos quadrados dos desvios e raiz no final. Se um operador parece matemático demais para ser verdade, desconfie. Em JavaScript, nem tudo que brilha é potência.