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

📄 grary2.h

📁 该包是数据结构的实验软件,来源于合肥工业大学人工智能与数据挖掘实验室,用来实现数据结构.
💻 H
📖 第 1 页 / 共 3 页
字号:
	create_grp_AnyArr2(ag,b,"AnyArr",i01,i02,j01,j02,i1,i2,j1,j2);
	     initial_GrpArr2(ag);
	     move_GrpArr2_to(ag,sx2(ag),getmaxy()/2);
	     modi_GrpArr2(ag);
	     disp_AnyArr2(b,i01,i02,j01,j02,i1,i2,j1,j2);
      }
  void rand_AnyArr2(BB2&  b,int i01,int i02,int j01,int j02,int i1,int i2, int j1,int j2,int range1,int range2)
    {GrpArr2 ag;
    int i,j,vv,k;

	if (range1>range2 )
		 {k=range1;range1=range2;range2=k; }
	   for (i=i1;i<=i2;i++)
	    for(j=j1;j<=j2;j++)
	     {
	      do
		vv=rand();

	      while (vv<range1||vv>range2);
	      b[i][j]=vv;
	      }

	   create_grp_AnyArr2(ag,b,"Rand AnyArr2",i01,i02,j01,j02,i1,i2,j1,j2);
	   initial_GrpArr2(ag);move_GrpArr2_to(ag,sx2(ag),getmaxy()/2);
	   modi_GrpArr2(ag); disp_AnyArr2(b,i01,i02,j01,j02,i1,i2,j1,j2);
      }

