討論區快速選單
知識庫快速選單
討論區最近新進100則主題 下載Alexa Toolbar讓你上網更有趣
[ 回上頁 ] [ 討論區發言規則 ]
程式設計的省思 - 功力篇
更改我的閱讀文章字型大小
作者 : elfjane(珍和智子) 人氣指數超過10000點
[ 貼文 8 | 人氣 14406 | 評價 150 | 評價/貼文 18.75 | 送出評價 0 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2005/8/1 上午 04:12:01
程式是死的,人是活的,如何看別人的程式功力,並不是寫得很難懂,或者用了很多技術
而是對程式用心度,跟思考模式與別人不同。
目前以最常見的質數做為參考範本:
#include <stdio.h>
void main(void)
{
int i,j,k;
for(i=1;i<1000;i++)
{
k=1;
for(j=2;j<i;j++)
{
if(i%j == 0)
{
k=0;
break;
}
}
if (k)
printf("%d\t",i);
}
}
通常,別人就以為最完美了,因為目標已經達到了
但是,會用心多思考的人就會想到
1.質數不會被2的相關倍數整除
所以
for(i=1;i<1000;i++)
就會直接改成
for(i=1;i<1000;i+=2)
這樣子,程式速度直接翻轉快上一倍

通常,這個樣子,大家就滿足了
因為這樣就非常快了,也達到目的了
還有更快的方法嗎?

答案是還有的,為什麼?
質數並不會被自己的二倍以上整除所以程式碼又會改成
for(j=2;j<i;j++)
改成
for(j=2;j<(i/2);j++)
程式碼又在度加速
這樣子,滿足了吧?
還有沒有更快的方法嗎?
答案是還有
這時就開始奇怪了? 同樣的程式寫法很多種,一樣的功能寫出來的程式"效能"確差那麼多?
原因就在多用心
#include <stdio.h>
#define SIZE 3000
void a(void)
{
time_t start,end;
int k;
int count = 2;
int str[65550];
str[1] = 2;
str[2] = 3;
start = time(NULL);
for (int i=3;i<SIZE;i +=2)
{
k = 1;
for (int j=1;j<count;j++)
{
if ((i % str[j]) == 0)
{
k = 0;
break;
}

}
if (k)
{
printf("%d\t",i);
str[count++] = i;
}
}
}
這樣子比之前的程式更快上許多倍 ?
為什麼?只是多用個陣列而已差別在那裡?
原因很簡單,因為質數不會被整除,所以不能整除的放在陣列內,就不需要重覆運算到其他不必要的數值
這次算到20 就不會多算到 4,6,8,9,10,12,14,15,16,18這些數值,而直接換算到陣列內的2,3,5,7,11,13,17,19足足少了一半以上的時間,如果算到破萬或者更多時,所需要的時間則減少更為明顯
通常,這樣子? 滿足了吧? 非常快了吧?
在試著把程式碼
for (int j=1;j<count;j++)
改成
for (int j=1;j<(count/2)+1;j++)
又在快上非常多.....
為什麼呢?
因為質數不會被自己的二倍數以上整除,所以直接陣列除2

至於,還有沒有更快的方法,就大家在自己發覺嚕
所以,同樣寫一個程式,有不同的深度,多看別人的程式,別人的思考模式,增進自己的程式功力,也是不錯的方法。
上面的程式,並沒用上什麼華麗的技巧,或者很難懂的語法,相信,很多初學者都早會的東西,但是要用上,不見得會用。
所以寫程式多用點心,講求務實,並不是華麗的技巧,程式碼寫得很難懂,並不表示很強
相同的,自己解決不了的問題,不要光一味的問別人,多深度去思考。
因為,程式學到的並不是程式語法,記很多函式,表示很強,重點在程式、邏緝觀念
當你要解決問題時,第一個要想的是,如果沒有函式(function)怎麼辨到的?
曾今,我寫程式寫很久,乎然想到一件事,如果我的程式碼上並沒有 int , 乘號(*)時,我怎麼運算?
答案是完全不會=_=寫程式很久的人,常常會向上跑,向下跑的人反而少,越覺得理所當然的事,越是乎略掉他。
今天少掉一個for 你要怎麼運算迴圈?原理又如何辨到的?
以前,我在從vb到 c 時,在工作上最常去問其他高深的工程師,我要達到什麼功能,有沒有什麼函式可用,常得到的都是說,自己寫=_=
VB上常遇到的 A=1,A= "a" + "b"; 是理所當然的字串合併,為什麼c就那麼麻煩?
但是沒去想過,VB怎麼辨到的? 換成是你? 你辨得到嗎?
以上只是個人寫程式的想法,並沒有任何的指責,或者說自己很強。
其實我也並不怎麼強
乎2000字 = =
作者 : kwong(kwong) 貼文超過200則
[ 貼文 257 | 人氣 739 | 評價 260 | 評價/貼文 1.01 | 送出評價 0 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2005/8/1 下午 07:19:28
只需要試到 sqrt(i) 已經足夠.
eg. 101
sqrt(101) = 10.xxx
只須要試 2, 3, 5, 7.
11 已經不用試了.

另外, 使用 % 或 str[j] 會用上較多的 cpu 時間.

#include <iostream.h>
#define MAX_PRIME 3000
int main()
{
char x[MAX_PRIME];
int i,j,k;
    k=(int)sqrt(MAX_PRIME);
memset(x,1,MAX_PRIME);
cout<<2<<' ';
for (i=3;i<MAX_PRIME;i+=2) {
if (x[i]) {
cout<<i<<' ';
if (i<k) for (j=(i<<1);j<MAX_PRIME;j+=i) x[j]=0;
}
}
system("PAUSE");
exit(0);
}
作者 : elfjane(珍和智子) 人氣指數超過10000點
[ 貼文 8 | 人氣 14406 | 評價 150 | 評價/貼文 18.75 | 送出評價 0 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2005/8/2 上午 02:51:14
我這篇主要是講達到目的,並不是使用sqrt這個function
因為我主題上已經有說了,當大家解決問題時,常常都問解決的方法
而自己並沒有更深入的去了解本質,別人怎麼辨到的
當沒有sqrt這個function時,怎麼自己辨到的
有沒有更好的方法
如果只是這樣,就跟別人跟我說過的一樣,我並沒有那麼多時間,時間就是金錢
然後拿別人的程式改過後,就當成自己的程式,自喜!!
我整個程式除了定義的int , for .. 這些外,只有用上printf這個function
實現原理-.-!!
程式碼短,不代表速度快。

最上面這個題目 ... 是我當上電腦遊戲工程師時的公司的考題
我個人也是從 asp,vb,basic , IC 轉到 c & c++的
當時也是一直在問工程師為什麼字串不能等號(=) vb 都可以,為什麼a = "aaa"+"bbb"程式出錯?
有沒有 function可以用,我只記得當時的主工程師跟我說一句話,學c時不要想有任何function 可以用,要用STL之前先了解原理自己試著去寫一樣的stl出來,否則未來問題出在STL裡面你連debug都不會

至今,雖然離開了公司,但是我還是一樣的準則,自己想方法解決,要用別人的程式 or function 前先了解原理跟為什麼要這樣做。
我從a star 那裡學會了串列連結,開始了解資料結構的重要,當我在用a star 的function時,工程師先拿一本原文原理書給我,叫我了解他在來用,仔細去了解後,才發覺別人的思考深度有多深。

當我接觸到繪圖時,不能用GDI斜線時,才知道原來在電腦上畫一條斜線時竟然是那麼難,拿了國中國小的課本查公式,有了公式竟然發現竟然是無解,電腦上並沒有小數點,一個斜線那麼難。
或許有人說,小畫家就能畫了呀,很簡單,想那麼多做什麼?
但是有寫程式的人仔細想想,畫一個斜線怎麼畫 ? 如何在現有的windows底下不利用任何gdi function 畫出來? 想必用點的點出來? 又要怎麼點呢?
大家常在用的壓縮程式,真正的原理又知道多少 ?
雖然我常得到的都是沒必要,沒那麼多時間,更有人會回答我,那麼是不是要我去研究cpu呀?電的原理之類的話很多

上樓的@@ 我並沒有說你錯,只是我的看法跟告訴別人的觀點

因為 ..... 我到國內很多討論室,幾乎都是問問題,真正談到技術的確少之又少
像是BT 的協定? 那裡找 ? 有人去研究嗎? 都open source 的程式,大家只想著用,但是想著去了解他的人反而更少 =_=!!

當printf可以這樣用時~_~! 我竟然完全不知道
printf("[%.*s] ", (int) lengths[i], row[i] ? row[i] : "NULL");
從來沒用過%.*s 後來仔細去看才知道為什麼=_=

更好笑的我以前從來沒宣告過這樣的function
a(char*szBuff,...)

相信很多人都懂,但是也很多人不懂
當用了Windows 時
DWORD dwStyle = WS_MAXIMIZE | WS_DISABLED ;
為什麼可以這樣用? 當我要這樣子用時,能用到那裡?

我程式功力也不高,但是我只希望大家能在學程式中學到真正的程式,並不是學函式 ^_^
因為這才是c&c++的精華呀 ^_^!!
作者 : kennytsai(Kenny) C++卓越專家貼文超過500則
[ 貼文 714 | 人氣 2903 | 評價 2820 | 評價/貼文 3.95 | 送出評價 139 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2005/8/2 上午 08:50:17
版主的第一篇有兩個重點,一個是演算法,另一個是DP(Dynamic Programming)的技巧。
如何找出質數呢?這跟如何排序的問題一樣,你可以用暴力法來解,也可以用諸如Buble, Insertion, Quick, Shell...等,所謂的〝演算法〞來解,不但這樣,這些演算法還可以組合起來用,例如Quick+Insertion的組合,就是業界常使用的,至於為何要這樣做,有興趣的人可以自己想想。
求質數也是一樣,只要你將〝演算法〞寫清楚,任何程式設計師,都可以依樣畫葫蘆的將程式寫出來,只是,同樣的演算法,資深的工程師通常可以寫出簡短、易讀、又有效率的碼,這部分才是功力的所在!也許有人要反駁,認為設計這個演算法的人,才是真正的高手!我是不反對這種說法啦,但就程式構築、與演算法來說,兩者的領域不同,放在一起比較,妥當嗎?數學系的學生會修程式設計,電子系的學生,也得修微積分、工程數學等,對於同樣是第一名畢業的兩個(系)人來說,誰的功力強呢?
版主後來提到的畫線、不定參數、...等等的問題,對於資深工程師來說,其實...也不算什麼耶!點、線、橢圓的演算法,到處可見(可能還得到舊書攤才買的到),至於其他程式本身的特性--例如不定參數與Calling convention、String Parsing有關--,只要是認真的工程師,2-3年內應該就很有心得才對。版主就屬於這類的人,因為懂得思考、發掘問題。
至於DP就說來話長了,請有興趣的人自己孤狗一下。我個人覺得,DP跟Algorithm比起來,前者對程式師的影響更大,版主第一個例子中的:排除不必算的部分,就屬於DP技巧的一環。
寫程式有省思,才會增強功力。


作者 : twbestama(ama)
[ 貼文 47 | 人氣 7250 | 評價 10 | 評價/貼文 0.21 | 送出評價 9 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2005/9/2 下午 04:16:05
總歸來講
有興趣最重要啦
對有興趣的東西
自然而然就會越寫越好了
作者 : jawa560(Snaking) Java Script優秀好手貼文超過1000則人氣指數超過30000點
[ 貼文 1154 | 人氣 32593 | 評價 4630 | 評價/貼文 4.01 | 送出評價 167 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2005/9/2 下午 08:19:07
真是用心的文章,給您大大的鼓掌 !
作者 : kangeroo(Hank)
[ 貼文 4 | 人氣 59 | 評價 0 | 評價/貼文 0 | 送出評價 0 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2005/9/2 下午 10:41:26
//
當我接觸到繪圖時,不能用GDI斜線時,才知道原來在電腦上畫一條斜線時竟然是那麼難,拿了國中國小的課本查公式,有了公式竟然發現竟然是無解,電腦上並沒有小數點,一個斜線那麼難。
或許有人說,小畫家就能畫了呀,很簡單,想那麼多做什麼?
但是有寫程式的人仔細想想,畫一個斜線怎麼畫 ? 如何在現有的windows底下不利用任何gdi function 畫出來? 想必用點的點出來? 又要怎麼點呢?
大家常在用的壓縮程式,真正的原理又知道多少 ?
//

世面上的書 幾乎都是教 語法方面 或是 應用函式
真得很想知道原理 但是 確不知道如何下手
看別人的程式 也許知道他的語法 但確不知道其中的原理
譬如 偵測 滑鼠 的程式 查書也許會知道那個程式可以用
旦是如果你想 模擬滑鼠動作 (你沒有真正按滑鼠左鍵 但程式可以接收按滑鼠左鍵的事件)
這方面一直是無法進階的瓶頸
不知道有那位先進可以提供方向的?
作者 : hkln(HKLN.net) Perl卓越專家Oracle卓越專家資訊類作業求救優秀好手一般優秀好手程式設計甘苦談優秀好手C#卓越專家貼文超過2000則人氣指數超過100000點
[ 貼文 2135 | 人氣 122272 | 評價 14600 | 評價/貼文 6.84 | 送出評價 7 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2005/9/2 下午 11:13:15
版主建議的「多思考」很重要,因為腦袋是越用越靈的(腦部構造的關係)。
小弟以前也是這樣的「重新發明車輪」,例如去思考解析運算式,
做編譯器等,數學方面就只試過去証明 a^2+b^2=c^2。
總之就是自己想,不管它是否正確,也不管這個世界上是否有更好的方法,
好像小孩一樣擁有無限的思想空間,不必受現有知識的限制。

不過出來工作以後,就沒有時間什麼都去思考了,變成「有所思有所不思」,
遇到問題,首先就是抓股溝,抓不到才自己去想。
身處資訊年代,一般常見的問題,通常在數分鐘內就會找到答案,
這樣可以把節省出來的時間花在更需要思考的地方,
例如應該改良演算法還是程式碼。
作者 : avhacker(av) C++優秀好手貼文超過200則
[ 貼文 217 | 人氣 100 | 評價 1090 | 評價/貼文 5.02 | 送出評價 0 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2005/9/5 上午 12:50:04
一個合格的大學資工系畢業生應該都要有這種功力吧! 好歹大二就學過資料結構跟演算法了,要一個正常畢業的學生做到以上的水準應該不算過份。
作者 : sunny_gong(simula)討論區板主 C++頂尖高手貼文超過500則人氣指數超過30000點
[ 貼文 892 | 人氣 45047 | 評價 7220 | 評價/貼文 8.09 | 送出評價 108 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2005/9/5 上午 01:29:12
>一個合格的大學資工系畢業生應該都要有這種功力吧! 好歹大二就學過資料結構跟演算法了,要一個正常畢業的學生做到以上的水準應該不算過份。

有一些程式設計師朋友並不是資工系的,例如是商科資管,他們學過C語言,但是在資料結構與演算法方面並不熟悉,通常就是從工作上再學習,有這樣的領悟已經是一大步了,接下來只是補充技術細節,這通常還要靠時間與用功來累積。
作者 : hkln(HKLN.net) Perl卓越專家Oracle卓越專家資訊類作業求救優秀好手一般優秀好手程式設計甘苦談優秀好手C#卓越專家貼文超過2000則人氣指數超過100000點
[ 貼文 2135 | 人氣 122272 | 評價 14600 | 評價/貼文 6.84 | 送出評價 7 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2005/9/6 上午 01:33:19
對大學生來說應該不難,但對高中生就比較難了,
尤其是對程式沒有興趣的,他們很少會放棄打電動的時間去研究課外問題。
不過長江後浪推前浪,將來也許連國小生也具備這種獨立思考能力,
到時候不是學 1+1=2,而是1+1=10。
作者 : 274304(bin)
[ 貼文 4 | 人氣 423 | 評價 0 | 評價/貼文 0 | 送出評價 0 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2005/9/17 下午 04:44:30
受教了..感謝分享唷..~!
作者 : jimmykuo(jimmy)
[ 貼文 21 | 人氣 60 | 評價 100 | 評價/貼文 4.76 | 送出評價 0 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2006/1/5 下午 03:17:59
//
當我接觸到繪圖時,不能用GDI斜線時,才知道原來在電腦上畫一條斜線時竟然是那麼難,拿了國中國小的課本查公式,有了公式竟然發現竟然是無解,電腦上並沒有小數點,一個斜線那麼難。
或許有人說,小畫家就能畫了呀,很簡單,想那麼多做什麼?
但是有寫程式的人仔細想想,畫一個斜線怎麼畫 ? 如何在現有的windows底下不利用任何gdi function 畫出來? 想必用點的點出來? 又要怎麼點呢?
//

可以用 Bresenham 演算法,只要用加法,就能 "點" 出任何斜率的線
http://www.cs.helsinki.fi/group/goa/mallinnus/lines/bresenh.html
有很多變化的應用,因為只要加法,所以速度不慢
別說用 GDI,很多用 DirectX 3D 的人,
搞不好也是不知道怎麼快速畫線、貼圖,因為 library 全做好了...
作者 : jimmykuo(jimmy)
[ 貼文 21 | 人氣 60 | 評價 100 | 評價/貼文 4.76 | 送出評價 0 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2006/1/5 下午 03:24:05
質數還有一種算法,用篩的 (刪去法)
只要一直累加,就知道哪些 "不是質數",留下來的,就是質數
因為不必取 mod, 不必除法
速度有 "可能" 比用 mod 的方法快

作者 : propsychokiller(Ben) Java優秀好手資訊類作業求救卓越專家C++卓越專家貼文超過1000則人氣指數超過10000點
[ 貼文 1380 | 人氣 20444 | 評價 6650 | 評價/貼文 4.82 | 送出評價 13 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2006/1/6 上午 07:15:41

>質數還有一種算法,用篩的 (刪去法)
>只要一直累加,就知道哪些 '不是質數',留下來的,就是質數
>因為不必取 mod, 不必除法
>速度有 '可能' 比用 mod 的方法快
>
-------------
這種得到的是psuedo prime
不過如果你得到的數有1/1000000不是prime
那已經很好了
作者 : propsychokiller(Ben) Java優秀好手資訊類作業求救卓越專家C++卓越專家貼文超過1000則人氣指數超過10000點
[ 貼文 1380 | 人氣 20444 | 評價 6650 | 評價/貼文 4.82 | 送出評價 13 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2006/1/6 上午 07:23:27
#define isprime(n) (a[(n)>>4]&(1<<(((n)>>1)&7)))
作者 : hkln(HKLN.net) Perl卓越專家Oracle卓越專家資訊類作業求救優秀好手一般優秀好手程式設計甘苦談優秀好手C#卓越專家貼文超過2000則人氣指數超過100000點
[ 貼文 2135 | 人氣 122272 | 評價 14600 | 評價/貼文 6.84 | 送出評價 7 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2006/1/6 下午 12:46:33
>>質數還有一種算法,用篩的 (刪去法)
>>只要一直累加,就知道哪些 ''不是質數'',留下來的,就是質數

Sieve of Eratosthenes 埃拉托斯特尼篩法
所以資料搜集也是一種很重要的功力
作者 : propsychokiller(Ben) Java優秀好手資訊類作業求救卓越專家C++卓越專家貼文超過1000則人氣指數超過10000點
[ 貼文 1380 | 人氣 20444 | 評價 6650 | 評價/貼文 4.82 | 送出評價 13 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2006/1/6 下午 05:08:06

>>>質數還有一種算法,用篩的 (刪去法)
>>>只要一直累加,就知道哪些 ''''不是質數'''',留下來的,就是質數
>
>Sieve of Eratosthenes 埃拉托斯特尼篩法
>所以資料搜集也是一種很重要的功力
------
所以才有這種code存在
#include<string.h>
#include<stdio.h>
#define MAXSIEVE 20000000 // All prime numbers up to this
#define MAXSIEVEHALF 10000000
#define MAXSQRT 2237 // sqrt(MAXSIEVE)/2
#define PRIMNUM 1270608
#define isprime(n) (a[(n)>>4]&(1<<(((n)>>1)&7))) // Works when n is odd
char a[MAXSIEVE/16+2];
int b[PRIMNUM];
int main(){
int i,j;
int input;
int counter=1;
memset(a,255,sizeof(a));
a[0]=0xFE;
for(i=1;i<MAXSQRT;i++)
if (a[i>>3]&(1<<(i&7)))
for(j=2*i*(i+1);j<MAXSIEVEHALF;j+=i+i+1)
a[j>>3]&=~(1<<(j&7));
printf("要找第幾個prime number\n");
b[1]=2;
for(i=3;i<20000000;i+=2)
if(isprime(i)){
counter++;
b[counter]=i;
}
scanf("%d",&input);
printf("%d\n",b[input]);
return 0;
}
作者 : chchu(chchu)
[ 貼文 11 | 人氣 1148 | 評價 0 | 評價/貼文 0 | 送出評價 0 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2006/1/10 下午 08:29:24
大大說的是,我是沒有合格!!
雖然我學過,但我沒有實際上的用過!!
這點我會檢討~~
我會努力的∼∼
謝謝大大的教導∼
作者 : kie(初學者) 人氣指數超過10000點
[ 貼文 115 | 人氣 18287 | 評價 240 | 評價/貼文 2.09 | 送出評價 10 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2006/1/10 下午 11:20:50
還有很多細節要注意
例如說命名及寫程式的stytle等。
想靠程式工作第一個重點是不能像藝術家一樣,想到什麼就寫什麼。
要有紀律,有規範。
寫的code要能讓別人很容易懂,這樣才有可能和別人互相合作。
如果都只是自己爽,那別人讀你的code會很痛苦!
久了之後你要維護也會有難度!
程式百分之八九十的時間是給人讀的!
作者 : huah(Huah) C++優秀好手貼文超過200則
[ 貼文 292 | 人氣 263 | 評價 1910 | 評價/貼文 6.54 | 送出評價 2 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2006/1/18 下午 04:58:57
給你鼓鼓掌喔, 加油.

OO的東西真的還蠻多的, 如何從code-reuse到infrastructure-reuse
其實就是一個很大的轉變, 到了某個程度, 當重點在著重software
architecture時, 某一小段的程式, 我們都是希望簡單乾淨, 並一定要
follow整體系統當初給予它的界線, 其實到那個地步,我們反而不希望一
個單一環節寫得太艱深, 或希望一個語法做到3, 4個動作, 一般開發團隊
不喜歡所謂的little trick, 但鼓勵common trick. 軟體一般有所謂的
80%, 90%原則, 指的是大部份的codes只有10%-20%跟
performance有關, 如果真的需要很細部的optimize, 該做的也是一定
會去做的, 但整體還是以注重結構和整齊清楚為主, 並且以self-sound(
指的是你的code, 因為排的整齊, 變數和function name取得好, 切分得
合乎一般人的邏輯等等, 讓大家很容易了解那在做甚麼)為主.

另外, 我還蠻強調simplest complexity的概念, 因為你要解的問題, 通常
有相對的複雜度, 而為了考慮將來的enhancement, extension等等, 複
雜度更高, 所以如何設計一套架構來完全且恰好的涵蓋這些需求, 是一件
不容易的挑戰. 而這個部份其實就跟domain knowledge有很大的關係,
在OO的design有一項很重要的就是design around domain, 不是
design around choosen soultion. 當然, 說要談到設計架構, 可能會
說得太遠, 但即使只是maintain code, 最好都要對相對的知識多了解.

抱歉, 拉里拉喳說了一堆, 一方面是呼應你的多用心, 多了解所面對problem
相關的domain和technology knowledge. 另一方面, 也鼓勵你偶爾可以
用不同的view來看software development.
作者 : aquasea(aquasea)
[ 貼文 1 | 人氣 0 | 評價 0 | 評價/貼文 0 | 送出評價 0 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2006/4/21 上午 10:31:37

>當printf可以這樣用時~_~! 我竟然完全不知道
>printf('[%.*s] ', (int) lengths[i], row[i] ? row[i] : 'NULL');
>從來沒用過%.*s 後來仔細去看才知道為什麼=_=


拍謝...
'[%.*s] ' 這個到底是什麼東西 ?
作者 : aaroncow(阿中小子) 人氣指數超過10000點
[ 貼文 118 | 人氣 20812 | 評價 0 | 評價/貼文 0 | 送出評價 3 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2006/4/26 上午 01:15:49
謝謝指教了
原來在業界生存
是那麼的困難
作者 : chiuinan2(青衫)討論區板主 Visual C++ .NET卓越專家VC++一代宗師Visual Basic優秀好手資訊類作業求救卓越專家一般曠世奇才程式設計甘苦談優秀好手C++ Builder優秀好手上班族的哈拉園地優秀好手C++頂尖高手Assembly優秀好手貼文超過3000則人氣指數超過150000點
[ 貼文 3727 | 人氣 170106 | 評價 34350 | 評價/貼文 9.22 | 送出評價 125 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2006/4/26 上午 04:36:47
好久以前的一篇文章... 原本個人是不太願意介入這類話題, 因為是非頗多, 早先時候, 非理性的對話也很多, 但現在比較好些了, 因此把個人的一些心得提供給各位參考.

所謂的程式功力, 其實很難講, 這涉及太多層面, 難以判定誰高誰低. 但就某些部份, 倒是有一些共通的原則. 首先設計一個軟體, 尤其是要長久維護的軟體, 架構方面一定要深思熟慮. 如果不是經過需求分析, 系統分析, 系統設計一路過來的軟體, 通常在兩三年內就會面臨改到無法可改的地步, 必須大幅調整全部架構. 軟體工程沒學好, 到最後就是如此下場. 不過某些一次性的程式, 或是使用期限很短的程式, 便不需要如此大費周章, 畢竟要經過那一長串的處理, 所費的成本與時間都不低.

在良好的軟體架構下寫程式, 首重是可維護性. 儘可能用全公司規定的命名原則與寫法, 用最簡明的寫法去寫. 物件與物件, 模組與模組之間, 儘可能不要有太多的關聯. 這時自做主張, 自做聰明地去使用自己複雜的一套是不對的. 因為你沒考慮的接手人的痛苦. 其實有經驗的軟體研發經理, 都會做初步的source code review去要求下屬遵循, 不然將來維護起來會非常頭痛.

除了維護性之外, 再來就是bug free的正確性. 這部份分兩種, 一種是程式自我偵錯能力, 有看過微軟"如何撰寫零錯誤程式"一書的人應該不陌生. 另一種就是程式自我容錯能力. 前者是在測試階段要找出的, 但沒人能保證測試階段都能找出, 因此除了assert之外, 每個函數內部, 都必須對這類意外狀況做出適當的處理方式, 避免release之後, 發生問題導致整個軟體crash. 而每個呼叫函數的地方, 也要進行任何可能的錯誤處理. 這部份是很多人常漏掉的部份 (微軟很多sample code都是這樣...). "不要認為呼叫的函數完全可以正確處理你的呼叫", 就是要有這種心態.

最後的一個部份, 就是效率的部份. 通常這個部份, 只會侷限在很小一個範圍裡的程式, 與整個架構裡大部份的程式都無關. 在這個部份裡, 首先要想的是演算法, 然後才是程式的最佳寫法. 前者需要理論基礎, 不過通常都是用到很基礎的東西. 這個部份可以加速的程度非常高. 後者, 除了要對使用的程式語言很熟之外, 經驗也是很重要的一環, 能加速的程度, 通常在兩三倍之間. 以理論派的人眼光而言, order還是一樣, 但對實務派的人而言, 相差卻非常大. 由於這部份可維護性較差, 因此必要的文件與註解絕對不可缺.

在某些更要求效率的程式, 需要在正確性與效率性之間做抉擇. 像google, 你查一個詞, 出現幾百萬篇文件, 你認為它真的去處理過那麼多文件嗎? 其實要測試很簡單, 你去讀一個1MB的檔案, 需時多少? 或是一個1M的長整數, 從頭到尾掃瞄一次, 需要多少時間? 因為個人也是做搜尋引擎軟體, 對之知之甚明. 若客戶會要求至少50rps以上, 那麼每個檢索只能有20ms. 要掃瞄一次1M個長整數的陣列, 就不止這個時間了! 因此多半會採用有限誤差模式 (這個名稱是我"定義"的). 也就是原本有幾百萬篇, 它實際只處理數千或數萬篇, 因為篇數很多, 你也感覺不出來... 剩下的部份, 只是如何讓你想要的文件, 儘可能排在最前面, 當然這個在事先處理的時候就可以弄的東西... 理論+實務, 在這類極度要求效率的軟體裡, 便可以看得出來. 只懂理論, 或只懂實務, 如果你是這類軟體的key man, 那麼我會說, 失敗率有九成九, 真的不為過. 這也就為何我一直強調一定要理論與實務兼修的原因, 這樣不管你到那個行業, 至少都不落人後. 當然困難度也非常高, 就目前個人從事資訊業二十幾年所找的人與經歷的下屬 (至少有上萬人了吧), 就只有一個台大資工博士(學弟)具備這個能力, 雖說他目前還是國防役, 但個人已建議無論多少薪水都要留他下來, 公司也非常認同. 因為他的能力, 已足以跟我平起平坐了, 雖說我目前還是他的上司.

ps. 個人並非自豪, 以國內而言, 程式高手, 個人自認為應該排名在五十名之內. 雖說個人不在你的行業內, 但如果我真要做的話, 我一定是該行業的佼佼者. 這也是為何我初離開舊公司時, 每個以前的同學都要求我不要跨入他們的行業... 唉! 蠻現實的. 但技術能力再怎麼好, 也要有好的業務/行銷的配合, 不然你就是一個屁. 這種情形也非常多見, 不足為奇了.
作者 : gag19800328(哇桂)
[ 貼文 11 | 人氣 941 | 評價 0 | 評價/貼文 0 | 送出評價 2 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2006/4/26 下午 03:35:21
大大這篇文章真是深得我心~~~
希望有朝一日也能走到這麼一個境界~~~
作者 : frankyhcg(hcg)
[ 貼文 12 | 人氣 1 | 評價 10 | 評價/貼文 0.83 | 送出評價 0 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2006/5/9 上午 09:32:11
程式高手要看在什麼領域吧

理論很重要

比如說網路程式高手, 今天要他寫影像處理程式..
演算法就看好幾個月..

又比如說, 影像處理高手, 今天公司要嵌入式系統程式設計..
也只好含淚K處理器, 系統架構..

再比如說, 嵌入式系統程式設計高手, 今天公司要寫一個資料庫..
半夜爬起來偷偷看 ADO.NET..

加油
這是條不歸路..
沒有興趣玩不下去的
作者 : charlyhu(Charly)
[ 貼文 52 | 人氣 479 | 評價 180 | 評價/貼文 3.46 | 送出評價 4 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2006/5/11 上午 11:36:39
我想開這個討論串的人是希望大家面對一個課題時,思考再思考, 精進再精進吧.

對一個專業而言, 隔行如隔山 ....

所以我相信的是精簡有力, 堅固又有效率的就是好的.
作者 : chy1013m1(hycheng)
[ 貼文 3 | 人氣 0 | 評價 0 | 評價/貼文 0 | 送出評價 0 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2006/5/13 上午 06:57:24
沒有 sqrt...用calculus吧, maclauren series, taylor series, power series 就是了,
或用 i < sqrt(n) equivilent to i*i < n 就好啦
作者 : still(still) 貼文超過200則人氣指數超過10000點
[ 貼文 342 | 人氣 14970 | 評價 490 | 評價/貼文 1.43 | 送出評價 9 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2006/5/13 上午 11:15:58
應該有兩個思考方向:

1.如果只要求正確,不計較速度,用最開始的就好. 因為後面還有很多工作要做, 不要delay進度要比力求完美,在大部分的狀況都是對的.

2.如果1形成瓶頸, 再對它做最佳化.如果沒有, 你應該出去玩玩放鬆,而不是盲無目的去coding...

這是我寫程式幾年的想法.剛開始都會不計代價;力求完美, 經過修正後我覺得這樣工作生活,會比較平衡一點.
作者 : kidd5423(kidd)
[ 貼文 26 | 人氣 3503 | 評價 0 | 評價/貼文 0 | 送出評價 4 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2006/5/19 上午 11:16:22
真是用心的文章,給您大大的鼓掌 !
作者 : love296(零) 人氣指數超過30000點
[ 貼文 169 | 人氣 31114 | 評價 200 | 評價/貼文 1.18 | 送出評價 16 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2006/5/24 下午 01:36:14
有能力的人發表出來的話,感覺就是不一樣
作者 : mjbgc(SHOWER)
[ 貼文 7 | 人氣 768 | 評價 0 | 評價/貼文 0 | 送出評價 1 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2006/5/30 下午 05:11:36
每個人的方式不同
只要做出目標
就是好的結果
作者 : city0321(小豪)
[ 貼文 22 | 人氣 3900 | 評價 0 | 評價/貼文 0 | 送出評價 7 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2006/6/1 下午 04:58:45
嗯 程式是死的 人是活的
不過還是有些程式想不到阿
辛苦 辛苦
作者 : sam168(sam168)
[ 貼文 12 | 人氣 1174 | 評價 10 | 評價/貼文 0.83 | 送出評價 0 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2006/6/29 下午 03:21:07
現在CPU很快了..趕快寫出程式,後面還有很多事要去做
作者 : kwong(kwong) 貼文超過200則
[ 貼文 257 | 人氣 739 | 評價 260 | 評價/貼文 1.01 | 送出評價 0 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2006/6/30 下午 02:07:16
sqrt 是很基本的東西, 可以用的時候應該盡量用, 我們每天坐車吃飯睡覺, 都沒有弄懂車是怎樣製造, 飯菜是怎樣弄, 睡著了會發生什麼事? 現在電腦知識實在太多了, 根本沒有時間一一弄懂, 站在高樓上看風景總比當建築大樓地基舒適吧.
作者 : tony_lee(gbisland)
[ 貼文 66 | 人氣 4055 | 評價 220 | 評價/貼文 3.33 | 送出評價 1 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2006/7/5 上午 11:41:23

>
>>當printf可以這樣用時~_~! 我竟然完全不知道
>>printf(''[%.*s] '', (int) lengths[i], row[i] ? row[i] : ''NULL'');
>>從來沒用過%.*s 後來仔細去看才知道為什麼=_=
>
>
>拍謝...
>''[%.*s] '' 這個到底是什麼東西 ?
如果有說錯還請各位指正:
'.' : 表示 precision,用在 's' 時則表示後面跟著的 field 為最大可顯示的字串長度
例如: printf("[%.5s]", "Hello World!"); 會在螢幕上顯示 "[Hello]"
* : 當 precision ('.') 後面跟著的 filed 不是一個常數而是星號時 '*',則必需在後面的 argument list 提供一個對應的 int 數值代表 width
例如:
char* msg="Hello World!";
printf("[%.*s]", strlen(msg), msg);
則 strlen(msg) 會取代 '*' ,上式效果等同於 printf("[%.12s]", msg);
當然,這樣做並沒有多大意義,我想主要是在套同不同的格式化輸出字串時會有用吧!

不曉得這樣解釋是否正確呢?還請各位指正。
作者 : windblown(windblown) VC++優秀好手C++ Builder曠世奇才C++卓越專家貼文超過1000則
[ 貼文 1105 | 人氣 890 | 評價 9400 | 評價/貼文 8.51 | 送出評價 200 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2006/7/5 下午 01:16:39
To tony_lee(gbisland)
給你拍拍手,說明得很詳細,還附帶例子 ^_^
作者 : tengbest(鄧肯)
[ 貼文 29 | 人氣 1285 | 評價 0 | 評價/貼文 0 | 送出評價 5 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2006/7/12 上午 12:27:34
容小弟說說劣見,商業運用(或稱實務應用)與學術研究是否要有一點點小小區隔呢?商業運用有一定的限制,如資源及開發時效等;學術研究則可以無限上岡,打破沙鍋,當然小弟說的只是小小區隔,其實兩個是相輔相成,看乎每個案子的實際情況而論,若時間允許,能多一點深入思考和檢討是不錯的,趕著出貨,則成果有時比較重要,反正現在的軟體都可以有更新版及版號的區別。以上純屬個人拙見。

作者 : mizar(Mizar) VC++優秀好手貼文超過200則
[ 貼文 249 | 人氣 133 | 評價 1240 | 評價/貼文 4.98 | 送出評價 17 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2006/7/12 上午 11:39:16

商業應用的確是有時程壓力,也比較不會去碰學術上還沒有成熟的技術,
但是不代表可以寫爛code。很多人以schedule為由寫了一堆爛code,
global亂用,指標亂串,寫出一堆Low Cohesion與High Coupling的函式
與模組,導致牽一髮而動全身。有適用的資料結構不用,配置大陣列硬上。
有適合的演算法不用,暴力法硬砍,都是很常見的情形。到了最後導致與
接手的同事不和,或者後續兩三年一直維護很火大;寫越多,後續維護越煩。
最終導致瓶頸,一段時間就要陷入低潮或換工作。

其實好的RD在分析各種case時,適用的資料結構與演算法自會信手拈來;
也能設計出具有後續維護優勢的架構,更佳者,會預測為來有可能添加的
功能與支援,預留架構。這些其實都是可以幫自己與公司省下不少時間的。

作者 : tengbest(鄧肯)
[ 貼文 29 | 人氣 1285 | 評價 0 | 評價/貼文 0 | 送出評價 5 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2006/7/13 上午 12:49:42
我想 mizar前輩說的很有道理, 最終市場會決定一切。:)
只有不斷的提升自已才能在市場中打滾不至被淘汰,因此小弟提到的主要是結果論,只是在市場接受的結果還包含著時程因素,取得一平衡點是弟所要強調的^^",寫爛code自然會有爛果不是嗎^^?
作者 : shing819(Clier) VC++曠世奇才貼文超過1000則人氣指數超過30000點
[ 貼文 1740 | 人氣 40353 | 評價 8630 | 評價/貼文 4.96 | 送出評價 84 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2006/7/13 下午 03:12:33

>
>商業應用的確是有時程壓力,也比較不會去碰學術上還沒有成熟的技術,
>但是不代表可以寫爛code。很多人以schedule為由寫了一堆爛code,
>global亂用,指標亂串,寫出一堆Low Cohesion與High Coupling的函式
>與模組,導致牽一髮而動全身。有適用的資料結構不用,配置大陣列硬上。
>有適合的演算法不用,暴力法硬砍,都是很常見的情形。到了最後導致與
>接手的同事不和,或者後續兩三年一直維護很火大;寫越多,後續維護越煩。
>最終導致瓶頸,一段時間就要陷入低潮或換工作。
>


《內容與標題無關》

最大原因公司選庸才做事,不選人才做事,只想要聽話,服從,不看能力,庸才
當然不可能寫出好程式,依我觀察,台灣庸才佔8成.人才事實上不是沒有,被
庸才主管面試時擋掉,因為怕被取代,中小企業比較容易發生這類事.













>其實好的RD在分析各種case時,適用的資料結構與演算法自會信手拈來;
>也能設計出具有後續維護優勢的架構,更佳者,會預測為來有可能添加的
>功能與支援,預留架構。這些其實都是可以幫自己與公司省下不少時間的。
>
>
作者 : mizar(Mizar) VC++優秀好手貼文超過200則
[ 貼文 249 | 人氣 133 | 評價 1240 | 評價/貼文 4.98 | 送出評價 17 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2006/7/13 下午 03:34:16

>最大原因公司選庸才做事,不選人才做事,只想要聽話,服從,不看能力,庸才
>當然不可能寫出好程式,依我觀察,台灣庸才佔8成.人才事實上不是沒有,被
>庸才主管面試時擋掉,因為怕被取代,中小企業比較容易發生這類事.

你前半段說的原因是事實,的確有些人士庸才,怎麼教都還是庸才。
但是原因就沒有如後半段這麼單純了。我遇過的主管都非常渴望有
能力的成員的,不可能去阻擋人才進來的啦。畢竟成員越強,整個
Team能做得更好,主管才會更紅。

但是台灣科技業的產值98%以上來自硬體產業,而每年資訊相關科
系的畢業生專題也差不多九成以上是純軟的題目。但這些畢業生打散
到各產業後,顯然大多數會投入硬體相關的各公司。

在硬體廠中軟體始終是輔助的腳色,不管是firmware / driver等等,
其程式的規模與大小終究不如純軟體。相對的Cowork也不是那麼重
要,幾乎都是獨自一人完成一支程式的。久而久之這些各產業的高手
來到軟體產業,也是會變您所說的庸才啊。

以軟體產業的產值和收入,本就不易吸引頂尖高手投入,更何況其他
產業的頂尖高手過來也不一定適用。還有版上一片呼天搶地的討論國
內產業不肯培訓新人的話題,明知庸才佔八成,基於良心還是得試試
看啊 :)
作者 : dean0517(育)
[ 貼文 6 | 人氣 581 | 評價 0 | 評價/貼文 0 | 送出評價 0 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2006/8/24 下午 05:20:15
不管如何
對自己的要求不能太低
想學的東西 還是必須靠自己吧
作者 : jackal_huang(Jackal)
[ 貼文 8 | 人氣 1078 | 評價 0 | 評價/貼文 0 | 送出評價 0 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2006/9/21 下午 03:20:45
嗯嗯~~想不到換個角度想,可以有那麼多種的寫法呢!!受教了.
作者 : pcdoor(Garbage) 人氣指數超過10000點
[ 貼文 139 | 人氣 29163 | 評價 170 | 評價/貼文 1.22 | 送出評價 17 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2006/11/2 上午 07:31:05
以前寫的判斷整數是否為質數....很普通的解法

    function isPrime(ByVal num as Integer) as Boolean
     num = Math.Abs(num)

     if num >= 0 and num <= 2 Then
     Return false
     else
for i as Integer = 3 To num / 2
     if num Mod i = 0 Then
     Return false
     End if
     Next i
     End if

     Return true

    End function
作者 : lsonic(LSonic) 人氣指數超過10000點
[ 貼文 97 | 人氣 10704 | 評價 70 | 評價/貼文 0.72 | 送出評價 5 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2006/11/17 下午 01:58:07
嗯,程式的寫法看人如何去解題,
有人用最笨的方法,計算的過程都給了電腦,
增加執行程式的時間,
但只要加入一些算術式即可減少計算,
也減少程式碼的量,
寫法太多種了,
所以多討論才會進步
作者 : shene(冼鏡光) 人氣指數超過30000點
[ 貼文 135 | 人氣 42288 | 評價 1420 | 評價/貼文 10.52 | 送出評價 0 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2007/9/3 上午 06:21:35
請看拙著「冼鏡光,名題精選百則:技巧篇,儒林,2002」中問題2-3、2-4與2-5有關求質數的詳細討論。到目前為止,籂法(Sieve)還是最快的方法之一,但在處理大整數時的理論與拙著中的「初等」方法不可同日而語、而且複雜困難得多。

另外,決定一個正整數是否為質數的問題在幾年前已經被証明為P,而不是以往認為的在NP與co-NP中。

寫作好程式的三要件是:正確、高效率(efficiency)、與高可讀性(readability)。正確性不必多說,但高效率通常來自好算法、而不是寫作奇巧的程式敘述,因為後者所能爭取的效率有限,而且近世的編譯程式最佳化能力也相當好,所以寫作奇巧的程式敘述是否真能提昇效率是一個問號。在有連續性的系統中,高可讀性是不可或缺的,因為幾年甚至十幾年後仍然有可能修改或改善今天寫成的程式。

拙著「冼鏡光,名題精選百則:技巧篇,儒林,2002」所提倡的是用效率高的方式解決問題,您不妨做一做書中的題目,再與解答比較。這些題目都是經典名題,與時間新舊早就沒有什麼關係,二十年前是如此、今天是如此、二十年後仍然如此。
作者 : terenas(風) 貼文超過200則
[ 貼文 490 | 人氣 7440 | 評價 680 | 評價/貼文 1.39 | 送出評價 0 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2007/9/3 下午 12:43:00

>請看拙著「冼鏡光,名題精選百則:技巧篇,儒林,2002」中問題2-3、2-4與2-5有關求質數的詳細討論。到目前為止,籂法(Sieve)還是最快的方法之一,但在處理大整數時的理論與拙著中的「初等」方法不可同日而語、而且複雜困難得多。
>
>另外,決定一個正整數是否為質數的問題在幾年前已經被証明為P,而不是以往認為的在NP與co-NP中。
>
>寫作好程式的三要件是:正確、高效率(efficiency)、與高可讀性(readability)。正確性不必多說,但高效率通常來自好算法、而不是寫作奇巧的程式敘述,因為後者所能爭取的效率有限,而且近世的編譯程式最佳化能力也相當好,所以寫作奇巧的程式敘述是否真能提昇效率是一個問號。在有連續性的系統中,高可讀性是不可或缺的,因為幾年甚至十幾年後仍然有可能修改或改善今天寫成的程式。
>
>拙著「冼鏡光,名題精選百則:技巧篇,儒林,2002」所提倡的是用效率高的方式解決問題,您不妨做一做書中的題目,再與解答比較。這些題目都是經典名題,與時間新舊早就沒有什麼關係,二十年前是如此、今天是如此、二十年後仍然如此。

打個岔一下, 請問一下2002 版的, 和古代版的差異在什麼地方呢?
古代版的我買很久了, 很久之前有看, 不知2002 版有什麼變化呢.
作者 : sebastianlin(東海林藥)
[ 貼文 3 | 人氣 0 | 評價 0 | 評價/貼文 0 | 送出評價 0 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2007/9/3 下午 05:18:25
其實功力是要看如何如平衡 實作環境,實作進度,維護性 以上面的 code
如果是在 dos 下如果非要用如此大的堆疊,我也只有放棄 ,程式本來就是時間和空間平衡的藝術,如果說程式一定要用最佳演算法(雖然每個人都很想),不過也是要看相對條件配合,沒什麼是絕對的對,而是要看當下
作者 : sebastianlin(東海林藥)
[ 貼文 3 | 人氣 0 | 評價 0 | 評價/貼文 0 | 送出評價 0 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2007/9/3 下午 05:18:34
其實功力是要看如何如平衡 實作環境,實作進度,維護性 以上面的 code
如果是在 dos 下如果非要用如此大的堆疊,我也只有放棄 ,程式本來就是時間和空間平衡的藝術,如果說程式一定要用最佳演算法(雖然每個人都很想),不過也是要看相對條件配合,沒什麼是絕對的對,而是要看當下
作者 : jevoswang(jevos wang) 貼文超過200則
[ 貼文 379 | 人氣 3351 | 評價 880 | 評價/貼文 2.32 | 送出評價 4 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2007/9/3 下午 05:52:26
企業選人不一定要選用最好的人才,好人才昂貴,如果只是需要庸材就能成事,何必花大錢找人材

ceo 要最好的,好的 ceo 任用合適的人就夠了

微軟的視窗系統 Bug 何其多,可知用的人才比不上台灣排名50名內的程式高手
而微軟一樣是賺盡下財富

阿扁有你們這些人聰明嗎?他連程式怎麼寫都不會,也做上台灣總統

聰明有屁用,人才有屁用

為什麼大智若愚,大巧若拙,偽裝成平凡人甚至庸才笨蛋,上位的人才以為你好控制聽話,不會取他而代之,才會信任你,對你不防備,你也才能成就大事

伴豬就能吃老虎

說自己天才的是天底下的白吃,自以為是真正台灣前50名的高高手,社會地位又高到那裡去
作者 : kevin20060520(kevin) 貼文超過500則人氣指數超過100000點
[ 貼文 718 | 人氣 132860 | 評價 60 | 評價/貼文 0.08 | 送出評價 60 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2007/9/5 下午 08:14:42
找出質數 不能這樣寫嗎
#include <stdio.h>
void main(void)
{
int i;

for(i=0;i<10;++i)
{
if((i%2)!=0)
{
printf("%d\n",i);

}



}
}
作者 : dorkas(aming) VC++優秀好手遊戲程式設計卓越專家DirectX頂尖高手C++優秀好手貼文超過2000則
[ 貼文 2625 | 人氣 4536 | 評價 11810 | 評價/貼文 4.5 | 送出評價 2 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2007/9/5 下午 09:57:12
>找出質數 不能這樣寫嗎

質數!=奇數
作者 : chung76(Crumk)
[ 貼文 3 | 人氣 0 | 評價 0 | 評價/貼文 0 | 送出評價 2 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2007/9/9 下午 06:26:48
照板大發的這篇文來
清楚的邏輯思考看來也是程式設計的必要元素之一
看來小弟離這段路還有很長的一段磨練時間
作者 : chung76(Crumk)
[ 貼文 3 | 人氣 0 | 評價 0 | 評價/貼文 0 | 送出評價 2 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2007/9/9 下午 10:56:11
我想問一下板大在一串程式下來後

要在哪個地方插入 system("PAUSE");

才有辦法讓整串程式在執行過後能停下來

試了很多次還是不懂system("PAUSE"); 該插在哪個地方

還是說根本不能?

請指教
作者 : chinlon(chinlon)
[ 貼文 1 | 人氣 0 | 評價 0 | 評價/貼文 0 | 送出評價 0 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2007/9/17 上午 10:48:17
謝謝大大分享,相信要寫出好的程式,也是需要細心的去思考,才有最好的程式吧。

不然功能都可行,但跑了一大圈、效能奇低,不過只是個普通的程式啊啊

謝謝分享囉!! 努力 !!
作者 : dorkas(aming) VC++優秀好手遊戲程式設計卓越專家DirectX頂尖高手C++優秀好手貼文超過2000則
[ 貼文 2625 | 人氣 4536 | 評價 11810 | 評價/貼文 4.5 | 送出評價 2 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2007/9/21 下午 12:19:19
system("PAUSE");

要放在 出口的地方


int main ()
{
......


system("PAUSE");
 return 0;//出口
}
作者 : a0932788904(小y)
[ 貼文 3 | 人氣 0 | 評價 0 | 評價/貼文 0 | 送出評價 0 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2007/10/31 下午 05:52:22
演算法果然厲害!!!
作者 : zero7334(初行者)
[ 貼文 3 | 人氣 0 | 評價 0 | 評價/貼文 0 | 送出評價 0 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2007/11/11 下午 07:00:04
哇,大大的這篇文,真的是讓我有所體悟,之前往往寫出什麼就自滿,不求更加精進,看了大大的文章才知道許多方法可以更優化程式。謝謝大大分享^^
作者 : foxman(foxman)
[ 貼文 2 | 人氣 0 | 評價 0 | 評價/貼文 0 | 送出評價 0 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2008/2/23 上午 02:54:05
有關於質數的篩法,若以小質數產生器而言,
採用Atkin-DJB Sieve速度最快.

分別以modular 60及判定4K+/-1,6K+/-1質數形式的篩法

若是大質數的確認而言,其實相等於因式分解.方式則有許多,
由不同的造質數方程分解法來判定.
例如梅森質數如果可分解,總是有Mp = (2kp+1)*something 這種形式
在暴力分解法當中,還有Pollard Pho, Pollard p-1, William p+1,
Elliptic Curve, ECPP, Lucas-Lehmer Testing等等.

大質數篩法當中,尚有本人發現的假定黎曼猜想正確,
轉換到Qp域上的P特徵函數.

此題應詳細閱讀數論相關問題.
 板主 : simula
 > C++ - 討論區
 - 最近熱門問答精華集
 - 全部歷史問答精華集
 - C++ - 知識庫
  ■ 全站最新Post列表
  ■ 我的文章收藏
  ■ 我最愛的作者
  ■ 全站文章收藏排行榜
  ■ 全站最愛作者排行榜
  ■  月熱門主題
  ■  季熱門主題
  ■  熱門主題Top 20
  ■  本區Post排行榜
  ■  本區評價排行榜
  ■  全站專家名人榜
  ■  全站Post排行榜
  ■  全站評價排行榜
  ■  全站人氣排行榜
 請輸入關鍵字 
  開始搜尋
 
Top 10
評價排行
C++
1 Raymond 12680 
2 simula 4690 
3 青衫 4670 
4 coco 3910 
5 白老鼠(Gary) 3610 
6 Ben 2250 
7 ozzy 2130 
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.546875