📄 grary1.h
字号:
}
void load_AnyArr_file(bb1& b,int i01,int i02,int i1,int i2,string dosfile)
{FILE * ff;
int i,j;
if(i1<i01||i2>i02)
return;
i=0;
if((ff=fopen(dosfile,"r"))==NULL)
{
cout<<"file "<< dosfile<<"can't open!"<<endl;
exit(0);
}
i=i1;
while ( (i<=i2) && (fscanf(ff,"%5d",&b[i])!=EOF))
i=i+1 ;
if(i<i2)
for (j=i;j<=i2;j++)
b[j]=0;
fclose(ff);
}
void load_AnyArr(bb1& b,int i01,int i02,int i1,int i2)
{ if(i1<i01||i2>i02)
return;
char drive[3];
char dir[25];
char file[20];
char ext[8];
unsigned char ss[60]="grary1\\*.arr";
unsigned char ss1[60]="从文件读数组, 文件名:";
boolean selected;
Loadquestion(ss1,ss,selected);
if (selected)
{
_splitpath(ss,drive,dir,file,ext);
boolean bool=(boolean)strcmpi(ext,".arr");
if(bool!=0)
{
Error("the file can't be loaded");
exit(0);
}
else
load_AnyArr_file(b,i01,i02,i1,i2,ss);
}
}
void save_AnyArr_file(bb1& b,int i01,int i02,int i1,int i2,string dosfile)
{ if(i1<i01||i2>i02)
return;
FILE * ff;
int i;
pointer p;
i=0;
if((ff=fopen(dosfile,"w"))==NULL)
{
cout<<"file "<<dosfile<<"can't write!"<<endl;
exit(0);
}
for (i=i1;i<=i2;i++)
fprintf(ff,"%5d",b[i] );
fclose(ff);
}
void save_AnyArr(bb1& b,int i01,int i02,int i1,int i2)
{ if(i1<i01||i2>i02)
return;
unsigned char ss[60]="grary1\\*.arr";
boolean CanOrNo;
Savequestion("存储文件到",ss,CanOrNo);
if (CanOrNo)
save_AnyArr_file(b,i01,i02,i1,i2,ss);
}
void disp_AnyArr(bb1& b,int i01,int i02,int i1,int i2)
{ if(i1<i01||i2>i02)
return;
GrpArr ag;
int i;
create_grp_AnyArr(ag,(HorOrLev)1,(d_or_i)1,true,b,"BB",i01,i02,i1,i2);
initial_GrpArr(ag);
move_GrpArr_to(ag,sx1(ag),getmaxy()/2);
window(1,1,80,4);
}
void input_AnyArr(bb1& b,int i01,int i02,int i1,int i2)
{ if(i1<i01||i2>i02)
return;
GrpArr ag;
create_grp_AnyArr(ag,(HorOrLev)1,(d_or_i)1,true,b,"AnyArr",i01,i02,i1,i2);
initial_Arr2(ag);
move_GrpArr_to(ag,sx1(ag),getmaxy()/2);
input_GrpArr(ag);
disp_AnyArr(b,i01,i02,i1,i2);
}
void modi_AnyArr(bb1& b,int i01,int i02,int i1,int i2)
{ if(i1<i01||i2>i02)
return;
GrpArr ag;
create_grp_AnyArr(ag,(HorOrLev)1,(d_or_i)1,true,b,"AnyArr",i01,i02,i1,i2);
initial_Arr2(ag);
move_GrpArr_to(ag,sx1(ag),getmaxy()/2);
modi_GrpArr(ag);
disp_AnyArr(b,i01,i02,i1,i2);
}
void rand_AnyArr(bb1& b,int i01,int i02,int i1,int i2,int range1,int range2)
{ if(i1<i01||i2>i02)
return;
GrpArr ag;
int i,vv;
if (range1>range2)
{ i=range1;range1=range2;range2=i; }
for(i=i1;i<=i2;i++)
{ do
vv=random(range2);
while(vv<range1);
b[i]=vv;
}
create_grp_AnyArr(ag,(HorOrLev)1,(d_or_i)1,true,b,"b",i01,i02,i1,i2);
initial_Arr2(ag);
move_GrpArr_to(ag,sx1(ag),getmaxy()/2);
modi_GrpArr(ag);
disp_AnyArr(b,i01,i02,i1,i2);
}
void Calnew(int& x,int& y,int key,int dxl,int dyl,int dxr,int dyr)
{int i,x0,y0;
i=0;
while ( (i<dirnum)&&(key!=mv[i][2] ) )
i=i+1;
x0=x+mv[i][0]*mvstep;
y0=y+mv[i][1]*mvstep;
if ( (x0>getmaxx()-dxr)|| (x0<dxl) || (y0>getmaxy()-dyr) || (y0<dyl) )
cout<<'\007'<<endl;
else
{ x=x0;
y=y0;
}
}
void Mvcur(int& x,int& y,int& dxl,int& dyl,int& dxr,int& dyr,ffield& ff)
{ int key;
boolean funckey;
putimage(x,y,ff,1);
do
{
Getkey(key,funckey);
if(!(key==10||key==11||key==12||key==13) )
if (key==up||key==down||key==left||key==right||key==bigleft||key==bigright)
{ putimage(x,y,ff,1);
Calnew(x,y,key,dxl,dyl,dxr,dyr);
putimage(x,y,ff,1);
}
else
cout<<'\007'<<endl;
}
while( !(key==10||key==11||key==12||key==13) );
}
void Mmmbtr(int& curx,int& cury,GrpArr& ag)
{ int dxl,dyl,dxr,dyr;
Menu("Selest the position of the First Element");
dxl=20;
dyl=20;
dxr=20;
dyr=20;
Mvcur(curx,cury,dxl,dyl,dxr,dyr,ag.datafild[ag.ho_lev]);
}
void move_GrpArr(GrpArr& ag)
{int curx,cury;
coord(ag,ag.sub1,curx,cury);
Mmmbtr(curx,cury,ag);
move_GrpArr_to(ag,curx,cury);
}
void move1_GrpArr(GrpArr& ag)
{int curx,cury,xl,yl,xr,yr;
GrpArr_range(ag,xl,yl,xr,yr);
coord(ag,ag.sub1,curx,cury);
Mmmbtr(curx,cury,ag);
Clear_range(xl,yl,xr,yr);
if( (ag.ho_lev==0)&&(ag.decinc==-1) )
cury=cury-ag.h;
move_GrpArr_to(ag,curx,cury);
}
void set_GrpArr_range(GrpArr& ag)
{int x,y;
x=70;
y=70;
Mmmbtr(x,y,ag);
set_GrpArr_to(ag,x,y);
}
void handle_GrpArr_event(pmenunode& pmenu, GrpArr& ag)
{int xl,yl,xr,yr,randmin,randmax;
boolean sv;
unsigned char ss[60];
int sb1,sb2,decinc,holv,dssb,agh,agw;
switch(pmenu->command)
{
case ComInputGrpArr: { input_GrpArr(ag); } break;
case ComRandGrpArr: { Inputintinwnd(20,4,60,"设置随机数范围, 下限: ",randmin);
Inputintinwnd(20,4,60,"设置随机数范围, 上限: ",randmax);
rand_GrpArr(ag,randmin,randmax);
} break;
case ComModiGrpArr: modi_GrpArr(ag); break;
case ComReadGrpArr: load_GrpArr(ag); break;
case ComSaveGrpArr: save_GrpArr(ag); break;
case ComSetrange: set_GrpArr_range(ag); break;
case ComDisp: display_GrpArr(ag); break;
case ComMove1: { Inputstrinwnd(20,3,60,"Move to New Position ",ss);
GrpArr_range(ag,xl,yl,xr,yr);
move1_GrpArr(ag);
} break;
case ComMove2: { Inputstrinwnd(20,4,60,"Move2Disp Bitre ",ss);
move_GrpArr(ag);
} break;
case ComEditsub1GrpArr: { sb1=ag.sub1;
Editintinwnd(20,4,60,"数组下标下限: ",sb1);
if (sb1<ag.asub1 )
{
Error("Sub. Rangr Error!");
return ;
}
else
if( sb1!=ag.sub1)
{ ag.sub1=sb1;
display_GrpArr(ag);
}
}break;
case ComEditsub2GrpArr: { sb2=ag.sub1+ag.count-1;
Editintinwnd(20,4,60,"数组下标上限: ",sb2);
if ( (sb2<ag.sub1)|| (sb2>ag.asub2) )
{ Error("Sub. Rangr Error!");
return;
}
else
if (sb2!=ag.sub1+ag.count-1)
{ ag.count=sb2-ag.sub1+1;
display_GrpArr(ag);
}
}break;
case ComHorLevGrpArr: { holv=ag.ho_lev;
Editintinwnd(20,4,64,"水平或垂直显示:0--垂直显示, 1--水平显示 ",holv);
if (! (holv==0||holv==1) )
{
Error("Input Rangr Error!");
return;
}
else if (ag.ho_lev!=holv)
{ ag.ho_lev=(HorOrLev)holv;
setcolor(WHITE);
setfillpattern(fillmode,fillcolor);
if( ag.havefd==true)
farfree(ag.datafild[ag.fdsub]);
ag.havefd=true;
ag.fdsub=ag.ho_lev;
bar(1,1,ag.w-2,ag.h-2);
ag.size=imagesize(1,1,ag.w-2,ag.h-2);
ag.datafild[ag.fdsub]=farmalloc(ag.size);
getimage(1,1,ag.w-2,ag.h-2,ag.datafild[ag.fdsub]);
putimage(1,1,ag.datafild[ag.fdsub],1);
ag.dx=ag.ho_lev*ag.w;
ag.dy=(1-ag.ho_lev)*ag.h;
ag.sx=25*(1+ag.decinc)+( (getmaxx()-200)*ag.ho_lev+ 50 )/2*(1-ag.decinc);
ag.sy=25*(1+ag.decinc)+( (getmaxy()-150)*(1-ag.ho_lev)+50)/2*(1-ag.decinc) ;
display_GrpArr(ag);
}
}
break;
case ComDisSubGrpArr: { dssb=ag.dsb;
Editintinwnd(20,4,64,"是否显示下标: 0--不显示下标 1--显示下标 ",dssb);
if (!(dssb==0||dssb==1) )
{
Error("Input Rangr Error!");
return;
}
else if (dssb!=ag.dsb )
{ ag.dsb=boolean(dssb==1);
display_GrpArr(ag);
}
}break;
case ComDecIncGrpArr: if(ag.dsb==1)
{ decinc=(ag.decinc+1)/2;
Editintinwnd(20,4,64,"下标按增或减方向: 0--递减, 1--递增 ",decinc);
if (! (decinc==0||decinc==1) )
{ Error("Input Rangr Error!");
return;
}
else if (decinc!=(ag.decinc+1)/2 )
{ ag.decinc=(d_or_i)(2*decinc-1);
ag.sx=25*(1+ag.decinc)+( (getmaxx()-200)*ag.ho_lev+ 50 )/2*(1-ag.decinc);
ag.sy=25*(1+ag.decinc)+( (getmaxy()-150)*(1-ag.ho_lev)+50)/2*(1-ag.decinc) ;
display_GrpArr(ag);
}
}
else
;
break;
case ComSetHighGrpArr: { agh=ag.h;
Editintinwnd(20,4,60,"设置元素显示高度点数[8..50]: ",agh);
if (! (agh>=8&&agh<=50) )
{ Error("Size is Too big or Small!");
return;
}
else if (agh!=ag.h )
{ ag.h=agh;
setcolor(WHITE);
setfillpattern(fillmode,fillcolor);
if( ag.havefd==true)
farfree(ag.datafild[ag.fdsub]);
ag.havefd=true;
ag.fdsub=ag.ho_lev;
bar(1,1,ag.w-2,ag.h-2);
ag.size=imagesize(1,1,ag.w-2,ag.h-2);
ag.datafild[ag.ho_lev]=farmalloc(ag.size);
getimage(1,1,ag.w-2,ag.h-2,ag.datafild[ag.ho_lev]);
putimage(1,1,ag.datafild[ag.ho_lev],1);
ag.dx=ag.ho_lev*ag.w;
ag.dy=(1-ag.ho_lev)*ag.h;
display_GrpArr(ag);
}
}break;
case ComSetWidthGrpArr: { agw=ag.w;
Editintinwnd(20,4,60,"设置元素显示宽度点数[8..70]: ",agw);
if (!(agw>=8&&agw<=70) )
{ Error("Size is Too big or small!");
return;
}
else if (agw!=ag.w)
{ ag.w=agw;
setcolor(WHITE);
setfillpattern(fillmode,fillcolor);
if( ag.havefd==true)
farfree(ag.datafild[ag.fdsub]);
ag.havefd=true;
ag.fdsub=ag.ho_lev;
bar(1,1,ag.w-2,ag.h-2);
ag.size=imagesize(1,1,ag.w-2,ag.h-2);
ag.datafild[ag.ho_lev]=farmalloc(ag.size);
getimage(1,1,ag.w-2,ag.h-2,ag.datafild[ag.ho_lev]);
putimage(1,1,ag.datafild[ag.ho_lev],1);
ag.dx=ag.ho_lev*ag.w;
ag.dy=(1-ag.ho_lev)*ag.h;
display_GrpArr(ag);
}
}break;
}
}
void handle_GrpArr_menu( mymenu& GrpArrmenu1 , boolean& selectorno,
pmenunode& pmenu, GrpArr& ag)
{
Mymenu_selectmenu( GrpArrmenu1,pmenu,selectorno);
if (selectorno )
if ( Mymenu_issubmenuitem(GrpArrmenu1) )
{
Mymenu_disabledispsubmenu(GrpArrmenu1,pmenu->numofmenu/100);
handle_GrpArr_event(pmenu,ag);
}
else
return;
else
return ;
}
void get_GrpArr(GrpArr& ag)
{mymenu GrpArrmenu1;
pmenunode GrpMp=Newmenu1(
Newsubmenu1("设置显示方式",
Newmenu1(
Newitem1("设置元素显示高度","Set Elmn High [dots] ",0,0,ComSetHighGrpArr,
Newitem1("设置元素显示宽度","Set Elmn width [dots] ",0,0,ComSetWidthGrpArr,
nil))),
Newsubmenu1("输入数据",
Newmenu1(
Newitem1("逐个输入数据","Input data from KeyBoard ",0,0,ComInputGrpArr,
Newitem1("随机输入数据","Rand data to Array ",0,0,ComRandGrpArr,
Newitem1("修改原有数组","Modify Array data ",0,0,ComModiGrpArr,
Newitem1("从文件读入数组","Read Array data from file ",0,0,ComReadGrpArr,
Newitem1("存盘","Save Array data to file ",0,0,ComSaveGrpArr,
nil)))))),
Newsubmenu1("显示数组",
Newmenu1(
Newitem1("设定显示区域"," ",0,0,ComSetrange,
Newitem1("按原定位置显示","Display Array ",0,0,ComDisp,
Newitem1("平移显示 并清除原位","Move to New Position ",0,0,ComMove1,
Newitem1("平移显示 不清除原位","Move to New Position, Keep Old",0,0,ComMove2,
nil))))),
Newsubmenu1("返回",nil,nil)))));
Mymenu_init(GrpArrmenu1,GrpMp);
do
handle_GrpArr_menu(GrpArrmenu1,selectorno,pmenu,ag);
while(strcmp(pmenu->menuname,"返回") );
Mymenu_clearmainmenu(GrpArrmenu1);
Mymenu_reset_cursubmenu(GrpArrmenu1);
Mymenu_done(GrpArrmenu1);
}
void get_grp_Arrbb(GrpArr& ag,bb1& b)
{
create_grp_Arrbb(ag,(HorOrLev)1,(d_or_i)1,true,b,"BB",1,12);
initial_GrpArr(ag);
mymenu GrpArrmenu2;
pmenunode BMp=Newmenu1(
Newsubmenu1("设置显示方式",
Newmenu1(
Newitem1("数组下标下限"," ",0,0,ComEditsub1GrpArr,
Newitem1("数组下标上限"," ",0,0,ComEditsub2GrpArr,
Newitem1("水平或垂直显示"," ",0,0,ComHorLevGrpArr,
Newitem1("是否显示下标"," ",0,0,ComDisSubGrpArr,
Newitem1("下标按增或减方向"," ",0,0,ComDecIncGrpArr,
Newitem1("设置元素显示高度","Set Elmn High [dots] ",0,0,ComSetHighGrpArr,
Newitem1("设置元素显示宽度","Set Elmn width [dots] ",0,0,ComSetWidthGrpArr,
nil)))))))),
Newsubmenu1("输入数据",
Newmenu1(
Newitem1("逐个输入数据","Input data from KeyBoard ",0,0,ComInputGrpArr,
Newitem1("随机输入数据","Rand data to Array ",0,0,ComRandGrpArr,
Newitem1("修改原有数组","Modify Array data ",0,0,ComModiGrpArr,
Newitem1("从文件读入数组","Read Array data from file ",0,0,ComReadGrpArr,
Newitem1("存盘","Save Array data to file ",0,0,ComSaveGrpArr,
nil)))))),
Newsubmenu1("显示数组",
Newmenu1(
Newitem1("设定显示区域"," ",0,0,ComSetrange,
Newitem1("按原定位置显示","Display Array ",0,0,ComDisp,
Newitem1("平移显示 并清除原位","Move to New Position ",0,0,ComMove1,
Newitem1("平移显示 不清除原位","Move to New Position, Keep Old",0,0,ComMove2,
nil))))),
Newsubmenu1("返回",nil,nil)))));
Mymenu_init(GrpArrmenu2,BMp);
do
handle_GrpArr_menu(GrpArrmenu2,selectorno,pmenu,ag);
while( strcmp(pmenu->menuname,"返回") );
Mymenu_clearmainmenu(GrpArrmenu2);
Mymenu_reset_cursubmenu(GrpArrmenu2);
Mymenu_done(GrpArrmenu2);
}
void get_grp_AnyArr(GrpArr& ag, bb1& b,int i1,int i2)
{ create_grp_AnyArr(ag,(HorOrLev)1,(d_or_i)1,true,b,"Any",i1,i2,i1,Min(i1+18,i2) );
initial_GrpArr(ag);
mymenu GrpArrmenu2;
pmenunode BMp=Newmenu1(
Newsubmenu1("设置显示方式",
Newmenu1(
Newitem1("数组下标下限"," ",0,0,ComEditsub1GrpArr,
Newitem1("数组下标上限"," ",0,0,ComEditsub2GrpArr,
Newitem1("水平或垂直显示"," ",0,0,ComHorLevGrpArr,
Newitem1("是否显示下标"," ",0,0,ComDisSubGrpArr,
Newitem1("下标按增或减方向"," ",0,0,ComDecIncGrpArr,
Newitem1("设置元素显示高度","Set Elmn High [dots] ",0,0,ComSetHighGrpArr,
Newitem1("设置元素显示宽度","Set Elmn width [dots] ",0,0,ComSetWidthGrpArr,
nil)))))))),
Newsubmenu1("输入数据",
Newmenu1(
Newitem1("逐个输入数据","Input data from KeyBoard ",0,0,ComInputGrpArr,
Newitem1("随机输入数据","Rand data to Array ",0,0,ComRandGrpArr,
Newitem1("修改原有数组","Modify Array data ",0,0,ComModiGrpArr,
Newitem1("从文件读入数组","Read Array data from file ",0,0,ComReadGrpArr,
Newitem1("存盘","Save Array data to file ",0,0,ComSaveGrpArr,
nil)))))),
Newsubmenu1("显示数组",
Newmenu1(
Newitem1("设定显示区域"," ",0,0,ComSetrange,
Newitem1("按原定位置显示","Display Array ",0,0,ComDisp,
Newitem1("平移显示 并清除原位","Move to New Position ",0,0,ComMove1,
Newitem1("平移显示 不清除原位","Move to New Position, Keep Old",0,0,ComMove2,
nil))))),
Newsubmenu1("返回",nil,nil)))));
Mymenu_init(GrpArrmenu2,BMp);
do
handle_GrpArr_menu(GrpArrmenu2,selectorno,pmenu,ag);
while(strcmp(pmenu->menuname,"返回") );
Mymenu_clearmainmenu(GrpArrmenu2);
Mymenu_reset_cursubmenu(GrpArrmenu2);
Mymenu_done(GrpArrmenu2);
}
void get_Arrbb(bb1& b)
{GrpArr ag;
get_grp_Arrbb(ag,b);
}
void get_AnyArr(bb1& b,int i1,int i2)
{ GrpArr ag;
get_grp_AnyArr(ag,b,i1,i2);
}
void clear_space(GrpArr& ag)
{ ArrPtr p1,p2;
VarPtr q1,q2;
ArrPtr firstptr;
VarPtr firstvar;
p1=ag.firstptr;
q1=ag.firstvar;
while(p1!=nil)
{
p2=p1->next;
delete p1;
p1=p2;
}
while(q1!=nil)
{
q2=q1->next;
delete q1;
q1=q2;
}
}
#endif
#endif
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -