值得玩味的程式作業

昨日,有人在 MSN 敲我,請我幫助她解一題程式作業,她說班上沒人會寫,只好向外求助。該作業是從某間大學(忘記是哪一所了)資工系的某堂課所出的,個人覺得題目出的很好且很有趣,值得細細品味。 :-)

題目大致如下:
  • 寫出一個多項式相乘的程式
  • 使用串列的方法
  • 可自定任意多項式
  • 舉例:(2X+3Y+4Z)(XY2+X2Y+Z2) = 2XY3+2X2Y2+2Z2X+3XY3+3X2Y2+3Z2Y+4XY2Z+4X2YZ+4Z3
    <註>未知數後的數值代表『指數』,如:X2 代表 X 的平方
對一般學生來說,這作業的困難點是會用到多種技巧,該程式將運用到串列的基本結構、字串解析的技巧以及指標的應用,最重要的需要充分的邏輯思考,以細心慢慢刻出這支小程式。不但如此,該程式寫出來後,還有很多最佳化的改進空間和擴充性,能讓人想改了又改,欲罷不能呀!

筆者在這邊提供一份自己的解答,供有興趣的人參考:
http://people.linux.org.tw/~fred/homework/mathor.c

後記
比起機械,資工系的作業好有趣!早知道當初填志願就填它了!(摔杯子)

留言

  1. 謝謝你幫了大忙 =...=
    不然這麼一顆必修就掛蛋了
    不過跟你說歐.. 其實是資管系的

    回覆刪除
  2. 這是我出的作業。
    很多人參考您的程式,
    結果當然是零分計算。

    回覆刪除
  3. 沒料到出題者本人會大駕光臨。 :-)

    至於零分計算,是因為程式有錯嗎?

    回覆刪除
  4. 題目有寫,COPY別人的程式,以零分計算。

    回覆刪除
  5. 妳可千萬別填,當你碰到最根本的程式(比如組合語言、ASSEMBLER、COMPILER、COMPILER COMPILER)或是碰到計算機組織、邏輯設計之類的,你會想放棄一切

    回覆刪除
    回覆
    1. 你說的我應該都算熟悉,但我還是覺得很有趣 :-P

      刪除

張貼留言

這個網誌中的熱門文章

有趣的邏輯問題:是誰在說謊

Web 技術中的 Session 是什麼?

淺談 USB 通訊架構之定義(二)

淺談 USB 通訊架構之定義(一)

Reverse SSH Tunnel 反向打洞實錄