Ayuda con programa en c de funciones trigonometricas

Iniciado por angelica24, 20 Febrero 2017, 21:00 PM

0 Miembros y 1 Visitante están viendo este tema.

angelica24

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);
}

engel lex

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
El problema con la sociedad actualmente radica en que todos creen que tienen el derecho de tener una opinión, y que esa opinión sea validada por todos, cuando lo correcto es que todos tengan derecho a una opinión, siempre y cuando esa opinión pueda ser ignorada, cuestionada, e incluso ser sujeta a burla, particularmente cuando no tiene sentido alguno.

tonyhxc31

Re:
#2
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