📄 grary11.h
字号:
Put_elmn(ag,i,p->v,0);
Getkey(key,funckey);
}
void Move_grparr_var ( VarPtr& p,GrpArr& ag,int i)
{int x,y,x1,y1,hh;
if ((p->vx==-1) && (p->vy==-1))
Join_varptr_grparr(p,ag,i);
Vcrds(p,ag,1,i);
p->v=Elmn(ag,i);
Disp_varptr_data(p,ag);
Getkey(key,funckey);
}
void Put_elmn( GrpArr& ag,int i,datatype v,int hl)
{ int x1,y1,x2,y2,lenv,sg;string ss;
Disnodedat(ag,i);
Fifild(ag,i,1);
* Grp_elmn_ptr(ag,i)=v;
// {point_to(p,i,ag);}
// {v-->}
Coordtwo(ag,i,hl,x1,y1,x2,y2);
sg=Sgn(0,hl);
if (hl!=0)
{Arrow(x2,y2,x1,y1);
Convs(v,st);
lenv=strlen(st)*8/2*sg;
outtextxy(x2+(1-ag.ho_lev)*lenv,y2+ag.ho_lev*6*sg,st);
}
*Grp_elmn_ptr(ag,i)=v;
Trace1();
Disnodedat(ag,i);
Trace1();
}
boolean Cmp_elmn( GrpArr& ag,int i,int j,string op,int hl)
{int x1,y1,x2,y2,x3,y3,x4,y4;
boolean cmp_elmn;
datatype v1,v2;
boolean cmp;
Disnodedat(ag,i);
Disnodedat(ag,j);
Fifild(ag,i,1);
Fifild(ag,j,1);
Trace1();
Coordtwo(ag,i,hl,x1,y1,x2,y2);
Arrow(x2,y2,x1,y1);
Coordtwo(ag,j,hl,x3,y3,x4,y4);
Arrow(x4,y4,x3,y3);
//{line(x2,y2,x4,y4);}
Trace1();
Disnodedat(ag,i);
Disnodedat(ag,j);
v1=Elmn(ag,i);
v2=Elmn(ag,j);
cmp=(boolean)((!strcmp(op,"=")) && (v1==v2) || (!strcmp(op,">")) && (v1>v2));
cmp=(boolean)(cmp ||(!strcmp(op,"<"))&&(v1<v2)||(!strcmp(op,"<>")) &&(v1!=v2));
cmp=(boolean)(cmp || (!strcmp(op,"<=")) && (v1<=v2) ||(!strcmp(op,">=")) && (v1>=v2));
cmp_elmn=cmp;
return cmp_elmn; //{ write(cmp);}
}
void Move_elmn( GrpArr& ag,int i,int j,int hl)
{int x1,y1,x2,y2,x3,y3,x4,y4;
Disnodedat(ag,i);
Fifild(ag,i,1);
Disnodedat(ag,j);
Fifild(ag,j,1);
Trace1();
*Grp_elmn_ptr(ag,j)=Elmn(ag,i);
Coordtwo(ag,i,hl,x1,y1,x2,y2);
Arrow(x1,y1,x2,y2);
Coordtwo(ag,j,hl,x3,y3,x4,y4);
Arrow(x4,y4,x3,y3);
line(x2,y2,x4,y4);
Disnodedat(ag,j);
Fifild(ag,j,1);
Trace1();
Fifild(ag,i,1);
Fifild(ag,j,1);
}
void Xchg_elmn( GrpArr& ag,int i,int j,int hl)
{int x1,y1,x2,y2,x3,y3,x4,y4;
datatype te;
Disnodedat(ag,i);
Disnodedat(ag,j);
Fifild(ag,i,1);
Fifild(ag,j,1);
Coordtwo(ag,i,hl,x1,y1,x2,y2);
Arrow(x2,y2,x1,y1);
Coordtwo(ag,j,hl,x3,y3,x4,y4);
Arrow(x4,y4,x3,y3);
line(x2,y2,x4,y4);
Trace1();
te=Elmn(ag,i);
*Grp_elmn_ptr(ag,i)=Elmn(ag,j);
*Grp_elmn_ptr(ag,j)=te;
Disnodedat(ag,i);
Disnodedat(ag,j);
Fifild(ag,i,1);
Fifild(ag,j,1);
Trace1();
Fifild(ag,i,1);
Fifild(ag,j,1);
}
void Dec(int& x,int n)
{ x=x-n;
}
void Inc(int& x,int n)
{ x=x+n;
}
void Elmn_ptr_elmn( GrpArr& ag,int i,int hl)
{int x1,y1,x2,y2,x3,y3,x4,y4,j,dh,dw;
datatype te;
j=Elmn(ag,i);
if (j<Sub1(ag))
exit(0);
Coordtwo(ag,i,hl,x1,y1,x2,y2);
Coordtwo(ag,j,hl,x3,y3,x4,y4);
Coord(ag,i,x1,y1);
dh=Elmnhigh(ag)/4;
dw=Elmnwidth(ag)/4;
if (Hor_vert(ag)==horizon )
if (x1<x3)
{ Dec(x3,dw);
Dec(x4,dw);
}
else
{ Inc(x3,dw);
Inc(x4,dw);
}
else
if (y1<y3)
{ Dec(y3,dh);
Dec(y4,dh);
}
else
{ Inc(y3,dh);
Inc(y4,dh);
}
x1=x1+ag.w/2;
y1=y1+ag.h/2;
Arrow(x1,y1,x2,y2);
line(x2,y2,x4,y4);
Arrow(x4,y4,x3,y3);
/*{ coordtwo(ag,i,p^.hl,ix,iy,ixl,iyl);
ixl:=ixl+d*ho_lev*w div 4;iyl:=iyl+d*(1-ho_lev)*h div 4;
ix:=ix+d*ho_lev*w div 4; iy:=iy+d*(1-ho_lev)*h div 4;
if d=-1 then Arrow(ixl,iyl,ix,iy)
else Arrow(ix,iy,ixl,iyl);
} */
}
void Initial_arr1( GrpArr& ag)
{int may;
//setbkcolor(BLUE);
setcolor(WHITE);// DIRECTVIDEO:=FALSE;
setfillpattern(fillmode,fillcolor);
if( ag.havefd)
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]=malloc(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;
}
void Initial_arr2( GrpArr& ag)
{
/*if (ag.ho_lev==0)
{ ag.dx=0;ag.dy=16;ag.h=ag.dy;ag.w=30; }
else
{ ag.dx=step;ag.dy=0;ag.h=30;ag.w=ag.dx; }
*/
Initial_arr1(ag);
window(1,1,80,3);
textcolor(WHITE);
//{ textbackground(BLACK);}
ag.sx=25*(1+ag.decinc)+(getmaxx()-100)*(ag.ho_lev+50)/2*(1-ag.decinc);
ag.sy=25*(1+ag.decinc)+((getmaxy()-100)*(1-ag.ho_lev)+50)/2*(1-ag.decinc) ;
}
void Initial_grparr( GrpArr& ag)
{ Initial_arr2(ag) ; }
int Sx1( GrpArr& ag)
{ int sx1=ag.sx;
return sx1; }
int Sy1( GrpArr& ag)
{int sy1=ag.sy;
return sy1;
}
int Elmnhigh( GrpArr& ag)
{ int elmnhigh=ag.h;
return elmnhigh;
}
int Elmnwidth( GrpArr& ag)
{ int elmnwidth=ag.w;
return elmnwidth;
}
void Setelmnsize( GrpArr& ag,int hh,int ww)
{ //with ag do
ag.h=hh;
ag.w=ww;
}
int Sub1( GrpArr& ag)
{ int sub1=ag.sub1;
return sub1;
}
int Sub2( GrpArr& ag)
{ int sub2=ag.sub1+ag.count-1;
return sub2;
}
HorOrLev Hor_lev( GrpArr& ag)
{ HorOrLev Hor_Lev=ag.ho_lev;
return Hor_Lev;
}
HorOrLev Hor_vert( GrpArr& ag)
{ HorOrLev Hor_Vert=ag.ho_lev;
return Hor_Vert;
}
d_or_i Subdecorinc( GrpArr& ag)
{ d_or_i SubDecOrInc=ag.decinc;
return SubDecOrInc;
}
boolean Dispsub( GrpArr& ag)
{ boolean DispSub=ag.dsb;
return DispSub;
}
void Set_grparr_to( GrpArr& ag,int x,int y)
{// with ag do
ag.sx=x; ag.sy=y;
}
void Cur_onoff( GrpArr& ag,int i)
{ Cur_cover(ag,i,1); }
void Cur_cover( GrpArr& ag,int i,int orxor)
{ Fifild(ag,i,orxor); }
void Cur_elmn_onoff( GrpArr& ag,int i)
{ Cur_cover(ag,i,1); }
void Display_grparr_frame( GrpArr& ag)
{int x0=0,y0=0,x1=0,y1=0,x2=0,y2=0;
Grparr_range(ag,x1,y1,x2,y2);
// Clear_range(x1,x2,y1,y2);
setfillstyle(1,0);
bar(x1,y1,x2,y2);
//cout<<x1<<" "<<y1<<" "<<x2<<" "<<y2<<endl;
if (ag.dsb)
Dissub(ag);
Coord(ag,ag.count+(ag.decinc+1)/2+ag.sub1-1,xm,ym);
Coord(ag,(ag.decinc+1)/2+ag.sub1-1,x,y);
if (ag.decinc==1 )
rectangle(x,y,xm+ag.w*(1-ag.ho_lev),ym+ag.h*ag.ho_lev);
else
rectangle(xm,ym,x+ag.w*(1-ag.ho_lev),y+ag.h*ag.ho_lev);
for (i=ag.sub1 ;i<=ag.count+ag.sub1-1;i++)
{ Coord(ag,i,x,y);
line(x,y,x+ag.w*(1-ag.ho_lev),y+ag.h*ag.ho_lev);
}
Coord(ag,ag.sub1-1,x0,y0);
outtextxy(x0+ag.w/2,y0+ag.h/2,ag.name);
}
void Display_grparr_elmns( GrpArr& ag)
{
for( i=ag.sub1;i<=ag.count+ag.sub1-1;i++)
Disnodedat(ag,i);
}
void Display_grparr( GrpArr& ag)
{
Display_grparr_frame(ag);
Display_grparr_elmns(ag);
Hide_all_arrptr(ag);
}
void Display_arr( GrpArr& ag)
{ Display_grparr(ag);
}
void Move_grparr_to( GrpArr& ag,int x,int y)
{ ag.sx=x;
ag.sy=y;
Display_grparr(ag);
}
void Move_grparr_dxy( GrpArr& ag,int x,int y)
{ ag.sx=ag.sx+x;
ag.sy=ag.sy+y;
Display_grparr(ag);
}
void Move_grparr_mid( GrpArr& ag,int x0,int y0)
{int dx,dy,x01,x02,y01,y02;
Grparr_range(ag,x01,y01,x02,y02);
dx=x0-(x01+x02)/2;
dy=y0-(y01+y02)/2;
//{ ag.sx=ag.sx+dx;ag.sy=ag.sy+dy;}
Move_grparr_dxy(ag,dx,dy);
}
void Reset_grparr_elmn( GrpArr& ag,int i)
{// with ag do
*Grp_elmn_ptr(ag,i)=0;
Disnodedat(ag,i);
}
void Reset_grparr( GrpArr& ag)
{int i;
{ for( i=ag.sub1;i<=ag.count+ag.sub1-1;i++)
Reset_grparr_elmn(ag,i);
Display_grparr_frame(ag);
} }
void Clear_grparr_elmn( GrpArr& ag ,int i)
{
*Grp_elmn_ptr(ag,i)=0;
Fifild(ag,i,0);
Fifild(ag,i,1);
}
void Clear_grparr( GrpArr& ag)
{ int i;
for( i=ag.sub1;i<=ag.count+ag.sub1-1;i++)
Clear_grparr_elmn(ag,i);
Display_grparr_frame(ag);
}
void Reset_arrbb( bb1& b,int i1,int i2)
{ int i;
for( i=i1;i<=i2 ;i++)
b[i]=0;
}
void Load_arraa_file( aa& a,int n,string dosfile)
{FILE* ff;
int i,j;
if((ff=fopen(dosfile,"r"))==NULL)
cout<<"file "<< dosfile<<"can't open!"<<endl;
i=1;
while ((fscanf(ff,"%5d",&a[i])!=EOF)&&(i<n)) i=i+1 ;
for( j=i;j<n;j++)
a[j]=0;
fclose(ff);
}
void Load_arrbb_file( bb1& a,int sn,int en, string dosfile)
{ FILE* ff;
int i,j;
if((ff=fopen(dosfile,"r"))==NULL)
cout<<"file"<<dosfile<<"can't open!"<<endl;
i=sn;
while ((fscanf(ff,"%5d",&a[i])!=EOF)&&i<en)
i=i+1 ;
for( j=i;j<en;j++)
a[j]=0;
fclose(ff);
}
void Load_arraa( aa& a,int n)
{string ss;
boolean selected;
ss="Arrays\\*.arr";
Loadquestion("从文件读数组, 文件名",ss,selected);
if (selected)
Load_arraa_file(a,n,ss);
}
void Load_arrbb( bb1& a,int sn,int en)
{string ss;
boolean selected;
ss="Arrays\\*.arr";
Loadquestion("从文件读数组, 文件名",ss,selected);
if (selected)
Load_arrbb_file(a,sn,en,ss);
}
void Save_arraa_file( aa& a,int n,string dosfile)
{FILE* ff;
int i;
if((ff=fopen(dosfile,"w"))==NULL)
cout<<"file "<<dosfile<<" can't write!"<<endl;
i=1;
for (i=1;i<=n;i++)
{cout<<a[i]<<endl;
fprintf(ff,"%5d",a[i]);
}
fclose(ff);
}
void Save_arrbb_file( bb1& a,int sn,int en,string dosfile)
{FILE*ff;
int i;
if((ff=fopen(dosfile,"w"))==NULL)
cout<<"file "<<dosfile<<"can't write!"<<endl;
i=1;
for( i=sn;i<=en;i++)
fprintf(ff,"%5d",a[i]);
fclose(ff);
}
void Save_arraa( aa& a,int n)
{string ss;
boolean CanOrNo;
ss="arrays\\*.arr";
Savequestion("存储文件到",ss,CanOrNo);
if (CanOrNo)
Save_arraa_file(a,n,ss);
}
void Save_arrbb( bb1& a,int sn,int en)
{string ss;
boolean CanOrNo;
ss="arrays\\*.arr";
Savequestion("存储文件到",ss,CanOrNo);
if (CanOrNo)
Save_arrbb_file(a,sn,en,ss);
}
void Disp_arraa( aa& a,int n)
{GrpArr ag;
bb1 b;
int i;
for( i=1;i<=n;i++)
{ b[i]=a[i] ;
}
Create_grp_arrbb(ag,(HorOrLev)1,(d_or_i)1,true,b,"AA",1,n);
Initial_grparr(ag);
Move_grparr_to(ag,Sx1(ag),getmaxy()/2);
getch();
cleardevice();
/* for( i=1;i<=n;i++)
{ a[i]=b[i] ;
}*/
//ccc=readkey;
window(1,1,80,4);
}
void Disp_arrbb( bb1& b,int sn,int en)
{ GrpArr ag;
Create_grp_arrbb(ag,(HorOrLev)1,(d_or_i)1,true,b,"BB",sn,en);
Initial_arr2(ag);
Move_grparr_to(ag,Sx1(ag),getmaxy()/2);
getch();
cleardevice(); //?????
//closegraph();
//ccc=readkey;
window(1,1,80,4);
}
void Modi_grparr(GrpArr& ag)
{//var dirkey:set of 1..255;
int ecol,ci,cj;
boolean f;
datatype x;
int k;//:byte;
window(1,1,80,2);
Display_grparr(ag);
Menu("Arrow for move, space bar for input, ctrlw for exit");
cj=ag.sub1;
//dirkey=[up,down,left,right,32,ctrlw]; //{{{{{
ecol=ag.sub1+ag.count-1;
Cur_cover(ag,cj,1);
//with ag do
do
{
Getkey(k,f);
if ( !(k==up||k==down||k==left||k==right||k==32||k==ctrlw ) )
//in dirkey) then
cout<<'\007'<<endl; //write(#7)
else
if (k==32)
{ clrscr();
cin>>x;
* Grp_elmn_ptr(ag,cj) =x;
Disnodedat(ag,cj);
Cur_cover(ag,cj,1);
}
else
if (k!=ctrlw)
{
Cur_cover(ag,cj,1);
switch(k)
{
case up,left: if (cj==ag.sub1)
cj=ecol;
else
cj=cj-1;
break;
case down,right:if (cj==ecol)
cj=ag.sub1;
else
cj=cj+1;
break;
}
Cur_cover(ag,cj,1);
}
}
while(k!=ctrlw);
return;
}
void Input_grparr(GrpArr& ag)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -