elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Introducción a la Factorización De Semiprimos (RSA)


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  Ayuda con programa en c de funciones trigonometricas
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Ayuda con programa en c de funciones trigonometricas  (Leído 6,900 veces)
angelica24

Desconectado Desconectado

Mensajes: 4


Ver Perfil
Ayuda con programa en c de funciones trigonometricas
« en: 20 Febrero 2017, 21:00 pm »

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?

Código
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3.  
  4. float potencia(float, float);
  5. float factorial(float);
  6. float exponencial(float);
  7. float sen(float);
  8. float cos(float);
  9. float senoh(float);
  10. float coseh(float);
  11.  
  12. float potencia(float x, float k) {
  13.    float z = 1;
  14.    int i;
  15.  
  16.    if (k == 0) {
  17.        return (1);
  18.    } else {
  19.        for (i = 0; i < k; i++) {
  20.            z *= x;
  21.        }
  22.    }
  23. return (z);
  24. }
  25.  
  26. float factorial(float k) {
  27.    float z = 1;
  28.    int i;
  29.  
  30.    for (i = 1; i <= k; i++) {
  31.        z *= i;
  32.    }
  33.    return (z);
  34. }
  35.  
  36. float exponencial(float x) {
  37.    float suma = 0, ax, error = 0.0001;
  38.    int k = 0;
  39.  
  40.    do {
  41.        ax = (potencia(x, k) / factorial(k));
  42.        suma += ax;
  43.        k++;
  44.        if (ax < 0) {
  45.            ax = -ax;
  46.        }
  47.    }    while (ax > error);
  48.    return (suma);
  49. }
  50.  
  51. float sen(float x) {
  52.    float suma = 0, ax, error = 0.001;
  53.    int k;
  54.  
  55.    do {
  56.        ax = (((potencia(-1, k) * potencia(x, 2 * k)) + 1) / factorial((2 * k) + 1));
  57.        suma += ax;
  58.        k++;
  59.        if (ax < 0) {
  60.            ax = -ax;
  61.        }
  62.    }    while (ax > error);
  63.    return (suma);
  64. }
  65.  
  66. float cos(float x) {
  67.    float suma = 0, ax, error = 0.0001;
  68.    int k;
  69.  
  70.    do {
  71.        ax = ((potencia(-1, k) * potencia(x, 2 * k)) / factorial(2 * k));
  72.        suma += ax;
  73.        k++;
  74.        if (ax < 0) {
  75.            ax = -ax;
  76.        }
  77.    }    while (ax > error);
  78.    return (suma);
  79. }
  80.  
  81. float senoh(float x) {
  82.    float z = 0;
  83.  
  84.    z = (exponencial(x) - (1 / exponencial(x))) / 2;
  85.    return (z);
  86. }
  87.  
  88. float coseh(float x) {
  89.    float z = 0;
  90.  
  91.    z = (exponencial(x) + (1 / exponencial(x))) / 2;
  92.    return (z);
  93. }
  94.  
  95. int main(int argc, char** argv) {
  96.  
  97.    float x, seno, coseno, tang, cot, sec, csc, senh, cosh;
  98.    int opcion;
  99.  
  100.    printf("Programa que calcula funciones trigonometricas\n");
  101.    printf("Selecciona una opcion del menu\n");
  102.    printf("1. Seno\n");
  103.    printf("2. Coseno\n");
  104.    printf("3. Tangente\n");
  105.    printf("4. Cotangente\n");
  106.    printf("5. Secante\n");
  107.    printf("6. Cosecante\n");
  108.    printf("7. Seno Hiperbolico\n");
  109.    printf("8. Coseno Hiperbolico\n\n");
  110.    scanf("%d", &opcion);
  111.  
  112.    switch (opcion) {
  113.        case 1:
  114.            printf("\nSeno\n");
  115.            printf("Dame un numero ");
  116.            scanf("%f", &x);
  117.            seno = sen(x);
  118.            printf("El seno de %.2f es %.2f", x, seno);
  119.            break;
  120.        case 2:
  121.            printf("Coseno\n");
  122.            printf("Dame un numero ");
  123.            scanf("%f", &x);
  124.            coseno = cos(x);
  125.            printf("El coseno de %.2f es %.2f", x, coseno);
  126.            break;
  127.        case 3:
  128.            printf("Tangente\n");
  129.            printf("Dame un numero ");
  130.            scanf("f", &x);
  131.            tang = sen(x)/cos(x);
  132.            printf("La tangente de %.2f es %.2f", x, tang);
  133.            break;
  134.        case 4:
  135.            printf("Cotangente\n");
  136.            printf("Dame un numero\n");
  137.            scanf("%f", &x);
  138.            tang = sen(x)/cos(x);
  139.            cot = 1/tang;
  140.            printf("La cotangente de %.2f es %.2f", x, cot);
  141.            break;
  142.        case 5:
  143.            printf("Secante\n");
  144.            printf("Damen un numero\n");
  145.            scanf("%f", &x);
  146.            sec = 1/cos(x);
  147.            printf("La secante de %.2f es %.2f", x,sec);
  148.            break;
  149.        case 6:
  150.            printf("Cosecante\n");
  151.            printf("Damen un numero\n");
  152.            scanf("%f", &x);
  153.            csc = 1/sen(x);
  154.            printf("La cosecante de %.2f es %.2f", x,csc);
  155.            break;
  156.        case 7:
  157.            printf("Seno hipoerbolico\n");
  158.            printf("Dame un numero\n");
  159.            scanf("%f", &x);
  160.            senh = senoh(x);
  161.            printf("El seno hiporbolico de %.2f es %.2f", x, senh);
  162.            break;
  163.        case 8:
  164.            printf("Coseno hipoerbolico\n");
  165.            printf("Dame un numero\n");
  166.            scanf("%f", &x);
  167.            cosh = coseh(x);
  168.            printf("El coseno hiporbolico de %.2f es %.2f", x, cosh);
  169.            break;
  170.        default: printf("Esa opcion no esta en el menu");
  171.    }
  172.  
  173.  
  174.  
  175.    return (EXIT_SUCCESS);
  176. }
  177.  


