網頁
BloggerAds 廣告
標籤
- Java (96)
- Android (27)
- 演算法 (21)
- c++ (19)
- JavaScript (7)
- OpenMp (6)
- Design Pattern (4)
- 日文歌曲 (4)
- 資料結構 (4)
- Foundation Knowledge Of Programming (3)
- QUT (2)
- CodingHomeWork (1)
- Database (1)
- 英文歌詞 (1)
搜尋此網誌
2011年12月24日 星期六
Html input tag usage(Html input標籤的使用方式)
以下列出一些常用的input type的輔助attributes 的用法:
input type可以為
button,
checkbox,
hidden(一個隱藏的input 欄位),
password(密碼欄位,在此欄位的文字都會被mask起來.),
radio,
reset(所有表單欄位內的資料,會被設回預設值.),
submit(把欄位內的資料傳送到server),
text(一個可以給使用者輸入文字的欄位,預設可輸入20個字)
參考自W3C網站
Create JavaScript Object(創建JavaScript 物件)
然後依據Student這個class,實體化出一個Student物件.
在這裡要注意到的地方是, 因為Student有預設的Constructor(建構子),需要丟入一個參數
做為name這個屬性的值,否則的話會列印出undefined.
下面是另一個創立物件,物件的屬性和方法的寫法:
第三個創立物件,物件的屬性和方法的寫法:
2011年12月8日 星期四
2011年12月7日 星期三
Spring 特點(feature)
Spring includes:
- 最完整的輕量化容器(lightweight container), providing centralized, automated configuration and wiring of your application objects. 這一個容器是非侵入性的(non-invasive), 可以由一系列的(POJOs)組成一個複雜的system ,並且遵循著一致化和透明的設計概念. The container brings agility and leverage, and improves application testability and scalability by allowing software components to be first developed and tested in isolation, then scaled up for deployment in any environment (J2SE or J2EE).
- 為transaction management提供一個共同的抽象層(abstraction layer),允許可抽換式的交易管理, 使得劃分交易變的很簡單而不需要去處理low-level issues. Generic strategies for JTA and a single JDBC DataSource are included. 不同於原有的 JTA(Java Transaction Interface) or EJB CMT, Spring所支援的交易管理並不僅僅限於J2EE下的環境.
- JDBC的抽象層 提供了一個有意義的例外架構, (no more pulling vendor codes out of SQLException), 簡化了錯誤處理,並且大大降低了你所需要寫的程式碼. You'll never need to write another finally block to use JDBC again. The JDBC-oriented exceptions comply to Spring's generic DAO(Data Access Objects) exception hierarchy.
- 整合了 Toplink, Hibernate, JDO, and iBATIS SQL Maps: in terms of resource holders, DAO implementation support, and transaction strategies. First-class Hibernate support with lots of IoC convenience features, addressing many typical Hibernate integration issues. All of these comply to Spring's generic transaction and DAO exception hierarchies.
- AOP(Aspect-oriented programming) functionality, fully integrated into Spring configuration management. You can AOP-enable any object managed by Spring, adding aspects such as declarative transaction management. 假如你正在Tomcat使用單一的資料庫或是任何其他沒有JTA支援的web容器,有了Spring, 你可以宣告(declarative)交易管理而不必依靠EJB,甚至不必JTA.
- 靈活的MVC網頁應用程式框架. This framework is highly configurable via strategy interfaces, and accommodates multiple view technologies like JSP, Velocity, Tiles, iText, and POI. Spring中介層可以輕易地結合任何Web MVC框架的Web層,好比Struts, WebWork, or Tapestry.
你可以在任何的J2EE環境使用Spring所有的功能. Spring是以商業邏輯和DAO可重複使用,並且不
受限於任何特定的J2ee服務為中心思想而設計的. 物件可以毫無障礙的跨越:J2ee的環境, 單機應
用程式, 以及測試環境重複使用.
Spring的階層架構給予你很多的彈性. 它所有的功能都是根據前一個lower level而來的. 比如說,你可以使用JavaBeans的設定管理(configuration management)而不必使用到MVC framework or
AOP support. 但是假如你要使用MVC framework or AOP support,你會發現到它們都是建立在核
心的Spring設定裡,所以你在這方面的知識可以立刻派上用場.
節錄翻譯自http://www.springsource.org/spring-core#documentation
2011年11月7日 星期一
寫給一隻曾經陪伴我15年的老狗
每次看到別人跟寵物狗玩,我都會想起,我自己也養過一隻,15年的狗.牠從我國
小一年級,陪伴到我大學三年級,我的小時候,青少年,歲月,牠陪著我一起渡過.還
記得在我國小四年級的時候,牠還陪我到學校上課, 可是在我大三出國留學的時
候,因為牠已經很老了,我很怕牠在我離開台灣的時候,也離開了我.我就對牠說:
你一定要等我回來喔,牠當時立刻的反應是快速搖著牠那很漂亮很捲的白色尾
巴,用舌頭舔著我的腳,表示同意. 在留學期間,我每次打電話回家,都會要求要聽
牠的聲音,牠也很配合的汪汪叫了幾聲,彷彿真的在和我對話. 那一年,我本來想
趁放長假的時候,回台灣陪家人和看牠,我連出境日本在入境的簽證都辦好了.可
是我忘了甚麼原因,在5月31號的時候,我打了通電話回台灣,告訴家人說,沒有要
回去了.我只聽到電話那頭,母親的聲音很奇怪,很沉默,沒有特別的回應,這不像
是平常的對話,我心裡直覺一定有甚麼事情發生, 可是媽媽沒有特別說甚麼,只
寒暄了幾句就掛電話了.後來我回台灣的時候,才知道我家的狗在當天早上就去
世了,這是我人生中第一次心理感受到這麼強烈的遺憾還有震撼. 如果當時我有
回去,我應該有機會見到牠最後一面,可是我並沒有.同時也讓我體會到很多事
情,不是可以等待,和自己可以決定的.後來我們把牠埋在老家的農地上, 這樣每
次回老家的時候,都可以順道看牠,也記得有一個和人類這麼好的朋友,陪著我成
長,分享著我青少年時期的喜怒哀樂.
2011年11月4日 星期五
對於最近社會現象的一些感想.
2011年11月1日 星期二
11月的第一天
2011年10月16日 星期日
open office math 基礎用法
2011年10月15日 星期六
"那些年 我們一起追的女孩"觀後感
在認識的過程中,女主角其實都有給九把刀很多機會的,女主角應該
內心喜歡過九把刀,可惜的是九把刀,沒有好好把握住機會, 讓愛情之間的曖昧
轉化為平淡的友誼,九把刀讓我感覺到,有詩人的浪漫,卻沒有追求
似乎很會文藝創作的人,內心對於愛情常常會有一種過度的幻想,有
作用,很容易把自己丟進去自己所創造的愛情空間裡面跟這種人談戀
充滿驚喜和愉快,因為詩人性格很風趣又富有感情.,難怪那些會創
的人,感情的世界特別精采,等到真實的愛情要發生在自己身上時,
及,沒有準備,而錯失了緣分.實在可惜啊可惜. 我送他一首蘇永康的"舊愛還是最
美"當作句點.
QUT IT43 study experience!(QUT讀IT 的經驗)
入學需求:
大學畢業成績要有4.5級分(大約是台灣的62~63分左右),2月和7月可以入學.
IELTS雅斯6.5(writing要6)可正式入學不用學語言課程,or IELTS6.0(writing 5.0)可讀
pathway.
所謂的pathway是說,因為一個學期要選四個unit,讀pathway的話,學校會預先好指定兩
門語言課程讓你修,修過了也是有算在畢業學分裡面. 如果雅斯成績只有5.5(writing 5.0)
的話還有一種12~13週叫做eap的的語言課程可以上, 可是學費所費不貲,一週大概是
250~300澳幣之間,所以250*31(匯率)*12(週數)=93000元是這套語言課程大約的台幣
花費,因此我是建議還不如把這些錢,拿來台灣請外國人家教補習英文來的實際並且有
用,因為雅斯要考到6.0 OR 6.5真的不難.
QUT IT有兩種碩士課程Course work and Research可以選擇.
IT43(1.5 years)和IT44(Advanced,2 years)這兩個學位選項,差別在於讀IT44的話對於移民澳洲有用,好像可以拿來申請Temporary Resident.選擇好了要讀
的碩士學位,要選擇主修科目.底下我稍微介紹幾個比較多人選的主修的科目:
- Digital Environments:數位環境,主要是在介紹web2.0以及一些網路bloger或新興社群網站
- Enterprise Systems:企業系統, 重心放在SAP和ERP的學習,這算是滿熱門的一科
- Games Design:遊戲設計,偏向實務上設計出遊戲,不過數理背景要強,才不會讀得很累
- Games Production:遊戲產品,偏向商業模式的行銷
- Network Management:網路管理,是一門學習cisco的課程,由ccna到ccnp,我有朋友正在準備ccie,也是選這門當作主修
- Security:這門科目數理也要很好,因為要寫report和學習各式各樣的加解密演算法,從software到hardware的人員的權限控管都有教,這門主修很有潛力.
- Software Architecture:軟體架構,偏向台灣的資工課程.
延伸閱讀:
Go to QUT study Mater of Information Technology Part I (去QUT(昆士蘭科技大學)讀IT Master 第一話)
2011年10月14日 星期五
金融損失的看法
2011年10月10日 星期一
2011年10月3日 星期一
2011年10月2日 星期日
Java this的用法
FB粉絲專頁
1. this可以用來存取物件的field(翻譯為 成員or欄位)
2.this搭配建構子(Constructor),可用於建構子之間的互相呼叫.
相關連結
http://goodideascome.blogspot.com/2011/10/java.html
寶寶命名網
Java初學者指引
http://download.oracle.com/javase/tutorial/
2.自己練習寫題目, 真的寫不出來,才去看答案或問人,從無到有寫出一個程式,
並且順利執行,才代表真的學會了
3.比較答案和自己的寫法,哪裡不同,這樣可以培養看懂別人程式碼的能力
4.Practice, Practice ,Practice.
5.如果想要鍛鍊自己的能力的話,可以找某一個open source project的原始碼來看.
6.然後考驗自己到底有沒有看懂, 可以去看此project的bug list,試著找出問題的解答.
或是看別人已經解好的討論串,裡面有很多寶貴的對話內容可以學習.
7. FB粉絲專業
常見的Java面試問題與答案1-10
常見的Java面試問題與答案11-20
2011年10月1日 星期六
十月第一天
2011年9月24日 星期六
2011年9月23日 星期五
2011年9月22日 星期四
2011年9月18日 星期日
程式語言排名
Java和C果然還是大幅領先的兩個主流程式語言.
可能是因為Android可以用Java開發圖形介面的關係,再加上Java的documnet很詳細內容很豐富,再加
上完整的物件導向特性,在網路應用領域佔有很大的地位.
至於C也能迎領風騷並不意外,因為C對於底層的溝通很強大(快速),這是無庸置疑的.
最令我驚訝的是VB,還排在前10名裡面,真是不容易, 這麼骨董的程式語言,還有為數不少的開發人員
在使用,可見很多公司都還有使用VB開發出來的程式才對.
2011年9月10日 星期六
c語言二維加法
2進為加法運算的概念是.
ie.11
101
+ 11
========
1000
1+1=2=1*2+0,,,c=1,, s=0;s代表相加後最右邊的位元,而c代表進位值
0+1+c=0+1+1=2=1*2+0;同理c1=1,s1=0;
1+1=2=1*2+0, c2=1, s=0
以下是運算的程式碼
2011年9月9日 星期五
2011年9月7日 星期三
2011年9月5日 星期一
大盤分析(20110905)
有些都被追繳保證金了,還不賣出股票,
難道要等追繳第二或第三次後才是買點嗎?
保留銀彈,現在還不是進場買股票的時候.
觀察重點:
1.大盤是否能在7100~7200之間再打一次底
2011年9月1日 星期四
2011年8月26日 星期五
C 雙重指標
i.e
#include <stdlib.h>
#include <stdio.h>
void doublePointerPractice();
struct people{
char name;
int id;
};
typedef struct people * PeoplePtr;
int main(void){
doublePointerPractice();
return 0;
}
void doublePointerPractice(){
PeoplePtr peoplePtr = (PeoplePtr)malloc(sizeof(PeoplePtr));
peoplePtr->id = 12345;
PeoplePtr * ptrPtr = &peoplePtr;
printf("%d" , (*ptrPtr)->id );
}
c malloc,動態記憶體配置
標:一種generic type),programmer要自己轉型為所要的指標型態. 在使用完之後
要用free函式釋放記憶體空間,避免 memory leak的發生.
i.e.
2011年8月24日 星期三
c string
2011年8月22日 星期一
2011年8月21日 星期日
投資股票要會判斷媒體訊息
可是現在宏達電的股價呢?剩700多元而已,短短一個月左右的時間就賠掉一半的資金了.
在當時媒體營造出多頭大好的氣勢,大立光,辰鴻,宏達電的股王股后比價效應.在在讓投資大眾
失去戒心,逢高買股票,然後套牢的錢都被大戶及外資賺走了,一個月前還言猶在耳的利多呢?
現在紛紛調價目標價又是怎麼一回事?不過這同時也給了我們思考的空間,是否可以反媒體操作呢?
現在有媒體說會下跌,又有媒體說底部進了,要相信谁呢?媒體可以當做一種可信賴的反指標,
再搭配上自己的投資判斷,是比較合理可行的投資模式.
2011年8月19日 星期五
2011年8月18日 星期四
股市新聞聽聽就好
只因為新聞報導有某電子公司老闆要收購這家公司的股份,並且很看好它的未來
確實,他有連拉三根漲停板,可是呢,他現在的股價遠低於當初新聞放出這則消息時的股價.
難怪有人說新聞都是落後指標,都是被拿來讓法人大戶脫手持股的工具.
唯有自己判斷量價結構才是真的, 股票要漲的話,新聞自然找得到漲的理由
股票要跌的話,還是有它的理由,
2011年8月17日 星期三
Java comparable
List的物件排序的方法. 我們只要另這個object實作Comparable 這個interface即可.
i.e.
2011年8月14日 星期日
Java Properties
properties.txt是設定檔的名稱
設定檔的內容是 txt=hello
記得把設定檔放在根目錄,才找得到檔案
以下是source code
2011年8月13日 星期六
Graph Traversal --Java
然後把每一筆list排序
把sample input排序後的資料要長成這樣
0:1 4 5
1:0 2 4
2:1 3
3:2 4
4:0 1 3
5:0
接著用queue來儲存breadth first
寬度優先所以要先把最前面列所有的資料存起來,只要不是root,也還沒visit過就可以存
然後逐次往後面的列重複去做.
用stack來儲存depth first的資料
因為是深度優先,所以要把每一列非root的第一筆資料存起來.只要不是root,也還沒visit過就可以存
input data:
1
6 7
0 1
0 5
4 3
2 3
0 4
1 4
2 1
source code:
2011年8月12日 星期五
Java IO -Java輸出入(console, file)
ie. from file, 使用者讀取文字檔案,記得讀取檔案的地方要用絕對路徑
在容器之間移動珠子
移動規則是目的容器內的(珠子數量*2)-目前數量
i.e
default :1,2,3
step1 : 2 2 2 --> 1*2=2 , then 2-1=1,我們可以從2,or第三個容器拿出珠子放進
第一個容器.,在這個例子我選擇從第3個容器來取出珠子.
step2: 4,0,2-->移動規則同上,只要有其中一個容器內沒有珠子,動作就停止
所以我總共花了2步來達成目的.
當然預設值不會這麼簡單或這麼少,這只是舉例.
我目前有找出三個規則
s:small number
m:medium number
l:large number
1. s*2 <---- M : from medium to small
2. m*2 <----L: from large to medium
3. s*2 <----L : from large to small.
可是我找不到甚麼規則來決定我每一次
要用哪個規則拿珠子.
2011年8月11日 星期四
2011年8月10日 星期三
學習程式設計
開始就學c or c++的話,會被指標和動態記憶體配置嚇到,然後
產生了程式設計好難學的想法,因為指標和動態記憶體配置這
兩個比較抽象偏難的主題,指標在Java已不存在(除非要使用
JNI,這又是另一個話題了),動態記憶體方面,JVM已經幫你做
好了,你只要專注在邏輯實現即可.另一方面,寫程式難免要用
到資料結構,這又是另一個會讓初學程式設計的人會產生恐懼
的主題,而Java已經幫你實現了許多常用到的資料結構,諸如
List , Set, Map.Queue ....等. 在實際應用方面,在104以Java為
關鍵字去尋找工作項目,有很多選擇.這會讓人有動力,不會覺
得學了程式語言,我以後能幹嘛的困惑.另一個實用面在
Android上面,因為現在Android的使用者介面是用Java寫的,
如果專注在這個領域,也很有發展潛力.以上是個人接觸程
式語言到目前為止的心得分享
c++ 優點
C++ STL List
i.e.
2011年8月9日 星期二
2011年8月8日 星期一
台股大盤
受害者,兩口小台空單當場被抬出去!!!!馬先生上台後的高點,從上任到現在
都還沒回去過,真是@#@%$@!美國和歐洲又陷入財務危機,逢低還是先觀望好了.
等稍微有小盤整一段時間才決定要不要進場,現在殺聲震天,隨便逢低買進都有風
險. 個股的友達就是明顯例子,明明已經跌到歷史低點了,沒想到現在還連破好幾
次低點,就知道在勢頭不好的時候低點總是越低,勢頭好的時候,再這麼貴都有人買!!
C structure
i.e:
C io(C語言 輸出與輸入)
讀取字串和印出字串用scanf ,printf ,如下例子:
getchar為讀取字元,特別的地方在於,讀入的字元若為數字,也可以拿來作為logic 的comparison(比較)
i.e:
2011年8月7日 星期日
賣掉教科書的罪惡感
方一手交錢,一手交書的時候,心裡忽然聽到書在吶喊:"你為什麼不要我了",心頭一陣酸,
可是總不能反悔不賣吧.,之前賣電腦書的時候,並沒有這麼罪惡感阿.可能是因為這本書,
好歹也陪我一學期,每次上課都要帶著他,雖然平心而論,我真的沒有翻過這本書幾次,因
為這是一本教專案管理的書,本來管理學就不是很有趣的課程了,再加上我是讀英文版
的,那種感覺是一拿起書本,不到10分就會睡著了.沒想到這樣一本書竟然會引起我內心
這麼大的漣漪,真是始料未及阿.不過後來我想想,我當初也是跟人家二手買來的,現在只
不過用同樣的方式,幫這本書找到了另一個主人,和另一個家這樣而已,或許這樣想會讓
我的罪惡感降低一些.
英文字根和字首
在學習英文的過程中,常常會發現某些英文字首會代表一個意義,好比:abnormal(不標準),
amoral(不道德),或是字尾也有代表的意思,好比suspect(懷疑), expect(期待), 都有一種預測的意涵在,
只是意涵是正面或負面,在網路上找資料的過程中,發現了一個很不錯的網站,有詳細的提供這些資訊,
我列出網址,讓大家參考English Grammar
繁體字與簡體字
對何懷碩教授『繁體與簡體』一文的回應
作者..何為
何懷碩教授的藝術家風骨與見識,素為筆者所敬仰,頃讀中國時報九五年四月十七日副刊 『繁體與簡體』一文,雖對繁、簡之爭具有某些釐清作用,但筆者覺得有三部份值得商討:(一)忽略中共簡體字的動機與歷史。(二)過度美化中共簡體字。(三)過度期待簡體字。
簡體字來源最多的就是錯別字,一個人寫錯是錯字,但很多人都這樣錯、約定成俗,雖不滿意也接受了,就保留下來了。所以簡體自古已有之,但中共卻一口氣造了許多簡體字,以致有人以為中共發明簡體字。但中共這些簡體字和傳統的簡體字有許多不同。
(一)中共簡體字的動機與歷史
1.中共的簡體字來自自卑與仇恨。
漢字自倉頡以來,受中國人所尊崇。倉頡在南北朝入祀孔廟,民間對寫有漢字的紙片都不敢隨意丟棄,必須集中到『敬字亭』燒毀,燒成灰還不能當成垃圾,必須集中保存,再擇日誦經祭祀後才放水流。台灣保存傳統文化較多的客家聚落,今日仍保有此風。
鴉片戰爭慘敗,民族自信崩解,知識份子起而改革腐敗的政治,有些則選擇改革文化、文字。政治改革的屢屢受挫,鬱憤之心,轉而仇視文化、文字。清末民初,更加激烈。
錢玄同:『欲袪除三綱五倫之奴隸道德,當以廢孔學為唯一的辦法。』『廢記載孔門學說及道教妖言的漢文,尤為根本解決之解決。』
共產黨承襲這股自卑仇恨的思潮,共黨總書記、文字專家瞿秋白說:『漢字真正是世界上最齷齪、最惡劣、最混蛋的中世紀茅坑。』瞿秋白在毛澤東的指示下,對漢字的拉丁化、簡化,做了不少工作(拉丁化是指用字母代替漢字)。
共黨文化旗手魯迅:『漢字是勞苦大眾的結核。』『倘不除去,只有自己死。』可是等來等去,漢字沒有死,魯迅只好『自己死』。
這些充滿憤激、自卑、仇視的思潮,正是中共推行簡化的動力。
2.中共簡字意在消滅漢字進而消滅傳統文化
中國的歷史,多災多難,遺忘是痛苦中最好的選擇,中國有最久遠的歷史,也有最會遺忘歷史的子民。回頭看一看,歷史不遠,簡體字不是中共的最愛。正體字、簡 體字都是中共要消滅的對象,只是時程的先後而已。1936年毛澤東在延安說:『如果我們要創立一種新社會文化(共產文化),我們非廢除中國方塊字不可。』
執政後1951年毛澤東指示:『文字改革要走世界文字的共同方向--拼音化。』『在實現拼音化以前,應先簡化漢字。』『文字改革』,不是『文字改進』,革 就是革命,革掉你的命、革掉他的命、革掉漢字的命。那到今天為何沒有革掉漢字的命呢?甚至到全世界設立孔子學院呢?因為發現這種虛假的漢字--簡字,(簡 體字的虛假,請看拙文:簡體字簡掉了什麼)拿來作為愚民的工具,已經綽綽有餘。現在中共的文字專家說簡體字多美、多好,似乎太健忘了,也沒有遵照毛主席的 路線。照見歷史,才能照見自己。
3.來自政治高壓
過去的簡體字都是歷經久遠的年代,經過無數人的選擇淘汰,而留存下來,也許不合六書,但至少約定成俗了。秦始皇『書同文』推行小篆,禁絕與小篆不合的文 字,但秦始皇並沒有自己造字、改字,少數政治人物,配合一些御用專家來製造簡體字,違反文字自然之理,最後必遭自然力的反撲。
4.反客為主
過去也好、現在也好、喜歡也好、討厭也好、簡體字一直生存在我們周遭,但我們清楚,簡體字是正字的輔助,補漢字的不足--難寫,但不能代替,因簡字缺乏秩 序和內涵,用多了會亂。如今正體字成為違禁品,顛倒是非、反客為主。你可以不喜歡好人,但你總不能禁止別人去做好人吧!
(二)過度美化簡體字
中共的簡體字和何教授心中的簡體字是有很大的差距,不知是出於藝術家的天真?還是被所謂文字專家所迷惑?何教授文中對簡體字過度美化的有:
1.『大陸簡體字是動員許多專家學者研擬製定的』,依此看來,簡體字好像是這些專家嘔心瀝血的結晶,學術性無庸置疑。這裏頭有許多陷阱,首先再偉大的帝 王、總統、專家都沒有資格去造字,除非所有使用該文字的人絕大多人同意。其次專制高壓下的學者專家,必然是政策的工具而已,談不上獨立思考。
何教授文中說:『漢字是簡體對呢?還是繁體對呢?我的回答是兩者都有偏失。』既然簡、繁各有偏失,簡體不過是以偏代偏而已,簡體既非十全十美,當年推行 時上百上千的文字專家,有哪一個提出異議。倒是古文字學家唐蘭,在文革後,來到香港中文大學,嘆了一口氣說:『有句話,過去不敢說,現在要講,漢字是不應 該簡化的。』
2.『簡體字即使新創,也有文字學的某些依據』
這些話,出自大師之口,真叫我駭異無名,連中共御用專家聽到都會承擔不起,說:『不敢當、不敢當。』
廠→厂, 衛→卫, 從→从, 幣→币, 葉→叶。
這種隨心所欲,我喜歡就好的新創字,和火星文有何兩樣呢?居然也有『文字學的某些依據。』照這樣推下去,國中生那些火星文,也是學術作品了。葉在甲骨文上 是一棵樹上有三片美麗的葉子,到了楷書已失去原貌,但至少保留草字頭和木字和葉有關的部份,叶,有誰家的樹葉是這樣的呢?50年來,十幾億中國人,有誰敢 向政府嗆聲,這個字要改,它不像漢字,用這種漢字,真是丟祖先的臉。
3.『事實上簡體字對中國傳統文化的繼承與傳揚毫無影響』
這種完全是『主觀的期待』而已,既天真又危險。使用不同的工具,會產生不同的觀點。走路和開車的人,對交通問題,會有不同的觀點。看看歷史,日據時代,日 本對漢字百般壓迫,漢字老師由公立學校退守私塾,最後退守到廟宇,孔子不語怪力亂神。如今要靠神明保佑,其中的艱辛,難道只為了固執?日文也是由漢字簡化 的啊!日文中也有漢字也有四書五經啊!現在的『啟明堂』就是當年留下漢字香火的見證。
繁簡的筆畫不同,承載的內涵也隨之而異。以義字來說中國人重義,交朋友講義氣、做人守信義、為官要主持正義。桃園三結義、關公義薄雲天,千古美談。義之所 在,不問利害,不計成敗,赴湯蹈火、在所不辭。中國人為什麼能這樣做呢?倉頡造字時,已把這些內涵灌注在筆畫當中。義上面是羊,羊肉美味滋補、羊性溫馴, 是美好吉祥的象徵,正好用來當供品。下面是我,為了美好的事物,把我自己當成供品,無私的奉獻,在用字的潛移默化中,義成為中國人生命深處的一部份。
簡體的义,一個大叉叉,加上斜斜的一點,三畫都是斜斜又邪邪的。國共二次和談,國民黨二次都吃悶虧,因國民黨不了解中共的信義只是斜斜的三畫而已。義和义不一樣,肖万长也不等於蕭萬長。
4.(簡體字)『其中多數古已有之的寫法』
這是事實,古已有之,有錯錯在古人不在中共。很迷惑人的理由。有些簡體字出現了幾百年了,為何不扶正成為正體呢?古人知道,簡體好寫但會亂。簡字缺乏秩序 理路,用多會亂。宋以來畫的簡字有 、 、 、 、 ,5種。歸有 、 、、 、 、 ,6種。寫有 、 、 、 、 、 、 、 ,8種。多一點少一點,誰是誰非?標準何在?誰來做決定?如果毛澤東可以做決定?那蔣介石也可以改吧?改來改去,不亂都不行。
聖在甲骨文是一個人,有個大耳朵、大嘴巴,大耳要聽得清、大口要說得明,神聖的字簡成怪裏怪氣的〔圣〕,從元朝開始,低文化的蒙古人痛恨儒家讀書人,人的 階級是『一官、二吏....八娼、九儒、十丐。』還好,此乞丐高一級,中共給讀書人的綽號『臭老九』就是從這兒來的。理所當然這怪怪的〔圣〕,就登上主角 了。
冫
(三)、過度期待簡體字
『我敢預測:未來無關統獨....最後漢字,必完全簡化了』,何教授在最後已經聲明,這只是『帶著主觀的期待。』一個人有各式各樣的期待、願望,都是好 事。就像花了50元,對著彩券,我們可以有無窮的期待,但以何教授的德高望重,一向不輕易評論事物,如此樂觀的期待,必有他的理由。但對這樣一個文化上如 此重要的課題,如果只是純粹是主觀的願望,我想是有虧長者的風範。我願提出一些事實,供大家思考。
漢字一直在簡化,這是事實,因為人有貪小便宜的天性。但人也有求秩序穩定的天性,所以漢字也一直在繁化。甲骨文約有4500字,到了漢代的說文解字有 9340字,宋代廣韻有26194字。到康熙字典有47043字。簡化是主觀的願望,繁化是文化進步的必須。牛津英文字典早已超過三十萬字,英文還是每天 大約要增加二個生字,為何英文文字專家不規定每一個英文字的字母不能超過五個呢?這樣不是更有學習效率嗎?漢字減少筆畫,對書寫是有節省時間的效果。但漢 字減少筆畫,使漢字失去理路,提高相似度,容易混淆,增加辨認時間,並不能提高學習的效率,對消滅文盲也沒有多少幫助,文盲多少和政治經濟文化有關,和文 字難易無關。非洲文盲多是因為漢字難嗎?消除文盲是中共推行簡字的最大藉口。
簡體字的後遺症--亂,在大陸已逐漸浮現,加上經濟的開放,一些大膽的文字學家開始對簡體字提出質疑,繁體字在大陸經歷50年的高壓打擊,並沒有消聲匿 跡,中共對異己的排除是極為徹底的。法定的簡體字--『規範漢字』,歷經50年的高壓灌輸,並沒有約定成俗,繁體字有如雨後春筍,中共政府須要不時的三令 五申,來打擊不規範字--主角是繁體字。御用的文字專家也不時呼籲珍惜漢字。
事實的情況呢?簡體字在官文書、報紙、雜誌、書籍是相當統一的。但比較能表達個人好惡的私文書方面,廣告、招牌、信函則規範簡體字,不規範簡體字,地區通 用簡體字,個人自創的簡體字、繁體字...什麼都有。廈門街市招牌繁體字氾濫,驚動中央,派出委員到廈門檢查用字,廈門大學許長安教授描述:『廣告招牌是 用幾萬、幾十萬元精製而成,但出乎我的意外,短短幾個月,全市百分之百得到整改。』『舉報不規範用字的電話每天不斷..』,令人想起『檢舉匪諜,人人有 責』的年代,商家為什麼要冒著幾萬、幾十萬泡湯的危險,一定要用繁體字呢?不會是台商思念台灣的正體漢字吧?何況『濫用繁體字』是普遍的現象。如果簡體真 的那麼好,50年的高壓,為何還不能習慣成自然呢?
「冥冥之中,自有天數」,很多事物,不是人力所能決定的。當年如果不是潘重規教授的一篇文章,台灣早就簡體化了,也沒有今天所謂繁、簡之爭,天下定於一 尊。在1954年,曾任北大校長,時任考試院副院長兼黨史編委會主任羅家倫寫了一篇三萬多字的長文,『簡體字之提倡甚為必要』,在全台各大報同時刊登,文 中提出『中國字要簡化,才能保存、才能適合現時代中國民族生存的需要』,以羅的學術地位、官位之高,當然風起雲湧,反對者亦復不少,但難以撼動。黨史編委 官不大,但必須是當權者的心腹,才有機會當的。師大教授潘重規以學術立場,揭發羅文中有關古文字的論證,其中有多處造假,論證造假,這是非常嚴重的瑕疵, 從此羅無法理直氣壯,提倡簡字也漸趨沉寂。正體漢字本已危在旦夕,幸賴潘公大筆一揮,漢字香火得以綿綿不絕。
如今大陸比較有知識良知的學者,相繼提出自己的看法,2004年在北京召開第三屆文史資料研討會,文史專家許逸民在會中提出『繁體字是創造文史資料庫的基 本學術要求。』真正的學術--至少文史方面,須要純正的漢字來做載體。大陸著名經濟學家茅于軾語重心長地提出:『建議在小學選讀繁體字,因為簡體字使中國 偉大的古文化和廣大的人民相隔離。』經濟學家的呼籲,是否隱含失去傳統文化的個人,他的品質下降,連帶他的產品品質也跟著下降呢?
簡體字,只有漢字的外形,缺乏漢字的內涵,是一種虛假的漢字,長久使用這種虛假的工具,潛移默化中造成虛偽的文化。就像使用假鈔,最後不但破壞經濟,也傷 害人與人的誠信。華僑回國,外國人踏入中國,第一個強烈的感受就是〝假〞,什麼都假、假話、假藥、假奶粉...假來假去,虛情假意。中國已成世界最大的假 國。2005年美國貿易代表署的年度報告中,特別指出:美國對外貿易中,最感頭痛的問題,就是中國大陸的盜版、仿冒品的猖獗。在網路上打出『誠信危機』會 讓人看得心驚肉跳,政治誠信危機、經濟誠信危機、學術誠信危機、婚姻誠信危機...真是危機四伏,北京航空大學招生,該校教授龐宏冰拿著七份錄取通知單, 千里迢迢到廣西,向考取的家長索賄十萬元,否則拿不到錄取通知...無論是繁體、是簡體,事件的主角絕大部份是中國大陸出產的。一個自古以「禮義之邦」著 稱的社會,不出幾十年,轉變成一個造假王國,沒有內涵的文字是有深沉的影響的。
(四)、結語
在一個正常的社會,一間百年老屋,即使斑駁老舊,人們也會珍惜;一千多年的正體漢字,有何罪過,竟被蹧蹋成「非法」,成為打擊的對象,天理何在?炎黃子 孫,難道鐵石心腸?當年凌遲漢字,宣揚孔孟為「政治騙子」的文字專家,如今在孔子學院,夸夸高談發揚傳統優良文化,如果世人也信以為真,那真叫人有不知 「今世何世」之嘆。當年漢字拉丁化如火如荼,瑞典漢學家高本漢勸阻說:『中國人必毀棄此種文字,此乃自願摧毀中國文化基礎而降服於他人。』
二千多萬人面對十幾億人的簡體字,壓力是夠大的。為了現實、為了流行,我們可以學、可以用--事實上這也不難。但如果因此就要說簡體字多好、多妙,就未免 太自卑了。流行自有它的道理,但不一定是美的、也不一定是對的。秦始皇強行統一小篆,秦短命、小篆也短命,武則天聰明絕頂,花了15年創造了18個新字, 人亡字亡,現只存一個『曌』字,靠著是武則天的名字而保留下來。古今中外,無論民主或獨裁,沒有一個政黨能永遠執政,屆時新人新政...。何況大陸呼籲漢 字回歸正統的呼聲,此起彼落。為了減少壓力,他們起了一個嶄新的名詞--漢字的優化避開了敏感的繁、簡之爭,但大家想一想,對簡體字而言,優化是向簡化靠 近,還是向繁化靠近呢?
順水推舟,隨波逐流,有事半功倍的暢快。逆水行舟,中流砥柱,也才能體會捨我其誰的氣概。
星星之火,亦可燎原,何況天命在我而不在彼,在此正體漢字艱難的時刻,如何豐富正體字的作品,願大家思之,勉之。
完註一..中時副刊推出..繁體正字之美..系列文章.主菜尚未上桌..先來何懷碩教的麻辣前菜.宣告繁體正字的死刑 中時的用心.殊為詭異..乃以此文就教於何教授.惟中時未刊
2011年8月6日 星期六
JSP pagecontext
request scope:處理同一個request的各個頁面都可以存取,一旦container(Tomcat or other application server)處理完這筆請求,資料才會被release
session scope:同一個session的頁面都可以存取,session的範圍是從1.user打開browser到關掉browser為止, 或2.user連到別的網站, 或3.系統設計者在user log out時自動銷毀.
application:同一個應用程式內的jsp pages都看的到,使用上要小心, 別任意改動application scope的變數值,因為很可能別的jsp page需要用到,一般來說這個範圍適用於read only的變數
jsp servletcontext application
Java private final int
private int---->沒有final,所以可以指派int的值.
兩者宣告為private之後,只可在宣告的類別內使用.
加上final的用法,通常為PI等常數值的時候會使用.
2的補數(two's complement)
0則代表+,若為1代表- 但是正負符號的要如何儲存在記憶體呢?
我們可以使用2的補數系統來儲存.以下列出如何把一個負整
數轉化為2的補數的表示法.
我們以數字-36為例:
首先+36的二進位表示法為: 00100100
然後把每一個bit的0-->1,1--->0,變成11011011
然後從右端加入1個bit,變成 11011100
<2的補數轉回負整數>
也是一樣先轉化0為1,1為0. 然後加1.
ex: 1111 1111
--->0000 0000
--->0000 0001
---> -1
<2的補數運算>
1.兩個正整數相加: 3+8=11
0000 0011 3
+0000 1000 8
-------------
0000 1011 11
2.兩個正整數相減: 8-3=8+(-3)=5
-3
0000 0000 0000 0011
-->1111 1111 1111 1100
-->1111 1111 1111 1101
so
0000 0000 0000 1000 (8)
+ 1111 1111 1111 1101 (-3)
----------------------------
0000 0000 0000 0101
3.小正整數減大正整數: 3-8=3+(-8)=-5
-8
-->000 1000
-->1111 0111
-->1111 1000
so
0000 0011
+ 1111 1000
---------------
1111 1011
由以下逆推得知1111 1011為-5
-->0000 0100
-->0000 0101= 5
2011年8月5日 星期五
梁靜茹大手牽小手的日文版歌詞ー 風になる
青空に隠れている 手を伸ばしてもう一度
忘れないですぐそばに 僕がいるいつの日も
星空を眺めている 一人きりの夜明けも
たった一つの心 悲しみに暮れないで
君のためいきなんて 春風に変えてやる
陽のあたる坂道を 自転車で駆けのぼる
君と失くした 想い出乗せて行くよ
ララララ 口ずさむ くちびるを染めて行く
君と見つけた しあわせ 花のように
-----------------------------------------
忘れていた窓開けて 走り出せ恋のうた
青空に託している 手をかざしてもう一度
忘れないよすぐそばに 君がいるいつの日も
星空に輝いてる 涙揺れる明日も
たった一つの言葉 この胸に抱きしめて
君のため僕は今 春風に吹かれてる
陽のあたる坂道を 自転車で駆けのぼる
君と誓った約束 乗せて行くよ
ララララ 口ずさむ くちびるを染めて行く
君と出会えた しあわせ 祈るように
-----------------------------------------
陽のあたる坂道を 自転車で駆けのぼる
君と誓った約束 乗せて行くよ
ララララ 口ずさむ くちびるを染めて行く
君と出会えた しあわせ 祈るように
君と出会えた しあわせ 祈るように
2011年8月1日 星期一
如何選網球拍
根據自己目前的程度來買球拍.
初學: 若為成年人或是女性,要買球拍的重量輕(可以打比較久,手也不會酸),拍面很大
(比較容易打得到), 拍子稍長(有些球來不及跑到定位,拍子長一點可以彌補).以下列出一
些符合以上範圍的參考數字,這些資料在你選購球拍的時候都可以在球拍資料的貼紙上
找到.
重量 : 8-9.5 ounces
拍面: 107-135 square inches
長度: 27-29 inches
中級: 適合找靈敏或操控性較高的球拍.這類球拍比起初學者在使用的球拍,來的稍為重
一點,牌面小一點,拍子長一點.以下列出一些符合以上範圍的參考數字
重量 : 9.5-11 ounces
拍面: 95-102 square inches
長度 27.5- 28 inches.
進階: 專注在球拍操控性.較細的球拍骨架
重量 : 11.5-13+ ounces
拍面:85-98 inches
一些球拍性質的介紹
- 球拍重量: 太重的球拍拿久了手會痠,太輕的球拍打起來沒有power. 但是輕的球拍比較容易控制. 整體而言,重的球拍有力,穩定, 擊球時會比較不會傳導太多震動到手.相反的輕的球拍很容易揮空拍.
- 球拍面寬:大面寬的球拍有power,而且可以擊球的甜點相對多.
- 球拍長度:在球快落地的時候好救球,但太長的話也會失去控制度.
- 球拍線的張力:張力低的話可以減少擊球的震動,張力高的話,球速會較快,也比較好控制球的方向.
- 球拍握柄:手小的人適合 1/8-3/8的size, 大一點的適合1/2 size, 在更大的話可以選3/8的size
8月的第一天
發表的文章,竟然在第一頁第一條就出現了,呵,,還挺興奮的.我遠本還以為會被排到很後
面去呢.我的blog沒有加入其他blog的連結,google也找得到, 證明了google的搜尋技術確實
很踏實,不會因為我沒有加入連結,就忽視我這個小blog的存在,這個月希望當月份的瀏覽人
數能夠提升到200人,恩有目標就有方向,GO GO GO!!
什麼是64位元處理器.
bits.就是說有2的64次方種可能性 因此作業系統也要能夠處理64位元的資料量,並且採用
模擬的方式來向下相容32位元的資料格式.
數字系統
2011年7月31日 星期日
我是台灣人!!
2011年7月30日 星期六
2011年7月29日 星期五
ACM-3n+1 Problem
You should focus on the green part and fix input part for your use.
package acm;
import java.io.*;
import java.util.*;
public class ThreeNPlusOne {
public static void main(String[] args) throws IOException {
ArrayList<String> userInput = new ArrayList<String>();
int intCases = 0;
System.out.println("How many test cases to run?");
BufferedReader bs = new BufferedReader(new InputStreamReader(System.in));
String cases = bs.readLine();
intCases = Integer.parseInt(cases);
while (intCases != userInput.size()) {
System.out
.println("Please enter 2 numbers m and n,separate them by dot.");
userInput.add(bs.readLine());
}
Iterator it = userInput.iterator();
while (it.hasNext()) {
String numbers = (String) (it.next());
int[] ns = getInts(numbers);
int first = ns[0];
int second = ns[1];
System.out.println(first + " " + second + " "+ threeN(first, second));
}
}
public static int threeN(int a, int b) {
int max= 0;
for (int i = a; i <= b; ) {
int tmp=i;
int count = 0;
while (true) {
count++;
if (i == 1) {
break;
} else {
if (i % 2 != 0) {
i = 3 * i + 1;
} else {
i /= 2;
}
}
}
if (count > max) {
max = count;
}
i=++tmp;
}
return max;
}
public static int[] getInts(String str) {
int totalNumbers = str.split(",").length;
int[] ints = new int[totalNumbers];
for (int i = 0; i < totalNumbers; i++) {
ints[i] = Integer.parseInt(str.split(",")[i].trim());
}
return ints;
}
}
CPU 規格解釋
#cores:有多少個核心在一顆cpu上.
#threads:一個核心有一個process,一個process有一個thread.
clock speed:時脈,也就是頻率.
i.e:
2 MHz (2 million cycles/second):每秒執行2百萬次運算.
3 GHz (3 billion cycles/second):每秒執行30億次運算.
cpu執行的速度越快,價格當然越高.
L2 cache:cpu每次會從ram,也就是記憶體裡面拿資料出來做運算,但因為cpu速度太快了,因此處理器製造商,便在cpu和記憶體之間加了諸如L1, L2的cache(快取記憶體)來當作橋樑,也就是
cpu-L2 cache(Store data)-physical memory
FSB Speed: Front side bus又稱為north bridge or 北橋, 負責處理cpu和記憶體的溝通,
通常L2 cache包含在FSB裡面.速度當然是越快越好.
Lithography:製程. 每個製成會使用到不同的化學方法或物理方法來製造這各chip,數字越小代表需要越先進的技術來開發,想當然爾會越貴
Max TDP(Thermal design power):cpu運算會產生熱,這個數字代表冷卻系統需要耗費多少瓦特的電力來散熱,所以越快的cpu比起低階的cpu,會更快產生更多的熱,因此也就耗電.
部落格經營記事--當月瀏覽人次首度超過100
是稀稀疏疏的,因此我下定決心每天至少要發2~3篇文章才可以,我把部落格當成小花圃一般來照料,
果然有付出,月底就看到收穫了.很高興,要再接再厲的發文才行.
2011年7月28日 星期四
ACM-light, more light problem
ACM-Greatest Common Denominator
package acm;
import java.io.*;
import java.util.*;
public class GCD {
public static void main(String[] args) throws IOException {
ArrayList<String> userInput = new ArrayList<String>();
while (true) {
int intCases = 0;
System.out.println("How many test cases to run?(from 1 to 1000)?");
BufferedReader bs = new BufferedReader(new InputStreamReader(
System.in));
String cases = bs.readLine();
intCases = Integer.parseInt(cases);
if (intCases < 1 || intCases > 1000) {
System.out.println("Please enter a valid number!!");
} else {
System.out.println("Please enter 2 numbers m and n,separate them by dot.");
System.out.println("ex: 12,60");
while (intCases != userInput.size()) {
userInput.add(bs.readLine());
}
break;
}
}
Iterator it=userInput.iterator();
while(it.hasNext()){
String numbers=(String)(it.next());
int[] ns=getInts(numbers);
System.out.println(gcd(ns[0],ns[1]));
}
}
public static int gcd(int a, int b) {
while (a != 0 && b != 0) {
if (a > b)
a %= b;
else
b %= a;
}
if (a == 0)
return b;
else
return a;
}
public static int[] getInts(String str){
int totalNumbers=str.split(",").length;
int[] ints=new int[totalNumbers];
for(int i=0;i<totalNumbers;i++){
ints[i]=Integer.parseInt(str.split(",")[i]);
}
return ints;
}
}
2011年7月27日 星期三
數學相關單字的英翻中
exponential equation:指數方程式.
quadratic :二次方程式.
asymptotes:漸進線
instantaneous:瞬間
substitution:代換
conjugate : 共軛的
slope: 斜率
quotient:商,除的意思
tangent: 切線
secant:割線
steeper:陡峭的
workbook練習本
power:次方
hypotenuse:斜邊
adjacent:鄰邊
products:乘積
concavity: 凹度
time span:時間寬度
rectangle:矩形
Integration: Backwards Differentiation
QUADRATIC:二次
denominator:分母
perpendicular:垂直
composition:構成,成分,組成
symmetry:對稱
vertex: 頂點
polynomial: 多項式
sketch:畫輪廓
conic:錐
parabola :拋物線
intercept:截取
ellipses:橢圓
2011年7月25日 星期一
OpenMP-shared for loop
#include <omp.h>
#include <iostream>
using namespace std;
int main() {
int n=10;
#pragma omp parallel shared(n)
{
#pragma omp for
for (int i=0; i<n; i++)
cout <<"Thread "<<omp_get_thread_num()<<" executes loop iteration "<< i<<endl;
}
return 0;
}
references:
OpenMP Official Web sites
Using OpenMP: Portable Shared Memory Parallel Programming
OpenMP-Parallel Constructor
並且程式設計師也可以運用此結構,來個別定義thread的行為.
i.e.
#include <omp.h>
#include <iostream>
using namespace std;
int main() {
#pragma omp parallel
{
cout <<"The parallel region is executed by thread "<<omp_get_thread_num();
if (omp_get_thread_num() == 1) {
cout <<" Thread "<<omp_get_thread_num()<<" does things differently\n";
}
}
return 0;
}
附帶一提parallel region有兩種狀態:active以及inactive.
所謂的active是指有多個thread在執行運算,若只有一個thread在做運算的話就是inactive的狀態.
references:
OpenMP Official Web sites
Using OpenMP: Portable Shared Memory Parallel Programming
OpenMP conditional compilation
Following is its format:
#ifdef _OPENMP
#include <omp.h>
#else
#define omp_get_thread_num() 0
#endif
//some code here
int TID = omp_get_thread_num();
references:
OpenMP Official Web sites
Using OpenMP: Portable Shared Memory Parallel Programming
2011年7月23日 星期六
好聽的日文歌曲介紹
2.貓的報恩主題曲-梁靜茹翻唱為小手拉大手
3.很愛很愛你原曲 KIRORO-長い間
4.ホワイトベリー - 夏祭り / Whiteberry-->放煙火的時候可以聽
5.ボーイフレンド aiko (歌:ラズベリー) --aiko boyfriend
6.B'z 今夜月の見える丘に (木村拓哉主演的日劇主題曲)
7.Do As Infinity / 深い森
8.hitomi - LOVE 2000
9.I WISH - Asu e No Tobira 明日への扉 --另一歌版本為---旅立ちの日に
10.Time goes by/ELT
11.Dragon Ash - Life goes on
12.花×花 あ~よかった
13.Da Pump - if
14.PV Hysteric Blue - 春~spring
15. それが大事
2011年7月22日 星期五
Circular Queue Array
#include <iostream>
#define capacity 5
using namespace std;
class ArrayQueue {
public:
int size;
int myFrontPos, myBackPos;
int array[capacity];
ArrayQueue(){
size=0;
myFrontPos=0;
myBackPos=0;
}
void enqueue(int number) {
int newBack=(myBackPos+1)%capacity;
if (size==capacity) {
cout<<"queue is full!!"<<endl;
} else {
array[myBackPos]=number;
myBackPos=newBack;
size++;
}
}
void dequeue() {
if (size==0) {
cout<<"queue is empty!!"<<endl;
} else {
myFrontPos=(myFrontPos+1)%capacity;
size--;;
}
}
void display() {
for(int i=0;i<size;i++){
cout <<array[i]<<endl;
}
}
};
int main() {
ArrayQueue aq;
aq.enqueue(1);
aq.enqueue(2);
aq.enqueue(3);
aq.enqueue(4);
aq.enqueue(5);
aq.dequeue();
aq.enqueue(6);
aq.display();
return 0;
}
2011年7月21日 星期四
C++ array (陣列)
const int n=100;是用來指定陣列的size;然後第一個for loop是塞值進入陣列,第二個for迴圈是把目前的陣列值印出來.
若沒有塞值進入陣列的話,印出來的陣列值是殘存在那個記憶體位置裡的值,如下列例子:
我們也可用pointer(指標)的方式來對陣列存取,
陣列的第一個元素的位址(address)就是陣列的名稱,
因此我們可以把此名稱指定給poiner然後循序遞增或遞減pointer來存取陣列,
如下範例:
int* ptr =a;:把此名稱指定給poiner
ptr++;:循序遞增或遞減pointer來存取陣列
Subsequently, let's introduce the Dynamic Array.
The differences between static and dynamic are the declaration and memory handling.
For declaration, a "new" reserved word needs to be along with the variable.And we also need to delete the pointer variable to release the reserved memory block. It is a very important thing to prevent from a memory leak.
Following is the example code, you can focus on the colored words.
OpenMP Introduction(OpenMP 介紹)
2011年7月20日 星期三
OpenMp 環境配置 for eclipse
OpenMP-HelloWorld
#include <omp.h>
#include <iostream>
using namespace std;
int main() {
#pragma omp parallel
cout<<"Hello from thread "<<omp_get_thread_num()<<", nthreads"
<< omp_get_num_threads()<<endl;
return 0;
}
#pragma omp parallel:是openmp的directives(指示字?),會產生threads來執行,此段程式碼.
omp_get_thread_num():此函式用來回傳thread編號
omp_get_num_threads():用來回傳thread總數
如果只需要一個thread執行程式的話可以用#pragma omp single
#include <omp.h>
#include <iostream>
using namespace std;
int main() {
#pragma omp single
cout<<"Hello from thread "<<omp_get_thread_num()<<", nthreads"
<< omp_get_num_threads()<<endl;
return 0;
}
2011年7月19日 星期二
Binary Search Tree C++
以下是Binary Search Tree的實作,綠色字的部分是用preOrder遞迴的方式列出這棵樹所有的元素.所謂的 preOrder的意思是說先找root,然後找Left node, then Right node.另外還有,inOrder 和postOrder,分別把root放在中間找亦或是把root最後找
Java binary search
BST with Java 行程安排應用程式
2011年7月18日 星期一
Queue Implemented by a Linked List
Queue:是一種先進先出的資料結構(First In First Out).
下面的範例程式使用C++ 的Linked List來實現Queue.
#include <iostream>
using namespace std;
class Node {
public:
int data;
Node* nxtNode;
Node(int _data) {
data=_data;//Data
nxtNode=NULL;//pointer to next one
}
};
class LinkedList {
Node* previous;
Node* next;
public:
LinkedList() {
previous=NULL;
next=NULL;
}
void insert(Node * _node) {
if (previous==NULL) {
previous= next= _node;//first node
} else {
(*next).nxtNode=_node;
next=_node;
}
}
void displayAll() {
Node* tmp=previous;
while(tmp!=NULL){
cout<<(*tmp).data <<endl;
tmp=(*tmp).nxtNode;
}
}
};
int main() {
Node* firstNode=new Node(1);
Node* secondNode=new Node(2);
Node* thirdNode=new Node(3);
LinkedList ll;
ll.insert(firstNode);
ll.insert(secondNode);
ll.insert(thirdNode);
ll.displayAll();
return 0;
}
Stack implementation linked list
- linked list
- 用指標(pointer)實作的list可以無限制的擴充大小,但無法像陣列一樣可以直接(Direct)或是隨機存取(Random Access)儲存的資料.
- 基本的linkeded list(鏈結串列),包含一個data的欄位,和一個next pointer欄位用來指向下一個資料
以下是以一個LinkedList實作Stack(First In Last Out)的例子
2011年7月17日 星期日
2011年7月16日 星期六
C++ Reference Variables Usage(C++參考變數的使用)
#include <iostream>
using namespace std;
int main() {
int a=1;
int & a1=a;//a1 is a reference variable
cout << a1 <<endl;
return 0;
}
之前有提過c++和Java的基本型別變數(int ,double等)都是call by value的
call by reference or value若是想要call by reference,在c++可以用reference帶替pointer(指標)當作傳入函式的參數.如下例:
#include <iostream>
using namespace std;
void sum4(int &);
int main() {
int a=1;
sum4(a);
cout << a <<endl;
return 0;
}
void sum4(int & a) {
a=2;
}
在這個例子中,雖然並沒有建立一個reference變數,但當基本變數a傳入此function sum4()的時候,會自動被當成reference變數來對待,也就是call by reference,因此在函式內改變a的值之後,
原本變數a的值也會一起被改變.
#include <iostream>
using namespace std;
int & sum5(int &);
int main() {
int a=1;
sum5(a)=3;
cout << a << endl;
return 0;
}
int & sum5(int &a){
return a;
}
因為sum5回傳的是(reference),也就是記憶體位置,因此改變a的值為3,也會同時改變原本的變數值.若在sum5的前方加上關鍵字const,那麼我們便不能直接使用sum5所return回來的reference來改變變數值,如下例子:
#include <iostream>
using namespace std;
const int & sum5(int &);
int main() {
int a=1;
sum5(a)=3;
cout << a << endl;
return 0;
}
const int & sum5(int &a){
return a;
}
"那些年,我們一起追的女孩,觀後感"
C++ 變數的生存範圍和種類
- 區域變數(Local Variables):在函式內宣告的變數,當跳離或函式結束執行的時候,此變數的記憶體空間會自動被回收
- 靜態變數(Static Variables):在程式主體和函式之間的變數.程式結束執行的時候記憶體會自動被作業系統回收
- 動態變數(Dynamic Variables):實際執行時期用到的變數.要用delete手動把存在記憶體的變數值刪掉,或是程式結束執行的時候會被作業系統自動回收.
#include <iostream>
using namespace std;
void sum3(int);
int main() {
int a=1;//Static Variable
sum3(a);
int * ptr=new int;//Dynamic Variable
*ptr=2;
cout << "before delete: "<<endl;
cout << *ptr<<endl;
delete ptr;
cout << "after delete:" <<endl;
cout << *ptr<<endl;
return 0;
}
void sum3(int a) {
int b=a;//Local Variable
cout << b<<"\n";
}
C++ Namespace(命名空間)用法
以下是範例程式:
#include <iostream>
using namespace std;
namespace MyException {
class Exception {
public:
void mesg() {
cout << "Exception Occurred !!"<<endl;
}
};
}
void sum2(int, int) throw (MyException::Exception);
int main() {
int a=1;
int b=1;
try {
sum2(a, b);
} catch (MyException::Exception & ex) {// start of exception handler
ex.mesg();
}
return 0;
}
void sum2(int a, int b) throw (MyException::Exception) {
if (a==b) {
throw MyException::Exception();
}
cout << a+b<<"\n";
}
解說:
先命名一個namespace為MyException的block,然後在block內定義一個Exception類別,接下來使用"命名空間::類別名稱"來使用此類別
也可以使用兩個namespace的方式來更進一步減少name collision,不過在使用的時候要記得存取每一層namespace的名字,compile才有辦法正確找到要使用的類別.
namespace MyException {
namespace SecondLevel {
class Exception {
public:
void mesg() {
cout << "Exception Occurred !!"<<endl;
}
};
}
}
2011年7月15日 星期五
C++ 例外處理(Exception Handler)
#include <iostream>
using namespace std;
void sum(int, int);
int main() {
int a=1;
int b=1;
try {
sum(a, b);
} catch (const char * s) {// start of exception handler
cout << s <<endl;
}
return 0;
}
void sum(int a, int b) {
if (a==b) {
throw "This Combination is unacceptable!!";
}
cout << a+b<<"\n";
}
紅色字的部分是表示當function sum(int,int)在try block拋出string的錯誤訊息時,catch block(區塊)要把此錯誤訊息印出來.
Exception class(例外類別)
前一個範例是拋出字串,這一個範例是拋出例外類別.使用這一個方法的好處是我們可以為exception分類出不同類別,以方便辨識.另外一方面,也提升了重用性(re-usability).
#include <iostream>
using namespace std;
class Exception {
public:
void mesg() {
cout << "Exception Occurred !!"<<endl;
}
};
void sum1(int, int) throw (Exception);
int main() {
int a=1;
int b=1;
try {
sum1(a, b);
} catch (Exception & ex) {// start of exception handler
ex.mesg();
}
return 0;
}
void sum1(int a, int b) throw (Exception) {
if (a==b) {
throw Exception();
}
cout << a+b<<"\n";
}
解說:
第一部分是宣告一個Exception class(例外類別)
第二部分部分只是把拋出字串,改為拋出此例外類別.
第三部分部分是函式的實做.要記得在定義define(定義)以及declaration(宣告)的時候加上throw關鍵字指定要丟出何種類外類別.
宏達電也不適合買進
況且電子產品的價格,以及利潤會隨著競爭者的加入
和產品的普及化而降低,所以最賺錢的時候已漸漸遠離
用這麼高的價錢來看待這檔股票,似乎要審慎考慮一番.
C++ Function Templates (函式模板)
void sum(int , int);
這樣寫的話可以將整數相加,若是同樣的用法要將兩個double(也就是浮點數)相加的時候,還要再寫一個版本給浮點數使用,這種情況可以運用function template來解決
先宣告function template: 大寫 T可代表任意型態的變數
template <class T> void sum(T , T);
在程式碼實作的部分
void sum(T a, T b) {
cout << a+b;
}
下列是完整的程式:
#include <iostream>
using namespace std;
template <class T> void sum(T, T);
int main() {
int a=1, b=2;
double c=1.1, d=2.2;
sum(a, b) ;
sum(c, d) ;
return 0;
}
template <class T> void sum(T a, T b) {
cout << a+b<<"\n";
}
接下來要介紹(Overloaded Templates)多載化的模板
如果sum()這個函式的名字不變,但傳入的參數改為三個,
那麼這種情形便稱作多載,多載化的版本也是要先宣告template,然後在實做出來.
請注意紅色字的部分是新增出來的多載化的程式碼.
#include <iostream>
using namespace std;
template <class T> void sum(T, T);
template <class T> void sum(T, T, T);
int main() {
int a=1, b=2;
double c=1.1, d=2.2 ,e=3.3;
sum(a, b) ;//3
sum(c, d) ;//3.3
sum(c, d, e)//6.6 ;
return 0;
}
template <class T> void sum(T a, T b) {
cout << a+b<<"\n";
}
template <class T> void sum(T a, T b, T c){
cout << a+b+c<<"\n";
}
2011年7月14日 星期四
演算法分析(Algorithm Analysis)
如何判別一個程式寫得好不好,可以用這個程式需要花費的記憶體,或是說要花多少時間才能解出答案,來判斷.因為現在硬體的價格很大眾化.所以我們可以專注在,時間上的討論. 有一個叫做Big-O的概念: 因為會影響時間的因素很多,因此這個概念主要是以討論程式執行的次數多寡來決定要花多少時間.一般我們都是採取比較嚴格的標準檢視程式,所以主要都是討論,在最差的情形下,這程式要花多少時間找出答案.
比如說
for (int i=0; i<n; i++) {
}
假如答案在最後一項,迴圈要跑到n-1,也就是最後一個才找到答案,我們用O(n),來表示這個迴圈要花線性時間來找出答案.
又如
answer=n*2;
因為答案只需要一次就找出來了,我們用O(1)來表示程式只需要常數時間就會找到答案
又若我們可以把數字排序後再來找答案,那麼所需要的時間只有一半而已.
假設1,2,3,4,用Binary Search只需要1~2次即可找出答案,所以可以用O(logN)
來表示只要對數的時間即可找出答案. 我們可以這麼去想, 4=2^2 ,以2為基底的log: log4=2;
所以把線性時間乘以2為基底的log,即為log N.
2011年7月11日 星期一
軼代和遞迴Iterative and Recursive
遞迴要有兩個要素:1.基本元素,也可說是終止條件 2.遞迴判斷條件,
例如:2^0 =1; 2^1=2*2^0; 2^2=2*2^1, 2^3=2*2^2,到最後我們可以歸納為
x^0=1,這個就是基本條件, 又若n>0的話, x^n=x*x^n-1;這個就是遞迴條件.
以下是以n的幾次方分別用用遞迴和軼代的方式來實作的程式碼:
#include <iostream>
using namespace std;
int recursive(int, int);
int main() {
cout << recursive(2,3);
return 0;
}
int recursive(int x, int n){
if(n==0){
return 1;
}else{
return x*recursive(x, n-1);
}
}
所有的遞迴和Iterative都可以互換,跑出同樣的結果,把上列程式用Iterative來寫變成:
#include <iostream>
using namespace std;
int recursive(int, int);
int main() {
cout << recursive(2, 3);
return 0;
}
int recursive(int x, int n) {
int answer=1;
if (n==0) {
return answer;
} else {
for (int i=0; i<n; i++) {
answer *=x;
}
}
return answer;
}
但遞迴較佔記憶體空間.
divide and conquer with recursive
遞迴常被使用在分割-處理的使用上,很多二分(Binary)相關的演算法都是用recursive實作
c++ Typedef的用法
typedef可以用來為常用的變數型態設定方便自己識別的名稱.
#include <iostream>
using namespace std;
typedef int Integer;
int main() {
Integer a=1;
Integer * number= &a;
Integer * number2= number;
(*number2)=3;
cout << *(number) << "\n";
return 0;
}
C++指標(Pointer)介紹
1. 指標可以用來指定一個記憶體位址儲存變數資料,用"&"符號可以取出變數的記憶體位址,"*"符號則是取出實際所儲存的值
#include <iostream>
using namespace std;
int main() {
int a=1;
int * number= &a;
cout << *(number) << "\n";
return 0;
}
2. 指標也可以互相指定到同一個記憶體位址,但要很小心,萬一任何一個指標更動到實際所儲存值,那麼另一個也會受影響到
#include <iostream>
using namespace std;
int main() {
int a=1;
int * number= &a;
int * number2= number;
(*number2)=3;
cout << *(number) << "\n";
return 0;
}
2011年7月9日 星期六
Constructor in C++
若是使用者沒有自己定義的constructor,系統預設會建立一個空白的建構子給每一個物件.
你或許也會有興趣的主題:
c++繼承