วันอาทิตย์ที่ 21 มิถุนายน พ.ศ. 2558

week 4 Program language Computer (โปรแกรม ภาษา คอมพิวเตอร์)



4.โปรแกรมภาษา C


ขอบอกไว้ก่อนเลยครับว่า เรื่องโปรแกรมภาษาคอมพิวเตอร์เนี่ย 

มันเยอะ เยอะ และเยอะมากๆ จริงๆครับ  เอาเป็นว่า...
ผมขอเลือกภาษา C แล้วกันครับ เป็นภาษาที่ทุกคนน่าจะรู้จักหรือเคยได้ยินกันนะครับ



ภาพจากhttp://icons.mysitemyway.com/legacy-icon-tags/c/page/2/(ภาพไม่เกี่ยวนะครับ อิอิ)

ภาษาซี (C Programming Language) คือ ภาษาคอมพิวเตอร์ใช้สำหรับพัฒนาโปรแกรมทั่วไป 

ถูกพัฒนาครั้งแรกเพื่อใช้เป็นภาษาสำหรับพัฒนาระบบปฏิบัติการยูนิกซ์ ( Unix Opearating System) 
แทนภาษาแอสเซมบลี ซึ่งเป็นภาษาระดับต่ำที่สามารถกระทำในระบบฮาร์ดแวร์ได้ด้วยความรวดเร็ว 
แต่จุดอ่อนของภาษาแอซเซมบลีก็คือความยุ่งยากในการโปรแกรม ความเป็นเฉพาะตัว 
และความแตกต่างกันไปในแต่ละเครื่อง เดนนิส ริตชี (Dennis Ritchie) 
จึงได้คิดค้นพัฒนาภาษาใหม่นี้ขึ้นมาเมื่อประมาณต้นปี ค.ศ. 1970 โดยการรวบรวม
เอาจุดเด่นของแต่ละภาษาระดับสูงผนวกเข้ากับภาษาระดับต่ำ เรียกชื่อว่า ภาษาซี


          เมื่อภาษาซี ได้รับความนิยมมากขึ้น จึงมีผู้ผลิต compiler ภาษาซีออกมาแข่งขันกันมากมาย
ทำให้เริ่มมีการใส่ลูกเล่นต่างๆ เพื่อดึงดูดใจผู้ซื้อ ทาง American National Standard Institute
(ANSI) จึงตั้งข้อกำหนดมาตรฐานของภาษาซีขึ้น เรียกว่า ANSI C เพื่อคงมาตรฐานของภาษาไว้

ไม่ให้เปลี่ยนแปลงไป
โครงสร้างของโปรแกรมภาษาซี และตัวอย่าง
          โปรแกรมในภาษาซีทุกโปรแกรมจะประกอบด้วยฟังก์ชันอย่างน้อย หนึ่งฟังก์ชัน
คือ ฟังก์ชัน main โดยโปรแกรมภาษาซีจะเริ่มทำงานที่ฟังก์ชัน main ก่อน
ในแต่ละฟังก์ชันจะประกอบด้วย
          1. Function Heading ประกอบด้วยชื่อฟังก์ชัน และอาจมีรายการของ argument
(บางคนเรียก parameter) อยู่ในวงเล็บ
          2. Variable Declaration ส่วนประกาศตัวแปร สำหรับภาษาซี ตัวแปรหรือค่าคงที่ทุกตัว
ที่ใช้ในโปรแกรมจะต้องมีการประกาศก่อนว่าจะใช้งานอย่างไร จะเก็บค่าในรูปแบบใดเช่น
interger หรือ real number
          3. Compound Statements ส่วนของประโยคคำสั่งต่างๆ ซึ่งแบ่งเป็นประโยคเชิงซ้อน
(compound statement) กับ ประโยคนิพจน์ (expression statment) โดยประโยคเชิงซ้อน
จะอยู่ภายในวงเล็บปีกกาคู่หนึ่ง { และ } โดยในหนึ่งประโยคเชิงซ้อน
จะมีประโยคนิพจน์ที่แยกจากกันด้วยเครื่องหมาย semicolon (;) หลายๆ ประโยครวมกัน
และ อาจมีวงเล็บปีกกาใส่ประโยคเชิงซ้อนย่อยเข้าไปอีกได้

พื้นฐานโปรแกรมภาษา 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 นั้นๆ ได้ อาทิเช่น
       รู้จัก Header File กันไปล่ะ คราวนี้ เราลองมาดูบรรทัดถัดไปกัน ก็คือ ฟังก์ชัน main()
