史萊姆論壇

返回   史萊姆論壇 > 專業主討論區 > 程式語言討論區
忘記密碼?
論壇說明 標記討論區已讀

歡迎您來到『史萊姆論壇』 ^___^

您目前正以訪客的身份瀏覽本論壇,訪客所擁有的權限將受到限制,您可以瀏覽本論壇大部份的版區與文章,但您將無法參與任何討論或是使用私人訊息與其他會員交流。若您希望擁有完整的使用權限,請註冊成為我們的一份子,註冊的程序十分簡單、快速,而且最重要的是--註冊是完全免費的!

請點擊這裡:『註冊成為我們的一份子!』

Google 提供的廣告


發文 回覆
 
主題工具 顯示模式
舊 2006-05-11, 10:22 AM   #1
leowang 帥哥
長老會員
 
leowang 的頭像
榮譽勳章
UID - 2461
在線等級: 級別:111 | 在線時長:12773小時 | 升級還需:219小時級別:111 | 在線時長:12773小時 | 升級還需:219小時級別:111 | 在線時長:12773小時 | 升級還需:219小時級別:111 | 在線時長:12773小時 | 升級還需:219小時級別:111 | 在線時長:12773小時 | 升級還需:219小時級別:111 | 在線時長:12773小時 | 升級還需:219小時
註冊日期: 2002-12-06
文章: 4729
精華: 0
現金: 101679 金幣
資產: 668410953 金幣
預設 疑問 - 急....這程式我寫不出來

這c語言程式我寫不出來
http://home.pchome.com.tw/web/itaxd/01.bmp

此帖於 2006-05-11 10:40 AM 被 leowang 編輯.
__________________
https://lh3.googleusercontent.com/RuWvUdY-gxGU8oiOD6DIEoKZhLD-Hn-ITKj1LgD3QY6MehzkoddZNew3f3AFLA8dbxbnK-uiFipPzO3GpT5iL4VTIKCiYhgfnQiP5DROmn_5YIpA9zrseGljottMSbiTsw=w1280

金錢的數量,決定馬子的漂亮
硬碟的容量,決定男人的力量

製作Mail Logo按這裡
leowang 目前離線  
送花文章: 257, 收花文章: 1161 篇, 收花: 4928 次
回覆時引用此帖
舊 2006-05-11, 11:45 AM   #2 (permalink)
管理版主
 
mini 的頭像
榮譽勳章
UID - 4144
在線等級: 級別:96 | 在線時長:9642小時 | 升級還需:155小時級別:96 | 在線時長:9642小時 | 升級還需:155小時級別:96 | 在線時長:9642小時 | 升級還需:155小時級別:96 | 在線時長:9642小時 | 升級還需:155小時級別:96 | 在線時長:9642小時 | 升級還需:155小時級別:96 | 在線時長:9642小時 | 升級還需:155小時
註冊日期: 2002-12-07
文章: 13241
精華: 0
現金: 26216 金幣
資產: 3024026 金幣
預設

<第一算式>
x的k次方 就是
int i;

for(i=1; i<k; i++) x=x*x;
return x;

<第二算式>
k! 就是
int i, k_sum=1; //k_sum表示k! 的和

for(i=1; i<=k; i++) k_sum=k_sum*i;
return k_sum;


那Σ ,n , k=1
就是表示
累加 n 次 <第一算式> 除以 <第二算式>
double sum=0;

for(i=0; i<n; i++) /* sum= sum + <第一算式> 除以 <第二算式> */;
mini 目前離線  
送花文章: 1999, 收花文章: 7954 篇, 收花: 26743 次
回覆時引用此帖
舊 2006-05-11, 12:05 PM   #3 (permalink)
管理版主
 
