scilab第五章-初階程式設計 · conférencier : prénom nom date : transparent 3 fichier :...
TRANSCRIPT
Conférencier : Prénom Nom Date : Transparent 1
Fichier : /tmp/SCILAB_Chap5.odp
SC ILA B 第五章 - 初階程式設計
撰文者: 1. 中央大學大氣系 楊善文 2. ( 如對本文有貢獻者,記得在此留名。 )
Conférencier : Prénom Nom Date : Transparent 2
Fichier : /tmp/SCILAB_Chap5.odp
程式語言
程式語言常分為直譯式語言與編譯式語言。 直譯式語言:程式邊讀取程式碼,邊執行程式。直到程
式碼結束或是出現語法錯誤為止。 UNIX shell script, Scilab, Matlab...... 屬之。
編譯式語言:程式碼寫完後,先經由編譯器讀取確定無誤後,並轉成執行檔 ( 機器碼 ) ,讓電腦執行。 C , C++ ,Fortran...... 屬之。
Scilab 也有程式設計的功能,多用於作矩陣的資料處理兼繪圖。
Conférencier : Prénom Nom Date : Transparent 3
Fichier : /tmp/SCILAB_Chap5.odp
初學者是否適合以 Sc il ab 或 Matl ab 當作第一個學習的程式語言?
對於 Scilab 或 Matlab 是否適合做為初學的程式語言,筆者個人是抱持反對的看法。原因是語法不夠嚴謹,對於初學者建立寫程式的一些觀念上,會較薄弱。對於之後學習其它程式語言可能會有學習困難的情形。
依附於特定軟體,對於程式碼可攜性較弱,必須要在不同機器都安裝的相同的此軟體才能用。
執行一個程式就要開一個軟體:耗費記憶體空間。
如果只是想要處理資料但不需要繪圖,用 C 或 Fortran 寫一支外部獨立的程式來工作是比較好的方法。
先學 C 再來學 Scilab 程設會有較好的工作效果。 ( 由難而易 )
Conférencier : Prénom Nom Date : Transparent 4
Fichier : /tmp/SCILAB_Chap5.odp
寫程式前的基本觀念
迴圈:當條件式符合你所定義的情形時,程式就會一直執行到不合為止。當程式一直無法執行到不合定義的情形時,則會無限制的執行下去 ( 假設電腦壽命夠長,也沒有外在終止程式的系統呼叫 ) ,稱為無限迴圈。
條件式:當你列出了一堆條件時,若程式當時狀態符合你其中一項條件時,它就會執行你在那個條件時,所要求它的動作。不合者程式自動忽略過此區域。
Conférencier : Prénom Nom Date : Transparent 5
Fichier : /tmp/SCILAB_Chap5.odp
各類算符
大於: > 小於: < 大於等於: >= 小於等於: <= 是否等於: == 是否不等於: ~= AND: & (注意:是 '&',不是 '&&',跟 C 不一樣 ) OR: | (單 '|'而非雙 '|')
Conférencier : Prénom Nom Date : Transparent 6
Fichier : /tmp/SCILAB_Chap5.odp
程式碼與 Sc il ab 的解讀
A > B :如果 A>B 條件成立,則執行該段程式碼。 A <= B : A<B和 A=B皆算是條件成立,執行該段程式
碼。 A==B :當 A 的數值等於 B 的數值時條件成立。 A==B和
A=B 是不同的, A=B主要是對它作邏輯上的判斷。 A==B則是判斷 A和 B 的內涵值。
A~=B :當 A值不等於 B值時,條件成立。 A 條件 & B 條件:當 A 條件式和 B 條件式都成立,才會執
行該段程式碼。 A 條件 | B 條件:當 A 條件或 B 條件,只要有其中一個成
立,就會執行該段程式碼。
Conférencier : Prénom Nom Date : Transparent 7
Fichier : /tmp/SCILAB_Chap5.odp
程式中止與跳離迴圈
當程式出現無限迴圈的時候,中止程式的方式是:[Ctrl] + [ C ]
跳離迴圈的方式除了當程式不符合迴圈的判斷式而自動離開外,也可以在迴圈內插入 break指令。
Conférencier : Prénom Nom Date : Transparent 8
Fichier : /tmp/SCILAB_Chap5.odp
for 迴圈
for和while 大概是初學程式者最常用的迴圈指令了。for 的功用是每執行一次該迴圈內程式碼,就會計數一次,直到累計的值超過宣告的范圍為止。
用法: for 變數範圍 ......... <=迴圈內要執行的程式碼 end <=迴圈之後常需跟著 end指令,來確
認迴圈內的程式碼範圍。
Conférencier : Prénom Nom Date : Transparent 9
Fichier : /tmp/SCILAB_Chap5.odp
for 迴圈的範例程式
clear i=1 for i=1:5 i End 執行結果:右圖
Conférencier : Prénom Nom Date : Transparent 10
Fichier : /tmp/SCILAB_Chap5.odp
另一個 for 迴圈的例子:九九乘法表
程式碼中的 printf()函式,即為在螢幕上做標準輸出。用法:printf(' 輸出字串 ',輸出變數 1,輸出變數 2,......);( 之後還會介紹到。 )
範例碼 (雙迴圈的使用 ) : clear i=1; j=1; for i=1:9 for j=1:9 printf('%d x %d = %d\n',i,j,i*j); end end
Conférencier : Prénom Nom Date : Transparent 11
Fichier : /tmp/SCILAB_Chap5.odp
Débat
Proposez quelques idées touchant au coeur du sujet présenté
N'ayez pas peur de provoquer un peu vos auditeurs pour les inciter à prendre part au débat.
Conférencier : Prénom Nom Date : Transparent 12
Fichier : /tmp/SCILAB_Chap5.odp
標準輸出函式 printf
printf這個函式,對於一些會 C 的讀者應該並不覺得陌生吧, Scilab 下的 printf幾乎和 C 的 printf語法完全一樣。 Printf的字串除了可以用 ' '也可以用 '' ''。
從之前範例看到 printf中含有許多 %d。 %d主要控制著在輸出字串中該變數要位於哪個位置。例如:i=1;j=2;printf('abcd%dzzzz%d',i,j);
( 第一個 %d是 i 的,第二個 %d是 j的,以此類推。 ) 輸出結果: abcd1zzzz2 %d代表以整數輸出。 %f代表以浮點數輸出。 %c 是單一字元。 %s 是輸出整個字串。
'\n'是換行符號,需放在 printf中的輸出字串區內。
Conférencier : Prénom Nom Date : Transparent 13
Fichier : /tmp/SCILAB_Chap5.odp
範例三:修改後的九九乘法表
clear i=1;j=1; printf('\n'); for i=1:9 for j=1:9 printf('%dx%d=%d ',i,j,i*j); if i*j<10 printf(' '); end if j==9 printf('\n'); end end end
Conférencier : Prénom Nom Date : Transparent 14
Fichier : /tmp/SCILAB_Chap5.odp
Conférencier : Prénom Nom Date : Transparent 15
Fichier : /tmp/SCILAB_Chap5.odp
條件判斷 if.....end
if指令後面接的條件判段式,隔行開始到之後的結束句end之前,為該條件的程式碼範圍。當條件符合時,即會執行該段程式碼,不合則略過。 if也常被包入更大的迴圈內,作判斷一些細節之用。
例子:見之前的範例三。 語法: if 條件句 ........ <==程式碼 end
Conférencier : Prénom Nom Date : Transparent 16
Fichier : /tmp/SCILAB_Chap5.odp
if 與邏輯判斷的整合範例
a=3; b=5; c=1; printf("\n"); if a>b & a>c printf('a 比較大 \n'); end if b>a & b>c <== and要全部成立才能執行 printf('b 比較大 \n'); end if c>a | b>a <== or代表多條件只要其中一個成立就會執行 printf("不知道\n"); end
Conférencier : Prénom Nom Date : Transparent 17
Fichier : /tmp/SCILAB_Chap5.odp
Conférencier : Prénom Nom Date : Transparent 18
Fichier : /tmp/SCILAB_Chap5.odp
while 迴圈
while 迴圈的設計是當只要符合條件句,就會一直執行下去,而不會 for 在宣告條件句時,就要宣告它的範圍了。故while 只要程式撰寫一有疏失,就很容易產生無限迴圈的現象。
用法: While 條件式 <==類似 if的條件式樣式 ....... end
Conférencier : Prénom Nom Date : Transparent 19
Fichier : /tmp/SCILAB_Chap5.odp
whil e 的使用範例
i=8;
printf("\n");
while i>3
printf('ZZZzzz......\n');
i=i-1; <==如果這行被注解掉,程式就會無限執行下去
end
Conférencier : Prénom Nom Date : Transparent 20
Fichier : /tmp/SCILAB_Chap5.odp
Conférencier : Prénom Nom Date : Transparent 21
Fichier : /tmp/SCILAB_Chap5.odp
雙條件判斷: if . ... th en ... . el se
說明:當符合條件一時,則執行程式碼一,否則就執行程式碼二。也可以使用連續 if...end達到相同功能。
用法: if 條件一 then 執行程式一 else 執行程式二 end
Conférencier : Prénom Nom Date : Transparent 22
Fichier : /tmp/SCILAB_Chap5.odp
if-then-else 的範例
clear a=1; b=2; c=3; if a>b then printf("a>b"); else printf("a<b"); end 執行結果: a<b
Conférencier : Prénom Nom Date : Transparent 23
Fichier : /tmp/SCILAB_Chap5.odp
綜合範例:利用迴圈將資料填入矩陣
製造一個 10x10的單位矩陣: clear i=1;j=1;U=[]; for i=1:10 for j=1:10 if i==j U(i,j)=1; end if i~=j U(i,j)=0; end end end U
Conférencier : Prénom Nom Date : Transparent 24
Fichier : /tmp/SCILAB_Chap5.odp