程式撰寫流程.

Slides:



Advertisements
Similar presentations
While 迴圈 - 不知重複執行次數
Advertisements

3.2 Java的类 Java 类库的概念 语言规则——程序的书写规范 Java语言 类库——已有的有特定功能的Java程序模块
親愛的老師您好 感謝您選用本書作為授課教材,博碩文化準備本書精選簡報檔,特別摘錄重點提供給您授課專用。 說明: 博碩文化:
Introduction 基本概念 授課老師:蕭志明
“八皇后”问题 崔萌萌 吕金华.
第 2 章 初探 C++.
四資二甲 第三週作業 物件導向程式設計.
The discipline of algorithms
第二章 JAVA语言基础.
Q1: 追蹤程式: 印出結果? 搶答 while (i<=n) { p=p*i; i=i+2; }
C语言程序设计 课程 第5章 数组 主讲:李祥 博士、副教授 单位:软件学院软件工程系.
物件導向程式設計 (Object-Oriented rogramming)
選擇排序法 通訊一甲 B 楊穎穆.
資料大樓 --談指標與陣列 綠園.
函數(一) 自訂函數、遞迴函數 綠園.
排序 Sorting.
快速排序法 (Quick Sort).
實作輔導 日期: 3/11 09:10~16:00 地點:臺北市立大學 臺北市中正區愛國西路一號 (中正紀念堂站7號出口)
教材 《C++程序设计》.谭浩强. 清华大学出版社 王雪晶
If … else 選擇結構 P27.
C++语言程序设计 C++语言程序设计 第六章 指针和引用 第十一组 C++语言程序设计.
程式設計實作.
计算概论 第十八讲 C语言高级编程 结构与习题课 北京大学信息学院.
Function.
第12章 從C到C++語言 12-1 C++語言的基礎 12-2 C++語言的輸出與輸入 12-3 C++語言的動態記憶體配置
2 C++ 的基本語法和使用環境 親自撰寫和執行程式是學好程式語言的不二法門。本章藉由兩個簡單的程式,介紹C++ 程式的基本結構和開發環境,讓初學者能逐漸建立使用C++ 的信心。
第5章 堆疊(Stacks) 5-1 堆疊的基礎 5-2 堆疊的表示法 5-3 堆疊的應用 - 運算式的計算與轉換
Introduction to the C Programming Language
CHAP13 演算法概論 高中資訊科技概論 松崗圖書公司.
第3讲 C++程序控制结构 3.1 顺序结构 3.2 分支结构 3.3 循环结构 3.4 转向控制 3.5 综合案例分析.
3.1 数据类型 3.2 标识符与关键字 3.3 常量 3.4 变量 3.5 运算符与表达式 3.6 一个编程实例
計數式重複敘述 for 迴圈 P
切換Dev c++顯示語言 工具->環境選項(V)->介面->language (Chinese TW)
东北林业大学 陈宇 ACM程序设计 东北林业大学 陈宇
第4讲 C++程序控制结构(二) 4.1 循环结构 4.2 转向控制 4.3 综合案例分析.
C++ 程式設計 基礎篇 張啟中 Chang Chi-Chung.
鄧姚文 資料結構 第一章:基本概念 鄧姚文
實作輔導 2 日期: 3/24(星期六) 09:10~16:00 地點:臺北市立大學 臺北市中正區愛國西路一號 (中正紀念堂站7號出口)
第二章Java基本程序设计.
Chapter 2 & Chapter 3.
資料結構與C++程式設計進階 排序與搜尋 講師:林業峻 CSIE, NTU 6/ 14, 2010.
資料結構與演算法 第一章 基本概念 徐熊健 資料結構與演算法 徐熊健.
C++语言程序设计 C++语言程序设计 第九章 类的特殊成员 第十一组 C++语言程序设计.
Main() { Dfas Asdfasf fasdfa } #include <stdio.h> void main( ) {
Introduction to the C Programming Language
Oop8 function函式.
Java程式初體驗大綱 大綱 在學程式之前及本書常用名詞解釋 Hello Java!程式 在Dos下編譯、執行程式
Chap 5 函数 5.1 计算圆柱体积 5.2 使用函数编写程序 5.3 变量与函数.
99高中資訊科選修課程 夥伴學習教師 專業進修研習 進階程式設計--演算法 教學示例與研討
第11章 從C到C++語言 11-1 C++語言的基礎 11-2 C++語言的資料型態與運算子 11-3 C++語言的輸出與輸入
C++语言程序设计 C++语言程序设计 第八章 继承 C++语言程序设计.
C++程式設計入門 變數與運算子 作者:黃建庭.
Introduction to the C Programming Language
累堆排序法 (Heap Sort).
龍老師我不會Debug QQ.
授课老师:龚涛 信息科学与技术学院 2016年3月 教材:《Visual C++程序员成长攻略》 《C++ Builder程序员成长攻略》
挑戰C++程式語言 ──第9章 函數.
#include <iostream.h>
第二章 Java基本语法 讲师:复凡.
程式設計--linear search 通訊一甲 B 楊穎穆.
C++语言程序设计 C++语言程序设计 第十章 多态 第十一组 C++语言程序设计.
迴圈(重複性結構) for while do while.
判斷(選擇性敘述) if if else else if 條件運算子.
變數與資料型態  綠園.
第三章 流程控制 程序的运行流程 选择结构语句 循环结构语句 主讲:李祥 时间:2015年10月.
輸出執行結果到螢幕上 如果要將執行結果的文字和數值都「輸出」到電腦螢幕時,程式要怎麼寫? class 類別名稱 {
第二章 Java基本语法 讲师:复凡.
Q1(a) 小偉打算編寫一個程序。該程序把兩個44的表內的數字相加。表3內的數字是由表1和表2應格子內的數字相加而成。例如:
函式庫補充資料 1.
隨機函數.
Presentation transcript:

程式撰寫流程

Program Language (程式語言) = Data Structure (資料結構) + Algorithm (演算) Program Language (程式語言)

資料結構、演算法 「資料結構」(data structure): 在電腦中有效率地存放資料,使其方便處理的學問; 「演算法」(algorithm): 探討解決問題的策略。 兩者相輔相成!

演算法初探 Horowitz, Sahni 和 Mehta ,給予演算法的明確定義: 演算法是一組可完成特定工作的指令集合,並且所有的演算法都需滿足下列條件: (1) 輸入 (input):可以有多個其甚至是沒有輸入; (2) 輸出 (output):至少產生一個輸出; (3) 明確(definiteness):每個指令都清楚明確; (4) 有限(finiteness):在任何情況下,如果逐步追蹤演算 法的每個指令,演算法會在有限的步驟內結束; (5) 有效率(effectiveness):原則上每個指令都需 基本到人只需紙和筆即可實踐之,並且每個指令的運算不止如條件(3)般明確而已,還必須是可實行的。

程式撰寫流程 問題的需求或限制 思考與探索 資料結構與演算法設計 程式撰寫 驗証、測試與修善 數學証明 結果輸出 撰寫程式解決問題流程圖

範例 寫一程式,將輸入正整數x,輸出x是否為質數。

輸入正整數x,輸出x是否為質數 演算法 檢查質數的步驟: 1. 若 x < =1,則傳回 x 不是質數。 4. 從 i=3 到 sqrt(x) 間格 2 若 x 是 i 的倍數,則傳回 x 不是質數。 5. 傳回 x 是質數。

輸入正整數x,輸出x是否為質數 流程圖

檢查質數的C程式 #define TRUE 1 #define FALSE 0 int prime(int x) { int i; // 檢查質數的步驟: // 1. 若 x < =1,則傳回 x 不是質數。 if (x<=1) return FALSE; // 2. 若 x <= 3,則傳回 x 是質數。 if (x<=3) return TRUE; // 3. 若 x 是 偶數,則傳回 x 不是質數 。 if (x%2==0) return FALSE; // 4. 從 i=3 到 sqrt(x) 間格 2 for (i=3; i<=sqrt(x); i+=2){ // 若 x 是 i 的倍數,則傳回 x 不是質數。 if (x%i==0) return FALSE; } // 5. 傳回 x 是質數。 return TRUE; 檢查質數的C程式

測試 prime 的C程式 #include <stdio.h> #include <stdlib.h> #include <math.h> int main() { int n; // Input a positive integer printf("請輸入一正整數: "); scanf("%d", &n); // test prime number & output result if (prime(n)==TRUE) printf("\n %d 是質數!\n\n",n); else printf("\n %d 不是質數!\n\n",n); // Pause system("pause"); } 測試 prime 的C程式

檢查質數的JAVA程式 import java.io.*; import java.lang.Math; //宣告類別 public class naturenum { //成員資料 private int num; //建構子 public naturenum() { num=1; } public naturenum(int x) num=x; //類別方法 public boolean prime() { int i; // 檢查質數的步驟: // 1. 若 num < =1,則傳回 num 不是質數。 if (num<=1) return false; // 2. 若 num <= 3,則傳回 num 是質數。 if (num<=3) return true; // 3. 若 num 是 偶數,則傳回 num 不是質數 。 if (num%2==0) return false; // 4. 從 i=3 到 sqrt(x) 間格 2 for (i=3; i<=(num/2); i+=2){ // 若 num 是 i 的倍數,則傳回 num 不是質數。 if (num%i==0) return false; } // 5. 傳回 x 是質數。 return true;

檢查質數的JAVA程式 public void show() { System.out.print(num); } public void set(int x) num=x; //主程式區塊 public static void main(String args[]) { //實作物件 naturenum x = new naturenum(13); //呼叫類別方法 x.show(); if (x.prime() == true) System.out.println("是質數\n"); else System.out.println("不是質數\n"); x.set(25); }

範例:挑選排序法 (Selection sort) 思考與探索: 欲將整數由小至大排序,可把數字小者放在左邊,數字大者放在右邊,… 挑出所有資料中最小者,做為左邊第一個資料,接著再挑出剩下資料中最小者,放在左邊做為第二個資料,依此類推,直至全部資料都排列完成。 若所有資料共計 n 個,則會執行n次挑出最小的運算,其第 i 次的運算,即為挑出未排序資料中最小者,其結果做為第 i 個資料。

挑選排序法 (Selection sort) 11, 7, 14, 1, 5, 9, 10 1, 7, 14, 11, 5, 9, 10 1, 5, 14, 11, 7, 9, 10 1, 5, 7, 11, 14, 9, 10 1, 5, 7, 9, 14, 11, 10 1, 5, 7, 9, 10, 11, 14 Input Output

範例:挑選排序法 (Selection sort)演算法 輸入:data[0], data[1], data[2], …, data[n-1],共 n 筆整數資料 輸出:data[0], data[1],…, data[n-1];其中 若i<j,則data[i]data[j],0i<jn 方法: (用虛擬碼Pseudo code表示) for (i=0; i<n; i++) { 挑出data[i]至data[n-1]中最小者:data[min] 將data[i] 和 data[min] 對調 }

範例:挑選排序法 (Selection sort)程式C void SelectionSort(int data[], int n) { int i, j; int min, temp; for (i=0; i<n; i++) { // 挑出data[i]至data[n-1]中最小者:data[min] min = i; for (j=i+1; j<n; j++) if (data[j]<data[min]) min = j; // 將data[i] 和 data[min] 對調 temp = data[i]; data[i] = data[min]; data[min] = temp; }

程式的驗証、測試與修繕 數學証明―最佳的驗証;比較困難。 測試―輸入大量各式資料測試之。 若此為提供他人的程式,還應考慮輸入正確性(input validation);若資料量非常大,則資料儲存用的陣列,宜用動態配置的技巧宣告使用

測試 selectionsort 的程式 int main() { int i, n=10, c[50]; // Input data for (i=0; i<n; i++) scanf("%d ", &c[i]); // sort SelectionSort(c, n); // Output Result printf("%d %d \n", i, c[i]); system("pause"); return 0; }

練 習 若資料是逐漸新增的方式加入資料,請寫一程式,當資料輸入後,立即就將資料依由小至大排好順序。

插入排序法 (Insertion sort) 11, 7, 14, 1, 5, 9, 10 11 7, 11 7, 11, 14 1, 7, 11, 14 1, 5, 7, 11, 14 1, 5, 7, 9, 11, 14 1, 5, 7, 9, 10, 11, 14

插入排序法 (Insertion sort)演算法 輸入:data[0], data[1], data[2], …, data[n-1],共 n 筆整數資料 輸出:data[0], data[1],…, data[n-1];其中 若i<j,則data[i]data[j],1i,jn 方法: (用虛擬碼Pseudo code表示) while (有資料) { 將data[i]插入data[0]至data[i]中之適當位置 (data[i]從後往前,與前一個比,若data[i]較小則再往前,否則,即為data[i]的位置。) }

插入排序法 (Insertion sort)程式 void insertionSort(int data[], int n) { int i=0, j; int temp; while (data[i]>0){ // 有資料 // 將data[i]插入data[0]至data[i]中之適當位置 // (data[i]從後往前,與前一個比,若data[i]較小則再往前,否則,即為data[i]的位置。) j=i-1; temp=data[i]; while( j>=0 && temp<data[j]){ data[j+1]=data[j]; //向後移一位 j=j-1; } data[j+1]=temp; i=i+1;

#include <cstdlib> #include <iostream> using namespace std; void insertionSort(int data[], int n); int main(int argc, char *argv[]) { // 排序資料 int y[20] = {10,7,8,9,4, 2, 3, 6, 5,1, -1}; // 排序 insertionSort(y, 10); // 輸出排序結果 for (int i=0; i< 10; i++) cout << y[i] << ' '; cout<<endl; system("PAUSE"); return EXIT_SUCCESS; }

End