mini 的頭像
榮譽勳章
UID - 4144
在線等級: 級別:96 | 在線時長:9642小時 | 升級還需:155小時級別:96 | 在線時長:9642小時 | 升級還需:155小時級別:96 | 在線時長:9642小時 | 升級還需:155小時級別:96 | 在線時長:9642小時 | 升級還需:155小時級別:96 | 在線時長:9642小時 | 升級還需:155小時級別:96 | 在線時長:9642小時 | 升級還需:155小時
註冊日期: 2002-12-07
文章: 13241
精華: 0
現金: 26216 金幣
資產: 3024026 金幣
預設

試寫了一下
不知對不對

語法:
#include <stdio.h>
#include <stdlib.h>

/* x的k次方 */
double xx(double x, int k)
{
int i;

  for(i=1; i<k; i++) x=x*x;
  return x;
}

/* k! */
int kk(int k)
{
int i, k_sum=1; //k_sum表示k! 的和

  for(i=1; i<=k; i++) k_sum=k_sum*i;
  return k_sum;
}

/*函式 my_fun */ 
double my_fun(double x, int n)
{
  double sum=0;
  int i, k=1;

  for(i=k; i<=n; i++){
    sum=sum+(xx(x,i) / kk(i));
  }
  
  return sum;
}

int main(int argc, char *argv[])
{

  printf("%f", my_fun(0.1, 8));
    
  system("PAUSE");	
  return 0;
}
mini 目前離線  
送花文章: 1999, 收花文章: 7954 篇, 收花: 26743 次
回覆時引用此帖
舊 2006-05-11, 12:32 PM   #4 (permalink)
管理員
 
getter 的頭像
榮譽勳章
UID - 6433
在線等級: 級別:96 | 在線時長:9733小時 | 升級還需:64小時級別:96 | 在線時長:9733小時 | 升級還需:64小時級別:96 | 在線時長:9733小時 | 升級還需:64小時級別:96 | 在線時長:9733小時 | 升級還需:64小時級別:96 | 在線時長:9733小時 | 升級還需:64小時級別:96 | 在線時長:9733小時 | 升級還需:64小時
註冊日期: 2002-12-08
住址: 天線星球
文章: 8157
精華: 0
現金: 19955 金幣
資產: 765391 金幣
預設

語法:
/*
數學式︰
 n   x^k   x^1   k^2         k^n
Σ ═--─═--- + --- + ... + ---
 k=1  k!    1!    2!          n!
 
let x = 0.1 ; n = 8 
*/
#include <stdio.h>
#include <stdlib.h>

double my_fun(double x,int n) /* 數學運算式 */ 
{
int i,j;
double sum = 0;
for(i=j=1; i<=n; i++) 
   {
    j*=i; /* 計算 n! 是多少階乘,既 1×2×..n */
    sum += pow(x,i)/j ; /* 計算 x次方 ÷n! 的加總 */
    /* pow(x值,i次方)函式 */ 
   }
return sum;
}

display_00() /* 顯示畫面 */
{
system("cls");
puts("數學公式:");
puts(" n   x^k   x^1   k^2         k^n"); 
puts("Σ = --- = --- + --- + ... + ---");
puts(" k=1  k!    1!    2!          n!");
puts("\n let x = 0.1 ; n = 8");
}

main() /* 主程式 */ 
{
display_00();
printf("\nSUM = %0.16f \n\n",my_fun(0.1,8) );
system("pause");
}
原來 mini 大已經寫好啦 ...
應該是對的 ... 答案跟 mini 大的一樣

這種 運算式算是有規律性值得,如 p(n,r)
可以用 for/while loop 或 遞回函式去寫

PS. 遞回函式,某些程式碼可能變的很簡單,也時有變的更複雜 ...。

此帖於 2006-05-11 04:32 PM 被 getter 編輯.
__________________
在「專業主討論區」中的問題解決後,要記得按一下 http://forum.slime.com.tw/images/stamps/is_solved.gif 按鈕喔,
這是一種禮貌動作。

一樣是在「專業主討論區」中發問,不管問題解決與否,都要回應別人的回答文喔。
不然搞 [斷頭文],只看不回應,下次被別人列入黑名單就不要怪人喔。

天線寶寶說再見啦~ ... 天線寶寶說再見啦~

迪西:「再見~ 再見~」

