高中生程式解題系統:因數分解(Factorization)

若您覺得文章寫得不錯,請點選文章上的廣告,來支持小編,謝謝。

題目連結 http://zerojudge.tw/ShowProblem?problemid=a010

解這題,有幾種作法:
方法一:
1. 除數從 2 開始,若此被除數可以被除數 2 整除,就被除數就一直除以 2;若不行除數換用 3。
2. 一直重複到 除數的平方大於或小於 被除數。

方法二:
1. 求出小於此被除數開根號後的所有質數。
2. 在用這些質數去除被除數算出每個質因數出現的次數。

但底下程式碼是先建立質數表,再進行因數分解。

程式碼:

高中生程式解題系統:解碼器(Decode)

若您覺得文章寫得不錯,請點選文章上的廣告,來支持小編,謝謝。

題目連結 http://zerojudge.tw/ShowProblem?problemid=a009。此題用字元的 ASCII Code 來運算即可,而整數K到底是多少呢?


程式碼:

高中生程式解題系統:一元二次方程式 (A Quadratic Equation)

若您覺得文章寫得不錯,請點選文章上的廣告,來支持小編,謝謝。

題目連結 https://zerojudge.tw/ShowProblem?problemid=a006
一元二次方程式解的公式(下圖取自 Wikipedia 一元二次方程式):
{\displaystyle x_{1,2}={\frac {-b\pm {\sqrt {b^{2}-4ac\ }}}{2a}}}

先求出一元二次方程式根的判別式(下圖取自 Wikipedia 一元二次方程式):
{\displaystyle \Delta =b^{2}-4ac}

判斷是否有實數解,相等根。再用公式求出兩根的解即可。

程式碼:

惡搞嘻語言第五嘻:嘻函式

若您覺得文章寫得不錯,請點選文章上的廣告,來支持小編,謝謝。

函式在嘻語言裡無所不在,例如printf就是一個函式,為標準函式之一,若沒提供一些積木的函式給開發者使用,那不就要開發者自行做積木嗎?
若要自行撰寫函式又要如何鑽寫呢?函式的定義如下:
傳回值型態 函數名稱(參數一型態 參數一名稱, 參數二型態 參數二名稱, ....)
{
變數宣告
程式碼
return 傳回值;
}

例如下面是y=x^2的函式:
intpower(int x) {
inty = x * x;
returny;
}

範例:

參考網址:


讀書心得:YOUTUBE英語學習法

若您覺得文章寫得不錯,請點選文章上的廣告,來支持小編,謝謝。


<YouTube英語學習法>此書從解釋為什要使用YouTube來學習英語開始,先建立讀者對英語聽力的一些心態,例如如何降低有聽沒有懂時所受到的挫折感等。接下來書上會教讀者循序漸進的方式慢慢學習英語,並且提供一些方法與工具,例如以玩遊戲的方式來練習聽寫。

另外VoiceTube也提供類似的資源給學習英語的人。

TED也有字幕供觀看影片的人使用。

底下是筆者從書上所做的筆記。

EF podEnglish - Learn English! - YouTube

提供初級、中級、高級的英語會話課程。

包含發音、詞彙、文法、俚語、常犯錯誤、小學堂等類別。

以打招呼等基礎開始的課程。

輕鬆方式教授英語的課程。

英語新聞頻道BBC所提供。

有漫畫的影片   ==> 筆者最愛。

動畫與兒童節目--適合初學者
兒童教育節目<<芝麻街>>

以一隻紅色狗為主角的卡通。

卡通影片

<<辛普森家庭>>

<<蓋酷家庭>>

美食節目
介紹日本料理

介紹西式美食

美式家庭菜餚

甜食

有爆點的影片
多樣化的題材,如萬聖節、聖誕節、瘦身、IT產品的使用等



適合初學者的英語新聞

介紹日本影片

大學課程影片

綜藝節目影片

高中生程式解題系統:Eva 的回家作業

若您覺得文章寫得不錯,請點選文章上的廣告,來支持小編,謝謝。


題目連結 http://zerojudge.tw/ShowProblem?problemid=a005
這題套用等差公式(下圖取自 Wikipedia 等差數列)
 a_n=a+(n-1)d

或等比公式(下圖取自 Wikipedia 等比數列)


先判斷數列是等差數列還是等比數列後,在求出第五項就可以了。

程式碼如下:

程式設計入門( Computer programming for a novice )

若您覺得文章寫得不錯,請點選文章上的廣告,來支持小編,謝謝。


簡短介紹程式語言所需要的觀念,並以 C++ 和 Java 兩種程式語言示範。


投影片下載處:



程式碼下載處:
http://www.4shared.com/archive/wdl_N-Hpba/HowToProgram.html


高中生程式解題系統:文文的求婚

若您覺得文章寫得不錯,請點選文章上的廣告,來支持小編,謝謝。


題目連結 http://zerojudge.tw/ShowProblem?problemid=a004,根據題目給的提示:西元年被4整除且不被100整除,或被400整除者即為閏年。即可完成此題了。

程式碼如下:

高中生程式解題系統:字串讀取練習

若您覺得文章寫得不錯,請點選文章上的廣告,來支持小編,謝謝。


題目連結 https://zerojudge.tw/ShowProblem?problemid=d018

此題為字串處理的題目,用C++ sstream 裡的 istringstream 來處理。

將字串切割成
序號(整數):(字元)實數(浮點數)
用 istringstream buffer(str);  int serial; char dummy; double real; 等變數。
最後變成  buffer >> serial >> dummy >> real

程式碼:
#include <iostream>
#include <sstream>

using namespace std;

int main()
{
    string str;

    while(getline(cin, str))
    {
        int serial;
        char dummy;
        double real;
        double result = 0;

        istringstream buffer(str);

        while(buffer >> serial >> dummy >> real)
        {
            //cout << serial << dummy << real << " ";
            if( serial & 1 )
                result += real;
            else
                result -= real;

            //cout << result << endl;
        }

        cout << result << endl;
    }

    return 0;
}

讀書心得:睡谷傳奇 (THE LEGEND OF SLEEPY HOLLOW)

若您覺得文章寫得不錯,請點選文章上的廣告,來支持小編,謝謝。


<<睡谷傳奇>>一書描述說一為名叫「奕可柏.柯鶴」的教師,康乃狄克州人。他到一個叫做「睡谷」的小村落,在那裡他遇到了一位富有農夫的美麗女兒「嘉翠娜.凡.陶蘇」,亦可柏對她傾心不已。不過有個很臭屁的情敵「保洪.碰司」。在一場宴會之後,女孩拒絕了他,只好落寞地騎著馬回家。在回家途中,他遇到了傳言中可怕的「無頭騎士」幽靈,在一場恐怖至極的追逐後,奕楂柏消失了...

亦可柏想追富家女孩的動機是很多人都有的,但女孩的心思總是讓人捉模不定,而且一位外來人士要融入當地的風情文化是需要時間和精神的,也需要個人的接受度。

幽靈、鬼魂、神仙一向都是傳奇或傳說常見的題材,供人茶餘飯後Talk的話題,感興趣的看倌們,此書也提供了題材喔。

高中生程式解題系統:後序運算法

若您覺得文章寫得不錯,請點選文章上的廣告,來支持小編,謝謝。

題目連結 https://zerojudge.tw/ShowProblem?problemid=d016

後序表示法的運算方式如下:
從後序表示法的前方開始讀取,
若是運算元則放進堆疊裡,
若是運算子,則從堆疊取出兩個運算元進行運算,並將結果存回堆疊,
若讀取完畢,則堆疊的最頂端即為此後序表示式的運算結果。

例子可看底下影片的動畫說明:

底下程式碼是用STL裡的stack來做。此外,程式碼的寫法是可以改善的。

