葡萄城设计竞赛

科学计算器

一开发平台

基于windows 7 +Eclipse开发。採用Java语言编码。

二模块及算法

软件简单介绍:自己主动解析计算表达式。并进行运算返回结果的一个科学计算器程序。

①输入和输出

科学计算器的输入为一个类似于“SQRT(1+2)”形式的表达式的字符串,该输入相应的   
运算结果为3的平方根。输出结果为一个表示运算结果的字符串。比方说 
“1.7320508075688773”

②关于输入

输入表达式包括下面类型: 数值常量 。运算符号 。数值常量 包括正数和负数。

运算符号 :

支持普通的四则运算符号,包含+-*/,分别相应加减乘除运算

支持模除和乘方运算符号。形如 ”x mod y” 以及 “x ^ y”。

支持括号运算符,用作改变运算优先级。比如 ”1 * (2 + 4)”

数组仅作为參数形式出如今函数參数中,数组由一组数值常量或者

表达式组成。由逗号”,” 分隔。并使用方括号”[]”做为数组的界限标记。

③功能函数

1.三角函数,双曲函数和反三角函数

public static double sin(doubie a)//返回角的三角正弦

public static double cos(doubie a)//返回角的三角余弦

public static double tan(doubie a)//返回角的三角正切

public static double asin(doubie a)//返回一个值的反正弦

public static double acos(doubie a)//返回一个值的反余弦

public static double atan(doubie a)//返回一个值的反正切

public static double toRadians(doubie angdeg)//将角度转换为弧度

public static double toDegrees(doubie angrad)//将弧度转换为角度

· 2.模除运算

Java中模运算是用一个操作数-还有一个操作数,直到前面的操作数值小于后一个操     
作数值为止。//10-2.1 ——》7.9-2.1——》5.8-2.1——》3.7-2.1——》1.6。
结果为1.6  System.out.println(10%2.1); Java中。模运算的符号位取决于前一
个操作数,无论后一个操作数的符号 结构为:前一个操作数的符号 前一个操作数
的绝对值%后一个操作数的绝对值 System.out.println(10%-3);   //1  
System.out.println(-10%-3);  //-1

3 指数运算

int y=1,i=0;

if(b=0)

y=1;

for(i=1;i<=b;i++)

y=y*x;

printf("y=%d\n",y);

·4.开方运算

