Java - Ayuda en java

 
Vista:

Ayuda en java

Publicado por ibranchi (11 intervenciones) el 30/09/2021 22:04:04
Tengo que hacer el siguiente problema "Desarrolle un programa en Java que implemente la aproximación a la función seno para un ángulo x en grados mediante un polinomio de Taylor" esto fue lo que hice pero no entiendo el error que me marca al momento de compilar, si saben algún cambio o otra forma de resolver este problema me serviría mucho.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
// Serie de Taylor
 
import java.util.Scanner;
 
public class Taylor {
 
public static float po(float b, int p) {
 
    float r = 1;
    for (int k = 1; k <= p; k++) {
        r = r * b;
    }
    return (r);
 
}
 
public static double fac(int n) {
    double aux = 1;
    for (int a = 2; a <= n; a++) {
        aux *= a;
    }
    return aux;
}
 
public static void main(String[] args) {
 
    Scanner sc = new Scanner(System.in);
    float seno = 0;
    int cnt2 = 1;
 
    System.out.println("Ingrese el angulo en radianes: ");
    float x = sc.nextFloat();
    System.out.println("Ingrese la cantidad de elementos de la serie de Taylor");
    int n = sc.nextInt();
 
    for (int cnt1 = 1; cnt1 <= n; cnt1++) {
        seno = seno + po(-1, cnt1 + 1) * po(x, cnt2) / fac(cnt2);
        cnt2 = cnt2 + 2;
    }
    System.out.println("El seno del angulo es: ", x, seno);
}
}
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de Kabuto
Val: 3.428
Oro
Ha mantenido su posición en Java (en relación al último mes)
Gráfica de Java

Ayuda en java

Publicado por Kabuto (1082 intervenciones) el 01/10/2021 19:11:21
Hola.

Te marca dos errores.
Uno es en esta línea:

1
seno = seno + po(-1, cnt1 + 1) * po(x, cnt2) / fac(cnt2);

Y se debe a que el método fac() lo has declarado como tipo double, pero intentas computar su resultado y guardarlo en la variable seno, que es un float.

Un double es mucho más preciso (en cantidad de decimales) que un float, así que si guardamos un double en un float, se pierde información y por tanto Java no permite hacerlo, al menos no directamente.
Puedes hacerlo si haces un casting a float de toda la operación. Digamos que Java te obliga a que especifiques que estás de acuerdo en que se pierda la precisión que te está dando el double.

1
seno = (float) (seno + po(-1, cnt1 + 1) * po(x, cnt2) / fac(cnt2));

Otra forma de solucionarlo, es cambiar la firma del método fac() y hacer que sea float en lugar de double. Para un ejercicio como este, no creo que se necesite la (enorme) precisión decimal que da un double, así que se puede hacer todo con float sin problemas.

1
2
3
4
5
6
7
public static float fac(int n) {
		float aux = 1;
		for (int a = 2; a <= n; a++) {
			aux *= a;
		}
		return aux;
	}

Y si no, pues cambiar la declaración de la variable seno a double, en lugar de float.



El otro error que te da, está en la sintaxis de este println(), no es correcta en Java:
1
System.out.println("El seno del angulo es: ", x, seno);

Probablemente, querías escribir esto:
1
System.out.println("El seno del angulo es: " + seno);

Con estos cambios, el programa ya compila y se ejecuta.
Lo que no se decirte es si la lógica es correcta, desconozco el polinomio de Taylor.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar