چند برنامه ++C
C++
برنامه اي كه عبارت dx/dt , dy/dt , dz/dt رو كه هركدام به صورت تابعي 4 متغيره F(t,x,y,z) هستن رو از ورودي بگيره و با روش هاي اويلر اويلر مرتبه 2 و رانگا كوتا مرتبه 4 , با دقت خوبي حل كنه .
#include#include#include#include#include#include#include #include//*************************************************************************************void end(void);struct stack {int top;char item[100];}s;int empty (stack *s) {if (s->top==-1) return (1);return (0);};void push(stack *s , char x) {if (s->top==99) {cout <<"stack over flow";exit(1); }s->item[++s->top]=x;};char pop(stack *s) {if (empty(s)) {cout<<"stack under flow";exit(1); }return (s->item[s->top--]);}//struct stacks {int top;double item[100];}ss;int emptys (stacks *ss) {if (ss->top==-1) return (1);return (0);};void pushs(stacks *ss , float x) {if (ss->top==99) {cout <<"stack over flow";exit(1); }ss->item[++ss->top]=x;};double pops(stacks *ss) {if (emptys(ss)) {cout<<"stack under flow";exit(1); }return (ss->item[ss->top--]);}//********************void coment(void){clrscr();clrscr();}/////////////////////stack s1;int oprand(char op2){char op1;if (!empty(&s1)){ // akharin amalgare daron estak pop meshavad ta baop1 = pop(&s1); // amalgare op2 az lahaze taghadom moghayese shavads1.top++;} // sepass be top 1 vahed ezafe mishavad ta amalgare op1 dar stack az beyn naravadelse return 1; // agar stack khali bashad 1 bar migardadif ((op1=='(')||(op2=='(')) return 1 ; // olaviyate parantez dar har sharayeti.else if (isalpha(op1)&&isalpha(op2))return 1; // in ghesmat marbot be tavabeyeelse if (isalpha(op2))return 1; // sin cos ... astelse if (isalpha(op1)&&!isalpha(op2))return 0;else if((op1=='^')&&(op2=='^')) return 1; //olaviyat hale marbot be tavanelse if((op1!='^')&&(op2=='^')) return 1;else if ((op1=='^')&&(op2!='^'))return 0;else if ((op1=='-')&&(op2!='-')&&(op2!='+')) return 1; // olaviyat haye digarelse if (op1=='/')return 0;else if ((op1!='*')&&(op2=='*'))return 1;else if ((op1=='+')&&(op2!='-')&&(op2!='+')) return 1;else if ((op1=='/')&&(op2!='-')&&(op2!='+')&&(op2!='/')) return 1;else return 0; }////////////////// tabdile infix be postfixvoid intopost (char postfix[],int *arraysize){char infix[100];s1.top=-1;cin>>infix; // vorode infixint i=0; // shomarandeye ebarate infixint j=0; // shomarandeye ebarate postfix . dar nahayat tol ebarate postfix ra moshakhas khahad kardchar op2='0';do{ // baraye tavabeye sin cos... az horofe s c .. estefade shodeh ais// if (i>=1) // in if az baghiye ye horof migozarad// if (isalpha(infix[i-1])&&(infix[i-1]!='x'))// i=i+2;if (isdigit(infix[i])) // adad ba har raghami tavasote in shart vared mishavandpostfix[j++]=infix[i++];else if ((infix[i]=='x')||(infix[i]=='t')||(infix[i]=='y')||(infix[i]=='z')) // x niz manand 1 adad vared mishavadpostfix[j++]=infix[i++];// agar shorote bala bar gharar nabashand momken ast ma be amalgar resideh imelse {postfix[j++]=' '; // inja adad tavasote yek fasele joda mishavand va adade 1 va chandop2=infix[i++]; // chand raghami ghabele shenasaye baraye ghesmate arzyabi mishavand// in shart baresi mikonad ke aya - marbot be adad ast ya yek amalgar astif ((op2=='-') && (!isalpha(infix[i-2]))&&(!isdigit(infix[i-2]))&&(infix[i-2]!=')')) {postfix[j++]=op2; } //agar amalgar nabashad varede ebarate postfix mishavadelse {int z;do{ // in halghe ta zamani ejra mishavad ke amalgare hazer varede stack shavad// ke agar nashavad amalgar haye daron stack dar sorate haghe//taghadome bala pop meshavandz=1;if (op2==')') // badan residegi mishavadbreak;if (oprand(op2)) { // agar 1 bargardad yani amalgar hazer sharayete// vorod be stack ra daradpush(&s1,op2);z=0; }else { // agar 0 bargashte bashad amalgare daron stack pop meshavad// va dar postfix gharar migiradpostfix[j++]=' ';postfix[j++]=pop(&s1);postfix[j++]=' '; }}while (z!=0); // hamantor ke gofte shod vaghti az halghe kharej mishavad// ke amalgare op2 hatman push shode bashadint s;if (op2==')') { // in dastor dar bala niz amade bod ke break shod .// aknon be on residegi meshavaddo {s=pop(&s1); //motmaen hastim ke stack khali nistif (s!='(') {postfix[j++]=' '; // ta residan be akharin'(' hameye amalgar//ha pop meshavandpostfix[j++]=s;}postfix[j++]= ' ';}while(s!='('); } // agar '(' angah kharej meshavad}}}while((infix[i]!=61)&&(infix[i]!=0)); //0='nul' 61 = '=' moshakhas konandeye payane ebarat infixint a=1; // aknon ebarate infix be payan residee . hal// darsorate vojode amalgar dar stack ,pop va dar postfix jay migiraddo {if (!empty(&s1)) {postfix[j++]=' ';postfix[j++]=pop(&s1);postfix[j++]=' ';}else a=0;}while (a!=0);// printf("\n\n\n This is your postfix expresstion :\n\n ");// printf("\n\n *arraysize=j; // chon be j niyaz darim an ra barmigardanim be main()// clrscr();// ghesmate arzyabiye ebarate postfixstacks s2;// ebarate postfix ,tole an va meghdari ke bayad be jaye moteghayere barname bashad ,//be tabe ersal mishavandfloat arzyabi (char post[],int arraysize,double x,double y,double z, double t){s2.top=-1; //inja be stack az jense adad niyaz mandimint k=1,sign=1; // badan mifahmin ina chi anfloat s=0;for(int i=0;iif ((post[i]=='-')&&isdigit(post[i+1]))// dar in sorat '-' amalgar nist chon ma dar bala beyne hameye amalgar ha//white spase vared kardimsign=-1; // pas ma ba yek adade manfi robe ro hastimelse if (isalpha(post[i])&&(post[i]!='x')&&(post[i]!='y')&&(post[i]!='z')&&(post[i]!='t'));// dar in sorat ma hatman ba sin cos tan... robe ro hastim// in tavabe amalgarhaye hastand ke 1 amalvand darand/* float a;a=pops(&s2); // lazem be tozih nistswitch (post[i]) {case 's'://pushs(&s2,sin(a));break;case 'c'://pushs(&s2,cos(a));break;case 't'://pushs(&s2,tan(a));break;case 'k'://pushs(&s2,1/tan(a));break;case 'l':{ if (a>0) // log dar a<=0 tarif nashodepushs(&s2,log(a));}break;}} */else if (!isalpha(post[i])&&!isdigit(post[i])&&!(post[i]==' ')) {// dar in sorat ma ba amalgar haye + - *... robe royimfloat a,b;a=pops(&s2); // ke do amalvand darandb=pops(&s2);switch (post[i]) {case '+': pushs(&s2,a+b) ;break;case '-': pushs(&s2,b-a) ;break;case '*': pushs(&s2,a*b) ;break;case '/': pushs(&s2,b/a) ;break;case '^': pushs(&s2,pow(b,a)) ;break;}}else if (post[i]=='x') // agar sahrayete bala nabashand shayad ma be//machhol moadele reside bashim{ pushs(&s2,x*sign);// sign har meghdari ke dashte, digar estefade shodeesign=1; }else if (post[i]=='y') // agar sahrayete bala nabashand shayad ma be//machhol moadele reside bashim{ pushs(&s2,y*sign);// sign har meghdari ke dashte, digar estefade shodeesign=1; }else if (post[i]=='z') // agar sahrayete bala nabashand shayad ma be//machhol moadele reside bashim{ pushs(&s2,z*sign);// sign har meghdari ke dashte, digar estefade shodeesign=1; }else if (post[i]=='t') // agar sahrayete bala nabashand shayad ma be//machhol moadele reside bashim{ pushs(&s2,t*sign);// sign har meghdari ke dashte, digar estefade shodeesign=1; }// pas an ra baraye meghdare badi amade mikonimelse if (post[i]==' ') {// beyne tamame ajzaye postfix ma hade aghal 1 white space vojod darad// hal agar sharayete bala etefagh nayouftade bashad, tanha yek halate digar mojod ast// ehtemalan ma az yek adade n raghami ke dar s zakhire mishavad obor karde em// pas alamti ham ke khande shode 'sign' marbot be in bode .// an ra dar alamatash zarb kardee va push mikonim sepas sign s va k ra// amadeye adade badi mikonimif (k!=1) // in shart be ma etminan midahad ke az yek adad gozashteim// chon momken ast chand white space poshte ham bashand .pushs(&s2,s*sign) ;sign=1;s=0;k=1; }// k faghat 1 flag ast agar 0 bashad yani white space hazer//dorost bad az yek adad amade astelse { // aknon digar hatman be yek adad resideh im pas k=0.k=0; // hamon tor ke i be tartib khande mishavad ,dar s zakhire shodeh// va * 10 arghame an ra misazads=s*10+(post[i]-'0');}}//dar inja stack faghat dar yek sorat emkane khali bodan darad va an//hengami ast ke yek add manfidar log khande shode bashadif (emptys(&s2)) return 1000; //1000 az mahdodeye screen kharej ast va asari dar namayesh nadaradreturn pops(&s2) ; } //1000 faghat bekhatere tabeye log ke adade manfi//nemigirad estefade shode ast//******************double oiler (char X[],char Y[], char Z[], int Xsize,int Ysize,int Zsize ,float a,float b){ float h=(a+b)/100;double x=0,y=0,z=0,xtemp=0,ytemp=0,ztemp=0,t=a;while (t<=b){ytemp=y+h*arzyabi(Y,Ysize,x,y,z,t);xtemp=x+h*arzyabi(X,Xsize,x,y,z,t);ztemp=z+h*arzyabi(Z,Zsize,x,y,z,t);y=ytemp;x=xtemp;z=ztemp;t=t+h;if (t<=b) cout<<"Oiler t="<}return a; }void oiler2 (char X[],char Y[], char Z[], int Xsize,int Ysize,int Zsize ,float a,float b){ float h=(a+b)/100;double x=0,y=0,z=0,xtemp=0,ytemp=0,ztemp=0,xstar,ystar,zstar,t=a;while (t<=b){if(t>b) break;ystar=y+h*arzyabi(Y,Ysize,x,y,z,t);xstar=x+h*arzyabi(X,Xsize,x,y,z,t);zstar=z+h*arzyabi(Z,Zsize,x,y,z,t);ytemp=y+(h/2)*(arzyabi(Y,Ysize,x,y,z,t)+arzyabi(Y,Ysize,xstar,ystar,zstar,t+h));xtemp=x+(h/2)*(arzyabi(X,Xsize,x,y,z,t)+arzyabi(X,Xsize,xstar,ystar,zstar,t+h));ztemp=z+(h/2)*(arzyabi(Z,Zsize,x,y,z,t)+arzyabi(Z,Zsize,xstar,ystar,zstar,t+h));y=ytemp;x=xtemp;z=ztemp;t=t+h;if (t<=b) cout<<"Oiler2 t="<}}void RK4(char X[],char Y[], char Z[], int Xsize,int Ysize,int Zsize ,float a,float b){ float h=(a+b)/100;double x=0,y=0,z=0,xtemp=0,ytemp=0,ztemp=0,k1,k2,k3,k4,l1,l2,l3,l4,m1,m2,m3,m4,ystar,zstar,t=a;while(t<=b){l1=h*arzyabi(Y,Ysize,x,y,z,t);k1=h*arzyabi(X,Xsize,x,y,z,t);m1=h*arzyabi(Z,Zsize,x,y,z,t);l2=h*arzyabi(Y,Ysize,x+k1/2,y+l1/2,z+m1/2,t+h/2);k2=h*arzyabi(X,Xsize,x+k1/2,y+l1/2,z+m1/2,t+h/2);m2=h*arzyabi(Z,Zsize,x+k1/2,y+l1/2,z+m1/2,t+h/2);l3=h*arzyabi(Y,Ysize,x+k2/2,y+l2/2,z+m2/2,t+h/2);k3=h*arzyabi(X,Xsize,x+k2/2,y+l2/2,z+m2/2,t+h/2);m3=h*arzyabi(Z,Zsize,x+k2/2,y+l2/2,z+m2/2,t+h/2);l4=h*arzyabi(Y,Ysize,x+k2,y+l2,z+m2,t+h);k4=h*arzyabi(X,Xsize,x+k2,y+l2,z+m2,t+h);m4=h*arzyabi(Z,Zsize,x+k2,y+l2,z+m2,t+h);ytemp=y+(l1+2*l2+2*l3+l4)/6;xtemp=x+(k1+2*k2+2*k3+k4)/6;ztemp=z+(m1+2*m2+2*m3+m4)/6;y=ytemp;x=xtemp;z=ztemp;t=t+h;if(t<=b) cout<<"RK4 t="<}}int main () {// cout<char postfixX[100],postfixY[100],postfixZ[100],flag='0';int a,b,arraysizeX,arraysizeY,arraysizeZ;double y,z,t,x;coment();do { //be khatere halgheye tekrare (Y,N) estefade shode astcout<<"\n\n\n Enter dX/dt : ";intopost(postfixX,&arraysizeX);cout<<"\n\n Enter dY/dt : ";intopost(postfixY,&arraysizeY);cout<<"\n\n Enter dZ/dt : ";intopost(postfixZ,&arraysizeZ); // inja faghat meghdari ke dar arraysize barmigardad mohem astint i;for (i=0;icout <cout<for (i=0;icout <cout<for (i=0;icout <cout<cout<<" \n\n\n\n enter [a,b] you must enter a<=0 & b>=0 . ";cout <<"\n for example if you enter ' -3 6 ' , then a=-3 and b=6 .\n enter (a,b): ";cin >>a>>b;oiler(postfixX,postfixY,postfixZ,arraysizeX,arraysizeY,arraysizeZ,a,b);cout<<"\n\n edame..." ;getch();oiler2(postfixX,postfixY,postfixZ,arraysizeX,arraysizeY,arraysizeZ,a,b);cout<<"\n\n edame..." ;getch();RK4(postfixX,postfixY,postfixZ,arraysizeX,arraysizeY,arraysizeZ,a,b);//be ezaye har meghdare x ,y mohasebe mishavadcout<<"\n\n edame..." ;// ama dar rasm faghat i va y ;getch();do{ // in halghe be komake DO WHILE ghabli meayad ta karbar// hatman kalameye Y ya N ra vared konadcout<<"\n \n tekrar(Y/N)? ";cin >>flag;if(flag=='n')break;// be ezaye har karakter gheyr az N,Y in halghe hey tekrar meshavad// agar N vared shod ,break va az halgheye avali khareg mishavad// agar Y vared shod ,az halgheye dovom kharej shode va halgheye aval ra tekrar mekonad}while(flag!='y');}while(flag!='n');end(); // akhtetamiyee seda zade mishavadreturn 0; }void end(void){getch();} // THE END.// khoda azashon nagzaree harki ke az code in barnamee soe estefade konee
وبلاگ پورتال تخصصی دانشجویان عمران در مسیر اعتلای فرهنگ عمران نیاز به یاری شما مهندسین ودانشجویان عزیز دارد، با ارائه نکات ظریف از طرف شما سعی در بهبود این وبگاه داریم.