Вы находитесь на странице: 1из 5

ALGORITMO ITERATIVO

RAICES CUADRADAS

~1~

METODOLOGIA - JAVA

CREAR UN ALGORITMO PARA CREAR RACES CUADRADAS = ALGORITMO ITERATIVO


Datos de entrada
El nmero a calcular la raz cuadrada debe ser un nmero real mayor o igual que cero. x0
Por tanto si el usuario nos introduce un valor menor que cero debemos lanzar un error en el
programa (la raz cuadrada de un nmero negativo dar un complejo)
X, nmero real (x0)
si x<0 error!
Datos de salida
Devolver otro nmero tambin positivo

, la raz positiva (0)

Procesamiento

b2x 0.000000
001
Esta es la forma
correcta de comprbar

ALGORITMO ITERATIVO
RAICES CUADRADAS

METODOLOGIA - JAVA

~2~

Comprobando el diagrama para el nmero 8 tenemos como resultados:


B=64
B=32,5
B=17,2346
B=10,474
B=8,292
B=8,005
B=8,000001

Realizar el pseudocdigo de la aplicacin


raizCuadrada(x)
Si (x<0): excepcin (Valor no vlido)

bx
Mientras

|b2 x|>

x
( + b)
b
b
2
Fin Mientras
Retornar b

1e-12 :

En este caso la precisin es de 1e-12,


que es la diferencia entre el valor real y
el obtenido

ALGORITMO ITERATIVO
RAICES CUADRADAS

METODOLOGIA - JAVA

~3~

Date 2010-07-28
IMPLEMENTACION ALGORITMO EN JAVA
EJEMPLO. Hacer la raiz cuadrada del nmero 3
/** * @author Nessy * */
public class RaizCuadrada {
/**
* @param args
*/
public static void main(String[] args) {
double x=3;
double resultado;
resultado=raizCuadrada(x);
System.out.println("La raiz cuadrada de " + x + " es " +resultado);
}
public static double raizCuadrada(double x){
double b;
b=x;
/* Comprobamos que el nmero introducido sea mayor que 0
* sino sacamos un error**/
if (x<0)return Double.NaN;
while (Math.abs(b*b-x)>1e-12){
b=((x/b)+b)/2;
}
return b;
}
}
MEJORA Pedirle al usuario el nmero al cual le calcularemos la raz cuadrada
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
/** * @author Nessy * */
public class RaizCuadrada {
/**
* @param args
*/
public static void main(String[] args) {
double x;
BufferedReader br =new BufferedReader(new InputStreamReader(System.in));
System.out.println("Introduce un nmero: ");
try {
x=Double.parseDouble(br.readLine());
System.out.println("La raiz cuadrada de " + x + " es " +raizCuadrada(x));
} catch (NumberFormatException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}

ALGORITMO ITERATIVO
RAICES CUADRADAS

METODOLOGIA - JAVA

~4~

public static double raizCuadrada(double x){


double b;
b=x;
/* Comprobamos que el nmero introducido sea mayor que 0
* sino sacamos un error**/
if (x<0)return Double.NaN;
while (Math.abs(b*b-x)>1e-12){
b=((x/b)+b)/2;
}
return b;

}
}

MEJORA. Sacar por pantalla la raz cuadrada de los primero 100 nmeros.
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
/** * @author Nessy * */
public class RaizCuadrada {
/** * @param args
*/
public static void main(String[] args) {
//CASO 3 Mostrar la raiz de los 100 primeros nmeros
double x=0;
double resultado;
for (x = 0;x<101;x++){
resultado=raizCuadrada(x);
System.out.println("La raiz cuadrada de " + x + " es " +resultado);
}
}
public static double raizCuadrada(double x){
double b;
b=x;
/* Comprobamos que el nmero introducido sea mayor que 0
* sino sacamos un error**/
if (x<0)return Double.NaN;

}
}

while (Math.abs(b*b-x)>1e-12){
b=((x/b)+b)/2;
}
return b;

ALGORITMO ITERATIVO
RAICES CUADRADAS

METODOLOGIA - JAVA

~5~

MEJORA. Mostrar el resultado con 2 posiciones decimales (Utilizar


DecimalFormat)
import
import
import
import

java.io.BufferedReader;
java.io.IOException;
java.io.InputStreamReader;
java.text.DecimalFormat;

/** * @author Nessy * */


public class RaizCuadrada {
/** * @param args
*/
public static void main(String[] args) {
// CASO 4 pedir el nmero al usuario y sacar el resultado con 2 decimales
double x=0;
double resultado;
DecimalFormat formato = new DecimalFormat("0.00");
for (x = 0;x<101;x++){
resultado=raizCuadrada(x);
System.out.println("La raiz cuadrada de " + x + " es "
+formato.format(resultado));
}
}
public static double raizCuadrada(double x){
double b;
b=x;
/* Comprobamos que el nmero introducido sea mayor que 0
* sino sacamos un error**/
if (x<0)return Double.NaN;
while (Math.abs(b*b-x)>1e-12){
b=((x/b)+b)/2;
}
return b;
}