จะเป็นจุดเริ่มต้นของโปรแกรม และโปรแกรมทุกโปรแกรมในภาษา C จะต้องมี Function main() นี้
โดยส่วนมาก เราจะใช้ Function main() ในการกำหนดค่าเริ่มต้นต่างๆ ของโปรแกรม จากนั้นจึงเข้าสู่
Function ต่างๆ ที่ผู้พัฒนา ได้กำหนดขึ้นไว้ บรรทัดถัดมาจะเป็นเครื่องหมาย { ซึ่งเป็นเครื่องหมายบ่งบอก
ขอบเขตของ Function โดยขอบเขตของฟังก์ชัน จะเปิดและปิดโดยใช้เครื่องหมายเปิด
{ และเครื่องหมายปิด } ตามลำดับ ภายใน Function main() จะมีคำสั่ง (Statement)
printf("Hello World!!!!! "); ซึ่ง printf เป็น Function ในภาษา C ทำหน้าที่ให้โปรแกรม
ทำการแสดงผลออกทางหน้าจอว่า Hello World!!!!! และทุกครั้ง ผู้พัฒนาจะต้องทำการจบคำสั่ง
หรือ Statement ด้วยเครื่องหมาย semi-colon ; ดังนั้นรูปแบบของการเขียนโปรแกรม
จึงเขียนออกมาในรูปแบบดังนี้ // ข้อความที่อยู่ข้างหลังเครื่องหมาย // จะเป็นคำอธิบายโปรแกรม
#include 
void main() { constant declarations; // การกำหนดค่าคงที่ต่างๆ
variable declarations; // การกำหนดตัวแปรต่างๆ executable statements; // คำสั่งการทำงานของโปรแกรม } 
        การอ่านข้อมูลและการแสดงผล (Input & Output) รูปแบบการใช้งานฟังก์ชัน printf
จะทำการพิมพ์ในรูปแบบที่ เริ่มต้นด้วย Format ที่ต้องการจะพิมพ์ และตามด้วยตัวแปรที่ต้องการพิมพ์ ดังนี้
printf( const char *format [, argument]... ); สำหรับการนำข้อมูลเข้าก็เช่นกัน จะใช้ฟังก์ชัน scanf
ซึ่งจะเป็นฟังก์ชันสำหรับอ่านข้อมูลจากคีย์บอร์ด และจะนำข้อมูลที่ User ทำการพิมพ์ไปเก็บไว้ใน argument
โดยแต่ละ argument จะต้องเป็นตัวแปรที่เรียกว่า pointer (รายละเอียดจะได้กล่าวต่อไป)
และมีชนิดที่ตัวแปรที่สัมพันธ์กับที่ได้กำหนดไว้ใน Format รูปแบบการใช้งานของฟังก์ชัน scanf
สามารถเขียนได้ดังนี้ scanf( const char *format [,argument]... );

พอมาถึงตอนนี้แล้ว ผมขอยกตัวอย่างการเขียนภาษา C เฉพาะ Loop และ Arrays นะครับ
เพราะเรื่องนี้มันเยอะมาก เยอะมากๆจริงๆครับ...Y^Y

การเขียนโปรแกรมแบบ วนซ้ำ (Loop)

การเขียนโปรแกรมแบบ วนซ้ำ (Repetition & Loop) กระบวนการหนึ่งที่สำคัญในการออกแบบอัลกอริทึม
ก็คือความสามารถในการวนลูปของการทำงานของกลุ่มคำสั่งตามที่นักพัฒนาต้องการ ดังนั้นสำหรับตอนนี้
ก็จะนำเสนอการพัฒนาโปรแกรมเพื่อให้บางส่วนของคำสั่งสามารถมีการวนซ้ำได้หลายครั้ง
สำหรับคำสั่งที่สามารถใช้ในการเขียนโปรแกรมแบบวนซ้ำในภาษา C ได้แก่ While, Do-while และ For
ตัวอย่างของการใช้คำสั่ง while, for และ do-while สามารถเขียนให้เห็นได้ดังตาราง
ซึ่งผลลัพทธ์ของโปรแกรมทั้ง 3 ข้างต้นจะให้ผลลัพท์ที่เหมือนกัน คือจะแสดงผลบนหน้าจอเป็น
i = 0 i = 1 i = 2 i = 3 i = 4 i = 5 i = 6 คราวนี้เราลองมาดูโครงสร้างของการใช้งานแต่ละคำสั่งกัน
while ( condition ) // เมื่อ เงื่อนไข (condition) เป็นจริง ก็จะทำการวนซ้ำ ใน statement ถัดไป statement
ยกตัวอย่างเช่น
sum = 0.0; 
x = 5; 
while (x > 0.0) 
{
sum += x;
 x = x – 1; 
}

ในที่นี้จะเห็นว่า ค่า x มีค่าเริ่มต้นเท่ากับ 5 ซึ่ง 5 > 0 เงื่อนไขของคำสั่ง while เป็นจริง
จึงทำคำสั่งถัดมาคือ sum += x; หมายความว่า sum = sum + x = 5
จากนั้นค่า x ก็มีค่าลดลงไป 1 เหลือ 4 ก็จะทำการ check เงื่อนไขว่า 4 > 0 หรือไม่
เมื่อเงื่อนไขเป็นจริง ก็จะทำการวนซ้ำ sum ก็จะมีค่าเป็น 5 + 4 = 9 และ x ก็จะมีค่าลดลงเหลือ 3
และดำเนินการวนซ้ำเช่นนี้จนกระทั่ง x มีค่าเป็น 0 ซึ่งค่า 0 ไม่ได้มีค่ามากกว่า 0.0 เงื่อนไขจึงเป็นเท็จ
โปรแกรมจึงจะจบการวนซ้ำ คราวนี้เราลองมาดูตัวอย่างของการใช้คำสั่ง while ในการเขียนโปรแกรมแบบวนซ้ำ
และผลลัพท์ที่ได้
x=0; 
while( x <=2 ){ 
printf("%d %dn",x, x*2); 
}
 ผลลัพท์ที่ได้จะได้ดังนี้
0 0 
0 0 
0 0 
: : 
0 0 (infinite loop)
การที่ผลลัพท์ออกมาเช่นนี้ ก็เนื่องจากว่า x มีค่าเริ่มต้น 0 และเงื่อนไข x <= 2 เป็นจริงตลอด
โปรแกรมจึงทำการพิมพ์ค่า 0 0 ออกมา และเนื่องจากค่า x ไม่มีการเปลี่ยนแปลง เงื่อนไขจึงเป็นจริงตลอด
โปรแกรมจึงแสดงผลบนหน้าจอโดยไม่หยุดนั่นเอง
        คราวนี้เราลองมาแก้โจทย์ปัญหา การหาค่า ห.ร.ม (หารร่วมมาก) ของตัวเลข 2 ตัวใดๆ โดยอัลกอริทึม Euclidean โดยอัลกอริทึมดังกล่าว จะทำการแปลงค่าตัวเลข 2 ตัวเลขบวกใดๆ (m, n) เป็นค่า (d, 0)
โดยการนำตัวเลขที่มีค่ามาก นำมาหารด้วยตัวเลขที่มีค่าน้อยกว่า นำค่าเศษที่หารได้มาแทนตัวเลขที่มีค่ามากกว่า
ทำเช่นนี้จนกระทั่งได้ค่าเศษจากการหารมีค่าเป็น 0 ตัวเลขอีกตัวก็จะเป็นค่า ห.ร.ม. ยกตัวอย่างเมื่อเราทำการ
Run โปรแกรม จะได้ผลดังนี้ Enter two positive integers: 532 112 The g.c.d. of 532 and 112 is 28
คราวนี้เราลองมาดูการเขียนโปรแกรมเพื่อแก้ปัญหาดังกล่าวข้างต้น สามารถเขียนได้ดังนี้
#include 
 void main() 
{
int A, B, start; 
printf("Enter two positive intergers: "); 
scanf("%d %d", &A, &B); 
if(A < B) start = A; 
else start = B; 
while(((A%start) != 0)||((B%start) != 0)) 
{ 
start = start-1; 
 } 
printf("The g.c.d of %d and %d is %dn", A, B, start); 
}
การดำเนินการทางคณิตศาสตร์ สามารถเขียนให้อยู่ในรูปแบบสั้นๆ ได้ ดังตัวอย่างในตารางดังนี

ความแตกต่างระหว่าง i++ และ ++i i++ และ ++i จะมีความหมายใกล้เคียงกันมาก
จะแตกต่างเพียงการจัดลำดับในการคำนวณ เมื่อต้องนำไปใช้กับตัวแปรตัวอื่น
A = 10; C = A++; // A= 11, C = 10 A = 10; C = ++A; // A = 11, C = 11
A = 10; C = A--; // A = 9, C = 10 A = 10; C = --A; // A = 9, C = 9
โครงสร้างการเขียนโปรแกรมแบบวนซ้ำโดยใช้คำสั่ง For คำสัง for สามารถเขียนให้อยู่ในรูปแบบได้ดังนี้
for ( เริ่มต้น ; เงื่อนไข ; เปลี่ยนแปลง ) statement; เมื่อเริ่มต้น เป็นการกำหนดค่าตัวแปรเริ่มต้นที่ต้องการ
ส่วนเงื่อนไขหากค่าลอจิกมีค่าเป็นจริง ก็จะทำตามในโครงสร้างของการวนซ้ำคือ run คำสั่ง statement
แต่ถ้าเป็นเท็จก็จะออกจากโครงสร้างการวนซ้ำ ส่วนเปลี่ยนแปลง จะทำการปรับค่าของตัวแปรที่ต้องการ
ยกตัวอย่างเช่น
for ( count=0 ; count < 10 ; count++) 
{ 
printf(“count = %dn”,count); 
}
ใน code ข้างต้น ตัวแปร count จะเริ่มต้นจากค่า 0 ซึ่งค่า 0 มีค่าน้อยกว่า 10 ก็จะทำคำสั่ง print
ค่าของตัวแปร count จากนั้นค่า count ก็จะเพิ่มค่าเป็น 1 เงื่อนไข count < 10 ก็ยังคงเป็นจริง
ก็จะทำการพิมพ์ ค่าของตัวแปร count วนซ้ำเช่นนี้ จนกระทั่ง count มีค่าเพิ่มขึ้นจนเป็น 10
เงื่อนไขก็จะเป็นเท็จ และจบโครงสร้างของการวนซ้ำ การเปลี่ยนแปลงค่าของตัวแปร
อาจจะมีการเปลี่ยนแปลงมากกว่า 1 ค่า ยกตัวอย่างเช่น
or ( count=0 ; count < 10 ; count += 2) // ตัวแปร count มีค่าเปลี่ยนแปลงเพิ่มขึ้นครั้งละ 2 
{ 
printf(“count = %dn”,count); 
} 
for ( count=10 ; count > 5 ; count -= 2) // ตัวแปร count มีค่าเปลี่ยนแปลงลดลงครั้งละ 2 
{ 
printf(“count = %dn”,count); 
}
นอกจากนี้เรายังสามารถใช้ตัวแปร เป็นการกำหนด ค่าเริ่มต้น เงื่อนไข และ เปลี่ยนแปลงได้ ยกตัวอย่างเช่น
start = 0; end = 20; step=3; 
for ( count=start ; count < end ; count += step) 
{ 
printf(“count = %dn”,count); 
}
คราวนี้ เราลองมาทดลองเขียนโปรแกรม โดยให้โปรแกรม สามารถรับค่าตัวเลขใดๆ
และแสดงค่าในรูปแบบดังตัวอย่างต่อไปนี้
Input the number > 4 
0 
0 1 
0 1 2 
0 1 2 3 
0 1 2 
0 1 
0 
เราสามารถแก้ปัญหาข้างต้น โดยใช้โครงสร้างการเขียนโปรแกรมแบบวนซ้ำดังต่อไปนี้
#include 
 void main() 
{ 
int number, i, j; 
printf("Enter number: "); 
scanf("%d", &number); 
for(j= 0; j< number; j++) { for(i=0; i<= j; i++) 
{
printf("%d ", i); 
}
printf("n");
} 
for(j= number-1; 
j>= 0; j--) 
{ 
for(i=0; i< j; i++) 
{ 
printf("%d ", i); 
} 
printf("n"); 
} 
}

โครงสร้างการเขียนโปรแกรมแบบวนซ้ำโดยใช้คำสั่ง do-while รูปแบบของการเขียน code
สำหรับโปรแกรมแบบวนซ้ำที่ใช้ do-while สามารถเขียนให้อยู่ในรูปทั่วไปได้ดังนี้
do statement while ( เงื่อนไข ); ตัวอย่างของโครงสร้าง do-while สามารถเขียนได้ดังนี้
sum = 0.0; 
scanf(“%f”, &x);
 do { 
sum += x; scanf(“%f”, &x); 
} 
while (x > 0.0);
โปรแกรมข้างต้นจะทำการอ่านค่าจะ keyboard เมื่อ User พิมพ์ค่าที่มีค่ามากกว่าศูนย์
ก็จะทำการบวกค่าเหล่านี้ไปที่ตัวแปร sum จนกระทั่ง User พิมพ์ ตัวเลข 0 หรือค่าที่น้อยกว่า ศูนย์
ทำให้เงื่อนไขเป็นเท็จ และโปรแกรมจึงจะออกจากโครงสร้าง do-while คราวนี้เราลองมาเขียนโปรแกรมที่ใช้โครงสร้าง do-while โดยโจทย์กำหนดให้ว่า ให้โปรแกรมสามารถรับค่าตัวเลขใดๆ (X) และ
แสดงผลของตัวเลข ระหว่าง 0 ถึง X ที่สามารถหารด้วย 4 ลงตัว
#include 
 void main() 
{ 
 int number, i; 
printf("enter the numbern"); 
scanf("%d", &number); 
i = 0; 
do 
{ 
if((i % 4) == 0) printf("%d ", i); i++; 
} 
while(i <= number); 
}


อาเรย์ (Arrays)

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




Type ArrayName[size]; // Format of Blank array  
Type ArrayNameInitialized[size] = {…}; // Format of initialized array 
 int a[5] = {0,0,0,0,0}; 
double air[5]; 
char vowel[] = {’A’,’E’,’I’,’O’,’U’};

ในกรณีใช้ตัวแปรดัชนี้ชี้ตำแหน่งข้อมูลในตาราง
ค่าของตัวแปรที่จะชี้จะต้องอยู่ในช่วงระหว่าง 0 กับ N-1 โดยที่ N คือขนาดตารางอาเรย์
ดังตัวอย่างที่แสดงในภาพที่ 5.1
ถ้าค่าดัชนีน้อยกว่า 0 หรือมากกว่า N – 1 แล้วโปรแกรมจะทำงานผิดพลาดหรือหยุดทำงาน
การแยกแยะช่องตาราง (Array subscription) ทำได้โดย การใช้ชื่อตัวแปรอาเรย์ ตามด้วย
วงเล็บเหลี่ยมที่มีค่าดัชนี (เช่น Data[i], i = 0, 1, 2, … N-1 ) การประกาศค่าตั้งต้นให้ตัวแปรอาเรย์
สามารถทำได้โดยใช้เครื่องหมายปีกกา ( { } ) หรือจะยกประกาศค่าตั้งต้นที่ละช่องตารางก็ได้
ตามความต้องการของผู้ใช้ โดยส่วนที่ ไม่ได้ใส่ค่าตั้งต้นจะมีค่าเป็นศูนย์
(กรณีตารางอาเรย์แบบ int, double, หรือ float) หรือเป็นค่าว่าง ดังตัวอย่างต่อไปนี้
int a[4] = {9, 8, 7}; ซึ่งจะได้ค่าออกมาตรงกัย a[0] = 9; a[1] = 8; a[2] = 7; และ a[3] = 0;   

กรณีที่ตารางมีหลายมิติ จะมีการเรียกใช้ตามรูปแบบตารางมิติเดียวต่อไปนี้  
ตาราง 2 มิติ: type arrayname2D[size1][size2]; 
ตาราง 3 มิติ: type arrayname3D[size01][size02][size03];  

การค้นข้อมูลในตารางอาเรย์นั้น สามารถเข้าถึงได้อย่างรวดเร็วไม่ว่าตารางจะใหญ่เพียงไหน เช่น 

const int SIZE = 100; // #define SIZE 100 for C 
float A[SIZE],B[SIZE],C[SIZE]; 
for(i = 0; i <= SIZE-1; i++) 
{ 
C[i] = B[i] – A[i]; 
}

ในการใช้ตัวแปรอาเรย์เป็นอาร์กิวเมนต์ให้ฟังก์ชันนั้น แบ่งได้หลายกรณีได้แก่ 
1) กรณีที่จะเอาข้อมูลเฉพาะช่องตาราง จะมีการส่งผ่านข้อมูลในตารางอาเรย์  ดังนี้
void main() 
{ 
float X[10], X[0] = 123.23, X[1] = 24.56, X[2] = 45.67; 
 float total = sum_element(X[0],X[1],X[2]); … 
 } 
float sum_element(float A, float B, float C) 
{ 
return (A+B+C); 
}

2) กรณีที่ใช้ข้อมูลทั้งตารางอาเรย์ การส่งผ่านข้อมูลในตารางลงในฟังก์ชันจะเป็น ดังนี้
void main() 
{ 
float X[10], X[0] = 123.23, X[1] = 24.56, X[2] = 45.67; 
float total = sum_element_array(X) …  
} 
float sum_element_array(float A[]) { int index; float Sum = 0; for(index =0; index <= 3-1; index++) { Sum +=A[index]; } return Sum; }

