CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
山寨机中的战斗机! 程序优化工程师到底对IT界有没有贡献
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  .NET技术 >  C#

有个C++的计算24的程序,想把他转为C#的命令行程序,可遇到问题

楼主lcrystal623(小水晶)2005-02-22 21:26:55 在 .NET技术 / C# 提问

这个程序我是这样想的:我想利用一个指针数组,其中的每个元素都是一个指向函数的指针,这样加减乘除运算我就可以通过循环来改变顺序了,可C#没指针(偶刚学C#不久,不知道这么说对吗?)但我有不想重新改变算法,我想知道C#中有什么能代替函数指针的东西,也就是说我不想改太多代码就想弄出一个计算24的C#命令行程序来.我的程序如下:  
   
  #include<iostream.h>  
  #include<stdlib.h>  
   
  int   val[4]={0};  
  float   temp[4];  
   
  float   plus(float   a,float   b)  
  {  
  return   (float)(a+b);  
  }  
  float   minus(float   a,float   b)  
  {  
  return   (float)(a-b);  
  }  
  float   time(float   a,float   b)  
  {  
  return   (float)(a*b);  
  }  
  float   divide(float   a,float   b)  
  {  
  if(b   ==   0)  
  return   0.0;  
  else    
  return   (float)(a/b);    
  }  
   
  void   count(float   (*   symbol[4])(float,float),char   signal[4],float   data[4],int   &flag)  
  {  
  int   i,j,k;  
  float   temp1,temp2,temp3;  
  for(i=0;i<4;i++)  
  {  
  for(j=0;j<4;j++)  
  {  
  for(k=0;k<4;k++)  
  {  
  if(flag==1)  
  {  
  temp1=(*   symbol[i])(data[0],data[1]);  
  temp2=(*   symbol[j])(temp1,data[2]);  
  temp3=(*   symbol[k])(temp2,data[3]);  
  if(temp3   ==   24.0)  
  {  
  flag=0;  
  cout<<endl<<"计算方法为:     ";  
  cout<<'['<<'('<<data[0]<<signal[i]<<data[1]<<')'<<signal[j]<<data[2]<<']'<<signal[k]<<data[3]<<"=24"<<endl<<endl;  
  }  
  if(flag==1)  
  {  
  temp1=(*   symbol[i])(data[0],data[1]);  
  temp2=(*   symbol[j])(data[2],data[3]);  
  temp3=(*   symbol[k])(temp1,temp2);  
  if(temp3   ==   24.0)  
  {  
  flag=0;  
  cout<<endl<<"计算方法为:     ";  
  cout<<'('<<data[0]<<signal[i]<<data[1]<<')'<<signal[k]<<'('<<data[2]<<signal[j]<<data[3]<<')'<<"=24"<<endl<<endl;  
  }  
  if(flag==1)  
  {  
  temp1=(*   symbol[i])(data[1],data[2]);  
  temp2=(*   symbol[j])(temp1,data[3]);  
  temp3=(*   symbol[k])(data[0],temp2);  
  if(temp3   ==   24.0)  
  {  
  flag=0;  
  cout<<endl<<"计算方法为:     ";  
  cout<<data[0]<<signal[k]<<'['<<'('<<data[1]<<signal[i]<<data[2]<<')'<<signal[j]<<data[3]<<']'<<"=24"<<endl<<endl;  
  }  
  if(flag==1)  
  {  
  temp1=(*   symbol[i])(data[1],data[2]);  
  temp2=(*   symbol[j])(data[0],temp1);  
  temp3=(*   symbol[k])(temp2,data[3]);  
  if(temp3   ==   24.0)  
  {  
  flag=0;  
  cout<<endl<<"计算方法为:     ";  
  cout<<'['<<data[0]<<signal[j]<<'('<<data[1]<<signal[i]<<data[2]<<')'<<']'<<signal[k]<<data[3]<<"=24"<<endl<<endl;  
  }  
  if(flag==1)  
  {  
  temp1=(*   symbol[i])(data[2],data[3]);  
  temp2=(*   symbol[j])(data[1],temp1);  
  temp3=(*   symbol[k])(data[0],temp2);  
  if(temp3   ==   24.0)  
  {  
  flag=0;  
  cout<<endl<<"计算方法为:     ";  
  cout<<data[0]<<signal[k]<<'['<<data[1]<<signal[j]<<'('<<data[2]<<signal[i]<<data[3]<<')'<<']'<<"=24"<<endl<<endl;  
  }  
  }  
  }  
  }  
  }  
  }  
  }  
  }  
  }  
  }  
   
  void   change(float   (*   symbol[4])(float,float),char   signal[4],float   data[4],int   &flag,int   i)  
  {  
  for(int   j=0;j<4;j++)  
  {  
  if(val[j]==0)  
  {  
  val[j]=1;  
  temp[i]=data[j];  
  if(i==3)  
  count(symbol,signal,temp,flag);  
  else  
  change(symbol,signal,data,flag,i+1);  
  val[j]=0;  
  }  
  }  
  }  
   
  void   main()  
  {  
  int   flag,i;  
  char   signal[4],goon='y',method;  
  float   (*   symbol[4])(float,float),data[4];  
   
  symbol[0]=plus;  
  symbol[1]=minus;  
  symbol[2]=time;  
  symbol[3]=divide;  
   
  signal[0]='+';  
  signal[1]='-';  
  signal[2]='*';  
  signal[3]='/';  
   
  while(goon=='y'||goon=='Y')  
  {  
  goon='n';  
  flag=1;  
  for(i=0;i<4;i++)  
  {  
  cout<<"请输入要计算的第"<<i+1<<"个数!   (数值范围不要超过±99)"<<endl;  
  cin>>data[i];  
  if(data[i]>100   ||   data[i]<-100)  
  {  
  cout<<"输入数字错误!"<<endl;  
  exit(0);  
  }  
  }  
   
  cout<<endl<<"输入的四个数在计算时顺序是否可以交换?(Y/N)"<<endl;  
  cin>>method;  
   
  if(method=='n'||method=='N')  
  count(symbol,signal,data,flag);  
  else   if(method=='y'||method=='Y')  
  change(symbol,signal,data,flag,0);  
  else  
  exit(0);  
   
  if(flag   ==   1)  
  cout<<endl<<"您输入的4个数字不能通过简单四则运算得到24"<<endl<<endl;  
  cout<<"是否要重新输入数字?(Y/N)"<<endl;  
  cin>>goon;  
  cout<<endl;  
  }  
  }  
   
  希望大家能帮我改改,如果觉得麻烦,就请告诉我要实现这个功能应该用什么来代替指针? 问题点数:20、回复次数:9Top