Otaku Culture Party 關心您 ...
getter 目前離線  
送花文章: 37855, 收花文章: 6441 篇, 收花: 26052 次
回覆時引用此帖
舊 2006-05-11, 03:33 PM   #5 (permalink)
管理員
 
getter 的頭像
榮譽勳章
UID - 6433
在線等級: 級別:96 | 在線時長:9733小時 | 升級還需:64小時級別:96 | 在線時長:9733小時 | 升級還需:64小時級別:96 | 在線時長:9733小時 | 升級還需:64小時級別:96 | 在線時長:9733小時 | 升級還需:64小時級別:96 | 在線時長:9733小時 | 升級還需:64小時級別:96 | 在線時長:9733小時 | 升級還需:64小時
註冊日期: 2002-12-08
住址: 天線星球
文章: 8157
精華: 0
現金: 19955 金幣
資產: 765391 金幣
預設

這是遞回函式的寫法 ... 因為... 所以... 用到了 2 個遞回函式

1. n! 求階乘的遞回函式
2. 運算加總的遞回函式,用 switch() 的方法。

供參考

檔案下載 (原始碼+執行檔)
http://rapidshare.de/files/20164379/SUMS.rar.html


語法:
/*
遞回函式06-1 
數學式︰
 n   x^k   x^1   k^2         k^n
Σ ═---═--- + --- + ... + ---
 k=1  k!    1!    2!          n!
 
let x = 0.1 ; n = 8 
*/
#include <stdio.h>
#include <stdlib.h>

fact(int n) /* 遞回函式,求 n! 階乘 */ 
{
int sum = 1;
if (n==0 || n==1)
   { return 1; }
else
   {
    sum = n * fact(n-1);  /* 自己呼叫自己做連乘到 n  */
    return sum;
   } 
}

double my_fun(double x,int n) /* 遞回函式,數學式加總 */
{
int i=1;
switch (n)
       {
         case 0:  /* n 為 0 的狀況 */
 	return pow(x,0)/i;  /* 可以用 return 1; 取代 */ 
		
         case 1:  /* n 為 1 的狀況 */ 
         i = fact(n);	 
  	return pow(x,1)/i;
		
     	default: /* n > 1 的狀況 */
	i = fact(n);
         return my_fun(x,n-1)+pow(x,n)/i;  /* 自己呼叫自己加總到 n */
       }
}

display_00() /* 顯示畫面 */
{
system("cls");
puts("數學公式:");
puts(" n   x^k   x^1   k^2         k^n"); 
puts("Σ = --- = --- + --- + ... + ---");
puts(" k=1  k!    1!    2!          n!");
puts("\n let x = 0.1 ; n = 8");
}

main() /* 主程式 */ 
{
int x;
 
display_00();

for(x=0; x<=8; x++) /* 依序顯示 n = 0 ~ 8 的值 */  
   {
    printf("\n n=%d,SUM = %0.16f",x,my_fun(0.1,x));
   } 
puts("\n");
system("pause");
}
1. n! 求階乘的遞回函式
2. 運算加總的遞回函式,用 if - else if - else 的方法 。

語法:
/*
遞回函式06-2 
數學式︰
 n   x^k   x^1   k^2         k^n
Σ ═---═--- + --- + ... + ---
 k=1  k!    1!    2!          n!
 
let x = 0.1 ; n = 8 
*/
#include <stdio.h>
#include <stdlib.h>

fact(int n) /* 遞回函式,求 n! 階乘 */ 
{
int sum = 1;
if (n==0 || n==1)
   { return 1; }
else
   {
    sum = n * fact(n-1); 
    return sum;
   } 
}

double my_fun(double x,int n) /* 遞回函式,數學式加總 */
{
int i=1;
if (n==0)  /* n 為 0 的狀況 */
    return pow(x,0)/i; /* 可以用 return 1; 取代 */ 
	
else if ( n==1 ) /* n 為 1 的狀況 */
         return x;

else  /* n > 1 的狀況 */ 
    { 
     i = fact(n);
     return my_fun(x,n-1)+pow(x,n)/i;  
    }
}