3) กรณีที่ใช้ข้อมูลทั้งตารางเพื่อให้ได้ผลลัพธ์ออกมาเป็นตารางอาเรย์ให้ทำดังนี้
void add_arrays(float ar1[], // input array 1 
float ar2[], // input array 2 
float ar_sum[], // Output array 
int N) // Array Size 
{ 
for(int i = 0; i <= N-1; i++) 
{ 
ar_sum[i] = ar1[i] + ar[2]; 
} 
}

การค้นหาข้อมูลในตาราง (Array searching) ในการค้นข้อมูลนั้นมักใช้ linear search
หาข้อมูลในตารางตามที่ต้องการ โดยกำหนดเงื่อนไขว่า
1) ถ้าหาข้อมูลพบ ให้แสดงดัชนีของค่าที่ค้นพบ ก่อนออกจากวงรอบการค้นหา
2) ถ้าหาข้อมูลไม่พบ ให้ออกจากโปรแกรมแล้วคืนค่า ที่อยู่นอก ขอบเขต 0 – N-1, N คือ
ขนาดตารางอาเรย์ (โดยมากให้คืนค่า -1) การสับเรียงข้อมูลในตาราง (Array Sorting)
การสับเรียงข้อมูลมีหลายวิธี ซึ่งจะกล่าวถึงในที่นี้พอสังเขปดังนี้ 1) Bubble Sort
ซึ่งเขียนใช้งานง่ายแต่ สับตำแหน่งข้อมูลได้ผลช้าที่สุด ซึ่งมีกลไกดังนี้
void BubbleSort(float list[], int N) 
{ 
int i,j; 
float temp; 
for(i = N-1; i>=0; i--) 
{ 
for(j = 1; j <=i; j++) 
{ 
if(list[j-1] > list[j]) 
{ 
temp = list[j-1]; 
list[j-1] = list[j]; 
list[j] = temp; 
} 
} 

} 
}
2) Selection Sort ซึ่งจะเลือกค่าที่ยังไม่ได้สับเปลี่ยนที่น้อยที่สุดเป็นหลัก ในกา รสลับที่
void SelectSort(float list[], int N) 
{ 
int i,j, MinIndex; 
float temp; 
for(i = 0; i<=N-2; i--) 
{ 
MinIndex = I; 

 for(j = i+1; j <=N-1; j++) 
{ 

 if(list[j] < list[MinIndex]) 
{ 
minIndex = j 
 } 

temp = list[j-1]; 
list[j-1] = list[j]; 
list[j] = temp; 
} 
} 
}
3) Insertion Sort ซึ่งจะเติมข้อมูลลงในตำแหน่งที่เหมาะสมในขั้นสุดท้าย ซึ่งจะต้องมีตัวแปรอาเรย์
อย่างน้อย 2 ตัว โดยที่อาเรย์ตัวแรกทำหน้าที่ เป็น List เก็บข้อมูล ต้นฉบับ (Source List)
และอาเรย์ตัวหลังทำหน้าที่รับข้อมูลที่ผ่านการสับตำแหน่งแล้ว (Sorted List) ในการสับที่กันนั้น
จะให้ข้อมูลปัจจุบันเคลื่อนผ่านข้อมูลที่ผ่านการสับตำแหน่งแล้ว จากนั้นจึงลงมือสลับข้อมูลอีกครั้ง
จนกว่าข้อมูลทั้งหมดจะเข้าที่
void insert_sort(float data[], int Size) 
{ 
int i,j; 
float DatElement; for(i=1;i<=Size-1;i++) 
{ 
DatElement = data[i]; 
j = i; 
while((j >= 1) && data[j-1] >DatElement) 
{ 
data[j-1] = data[j]; 
j = j-1; 
}
data[j] = DatElement; 
} 
}

