วันศุกร์ที่ 8 พฤษภาคม พ.ศ. 2558

......เรียนรู้ภาษาCและ MathLab ง่ายๆ......



พื้นฐานโปรแกรมภาษา C

   
    ดร. จันทร์จิรา สินทนะโยธิน, วิศรุต พลสิทธิ สำนักงานพัฒนาวิทยาศาสตร์และเทคโนโลยีแห่งชาติ (สวทช) ฝึกฝนและพัฒนาการเขียนโปรแกรมภาษา C Introduction to C Programming การพัฒนาโปรแกรมคอมพิวเตอร์ บางคนก็ว่ายาก บางคนก็ว่าเป็นเรื่องสนุก หลายคนบอกว่า ขอเป็นแค่ผู้ใช้สนุกที่สุด แต่จะมีซักกี่คนที่จะมีใจรักที่จะก้าวไปบนถนนแห่งการพัฒนาฝีมือและฝึกฝนการเขียนโปรแกรมด้วยตัวเอง เพื่อให้มีผู้ที่สนใจนำไปใช้งาน และเพิ่มประสิทธิ์ภาพในการทำงาน และ ความสะดวกสบายๆ ต่างๆมากขึ้น ว่าไปแล้วนักโปรแกรมเมอร์เหล่านี้ ก็ไม่แตกต่างจากผู้ที่ปิดทองหลังพระมากนัก เพราะหลายๆ โปรแกรมที่มีให้ใช้งานกันในปัจจุบัน จะมีใครทราบบ้างไหมว่า ผู้เขียนโปรแกรมเหล่านั้นมีใครกันบ้าง ดังนั้น ผู้ที่คิดจะก้าวมาเป็นนักพัฒนาโปรแกรมมืออาชีพ คงต้องอาศัยใจรักที่จะอยากจะพัฒนา และฝึกฝนฝืมือในการเป็นโปรแกมเมอร์มืออาชีพมาเป็นอันดับหนึ่ง สำหรับบทความนี้จะเริ่มต้นด้วยการสอนให้เข้าใจในหลักการพื้นฐานของการการพัฒนาโปรแกรมในภาษา C ความรู้และความเข้าใจที่จำเป็นต่อการเป็นโปรแกรมเมอร์มืออาชีพในอนาคต เราลองเริ่มมาเรียนรู้กันอย่างคร่าวๆ กันเลยล่ะกัน โดยผู้เขียนจะอธิบายเป็นตอนๆ ทั้งหมด 8 ตอนด้วยกันได้แก่ 1. พื้นฐานโปรแกรมภาษา C (Introduction to C Programming) 2. การเขียนโปรแกรมทางเลือก (Selection Structures) 3. การเขียนโปรแกรมแบบ วนซ้ำ (Repetition & Loop) 4. ฟังก์ชัน และการเขียนโปรแกรมแยกเป็นโมดูล (Functions & Modular Programming) 5. ตารางอาเรย์ (Arrays) 6. ตัวแปรพอยเตอร์ (Pointers) 7. ตัวแปรสตริง (String) 8. โครงสร้างสตักเจอร์ (Structure) 

