Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 12.04.2011, 22:23   #1
Kero
Новичок
Джуниор
 
Регистрация: 28.02.2011
Сообщений: 2
Вопрос Нужен элипсовидный ответ:-(

Прошу вашей помощи так как не могу разобраться с лабой, которую уже сдавать((
Сделал прогу но с моей функцией она почему то не работает:-(Должен получиться элипсовидный ответ, в какой то строчке что то не правильно, а что понять не могу:-(Помогите пожалуйста((Писалось все на С++
#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();
}

Последний раз редактировалось Kero; 12.04.2011 в 22:38.
Kero вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Задачка, нужен ответ на вопрос А jamesscreen Свободное общение 1 15.08.2009 18:58
SetFocus!!!Нужен ответ!Творится,что-то непонятное!!! Alexij Общие вопросы Delphi 4 14.06.2008 14:59
Ответ LeoN Общие вопросы Delphi 0 07.09.2007 20:02