Progressão aritmética

9 respostas
S

viva ppl

[code=Java]/* Desenvolva um programa, utilizando a classe Scanner, que obtenha 10 valores
de entrada e verifique se eles formam uma progressão aritmética. */

import java.util.*;

public class exercicio_14{
public static void main(String[] args){

int dif=0,aux=0;
int[] numeros = new int[10];
Scanner teclado = new Scanner (System.in);

for (int i=0;i<=9;i++){ // Pede os 10 valores
System.out.println("Indique o "+(i+1)+" nº : ");
numeros[i] = teclado.nextInt(); }

for (int j=0;j < numeros.length-1;j++){ //Percorre as 10 posições do array
  dif =numeros[j+1]-numeros[j];
  aux = dif;} // fica com o valor de dif

if (dif==aux && dif == aux1)
  {System.out.println("É uma P.A de razão: "+dif);}
  else System.out.println("Não há uma P.A em concreto "+dif+" "+aux); 
}

}

Até agora tudo bem, mas o output não sai como espero…
Dando os valores 1 3 5 7 o output está certo que é r = 3 mas se meter 1 2 4 5 7 dá na mesma o output r = 3, como mudo para que leia o array todo antes de dar a resposta?

Cumpz

9 Respostas

A

Olá
Tira o teste final para fora do for

Rodrigo_Sasaki

Pra que ler o array todo? Se já foi identificado que não é um progressão aritmética, não tem pra que continuar processando

A

A H Gusukuma:
Olá
Tira o teste final para fora do for

Desculpe-me, viajei!
A lógica está errada.
Uma solução seria calcular a diferença entre o item 1 e 0 fora do for e iniciar o for a partir do item 1, e sair do for se encontrar uma razão diferente.

S

na minha maneira de pensar, tens sempre de ler o array todo para saber se existe progressão aritmética ou não

ex: 1, 3 , 5 , 7 , 8 , 9 , 10

se só ‘olharmos’ para as primeiras posições o output não vai sair certo…

S

Olhei novamente para o código e já modifiquei…

[code=Java]public static void main(String[] args){

int aux=0;
int[] numeros = new int[10];
Scanner teclado = new Scanner (System.in);

for (int i=0;i<=9;i++){ // Pede os 10 valores
   System.out.println("Indique o "+(i+1)+" nº : ");
    numeros[i] = teclado.nextInt(); }

for (int j=0;j < numeros.length-1;j++){ //Percorre as 10 posições do array
  int cont = numeros[j+1]-numeros[j];
  int contdois = numeros[j+2] - numeros[j+1];
  int conttres = numeros[j+3] - numeros[j+2];
  if (((cont != contdois ) && (contdois !=conttres))){
    System.out.println("Não há uma P.A em concreto ");
    break;}
    else{
      aux = numeros[j+1]-numeros[j];
      System.out.println("É uma P.A de razão: "+aux);
      break;}
}

}

}

mas ainda não dá o output que pretendo, por ex:

1 , 2 , 3 , 4 , 5 , 7 , 8 , 9 , 10 , 11

Output:
É uma P.A de razão: 1

alguma sugestão?

Cumpz

A

A sugestão que dei não funciona?

boolean isPA = true; int dif = numeros[1] - numeros[0]; for (int j=1;j < numeros.length-1;j++) { if ((numeros[j+1] - numeros[j]) != dif) { isPA = false; break; } }

Rodrigo_Sasaki

Não tem que olhar a progressão inteira.

Tem que olhar a progressão até encontrar uma inconsistência. Se encontrou um erro, o resto é irrelevante.
Agora se percorreu ela toda e não encontrou nenhuma inconsistência na progressão, aí sabe que ela é válida

A

na minha maneira de pensar, tens sempre de ler o array todo para saber se existe progressão aritmética ou não

ex: 1, 3 , 5 , 7 , 8 , 9 , 10

se só ‘olharmos’ para as primeiras posições o output não vai sair certo…

Para não ser PA basta encontrar o primeiro, para ser PA tem que passar por todos.

S

Sim, funciona.

Obrigado.

Criado 30 de outubro de 2013
Ultima resposta 1 de nov. de 2013
Respostas 9
Participantes 3