討論區快速選單
知識庫快速選單
政府補助!資策會APP就業班 政府補助!學嵌入式+物聯網 下載Alexa Toolbar讓你上網更有趣
[ 回上頁 ] [ 討論區發言規則 ]
選擇式的積分程式
更改我的閱讀文章字型大小
作者 : minru(minru)
[ 貼文 29 | 人氣 2054 | 評價 200 | 評價/貼文 6.9 | 送出評價 2 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2003/6/7 上午 04:49:17
//選擇式的積分程式
/* 這是一個選擇式的積分程式,當使用者輸入0時,程式會自動
   呼叫函數f0來積分,輸入1則呼叫函數f1來積分...,現在的問
   題有兩方面,第一,請幫忙檢查看看,這個程式有什麼地方可
   以再改善的?例如

   1.每計算一次積分會呼叫10萬次的函數(見const int n=..處)
     ,執行效率是否無形中大大減損,還好這是使用指向函數的指標
     陣列的觀念來實作的,(使用指標來實作效率應該是較佳的?)
     這種類型的函數(f0,..f2)是否適合加上關鍵字inline?

   2.執行數學計算的程式通常需要作數值分析,例如n值要取多大
     才適當,取太大執行時間會延長,太小,精確度不夠..

   第二,(這才是主要的疑問)如何以此程式為雛形,設計一個程式
   ,當使用者輸入x^2時,程式會自動呼叫一個函數(其回傳值為x^2)
   來積分,若輸入(1+2sinx*cosx)/expx,則會呼叫相對應的函數來
   積分,...,於此類推,完全可以由使用者自訂,這做得到嗎? */
#include <iostream>
#include <iomanip>
#include <cmath>
#include <cstdlib>
using namespace std;
double f0(double x)
{
return 1.0/(1.0+pow(x,2.0));
}
double f1(double x)
{
return sin(x);
}
double f2(double x)
{
return cos(x);
}
int main()
{
const int max=3;
double(*pfunc[max])(double)={f0,f1,f2};
cout<<" 0) 1/(1+x^2) "<<"1) sinx\n"
<<" 2) cosx\n\n"
<<"請輸入介於0到"<<max-1<<"的數字,選擇積分函數:";
int index;
cin>>index;
if(index<0 || index>10){
cout<<"輸入錯誤,數字必須介於0到"<<max-1<<"之間!\n";
     system("pause");
exit(1);
}
    const int n=100000;
    double x,a,b,integrate=0.0; //integrate:定積分值
cout<<"請輸入積分的下限a,上限b:\n";
cin>>a>>b;
double w=(b-a)/n; //w: width
for(int i=1;i<=n;i++){ //開始計算積分的區段
x=a+(2*i-1)*w/2;
integrate+=pfunc[index](x)*w;
}
cout<<"Out= "<<integrate<<"\a\n";
system("pause");
return 0;
}
 板主 : simula
 > C++ - 討論區
 - 最近熱門問答精華集
 - 全部歷史問答精華集
 - C++ - 知識庫
  ■ 全站最新Post列表
  ■ 我的文章收藏
  ■ 我最愛的作者
  ■ 全站文章收藏排行榜
  ■ 全站最愛作者排行榜
  ■  月熱門主題
  ■  季熱門主題
  ■  熱門主題Top 20
  ■  本區Post排行榜
  ■  本區評價排行榜
  ■  全站專家名人榜
  ■  全站Post排行榜
  ■  全站評價排行榜
  ■  全站人氣排行榜
 請輸入關鍵字 
  開始搜尋
 
Top 10
評價排行
C++
1 Raymond 12600 
2 simula 4690 
3 青衫 4670 
4 coco 3900 
5 白老鼠(Gary) 3610 
6 Ben 2250 
7 ozzy 1980 
8 Anderson 1960 
9 windblown 1650 
10 Kenny 1540 
C++
  專家等級 評價  
  一代宗師 10000  
  曠世奇才 5000  
  頂尖高手 3000  
  卓越專家 1500  
  優秀好手 750  
Microsoft Internet Explorer 6.0. Screen 1024x768 pixel. High Color (16 bit).
2000-2014 程式設計俱樂部 http://www.programmer-club.com.tw/
0.25