高分求救,大虾们帮帮忙那,谢了!

xiaofei1984 2005-06-14 09:12:06
这是一个用c写的自动化方面的程序。要求用用四阶(定步长)龙格--库塔法求解一个问题。
那些子程序应该没有问题,但就是不能运行(编译已通过)。不知道为什么,还有请大家推荐一个好的c编译软件。现在用的tc觉着不好。。
#define Max(a,b) (a>b)?a:b
#define BKLEFT 50
#define BKTOP 50
#define BKRIGHT 559
#define BKBOTTOM 419
#define LASTLI 155
#define LASTTP 410
#define LASTRT 470
#define LASTBM 445
#define ORGX BKLEFT+70
#define ORGY BKBOTTOM-55
#define XLEN 380
#define YLEN 310
#define FACT 20

#define CODE_NUM 30
#define item_width 5
#define space 4

#include <alloc.h>
#include <fcntl.h>
#include <graphics.h>
#include <io.h>
#include <process.h>
#include <dos.h>
#include <ctype.h>
#include <stdlib.h>
#include <stdio.h>
#include <conio.h>
#include <math.h>
#include <string.h>
#include <bios.h>

#define HAVEGRID 1
#define NOGRID 0
#define AUTODIV 1
#define MANULDIV 0
#define FIRSTTIME 0
#define NOTFIRST 1
#define MAXNUIT 15
#define MAXTITLE 40
#define VerySmall 1.0e-10
void win(int x,int y,int bkcolor,int color,char *content[],int chinese);
void inverse();
extern void outchinese(unsigned char text[],int x,int y,int color);
void output();
int matrix(int n);
extern float dscanf(int x0,int y0,int x1,int y1,int code_num);
int init_input();
int input();
int out_plot();
void sfz3();
int n,n1,q3,n0,n2,n3,n4,m,l,i,i1,e1,g1,q2,xx,j,k1,all_lines;
int n5,n6,n7,n8,order,various,length[2];
float zhi,q1,t,t1,t2;
float a[20][20],b[20],c[20],d[20][20],p[10][10],
f[20][20],g[20][20],s[20][20],r[20][20],v[20],
y[20],e[20][20],ye[200],te[40];
float h[7],lk[10][10],q[7][7],z[7];
char outfile[80];
double *xdata,*ydata;
extern float p[10][10];


void main()
{
int gdriver,gmode,ErrorCode;
gdriver=DETECT;

initgraph(&gdriver,&gmode,"");
ErrorCode = graphresult();
if( ErrorCode != grOk ){ /* Error occured during init */
printf(" Graphics System Error: %s\n", grapherrormsg( ErrorCode ) );
exit( 1 );
}
init_input();
input();
matrix(n);
for(i=1;i<=n;i++)
p[i][n+1]=p[i][0];
sfz3();
output();
spawnl(P_OVERLAY,"yfzMENU.EXE",NULL);

}