1. พื้นฐานโปรแกรมภาษา C (Introduction to C Programming) ก่อนอื่นของแนะนำพื้นฐานเกี่ยวกับคอมพิวเตอร์กันซักนิด ก่อนที่จะเริ่มเรียนรู้ภาษา C กัน หน่วยสำคัญที่สุดของคอมพิวเตอร์ก็คือ หน่วยประมวลผลหรือที่เรียกกันว่า CPU โดยปกติ CPU จะมีภาษาของตัวเองที่เรียกว่า ภาษาเครื่อง (Machine Language) ซึ่งจะเป็นภาษาที่ประกอบไปด้วยเลขฐานสองมากมาย ดังนั้นการที่จะเขียนโปรแกรมควบคุมการทำงานของคอมพิวเตอร์ โดยใช้ภาษาเครื่องโดยตรงนั้นจึงทำได้ยาก จึงได้มีการพัฒนาตัวแปรภาษาเครื่องที่เรียกว่า โปรแกรมภาษาระดับสูงขึ้นมา หรือที่เรียกว่า High Level Languages โดยภาษาในระดับสูงเหล่านี้ จะมีลักษณะรูปแบบการเขียน (Syntax) ที่ทำให้เข้าใจได้ง่ายต่อการสื่อสารกับผู้พัฒนา และถูกออกแบบมาให้ง่ายต่อการใช้งาน และจะเปลี่ยนคำสั่งจากผู้ใช้งาน ไปเป็นเป็นภาษาเครื่อง เพื่อที่จะควบคุมการทำงานของคอมพิวเตอร์ต่อไป ตัวอย่างของโปรแกรมภาษาระดับสูง ได้แก่ COBOL ใช้กันมากสำหรับโปรแกรมทางด้านธุรกิจ, Fortran ใช้กันมากสำหรับการพัฒนาโปรแกรมด้านวิทยาศาสตร์และวิศวกรรมศาสตร์ เพราะง่ายต่อการคำนวณ, Pascal มีใช้กันทั่วไป แต่เน้นสำหรับการพัฒนาเครื่องมือสำหรับการเรียนการสอน, C & C++ ใช้ทั่วไป ปัจจุบันมีผู้เลือกที่จะใช้กันอย่างแพร่หลาย, PROLOG เน้นหนักไปทางด้านงานประเภท AI และ JAVA ใช้ได้ทั่วไป ปัจจุบันเริ่มมีผู้หันมาสนใจกันมากและเพิ่มขึ้นอย่างรวดเร็ว คราวนี้เราลองมาเตรียมตัวกันซักนิก ก่อนที่จะลงมือพัฒนาโปรแกรมคอมพิวเตอร์ ขั้นแรก เราต้องศึกษารูปแบบความต้องการของโปรแกรมที่จะพัฒนา จากนั้นก็วิเคราะห์ถึงปัญหาตลอดจนวิธีการแก้ปัญหา จากนั้นจึงนำเอาความคิดในการแก้ปัญหาอย่างเป็นขั้นตอน ไปเขียนในรูปแบบของโปรแกรมภาษาในระดับสูง ซึ่งจะอยู่ในรูปแบบของ Source Program หรือ Source Code จากนั้นเราก็จะใช้ Complier ของภาษาที่เราเลือก มาทำการ Compile Source code หรือกล่าวง่ายๆ คือแปลง Source code ของเราให้เป็นภาษาเครื่องนั่นเอง ซึ่งในขั้นตอนนี้ ผลที่ได้ เราจะเรียกว่า Object code จากนั้น Complier ก็จะทำการ Link หรือเชื่อม Object code เข้ากับฟังก์ชันการทำงานใน Libraries ต่างๆ ที่จำเป็นต่อการใช้งาน แล้วนำไปไว้ในหน่วยความจำ แล้วเราก็จะสามารถ Run เพื่อดูผลของการทำงานโปรแกรมได้ หากโปรแกรมมีข้อผิดพลาด เราก็จะทำการแก้ หรือที่เรียกกันในภาษาคอมพิวเตอร์ว่า การ Debug นั่นเอง ภาษา C เป็นโปรแกรมภาษาระดับสูง ถูกพัฒนาขึ้นในปี 1972 ที่ AT&T Bell Lab เราสามารถใช้ภาษา C มาเขียนเป็นคำสั่งต่างๆ ที่คอมพิวเตอร์สามารถเข้าใจได้ และกลุ่มของคำสั่งเหล่านี้ เราก็เรียกกันว่า อัลกอริธึม ได้มีผู้ให้คำจำกัดความของคำว่า อัลกอริธึม ว่าเป็น “A precise description of a step-by-step process that is guaranteed to terminate after a finite number of steps with a correct answer for every particular instance of an algorithmic problem that may occur.” สำหรับ Compiler ภาษา C ที่มีในปัจจุบัน มี 2 ค่ายใหญ่ๆ ที่มีผู้คนสนใจใช้กันมากได้แก่ Microsoft และ Borland การใช้งาน Compiler ทั้งสองตัวนี้ สามารถเรียนรู้ได้ไม่ยากนัก เราจึงจะมาเริ่มต้นที่การเขียนโปรแกรมในภาษา C กันเลย เราลองมาเริ่มจากตัวอย่างการเขียน ภาษา C แบบ ง่ายๆ กันก่อนกับโปรแกรม Hello World #include main() { printf("Hello World!!!!! "); } บรรทัดแรก #include เป็นการบอกว่าให้ทำการรวม Header file ที่ชื่อว่า stdio.h (.h = header) ซึ่งเป็น header ที่เกี่ยวข้องกับการรับและให้ข้อมูล (Standard Input Output) นอกจาก stdio.h แล้ว ก็ยังมี Header อื่นๆ ที่ผู้พัฒนาสามารถที่จะเรียกใช้งาน Function ที่จำเป็นจาก Header นั้นๆ ได้ อาทิเช่น
ตัวอย่างที่ 1 "hello world"



