⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 grary1.h

📁 该包是数据结构的实验软件,来源于合肥工业大学人工智能与数据挖掘实验室,用来实现数据结构.
💻 H
📖 第 1 页 / 共 4 页
字号:
	   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);


     }

  void initial_Arr1(  GrpArr& ag)
     {int may;
	Into_graph();
	setcolor(WHITE);// DIRECTVIDEO:=FALSE;
	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;


      }
  void initial_Arr2( GrpArr& ag)
     {
	      initial_Arr1(ag);
	      window(1,1,80,3);
	      textcolor(WHITE);

	     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) ;

       }
  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)
     {
      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)
     {
     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,y0,x1,y1,x2,y2,x,y,xm,ym;
	   GrpArr_range(ag,x1,y1,x2,y2);
	    setfillstyle(1,0);
	    bar(x1,y1,x2,y2);
	    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 (int 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);
		if(ag.decinc==1)
		       outtextxy(x0,y0+ag.h/2,ag.name);
		else
		       outtextxy(x0,y0+ag.h/6,ag.name);
       }
  void display_GrpArr_elmns( GrpArr& ag)
      {
    for(int  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;
	   move_GrpArr_dxy(ag,dx,dy);
      }
  void reset_GrpArr_elmn( GrpArr& ag,int i)
    {
    *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++)
		*grp_elmn_ptr(ag,i)=0;
 }

  void reset_Arrbb( bb1& b,int i1,int i2)
     { int i;
       for( i=i1;i<=i2 ;i++)
       b[i]=0;
       }

#if !defined(__GRAPH2_H)

   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;
	 exit(0);
	 }
     i=1;
     while ((fscanf(ff,"%4d",&a[i])!=EOF)&&(i<n) )
	  i=i+1 ;
      for( j=i;j<n;j++)
	 a[j]=0;
      fclose(ff);
      }



  void load_Arrbb_file(  bb1& b,int sn,int en, string dosfile)
     {   FILE * ff;
	 int i,j;
     if((ff=fopen(dosfile,"r"))==NULL)
	{
	cout<<"file"<<dosfile<<"can't open!"<<endl;
	 exit(0);
	}
	 i=sn;
     while ((fscanf(ff,"%4d",&b[i])!=EOF)&&(i<en) )
	  i=i+1 ;
	   for( j=i;j<en;j++)
	      b[j]=0;
	   fclose(ff);
      }
  void load_Arraa(  aa& a,int n)
     {unsigned char ss[60]="grary1\\*.arr";
      boolean selected;
      char drive[3];
      char dir[25];
      char file[20];
      char ext[8];

      Loadquestion("从文件读数组, 文件名",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_Arraa_file(a,n,ss);
	   }
      }
  void load_Arrbb(  bb1& b,int sn,int en)
      {
      char drive[3];
      char dir[25];
      char file[20];
      char ext[8];
      unsigned char  ss[60]="grary1\\*.arr";;
       boolean selected;
       Loadquestion("从文件读数组, 文件名:",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_Arrbb_file(b,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;
	exit(0);
	}
	i=1;
	for (i=1;i<=n;i++)
	fprintf(ff,"%4d",a[i]);
	fclose(ff);
     }
  void save_Arrbb_file(  bb1& b,int sn,int en,string dosfile)
      {FILE *ff;
      int i;
     if((ff=fopen(dosfile,"w"))==NULL)
	 {
	 cout<<"file "<<dosfile<<"can't write!"<<endl;
	 exit(0);
	}
      i=1;
	for( i=sn;i<=en;i++)
	fprintf(ff,"%4d",b[i]);
	fclose(ff);
      }
  void save_Arraa(  aa& a,int n)
      {boolean CanOrNo;
      unsigned char ss[60]="grary1\\*.arr";
      Savequestion("存储文件到",ss,CanOrNo);
	  if (CanOrNo)
      save_Arraa_file(a,n,ss);
     }
  void save_Arrbb(  bb1& b,int sn,int en)
      {unsigned char ss[60]="grary1\\*.arr";
      boolean CanOrNo;
      Savequestion("存储文件到",ss,CanOrNo);
	if (CanOrNo)
       save_Arrbb_file(b,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();
	    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();
       window(1,1,80,4);
     }



     void modi_GrpArr(GrpArr& ag)
     {
      int  ecol,ci,cj;

      long num;
      char * endptr;
      boolean f;
      datatype x=0;
      int k;
	window(1,1,80,2);
	display_GrpArr(ag);
	Menu("Arrow for move,  space bar for input,   ctrlw for exit");
	cj=ag.sub1;
	ecol=ag.sub1+ag.count-1;
	cur_cover(ag,cj,1);
	do
	{
	 Getkey(k,f);
	   if ( !(k==up||k==down||k==left||k==right||k==32||k==ctrlw ) )
		cout<<'\007'<<endl;
	    else
		 if (k==32)
		      {
			 char s[20];
			   do
			    { clrscr();
			      strcpy(s,"");
			      cin>>s;
			      num=strtol(s,&endptr,10);
			      if(*endptr=='\0'&&(num<-32768||num>32767) )
				  {
				     Error("over flow,input again!");
				     }
			       else if(*endptr!='\0')
				    Error("format of data error,input again!");
			      }

			   while(!( *endptr=='\0'&&num>=-32768&&num<=32767 ) );

			    x=num;
			   * 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);

     }
  void input_GrpArr(GrpArr& ag)
    { clear_GrpArr(ag);
      modi_GrpArr(ag);
      }



  void rand_GrpArr(GrpArr& ag,int range1,int range2)
     {int  i,v ;
	 if(range1==range2)
	   for( i=ag.sub1;i<=ag.sub1+ag.count-1;i++)
		*grp_elmn_ptr(ag,i)=range1;
	  else
	    {
		if( range1>range2 )
		 {i=range1;range1=range2;range2=i; }


	    for( i=ag.sub1;i<=ag.sub1+ag.count-1;i++)
	     { do
		   v=random(range2);
		while( v<range1);
		*grp_elmn_ptr(ag,i)=v;
	     }
	}
	    display_GrpArr(ag);
	    modi_GrpArr(ag);
      }
  void load_GrpArr_file(GrpArr& ag,string dosfile)
    {FILE * ff;
     int i,j;

       if((ff=fopen(dosfile,"r"))==NULL)
	 {
	  cout<<"file"<<dosfile<<"can't open!"<<endl;
	  exit(0);
	 }
       i=ag.sub1;
       j=0;
       while  ( fscanf(ff,"%5d", grp_elmn_ptr(ag,i) )!=EOF && (j<ag.count) )
	       { i++;
		 j++;
		}
	if(i<ag.sub1+ag.count-1)
	    for (j=i;j<=ag.sub1+ag.count-1;j++)
		 *grp_elmn_ptr(ag,j) =0;
	fclose(ff);
     }
  void load_GrpArr(GrpArr& ag)
     {

      char drive[3];
      char dir[25];
      char file[20];
      char ext[8];
      unsigned char ss[60]="grary1\\*.arr";
      boolean selected;
      unsigned char ss1[60]="从文件读数组, 文件名:";
      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_GrpArr_file(ag,ss);

	   }
      }





  void save_GrpArr_file(GrpArr& ag,string dosfile)
    {FILE* ff;
    int a;
      int i;
      if((ff=fopen(dosfile,"w"))==NULL)
	{
	cout<<"file "<<dosfile<<" can't write!"<<endl;
	exit(0);
	}
	i=1;
	for (i=ag.sub1;i<=ag.sub1+ag.count-1;i++)
	 {
	 a=*grp_elmn_ptr(ag,i);
	 fprintf(ff,"%5d",a );
	 }
	fclose(ff);



     }

  void save_GrpArr(GrpArr& ag)
    { unsigned char ss[50]="grary1\\*.arr";
      boolean CanOrNo;

     Savequestion("存储文件到",ss,CanOrNo);
       if( CanOrNo )
	  save_GrpArr_file(ag,ss);
     }

  void input_Arrbb(bb1& b,int i1,int i2)
    { GrpArr  ag;
      create_grp_Arrbb(ag,(HorOrLev)1,(d_or_i)1,true,b,"b",i1,i2);
      initial_Arr2(ag);
      move_GrpArr_to(ag,sx1(ag),getmaxy()/2);
      input_GrpArr(ag);
      disp_Arrbb(b,i1,i2);
      }
  void modi_Arrbb(bb1& b,int i1,int i2)
     {GrpArr ag;
	create_grp_Arrbb(ag,(HorOrLev)1,(d_or_i)1,true,b,"b",i1,i2);
	initial_Arr2(ag);
	move_GrpArr_to(ag,sx1(ag),getmaxy()/2);
	modi_GrpArr(ag);
	disp_Arrbb(b,i1,i2);
      }


 void rand_Arrbb(  bb1& b,int i1,int i2,int range1,int range2)
       {       GrpArr ag;
	      int i;
	if(range1==range2)
	   for (i=i1;i<=i2;i++)
	      b[i]=range1;
	  else
	     {
	      if (range1>range2 )
		 {i=range1;range1=range2;range2=i; }

	     for (i=i1;i<=i2;i++)
	      do b[i]=rand();
	      while (b[i]<range1||b[i]>range2);
	     }
	     create_grp_Arrbb(ag,(HorOrLev)0  ,(d_or_i)1,true,b,"Rand",i1,i2);
	     initial_Arr2(ag);
	     move_GrpArr_to(ag,sx1(ag),getmaxy()%2);
	     modi_GrpArr(ag);
	     disp_Arrbb(b,i1,i2);
      }

// {===AnyArray===}
  void reset_AnyArr(bb1& b,int i01,int i02,int i1,int i2)
    {int  i;
	if(i1<i01||i2>i02)
	 return;
	for (i=i1;i<=i2;i++)
	  b[i]=0;

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -