Решение систем дифференциальных уравнений при помощи неявной схемы Адамса 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. Организация меню

Страница:  1  2  3  4  5  6  7  8 


Другие рефераты на тему «Математика»:

Поиск рефератов

Последние рефераты раздела

Copyright © 2010-2024 - www.refsru.com - рефераты, курсовые и дипломные работы