Estoy escribiendo un progtwig para un filtro de paso bajo. Cuando compilo me sale el siguiente error:
objeto llamado no es una función o puntero de función
Para las variables declaré con doble. ¿Alguna idea de por qué esto está pasando?
#include #include #include int main(int argc, char **argv) { double omega1, omega2, omegac, T, dt; int N, method; FILE *in; // Open the file and scan the input variables. if (argv[1] == NULL) { printf("You need an input file.\n"); return -1; } in = fopen(argv[1], "r"); if (in == NULL) return -1; fscanf(in, "%lf", &omega1); fscanf(in, "%lf", &omega2); fscanf(in, "%lf", &omegac); fscanf(in, "%d", &method); T = 3 * 2 * M_PI / omega1; // Total time N = 20 * T / (2 * M_PI / omega2); // Total number of time steps dt = T / N; // Time step ("delta t") // Method number 1 corresponds to the finite difference method. if (method == 1) { int i; double Voutnew = 0, Voutcur = 0, Voutprev = 0; for (i = N; i != 0; i--) { Voutnew = ((1/((1/((sqrt(2))(dt)(omegac))) + (1/((dt)(dt)(omegac) (omegac))))) * (((2/((dt)(dt)(omegac)(omegac))) - 1)(Voutcur) + (1/((1/((sqrt(2))(dt)(omegac))) - (1/((dt)(dt)(omegac)(omegac)))))(Voutprev) + Sin((omega1)(T)) + (1/2)(Sin((omega2)(T))))); Voutcur = Voutnew; // updates variable Voutprev = Voutcur; // passes down variable to next state printf("%lf\n", Voutnew); } } else { // Print error message. printf("Incorrect method number.\n"); return -1; } fclose(in); return 0; }
Aquí está la lista de errores que recibo:
In function 'main': Line 38: error: called object '1.41421356237309514547462185873882845044136047363e+0' is not a function Line 38: error: called object 'dt' is not a function Line 38: error: called object 'dt' is not a function Line 38: error: called object '1.41421356237309514547462185873882845044136047363e+0' is not a function Line 38: error: called object 'dt' is not a function Line 38: error: called object 'omega1' is not a function Line 38: error: called object 'omega2' is not a function Line 38: error: called object '0' is not a function
Necesitas el operador de multiplicación.
((sqrt(2))(dt)(omegac)
por ejemplo, está mal, debe especificar el operador de multiplicación explícitamente en todos los lenguajes de progtwigción que conozco al menos
sqrt(2) * dt * omegac
Además, usar demasiados paréntesis hace que tu código sea muy difícil de leer, así que no lo hagas.
El uso de paréntesis fue el caso del mensaje de error, ya que
(dt)(omegac)
se interpreta como si dt
fuera una función y omegac
un parámetro pasado a ella, y dado que dt
no es una función, el mensaje de error tiene sentido.
Esto es solo una pequeña parte del código que necesita ser arreglado, y si yo fuera usted, dividiría la expresión en subexpresiones, no es realmente fácil ver un error en el grande que tiene allí.
Las referencias indefinidas a Sin
son porque c distingue entre mayúsculas y minúsculas, no hay una función llamada Sin
, es sin
.