BigInteger b=new BigInteger(num);

  

  if(b.compareTo(BigInteger.ZERO)<0)

  return "不是正数";

  String sqrt="0"; //开方结果

  String pre="0"; //开方过程中须要计算的被减数

  BigInteger trynum; //试商,开放过程中须要计算的减数

  BigInteger flag;  //试商,得到满足要求减数的之后一个数

  BigInteger twenty=new BigInteger("20"); //就是20

  BigInteger dividend; ///开方过程中须要计算的被减数

  int len=num.length(); //数字的长度

  if(len%2==0) //长度为偶数

  {

  for(int i=0;i<len/2;++i) //得到的平方根一定是len/2位

  {

  dividend=new BigInteger(pre+num.substring(2*i,2*i+2));

  for(int j=0;j<=9;++j)

  {

  trynum=twenty.multiply(new BigInteger(sqrt)).multiply(new BigInteger(j+"")).add(new BigInteger(j+"").multiply(new BigInteger(j+"")));

  flag=twenty.multiply(new BigInteger(sqrt)).multiply(new BigInteger((j+1)+"")).add(new BigInteger((j+1)+"").multiply(new BigInteger((j+1)+"")));;

  //满足要求的j使得试商与计算中的被减数之差为最小正数

  if(trynum.subtract(dividend).compareTo(BigInteger.ZERO)<=0

  &&flag.subtract(dividend).compareTo(BigInteger.ZERO)>0)

  {

  sqrt+=j;  //结果加上得到的j

  pre=dividend.subtract(trynum).toString(); //更新开方过程中须要计算的被减数

  break;

  }

5.求给定值 x 的经常使用对数:log10(x)

·   求给定值 x 的自然对数:ln(x)

logx(y) =loge(x) / loge(y)

    public double log(double value, double base) {

   return Math.log(value) / Math.log(base);

   }

  计算100的以10为底的对数就变为很easy了:

  double log = Logarithm.log(100, 10); // log is 2.0

   512的以2为底的对数是:

   double log = Logarithm.log(512, 2); // log is 9.0

  

  static public double log2(double value) {

   return log(value, 2.0);

   }

   static public double log10(double value) {

   return log(value, 10.0);

   }

6.阶乘运算

java中提供了两个拥有高精度计算了类:BigInteger和BigDecimal

BigInteger:支持随意精度的整数运算

BigDecimal:支持随意精度的定点数。能够进行精确的货币计算

for (int i = 1; i <= SUM; i++) {

// new BigDecimal("乘数").multiply(new BigDecimal(“因子
")).toString();

BigDecimal   stra =new BigDecimal(s);

BigDecimal end = new BigDecimal(s); //将s转为BigDecimal

BigDecimal re = end.multiply(stra); //end*stra

s = re.toString(); //又一次赋值给s

7 统计函数

·

集合的算术平均值:avg([…])

集合的统计:sum([…])

while(reader.hasNextDouble()){

double x=reader.nextDouble();

try{

if(x<0||x>100)

x=Integer.parseInt("x<0||x>100");

else{

m=m+1;

sum=sum+x;

}

}

·

· 集合的估算方差:var([…])

· 集合的整体方差:varp([…])

由于样本的个数总是的在不断变化的。确切将是不断递增;假设每次添加,都要又一次计算平均值。再按次公式,计算出方差;通过n-1个样本时的方差值。和新增的样本,就能得到此时这N个样本的方差;这样计算量不会变同一时候保持在一个非常小的值。可大大提高程序的计算效率。递推公式例如以下:

Mn = Mn-1+ (xn - Mn-1)/n

Sn = Sn-1 + (xn - Mn-1)*(xn - Mn)

Mn为平均值,初始时: M1 = x1,  S1 = 0 (此等式的推导证明,我后面给出),而样本方差 s =Sn/(n - 1)

private int count;// 样本的个数

private double mk;// 平均值

06     private double sk;// Sn

07     private double runVar;// 样本方差

08

09     public RunningVariance() {

10         this(0, 0.0, 0.0);

11     }

12

13     public RunningVariance(int count, double mk, double sk) {

14         this.count = count;

15         this.mk = mk;

16         this.sk = sk;

17         recomputeRunVar();

18     }

19

20     public double getMk() {

21         return mk;

22     }

23

24     public double getSk() {

25         return sk;

26     }

27

28

29      * 获取执行时样本方差

30

31

32

33     public synchronized double getRunningVariance() {

34         return runVar;

35     }

36

37

38    添加样本

39

40

41

42     public synchronized void addSample(double sample) {

43         if (++count == 1) {

44             mk = sample;

45             sk = 0.0;

46         } else {

47             double oldmk = mk;

48             double diff = sample - oldmk;

49             mk += diff / count;

50             sk += diff * (sample - mk);

51         }

52         recomputeRunVar();

53     }

54

55

56       移除样本

57

58

59

60     public synchronized void removeSample(double sample) {

61         int oldCount = getCount();

62         double oldmk = mk;

63         if (oldCount == 0) {

64             throw new IllegalStateException();

65         }

66         if (--count == 0) {

67             mk = Double.NaN;

68             sk = Double.NaN;

69         } else {

70             mk = (oldCount * oldmk - sample) / (oldCount - 1);

71             sk -= (sample - mk) * (sample - oldmk);

72         }

73         recomputeRunVar();

74     }

75

76     private synchronized void recomputeRunVar() {

77         int count = getCount();

78         runVar = count > 1 ?

sk / (count - 1) : Double.NaN;

79         // 若须要计算标准差

80         // runVar = count > 1 ? Math.sqrt(sk / (count - 1)) : Double.NaN;

81     }

82

83     public synchronized int getCount() {

84         return count;

85     }

· 集合的估算标准差:stdev([…])

· 集合的整体标准偏差:stdevp([…])

中间数据缓存器MC/MR/MS/M+/M-:M表示Memory。是指一个中间数据缓存器,MC=Memory Clear, MR=Memory Read, MS=Memory Save, M+=Memory Add, M-=Memory inus。能够用一个样例来演示:(7-2) * (8-2)= 先输入7。按MS保存,输入2,按M-与缓存器中的7相减,此时缓存器中的值为5;然后计算8-2,得出结果为6。输入*相乘,按MR读出之前保存的数5。按=得出结果30,算完后按MC清除缓存器

统计模式,这是一种全然不同的计算模式,你不再逐次的输入数据与操作符而得到一个结果,而是先输入一系列已知的数据。然后计算各种统计数据(注意,这里清除之前输入的一组数据的button为CAD)。支持的统计数据包含平均值、平方平均值。和,平方和,还有就是标准差(standard deviation),标准差是方差的平方根,用来表示一组数据的离散程度。

这里提供了两种标准差的计算方式:

:整体标准差(population standard deviation)。其在计算方差的过程其中是除以n的。

:样本标准差(sample standard deviation),其在计算方差的过程中式除以n-1的

   

版权声明:本文博主原创文章。博客,未经同意不得转载。

时间: 2024-11-05 19:00:08

葡萄城设计竞赛的相关文章

使用葡萄城报表,轻松实现高度精准的报表套打

在许多行业中票据具有严格的行业规范,格式是无法修改的,一旦格式有所改动,票据数据就会失效无效.因此通常情况下,我们会在预先设计好格式的报表的打印版中,手动填写数据信息,如常见的各类账本,报销单等填写数据. 单张票据手动填写是没有任何问题的,而随着办公自动化,大量数据都需要电子化处理,不仅高效还便于保存,不易出错.在票据成为常规办公操作时,手动填写不仅无法满足而且非常低效,又因为票据的格式是无法修改的,传统的报表工具通常是用测量的方法确定数据区域的位置,来设计报表.如此一来,制作一张票据打印的报表

微软Dynamics 使用葡萄城的Wijmo 5提供移动端用户界面选择

近日,全球最大的控件提供商葡萄城公司宣布: 葡萄城近日与微软公司达成合作,将Wijmo 产品线的HTML5和JaveScript 控件融合到微软Dynamics CRMOnline 2016版中. 随着微软Dynamics CRM Online 2016 Update的发布,微软的最新版本为管理员和定制员提供了新的移动能力.为了给Dynamics CRM解决方案建立新的移动界面,微软使用了Wijmo 5中的高质量JavaScript控件. Wijmo 5 是一套真正的JavaScript UI控

葡萄城发布新版ActiveReports 9报表控件和报表服务器

2014年11月10日---葡萄城宣布正式发布ActiveReports 9,包含了三种报表模型:RDL报表.页面报表.区域报表.对于ActiveReports中的这个最新版本中,我们专注于提高产品的性能.自定义能力,易用性.新版本主要功能包括: 无需手动编写SQL 易于实现报表套打 拖拽添加报表目录 符合流行圆角矩形 增强Excel文件导出 增强HTML5移动报表 此外,在该版本中极大提升了报表设计时性能,如可承载1000+控件的复杂报表模板 创新的报表分层设计理念. 对报表中不同控件进行分组

葡萄城报表V11 SP2新版本震撼发布!

葡萄城报表正式发布 v11.2 版本,强势推出国内首创的基于HTML5的在线报表设计器,从此报表设计告别桌面应用程序,随时随地修改报表,真正跨平台操作,从而使任何报表用户更快速的响应报表业务变化! 在线报表设计器/Web报表设计器 全在线设计,无需安装客户端设计器,能与 B/S 系统直接集成 采用 OFFICE 的操作体验,易于学习,无论软件开发者,还是最终用户都能很快上手 使用选项设置窗格替代传统的属性窗口,简单轻松配置报表元素行为 内置报表主题与元素样式,无需专业美工,也能创建外观精美的报表

葡萄城多款优秀控件产品发布全新版本

葡萄城多款优秀控件产品发布全新版本 近日,全球最大的控件提供商葡萄城宣布,旗下多款优秀开发控件包括报表控件产品ActiveReports..NET全功能控件套包ComponentOne及新一代JavaScript控件WijmoJS等发布了2018年度首个重要的全新版本.随着新版本的发布,将为您提供更高的开发效率及更优秀的交互体验,也将为您产品的易用性提升到一个全新高度. ActiveReports报表控件V12 SP1新特性 ActiveReports 是一款专注于 .NET 平台的报表控件,全

葡萄城SpreadJS表格控件荣获&amp;ldquo;2018年度优秀软件产品&amp;rdquo;称号

日前,中国软件行业协会权威发布"2018年优秀软件产品"名单,葡萄城SpreadJS 纯前端表格控件产品荣耀上榜,凭借其对Excel的高度兼容性和处理海量数据时的绝佳性能表现,获得行业和用户的高度认可. "年度优秀软件产品"是由中国软件行业协会组织评选,旨在发掘并推介优秀软件产品,培育著名软件品牌,为政府采购.大型信息化工程招标项目提供参考.整个评选历时3个多月,由多位行业专家对参软软件进行多轮评估.评选,最终选出优秀产品,予以公布. 葡萄城的SpreadJS 是一

百万行数据的考验 – 葡萄城ActiveReports .NET报表控件签约博商云

近日,葡萄城成功签约博商云科技有限公司(以下简称"博商云"),用 ActiveReports .NET 报表控件,助力博商云旗下全渠道 ERP 零售系统中的各种数据报表应用. 博商云是一家具有国际背景的计算机软件技术产品研发与服务供应商,拥有国际化视野,为国内外有志于建立并发展全渠道新零售运营模式的企业提供优质的软件产品与技术服务.注册资本500万元,公司总部位于美国洛杉矶. 博商云是国内首家开始研究新零售系统的企业,是新零售系统的领导者,截止目前已深入研究实践新零售领域7年,对于指导

葡萄城首席架构师:前端开发与Web表格控件技术解读

讲师:Issam Elbaytam,葡萄城集团全球首席架构师(Chief Software Architect of GrapeCity Global).曾任 Data Dynamics.Inc 创始人兼资深产品经理,个人研究方向主要为 MS.NET语言及平台.动态化系统构建,以及高性能大型分布式Web系统架构,主导了葡萄城多款畅销控件产品的系统架构与性能优化.   “25年来每天只休息4小时,除了日常作息时间,Issam不是在研究技术和产品,就是在去研究技术发展趋势的路上”这就是葡萄城同事对他

葡萄城页面报表通过表达式来改变字体大小

如题,做报表时候,有时候要根据是否是合计行,来改变合计行的粗细,大小. 可以通过字体的表达式来实现: 表达式的通用写法:  =iif( Fields!YourFieldName.Value operator "Value to compare", "If condition is met, use this value.", "If not, use this one.") 如果满足条件(第一个参数),则执行第二个参数,否则执行最后一个参数 例如