ส่วนโปรแกรมที่ใช้เขียนภาษา C นะครับ ผมขอแนะนำเป็น DEV-C++ แล้วกันครับ
ตามลิ้งค์นี้เลย http://sourceforge.net/projects/orwelldevcpp/

และที่กล่าวมาข้างต้นนี้  ก็คือพื้นฐานการเขียนโปรเเกรมภาษา C ครับ...เยอะจริงๆนะครับเนี่ยแค่สองอย่างเอง
เพราะฉะนั้นใครที่สนใจอยากเขียนนะครับ
ลองกดเข้าไปดูตามลิ้งค์ด้านล่างได้เลยนะครับ
รับรองว่าครบถ้วนกว่านี้แน่นอนครับ

ขอบคุณทุกท่านที่เข้ามาอ่านมากๆครับ หวังว่าจะเป็นความรู้ให้กับท่านได้
และขอขอบคุณข้อมูลดีๆจาก...แหล่งอ้างอิงด้านล่างมากๆเลยครับ^^
          http://guru.sanook.com/6394/                    


วันจันทร์ที่ 15 มิถุนายน พ.ศ. 2558

week 3 Social Network กับนักเรียนและสังคมไทย

3.Social Network กับผมและสังคมไทย


ก่อนอื่นเลยนะครับ เรามารู้จักกับ "Social Network"ก่อนนะครั

Social Network...
   คือเว็บไซต์ที่เชื่อมโยงผู้คนไว้ด้วยกัน ผ่านInternet ซึ่งเป็นเว็บไซต์ช่วยให้คุณหาเพื่อน
บนโลกอินเตอร์เน็ตได้ง่ายๆ เราสามารถที่จะสร้างพื้นที่ส่วนตัวขึ้นมา เพื่อแนะนำตัวเองได้ 
โดยเลือกได้ว่าต้องการรู้จักกับใคร หรือเป็นเพื่อนกับใคร ก็ได้ ตัวอย่าง Social Network 
เช่น Hi5, Facebook, MySpace.com, twitter เป็นต้น

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

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




สำหรับผมแล้ว : Social Network ที่ใช้บ่อยที่สุด น่าจะเป็น Line นะครับ


 Line


      LINE เป็นแอปพลิเคชันให้บริการ Messaging รวมกับ Voice Over IP ทำให้ผู้ใช้สามารถสร้างกลุ่มแชต ส่งข้อความ ภาพ คลิปวิดีโอ หรือจะพูดคุยโทรศัพท์
แบบเสียงก็ได้ โดยข้อมูลที่ถูกส่งขึ้นไปนั้นฟรีทั้งหมด ตอนนี้ LINE ใช้ได้ในระบบปฏิบัติการ
iOS
, Android, Windows Phone, PC และ BlackBerry
      ฟีเจอร์ของ LINE ประกอบด้วย การส่งข้อความ, การสนทนาด้วยเสียง,
การเปลี่ยนพื้นหลังแบ็กกราวนด์หน้าห้องแชต, การสนทนาแบบกลุ่ม, Official LINE และการส่งสติ๊กเกอร์

คลิกชมภาพต่อไป

การเชื่อมต่อ LINE ของผู้ใช้เข้าหากัน มี 4 วิธี1. เพิ่มคอนแท็กต์จากรายชื่อในสมุดโทรศัพท์ ซึ่งตรงนี้เป็นข้อดีของ WhatsApp ที่ทำให้ผู้ใช้งานสะดวก
2. การสแกน QR Code
3. Shake it เอาโทรศัพท์มือถือ 2 เครื่องที่อยู่ใกล้กันมาเขย่าคล้ายการจับมือให้รู้จักกัน
4. การเสิร์ชหาจาก ID คล้ายการใส่รหัสของ BlackBerry
      ต่อมา LINE ถูกพัฒนาไปไกลกว่าการเป็นแค่แอปพลิเคชัน เพราะ LINE ได้เพิ่มฟีเจอร์
Home และ Timeline เข้ามาจนกลายเป็น Social Media อย่างหนึ่ง โพสต์ข้อความบ่งบอกสเตตัส,
รูปภาพ, คลิปวิดีโอ และพิกัด โดยมีจุดเด่นที่การแสดงอารมณ์ด้วยสติกเกอร์ซึ่งเป็นจุดแข็งของ LINE
ซึ่งจุดนี้น่าจะเป็นไม้เด็ดที่ทำให้ LINE ถูกต่อยอดไปอีกมากและเบียด Social Media หลัก
อย่างเฟซบุ๊กเลยทีเดียว