display_00() /* 顯示畫面 */
{
system("cls");
puts("數學公式:");
puts(" n   x^k   x^1   k^2         k^n"); 
puts("Σ = --- = --- + --- + ... + ---");
puts(" k=1  k!    1!    2!          n!");
puts("\n let x = 0.1 ; n = 8");
}

main() /* 主程式 */ 
{
int x;

display_00();

for(x=0; x<=8; x++) /* 依序顯示 n = 0 ~ 8 的值 */ 
   {
    printf("\n n=%d,SUM = %0.16f",x,my_fun(0.1,x));
   } 
puts("\n");
system("pause");
}

此帖於 2006-05-11 04:40 PM 被 getter 編輯.
getter 目前離線  
送花文章: 37855, 收花文章: 6441 篇, 收花: 26052 次
回覆時引用此帖
舊 2006-05-11, 06:43 PM   #6 (permalink)
長老會員
 
leowang 的頭像
榮譽勳章
UID - 2461
在線等級: 級別:111 | 在線時長:12773小時 | 升級還需:219小時級別:111 | 在線時長:12773小時 | 升級還需:219小時級別:111 | 在線時長:12773小時 | 升級還需:219小時級別:111 | 在線時長:12773小時 | 升級還需:219小時級別:111 | 在線時長:12773小時 | 升級還需:219小時級別:111 | 在線時長:12773小時 | 升級還需:219小時
註冊日期: 2002-12-06
文章: 4729
精華: 0
現金: 101679 金幣
資產: 668410953 金幣
預設

語法:
#include <stdio.h>
#include <stdlib.h>

void my_fun(double,int);
int pow(double,int);
int factorial(int);
int main(void)
{
    double x=0.1;
    int n=8;
    my_fun(x,n);
    system("pause");
    return 0;
}
void my_fun(double x, int n)
{
    double result=0;
    int i;
    for (i=1;i<=n;i++)
     result=result+(pow(x,i)/factorial(i));
     printf("%f\n",result);
 } 
int pow(double x, int k)
{
  int i;

  for(i=1; i<k; i++) x=x*x;
  
}

       
int factorial (int n)
{
    if (n==1)
    return 1;
    else
    return n * factorial(n-1);
}
這是我寫的~~有錯誤耶
但不知道該怎麼改~~請大大幫幫忙

此帖於 2006-05-11 08:14 PM 被 leowang 編輯.
leowang 目前離線  
送花文章: 257, 收花文章: 1161 篇, 收花: 4928 次
回覆時引用此帖
舊 2006-05-11, 10:46 PM   #7 (permalink)
管理員
 
getter 的頭像
榮譽勳章
UID - 6433
在線等級: 級別:96 | 在線時長:9733小時 | 升級還需:64小時級別:96 | 在線時長:9733小時 | 升級還需:64小時級別:96 | 在線時長:9733小時 | 升級還需:64小時級別:96 | 在線時長:9733小時 | 升級還需:64小時級別:96 | 在線時長:9733小時 | 升級還需:64小時級別:96 | 在線時長:9733小時 | 升級還需:64小時
註冊日期: 2002-12-08
住址: 天線星球
文章: 8157
精華: 0
現金: 19955 金幣
資產: 765391 金幣
預設

引用:
作者: leowang
[code]
#include <stdio.h>
#include <stdlib.h>

