[AJUDA] Índice sem vetor

10 respostas
claudneto

Pessoal,

Eu tenho um exercício pra fazer, mas não tenho idéia de como fazer os índices sem usar vetores. Só posso usar while e if/else.

O exercício é o seguinte:

Calcular raíz quadrada usando o Método de Newton:

Como vcs podem ver, tem que haver os índices. Mas como indexar usando apenas variáveis, if/else e while?

Não consegui pensar em nenhuma forma de fazer isso além do vetor!

10 Respostas

ViniGodoy

Rn na verdade vai ser o número que foi calculado na interação n. Você realmente não precisa de vetores para isso. Por exemplo, se definissemos:

rn = n / 2;

O algoritmo seria:

for (int n = 0; n < 10; n++) { rn = n / 2; }

claudneto

Mas o rn+1, r0, r1…não preciso do valor do anterior pra calcular?

r1 = 1/2 * (r0 + x/r0)

Pra calcular o r1…eu preciso do r0. Ou não?

ViniGodoy

Sim, mas pela sua fórmula você precisa de 2 valores.

rn-1 e rn, ou seja, o valor de r na interação anterior e nessa. E para isso, usa-se 2 variáveis.

claudneto

Isso é verdade.

Vou tentar pensar em algo com isso.

Valeu!

peczenyj
double r = x, r_proximo, episilon;

for(int n=1;n<LIMITE_ITERACOES;n++){
  r_proximo = 0.5 * ( r + x/r);
  if( Math.abs(r_proximo - r) < episilon){
     break; // encontrou, sai do loop
  }
  r = r_proximo;
}
claudneto

Bom, eu fiz, mas ele sempre retorna 0!

Grrrrrr...

public double raizQuadrada (double x) {
    
    //rn1 refere-se ao rn+1 (quando rn1 = (x + 1) / 2 => rn1 quando rn = x)
    double rn1 = (x + 1) / 2;
    
    //rn refere-se ao rn (quando rn = x => estimativa inicial)
    double rn = x;
    
    while (absoluto(rn1 - rn) >= epsilon) {

      rn1 = 1 / 2 * (rn + (x / rn));
      
      rn = rn1;
    }
        
    return rn;
  }

Não tenho nem idéia do pq isso está acontecendo!

Obs.: O método absoluto retorna o módulo do valor passado como parâmetro!

E

1 / 2, em Java, é zero.

Use 1.0 / 2.0, que dá 0.5.

OK?

peczenyj

1- adicione varios System.out.println(“passei por aqui linha X”); em cada ponto do seu programa
2- estude sobre como funciona um debugger (basicamente sobre o que é um breakpoint).

claudneto

entanglement:
1 / 2, em Java, é zero.

Use 1.0 / 2.0, que dá 0.5.

OK?

A raíz quadrada de 63 é 32? Hahahaha…foi o que apareceu!

Pelo menos tá ficando mais perto do resultado!

claudneto

Aeeeeeeeeeee...conseguiii!!!

while (absoluto((rn1 - rn)) >= epsilon) {
      
      rn = rn1;
      
      rn1 = 1.0 / 2.0 * (rn + (x / rn));
    }

Vlw a todos!

Principalmente ao peczenyj que me lembrou do Debugger! Foi com ele que eu consegui...apenas tive que inverter a ordem das atribuições, pois no fim, a diferença era 0 e ele saia do laço!

Vlw!

Agora vem a raíz cúbica!

Criado 5 de abril de 2010
Ultima resposta 5 de abr. de 2010
Respostas 10
Participantes 4