int init_input()
{
char code[10][12];
int ALL_CODES=9;
int order=11;
int CODES_LENGHT=8;
int x0,y0,item,old_item,key;
int step=0;
int offset[2]={90,45};
int length[2];
float x[30];
char *init[]={"状态变量初值",
"x[1]= \0",
"x[2]=",
"x[3]=",
"x[4]=",
"x[5]=",
"x[6]=",
"x[7]=",
"x[8]=",
"\0",};
char *content[]={"微分方程参数",
"仿真时间 \0",
"计算步长",
"输出点数",
"输出变量数",
"输出变量号",
"输出变量号",
"输出变量号",
"输出文件名",
"\0",};
char *help1[]={"↑↓:改变","\0"};
char *help2[]={"回车:确定","\0"};
char *help3[]={"F5:退出","\0"};
char *warning[2]={"退出程序吗?(y/n)","\0"};
for(j=0;j<=ALL_CODES;j++)
code[j][0]='\0';
length[0]=strlen(content[1]);
length[1]=strlen(init[1]);
do
{
item=old_item=0;
for(j=0;j<=ALL_CODES;j++)
code[j][0]='\0';
if(step==1)
{
if(order>0&&order<9)
{
strcpy(init[order+1],"\0");
}
ALL_CODES=order;
x0=(getmaxx()-(strlen(init[i])+2)*8-2)/2;
y0=(getmaxy()-((ALL_CODES+1)*20+4))/2;
cleardevice();
setbkcolor(BLACK);
win(500,160,DARKGRAY,WHITE,help1,1);
win(500,240,DARKGRAY,WHITE,help2,1);
win(500,320,DARKGRAY,WHITE,help3,1);
win(x0,y0,LIGHTGRAY,BLACK,init,0);
}
else if(step==0)
{
ALL_CODES=8;
x0=(getmaxx()-(strlen(content[1]+2)*8-2))/2;
y0=(getmaxy()-((3+1)*20+4))/2;
cleardevice();
setbkcolor(BLACK);
win(500,160,DARKGRAY,WHITE,help1,1);
win(500,240,DARKGRAY,WHITE,help2,1);
win(500,320,DARKGRAY,WHITE,help3,1);
win(x0,y0,LIGHTGRAY,BLACK,content,1);
}
j=0;
do
{
if(item!=old_item)
{
setfillstyle(SOLID_FILL,RED);
bar(x0+8+offset[step],y0+(item+1)*20-3,x0+(length[step]+2)*8-2-6,y0+(item+2)*20-6);
setcolor(YELLOW);
outtextxy(x0+8+offset[step]+2,y0+(item+1)*20+4,code[item]);
setfillstyle(SOLID_FILL,LIGHTGRAY);
bar(x0=8+offset[step],y0+(old_item+1)*20-3,x0+(length[step]+2)*8-2-6,y0+(old_item+2)*20-6);
outtextxy(x0+8+offset[step]+2,y0+(old_item+1)*20+4,code[old_item]);
old_item=item;
}
else
{
setfillstyle(SOLID_FILL,RED);
bar(x0+8+offset[step],y0+(item+1)*20-3,x0+(length[step]+2)*8-2-6,y0+(item+2)*20-6);
setcolor(YELLOW);
outtextxy(x0+8+offset[step]+2,y0+(item+1)*20+4,code[item]);
}
key=bioskey(0);
if((key&0xff)==0)
key=key>>8;
else
{
key=key&0xff;
if(j<CODES_LENGHT&&((key>='0'&&key<='9')||key=='.'||key=='e'||key=='E'||key>='a'&&key<='z'||key>='A'&&key<='Z'||key=='-'))
{
j++;
code[item][j-1]=key;
code[item][j]='\0';
}
}
if((key==0x08)&&(j>0))
{
code[item][j-1]='\0';
j--;
}
if(key==0x48)
{
if(item==0)
item=ALL_CODES-1;
else
item--;
j=0;
}
if(key==0x50)
{ if(item==ALL_CODES-1)
item=0;
else
item++;
j=0;
}
if(key==0x3f)
{
win(40,420,DARKGRAY,WHITE,warning,1);
key=bioskey(0);
if(key==0x1559||key==0x1579)
{
cleardevice();
exit(0);
}
else
{
setfillstyle(SOLID_FILL,getbkcolor());
bar(40,410,340,450);
key=0;
}
}
if(key==13)
{
if(step==1)
{
for(i=0;i<order;i++)
x[i+1]=atof(code[i]);

bar(x0,y0-8,500,470);
step=-1;
return 1;
}
if(step==0)
{
t1=atof(code[0]);
t2=atof(code[1]);
n2=atoi(code[2]);
n0=atoi(code[3]);
n6=atoi(code[4]);
n7=atoi(code[5]);
n8=atoi(code[6]);
strcpy(outfile,code[7]);
step=1;
ALL_CODES=order;
setfillstyle(SOLID_FILL,BLACK);
bar(x0,y0-8,500,470);
}
}
}while(key!=13);
}while(step==0||step==1);
}
...全文
103 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
clear117 2005-06-15
  • 打赏
  • 举报
回复
今早杂回事,怎看一帖就晕一回◎_◎
herryhuang 2005-06-14
  • 打赏
  • 举报
回复
请附上你的算法说明,程序设计,还有给程序加上注释
foochow 2005-06-14
  • 打赏
  • 举报
回复
我看晕了-_-
crystalbird 2005-06-14
  • 打赏
  • 举报
回复
干!整个程序都发过来了
yuanjian_530 2005-06-14
  • 打赏
  • 举报
回复
I don't know!
sunman1982 2005-06-14
  • 打赏
  • 举报
回复
晕。
xiaofei1984 2005-06-14
  • 打赏
  • 举报