void my_fun(double,int);
int pow(double,int);
int factorial(int);
int main(void)
{
...

int pow(double,int);


int pow(double x, int k)
{
int i;

for(i=1; i<k; i++) x=x*x;
}

直接刪掉就好啦

因為 pow(x,y); 是 C 語言內建的函數指令 ... 不需要自己寫副函式

就能直接用,好像是包在 stdlib.h 裏面 ...

改好的...程式
語法:
#include <stdio.h>
#include <stdlib.h>

void my_fun(double,int);

int factorial(int);
int main(void)
{
    double x=0.1;
    int n=8;
    my_fun(x,n);
    system("pause");
    return 0;
}
void my_fun(double x, int n)
{
    double result=0;
    int i;
    for (i=1;i<=n;i++)
     result=result+(pow(x,i)/factorial(i));
     printf("%0.16f\n",result);
 } 
       
int factorial (int n)
{
    if (n==1)
    return 1;
    else
    return n * factorial(n-1);
}
再來是有關 %f 的部份 ...

%-xn.mf
- 從強制從最左邊開始印(預設是從右邊,沒有減號時)。
x 要不要將空未補零值
n 指的是小數點左邊顯示幾位數
m 指的是右邊顯示幾位數。

ex 1: printf("%10.3f",12.123456);
顯示 10.123

ex 2: printf("%010.3f",12.123456);
顯示 0000000010.123

ex 2: printf("%-10.3f",12.123456);
顯示 10.123

%-xnd
- 從強制從最左邊開始印(預設是從右邊,沒有減號時)。
x 要不要將空未補零值
n 指的是小數點左邊顯示幾位數

此帖於 2006-05-11 11:15 PM 被 getter 編輯.
getter 目前離線  
送花文章: 37855, 收花文章: 6441 篇, 收花: 26052 次
回覆時引用此帖
舊 2006-05-13, 08:24 PM   #8 (permalink)
管理版主
 
mini 的頭像
榮譽勳章
UID - 4144
在線等級: 級別:96 | 在線時長:9642小時 | 升級還需:155小時級別:96 | 在線時長:9642小時 | 升級還需:155小時級別:96 | 在線時長:9642小時 | 升級還需:155小時級別:96 | 在線時長:9642小時 | 升級還需:155小時級別:96 | 在線時長:9642小時 | 升級還需:155小時級別:96 | 在線時長:9642小時 | 升級還需:155小時
註冊日期: 2002-12-07
文章: 13241
精華: 0
現金: 26216 金幣
資產: 3024026 金幣
預設

引用:
作者: tom7797835
突然覺得mini大程式語言好強...
C語言和vb都會寫...
真強...
不曉得MINI大大是如何將程式語言學得那麼好呢?!
沒這麼厲害啦~
每個人有適合自己的東西及學習方法

離開學校後有4~5年沒碰程式語言
但只要手上能查到語法(舊書及WWW)
剩下的就是 想像力及一點點的邏輯+微弱的程式語言基礎

.寫作期間的"熱衷"是 學習的基礎 及 完成度的助力
.看別人程式要找重點 (要完全看的懂他人的寫作,不可能...起碼對個人來說~)
.將功能、能想到的抽象東西 及 有助力 的東西畫出來 (管他畫出什麼,自己喜歡就好)
.可以的話寫程式語言盡量模組化,打個比方:
要寫一個紅綠燈程式
語法:
main()
{
  do{
    亮燈副程式(哪一個燈參數)
    跳出條件之輸入
  loop until(是否為跳出條件)
}
※以上不是什麼語言,要寫成C的話 語法不記得就上WWW查,想像力及模組化(函式化)才是重點

當然 語法的基礎是不可缺少的東西
只是可靠上WWW來補足
相形之下
此時關鍵字的搜尋經驗就影響到順利度
最後久而久之累積經驗...
mini 目前離線  
送花文章: 1999, 收花文章: 7954 篇, 收花: 26743 次
回覆時引用此帖
發文 回覆


主題工具
顯示模式

發表規則
不可以發文
不可以回覆主題
不可以上傳附加檔案
不可以編輯您的文章

論壇啟用 BB 語法
論壇啟用 表情符號
論壇啟用 [IMG] 語法
論壇禁用 HTML 語法
Trackbacks are 禁用
Pingbacks are 禁用
Refbacks are 禁用


所有時間均為台北時間。現在的時間是 05:55 PM


Powered by vBulletin® 版本 3.6.8
版權所有 ©2000 - 2024, Jelsoft Enterprises Ltd.


SEO by vBSEO 3.6.1