葡萄城程序设计大赛

科学计算器

一开发平台
基于windows 7 +Eclipse开发,采用Java语言编码
二模块及算法
软件简介:自动解析计算表达式,并进行运算返回结果的一个科学计算器程序。
- ①输入和输出

科学计算器的输入为一个类似于“SQRT(1+2)”形式的表达式的字符串,该输入对应的   运算结果为3的平方根。输出结果为一个表示运算结果的字符串,比如说 “1.7320508075688773”
  • ②关于输入
    输入表达式包含以下类型: 数值常量 ,运算符号 ,数值常量 包括正数和负数。
    运算符号 :
    支持普通的四则运算符号,包括+-*/,分别对应加减乘除运算
    支持模除和乘方运算符号,形如 ”x mod y” 以及 “x ^ y”。
    支持括号运算符,用作改变运算优先级,例如 ”1 * (2 + 4)”
    数组仅作为参数形式出现在函数参数中,数组由一组数值常量或者
    表达式组成,由逗号”,” 分隔,并使用方括号”[]”做为数组的界限标记。
  • ③功能函数

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

     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)//将弧度转换为角度

·

模除运算

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为底的对数就变为非常简单了:
  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清除缓存器
统计模式,这是一种完全不同的计算模式,你不再逐次的输入数据与操作符而得到一个结果,而是先输入一系列已知的数据,然后计算各种统计数据(注意,这里清除之前输入的一组数据的按钮为CAD)。支持的统计数据包括平均值、平方平均值,和,平方和,还有就是标准差(standard deviation),标准差是方差的平方根,用来表示一组数据的离散程度。这里提供了两种标准差的计算方式:
:总体标准差(population standard deviation),其在计算方差的过程当中是除以n的。
:样本标准差(sample standard deviation),其在计算方差的过程中式除以n-1的

时间: 2024-11-03 23:00:49

葡萄城程序设计大赛的相关文章

《我与葡萄城的故事》— 征文大赛

征文主题 2014年10月25日是西安葡萄城的第26个生日,在过去的这些年里,感谢每一个陪伴我们一起走过风风雨雨.见证我们成长的用户和朋友. 一路走来,你的每一个赞扬.每一个建议.每一个反馈,对我们来说都弥足珍贵:一路走来,感谢支持; 一路走来,感谢有你. 你是否还记得第一次在项目中使用ComponentOne控件的情景? 你是否还记得与同学一起在宿舍调试代码参加<葡萄城杯大学生程序设计大赛>? 你是否还记得周末来葡萄城参加IT圈的技术沙龙活动而惊喜不已的心情? 你是否还在使用奥林岛财务软件,

第十一届GPCT杯大学生程序设计大赛完美闭幕

刚刚过去的周六(6月7号)是今年高考的第一天,同时也是GPCT杯大学生程序设计大赛颁奖的日子,下面我们用图文再回顾一下本次大赛颁奖的过程.   评审过程的一些花絮<感谢各位评审这些天的付出!>: 感谢葡萄城给我的这次的锻炼的机会,让我学会了很多,也明白了很多!最重要的是感谢评委们!你们辛苦了! 感谢MTV-我在上嵌入式课-- 永远别忘了为你付出的人,成就永远不属于一个人.就是装也得怀有一颗谦卑感恩之心.版主大人受小弟一拜! 再次感谢品审大人,我们组还很多要改进的,到时候一定要跟各路大神好好交流

第五届“Astar百度之星程序设计大赛”正式向全国高校学生启动

本报讯(记者高天赋 实习生沈梦菲)近日,第五届"Astar百度之星程序设计大赛"正式面向全国高校学生启动. "Astar百度之星程序设计大赛"是百度公司从2005年起创办的一项校园赛事,旨在为广大程序设计爱好者搭建一个比试身手.切磋交流的平台,大赛创办至今已经吸引了数万名参与者,众多程序设计高手通过大赛脱颖而出. 据介绍,今年的"Astar百度之星程序设计大赛"面向全国所有高校的在校学生,不分年级.专业,均可报名参加,通过在线资格赛.晋级赛等一系

