Documente Academic
Documente Profesional
Documente Cultură
1. Objetivos
Tener en cuenta que los algoritmos ya no son tiene por finalidad nada mas obtener la
solución al problema, si no ver cual es la manera mas eficiente de logralo, por ejemplo
teniendo en cuenta el factor tiempo y memoria.
2. Implementación
Algoritmo 1 Main
1 public s t a t i c void main ( S t r i n g [ ] a r g s ) {
2 l a b 0 1 abc = new l a b 0 1 ( ) ;
3 Scanner s c = new Scanner ( System . i n ) ;
4 System . out . p r i n t ( " b a s e : " ) ;
5 int base = sc . nextInt ( ) ;
6 System . out . p r i n t ( " i n d i c e : " ) ;
7 int i n d i c e = sc . nextInt ( ) ;
8 System . out . p r i n t ( abc . NthRootByBisection ( i n d i c e , base , 0 . 0 0 0 0 1 , 1 0 0 0 0 0 )
);
9 }
1
Observaciones:
Se puede observar que se envía 0.00001 como error mínimo y 100000 como iterador, estos
se pueden cambiar, pero yo he considerado poner estos valores para una mejor precision
del resultado.
Algoritmo 2 Function f
1 public double f ( double c , i n t x , double N) {
2 return Math . pow ( c ,N)−x ;
3 }
Este método sirve para comparar un dato de entrada elevado al indice, con la base.
Linea 1: Se recoje c(el dato de entrada), b(la base) y N(el indice).
Linea 2: Se realiza la operación ya antes explicada y se retorna el valor obtenido.
Algoritmo 3 NthRootByBisection
1 public double NthRootByBisection ( i n t N, i n t x , double e r r o r , i n t
iteration ){
2 int n = 1 ;
3 double a = 0 ;
4 double b = x ;
5 double c = 0 ;
6 while ( n<=i t e r a t i o n ) {
7 c=(a+b ) / 2 ;
8 i f ( f ( c , x ,N)==0 | | ( ( b−a ) / 2 )<e r r o r ) {
9 return c ;
10 }
11 n++;
12 i f ( f ( c , x ,N) <0){
13 a=c ;
14 } else
15 b=c ;
16 }
17 return c ;
18 }
Linea 1: Entran N(el indice), x(la base), el error maximo aceptado y el iterador, respec-
tivamente.
Linea 2: Se crea una varibale entera n y se inicializa en 1, este nos servira como bandera
y trabajara con el iterador.
Linea 3-5: Se crea las variables de tipo double a, b y c ; el a se inicializa en 0, b en el
valor de la base y c en 0.
Linea 6-15: En esta parte encontramos un bucle el que depende del iterador y n.
Dentro del bucle hacemos c igual a la semisuma de a y b, luego se comprueba si c es el
valor que buscamos, esto haciendo uso de la funcion f; si el número obtenido de f es 0 o la
semidiferencia entre b y a sea menor que el error. de cumplir alguna de esas condiciones,
2
saldremos del bucle y retornaremos el valor de c; de lo contrario, el iterador suma uno
mas y se comprueba si el valor obtenido por f es negativo o positivo, si es negativo quiere
decir tenemos un valor es menor al esperado, en consecuencia el valor que buscamos se
encuentra a la derecha, por ello se actualiza el valor de a con c, si se obtiene que f es
positivo entonces el valor buscado se encuentra en la izquierda y se actualiza el valor de
b con c.
Luego de ello se vuelve a analizar todo lo del bucle hasta que encontremos el valor que
cumpla la condicional del principio o se acabe toda la iteracion.
3. Preguntas
3.1. ¿Cuántas iteraciones necesitas? ¿Es un número fijo? Explique.
La función pricipal del iterador es hacer que nuestro algoritmo no sea infinito, este no
es un número en específico y se puede cambiar, pero se recomienda que sea grande para
que el resultado sea mas preciso.