Ayuda con la libreria <math.h>

rafa_bkn
24 de Diciembre del 2005
Hola estoy programando en C usando el sistema operativo KUbuntu (KDE para Ubuntu), una distribucion de Linux, pero tengo un problema con un programa ya que me dice que la funcion cos(x) no esta definida en la libreria <math.h>, aunque segun mis apuntes si que deberia de estarlo y no puedo usarla. La cuestion es que el compilador standar de GNU (gcc) no compila el codigo fuente de este programa dando varios fallos sobre las directivas #include y quisiera saber si alguien puede ayudarme. El codigo del programa es el siguiente:

//Autor: Rafael Enriquez Herrador
//Asignatura: Metodologia y Tecnologia de la Programacion
//Titulo: Practica 2, Ejercicio5
//Fecha: 4-12-2005
//Version: 0.1

/* Programa que calcule el valor de cos 10º con un error menor del introducido por el usuario
y aplicando para ello el desarrollo de Taylor de la funcion */

#include <stdio.h>
#include <stdlib.h>
#inlcude <math.h>

/* Para realizar el programa vamos a hacer uso de la libreria math.h, mas concretamente, de la funcion cos()
que devuelve el valor del coseno de un angulo (expresado en radianes) y dicho resultado lo vamos a ir comparando
con el valor del desarrollo en serie de Taylor de cos(x) hasta que el error absoluto entre ambos sea menor
que la tolerancia marcada por el usuario */

//Declaracion de constantes

float pi = 3.1416;

//Declaracion de funciones

double Grados_Radianes(double grados); //Pasa de grados a radianes
double CalcularCosTaylor(double x, int i, int cont); //Calcula cos(x) mediante el desarrollo de Taylor
int Factorial(int n); //Calcula n!
double Potencia(double base, int exp); //Calcula una potencia dado la base y el exponente

//Funcion main()

int main()
{

//Declaracion de variables

double dato_grad, dato_rad, tol, cos_tay, coseno;
int cont1, cont2;

//Entrada de datos

printf("nIntroduzca el valor del angulo en grados (0 - 360): ");
scanf("%f", dato_grad);
printf("nIntroduzca el valor del maximo error que quiere cometer al calcular el coseno:");
scanf("%f", tol);

//Vamos a pasar los datos de grados a radianes mediante la funcion Grados_Radianes()

dato_rad = Grados_Radianes(dato_grad); //Ya tenemos los datos convertidos a radianes almacenados en dato_rad

//Vamos a calcular el valor exacto del coseno mediante la funcion cos() de la libreria math.h

coseno = cos(dato_rad);

//Calculamos el valor de cos(x) mediante Taylor con un error menor que tol

cos_tay = 1; //Incializamos el valor de cos(x) a 1 (valor maximo)
cont1 = 2;
cont2 = 1;

while ((cos_tay - coseno) > tol)
{
cos_tay = cos_tay + CalcularCosTaylor(cos_tay, cont1, cont2);
cont1 = cont1 + 2;
cont2++;
}

//Devolvemos el valor del cos(x) por pantalla

printf("nEl cos(%f) = %fnn", dato_grad, cos_tay);

return 0;
}

//Funcion que transforma los grados a radianes

double Grados_Radianes(double grados)
{
return ((pi*grados)/180);
}

//Funcion que calcula el coseno mediante el desarrollo en serie de Taylor

double CalcularCosTaylor(double x, int i, int cont)
{
double pot, result;
int signo, fact;

pot = Potencia(x, i);
fact = Factorial(i);

signo = Potencia(-1, cont);

result = (signo*pot/fact);

return (result);
}

//Funcion que devuelve el factorial de un numero (n!)

int Factorial(int n)
{
int cont, result;

result = 1;
cont = n;

while (cont > 1)
{
result = cont*result;
cont--;
}

return (result);
}

//Funcion que devuelve una potencia

double Potencia(double base, int exp)
{

while (exp > 1)
{
base = base*base;
}

return (base);

}




Gracias por todo

ISAIAS DUQUE GOMEZ
24 de Diciembre del 2005
ME PARECE QUE SOLO ESCRIBISTE MAL LA LIBRERIA, CHECALO BIEN...

PERO SI ESTA BIEN EL CODIGO, pero bueno, nomas valida las entradas..

Jimmy
24 de Diciembre del 2005
double Potencia(double base, int exp)
{

while (exp > 1)
{
base = base*base;
exp++; // <---- FALTA ESTA LINEA
}

return (base);

}