回复
void inverse()
{
int k1,h1,c1,c2,c3,c4,f1,i,j;
n1=n;
f1=n1+1;
h1=n1+n1;
for(i=1;i<=n1;i++)
{
for(j=1;j<=n1;j++)
g[i][j]=s[i][j];
for(j=f1;j<=h1;j++)
g[i][j]=0;
}
for(i=1;i<=n1;i++)
{
j=i+n1;
g[i][j]=1;
}
for(k1=1;k1<=n1;k1++)
{
c1=k1+1;
if(k1!=n1)
{
c2=k1;
for(i=c1;i<=n1;i++)
if(abs(g[i][j])>abs(g[c2][k1]))
c2=i;
if(c2!=k1)
{
for(j=k1;j<=h1;j++)
{
c3=g[k1][j];
g[k1][j]=g[c2][j];
g[c2][j]=c3;
}
}
}
for(j=c1;j<=h1;j++)
g[k1][j]=g[k1][j]/g[k1][k1];
if(k1!=1)
{
c4=k1-1;
for(i=1;i<=c4;i++)
for(j=c1;j<=h1;j++)
g[i][j]=g[i][j]-g[i][k1]*g[k1][j];
if(k1==n1)continue;
}
for(i=c1;i<=n1;i++)
{
for(j=c1;j<=h1;j++)
g[i][j]=g[i][j]-g[i][k1]*g[k1][j];
}
}
for(i=1;i<=n1;i++)
for(j=1;j<=n1;j++)
{
k1=j+n1;
f[i][j]=g[i][k1];
}
}

void sfz3()
{
FILE *fw;
for(i=1;i<=n;i++)
v[i]=c[i]*p[i][n+1];
for(i=1;i<=n;i++)
{
for(j=i;j<=n;j++)
{
if(i==j)
s[i][j]=b[i];
else
s[i][j]=0;
}
}
for(i=1;i<=n;i++)
{
for(j=1;j<=n;j++)
e[i][j]=d[i][i]*p[i][j];
}
for(i=1;i<=n;i++)
{
for(j=1;j<=n;j++)
s[i][j]=s[i][j]-e[i][j];
}
for(i=1;i<=n;i++)
{
for(j=1;j<=n;j++)
{
if(i==j)
r[i][j]=a[i][i];
}
}
for(i=1;i<=n;i++)
{
for(j=1;j<=n;j++)
e[i][j]=c[i]*p[i][j];
}
for(i=1;i<=n;i++)
{
for(j=1;j<=n;j++)
r[i][j]=e[i][j]-r[i][j];
}
inverse();
for(i=1;i<=n1;i++)
for(j=1;j<=n1;j++)
{
a[i][j]=0;
for(k1=1;k1<=n1;k1++)
a[i][j]=a[i][j]+f[i][k1]*r[k1][j];
}
for(i=1;i<=n1;i++)
{
b[i]=0;
for(j=1;j<=n1;j++)
b[i]=b[i]+f[i][j]*v[j];
}
for(i=1;i<=n1;i++)
lk[i][0]=0;
h[1]=0;
h[2]=q1/2;
h[3]=q1/2;
h[4]=q1;
fw=fopen(outfile,"wt");
fprintf(fw," T ");
for(i=1;i<=n;i++)
fprintf(fw,"Y[%d] ",i);
fprintf(fw,"\n");
t=0;
m=0;
l=0;
fprintf(fw,"%f",t);
te[0]=t;
for(i=1;i<=n1;i++)
{
m++;
fprintf(fw,"%f",y[i]);
ye[m]=y[i];
}
fprintf(fw,"\n");
for(e1=1;e1<=q3;e1++)
{
for(g1=1;g1<=q2;g1++)
{
for(j=1;j<=4;j++)
{
for(i=1;i<=n1;i++)
{
q[i][j]=h[j]*lk[i][j-1];
z[i]=q[i][j]+y[i];
}
for(i=1;i<=n1;i++)
{
d[i][j]=0;
for(xx=1;xx<=n1;xx++)
d[i][j]=d[i][j]+a[i][xx]*z[xx];
lk[i][j]=d[i][j]+b[i]*zhi;
}
}
for(i=1;i<=n1;i++)
y[i]=y[i]+q1*(lk[i][1]+2*lk[i][2]+2*lk[i][3]+lk[i][4])/6;
t=t+q1;
}
fprintf(fw,"%f",t);
l++;
te[l]=t;
for(i=1;i<=n1;i++)
{
m++;
fprintf(fw,"%f",y[i]);
ye[m]=y[i];
}
fprintf(fw,"\n");
}
fclose(fw);
}
xiaofei1984 2005-06-14
  • 打赏
  • 举报
回复

