Hola, mi profesor nos dejó que hicieramos un programa en c que calculara las diferentes funciones trigonometricas (seno, coseno, etc...) pero sin la libreria math.h
Ya lo tengo hecho pero cuando lo compilo no me sale el resultado, ¿podrían ayudarme a saber en donde estoy mal?
#include <stdio.h>
#include <stdlib.h>
float potencia(float, float);
float factorial(float);
float exponencial(float);
float sen(float);
float cos(float);
float senoh(float);
float coseh(float);
float potencia(float x, float k) {
float z = 1;
int i;
if (k == 0) {
return (1);
} else {
for (i = 0; i < k; i++) {
z *= x;
}
}
return (z);
}
float factorial(float k) {
float z = 1;
int i;
for (i = 1; i <= k; i++) {
z *= i;
}
return (z);
}
float exponencial(float x) {
float suma = 0, ax, error = 0.0001;
int k = 0;
do {
ax = (potencia(x, k) / factorial(k));
suma += ax;
k++;
if (ax < 0) {
ax = -ax;
}
} while (ax > error);
return (suma);
}
float sen(float x) {
float suma = 0, ax, error = 0.001;
int k;
do {
ax = (((potencia(-1, k) * potencia(x, 2 * k)) + 1) / factorial((2 * k) + 1));
suma += ax;
k++;
if (ax < 0) {
ax = -ax;
}
} while (ax > error);
return (suma);
}
float cos(float x) {
float suma = 0, ax, error = 0.0001;
int k;
do {
ax = ((potencia(-1, k) * potencia(x, 2 * k)) / factorial(2 * k));
suma += ax;
k++;
if (ax < 0) {
ax = -ax;
}
} while (ax > error);
return (suma);
}
float senoh(float x) {
float z = 0;
z = (exponencial(x) - (1 / exponencial(x))) / 2;
return (z);
}
float coseh(float x) {
float z = 0;
z = (exponencial(x) + (1 / exponencial(x))) / 2;
return (z);
}
int main(int argc, char** argv) {
float x, seno, coseno, tang, cot, sec, csc, senh, cosh;
int opcion;
printf("Programa que calcula funciones trigonometricas\n");
printf("Selecciona una opcion del menu\n");
printf("1. Seno\n");
printf("2. Coseno\n");
printf("3. Tangente\n");
printf("4. Cotangente\n");
printf("5. Secante\n");
printf("6. Cosecante\n");
printf("7. Seno Hiperbolico\n");
printf("8. Coseno Hiperbolico\n\n");
scanf("%d", &opcion);
switch (opcion) {
case 1:
printf("\nSeno\n");
printf("Dame un numero ");
scanf("%f", &x);
seno = sen(x);
printf("El seno de %.2f es %.2f", x, seno);
break;
case 2:
printf("Coseno\n");
printf("Dame un numero ");
scanf("%f", &x);
coseno = cos(x);
printf("El coseno de %.2f es %.2f", x, coseno);
break;
case 3:
printf("Tangente\n");
printf("Dame un numero ");
scanf("f", &x);
tang = sen(x)/cos(x);
printf("La tangente de %.2f es %.2f", x, tang);
break;
case 4:
printf("Cotangente\n");
printf("Dame un numero\n");
scanf("%f", &x);
tang = sen(x)/cos(x);
cot = 1/tang;
printf("La cotangente de %.2f es %.2f", x, cot);
break;
case 5:
printf("Secante\n");
printf("Damen un numero\n");
scanf("%f", &x);
sec = 1/cos(x);
printf("La secante de %.2f es %.2f", x,sec);
break;
case 6:
printf("Cosecante\n");
printf("Damen un numero\n");
scanf("%f", &x);
csc = 1/sen(x);
printf("La cosecante de %.2f es %.2f", x,csc);
break;
case 7:
printf("Seno hipoerbolico\n");
printf("Dame un numero\n");
scanf("%f", &x);
senh = senoh(x);
printf("El seno hiporbolico de %.2f es %.2f", x, senh);
break;
case 8:
printf("Coseno hipoerbolico\n");
printf("Dame un numero\n");
scanf("%f", &x);
cosh = coseh(x);
printf("El coseno hiporbolico de %.2f es %.2f", x, cosh);
break;
default: printf("Esa opcion no esta en el menu");
}
return (EXIT_SUCCESS);
}
sin caer en detalle lo primero que veo es
linea 53
Citarint k;
y luego usas "k" e incrementas sin inicializar
Citarax = (((potencia(-1, k) * potencia(x, 2 * k)) + 1) / factorial((2 * k) + 1));
suma += ax;
k++;
así que "k" puede valer cualquier cosa
Hola... No intente compilar tu código pero algo así debería de funcionar
#include<stdio.h>
float exp(float x, float y){
if (y>1){
return x*exp(x,y-1);
}
else{
return x;
}
}
float fact(float x){
if (x>2){
return x*fact(x-1);
}
else{
return x;
}
}
void main(){
int opt;
float x,y;
printf("Seleccione un numero\n");
printf("1) Exponente\n");
printf("2) Factorial\n");
printf("3) Seno\n");
scanf("%d",&opt);
switch(opt){
case 1:
printf("ingrese la base\n");
scanf("%f",&x);
printf("ingrese el exponente\n");
scanf("%f",&y);
printf("El resultado es: %2f",exp(x,y));
break;
case 2:
printf("Ingrese un numero\n");
scanf("%f",&x);
printf("El resultado es: %2f",fact(x));
break;
case 3:
printf("Ingrese el lado opuesto\n");
scanf("%f",&x);
printf("Ingrese la hipotenusa\n");
scanf("%f",&y);
printf("El resultado es: %2f",x/y);
break;
}
}
Enviado desde mi LG-H542 mediante Tapatalk