เอกสารประกอบการสอน รายวิชา 3652204...
TRANSCRIPT
อ.วทรย คงผล www.dusittrang.com/professor/witoon
เอกสารประกอบการสอน
รายวชา 3652204 การโปรแกรมคอมพวเตอรทางธรกจเบองตน
(Introduction to Business Computer Programming)
(1)
คานา
เอกสารประกอบการสอนรายวชา วชา 3652204 การโปรแกรมคอมพวเตอรทางธรกจเบองตน มง เนนใหผ เรยนมความรความความเขาใจเกยวกบศกษาหลกการออกแบบและลงรหสโปรแกรม รปแบบไวยากรณภาษา องคประกอบของภาษาคอมพวเตอร ทเกยวของกบงานทางดานธรกจ เกยวกบคาสงนาเขาและสงออก(Input/Output) ชนดของขอมลแบบตาง ๆ รปแบบการดาเนนการ(Operation) การวนรอบ(Looping) โปรแกรมยอย(Procedure) ฟงกชน(Function) และการใชแฟมขอมลเบองตน โดยการใชภาษาคอมพวเตอรททนสมยในการฝกพฒนาโปรแกรมโดยไดมการปรบปรงเนอหาใหมทนตาม ยคสมย และสามารถเรยนรในเรองการเขยนโปรแกรมไดเขาใจไดงายยงขน ทงนเพอใหผเรยนสามารถเรยนรและนาไปประยกตใชงานไดจรง
โดยเนอหาในเอกสารประกอบการสอนในเลมนจะประกอบไปดวยเนอหาทงหมด 10 บทเรยนไดแก ภาษาคอมพวเตอรและการพฒนาโปรแกรมคอมพวเตอร การออกแบบการทางานโปรแกรมคอมพวเตอร ความเปนมาของภาษาซและการใชงานโปรแกรมภาษาซ โครงสรางพนฐานของภาษาซ ชนดขอมล และการประกาศตวแปรในภาษาซ ขนตอนการพฒนาโปรแกรมและคาสงการทางานของภาษาซ โครงสราง การควบคมการทางานแบบทางเลอก โครงสรางการควบคมการทางานแบบวนรอบ ตวแปรชนดอารเรย และฟงกชนและการสรางฟงกชนในภาษาซ และเนอหาการเรยนรทงหมดจะกอใหเกดองคความรแกผเรยน ทหลากหลาย รวมทงมคาถามทายบท เพอใหผเรยนสามารถเรยนรทบทวนและทดสอบองคความรทได เรยนผานมา ผจดทาขอขอบพระคณทกทานทมสวนรวม ไมวาจะทางตรงหรอทางออมตอการจดทาเอกสารประกอบการสอนในครงนใหลลวงสาเรจไปดวยด และหากเอกสารประกอบการสอนเลมนผดพลาดประการใดผจดทาขอนอมรบไวเพอแกไขตอไปในโอกาสตอไป
วทรย คงผล มถนายน 2555
(2)
สารบญ
หนา
คานา (1) สารบญ (2) สารบญภาพ (6) สารบญตาราง (8) แผนการบรหารการสอนประจาบทท 1 1 บทท 1 ภาษาคอมพวเตอรและการพฒนาโปรแกรมคอมพวเตอร 3
1.1 ภาษาคอมพวเตอร 3 1.1.1 ภาษาเครอง (Machine language) 3 1.1.2 ภาษาแอสแซมบล (Assembly language) 4 1.1.3 ภาษาปาสคาล (Pascal language) 4 1.1.4 ภาษาซ (C language) 5 1.1.5 ภาษาเบสค (Basic language) 5 1.1.6 ภาษาจาวา (Java language) 6 1.1.7 ภาษา เอช ท เอม แอล (HTML language) 7 1.1.8 ภาษา พ เอช พ (PHP language) 7
1.2 ระดบของภาษาคอมพวเตอร 8 1.2.1 ภาษาระดบตา (Low level language) 8 1.2.2 ภาษาระดบสง (High level language) 8
1.3 การพฒนาโปรแกรมคอมพวเตอร 9
1.3.1 ขนการวเคราะหปญหา (Program Analysis) 10
1.3.2 ขนการออกแบบโปรแกรม (Program Design) 11 1.3.3 ขนการเขยนโปรแกรม (Program Coding) 11 1.3.4 การทดสอบโปรแกรม (Program Testing) 12 1.3.5 ขนการจดทาคมอโปรแกรม (Program Manual) 12
สรปทายบท 14 คาถามทบทวน 14
แผนการบรหารการสอนประจาบทท 2 16 บทท 2 การออกแบบการทางานโปรแกรมคอมพวเตอร 17
2.1 รหสจาลอง (Pseudo code) 17 2.2 ผงงาน (Flowchart) 20
2.2.1 ประโยชนของผงงาน 20
(3)
สารบญ (ตอ)
หนา
2.2.2 วธการเขยนผงงานทด 20 2.2.3 สญลกษณผงงาน (Flowchart) 20 2.2.4 ลกษณะรปแบบของผงงาน 21
สรปทายบท 30 คาถามทบทวน 30
แผนการบรหารการสอนประจาบทท 3 32 บทท 3 ความเปนมาของภาษาซและการใชงานโปรแกรมภาษาซ 33
3.1 ประวตภาษาซ 33 3.2 ววฒนาการของภาษาซ 34 3.3 จดเดนของภาษาซ 35 3.4 การใชงานโปรแกรมภาษาซดวยโปรแกรม Turbo 35
3.4.1 การใชงานโปรแกรม Turbo C เบองตน 36 1.) การเปดใชงานโปรแกรม 36 2.) การสรางหนาตางโปรแกรมภาษาซใหม 37 3.) การปอนคาสงภาษาซ 38 4.) การจดเกบโปรแกรมทพฒนาขน 38 5.) การแปลภาษาซหรอการคอมไพลโปรแกรม 39 6.) การสงใหโปรแกรมทางานหรอการทดสอบการทางานของโปรแกรม 40
สรปทายบท 41 คาถามทบทวน 41
แผนการบรหารการสอนประจาบทท 4 43 บทท 4 โครงสรางพนฐานของภาษาซ 44
4.1 หวฟงกชน 45 4.2 ฟงกชนหลก 45 4.3 ชดคาสง 45 4.4 การอธบายโปรแกรม 45 4.5 คาสงวน 47 4.6 ตวดาเนนการ 47 สรปทายบท 51 คาถามทบทวน 52
(4)
สารบญ (ตอ)
หนา
แผนการบรหารการสอนประจาบทท 5 53 บทท 5 ชนดขอมลและการประกาศตวแปรในภาษาซ 54
5.1 ชนดขอมล 54 5.2 ตวแปร 55 5.3 กฎของการตงชอตวแปรในภาษาซ 55 5.4 รปแบบการประกาศตวแปรในภาษาซ 55 5.5 การแปลงชนดขอมลของภาษาซ 57 สรปทายบท 57 คาถามทบทวน 59
แผนการบรหารการสอนประจาบทท 6 60 บทท 6 ขนตอนการพฒนาโปรแกรมและคาสงการทางานของภาษาซ 61
6.1 ขนตอนการพฒนาโปรแกรมของภาษาซ 61 6.2 คาสงการทางานของภาษาซ 63
6.2.1 คาสง printf 63 6.2.2 คาสง putchar 69 6.2.3 คาสง puts 70 6.2.4 คาสง scanf 71 6.2.5 คาสง getchar 73 6.2.6 คาสง getch 74 6.2.7 คาสง clrscr 75 6.2.8 คาสง goto 76
สรปทายบท 77 คาถามทบทวน 78
แผนการบรหารการสอนประจาบทท 7 80 บทท 7 โครงสรางการควบคมการทางานแบบทางเลอก 81
7.1 คาสง if 81 7.1.1 คาสง if แบบเลอกทาทางเดยว (if) 81 7.1.2 คาสง if แบบเลอกทาสองทาง (if… else) 85 7.1.3 คาสง if แบบเลอกทาหลายทาง (if… else if) 91
7.2 คาสง switch 97 สรปทายบท 103
(5)
สารบญ (ตอ)
หนา
คาถามทบทวน 103
แผนการบรหารการสอนประจาบทท 8 105 บทท 8 โครงสรางการควบคมการทางานแบบวนรอบ 106
8.1 คาสง for loop 106 8.2 คาสง while loop 112 8.3 คาสง do while 116 สรปทายบท 119 คาถามทบทวน 119
แผนการบรหารการสอนประจาบทท 9 121 บทท 9 ตวแปรชนดอารเรย 122
9.1 ตวแปรอารเรยแบบ 1 มต 122 9.2 ตวแปรอารเรยแบบ 2 มต 129 สรปทายบท 136 คาถามทบทวน 138
แผนการบรหารการสอนประจาบทท 10 139 บทท 10 ฟงกชนและการสรางฟงกชนในภาษาซ 140
10.1 ฟงกชนมาตรฐานในภาษาซ 140 10.2 ฟงกชนทผพฒนาโปรแกรมสรางขน 141 สรปทายบท 147 คาถามทบทวน 148
(6)
สารบญภาพ
ภาพท หนา
1.1 ตวอยางชดคาสงภาษาเครอง 3 1.2 ตวอยางชดคาสงภาษาแอสแซมบล 3 1.3 ตวอยางชดคาสงภาษาปาสคาล 3 1.4 ตวอยางชดคาสงภาษาซ 5 1.5 ตวอยางชดคาสงภาษาเบสค 6 1.6 ตวอยางชดคาสงภาษาจาวา 6 1.7 ตวอยางชดคาสงภาษา HTML 7 1.8 ตวอยางชดคาสงภาษา PHP 8 1.9 โฟรชารจแสดงขนตอนการพฒนาโปรแกรมคอมพวเตอร 9 1.10 โฟรชารจแสดงขนตอนการวเคราะหปญหาในการพฒนาโปรแกรมคอมพวเตอร 10 2.1 ลกษณะรปแบบทวไปของการออกแบบรหสจาลอง 17 2.2 รปแบบผงงานแบบลาดบ 21 2.3 ผงงานแบบทางเลอกแบบ 1 เสนทาง 22 2.4 ผงงานแบบทางเลอกแบบ 2 เสนทาง 23 2.5 ผงงานแบบทางเลอกแบบหลายเสนทาง 24 2.6 แสดงการออกแบบผงงานในการทางานของโปรแกรมการบวกเลข 25 2.7 แสดงการออกแบบผงงานโดยมเงอนไขเปรยบเทยบแบบสองทาง 26 2.8 แสดงการออกแบบผงงานโดยมเงอนไขเปรยบเทยบแบบหลายทาง 27 2.9 แสดงการออกแบบผงงานการทางานของโปรแกรมในการตดเกรดนกศกษา 28 2.10 แสดงการออกแบบผงงานโดยมเงอนไขในการวนวปกบไปทางานซา 29 3.1 เดนนส รดช (Dennis Ritche) ผพฒนาภาษาซ 34 3.2 แสดงหนาหลกโปรแกรม Turbo C++ เวอรชน 4.5 36 3.3 แสดงการสรางหนาตาโปรแกรมภาษาซ 37 3.4 แสดงการสรางหนาตาง Editor Screen 37 3.5 แสดงการปอนคาสงภาษาซลงในโปรแกรม Turbo C++ 4.5 38 3.6 แสดงการจดเกบโปรแกรมทพฒนาขนจากโปรแกรม Turbo C++ 4.5 38 3.7 แสดงการแปลภาษาซหรอการคอมไพลจากโปรแกรม Turbo C++ 4.5 39 3.8 แสดงการทดสอบการทางานของโปรแกรม 40 3.9 แสดงผลลพธของโปรแกรม 40 4.1 โครงสรางพนฐานของภาษาซ 44 6.1 ผงงานแสดงขนตอนการพฒนาโปรแกรมภาษาซ 61 7.1 ผงงานแสดงการทางานของคาสง if แบบเลอกทาทางเดยว 82 7.2 ผงงานแสดงการทางานของคาสง if แบบเลอกทาสองทาง 86
(7)
สารบญภาพ (ตอ)
ภาพท หนา
7.3 ผงงานแสดงการทางานของคาสง if แบบเลอกทาหลายทาง 92 7.4 ผงงานแสดงการทางานของคาสง switch 98 8.1 ผงงานแสดงการทางานของคาสง for loop 107 8.2 ผงงานแสดงการทางานของคาสง while loop 112 8.3 ผงงานแสดงการทางานของคาสง do while 116
(8)
สารบญตาราง
ตารางท หนา
2.1 แสดงสญลกษณผงงาน 20 4.1 ตวอยางโปรเซสเซอรไดเรกทฟทมการใชงาน 45 4.2 แสดงตวดาเนนการคณตศาสตร 47 4.3 แสดงตวดาเนนการความสมพนธ 48 4.4 แสดงตวดาเนนการเชงตรรกะ 48 4.5 แสดงตวดาเนนการเพมคาและลดคา 48 4.6 แสดงตวดาเนนการบตไวส 49 4.7 แสดงตวดาเนนการกาหนดคา 49 4.8 แสดงลาดบการทางานของตวดาเนนการในภาษาซ 50 5.1 ชนดขอมลในภาษาซ 54 5.2 การแปลงชนดขอมลของภาษาซ 57 6.1 รหสควบคมรปแบบการแสดงผลคาของตวแปรออกทางหนาจอ 63 6.2 การจดระแบบระเบยบขอความดวยอกขระควบคมการแสดงผล 63 10.1 ตวอยางฟงกชนมาตรฐานในภาษาซ 140
1
บทท 1
ภาษาคอมพวเตอรและการพฒนาโปรแกรมคอมพวเตอร
แผนการสอนประจาบท หวขอเนอหา 1.1 ภาษาคอมพวเตอร
1.1.1 ภาษาเครอง (Machine language) 1.1.2 ภาษาแอสแซมบล (Assembly language) 1.1.3 ภาษาปาสคาล (Pascal language) 1.1.4 ภาษาซ (C language) 1.1.5 ภาษาเบสค (Basic language) 1.1.6 ภาษาจาวา (Java language) 1.1.7 ภาษา เอช ท เอม แอล (HTML language) 1.1.8 ภาษา พ เอช พ (PHP language)
1.2 ระดบของภาษาคอมพวเตอร 1.2.1 ภาษาระดบตา (Low level language) 1.2.2 ภาษาระดบสง (High level language)
1.3 การพฒนาโปรแกรมคอมพวเตอร 1.3.1 ขนการวเคราะหปญหา (Program Analysis) 1.3.2 ขนการออกแบบโปรแกรม (Program Design) 1.3.3 ขนการเขยนโปรแกรม (Program Coding) 1.3.4 การทดสอบโปรแกรม (Program Testing) 1.3.5 ขนการจดทาคมอโปรแกรม (Program Manual)
วตถประสงคเชงพฤตกรรม 1. ผเรยนสามารถอธบายและเขาใจภาษาคอมพวเตอรทมใชงานอยในปจจบนได 2. ผเรยนสามารถเขาใจและอธบายระดบของภาษาคอมพวเตอรในระดบตาง ๆ ได 3. ผเรยนสามารถเขาใจขบวนการการพฒนาโปรแกรมคอมพวเตอรในแตละขนตอนได วธการสอน 1. สอนแบบบรรยายโดยใชเอกสารประกอบการสอน 2. สอนแบบบรรยายโดยใช Slide Power Point
3. สอนโดยใหผเรยนเปนสวนกลาง โดยใชวธถามตอบกบผเรยนระหวางบรรยาย 4. ใหผเรยนสรปและอธบายหวขอทผเรยนทไดรบมอบหมาย
2
สอการเรยนการสอน 1. เอกสารประกอบการสอน
2. Slide Power Point 3. ตวอยางโปรแกรมหรอบทความ
การวดผลและประเมนผล 1. การทาแบบฝกหด
2. ความตงใจในชนเรยนและการรวมมอในการนาเสนอหรออภปราย 3. สงเกตจากการตอบคาถามและการรวมทากจกรรมในชนเรยน
3
บทท 1
ภาษาคอมพวเตอรและการพฒนาโปรแกรมคอมพวเตอร
ในปจจบนคอมพวเตอรมบทบาทอยางยงในการพฒนางานดานตาง ๆ ไมวาจะเปนงานทางดาน การจดการเอกสาร งานทางดานกราฟฟก งานทางดานการเกบฐานขอมล หรองานทางดานการพฒนาโปรแกรมในระบบมอถอหรอแทปเลต จากตวอยางทไดกลาวมาขางตนถอไดวาคอมพวเตอรมบทบาทอยางยงในการพฒนางานตาง ๆ ทไดกลาวมา และทสาคญอยางยงทจะทาใหงานดานตาง ๆ สาเรจนนกคอ “โปรแกรมคอมพวเตอร” โดยจะเหนไดวาในปจจบนโปรแกรมคอมพวเตอรมอยอยางมากมายหลากหลายโปรแกรม จนอาจจะกลาวไดวามโปรแกรมคอมพวเตอรทมใชอยในปจจบนมมากมายจนไมสามารถนบไดทงหมด
ดงนนสงสาคญในการพฒนาโปรแกรมคอมพวเตอรขนมานนกคอ “ภาษาคอมพวเตอร” ภาษาคอมพวเตอรถอไดวาเปนหวใจหลกในการสรางโปรแกรมคอมพวเตอรทมอยในปจจบนนขนมา โดยภาษาคอมพวเตอรทมอยในปจจบนมอยมากมายมายหลายภาษา สามารถนามาพฒนาโปรแกรมคอมพวเตอรไดอยางหลากหลายรปแบบ ไมวาจะเปนการพฒนาโปรแกรมบนเครองคอมพวเตอร การพฒนาโปรแกรมบนระบบเซรฟเวอร หรอการพฒนาโปรแกรมบนโทรศพทมอถอหรอแทปแลต เปนตน
1.1 ภาษาคอมพวเตอร 1.1.1 ภาษาเครอง (Machine language)
ภาษาเครองเปนภาษาของเครองคอมพวเตอร โดยเครองคอมพวเตอรจะสามารถทางานไดตองเปนภาษาเครองเทานน ในงานทางคอมพวเตอรทวไปจะไมเขยนเปนภาษาเครอง เพราะเครองคอมพวเตอรแตละเครองจะมลกษณะแตกตางกนไป ภาษาเครองจะใชสาหรบผททาหนาททางานเกยวกบระบบชดคาสง เวลาเขยนตองเขยนในรปของเลขฐานสอง เมอเขยนเสรจตองคดกลบมาเปนตวเลขฐานสบ หรอเปนตวอกษร หรอพยญชนะตางๆ ทจะใหเครองรบกลบเขาไปเปนเลขฐานสอง พรอมกบประกอบเปนคาสงและรวมกนเปนชดคาสง การเขยนชดคาสงภาษาเครองไมจาเปนตองใชตวแปลชดคาสงหรอชดคาสงควบคมในชวงการทางาน
ภาพท 1.1 ตวอยางชดคาสงภาษาเครอง (ทมา http://disinfo.s3.amazonaws.com/wp-content/uploads/2013/03/binary-code.jpg)
4
1.1.2 ภาษาแอสแซมบล (Assembly language) ภาษาแอสแซมบลหรอหลายคนอาจเรยกวา ภาษาแอสแซมเบลอร โดยภาษา
แอสแซมเบลอรเปนภาษาทเขยนเปนตวพยญชนะและตวเลขฐานสบ เชนเดยวกบภาษาเครอง ตางกนตรงทวาภาษาแอสแซมเบลอรเขยนเปนตวอกษรโดยไมคานงวาเลขฐานสองเปนอยางไร เมอถงเวลาทางานยงตองใชชดคาสงควบคมเขาชวยอกดวย เมอเขยนชดคาสงภาษาแอสแซมเบลอรเสรจจะไดชดคาสงทเรยกวา ชดคาสงเรมตน ซงจะตองมลกษณะทตวแปลชดคาสงภาษาแอสเซมเบลอรจะรบไดเมอเอาชดคาสงเรมตนเขาเครองคอมพวเตอร ตวแปลชดคาสงภาษาแอสแซมเบลอรจะแปลชดคาสงภาษาแอสแซมเบลอรเปนชดคาสงภาษาเครองตอไป
ภาพท 1.2 ตวอยางชดคาสงภาษาแอสแซมบล (ทมา http://www.johnloomis.org/ece314/notes/carch/img357.gif)
1.1.3 ภาษาปาสคาล (Pascal language)
ภาษาปาสคาลสรางขนเพอใชพฒนาโปรแกรมคอมพวเตอรใหเปนระบบ โดยจะชวยใหเขยนโปรแกรมไดรวดเรวเปนระบบมากยงขนและสามารถแกไขปรบปรงไดงาย ทงนภาษาปาสคาลเปนภาษาทงายตอการเขาใจเพราะมรปแบบเปนภาษาองกฤษ และในการประมวลผลขอมลสามารถออกแบบคาสงใหมคณสมบตทแตกตางกนไดหลายชนด ทาใหการทางานของโปรแกรมมประสทธภาพทด สามารถนามาพฒนาโปรแกรมคอมพวเตอรในงานดานตาง ๆ ได คอ งานทางดานธรกจ งานทางดานคณตศาสตร หรองานวทยาศาสตร เปนตน
ภาพท 1.3 ตวอยางชดคาสงภาษาปาสคาล (ทมา http://www.cathedron.com/Content/Afbeeldingen/Cat_Pascal_Script.gif)
5
1.1.4 ภาษาซ (C language) ภาษาซจดเปนภาษาทมลกษณะเปนภาษาโครงสราง สามารถประยกตใชไดกบ
งานในลกษณะตางๆ ไดหลากหลาย เชน ใชพฒนางานดานโปรแกรมคอมพวเตอร หรอนาไปใชพฒนาโปรแกรมทางดานไมโครคอนโทรลเลอร เปนตน และภาษาซเปนภาษาทใกลเคยงกบภาษามนษย คอมโครงสรางภาษาเปนภาษาองกฤษซงงายตอการเขาใจ โดยนกพฒนาโปรแกรมจะสามารถเขยนโปรแกรมไดอยางคลองตวโดยไมมขอจากดในการวางตาแหนงฟงกชนในโปรแกรม ภาษาซจงเปนภาษาทงายตอการเขาใจและเปนภาษาทนยมนาไปใชงานในการพฒนาโปรแกรมตาง ๆ การสรางโปรแกรมภาษาซจะเรมจากการเขยนโปรแกรมตนกาเนด แลวนาไปทาการแปลดวยตวแปลภาษาซเกดเปนโปรแกรมประสงค หลงจากนนจงนาโปรแกรมประสงคไปทาการเชอมโยง เพอใหเกดเปนโปรแกรมทาการทสามารถทางานไดอยางรวดเรว ดงนนภาษาซอาจจะถอไดวาเปนภาษาหนงทผเรมตนในการพฒนาโปรแกรมคอมพวเตอรควรเรยนรเปนพนฐานหลกในการเขยนโปรแกรมขนพน ทงนภาษาซจะเปนภาษาโครงสรางพนฐานของภาษาอนๆ เชน ภาษา Java หรอภาษา PHP เปนตน
ภาพท 1.4 ตวอยางชดคาสงภาษาซ (ทมา http://www.mathworks.com/help/matlab/matlab_external/msvs_breakpoint.gif)
1.1.5 ภาษาเบสค (Basic language)
ภาษาเบสคเปนภาษาทมโครงสรางทไมซบซอน งายตอการศกษาและทาความ
เขาใจเหมาะสาหรบ และเหมาะสาหรบผทเรมตนเขยนโปรแกรมเชนเดยวกบภาษาซ ภาษาเบสคใชไดกบ
คอมพวเตอรทกรนและเปนภาษาทมความยดหยน สามารถแกไขปรบปรง และพฒนาโปรแกรมเพอนาไปใช
งานไดงายและรวดเรว และเหมาะสมกบงานทตองการผลลพธอนรวดเรว โดยภาษาเบสคมชอเรยกตาง ๆ
กน เชน QBASIC , BASICA, GWBASIC , VISUAL BASIC เปนตน
6
ภาพท 1.5 ตวอยางชดคาสงภาษาเบสค
1.1.6 ภาษาจาวา (Java language) ภาษาจาวาปจจบนนถอไดวาเปนภาษาทไดรบความนยมสง เนองจากเปนภาษาท
มความยดหยนสง สามารถเขยนโปรแกรมและใชงานไดบนเครองคอมพวเตอรทกประเภท และระบบปฏบตการทกรปแบบ ในชวงแรกทเรมมการนาภาษาจาวามาใชงานจะเปนการใชงานบนเครอขายอนเทอรเนตเปนภาษาทเนนการทางานบนเวบ แตปจจบนสามารถสามารถนามาประยกตสรางโปรแกรมใชงานทวไปได นอกจากนเมอเทคโนโลยของการสอสารกาวหนาขน เชน โทรศพทมอถอ หรอแทบแลต ภาษาจาวาถอเปนภาษาหลกภาษาหนงในการพฒนาโปรแกรมบนโทรศพทมอถอหรอแทบแลต ทงนภาษาจาวาจะมโครงสรางภาษาใกลเคยงกบภาษาซ
ภาพท 1.6 ตวอยางชดคาสงภาษาจาวา (ทมา https://netbeans.org/images_www/articles/70/java/javase-jdk7/converted.png)
7
1.1.7 ภาษา เอช ท เอม แอล (HTML language) ภาษา HTML เปนภาษาคอมพวเตอรทใชในการแสดงผลของเอกสารบนเวบไซค
หรอทเรยกกนวาเวบเพจ ภาษา HTML เปนภาษาทสาหรบการสรางหรอพฒนาเวบไซค โดยใชภาษา HTML สามารถพฒนาไดโดยใชโปรแกรม Text Editor ตางๆ เชน Notepad, Editplus หรอจะอาศยโปรแกรมทเปนเครองมอชวยสรางเวบไซค เชน Microsoft FrontPage, Dream Weaver ซงอานวยความสะดวกในการสรางหนา HTML สวนการเรยกใชงานหรอทดสอบการทางานของเอกสาร HTML จะใชโปรแกรมเวบเบราเซอร เชน Microsoft Internet Explorer , Mozilla Firefox, Safari, Opera, และ Netscape Navigator เปนตน
ภาพท 1.7 ตวอยางชดคาสงภาษา HTML (ทมา http://akorra.com/wp-content/uploads/2011/07/HTML.png)
1.1.8 ภาษา พ เอช พ (PHP language)
ภาษาพเอชพเปนภาษาทเกบอยในไฟลทเรยกวาสครปต (script) และเวลาใชงานตองอาศยตวแปลชดคาสง ตวอยางของภาษาสครป เชน JavaScript, Perl เปนตน ลกษณะของภาษาพเอชพทแตกตางจากภาษาสครปตแบบอน ๆ คอ ภาษาพเอชพไดรบการพฒนาและออกแบบมา เพอใชงานในการสรางเอกสารแบบ HTML โดยสามารถสอดแทรกหรอแกไขเนอหาไดโดยอตโนมต ดงนนภาษาพเอชพถอไดวาเปนเครองมอทสาคญชนดหนง ทชวยใหเราสามารถสรางเอกสารในรปแบบ HTML ไดอยาง มประสทธภาพและมลกเลนตาง ๆ มากยงขน
8
ภาพท 1.8 ตวอยางชดคาสงภาษา PHP (ทมา http://akorra.com/wp-content/uploads/2011/85/PHP.png)
1.2 ระดบของภาษาคอมพวเตอร
จากภาษาคอมพวเตอรท ไดยกตวอย างไวขางตน เปนแคสวนหน ง เทานนของภาษาคอมพวเตอรทมการใชงานอยในปจจบน ทงนยงมภาษาคอมพวเตอรอกมากมายทมใชงานอย และจากการยกตวอยางของภาษาคอมพวเตอรจะสงเกตไดวาแตละภาษาคอมพวเตอรจะมหนาทการทางานทมความโดดเดนแตกตาง ๆ กนไป ท งน ย งมส งหน งทผพฒนาโปรแกรมควรทราบคอ ระดบของภาษาคอมพวเตอร โดยระดบของภาษาคอมพวเตอรสามารถแบงออกเปนกวาง ๆ ไดเปน 2 ระดบ ดงน 1.2.1 ภาษาระดบตา (Low level language) ภาษาระดบตาจะเปนภาษาทใชเลขฐานสองแทนขอมล และคาสงตาง ๆ ทงหมดจะเปนภาษาทขนอยกบชนดของเครองคอมพวเตอร หรอหนวยประมวลผลทใช นนคอแตละเครองกจะมรปแบบของคาสงเฉพาะของตนเอง ซงนกคานวณและนกเขยนโปรแกรมในสมยกอนตองรจกวธทจะรวมตวเลขเพอแทนคาสงตาง ๆ ทาใหการเขยนโปรแกรมยงยากมาก ตวอยางของภาษาระดบตานนก คอ ภาษาเครอง (Machine language) และภาษาแอสแซมบล (Assembly language) นนเอง
1.2.2 ภาษาระดบสง (High level language) ภาษาระดบสงเปนภาษาททาความเขาใจไดไมยากสามารถเขาใจคาสงโปรแกรมไดงาย โดยคาสงการทางานมลกษณะเหมอนภาษาองกฤษ สามารถสอความหมายในการเขยนโปรแกรมหรอคาสงไดงายและสะดวกตอการใชงานหรอแกไขคาสงการของโปรแกรม ปจจบนเปนทนยมอยางมากในการพฒนาโปรแกรมคอมพวเตอร ตวอยางของภาษาระดบสง เชน ภาษาปาสคาล ภาษาซ ภาษาเบสก ภาษาจาวา ภาษา HTML ภาษา PHP เปนตน
9
1.3 การพฒนาโปรแกรมคอมพวเตอร ในการพฒนาโปรแกรมคอมพวเตอรผพฒนาโปรแกรมคอมพวเตอรควรมขนตอนใน การพฒนาโปรแกรมคอมพวเตอรใหถกตองตามขบวนการ ทงนจะสงผลใหการพฒนาโปรแกรมคอมพวเตอรเกดขอผดพลาดนอยทสดในการพฒนาโปรแกรมคอมพวเตอรในแตละครง และสงสาคญจะทาใหผพฒนาเขาใจระบบหรอรปแบบของโปรแกรมคอมพวเตอรทจะทาการพฒนาขนทงหมด และจะทาใหผพฒนาไดเหนถงปญหาหรอจดบกพรองในการพฒนาโปรแกรมคอมพวเตอรไดในระดบ สผลใหผพฒนาสามารถแกไขปญหาดงกลาวไดทนถวงท โดยขนตอนของการพฒนาโปรแกรมคอมพวเตอร มขนตอนของการพฒนาการพฒนาโปรแกรมคอมพวเตอรดงขนตอนตอไปน 1.การวเคราะหปญหา (Program Analysis) 2.การออกแบบโปรแกรม (Program Design) 3.การเขยนโปรแกรม (Program Coding) 4.การทดสอบโปรแกรม (Program Testing) และ 5.การจดทาคมอโปรแกรม (Program Manual)
ภาพท 1.9 โฟรชารจแสดงขนตอนการพฒนาโปรแกรมคอมพวเตอร
วเคราะหปญหา (Program Analysis)
ออกแบบโปรแกรม (Program Design)
เขยนโปรแกรม (Program Coding)
ทดสอบโปรแกรม (Program Testing)
จดทาคมอโปรแกรม (Program Manual)
เรมตน
จบการทางาน
10
1.3.1 ขนการวเคราะหปญหา (Program Analysis) การวเคราะหปญหาในขนตอนนจะเปนขนตอนแรกสดทผพฒนาโปรแกรม
จะตองลงมอทากอนทจะเขยนโปรแกรมจรง ๆ เพอทาความเขาใจกบปญหาทเกดขนและคนหาจดมงหมายหรอสงทตองการวเคราะหปญหา ทงนผพฒนาโปรแกรมจะตองทาความเขาใจกบปญหา โดยสามารถกาหนดใหไดวาปญหาหรอโจทยคออะไร โจทยทตองการตองการอะไร ทาอยางไรจงจะแกปญหานนได เพอใหได ผลลพธ หรอคาตอบทผพฒนาโปรแกรมตองการ ผพฒนาโปรแกรมจะตองทาความเขาใจเกยวกบองคประกอบอย 3 องคประกอบ ทจะชวยในการวเคราะหปญหา ไดแก
1.2.1.1 การระบขอมลเขา (Input Specification) ผพฒนาโปรแกรมตองรวา มขอมลอะไรทจะตองปอนเขาสคอมพวเตอรพรอมกบโปรแกรม เพอใหโปรแกรมทา การประมวลผลและออกผลลพธ
1.2.1.2 การระบขอมลออก (Output Specification) ผพฒนาโปรแกรม จะพจารณาวางานททา มเปาหมายหรอวตถประสงคอะไร ตองหารผลลพธทมรปรางหนาตาเปนอยางไร โดยจะตองคานงถงผใหงานโปรแกรมเปนหลกในการออกแบบ
1.2.1.3 กาหนดวธการประมวลผล (Process Specification) ผพฒนาโปรแกรมตองรวธการประมวลผลเพอใหไดผลลพธตามตองการ ซงจะเปนวธใดนนจะตองทดลองผดลองถกไปเรอย ๆ จนกวาจะไดวธการประมวลผลโปรแกรมทสมบรณหรอดทสด
ภาพท 1.10 โฟรชารจแสดงขนตอนการวเคราะหปญหาในการพฒนาโปรแกรมคอมพวเตอร
ขอมลเขา
ประมวลผล
ผลลพธ
เรมตน
จบการทางาน
11
1.3.2 ขนการออกแบบโปรแกรม (Program Design) หลงจากขนตอนการวเคราะหปญหาแลว ขนตอนถดไปคอการออกแบบโปรแกรม
โดยใชเครองมอมาชวยในการออกแบบ ขนตอนนยงไมไดเปนการเขยนโปรแกรมจรง ๆ แตจะชวยใหการเขยนโปรแกรมทาไดงายยงขน โดยผพฒนาโปรแกรมสามารถเขยนตามขนตอนทไดออกแบบไวในขนตอนน และยงจะชวยใหการเขยนโปรแกรมมขอผดพลาดนอยลง นอกจากนยงชวยในการตรวจสอบการทางานของโปรแกรม ทาใหทราบขนตอนการทางานไดอยางรวดเรว โดยไมตองไปไลดจากตวโปรแกรมจรง ๆ ดงนน ในขนตอนการออกแบบโปรแกรมนเปนการออกแบบการทางานของโปรแกรม หรอขนตอนในการทาปญหา ซงผพฒนาโปรแกรมตองมการออกแบบและสามารถเลอกใชเครองมอมาชวยในการออกแบบไดหลากหลาย ซงจะสงผลใหโปรแกรมทไดมประสทธภาพการทางานทด
1.3.2.1 อลกอรทม (Algorithm)
อลกอรทมเปนเครองมอทชวยในการออกแบบโปรแกรม โดยใชขอความทเปนภาษาพดในการอธบายทางานของโปรแกรมทเปนลาดบขนตอน ในการเขยนอลกอรทมนแมจะมความชดเจนอยแลว แตมจดออนอยทขอมลคาอธบายทจะตองอธบายใหกะทดรดเขาใจงาย และถาพฒนาโปรแกรมใชสานวนทอานยาก กอาจจะสงผลทาใหผทมาศกษาตอไมเขาใจขนตอนการทางานของโปรแกรมได ดงนนจงมการคดคนเครองมออน ๆ ทชวยในการออกแบบโปรแกรมแทนอลกอรทม อนไดแก ผงงาน รหสจาลอง แผนภมโครงสราง ฯลฯ
1.3.2.2 ผงงาน (Flowchart)
ผงงานเปนเครองมออกแบบหนงทใชรปภาพแสดงถงขนตอนการทางานของโปรแกรม หรอขนตอนในการแกปญหาทละขน และมเสนทแสดงทศทางการไหลของขอมลตงแตจดเรมตนจนกระทงไดผลลพธตามทตองการ ซงจะทาใหผทศกษาตอสามารถทาความเขาใจไดโดยงาย และผงงานถอไดวาเปนเครองหนงทไดรบความนยมมากในการออกแบบพฒนาโปรแกรมคอมพวเตอร
1.3.2.3 รหสจาลอง (Pseudo code)
รหสจาลองเปนเครองมอทใชขอความทเปนภาษาองกฤษหรอภาษาไทยในการแสดงขนตอนการทางานของโปรแกรม แตรหสจาลองจะมการใชคาเฉพาะ(reserve words) ทมอยในภาษาโปรแกรมมาชวยในการเขยน โดยโครงของรหสจาลองจะมสวนทคลายกบการเขยนโปรแกรมมาก ดงนนรหสจาลองจงเปนเครองมออกแบบหนงทนยมใชกนมากในการออกแบบพฒนาโปรแกรมเชนกน
1.3.3 ขนการเขยนโปรแกรม (Program Coding) หลงจากทผานขนตอนทสอง คอ การออกแบบโปรแกรมแลว ขนตอไปคอ
การเขยนโปรแกรมดวยภาษาคอมพวเตอร ในขนตอนนผพฒนาโปรแกรมจะตองนาเครองมอทถกสรางขนจากขนตอนการออกแบบมาแปลใหเปนโปรแกรมคอมพวเตอร ซงในการสรางโปรแกรมคอมพวเตอรนน ผพฒนาโปรแกรมสามารถเลอกใชภาษาไดหลายภาษา ตงแตภาษาระดบตา เชน ภาษาแอสเซมบล จนถงภาษาระดบสง เชน ภาษาเบสค ภาษาซ ภาษาจาวา เปนตน ทงนการเลอกใชงานโปรแกรมใดในการออกแบบพฒนาโปรแกรม ผพฒนาโปรแกรมตองคานงถงคณสมบตของโปรแกรมทนามาใช วามคณสมบตการทางานสอดคลองกบงานทผพฒนาโปรแกรมตองการหรอไม และแตละภาษากจะมรปแบบโครงสราง หรอไวยากรณของภาษาทแตกตางกนออกไป
12
ดงนนการเขยนโปรแกรมทดนน ผพฒนาโปรแกรมควรจะตองทาตามขนตอน คอเรมตงแตวเคราะหปญหาใหไดกอน แลวทาการออกแบบโปรแกรมแลวจงจะเรมเขยนโปรแกรม ซงในการเขยนโปรแกรมนนสาหรบผทยงไมมประสบการณการเขยนโปรแกรมทเพยงพอ กควรจะทดลองเขยนลงในกระดาษกอน แลวตรวจสอบจนแนใจวาสามารถทางานไดแลวจงทาการปอนเขาสเครองคอมพวเตอร เพอเปนการประหยดเวลาและทาใหสามารถทางานไดเรวขน
1.3.4 การทดสอบโปรแกรม (Program Testing) ในบางครงโปรแกรมอาจผานการแปล โดยไมมขอผดพลาดใด ๆ แจงออกมา แต
เมอนาโปรแกรมนนไปใชงานปรากฏวาไดผลลพธทไมเปนจรง เนองจากอาจเกดขอผดพลาดแบบ Logicl Error ขนได ดงนนผพฒนาโปรแกรมจงควรจะตองมขนตอนการทดสอบความถกตองของโปรแกรมกอนนาไปใชงานจรง ในการทดสอบความถกตองของโปรแกรมจะมอยหลายวธดงตอไปน
1.) การใสขอมลทถกตอง (valid case) เปนการทดสอบโดยเมอมการรนโปรแกรม โดยผพฒนาโปรแกรมทาการใสขอมลทถกตองลงไปในโปรแกรม และดวาผลลพธทไดจากโปรแกรมถกตองตามความเปนจรงหรอตรงกบทตองการหรอไม
2.) การใชของเขตและความถกตองของขอมล (Range check and Completeness check) เปนการทดสอบโดยตรวจสอบขอบเขตของขอมลทปอนเขาสโปรแกรม เชน ถาโปรแกรมใหมการปอนวนท กจะตองตรวจสอบวาวนททปอนจะไมเกนวนท 31 ถาผใชปอนวนททเปนเลข 32 โปรแกรมจะตองไมยอมใหปอนวนทนได หรอการตรวจสอบความสมบรณของขอมล เชน การรบขอมลทเปน วน/เดอน/ป กจะตองใสเปนตวเลข 6 ตวในลกษณะ dd/mm/yy ถาใสนอยกวา 6 ตวโปรแกรมจะตองไมรบหรอฟองแจงเตอนผใชงานได
3.) การใชความสมเหตสมผล (Consistency Check) ตวอยางเชน ถาโปรแกรมมการออกแบบใหผใชปอนขอมลลงไปในฟอรมทมขอมลแบงเปนเพศหญงและเพศชาย ดงนนรายละเอยดสวนตวของแตละเพศจะตองมสวนทแตกตางกนในบางสวน เชนในสวนวนหยดกรณลาคลอด จะตองมเฉพาะเพศหญง แตในเพศชายไมควรจะมวนหยดกรณลาคลอด เปนตน
4.) ขอมลทเปนตวเลขและตวอกษร (Correct No. and Type character check) เปนการตรวจสอบวาถาโปรแกรมใหผปอนขอมลในฟลดทตองรบขอมลทเปนตวเลขอยางเชน ฟลดทเปนจานวนเงน โดยโปรแกรมควรจะยอมใหผใชปอนขอมลไดเฉพาะตวเลขเทานน ไมอนญาตใหใสตวอกษรในฟลดนนได หรอถาเปนฟลดทรบขอมลทเปนตวอกษรเชน ฟลดชอนามสกล กจะปอนไดเฉพาะตวอกษรเทานน และจะปอนตวเลขไมได เปนตน
5.) ขอมลเปนไปตามขอกาหนด (Existence Check) คอขอมลทปอนในฟลดตองเปนไปตามทกาหนดไวแนนอนแลวเทานน เชน กาหนดใหฟลดนปอนขอมลไดเฉพาะตวเลขทอยในกลม 1,2,5,7 ไดเทานน จะปอนเปนตวเลขอนทไมอยในกลมนไมได
1.3.5 ขนการจดทาคมอโปรแกรม (Program Manual)
ขนการจดทาคมอโปรแกรม หมายถง เอกสารตาง ๆ ทใชกากบอธบายโปรแกรมและชวยใหผใชโปรแกรมทา งานไดสะดวกขน เชน คมอปฏบตงานเครอง (Operation Manual) คมอผใช (User manual) ปจจบนเอกสารประกอบโปรแกรม มอยในหลายสอ เชน มอยในซอฟตแวรไดแก คา อธบาย (Help function) โปรแกรมสาธต (Demo program) เปนตน การทา เอกสารประกอบโปรแกรม คอการอธบายรายละเอยดของโปรแกรมวา จดประสงคของโปรแกรมคออะไร สามารถทา อะไร
13
ไดบาง และมขนตอนการทางานของโปรแกรมเปนอยางไร เปนตน เครองมอทชวยในการออกแบบโปรแกรม เชน ผงงานหรอรหสจาลอง สามารถนามาประกอบกนเปนเอกสารประกอบโปรแกรมได โดยผพฒนาโปรแกรมคอมพวเตอรทด ควรจะมการทาเอกสารประกอบโปรแกรมทกขนตอนของการพฒนาโปรแกรมไมวาจะเปนขนตอนการออกแบบ การเขยนโปรแกรม หรอขนตอนการทดสอบโปรแกรม ซงการทา เอกสารนจะมประโยชนอยางมากตอหนวยงาน เนองจากบางครงอาจตองการเปลยนแปลงแกไขโปรแกรมทไดมการทา เสรจไปนานแลว เพอใหตรงกบความตองการทเปลยนไป จะทา ใหเขาใจโปรแกรมไดงายขนและจะเปนการสะดวกตอผทตองเขามารบชวงงานตอทหลง โดยเอกสารประกอบโปรแกรมโดยทวไปจะมอยดวยกน 2 แบบ คอ
1.) เอกสารประกอบโปรแกรมสาหรบผใช (User Documentation) เหมาะสาหรบผใชทไมตองเกยวของกบการพฒนาโปรแกรม แตเปนผท
ใชงานโปรแกรมอยางเดยว จะเนนการอธบายเกยวกบการใชงานโปรแกรมเปนหลก ตวอยางเชน - โปรแกรมนทา อะไร ใชงานในดานไหน - ขอมลเขามลกษณะอยางไร - ขอมลออกหรอผลลพธมลกษณะอยางไร - การเรยกใชโปรแกรมทา อยางไร - คา สง หรอขอมล ทจา เปนใหโปรแกรมเรมงานมอะไรบาง - อธบายเกยวกบประสทธภาพ และความสามารถของโปรแกรม
2 . ) เอกสารประกอบโปรแกรมส าหรบผ เ ข ยนโปรแกรม (Technical Documentation) โดยสามารถแบงไดออกเปน 2 สวน คอ
- สวนทเปนคาอธบายหรอคอมมนท ซงสวนใหญผพฒนาโปรแกรมคอมพวเตอรมกจะเขยนแทรกอยในโปรแกรมอธบายการทางานของโปรแกรมเปนสวน ๆ เพอใหสามารถอธบายหลกการทางานของโปรแกรมในสวนนน ๆ
- สวนอธบายดานเทคนค ซงสวนนผพฒนาโปรแกรมคอมพวเตอรมกจะจดทาเปนเอกสารโดยจะอธบายในรายละเอยดทมากขน เชน ชอโปรแกรมยอยตางๆ มอะไรบาง แตละโปรแกรมยอยทา หนาทอะไร และคา อธบายยอๆ เกยวกบวตถประสงคของโปรแกรม เปนตน
14
สรปทายบท
โปรแกรมคอมพวเตอรในปจจบนและอนาคตมบทบาทอยางยงในการสรางพฒนางานดานตาง ๆ ไมวาจะเปนงานทางดาน การจดการเอกสาร งานทางดานกราฟฟก งานทางดานการเกบฐานขอมล หรองานทางดานการพฒนาโปรแกรมในระบบมอถอหรอแทปเลต ดงนนสงสาคญในการพฒนาโปรแกรมคอมพวเตอรขนมานนกคอ “ภาษาคอมพวเตอร” ภาษาคอมพวเตอรถอไดวาเปนหวใจหลกในการสรางโปรแกรมคอมพวเตอรทมอยในปจจบนนขนมา โดยภาษาคอมพวเตอรทมอยในปจจบนมอยมากมายมายหลายภาษา สามารถนามาพฒนาโปรแกรมคอมพวเตอรไดอยางหลากหลายรปแบบ ไมวาจะเปนการพฒนาโปรแกรมบนเครองคอมพวเตอร การพฒนาโปรแกรมบนระบบเซรฟเวอร หรอการพฒนาโปรแกรมบนโทรศพทมอถอหรอแทปแลต เปนตน ทงนยงมสงหนงทผพฒนาโปรแกรมควรทราบคอ ระดบของภาษาคอมพวเตอร โดยระดบของภาษาคอมพวเตอรสามารถแบงออกเปนกวาง ๆ ไดเปน 2 ระดบ ดงนภาษาระดบตา (Low level language) คอ ภาษาเครอง และภาษาแอสแซมบล และภาษาระดบสง (High level language) เชน ภาษาปาสคาล ภาษาซ ภาษาเบสก ภาษาจาวา ภาษา HTML ภาษา PHP เปนตน และสงสาคญอกประการ คอ ขนตอนของการพฒนาโปรแกรมคอมพวเตอร ซงขนตอนของ การพฒนาการพฒนาโปรแกรมคอมพวเตอรมขนตอนทควรปฏบต 5 ขนตอนดงน 1.การวเคราะหปญหา (Program Analysis) 2.การออกแบบโปรแกรม (Program Design) 3.การเขยนโปรแกรม (Program Coding) 4.การทดสอบโปรแกรม (Program Testing) และ 5.การจดทาคมอโปรแกรม (Program Manual)
คาถามทบทวน
1. ภาษาคอมพวเตอรสามารถแบงออกเปนกระดบอะไรบาง พรอมทงอธบายลกษณะในแตระดบ 2. ขอแตกตางของภาษาคอมพวเตอรแตละระดบมขอแตกตางกนอยางไรจงอธบาย 3. จงอธบายคณสมบตของภาษาคอมพวเตอรดงกลาวนวามคณสมบตอยางไร และภาษาคอมพวเตอรดงกลาวนาไปพฒนางานในดานใด 3.1 ภาษาเครอง 3.2 ภาษาภาษาแอสแซมบล 3.3 ภาษาซ 3.4 ภาษาเบสค 3.5 ภาษาจาวา 3.6 ภาษา PHP 4. ขนตอนของการพฒนาโปรแกรมคอมพวเตอรมขนตอนการพฒนากขนตอน และจงอธบายคณสมบตในแตละขนตอนวามหนาทอยางไร 5. ถาผพฒนาคอมพวเตอรไดมการพฒนาโปรแกรม แตผพฒนาขาดการวเคราะหปญหา และขาดการจดทาคมอโปรแกรม หากขาดขนตอนดงกลาวจะสงผลอยางไรตอการพฒนาโปรแกรมจงอธบาย
15
เอกสารอางอง
คะชา ชาญศลป. (2548). ภาษาซสาหรบผเรมตน. กรงเทพมหานคร: วรตนเอดดเคชน. ธรวฒน ประกอบผล. (2553). คมอการเขยนโปรแกรมภาษา C. กรงเทพมหานคร: ซมพลฟลาย. สระสทธ ทรงมา และภรพจน แกวยอง. (2552). การโปรแกรมคอมพวเตอร.: มหาวทยาลยราชภฏ
สวนดสต. อรพน ประวตบรสทธ. (2554). คมอการเรยนภาษา C ฉบบปรบปรงใหม (พมพครงท 10).
กรงเทพมหานคร: โปรวชน. http://www.bcoms.net/php/php01.asp http:/www.thaigoodview.com/library/contest2552/type2/tech04/22/cit/3_2.html http://www.cptd.chandra.ac.th/selfstud/it4life/sub%20soft3.htm http://www.ns2.spw.ac.th/poo/computer54/m354/lesson/lesson_1.html
16
บทท 2
การออกแบบการทางานโปรแกรมคอมพวเตอร
แผนการสอนประจาบท หวขอเนอหา 2.1 รหสจาลอง (Pseudo code)
2.2 ผงงาน (Flowchart) 2.2.1 ประโยชนของผงงาน 2.2.2 วธการเขยนผงงานทด 2.2.3 สญลกษณผงงาน (Flowchart) 2.2.4 ลกษณะรปแบบของผงงาน
วตถประสงคเชงพฤตกรรม 1. ผเรยนสามารถเขาใจและสามารถออกแบบรหสจาลอง (Pseudo code) เพอการพฒนาโปรแกรมคอมพวเตอรได 2. ผเรยนสามารถเขาใจและสามารถออกแบบผงงาน (Flowchart) เพอการพฒนาโปรแกรมคอมพวเตอรได 3. ผเรยนสามารถวเคราะหและประยกตรหสจาลอง (Pseudo code) และผงงาน (Flowchart) เพอการพฒนาโปรแกรมในรปแบบตาง ๆ ได วธการสอน 1. สอนแบบบรรยายโดยใชเอกสารประกอบการสอน 2. สอนแบบบรรยายโดยใช Slide Power Point
3. สอนโดยใหผเรยนเปนสวนกลาง โดยใชวธถามตอบกบผเรยนระหวางบรรยาย และใชวธการลงปฏบตการทาตามโจทยคาสงดวยตนเอง
4. ใหผเรยนสรปและอธบายหวขอทผเรยนทไดรบมอบหมาย สอการเรยนการสอน 1. เอกสารประกอบการสอน
2. Slide Power Point 3. ตวอยางโจทยคาสง
การวดผลและประเมนผล 1. การทาตามตวอยางโจทยคาสงและการทาแบบฝกหด
2. ความตงใจในชนเรยนและการรวมมอในการนาเสนอหรออภปราย 3. สงเกตจากการตอบคาถามและการรวมทากจกรรมในชนเรยน
17
บทท 2
การออกแบบการทางานโปรแกรมคอมพวเตอร
ในการพฒนาโปรแกรมคอมพวเตอรใหสามารถทางานไดอยางถกตองแมนยาและมขอผดพลาดของ
การทางานนอยทสดนน ผพฒนาโปรแกรมคอมพวเตอรจาเปนตองมหลกในการเขยนโปรแกรม โดยอาจจะ
ใชการเขยนอธบายขบบวนการทางานหรออลกอรทม (Algorithm) แบบงาย ๆ ขนมากอน หรอ
ผพฒนาโปรแกรมอาจจะใชการเขยนอธบายการทางานของโปรแกรมดวยผงงาน (Flowchart) หรอยงมอก
หนงวธคอการใชรหสจาลอง (Pseudo code) ซงวธการตาง ๆ เหลานจะเปนวธทจะใหผพฒนาสามารถ
มองเหนการทางานของโปรแกรมในภาพรวมทงหมดได และจะสามารถทาใหเราสามารถทราบถงปญหา
ตาง ๆ ทอาจจะเกดขนในการพฒนาโปรแกรมได
2.1 รหสจาลอง (Pseudo code) รหสจาลอง (Pseudo code) เปนการอธบายขนตอนการทางานของโปรแกรมคอมพวเตอร โดยใชคาผสมกนระหวางภาษาองกฤษและภาษาการเขยนโปรแกรมแบบโครงสราง หรอบางครงหากผพฒนาไมมความถนดดานภาษาองกฤษ ผพฒนาอาจจะใชภาษาไทยกไดเชนเดยวกน แตหากเปนไปไดควรใชหลกของภาษาองกฤษเพราะคาสงการทางานของโปรแกรมทงหมดเปนภาษาองกฤษ การเขยนเขยนรหสจาลอง (Pseudo code) ทดจะตองมความชดเจน สน กะทดรดเขาใจงาย และไดใจความ รปแบบทวไปของรหสจาลอง (Pseudo code)
ภาพท 2.1 ลกษณะรปแบบทวไปของการออกแบบรหสจาลอง
Algorithm <ชออลกอรทม> 1. ……………………………………………………………….. 2. ……………………………………………………………….. 3. ……………………………………………………………….. 4. ……………………………………………………………….. 5. ……………………………………………………………….. 6. ……………………………………………………………….. ……………………………………………………………….. ……………………………………………………………….. ……………………………………………………………….. ……………………………………………………………….. END
18
ตวอยางท 2.1 จงเขยนรหสจาลอง (Pseudo code) โดยรบคาจากผใชงาน 2 คา แลวนาคาทมา
ทาการบวกกนแลวแสดงคาตอบ
วธทา
จากตวอยางท 2.1 จะเหนวาหากผพฒนาไดเขยนรหสจาลอง (Pseudo code) เพอ
ออกแบบการทางานของโปรแกรม จะทาใหผพฒนาโปรแกรมเหนวาจะตองใชตวแปรใดบาง แลวมขนตอน
การทางานทงหมดของโปรแกรมอยางไร และหากลองเขยนใหเปนรปแบบภาษาองกฤษตามหลกการเขยน
โปรแกรมจะได ดงน
จากตวอยางขางตนในกรณทเราเขยนเปนรปแบบภาษาองกฤษจะทาใหผพฒนาเขาใจไดด
ยงขน เพราะวาเวลาเขยนโปรแกรมจะมรปแบบของคาสงใกลเคยงกบรปแบบทเราเขยนรหสจาลอง
(Pseudo code)
Algorithm < การบวกเลข > 1. ประกาศตวแปร 3 ตวแปร 2. รบคาจากผใชงานมาใสตวแปรท 1 3. รบคาจากผใชงานมาใสตวแปรท 2 4. ตวแปรท 3 = ตวแปรท 1 + ตวแปรท 2 5. แสดงผลตวแปรท 3 6. จบ
Algorithm < Sum > 1. int a,b,c 2. input a 3. input b 4. c = a + b 5. output c 6. END
19
ตวอยางท 2.2 จงเขยนรหสจาลอง (Pseudo code) โดยรบคาจากผใชงาน 2 คาแลวนาคาทงสอง
มาเปรยบกน โดยมเงอนไขวาถาคาใดมากกวาใหแสดงผลคานนออกทางจอใหผใชงานทราบ
วธทา
ตวอยางท 2.3 จงเขยนรหสจาลอง (Pseudo code) โดยรบคาจากผใชงาน 1 คาแลวนาคาทไดมาแสดงผลตามจานวนทผใชงานไดปอนเขามา ตวอยาง เชน หากผใชงานปอน 3 โปรแกรมจะแสดง 1 2 3
หากผใชงานปอน 8 โปรแกรมจะแสดง 1 2 3 4 5 6 7 8
วธทา
Algorithm < Compare > 1. int a,b 2. input a 3. input b 4. if a > b { 5. output a 6. } 7. if a < b { 8. output b 9. } 10 END
Algorithm < Compare > 1. int a , i = 1 2. input a 3. for 1 to a { 4. i = i +1 5. output i 6. } 7. END
20
2.2 ผงงาน (Flowchart) ผงงาน (Flowchart) คอ การเขยนแผนภาพทมการใชสญลกษณรปภาพและลกศรทแสดงถงขนตอนการทางานของโปรแกรมหรอระบบทละขนตอน รวมไปถงทศทางการไหลของขอมลตงแตแรกจนไดผลลพธตามทตองการ การเขยนผงงาน (Flowchart) เปนรปแบบการเขยนทนยมอยางมากในการออกแบบเพอพฒนางานทางดานโปรแกรม เพราะการเขยนผงงาน (Flowchart) ออกแบบงาย มความเขาใจงายและเปนสากล ทาใหบคคลอน ๆ ทมาศกษาสามารถเขาใจระบบงานทงหมดไดงายและตรงกน
2.2.1 ประโยชนของผงงาน 1.) ชวยลาดบขนตอนการทางานของโปรแกรม และสามารถนาไปเขยนโปรแกรม
ไดโดยไมสบสน 2.) ชวยในการตรวจสอบ และแกไขโปรแกรมไดงายเมอเกดขอผดพลาด 3.) ชวยใหการดดแปลง แกไข ทาไดอยางสะดวกและรวดเรว 4.) ชวยใหผอนสามารถศกษาการทางานของโปรแกรมไดอยางงายและรวดเรว
มากขน
2.2.2 วธการเขยนผงงานทด 1.) ใชสญลกษณตามทกาหนดไว 2.) ใชลกศรแสดงทศทางการไหลของขอมลจากบนลงลาง หรอจากซายไปขวา 3.) คาอธบายในภาพควรสนกะทดรด และเขาใจงาย 4.) ทกแผนภาพตองมลกศรแสดงทศทางเขา-ออก 5.) ไมควรโยงเสนเชอมผงงานทอยไกลมาก ๆ ควรใชสญลกษณจดเชอมตอแทน 6.) ผงงานควรมการทดสอบความถกตองของการทางานกอนนาไปเขยน
โปรแกรม
2.2.3 สญลกษณผงงาน (Flowchart) การเขยนผงงาน (Flowchart) จะประกอบไปดวยการใชสญลกษณมาตรฐาน
ตาง ๆ ทเรยกวา สญลกษณ ANSI ( American National Standards Institute ) ในการสรางผงงาน ตวอยางทแสดงในรปตอไปนเปนผงงาน (Flowchart) ทนยมใชกนมากในการออกแบบพฒนาโปรแกรมคอมพวเตอร
ตารางท 2.1 แสดงสญลกษณผงงาน
ลาดบ สญลกษณ คาอธบาย 1
เรมตน , สนสด
2
ใชรบคาขอมลหรอแสดงผลขอมล โดยไมระบชนดของอปกรณ
3
ใชในการประมวลผลการทางาน หรอ คานวณคาตาง ๆ
21
ตารางท 2.1 แสดงสญลกษณผงงาน (ตอ)
ลาดบ สญลกษณ คาอธบาย 4
ใชในการตรวจสอบเงอนไข
5
ลกศรแสดงทศทางการทางานของโปรแกรม
6
แสดงผลลพธหรอรายงานทางเครองพมพ
7
จดเชอมตอของผงงาน
2.2.4 ลกษณะรปแบบของผงงาน ลกษณะรปแบบของผงงานทใชงานในงานทว ๆ ไปจะมรปแบบทนยมใชงานกนอยหลายรปแบบ แตในการพฒนาโปรแกรมจะมรปแบบการเขยนผงงานอยไมกรปแบบ ซงรปแบบการเขยนผงงานในการพฒนาโปรแกรมโดยทวไปจะมอย 2 แบบดงน
1.) รปแบบผงงานแบบลาดบ 2.) รปแบบผงงานแบบทางเลอก
2.2.4.1 รปแบบผงงานแบบลาดบ
รปแบบผงงานแบบลาดบจะเปนรปแบบในลกษณะเรยงลาดบลงไป โดยจะไมมการขามขนหรอยอนกลบไปทางานในสวนอน ๆ โดยรปแบบผงงานแบบลาดบจะมรปแบบดงตวอยางตอไปน
ภาพท 2.2 รปแบบผงงานแบบลาดบ
ประมวลผล
เรมตน
จบการทางาน
แสดงผล
รบขอมล
22
2.2.4.2 รปแบบผงงานแบบทางเลอก รปแบบผงงานแบบทางเลอกจะเปนรปแบบการทางานทมรปแบบผงงานแบบ
ลาดบผสมรวมกบการตรวจสอบเงอนไขของโปรแกรม ทงนการสอบสอบเงอนไขการทางานของโปรแกรมเพอจะเปนการตรวจสอบทางเลอกใหกบการทางานของโปรแกรมวาโปรแกรมจะไปทางานทางทศทางใด โดยรปแบบผงงานแบบลาดบจะมรปแบบอย 3 กรณ ดงตวอยางตอไปน
1.) ผงงานแบบทางเลอกแบบ 1 เสนทาง
ผงงานแบบทางเลอกแบบ 1 เสนทางจะทางานเฉพาะเงอนไขทเปนจรงเทานน ดงตวอยาง ภาพท 2.3
ภาพท 2.3 ผงงานแบบทางเลอกแบบ 1 เสนทาง
เรมตน
ทาคาสง
รบขอมล
ตรวจสอบ เงอนไข
จรง
เทจ
23
2.) ผงงานแบบทางเลอกแบบ 2 เสนทาง ผงงานแบบทางเลอกแบบ 2 เสนทางจะทางานโดยพจารณาทงเงอนไขทเปนจรงและเปนเงอนไขท
เปนเทจ โดยคาสงการทางานจะมคาสงทแตกตางกนออกไปในแตละเงอนไข ดงตวอยางภาพท 2.4
ภาพท 2.4 ผงงานแบบทางเลอกแบบ 2 เสนทาง
เรมตน
รบขอมล
ทาคาสงท 1
ตรวจสอบ เงอนไข
ทาคาสงท 2
เทจ จรง
24
3.) ผงงานแบบทางเลอกแบบหลายเสนทาง ผงงานแบบทางเลอกแบบหลายเสนทางจะทางานโดยพจารณาทง
เงอนไขทเกดขนวาตรงกบเงอนไขใด ๆ โดยคาสงการทางานจะมคาสงทแตกตางกนออกไปในแตละเงอนไข ดงตวอยางภาพท 2.5
ภาพท 2.5 ผงงานแบบทางเลอกแบบหลายเสนทาง
เรมตน
รบขอมล
ทาคาสงท 1
ตรวจสอบ เงอนไข ( i )
ทาคาสงท 4 ทาคาสงท 2 ทาคาสงท 3
i = 1 i = 2 i = 3 i = 4
25
ตวอยางท 2.4 จงเขยนผงงาน (Flowchart) โดยรบคาจากผใชงาน 2 คา แลวนาคาทมาทา
การบวกกนแลวแสดงคาตอบ
วธทา
ภาพท 2.6 แสดงการออกแบบผงงานในการทางานของโปรแกรมการบวกเลข
จากตวอยางท 2.6 เปนการออกแบบผงงานในการทางานของโปรแกรมการบวกเลข จะสงเกตไดวาจากโจทยขอนจะมเงอนไขการตรวจสอบทงสน ดงนนการออกแบบผงงานในขอนจะมลกษณะของผงงานทเปนรปแบบผงงานแบบลาดบ
C = A + B
เรมตน
จบการทางาน
แสดงผล
รบขอมล A
ประกาศตวแปร A , B , C
รบขอมล B
26
ตวอยางท 2.5 จงเขยนผงงาน (Flowchart) โดยรบคาจากผใชงาน 2 คาแลวนาคาทงสองมา
เปรยบกน โดยมเงอนไขวาถาคาใดมากกวาใหแสดงผลคานนออกทางเครองพมพ
วธทา
ภาพท 2.7 แสดงการออกแบบผงงานโดยมเงอนไขเปรยบเทยบแบบสองทาง
เรมตน
จบการทางาน
รบขอมล A
ประกาศตวแปร A , B
รบขอมล B
ตรวจสอบ A > B
แสดงผลคาตวแปร B แสดงผลคาตวแปร A
จรง
เทจ
27
ตวอยางท 2.6 จงเขยนผงงาน (Flowchart) โดยรบคาจากผใชงาน 2 คาแลวนาคาทงสองมาเปรยบกน โดยมเงอนไขดงน ถาคาใดมากกวาใหแสดงผลคานนออกทางเครองพมพ แตถาคาทงสองเทากนใหแสดงคาวา “Equal” ออกทางเครองพมพ
วธทา
ภาพท 2.8 แสดงการออกแบบผงงานโดยมเงอนไขเปรยบเทยบแบบหลายทาง
เรมตน
จบการทางาน
รบขอมล A
ประกาศตวแปร A , B
รบขอมล B
ตรวจสอบ A > B
แสดงผลคาตวแปร B
แสดงผลคาตวแปร A
จรง
เทจ
ตรวจสอบ A < B
แสดงผลคาวา “Equal”
จรง
เทจ
28
ตวอยางท 2.7 จงเขยนผงงาน (Flowchart) โดยรบคาคะแนนจากนกศกษา แลวนาคาทนกศกษาไดปอนมาทาตดเกรด โดยมเงอนไขของคาคะแนนเกรดดงน
1.) คาคะแนน 90 – 100 เกรด A 2.) คาคะแนน 80 – 89 เกรด B
3.) คาคะแนน 60 – 79 เกรด C 4.) คาคะแนน 50 – 59 เกรด D 5.) คาคะแนนตากวา 50 เกรด F
วธทา
ภาพท 2.9 แสดงการออกแบบผงงานการทางานของโปรแกรมในการตดเกรดนกศกษา
เรมตน
จบการทางาน
ประกาศตวแปร Y
รบคาคะแนน Y
เกรด A Y >= 90 จรง
เทจ
เกรด B Y >= 80 จรง
เทจ
เกรด C Y >= 60 จรง
เทจ
เกรด D Y >= 50 จรง
เทจ
เกรด F
29
ตวอยางท 2.8 จงเขยนผงงาน (Flowchart) โดยรบคาจากผใชงาน 1 คาแลวนาคาทไดมาแสดงผลตามจานวนทผใชงานไดปอนเขามา ตวอยาง เชน หากผใชงานปอน 5 โปรแกรมจะแสดง 0 1 2 3 4 5
หากผใชงานปอน 9 โปรแกรมจะแสดง 0 1 2 3 4 5 6 7 8 9 วธทา
ภาพท 2.10 แสดงการออกแบบผงงานโดยมเงอนไขในการวนวปกบไปทางานซา
เรมตน
จบการทางาน
รบขอมล a
ประกาศตวแปร a , i = 0
แสดงผลขอมล i
ตรวจสอบ i <= a
จรง
เทจ
i = i + 1
30
สรปทายบท
ในการพฒนาโปรแกรมคอมพวเตอรผพฒนาโปรแกรมคอมพวเตอรจาเปนจะตองมหลกใน การเขยนโปรแกรม โดยอาจจะใชการเขยนอธบายขบบวนการทางานหรออลกอรทม (Algorithm) แบบงาย ๆ หรอผพฒนาโปรแกรมอาจจะใชการเขยนอธบายการทางานของโปรแกรมดวยผงงาน (Flowchart) หรอยงมอกหนงวธคอการใชรหสจาลอง (Pseudo code) ซงวธการตาง ๆ เหลานจะเปนวธทจะใหผพฒนาสามารถมองเหนการทางานของโปรแกรมในภาพรวมทงหมดได และจะสามารถทาใหผพฒนาโปรแกรมสามารถทราบถงปญหาตาง ๆ ทอาจจะเกดขนในการพฒนาโปรแกรมได
รหสจาลอง (Pseudo code) เปนการอธบายขนตอนการทางานของโปรแกรมคอมพวเตอร โดยใชคาผสมกนระหวางภาษาองกฤษและภาษาการเขยนโปรแกรมแบบโครงสราง หรอบางครงหากผพฒนาไมมความถนดดานภาษาองกฤษ ผพฒนาอาจจะใชภาษาไทยกไดเชนเดยวกน แตหากเปนไปไดควรใชหลกของภาษาองกฤษเพราะคาสงการทางานของโปรแกรมทงหมดเปนภาษาองกฤษ การเขยนเขยนรหสจาลอง (Pseudo code) ทดจะตองมความชดเจน สน กะทดรดเขาใจงาย และไดใจความ
ผงงาน (Flowchart) คอ การเขยนแผนภาพทมการใชสญลกษณรปภาพและลกศรทแสดงถงขนตอนการทางานของโปรแกรมหรอระบบทละขนตอน รวมไปถงทศทางการไหลของขอมลตงแตแรกจนไดผลลพธตามทตองการ การเขยนผงงาน (Flowchart) เปนรปแบบการเขยนทนยมอยางมากในการออกแบบเพอพฒนางานทางดานโปรแกรม เพราะการเขยนผงงาน (Flowchart) ออกแบบงาย มความเขาใจงายและเปนสากล ทาใหบคคลอน ๆ ทมาศกษาสามารถเขาใจระบบงานทงหมดไดงายและตรงกน โดยลกษณะรปแบบของผงงานทใชงานในงานทว ๆ ไปจะมรปแบบทนยมใชงานกนอยหลายรปแบบ แตในการพฒนาโปรแกรมจะมรปแบบการเขยนผงงานอยไมกรปแบบ ซงรปแบบการเขยนผงงานในการพฒนาโปรแกรมโดยทวไปจะมอย 2 แบบ คอ รปแบบผงงานแบบลาดบ และรปแบบผงงานแบบทางเลอก โดยรปแบบ ผงงานแบบทางเลอก จะมทางเลอกอย 3 แบบ คอ ผงงานแบบทางเลอกแบบ 1 เสนทาง ผงงานแบบทางเลอกแบบ 2 เสนทาง และผงงานแบบทางเลอกแบบหลายเสนทาง คาถามทบทวน
1. จงอธบายคณสมบตของรหสจาลอง (Pseudo code) และผงงาน (Flowchart) 2. จงอธบายขอแตกตางของรหสจาลอง (Pseudo code) กบผงงาน (Flowchart) วามความแตกตางกนอยางไร 3. จงเขยนรหสจาลอง (Pseudo code) โดยรบคาจากผใชงาน 2 คา แลวนาคาทมาทาการคณกนแลวแสดงคาตอบ และนาคาตอบมาทาการหาคา หากมคาคาตอบมากกวา 100 ใหโปรแกรมแสดงคาวา “Big” แตถาคานอยกวาหรอเทากบ 100 ใหโปรแกรมแสดงคาวา “Small” 4. จงเขยนรหสจาลอง (Pseudo code) โดยรบคาจากผใชงาน 3 คาแลวนาคาทงสามมาเปรยบกน โดยมเงอนไขวาถาคาใดมคามากทสดใหแสดงผลคานนออกทางจอใหผใชงานทราบ 5. จงเขยนผงงาน (Flowchart) โดยรบคาจากผใชงาน 3 คาแลวนาคาทงสามมาเปรยบกน โดยมเงอนไขวาถาคาใดมคามากทสดใหแสดงผลคานนออกทางจอใหผใชงานทราบ
6. จงเขยนผงงาน (Flowchart) โดยรบคาจากผใชงาน 5 คาแลวหาคาเฉลย 7. จงเขยนผงงาน (Flowchart) โดยรบคาตวอกษรจากผใชงาน หากผใชงานปอน ‘A’ ให
โปรแกรมแสดงผลคาวา “good” และหากผใชงานปอน ‘Z’ ใหแสดงคาวา “bad” หากปอนคาอน ๆ ใหแสดงคาวา “Error”
31
เอกสารอางอง
คะชา ชาญศลป. (2548). ภาษาซสาหรบผเรมตน. กรงเทพมหานคร: วรตนเอดดเคชน. ประภาพร ชางไม. (2545). คมอการเขยนโปรแกรมภาษา C ฉบบผเรมตน. กรงเทพมหานคร:
อนโฟเพรส. ธรวฒน ประกอบผล. (2553). คมอการเขยนโปรแกรมภาษา C. กรงเทพมหานคร: ซมพลฟลาย. สระสทธ ทรงมา และภรพจน แกวยอง. (2552). การโปรแกรมคอมพวเตอร.: มหาวทยาลยราชภฏ
สวนดสต. สานนท เจรญฉาย. (2543). การเขยนโปรแกรมและอลกอรทม. กรงเทพมหานคร: มหาจฬาลงกรณราช
วทยาลย. http://www.bcoms.net/site/bit//lesson/2_1.html http:/www.thaigoodview.com/library/contest2552/type2/tech02.html http://www.cptd.chandra.ac.th/selfstud/it4life/sub%20soft1.htm http://ns2.spw.ac.th/poo/computer54/m354/lesson/lesson_2.html https://sites.google.com/site/bbmm2553/prawati-khwam-pen-ma-khxng-phasa-si.html http://boingboing.net/2011/10/12/dennis-ritchie-1941-2011creator-c-co-inventor.html http://images.samartj.multiply.multiplycontent.com
32
บทท 3
ความเปนมาของภาษาซและการใชงานโปรแกรมภาษาซ
แผนการสอนประจาบท หวขอเนอหา 3.1 ประวตภาษาซ
3.2 ววฒนาการของภาษาซ 3.3 จดเดนของภาษาซ 3.4 การใชงานโปรแกรมภาษาซดวยโปรแกรม Turbo
3.4.1 การเปดใชงานโปรแกรม 3.4.2 การสรางหนาตางโปรแกรมภาษาซใหม 3.4.3 การปอนคาสงภาษาซ 3.4.4 การจดเกบโปรแกรมทพฒนาขน 3.4.5 การแปลภาษาซหรอการคอมไพลโปรแกรม 3.4.6 การสงใหโปรแกรมทางานหรอการทดสอบการทางานของโปรแกรม
วตถประสงคเชงพฤตกรรม 1. ผเรยนสามารถอธบายประวตความเปนมาและววฒนาการของภาษาซได 2. ผเรยนสามารถอธบายและเขาใจถงจดเดนของภาษาซได 3. ผเรยนสามารถเขาใจสวนตาง ๆ ในการทางานของโปรแกรม Turbo C ได วธการสอน 1. สอนแบบบรรยายโดยใชเอกสารประกอบการสอน 2. สอนแบบบรรยายโดยใช Slide Power Point
3. สอนโดยใหผเรยนเปนสวนกลาง โดยใชวธถามตอบกบผเรยนระหวางบรรยาย 4. สอนโดยการลงปฏบตการใชงานโปรแกรม 5. ใหผเรยนสรปและอธบายหวขอทผเรยนทไดรบมอบหมาย
สอการเรยนการสอน 1. เอกสารประกอบการสอน
2. Slide Power Point 3. โปรแกรม Turbo C
การวดผลและประเมนผล 1. การทาตามตวอยางโจทยคาสง การทดลองใชโปรแกรม และการทาแบบฝกหด
2. ความตงใจในชนเรยน การตอบคาถาม และการรวมกจกรรมในชนเรยน
33
บทท 3
ความเปนมาของภาษาซและการใชงานโปรแกรมภาษาซ
ภาษาซ เปนภาษาคอมพวเตอรทใชในการการเขยนโปรแกรมตาง ๆ โดยผพฒนาโปรแกรมสามารถประยกตใชกบงานตาง ๆ ไดอยางมากมาย เชน ระบบปฏบตการคอมพวเตอรทางคณตศาสตร โปรแกรมทางระบบไฟฟา โปรแกรมทางระบบอเลกทรอนกส หรอไมโครคอนโทรลเลอร โปรแกรมทางดานระบบฐานขอมล เปนตน และภาษาซถอไดวาเปนรากฐานพนฐานทสาคญของภาษาอน ๆ ไมวาภาษา C++ ภาษาจาวา (Java) ภาษา PHP กใชโครงสรางคาสงแบบเดยวกนกบภาษาซ หรอแมกระทงระบบลนกซกถกพฒนามาจากระบบยนกซ ซงกเปนทรโดยทวไปวาระบบปฏบตการตระกลยนกซมการพฒนามาจากรากฐานของภาษาซ ภาษาซเปนภาษาระดบกลาง คอ ไมเปนภาษาระดบตาแบบภาษาเครอง หรอภาษาแอสเซมบล
เนองจากผพฒนาโปรแกรมสามารถจดการเกยวกบเรองของคาสงไดอยางสะดวกและอสระ และในบางครง
ผพฒนาโปรแกรมสามารถควบคมฮารดแวรผานทางภาษาซ ไดราวกบภาษาแอสเซมบล ดวยขอดตาง ๆ
ทหลากหลายทาใหโปรแกรมทถกเขยนดวยภาษาซมความเรวในการปฏบตงานสงกวาภาษาทว ๆ ไป
3.1 ประวตภาษาซ ภาษาซเปนภาษาทถกพฒนาโดยเดนนส รดช (Dennis Ritche) แหงหองทดลอง ทเมอรรฮล มลรฐนวเจอรซ โดยเดนนสไดใชหลกการของภาษาบซพแอล (BCPL : Basic Combine Programming Language) ซงพฒนาขนโดยเคน ทอมสน (Ken Tomson) การออกแบบและพฒนาภาษาซของเดนนส รดช มจดมงหมายใหเปนภาษาสาหรบใชเขยนโปรแกรมปฏบตการระบบยนกซ และไดตงชอวา ซ (C) เพราะเหนวา ซ (C) เปนตวอกษรตอจากบ (B) ของภาษา BCPL ภาษาซถอวาเปนภาษาระดบสงและภาษาระดบตา ทงนเพราะ ภาษาซมวธใชขอมลและมโครงสรางการควบคมการทางานของโปรแกรมเปนอยางเดยวกบภาษาของโปรแกรมระดบสงอน ๆ จงถอวาเปนภาษาระดบสง ในดานทถอวาภาษาซเปนภาษาระดบตา เพราะภาษาซมวธการเขาถงในระดบตาทสดของฮารดแวรความสามารถทงสองดานของภาษานเปนสงทเกอหนนซงกนและกน ความสามารถระดบตาทาใหภาษาซสามารถใชเฉพาะเครองได และความสามารถระดบสง ทาใหภาษาซเปนอสระจากฮารดแวร ภาษาซสามารถสรางรหสภาษาเครอง ซงตรงกบชนดของขอมลนนไดเอง ทาใหโปรแกรมทเขยนดวยภาษาซทเขยนบนเครองหนง สามารถนาไปใชกบอกเครองหนงได ประกอบกบการใชพอยนเตอรในภาษาซ นบไดวาเปนตวอยางทดของการเปนอสระจากฮารดแวร
34
ภาพท 3.1 เดนนส รดช (Dennis Ritche) ผพฒนาภาษาซ (ทมา http://media.boingboing.net/wp-content/uploads/2011/10/dennis_ritchie.jpg) 3.2 ววฒนาการของภาษาซ
- ค.ศ. 1970 มการพฒนาภาษา B โดย Ken Thompson ซงทางานบนเครอง DEC PDP-7 ซง ทางานบนเครองไมโครคอมพวเตอรไมได และยงมขอจากดในการใชงานอย (ภาษา B สบทอดมาจาก ภาษา BCPL ซงเขยนโดย Marth Richards)
- ค.ศ. 1972 Dennis M. Ritchie และ Ken Thompson ไดสรางภาษา C เพอเพมประสทธภาพ ภาษา B ใหดยงขน ในระยะแรกภาษา C ไมเปนทนยมแกนกโปรแกรมเมอรโดยทวไปนก
- ค.ศ. 1978 Brian W. Kernighan และ Dennis M. Ritchie ไดเขยนหนงสอเลมหนงชอวา The C Programming Language และหนงสอเลมนทาใหบคคลทวไปรจกและนยมใชภาษา C ในการเขยน โปรแกรมมากขน
- ค. ศ. 1981 แตเดมภาษา C ใช Run บนเครองคอมพวเตอร 8 bit ภายใตระบบปฏบตการ CP/M ของ IBM PC ซงในชวงป ค. ศ. 1981 เปนชวงของการพฒนาเครองไมโครคอมพวเตอร ภาษา C จงม บทบาทสาคญในการนามาใชบนเครอง PC ตงแตนนเปนตนมา และมการพฒนาตอมาอกหลาย ๆ คาย ดงนนเพอกาหนดทศทางการใชภาษา C ใหเปนไปแนวทางเดยวกน ANSI (American National Standard Institute) ไดกาหนดขอตกลงทเรยกวา 3J11 เพอสรางภาษา C มาตรฐานขนมา เรยนวา ANSI C
- ค.ศ. 1983 Bjarne Stroustrup แหงหองปฏบตการเบล (Bell Laboratories) ไดพฒนาภาษา C++ ขนรายละเอยดและความสามารถของ C++ มสวนขยายเพมจาก C ทสาคญ ๆ ไดแก แนวความคดของการเขยนโปรแกรมแบบกาหนดวตถเปาหมายหรอแบบ OOP (Object Oriented Programming) ซงเปนแนวการเขยนโปรแกรมทเหมาะกบการพฒนาโปรแกรมขนาดใหญทมความสลบซบซอนมาก มขอมลทใชในโปรแกรมจานวนมาก จงนยมใชเทคนคของการเขยนโปรแกรมแบบ OOP ในการพฒนาโปรแกรมขนาดใหญในปจจบนน
35
3.3 จดเดนของภาษาซ 3.3.1 ภาษาซเปนภาษาทมลกษณะเปนโครงสรางจงเขยนโปรแกรมงาย โปรแกรมทเขยนขนจะทางานไดอยางมประสทธภาพสง สงงานคอมพวเตอรไดรวดเรวกวาภาษาระดบสงอน ๆ
3.3.2. ภาษาซเปนภาษาทสามารถสงงานอปกรณระบบคอมพวเตอรไดเกอบทกภาคสวนของฮารดแวร ซงภาษาระดบระดบสงในภาษาอนทางานดงกลาวไดนอยกวา
3.3.3 คอมไพเลอรภาษาซทกโปรแกรมจะทางานอางองมาตรฐาน ANSI (American National Standards Institute) เกอบทงหมด จงทาใหโปรแกรมทเขยนขนดวยภาษาซสามารถนาไปใชกบคอมพวเตอรไดทกรนทมาตรฐาน ANSI รบรอง
3.3.4 โปรแกรมทเขยนขนดวยภาษาซสามารถนาไปใชกบเครองคอมพวเตอรทใชซพย ตางเบอรกนได หรอกลาวไดวาโปรแกรมมความยดหยนสง
3.3.5 ภาษาซสามารถนาไปใชในการเขยนโปรแกรมประยกตไดหลายระดบ เชน การเขยนโปรแกรมจดระบบงาน (OS) คอมไพเลอรของภาษาอน โปรแกรมสอสารขอมลโปรแกรม จดฐานขอมล โปรแกรมปญญาประดษฐ รวมท ง โปรแกรมคานวณงานทางดานวทยาศาสตร และวศวกรรมศาสตร เปนตน
3.3.6 ภาษาซมโปรแกรมชวย (tool box) ทชวยในการเขยนโปรแกรมมาก และราคา ไมแพงหาซอไดงาย เชน vitanin c หรออน ๆ
3.3.7 ภาษาซสามารถประกาศขอมลไดหลายชนดและหลายรปแบบ ทาใหสะดวกรวดเรวตอการพฒนาโปรแกรมตามวตถประสงคของผใช
3.3.8 ภาษาซสามารถประยกตใชในงานสอสารขอมล และงานควบคมทตองการความแมนยาในเรองเวลา (real time application) ไดดกวาภาษาระดบสงอน ๆ หลาย ๆ ภาษา
3.3.9 ภาษาซสามารถเขยนโปรแกรมดวยเทคนคแบบโอโอพ OOP (Object Oriented Programming) ไดหากใชภาษาซรน Turbo C++ ขนไป ทาใหสามารถพฒนาโปรแกรมประยกตเพอใชงานไดกวางขวางมากยงขนกวาเดม 3.4 การใชงานโปรแกรมภาษาซ ในการพฒนาโปรแกรมภาษาซผพฒนาโปรแกรมจะตองมโปรแกรมทใชในการเขยนและคอมไพ (Compile) ภาษาซขนมากอน จงจะสามารถพฒนาโปรแกรมตาง ๆ ขนทตองมาได โดยโปรแกรมทใชในการเขยนและคอมไพเลอร (Compile) ภาษาซมหลายโปรแกรมดวยกน เชน Borland C หรออาจจะเรยกวา Turbo C , Dev C++ , Visual C++ เปนตน ดงนนในการเลอกใชงานวาผพฒนาโปรแกรมจะใชงานตวใดนน ตองจะคานงถงงานทผพฒนาโปรแกรมตองการวาจะใหงานออกมาในรปแบบใด แตสาหรบผทตองการศกษาภาษาเบองตน ควรใชโปรแกรม Turbo C กอนเนองจากโปรแกรม Turbo C จดเปนโปรแกรมทใชงานงาย สะดวก และทสาคญจะเปนโปรแกรมพนฐานสดในการทดลองคาสงของภาษาซ
36
3.4.1 การใชงานโปรแกรม Turbo C เบองตน ในการใชงานโปรแกรม Turbo C ในการทดลองคาสงภาษาซครงน จะเลอกใช
งานโปรแกรม Turbo C++ เวอรชน 4.5 ซงผลตโดยบรษท Borland เปนซอฟตแวรทมหนาททสาคญหลายประการ ดงน
1.) ใชในการสรางและแกไขโปรแกรมภาษาซ (Create, Edit) 2.) ใชในการแปลภาษาซเปนภาษาเครอง (Compiler) 3.) ใชในการทดสอบการทางานของโปรแกรม (Run) 4.) ใชในการตรวจสอบจดบกพรองของโปรแกรม การใชงานโปรแกรม Turbo C++ 4.5 มการใชงานทงายไมซบซอน โดยการใช
งานโปรแกรม Turbo C++ 4.5 มสวนทสาคญของโปรแกรมดงน 1.) การเปดใชงานโปรแกรม Turbo C++ 4.5
หลงจากการทผใชงานไดทาการตดตงโปรแกรม Turbo C++ 4.5 ดงนนผใชงานสามารถเรยกใชงาน Turbo C++ 4.5 ขนมาได โดยการเขาไปท Start --> Programs --> Turbo
C++ 4.5 --> Turbo C++ จากนนโปรแกรมจะแสดงโปรแกรม Turbo C++ 4.5 ดงภาพท 3.2
ภาพท 3.2 แสดงหนาหลกโปรแกรม Turbo C++ เวอรชน 4.5 (ทมา http://abarm2007.blogspot.com/2011/01/turbo-c-45.html)
- Editor Screen คอหนาจอสาหรบสรางหรอแกไขโปรแกรมภาษาซ โดยผใชงานโปรแกรมม
หนาทในการสรางโปรแกรมในหนาจอน หรอนาโปรแกรมทเคยสรางไวเรยกคนมาแกไข - เมน ประกอบดวยเมนหลกและเมนยอย มไวสาหรบสงปฏบตงานใด ๆ กบโปรแกรมภาษาซใน
จอภาพ Editor Screen เชน Compile, Run หรอ Debug
37
2.) การสรางหนาตางโปรแกรมภาษาซใหมในโปรแกรม Turbo C++ 4.5 การสรางหนาตาโปรแกรมภาษาซใหมนนจะใชเมน File -> New
ดงภาพท 3.3 และจากนนโปรแกรมจะแสดงหนาตา Editor Screen ขนมาใหมเพอใชในการเขยนโปรแกรม
ดงภาพท 3.4
ภาพท 3.3 แสดงการสรางหนาตาโปรแกรมภาษาซ (ทมา http://abarm2007.blogspot.com/2011/01/turbo-c-45.html)
ภาพท 3.4 แสดงการสรางหนาตาง Editor Screen (ทมา http://abarm2007.blogspot.com/2011/01/turbo-c-45.html)
38
3.) การปอนคาสงภาษาซลงในโปรแกรม Turbo C++ 4.5 การปอนคาสงภาษาซลงในโปรแกรม Turbo C++ 4.5 สามารถทาได
โดยการพมพคาสงตาง ๆ ของภาษาซลงไปในหนาตาง Editor Screen ดงภาพท 3.5 ทงนคาสงทพมพลงไป
จะตองถกหลกไวยากรณของคาสงของภาษาซทไดมกาหนดเอาไว
ภาพท 3.5 แสดงการปอนคาสงภาษาซลงในโปรแกรม Turbo C++ 4.5 (ทมา http://abarm2007.blogspot.com/2011/01/turbo-c-45.html)
4.) การจดเกบโปรแกรมทพฒนาขนจากโปรแกรม Turbo C++ 4.5
ในการจดเกบโปรแกรมทสรางหรอพฒนาขน ผใชงานสามารถสามารถ
ทาขนเพอจดเกบโปรแกรมไวสาหรบการนากลบมาใชงานอกครงในภายหลง ซงขบวนการจดเกบจะมความ
คลายกบการจดเกบเอกสารตาง ๆ โดยการจดเกบโปรแกรมทพฒนาขนจากโปรแกรม Turbo C++ 4.5
สามารถทาไดโดยการไปทใชเมน File -> Save ดงภาพท 3.6
ภาพท 3.6 แสดงการจดเกบโปรแกรมทพฒนาขนจากโปรแกรม Turbo C++ 4.5 (ทมา http://abarm2007.blogspot.com/2011/01/turbo-c-45.html)
39
5.) การแปลภาษาซหรอการคอมไพลโปรแกรม การแปลภาษาซหรอการคอมไพล (Compile) คอการตรวจสอบ
โปรแกรมทเขยนขนถกตองตามหลกไวยากรณของคาสงของภาษาซหรอไม หรอกลาวอกนยหนงวาการ
คอมไพลในภาษาซ คอ การแปลโปรแกรมภาษาซใหเปนภาษาเครอง หากแปลไดหมดกสามารถสงให
โปรแกรมทางานได แตหากแปลไมไดกจะแจงขอผดพลาดใหทราบ ผเรยกคอมไพลกตองแกไขโปรแกรม
ภาษาซใหถกตองเสยกอนจงเรยกคอมไพลใหม โดยการแปลภาษาซหรอการคอมไพล (Compile)
จากโปรแกรม Turbo C++ 4.5 สามารถทาไดโดยการไปทใชเมน Project -> Compile ดงภาพท 3.7
ภาพท 3.7 แสดงการแปลภาษาซหรอการคอมไพลจากโปรแกรม Turbo C++ 4.5 (ทมา http://abarm2007.blogspot.com/2011/01/turbo-c-45.html)
40
6.) การสงใหโปรแกรมทางานหรอการทดสอบการทางานของโปรแกรม การสงใหโปรแกรมทางานหรอการทดสอบการทางานของโปรแกรม หรอหลายคนนยมเรยกวาการรนโปนแกรม (RUN) ซงการ Run โปรแกรม คอ การสงใหโปรแกรมทางานตามขนตอนทกาหนดในโปรแกรมภาษาซทเขยนขน การ Run โปรแกรมจากโปรแกรม Turbo C++ 4.5 ทาไดโดยเลอกเมน Debug ->Run ดงภาพท 3.8 หลงจากสงใหโปรแกรมทางานแลวผลลพธของโปรแกรมจะปรากฏในจอภาพอกจอภาพหนง โดยจอภาพดงกลาวชอวา User Screen ดงภาพท 3.9
ภาพท 3.8 แสดงการทดสอบการทางานของโปรแกรม (ทมา http://abarm2007.blogspot.com/2011/01/turbo-c-45.html)
ภาพท 3.9 แสดงผลลพธของโปรแกรม (ทมา http://abarm2007.blogspot.com/2011/01/turbo-c-45.html)
41
สรปทายบท
ภาษาซเปนภาษาคอมพวเตอรทใชในการการเขยนโปรแกรมตาง ๆ โดยผพฒนาโปรแกรมสามารถประยกตใชกบงานตาง ๆ ไดอยางมากมาย เชน ระบบปฏบตการคอมพวเตอรทางคณตศาสตร โปรแกรมทางระบบไฟฟา โปรแกรมทางระบบอเลกทรอนกส หรอไมโครคอนโทรลเลอร โปรแกรมทางดานระบบฐานขอมล เปนตน และภาษาซถอไดวาเปนรากฐานพนฐานทสาคญของภาษาอน ๆ ไมวาภาษา C++ ภาษาจาวา ภาษา PHP กใชโครงสรางคาสงแบบเดยวกนกบภาษาซ หรอแมกระทงระบบลนกซกถกพฒนามาจากระบบยนกซ ซงกเปนทรโดยทวไปวาระบบปฏบตการตระกลยนกซมการพฒนามาจากรากฐานของภาษาซ ภาษาซเปนภาษาระดบกลาง คอ ไมเปนภาษาระดบตาแบบภาษาเครอง หรอภาษาแอสเซมบล เนองจากผพฒนาโปรแกรมสามารถจดการเกยวกบเรองของคาสงไดอยางสะดวกและอสระ และในบางครงผพฒนาโปรแกรมสามารถควบคมฮารดแวรผานทางภาษาซ ไดราวกบภาษาแอสเซมบล ดวยขอดตาง ๆ ทหลากหลายทาใหโปรแกรมทถกเขยนดวยภาษาซมความเรวในการปฏบตงานสงกวาภาษาคอมพวเตอรทวไป
จดเดนของภาษาซ เปนภาษาทมลกษณะเปนโครงสรางจงเขยนโปรแกรมงาย โปรแกรมทเขยนขนจะทางานไดอยางมประสทธภาพสง ภาษาซเปนภาษาทสามารถสงงานอปกรณระบบคอมพวเตอรไดเกอบทกภาคสวนของฮารดแวร คอมไพเลอรภาษาซทกโปรแกรมจะทางานอางองมาตรฐาน ANSI (American National Standards Institute) ภาษาซสามารถนาไปใชในการเขยนโปรแกรมประยกตไดหลายระดบ เชน การเขยนโปรแกรมจดระบบงาน (OS) คอมไพเลอรของภาษาอน โปรแกรมสอสารขอมลโปรแกรม จดฐานขอมล ภาษาซมโปรแกรมชวยทชวยในการเขยนโปรแกรมไดงายมากขนมาก ภาษาซสามารถประกาศขอมลไดหลายชนดและหลายรปแบบ ทาใหสะดวกรวดเรวตอการพฒนาโปรแกรมตามวตถประสงคของผใช ภาษาซสามารถประยกตใชในงานสอสารขอมล และงานควบคมทตองการความแมนยาในเรองเวลา ภาษาซสามารถเขยนโปรแกรมดวยเทคนคแบบโอโอพ OOP (Object Oriented Programming) ทาใหสามารถพฒนาโปรแกรมประยกตเพอใชงานไดกวางขวางมากยงขนกวาเดม
คาถามทบทวน
1. จงอธบายประวตความเปนมาของภาษาซมาใหเขาใจ 2. จงอธบายววฒนาการของภาษาซ 3. จงอธบายจดเดนของภาษาซ 4. จงอธบายเหตผลใดทผเรยนจงตองเลอกใชภาษาซในการพฒนาโปรแกรมคอมพวเตอร 5. จงอธบายการใชงานโปรแกรม Turbo C++ 4.5 มาใหพอสงเขป เอกสารอางอง
คะชา ชาญศลป. (2548). ภาษาซสาหรบผเรมตน. กรงเทพมหานคร: วรตนเอดดเคชน. ประภาพร ชางไม. (2545). คมอการเขยนโปรแกรมภาษา C ฉบบผเรมตน. กรงเทพมหานคร:
อนโฟเพรส. ธรวฒน ประกอบผล. (2553). คมอการเขยนโปรแกรมภาษา C. กรงเทพมหานคร: ซมพลฟลาย. สระสทธ ทรงมา และภรพจน แกวยอง. (2552). การโปรแกรมคอมพวเตอร.: มหาวทยาลยราชภฏ
สวนดสต.
42
อรพน ประวตบรสทธ. (2554). คมอการเรยนภาษา C ฉบบปรบปรงใหม (พมพครงท 10). กรงเทพมหานคร: โปรวชน.
https://www.sites.google.com/site/bbmm2553/prawati-khwam-pen-ma-khxng.html http://www.boingboing.net/2009/10/12/dennis-computer-scientist-unix-c-co-inventor.html http://www.images.samartj.multiply.multiplycontent.com/attachment1-08.html http://www.iam.hunsa.com/s505420123/article/22094.html http://www.media.boingboing.net/wp-content/uploads/2011/10/dennis_ritchie.jpg http://www.abarm2007.blogspot.com/2011/01/turbo-c-45.html
43
บทท 4
โครงสรางพนฐานของภาษาซ
แผนการสอนประจาบท หวขอเนอหา 4.1 หวฟงกชน
4.2 ฟงกชนหลก 4.3 ชดคาสง 4.4 การอธบายโปรแกรม 4.5 คาสงวน 4.6 ตวดาเนนการ
วตถประสงคเชงพฤตกรรม 1. ผเรยนสามารถทาความเขาใจและแยกแยะสวนตาง ๆ ของโครงสรางพนฐานของภาษาซได 2. ผเรยนสามารถอธบายและเขาใจตวดาเนนการในแตละประเภท และสามารถนาตวดาเนนการ
ในแตละประเภทไปใชงานไดถกตอง วธการสอน 1. สอนแบบบรรยายโดยใชเอกสารประกอบการสอน 2. สอนแบบบรรยายโดยใช Slide Power Point
3. สอนโดยใหผเรยนเปนสวนกลาง โดยใชวธถามตอบกบผเรยนระหวางบรรยาย 4. ใหผเรยนสรปและอธบายหวขอทผเรยนทไดรบมอบหมาย
สอการเรยนการสอน 1. เอกสารประกอบการสอน
2. Slide Power Point 3. ตวอยางแบบทดสอบ
การวดผลและประเมนผล 1. การทาแบบฝกหด
2. ความตงใจในชนเรยนและการรวมมอในการนาเสนอหรออภปราย 3. สงเกตจากการตอบคาถามและการรวมทากจกรรมในชนเรยน
44
บทท 4
โครงสรางพนฐานของภาษาซ
ภาษาคอมทกภาคจะตองมโครงสรางของภาษา เนองจากโครงสรางของภาษาคอมพวเตอรจะเปนรปแบบโครงรางในการเขยนโปรแกรมของภาษานน ๆ เชนเดยวกนกบภาษาซทจะตองมโครงสรางพนฐานในการพฒนาโปรแกรมหรอการเขยนโปรแกรม ขอดอกประการหนงของภาษาซ คอ ภาษาซเปนภาษาคอมพวเตอรภาษาหนงทมโครงสรางภาษาทเขาใจงาย และงายตอการเขยนโปรแกรม
ภาพท 4.1 โครงสรางพนฐานของภาษาซ
4.1 หวฟงกชน (สวนท 1) สวนหวของฟงกชนหรออาจจะเรยกวา พรโปรเซสเซอรไดเรกทฟ (Preprocessor directives) เปนสวนททกโปรแกรมตองมใชสาหรบเรยกไฟลทโปรแกรมตองการและกาหนดคาตาง ๆ ซงจะตองเรมตนดวยเครองหมายไดเรกทฟ (#) และตามดวยชอทตองการกาหนดคา ตวอยางไดเรกทฟทใชบอย คอ คาสง #include เปนการบอกใหตวแปลคาสง (compiler) อานไฟลอนเขามารวมในการคอมไพล
#include "stdio.h"
main() { Code Program_1;
Code Program_2; Code Program_3; /* comment */
}
สวนท 1
สวนท 2
สวนท 3
สวนท 4
45
ตารางท 4.1 ตวอยางโปรเซสเซอรไดเรกทฟทมการใชงาน
คาสง คาอธบาย #include Include text from a file #define Define a macro #undef Undefined a macro #if Test if a compile-time condition holed #ifdef Test if a symbol is defined #else Indicate alternative if a test file fail #line Give a line number for compiler message
4.2 ฟงกชนหลก (สวนท 2)
สวนของฟงกชนหลกหรอในหรอ main program เปนสวนทภาษาซทกโปรแกรมจะตองม เพราะจะเปนสวนทจะประกาศใหตวแปลคาสง (compiler) รวาคาสงขางในชดปกกา { } ของ main() เปนชดคาสงทเปนการทางานหลกของโปรแกรม
4.3 ชดคาสง (สวนท 3)
สวนของชดคาสงเปนสวนทผพฒนาโปรแกรมจะใชในการเขยนโปรแกรมตาง ๆ ลงไป ทงนในทก ๆ คาสงของภาษาซจะตองจบคาสงดวยเครองหมายเซมโคลอน (Semicolon)
4.4 การอธบายโปรแกรม (สวนท 4) สวนของการอธบายโปรแกรมหรอคอมเมนท (comment) เปนสวนทใชในการอธบายการทางานตาง ๆ ของผพฒนาทตองการขยายความ เพอสรางความเขาใจของตนหรอเพอใหผทมาศกษาตอสามารถเขาใจโปรแกรมในสวนทไดอธบายหรอคอมเมนทเอาไว ทงนการอธบายโปรแกรมหรอคอมเมนท (comment) จะไมผลใด ๆ ตอการทางานของโปรแกรม ซงการอธบายโปรแกรมหรอคอมเมนท (comment) ในภาษาซสามารถทาได 2 ลกษณะ ดงน 4.4.1 กรณอธบายโปรแกรมเพยง 1 บรรทด กรณผพฒนาโปรแกรมตองการอธบายโปรแกรมเพยง 1 บรรทด สามารถทาไดโดยการใสเครองหมาย // (2 อน) หลงจากเครองหมายดงกลาวกสามารถใสคาอธบายโปรแกรมไดทนท ดงตวอยาง
#include "stdio.h" main()
{ int i , a , b; // ประกาศตวแปรแบบ int printf (”witoon kongphon”); // คาสงแสดงผล
}
46
4.4.2 กรณอธบายโปรแกรมหลายบรรทด กรณผพฒนาโปรแกรมตองการอธบายโปรแกรมหลายบรรทด สามารถทาไดโดยการใสเครอง /* */ ภายในเครองหมายดงกลาวกสามารถใสคาอธบายโปรแกรมไดทนท ดงตวอยาง ทงนในการอธบายโปรแกรมหรอคอมเมนท (comment) ผพฒนาโปรแกรมสามารถนาทง 2 วธ มาใชในโปรแกรมเดยวได ดงตวอยาง
#include "stdio.h" /* โปรแกรมตอไปนคอโปรแกรมทใชในการแสดงผลตวเลข
โดยมการประกาศตวแปรเพอรบคาแลวนาคานนแสดงผล */ main()
{ int num ; scanf(“%d”, &num); printf (“Number :”, num”);
} }
#include "stdio.h" /* โปรแกรมตอไปนคอโปรแกรมทใชในการแสดงผลตวเลข
โดยมการประกาศตวแปรเพอรบคาแลวนาคานนแสดงผล */ main()
{ int num ; // ประกาศตวแปรแบบ int scanf(“%d”, &num); // รบคาจากผใชงาน printf (“Number :”, num”); // แสดงผลขอมล
} }
47
4.5 คาสงวน คาสงวน หมายถง คาทสงวนไวสาหรบใชในคาสงภาษาซเปนการเฉพาะ ทงนคาสงวน
เหลานผพฒนาโปรแกรมไมสามารถนาใชในการประกาศตวแปรตาง ๆ ได โดยในภาษาซจะมคาสงวนไว ดงน
4.6 ตวดาเนนการ ตวดาเนนการบางครงเรยกวา “เครองหมาย” จะเขาใจงายกวา ในภาษา C สามารถ
แบงตวดาเนนการไดหลายประเภท ดงน
4.6.1 ตวดาเนนการคณตศาสตร
ตารางท 4.2 แสดงตวดาเนนการคณตศาสตร
สญลกษณ (symbol) ตวดาเนนการ (operators) ตวอยาง + บวก (addition) a+b - ลบ (subtraction) a-b * คณ (multiplication) a*b / หาร (division) a/b % หารเอาเศษ (remainder) a%b
โดยผลลพธทไดจากการคานวณทางคณตศาสตรจะอยในรปของตวเลข
คาสงวนในภาษาซ
auto default float register struct volatile break do for return switch while case double goto short typedef char else if signed union const enum int sizeof unsigned continue extern long static void
48
4.6.2 ตวดาเนนการความสมพนธ
ตารางท 4.3 แสดงตวดาเนนการความสมพนธ
สญลกษณ (symbol) ตวดาเนนการ (operators) ตวอยาง < นอยกวา (less than) A<b > มากกวา (greater than) a>b <= นอยกวาหรอเทากบ
(less than or equal) A<=b
>= มากกวาหรอเทากบ (greater than or equal)
a>=b
== เทากบ (equal) A==b != ไมเทากบ (not equal) a!=b
โดยผลลพธทไดจากตวดาเนนการความสมพนธ จะไดคาจรง (1) หรอคาเทจ (0) เทานน
4.6.3 ตวดาเนนการเชงตรรกะ
ตารางท 4.4 แสดงตวดาเนนการเชงตรรกะ
สญลกษณ (symbol) ตวดาเนนการ (operators) ตวอยาง && และ (AND) A<b && c>d || หรอ (OR) a<b || c>d ! ไม (NOT) !(a<b)
โดยผลลพธทไดจากตวดาเนนการเชงตรรกะ จะไดคาจรง (1) หรอคาเทจ (0) เทานน 4.6.4 ตวดาเนนการเพมคาและลดคา
ตารางท 4.5 แสดงตวดาเนนการเพมคาและลดคา
สญลกษณ (symbol) ตวดาเนนการ (operators) ตวอยาง ++ เพมคา (increment) a++ หรอ ++a -- ลดคา (decrement) a-- หรอ --a
โดยผลลพธทไดจากการเพมคาและลดคาจะอยในรปของคาตวเลข
49
4.6.5 ตวดาเนนการบตไวส
ตารางท 4.6 แสดงตวดาเนนการบตไวส
สญลกษณ (symbol) ตวดาเนนการ (operators) ตวอยาง & AND a&b | inclusive OR a|b ^ exclusive OR a^b ~ Complement ~a >> right shift a>>2 << left shift a<<3
4.6.6 ตวดาเนนการกาหนดคา
ตารางท 4.7 แสดงตวดาเนนการกาหนดคา
สญลกษณ (symbol) ตวดาเนนการ (operators) ตวอยาง = Assignment a=b += Addition a+=b หมายถง (a=a+b) -= Subtraction a-=b หมายถง (a=a-b) *= Multiplication a*=b หมายถง (a=a*b) /= Division a/=b หมายถง (a=a/b) %= Remainder a%=b หมายถง (a=a%b) &= bitwise AND a&=b หมายถง (a=a&b) |= bitwise Inclusive OR a|=b หมายถง (a=a|b) ^= bitwise exclusive OR a^=b หมายถง (a=a^b) <<= right shift a<<2 หมายถง (a=a<<2) >>= left shift a>>3 หมายถง (a=a>>3)
50
4.6.8 ลาดบการทางานของตวดาเนนการ
ตารางท 4.8 แสดงลาดบการทางานของตวดาเนนการในภาษาซ
ลาดบท ตวดาเนนการ 1 ( ) [ ] . -> 2 - ~ ! * & 3 ++ - - 4 * / % 5 + - 6 << >> 7 < > < = >= 8 = = != 9 & (bitwise AND) 10 ^ (bitwise exclu OR) 11 | (bitwise inclu OR) 12 && 13 || 14 ?: 15 = += -= /= %= 16 <<= >>=
ตวดาเนนการทมลาดบการทางานอนดบท 1 จะทางานกอนอนดบท 2 โดยการทางานจะม การทางานไปเรอย ๆ จนกระทงหมดตวดาเนนการตอการประมวลนน ๆ สวนลกษณะการทางานของ ตวดาเนนการทอยในอนดบเดยวกนจะเปนการทางานจากซายไปขวาเปนหลก ตวอยางทแสดงขนตอนการทางานของตวดาเนนการ ตวอยางท 4.1
A = 8 + 5 * 3 A = 4 + 15 A = 19
ตวอยางท 4.2
B = 10 / 2 + 5 – 3 B = 5 + 5 – 3 B = 10 - 3 B = 7
51
ตวอยางท 4.3 C = 9 * 3 - 20 / 5 + 6 C = 27 - 20 / 5 + 6 C = 27 - 4 + 6 C = 23 + 6 C = 29
ตวอยางท 4.4
D = 16 * (3 – 2) / (2 + 6) D = 16 * 1/ (2 + 6) D = 16 * 1/ 8 D = 16 / 8 D = 2
สรปทายบท
ภาษาคอมทกภาคจะตองมโครงสรางของภาษา เนองจากโครงสรางของภาษาคอมพวเตอรจะเปนรปแบบโครงรางในการเขยนโปรแกรมของภาษานน ๆ เชนเดยวกนกบภาษาซทจะตองมโครงสรางพนฐานในการพฒนาโปรแกรมหรอการเขยนโปรแกรม ขอดอกประการหนงของภาษาซ คอ ภาษาซเปนภาษาคอมพวเตอรภาษาหนงทมโครงสรางภาษาทเขาใจงาย และงายตอการเขยนโปรแกรม โดยโครงสรางของภาษาซมโครงสรางทสาคญดงน
- หวฟงกชน เปนสวนหวของฟงกชนหรออาจจะเรยกวา พรโปรเซสเซอรไดเรกทฟ (Preprocessor directives) เปนสวนททกโปรแกรมตองมใชสาหรบเรยกไฟลทโปรแกรมตองการและกาหนดคาตาง ๆ ซงจะตองเรมตนดวยเครองหมายไดเรกทฟ (#) และตามดวยชอทตองการกาหนดคา ตวอยางไดเรกทฟทใชบอย คอ คาสง #include เปนการบอกใหตวแปลคาสง (compiler) อานไฟลอนเขามารวมในการคอมไพล
- ฟงกชนหลก เปนสวนของฟงกชนหลกหรอในหรอ main program เปนสวนทภาษาซทกโปรแกรมจะตองม เพราะจะเปนสวนทจะประกาศใหตวแปลคาสง (compiler) รวาคาสงขางในชดปกกา { } ของ main() เปนชดคาสงทเปนการทางานหลกของโปรแกรม
- ชดคาสง เปนสวนของชดคาสงเปนสวนทผพฒนาโปรแกรมจะใชในการเขยนโปรแกรมตาง ๆ ลงไป ทงนในทก ๆ คาสงของภาษาซจะตองจบคาสงดวยเครองหมายเซมโคลอน (Semicolon)
- การอธบายโปรแกรม เปนสวนของการอธบายโปรแกรมหรอคอมเมนท (comment) เปนสวนทใชในการอธบายการทางานตาง ๆ ของผพฒนาทตองการขยายความ เพอสรางความเขาใจของตนหรอเพอใหผทมาศกษาตอสามารถเขาใจโปรแกรมในสวนทไดอธบายหรอคอมเมนทเอาไว ทงนการอธบายโปรแกรมหรอคอมเมนท (comment) จะไมผลใด ๆ ตอการทางานของโปรแกรม ซงการอธบายโปรแกรมหรอคอมเมนท
- คาสงวน เปนคาทสงวนไวสาหรบใชในคาสงภาษาซเปนการเฉพาะ ทงนคาสงวนเหลานผพฒนาโปรแกรมไมสามารถนาใชในการประกาศตวแปรตาง ๆ ได
52
- ตวดาเนนการ บางครงเรยกวา “เครองหมาย” เปนเครองหมายทจะทาใหการเขยนโปรแกรมเขาใจงายและสะดวกในการพฒนาโปรแกรม ในภาษา C สามารถแบงตวดาเนนการไดหลายประเภท ดงน
- ตวดาเนนการคณตศาสตร - ตวดาเนนการความสมพนธ - ตวดาเนนการเชงตรรกะ - ตวดาเนนการเพมคาและลดคา - ตวดาเนนการบตไวส - ตวดาเนนการกาหนดคา - ลาดบการทางานของตวดาเนนการ
คาถามทบทวน
1. โครงสรางของภาษาซมโครงสรางทสาคญใดบางจงอธบาย 2. การอธบายโปรแกรมหรอคอมเมนท (comment) ของภาษาซมการอธบายโปรแกรมในรปแบบใดบางจงอธบาย 3. จงอธบายตวดาเนนการแตละประเภทวามคณสมบตทสาคญอยางไรตอการเขยนโปรแกรม
4. จงหาคาตอบของโจทยตวอยางตอไปน 4.1 A = 50 – 3 + 2 – 1 4.2 B = 5 * (2+3) – 1 * (1-1) 4.3 C = (5+ (2+3)) – (1+2) * 2 4.4 D = (3-3 + ((2-2) + (1-1))) – 2 * 3 4.5 F = ((3.5 + 3.1 – 9) + (5-2.2) + (8-1)) * 0
เอกสารอางอง
คะชา ชาญศลป. (2548). ภาษาซสาหรบผเรมตน. กรงเทพมหานคร: วรตนเอดดเคชน. ประภาพร ชางไม. (2545). คมอการเขยนโปรแกรมภาษา C ฉบบผเรมตน. กรงเทพมหานคร:
อนโฟเพรส. ธรวฒน ประกอบผล. (2553). คมอการเขยนโปรแกรมภาษา C. กรงเทพมหานคร: ซมพลฟลาย. สระสทธ ทรงมา และภรพจน แกวยอง. (2552). การโปรแกรมคอมพวเตอร.: มหาวทยาลยราชภฏ
สวนดสต. สานนท เจรญฉาย. (2543). การเขยนโปรแกรมและอลกอรทม. กรงเทพมหานคร: มหาจฬาลงกรณราช
วทยาลย. อรพน ประวตบรสทธ. (2554). คมอการเรยนภาษา C ฉบบปรบปรงใหม (พมพครงท 10).
กรงเทพมหานคร: โปรวชน. http://www.mwit.ac.th/~cs/download/tech30101/TECH30101_ch6.html http://www.eng.su.ac.th/ee/618240/variable.html http://www.e-learning.snru.ac.th/els/program1/lesson2/page2_5.html
53
บทท 5
ชนดขอมลและการประกาศตวแปรในภาษาซ
แผนการสอนประจาบท หวขอเนอหา 5.1 ชนดขอมล
5.2 ตวแปร 5.3 กฎของการตงชอตวแปรในภาษาซ 5.4 รปแบบการประกาศตวแปรในภาษาซ 5.5 การแปลงชนดขอมลของภาษาซ
วตถประสงคเชงพฤตกรรม 1. ผเรยนสามารถอธบายและเขาใจชนดขอมลและสามารถเลอกไปใชงานไดอยางถกตอง 2. ผเรยนสามารถอธบายและใหความหมายของตวแปรไดอยางถกตอง 3. ผเรยนสามารถกาหนดรปแบบของตวแปร และเลอกชนดของตวแปรไดอยางถกตอง
และเหมาะสม 4. ผเรยนสามารถอธบายและเขาใจผลลพธของการแปลงชนดขอมลของภาษาซไดอยางถกตอง
วธการสอน 1. สอนแบบบรรยายโดยใชเอกสารประกอบการสอน 2. สอนแบบบรรยายโดยใช Slide Power Point
3. สอนโดยใหผเรยนเปนสวนกลาง โดยใชวธถามตอบกบผเรยนระหวางบรรยาย 4. ใหผเรยนสรปและอธบายหวขอทผเรยนทไดรบมอบหมาย
สอการเรยนการสอน 1. เอกสารประกอบการสอน
2. Slide Power Point 3. ตวอยางแบบทดสอบ
การวดผลและประเมนผล 1. การทาแบบฝกหด
2. ความตงใจในชนเรยนและการรวมมอในการนาเสนอหรออภปราย 3. สงเกตจากการตอบคาถามและการรวมทากจกรรมในชนเรยน
54
บทท 5
ชนดขอมลและการประกาศตวแปรในภาษาซ
5.1 ชนดขอมล ในการเขยนโปรแกรมคอมพวเตอรจะมขอมลตาง ๆ เขามาเกยวของหลากหลายสวน
ซงในแตละสวนของโปรแกรมอาจมชนดขอมลทแตกตางกน เชน การนบจานวนการวนลป ซงในการทางานจะใชขอมลชนดจานวนเตมเปนตวนบ หรอการแสดงขอความโดยใชขอมลชนดตวอกษรเปนสวนทใชในการแสดงผล เปนตน ดงนนจะเหนวาขอมลตาง ๆ ถกแบงออกเปนหลายชนดตามวตถประสงคของการใชงานนอกจากนขอมลแตละชนดจะมการใชพนทหนวยความจา (memory) ไมเทากน
โดยชนดขอมลทสาคญในการใชงานในภาษาซ มดงน
5.1.1 ขอมลชนดตวอกษร (Character) คอ ขอมลทเปนรหสแทนตวอกษรหรอคาจานวนเตมไดแก ตวอกษร ตวเลข และกลมตวอกขระพเศษใชพนทในการเกบขอมล 1 ไบต
5.1.2 ขอมลชนดจานวนเตม (Integer) คอ ขอมลทเปนเลขจานวนเตม ไดแก จานวนเตมบวก จานวนเตมลบ ศนย ใชพนทในการเกบ 2 ไบต
5.1.3 ขอมลชนดจานวนเตมทมขนาด 2 เทา (Long Integer) คอ ขอมลทมเลขเปนจานวนเตม ใชพนท 4 ไบต
5.1.4 ขอมลชนดเลขทศนยม (Float) คอ ขอมลทเปนเลขทศนยม ขนาด 4 ไบต 5.1.5 ขอมลชนดเลขทศนยมอยางละเอยด (Double) คอขอมลทเปนเลขทศนยม
ใชพนทในการเกบ 8 ไบต โดยในภาษาซไดมการแบงชนดของขอมลออกเปนหลายชนดดงตารางท 5.1
ตารางท 5.1 ชนดขอมลในภาษาซ
ชนดขอมล ขนาด (ไบต)
ขอบเขต ขอมลทเกบ
char 1 -128 ถง 127 ขอมลชนดอกขระ unsigned char 1 0 ถง 255 ขอมลชนดอกขระ
int 2 -32,768 ถง 32,767 ขอมลชนดจานวนเตม unsigned int 2 0 ถง 65,535 ขอมลชนดจานวนเตม
short 1 -128 ถง 127 ขอมลชนดจานวนเตมแบบสน unsigned short 1 0 ถง 255 ขอมลชนดจานวนเตมแบบสน
long 4 -2,147,483,648 ถง 2,147,483,649 ขอมลชนดจานวนเตมแบบยาว unsigned long 4 0 ถง 4,294,967,296 ขอมลชนดจานวนเตมแบบยาว
float 4 3.4*10e(-38) ถง 3.4*10e(38) ขอมลชนดเลขทศนยม double 8 3.4*10e(-308) ถง 3.4*10e(308) ขอมลชนดเลขทศนยม
long double 16 3.4*10e(-4032) ถง 1.1*10e(4032) ขอมลชนดเลขทศนยม
55
5.2 ตวแปร ตวแปร (Variable) คอ การจองพนทในหนวยความจาของคอมพวเตอรสาหรบเกบขอมล
ทตองใชในการทางานของโปรแกรม โดยมการตงชอเรยกหนวยความจาในตาแหนงนนดวย เพอความสะดวกในการเรยกใชขอมล ถาจะใชขอมลใดกใหเรยกผานชอของตวแปรทเกบเอาไว โดยปกตการเขยนโปรแกรมทด ควรจะตงชอตวแปรใหสอดคลองกบการทางานหรอหนาทของตวแปรนน ๆ เพราะเมอถงเวลาตองมาทาการปรบปรงแกไขโปรแกรมจะสามารถทาไดโดยไมยากนก 5.3 กฎของการตงชอตวแปรในภาษาซ
5.2.1 หามตงชอตรงกบคาสงวน และตองไมมเครองหมายคานวณใด ๆ 5.2.2 ตองขนตนดวยอกษร และหามขนตนดวยตวเลข 5.2.3 หามเวนวรรค หากตองการเวนวรรคตองใชเครองหมาย _ (underscore) 5.2.4 ตวอกษรใหญและตวอกษรเลก ถอเปนคนละตวแปร
5.4 รปแบบการประกาศตวแปรในภาษาซ 5.4.1 ตวอยางการประกาศตวแปรในภาษาซ
1.) กรณการประกาศตวแปรแบบตวแปรเดยว int num; int num_1 = 1; char name[ ];
char name[10]; float id_2;
float id_2 = 2.80;
2.) กรณการประกาศตวแปรแบบหลายตวแปร int num , num_1;
int num1 = 1 , num2 = 2; char name[ ] , address[];
char name1[10] , address2[20]; float id_2 , sum , sum1;
float id1 = 1 , sum2 = 2.0 , sum3 = 3.00;
ชนดขอมล ชอตวแปร;
56
นอกจากนในภาษาซ ชอตวแปร ทประกอบไปดวยอกษรเลก หรอใหญ กมความแตกตางกน หรอทเรยกวา Case sensitive ตวอยาง เชน
‘X’ และ ‘x’ เปนตวแปรตางกน ‘Ex1’ และ ‘EX1’ เปนตวแปรตางกน ‘bookno1’ และ ‘bookNo1’ เปนตวแปรตางกน ‘XTREME’ และ ‘xtreme’ เปนตวแปรตางกน ‘x_1’ และ ‘x1’ เปนตวแปรตางกน ‘Witoon’ และ ‘witOOn’ เปนตวแปรตางกน
ดงนนในการประกาศตวแปรในภาษาซจะตองคานงถงกฎของการตงชอตวแปรในภาษาซอยางเครงครด ทงนในการเลอกใชชนดขอมลจะตองเลอกใชชนดขอมลใหถกตองกบขอมลทผพฒนาตองการจดเกบ และเมอจบการประกาศตวแปรทกครงจะตองจบดวยเครองหมายเซมโคลอน ; (Semicolon) เพราะหากประกาศตวแปรผดรปแบบทกาหนดจะสงผลใหโปรแกรมมปญหาในการทดสอบโปรแกรมได
5.4.2 ตวอยางการประกาศตวแปรในภาษาซพรอมคาอธบาย
1.) char d, c[30]; ประกาศตวแปรชอ d และ c มชนดเปน character และตวแปรสตรง c
มขนาด 30 bytes
2.) int a, b; ประกาศตวแปรชอ a และ b มชนดเปน int คอใชเนอทใน
หนวยความจา 2 bytes และสามารถเกบตวเลขจานวนเตมทมคาอยในชวง -32768 ถง 32767
3.) float k, m, n; ประกาศตวแปรชอ k, m และ n มชนดเปน float คอใชเนอทใน
หนวยความจา 4 bytes สามารถเกบจานวนทศนยมและตวเลขทอยในรป E ยกกาลงได
4.) double w, x, y, z ประกาศตวแปรชอ w, x, y และ z มชนดเปน double คอใชเนอทใน
หนวยความจา 8 bytes สามารถเกบจานวนทศนยมหรอตวเลขทอยในรป E ยกกาลงทมความละเอยดสงกวาชนด float
57
5.5 การแปลงชนดขอมลของภาษาซ เมอผพฒนาไดเขยนโปรแกรมมกจะพบวา ในแตละโปรแกรมทซบซอนมกมตวดาเนนการ กบตวแปรของชนดขอมลทแตกตางกน ดงนนเพออานวยความสะดวกในการเขยนโปรแกรม ภาษาซจงไดกาหนดกฎเกณฑการแปลงชนดขอมลไวอยางอตโนมต ดงน ถาคาตวแปรหรอคาคงทตางชนดกน ใหทาการเปลยนชนดของขอมลทมขนาดเลกใหเปนชนดของขอมลทใหญขน โดยกฎเกณฑการแปลงชนดขอมลสามารถศกษารายละเอยดในตารางท 5.1
ตารางท 5.2 การแปลงชนดขอมลของภาษาซ
ชนดของขอมล x ชนดของขอมล y ผลลพธทไดจากการแปลง int long long
char int int int float float int double double
float double double long double double
ชนดขอมลตาง ๆ long double long double จากตารางท 5.2 แถวท 1 จะสงเกตเหนวาตวแปร x เปนตวแปรชนดขอมลแบบ int และตวแปร y เปนตวแปรขอมลแบบ long เมอนา x และ y มาทาการบวก ลบ คณ หรอหารกน ผลลพธทไดจะเปนชนดขอมลแบบ long เพราะ long มพสยในการเกบขอมลกวางกวา int
ตวอยางเชน
int x=20; float y = 10;
ถา x/2 จะไดผลลพธเปน 10 (เปนชนดขอมลแบบ int) ถา x/y จะไดผลลพธเปน 10.000000 (เปนชนดขอมลแบบ float)
สรปทายบท
ในการพฒนาหรอเขยนโปรแกรมในภาษาซสวนทสาคญอกประการกคอ ชนดขอมล การประกาศตวแปร ในการเขยนโปรแกรมคอมพวเตอรจะมขอมลตาง ๆ เขามาเกยวของหลากหลายสวน ซงในแตละสวนของโปรแกรมอาจมชนดขอมลทแตกตางกน เชน การนบจานวนการวนลป ซงในการทางานจะใชขอมลชนดจานวนเตมเปนตวนบ หรอการแสดงขอความโดยใชขอมลชนดตวอกษรเปนสวนทใชในการแสดงผล เปนตน ดงนนจะเหนวาขอมลตาง ๆ ถกแบงออกเปนหลายชนดตามวตถประสงคของการใชงานนอกจากนขอมลแตละชนดจะมการใชพนทหนวยความจา (memory) ไมเทากน
โดยชนดขอมลทสาคญในการใชงานในภาษาซ มดงน - ขอมลชนดตวอกษร (Character) คอ ขอมลทเปนรหสแทนตวอกษรหรอคาจานวนเตม
ไดแก ตวอกษร ตวเลข และกลมตวอกขระพเศษใชพนทในการเกบขอมล 1 ไบต
58
- ขอมลชนดจานวนเตม (Integer) คอ ขอมลทเปนเลขจานวนเตม ไดแก จานวนเตมบวก จานวนเตมลบ ศนย ใชพนทในการเกบ 2 ไบต
- ขอมลชนดจานวนเตมทมขนาด 2 เทา (Long Integer) คอ ขอมลทมเลขเปนจานวนเตม ใชพนท 4 ไบต
- ขอมลชนดเลขทศนยม (Float) คอ ขอมลทเปนเลขทศนยม ขนาด 4 ไบต - ขอมลชนดเลขทศนยมอยางละเอยด (Double) คอขอมลทเปนเลขทศนยม ใชพนทใน
การเกบ 8 ไบต
ตวแปร (Variable) คอ การจองพนทในหนวยความจาของคอมพวเตอรสาหรบเกบขอมลทตองใชในการทางานของโปรแกรม โดยมการตงชอเรยกหนวยความจาในตาแหนงนนดวย เพอความสะดวกในการเรยกใชขอมล ถาจะใชขอมลใดกใหเรยกผานชอของตวแปรทเกบเอาไว โดยปกตการเขยนโปรแกรมทด ควรจะตงชอตวแปรใหสอดคลองกบการทางานหรอหนาทของตวแปรนน ๆ เพราะเมอถงเวลาตองมาทาการปรบปรงแกไขโปรแกรมจะสามารถทาไดโดยไมยากนก โดยกฎของการตงชอตวแปรในภาษาซมกฎพนฐานทตองเขาใจดงน
- หามตงชอตรงกบคาสงวน และตองไมมเครองหมายคานวณใด ๆ - ตองขนตนดวยอกษร และหามขนตนดวยตวเลข - หามเวนวรรค หากตองการเวนวรรคตองใชเครองหมาย _ (underscore) - ตวอกษรใหญและตวอกษรเลก ถอเปนคนละตวแปร - ตวอยางการประกาศตวแปรในภาษาซพรอมคาอธบาย
ตวอยางการประกาศตวแปรในภาษาซ char x, y[10]; เปนการประกาศตวแปรชอ x และ y มชนดเปน character และตวแปรสตรงมขนาด
10 bytes int A1, A_1; เปนการประกาศตวแปรชอ A1 และ A_1 มชนดเปน int คอใชเนอทในหนวยความจา
2 bytes และสามารถเกบตวเลขจานวนเตมทมคาอยในชวง -32768 ถง 32767 float number, monney; เปนการประกาศตวแปรชอ number และ monney มชนดเปน float คอใชเนอทใน
หนวยความจา 4 bytes สามารถเกบจานวนทศนยมและตวเลขทอยในรป E ยกกาลงได double dusit_trang, witoon; เปนการประกาศตวแปรชอ dusit_trang และ witoon มชนดเปน double คอใชเนอ
ทในหนวยความจา 8 bytes สามารถเกบจานวนทศนยมหรอตวเลขทอยในรป E ยกกาลงทมความละเอยดสงกวาชนด float
รปแบบการประกาศตวแปรในภาษาซ
ชนดขอมล ชอตวแปร;
59
คาถามทบทวน
1. จงอธบายขอแตกตางระหวางชนดขอมล int กบชนดขอมลแบบ long มความแตกตางกนอยางไร
2. จงอธบายขอแตกตางระหวางชนดขอมล float กบชนดขอมลแบบ double มความแตกตางกนอยางไร
3. ตวแปรคออะไรมความสาคญอยางไรตอการเขยนโปรแกรม 4. ในการเขยนโปรแกรมทกโปรแกรมจาเปนทตองมการประกาศตวแปรหรอไมจงอธบาย 5. จงประกาศตวแปรเพอเกบคาตวเลข 3 หลก 6. จงประกาศตวแปรเพอเกบคาตวเลข 7 หลก 7. จงประกาศตวแปรเพอเกบคาตวเลขแบบทศนยม โดยตวแปรจะตองมตวเลขประกอบดวย 8. จงประกาศตวแปรเพอเกบตวอกษร โดยตวแปรจะตองมตวเลขประกอบดวย 9. จงประกาศตวแปร 5 ตวเพอเกบคาตวเลข 10. จงประกาศตวแปร 4 ตวเพอเกบคาตวเลขแบบทศนยม 7 ตาแหนง
เอกสารอางอง
คะชา ชาญศลป. (2548). ภาษาซสาหรบผเรมตน. กรงเทพมหานคร: วรตนเอดดเคชน. ประภาพร ชางไม. (2545). คมอการเขยนโปรแกรมภาษา C ฉบบผเรมตน. กรงเทพมหานคร:
อนโฟเพรส. ธรวฒน ประกอบผล. (2553). คมอการเขยนโปรแกรมภาษา C. กรงเทพมหานคร: ซมพลฟลาย. สระสทธ ทรงมา และภรพจน แกวยอง. (2552). การโปรแกรมคอมพวเตอร.: มหาวทยาลยราชภฏ
สวนดสต. สานนท เจรญฉาย. (2543). การเขยนโปรแกรมและอลกอรทม. กรงเทพมหานคร: มหาจฬาลงกรณราช
วทยาลย. อรพน ประวตบรสทธ. (2554). คมอการเรยนภาษา C ฉบบปรบปรงใหม (พมพครงท 10).
กรงเทพมหานคร: โปรวชน. https://www.sites.google.com/site/khasangphasac/tawpaer-phasac.html http://www.e-learning.snru.ac.th/els/program1/lesson2/page2_5.html
60
บทท 6
ขนตอนการพฒนาโปรแกรมและคาสงการทางานของภาษาซ
แผนการสอนประจาบท หวขอเนอหา 6.1 ขนตอนการพฒนาโปรแกรมของภาษาซ
6.2 คาสงการทางานของภาษาซ 6.2.1 คาสง printf 6.2.2 คาสง putchar 6.2.3 คาสง puts 6.2.4 คาสง scanf 6.2.5 คาสง getchar 6.2.6 คาสง getch 6.2.7 คาสง clrscr 6.2.8 คาสง goto
วตถประสงคเชงพฤตกรรม 1. ผเรยนสามารถอธบายและเขาใจขนตอนการพฒนาโปรแกรมของภาษาซไดอยางถกตอง 2. ผเรยนสามารถเขาใจและอธบายการทางานของภาษาซไดอยางถกตอง 3. ผเรยนสามารถเลอกนาคาสงการทางานของภาษาซไปพฒนาโปรแกรมไดอยางถกตอง วธการสอน 1. สอนแบบบรรยายโดยใชเอกสารประกอบการสอน 2. สอนแบบบรรยายโดยใช Slide Power Point 3. สอนโดยใชโปรแกรม Turbo C++ 4.5 เพอลงมอปฏบตในการเขยนโปรแกรมภาษาซ
4. สอนโดยใหผเรยนเปนสวนกลาง โดยใชวธถามตอบกบผเรยนระหวางบรรยาย 5. ใหผเรยนสรปและอธบายหวขอทผเรยนทไดรบมอบหมาย
สอการเรยนการสอน 1. เอกสารประกอบการสอน
2. Slide Power Point 3. โปรแกรม Turbo C++ 4.5 4. ตวอยางแบบทดสอบ
การวดผลและประเมนผล 1. การทาโจทยทดลอง และการทาแบบฝกหด
2. ความตงใจในชนเรยน การตอบคาถามและการรวมทากจกรรมในชนเรยน
61
บทท 6
ขนตอนการพฒนาโปรแกรมและคาสงการทางานของภาษาซ
6.1 ขนตอนการพฒนาโปรแกรมของภาษาซ
ภาพท 6.1 ผงงานแสดงขนตอนการพฒนาโปรแกรมภาษาซ
ไมถกตอง
ไมถกตอง
ถกตอง
เรมตน
จบการทางาน
เขยนโปรแกรมตนฉบบ
ตรวจสอบ ไวยากรณภาษา
ถกตอง
แปลโปรแกรมภาษาเครอง
Execute Program
ตรวจสอบความ ถกตองของผลลพธ
C Compiler
แสดงผลลพธ
C Library
62
จากภาพท 6.1 เปนผงงานแสดงขนตอนการพฒนาโปรแกรมภาษาซ ซงสามารถอธบายใน การทางานในแตละมขนตอน ดงน
6.1.1 เขยนโปรแกรมตนฉบบดวยภาษาซ ใชการเขยนโปรแกรมภาษาซในการศกษาคร งนจะใช โปรแกรม Turbo C ในการเขยนและพฒนาโปรแกรม ซงการเขยนโปรแกรมผพฒนาจะตองเขยนโปรแกรมตนฉบบดวยภาษาซขนมากอนหนงโปรแกรม โดยการเขยนจะตองคานงถงหลกไวยากรณของภาษาเปนหลก จากนนทาการบนทกโปรแกรมพรอมกบตงชอแฟมไว โดยแฟมทไดจะมนามสกล *.c หรอ เชน simple1.c เปนตน 6.1.2 แปลโปรแกรมภาษาซไปเปนโปรแกรมภาษาเครอง ในการแปลโปรแกรมภาษาซไปเปนโปรแกรมภาษาเครอง เปนการใชคาสง compile เพอแปลโปรแกรมภาษาซไปเปนโปรแกรมภาษาเครอง แฟมทไดจะมนามสกล *.obj ซงในขนตอนนโปรแกรมตนฉบบอาจเกดความผดพลาดทางไวยากรณภาษาขนได จงตองยอนกลบไปแกไขโปรแกรมตนฉบบตามขนตอนทหนงใหถกตองเสยกอน 6.1.3 เชอมโยงโปรแกรมภาษาเครองเขากบ library function ของภาษาซ
การเชอมโยงโปรแกรมภาษาเครองเขากบ library function ของภาษาซ จะไดเปนการ execute program โดยใชคาสง link แฟมทไดจะมนามสกล *.exe 6.1.4 การ execute program เพอแสดงผลลพธออกมา
ในการ execute program เพอแสดงผลลพธออกมา โดยใชคาสง run ในขนตอนนผพฒนาโปรแกรมควรตรวจสอบผลลพธทไดจากโปรแกรม วาตรงกบความตองการของเราหรอไม ถาผลลพธทไดไมตรงกบความตองการใหกลบไปแกไขโปรแกรมตนฉบบในขนตอนทหนงใหมอกครง เสรจแลวทาขนตอนทสองถงขนตอนทสซาอกครง และตองทาซาเชนนจนกวาจะไดผลลพธทถกตอง
63
6.2 คาสงการทางานของภาษาซ คาสงการทางานของภาษาซ คอ ชดคาสงทผพฒนาโปรแกรมตองการใหโปรแกรมคอมพวเตอรทางานตามผลลพธทตองการใหแสดง โดยคาสงการงานในภาษาซมมากมายหลายคาสง ซงจะมการศกษาคาสงจากคาสงพนฐานจนถงคาสงระดบสงขนไป 6.2.1 คาสง printf( ) คาสง printf ถอวาเปนคาสงพนฐานทสดในการแสดงผลขอมลทกชนดออกทางหนาจอ ไมวาจะเปนจานวนเตม ( int ) , ทศนยม ( float ) , ขอความ ( string ) หรออกขระ นอกจากนคาสงยงมความยดหยนสง โดยผพฒนาโปรแกรมสามารถกาหนดหรอจดรปแบบการแสดงผลใหมระเบยบหรอเหมาะสมตามความตองการ ดงตารางแสดงรหสควบคมดงตารางท 6.1 และนอกจากนผพฒนาโปรแกรมยงสามารถจดรปแบบการแสดงผลใหดเปนระเบยบมากขน เชน การขนบรรทดใหมหลงแสดงขอความ หรอเวนระยะแทบระหวางขอความ โดยใชอกขระควบคมการแสดงผลรวมกบคาสง printf ในภาษาซมอกขระควบคมการแสดงผลหลายรปแบบดวยกน ดงแสดงไวในตารางท 6.2
ตารางท 6.1 รหสควบคมรปแบบการแสดงผลคาของตวแปรออกทางหนาจอ
รหสควบคมรปแบบ การนาไปใชงาน %d สาหรบแสดงผลคาของตวแปรชนดจานวนเตม ( int, short, unsigned
short, long, unsigned long) %u สาหรบแสดงผลตวเลขจานวนเตมบวก ( unsigned short, unsigned
long ) %o สาหรบแสดงผลออกมาในรปแบบของเลขฐานแปด %x สาหรบแสดงผลออกมาในรปแบบของเลขฐานสบหก %f สาหรบแสดงผลคาของตวแปรชนดจานวนทศนยม ( float, double, long
double ) %e สาหรบแสดงผลตวเลขทศนยมออกมาในรปแบบของ ( E หรอ e ) ยกกาลง
( float, double, long double ) %c สาหรบแสดงผลอกขระ 1 ตว ( char ) %s สาหรบแสดงผลขอความ ( string หรออกขระมากกวา 1 ตว) %p สาหรบแสดงผลตวชตาแหนง ( pointer )
ตารางท 6.2 การจดระแบบระเบยบขอความดวยอกขระควบคมการแสดงผล
อกขระควบคมการแสดงผล ความหมาย \n ขนบรรทดใหม \t เวนชองวางเปนระยะ 1 แทบ (6 ตวอกษร) \r กาหนดใหเคอรเซอรไปอยตนบรรทด \f เวนชองวางเปนระยะ 1 หนาจอ \b ลบอกขระสดทายออก 1 ตว
64
ในการใชเรยกใชงานคาสง printf( ) จะมรปแบบการเรยกใชคาสง printf( ) อย 2 กรณหลก โดยแสดงวธการใชงานคาสง printf( ) ทงสองกรณดงน 6.2.1.1 กรณแสดงขอความอยางเดยว
format คอ ขอความทตองการใหแสดงออกทางหนาจอโดยขอมลนตองเขยนไวในเครองหมาย “ ” ซงการทางานแสดงผลไวดงตวอยาง
ตวอยางท 6.1 แสดงการทางานของคาสง printf( ) กรณแสดงขอความอยางเดยว
ผลลพธเมอทดสอบโปรแกรม
ตวอยางท 6.2 แสดงการทางานของคาสง printf( ) กรณแสดงขอความอยางเดยวแตแสดงหลายขอความ
printf(“ format ”);
// โคดโปรแกรม #include "stdio.h" main( )
{ printf (“Dusittrang”);
} }
Dusittrang }
// โคดโปรแกรม #include "stdio.h" main( )
{ printf (“Dusittrang”); printf (“ Dusittrang”); printf (“ Dusittrang”);
}
65
ผลลพธเมอทดสอบโปรแกรม
ตวอยางท 6.3 แสดงการทางานของคาสง printf( ) กรณแสดงขอความอยางเดยว แตแสดงหลาย
ขอความ และมการเวนใหขนบรรทดใหมเมอมขอความใหม โดยการใชอกขระควบคม \n
ผลลพธเมอทดสอบโปรแกรม
Dusittrang Dusittrang Dusittrang }
// โคดโปรแกรม #include "stdio.h" main( )
{ printf (“Dusittrang\n”); printf (“ Dusittrang\n”); printf (“ Dusittrang\n”); printf (“ Dusittrang”);
}
Dusittrang Dusittrang
Dusittrang Dusittrang
66
6.2.1.2 กรณแสดงขอความพรอมทงแสดงขอมลในตวแปร
format คอ ขอมลทตองการแสดงออกทางหนาจอโดยขอมลนตองเขยนไวในเครองหมาย “ ” ขอมลทสามารถแสดงผลไดมอย 2 ประเภท คอ ขอความธรรมดา และคาทเกบไวในตวแปร ซงถาเปนคาทเกบไวในตวแปรตองใสรหสควบคมรปแบบใหตรงกบชนดของขอมลทเกบไวในตวแปรนนดวย
variable คอ ตวแปรหรอนพจนทตองการนาคาไปแสดงผลใหตรงกบรหสควบคมรปแบบทกาหนดไว
ตวอยางท 6.4 แสดงการทางานของคาสง printf( ) กรณแสดงขอความพรอมทงแสดงขอมลใน ตวแปร
ผลลพธเมอทดสอบโปรแกรม
ตวอยางท 6.5 แสดงการทางานของคาสง printf( ) กรณแสดงหลายตวแปร
printf(“ format ” , variable);
// โคดโปรแกรม #include "stdio.h" main( )
{ int num = 10;
printf (“Ans : %d” , num); } }
Ans : 10 }
// โคดโปรแกรม #include "stdio.h" main( )
{ int num1 = 10 , num2 = 20 num3 = 30;
printf (“Ans : %d,%d,%d ” , num1,num2,num3); }
67
ผลลพธเมอทดสอบโปรแกรม
ตวอยาง 6.6 แสดงการทางานของคาสง printf( ) กรณแสดงหลายตวแปรแตตองการเวนชองวาง โดยการใชอกขระควบคม \t
ผลลพธเมอทดสอบโปรแกรม
ตวอยางท 6.7 แสดงการทางานของคาสง printf( ) กรณแสดงขอความพรอมทงแสดงขอมลในตว
แปรทเปนตวเลขทศนยม
ผลลพธเมอทดสอบโปรแกรม
Ans : 102030 }
// โคดโปรแกรม #include "stdio.h" main( )
{ int num1 = 10 , num2 = 20 num3 = 30;
printf (“Ans : %d\t,%d\t,%d ” , num1,num2,num3); }
Ans : 10 20 30
// โคดโปรแกรม #include "stdio.h" main( )
{ float num = 10.00; printf (“Ans : %f” , num);
} }
Ans : 10.000000 }
68
ตวอยางท 6.8 แสดงการทางานของคาสง printf( ) กรณแสดงขอความพรอมทงแสดงขอมลใน ตวแปรทเปนตวเลขทศนยม แตกาหนดจานวนเลขทศนยม โดยการใช %._f เปนตวกาหนดจานวนทศนยม
ผลลพธเมอทดสอบโปรแกรม
ตวอยางท 6.9 แสดงการทางานของคาสง printf( ) กรณแสดงขอความพรอมทงแสดงขอมลใน ตวแปรทเปนตวเลขทศนยม แตตดตวเลขทศนยมตวสดทายออกดวยการใช โดยการใชอกขระควบคม \b
// โคดโปรแกรม #include "stdio.h" main( )
{ float num = 35.4589; printf (“Ans : %f\n” , num); printf (“Ans : %.2f\n” , num); printf (“Ans : %.3f\n” , num); printf (“Ans : %.4f\n” , num); printf (“Ans : %.5f\n” , num);
} }
Ans : 35.458900 Ans : 35.45 Ans : 35.458 Ans : 35.4589 Ans : 35.45890
// โคดโปรแกรม #include "stdio.h" main( )
{ float num = 12.4567; printf (“Ans : %f\n” , num); printf (“Ans : %\b\n” , num); printf (“Ans : %f\b\b\n” , num); printf (“Ans : %f\b\b\b\n” , num); printf (“Ans : %f\b\b\b\b\n” , num);
} }
69
ผลลพธเมอทดสอบโปรแกรม
6.2.2 คาสง putchar() ในการแสดงผลตวอกษรหรออกขระ (char) ออกทางหนาจอ นอกจากใชคาสง printf( )
พรอมกบกาหนดรหสควบคมรปแบบ %c แลว เราสามารถเรยกใชคาสงสาหรบแสดงตวอกษรหรออกขระโดยเฉพาะไดอกดวย โดยคาสงนน คอ คาสง putchar( ) ซงมรปแบบการเรยกใชคาสงแสดงไวดงตอไปน
ch คอ ตวอกษรหรออกขระเขยนอยภายในเครองหมาย ‘c' หรอตวแปรชนด char
ตวอยางท 6.10 แสดงการทางานของคาสง putchar( )
ผลลพธเมอทดสอบโปรแกรม
Ans : 12.345670 Ans : 12.34567 Ans : 12.3456 Ans : 12.345 Ans : 12.34
putchar(ch);
// โคดโปรแกรม #include "stdio.h" main( )
{ putchar(‘w’);
putchar(‘i’); putchar(‘t’); putchar(‘o’); putchar(‘o’); putchar(‘n’);
} }
witoon }
70
6.2.3 คาสง puts() คาสง puts() คอ คาสงในการแสดงผลขอความหรออกษรออกทางหนา
จอคอมพวเตอร ดงนนขอแตกตางระหวางคาสง putchar( ) กบคาสง puts() คอ putchar( ) จะสามารถแสดงผลแคตวอกษรหรออกขระ แต puts() สามารถแสดงผลเปนขอความได ซงมรปแบบการเรยกใชคาสง puts() แสดงไวดงตอไปน
ตวอยางท 6.11 แสดงการทางานของคาสง puts( )
ผลลพธเมอทดสอบโปรแกรม
ตวอยางท 6.12 แสดงการทางานของคาสง puts( ) โดยมการแสดงจากตวแปร
ผลลพธเมอทดสอบโปรแกรม
puts( );
// โคดโปรแกรม #include "stdio.h" main( )
{ puts(“witoon”);
puts(“kongphon”); } }
witoon kongphon
}
// โคดโปรแกรม #include "stdio.h" main( ) {
char name1[ ] = “Somsak”; char name2[ ] = “Ratthai”; puts(name1);
puts(name2); } }
Somsak Ratthai
}
71
6.2.4 คาสง scanf( ) คาสง scanf( ) เปนคาสงพนฐานทใชในการรบผลขอมลจากผใชงาน และในภาษาซ การรบขอมลจากคยบอรดสามารถทาไดโดยการเรยกใชฟงกชน scanf( ) ซงเปนฟงกชนมาตรฐานสาหรบรบขอมลจากคยบอรด โดยสามารถรบขอมลไดทกประเภท ไมวาจะเปนจานวนเตม (int) , ทศนยม (float) ,อกขระ (char) หรอขอความกตาม รปแบบการเรยกใชคาสง scanf( ) คลายกบการเรยกใชคาสง printf( ) ดงแสดงรปแบบของคาสง scanf( ) ไวดงตอไปน
format คอ การกาหนดรหสควบคมรปแบบ เพอกาหนดชนดของขอมลทจะรบเขามาจากคยบอรด โดยรหสควบคมรปแบบจะใชชดเดยวกบรหสควบคมรปแบบของคาสง printf( )
variable คอ ตวแปรทจะใชเกบคาขอมลทรบเขามาจากคยบอรด โดยชนดของตวแปรจะตองตรงกบรหสควบคมรปแบบทกาหนดไว นอกจากน หนาชอของตวแปรจะตองนาหนาดวยเครองหมาย & ยกเวนตวแปรสตรงสาหรบเกบขอความเทานนทไมตองนาหนาดวยเครองหมาย &
ตวอยางท 6.13 แสดงการทางานของคาสง scanf( ) กรณรบขอมลชนดเลขจานวนเตม (int)
ผลลพธเมอทดสอบโปรแกรม
scanf(“ format ” , &variable);
// โคดโปรแกรม #include "stdio.h" main( )
{ int num;
printf("Enter number :"); scanf("%d" ,&num);
printf("\nAns = %d", num);}
}
Enter number : 12345 Ans : 12345
}
72
ตวอยางท 6.14 แสดงการทางานของคาสง scanf( ) กรณรบขอมลชนดเลขทศนยม (float)
ผลลพธเมอทดสอบโปรแกรม
ตวอยาง 6.15 แสดงการทางานของคาสง scanf( ) กรณรบขอมลชนดตวอกษร (char)
ผลลพธเมอทดสอบโปรแกรม
// โคดโปรแกรม #include "stdio.h" main( )
{ float num;
printf("Enter number :"); scanf("%f", &num);
printf("\nAns = %f", num); printf("\nAns = %.2f", num);} }
}
Enter number : 987.56 Ans : 987.559998 Ans : 987.56
// โคดโปรแกรม #include "stdio.h" main( )
{ char ch[20]; printf("Name :"); scanf("%s" ,&ch); printf("\n Wellcome %s",ch); }
Name : Witoon Wellcome : Witoon
73
6.2.5 คาสง getchar( ) ในการรบคาในภาษาซนอกจากใชคาสง scanff( ) แลว ผพฒนาโปรแกรม
สามารถเรยกใชคาสง getchar( ) เพอการรบคาไดอกดวย โดยรปแบบการเรยกใชคาสง getchar( ) แสดงไวดงตอไปน
ch คอ ตวแปรชนด char เพอใชเกบคาของอกขระหรอตวอกษรทรบเขามา
ตวอยางท 6.16 แสดงการทางานของคาสง getchar( )
ผลลพธเมอทดสอบโปรแกรม
ch = getchar( );
// โคดโปรแกรม #include "stdio.h" main( )
{ char ch; printf("name :"); ch = getchar(); printf("\n Hello :%s",ch);}
}
name : witoon Hello : witoon
}
74
6.2.6 คาสง getch( ) ในการรบคาอกษระในภาษาซ นอกจากใชคาสง scanff( ) และคาสง getchar( )
แลว ผพฒนาโปรแกรมสามารถเรยกใชคาสง getch( ) เพอใชในการรบขอมลไดอกคาสงหนง ขอสงเกตถงแมวาทงคาสง getchar( ) และ getch( ) จะใชสาหรบรบขอมลชนดอกขระเหมอนกน แตทง 2 คาสงนมความแตกตางกนอยตรงท คาสง getchar( ) เมอปอนอกขระเขามาแลว จะตองกดปม <Enter> โปรแกรมจงจะกลบไปทางานตอได และตวอกขระทเราปอนจะแสดงขนมาใหเหนบนหนาจอดวย สวนคาสง getch( ) ไมตองกดปม <Enter> เพยงแคผใชงานปอนอกขระเขามา 1 ตว โปรแกรมจะกลบไปทางานตอทนท และตวอกขระทเราปอนจะไมแสดงขนมาใหเหน โดยรปแบบการเรยกใชคาสง getchar( ) แสดงไวดงตอไปน
ch คอ ตวแปรชนด char เพอใชเกบคาของอกขระหรอตวอกษรทรบเขามา
ตวอยางท 6.17 แสดงการทางานของคาสง getch( )
ผลลพธเมอทดสอบโปรแกรม
ch = getch( );
// โคดโปรแกรม #include "stdio.h" main( )
{ char ch; printf("Enter :"); ch = getch(); printf("\n Ans :%c",ch);}
}
Enter : 1 Ans : 1
}
75
6.2.7 คาสง clrscr( ) คาสง clrscr( ) เปนคาสงทใชในการเคลยรหรอลางหนาจอ ประโยชนหลกของ
คาสงน คอ ผพฒนาโปรแกรมสามารถทจะทาการลางหนาจอรายงานตาง ๆ ของขอมลออกไปได เพราะถาไมมคาสงนโปรแกรมจะทดสอบและยงมผลพลธหรอคาตอบแสดงคาหนาจอ อาจจะทาใหผใชงานมความสบสนได โดยรปแบบการเรยกใชคาสง clrscr( ) แสดงไวดงตอไปน
ตวอยางท 6.18 แสดงการทางานของคาสง clrscr( )
ผลลพธเมอทดสอบโปรแกรม
และหากกดปมคยบอรดใด ๆ โปรแกรมจะทาการเคลยรหนาจอแลวแสดงผลลพธตอไป
clrscr( );
// โคดโปรแกรม #include "stdio.h" main( )
{ char ch;
printf("Hello witoon"); ch = getch(); clrscr( ) ; printf("Wellcome to Thailand");
}
Hello witoon }
Wellcome to Thailand
76
6.2.8 คาสง goto คาสง goto เปนคาสงทใชในการขามหรอกระโดดกลบไปทางานในคาสงอน ๆ
ตามทผพฒนาโปรแกรมตองการ โดยรปแบบการเรยกใชคาสง goto แสดงไวดงตอไปน
loop คอ ตาแหนงทตองการใหโปรแกรมกระโดดไปทางานในตาแหนงนน ๆ
ตวอยางท 6.19 แสดงการทางานของคาสง goto
ผลลพธเมอทดสอบโปรแกรม
จากโปรแกรมจะสงเกตวา เมอโปรแกรมเจอคาสง goto เมอไร โปรแกรมจะทาการกระโดดไปทางานตามทตาแหนง loop กาหนดไว
goto loop;
// โคดโปรแกรม #include "stdio.h" main( )
{ printf("1\n"); goto loop1;
printf("2\n"); loop1: printf("3\n");
goto loop2; printf("4\n");
loop2: printf("5\n"); }
1 3 5
77
สรปทายบท
ขนตอนของการพฒนาโปรแกรมภาษาซ
ในขนตอนของการพฒนาโปรแกรมภาษาซ จะมขนตอนในการทางาน ดงน 1. เขยนโปรแกรมตนฉบบดวยภาษาซ
ซงการเขยนโปรแกรมผพฒนาจะตองเขยนโปรแกรมตนฉบบดวยภาษาซขนมากอนหนงโปรแกรม โดยการเขยนจะตองคานงถงหลกไวยากรณของภาษาเปนหลก จากนนทาการบนทกโปรแกรมพรอมกบตงชอแฟมไว โดยแฟมทไดจะมนามสกล *.c หรอ เชน simple1.c เปนตน
2. แปลโปรแกรมภาษาซไปเปนโปรแกรมภาษาเครอง ในการแปลโปรแกรมภาษาซไปเปนโปรแกรมภาษาเครอง เปนการใชคาสง compile เพอแปลโปรแกรมภาษาซไปเปนโปรแกรมภาษาเครอง แฟมทไดจะมนามสกล *.obj ซงในขนตอนนโปรแกรมตนฉบบอาจเกดความผดพลาดทางไวยากรณภาษาขนได จงตองยอนกลบไปแกไขโปรแกรมตนฉบบตามขนตอนทหนงใหถกตองเสยกอน 3. เชอมโยงโปรแกรมภาษาเครองเขากบ library function ของภาษาซ
การเชอมโยงโปรแกรมภาษาเครองเขากบ library function ของภาษาซ จะไดเปนการ execute program โดยใชคาสง link แฟมทไดจะมนามสกล *.exe 4. การ execute program เพอแสดงผลลพธออกมา
ในการ execute program เพอแสดงผลลพธออกมา โดยใชคาสง run ในขนตอนนผพฒนาโปรแกรมควรตรวจสอบผลลพธทไดจากโปรแกรม วาตรงกบความตองการของเราหรอไม ถาผลลพธทไดไมตรงกบความตองการใหกลบไปแกไขโปรแกรมตนฉบบในขนตอนทหนงใหม อกครง เสรจแลวทาขนตอนทสองถงขนตอนทสซาอกครง และตองทาซาเชนนจนกวาจะไดผลลพธทถกตอง
คาสงพนฐานในการทางานของภาษาซ คาสง printf( ) ถอวาเปนคาสงพนฐานทสดในการแสดงผลขอมลทกชนดออกทางหนาจอ
ไมวาจะเปนจานวนเตม ( int ) , ทศนยม ( float ) , ขอความ ( string ) หรออกขระ คาสง putchar( ) คอ คาสงในการแสดงผลตวอกษรหรออกขระ (char) ออกทางหนาจอ นอกจากใชคาสง printf( ) พรอมกบกาหนดรหสควบคมรปแบบ %c แลว เราสามารถเรยกใชคาสงสาหรบแสดงตวอกษรหรออกขระโดยเฉพาะไดอกดวย
คาสง puts( ) คอ คาสงในการแสดงผลขอความหรออกษรออกทางหนาจอคอมพวเตอร ดงนนขอแตกตางระหวางคาสง putchar( ) กบคาสง puts() คอ putchar( ) จะสามารถแสดงผลแคตวอกษรหรออกขระ แต puts( ) สามารถแสดงผลเปนขอความได
คาสง scanf( ) เปนคาสงพนฐานทใชในการรบผลขอมลจากผใชงาน และในภาษาซ การรบขอมลจากคยบอรดสามารถทาไดโดยการเรยกใชฟงกชน scanf( ) ซงเปนฟงกชนมาตรฐานสาหรบรบขอมลจากคยบอรด โดยสามารถรบขอมลไดทกประเภท ไมวาจะเปนจานวนเตม (int) , ทศนยม (float) ,อกขระ (char) หรอขอความกตาม
คาสง getchar( ) โดยในการรบคาขอมลตาง ๆ ในภาษาซนอกจากใชคาสง scanff( ) แลว ผพฒนาโปรแกรมสามารถเรยกใชคาสง getchar( ) เพอการรบคาไดอกดว
คาสง getch( ) ในการรบคาอกษระในภาษาซ นอกจากใชคาสง scanff( ) และคาสง getchar( ) แลว ผพฒนาโปรแกรมสามารถเรยกใชคาสง getch( ) เพอใชในการรบขอมลไดอกคาสงหนง ขอสงเกตถงแมวาทงคาสง getchar( ) และ getch( ) จะใชสาหรบรบขอมลชนดอกขระเหมอนกน แตทง 2
78
คาสงนมความแตกตางกนอยตรงท คาสง getchar( ) เมอปอนอกขระเขามาแลว จะตองกดปม <Enter> โปรแกรมจงจะกลบไปทางานตอได และตวอกขระทเราปอนจะแสดงขนมาใหเหนบนหนาจอดวย สวนคาสง getch( ) ไมตองกดปม <Enter> เพยงแคผใชงานปอนอกขระเขามา 1 ตว โปรแกรมจะกลบไปทางานตอทนท และตวอกขระทเราปอนจะไมแสดงขนมาใหเหน
คาสง clrscr( ) เปนคาสงทใชในการเคลยรหรอลางหนาจอ ประโยชนหลกของคาสงน คอ ผพฒนาโปรแกรมสามารถทจะทาการลางหนาจอรายงานตาง ๆ ของขอมลออกไปได
คาสง goto เปนคาสงทใชในการขามหรอกระโดดกลบไปทางานในคาสงอน ๆ ตามทผพฒนาโปรแกรมตองการ คาถามทบทวน
1. จงอธบายขนตอนของการพฒนาโปรแกรมภาษาซวามกขนตอนอะไรบาง และแตละขนตอนมความสาคญอยางไรตอการเขยนโปรแกรมคอมพวเตอร
2. จงเขยนโปรแกรมใหแสดงผลขอมลดงน I Love Dusittrang.
3. จงเขยนโปรแกรมใหแสดงผลขอมลดงน C Programming C Programming C Programming C Programming C Programming C Programming
4. จงเขยนโปรแกรมเพอรบคาตวอกขระพรอมทงแสดงผลตวอกขระทรบเขามา แลวใหโปรแกรมขนไปรบคาใหม ดงตวอยางตอไปน Enter Character : a Show Character : a
Enter Character : Z Show Character : Z
Enter Character : y Show Character : y 5. จงเขยนโปรแกรมเพอรบคาตวเลขพรอมทงแสดงผลตวเลขทรบเขามา จากนนใหโปรแกรมรอรบคาใด ๆ จากคยบอรด หากมการปอนคาใด ๆ จากคยบอรดใหโปรแกรมจะลางขอมลทหนาจอใหม แลวใหโปรแกรมขนไปรบคาใหมอกครง ดงตวอยางตอไปน
Enter Number : 55.01 Numbe = 55.01
หากมกดคยบอรด (โปรแกรมจะลางขอมลหนาจอใหม แลวใหโปรแกรมขนไปรบคาใหมอกครง) Enter Number :
79
6. จงเขยนโปรแกรมแปลงคาจากหนวยเมตรเปนหนวยเซนตเมตร ดงตวอยาง Meter = 1
Centimeter = 100
Meter = 2.5 Centimeter = 2500
7. จงเขยนโปรแกรมคานวณหาพนทสามเหลยม โดยโปรแกรมทาการรบคา ฐาน และ สง แลว
นามาคานวณตามสตรพนทสามเหลยม = (1/2) x ฐาน x สง ดงตวอยาง base = 10
high = 20 triangle = 100.00
base = 8 high = 15 triangle = 60.00
เอกสารอางอง
คะชา ชาญศลป. (2548). ภาษาซสาหรบผเรมตน. กรงเทพมหานคร: วรตนเอดดเคชน. ประภาพร ชางไม. (2545). คมอการเขยนโปรแกรมภาษา C ฉบบผเรมตน. กรงเทพมหานคร:
อนโฟเพรส. ธรวฒน ประกอบผล. (2553). คมอการเขยนโปรแกรมภาษา C. กรงเทพมหานคร: ซมพลฟลาย. สระสทธ ทรงมา และภรพจน แกวยอง. (2552). การโปรแกรมคอมพวเตอร.: มหาวทยาลยราชภฏ
สวนดสต. สานนท เจรญฉาย. (2543). การเขยนโปรแกรมและอลกอรทม. กรงเทพมหานคร: มหาจฬาลงกรณราช
วทยาลย. สมชาย รตนเลศนสรณ. (2553). การเขยนโปรแกรมคอมพวเตอรดวยภาษาซ. กรงเทพมหานคร: สมาคม
สงเสรมเทคโนโลย (ไทย-ญปน) ส.ส.ท. อรพน ประวตบรสทธ. (2554). คมอการเรยนภาษา C ฉบบปรบปรงใหม (พมพครงท 10).
กรงเทพมหานคร: โปรวชน. http://www.mwit.ac.th/~cs/download/tech30101/TECH30101_ch7.html http://www.e-learning.snru.ac.th/els/program1/lesson2/page2_4.html https://www.sites.google.com/site/cprogramingbypanus/kar-saedng-phllaphth/printf1.html http://www.krubpk.com/com_2/pan7/pan7.html
80
บทท 7
โครงสรางการควบคมการทางานแบบทางเลอก
แผนการสอนประจาบท หวขอเนอหา 7.1 คาสง if 7.1.1 คาสง if แบบเลอกทาทางเดยว (if) 7.1.2 คาสง if แบบเลอกทาสองทาง (if… else) 7.1.3 คาสง if แบบเลอกทาหลายทาง (if… else if)
7.2 คาสง switch วตถประสงคเชงพฤตกรรม 1. ผเรยนสามารถเขาใจหลกการทางานของคาสง if ไดอยางเขาใจและถกตอง 2. ผเรยนสามารถนาคาสง if ไปใชงานในการเขยนโปรแกรมในกรณตาง ๆ ไดอยางถกตอง 3. ผเรยนสามารถเขาใจหลกการทางานของคาสง switch ไดอยางเขาใจและถกตอง
4. ผเรยนสามารถนาคาสง switch ไปใชงานในการเขยนโปรแกรมในกรณตาง ๆ ไดอยางถกตอง วธการสอน 1. สอนแบบบรรยายโดยใชเอกสารประกอบการสอน 2. สอนแบบบรรยายโดยใช Slide Power Point 3. สอนโดยใชโปรแกรม Turbo C++ 4.5 เพอลงมอปฏบตในการเขยนโปรแกรมภาษาซ
4. สอนโดยใหผเรยนเปนสวนกลาง โดยใชวธถามตอบกบผเรยนระหวางบรรยาย 5. ใหผเรยนสรปและอธบายหวขอทผเรยนทไดรบมอบหมาย
สอการเรยนการสอน 1. เอกสารประกอบการสอน
2. Slide Power Point 3. โปรแกรม Turbo C++ 4.5 4. ตวอยางแบบทดสอบ
การวดผลและประเมนผล 1. การทาตามตวอยางโจทยคาสงและการทาแบบฝกหด
2. ความตงใจในชนเรยนและการรวมมอในการนาเสนอหรออภปราย 3. สงเกตจากการตอบคาถามและการรวมทากจกรรมในชนเรยน
81
บทท 7
โครงสรางการควบคมการทางานแบบทางเลอก
ในการพฒนาหรอเขยนโปรแกรมคอมพวเตอรไมวาจะเปนภาษาคอมพวเตอรใด ๆ กตามเงอนไขหนงทมการเรยกใชงานอยางบอยครง คอ เงอนไขแบบทางเลอก โดยในภาษาซจะมคาสงทเปนการเลอกเงอนไขการทางานอย 2 คาสง คอ คาสง if และคาสง switch แตคาสงทมการใชงานมากนนกคอคาสง if ดงนนนนผทคดจะพฒนาโปรแกรมคอมพวเตอรจะตองมความเชยวชาญในการใชคาสง if ใหมาก เพราะเปนคาสงทตองมาใชในการตดสนใจในทางเลอกทางทางานใหกบโปรแกรม ซงในการพฒนาโปรแกรมคอมพวเตอร ผพฒนาจะมการเรยกใชงานคาสง if ไดหลายรปแบบขนอยกบความเหมาะสมกบเงอนไขนน ๆ โดยคาสง if จะมรปแบบหลกอย 3 รปแบบ คอ
1.) คาสง if แบบเลอกทาทางเดยว (if) 2.) คาสง if แบบเลอกทาสองทาง (if… else) 3.) คาสง if แบบเลอกทาหลายทาง (if… else if)
7.1 คาสง if
7.1.1 คาสง if แบบเลอกทาทางเดยว (if) คาสง if แบบเลอกทาทางเดยว เปนคาสงทใชในการตรวจสอบเงอนไขของผใชงาน โดยจะตรวจสอบแบบทางเดยว คอ จะทางานเฉพาะกรณทเงอนไขเปนจรงเทานน หากเงอนไขเปนเทจจะไมทางาน โดยเงอนไขทเปนจรง คอ คาสงทอยใน { } ของคาสง if เทานน ซงคาสง if แบบเลอกทาทางเดยวมรปแบบการทางานของคาสง if แบบเลอกทาทางเดยวแสดงไว ดงน
If (เงอนไข) { // ชดคาสงทเปนจรง คาสง…… 1
คาสง…… 2 คาสง…… 3
คาสง…… คาสง…… คาสง……
}
82
ภาพท 7.1 ผงงานแสดงการทางานของคาสง if แบบเลอกทาทางเดยว ตวอยางการใชคาสง if แบบเลอกทาทางเดยว
ตวอยางท 7.1 ใหโปรแกรมรบคานาหนกจากผใชงาน แลวใหตรวจสอบวาคานาหนกทรบรบมามคามากกวา 100 หรอไม ถามากกวาหรอเทากบ 80 ใหโปรแกรมแสดงคาวา “Fat” ออกมาทางหนาจอ
// โคดโปรแกรม #include "stdio.h" main( )
{ float weight; printf("Please fill weight : ");
scanf(“%f”,& weight); if (weight >= 80)
{ printf("\nYou fat.");
} }
จรง
คาสง
ตรวจสอบ เงอนไข
เทจ
83
ผลลพธเมอทดสอบโปรแกรม
และหากกรณใสคานาหนกมากวา 80 โปรแกรมจะแสดงผล ดงน
ตวอยางท 7.2 ใหโปรแกรมรบคาตวเลขจานวนเตมจากผใชงาน 2 คา แลวใหโปรแกรม
ตรวจสอบวาหากคาแรกทปอนเขามามคามากกวาใหแสดงผลออกทางหนาจอวา “Bingo” จากนนให ผใชงานกดคยบอรดใด ๆ แลวใหโปรแกรมขนรบคาใหมแลวตรวจสอบเงอนไขเชนเดมอกครง
Please fill weight :
Please fill weight : 90 You fat.
// โคดโปรแกรม #include "stdio.h" main( )
{ int num1 , num2; char ch; loop1: printf("Please Number1: "); scanf("%d",&num1); printf("\nPlease Number2: "); scanf("%d",&num2); if (num1 > num2) { printf("\nBiggo ");
} ch = getch(); goto loop1;
}
84
ผลลพธเมอทดสอบโปรแกรม
- กรณใสคาตวแรกมากกวากวาตวทสอง จากนนกดคยบอรด 1 ครง
- กรณใสคาตวแรกนอยกวากวาตวทสอง จากนนกดคยบอรด 1 ครง
- กรณใสคาตวแรกมากกวากวาตวทสอง จากนนกดคยบอรด 1 ครง และใสคาตวแรกมากกวากวาตวทสองอกครง
Please Number1: 100 Please Number2: 50
Biggo
Please Number1: _
Please Number1: 3000 Please Number2: 5000
Please Number1: _
Please Number1: 100 Please Number2: 50
Biggo
Please Number1: 8000 Please Number2: 7999
Biggo
85
7.1.2 คาสง if แบบเลอกทาสองทาง (if… else) คาสง if แบบเลอกทาสองทางเปนคาสงทใชในการตรวจสอบเงอนไขของผใชงาน โดยจะตรวจสอบการทางานทงสองเงอนไข คอ กรณทเงอนไขเปนจรงกจะทางานคาสงทอยใน { } ของเงอนไขทเปนจรง แตหากกรณทเปนเทจจะทางานคาสงทอยใน { } ภายใตเงอนไข else รปแบบการทางานของคาสง if แบบเลอกทาสองทางแสดงไวดงน
If (เงอนไข) { // ชดคาสงทเปนจรง คาสง…… 1
คาสง…… 2 คาสง…… 3
คาสง…… } else { // ชดคาสงทเปนเทจ คาสง…… 1
คาสง…… 2 คาสง…… 3
คาสง…… }
86
ภาพท 7.2 ผงงานแสดงการทางานของคาสง if แบบเลอกทาสองทาง ตวอยางการใชคาสง if แบบเลอกทาสองทาง
ตวอยางท 7.3 ใหโปรแกรมรบคาตวเลขจานวนเตมจากผใชงาน 2 คา แลวใหโปรแกรมตรวจสอบวาหากคาใดมากกวากนใหแสดงคาตอบคานนออกทางหนาจอ
จรง
คาสง 1
ตรวจสอบ เงอนไข
เทจ
คาสง 2
// โคดโปรแกรม #include "stdio.h" main( )
{ int num1 , num2; printf("Please Number1: "); scanf("%d",&num1); printf("\nPlease Number2: "); scanf("%d",&num2); if (num1 > num2) { printf("\n%d",num1);
} else
{ printf("\n%d",num2);
} }
87
ผลลพธเมอทดสอบโปรแกรม
- กรณใสคาตวหนงมากกวาตวทสอง
- กรณใสคาตวสองมากกวาตวทหนง
- กรณใสคาตวแรกเทากบตวทสอง
Please Number1: 450 Please Number2: 150
450
Please Number1: 1999 Please Number2: 2001
2001
Please Number1: 100 Please Number2: 100 100
88
ตวอยางท 7.4 ใหโปรแกรมรบคาตวเลขจานวนเตม 1 จานวน แลวตรวจสอบวาคาเทากบ 100 หรอไม ถาคาทรบเขามามคาเทากบ 100 ใหโปรแกรมแสดงคาวา “Biggo” ออกมาทางหนาจอ แตถาหากไมใชใหโปรแกรมเคลยรหนาจอ แลวขนไปรบคาใหมแลว
ผลลพธเมอทดสอบโปรแกรม
- กรณใสคาตวเลขจานวนเตมใด ๆ ทไมเทากบ 100
จากนนโปรแกรมจะทาเคลยรหนาจอแลวขนไปรบคาใหมอกครง
// โคดโปรแกรม #include "stdio.h" main( )
{ int num;
loop_Y: printf("Enter Number : "); scanf("%d",&num); if (num == 100) { printf("\nBiggo");
} else
{ clrscr(); goto loop_Y;
} }
Enter Number : 300
Enter Number :
89
- กรณใสคาตวเลขจานวนเตมเทากบ 100
ตวอยางท 7.5 ใหโปรแกรมแสดงขอความวา “You are a man.” ถาผใชโปรแกรมตอบ y ใหแสดงคาวา “Man” แตถาตอบอน ๆ ใหแสดงคาวา “Women” จากนนใหโปรแกรมขนไปรบคาใหมอกครง
Enter Number : 300
Biggo
// โคดโปรแกรม #include "stdio.h" main( )
{ char ch;
loop1: printf("\nYou are a man. (y) : "); ch = getch(); if (ch == ‘y’) { printf("\nMen");
} else
{ printf("\nWomen"); } goto loop1; }
90
ผลลพธเมอทดสอบโปรแกรม
- กรณใสคาอกษระทไมใช “y” (ตวพมพเลก)
- กรณใสคาอกษระทเปนตว “y” (ตวพมพเลก)
You are a man. (y) : m
Women
You are a man. (y) : a
Women
You are a man. (y) : Y
Women
You are a man. (y) :
You are a man. (y) : m
Men
You are a man. (y) :
91
7.1.3 คาสง if แบบเลอกทาหลายทาง (if… else if) คาสง if แบบเลอกทาหลายทาง จะเปนคาสงทใชในการตรวจสอบเงอนไขของผใชงานทมเงอนไขมากกวาสองทางเลอก โดยการตรวจสอบการทางานในเงอนไขใด ๆ ทเปนจรงเทานน แตถาไมมเงอนไขใด ๆ เปนจรง โปรแกรมจะไปทางานภายใตเงอนไข else รปแบบการทางานของคาสง if แบบเลอกทาหลายทางแสดงไวดงน
If (เงอนไขท 1) { // ชดคาสงของเงอนไขท 1 คาสง……
คาสง…… } else If (เงอนไขท 2) { // ชดคาสงของเงอนไขท 2 คาสง……
คาสง…… } else If (เงอนไขท 3) { // ชดคาสงของเงอนไขท 3 คาสง……
คาสง…… } else If (เงอนไขท n) { // ชดคาสงของเงอนไขท n คาสง……
คาสง…… } else { // ชดคาสงทเปนเทจ (หากกรณทเงอน if ใด ๆ เปนเทจทงหมด) คาสง……
คาสง…… }
92
ภาพท 7.3 ผงงานแสดงการทางานของคาสง if แบบเลอกทาหลายทาง
จรง คาสง 1
ตรวจสอบ เงอนไขท 1 (if)
เทจ
คาสง 2 ตรวจสอบ
เงอนไขท 2 (if else)
เทจ
คาสง 3 ตรวจสอบ
เงอนไขท 3 (if else)
เทจ
คาสง n ตรวจสอบ
เงอนไขท n (if else)
เทจ
คาสงภายใตเงอนไข else
จรง
จรง
จรง
93
ตวอยางการใชคาสง if แบบเลอกทาหลายทาง
ตวอยางท 7.6 ใหโปรแกรมรบคาตวเลขจานวนเตมจากผใชงาน 2 คา แลวใหโปรแกรมตรวจสอบ โดยมเงอนไขดงน - หากคาแรกทรบเขามามคามากกวาคาทสองใหแสดงคาวา “Number 1 : Bingo”
- หากคาแรกทรบเขามามคานอยกวาคาทสองใหแสดงคาวา “Number 2 : Bingo” - หากคาแรกทรบเขามามคาเทากบคาทสองใหแสดงคาวา “Error” - เมอโปรแกรมแสดงผลใด ๆ เสรจสนใหโปรแกรมขนรบคาใหมอกครง
// โคดโปรแกรม #include "stdio.h" main( )
{ int num1 , num2;
loop_new: printf("\n\nPlease Number1: "); scanf("%d",&num1); printf("\nPlease Number2: "); scanf("%d",&num2); if (num1 > num2) { printf("\nNumber 1 : Bingo"); } else if (num1 < num2) { printf("\nNumber 2 : Bingo"); } else { printf("\nError"); } goto loop_new; }
94
ผลลพธเมอทดสอบโปรแกรม
Please Number1: 111 Please Number2: 101
Number 1 : Bingo
Please Number1: 9876 Please Number2: 9998
Number 2 : Bingo
Please Number1: 1001 Please Number2: 1001
Error
Please Number1: 434 Please Number2: 343
Number 1 : Bingo
Please Number1: _
95
ตวอยางท 7.7 โปรแกรมตดเกรดโดยใหรบคาจากผใชงาน 3 คา ซงคาท 1 คอ คะแนนเกบ คาท 2 คอ คะแนนสอบกลางภาค และคาท 3 คอ คะแนนปลายภาค จากนนนาคาทง 3 มารวมกนจากนนนาคะแนนรวมทไดมาตรวจสอบเกรดแลวใหแสดงผลคะแนนเกรดดงระดบคาคะแนน ดงน
คาคะแนนรวม 90 - 100 = A คาคะแนนรวม 70 - 89 = B คาคะแนนรวม 60 - 69 = C คาคะแนนรวม 50 - 59 = D คาคะแนนรวม 0 - 49 = F
// โคดโปรแกรม #include "stdio.h" main( )
{ int num1 , num2 , num3 , num4; printf("\nCollection points.: "); scanf("%d",&num1); printf("\nCentral points.: "); scanf("%d",&num2); printf("\nFinal score.: "); scanf("%d",&num3); num4 = num1+num2+num3; printf("\nAggregate.: %d " ,num4); if (num4>= 90 && num4<= 100) { printf("\n\nGrade 'A'"); } else if (num4>= 70 && num4<= 89) { printf("\n\nGrade 'B'"); } else if (num4>= 60 && num4<= 69) { printf("\n\nGrade 'C'"); } else if (num4>= 50 && num4<= 59) { printf("\n\nGrade 'D'"); } else { printf("\n\nGrade 'F'"); } }
96
ผลลพธเมอทดสอบโปรแกรม
Collection points.: 10 Central points.: 30 Final score.: 30 Aggregate.: 70 Grade 'B' Collection points.: 25 Central points.: 40 Final score.: 30 Aggregate.: 95 Grade 'A' Collection points.: 15 Central points.: 15 Final score.: 10 Aggregate.: 40 Grade 'F' Collection points.: 25 Central points.: 5 Final score.: 25 Aggregate.: 55 Grade 'D' Collection points.: 22 Central points.: 22 Final score.: 22 Aggregate.: 66 Grade 'C' Collection points.: _
97
7.2 คาสง switch
คาสง switch เปนคาสงทมทางเลอกแบบหลายทางเชนเดยวกบคาสง if แบบเลอกทาหลายทาง แตคาสง switch เปนคาสงทตดสนใจทางเลอกกรณทมตวแปรเดยว และเมอจบการทางานในคาสงใด ๆ ในเงอนไขนน ๆ จะตองจบการทางานดวยคาสง break; โดยรปแบบการทางานของคาสง switch แสดงไวดงน
switch (ตวแปร) { case 1 : // ชดคาสงของเงอนไขท 1 คาสง……
คาสง…… break;
case 2 : // ชดคาสงของเงอนไขท 2 คาสง……
คาสง…… break;
case 3 : // ชดคาสงของเงอนไขท 3 คาสง……
คาสง…… break;
case 4 : // ชดคาสงของเงอนไขท 4 คาสง……
คาสง…… break;
case n : // ชดคาสงของเงอนไขท n คาสง……
คาสง…… break;
default : /* ชดคาสงกรณทเงอนใน case ใดๆ ไมมเงอนไขใดเปนจรง */
คาสง…… คาสง……
}
98
ภาพท 7.4 ผงงานแสดงการทางานของคาสง switch
จรง คาสง 1
ตรวจสอบ case 1
เทจ
คาสง 2 ตรวจสอบ case 2
เทจ
คาสง 3 ตรวจสอบ case 3
เทจ
คาสง n ตรวจสอบ case 4
เทจ
คาสงภายใตเงอนไข default
จรง
จรง
จรง
99
ตวอยางท 7.8 จงเขยนโปรแกรมใหรบคาตวเลขจานวนเตมจากผใชงานหนงตวเลข โดยใหโปรแกรมรบคาตวเลขจานวนเตมเลข 1 ถง 10 จากนนโปรแกรมจะพมพคาของตวเลขทผใชงานไดกรอกเขาไป แตหากตวเลขจานวนเตมไมไดอยในชวงทกาหนด โปรแกรมจะแสดงคาวา “Error” เมอโปรแกรมแสดงผลใด ๆ เสรจสนโปรแกรมจะขนไปคาตวเลขใหมอกครง
// โคดโปรแกรม #include "stdio.h" main( )
{ int num; loop1: printf("\n\nEnter Number : "); scanf("%d",&num); switch(num) { case 1: printf("\none"); break; case 2: printf("\ntwo"); break; case 3: printf("\nthree"); break; case 4: printf("\nfour"); break; case 5: printf("\nfive"); break; case 6: printf("\nsix"); break; case 7: printf("\nseven"); break; case 8: printf("\neigth"); break; case 9: printf("\nnine"); break; case 10: printf("\nten"); break; default: printf("\nerror"); } goto loop1; }
100
ผลลพธเมอทดสอบโปรแกรม
Enter Number : 1 one Enter Number : 2 two Enter Number : 3 three Enter Number : 4 four Enter Number : 5 five Enter Number : 6 six Enter Number : 7 seven Enter Number : 8 eight Enter Number : 9 nine Enter Number : 10 ten Enter Number : 11 error Enter Number : _
101
ตวอยางท 7.9 ตวอยางนเปนการใชโจทยทดลองจากโจทยตวอยางท 7.8 แตครงจะทาการทดลองตดคาสง break; ในบางบรรทด ทงนเพอจะใหผพฒนาผโปรแกรมเหนวาหากไมมคาสง break; โปรแกรมจะไมหยดการทางาน โดยโปรแกรมจะทาการแสดงผลไปเรอย ๆ จนกวาจะเจอคาสง break; ดงตวอยางโคดคาสงตอไปน
// โคดโปรแกรม #include "stdio.h" main( )
{ int num; loop1: printf("\n\nEnter Number : "); scanf("%d",&num); switch(num) { case 1: printf("\none"); case 2: printf("\ntwo"); case 3: printf("\nthree"); break; case 4: printf("\nfour"); break; case 5: printf("\nfive"); case 6: printf("\nsix"); break; case 7: printf("\nseven"); case 8: printf("\neight"); case 9: printf("\nnine"); case 10: printf("\nten"); default: printf("\nerror"); } goto loop1; }
102
ผลลพธเมอทดสอบโปรแกรม
Enter Number : 1 one two three Enter Number : 2 two three Enter Number : 3 three Enter Number : 4 four Enter Number : 5 five six Enter Number : 6 six Enter Number : 7 seven eight nine ten error Enter Number : 10 ten error Enter Number : 11 error Enter Number : _
103
สรปทายบท
ในการพฒนาหรอเขยนโปรแกรมคอมพวเตอรไมวาจะเปนภาษาคอมพวเตอรใด ๆ กตามเงอนไขหนงทมการเรยกใชงานอยางบอยครง คอ เงอนไขแบบทางเลอก โดยในภาษาซจะมคาสงทเปนการเลอกเงอนไขการทางานอย 2 คาสง คอ คาสง if และคาสง switch แตคาสงทมการใชงานมากนนกคอคาสง if ดงนนนนผทคดจะพฒนาโปรแกรมคอมพวเตอรจะตองมความเชยวชาญในการใชคาสง if ใหมาก เพราะเปนคาสงทตองมาใชในการตดสนใจในทางเลอกทางทางานใหกบโปรแกรม
คาสง if คาสง if มหลายรปแบบขนอยกบความเหมาะสมกบเงอนไขนน ๆ โดยคาสง if จะม
รปแบบหลกอย 3 รปแบบ คอ 1.) คาสง if แบบเลอกทาทางเดยว (if)
คาสง if แบบเลอกทาทางเดยว เปนคาสงทใชในการตรวจสอบเงอนไขของผใชงาน โดยจะตรวจสอบแบบทางเดยว คอ จะทางานเฉพาะกรณทเงอนไขเปนจรงเทานน หากเงอนไขเปนเทจจะไมทางาน โดยเงอนไขทเปนจรง คอ คาสงทอยใน { } ของคาสง if เทานน 2.) คาสง if แบบเลอกทาสองทาง (if… else) คาสง if แบบเลอกทาสองทางเปนคาสงทใชในการตรวจสอบเงอนไขของผใชงาน โดยจะตรวจสอบการทางานทงสองเงอนไข คอ กรณทเงอนไขเปนจรงกจะทางานคาสงทอยใน { } ของเงอนไขทเปนจรง แตหากกรณทเปนเทจจะทางานคาสงทอยใน { } ภายใตเงอนไข else 3.) คาสง if แบบเลอกทาหลายทาง (if… else if) คาสง if แบบเลอกทาหลายทาง จะเปนคาสงทใชในการตรวจสอบเงอนไขของผใชงานทมเงอนไขมากกวาสองทางเลอก โดยการตรวจสอบการทางานในเงอนไขใด ๆ ทเปนจรงเทานน แตถาไมมเงอนไขใด ๆ เปนจรง โปรแกรมจะไปทางานภายใตเงอนไข else
คาสง switch คาสง switch เปนคาสงทมทางเลอกแบบหลายทางเชนเดยวกบคาสง if แบบเลอกทา
หลายทาง แตคาสง switch เปนคาสงทตดสนใจทางเลอกกรณทมตวแปรเดยว และเมอจบการทางานในคาสงใด ๆ ในเงอนไขนน ๆ จะตองจบการทางานดวยคาสง break; คาถามทบทวน
1. จงเขยนโปรแกรมตรวจสอบคาความสง หากความสงมากกวาหรอเทากบ 180 ใหโปรแกรมแสดงคาวา “High” และหากความสงนอยกวา 180 ใหโปรแกรมแสดงคาวา “Short” 2. จงเขยนโปรแกรมเรยงลาดบจากนอยไปมาก โดยใหรบคาตวเลขจานวนเตม 3 จานวน
3. จงเขยนโปรแกรมเรยงลาดบจากมากไปนอย โดยใหรบคาตวเลขจานวนเตม 5 จานวน 4. จงเขยนโปรแกรมตดเกรดโดยใหรบคาจากผใชงาน 1 คา แลวใหแสดงผลคะแนนเกรดดงระดบ
คาคะแนน ดงน คาคะแนนรวม 90 - 100 = A คาคะแนนรวม 85 - 89 = B+ คาคะแนนรวม 75 - 84 = B
104
คาคะแนนรวม 70 - 74 = C+ คาคะแนนรวม 60 - 69 = C คาคะแนนรวม 55 - 59 = D+ คาคะแนนรวม 54 - 50 = D คาคะแนนรวม 0 - 49 = F
และหากผใชงานปอนคาคะแนนไมอยชวงทกาหนดใหโปรแกรมแสดงคาวา “Error”
5. จงเขยนโปรแกรมโดยใชคาสง switch โดยใหโปรแกรมรบคาตวอกขระจากผใชงาน แลวแสดงผลดงน ถาผใชงานปอน ‘A’ โปรแกรมจะแสดงคาวา “Apple”
ถาผใชงานปอน ‘B’ โปรแกรมจะแสดงคาวา “Book” ถาผใชงานปอน ‘C’ โปรแกรมจะแสดงคาวา “Cat”
ถาผใชงานปอน ‘D’ โปรแกรมจะแสดงคาวา “Dusit” ถาผใชงานปอน ‘E’ โปรแกรมจะแสดงคาวา “Eagle” และหากผใชงานปอนคาตวอกขระไมอยในคาทกาหนดใหโปรแกรมแสดงคาวา “Error”
เอกสารอางอง
คะชา ชาญศลป. (2548). ภาษาซสาหรบผเรมตน. กรงเทพมหานคร: วรตนเอดดเคชน. ประภาพร ชางไม. (2545). คมอการเขยนโปรแกรมภาษา C ฉบบผเรมตน. กรงเทพมหานคร:
อนโฟเพรส. ธรวฒน ประกอบผล. (2553). คมอการเขยนโปรแกรมภาษา C. กรงเทพมหานคร: ซมพลฟลาย. สระสทธ ทรงมา และภรพจน แกวยอง. (2552). การโปรแกรมคอมพวเตอร.: มหาวทยาลยราชภฏ
สวนดสต. สมชาย รตนเลศนสรณ. (2553). การเขยนโปรแกรมคอมพวเตอรดวยภาษาซ. กรงเทพมหานคร: สมาคม
สงเสรมเทคโนโลย (ไทย-ญปน) ส.ส.ท. สานนท เจรญฉาย. (2543). การเขยนโปรแกรมและอลกอรทม. กรงเทพมหานคร: มหาจฬาลงกรณราช
วทยาลย. อรพน ประวตบรสทธ. (2554). คมอการเรยนภาษา C ฉบบปรบปรงใหม (พมพครงท 10).
กรงเทพมหานคร: โปรวชน. http://www.mwit.ac.th/~cs/download/tech30101/TECH30101_ch8.html http://www.e-learning.snru.ac.th/els/program1/lesson2/page5_1.html https://www.sites.google.com/site/cprogramingbypanus/kar-saedng-phllaphth/printf4.html http://www.krubpk.com/com_2/pan7/pan7_1.html
105
บทท 8
โครงสรางการควบคมการทางานแบบวนรอบ
แผนการสอนประจาบท หวขอเนอหา 8.1 คาสง for loop
8.2 คาสง while loop 8.3 คาสง do while
วตถประสงคเชงพฤตกรรม 1. ผเรยนสามารถเขาใจหลกการทางานของคาสง for loop ไดอยางเขาใจและถกตอง 2. ผเรยนสามารถนาคาสง for loop ไปใชงานในการเขยนโปรแกรมในกรณตาง ๆ ไดอยางถกตอง 3. ผเรยนสามารถเขาใจหลกการทางานของคาสง while loop ไดอยางเขาใจและถกตอง
4. ผเรยนสามารถนาคาสง while loop ไปใชงานในการเขยนโปรแกรมในกรณตาง ๆ ไดอยางถกตอง
5. ผเรยนสามารถเขาใจหลกการทางานของคาสง do while ไดอยางเขาใจและถกตอง 6. ผเรยนสามารถนาคาสง do while ไปใชงานในการเขยนโปรแกรมในกรณตาง ๆ ไดอยาง
ถกตอง วธการสอน 1. สอนแบบบรรยายโดยใชเอกสารประกอบการสอน 2. สอนแบบบรรยายโดยใช Slide Power Point 3. สอนโดยใชโปรแกรม Turbo C++ 4.5 เพอลงมอปฏบตในการเขยนโปรแกรมภาษาซ
4. สอนโดยใหผเรยนเปนสวนกลาง โดยใชวธถามตอบกบผเรยนระหวางบรรยาย 5. ใหผเรยนสรปและอธบายหวขอทผเรยนทไดรบมอบหมาย
สอการเรยนการสอน 1. เอกสารประกอบการสอน
2. Slide Power Point 3. โปรแกรม Turbo C++ 4.5 4. ตวอยางแบบทดสอบ
การวดผลและประเมนผล 1. การทาตามตวอยางโจทยคาสงและการทาแบบฝกหด
2. ความตงใจในชนเรยนและการรวมมอในการนาเสนอหรออภปราย 3. สงเกตจากการตอบคาถามและการรวมทากจกรรมในชนเรยน
106
บทท 8
โครงสรางการควบคมการทางานแบบวนรอบ
ในการพฒนาหรอเขยนโปรแกรมคอมพวเตอรเพอใหโปรแกรมคอมพวเตอรทางานอะไรซา ๆ หลาย ๆ ครงคาตอบทงานทสด คอ การเรยกใชงานคาสงโปรแกรมทเรยกวา ลป (loop) ซงลปมหลายรปแบบ ทง for loop while loop และ do while และในภาษาซการใชงานคาสงวนลปมการใชงานทงาย และมการกาหนดรอบทาซาไดแนนอนชดเจน ดงนนในเนอบทนผพฒนาโปแกรมจะไดเรยนรคาสงวนลป (loop) ตาง ๆ ดงน
1.) คาสง for loop 2.) คาสง while loop 3.) คาสง do while
8.1 คาสง for loop คาสง for loop เปนคาสงทใชงานงายและมการกาหนดรอบทาซาทแนนอนวาจะตองทาซากรอบ อกทงรปแบบของ for loop จะเปนรปแบบเดยวกนกบภาษาทพฒนามาจากภาษาซ เชน php, java เปนตน ซงรปแบบคาสง for loop มรปแบบการใชงานดงน
for (คาเรมตน ; เงอนไขตรวจสอบ ; เพมหรอลดจานวน ) { // ชดคาสงกรณทเงอนไขตรวจสอบเปนจรง คาสง…… 1
คาสง…… 2 คาสง…… 3
คาสง…… 4 คาสง…… คาสง…… n
}
107
ภาพท 8.1 ผงงานแสดงการทางานของคาสง for loop ตวอยางการใชคาสง for loop
ตวอยางท 8.1 ใหโปรแกรมแสดงตวเลข 1 ถง 10 โดยการใชคาสง for loop
ผลลพธเมอทดสอบโปรแกรม
// โคดโปรแกรม #include "stdio.h" main( )
{ int i; for (i=1; i<=10; i++) { printf("%d ",i); } }
จรง
ทาคาสง
ตรวจสอบ เงอนไข
เทจ
กาหนดคาเรมตน
1 2 3 4 5 6 7 8 9 10
108
ตวอยางท 8.2 ใหโปรแกรมรบคาตวเลขจานวนเตมจากผใชงาน 1 คา จากนนใหโปรแกรมแสดงจานวนตวเลขจาก 1 ถง จานวนทผใชปอนเขาไป
ผลลพธเมอทดสอบโปรแกรม
// โคดโปรแกรม #include "stdio.h" main( )
{ int i , num;
loop1: printf("\n\nEnter number : "); scanf("%d",&num); for (i=1; i<=num; i++) { printf("%d ",i); } goto loop1; }
Enter number : 10 1 2 3 4 5 6 7 8 9 10
Enter number : 5 1 2 3 4
Enter number : 1 1 Enter number : 0
Enter number : 3 1 2 3
Enter number :_
109
ตวอยางท 8.3 โปรแกรมแสดงผลเลขคเลขค โดยมเงอนไขคอหากผใชงานปอนคา ‘x’ โปรแกรมจะทาการแสดงเลขคจาก 0 - 20 และหากผใชงานปอนคา ‘y’ โปรแกรมจะทาการแสดงเลขคจาก 1 - 19 แตหากผใชงานปอนคาอน ๆ โปรแกรมจะทาการแสดงคาวา “Error” ออกมา
// โคดโปรแกรม #include "stdio.h" main( )
{ int i; char ch;
loop1: printf("\n\nEnter number : "); ch = getch(); if(ch == 'x') { // สวนการแสดงเลขค for (i=0; i<=20; i= i+2) { printf("%d ",i); } } else if(ch == 'y') { // สวนการแสดงเลขค for (i=1; i<=20; i= i+2) { printf("%d ",i); } } else { printf("Error"); } goto loop1; }
110
ผลลพธเมอทดสอบโปรแกรม
ตวอยางท 8.4 การใชคาสง for ในการเขยนโปรแกรม Bingo โดยรบคาตวเลขจานวนเตมจากผใชงาน 1 คา แลวตรวจสอบคาตวเลขทรบมคาเทากบ “10” หรอไม ถาเทากบ “10” ใหโปรแกรมแสดงคาวา “Bingo” ออกมา และโปรแกรมสามารถบอกจานวนครงทผใชงานปอนไปกครงถงจะ Bingo ได
// กรณผใชงานปอน ‘x’ Enter number : 0 2 4 6 8 10 12 14 16 18 20
// กรณผใชงานปอน ‘y’ Enter number : 1 3 5 7 9 11 13 15 17 19
// กรณผใชงานปอนคาอน ๆ ทไมใช ‘x’ หรอ ‘y’ Enter number :_Error
Enter number : _
// โคดโปรแกรม #include "stdio.h" main( )
{ int i, x; for (i=1; i<=5000; i++) //กาหนดคาใหมากไวเพราะไมทราบจานวนลปทแนนอน { printf("\n\nEnter number : "); scanf("%d",&x); if(x == 10) { printf("\nBingo\n"); printf("Number of times: %d\n",i); i = 5001; // กาหนดคาเพอใหออกจาก for loop } } }
111
ผลลพธเมอทดสอบโปรแกรม
หมายเหต จากตวอยางขางตนเปนการนาคาสง for loop มาใชในกรณทไมทราบจานวนลปท
แนนอน ซงจรง ๆ แลวหากผพฒนาโปรแกรมไมทราบจานวนลปทแนนอน สวนใหญจะไมนยมนาคาสง for loop มาใชงาน เพราะคาสง for loop เหมาะสาหรบวนลปทมจานวนลปทแนนอน ดงนนหากจะวนลปทมจานวนลปทไมแนนอน ผพฒนาโปรแกรมสวนใหญจะนยมใชคาสง while เปนคาสงในการทางาน ในกรณดงกลาว
Enter number : 1 Enter number : 2
Enter number : 3 Enter number : 4
Enter number : 5 Enter number : 6
Enter number : 7 Enter number : 8
Enter number : 9 Enter number : 10 Number of times: 10
112
8.2 คาสง while loop คาสง while loop เปนคาสงทใชในกรณทผพฒนาโปรแกรมไมทราบจานวนลปทแนนอน ทแนนอนวาจะตองทาซากรอบ ลกษณะเดนอยางหนงของคาสง while คอ จะมตรวจสอบเงอนไขกอนวาเปนจรงหรอเทจ ซงในการตรวจสอบครงแรก ถาเงอนไขตรวจสอบเปนเทจ กจะไมเขาไปทาในวนรอบของการทาซาเลย แตในทานองเดยวกนถาตวตรวจสอบเงอนไขเปนจรงตลอด โปรแกรมจะทาซาไปไมสนสด ดงนนขอสาคญของการใชคาสง while loop คอ ผพฒนาโปรแกรมจะตองระมดระวง โดยควรเขยนโปรแกรมใหมโอกาสออกจากการวนรอบทาซาใหได เพราะถาวนลปคางจะสงผลใหโปรแกรมทางานคางหรอหยดการทางานไปเลยกได ซงรปแบบคาสง while loop มรปแบบการใชงานดงน
ภาพท 8.2 ผงงานแสดงการทางานของคาสง while loop
จรง
ทาคาสง
ตรวจสอบ เงอนไข
เทจ
while (เงอนไขตรวจสอบ) { // ชดคาสงกรณทเงอนไขตรวจสอบเปนจรง คาสง…… 1
คาสง…… 2 คาสง…… 3
คาสง…… 4 คาสง…… คาสง…… n
}
113
ตวอยางการใชคาสง while loop
ตวอยางท 8.5 การใชคาสง while loop ในการเขยนโปรแกรม Bingo โดยรบคาตวเลขจานวนเตมจากผใชงาน 1 คา แลวตรวจสอบคาตวเลขทรบมคาเทากบ “10” หรอไม ถาเทากบ “10” ใหโปรแกรมแสดงคาวา “Bingo” ออกมา และโปรแกรมสามารถบอกจานวนครงทผใชงานปอนไปกครงถงจะ Bingo ได (เปนโจทยตวอยางเดยวกบตวอยางท 8.4 แตตวอยางนจะใชคาสง while แทนคาสง for)
ผลลพธเมอทดสอบโปรแกรม
// โคดโปรแกรม #include "stdio.h" main( ) {
int i , x , w; i = x = w =0;
while(w == 0) { printf("\n\nEnter number : "); scanf("%d",&x); i++; if(x == 5) { printf("\nBingo\n"); printf("Number of times: %d\n",i); w = 1; } }
}
Enter number : 7 Enter number : 8
Enter number : 9 Enter number : 10 Number of times: 4
114
ตวอยางท 8.6 การใชคาสง while loop ในการเขยนโปรแกรมรหสลบแบบ 2 ชน โดยชนแรกผใชงานจะตองปอนรหสคาวา ‘A’ หากปอนถกโปรแกรมจะใหไปถอดรหสชนทสอง โดยมรหสคาวา ‘Z’ หากปอนถกทงสองชนโปรแกรมจะแสดงคาวา “*** WINNING ***” ซงในแตละชนผใชงานสามารถปอนกครงกไดจนกวาจะปอนตรงรหสลบทตงไว
// โคดโปรแกรม #include "stdio.h" main( ) { int i=0 , x=0; char ch; // ตรวจสอบรหสลบชนท 1 while(i == 0) { printf("\n\nEnter Text (1) : "); scanf("%s",&ch); x++; if (ch == 'A') { i = 1; } }
printf("\n*** Pass (1) ***\n"); printf("Number of times: %d\n",x); x = 0;
// ตรวจสอบรหสลบชนท 2 while(i == 1) { printf("\n\nEnter Text (2) : "); scanf("%s",&ch);
x++; if (ch == 'Z') { i = 2; } } printf("\n*** WINNING ***");
printf("Number of times: %d\n",x); }
115
ผลลพธเมอทดสอบโปรแกรม
Enter Text (1) : a Enter Text (1) : b Enter Text (1) : c Enter Text (1) : d Enter Text (1) : x Enter Text (1) : V Enter Text (1) : Z Enter Text (1) : A *** Pass (1) *** Number of times: 8 Enter Text (2) : F Enter Text (2) : D Enter Text (2) : z Enter Text (2) : Z *** WINNING *** "Number of times: 4
116
8.3 คาสง do while คาสง do while เปนคาสงใหมการทาซาเปนลป(loop) โดยมลกษณะการทางานทานองเดยวกบคาสง while ซงจะแตกตางกนตรงทคาสง do while นจะมการทางานตามคาสงไป 1 รอบกอนทจะทดสอบเงอนไข ถาเงอนไขทเปนจรงจะทางานตอไป ถาเงอนไขเปนเทจจงจะออกจากคาสง ขอควรระวงของคาสง do while กเชนเดยวกนกบคาสง while ซงผพฒนาจะตองกาหนดการวนลปใหมโอกาสทเงอนสามารถหลดออกจากลปได มฉะนนจะมปญหาทโปรแกรมทางานแบบวนซาแบบไมมทสนสด ซงรปแบบคาสง do while มรปแบบการใชงานดงน
ภาพท 8.3 ผงงานแสดงการทางานของคาสง do while
จรง
ทาคาสง
ตรวจสอบ เงอนไข
เทจ
do { คาสง…… 1
คาสง…… 2 คาสง…… 3
คาสง…… 4 คาสง…… คาสง…… n
} while (เงอนไขตรวจสอบ);
117
ตวอยางการใชคาสง do while
ตวอยางท 8.7 การใชคาสง do loop เพอตรวจสอบรหสลบ โดยรหสลบทตงไวคอ ‘9’ ดงนนหากผใชงานปอนรหสตรงกบ ‘9’ โปรแกรมจะทาการแสดงคาวา “Bingo”
ผลลพธเมอทดสอบโปรแกรม
// โคดโปรแกรม #include "stdio.h" main( ) { int i=0; char ch; do { printf("\nEnter Code : "); ch = getch(); putchar(ch); if (ch == '9') { i = 1; } } while (i == 0); printf("\n\n+++ Bingo +++"); }
Enter Code : a
Enter Code : 8 Enter Code : c Enter Code : 9 +++ Bingo +++
118
ตวอยางท 8.8 การใชคาสง do loop โดยใหโปรแกรมรบคาตวเลขจานวนเตมจากผใชงาน 1 คา จากนนใหโปรแกรมแสดงจานวนตวเลขจาก 1 ถง จานวนทผใชปอนเขาไป
ผลลพธเมอทดสอบโปรแกรม
// โคดโปรแกรม #include "stdio.h" main( ) { int i,x;
loop1: i=1; x=0; printf("\n\nEnter Number : "); scanf("%d",&x); do { printf("%d ",i); i++; } while(i<=x); goto loop1; }
Enter Number : 5 1 2 3 4 5 Enter Number : 8 1 2 3 4 5 6 7 8 Enter Number : 11 1 2 3 4 5 6 7 8 9 10 11 Enter Number : 3 1 2 3 Enter Number : _
119
สรปทายบท
ในการพฒนาหรอเขยนโปรแกรมคอมพวเตอรเพอใหโปรแกรมคอมพวเตอรทางานอะไรซา ๆ หลาย ๆ ครงคาตอบทงานทสด คอ การเรยกใชงานคาสงโปรแกรมทเรยกวา ลป (loop) ซงลปมหลายรปแบบ ทง for loop while loop และ do while และในภาษาซการใชงานคาสงวนลปมการใชงานทงาย และมการกาหนดรอบทาซาไดแนนอนชดเจน โดยคาสงวนลปในภาษามคาสงในการทางานของโปรแกรม ดงน
คาสง for loop คาสง for loop เปนคาสงทใชงานงายและมการกาหนดรอบทาซาทแนนอนวาจะตอง
ทาซากรอบ อกทงรปแบบของ for loop จะเปนรปแบบทเขาใจงาย และแกไขเงอนไขตาง ๆ ไดสะดวก
คาสง while loop คาสง while loop เปนคาสงทใชในกรณทผพฒนาโปรแกรมไมทราบจานวนลปทแนนอน
ทแนนอนวาจะตองทาซากรอบ ลกษณะเดนอยางหนงของคาสง while คอ จะมตรวจสอบเงอนไขกอนวาเปนจรงหรอเทจ ซงในการตรวจสอบครงแรก ถาเงอนไขตรวจสอบเปนเทจ กจะไมเขาไปทาในวนรอบของการทาซาเลย แตในทานองเดยวกนถาตวตรวจสอบเงอนไขเปนจรงตลอด โปรแกรมจะทาซาไปไมสนสด ดงนนขอสาคญของการใชคาสง while loop คอ ผพฒนาโปรแกรมจะตองระมดระวง โดยควรเขยนโปรแกรมใหมโอกาสออกจากการวนรอบทาซาใหได เพราะถาวนลปคางจะสงผลใหโปรแกรมทางานคางหรอหยดการทางานไปเลยกได
คาสง do while คาสง do while เปนคาสงใหมการทาซาเปนลป(loop) โดยมลกษณะการทางานทานองเดยวกบคาสง while ซงจะแตกตางกนตรงทคาสง do while นจะมการทางานตามคาสงไป 1 รอบกอนทจะทดสอบเงอนไข ถาเงอนไขทเปนจรงจะทางานตอไป ถาเงอนไขเปนเทจจงจะออกจากคาสง ขอควรระวงของคาสง do while กเชนเดยวกนกบคาสง while ซงผพฒนาจะตองกาหนดการวนลปใหมโอกาสทเงอนสามารถหลดออกจากลปได มฉะนนจะมปญหาทโปรแกรมทางานแบบวนซาแบบไมมทสนสด คาถามทบทวน
1. จงเขยนโปรแกรมรวมคาตวเลขทผใชงานปอนเขามา โดยผใชงานสามารถปอนได 10 ตวเลข 2. จงเขยนโปรแกรมแสดงรบคาตวเลขจานวนเตมจากผใชงาน 6 คา แลวใหโปรแกรมแสดง คาตวเลขออกเปนกลมโดยแยกเปนเฉพาะกลมเลขค และเฉพาะกลมเลขค
3. จงเขยนโปรแกรมตรวจรหส 3 หลก โดยเงอน คอ จะตองตรวจสอบรหสในหลกนน ๆ ใหผานกอนจงจะขามไปตรวจสอบรหสในหลกตอไปได
โดย หลกทหนงรหสตวเลข 9 หลกทสองรหสตวเลข 8 หลกทสามรหสตวเลข 7
120
4. จงเขยนโปรแกรมตรวจรหส 3 หลก โดยเงอน คอ จะตองตรวจสอบรหสในหลกนน ๆ ใหผานกอนจงจะขามไปตรวจสอบรหสในหลกตอไปได พรอมสรปผลจานวนครงทงหมดวาใสรหสไปทงหมดกครงจงจะสามารถถอดรหสผานดงกลาวได
โดย หลกทหนงรหสตวเลข 11 หลกทสองรหสตวอกขระ A หลกทสามรหสตวอกขระ z
5. จงเขยนโปรแกรมโดยใหผใชงานคนทหนงสามารถตงคารหสผานได 1 คา จากนนใหโปรแกรมทาการรบคาจากผใชงานคนทสอง เพอทาการถอดรหสผานดงกลาว และหากใสรหสผานสาเรจใหแสดงคาวา “excellently” พรอมสรปผลจานวนครงทงหมดวาใสรหสไปทงหมดกครงจงจะสามารถถอดรหสผานดงกลาวได
เอกสารอางอง
คะชา ชาญศลป. (2548). ภาษาซสาหรบผเรมตน. กรงเทพมหานคร: วรตนเอดดเคชน. ประภาพร ชางไม. (2545). คมอการเขยนโปรแกรมภาษา C ฉบบผเรมตน. กรงเทพมหานคร:
อนโฟเพรส. ธรวฒน ประกอบผล. (2553). คมอการเขยนโปรแกรมภาษา C. กรงเทพมหานคร: ซมพลฟลาย. สระสทธ ทรงมา และภรพจน แกวยอง. (2552). การโปรแกรมคอมพวเตอร.: มหาวทยาลยราชภฏ
สวนดสต. สมชาย รตนเลศนสรณ. (2553). การเขยนโปรแกรมคอมพวเตอรดวยภาษาซ. กรงเทพมหานคร: สมาคม
สงเสรมเทคโนโลย (ไทย-ญปน) ส.ส.ท. สานนท เจรญฉาย. (2543). การเขยนโปรแกรมและอลกอรทม. กรงเทพมหานคร: มหาจฬาลงกรณราช
วทยาลย. อรพน ประวตบรสทธ. (2554). คมอการเรยนภาษา C ฉบบปรบปรงใหม (พมพครงท 10).
กรงเทพมหานคร: โปรวชน. http://www.61.7.214.35/c/webbase/unit8/while.php http://www.mwit.ac.th/~cs/download/tech30101/TECH30101_ch9.html http://www.e-learning.snru.ac.th/els/program1/lesson2/page6_1.html http://www.krubpk.com/com_2/pan7/pan8_2.html
121
บทท 9
ตวแปรชนดอารเรย
แผนการสอนประจาบท หวขอเนอหา 9.1 ตวแปรอารเรยแบบ 1 มต
9.2 ตวแปรอารเรยแบบ 2 มต
วตถประสงคเชงพฤตกรรม 1. ผเรยนสามารถเขาใจหลกการทางานของตวแปรอารเรยแบบ 1 มตไดอยางเขาใจและถกตอง 2. ผเรยนสามารถประกาศตวแปรอารเรยแบบ 1 มต ไดอยางถกตองและสามารถนาตวแปรอารเรยแบบ 1 มตไปใชงานในการเขยนโปรแกรมในกรณตาง ๆ ไดอยางถกตอง 3. ผเรยนสามารถเขาใจหลกการทางานของตวแปรอารเรยแบบ 2 มตไดอยางเขาใจและถกตอง 4. ผเรยนสามารถประกาศตวแปรอารเรยแบบ 2 มต ไดอยางถกตองและสามารถนาตวแปรอารเรยแบบ 2 มตไปใชงานในการเขยนโปรแกรมในกรณตาง ๆ ไดอยางถกตอง วธการสอน 1. สอนแบบบรรยายโดยใชเอกสารประกอบการสอน 2. สอนแบบบรรยายโดยใช Slide Power Point 3. สอนโดยใชโปรแกรม Turbo C++ 4.5 เพอลงมอปฏบตในการเขยนโปรแกรมภาษาซ
4. สอนโดยใหผเรยนเปนสวนกลาง โดยใชวธถามตอบกบผเรยนระหวางบรรยาย 5. ใหผเรยนสรปและอธบายหวขอทผเรยนทไดรบมอบหมาย
สอการเรยนการสอน 1. เอกสารประกอบการสอน
2. Slide Power Point 3. โปรแกรม Turbo C++ 4.5 4. ตวอยางแบบทดสอบ
การวดผลและประเมนผล 1. การทาตามตวอยางโจทยคาสงและการทาแบบฝกหด
2. ความตงใจในชนเรยนและการรวมมอในการนาเสนอหรออภปราย 3. สงเกตจากการตอบคาถามและการรวมทากจกรรมในชนเรยน
122
บทท 9
ตวแปรชนดอารเรย
อารเรย (Arrays) เปนโครงสรางขอมลของกลมสมาชกทใชเกบขอมลชนดเดยวกน แลวมาจดเรยงกนอยางตอเนอง โดยขอมลชนดเดยวกน คอ ขอมลทกตวทอยในอารเรยจะตองเปนขอมลชนดเดยวกนเทานน เชน ถาเปนอารเรยชนดจานวนเตม ขอมลทกตวในอารเรยกตองเปนชนดจานวนเตมไมสามารถเกบขอมลตางชนดกนได โดยอารเรยจะจดเกบชดขอมลในหนวยความจาในแบบตอเนองกนไป ซงแตกตางจากตวแปรธรรมดา โดยขอมลแตละตวจะมลาดบของสมาชก เรยกวา element ซงแตละ element จะม อนเดกซ (index) เปนตวชตาแหนงของขอมลในหนวยความจา โดยทอนเดกซในตาแหนงแรกจะเรมจาก ศนย (0)
9.1 ตวแปรอารเรยแบบ 1 มต ตวแปรอารเรยแบบ 1 มต จะเปนการเกบขอมลตอเนองกนไปเปนแถว การประกาศชอตวแปรอารเรยแบบ 1 มตจะใชชอเพยงชอเดยวตามดวยเครองหมาย [ ] ครอมตวเลขทบอกถงจานวนของขอมลทตองการจองพนทเอาไว
รปแบบการประกาศตวแปร
ตวอยางการประกาศตวแปรอารเรยแบบ 1 มต (แบบจองพนทอยางเดยว)
ประกาศตวแปรอารเรยชนด int int num[5];
num[0] num[1] num[2] num[3] num[4] num
2 bytes 2 bytes 2 bytes 2 bytes 2 bytes
ประกาศตวแปรอารเรยชนด float float score[7];
score[0] score[1] score[2] score[3] score[4] score[5] score[6] score
4 bytes 4 bytes 4 bytes 4 bytes 4 bytes 4 bytes 4 bytes
ชนดขอมล ชอตวแปร [ขนาดของอารเรย];
123
ประกาศตวแปรอารเรยชนด char char ch[4];
ch [0] ch[1] ch[2] ch[3] ch
1 bytes 1 bytes 1 bytes 1 bytes
การประกาศต วแปรอาร เ รย นอกจากจะประกาศแบบจองพ นท เพ ย งอย า ง เด ย ว ผพฒนาโปรแกรมสามารถประกาศตวแปรแบบอารเรยพรอมทงกาหนดคาเรมตนใหกบอารเรยแบบ 1 มตได โดยการกาหนดคาเรมตนใหกบ array ไดตงแตตอนประกาศตวแปรคาทกาหนดตองอยในเครองหมาย { } และถามมากกวา 1 คา ตองแยกจากกนดวยเครองหมาย , (comma)
ตวอยางการประกาศตวแปรอารเรยแบบ 1 มต (แบบกาหนดคาในพนท)
ประกาศตวแปรอารเรยชนด int int num[5] = { 10,20,30,40,50 } ;
num[0] num[1] num[2] num[3] num[4]
num 10 20 30 40 50 2 bytes 2 bytes 2 bytes 2 bytes 2 bytes
ประกาศตวแปรอารเรยชนด float
float score[7] = { 1.00,2.00,33.33, 46.78,10.45,1.50,2.0 } ;
score[0] score[1] score[2] score[3] score[4] score[5] score[6] score 1.00 2.00 33.33 46.78 10.45 1.50 2.0
4 bytes 4 bytes 4 bytes 4 bytes 4 bytes 4 bytes 4 bytes
ถาในตอนประกาศตวแปรอารเรยไมกาหนดคาเรมตนใหกบมนแลว คาทอยในตวแปร จะเปนคาทคางอยในหนวยความจาชวงทเราจองไวเปนอารเรยนน
ถากาหนดคาเรมตนตงแตตอนประกาศตวแปรแตกาหนดไมครบ ในกรณทเปนอารเรยแบบตวเลขทงจานวนเตมและจานวนจรง คาทเหลอจะถกกาหนดเปน 0 โดยอตโนมต
เชน float cost[5] = {10.1,12.45,11.3} ;
cost[0] cost[1] cost [2] cost [3] cost [4] cost 10.1 12.45 11.03 0.0 0.0
4 bytes 4 bytes 4 bytes 4 bytes 4 bytes
124
บางครงถากาหนดคาเรมตนใหแกอารเรยเลย เราไมจาเปนตองใสขนาดของอารเรยกได
เชน int num[ ] = {1,2,3,4,5} ;
ความหมายคอ เปนการกาหนดตวแปรอารเรยของจานวนจรงแบบ float ขนาด 5 ชอง แตถากาหนดตวแปรอารเรยโดยไมใสขนาดของอารเรย และไมไดกาหนดคาเรมตนใหกบมน
เชน int num[ ] ; // เปนการประกาศตวแปรแบบอารเรยทผด
วธการแบบนไมสามารถประกาศตวแปรอารเรยโดยไมใสขนาดของอารเรยได ยกเวนมการกาหนดคาเรมตนใหกบมนตงแตแรก
ประกาศตวแปรอารเรยชนด char
char ch[7] = “witoon” ;
ch [0] ch[1] ch[2] ch[3] ch[4] ch[5] ch[6] ch w i t o o n \0
1 bytes 1 bytes 1 bytes 1 bytes 1 bytes 1 bytes 1 bytes
ในการประกาศตวแปรแบบอารเรยชนด char โดยทตาแหนง สดทายของขอมลระบบ จะเกบคา \0 ไวอตโนมต เพอแสดงการสนสดขอความ
char name[ ] = “Dusit Trang”; จะได
[0] [1] [2] [3] [4] [5] [6] [7] [8] [9] [10] [11] name D u s i t T r a n g \0
1 byte
1 byte
1 byte
1 byte
1 byte
1 byte
1 byte
1 byte
1 byte
1 byte
1 byte
1 byte
โดยทตาแหนง name[11] จะเกบคา \0 ไวอตโนมต เพอแสดงการสนสดขอความ
หรอ char name[13] = “Dusit Trang”; จะได
[0] [1] [2] [3] [4] [5] [6] [7] [8] [9] [10] [11] [12] name D u s i t T r a n g \0 1
byte 1
byte 1
byte 1
byte 1
byte 1
byte 1
byte 1
byte 1
byte 1
byte 1
byte 1
byte 1
byte
โดยทตาแหนง name[11] จะเกบคา \0 ไวอตโนมต เพอแสดงการสนสดขอความเชนเดยวกน และตาแหนงท 12 จะวาง
125
หรอถาตองการกาหนดคาใหกบอารเรยเปนอกขระสามารถทาไดดงน
char name[9] = { ‘D’, ‘u’, ‘s’, ‘i’, ‘t’, ‘ ’, } ; จะได
[0] [1] [2] [3] [4] [5] [6] [7] [8] name D u s i t \0 1
byte 1
byte 1
byte 1
byte 1
byte 1
byte 1
byte 1
byte 1
byte
โดยทตาแหนง name[6] จะเกบคา \0 ไวอตโนมต เพอแสดงการสนสดขอความเชนเดยวกน และตาแหนงท 7 และ 8 จะวางเนองจากไมมขอมลใด ๆ
ดงนนในการประกาศใหตวแปรทเปนสตรง จะตองคานงถงจานวนตวอกขระทตองการ
จดเกบดวย เชน หากตองการเกบชอซงมความยาวไมเกน 20 ตวอกษร จะตองประกาศตวแปรใหเปนอารเรยขนาด 21 ชอง หรอมากกวาเลกนอย เพอมพนทสาหรบเกบคา \0 หรอคา null)
ตวอยาง การทดลองการประกาศตวแปรอารเรยแบบ 1 มต
ตวอยางท 9.1 โปรแกรมแสดงตวเลขทไดเกบไวในตวแปรอารเรยแบบ 1 มต
ผลลพธเมอทดสอบโปรแกรม
// โคดโปรแกรม #include "stdio.h" main( )
{ int n[5] = { 5, 4 , 3, 2, 1 } ; int i ; for ( i = 0; i < 5; i++ ) { printf( "%d ",n[ i ] ); } }
5 4 3 2 1
126
ตวอยางท 9.2 โปรแกรมแสดงอกขระทไดเกบไวในตวแปรอารเรยแบบ 1 มต
ผลลพธเมอทดสอบโปรแกรม
ตวอยางท 9.3 โปรแกรมแสดงอกขระทไดเกบไวในตวแปรอารเรยแบบ 1 มต พรอม
แสดงผลตาแหนงในอารเรยแตละตวทไดจดเกบ
// โคดโปรแกรม #include "stdio.h" main( ) {
char ch[ ] = "witoon"; int i; for ( i = 0; i < 6; i++ ) { printf( "%c ",ch[ i ] ); }
}
w i t o o n
// โคดโปรแกรม #include "stdio.h" main( ) {
char ch[ ] = "Dusit Trang"; int i; for ( i = 0; i < 11; i++ ) { printf( "\n ch[%d] = %c ", i , ch[i] );
} }
127
ผลลพธเมอทดสอบโปรแกรม
ตวอยางท 9.4 โปรแกรมแสดงการเกบคาตวเลขไวในตวแปรอารเรยแบบ 1 มต และเมอเกบครบตามจานวน โปรแกรมจะทาการแสดงผลขอมลตามตาแหนงในอารเรยแตละตวทไดจดเกบ
ch[0] = D ch[1] = u ch[2] = s ch[3] = i ch[4] = t ch[5] = ch[6] = T ch[7] = r ch[8] = a ch[9] = n ch[10] = g
// โคดโปรแกรม #include "stdio.h" main( ) {
int x[10]; int i; for ( i = 0; i < 10; i++ ) { printf( "Enter Number : " ); scanf("%d",&x[i]); } for ( i = 0; i < 10; i++ ) { printf( "\n x[%d] = %d ", i , x[i] ); } }
128
ผลลพธเมอทดสอบโปรแกรม
Enter Number : 9
Enter Number : 8
Enter Number : 7
Enter Number : 6
Enter Number : 5
Enter Number : 4
Enter Number : 3
Enter Number : 2
Enter Number : 1
Enter Number : 0
x[0] = 9
x[1] = 8
x[2] = 7
x[3] = 6
x[4] = 5
x[5] = 4
x[6] = 3
x[7] = 2
x[8] = 1
x[9] = 0
129
9.2 ตวแปรอารเรยแบบ 2 มต ตวแปรอารเรยแบบ 2 มต จะเปนการเกบขอมลในแนวตงและแนวนอน หรอแนวแถวและคอลมน ซงการนาตวแปรอารเรย 2 มตมาใชงานจะเหมาะสาหรบการเกบขอมลในบางประเภท เชน การเกบคะแนนนกศกษา การเกบขอมลประวต เปนตน ดงแสดงไวตวอยางขางลาง
วชา A วชา B วชา C วชา D วชา E
นศ.คนท 1 นศ.คนท 2 นศ.คนท 3 นศ.คนท 4 นศ.คนท 5 นศ.คนท 6 นศ.คนท 7 นศ.คนท 8 นศ.คนท 9
นศ.คนท 10
รปแบบการประกาศตวแปร
ตวอยางการประกาศตวแปรอารเรยแบบ 2 มต (แบบจองพนทอยางเดยว)
ประกาศตวแปรอารเรยชนด int int b[5][4];
Column (คอลมน) b [0] [1] [2] [3]
Row
(แถว
)
[0] b[0][0] b[0][1] b[0][2] b[0][3] [1] b[1][0] b[1][1] b[1][2] b[1][3] [2] b[2][0] b[2][1] b[2][2] b[2][3] [3] b[3][0] b[3][1] b[3][2] b[3][3] [4] b[4][0] b[4][1] b[4][2] b[4][3]
ชนดขอมล ชอตวแปร [row][column];
130
ประกาศตวแปรอารเรยชนด float int float cost[10][5];
Column (คอลมน) cost [0] [1] [2] [3] [4]
Row
(แถว
)
[0] [0][0] [0][1] [0][2] [0][3] [0][4] [1] [1][0] [1][1] [1][2] [1][3] [1][4] [2] [2][0] [2][1] [2][2] [2][3] [2][4] [3] [3][0] [3][1] [3][2] [3][3] [3][4] [4] [4[0] [4][1] [4][2] [4][3] [4][4] [5] [5][0] [5][1] [5][2] [5][3] [5][4] [6] [6][0] [1][1] [1][2] [1][3] [1][3] [7] [7][0] [7][1] [7][2] [7][3] [7][4] [8] [8][0] [8][1] [8][2] [8][3] [8][4] [9] [9][0] [9][1] [9][2] [9][3] [9][4]
ประกาศตวแปรอารเรยชนด char
int char name[15][2];
Column (คอลมน) name [0] [1]
Row
(แถว
)
[0] name [0][0] name [0][1] [1] name [1][0] name [1][1] [2] name [2][0] name [2][1] [3] name [3][0] name [3][1] [4] name [4[0] name [4][1] [5] name [5][0] name [5][1] [6] name [6][0] name [1][1] [7] name [7][0] name [7][1] [8] name [8][0] name [8][1] [9] name [9][0] name [9][1]
[10] name [10][0] name [10][1] [11] name [11][0] name [11][1] [12] name [12][0] name [12][1] [13] name [13][0] name [13][1] [14] name [14][0] name [14][1]
131
ตวอยางการประกาศตวแปรอารเรยแบบ 2 มต (แบบกาหนดคาในพนท)
ประกาศตวแปรอารเรยชนด int int num[2][4] = { {1,2,3,4},
{5,6,7,8} };
Column num [0] [1] [2] [3]
Row
[0] 1 2 3 4 [1] 5 6 7 8
ประกาศตวแปรอารเรยชนด float float cost[5][5] ={ {1.0,2.0,3.0,4.0,5.0},
{11.1,22.22,33.33,44.44,55.55}, {0,0,3.3,4.4,5.5},
{0,0,0,0,0} };
Column cost [0] [1] [2] [3] [4]
Row
[0] 1.0 2.0 3.0 4.0 5.0 [1] 11.1 22.22 33.33 44.44 55.55 [3] 0 0 3.3 4.4 5.5 [4] 0 0 0 0 0
ประกาศตวแปรอารเรยชนด char char ch[6][5] ={ {‘W’,’i’,’t’,’o’,’o’},
{‘n’, ’ ‘ ,’D’,’u’,’s’},
{‘I’,’t’} };
Column ch [0] [1] [2] [3] [4]
Row
[0] W i t o o [1] n D u s [3] i t [4] [5]
132
ตวอยาง การทดลองการประกาศตวแปรอารเรยแบบ 2 มต
ตวอยางท 9.5 โปรแกรมแสดงตวเลขทไดเกบไวในตวแปรอารเรยแบบ 2 มต
ผลลพธเมอทดสอบโปรแกรม
// โคดโปรแกรม #include "stdio.h" main( )
{ int i , j ; int num[3][3] = { { 1,2,3 } ,
{ 4,5,6 } , { 7,8,9 } } ;
for ( j = 0 ; j <= 2 ; j++ ) { for ( i = 0 ; i <= 2 ; i++ )
{ printf( " %d \t " , num[i][j] ) ; } printf( "\n" ) ; } }
1 2 3 4 5 6 7 8 9
133
ตวอยางท 9.6 โปรแกรมแสดงตวอกขระทไดเกบไวในตวแปรอารเรยแบบ 2 มต พรอมทงแสดงตาแหนงอารเรยทจดเกบ
ผลลพธเมอทดสอบโปรแกรม
// โคดโปรแกรม #include "stdio.h" main( )
{ char ch[2][4] ={ {'W','i','t','o'}, {'0','n',} }; for ( j = 0 ; j <= 1 ; j++ ) {
for ( i = 0 ; i <= 3 ; i++ ) {
printf( " ch[%d][%d] = %c \t " , j,i,ch[j][i] ) ; } printf( "\n" ) ; } }
ch[0][0] = W ch[0][1] = i ch[0][2] = t ch[0][3] = o ch[1][0] = o ch[1][1] = n ch[1][2] = ch[1][3] =
134
ตวอยางท 9.7 โปรแกรมแสดงตวอกขระทไดเกบไวในตวแปรอารเรยแบบ 2 มต พรอมทงแสดงตาแหนงอารเรยทจดเกบ
// โคดโปรแกรม #include "stdio.h" main( )
{ int i , j ; char ch[3][3]; for ( j = 0 ; j <= 2 ; j++ )
{ for ( i = 0 ; i <= 2 ; i++ ) { printf("\n\n Enter Character :" ); ch[j][i] = getch(); putchar(ch[j][i]); }
} printf( "\n" ) ; for ( j = 0 ; j <= 2 ; j++ ) {
for ( i = 0 ; i <= 2 ; i++ ) {
printf( " ch[%d][%d] = %c \t " , j , i , ch[j][i] ); } printf( "\n" ) ;
} }
135
ผลลพธเมอทดสอบโปรแกรม
Enter Character : A Enter Character : B Enter Character : C Enter Character : 1 Enter Character : 2 Enter Character : 3 Enter Character : x Enter Character : y Enter Character : z ch[0][0] = A ch[0][1] = B ch[0][2] = C ch[1][0] = 1 ch[1][1] = 2 ch[1][2] = 3
ch[2][0] = x ch[2][1] = y ch[2][2] = z
136
สรปทายบท
อารเรย (Arrays) เปนโครงสรางขอมลของกลมสมาชกทใชเกบขอมลชนดเดยวกน แลวมาจดเรยงกนอยางตอเนอง โดยขอมลชนดเดยวกน คอ ขอมลทกตวทอยในอารเรยจะตองเปนขอมลชนดเดยวกนเทานน เชน ถาเปนอารเรยชนดจานวนเตม ขอมลทกตวในอารเรยกตองเปนชนดจานวนเตมไมสามารถเกบขอมลตางชนดกนได โดยอารเรยจะจดเกบชดขอมลในหนวยความจาในแบบตอเนองกนไป ซงแตกตางจากตวแปรธรรมดา โดยขอมลแตละตวจะมลาดบของสมาชก เรยกวา element ซงแตละ element จะม อนเดกซ (index) เปนตวชตาแหนงของขอมลในหนวยความจา โดยทอนเดกซในตาแหนงแรกจะเรมจาก ศนย (0)
1. ตวแปรอารเรยแบบ 1 มต ตวแปรอารเรยแบบ 1 มต จะเปนการเกบขอมลตอเนองกนไปเปนแถว การประกาศชอตวแปรอารเรยแบบ 1 มตจะใชชอเพยงชอเดยวตามดวยเครองหมาย [ ] ครอมตวเลขทบอกถงจานวนของขอมลทตองการจองพนทเอาไว
รปแบบการประกาศตวแปรอารเรยแบบ 1 มต
ตวอยางการประกาศตวแปรอารเรยแบบ 1 มต (แบบจองพนทอยางเดยว)
ประกาศตวแปรอารเรยชนด int int num[5];
ประกาศตวแปรอารเรยชนด float float score[7];
ประกาศตวแปรอารเรยชนด char char ch[4];
ตวอยางการประกาศตวแปรอารเรยแบบ 1 มต (แบบกาหนดคาในพนท)
ประกาศตวแปรอารเรยชนด int int num[5] = { 10,20,30,40,50 } ;
ประกาศตวแปรอารเรยชนด float float score[7] = { 1.00,2.00,33.33, 46.78,10.45,1.50,2.0 } ;
ประกาศตวแปรอารเรยชนด char char ch[7] = “witoon” ;
ชนดขอมล ชอตวแปร [ขนาดของอารเรย];
137
หรอถาตองการกาหนดคาใหกบอารเรยเปนอกขระสามารถทาไดดงน char name[9] = { ‘D’, ‘u’, ‘s’, ‘i’, ‘t’, ‘ ’, } ;
2. ตวแปรอารเรยแบบ 2 มต
ตวแปรอารเรยแบบ 2 มต จะเปนการเกบขอมลในแนวตงและแนวนอน หรอแนวแถวและคอลมน ซงการนาตวแปรอารเรย 2 มตมาใชงานจะเหมาะสาหรบการเกบขอมลในบางประเภท เชน การเกบคะแนนนกศกษา การเกบขอมลประวต เปนตน ดงแสดงไวตวอยางขางลาง
รปแบบการประกาศตวแปรอารเรยแบบ 2 มต
ตวอยางการประกาศตวแปรอารเรยแบบ 2 มต (แบบจองพนทอยางเดยว)
ประกาศตวแปรอารเรยชนด int int b[5][4];
ประกาศตวแปรอารเรยชนด float int float cost[10][5];
ประกาศตวแปรอารเรยชนด char int char name[15][2];
ตวอยางการประกาศตวแปรอารเรยแบบ 2 มต (แบบกาหนดคาในพนท)
ประกาศตวแปรอารเรยชนด int int num[2][4] = { {1,2,3,4},
{5,6,7,8} };
ประกาศตวแปรอารเรยชนด float float cost[5][5] = { {1.0,2.0,3.0,4.0,5.0},
{11.1,22.22,33.33,44.44,55.55}, {0,0,3.3,4.4,5.5},
{0,0,0,0,0} };
ประกาศตวแปรอารเรยชนด char char ch[6][5] = { {‘W’,’i’,’t’,’o’,’o’},
{‘n’, ’ ‘ ,’D’,’u’,’s’},
{‘I’,’t’} };
ชนดขอมล ชอตวแปร [row][column];
138
คาถามทบทวน
1. จงเขยนโปรแกรมเกบคาตวเลขดวยตวแปรอารเรย โดยผใชงานสามารถปอนได 10 ตวเลข เมอเกบเสรจใหโปรแกรมทาการหาคาเฉลยของตวเลขทงหมด
2. จงเขยนโปรแกรมเกบคาตวอกษรจากผใชงานจานวน 12 ตวอกษรไวในตวแปรแบบอารเรย จากนนเมอผใชงานปอนเสรจ ใหโปรแกรมแสดงคาตวอกษรในอารเรยออกมาทงหมด
3. จงเขยนโปรแกรมเกบขอมลของนกศกษา 5 คน โดยขอมลประกอบไปดวย ชอ อาย คะแนนวชา A คะแนนวชา B เมอโปรแกรมรบขอมลเสรจใหโปรแกรมแสดงขอมลทงหมดออกมา
4. จงเขยนโปรแกรมเกบขอมลของนกศกษา 5 คน โดยขอมลประกอบไปดวย ชอ อาย คะแนนวชา A คะแนนวชา B และเกรดวชา A และเกรดวชา B เมอโปรแกรมรบขอมลเสรจสนใหโปรแกรมถามชอวาตองการดขอมลของใคร และเมอผใชงานปอนชอคนนนใหโปรแกรมแสดงขอมลคนนนออกมา เอกสารอางอง
คะชา ชาญศลป. (2548). ภาษาซสาหรบผเรมตน. กรงเทพมหานคร: วรตนเอดดเคชน. ประภาพร ชางไม. (2545). คมอการเขยนโปรแกรมภาษา C ฉบบผเรมตน. กรงเทพมหานคร:
อนโฟเพรส. ธรวฒน ประกอบผล. (2553). คมอการเขยนโปรแกรมภาษา C. กรงเทพมหานคร: ซมพลฟลาย. สระสทธ ทรงมา และภรพจน แกวยอง. (2552). การโปรแกรมคอมพวเตอร.: มหาวทยาลยราชภฏ
สวนดสต. สมชาย รตนเลศนสรณ. (2553). การเขยนโปรแกรมคอมพวเตอรดวยภาษาซ. กรงเทพมหานคร: สมาคม
สงเสรมเทคโนโลย (ไทย-ญปน) ส.ส.ท. สานนท เจรญฉาย. (2543). การเขยนโปรแกรมและอลกอรทม. กรงเทพมหานคร: มหาจฬาลงกรณราช
วทยาลย. อรพน ประวตบรสทธ. (2554). คมอการเรยนภาษา C ฉบบปรบปรงใหม (พมพครงท 10).
กรงเทพมหานคร: โปรวชน. http://www.61.7.214.35/c/webbase/unit9/arrays.php http://www.mwit.ac.th/~cs/download/tech30101/ch12.html http://www.krubpk.com/com_3/pan8/pan9_3.html http://www.bcoms.net/php/php08.asp http://www.thaigoodview.com/library/contest2552/type2/tech04/22/cit/6_1.html
139
บทท 10
ฟงกชนและการสรางฟงกชนในภาษาซ
แผนการสอนประจาบท หวขอเนอหา 10.1 ฟงกชนมาตรฐานในภาษาซ
10.2 ฟงกชนทผพฒนาโปรแกรมสรางขน วตถประสงคเชงพฤตกรรม 1. ผเรยนสามารถเขาใจหลกการทางานของคาสง if ไดอยางเขาใจและถกตอง 2. ผเรยนสามารถนาคาสง if ไปใชงานในการเขยนโปรแกรมในกรณตาง ๆ ไดอยางถกตอง 3. ผเรยนสามารถเขาใจหลกการทางานของคาสง switch ไดอยางเขาใจและถกตอง
4. ผเรยนสามารถนาคาสง switch ไปใชงานในการเขยนโปรแกรมในกรณตาง ๆ ไดอยางถกตอง วธการสอน 1. สอนแบบบรรยายโดยใชเอกสารประกอบการสอน 2. สอนแบบบรรยายโดยใช Slide Power Point 3. สอนโดยใชโปรแกรม Turbo C++ 4.5 เพอลงมอปฏบตในการเขยนโปรแกรมภาษาซ
4. สอนโดยใหผเรยนเปนสวนกลาง โดยใชวธถามตอบกบผเรยนระหวางบรรยาย 5. ใหผเรยนสรปและอธบายหวขอทผเรยนทไดรบมอบหมาย
สอการเรยนการสอน 1. เอกสารประกอบการสอน
2. Slide Power Point 3. โปรแกรม Turbo C++ 4.5 4. ตวอยางแบบทดสอบ
การวดผลและประเมนผล 1. การทาตามตวอยางโจทยคาสงและการทาแบบฝกหด
2. ความตงใจในชนเรยนและการรวมมอในการนาเสนอหรออภปราย 3. สงเกตจากการตอบคาถามและการรวมทากจกรรมในชนเรยน
140
บทท 10
ฟงกชนและการสรางฟงกชนในภาษาซ
ฟงกชน (Function) หรอหลายคนอาจจะเรยกวาโปรแกรมยอย ซงเปนกลมคาสงทสรางขนมาเพอใหโปรแกรมทางานอยางใดอยางหนง และสามารถเรยกใชงานขนมาไดอยางสะดวก และสงผลใหโปรแกรมมความซบซอนนอยลงและสามารถแกไขโปรแกรมไดอยางงายขน โดยฟงกชนในภาษาซ สามารถแบงตามแหลงทมาได 2 ประเภท คอ
10.1 ฟงกชนมาตรฐานในภาษาซ
ฟงกชนมาตรฐานในภาษาซ ซงจะอยในไลบรารภาษาซมาตรฐาน (C Standard Library) ไลบรารภาษาซมาตรฐานประกอบดวยฟงกชนตาง ๆ มากมาย ไมวาจะใชสาหรบการคานวณทางคณตศาสตร การจดการกบขอความ การจดการกบ input/output และอนๆ ซงจะทาใหงานของโปรแกรมเมอรงายขน โดยการใชงานฟงกชนประเภทนจะตองรวม (include) ไลบรารทตองการใชงาน เพอใหตวแปลภาษารวาฟงกชนทโปรแกรมเมอรตองการใชอยในไลบรารมาตรฐานตวใด
ในบางครงอาจเรยกวา library functions ปกตฟงกชนเหลานจะจดเกบไวใน header files ดงนนผใชจะตองรวาฟงกชนนนอยใน header file ใด จงจะนาไปเรยกใชในสวนตนของโปรแกรม ดวย #include <header file.h> ได เชน #include <stdio.h> ตวอยาง เชน หากตองการใชฟงกชน printf () ซงอยในไลบรารมาตรฐานสาหรบเกยวกบอนพตและเอาตพต (standard input/output) ทชอ stdio โดยจะตองเรยกใชฟงกชน #include<stdio.h> โดยท stdio.h เปนชอ header file ของไลบรารมาตรฐาน stdio หรอหากตองการใชฟงกชน clrscr() ของไลบรารมาตรฐาน conio เพอลางหนาจอ โดยจะตองเรยกใชฟงกชน #include<conio.h>
ตารางท 10.1 ตวอยางฟงกชนมาตรฐานในภาษาซ
ไลบราร ฟงกชน คาอธบาย
Stdio.h printf( ) คาสงใชในการแสดงผล scanf( ) คาสงใชในการรบขอมล
conio.h
getchar( ) คาสงใชในการรบคาขอมลอกขระ getch( ) คาสงใชในการรบคาขอมลอกขระ putchar( ) คาสงใชในการแสดงผลอกขระ clrscr( ) คาสงเคลยรหรอลางขอมลหนาจอคอมพวเตอร
math.h
abs(X) คานวณคาสมบรณของ X arctan(X) คานวณคา arctan ของ X cos(X) คานวณคา cosine ของ X exp(X) คานวณคา ex โดย e = 2.71828 เปนเลขฐานของลอการทม
141
ตารางท 10.1 ตวอยางฟงกชนมาตรฐานในภาษาซ (ตอ)
ไลบราร ฟงกชน คาอธบาย
math.h
Ln(X) คานวณคาลอการธมธรรมชาตของ X โดย X > 0 Odd(X) ทดสอบวา X เปนเลขจานวนคหรอไมโดยใหคาเปนจรง ถา X เปน
เลขจานวนคมฉะนนใหคาเปนเทจ Sin(X) คานวณคา sine ของ X Round(X) ใหคาเลขจานวนเตมทใกล X ทสด โดยเศษตงแต 0.5 ขนไปปดขน Sqr(X) คานวณคายกกาลงทสองของ X Sqrt(X) คานวณคารากทสองของ X Trunc(X) ใหคาเลขจานวนเตมทปดเศษทศนยมของเลขจานวนจรง X ทง Chr(X) ใหคาตวอกขระทมรหสแอสกเปน X Ord(X) ใหคารหสแอสกทตรงกบตวอกขระ X Pred(X) ใหคาขอมลลาดบกอนหนา X ตามลาดบในตารางรหสแอสก Succ(X) ใหคาขอมลลาดบถดจาก X ตามลาดบในตารางรหสแอสก Upcase(X) ใหคาตวอกขระใหญของ X ในกรณท X เปนตวอกขระเลก มฉะนนให
คาเปนตวอกขระ X ตามเดม Floor(X) ใหคาจานวนเตมทมากทสดทนอยกวา X Ceiling(X) ใหคาจานวนเตมทนอยทสดทมากกวา X Pi ใหคาคงตวของ p = 3.1417
10.2 ฟงกชนทผพฒนาโปรแกรมสรางขน
ฟงกชนทผพฒนาโปรแกรมสรางขน มไวเพอในกรณทการเรยกใชงานชดคาสงนน ๆ บอยครงหรอเปนชดคาสงพเศษ ทงนจะชวยใหการพฒนาโปรแกรมมความซบซอนของโปรแกรมนอยลง และงายตอการเขาใจและงายตอการแกไขโปรแกรม ซงการสรางฟงกชนมรปแบบ ดงน
ประเภทขอมล ชอฟงกชน(พารามเตอร) { คาสง…………... 1;
คาสง…………... 2; คาสง…………... 3; คาสง…………... คาสง…………... คาสง…………... n; return ;
}
142
ประเภทขอมล หมายถง ประเภทของขอมลทสงกลบ สวนนจะมหรอไมมกไดขนอยกบการทางานของฟงกชนนน ๆ ถาหากฟงกชนไมมการสงคากลบสวนนจะประกาศเปน Void
ชอฟงกชน หมายถง ชอของฟงกชนทไดสรางขนมา โดยผใชงานสามารถเรยกใชงานฟงกชนนดวยชอทไดตงขนน และการตงชอตองยดหลกตามกฎการตงชอตวแปรของภาษาซทไดเรยนรไปแลวในเนอในบทท 5
พารามเตอร หมายถง ตวแปรทใชในการรบคาเขามาในฟงกชน สวนนจะมหรอไมมกไดขนอยกบการทางานของฟงกชนนน ๆ
return หมายถง สวนทใชในการสงคากลบไปยงสวนอน ๆ สวนนจะมหรอไมมกไดขนอยกบการทางานของฟงกชนนน ๆ
ตวอยางการสรางฟงกชนในภาษาซ จากตวอยางขางตน ชอฟงกชนนมชอวา name() จะไมมขอมลในการสงกลบ และไมมการผาน
คาพารามเตอร การทางานกคอเมอมเรยกใชงานฟงกชน name() โปรแกรมจะพมพคาวา I love Dusit
Trang ออกทางหนาจอคอมพวเตอร
จากตวอยางขางตน เปนฟงกชนทใชในการบวกเลข โดยมชอฟงกชนวา number( ) และมการผาน
คาพารามเตอรทางตวแปร a และตวแปร b ในการทางานกคอเมอมเรยกใชงานฟงกชน number( )
โปรแกรมจะนาคาสงผานมามาเกบคาไวในตวแปร a และ b จากนนกจะคานวณตามทโปรแกรมสงงานไว
และเมอคานวณเสรจสน โปรแกรมจะทาการคนคาผลบวกกลบไปผานทางตวแปร x
void name( ) { printf (“I love Dusit Trang”);
}
int number(int a ,int b) { Int x; x = a + b; return x;
}
143
ตวอยางท 10.1 การเรยกใชงานฟงกชนยอย โดยในฟงกชน main จะมการเรยกใชงานฟงกชนยอยทชอวา name( ) และในคาสงของฟงกชนยอยจะมการแสดงผลขอมลคาวา I love Dusit Trang จานวน 5 ขอความ
ผลลพธเมอทดสอบโปรแกรม
// โคดโปรแกรม #include "stdio.h" void name( ) // ฟงกชนยอย { int i; for (i=0;i<5;i++) { printf ("I love Dusit Trang\n\n"); }
} main( ) // ฟงกชนหลก { name( ); }
I love Dusit Trang I love Dusit Trang I love Dusit Trang I love Dusit Trang I love Dusit Trang
144
ตวอยางท 10.2 การเรยกใชงานฟงกชนยอย โดยเปนการทดลองเขยนโปรแกรมบวกเลข โดยมการผานคาไปยงคาพารามเตอร และมการสงคา return กลบมาแสดงผล
ผลลพธเมอทดสอบโปรแกรม
// โคดโปรแกรม #include "stdio.h" int sum(int a ,int b) // ฟงกชนยอยใชในการคานวณการบวก { int c; c = a + b; return c; } main() // ฟงกชนหลก { int x,y;
loop1: printf("\nEnter : "); scanf("%d",&x); printf("\nEnter : "); scanf("%d",&y); printf("\n%d + %d = %d\n",x,y,sum(x,y)); goto loop1; }
Enter : 1
Enter : 2 1 + 2 = 3 Enter : 10
Enter : 20 10 + 20 = 30 Enter : 88
Enter : 99 88 + 99 = 187 Enter : _
145
ตวอยางท 10.3 การเรยกใชงานฟงกชนยอย โดยการทดลองจะเปนการเขยนโปรแกรมบวกเลข ลบเลข โดยจะมฟงกชนยอย 2 ฟงกชน คอ ฟงกชน summation ใชในการบวก และฟงกชน Deletion ใชในการลบ
// โคดโปรแกรม #include "stdio.h" int summation(int a1 ,int b1) { //ฟงกชนยอยสาหรบการบวก int c1; c1 = a1 + b1; return c1;
} int deletion(int a2 ,int b2) { //ฟงกชนยอยสาหรบการลบ int c2; c2 = a2 - b2; return c2;
} main() { //ฟงกชนหลก int x,y,z; loop1: printf("\n\nYou want to + (1) or - (2) : "); scanf("%d",&z); printf("\nEnter : "); scanf("%d",&x); printf("\nEnter : "); scanf("%d",&y); if(z==1) { printf("\n%d + %d = %d\n",x,y,summation(x,y)); } else if (z==2) { printf("\n%d - %d = %d\n",x,y,deletion(x,y)); } Else { printf("\nYou put the wrong value."); } goto loop1; }
146
ผลลพธเมอทดสอบโปรแกรม
You want to + (1) or - (2) : 1 Enter : 99
Enter : 1 99 + 1 = 100 You want to + (1) or - (2) : 1 Enter : 1000
Enter : 1001 1000 + 1001 = 2001 You want to + (1) or - (2) : 2 Enter : 100
Enter : 20 100 - 20 = 80 You want to + (1) or - (2) : 2 Enter : 590
Enter : 876 590 - 876 = -286 You want to + (1) or - (2) : 3 Enter : 88
Enter : 99 You put the wrong value. You want to + (1) or - (2) : 100 Enter : 245
Enter : 123 You put the wrong value.
147
สรปทายบท
ฟงกชน (Function) หรอหลายคนอาจจะเรยกวาโปรแกรมยอย ซงเปนกลมคาสงทสรางขนมาเพอใหโปรแกรมทางานอยางใดอยางหนง และสามารถเรยกใชงานขนมาไดอยางสะดวก และสงผลใหโปรแกรมมความซบซอนนอยลงและสามารถแกไขโปรแกรมไดอยางงายขน โดยฟงกชนในภาษาซ สามารถแบงตามแหลงทมาได 2 ประเภท คอ
1. ฟงกชนมาตรฐานในภาษาซ ฟงกชนมาตรฐานในภาษาซ ซงจะอยในไลบรารภาษาซมาตรฐาน (C Standard
Library) ไลบรารภาษาซมาตรฐานประกอบดวยฟงกชนตาง ๆ มากมาย ไมวาจะใชสาหรบการคานวณทางคณตศาสตร การจดการกบขอความ การจดการกบ input/output และอนๆ ซงจะทาใหงานของโปรแกรมเมอรงายขน โดยการใชงานฟงกชนประเภทนจะตองรวม (include) ไลบรารทตองการใชงาน เพอใหตวแปลภาษารวาฟงกชนทโปรแกรมเมอรตองการใชอยในไลบรารมาตรฐานตวใด ในบางครงอาจเรยกวา library functions ปกตฟงกชนเหลานจะจดเกบไวใน header files ดงนนผใชจะตองรวาฟงกชนนนอยใน header file ใด จงจะนาไปเรยกใชในสวนตนของโปรแกรมดวย #include <header file.h> ได เชน #include <stdio.h> , #include<conio.h> เปนตน
2. ฟงกชนทผพฒนาโปรแกรมสรางขน
ฟงกชนทผพฒนาโปรแกรมสรางขน มไวเพอในกรณทการเรยกใชงานชดคาสง นน ๆ บอยครงหรอเปนชดคาสงพเศษ ทงนจะชวยใหการพฒนาโปรแกรมมความซบซอนของโปรแกรมนอยลง และงายตอการเขาใจและงายตอการแกไขโปรแกรม ซงการสรางฟงกชนมรปแบบ ดงน
ประเภทขอมล หมายถง ประเภทของขอมลทสงกลบ สวนนจะมหรอไมมกไดขนอยกบการทางานของฟงกชนนน ๆ ถาหากฟงกชนไมมการสงคากลบสวนนจะประกาศเปน Void
ชอฟงกชน หมายถง ชอของฟงกชนทไดสรางขนมา โดยผใชงานสามารถเรยกใชงานฟงกชนนดวยชอทไดตงขนน และการตงชอตองยดหลกตามกฎการตงชอตวแปรของภาษาซทไดเรยนรไปแลวในเนอในบทท 5
พารามเตอร หมายถง ตวแปรทใชในการรบคาเขามาในฟงกชน สวนนจะมหรอไมมกไดขนอยกบการทางานของฟงกชนนน ๆ
return หมายถง สวนทใชในการสงคากลบไปยงสวนอน ๆ สวนนจะมหรอไมมกไดขนอยกบการทางานของฟงกชนนน ๆ
ประเภทขอมล ชอฟงกชน(พารามเตอร) { คาสง…………... 1;
คาสง…………... 2; คาสง…………... n; return ;
}
148
คาถามทบทวน
1. จงเขยนโปรแกรมรบคาตวเลขจากผใชงาน 1 คา จากนนใหโปรแกรมคานวณคารากทสองของตวเลขทรบเขามา
2. จงเขยนโปรแกรมรบคาตวเลขจากผใชงาน 1 คา จากนนใหโปรแกรมคานวณคา cosine ของตวเลขทรบเขามา
3. จงเขยนโปรแกรมโดยสรางฟงกชนยอย โดยใหพมพชอทผใชงานไดปอนเขาไปจานวน 10 ครง 4. จงเขยนโปรแกรมโดยสรางฟงกชนยอย โดยใหรบขอมลตวเลขจากผใชงาน แลวใหโปรแกรม
ตอบวาเปนตวเลขทรบเขามาเปนเลขคหรอเลขค 5. จงเขยนโปรแกรมโดยสรางฟงกชนยอย โดยใหรบขอมลตวเลขจากผใชงาน 1 คา จากนนให
โปรแกรมแสดง * ตามจานวนทผใชงานไดปอนเขาไป 6. จงเขยนโปรแกรมโดยสรางฟงกชนยอย โดยโปรแกรมจะทาการรบคาจากผใชงาน 2 คา
แลวโปรแกรมจะใหมการเลอกวาผใชงานตองการนาตวเลขมาบวก ลบ คณ หรอหาร จากนนใหโปรแกรมแสดงคาตอบของการคานวณนน ๆ ออกมา เอกสารอางอง
คะชา ชาญศลป. (2548). ภาษาซสาหรบผเรมตน. กรงเทพมหานคร: วรตนเอดดเคชน. ประภาพร ชางไม. (2545). คมอการเขยนโปรแกรมภาษา C ฉบบผเรมตน. กรงเทพมหานคร:
อนโฟเพรส. ธรวฒน ประกอบผล. (2553). คมอการเขยนโปรแกรมภาษา C. กรงเทพมหานคร: ซมพลฟลาย. สระสทธ ทรงมา และภรพจน แกวยอง. (2552). การโปรแกรมคอมพวเตอร.: มหาวทยาลยราชภฏ
สวนดสต. สมชาย รตนเลศนสรณ. (2553). การเขยนโปรแกรมคอมพวเตอรดวยภาษาซ. กรงเทพมหานคร: สมาคม
สงเสรมเทคโนโลย (ไทย-ญปน) ส.ส.ท. สานนท เจรญฉาย. (2543). การเขยนโปรแกรมและอลกอรทม. กรงเทพมหานคร: มหาจฬาลงกรณราช
วทยาลย. อรพน ประวตบรสทธ. (2554). คมอการเรยนภาษา C ฉบบปรบปรงใหม (พมพครงท 10).
กรงเทพมหานคร: โปรวชน. http://www.bitcom/com1/pan8/cp_11.html http://www.bcoms.net/php/php12.asp http://www.thaigoodview.com/library/contest2552/type2/tech04/22/cit/8_2.html
ความพยายามอยทไหน
ความสาเรจอยทนน
มหาวทยาลยราชภฏสวนดสต ศนยการศกษานอกทตง ตรง