int matrix(int n)
{
int j,k,old_j,old_k,return_num;
int start_x,start_y;
int key=0;
char buf[5];
float *item;
char *help1[]={"↑↓:改变", "\0"};
char *help2[]={"←→:改变", "\0"};
char *help3[]={"回车:确定", "\0"};
char *help4[]={"ESC:退出 ","\0"};
cleardevice();
setbkcolor(DARKGRAY);
setcolor(WHITE);
rectangle(2,2,637,477);
rectangle(4,4,635,475);
win(80,420,DARKGRAY,WHITE,help1,1);
win(220,420,DARKGRAY,WHITE,help2,1);
win(360,420,DARKGRAY,WHITE,help3,1);
win(500,420,DARKGRAY,WHITE,help4,1);
item=(float *)malloc(n*(n+1)*sizeof(float));
if(item==NULL)
{
printf("malloc error!");
return -1;
}
start_x=(640-((8*item_width)*(n+1)+n*space))/2;
start_y=(480-(n+n-1)*10)/2;
setcolor(WHITE);
line(start_x-10,start_y-5,start_x-10,start_y+(n+n-1)*10+5);
line(start_x+((8*item_width)*(n+1)+n*space)+10,start_y-5,start_x+((8*item_width)*(n+1)+n*space)+10,start_y+(n+n-1)*10+5);
outtextxy(start_x+20,start_y+(n+n-1)*10+15,"0");
for(j=0;j<n;j++)
{
setcolor(WHITE);
sprintf(buf,"%d",j+1);
outtextxy(start_x-25,start_y+j*20,buf);
outtextxy(start_x+((8*item_width)*(j+1)+j*space)+20,start_y+(n+n-1)*10+15,buf);
for(k=0;k<n+1;k++)
{
setcolor(YELLOW);
outtextxy(start_x+k*(8*item_width+space),start_y+20*j,"0.00");
item[j+k*(n+1)]=0.0;
}
}
outchinese("请输入连接矩阵 P",230,120,LIGHTCYAN);
k=0;
j=0;
old_j=0;
old_k=0;
setfillstyle(1,RED);
bar(start_x+k*(8*item_width+space),start_y+20*j-5,
start_x+k*(8*item_width)+(8*item_width),start_y+20*j+10);
outtextxy(start_x+k*(8*item_width+space),start_y+20*j,"0.00");
while(key!=0x011b)
{
if((key=bioskey(0))==0)
key=bioskey(0);
switch(key)
{
case 0x4b00:
if(j==0&&k==0)
{
j=n-1;
k=n;
}
else
{
if(k==0)
{
j--;
k=n;
}
else
k--;
}
break;
case 0x4d00:
if(j==n-1&&k==n)
{
j=0;
k=0;
}
else
{
if(k==n)
{
j++;k=0;
}
else
k++;
}
break;
case 0x4800:
if(j==0&&k==0)
{
j=n-1;
k=n;
}
else
{
if(j==0)
{
j=n-1;
k=k-1;
}
else
j--;
}
break;
case 0x5000:
if(j==n-1&&k==n)
{
j=0;
k=0;
}
else
{
if(j==n-1)
{
j=0;
k++;
}
else
j++;
}
break;
case 0x1c0d:
item[j+k*(n+1)]=dscanf(start_x+k*(8*item_width+space),start_y+20*j-5,
start_x+k*(8*item_width+space)+(8*item_width),start_y+20*j+10,item_width);
p[j+1][k]=item[j+k*(n+1)];
break;
case 0x011b:
return_num=-1;
break;
default:
break;
}
if(key==0x011b) break;
{
if(start_x>640||start_y>480)
{
start_y=(480-(n+n-1)*10)/2;
start_x=(640-((8*item_width)*(n+1)+n*space))/2;
}
setfillstyle(1,getbkcolor());
bar(start_x+old_k*(8*item_width+space),start_y+20*old_j-5,
start_x+old_k*(8*item_width+space)+(8*item_width),start_y+20*old_j+10);
sprintf(buf,"%5.2f",item[old_j+old_k*(n+1)]);
setcolor(YELLOW);
outtextxy(start_x+old_k*(8*item_width+space),start_y+20*old_j,buf);

if(start_x>640||start_y>480)
{
start_y=(480-(n+n-1)*10)/2;
start_x=(640-((8*item_width)*(n+1)+n*space))/2;
}
setfillstyle(1,RED);
bar(start_x+k*(8*item_width+space),start_y+20*j-5,
start_x+k*(8*item_width+space)+(8*item_width),start_y+20*j+10);
sprintf(buf,"%5.2f",item[j+k*(n+1)]);
setcolor(YELLOW);
outtextxy(start_x+k*(8*item_width+space),start_y+20*j,buf);
old_k=k;
old_j=j;
}
}
free(item);
return return_num;
}
xiaofei1984 2005-06-14
  • 打赏
  • 举报
