Написать программу вычисления выбранной функции, вид которой в свою очередь передается в качестве параметра в функцию вывода (Out _ Rez).
4.2.1. Создание оконного приложения
Панель диалога с полученными результатами представлена на рис. 4.1, а текст программы может иметь следующий вид:
...
#include "math.h"
//------------ Декларация типа указателя на функции -------------------------
typedef double (*TFun)(double);
//------------Декларации прототипов функций Пользователя ---------------
double fun1(double);
double fun2(double);
void Out_Rez(TFun, double, double, double, TMemo*);
//---------------------------------------------------------------------------
void __fastcall TForm1::FormCreate(TObject *Sender)
{
Edit1->Text="0,1"; Edit2->Text="3"; Edit3->Text="0,3";
Memo1->Clear(); Memo2->Clear();
RadioGroup1->ItemIndex=0;
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button1Click(TObject *Sender)
{
double a, b, h;
a = StrToFloat(Edit1->Text);
b = StrToFloat(Edit2->Text);
h = StrToFloat(Edit3->Text);
switch(RadioGroup1->ItemIndex) {
case 0: Out_Rez (fun1,a,b,h,Memo1); break;
case 1: Out_Rez (fun2,a,b,h,Memo2); break;
}
}
Рис. 4.1
//---------- Реализации функций Пользователя ---------------------------------
double fun1(double r){
return 2*exp(r*r);
}
double fun2(double r) {
|
|
return pow(sin(r), 2);
}
void Out_Rez (TFun f,double xn,double xk,double h,TMemo *mem) {
for(double x=xn; x<=xk; x+=h)
mem->Lines->Add(" x = "+FloatToStrF(x,ffFixed,8,2)+
" y = "+FloatToStrF(f(x),ffFixed,8,4));
}
4.2.2. Создание консольного приложения
Текст программы может выглядеть следующим образом:
...
typedef double (*TFun)(double); // Декларация типа указателя на функцию
double fun1(double); // Декларации прототипов функций
double fun2(double);
void Out_Rez (TFun,double,double,double);
void main()
{
double a, b, h;
puts("Input a,b,h"); scanf("%lf%lf%lf", &a, &b, &h);
puts("\n\t Function - 2*exp(x)"); Out_Rez (fun1,a,b,h);
puts("\n\t Function - sin(x)*sin(x)"); Out_Rez (fun2,a,b,h);
puts("\n Press any key... ");
getch();
}
//---------- Реализации функций пользователя ---------------------------------
double fun1(double r){
return 2*exp(r*r);
}
double fun2(double r) {
return pow(sin(r), 2);
}
void Out_Rez (TFun f,double xn,double xk,double h) {
for(double x=xn; x<=xk; x+=h)
printf(" x = %5.2lf, y = %8.4lf\n",x,f(x));
}
Результат выполнения программы: