2014年12月9日 星期二

coursera, An Introduction to Interactive Programming in Python 一些心得

  可能會不定期的把我在 coursera 上過的 An Introduction to Interactive Programming in Python 的心得打出來,雖然只是九周的課程,但學習上真的很有趣 (後面幾周的練習作業真的難到爆 Orz )。
  coursera 的互評系統真的是很棒的設計,尤其是對於程式這方面,很多人都有特殊的創意,精煉的寫法都是值得參考的,相對於期中期末考的形式,這樣的評分方式相對學習較好;也有的把程式撰寫的部分擺到 OpenJudge 上,這部分我真的覺得不是很好,雖然能夠把遇到的問題貼到討論區來討論,感覺上就只是單單解決個人問題,很多時候寫完程式,看到獲得分數後,很少有人會再度去重寫兩三遍,來多次練習,但互評系統,卻可以用不同人的角度,去思考相同的問題,進而瞭解學習其中的變化。在此對互評系統做個人小小的讚賞以及評論!!

  Python 真的很奇妙(會用奇妙來解釋,可能是我的能力還不夠XD ), C / C++ 是我先接觸的語言,兩者都有優缺點,在我的角度來看就是 C / C++ 很實用, Python 很有趣(可能是課程給我的映象吧XD ),在 String 上 Python 讓我有不同於 C / C++ 的思考層面!!
  
  正式進入 Python 內容!!

  萬事起頭難, Python 由於是直譯式語言,所以相對入手較快,個人認為 Python 的資料類型,以及縮排問題需要特別注意!! 課程上 Python 是使用 2.7 的版本,作業繳交是使用 codeskulptor 來繳交, codeskulptor 可以透過網址的方式來繳交以及分享作業,如果想要在自己的電腦裡跑 Python 那就得到 Python 官網下載。


  上圖是電腦安裝完 Python 2.7.6 版後,執行 command line 的畫面,可以從上面看到,顯示版本號 2.7.6 的字樣。

  Mini-project # 0 - "We want.. a shrubbery!" 這個作業非常簡單,顯示 We want... a shrubbery! 的字串,而 Quiz 0 也十分容易,考題需要特別注意:

  1. 宣告以及附值方式
  2. 括號的使用
  3. 變數名稱的規定
  4. 檔案的副檔名為何
  5. 關於 codeskulptor 的介紹
以上幾點,看完影片之後就能很好的回答,至於以後的 Mini-project 和 Quiz 如果題目有趣的話,會特別分享出來!!

2014年6月22日 星期日

R + Latex + Markdown 介紹

在 github 新增中,有個增加 README.md 的檔案選項,之前簡單的認為 .md 就像是 .txt 一樣,我想我思考方式有點錯誤, .md 檔也很神奇啊!!

.md 可以看成 .tex ( 簡單版 ),但也比 .tex 好上手, .tex 的優勢就是漂亮的數學公式;如果三個加起來,就可以成為很棒的文章利器 ( 我還在嘗試中XDD ),而這三個的結合就是 .Rmd 。
RStudio 內的 test2.Rmd 樣式
依照上面的程式經過轉換後就可以成為

test2.html 畫面

R 主要是用來做統計、繪圖等數據分析而使用,而 LaTex 則是很棒的排版軟體,可以增加很多 package 來達到很棒的效果,而 Markdown 在我的看法,比 LaTex 來的簡單,等級和 word 差不多,但又比 word 來的簡便 ( word 有的功能真的很不直覺 ),所以說不想用 word 可以用 Markdown 看起來效果差不多 XDDD 。

至於 R 、 LaTex 、 Markdown 這三個,我可能還得再花時間學習吧,每個看起來都挺有趣的說wwwwwww

2014年6月13日 星期五

git for c++

最近在網路上看到很多人貼的 git 的文章,雖然很多都很棒,但資質愚笨的我很多都看不太懂,最後靠著網路上某位使用 SourceTree 的文章,一步步地練習 ( 大概重新開新檔案10幾次 ) 才知道 git 的神奇之處 ( 還有待學習就是了 )。

git 網路上很多關於它的介紹文,在此我就不再重複直接進入正題吧XDDD

b016.cpp git 圖

上圖是我 git 練習用的 b016.cpp 程式,前半段真的很賞心悅目,最後一步是要測試本機上傳到 github 的情況 ( 跳出樹狀結構了Q_Q ),在此我先講一下我的設計過程:

在 master、develop、feature、release 的認知上我是這樣解讀的:

master:主要的版本,也就是傳送出去的完全版,簡單來講就是已經 ok 發售的版本。
develop:開發中, feature 結束後會回歸 develop ,簡單來講有點像開發者的主幹道。
feature:新功能,在 develop 延伸出去的功能測試,可以不完結,但是如果回歸,會回到 develop 。
release:釋出,當 feature 完整回到 develop ,且 develop 經過測試後無誤,就能夠使用 release 釋出發售版。

程式開發過程:

主要是 b016.cpp 的改造,程式可以在 b016 下載到

1. 一開始 master/develop/feature f1 會在同一個節點上,每當我改變 b016a.cpp ,feature f1會前進

2. 我放棄 b016a.cpp 程式,由於開發的錯誤,我回到原點新增了 feature f2 b016b.cpp 這程式

3. 要合併 b016b.cpp 和 b016.cpp ,最後釋出 v0.1.0 版本,在途中利用 b016b.cpp 測試 *vit 的功能,也就是 feature f5

4. feature f4 做了重新排版,但是沒有改變功能

b016.cpp git 改進圖

5. feature f5 的結束

6. 在 github 新增了一個 b016 git 新增進入

7. release v0.2.0 版本

8. 準備 push 到 github 上

大致上是這些功能 ( 有些感覺上是為了 git 而測試,而有些是真的有在 b016 的改進 )


說實在話, git 對我來講可能只是輔助工具,它讓我在寫程式的時候可以更加清楚我之後要做什麼事情,像是要增加功能就要 feature ,要釋出就要 release 。以前這些動作我都會混著做,常常一個恍神就忘記我在幹什麼了,之後又回到原點重新來過,這樣一來一往就花費了很多時間;當然啦 git 好不好用見仁見智,只少它幫很很大的忙XDDDD

2014年6月6日 星期五

b012: 羅馬數字

b012: 羅馬數字 這題真的非常經典,說起來這題我花了很多的時間XDDDD

這題也讓我知道 "相信" 的重要性,說實在話,很多時候我都不太相信,輸入者的 input ,始終認為會有人故意亂打資料來做判斷;其實要做那些判斷也很簡單,但是我認為,寫程式就是要互相信任,要相信使用者有按照需求執行,畢竟總是以懷疑的眼光看著別人,別人也是以相同的眼光看著你。

===============================================

這題的要求有一點

  1. 羅馬數字轉阿拉伯數字
演算法部分我使用了
  1. 先判斷羅馬字母
  2. 全部加總
  3. 把多加的扣掉
就那麼的簡單,至於程式我就放在下方

