หน้าหลัก
  บทเรียน scilab
  การประยุกต์ใช้งาน
  ดาวน์โหลด
  ฟังก์ชันคณิตศาสตร์
  Symbolic Toolbox
  บริการฝึกอบรม
  เว็บบอร์ด
  เว็บไซต์ที่น่าสนใจ
  สมุดเยี่ยมชม
  บุคลากร
สมัครสมาชิก
ดาวน์โหลดฟรี

Download Scilab
Scilab - LabVIEW
INRIA
Scicos
admin Online ขณะนี้ : 2 คน count
 


การเขียนโปรแกรมด้วย SCILAB

ในส่วนนี้จะอธิบายการใช้งานคำสั่งวนซ้ำและคำสั่งทดสอบเงื่อนไข เพื่อให้ผู้อ่านสามารถเขียนโปรแกรมอย่างง่ายขึ้นมาใช้งานได้อย่างรวดเร็วและมีประสิทธิผล

7.1 คำสั่งวนซ้ำ

บ่อยครั้งในการเขียนโปรแกรมมีความจำเป็นที่จะต้องคำนวณชุดคำสั่งบางอย่างซ้ำเป็นจำนวนหลายๆ รอบซึ่งในกรณีนี้การใช้คำสั่งวนซ้ำจึงมีความจำเป็นมาก โดยโปรแกรม SCILAB ได้เตรียมคำสั่งสำหรับการวนซ้ำไว้อยู่สองรูปแบบ คือ คำสั่ง for และคำสั่ง while ซึ่งมีหลักการใช้งานดังนี้

7.1.1 คำสั่ง for

คำสั่ง for เหมาะสำหรับการใช้งานที่ต้องการให้โปรแกรมทำซ้ำชุดคำสั่งเดิมที่อยู่ภายในลูป (loop) เป็นจำนวนรอบตามที่กำหนดไว้ในนิพจน์ (expression) คำสั่ง for มีรูปแบบการใช้งาน ดังนี้

 

กล่าวคือโปรแกรมจะทำซ้ำคำสั่ง (instruction) ทั้งหมดภายในลูปเป็นจำนวนรอบตามที่กำหนดโดยตัวแปรที่เป็นไปตามเงื่อนไขของนิพจน์
ตัวอย่างการใช้งานคำสั่ง for ตัวอย่างเช่น

-->L = 5;

-->x = [];

-->for i = 1:L

--> x(i) = i;

-->end

ชุดคำสั่งนี้หมายความว่าเมื่อเริ่มต้นใช้งาน ตัวแปร L จะมีค่าเท่ากับ 5 และกำหนดให้ x เป็นเมทริกซ์ว่าง (empty matrix) จากนั้นก็ทำการวนซ้ำโดยใช้ตัวแปร i เป็นตัวนับจำนวนซ้ำ นั่นคือตัวแปร i จะเริ่มจากค่า 1 แล้วเพิ่มขึ้นทีละ +1 จนไปถึงค่า 5 โดยที่ค่าของตัวแปร i แต่ละค่าจะถูกบรรจุไว้ในสมาชิกลำดับที่ i ของเวกเตอร์ x ผลลัพธ์ของการประมวลผลชุดคำสั่งนี้คือ

-->x'

ans =

          1.    2.    3.    4.    5.

7.1.2 คำสั่ง while

คำสั่ง while มีลักษณะการทำงานคล้ายกับคำสั่ง for เพียงแต่คำสั่ง while จะมีการทดสอบเงื่อนไขที่ผู้เขียนโปรแกรมกำหนดไว้ในนิพจน์ทุกๆ รอบของการวนซ้ำ กล่าวคือถ้าผลการทดสอบให้ค่าตรรกะเป็นค่า 1 (เป็นจริง) โปรแกรมก็จะทำซ้ำชุดคำสั่งภายในลูปนั้น ต่ออีกหนึ่งรอบ แต่ถ้าผลการทดสอบให้ค่าตรรกะเป็นค่า 0 (เป็นเท็จ) โปรแกรมก็จะยกเลิกการทำงานชุดคำสั่งภายในลูปนั้นทันที คำสั่ง while มีรูปแบบการใช้งานดังนี้

 

ตัวอย่างเช่น

-->L = 5;

-->x = [];

-->i = 1;

-->while i <= L

--> x(i) = i;

--> i = i + 1;

-->end

ชุดคำสั่งนี้ให้ผลลัพธ์เหมือนกับตัวอย่างของการใช้คำสั่ง for เพียงแต่การใช้คำสั่ง while จะต้องกำหนดค่าเริ่มต้นของตัวแปร i ก่อนที่จะนำค่า i ไปทำการเปรียบเทียบกับค่า L ตามเงื่อนไขที่กำหนด

7.2 คำสั่งทดสอบเงื่อนไข

คำสั่งทดสอบเงื่อนไขมีความจำเป็นมากสำหรับการเขียนโปรแกรมคอมพิวเตอร์ที่ซับซ้อน คำสั่งทดสอบเงื่อนไขที่ใช้บ่อยคือ คำสั่ง if ซึ่งมีหลักการใช้งานดังนี้

 

กล่าวคือถ้าผลการทดสอบเงื่อนไขในนิพจน์เป็นจริง โปรแกรม SCILAB ก็จะทำคำสั่งทั้งหมดที่อยูู่่ระหว่างคำว่า then และ end แต่ถ้าผลการทดสอบเป็นเท็จ โปรแกรม SCILAB จะไม่ทำคำสั่งทั้งหมด ที่อยู่ระหว่างคำว่า then และ end

นอกจากนี้คำสั่ง if ยังสามารถนำไปใช้งานกับการตัดสินใจที่ซับซ้อนมากขึ้นได้โดยการใช้งานร่วมกับ else ซึ่งมีรูปแบบการใช้งานคือ

if expression then

instructions_set1;

else

instructions_set2;

end


นั่นคือถ้าผลการทดสอบเงื่อนไขในนิพจน์เป็นจริง โปรแกรม SCILAB จะทำคำสั่งทั้งหมดที่อยู่ระหว่างคำว่า then และ else แต่ถ้าผลการทดสอบเป็นเท็จ โปรแกรม SCILAB จะทำคำสั่งทั้งหมด ที่อยู่ระหว่างคำว่า else และ end แทน

ในการใช้งานที่มีการตัดสินใจที่ซับซ้อนมากยิ่งขึ้น ผู้ใช้ก็สามารถใช้งานคำสั่ง if ร่วมกับ elseif ได้ โดยมีรูปแบบการใช้งานดังนี้

if expression_1 then

instructions_set1;

elseif expression_2 then

instructions_set2;

else

instructions_set3;

end

นั่นคือถ้าผลการทดสอบเงื่อนไขในนิพจน์ expression_1 เป็นจริง โปรแกรม SCILAB จะทำชุดคำสั่ง instructions_set1 แต่ถ้าผลการทดสอบเป็นเท็จ โปรแกรม SCILAB ก็จะทำการทดสอบเงื่อนไขในนิพจน์ expression_2 ต่อไปทันที โดยที่ถ้าผลการทดสอบในนิพจน์ expression_2 เป็นจริง โปรแกรม SCILAB ก็จะทำชุดคำสั่ง instructions_set2 แต่ถ้าผลการทดสอบเป็นเท็จ ก็จะทำชุดคำสั่ง instructions_set3

พิจารณาตัวอย่างโปรแกรมการสร้างเมทริกซ์จัตุรัสขนาด N x N (ถ้ากำหนดให้ N = 3 ) โดยสมาชิกทุกตัวที่อยู่ใต้เส้นทแยงมุมหลักมีค่าเท่ากับ 1 ส่วนสมาชิกทุกตัวที่อยู่ในแนวเส้นทแยงมุมหลัก
มีค่าเท่ากับ 2 และสมาชิกทุกตัวที่อยู่เหนือเส้นทแยงมุมหลักมีค่าเท่ากับ 3 นั่นคือการสร้างเมทริกซ์

ซึ่งสามารถทำได้โดยใช้ชุดคำสั่งดังนี้

-->N = 3;

-->A = [];

-->for i = 1:N

--> for j = 1 : N

--> if i < j then

--> A(i, j) = 3;

--> elseif i == j then

--> A(i, j) = 2;

--> else

--> A(i, j) = 1;

--> end

--> end

-->end

เมื่อทำการประมวลผลชุดคำสั่งนี้แล้วจะพบว่าผลลัพธ์ที่ได้คือ เมทริกซ์ตามที่กำหนด นั่นคือ

-->A

A =

          2.    3.    3.

          1.    2.    3.

          1.    1.    2.

7.3 การเขียนฟังก์ชันแบบอินไลน์

