學習發現 往人少的地方走

Showing posts with label 程式設計. Show all posts
Showing posts with label 程式設計. Show all posts

Saturday, January 09, 2010

Java double BigDecimal 計算圓周長

直接使用double計算會衍生的小數點不規則問題,

(參考show_double() method )
此篇有較詳細的說明, http://www.ej38.com/showinfo/java-133092.html
因此有BCD碼的產生,
不止Java會發生,其他程式語言對浮點數也會有相同狀況,
(老師應該想讓大家瞭解這樣的情形)
需使用四捨五入或BigDecimal解決幫助使用工程上或科學上運算的問題。

程式如下(仍保留部分原作者原始碼):
半徑與PI值仍是設定double,
回傳圓周長的型態也是double
---------------------------------------------------------------------------
import java.math.BigDecimal;

class M9816104
{
    double pi;
    double radius,width,height;

    double diagonal ()
    {
        return Math.sqrt (width*width+height*height);
    }

    // 新增1
    double perimeter ()
    {
        return radius*2*pi;
    }
 
    // 新增2
    double perimeter (double radius , double pi)
    {
        BigDecimal b1 = new BigDecimal(Double.toString(radius));
        BigDecimal b2 = new BigDecimal(Double.toString(pi));
        return b1.multiply(b2).doubleValue()*2;
    }
   
    void show_perimeter ()
    {
        System.out.println ("圓周長="+(radius*2*pi));
    }

    // 新增3
    void show_double ()
    {
        int i;
        for(i=0;i<5;i++)
        {
           System.out.println(i+"==>"+i*1.1);
        }
        /*            
                        會產出以下結果     
                         0==>0.0
                         1==>1.1
                         2==>2.2
                         3==>3.3000000000000003
                         4==>4.4
        */
    }

    public static void main (String[] X)
    {
        M9816104 test = new M9816104();
        test.radius=5.0;
        test.pi=3.14;
        test.width=4.0;
        test.height=3.0;
       
        test.show_perimeter ();
        System.out.println ("矩型對角線="+test.diagonal());
        System.out.println ("(1)perimeter="+test.perimeter());
        System.out.println ("(2)perimeter="+test.perimeter(test.radius,test.pi));
        test.show_double();
    }
}

Saturday, November 14, 2009

Java Pyramid 金字塔 練習

很久沒寫程式了,也來試試看這個基礎實用的題目,
"輸入金字塔層級(n),用程式畫出金字塔圖案 "。

使用的程式語言Java (用什麼開發皆可 C,C++...),
訓練思考比較重要囉~(寫法百百種,以下是以最直覺的想法短時間實作)




*******************************************************************************
public class Pyramid_Test
{
    public static void main(String args[])
    {
        int n=Integer.parseInt(args[0]);      // 輸入數字,代表列數

        int p=n*2-1;     // 每列點數
        int istar;           // 開始列印*起點
        int inum=0;      // 列印*次數
        int i,j;

        boolean bflag=true; // 列印 * 或者 " "

       for( i=0 ; i<n ;i++)
        {
               istar=n-1-i;
               for( j=0 ; j < p && inum <= i ;j++)
               {
                   if(j >= istar && bflag==true)
                   {
                     System.out.print("*");
                     inum=inum+ 1;
                     bflag=false;
                   }
                   else
                   {
                    System.out.print(" ");
                    bflag=true;
                   }
               }
               inum=0;        //進入下一層,列印*次數歸零
               bflag=true;   //進入下一層,列印* 或者 " " 還原初始值
               System.out.println(""); // 換行
        }
    }
}

*******************************************************************************