ขอบคุณข้อมูลดีๆจากแหล่งที่มานี้มากๆครับ^^

วันจันทร์ที่ 8 มิถุนายน พ.ศ. 2558

Week 2 สิ่งที่นักเรียนสนใจ

อยากร้องก็ร้อง..อยากเล่นก็เล่น..สิครับ


       ในชีวิตหนึ่งของผมนะครับ ก็เคยลองทำนู่นทำนี่หลายๆอย่างเหมือนกับหลายๆคน
แต่สิ่งหนึ่งที่ผมอยากลองทำและสนใจเป็นพิเศษเลยก็คือ ร้องเพลง ครับ

      โดยส่วนตัวแล้วผมคิดว่าตัวเองเป็นคนร้องเพลงไม่เก่งเลยครับ
แต่ก็ชอบร้องนะครับ ชอบฟัง เล่นดนตรีสนุกสนานกับเพื่อนๆ
อยู่มาวันหนึ่ง ผมได้เปิดเข้าไปในเว็บไซต์เฟสบุ๊คดอทคอมครับ แล้วไปเจอกับ...
คลิปcoverร้องเพลงของเพื่อนๆครับ ก็เลยมีความรู้สึกว่าอยากจะไปร่วมร้องด้วยจัง
แต่ปัญหาก็คือเสียงอย่างกับเป็ดเทศออกลูกเป็นสุนัขร้องหงิงๆของผมนั่นเอง5555
ก็เลยขอดูเพื่อนๆร้องเพลงไปก่อนแล้วกัน

      แต่ไหนๆก็ไหนๆแล้ว... 
เลยถือโอกาสบันทึกคลิ๊ปวิดีโอร้องเพลงมาลงในบล๊อกเลยแล้วกันนะครับ
เป็นแนวเพลงที่ผมชื่นชอบ อยากร้องหลายๆเพลงนะครับ
แต่ให้จบทุกเพลงคงเยอะและนานมาก
เอาเป็นว่ารวมไปในคลิปเดียวเลยนะครับ ยังไงก็รบกวนช่วยฟังด้วยนะครับ5555





       ฟังแล้วรู้สึกยังไงก็ติชมกันได้นะครับ อาจจะไม่ค่อยสบายหูสักเท่าไร
ร้องเพี้ยนด้วย แต่ก็อยากให้ช่วยเสนอแนะแนวทางการร้องให้ดีขึ้น
หรือจะให้เลิกร้องก็ได้นะครับ55555 

      ขอบคุณเพลงเพราะๆความหมายซึ้งกินใจจากพี่ๆวง Tattoo colour มากๆครับ
