压缩变换.cpp
Upload User: tangyuesha
Upload Date: 2021-05-17
Package Size: 345k
Code Size: 5k
Development Platform:

Visual C++

  1. #include <iostream.h>
  2. #include <stdlib.h>
  3. #include <fstream.h>
  4. void zhucaidan()                                                  //输出主菜单
  5. {   cout<<endl;
  6. cout<<"                                 一维游程编码主菜单"<<endl<<endl;
  7. cout<<"              1-->浏览栅格数据  2-->编码栅格数据  3-->保存编码数据"<<endl;
  8. cout<<"              4-->浏览编码数据  5-->恢复编码数据  6-->保存栅格数据"<<endl;
  9.    
  10. cout<<"                                                                0-->退出"<<endl;
  11. cout<<"请选择: 1/2/3/4/5/6/0:";
  12. }
  13.  void liulan1()
  14.  {    
  15. system("cls"); 
  16.   ifstream ipp("grid.txt",ios::in);
  17.     //下面进行读取栅格数据
  18. int m=0;           //换行标记
  19. long n;
  20. while(ipp>>n)
  21. {
  22. // if(n==-1) break;
  23. cout<<"  "<<n<<"  ";
  24. m++;
  25.         if (m%10==0)cout<<endl;
  26. }
  27. cout<<endl<<"       按任意键返回主菜单   "<<endl;
  28.       system("pause");
  29.  }
  30.  void liulan2()
  31.  {    
  32. system("cls"); 
  33.  ifstream inn("栅格数据编码结果.txt",ios::in);
  34.     //下面进行读取编码数据
  35. int m=0;           //换行标记
  36. char n;
  37. while(inn>>n)
  38. {
  39.          
  40. cout<<n;
  41.  if (n==')')cout<<"   ";
  42. }
  43. cout<<endl<<"       按任意键返回主菜单   "<<endl;
  44.       system("pause");
  45.  }
  46. void jiema()
  47.  {    
  48. system("cls"); 
  49.    ifstream inn("栅格数据编码结果.txt",ios::in);
  50. char pm=' ',qm='';
  51. int q=0; int i=0,j=0;
  52. int a=0,b=0,k,d;
  53. char buf[6];
  54. char duf[5];
  55.   for(k=0;k<130;k++) 
  56.   {
  57. while(inn>>pm)
  58. {
  59. if(pm=='n') break;
  60.         if(pm>='0'&&pm<='9')
  61. {
  62. buf[i]=pm;
  63. i++;
  64. }
  65. if(pm==')')
  66. {
  67. if(i==5)
  68. {
  69. for(d=0;d<5;d++) duf[d]=buf[d];
  70. q=atoi(duf);
  71. a=q/10;
  72.     b=q%10;
  73. for(j=0;j<b;j++) cout<<a<<' ';
  74. i=0;
  75. }
  76.    if(i==6)
  77.    {
  78.  q=atoi(buf);
  79.  a=q/100;
  80.  b=q%100;
  81.  for(j=0;j<b;j++) cout<<a<<' ';
  82.  i=0;
  83.    }
  84. }
  85. }
  86.   }
  87. cout<<endl<<"       按任意键返回主菜单   "<<endl;
  88.       system("pause"); }
  89.  void bianma()
  90.  {
  91.  system("cls"); 
  92.   ifstream ipp("grid.txt",ios::in);
  93.  //下面进行编码栅格数据
  94. long x1,x2;
  95. int y1=1,y2=0;
  96. ipp>>x1;
  97. while(ipp>>x2)
  98. if (x1==x2){y1++;}
  99. else 
  100. {  cout<< "    ( "<<x1<<" , "<<y1<<" )";
  101.    x1=x2;
  102.    y1=1;
  103.     y2++;
  104.  if (y2%4==0)cout<<endl;
  105. }
  106. }
  107.     cout<< "    ( "<<x1<<" , "<<y1<<" )";    //最后一个
  108. cout<<endl<<"       按任意键返回主菜单   "<<endl;
  109.       system("pause");
  110.    
  111.  }
  112. void baocun1()
  113. {
  114.        system("cls"); 
  115.   ifstream ipp("grid.txt",ios::in);
  116. ofstream opp("栅格数据编码结果.txt",ios::out);
  117.  //下面进行编码栅格数据
  118. long x1,x2;
  119. int y1=1,y2=0;
  120. ipp>>x1;
  121. while(ipp>>x2)
  122. if (x1==x2){y1++;}
  123. else 
  124. {  opp<< "("<<x1<<","<<y1<<") ";
  125.    x1=x2;
  126.    y1=1;
  127.     y2++;
  128.  if (y2%5==0)opp<<endl;
  129. }
  130. }
  131.     opp<< "("<<x1<<","<<y1<<")";    //最后一个
  132.  cout<<endl<<endl<<"          编码结果保存在文件“ 栅格数据编码结果.txt ”中  "<<endl;
  133.    cout<<endl<<"       按任意键返回主菜单   "<<endl;
  134.       system("pause");
  135. }
  136. void baocun2()
  137.  {    
  138. system("cls"); 
  139.  
  140.    ifstream inn("栅格数据编码结果.txt",ios::in);
  141. ofstream onn("编码数据恢复结果.txt",ios::out);
  142. char pm=' ',qm='';
  143. int q=0; int i=0,j=0;
  144. int a=0,b=0,k,d;
  145. char buf[6];
  146. char duf[5];
  147.   for(k=0;k<130;k++) 
  148.   {
  149. while(inn>>pm)
  150. {
  151. if(pm=='n') break;
  152.         if(pm>='0'&&pm<='9')
  153. {
  154. buf[i]=pm;
  155. i++;
  156. }
  157. if(pm==')')
  158. {
  159. if(i==5)
  160. {
  161. for(d=0;d<5;d++) duf[d]=buf[d];
  162. // l++;
  163. q=atoi(duf);
  164. a=q/10;
  165.     b=q%10;
  166. for(j=0;j<b;j++) onn<<a<<' ';
  167. i=0;
  168. //if(l%76==0) onn<<endl<<endl;
  169. }
  170.    if(i==6)
  171.    {
  172. // l++;
  173.  q=atoi(buf);
  174.  a=q/100;
  175.  b=q%100;
  176.  for(j=0;j<b;j++) onn<<a<<' ';
  177.  i=0;
  178.  //if(l%76==0) onn<<endl<<endl;
  179.    }
  180. }
  181. }
  182.   }
  183.   cout<<endl<<endl<<"          解码结果保存在文件“ 编码数据恢复结果.txt ”中  "<<endl;
  184. cout<<endl<<"       按任意键返回主菜单   "<<endl;
  185.       system("pause");
  186.  }
  187. void return_all()                                  //不断返回
  188. {   
  189. system("cls");                                      //清除屏幕
  190. zhucaidan();
  191. int x;
  192. cin>>x;
  193. switch(x)
  194. {
  195. case 1:                                             //创建线性表
  196. {
  197.     liulan1();
  198.        
  199.    return_all();
  200. }
  201. case 2:                                             //删除最小元素,并由最后一位填补
  202. {
  203.           bianma();
  204.           return_all();
  205. }
  206. case 3:                                             //删除线性表中大小在s和t之间的元素(s<t)
  207. {
  208. baocun1();
  209.  return_all();
  210. }
  211. case 4:                                             //从有序表中删除其值在给定值s和t之间的元素(s<t)
  212. {
  213. liulan2();
  214.            return_all();
  215. }
  216. case 5:                                             //
  217. {
  218. jiema();
  219.          return_all();
  220. }
  221. case 6:                                             //
  222. {
  223.  baocun2();
  224.            return_all();
  225. }
  226. case 0:                                             //
  227. {  exit;
  228. }
  229. }
  230.    
  231. }
  232. int main()
  233. {
  234. // List(L1);
  235. return_all();
  236. return 0;
  237. }