程式碼:
#include <iostream>
#include <string>
#include <sstream>
#include <stack>

using namespace std;

int main(){

    string input;

    while( getline(cin, input) )
    {
        stack<int> value;

        stringstream strStream(input);
        string token;
        int inStack;
        int outStack;

        while( strStream >> token )
        {
            switch(token[0])
            {
                case '+':
                    outStack = value.top();
                    value.pop();
                    inStack = value.top();
                    value.pop();
                    inStack += outStack;
                    value.push(inStack);
                    break;
                case '-':
                    outStack = value.top();
                    value.pop();
                    inStack = value.top();
                    value.pop();
                    inStack -= outStack;
                    value.push(inStack);
                    break;
                case '*':
                    outStack = value.top();
                    value.pop();
                    inStack = value.top();
                    value.pop();
                    inStack *= outStack;
                    value.push(inStack);
                    break;
                case '/':
                    outStack = value.top();
                    value.pop();
                    inStack = value.top();
                    value.pop();
                    inStack /= outStack;
                    value.push(inStack);
                    break;
                case '%':
                    outStack = value.top();
                    value.pop();
                    inStack = value.top();
                    value.pop();
                    inStack %= outStack;
                    value.push(inStack);
                    break;
                default:
                    inStack = atol(token.c_str());
                    value.push(inStack);
                    break;
            }
        }

        inStack = value.top();
        cout << inStack << endl;
    }

    return 0;
}

程式語言如何入門

若您覺得文章寫得不錯,請點選文章上的廣告,來支持小編,謝謝。

拚命玩遊戲就能學寫程式! CodeCombat 還有中文版

就是玩遊戲而已,如果覺得上面還沒有辦法說服你,那下面這篇也看看好了。

被神化的 Coding,工程師現身:寫程式不需要天份,也不需要熱情



但也請你看看些 這文章



筆者個人的經驗就是:「只要有明確且強烈的動機,就會想辦法去學了。」

高中生程式解題系統:盈數、虧數和完全數

若您覺得文章寫得不錯,請點選文章上的廣告,來支持小編,謝謝。

題目連結 http://zerojudge.tw/ShowProblem?problemid=d010

此題用迴圈從判斷1到 N/2 是否為 N 的因數,若是則加總(s)。接著比較加總結果與 N的大小關係來輸出對應的訊息。(那有沒有更好的演算法呢?)

程式碼:
#include <iostream>
#include <cmath>

using namespace std;

void prtMsg(const int &s, const int &n)
{
    if( s == n )
        cout << "完全數";
    else if( s > n )
        cout << "盈數";
    else
        cout << "虧數";

    cout << endl;
}

int main()
{
    int n;

    while( cin >> n )
    {
        int s = 0;
        for( int i = 1; i <= n/2; i++ )
        {
            if( n % i == 0 )
                s += i;
        }

        prtMsg(s, n);
    }

    return 0;
}

讀書筆記:寫給C++程式設計師的UML實務手冊

若您覺得文章寫得不錯,請點選文章上的廣告,來支持小編,謝謝。

UML簡介
由 Grady Booch, Jim Rumbaugh, Ivan Jacobson 所發展出來的
模型幫助我們視覺化一個系統。
模型允許我們詳述一個系統的結構或是行為。
模型給出指引我們建構一個系統的樣板。
模型紀錄了我們所做的決定。

4 + 1觀點 (4 + 1 View)

使用案例觀點 (Use Case View)
從系統外部的使用者角度,表達系統所提供的功能(4+1中的1指的是使用案例觀點)

設計觀點 (Design View)
描繪出系統的靜態結構以及動態行為,以做為系統所提供之功能的解答。因此,設計觀點圍繞在類別、介面以及物件的合作等等設計問題上。

處理流程觀點 (Process View)
描繪出組成系統的平行以及同步機制之執行緒(thread)以及程序(process)。這個觀點強調系統的性能、延展性等非功能性需求。