ตัวแปร (Variables) ตัวแปรจะเป็นชื่อที่ใช้ในการบอกจำนวนหรือปริมาณ ซึ่งสามารถที่จะทำการเปลี่ยนแปลงจำนวนได้ด้วยโปรแกรมคอมพิวเตอร์ การตั้งชื่อตัวแปร จะต้องตั้งชื่อให้แตกต่างไปจากชื่อของตัวแปรอื่นๆ ยกตัวอย่างชื่อของตัวแปร เช่น
int i, j, count; float sum, product; char ch; bool passed_exam;
มาถึงตอนนี้ เราก็จะสามารถปรับปรุงการเขียนโปรแกรมแบบง่ายๆ ได้ดังนี้
int i, j, count;
float sum, product;
char ch;
bool passed_exam;

มาถึงตอนนี้ เราก็จะสามารถปรับปรุงการเขียนโปรแกรมแบบง่ายๆ ได้ดังนี้

#include  
Main() 
{ 
int its_price; 
printf("How much is that ? ");
scanf("%d", &its_price); 
printf("oh! %d ?, hmmm...., too expensivenn",its_price); 
}

จาก code ข้างบน ผู้อ่านจะเห็น %d เมื่อมีการเรียกใช้ฟังก์ชัน scanf และ printf ทั้งนี้ %d จะเป็น format ที่ใช้บ่งบอกชนิดของตำแหน่ง (Place Holders) ที่จะมีการส่งข้อมูล โดยในที่นี้ %d หมายถึงตำแหน่งของจำนวนเต็ม หรือ int นั่นเอง ตัวอย่างของ Place Holders อื่นๆ สามารถแสดงได้ดังตาราง คราวนี้ลองมาดูตัวอย่างของการใช้ Place Holders

printf("C=%f, F=%f",cel,fah); 
printf("He wants to score %d goals today",9);

เมื่อ % เป็นการบ่งบอกตำแหน่งเริ่มต้นของ Place Holder จากนั้น ตัวอักษร f ตัวแรก จะบ่งบอกถึง ตัวแปรcel ว่ามีค่าเป็นจำนวนจริง (Float) ส่วน f ตัวทีสอง จะบ่งบอกคอมไพเลอร์ว่า ตัวแปร fah ก็มีค่าเป็นจำนวนจริงเช่นกัน นอกจากนี้ Place holder %d และ %f ยังสามารถใช้กับการกำหนดตำแหน่งตัวเลขตามต้องการได้ ยกตัวอย่างเช่น สมมุติให้ x=235; และ y=6.54321;


ตัวอย่างที่ 2 "การคำนวณจำนวนตัวเลข"

จากตัวอย่างการเขียนโปรแกรมข้างต้น จะเห็นว่ามีการคำนวณทางคณิตศาสตร์เข้ามาเกี่ยวข้อง คราวนี้เราลองมาดู การคำนวณในภาษา C
กันว่าจะเขียนกันได้อย่างไรบ้าง


การเปรียบเทียบ แบบมีทางเลือก (Selection Structures)



2.การเขียนโปรแกรมแบบมีทางเลือก (Selection Structures) การเขียนโปรแกรมแบบมีทางเลือก จะสามารถทำให้โปรแกรมสามารถตัดสินใจหรือเปรียบเทียบ จากนั้นก็จะเลือกดำเนินการไปในทิศทางหนึ่งจากสองทิศทาง ขึ้นอยู่กับผลที่ได้จากการเปรียบเทียบนั้น เงื่อนไข (Condition)- เป็นตัวกำหนดเงื่อนไขที่ผู้พัฒนาโปรแกรมได้สร้างขึ้นมา - ผลลัพธ์ที่ได้จากเงื่อนไข จะมีค่า จริงหรือ เท็จ โครงสร้างของเงื่อนไข (Condition Control Structures) ประโยคเงื่อนไขสามารถที่จะเขียนให้อยู่ในรูปภาษา C จะเขียนได้ดังนี้ if condition then A else B ซึ่งหมายความว่า ถ้าเงื่อนไข (condition) มีค่าเป็นจริง ก็จะดำเนินการทำคำสั่ง A มิเช่นนั้นก็จะทำคำสั่ง B ตัวอย่างของการเขียนโครงสร้างทางเลือกในภาษา C สามารถเขียนได้ดังนี้

        
        if(x < y)
        a = x*2;
        else
        a = x + y;

