85822 (Решение систем дифференциальных уравнений при помощи неявной схемы Адамса 3-го порядка), страница 2
Описание файла
Документ из архива "Решение систем дифференциальных уравнений при помощи неявной схемы Адамса 3-го порядка", который расположен в категории "". Всё это находится в предмете "математика" из , которые можно найти в файловом архиве . Не смотря на прямую связь этого архива с , его также можно найти и в других разделах. Архив можно найти в разделе "курсовые/домашние работы", в предмете "математика" в общих файлах.
Онлайн просмотр документа "85822"
Текст 2 страницы из документа "85822"
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
#include
#include
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= new char [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))='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шину стека*/
struct st *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
#include
#include
#include
#include
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 { 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 { 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. Организация меню