百度Astar2008程序设计大赛 中科大学子夺冠

中介交易 http://www.aliyun.com/zixun/aggregation/6858.html">SEO诊断 淘宝客 云主机 技术大厅 日前,由全球最大的中文搜索引擎百度举办的"百度之星Astar2008程序设计大赛"在京圆满落幕.来自中国科技大学的FZK从17000多名程序设计高手中脱颖而出,勇夺"百度之星"桂冠. 本次大赛历时2个月,参赛选手包括清华.北大.复旦.香港中文大学等数十所高校,以及全国百强中学的部分高中学生,这也代表了当

ACM国际大学生程序设计大赛全球总决赛开赛

信息集装箱 本报哈尔滨2月3日电 (董欣 记者李丽云)今天,被誉为"计算机领域奥林匹克竞赛"的第34届ACM国际大学生程序设计大赛全球总决赛在哈尔滨工程大学起航中心开幕.来自33个国家和地区的103支队伍近300余名世界各大学计算机精英汇聚哈尔滨比拼才智. 据悉,这项开始于1970年的竞赛是世界上规模最大.历史最长.最具影响力的大学生国际级计算机类赛事.竞赛由国际计算机界历史悠久.颇具权威性的组织ACM学会即美国计算机协会主办,旨在使大学生运用计算机来充分展示自己分析问题和解决问题的能

百度之星Astar2009程序设计大赛落幕

7月23日消息,由百度举办的"百度之星Astar2009程序设计大赛"在京圆满落幕.来自复旦大学的冯国栋表现出色,从两万多名参赛的程序设计高手中脱颖而出,最终捧得了"2009年百度之星"桂冠. 自2005年创办以来,"Astar百度之星程序设计大赛"已经成为中国互联网中规模最大.最具影响力的程序开发设计赛事.据主办方百度介绍,今年的大赛历时2个月,参赛选手包括清华.北大.复旦.香港中文大学等1000多所高校,以及全国百强中学的部分高中学生,这也代

咨询各位大神:ComponentOne、Spread、ActiveReports和葡萄城控件的关系

问题描述 有使用过的,出来吼两声吧.引用 ComponentOne.Spread.ActiveReports和葡萄城控件的关系 1中文官网2服务电话等备注:卖控件的代理商,免入. 解决方案 解决方案二:帮你顶下..解决方案三:葡萄城是公司名,公司的主要业务之一是控件业务,因此葡萄城控件指葡萄城公司的所有控件,其中包括ComponentOne.Spread.ActiveReports等控件产品.详细信息,可以访问葡萄城控件的中文官方网站:,上面有具体的联系方式.

百度之星Astar2009程序设计大赛落幕 复旦学子夺冠

中介交易 SEO诊断 淘宝客 云主机 技术大厅 2009年7月23日,由全球最大的中文搜索引擎百度举办的"百度之星Astar2009程序设计大赛"在京圆满落幕.来自复旦大学的冯国栋表现出色,从两万多名参赛的程序设计高手中脱颖而出,最终捧得了"2009年百度之星"桂冠. 自2005年创办以来,"Astar百度之星程序设计大赛"已经成为中国互联网中规模最大.最具影响力的程序开发设计赛事.据主办方百度介绍,今年的大赛历时2个月,参赛选手包括清华.北大.

2009百度之星程序设计大赛启动

中介交易 http://www.aliyun.com/zixun/aggregation/6858.html">SEO诊断 淘宝客 云主机 技术大厅 5月5日,a*star2009百度之星程序设计大赛,以"Code人心弦"为宣传口号全面启动. 据悉,从5月5日到5月29日,均可在大赛官网注册.大赛官网包含赛事规则.赛题集锦.答题指南等详细信息,选手可在此处了解最新消息,为比赛做充分准备. 整个赛事一直延续到2009年7月中旬,包括5月底的网络资格赛(初赛).6月中旬的网