[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){
intdif=0,aux=0;int[]numeros=newint[10];Scannerteclado=newScanner(System.in);for(inti=0;i<=9;i++){// Pede os 10 valoresSystem.out.println("Indique o "+(i+1)+" nº : ");numeros[i]=teclado.nextInt();}for(intj=0;j<numeros.length-1;j++){//Percorre as 10 posições do arraydif=numeros[j+1]-numeros[j];aux=dif;}// fica com o valor de difif(dif==aux&&dif==aux1){System.out.println("É uma P.A de razão: "+dif);}elseSystem.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?
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
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
shaazy
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…
intaux=0;int[]numeros=newint[10];Scannerteclado=newScanner(System.in);for(inti=0;i<=9;i++){// Pede os 10 valoresSystem.out.println("Indique o "+(i+1)+" nº : ");numeros[i]=teclado.nextInt();}for(intj=0;j<numeros.length-1;j++){//Percorre as 10 posições do arrayintcont=numeros[j+1]-numeros[j];intcontdois=numeros[j+2]-numeros[j+1];intconttres=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_H_Gusukuma
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
A_H_Gusukuma
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.