Нахождение значения выражения с использованием указателя на функцию - C (СИ)
Формулировка задачи:
Помогите решить.Суть в нахождении значения выражения с использованием указателя на функцию.При вызове функции расчет пишет ошибку:отсутствуют экзэмпляры соответствующие списку аргументво.
Листинг программы
- #include <stdio.h>
- #include <iostream>
- #include <stdlib.h>
- float raschet(float ,float ,float ,float ,float ,float(*)(float));
- float integral(float ,float ,float ,float ,float ,float );
- int main()
- {float h,z;
- z=raschet( //?????
- printf(" Интеграл:z=%f",z);
- }
- float integral(float a,float b,float n,float h,float x,float s)
- {double a,b,n,h,x,s;
- a=3.0;
- b=5.0;
- n=200.0;
- h=(b-a)/n;
- x=a;
- s=0;
- s=s+h*((pow(x,3)+3*x-1)+(pow((x+h),3)+3*(x+h)-1))/2;
- x=x+h;
- return s;
- }
- float raschet(float x,float s,float h,float b,float (*integral) (float))
- {if (x<(b-h))
- {s=s+h*((pow(x,3)+3*x-1)+(pow((x+h),3)+3*(x+h)-1))/2;
- x=x+h;
- }
- else
- {printf(" Интеграл:z=%f",s);
- }
- return s;
- }
Решение задачи: «Нахождение значения выражения с использованием указателя на функцию»
textual
Листинг программы
- #include <stdio.h>
- #include <stdlib.h>
- #include <math.h>
- typedef float(*Function)(float, float, float);
- float integral(float, float, float);
- float raschet(float, float, float, Function);
- int main() {
- printf("Интеграл: z = %f", raschet(3.0, 5.0, 200.0, integral));
- return 0;
- }
- float integral(float a, float b, float n) {
- float h = (b - a) / n;
- return h * ((pow(a, 3) + 3 * a - 1) + (pow((a + h), 3) + 3 * (a + h) - 1)) / 2;
- }
- float raschet(float a, float b, float n, Function func) {
- return func(a, b, n);
- }
Объяснение кода листинга программы
- Включаем необходимые заголовочные файлы для работы с функциями, математическими операциями и указателями на функции.
- Создаем тип данных для указателя на функцию с именем Function, которая принимает три аргумента типа float и возвращает значение типа float.
- Определяем функцию с именем integral, которая принимает три аргумента типа float и вычисляет интеграл по методу трапеции.
- Определяем функцию с именем raschet, которая принимает четыре аргумента типа float и вызывает функцию, на которую указывает указатель func, с передачей ей аргументов a, b и n.
- В функции main() вызываем функцию raschet, передавая ей аргументы 3.0, 5.0, 200.0 и указывая функцию integral в качестве указателя на функцию.
- Результат вычисления функции raschet выводим на экран с помощью функции printf().
- Возвращаем 0 из функции main(), чтобы указать, что программа успешно завершилась.
- В функции integral() вычисляем значение h, которое представляет собой шаг сетки для вычисления интеграла.
- Вычисляем значения a^3 + 3a - 1 и (a+h)^3 + 3(a+h) - 1, которые используются для вычисления интеграла по методу трапеции.
- Вычисляем сумму этих двух значений и умножаем ее на h, чтобы получить приближенное значение интеграла.
- Возвращаем полученное значение интеграла из функции integral().
- В функции raschet() передаем аргументы a, b и n в функцию, на которую указывает указатель func.
- Возвращаем результат вызова функции, на которую указывает указатель func, из функции raschet().
- В функции main() передаем аргументы 3.0, 5.0 и 200.0 в функцию raschet() и выводим результат на экран.
- В функции raschet() вызываем функцию integral с аргументами a, b и n.
- В функции integral() вычисляем значение h.
- Вычисляем значения a^3 + 3a - 1 и (a+h)^3 + 3(a+h) - 1.
- Вычисляем сумму этих двух значений и умножаем ее на h.
- Возвращаем полученное значение интеграла из функции integral().
- В функции raschet() возвращаем результат вызова функции integral() из функции raschet().
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д