Исправьте код с указателями на функции - C (СИ)

Узнай цену своей работы

Формулировка задачи:

Исправте, пожалуйста, код в С, где я допустил ошибку???
#include <iostream>
#include <cmath>
using namespace std;
typedef double (*pfun)(double);
double fun_sin(double x)
{
    double sum=sin(x);
    return sum;
}
double fun_cos(double x)
{
    double sum=cos(x);
    return sum;
}
double fun_tan(double x)
{
    double sum=tan(x);
    return sum;
}
double search (double, double, double, int);
int main ()
{
    double x, E;
    printf("Enter Е: ");   // printf("Menu:\n");
    scanf("%f", &E);               // scanf("%d", &sel);
    int action;
    printf("Change function:\n1.y=sin(x).\n2.y=cos(x).\n3.y=tan(x).\n");
    scanf("%d", &action);
    double a, b;
    printf("Enter a "); // левая граница...
    scanf("%d", &a);
    printf("Enter b ");
    scanf("%d", &b);
    x=search (a, b, E, action-1);
    printf("Result: ", &x, "\n");
    
    return 0;
}
 
double search (double a, double b, double E, int i)
{   
    pfun fun[]={&fun_sin, &fun_cos, &fun_tan};
    if (fabs(a-b)<=E)
        return (a+b)/2;
    if (fun[i](a)<fun[i](b)){
    if (fun[i]((a+b)/2)>0)
        return search (a, (a+b)/2, E, i);
    else return search ((a+b)/2, b, E, i);
    }
    else if (fun[i]((a+b)/2)>0)
        return search ((a+b)/2, b, E, i);
    else return search (a, (a+b)/2, E, i);
}

Решение задачи: «Исправьте код с указателями на функции»

textual
Листинг программы
#include <stdio.h>
#include <math.h>
typedef double (*pfunc)(double);
double func_sin(double x)
{
    double sum=sin(x);
    return sum;
}
double func_cos(double x)
{
    double sum=cos(x);
    return sum;
}
double func_tan(double x)
{
    double sum=tan(x);
    return sum;
}
double search (double, double, double, int);
int main ()
{
    double x, E;
    printf("Enter Е: ");
    scanf("%lf",&E);
    int action;
    printf("Choose function:\n1.y=sin(x).\n2.y=cos(x).\n3.y=tan(x).\n");
    scanf("%d",&action);
    double a, b;
    printf("Enter a: ");
    scanf("%lf",&a);
    printf("Enter b:");
    scanf("%lf",&b);
    x=search (a, b, E, action-1);
    printf("Result is %lf\n",x);
    return 0;
}
 
double search (double a, double b, double E, int i)
{   
    pfunc func[]={func_sin, func_cos, func_tan};
    if (fabs(a-b)<=E)
        return (a+b)/2;
    if (func[i](a)<func[i](b)){
    if (func[i]((a+b)/2)>0)
        return search (a, (a+b)/2, E, i);
    else return search ((a+b)/2, b, E, i);
    }
    else if (func[i]((a+b)/2)>0)
        return search ((a+b)/2, b, E, i);
    else return search (a, (a+b)/2, E, i);
}

Объяснение кода листинга программы

  1. Программа находит функцию из заданного набора (sin, cos, tan) с помощью которой будет осуществляться поиск минимума или максимума в заданном диапазоне [a, b] с шагом E.
  2. Ввод начинается с выбора действия (ввод функции), затем ввод аргументов для функции (a, b) и шаг E.
  3. Затем происходит вызов функции search, которая осуществляет поиск минимума или максимума в заданном диапазоне с помощью выбранной функции и заданного шага E.
  4. Результатом работы программы является найденное значение x, которое выводится на экран.

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

12   голосов , оценка 4.083 из 5
Похожие ответы