ความหมายของ code ดังกล่าว หมายความว่า ถ้า ค่า x มีค่าน้อยกว่า y แล้ว a = x*2 แต่ถ้า x มีค่ามากกว่าหรือเท่ากับ y แล้ว a = x+y นั่นเอง รูปแบบของเงื่อนไข ส่วนใหญ่จะอยู่ในรูป “ตัวแปร โอเปอเรเตอร์ ตัวแปร” โอเปอเรเตอร์ที่กล่าวถึงนี้จะมีอยู่ 2 แบบ ด้วยกันคือ โอเปอเรเตอร์สัมพันธ์ (Relational Operator) และ โอเปอเรเตอร์ลอจิก (Logical Operator) โอเปอเรเตอร์สัมพันธ์ที่ใช้ในภาษา C มีดังต่อไปนี้



ตัวอย่างที่ 3 "if"


ตัวอย่างที่ 4 "if else"













นอกจากรูปแบบของ if-else แล้ว เรายังสามารถใช้เครื่องหมาย ? มาประยุกต์ในการเขียน code เพื่อให้ได้ความหมายเดียวกันกับ if-else สามารถเขียนได้ในอีกรูปแบบหนึ่งคือ a = x < y ? x*2: x+y ; // ซึ่งจะให้ความหมายเดียวกันกับ code ข้างบนนั่นเอง ในบางครั้งที่เราต้องเขียนโปรแกรมแบบมีทางเลือก โดยบางครั้งเราต้องการให้มีทางเลือกมากว่า 2 ทาง Nested if เป็นวิธีหนึ่งที่สามารถใช้แก้ปัญหาได้ แต่เพื่อให้ง่ายขึ้น ในภาษา C เราจึงสามารถใช้คำสั่ง switch ได้ โดยรูปแบบการเขียน คำสั่ง switch สามารถเขียนให้อยู่ในรูป

switch (selector) 
{
case label1: statement1;
break;
case label2: statement2;
break;
...
case labeln: statementn;
break;
default: statementd; // optional
break;
}

ตัวอย่างที่ 5 "switch case"



ประโยชน์ของภาษา C มีหลายด้าน จะยกตัวอย่างที่เป็นประโยชน์โดยตรงกับครูอาจารย์หรือนักศึกษา คือ การใช้ภาษา C ในการคำนวณ เกรด

ตัวอย่างที่ 6 "grade"




MATLAB

การใช้งานโปรแกรม MATLAB เบื้องต้น



1. ทดลองใช้คำสั่งบวกเลขสองจำนวนดังนี้

» 3 + 4 ans =7
โอเปอเรชั่นทางคณิตศาสตร์อื่นๆ ที่ใช้ในการคำนวณมีดังนี้
- บวก สัญลักษณ์ + ตัวอย่าง5+3 
- ลบ สัญลักษณ์ - ตัวอย่าง5-3 
- คูณ สัญลักษณ์ * ตัวอย่าง5*3 
- หาร สัญลักษณ์ / ตัวอย่าง5/3 
-ยกกำลัง สัญลักษณ์ ตัวอย่าง5^3 (หมายถึง 5 ยกกำลัง 3 = 125)

2. Math build-in function




3. การกำหนดค่าให้กับตัวแปรใช้เครื่องหมาย = โดยมีรูปแบบท่ั่วไปดังนี้

            ชื่อตัวแปร = ตัวเลขหรือนิพจน์ทางคณิตศาสตร์

ตัวอย่าง 

       » x = [1 2 3 4 5]

       x =

            1 2 3 4 5 

       » y = [6;7;8;9;10]

       y =

            6

            7

            8

            9

            10

       » y = [6,7,8,9,10]

       y =

            6 7 8 9 10

       » y' (Transpose vector)

       ans =

              6
            7
              8
              9
              10

