progressão aritmética ou uma progressão geométrica

3 respostas
C

Bom dia pessoALL

Alguém poderia me dar uma dica de como faço para que esse programa rode



Escreva uma aplicação de console que receba três argumentos numéricos inteiros indicando se o valores dados compõe uma progressão aritmética ou uma progressão geométrica.



Bjs

Cátia

3 Respostas

R
Catia:





Sugeriria o seguinte:





public static final int NP = 0; // Não é Progressão Aritmética nem Geométrica.


public static final int PA = 1; // Progressão Aritmética.


public static final int PG = 2; // Progressão Geométrica





public int verificarProgressao(int n1, int n2, int n3) {


   int resposta = NP;





   // Estou supondo que n1, n2 e n3 estajem em ordem crescente


   if((n3 - n2) == (n2 - n1) {


      resposta = PA;


   } else if(((n3 / n2) == (n2 / n1)) && (n3 % n2 == 0) && (n2 % n1 == 0)) {


      resposta = PG;


   }





   return resposta;


}





Espero que isso sirva.





Grato,





Rafael Ubiratam Clemente Afonso


Java 2 Certified Programmer





[ Esta mensagem foi editada por: rucafonso em 07-03-2003 11:02 ]

[ Esta mensagem foi editada por: rucafonso em 07-03-2003 11:03 ]
C
Obrigada pela dica, mas surgiram alguma dúvidas





Porque você utilizou a palavra static final ao declarar as variáveis?..





public static final int NP = 0;


public static final int PA = 1;


public static final int PG = 2;








Dentro do if você tb utilizou o && (seria uma condição OU)?..





if(((n3 / n2) == (n2 / n1)) && (n3 % n2 == 0) && (n2 % n1 == 0)) {








Desde  obrigada.


Cátia  <img src="https://cdn.jsdelivr.net/gh/twitter/twemoji@14/assets/72x72/s.pngtuck_out_tongue.png?v=9" title=":stuck_out_tongue:" class="emoji" alt=":stuck_out_tongue:">
R
Quote:
Porque você utilizou a palavra static final ao declarar as variáveis?..





public static final int NP = 0;


public static final int PA = 1;


public static final int PG = 2;



Conveniência. Uma variável static significa que ela pertence à classe e não a uma instância da classe em particular. Assim você pode escrever algo como:



int resultado = instanciaDeClasse.verificarProgressao(…);

if(resultado = Classe.PA) {

/* … /

} else if(resultado == Classe.PG) {

/
… */

}



final indica que a variável não pode ser modificada. Assim se em algum lugar do código você fizer Classe.PG = 123, por exemplo, o Compilador soltará uma mensagem de erro.

Claro que cada caso é um caso, e pode ser conveniente para você dispensar estes modificadores.



Quote:


Dentro do if você tb utilizou o && (seria uma condição OU)?..

if(((n3 / n2) == (n2 / n1)) && (n3 % n2 == 0) && (n2 % n1 == 0)) {




Estava pensando no seguinte caso:

Suponha uma sequencia 3, 9, 27.

(27/9) == (9/3) == 3, (27%9) == 0 e (9%3) == 0.

Certo até aqui?

Agora suponha a sequencia 3, 9, 28.

(28/9) == (9/3) == 3, (28%9) == 1 != 0, (9%3) == 0.

No caso acima (28/3) e (9/3) são iguais, mas o resto de uma das divisões não foi nulo, portanto estes números (9 e 28) não são multíplos entre si.

Agora a última sequencia: 3, 9, 81.

(81/9) != (9/3), (81%9) == 0, (9%3) == 0.

Apesar dos restos das divisões serem nulos, a sequencia acima não é Geométrica, pois o múltiplo usado do 1o. número para o segundo (9/3=3) não serve para passar para o 3o. número (81/9=9).

Portanto, para termos uma PG é necessário que (n3/n2)==(n2/n1) E também que os restos destas divisões seja 0. Daí o uso do "&&". Se usasse o condicional "||" ("ou"), bastaria que uma das condições acima fosse verdadeiro para que se caracterizasse uma PG.



Espero que isso sirva.



Rafael Ubiratam Clemente Afonso

Java 2 Certified Programmer

[ Esta mensagem foi editada por: rucafonso em 07-03-2003 11:48 ]
Criado 7 de março de 2003
Ultima resposta 7 de mar. de 2003
Respostas 3
Participantes 2