2016年9月9日 星期五

python 程式設計50題測試範例-50


50、試設計一程式,利用二分逼近法求一數值a之開7次方根。
      所謂二分逼近法,解釋如下:
      設某數x位於線段AB=[a。﹐b]內,(亦即a≦x≦b)vhbdi vfhae
      hjhneAB。等分為兩段,亦即[a,(a+ b)/2][(a+ b)/2,b];而把x
      所在的那一段稱為A1B1=[a1,b1](如果x=(a+ b)/2,則任取其中一段),換句話
      說,當a≦x≦(a+ b)/2時,a1=a。,b1=(a+ b)/2,當(a+ b)/2≦
      x≦b。時,a1=(a0+b0)/2b1=b。,這樣逐次二等分而縮小範圍,就可得到x
      此法為二分逼近法。

  public static double sqrt(double x) throws Exception 
  {
    double small = 0.0000001;
    double low, high;
    if (x < 0) throw new Error();
    if (x < 1) { 
      low = 0; high = 1//  0 < x < 1 則其平方根必然介於 0  1之間。
    } else {
      low = 1; high = x//  x > 1 , 則其平方根必然介於 1  x 之間。
    }
    while (high - low > small)  // 不斷逼近,直到範圍夠小為止。
    {
      double mid = (low + high) / 2;
      if (mid*mid > x)          // 解小於 mid , 將上限調為 mid
        high = mid;
      else
        low = mid;              // 解大於 mid , 將下限調為 mid
    }
    return low;
  }
}
50.

範例一
範例二
範例三
範例四
範例五
輸入
1
0.1
0
-125
-0.285
輸出
1.000000
0.719686
0.000000
-1.993235
-0.835835


程式:
#coding=utf8

a=1
while(a != 0):

  print("50-1、試設計一程式,利用二分逼近法求一數值a之開7次方根。")
  print("========================================================")
           
  while True:
     a=float(input("請輸入數值 0 <  a  < 10000:"))
     try:
        a= float(a)
       
     except ValueError:
       print ('這是不合法的輸入.  請再輸入一次...')
       continue
        
     if ( a < 10000):
       break
#==================

  sign=0
  small=float(0.0000001)
  if (a<0):
     a=abs(a)
     sign=1
   
  if (a<1) :
      low=0
      high=1
  else:
      low=1
      high=a

  while ( (high-low) > small):
     mid=float((low+high)/2)
     if (mid*mid*mid*mid*mid*mid*mid > a):
        high=mid
     else:
        low=mid
        
  if (sign==1):
     print("一數值a之開7次方根: -",low)
  else:
     print("一數值a之開7次方根:  ",low)          
    
#==================

結果:
================= RESTART: D:/程式語言 Python 入門/50題/Ex50-50.py =================
50-1、試設計一程式,利用二分逼近法求一數值a之開7次方根。
========================================================
請輸入數值 0 <  a  < 10000:1
一數值a之開7次方根:   1
50-1、試設計一程式,利用二分逼近法求一數值a之開7次方根。
========================================================
請輸入數值 0 <  a  < 10000:0.1
一數值a之開7次方根:   0.7196856141090393
50-1、試設計一程式,利用二分逼近法求一數值a之開7次方根。
========================================================
請輸入數值 0 <  a  < 10000:-125
一數值a之開7次方根: - 1.9932352639734745
50-1、試設計一程式,利用二分逼近法求一數值a之開7次方根。
========================================================
請輸入數值 0 <  a  < 10000:-0.285
一數值a之開7次方根: - 0.8358352184295654
50-1、試設計一程式,利用二分逼近法求一數值a之開7次方根。
========================================================
請輸入數值 0 <  a  < 10000:0
一數值a之開7次方根:   0
>>> 

沒有留言:

張貼留言

2024_09 作業3 以Node-Red 為主

 2024_09 作業3  (以Node-Red 為主  Arduino 可能需要配合修改 ) Arduino 可能需要修改的部分 1)mqtt broker  2) 主題Topic (發行 接收) 3) WIFI ssid , password const char br...