Kero1989
Newbie | Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору Прошу вашей помощи так как не могу разобраться с лабой, которую уже сдавать завтра(( Сделал прогу но с моей функцией она почему то не работает.Должен получиться элипсовидный ответ после компиляции и запуска а получается ответ где много много знаков после запятой.В какой то строчке что то не правильно, а что понять не могу.Помогите пожалуйста((Писалось все на С++ #include <stdio.h> #include <conio.h> #include <math.h> #define X0 -1 #define Y0 -1 #define P 8 #define Q 8 #define DX -2 #define DY -2 #define H 0.5 #define E 0.00001 struct node { double z; char s; }; double f(double x, double y) { return x*x-y*y; } double phi(double x, double y) { return 2*fabs(x)+fabs(y); } char D(double x,double y) { return (x*x/9)+(y*y/16)<1; } double G(double x) { return 4*sqrt(fabs(1-x*x/9)); } void main() { int i,j,n,m,k,lx,ly; double **u,x,y,dx,dy,du; node **u0; clrscr(); n=ceil(P/H); m=ceil(Q/H); u0=new node*[n+1]; u=new double*[n+1]; for(i=0;i<=n;i++) { u0[i]=new node[m+1]; u[i]=new double[m+1]; } for(j=0;j<=m;j++) for(i=0;i<=n;i++) { x=X0+i*H; y=Y0+j*H; if(D(x,y)) { u0[i][j].z=1.0; u0[i][j].s='D'; } else { dx=fabs(G(y)-fabs(x)); dy=fabs(G(x)-fabs(y)); if(dx<H || dy<H) { dx<=dy ? u0[i][j].z=phi(G(y),y) : u0[i][j].z=phi(x,G(x)); u0[i][j].s='G'; } else { u0[i][j].z=0.0; u0[i][j].s=' '; } } } do { du=0; for(j=0;j<=m;j++) for(i=0;i<=n;i++) { x=X0+i*H; y=Y0+j*H; if(u0[i][j].s=='D') { u[i][j]=(u0[i-1][j].z+u0[i+1][j].z+ u0[i][j-1].z+u0[i][j+1].z-H*H*f(x,y))/4.0; if(fabs(u[i][j]-u0[i][j].z)>E) du=1; } if(u0[i][j].s=='G') { dx=fabs(G(y)-fabs(x)); dy=fabs(G(x)-fabs(y)); if(dx==0 || dy==0) { u[i][j]=u0[i][j].z; continue; } if(dx<=dy) { x>0 ? k=-1 : k=1; u[i][j]=(phi(G(y),y)*H-u0[i+k][j].z*dx)/(H-dx); } else { y>0 ? k=-1 : k=1; u[i][j]=(phi(x,G(x))*H-u0[i][j+k].z*dy)/(H-dy); } } } for(j=0;j<=m;j++) for(i=0;i<=n;i++) if(u0[i][j].s=='D' || u0[i][j].s=='G') u0[i][j].z=u[i][j]; } while(du==1); lx=double(DX-X0)/P*n; ly=double(DY-Y0)/Q*m; printf("y \\ x |"); for(i=0;i<=8;i++) printf("\t%5.2f",DX+i*H); printf("\n"); for(i=0;i<79;i++) printf("-"); for(j=0;j<=8;j++) { printf("\n%5.2f |",DY+j*H); for(i=0;i<=8;i++) { if(u0[lx+i][ly+j].s=='D' || u0[lx+i][ly+j].s=='G') printf("\t%5.2f",u0[lx+i][ly+j].z); else printf("\t"); } } for(i=0;i<=n;i++) { delete u0[i]; delete u[i]; } delete[] u0; delete[] u; printf("\n\nPress any key to continue..."); getch(); } |