Apresetar quantas TRIPLAS de números seguidos, que formam uma Progressão Aritmética,

9 respostas
van_bommel
  1. Desenvolva classe e métodos, necessários para receber um Array de números inteiros e positivos, de tamanho 10,
    e apresetar quantas TRIPLAS de números seguidos, que formam uma Progressão Aritmética, estão no conjunto dos
    dados fornecidos.
    Exemplo: 3 10 20 30 7 2 4 6 1 15
    20 == (10 + 30)/2 4 == (2 + 6)/2
    Com estes números, a resposta seria 2 TRIPLAS de números seguidos, que formam uma Progressão Aritmética
    (P.A.).
    Para verificar se 3 números estão em P.A., basta testar se o segundo é igual à média aritmética do primeiro com o
    terceiro número.
public class Exer20 {

public static int pA ( int [ ]  array ) {

int cont = 0  ;

for ( int i = 0 ; i < array.length ; i++  ) {
int p = array [ i];
int s =  array[i+1 ];
int t = array[ i+ 2 ];
if ( s == ( ( p+ t ) /2 ) ){
     cont ++ ;
 } 


          }
          
          return cont ;




} 


}




import javax.swing.*;

public class testeExer20 {

  public static void main(String[] args){
  int [ ] array = new int [10];
  
  
  for ( int i = 0 ; i <array.length ; i ++ ) {
  String aux = JOptionPane.showInputDialog ( null,  " Preencha o array ");
  array[i] = Integer.parseInt(aux);
    }
  
  
  JOptionPane.showMessageDialog ( null, " Resposta  \n" +  Exer20.pA(array));
    
  
  
  
  
  
  }

}

SOU INICIANTE ESTOU COM PROBLEMAS.ajuda

9 Respostas

Stormqueen1990

Não entendi porquê seu método pA é estático.

Ele não vai ser chamado através da instância da classe Exer20?

Procure identar melhor seu código também. Ficará mais fácil visualizar problemas de sintaxe como falta de chaves.

van_bommel

Mais a logica esta certa ?

mais qual o problema dele ser static , não preciso criar um obj …para chamar o metodo .?

Stormqueen1990

Pelo que vejo a lógica está OK, como tinha dito só não entendi o motivo do static, mas a princípio também não deveria causar problemas.

O que não funciona no código que vc escreveu?

van_bommel

compilaa …maiss nãaoo apareece nadaa

lina

Oi,

Esse código deve ocorrer a exceção Exception in thread “main” java.lang.ArrayIndexOutOfBoundsException: 10

Note que nesta linha da códificação:

int s = array[i+1 ]; int t = array[ i+ 2 ];

Você está somando o array com i+1 e i+2 sendo que se o laço for de 10 posições (i = 10) vai ultrapassar o tamanho de seu array (No caso é um array de 10 posições), pois 9+2 é igual a 11.

Tchauzin!

van_bommel
public class Exer20 {

  public static int pA ( int [ ]  array ) {

  int cont = 0  ;

  for ( int i = 0 ; i < array[8] ; i++  ) {
    int p = array [ i];
    int s =  array[i+1 ];
    int t = array[ i+ 2 ];
      if ( s == ( ( p+ t ) /2 ) ){
       cont ++ ;
          }
      }

          return cont ;
      
     }


 


    assim esta certo ?



  }
Stormqueen1990

Isso vai dar problema. Vc deve testar se i é menor que 8, não se i é menor que o valor da posição 8 do array.

T

Uma forma de determinar se três números a, b e c formam uma progressão aritmética é notar que, nesse caso, (b - a) == (c - b).

É mais fácil que fazer a divisão (sem contar que se você não tomar cuidado com a divisão de inteiros em Java, você vai ter resultados incorretos).

Por exemplo:

10, 20, 30 --> 20 - 10 == 30 - 20 == 10.

1, 4, 7 --> 4 - 1 == 7 - 4 == 3.

897, 914, 931 --> 914 - 897 == 931 - 914 == 17.

lina

Oi,

De uma olhada na ordem do array.:

int[]
array = new int [10];   
array[0] = 3;
array[1] = 10;
array[2] = 20;
array[3] = 30;
array[4] = 7;
array[5] = 2;
array[6] = 4;
array[7] = 6;
array[8] = 1;
array[9] = 15;

nunca irá ter uma sequencia correta de 3 números, ou seja o array nunca poderá ter FIM.
Não sou perita em matematica, mas será que essa formula está correta ?

Voce chegará no resultado, apenas com essa maneira (Trambicando).:

public static void main(String[] args){   
     int[]
     array = new int [10];   
     array[0] = 3;
     array[1] = 10;
     array[2] = 20;
     array[3] = 30;
     array[4] = 7;
     array[5] = 2;
     array[6] = 4;
     array[7] = 6;
     array[8] = 1;
     array[9] = 15;
     
     int cont = 0;   
	  
     for (int i = 0; i < array.length; i++) {   
	     try {
		     int p = array[i];   
		     int s = array[i+1];   
		     int t = array[i+2];
			
		     if (s == ((p + t)/2)) {   
			     cont ++ ;
		     }
	     }
	     catch (Exception e) {
		     
	     }
     }
     System.out.println(cont);
  }

Tchauzin!

Criado 4 de agosto de 2009
Ultima resposta 4 de ago. de 2009
Respostas 9
Participantes 4