โปรแกรม SCILAB อนุญาตให้ผู้ใช้สามารถ สร้างฟังก์ชันใหม่ๆ ขึ้นมาใช้งานร่วมกับโปรแกรม SCILAB ได้ ในที่นี้จะอธิบายเฉพาะ การเขียนฟังก์ชันแบบอินไลน์ (in-line function) ซึ่งมีลักษณะการใช้งานดังนี้

function [ เอาต์พุต ] = function_name( อินพุต ) , ชุดคำสั่ง , endfunction

นั่นคือจะต้องเริ่มต้นด้วยคำว่า function และปิดท้ายด้วยคำว่า endfunction โดยที่ภายในฟังก์ชันจะมีคำสั่งแต่ละคำสั่งจะต้องคั้นด้วยเครื่องหมายคอมม่า ตัวอย่างเช่นถ้าต้องการสร้างฟังก์ชันแบบอินไลน์ที่ชื่อว่า MyMax เพื่อใช้ในการหาค่าสูงสุดของเลขจำนวนจริงสองจำนวน ก็สามารถทำได้ดังนี้

-->function [y] = MyMax(x1, x2), if x1 >= x2 then y = x1, ...

-->else y = x2; end; endfunction;

-->y = MyMax(1, 5)                                                   // เรียก ฟังก์ชัน MyMax ขึ้นมาใช้งาน

y =

          5.

นอกจากนี้ยังสามารถใช้คำสั่ง deff ในการสร้างฟังก์ชันแบบอินไลน์ได้เช่นกัน โดยมีรูปแบบการใช้งานคือ

deff('[ เอาต์พุต ] = function_name( อินพุต )', ' ชุดคำสั่ง ')

ตัวอย่างเช่น

-->deff('y = MyMax(x1, x2)', 'if x1 > x2 then y = x1; ...

-->else y = x2; end');

-->y = MyMax(1,5)

y =

          5.

ซึ่งให้ผลลัพธ์เท่ากัน

7.4 ข้อแนะนำในการพัฒนาโปรแกรมให้มีประสิทธิภาพ

โดยทั่วไปผู้พัฒนาโปรแกรมพยายามที่จะทำให้โปรแกรมสามารถทำงานได้อย่างถูกต้องและรวดเร็ว
เนื่องจากโปรแกรม SCILAB เป็นโปรแกรมที่ทำงานบนพื้นฐานของเมทริกซ์ ดังนั้นการเขียนโปรแกรมที่ดีควรใช้ประโยชน์จากโครงสร้างของเมทริกซ์และพยายามหลีกเลี่ยงการใช้
คำสั่งวนซ้ำต่างๆ ให้มากที่สุด ตัวอย่างเช่น การคำนวณหาค่าของฟังก์ชัน

สามารถเขียนเป็นชุดคำสั่งเพื่อหาค่า y โดยใช้คำสั่งวนซ้ำได้ดังนี้

-->y = 0;

-->tic // คำสั่งสำหรับเริ่มจับเวลา

-->for i=1:200000

--> y = y + (3*i^2 + 2*i - 1)/(5*i^2);

-->end

-->toc // คำสั่งสำหรับหยุดจับเวลา และแสดงเวลาทั้งหมดที่ใช้

ans =

          2.937

-->y

y =

          120004.78

ชุดคำสั่งนี้มีการใช้คำสั่งวนซ้ำทำให้ใช้เวลาในการประมวลผลรวมทั้งสิ้น 2.937 วินาที อย่างไรก็ตามผู้ใช้สามารถที่จะพัฒนาชุดคำสั่งใหม่ให้มีผลลัพธ์เท่าเดิม แต่ใช้ความเร็วในการประมวลผลน้อยลงได้โดยใช้ประโยชน์จากโครงสร้างของเมทริกซ์ ดังต่อไปนี้

-->tic

-->i = 1:200000;

-->y = sum((3*i.^2 + 2*i - 1)./(5*i.^2));                   // เขียนโปรแกรมโดยใช้โครงสร้างของเมทริกซ์

-->toc

ans =

          0.234

-->y

y =

          120004.78

จะเห็นได้ว่าชุดคำสั่งนี้จะใช้เวลา ในการประมวลผล เพียง 0.234 วินาที ซึ่งเร็วกว่าชุดคำสั่งเดิมมาก

 
สงวนลิขสิทธิ์ มหาวิทยาลัยราชภัฏนครปฐม
85 ถนนมาลัยแมน อำเภอเมือง จังหวัดนครปฐม 73000
โทร. 034-261021 โทรสาร .034-261065 E-mail : piya@npru.ac.th