En línea

engel lex
Moderador Global
***
Desconectado Desconectado

Mensajes: 15.514



Ver Perfil
Re: Ayuda con programa en c de funciones trigonometricas
« Respuesta #1 en: 20 Febrero 2017, 23:16 pm »

sin caer en detalle lo primero que veo es

linea 53
Citar
int k;

y luego usas "k" e incrementas sin inicializar

Citar
ax = (((potencia(-1, k) * potencia(x, 2 * k)) + 1) / factorial((2 * k) + 1));
        suma += ax;
        k++;


así que "k" puede valer cualquier cosa


En línea

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

Desconectado Desconectado

Mensajes: 1


Ver Perfil
Re:
« Respuesta #2 en: 20 Febrero 2017, 23:16 pm »

Hola... No intente compilar tu código pero algo así debería de funcionar
Código
  1. #include<stdio.h>
  2. float exp(float x, float y){
  3.    if (y>1){
  4.        return x*exp(x,y-1);
  5.    }
  6.    else{
  7.        return x;
  8.    }
  9. }
  10. float fact(float x){
  11.    if (x>2){
  12.        return x*fact(x-1);
  13.    }
  14.    else{
  15.        return x;
  16.    }
  17. }
  18. void main(){
  19.    int opt;
  20.    float x,y;
  21.    printf("Seleccione un numero\n");
  22.    printf("1) Exponente\n");
  23.    printf("2) Factorial\n");
  24.    printf("3) Seno\n");
  25.    scanf("%d",&opt);
  26.    switch(opt){
  27.        case 1:
  28.        printf("ingrese la base\n");
  29.        scanf("%f",&x);
  30.        printf("ingrese el exponente\n");
  31.        scanf("%f",&y);
  32.        printf("El resultado es: %2f",exp(x,y));
  33.        break;
  34.        case 2:
  35.        printf("Ingrese un numero\n");
  36.        scanf("%f",&x);
  37.        printf("El resultado es: %2f",fact(x));
  38.        break;
  39.        case 3:
  40.        printf("Ingrese el lado opuesto\n");
  41.        scanf("%f",&x);
  42.        printf("Ingrese la hipotenusa\n");
  43.        scanf("%f",&y);
  44.        printf("El resultado es: %2f",x/y);
  45.        break;
  46.    }
  47. }


Enviado desde mi LG-H542 mediante Tapatalk
« Última modificación: 21 Febrero 2017, 00:23 am por tonyhxc31 » En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines