Решение систем дифференциальных уравнений при помощи неявной схемы Адамса 3-го порядка
{
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= 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))<='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шину стека*/
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<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. Организация меню
Другие рефераты на тему «Математика»:
Поиск рефератов
Последние рефераты раздела
- Анализ надёжности и резервирование технической системы
- Алгоритм решения Диофантовых уравнений
- Алгебраическое доказательство теоремы Пифагора
- Алгоритм муравья
- Векторная алгебра и аналитическая геометрия
- Зарождение и создание теории действительного числа
- Вероятностные процессы и математическая статистика в автоматизированных системах