//{  For menu }
  void load_GrpArr2_file(GrpArr2& ag,string dosfile)
     {FILE * ff;
      int i,j,n,rown;
	if((ff=fopen(dosfile,"r"))==NULL)
	   {
	   cout<<"file "<< dosfile<<"can't open!"<<endl;
	   exit(0);
	   }

	n=0;
	rown=ag.ecol-ag.scol+1;


	   while (n<(ag.erow-ag.srow+1)*(ag.ecol-ag.scol+1)&&!feof(ff) )
	      {     i=ag.srow+n/rown;
		    j=ag.scol+n%rown;
		    fscanf(ff,"%5d", grp_elmn2_ptr(ag,i,j) );
		    n++;
	      }
	   fclose(ff);
     }
   void  load_GrpArr2( GrpArr2& ag)
     {char drive[3];
       char dir[25];
       char file[20];
       char ext[8];
	boolean selected;
      unsigned char ss[60]="grary2\\*.arr";
      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_GrpArr2_file(ag,ss);
	 }
  }


  void save_GrpArr2_file(GrpArr2& ag,string dosfile)
     { FILE *ff;
	int i,j;
     if((ff=fopen(dosfile,"w"))==NULL)
	   {
	   cout<<"file "<< dosfile<<"can't open!"<<endl;
	   exit(0);
	   }

     for (i=ag.srow;i<=ag.erow;i++)
	  for (j=ag.scol;j<=ag.ecol;j++)
	    fprintf(ff,"%5d",datatype(*grp_elmn2_ptr(ag,i,j) ) );
	  fclose(ff);
     }
   void  save_GrpArr2(GrpArr2& ag)
      {boolean canorno;
       unsigned char  ss[60]="grary2\\*.arr";
       Savequestion("存储文件到: ",ss,canorno);
       if (canorno)
	 save_GrpArr2_file(ag,ss);
      }

   void calnew(int& x,int& y,int key,int dxl,int dyl,int dxr,int dyr)
      {int  i,x0,y0;
      i=1;
	 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,GrpArr2& ag)
    {  int dxl=0,dyl=0,dxr=0,dyr=0;
    Menu("The Referenced  Node is First Element");

	   dxl=20;
	   dyl=20;
	   dxr=20;
	   dyr=20;
	   mvcur(curx,cury,dxl,dyl,dxr,dyr,ag.datafd);
     }
  void move_GrpArr2(GrpArr2& ag)
     {
     int  curx,cury;
       coord2(ag,ag.srow,ag.scol,curx,cury);
       mmmbtr(curx,cury,ag);
       move_GrpArr2_to(ag,curx,cury);
     }
  void move1_GrpArr2(GrpArr2& ag)
     {int  curx,cury,xl,yl,xr,yr;
       GrpArr2_range(ag,xl,yl,xr,yr);
	 coord2(ag,ag.srow,ag.scol,curx,cury);
	 mmmbtr(curx,cury,ag);
	 Clear_range(xl,yl,xr,yr);
	 move_GrpArr2_to(ag,curx,cury);
     }
  void set_GrpArr2_range(GrpArr2& ag)
     {int  x,y;
       x=70;
       y=70;
       mmmbtr(x,y,ag);
       set_GrpArr2_to(ag,x,y);
       }

 void handle_GrpArr2_event(pmenunode&  pmenu,GrpArr2& ag)
  {int   xl=0,yl=0,xr=0,yr=0,randmin=0,randmax=0,rsb1=0,rsb2=0,csb1=0,csb2;
   boolean sv;
   int agw=0,agh=0;
   unsigned char ss[60]="";
      switch(pmenu->command)
      {
      case ComInputGrpArr2: input_GrpArr2(ag);break;
      case ComRandGrpArr2:  {  Inputintinwnd(20,4,60,"设置随机数范围, 下限: ",randmin);
			      Inputintinwnd(20,4,60,"设置随机数范围, 上限: ",randmax);
			      rand_GrpArr2(ag,randmin,randmax);
			}  break;
      case ComModiGrpArr2:  modi_GrpArr2(ag);break;
      case ComReadGrpArr2:  load_GrpArr2(ag);break;
      case ComSaveGrpArr2:  save_GrpArr2(ag);break;
      case Comsetrange:     set_GrpArr2_range(ag); break;
      case Comdisp:         display_GrpArr2(ag);   break;
      case Commove1:      {  Inputstrinwnd(20,3,60,"Move to New Position ",ss);
			     GrpArr2_range(ag,xl,yl,xr,yr);
			     move1_GrpArr2(ag);
			     Clear_range(xl,yl,xr,yr);
			     display_GrpArr2(ag);
			}  break;
      case Commove2:      { Inputstrinwnd(20,4,60,"Move2Disp Bitre ",ss);
			    move_GrpArr2(ag);
			    getch();
			    }break;
     case ComEditRow1GrpArr2: { rsb1=ag.srow;
			      Editintinwnd(20,4,60,"设置行下标下限: ",rsb1);
			     if (rsb1<ag.arow1&&rsb1>ag.arow2)
				   {
				   Error("Row Sub. Rangr Error!");
				   exit(0);
				   }
			      else if (rsb1!=ag.srow)
			       { ag.srow=rsb1;

				 display_GrpArr2(ag);
				  }
				}break;
     case ComEditRow2GrpArr2: {  rsb2=ag.erow;
			       Editintinwnd(20,4,60,"设置行下标上限: ",rsb2);
			       if (rsb2<ag.arow1||rsb2>ag.arow2 )
				  {
				  Error("Row Sub. Rangr Error!");
				  exit(0);
				  }
			       else if (rsb2!=ag.erow)
				    { ag.erow=rsb2;

				      display_GrpArr2(ag);
				    }
			       }  break;
     case ComEditCol1GrpArr2: { csb1=ag.scol;
			      Editintinwnd(20,4,60,"设置列下标下限: ",csb1);
			      if (csb1<ag.acol1||csb1>ag.acol2 )
				  {
				  Error("Col Sub. Rangr Error!");
				  exit(0);
				  }
			      else if (csb1!=ag.scol)
			       { ag.scol=csb1;

				  display_GrpArr2(ag);
				  }
			       }break;
      case ComEditCol2GrpArr2: {  csb2=ag.ecol;
			       Editintinwnd(20,4,60,"设置列下标上限: ",csb2);
			       if (csb2<ag.acol1||csb2>ag.acol2 )
				    {
				    Error("Col Sub. Rangr Error!");
				    exit(0);
				    }
			       else if (csb2!=ag.ecol)
				    { ag.ecol=csb2;

					  display_GrpArr2(ag);
				     }
			       } break;
     case ComSetHighGrpArr2: {  agh=ag.h;
			       Editintinwnd(20,4,60,"设置元素显示高度[8..50]: ",agh);
			       if (agh<8||agh>50 )
				   {Error("Size is Too big or Small!");
				   exit(0);
				   }
			       else if (agh!=ag.h)
				    { ag.h=agh;

					  setcolor(WHITE);
					  setfillpattern(fillmode,fillcolor);
					  if (ag.havefd)
						farfree(ag.datafd);
					    ag.havefd=true;
					     bar(2,2,ag.w-1,ag.h-1);
					     ag.size=imagesize(2,2,ag.w-1,ag.h-1);
					     ag.datafd=farmalloc(ag.size);
					     getimage(2,2,ag.w-1,ag.h-1,ag.datafd);
					     putimage(2,2,ag.datafd,1);


					  display_GrpArr2(ag);
				    }
			       }break;
     case ComSetWidthGrpArr2: {  agw=ag.w;
			       Editintinwnd(20,4,60,"设置元素显示宽度[8..70]: ",agw);
			       if (agw<8||agw>70)
				 {
				 Error("Size is Too big or small!");
				 exit(0);
				 }
				 else if (agw!=ag.w)
				    { ag.w=agw;

					   setcolor(WHITE);
					   setfillpattern(fillmode,fillcolor);
					  if (ag.havefd)
						farfree(ag.datafd);
					    ag.havefd=true;
					     bar(2,2,ag.w-1,ag.h-1);
					     ag.size=imagesize(2,2,ag.w-1,ag.h-1);
					     ag.datafd=farmalloc(ag.size);
					     getimage(2,2,ag.w-1,ag.h-1,ag.datafd);
					     putimage(2,2,ag.datafd,1);

					  display_GrpArr2(ag);
				       }
				   }break;
	   }
     }

 mymenu  GrpArr2menu1, GrpArr2menu2;
 pmenunode	 grp2mp,b2mp ;
 void handle_GrpArr2_menu(mymenu&  GrpArr2menu1,boolean& selectorno,
			       pmenunode& pmenu,  GrpArr2& ag)
   {
      Mymenu_selectmenu( GrpArr2menu1,pmenu,selectorno);
	if (selectorno)
	    if (Mymenu_issubmenuitem(GrpArr2menu1) )
		{
		      Mymenu_disabledispsubmenu(GrpArr2menu1,pmenu->numofmenu/100);
		      handle_GrpArr2_event(pmenu,ag);
		   }
	     else
		 return;

	else
	      return ;
	     }

 void handle_GrpArr2( GrpArr2& ag)
  {   do
	   handle_GrpArr2_menu(GrpArr2menu1,selectorno,pmenu,ag);
	  while( strcmp(pmenu->menuname,"返回") );
	  Mymenu_clearmainmenu(GrpArr2menu1);
	  Mymenu_reset_cursubmenu(GrpArr2menu1);
	  Mymenu_done(GrpArr2menu1);
  }
 void get_GrpArr2(GrpArr2& ag)
   {    grp2mp=Newmenu1(
	 Newsubmenu1("设置显示方式",
	    Newmenu1(
	      Newitem1("设置元素显示高度","Set Elmn High [dots] ",0,0,ComSetHighGrpArr2,
	      Newitem1("设置元素显示宽度","Set Elmn width [dots] ",0,0,ComSetWidthGrpArr2,
	      nil))),
	 Newsubmenu1("输入数据",
	    Newmenu1(
	      Newitem1("逐个输入数据","Input data from KeyBoard ",0,0,ComInputGrpArr2,
	      Newitem1("随机输入数据","Rand data to Array ",0,0,ComRandGrpArr2,
	      Newitem1("修改原有数组","Modify array data ",0,0,ComModiGrpArr2,
	      Newitem1("从文件读入数组","Read array data from file ",0,0,ComReadGrpArr2,
	      Newitem1("存盘","Save array data to file ",0,0,ComSaveGrpArr2,
	      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(GrpArr2menu1,grp2mp);

	 handle_GrpArr2(ag) ;
     }
 void get_grp_arrbb2(GrpArr2& ag,BB2& b)
    {
      create_grp_arrbb2(ag,b,"BB",1,10,1,10);
      initial_GrpArr2(ag);
      b2mp=Newmenu1(
	 Newsubmenu1("设置显示方式",
	    Newmenu1(
	      Newitem1("设置行下标下限","Set Min Row Sub ",0,0,ComEditRow1GrpArr2,
	      Newitem1("设置行下标上限","Set Max Row Sub ",0,0,ComEditRow2GrpArr2,
	      Newitem1("设置列下标下限","Set Min Col Sub ",0,0,ComEditCol1GrpArr2,
	      Newitem1("设置列下标上限","Set Max Col Sub ",0,0,ComEditCol2GrpArr2,
	      Newitem1("设置元素显示高度","Set Elmn High [dots] ",0,0,ComSetHighGrpArr2,
	      Newitem1("设置元素显示宽度","Set Elmn width [dots] ",0,0,ComSetWidthGrpArr2,
	      nil))))))),
	 Newsubmenu1("输入数据",
	    Newmenu1(
	      Newitem1("逐个输入数据","Input data from KeyBoard ",0,0,ComInputGrpArr2,
	      Newitem1("随机输入数据","Rand data to Array ",0,0,ComRandGrpArr2,
	      Newitem1("修改原有数组","Modify array data ",0,0,ComModiGrpArr2,
	      Newitem1("从文件读入数组","Read array data from file ",0,0,ComReadGrpArr2,
	      Newitem1("存盘","Save array data to file ",0,0,ComSaveGrpArr2,
	      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(GrpArr2menu2,b2mp);

      do
	 handle_GrpArr2_menu(GrpArr2menu2,selectorno,pmenu,ag);
      while(strcmp(pmenu->menuname,"返回") );
	  Mymenu_clearmainmenu(GrpArr2menu2);
	  Mymenu_reset_cursubmenu(GrpArr2menu2);
	  Mymenu_done(GrpArr2menu2);
    }
 void get_grp_AnyArr2(GrpArr2& ag,BB2& b,int i1,int i2,int j1,int j2)
    {  create_grp_AnyArr2(ag,b,"AnyArr2",i1,i2,j1,j2,
			      i1,Min(i1+9,i2),j1,Min(j1+9,j2) );
	  initial_GrpArr2(ag);
	b2mp=Newmenu1(
	 Newsubmenu1("设置显示方式",
	    Newmenu1(
	      Newitem1("设置行下标下限","Set Min Row Sub ",0,0,ComEditRow1GrpArr2,
	      Newitem1("设置行下标上限","Set Max Row Sub ",0,0,ComEditRow2GrpArr2,
	      Newitem1("设置列下标下限","Set Min Col Sub ",0,0,ComEditCol1GrpArr2,
	      Newitem1("设置列下标上限","Set Max Col Sub ",0,0,ComEditCol2GrpArr2,
	      Newitem1("设置元素显示高度","Set Elmn High [dots] ",0,0,ComSetHighGrpArr2,
	      Newitem1("设置元素显示宽度","Set Elmn width [dots] ",0,0,ComSetWidthGrpArr2,
	      nil))))))),
	 Newsubmenu1("输入数据",
	    Newmenu1(
	      Newitem1("逐个输入数据","Input data from KeyBoard ",0,0,ComInputGrpArr2,
	      Newitem1("随机输入数据","Rand data to Array ",0,0,ComRandGrpArr2,
	      Newitem1("修改原有数组","Modify array data ",0,0,ComModiGrpArr2,
	      Newitem1("从文件读入数组","Read array data from file ",0,0,ComReadGrpArr2,
	      Newitem1("存盘","Save array data to file ",0,0,ComSaveGrpArr2,
	      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(GrpArr2menu2,b2mp);

	  do
	     handle_GrpArr2_menu(GrpArr2menu2,selectorno,pmenu,ag);
	  while(strcmp(pmenu->menuname,"返回") );
	  Mymenu_clearmainmenu(GrpArr2menu2);
	  Mymenu_reset_cursubmenu(GrpArr2menu2);
	  Mymenu_done(GrpArr2menu2);
    }
 void get_arrbb2(BB2& b)
    {GrpArr2 ag;
     get_grp_arrbb2(ag,b);
     }
 void get_AnyArr2(BB2& b,int i1,int i2,int j1,int j2)
    { GrpArr2 ag;
     get_grp_AnyArr2(ag,b,i1,i2,j1,j2);
     }

#endif

⌨️ 快捷键说明

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