投影片1 - ming chuan university network post office
TRANSCRIPT
1
資訊概論 蕭立人
2
程式設計的重要性
• Flash => 提昇互動性– Action Script
• Maya 3D Models => 電腦遊戲– C++ & DirectX– C# & XNA– Vertool
• HTML 網頁 => 商業網站– PHP & MySQL– ASP.Net & SQL Server
• 手機 => 行動應用– Java– Android
• PDA 嵌入式系統– ARM
• IC 與 電路設計– HDL– FPGA
3
學習程式設計的良性循環
問題
思考
解決
興趣
4
• 語法只是工具,工具不會自己解決問題–從頭到尾先對語法整體了解一次–瀏覽語言所支援的功能,語法大略知道即可–大部份時間用於程式設計的演練–利用程式設計的演練來熟悉語法
熟悉語法與功能
Tools can not Solve Problems
寫程式
5
• Just do it!– 為何你的 Game 玩得那麼好–就是要寫
• Trial and Error–嚐試錯誤–久病終會成良醫 提昇
功力
Just do it!
嚐試
錯誤
心有所感
6
• 別讓頭腦太孤單• 身體也可以幫助記憶• 劍隨意轉• 心動不如馬上行動
Body Memory
7
• Searching and Thinking– 多搜尋、多讀 、多看、多思考
• Figure out a better one –怎麼樣!我的方法更炫!
• Resting is working–總在半夢半醒之間 ~ zzZ
I Can Beat You
8
程式設計的境界
• 演算法 +資料結構 = 程式 (Wirth)• 電腦程式設計不只是技術 , 也是藝術
(Knuth)
9
電腦程式設計的學習進程
• 程式設計 (一 ) – 基本程式語言 C
• 程式設計 (二 ) – 物件導向語言 C++
• 資料結構– 資料結構 資料如何表示、儲存與使用
• Java 程式設計– Java
• 視窗程式設計– 視窗程式設計 Borland C++
• 物件導向程式設計– 視窗程式設計 Visual Studio C#
10
電腦程式設計的學習進程
• 資料庫系統管理系統– SQL Server
• 網頁程式設計– HTNL, JavaScript, PHP, MySQL
• XML程式設計– XML, XHTML, ASP.Net, Ajax, Web2.0
• 嵌入式系統程式設計– 手機 , PDA 程式設計
• 網路通訊程式設計– Internet 程式 , Socket
• 電腦遊戲製作– 實作 3D 遊戲
• 演算法– 如何解決問題、設計解決問題的方法
11
C 程式語言的要點
• 演進:傳統 C → ANSI C → C++ → C#• 傳統 C
– Multics System→Unix Systems(Bell Lab.)– ANSI C
• C++– Hybrid-Language
• 傳統 C + 物件導向語言 (Object Oriented Language)
• 基本功 ,必須要會– 指標 (Pointer)、參考 (Reference)– 遞迴程式 (Recursive Programming)– 檔案開檔、關檔、讀檔、寫檔 (File Manipulation)
12
Java 的特性
• 演進:傳統 C → Objective C → Java• Java
– 純粹物件導向語言 (Pure Object-Oriented)– 跨平台 (Across Platforms)– Java虛擬機器 (JVM, Java Virtual Machine)– 類別庫 (Class Library )
• AWT, Swing
– 行動裝置程式 (Mobile Device Programming)• 例如 Android
• 證照: SCJP
13
視窗程式設計
• 視窗程式設計以下列兩種為主– BCB(Borland C++ Builder)– Visual Studio C#
• 視窗程式的學習要點–表單程式 (Window Form)–物件導向 (Object-Oriented)–事件處理 (Event Handling)–資料庫連接 (Database Connection)
14
網頁程式主從架構 (Client-Server Concept)
• 用戶端– IE Browser – Firefox
• Web伺服器– Apache– IIS(Web+FTP+SMTP)
• 資料庫伺服器 (Database Server)– Access– SQL Server– MySQL
用戶端 網頁伺服器 資料庫伺服器
15
網頁程式設計 - 用戶端• HTML→DHTML
– DOM(Document Object Model)
• XML→XHTML– XML +CSS
• JavaScript→Ajax→Web 2.0• Ajax
– 部份擷取– 非同步傳輸
• 動態網頁– Flash– XMAL(SiverLight)
16
網頁程式設計 - 伺服器端
• 兩種主要配合– PHP+MySQL– ASP.Net + SQL Server
• C#, C++, VB
• 一定要學會–與資料庫連結
17
資料結構
• 時間複雜度 (Time Complexity)• 陣列位址計算 (Array)• 堆疊與佇列 (Stack & Queue)• 鏈結串列 (Linked List)• 遞迴 (Recursive)• 樹結構 (Tree)• 圖形結構 (Graph)• 排序法 (Sorting)• 搜尋法 (Searching)
18
時間複雜度
• 頻率計次 (Step Frequency)• 範例
– 給一個正整數 n , 找出正整數解 (x,y) 使得 x2+y2=n2
– 請比較 Program1 與 Program 2 的速度
19
Program 1
for (x=1; x<n-1; x++) for (y=x; y<n; y++)
if (x*x+y*y==n*n) { printf(“(%d,%d)”,x,y); exit(0); } printf(“not found”);
20
Program 2
x=1; y=n-1; while (x<y) { if (x*x+y*y==n*n) { printf(“(%d,%d)”,x,y); exit(0); } else if (x*x+y*y<n*n) x++; else y—; } printf(“not found”);
21
演算法
• 貪婪法 (Greedy)– 真貪心!蛋糕總是拿最大的
• 各個擊破 (Divide-and-Conquer)– 一群人打不贏,那挑落單的呀!
• 動態程式規劃 (Dynamic Programming)– 柿子先挑軟的吃
• 迴溯法 (Backtracking)– 行不通!就換條路吧
• 分支設限 (Branch-and-Bound)– 小心!不要越走越遠
• NP Completeness– 碰到難題,就說是難題
22
Tower of Hanoi
peg B peg Cpeg A
peg B peg C peg A
peg B peg C peg A
peg B peg C peg A
23
Cisco CCNA(思科 )
• 為什麼是 Cisco?• 區域網路
– Discovery 1 & 2
• 廣域網路– Discovery 3 & 4
• 證照– CCNA, CCNP, CCIE
24
電腦遊戲製作
• 所需之基礎– C++–物件導向觀念
• 可從 C++, C# 或 Java 等課程學習– DirectX 程式設計–顯示卡圖形處理器 (GPU)程式設計
• 入門可以先學– Visual C# + XNA Game Studio– Virtools