程式的部分我有使用 map ( 用的很糟糕="= ),但我覺得很有趣XDDD ,有空或者有新的想法就會在po不一樣的程式碼上來!!


2014年6月2日 星期一

container (容器) list 使用 + b001: 最後倒數 (**)

容器是我第一次的使用;在我的理解中容器有點類似"盒子",具有空間,而空間中的物體具有類似的功能,和原先的基本型態有點不同,比較屬於把功能類似的聚在一起,而不僅是型態一樣的放在一起 (可能解讀有點錯誤,如果有錯請見諒XD )

會想使用容器,主要在於演算法的部分;像是排序、搜尋等。我始終認為演算法雖然把實作的部分抽離出來,但是對於一個程式設計師而言,還是需要了解具體的實作方式 (除非不碰程式碼) ,而程式的使用我認為分三個部分:

  1. 不會使用
  2. 濫用
  3. 正確使用
不一定三個部分都需要、但依照這個三個部分可以知道自己問題所在。

=======================================================




上面的版本是 list 的版本,至於簡單的版本我就不貼了XDDD ,我怕會有人拿來抄,所以就不公佈了,至於效能方面其實是相同的 (經實測是沒有差別的) 。

2014年5月30日 星期五

程式心得 + 台中女中程式解題系統 - a042: 13的次方

截至目前為止,我在此系統練習了大約60題,大部分都是基礎的練習;雖然題目較為簡單,但我還是有粗心大意的時候XDDD 

大部分都是沒仔細看清楚題目要求,想要快點交出去惹的禍,有點過於毛躁。有些題目在寫的時候,感覺特別有趣,像是 a049: 斜紋地硨 、 a041: 收集冰棒棍 等。 有些題目比較偏觀念,在寫的時候得多想想。

目前注意到的問題有幾點:

  1. 空間大小問題
  2. C++輸出格式
  3. 函數、迴圈、演算法的使用
這幾個問題,是我練習時覺得比較繁瑣的地方;其實會寫到演算法,是想讓自己的程式能力有所增長,這期間還重新把資料結構拿出來重讀 ( 非常難專心閱讀,思緒常常跑掉... )。最近常有思緒雜亂的問題,這件事情讓我覺得很難過 ( 就像是我現在在打文章,但可能會想說等等要做什麼事情、還有甚麼東西得做... );程式寫到一半會想東想西,反正就是很不專心,這部分我覺得讓我寫程式受到很嚴重的挑戰。

我喜歡寫程式動腦的過程,但時常發現自己寫程式有很多毛病,而且不太能有解決的辦法,但我希望在程式這部分有所成長,所以寫 Blogger 來砥礪自己,希望自己能進步,而且有效率的成長。


==========================================================================
a042: 13的次方 (**) 內有題目。

這題我覺得很有趣,它使用了兩個觀念
  1. 對13的了解
  2. 十位數的次方邏輯
一開始我以為這題是要問13的N次方有幾位數XDDDD ( 這就是我不專心的證明XD ),後來在看了一次題目才知道只求10位數,這題我做錯兩次,一次就是看錯,另外就是10位數的邏輯有點問題,當然最後還是做出來了!!  這題也是我覺得很有趣的一題,下面附上參考程式碼。


#include "iostream"  
#include "cmath"  
using namespace std;      
  
int main(){    
    int num;  
    while(cin >> num){  
        unsigned int i=1;  
        while(num>0){  
            i *=13;  
            i %=100;  
            num--;  
        }  
        cout << (int)((i%100)/10) << endl;  
    }  
    return 0;    
}

2014年5月24日 星期六

高中生程式解題系統 a007: 判斷質數

這題真的非常的怪異="= 應該說我寫的程式逾時了Orz

第一版
#include "iostream"
using namespace std; 
int main()
{
    int intA,intB,intC;
    while (cin >> intA){
    int boolA = 1;
    for(intB=2;intB<(intA>>1);intB++){
        for(intC=1;intC<(intA>>1);intC++){
            if(intA %(intB*intC)==0)
                boolA= 0;
                break;
        }
    }
    if(boolA==1)
        cout << "質數" << endl;
    else
        cout << "非質數" << endl;
    }
    return 0;
}
這版逾時超過兩秒

第二版
#include "iostream"
#include "cmath"
using namespace std; 
int main()
{
    int intA,intB,intC;
    while (cin >> intA){
        int boolA = 1;
        intC = (int)(sqrt((double)intA));
        for(int i = 2; i<=intC;i++) {
            if(intA % i == 0) {
                boolA = 0;
                break;
        }
    }
    if(boolA==1)
        cout << "質數" << endl;
    else
        cout << "非質數" << endl;
    }
    return 0;
}

這版也逾時了Q_Q

討論區有人用 Sieve of Eratosthenes miller-Rabin 來寫 (不是基礎題嗎Q_Q 怎麼要用演算法...),另外就是使用列表法把 sqrt(2147483647) 拿來判斷...,只能說這題算是目前我碰到的問題最困難的一個!!

UVa Online Judge 程式練習

最近在尋找有關程式練習題的地方,最後找到了 UVa Online Judge 這個網站。

簡單的註冊完後,點擊左邊的 Browse Problems 在右邊可以看到題目 ( 如下圖 )。



另外還有 高中生程式解題系統 這裡也能做程式練習,而且是中文的XD

2014年5月18日 星期日

Linux 初步學習 ( CentOS 6.0 )

這篇會慢慢變長,主要是用來記錄 Linux 的學習歷程。

首先要準備:
1. VisualBox :VisualBox Downloads

我的 VisualBox 是在裝 Genymotion 時順便安裝的,所以這部分就沒甚麼特殊教學 XD

VisualBox 樣式


2. Putty :Putty Download

Linux 學習目前主要透過 鳥哥的 Linux 私房菜 ,但我不想一直切換 VisualBox 的畫面,所以想透過 Putty 來輸入指令,畢竟 Linux 我想學的也是指令的操作,而不是圖形介面 XD

目前只有這兩點需求吧 XD ,安裝的部分就等有心情再整理上來 ( 畢竟截圖,貼圖有點繁複 )。


2014年5月3日 星期六

創用CC規範

  其實很久就知道有這個規範 ( 其實是有看到這些圖,但不知道這些圖在幹嘛XDD ),關於引用以及轉貼的規範。當然啦,可能還要再適應一陣子,但我會努力的。

 參考:台灣創用CC計畫 姓名標示-相同方式分享 3.0 台灣

2014年4月27日 星期日

一些心得

  寫 Blogger 沒有想像中的簡單,有些東西不是很上手,某些格式或者規定、並不是那麼瞭解,第一次寫有關程式那篇 1. C and C++ Language - 最初 沒有想像中的好,從那篇歸納出幾個心得:

  1. html格式問題
  2. 文章深度
  3. 文章格式標準
  4. 標籤設定
  第一點:
在我寫程式時發現的, 要寫程式需要做一些有關 html 的設定,並不是很好調整,這部分會再加強。
  第二點:
內容需要再多做準備,之前那篇我看了就覺得,不是資工系也寫得出來 ( 很沒內容的文章 Orz ) ,得多花點時間準備。
  第三點:
格式這部分在我學 LaTex 就有注意到,在書局也有注意到有關論文格式的部分,至於 Blogger 的格式,目前還沒去搜尋,得去找一個標準。
  第四點:
也就是分類標籤,我不太會分類,畢竟整理這種事,不是人人都有天分,我的 Evernote 分類就不是很好,這也是我該學習的地方。
  很多地方都不是很成熟,但我會持續努力!!

2014年4月26日 星期六

1. C and C++ Language - 最初

  可以在 wiki 上面看到很詳盡的介紹 C and C++ Language 相關的歷史以及敘述。在此 Blogger 我希望可以寫有關 C++ 的一些內容 ( 因為我想學 C++ ) ,有時候會穿插一些其他語言 ( 畢竟我想寫個對照 XD ),所以廢話不多說,就開始第一個程式吧!

#include "iostream"

using namespace std;

int main()
  cout << "Hello World" << endl;
  return 0;
}
每個程式都會有的第一個程式 Hello World ,一開始會從這個程式做開頭,其實就像是電話的發明一樣,反正就是想來個打招呼拉 XD 。

  這個程式,就有很多觀念可以探討像是:預處理器、 namespace 的使用、間容性的探討...等等,主要是看使用者想要程式為你做哪些事情,而決定關注哪些事情而定。

所以我第一個程式的要求是:輸出一個 Hello World 到螢幕上來吧!!

參考:維基百科-C++ Wikipedia:Text of Creative Commons Attribution-ShareAlike 3.0 Unported License

2014年4月23日 星期三

2014年4月22日 星期二

五四三..

覺得如果真的要增加程式能力,除了寫別無他法。知識這部分我會想辦法勤加努力,多思考多判斷。

會用 Blogger 的原因有幾點

  • 方便
畢竟叫我架個 server 有點麻煩,而且我只是想要把程式這個部分練習好,在這邊做個記錄這樣。


  • 以前用過
  很簡單的想法,但之前那個帳號登不進去,所以只好放棄之前的重開一個。