回复
下面接着:

int input()
{
char code[8][12];
int ALL_CODES=5,order=n;
int CODES_LENGTH=9;
int x0,y0,item,old_item,key;
int step=0;
char *init[10]={"结构图系数参数",
"a[1][1]= \0",
"b[1]=",
"c[1]=",
"d[1][1]=",
"y[1]=",
"\0",};
char *help1[]={"↑↓:改变","\0"};
char *help2[]={"回车:确定","\0"};
char *help3[]={"F5:退出","\0"};
char *msg={"请输入环节#0参数"};
char *warning[2]={"推出程序吗? (y/n)","\0"};
i=1;
do
{
item=old_item=0;
for(j=0;j<ALL_CODES;j++)
code[j][0]='\0';
x0=(getmaxx()-(strlen(init[1])+2)*8-2)/2;
y0=(getmaxy()-((ALL_CODES+1)*20+4))/2;
cleardevice();
setbkcolor(BLACK);
win(500,180,DARKGRAY,WHITE,help1,1);
win(500,260,DARKGRAY,WHITE,help2,1);
win(500,340,DARKGRAY,WHITE,help3,1);
win(x0,y0,LIGHTGRAY,BLACK,init,0);
setcolor(WHITE);
setfillstyle(1,LIGHTRED);
bar(453,383,602,427);
rectangle(455,385,600,425);
msg[11]=msg[11]+1;
outchinese(msg,457,396,15);
j=0;
do
{
if(item!=old_item)
{
setfillstyle(SOLID_FILL,RED);
bar(x0+8+70,y0+(item+1)*20-3,x0+(strlen(init[1])+2)*8-2-6,y0+(item+2)*20-6);
setcolor(YELLOW);
outtextxy(x0+8+70+2,y0+(item+1)*20+4,code[item]);
setfillstyle(SOLID_FILL,LIGHTGRAY);
bar(x0+8+70,y0+(old_item+1)*20-3,x0+(strlen(init[1]+2))*8-2-6,y0+(old_item+2)*20-6);
outtextxy(x0+8+70+2,y0+(old_item+1)*20+4,code[old_item]);
old_item=item;
}
else
{
setfillstyle(SOLID_FILL,RED);
bar(x0+8+70,y0+(item+1)*20-3,x0+(strlen(init[1]+2))*8-2-6,y0+(item+2)*20-6);
setcolor(YELLOW);
outtextxy(x0+8+70+2,y0+(item+1)*20+4,code[item]);
}
key=bioskey(0);
if((key&0xff)==0)
key=key>>8;
else
{
key=key&0xff;
if(j<CODES_LENGTH&&((key>='0'&&key<='9')||key=='.'||key=='e'||key=='E'))
{
j++;
code[item][j-1]=key;
code[item][j]='\o';
}
}
if((key==0x08)&&(j<0))
{
code[item][j-1]='\0';
j--;
}
if(key==0x48)
{
if(item==0)
item=ALL_CODES-1;
else
item--;
j=0;
}
if(key==0x50)
{
if(item==ALL_CODES-1)
item=0;
else
item++;
j=0;
}
if(key==0x3f)
{
win(40,420,DARKGRAY,WHITE,warning,1);
key=bioskey(0);
if(key==0x1559||key==0x1579)
{
cleardevice();
exit(0);
}
else
{
setfillstyle(SOLID_FILL,getbkcolor());
bar(40,410,340,450);
key=0;
}
}
if(key==13)
{
if(step==0)
a[i][i]=atof(code[0]);
b[i]=atof(code[1]);
c[i]=atof(code[2]);
d[i][i]=atof(code[3]);
y[i]=atof(code[4]);
i++;
order--;
init[1][2]=init[1][5]=i+48;
init[2][2]=i+48;
init[3][2]=i+48;
init[4][2]=init[4][5]=i+48;
init[5][2]=i+48;
setfillstyle(SOLID_FILL,BLACK);
bar(x0,y0-8,500,470);
if(order<=0)
step=-1;
}
}while(key!=13);
}while(step==0);
return;
}

69,373

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