Пример выполнения задания

Написать программу вычисления выбранной функции, вид которой в свою очередь передается в качестве параметра в функцию вывода (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));

}

Результат выполнения программы:


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: