Que calcula y devuelve el valor sin(x) aproximadamente mediante la fórmula

programación


Write function with prototype:
double mySin(double x, double epsi); 
which calculates and return the value sin(x)  approximately by the formula:
sin(x)  =  -   +   -... +(-1)n  
here n is the first integer for which   |  |   epsi  is satisfied. 

Lo que he probado:

   double q3() {
       int x;
       int n = 1;
       double p = 0;
       int dau = -1;
       int tongquat2 = 1.0 / (2 * n + 1);
       while (tongquat2 >= 1e-10) {
           tongquat2 = 1.0 / (2 * n + 1);
           p += -1 * dau * pow(-1, n) * pow(x, 2 * n + 1) / (giaithua(2 * n + 1));
           dau *= -1;
           n++;
       }
       return p;
   }
int main(){
   int x;
   scanf("%d", &x);
   printf("sin(%d)= %.6lf", x, q3());
}

¿Por qué el código no es correcto? ayúdame con los errores.

Solución 1

Hay tres tipos de errores que podrían estar involucrados aquí y no tenemos idea de cuál es:
1) Errores de compilación/vinculación: intenta compilar su aplicación y obtiene informes de problemas antes de que pueda ejecutarse. Si intento compilar su código como se muestra, debo agregar estas dos líneas:

C
#include <stdio.h>
#include <math.h>

y también agregar una “definición ficticia” de la giaithua función para obtener una compilación limpia del código que muestra.
Hasta que tenga una compilación limpia, no generará un archivo EXE y su aplicación no podrá ejecutarse.
2) Errores de tiempo de ejecución: estos impiden que su aplicación continúe porque sucedió algo que el sistema no puede manejar, tal vez un error de “división por cero” o un intento de leer un archivo que no existe, por ejemplo. =El sistema le muestra un mensaje de error y cierra su aplicación inmediatamente.
No podemos ayudarlo a solucionar ese problema sin saber cuál fue el mensaje, dónde ocurrió y qué datos ingresó para obtenerlo.
3) Errores lógicos: significan que obtienes resultados inesperados pero tu aplicación no falla. Por ejemplo, si espera que su aplicación dé un resultado de 42 pero en su lugar le da 666.
No podemos ayudarlo a solucionar eso sin saber cuál era el valor, qué esperaba obtener, cuándo lo obtuvo y qué datos ingresó para obtenerlo.

Voy a asumir que es uno de los dos últimos, y el proceso para encontrar el problema necesita que su código se ejecute con sus datos, ninguno de los cuales tenemos. ¡Compilar no significa que tu código sea correcto! :reír:

Así que dependerá de usted, pero no está solo.
Piense en el proceso de desarrollo como escribir un correo electrónico: compilar correctamente significa que escribió el correo electrónico en el idioma correcto (inglés, en lugar de alemán, por ejemplo), no que el correo electrónico contenía el mensaje que deseaba enviar.

Ahora ingresa a la segunda etapa de desarrollo (en realidad es la cuarta o quinta, pero llegará a las etapas anteriores más adelante): Prueba y depuración.

Empiece por observar lo que hace y en qué se diferencia de lo que quería. Esto es importante porque le brinda información de por qué lo está haciendo. Por ejemplo, si un programa está destinado a permitir al usuario ingresar un número y lo duplica e imprime la respuesta, entonces si la entrada/salida fue así:

Input   Expected output    Actual output
  1            2                 1
  2            4                 4
  3            6                 9
  4            8                16

Entonces es bastante obvio que el problema está en el bit que lo duplica: no se suma a sí mismo ni lo multiplica por 2, sino que lo multiplica por sí mismo y devuelve el cuadrado de la entrada.
Con eso, puedes mirar el código y es obvio que está en algún lugar aquí:

C#
private int Double(int value)
   {
   return value * value;
   }

Una vez que tenga una idea de lo que podría estar fallando, comience a utilizar el depurador para descubrir el motivo. Coloque un punto de interrupción en la primera línea del método y ejecute su aplicación. Cuando llegue al punto de interrupción, el depurador se detendrá y le entregará el control. Ahora puede ejecutar su código línea por línea (llamado “paso único”) y ver (o incluso cambiar) el contenido de las variables según sea necesario (diablos, incluso puede cambiar el código e intentarlo nuevamente si es necesario).
Piensa en lo que debería hacer cada línea del código antes de ejecutarla y compáralo con lo que realmente hizo cuando usas el botón “Pasar por encima” para ejecutar cada línea por turno. ¿Hizo lo que esperabas? Si es así, pase a la siguiente línea.
¿Si no, porque no? ¿En qué se diferencia?
Con suerte, eso debería ayudarle a localizar qué parte de ese código tiene un problema y cuál es el problema.
Esta es una habilidad que vale la pena desarrollar, ya que le ayuda tanto en el mundo real como en el desarrollo. Y como todas las habilidades, ¡solo mejora con el uso!

コメント

タイトルとURLをコピーしました