3.การ Plot กราฟ 2 มิติ

            >> x=[1 2 3 5 7 7.5 8 10];            >> y=[2 6.5 7 7 5.5 4 6 8];            >> plot(x,y)            >>
ตัวอย่าง กราฟ 2 มิติ


4.การ Plot กราฟ แบบกำหนดเอง

ตัวอย่าง กราฟ plot แบบกำหนดเอง






การแยกสีภาพ จากภาพสีเป็น ขาว-ดำพร้อมทั้งกราฟ

ทำได้ตามตัวอย่างต่อไปนี้ 
กราฟแสดงสีของภาพ




เมื่อแยกสีออกมาแล้ว เป็นสีขาว-ดำ และกราฟแสดงสีของภาพ



Matlab ยังมีประโยชน์ในการเรียนสาขาวิชาภูมิสารสนเทศศาสตร์ 

จากภาพถ่ายดาวเทียมอีกด้วย


ตัวอย่างดังรูป




    การพัฒนาโปรแกรมต่างๆ โดยใช้ MATLAB นั้น ช่วงแรกๆ มองว่ามันใช้ค่อนข้างยาก เพราะจะฉีกจากกฎเกณฑ์เดิมๆ ของการเขียนโปรแกรมด้วยภาษาอื่นๆ ไม่ว่าจะเป็น C, Pascal, java ฯลฯ ส่วนใหญ่ MATLAB จะยุ่งอยู่กับ Vector และ Matrix เป็นส่วนใหญ่ ซึ่งคนที่เรียนคณิตศาสตร์มาคงไม่ยากสำหรับเจ้าโปรแกรมนี้ ส่วนคนที่ไม่ได้เรียน แล้วอยากที่จะสัมผัสก็คงต้องใช้เวลากับมันมากสักหน่อย เพราะโดยส่วนใหญ่จะเป็นเรื่องของการคำนวณล้วนๆ แต่ก็ไม่ต้องกลัวไป เพราะ MATLAB เองมีฟังก์ชั่นเกี่ยวกับการคำนวณเอาไว้ให้เราเรียกใช้มากมายอยู่แล้ว เพียงแต่เราต้องรู้ความหมาย และประโยชน์ของแต่ละฟังชั่นก์ที่ต้องการใช้งานเท่านั้นเอง
 
     การเขียนโปรแกรมด้วย MATLAB นั้นมีความง่ายและเร็วกว่าภาษาอื่นๆ เป็นอย่างมาก เพราะมีไลบรารี (ฟังก์ชั่น) จำนวนมากรองรับ รวมถึงเจ้า Simulink ที่ใช้สำหรับจำลองการทำงานของระบบหรือการทดสอบกระบวนการขั้นตอนต่างๆ โดยที่เราแทบไม่ต้องพิมพ์คำสั่งให้ยุ่งยาก อีกทั้ง MATLAB เก่งมากในเรื่องของการทำงานกับ “เมทริกซ์” ซึ่งทำให้เราสามารถจัดการกับอาร์เรย์ได้อย่างง่่ายดาย อีกทั้งโค้ดโปรแกรมที่สั้นและกระทัดรัด รองรับการทำงานกับ Graphic รวมถึง GUI ได้เป็นอย่างดีและสะดวกในการป้อนค่าต่างๆ เข้าไปเพื่อแสดงผล นอกจากนั้น ยังสามารถเขียนโปรแกรมติดต่อในระดับฮาร์ดแวร์ และเชื่อมต่อกับโปรแกรมภาษาอื่นๆ ได้อีกด้วย
      สุดท้ายนี้ โปรแกรม MATLAB นั้นไม่ได้เพียงแค่ถูกออกแบบมาเพื่อใช้ในการวิศวกรรม วิทยาศาสตร์ หรืองานวิจัยเท่านั้น ถ้าเรารู้จักนำไปประยุกต์ใช้ในด้านอื่นๆ ซึ่งในบทความต่อๆ ไป คงจะได้ค่อยๆ ทยอยขึ้นมาไว้ในบล็อกนี้ หวังว่าคงจะเป็นประโยชน์สำหรับน้องๆ หรือคนที่สนใจนะคะ ^^ 






































ไม่มีความคิดเห็น:

แสดงความคิดเห็น