實做觀點 (Process View)
以模組或元件來顯示設計觀點的物件是在哪一個模組或元件中實做。

部屬觀點 (Deployment View)
描繪系統在執行時,各個組成元件的實際佈置與安裝,強調系統執行環境的硬體拓樸結構。



UML圖形簡介
使用案例圖
塑模出系統應該做什麼(What),而不是如何做(How);描述系統所提供的功能以及其執行時的情境(Scenario)

活動圖
塑模出系統層級之處理邏輯以及執行流程。可用來檢視使用案例圖,幫助我們發覺使用案例中所可能產生的各種不同情境。

類別圖
塑模出問題領域中所發掘的物件類別;表示物件靜態的資料結構。

物件圖
塑模出問題領域中所參與的實際物件,藉以檢驗類別圖的準確度。

循序圖
塑模出問題領域中物件互動的情形,重點是在強調一個使用案例中,物件與物件之間執行順序的時間性。

合作圖
塑模出問題領域中物件互動的情形,強調合作的物件結構以完成一個使用案例。

狀態圖
塑模系統中物件、子系統、系統等在其生命週期中各種可能的狀態,造成狀態轉換的事件,以及在各不同狀態中可能的活動。

元件圖
呈現系統中,軟體實體元件的組織以及他們之間的相依性,其中包含它們所實做的介面以及實做介面的軟體部份。

部署圖
呈現節點在執行時(Run-Time)的配置以及在各節點中的元件;節點指的就是硬體。換句話說,部署圖呈現系統的硬體配置靜態觀點,以及在各項硬體中執行的軟體元件。

Java Puzzler Video

若您覺得文章寫得不錯,請點選文章上的廣告,來支持小編,謝謝。

 底下為有關Java Puzzler的影片。

Java Expressive Puzzlers

若您覺得文章寫得不錯,請點選文章上的廣告,來支持小編,謝謝。

解釋在程式碼裡,有疑問的人,請在此發問。

讀書心得:最後14堂星期二的課(TUESDAYS WITH MORRIE)

若您覺得文章寫得不錯,請點選文章上的廣告,來支持小編,謝謝。

<最後14堂星期二的課>一書是我在逢甲化工讀書時,國文老師推薦的課外閱讀之一,當時的我還真的去借來看,逢甲化工的課業壓力其實很重,化學實驗要寫預報和結報;國文要背唐詩;微積分老師不教計算題,偏愛證明;物理老師居然教了三個積分符號的算式...等,不回憶了。

回到正題,此書讓我見識到人在面臨身死交關時,可以很瀟灑地面對,也可以怨天尤人地抱怨,而我期許自己做到不抱怨就好了。



另外附上Randy Pausch教授的最後一堂課。


讀書筆記:字元裝置驅動程式(scull sample from ldd3)

若您覺得文章寫得不錯,請點選文章上的廣告,來支持小編,謝謝。

此範例是修改LDD3第三章的scull (Simple Character Utility for Loading Localities),我所使用的Linux Kernel版本為3.19.0,程式碼在此

scull設計藍圖

與硬體無關,從kernel取記憶體來模擬成字元裝置來使用。

如上圖所示,scull分成幾種裝置:
  • scull0scull3為記憶體區域,提供資料共享(shared)與持續性(persistence)功能。
  • scullpipe0scullpipe3FIFO裝置,含有blockingnon-blocking IO功能。
  • scullsingle提供同一時間只能被一個行程存取。
  • scullpriv確保每個virtual console的記憶體不共享。
  • sculluidscullwuid讓同一個使用者可啟用裝置多次;當有人在使用時,sculluid會回傳裝置忙碌中,而scullwuid則會繼續等待(block)

Major and Minor Numbers


此範例有提供script方便使用,例如要將scull module載入時,只要使用scull_load就行了,

sudo ./scull_load
sudo cp main.c /dev/scull0
cat /dev/scull0 | head -20 | tail -10
sudo ./scull_unload