1 楼windinwing(潇笑)回复于 2005-02-22 22:10:24 得分 0

用代理就可以,这个转换其实很简单啊   建一个代理数据,替换函数指针Top

2 楼doubon(DB.NET)回复于 2005-02-22 22:38:22 得分 0

顶!Top

3 楼sssa2000()回复于 2005-02-23 02:18:02 得分 0

用   委托,   委托=函数指针,而且委托很安全,虽然慢了一点,呵呵呵Top

4 楼windinwing(潇笑)回复于 2005-02-23 16:33:14 得分 0

笔误,应该是委托,看楼上的Top

5 楼lcrystal623(小水晶)回复于 2005-02-24 12:45:36 得分 0

谢谢各位,我会查询委托的用法的,不过请大家给我举个使用委托的简单的例子.谢了先Top

6 楼Ivony(授人以鱼不如授人以渔,上海谋生)回复于 2005-02-24 12:56:17 得分 10

class   A  
  {  
   
      delegate   int   Method   (   int   a,   int   b   )  
   
      int   plus   (   int   a,   int   b   )  
      {  
          return   a   +   b;  
      }  
   
      float   minus(float   a,float   b)  
      {  
          return   (float)(a-b);  
      }  
   
      Method   method   =   new   Method   (   plus   );  
      int   Compute(   int   a   ,   int   b   )  
      {  
          return   method(   a,   b   )//   等效于   return   plus(   a,   b);  
      }  
  }Top

7 楼lcrystal623(小水晶)回复于 2005-02-24 18:26:32 得分 0

那我是不是可以这样?:Method[]   method   =   new   Method();  
                                          method[1]   =   plus;  
                                          method[2]   =   minus;Top

8 楼Ivony(授人以鱼不如授人以渔,上海谋生)回复于 2005-02-24 18:32:48 得分 10

Method[]   method   =   new   Method[]   {new   Method(   plus   ),   new   Method(   minus   )};  
   
  数组的元素是固定的,忘了?  
   
  还有就是委托实例必须用   new   委托名   (   方法名   );来创建。  
  但在C#   2.0中,可以用你上面的简写。。。。Top

9 楼lcrystal623(小水晶)回复于 2005-02-24 21:53:50 得分 0

谢谢Top

相关问题

  • 用命令行编译c++代码?
  • 在命令行的方式下如何重启计算机
  • 如何在命令行方式下使用Tlink.exe(Turbo C)
  • 如何配置autoexec可以在命令行中用c:\>java hellow.class
  • 如何在一个c++程序中执行命令行命令?
  • 怎样在命令行底下编译C++程序?
  • netsh问题,C#下用命令行执行错误?在线等
  • 一个C#中调用命令行程序的问题
  • C# Windows Form项目,怎么用命令行编译?不用VS
  • C#中调用外部命令行程序新问题求解

关键词

  • c#
  • 指针
  • float
  • 程序
  • signal
  • symbol
  • flag
  • method
  • temp
  • data

得分解答快速导航

  • 帖主:lcrystal623
  • Ivony
  • Ivony

相关链接

  • CSDN .NET频道
  • .NET类图书
  • C#类图书
  • .NET类源码下载

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
北京创新乐知广告有限公司 版权所有, 京 ICP 证 070598 号
世纪乐知(北京)网络技术有限公司 提供技术支持
Copyright © 2000-2008, CSDN.NET, All Rights Reserved
GongshangLogo