1. Este site usa cookies. Ao continuar a usar este site está a concordar com o nosso uso de cookies. Saber Mais.

Java Ajuda

Discussão em 'Programação' iniciada por Elvirusfatal, 2 de Março de 2009. (Respostas: 15; Visualizações: 1296)

  1. Elvirusfatal

    Elvirusfatal Power Member

    Teho de faxer um programa que atraves de varios valores calcule a media mediana moda e desvio padrao, ja fiz a media e mediana mas a moda principalmente não consigo fazer..

    Se alguem me poder ajudar ..

    Agradeço.!
     
  2. Baderous

    Baderous Banido

    Tens de contar quantas vezes aparece cada valor.
     
  3. Elvirusfatal

    Elvirusfatal Power Member

    Eu sei o que é a moda!, n sei é como faxer porque teho de comparar o valor da posição x+1 com todos os valores ate então pecorridos..
     
  4. rj.rodrigues

    rj.rodrigues Power Member

    Em Português:
    Podes fazer a moda de várias maneiras, uma delas é:
    Código:
    arrayNr -> array com os números
    int max = 0
    int moda = 0
    
    for i = 0 até total de números-1 {
      int num = arrayNr[i]
      int cnt = 0;
      for j = 0 até total de números-1 {
         if ( j == arrayNr[j] ){
           cnt ++
         }
      }
      if ( cnt > max ){
        max = cnt
        moda = num
      }
    }
    
    Em princípio isto deve funcionar, apesar de não ser a melhor maneira de resolver, pelo menos não deve ser a com melhor performance.


    PS: Cuidado com o Português.
     
    Última edição: 2 de Março de 2009
  5. Rui_Carlos

    Rui_Carlos 1st Folding then Sex

    Para a moda, começas com um Map vazio. Ao percorreres o array, verificas se o elemento actual já está no Map e: se ainda não estiver, colocas-lo lá com o valor 1 associado; se já lá estiver, aumentas uma unidade ao valor associado. No final vez qual o valor do Map tem um maior valor associado.
     
    Última edição: 2 de Março de 2009
  6. Elvirusfatal

    Elvirusfatal Power Member

    O português:lol:, já é 2º vez que me dizem para escrever correctamente, eu escrevo correctamente, mas quando ando na net nunca o faço..

    De qualquer maneira obrigado pela ajuda.

    Será que também me dás uma ajuda no desvio padrão?
     
  7. rj.rodrigues

    rj.rodrigues Power Member

    Código:
       public static double sdFast ( double[] data )
          {
          // sd is sqrt of sum of (values-mean) squared divided by n - 1
          // Calculate the mean
          double mean = 0;
          final int n = data.length;
          if ( n < 2 )
             {
             return Double.NaN;
             }
          for ( int i=0; i<n; i++ )
             {
             mean += data[i];
             }
          mean /= n;
          // calculate the sum of squares
          double sum = 0;
          for ( int i=0; i<n; i++ )
             {
             final double v = data[i] - mean;
             sum += v * v;
             }
          return Math.sqrt( sum / ( n - 1 ) );
          }
    
    @link
     
  8. Elvirusfatal

    Elvirusfatal Power Member

    É o seguinte , eu queria saber se existe alguma maneira de eu importar entre vários ficheiros de texto aleatoriamente e sempre que o desejar sem ter de especificar o nome do ficheiro no código para um array!

    Agradecia algum tipo de ajuda .. obrg.
     
  9. rj.rodrigues

    rj.rodrigues Power Member

    Se esses ficheiros estiverem no mesmo directório é fácil, basta fazeres uma listagem dos ficheiros.
    Código:
            File file = new File("directório");
            File files[] = file.listFiles(filter);
     
  10. Elvirusfatal

    Elvirusfatal Power Member

    Eu queria apenas testar os valores que eles contêm.

    while (in.hasNext()) {
    int Nota = in.nextInt();
    int N_Aluno = in.nextInt();

    Agora falta-me a parte de adicionar estes ao array. que não sei como se faz. depois de adicionados ja os posso testar para obter mediana , moda..
     
  11. rj.rodrigues

    rj.rodrigues Power Member

    Se já consegues fazer isto:
    Código:
    while (in.hasNext()) { 
    int Nota = in.nextInt(); 
    int N_Aluno = in.nextInt();
    basta fazer assim:
    Código:
    int Nota[] = new int[nrAlunos];
    int N_Aluno[] = bew int[nrAlunos];
    int i = 0;
    while (in.hasNext()) { 
      Nota[i] = in.nextInt(); 
      N_Aluno[i] = in.nextInt();
      i++;
    }
    
     
  12. Elvirusfatal

    Elvirusfatal Power Member

    Muito obrigado Senhor Rodrigues, já esta quase tudo feito , apenas me falta um pormenor , meter o tamanho do vector com o mesmo tamanho do numero de dados inseridos .. ou seja por exemplo o vector notas , conforme se insere uma nota ele iria incrementando o seu tamanho a partir do zero ou 1..
     
  13. _freelancer_

    _freelancer_ Power Member

    Os arrays por si só penso que não dão para incrementar o seu tamanho em runtime, isto é têm tamanho fixo, definido à partida.

    Uma alternativa seria usares um ArrayList ou um Vector. Estes dão para encolher e esticar conforme precises.
     
  14. Elvirusfatal

    Elvirusfatal Power Member

    Como é que eu faço para poder aumentar um campo de um vector por exemplo: a posição 4 do vector A tem o valor 3 , eu quero passar esse valor a 4.!
     
  15. _freelancer_

    _freelancer_ Power Member

    Atenção que eu estava-me a referir ao tamanho do vector, não ao valor das suas posições.

    Para o que pedes, basta:

    vector[4]++;

    ou

    vector[4] += 1;

    ou ainda

    vector[4] = vector[4] +1;
     
  16. Elvirusfatal

    Elvirusfatal Power Member

    obrigado _freelancer_!.

    eu quero fazer retornar a frequência de notas , ou seja

    20 1
    19 3
    .....

    Teho um vector com as notas que vou inserindo e nome de aluno correspondente!
    Mas não esta a dár como quero!


    Tambem o metodo que me deveria retornar a moda não esta a foncionar.. não sei porque :S

    Tenho assim;

     
    Última edição: 7 de Março de 2009

Partilhar esta Página