Solucionado (ver solução)
Solucionado
(ver solução)
3
respostas

Mediana

Boa tarde, Eu acho que encontrei um problema no código desta aula.

Na explicação do vídeo sobre mediana o professor explica que devemos obter o valor da metade da lista se caso for uma lista número ímpar e se caso número par, devemos pegar os dois valores e tirar a média dos mesmo para obtermos a mediana desta lista.

E no momento de montar o código não vejo acontecer esse procedimento., saber se é uma lista par ou ímpar para poder tirar a mediana e sim pega somente a metade com a função skip.

var query = 
from nf in contexto.NotasFiscais
select nf.Total;

var contagem = query.Count();

var queryOrdenada = query.OrderBy(total => total);

var elementoCentral = 
    query Ordenada.Skip(contagem/ 2).First();

Muito Obrigado

3 respostas

Repare também que o nome da variável está separada

"query Ordenada.Skip(contagem/ 2).First();"

Tem espaço em query Ordenada

solução!

Uma forma que encontrei seria verificar se a lista é par (antes e pegar o número do meio) e depois fazer a médias entre os dois números que compõe a metade da lista

var query = 
from nf in contexto.NotasFiscais
select nf.Total;

float elementoCentral;

var contagem = query.Count();

var queryOrdenada = query.OrderBy(total => total);

int resto = contagem % 2;

if (resto == 0)

{
    var elementoCentral1 = queryOrdenada.Skip(contagem/ 2).First();
    var elementoCentral2 = queryOrdenada.Skip((contagem/ 2)-1).First();

    elementoCentral = (elementoCentral2 + elementoCentral1) / 2  
}
else
{
        elementoCentral = queryOrdenada.Skip(contagem/ 2).First();
}

Olá, Vitor.

Obrigado por indicar esse erro! Realmente a diferença relativa à paridade do número de elementos da query não foi implementada. Inclusive, a sugestão de implementação que você deu está correta, com a única ressalva de que não podemos usar o var sem atribuir um valor na linha var elementoCentral;.

Vale notar aqui que quanto maior for sua amostra, menor vai ser a diferença entre o cálculo rigoroso e o cálculo pegando apenas uma das posições centrais mas é sempre bom focarmos na implementação correta.

Por fim, obrigado também por apresentar os erros na transcrição, vamos arrumá-los em breve.

Abraços, Alessandro