Olá a todos,
andei pesquisando aqui no fórum sobre calculo de média, moda e mediana, encontrei alguns tópicos,mas, nenhum chegava ao meu problema. Tenho um array com uns valores informados pelo usuário, apartir desse array, gostaria de calcular a média, moda e mediana.
alguem teria algum exemplo pra me mostrar?
obrigado
int [] Vet = new int[100];
Mediana:
int esq=0;
int dir=Vet.length-1;
int meio;
meio=(esq+dir)/2;
mediana = Vet[meio];
Media:
soma = 0;
for (int i=0;i<Vet.length-1;i++){
soma= soma+Vet[i];
}
media = (soma/Vet.length);
E a moda:
Nao entendi direito, mas é o valor que surge com mais freqüência?
Olá c0m4nch3, mto obrigado pela resposta.
mediana ja esta ok.
a moda sim, é o que mais se repete dentro do array, mas, digamos, o numero 12 se repete 5x, e o numero 72 tambem s repete 5x, entao a moda sao esses dois numeros, o 12 e o 72. lembrando que a moda sáo ou é o numéro que mais se repete…
abraço
import java.util.HashMap;
import java.util.HashSet;
import java.util.Iterator;
import java.util.Map;
import java.util.Set;
public class Moda {
private Map valores = new HashMap();
public Moda() {}
public void adicionar(int numero) {
Integer n = new Integer(numero);
/** Verifica se já existe esse elemento no mapa */
if (valores.get(n) != null) {
valores.put(n, new Integer(((Integer)valores.get(n)).intValue() + 1));
}
else {
valores.put(n, new Integer(1));
}
}
public Map getValores() {
return valores;
}
public Set calcular() {
/** Maior valor encontrado até o momento */
Integer maior = null;
Set resultado = new HashSet();
Iterator iterator = valores.keySet().iterator();
while (iterator.hasNext()) {
/** Número atual sendo avaliado */
Integer valor = (Integer)iterator.next();
/** Quantidade de ocorrências do número atual */
Integer current = (Integer)valores.get(valor);
if (maior == null) {
maior = current;
}
/** Encontrou um número com mais ocorrências */
if (maior.compareTo(current) <= 0) {
maior = current;
resultado.add(valor);
}
}
iterator = resultado.iterator();
while (iterator.hasNext()) {
Integer numero = (Integer)iterator.next();
/**
* Não tem o mesmo número de ocorrências que o maior número de
* ocorrências encontrado?
*/
if (((Integer)valores.get(numero)).compareTo(maior) < 0) {
iterator.remove(); // Já era!
}
}
return resultado;
}
public static void main(String[] args) {
Moda moda = new Moda();
for (int i = 0; i < 20; i++) {
moda.adicionar((int)(Math.random() * 10));
}
System.out.println(moda.getValores());
System.out.println("A moda é: " + moda.calcular());
}
}
O codigo acima é do Tritone
olá c0m4nch3,
mais uma vez, obrigado por me ajudar nestes problemas. as solucoes que voce postou são bastantes legiveis para meu aprendizado e solucao do problema.
parabéns…
abraço
[quote=c0m4nch3]int [] Vet = new int[100];
Mediana:
int esq=0;
int dir=Vet.length-1;
int meio;
meio=(esq+dir)/2;
mediana = Vet[meio];
[/quote]
O algoritmo está incompleto, pois só funciona com quantidade ímpar de dados. Se há um número par de dados, a mediana é a média dos dois valores do meio.
Ex:
mediana(1,2,3,4,5) = 3 (valor do meio)
mediana (1,2,3,4) = (2+3)/2 = 2.5