Исправьте код с указателями на функции - 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); }
Объяснение кода листинга программы
- Программа находит функцию из заданного набора (sin, cos, tan) с помощью которой будет осуществляться поиск минимума или максимума в заданном диапазоне [a, b] с шагом E.
- Ввод начинается с выбора действия (ввод функции), затем ввод аргументов для функции (a, b) и шаг E.
- Затем происходит вызов функции search, которая осуществляет поиск минимума или максимума в заданном диапазоне с помощью выбранной функции и заданного шага E.
- Результатом работы программы является найденное значение x, которое выводится на экран.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д