พี่ๆทุกคนเป็นไอดอลของผมเลยจริงๆ ชอบครับ จะติดตามผลงานต่อไปนะครับ

      และอีกแรงบันดาลใจหนึ่งที่ทำให้ผมอยากร้องเพลงลงคลิปนี้นะครับ
คือ เพื่อนๆของผมนั่นเอง ถ้าอยากฟังเพลงที่เพื่อนๆผมร้องกันก็ด้านล่างนี่เลยครับ






วิดีโอจาก https://www.youtube.com/watch?v=-2sBIpNga58 

ฝากติดตามทั้งสองคนนี้ด้วยนะครับ หน้าตาดีๆกันทั้งนั้นเลย ขอบคุณทุกคนมากๆครับ^^

วันอังคารที่ 2 มิถุนายน พ.ศ. 2558

Week 1 เทคโนโลยีในชีวิตประจำวัน

1.เทคโนโลยีกับชีวิตประจำวัน


            ในสมัยนี้เทคโนโลยีมันเจริญก้าวหน้าไปไกลเกินกว่าที่เราคิดไว้ซะอีก
สมัยก่อนนั้นเทคโนโลยีที่ว่าก้าวไกลสุดๆแล้วผมคิดว่จะเป็นจรวดอวกาศนะ
เพราะว่ามันสามารถพามนุษย์ออกไปนอกโลกได้สบายเลย แต่ทุกวันนี้.....
ไม่ต้องออกไปนอกโลก มนุษย์ก็รู้เท่าทันแทบทุกอย่างในจักรวาลนี้เลย
 ด้วยนวัตกรรมล้ำสมัยกว้างไกลแบบสุดๆที่เราทุกคนเรียกว่า "อินเทอร์เน็ต"

            ด้วยคำพูดที่ว่า"ไม่มีอะไรที่มนุษย์ทำไม่ได้" ทำให้มนุษย์นำเอาเทคโนโลยี
มาผนวกเข้ากับระบบสารสนเทศเกิดเป็นโครงข่ายการสื่อสารขนาดใหญ่ขึ้นมา
ปัจจุบันผู้คนส่วนมากเชื่อมต่อเข้ากับอินเทอร์เน็ตโดยสัญญาณที่เรียกกันว่า
"Wifi"บ้าง"3G"บ้าง หรือ "4G" ซึ่งสัญญาณประเภทนี้กระจายอยู่แทบทุกพื้นที่
บนโลกเลยก็ว่าได้ ถึงอย่างนั้นการที่จะรับสัญญาณพวกนี้ได้ก็ต้องใช้อุปกรณ์
รับสัญญาณ แน่นอนว่าหลายๆคนต้องมี ถ้าจะลองยกตัวอย่างก็เช่น คอมพิวเตอร์
แทปเลต สมาร์ทโฟน ที่กล่าวมานี้ก็เป็นเพียงส่วนหนึ่งที่เป็นเครื่องยืนยัน
ในการมีบทบาทของเทคโนโลยีในชีวิตประจำวันของเราแล้ว


ภาพจาก http://splashpage.mtv.com/2013/04/25/marvel-characters-one-shot/
ในอนาคตอันใกล้นี้ เทคโนโลยีอาจจะมีบทบาทกับเรามากกว่านี้ก็ได้นะครับ


เทคโนโลยีกับชีวิตประจำวันในด้านต่างๆ


การสร้างเสริมคุณภาพชีวิตที่ดีขึ้น สภาพความเป็นอยู่ของสังคมเมือง
มีการพัฒนาใช้ระบบสื่อสารโทรคมนาคมเพื่อติดต่อสื่อสารให้สะดวกขึ้น
 มีการประยุกต์มาใช้กับเครื่องอํานวยความสะดวกภายในบ้าน
 เช่น ใช้ควบคุมเครื่องปรับอากาศ ใช้ควบคุมระบบ ไฟฟ้าภายในบ้านเป็นต้น

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

เทคโนโลยีสารสนเทศกับการป้องกันประเทศ กิจการทางด้านการทหาร
มีการใช้เทคโนโลยี อาวุธยุทโธปกรณ์สมัยใหม่ลวนแต่เกี่ยวข้องกับคอมพิวเตอร์
และระบบควบคุม มีการใช้ ระบบป้องกันภัย ระบบเฝ้าระวังที่มีคอมพิวเตอร์ควบคุม
การทํางาน

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

         ภาพจาก http://game.sanook.com/952510/    


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

ขอขอบคุณ http://khianhin.blogspot.com มากๆครับที่ให้ข้อมูลและความรู้อีกมากมาย
สำหรับใครที่อยากรู้รายละเอียดมากกว่านี้ก็เข้าไปดูได้ตามลิ้งค์เลยนะครับ ขอบคุณจากใจครับ^^