Series2->Clear();
Series3->Clear();
Series4->Clear();
Series1->AddXY(x,y[0]);
Series2->AddXY(x,2*x);
Series3->AddXY(x,y[1]);
Series4->AddXY(x,exp(x));
fm[0]=fpr(u,y[0],y[1],x);
fm[1]=fpr(v,y[0],y[1],x);
for(i=0;i<2;i++)
{
yp[i]=y[i]+h/2*fm[i];
}
x=x+h/2;
fp1[0]=fpr(u,yp[0],yp[1],x);
fp1[1]=fpr(v,yp[0],yp[1],x);
for(i=0;i<2;i++)
{
yp[i]=y[i]+h/2*fp1[i];
}
fp2[0]=fpr(u,yp[0],yp[1],x);
fp2[1]=fpr(v,yp[0],yp[1],x);
for(i=0;i<2;i++)
{
yp[i]=y[i]+h*fp2[i];
}
x=x+h/2;
fp[0]=fpr(u,yp[0],yp[1],x);
fp[1]=fpr(v,yp[0],yp[1],x);
for(i=0;i<2;i++)
{
yp[i]=y[i]+h*(fm[i]+2*fp1[i]+2*fp2[i]+fp[i])/6;
}
fp[0]=fpr(u,yp[0],yp[1],x);
fp[1]=fpr(v,yp[0],yp[1],x);
for(n=2;n<=nx;n++)
{
for(i=0;i<2;i++)
{
y[i]=yp[i]+h*(1.5*fp[i]-0.5*fm[i]);
};
x=x+h;
f[0]=fpr(u,y[0],y[1],x);
f[1]=fpr(v,y[0],y[1],x);
k=0;
do
{
k=k+1;
de=0;
for(i=0;i<2;i++)
{
z=yp[i]+h*(5*f[i]+8*fp[i]-fm[i])/12;
d=fabs(z-y[i]);
y[i]=z;
if(d>de) de=d;
};
f[0]=fpr(u,y[0],y[1],x);
f[1]=fpr(v,y[0],y[1],x);
} while(de>e);
for(i=0;i<2;i++)
{
yp[i]=y[i];
fm[i]=fp[i];
fp[i]=f[i];
}
Series1->AddXY(x,y[0]); //выводграфиковфункций
Series2->AddXY(x,2*x);
Series3->AddXY(x,y[1]);
Series4->AddXY(x,exp(x));
if((fmod(n,np)==0)&&s==0) { //вывод результатов
Memo1->Lines->Add(FloatToStrF(x,ffFixed,5,3)+" "+FloatToStrF(y[0],ffFixed,8,4)+" "+FloatToStrF(2*x,ffFixed,8,4)+" "+FloatToStrF(y[0]-2*x,ffFixed,8,4)+" "+FloatToStrF(y[1],ffFixed,8,4)+" "+FloatToStrF(exp(x),ffFixed,8,4)+" "+FloatToStrF(y[1]-exp(x),ffFixed,8,4));
p=1;
o=1;
}
else o=0;
}
nx=nx*2;
np=np*2;
time1=GetTickCount();
if (o==1) {
Memo1->Lines->Add("------------------------------------------------------");
Memo1->Lines->Add("Времявыполнения:"+FloatToStrF((time1-time)/1000.,ffFixed,6,3)+"мс");
}
if(CheckBox1->Checked) y[1]=exp(x);
} while(fabs(y[1]-exp(x))>e);
j++;
s=1;
if(p==1&&(fmod(j,2)==0))
{
Memo1->Lines->Add("Рекомендуемоезначениешагасетки :"+FloatToStrF(nx/2,ffFixed,6,0));
Edit1->Text=FloatToStrF(nx/2,ffFixed,5,0);
Edit2->Text=FloatToStrF(np/2,ffFixed,5,0);
s=0;
p=0;
}
free(u); // освобождение памяти
free(v);
free(u1);
free(v1);
}
//---------------------------------------------------------------------------
void __fastcall TForm1::N4Click(TObject *Sender) //Сохранениевфайл
{
SaveDialog1->Title="Save File";
if (SaveDialog1->Execute())
{
Memo1->Lines->SaveToFile(SaveDialog1->FileName);
}
}
//---------------------------------------------------------------------------
void __fastcall TForm1::N3Click(TObject *Sender) // Загрузкаизфайлафункций
{
if(OpenDialog1->Execute())
{
FILE *fl;
fl=fopen(OpenDialog1->FileName.c_str(),"r");
char ch=getc(fl);
char str[30];
str[0]='\0';
int k=0;
while (ch!=EOF)
{
if(ch=='=') { k++;
while (ch!=';'){ ch=getc(fl);
int n=strlen(str);
str[n]=ch;
str[n+1]='\0';
}
switch (k)
{
case 1: Edit8->Text=str; str[0]='\0'; break;
case 2: Edit9->Text=str; break;
}
}
ch=getc(fl);
}
fclose(fl);
}
}
//---------------------------------------------------------------------------
Модуль преобразования строки в обратную польскую запись (Unit3.cpp):
//---------------------------------------------------------------------------
#pragma hdrstop
#include "Unit3.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#include<stdio.h>
#include<stdlib.h>
#include<conio.h>
struct st {
char c;struct st *next;
};
struct st *push(struct st *,char);
char DEL(struct st **);
int PRIOR(char);
char* opz(char *a)
{
struct st *OPERS=NULL;
char *outstring= newchar [30]; // динамическое выделение памяти
int k,point;
k=point=0;
while((*(a+k)!='\0')&&(*(a+k)!='=')){
if(*(a+k)==')'){
while((OPERS->c)!='(')
outstring[point++]=DEL(&OPERS);
DEL(&OPERS);
}
if((*(a+k)>='a'&&(*(a+k))<='z')||(*(a+k)>='1'&&(*(a+k))<='9'))
outstring[point++]=*(a+k);
if(a[k]=='(')
OPERS=push(OPERS,'(');
if(*(a+k)=='+'||*(a+k)=='-'||*(a+k)=='/'||*(a+k)=='*'||*(a+k)=='^'){
if(OPERS==NULL)
OPERS=push(OPERS,*(a+k));
else
if(!PRIOR(OPERS->c))
OPERS=push(OPERS,*(a+k));
else{
while((OPERS!=NULL)&&(PRIOR(OPERS->c)>=PRIOR(*(a+k))))
outstring[point++]=DEL(&OPERS);
OPERS=push(OPERS,*(a+k));
}
}
k++;
}
while(OPERS!=NULL)
outstring[point++]=DEL(&OPERS);
outstring[point]='\0';
return outstring;
}
struct st *push(struct st *HEAD,char a) /* Функция записывает в стек,на веpшинукотоpого указывает HEAD,символ a.
Возвpащает указатель на новую веpшину стека*/
{
struct st *PTR;
PTR=new st ();
PTR->c=a;
PTR->next=HEAD;
return PTR;
}
char DEL(struct st **HEAD){ /* функцияудаляетсимволсвеpшиныстека. Возвpащает удаляемый символ.
Изменяет указатель на веpшину стека*/
structst *PTR;
char a;
if(*HEAD==NULL)
return '\0';
PTR=*HEAD;
a=PTR->c;
*HEAD=PTR->next;
free(PTR);
return a;
}
int PRIOR(char a) //функция возвpащает пpиоpитет аpифметической опеpации
{
switch(a){
case '^':
return 4;
case '*':
case '/':
return 3;
case '-':
case '+':
return 2;
case '(':
return 1;
}
}
Модуль расчёта функции, записанной в постфиксной форме (Unit5.cpp):
//---------------------------------------------------------------------------
#pragma hdrstop
#include "Unit5.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#include<conio.h>
#include<stdio.h>
#include<math.h>
#include<stdlib.h>
#include<string.h>
double fpr(char *str,double u, double v,double x)
{
int n,i,d=0;
double th[30],g[30];
n=strlen(str) ;
for (i=0;i<n;i++)
{
switch (*(str+i))
{
case 'x': *(th+i)=x; break;
case 'u': *(th+i)=u; break;
case 'v': *(th+i)=v; break;
case 'e': *(th+i)=exp(1); break;
case '1':
case '2':
case '3':
case '4':
case '5':
case '6':
case '7':
case '8':
case '9':
case '0': char p[1]; p[0]=str[i]; th[i]=atoi(p); break;
}
}
for(i=0;i<n;i++)
{
if(*(str+i)=='x'||*(str+i)=='v'||*(str+i)=='u'||*(str+i)=='e'||*(str+i)=='1'||*(str+i)=='2'||*(str+i)=='3'||*(str+i)=='4'||*(str+i)=='5'||*(str+i)=='6'||*(str+i)=='7'||*(str+i)=='8'||*(str+i)=='9')
{
*(g+d)=*(th+i);
d++;
}
else {
switch (*(str+i))
{
case '-': *(g+d-2)=*(g+d-2)-*(g+d-1); break;
case '+': *(g+d-2)=*(g+d-2)+*(g+d-1); break;
case '/': *(g+d-2)=*(g+d-2)/(*(g+d-1)); break;
case '*': *(g+d-2)=*(g+d-2)*(*(g+d-1)); break;
case '^': *(g+d-2)=pow(*(g+d-2),*(g+d-1)); break;
};
d--;
}
}
return *g;
}
Приложение 3
Рис 1. Общий вид программы
Рис 2. Организация решения системы
Рис 3. Организация меню