การเขียนโปรแกรมคอมพิวเตอร...

588

Upload: others

Post on 09-Jan-2020

35 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: การเขียนโปรแกรมคอมพิวเตอร ์portal5.udru.ac.th/ebook/pdf/upload/17P88t2O788B98583682.pdfรูปภาพบางส่วนให
Page 2: การเขียนโปรแกรมคอมพิวเตอร ์portal5.udru.ac.th/ebook/pdf/upload/17P88t2O788B98583682.pdfรูปภาพบางส่วนให

การเขยนโปรแกรมคอมพวเตอร (Computer Programming)

ผศ.ดร. กรช สมกนธา

วศ.ด. วศวกรรมไฟฟา (แขนงวจยดานวศวกรรมคอมพวเตอร) วศ.ม. วศวกรรมคอมพวเตอร

คณะวทยาศาสตร มหาวทยาลยราชภฏอดรธาน

Page 3: การเขียนโปรแกรมคอมพิวเตอร ์portal5.udru.ac.th/ebook/pdf/upload/17P88t2O788B98583682.pdfรูปภาพบางส่วนให

คานา ตาราการเขยนโปรแกรมคอมพวเตอร เปนผลทไดจากการใชประกอบการสอนรายวชา

CS34101 การเขยนโปรแกรมคอมพวเตอร ซงเปนรายวชาทไดเปดสอนในสาขาวทยาการคอมพวเตอรและเทคโนโลยสารสนเทศ มหาวทยาลยราชภฏอดรธาน โดยผ เขยนตาราไดใชภาษาซในการเขยนโปรแกรมคอมพวเตอร เนองจากภาษาซเปนภาษาทมประสทธภาพสงและเหมาะสาหรบการเขยนโปรแกรมทมปญหาซบซอน ผ เขยนตาราไดจดทาตาราตามคาอธบายรายวชาทไดอธบายไวในหลกสตร โดยไดแบงเนอหาไว 13 บทเรยน โดยในบทท 1 ถงบทท 11

ครอบคลมตามคาอธบายรายวชาทงหมดตามหลกสตร และบทท 12-13 จะเปนบททเพมเตม ทไดมาจากประสบการณการวจย โดยจะเปนการประยกตในการเขยนโปรแกรมเพอใชในงานวจย เพอเปนพนฐานของการทางานวจยของนกศกษาซงจะเปนการสรางพนฐานความเขาใจใหนกศกษาใหมผลสมฤทธทดยงขน โดยคาดหวงวาจะเปนตาราทเหมาะสมสาหรบนกศกษาในสาขาวชาวทยาการคอมพวเตอร สาขาวศวกรรมคอมพวเตอร สาขาเทคโนโลยสารสนเทศ สาขาคอมพวเตอรธรกจ และนกวจยทวไป ตาราเลมนผ เขยนไดทาการปรบปรง แกไขเนอหาและรปภาพบางสวนใหเหมาะสมเพมเตม เนองจากไดใชประกอบการสอนตงแตป พ.ศ. 2553 จนถงปจจบน ในสวนของคาศพทเฉพาะทางผ เขยนไดใชคาศพทตามศพทคอมพวเตอรและเทคโนโลยสารสนเทศ ฉบบราชบณฑตยสถาน พทธศกราช 2546 และหากคาศพทใดไมมคาแปลผ เขยนไดใชคาทบศพท หรอตามความนยม เพอใหเหมาะสมกบตารา

ผ เขยนขอขอบคณบดา มารดา พสาว ภรรยา ลกชาย และลกสาว อนเปนทรกทเปนกาลงใจสนบสนนใหงานสาเรจไปดวยด โดยเฉพาะอยางยงผ เขยนขอกราบพระคณมารดาผลวงลบ (คณแมอมพร สมกนธา) ผ ทเปนแรงผลกดนในทกสงทกอยางของชวต ผ ทคอยสนบสนนและเปนกาลงใจใหตลอดมา ผ ททางานเหนอยยากเพอใหผ เขยนมวนนได สดทายผ เขยนขอกราบขอบพระคณ คร-อาจารย ทประสทธประสาทวชาความรใหผ เขยน อกทงไดใหความชวยเหลอและสละเวลาอนมคาทใหคาแนะนา จนทาใหตาราเลมนสาเรจลลวงดวยด

Page 4: การเขียนโปรแกรมคอมพิวเตอร ์portal5.udru.ac.th/ebook/pdf/upload/17P88t2O788B98583682.pdfรูปภาพบางส่วนให

(2)  

ในโอกาสนผ เ ขยนขอขอบคณทนเครอขายเชงกลยทธและพฒนาอาจารยในสถาบนอดมศกษา สานกงานคณะกรรมการอดมศกษา ทใหทนขาพเจาจนสาเรจการศกษา และขอขอบคณเจาของงานเขยนทกทานทไดถกอางองในตาราเลมน ผ เขยนไมไดตงใจทจะละเมดลขสทธของผ ใด หากมขอความหรอรปภาพบางสวน ทผ เขยนไมไดอางองถง ผ เขยนกขออนญาตมา ณ ทนดวย ผ เขยนหวงเปนอยางยงวา ตาราเลมนจะเปนประโยชนตอการเรยนการสอนในวชาการเขยนโปรแกรมคอมพวเตอรและเปนตาราพนฐานในการทาวจย โดยสามารถใชเปนเหมอนตาราหลกในการศกษา และสามารถใชเปนตาราอางอง หรอศกษาเองไดโดยสะดวก หากทานทนาไปใชมขอเสนอแนะ ผ เขยนยนดรบคาแนะนาจากทกทาน เพอปรบปรงใหดยงขนตอไป และขอขอบคณ ณ โอกาสนดวย

ผ เขยนขออทศงานนใหกบมารดาผลวงลบ

(I dedicated this work to my late mother.)

ผชวยศาสตราจารย ดร. กรช สมกนธา 1 พฤศจกายน 2556

 

Page 5: การเขียนโปรแกรมคอมพิวเตอร ์portal5.udru.ac.th/ebook/pdf/upload/17P88t2O788B98583682.pdfรูปภาพบางส่วนให

สารบญ

หนา

คานา ......................................................................................................................... (1)

สารบญ ........................................................................................................................ (3)

สารบญรป .................................................................................................................. (13)

สารบญตาราง ............................................................................................................ (19)

บทท 1 พนฐานระบบคอมพวเตอร .................................................................................. 1

1.1 ลกษณะการทางานของคอมพวเตอร .................................................................. 1

1.2 ประเภทของเครองคอมพวเตอร ......................................................................... 2

1.2.1 แบงประเภทตามลกษณะการใชงาน ................................................... 3

1.2.2 แบงตามขนาดและความสามารถ ...................................................... 3

1.3 โครงสรางคอมพวเตอร .................................................................................... 10

1.4 องคประกอบของระบบคอมพวเตอร ................................................................. 14

1.4.1 ฮารดแวร ....................................................................................... 15

1.4.2 ซอฟตแวร ..................................................................................... 15

1.4.3 ขอมล ........................................................................................... 16

1.4.4 บคลากร ....................................................................................... 17

1.4.5 ขนตอนการดาเนนงาน ................................................................... 18

1.5 ซอฟตแวร ...................................................................................................... 18

1.5.1 ซอฟตแวรระบบ .............................................................................. 19

1.5.2 ซอฟตแวรประยกต .......................................................................... 22

1.5.3 ซอฟตแวรสาเรจรป ........................................................................ 23

1.6 ภาษาคอมพวเตอร ......................................................................................... 24

1.7 หนาทการทางานของเครองคอมพวเตอร .......................................................... 28

บทสรป ............................................................................................................. 33

แบบฝกหด .......................................................................................................... 34

Page 6: การเขียนโปรแกรมคอมพิวเตอร ์portal5.udru.ac.th/ebook/pdf/upload/17P88t2O788B98583682.pdfรูปภาพบางส่วนให

(4)

หนา

บทท 2 หลกการเขยนโปรแกรมคอมพวเตอรพนฐาน .................................................. 35

2.1 ขนตอนในการเขยนโปรแกรม ......................................................................... 35

2.2 สญลกษณผงงาน ......................................................................................... 38

2.3 รหสเทยม .................................................................................................... 40

2.4 การวเคราะหผงงาน ...................................................................................... 42

2.5 การตรวจสอบขอผดพลาดของโปรแกรม ......................................................... 46

2.6 โครงสรางการควบคมโปรแกรม ...................................................................... 47

2.6.1 โครงสรางการควบคมโปรแกรมแบบลาดบ........................................ 47

2.6.2 โครงสรางการควบคมโปรแกรมแบบเงอนไข ...................................... 50

2.6.3 โครงสรางการควบคมโปรแกรมแบบวนซา ........................................ 56

2.6.4 โครงสรางการควบคมโปรแกรมแบบกระโดด .................................... 62

บทสรป ............................................................................................................ 64

แบบฝกหด .......................................................................................................... 65

บทท 3 ภาษาซเบองตนและการใชงานโปรแกรมภาษาซ ............................................. 67

3.1 ประวตความเปนมาของภาษาซ ..................................................................... 67

3.2 ขนตอนการทางานของภาษาซ ....................................................................... 68

3.2.1 ขนตอนการเขยนโปรแกรม .............................................................. 69

3.2.2 ขนตอนการแปลโปรแกรม ............................................................... 70

3.2.3 ขนตอนการเชอมโยงโปรแกรม ......................................................... 71

3.2.4 ขนตอนการประมวลผลโปรแกรม ..................................................... 72

3.3 โครงสรางพนฐานของภาษาซ ........................................................................ 73

3.3.1 สวนหวของโปรแกรม ...................................................................... 74

3.3.2 สวนประกาศตวแปร ....................................................................... 75

3.3.3 สวนฟงกชน ................................................................................... 75

3.3.4 สวนของรายละเอยดโปรแกรมหรอคาสงโปรแกรม ............................. 76

Page 7: การเขียนโปรแกรมคอมพิวเตอร ์portal5.udru.ac.th/ebook/pdf/upload/17P88t2O788B98583682.pdfรูปภาพบางส่วนให

(5)

หนา

3.4 องคประกอบพนฐานของภาษาซ ..................................................................... 77

3.4.1 คาและสญลกษณ ........................................................................... 77

3.4.2 ตวแปรและชนดของขอมล ............................................................... 85

บทสรป ............................................................................................................. 88

แบบฝกหด .......................................................................................................... 89

บทท 4 ชนดของขอมล ตวแปร คาคงท และการรบและแสดงผลขอมล ....................... 91

4.1 ชนดของขอมล .............................................................................................. 91

4.1.1 ชนดขอมลแบบวอย ........................................................................ 93

4.1.2 ชนดขอมลแบบตวอกษร .................................................................. 93

4.1.3 ชนดขอมลแบบเลขจานวนเตม ......................................................... 94

4.1.4 ชนดขอมลแบบเลขทศนยม .............................................................. 96

4.2 ตวแปร ......................................................................................................... 97

4.2.1 กฎการตงชอตวแปร ........................................................................ 98

4.2.2 รปแบบการประกาศตวแปร .............................................................. 99

4.2.3 ประเภทของตวแปร ....................................................................... 100

4.2.4 ขอบเขตการทางานของตวแปร ....................................................... 102

4.3 คาคงท ....................................................................................................... 105

4.3.1 ชนดของคาคงท ............................................................................ 105

4.3.2 การกาหนดคาคงท ........................................................................ 109

4.4 การรบและแสดงผลขอมล ............................................................................ 111

4.4.1 การรบขอมลดวยฟงกชน scanf() ................................................... 111

4.4.2 การแสดงผลขอมลดวยฟงกชน printf() ........................................... 116

4.4.3 การรบและแสดงผลขอมลดวยฟงกชน getchar() และ putchar() ...... 120

4.4.4 การรบและแสดงผลขอมลแบบสตรงดวยฟงกชน gets() และ puts() .. 121

บทสรป ........................................................................................................... 121

แบบฝกหด ........................................................................................................ 124

Page 8: การเขียนโปรแกรมคอมพิวเตอร ์portal5.udru.ac.th/ebook/pdf/upload/17P88t2O788B98583682.pdfรูปภาพบางส่วนให

(6)

หนา

บทท 5 การดาเนนการในภาษาซ ............................................................................... 129

5.1 ตวดาเนนการ ............................................................................................. 129

5.2 ตวดาเนนการทางคณตศาสตร ..................................................................... 130

5.2.1 ตวดาเนนการทางคณตศาสตรจานวนเตม ...................................... 133

5.2.2 ตวดาเนนการทางคณตศาสตรทศนยม ........................................... 134

5.2.3 ตวดาเนนการกาหนดคาทางคณตศาสตร ....................................... 135

5.2.4 ตวดาเนนการทางคณตศาสตรเพมคาและลดคา ............................. 137

5.2.5 ลาดบการทางานของตวดาเนนการ ................................................ 140

5.2.6 การแปลงชนดขอมล ..................................................................... 142

5.3 ตวดาเนนการทางตรรกะ ............................................................................. 145

5.4 ตวดาเนนการเชงสมพนธ ............................................................................. 148

5.5 ตวดาเนนการระดบบต ................................................................................ 151

5.6 ตวดาเนนการกาหนดคา .............................................................................. 156

5.7 ตวดาเนนการเงอนไข .................................................................................. 159

5.8 ลาดบการทางาน ........................................................................................ 159

บทสรป .......................................................................................................... 161

แบบฝกหด ........................................................................................................ 162

บทท 6 คาสงควบคม .................................................................................................. 167

6.1 พนฐานคาสงควบคมในภาษาซ ................................................................... 167

6.2 คาสงแบบลาดบ ........................................................................................ 172

6.3 คาสงแบบเลอกหรอแบบมเงอนไข ................................................................ 173

6.3.1 คาสงทดสอบเงอนไข 1 ทางเลอก (if) ............................................. 173

6.3.2 คาสงทดสอบเงอนไข 2 ทางเลอก (if-else)...................................... 179

6.3.3 คาสงทดสอบเงอนไขหลายทางเลอก (nested if) ............................. 184

6.3.4 คาสงเลอกเงอนไข (switch-case) ................................................. 188

Page 9: การเขียนโปรแกรมคอมพิวเตอร ์portal5.udru.ac.th/ebook/pdf/upload/17P88t2O788B98583682.pdfรูปภาพบางส่วนให

(7)

หนา

6.4 คาสงแบบวนซา .......................................................................................... 196

6.4.1 คาสงตรวจสอบเงอนไขกอนแลวจงทาซา (while) ............................. 196

6.4.2 คาสงทากอนแลวจงตรวจสอบเงอนไขเพอทาซา (do-while) .............. 201

6.4.3 คาสงทาซาตามจานวนรอบทระบ (for) ........................................... 205

6.5 คาสงแบบกระโดด ....................................................................................... 213

6.5.1 คาสงกระโดดโดยใชฟงกชน break ................................................. 213

6.5.2 คาสงกระโดดโดยใชฟงกชน continue ........................................... 214

6.5.3 คาสงกระโดดโดยใชฟงกชน goto .................................................. 215

บทสรป ........................................................................................................... 217

แบบฝกหด ........................................................................................................ 218

บทท 7 แถวลาดบ ....................................................................................................... 225

7.1 โครงสรางแถวลาดบ .................................................................................... 225

7.2 แถวลาดบ 1 มต .......................................................................................... 227

7.2.1 การประกาศตวแปรแถวลาดบ 1 มต ............................................... 228

7.2.2 การกาหนดคาเรมตนใหกบแถวลาดบ 1 มต .................................... 229

7.2.3 การเขาถงขอมลในแถวลาดบ 1 มต ................................................ 232

7.3 แถวลาดบแบบ 2 มต ................................................................................... 236

7.3.1 การประกาศตวแปรแถวลาดบ 2 มต ............................................... 236

7.3.2 การกาหนดคาเรมตนใหกบแถวลาดบ 2 มต .................................... 237

7.3.3 การเขาถงขอมลในแถวลาดบ 2 มต ................................................ 239

7.4 แถวลาดบ 3 มต .......................................................................................... 245

7.4.1 การประกาศตวแปรแถวลาดบ 3 มต ............................................... 245

7.4.2 การกาหนดคาเรมตนใหกบแถวลาดบ 3 มต .................................... 246

7.4.3 การเขาถงขอมลในแถวลาดบ 3 มต ................................................ 248

Page 10: การเขียนโปรแกรมคอมพิวเตอร ์portal5.udru.ac.th/ebook/pdf/upload/17P88t2O788B98583682.pdfรูปภาพบางส่วนให

(8)

หนา

7.5 ขนาดแถวลาดบอตโนมต ............................................................................ 250

7.5.1 การกาหนดขนาดแถวลาดบโดยอตโนมต ....................................... 250

7.5.2 การหาขนาดของแถวลาดบโดยฟงกชน sizeof() .............................. 252

7.6 แถวลาดบของสายอกขระ ............................................................................ 258

บทสรป .......................................................................................................... 262

แบบฝกหด ........................................................................................................ 263

บทท 8 ฟงกชน ....................................................................................................... 265

8.1 แนวคดของฟงกชน ..................................................................................... 265

8.2 ฟงกชนมาตรฐาน ....................................................................................... 269

8.2.1 ฟงกชนในแฟมสวนหว math.h ...................................................... 269

8.2.2 ฟงกชนในแฟมสวนหว ctype.h ..................................................... 274

8.2.3 ฟงกชนในแฟมสวนหว string.h ..................................................... 277

8.2.4 ฟงกชนในแฟมสวนหว stdlib.h ..................................................... 279

8.3 ฟงกชนสรางเอง ......................................................................................... 281

8.3.1 ฟงกชนทไมมการรบคาเขามาในฟงกชน และไมมการสงคากลบ

ออกไปจากฟงกชน ................................................................................ 284

8.3.2 ฟงกชนทมการรบคาเขามาในฟงกชน แตไมมการสงคากลบ

ออกไปจากฟงกชน ................................................................................ 287

8.3.3 ฟงกชนทมการรบคาเขามาในฟงกชน และมการสงคากลบ

ออกไปจากฟงกชน ................................................................................ 289

8.3.4 ฟงกชนทไมมการรบคาเขามาในฟงกชน แตมการสงคากลบ

ออกไปจากฟงกชน ................................................................................ 292

8.3.5 การใชแถวลาดบในฟงกชน ........................................................... 294

Page 11: การเขียนโปรแกรมคอมพิวเตอร ์portal5.udru.ac.th/ebook/pdf/upload/17P88t2O788B98583682.pdfรูปภาพบางส่วนให

(9)

หนา

8.4 การประกาศตวแปรของเรองฟงกชน .............................................................. 298

8.4.1 ตวแปรสวนกลาง .......................................................................... 298

8.4.2 ตวแปรเฉพาะท ............................................................................. 300

8.4.3 ตวแปรสถต .................................................................................. 301

8.4.4 ตวแปรเรจสเตอร .......................................................................... 302

บทสรป ........................................................................................................... 304

แบบฝกหด ........................................................................................................ 305

บทท 9 โครงสรางและยเนยน ..................................................................................... 307

9.1 โครงสราง ................................................................................................... 307

9.1.1 ความหมายและการประกาศขอมลแบบโครงสราง ........................... 308

9.1.2 การกาหนดคาเรมตนใหกบตวแปรภายในขอมลแบบโครงสราง ......... 312

9.1.3 การเขาถงตวแปรภายในขอมลแบบโครงสราง .................................. 313

9.1.4 การรบขอมลของตวแปรภายในขอมลแบบโครงสราง ........................ 318

9.1.5 ขอมลแบบโครงสรางซอนขอมลแบบโครงสราง ................................ 321

9.1.6 แถวลาดบกบขอมลแบบโครงสราง ................................................. 325

9.2 ยเนยน ....................................................................................................... 330

9.2.1 ความหมายและการประกาศขอมลแบบยเนยน ................................ 330

9.2.2 การกาหนดคาเรมตนใหกบตวแปรภายในขอมลแบบยเนยน ............. 336

9.2.3 การเขาถงตวแปรภายในขอมลแบบยเนยน ...................................... 337

9.2.4 การรบขอมลของตวแปรภายในขอมลแบบยเนยน ............................ 340

9.2.5 ขอมลแบบยเนยนซอนขอมลแบบยเนยน ......................................... 342

9.2.6 แถวลาดบกบขอมลแบบยเนยน ...................................................... 344

บทสรป ........................................................................................................... 347

แบบฝกหด ........................................................................................................ 348

Page 12: การเขียนโปรแกรมคอมพิวเตอร ์portal5.udru.ac.th/ebook/pdf/upload/17P88t2O788B98583682.pdfรูปภาพบางส่วนให

(10)

หนา

บทท 10 ตวช ........................................................................................................... 351

10.1 พนฐานเกยวกบตวชและทอยหนวยความจา ............................................... 351

10.2 สญลกษณสาหรบตวช .............................................................................. 354

10.3 การประกาศตวแปรของตวช ...................................................................... 357

10.4 การกาหนดคาเรมตนของตวช .................................................................... 365

10.5 ตวชของตวช ............................................................................................ 369

10.6 ตวชและแถวลาดบ ................................................................................... 374

10.6.1 การใชงานตวชและแถวลาดบ ...................................................... 374

10.6.2 การสรางแถวลาดบจากตวช ........................................................ 378

10.6.3 การเปลยนขนาดของแถวลาดบ ................................................... 385

บทสรป .......................................................................................................... 387

แบบฝกหด ........................................................................................................ 389

บทท 11 แฟมขอมล ................................................................................................... 393

11.1 พนฐานแฟมขอมล .................................................................................... 393

11.2 การทางานกบแฟมขอความ (Text Files) .................................................... 395

11.3 ฟงกชนในการจดการแฟมขอมล ................................................................ 399

11.3.1 ฟงกชนในการจดการแฟมขอมลในรปแบบตวอกขระ ..................... 399

11.3.2 ฟงกชนในการจดการแฟมขอมลในรปแบบขอความ ....................... 404

11.4 การทางานเกยวกบแฟมฐานสอง................................................................ 416

11.5 การเขาถงขอมลแบบสม ............................................................................ 421

บทสรป .......................................................................................................... 430

แบบฝกหด ........................................................................................................ 431

Page 13: การเขียนโปรแกรมคอมพิวเตอร ์portal5.udru.ac.th/ebook/pdf/upload/17P88t2O788B98583682.pdfรูปภาพบางส่วนให

(11)

หนา

บทท 12 การประยกตภาษาซใชในงานดานสถตวจย .................................................. 433

12.1 การวดแนวโนมเขาสสวนกลาง ..................................................................... 433

12.1.1 ตวกลางเลขคณต ........................................................................ 433

12.1.2 มธยฐาน ................................................................................... 435

12.1.3 ฐานนยม ................................................................................... 438

12.2 การวดการกระจายของขอมล ...................................................................... 440

12.2.1 พสย .......................................................................................... 440

12.2.2 พสยควอรไทลและสวนเบยงเบนควอรไทล ................................... 442

12.2.3 สวนเบยงเบนมาตรฐานและความแปรปรวน ................................. 445

12.3 การคานวณสมการถดถอย .......................................................................... 447

12.3.1 การคานวณสมการถดถอยโดยใชสมการเสนตรง ........................... 448

12.3.2 การวดประสทธภาพของการพยากรณ .......................................... 454

12.4 การคนหาขอมลและการจดเรยงขอมล ......................................................... 464

12.4.1 การคนหาขอมล .......................................................................... 464

12.4.2 การจดเรยงขอมล ....................................................................... 472

บทสรป ........................................................................................................... 481

แบบฝกหด ........................................................................................................ 482

บทท 13 การประยกตภาษาซในงานวจยทางปญญาประดษฐ ในการสรางขอสอบอตโนมต ........................................................................................ 485

13.1 ทฤษฎการวเคราะหขอสอบ ......................................................................... 485

13.1.1 ความยากงายของขอสอบ ............................................................ 487

13.1.2 อานาจจาแนก ............................................................................ 490

13.1.3 ความเปนปรนย .......................................................................... 492

13.1.4 ความมประสทธภาพ ................................................................... 493

13.1.5 ความยตธรรม ............................................................................ 493

13.1.6 ความเทยงตรงของขอสอบ ........................................................... 493

13.1.7 ความเชอมน .............................................................................. 494

Page 14: การเขียนโปรแกรมคอมพิวเตอร ์portal5.udru.ac.th/ebook/pdf/upload/17P88t2O788B98583682.pdfรูปภาพบางส่วนให

(12)

หนา

13.2 ขนตอนวธเชงพนธกรรม ............................................................................. 495

13.2.1 ขนตอนวธเชงพนธกรรมเบองตน .................................................. 495

13.2.2 ฟงกชนเปาหมายกบฟงกชนความเหมาะสม ................................. 496

13.2.3 รปแบบโครโมโซม ..................................................................... 496

13.2.4 ขนตอนการทางานของวธเชงพนธกรรมพนฐาน ............................. 497

13.3 การเขยนโปรแกรมการวเคราะหขอสอบ และการสรางขอสอบ

อตโนมตโดยขนตอนวธเชงพนธกรรม ................................................................... 504

13.3.1 การเขยนโปรแกรมในการวเคราะหขอสอบ .................................... 504

13.3.2 การเขยนโปรแกรมในการสรางขอสอบอตโนมตโดย ขนตอนวธเชงพนธกรรม ......................................................................... 508

บทสรป .......................................................................................................... 534

แบบฝกหด ........................................................................................................ 535

บรรณานกรม ............................................................................................................. 537

ภาคผนวก .................................................................................................................. 539

ดรรชน ...................................................................................................................... 563

Page 15: การเขียนโปรแกรมคอมพิวเตอร ์portal5.udru.ac.th/ebook/pdf/upload/17P88t2O788B98583682.pdfรูปภาพบางส่วนให

สารบญรป

หนา

รปท 1.1 ลกษณะการทางานของเครองคอมพวเตอร .............................................................. 2

รปท 1.2 ซเปอรคอมพวเตอร ................................................................................................ 4

รปท 1.3 เมนเฟรมคอมพวเตอร ............................................................................................ 5

รปท 1.4 มนคอมพวเตอร .................................................................................................... 6

รปท 1.5 คอมพวเตอรสวนบคคล.......................................................................................... 6

รปท 1.6 โนตบกคอมพวเตอร ............................................................................................... 7

รปท 1.7 คอมพวเตอรแทบเลต ............................................................................................. 8

รปท 1.8 คอมพวเตอรแบบมอถอ ......................................................................................... 8

รปท 1.9 คอมพวเตอรแบบบอรดเดยว .................................................................................. 9

รปท 1.10 โครงสรางภายในของคอมพวเตอร ....................................................................... 10

รปท 1.11 โครงสรางภายในของหนวยประมวลผลกลาง ....................................................... 11

รปท 1.12 ตวอยางซพยหรอหนวยประมวลผลกลาง ............................................................. 11

รปท 1.13 รอม ................................................................................................................. 13

รปท 1.14 แรม ................................................................................................................. 14

รปท 1.15 ตวอยางฮารดแวรของเครองคอมพวเตอร ............................................................. 15

รปท 1.16 ซอฟตแวรระบบปฏบตการวนโดว XP .................................................................. 16

รปท 1.17 กลมของซอฟตแวรประเภทตางๆ ........................................................................ 19

รปท 1.18 ภาษาเครอง ...................................................................................................... 24

รปท 1.19 ภาษาแอสแซมบล ............................................................................................. 25

รปท 1.20 ตวอยางรปแบบภาษาซ ...................................................................................... 26

รปท 1.21 รปแบบของการแปลงภาษาระดบสงไปเปนภาษาเครอง ........................................ 27

รปท 1.22 วงรอบคาสง ...................................................................................................... 28

รปท 1.23 ตวอยางการทางานของการดงชดคาสง ................................................................ 29

รปท 1.24 แผนภาพสถานะวงรอบคาสง .............................................................................. 31

รปท 2.1 แบบจาลองนาตก ................................................................................................ 36

รปท 2.2 ความหมายของสญลกษณผงงาน ......................................................................... 39

Page 16: การเขียนโปรแกรมคอมพิวเตอร ์portal5.udru.ac.th/ebook/pdf/upload/17P88t2O788B98583682.pdfรูปภาพบางส่วนให

(14)

หนา

รปท 2.3 ผงงานของการบวกเลข ตามแนวคดท 1 ................................................................ 43

รปท 2.4 ผงงานของการบวกเลข ตามแนวคดท 2 ................................................................ 44

รปท 2.5 ผงงานของการคานวณราคาสนคา ....................................................................... 45

รปท 2.6 ผงงานของการคานวณหาคาเกรดเฉลย 2 เทอม .................................................... 46

รปท 2.7 รปแบบการควบคมโปรแกรมแบบลาดบ ............................................................... 48

รปท 2.8 รปแบบประมวลผลชดคาสงแบบลาดบ ................................................................. 48

รปท 2.9 ผงงานแบบลาดบในการคานวณหาพนท ............................................................... 49

รปท 2.10 รปแบบการควบคมโปรแกรมแบบเงอนไข ............................................................ 50

รปท 2.11 รปแบบประมวลผลชดคาสงแบบเงอนไข ............................................................. 51

รปท 2.12 ผงงานแบบเงอนไขในการตรวจสอบตวเลขคและเลขค ......................................... 52

รปท 2.13 ผงงานแบบเงอนไขในการตรวจสอบตวเลขลบและบวก ........................................ 53

รปท 2.14 ผงงานแบบเงอนไขในการตรวจสอบอาย ............................................................. 54

รปท 2.15 ผงงานแบบเงอนไขในการตดเกรด ...................................................................... 55

รปท 2.16 รปแบบการควบคมโปรแกรมแบบวนซา .............................................................. 56

รปท 2.17 รปแบบประมวลผลชดคาสงแบบวนซา ............................................................... 57

รปท 2.18 ผงงานแบบวนซาในการพมพชออกจานวน 100 ครง ............................................ 58

รปท 2.19 ผงงานแบบวนซาในการหาคาผลรวมของเลข 1 ถง 10.......................................... 59

รปท 2.20 ผงงานแบบวนซาในการหาคาผลรวมของเลขคตงแตเลข 1 ถง 10 .......................... 60

รปท 2.21 ผงงานแบบวนซาในการหาคาเฉลยสวนสงของนกศกษา....................................... 61

รปท 2.22 รปแบบการควบคมโปรแกรมแบบกระโดด ........................................................... 62

รปท 2.23 รปแบบประมวลผลชดคาสงแบบกระโดด ............................................................ 63

รปท 3.1 ขนตอนการทางานของภาษาซ ............................................................................. 69

รปท 3.2 การเขยนโปรแกรมภาษาซในโปรแกรม Notepad ................................................... 69

รปท 3.3 การเขยนโปรแกรมในโปรแกรมภาษาเทอรโบซพลสพลส ......................................... 70

รปท 3.4 การเขยนโปรแกรมในโปรแกรม Microsoft Visual Studio ....................................... 70

รปท 3.5 การแปลโปรแกรมรหสตนฉบบแลวมขอผดพลาด ................................................... 71

รปท 3.6 ตวอยางการดาเนนการเชอมโยงขอมล .................................................................. 72

Page 17: การเขียนโปรแกรมคอมพิวเตอร ์portal5.udru.ac.th/ebook/pdf/upload/17P88t2O788B98583682.pdfรูปภาพบางส่วนให

(15)

หนา

รปท 3.7 ตวอยางผลลพธจากการประมวลผลของโปรแกรม .................................................. 73

รปท 3.8 โครงสรางการเขยนโปรแกรมพนฐานของภาษาซ .................................................... 74

รปท 3.9 ตวอยางรปแบบของฟงกชนในภาษาซ ................................................................... 76

รปท 3.10 สวนของโปรแกรมตดเกรดนกศกษา .................................................................... 77

รปท 3.11 การหมายเหตโปรแกรม ...................................................................................... 78

รปท 3.12 ผลของการหมายเหตโปรแกรม ........................................................................... 79

รปท 3.13 สญลกษณตางๆ ทปรากฏในโปรแกรม ................................................................ 85

รปท 3.14 การประกาศตวแปร ........................................................................................... 85

รปท 3.15 การประกาศตวแปรทผดพลาด ........................................................................... 86

รปท 3.16 การประกาศตวแปรทกาหนดคาเรมตน ................................................................ 87

รปท 4.1 การประกาศตวแปรชนดขอมลแบบวอย ................................................................. 93

รปท 4.2 การกาหนดชนดของขอมลแบบจานวนเตม ............................................................ 95

รปท 4.3 ตวอยางการกาหนดคามากเกนเกบ ....................................................................... 95

รปท 4.4 ตวอยางการกาหนดคานอยเกนเกบ ....................................................................... 96

รปท 4.5 การกาหนดชนดของขอมลแบบทศนยม ................................................................. 97

รปท 4.6 การอางองขอมลในหนวยความจา ........................................................................ 98

รปท 5.1 แสดงการเลอนบตทางซายและการเลอนบตทางขวา ............................................. 152

รปท 6.1 รปแบบการเขยนคาสงของโปรแกรม .................................................................... 168

รปท 6.2 คาสงแบบเรยงลาดบ ......................................................................................... 168

รปท 6.3 ผงงานของคาสงแบบมเงอนไข ............................................................................ 170

รปท 6.4 ผงงานของคาสงแบบทาซา ................................................................................. 171

รปท 6.5 รปแบบคาสงแบบแบบกระโดด ........................................................................... 171

รปท 6.6 ผงงานของคาสงแบบมเงอนไขแบบเงอนไข 1 ทางเลอก ........................................ 173

รปท 6.7 ผงงานของคาสงแบบมเงอนไขแบบเงอนไข 2 ทางเลอก ........................................ 179

รปท 6.8 ผงงานของคาสงแบบมเงอนไขแบบเงอนไขหลายทางเลอก .................................... 184

รปท 6.9 คาสงทดสอบเงอนไขหลายทางเลอกทมความสบสน ............................................. 187

รปท 6.10 รปแบบคาสงเลอกเงอนไข ................................................................................ 189

Page 18: การเขียนโปรแกรมคอมพิวเตอร ์portal5.udru.ac.th/ebook/pdf/upload/17P88t2O788B98583682.pdfรูปภาพบางส่วนให

(16)

หนา

รปท 6.11 ผงงานของคาสงแบบทาซาแบบตรวจสอบเงอนไขกอนแลวจงทาซา ..................... 196

รปท 6.12 ผงงานของคาสงแบบทาซาแบบทากอนแลวจงตรวจสอบเงอนไขเพอทาซา ........... 202

รปท 6.13 ผงงานของคาสงแบบทาซาตามจานวนรอบ ....................................................... 205

รปท 7.1 โครงสรางขอมลแบบแถวลาดบ .......................................................................... 226

รปท 7.2 รปแบบของแถวลาดบแบบ 1 มต ....................................................................... 227

รปท 7.3 รปแบบของแถวลาดบแบบ 2 มตหรอเมทรกซ (เมทรกซขนาด 5x5) ....................... 236

รปท 7.4 รปแบบของแถวลาดบแบบ 3 มต (เมทรกซขนาด 2x5x5) ..................................... 245

รปท 7.5 การจองหนวยความจาของตวแปร char name[6]; .............................................. 258

รปท 8.1 รปแบบตวอยางการทางานของฟงกชน ............................................................... 266

รปท 8.2 รปแบบตวอยางการเรยกใชงานฟงกชน............................................................... 282

รปท 9.1 โครงสรางการจดเกบขอมลชนดโครงสราง ........................................................... 330

รปท 9.2 โครงสรางการจดเกบขอมลชนดยเนยน ............................................................... 330

รปท 10.1 ตวอยางรปแบบของขอมลทจดเกบในหนวยความจา .......................................... 352

รปท 10.2 ตวอยางการใชงานสญลกษณ & ...................................................................... 354

รปท 10.3 ตวอยางการใชงานสญลกษณดอกจน * ............................................................ 355

รปท 10.4 ตวอยางการทางานของตวแปรตวชในการใช สญลกษณแอมเพอรแซนด & และดอกจน * ...................................................................... 356

รปท 10.5 ตวอยางตาแหนงหนวยความจาของขอมลในการใชตวแปรตวช ........................... 362

รปท 10.6 การประกาศตวแปรตวชทไมกาหนดคาเรมตน ................................................... 365

รปท 10.7 เปรยบเทยบตวอยางของตวแปรตวชของตวช .................................................... 369

รปท 10.8 ตวอยางการกาหนดคาเรมตนใหกบตวแปรตวชของตวช ..................................... 370

รปท 10.9 แผนภาพการชตาแหนงตางๆ ของขอมลของโปรแกรม ........................................ 372

รปท 10.10 แผนภาพการชตาแหนงตางๆ ของขอมลตวชของตวช 3 ตวช ............................. 373

รปท 10.11 การอางองตวแปรตวชของแถวลาดบ 1 มต ...................................................... 375

รปท 10.12 การอางองตวแปรตวชของแถวลาดบ 2 มต ...................................................... 375

รปท 10.13 การอางองตวแปรตวชของแถวลาดบ 3 มต ...................................................... 376

รปท 11.1 ลกษณะรปแบบของการทางานของแฟมขอมล .................................................. 394

Page 19: การเขียนโปรแกรมคอมพิวเตอร ์portal5.udru.ac.th/ebook/pdf/upload/17P88t2O788B98583682.pdfรูปภาพบางส่วนให

(17)

หนา

รปท 11.2 รปแสดงการทางานของแฟมขอความในโหมดตางๆ ............................................ 397

รปท 11.3 แสดงตวอยางการใชฟงกชน rewind() ............................................................... 422

รปท 12.1 การคนหาขอมลแบบลาดบ .............................................................................. 465

รปท 13.1 ปรบปญหาเขาสขนตอนวธเชงพนธกรรม ........................................................... 495

รปท 13.2 วฏจกรขนตอนวธเชงพนธกรรมพนฐาน .............................................................. 498

รปท 13.3 รปแบบของโครโมโซม ...................................................................................... 499

รปท 13.4 ตวอยางวงลอเสยงทาย .................................................................................... 501

รปท 13.5 สลบสายพนธแบบ 1 จด .................................................................................. 502

รปท 13.6 สลบสายพนธแบบ 2 จด .................................................................................. 503

รปท 13.7 กลายพนธแบบทวภาค..................................................................................... 503

รปท 13.8 ปรบรปแบบของปญหาใหเขาสในรปแบบทเหมาะสม ......................................... 508

รปท 13.9 ขอมลแตละสถานเชอมตอ ................................................................................ 509

รปท 13.10 ผงงานหลกในการเขยนโปรแกรมโดยขนตอนวธเชงพนธกรรมพนฐาน ................. 511

รปท 13.11 แสดงรปตวอยางของการสรางประชากรตนแบบโดยการสม ............................... 512

รปท 13.12 ตวอยางของการสลบสายพนธแบบ 1 จด ......................................................... 517

รปท 13.13 ตวอยางของการกลายพนธ ............................................................................. 520

Page 20: การเขียนโปรแกรมคอมพิวเตอร ์portal5.udru.ac.th/ebook/pdf/upload/17P88t2O788B98583682.pdfรูปภาพบางส่วนให

สารบญตาราง

หนา

ตารางท 3.1 อกษรพเศษ ................................................................................................... 83

ตารางท 3.2 ชนดตวแปรสาหรบเกบคาคงทชนดตาง ๆ ในภาษาซ ......................................... 87

ตารางท 4.1 แสดงการเปรยบเทยบขนาดของขอมลชนดตางๆ ............................................... 92

ตารางท 4.2 คาสงวน ........................................................................................................ 98

ตารางท 4.3 ชนดของตวแปรประเภทตางๆ ในภาษาซ ........................................................ 100

ตารางท 4.4 คาคงทตวอกษรพเศษ .................................................................................. 107

ตารางท 4.5 ตวแทนชนดขอมล ........................................................................................ 112

ตารางท 4.6 ตวแทนชนดขอมลอนๆ ................................................................................. 112

ตารางท 5.1 ตวดาเนนการทางคณตศาสตร ...................................................................... 131

ตารางท 5.2 ตวดาเนนการทางคณตศาสตรจานวนเตม ...................................................... 133

ตารางท 5.3 ตวดาเนนการทางคณตศาสตรทศนยม ........................................................... 134

ตารางท 5.4 ตวดาเนนการกาหนดคาทางคณตศาสตร ....................................................... 136

ตารางท 5.5 ตวดาเนนการทางคณตศาสตรเพมคาและลดคา ............................................. 138

ตารางท 5.6 ลาดบความสาคญของตวดาเนนการ .............................................................. 141

ตารางท 5.7 ลาดบนยสาคญของตวถกดาเนนการ ............................................................. 143

ตารางท 5.8 ตวดาเนนการทางตรรกะ ............................................................................... 145

ตารางท 5.9 ตวดาเนนการเชงสมพนธ .............................................................................. 148

ตารางท 5.10 ตวดาเนนการระดบบต ............................................................................... 151

ตารางท 5.11 ผลลพธของตวดาเนนการระดบบต & ,| ,^ ,~ ................................................ 152

ตารางท 5.12 ตวอยางการดาเนนการระดบบต .................................................................. 153

ตารางท 5.13 การกาหนดคาตวถกดาเนนการระดบบต ...................................................... 155

ตารางท 5.14 ตวดาเนนการกาหนดคา ............................................................................. 156

ตารางท 5.15 ทศทางการคานวณ .................................................................................... 160

ตารางท 8.1 แฟมสวนหว math.h ..................................................................................... 269

ตารางท 8.2 แฟมสวนหว ctype.h .................................................................................... 274

Page 21: การเขียนโปรแกรมคอมพิวเตอร ์portal5.udru.ac.th/ebook/pdf/upload/17P88t2O788B98583682.pdfรูปภาพบางส่วนให

(20)

หนา

ตารางท 8.3 แฟมสวนหว string.h ................................................................................... 277

ตารางท 8.4 แฟมสวนหว stdlib.h ................................................................................... 375

ตารางท 10.1 การประกาศแถวลาดบแบบปกตและแถวลาดบแบบตวแปรตวช .................... 379

ตารางท 11.1 โหมดการทางานของแฟมขอความ .............................................................. 395

ตารางท 11.2 โหมดการทางานของแฟมขอความชนดแฟมฐานสอง .................................... 414

ตารางท 11.3 รปแบบการกาหนดรปแบบของตาแหนงตวช ................................................ 428

ตารางท 13.1 ตวอยางของการหาคาของสมการ ............................................................... 501

Page 22: การเขียนโปรแกรมคอมพิวเตอร ์portal5.udru.ac.th/ebook/pdf/upload/17P88t2O788B98583682.pdfรูปภาพบางส่วนให

บทท 1 พนฐานระบบคอมพวเตอรและการเขยนโปรแกรมคอมพวเตอร

บทท 1

พนฐานระบบคอมพวเตอร

ในบทนจะกลาวถงลกษณะการทางานของเครองคอมพวเตอร (The Characteristic

of Computer) ประเภทของเครองคอมพวเตอร (Type of Computer) โครงสรางคอมพวเตอร (Structure of Computer) องคประกอบของระบบคอมพวเตอร (Element of Computer

System) ซอฟตแวร (Software) ภาษาคอมพวเตอร (Computer Language) และหนาทการทางานของเครองคอมพวเตอร (Function of Computer) ซงบทนจะเปนพนฐานการทางานของระบบคอมพวเตอร การเขยนโปรแกรมคอมพวเตอร และการทางานรวมกนของระบบคอมพวเตอร การทางานของระบบคอมพวเตอรจะสามารถกระทาไดจะตองประกอบไปดวยสวนของโครงสรางระบบคอมพวเตอรและสวนของซอฟตแวรจงจะสามารถทางานได ซงจะทางานรวมกนอยางเปนระบบสงผลทาใหเราสามารถใชงานคอมพวเตอรได ซงเมอเราเขาใจพนฐานของคอมพวเตอรกจะสามารถทจะนาไปประยกตในการใชงานในการเขยนโปรแกรมคอมพวเตอรไดอยางมประสทธภาพ

1.1 ลกษณะการทางานของคอมพวเตอร (The Characteristic of Computer)

คอมพวเตอรถกสรางมาจากการจาลองการทางานทางธรรมชาต สงเกตดวาลกษณะการทางานของเครองคอมพวเตอรจะคลายๆ กบลกษณะการทางานของสมองมนษย ซงเปนการเลยนแบบการคดของมนษยนนเอง ดงรปท 1.1 แสดงถงโครงสรางหลกของคอมพวเตอร ซงจะประกอบไปดวย หนวยประมวลผลกลาง หนวยความจา หนวยอนพต เอาตพต และเสนทางการเชอมโยงขอมล

Page 23: การเขียนโปรแกรมคอมพิวเตอร ์portal5.udru.ac.th/ebook/pdf/upload/17P88t2O788B98583682.pdfรูปภาพบางส่วนให

บทท 1 พนฐานระบบคอมพวเตอรและการเขยนโปรแกรมคอมพวเตอร

2

หนวยคานวณ หนวยความจา 5 + 6 = ?

สมองมนษย ผานตาและมอ

Dataกระดาษ

ก. การทางานของสมองมนษย

Central

Procesing

Unit

Memory

Unit

Program

Input/

Output Unit

Instruction +

Data

Data

ข. การคานวณของคอมพวเตอรในปจจบนทมแนวคดมาจากจอหน ฟอน นอยมนน

รปท 1.1 ลกษณะการทางานของเครองคอมพวเตอร

คอมพวเตอรในยคปจจบนยงคงมขอจากดทคอมพวเตอรไมสามารถทางานได

ดงเชนมนษยจะสามารถกระทาได ถงแมวาลกษณะการทางานจะคลายกบมนษย ตวอยางของคอมพวเตอรในปจจบนทยงมขอจากดในการทางาน ดงเชนความสามารถในการเขาใจภาษามนษย ความสามารถในการเรยนร ความสามารถในการศกษาหาเหตผลประกอบการตดสนใจ ความสามารถในการรจกลกษณะตางๆ เชน รป รส กลน เสยง และความคดรเรม

อารมณ สญชาตญาณ และอนๆ ซงปจจบนกาลงอยในชวงทาวจยเพอพฒนาอยางตอเนองใหมประสทธภาพทสามารถทางานไดใกลเคยงกบมนษยหรอสามารถทางานไดดกวามนษยในทกสภาวะการทางาน

1.2 ประเภทของเครองคอมพวเตอร (Type of Computer)

คอมพวเตอรคอเครองมอหรออปกรณอเลกทรอนกสทมความสามารถในการคานวณอตโนมตตามคาสง สวนทใชประมวลผลเรยกวาหนวยประมวลผล ชดของคาสงทระบขนตอนการคานวณเรยกวาโปรแกรมคอมพวเตอร โดยคอมพวเตอรสามารถรบชดคาสงทเราสงใหทางานและนามาประมวลผลคาสงตางๆ เหลานน เพอแกปญหางานทสลบซบซอนจนไดผลลพธทตองการ ประเภทของคอมพวเตอรในปจจบนมผ แบงออกเปนหลายชนดหลายประเภท ขนอยกบเกณฑทใชในการแบง ดงเชนแบงตามลกษณะการใชงานและแบงตามขนาดและความสามารถ

Page 24: การเขียนโปรแกรมคอมพิวเตอร ์portal5.udru.ac.th/ebook/pdf/upload/17P88t2O788B98583682.pdfรูปภาพบางส่วนให

บทท 1 พนฐานระบบคอมพวเตอรและการเขยนโปรแกรมคอมพวเตอร

3

1.2.1 แบงประเภทตามลกษณะการใชงาน

แบบใชงานทวไป (General Purpose Computer) หมายถง เครองคอมพวเตอรทมการใชงานทวไปและมความยดหยนในการทางาน โดยไดรบการออกแบบใหสามารถประยกตใชในงานประเภทตางๆ ในงานแตละดานไดโดยสะดวก โดยจะทางานตามคาสงในโปรแกรมทเขยนขนมา และเมอผ ใชตองการใหเครองคอมพวเตอรทางานอะไร กเพยงแตออกคาสงเรยกโปรแกรมทเหมาะสมเขามาใชงาน แบบใชงานทวไปเครองคอมพวเตอรเครองหนงสามารถใชงานไดหลายโปรแกรมพรอมกนเชนการใชโปรแกรมดหนงฟงเพลง พรอมกบสามารถใชโปรแกรมในการตดตอสอสารได

แบบใชงานเฉพาะดาน (Special Purpose Computer) หมายถงเครองคอมพวเตอรทถกออกแบบตวเครองและโปรแกรมควบคม ใหทางานอยางใดอยางหนงเปนการเฉพาะ โดยไมสามารถทางานอยางอนได โดยทวไปมกใชในงานควบคม หรองานอตสาหกรรมทเนนการประมวลผลแบบรวดเรว เชนเครองคอมพวเตอรควบคมสญญาณไฟจราจร คอมพวเตอรควบคมลฟต หรอคอมพวเตอรควบคมระบบอตโนมตในโรงงานตางๆ เปนตน

1.2.2 แบงตามขนาดและความสามารถ เปนการจาแนกประเภทของคอมพวเตอรทพบเหนในปจจบน ซงสามารถแบงออกเปนประเภทตางๆ ไดดงน

ซเปอรคอมพวเตอร (Supercomputer)

ซเปอรคอมพวเตอร ถอไดวาเปนคอมพวเตอรทมความเรวสงสด เครองซเปอรคอมพวเตอรมราคาแพงมาก มขนาดใหญทสดในคอมพวเตอรทกประเภท ซเปอรคอมพวเตอรสามารถคานวณทางคณตศาสตรทมความซบซอนมากไดอยางรวดเรว โดยทวไปสรางขนเปนการเฉพาะ เพองานดานวทยาศาสตรทตองการการประมวลผลทซบซอน และตองการความเรวสง ดงเชน งานวจยขปนาวธ งานโครงการอวกาศสหรฐ (NASA) การพยากรณอากาศลวงหนาเปนเวลาหลายวน และการศกษาผลกระทบของมลพษกบสภาวะแวดลอม ซงหากใชคอมพวเตอรชนดอนๆ แกไขปญหาประเภทน อาจจะตองใชเวลาในการคานวณหลายปกวาจะเสรจสน ในขณะทซเปอรคอมพวเตอรสามารถแกไขปญหาไดภายในเวลาไมกชวโมงเทานน

การแกปญหาทซบซอนหรอปญหาขนาดใหญ จะตองใชหนวยความจาสง ดงนน ซเปอรคอมพวเตอรจงมหนวยความจาทใหญมากเพอรองรบการทางานทมความเรวสง ซเปอร

Page 25: การเขียนโปรแกรมคอมพิวเตอร ์portal5.udru.ac.th/ebook/pdf/upload/17P88t2O788B98583682.pdfรูปภาพบางส่วนให

บทท 1 พนฐานระบบคอมพวเตอรและการเขยนโปรแกรมคอมพวเตอร

4

คอมพวเตอรจะเปนระบบทสามารถทางานหลายๆ งานในเวลาเดยวกนไดอยางมประสทธภาพเนองจากใชการประมวลผลแบบขนาน ซงจะมจานวนหนวยประมวลผลกลางจานวนมากชวยในการประมวลผล ตวอยางของซเปอรคอมพวเตอรแสดงดงรปท 1.2

รปท 1.2 ซเปอรคอมพวเตอร (ทมา http://en.wikipedia.org/wiki/Supercomputer สบคน 1 มถนายน 2555)

เมนเฟรมคอมพวเตอร (Mainframe Computer)

เมนเฟรมคอมพวเตอรเปนเครองคอมพวเตอรทมขนาดใหญรองลงมาจากเครองซเปอรคอมพวเตอร โดยลดประสทธภาพบางสวนจากเครองซเปอรคอมพวเตอรเพอลดตนทนการผลต เมนเฟรมคอมพวเตอรมสมรรถภาพทตากวาซเปอรคอมพวเตอร แตยงมความเรวสงและมประสทธภาพทสงกวาเครองคอมพวเตอรประเภทอน เมนเฟรมคอมพวเตอรสามารถทางานไดพรอมกนหลายงาน (Multi Tasking) และใชงานไดพรอมกนหลายคน (Multi User) ดงนนจงสามารถใหบรการผ ใชจานวนหลายรอยคนพรอมกน และสามารถใชโปรแกรมจานวนนบรอยแบบในเวลาเดยวกนได โดยเฉพาะถาตอเครองเขาเครอขายคอมพวเตอร ผ ใชสามารถใชไดจากทวโลก ปจจบน องคกรใหญๆ เชน ธนาคาร จะใชคอมพวเตอรประเภทนในการบรการลกคา ตวอยางเมนเฟรมคอมพวเตอรแสดงดงรปท 1.3

Page 26: การเขียนโปรแกรมคอมพิวเตอร ์portal5.udru.ac.th/ebook/pdf/upload/17P88t2O788B98583682.pdfรูปภาพบางส่วนให

บทท 1 พนฐานระบบคอมพวเตอรและการเขยนโปรแกรมคอมพวเตอร

5

รปท 1.3 เมนเฟรมคอมพวเตอร (ทมา http://www.itproportal.com สบคน 1 มถนายน 2555)

มนคอมพวเตอร (Minicomputer)

มนคอมพวเตอรหรอเครองคอมพวเตอรขนาดกลาง เปนเมนเฟรมคอมพวเตอรขนาดเลก ซงสามารถบรการผ ใชงานไดหลายคนพรอมๆ กน แตจะมราคาถกกวาเครองคอมพวเตอรใน 2 ประเภทแรก มนคอมพวเตอรจะไมมสมรรถภาพเพยงพอทจะบรการผ ใชในจานวนทเทยบเทาเมนเฟรมคอมพวเตอรเนองจากมการลดประสทธภาพบางอยางเพอใหไดราคาทองคกรขนาดกลางสามารถทจะจดซอได จงทาใหมนคอมพวเตอรเหมาะสาหรบองคกรขนาดกลางเทานนดงเชนการนาเอามนคอมพวเตอรมาใชบรการขอมลใหแกลกคาในการจองหองพกหรอใหบรการในการจดการงานดานตางๆ ของโรงพยาบาล ตวอยางมนคอมพวเตอรแสดงดงรปท 1.4

Page 27: การเขียนโปรแกรมคอมพิวเตอร ์portal5.udru.ac.th/ebook/pdf/upload/17P88t2O788B98583682.pdfรูปภาพบางส่วนให

บทท 1 พนฐานระบบคอมพวเตอรและการเขยนโปรแกรมคอมพวเตอร

6

รปท 1.4 มนคอมพวเตอร (ทมา http://www.lopburi1.go.th/school/banchee/mini สบคน 10 มถนายน 2555)

ไมโครคอมพวเตอร (Microcomputer) หรอ พซ (Personal Computer : PC)

ไมโครคอมพวเตอร คอ คอมพวเตอรขนาดเลกแบบขนาดตงโตะทสรางขนมาจากไมโครโพรเซสเซอร (Microprocessor) บางครงเรยกวาเครองคอมพวเตอรสวนบคคล (Personal

Computer) ในเครองพซโดยทวไปจะประกอบไปดวยอปกรณทสาคญดงเชนจอภาพ

(Monitor) ตวเครอง (Case) แปนรบขอมล (Keyboard) และ เมาส (Mouse) ตวอยางไมโครคอมพวเตอรหรอพซแสดงดงรปท 1.5

รปท 1.5 คอมพวเตอรสวนบคคล (ทมา http:// guyakreview.blogspot.com สบคน 10 มถนายน 2555)

Page 28: การเขียนโปรแกรมคอมพิวเตอร ์portal5.udru.ac.th/ebook/pdf/upload/17P88t2O788B98583682.pdfรูปภาพบางส่วนให

บทท 1 พนฐานระบบคอมพวเตอรและการเขยนโปรแกรมคอมพวเตอร

7

บางครงไมโครคอมพวเตอรทสรางขนมาจะมขนาดเลกกวาเครองคอมพวเตอรสวนบคคล อาทเชน

โนตบกคอมพวเตอร หรอคอมพวเตอรขนาดสมดบนทก (Notebook or Laptop)

คอมพวเตอรโนตบกคอ คอมพวเตอรทมขนาดเลกกวาเครองคอมพวเตอรสวนบคคล ถกออกแบบไวเพอนาตดตวไปใชตามทตางๆ มขนาดเลก และนาหนกเบา ในปจจบนมขนาดพอๆกบสมดบนทก และนยมใชงานกนอยางแพรหลายเนองจากมประสทธภาพในการทางานทสงขนและมราคาทถกลง ตวอยางโนตบกคอมพวเตอรแสดงดงรปท 1.6

รปท 1.6 โนตบกคอมพวเตอร (ทมา http://www.xbitlabs.com/articles/mobile/display/dell-vostro1400_3.html

สบคน) 10 มถนายน 2555

คอมพวเตอรแทบเลต (Tablet Computer)

คอคอมพวเตอรทมลกษณะคลายกบโนตบกคอมพวเตอร แตจะมขนาดเลกกวา พกพาไดสะดวก แตแตกตางกนทแทบเลตสามารถปอนขอมลทางจอภาพไดตามเทคโนโลยของผผลต เหมาะสาหรบใชในการเดนทางและการทางานทไมซบซอนมากนก ตวอยางของคอมพวเตอรแทบเลตแสดงดงรปท 1.7

Page 29: การเขียนโปรแกรมคอมพิวเตอร ์portal5.udru.ac.th/ebook/pdf/upload/17P88t2O788B98583682.pdfรูปภาพบางส่วนให

บทท 1 พนฐานระบบคอมพวเตอรและการเขยนโปรแกรมคอมพวเตอร

8

รปท 1.7 คอมพวเตอรแทบเลต

(ทมา http://www.tabletpcmanufacturer.com สบคน 1 ธนวาคม 2553)

คอมพวเตอรแบบมอถอ (Handheld Computer)

คอคอมพวเตอรทมขนาดเลกทาใหสามารถทจะถอเพยงมอเดยวได พกพาสะดวก ซงคอมพวเตอรชนดนถกออกแบบมาเพอใชงานเฉพาะอยางเชนใชเปนตารางเวลา ปฏทนนดหมาย หรอสมดบนทกตางๆ คอมพวเตอรชนดนสามารถนามาเปนเครองสอสารไดเชนเดยวกบโทรศพทมอถอ ตวอยางคอมพวเตอรแบบมอถอแสดงดงรปท 1.8

รปท 1.8 คอมพวเตอรแบบมอถอ (ทมา http://www.redferret.net/?p=15450 สบคน 5 สงหาคม 2553)

Page 30: การเขียนโปรแกรมคอมพิวเตอร ์portal5.udru.ac.th/ebook/pdf/upload/17P88t2O788B98583682.pdfรูปภาพบางส่วนให

บทท 1 พนฐานระบบคอมพวเตอรและการเขยนโปรแกรมคอมพวเตอร

9

คอมพวเตอรแบบบอรดเดยว (Single-Board Computers)

เปนคอมพวเตอรขนาดเลกมากทใชไมโครโปรเซสเซอรขนาดเลกทหาซอไดทวไป ไมมจอภาพแตม 7-เซกเมนต (7-Segment) และมแผงแปนอกขระหรอแปนพมพขนาดเลก เหมาะสาหรบใชงานเฉพาะอยางเชน งานควบคมอปกรณอเลกทรอนกส งานควบคมอปกรณไฟฟา งานควบคมหนยนต และงานควบคมในการประยกตใชงานดานตางๆ ตวอยางลกษณะของคอมพวเตอรแบบบอรดเดยวแสดงดงรปท 1.9

รปท 1.9 คอมพวเตอรแบบบอรดเดยว (ทมา http://www.tarad.com/_tarad/_modules สบคน 10 มถนายน 2555)

Page 31: การเขียนโปรแกรมคอมพิวเตอร ์portal5.udru.ac.th/ebook/pdf/upload/17P88t2O788B98583682.pdfรูปภาพบางส่วนให

บทท 1 พนฐานระบบคอมพวเตอรและการเขยนโปรแกรมคอมพวเตอร

10

1.3 โครงสรางคอมพวเตอร (Structure of Computer)

คอมพวเตอรเปนระบบทมการทางานทซบซอน ประกอบดวยวงจรอเลกทรอนกสจานวนมาก ดงนนการทาความเขาใจกบระบบคอมพวเตอรในลกษณะทเปนโครงสรางจะสามารถเขาใจไดมากทสดตงแตโครงสรางระดบใหญจนถงโครงสรางระดบเลก โครงสรางหมายถง วธการทอปกรณตางๆ ของคอมพวเตอรเชอมตอเขาดวยกน โดยองคประกอบของคอมพวเตอรมองคประกอบทสาคญ แสดงดงรปท 1.10

รปท 1.10 โครงสรางภายในของคอมพวเตอร (ทมา William Stallings, 2003, 10)

หนวยประมวลผลกลาง (Central Processing Unit: CPU)

ซพยหรอหนวยประมวลผลกลางจดไดวาเปนสวนทสาคญทสดของคอมพวเตอร เปรยบเสมอนเปนสมองของเครองคอมพวเตอร โดยทาหนาทในการคานวณคาตางๆ ตามคาสงทไดรบมอบหมาย และควบคมการทางานของสวนประกอบอนๆ ทงหมด ในระบบไมโครคอมพวเตอร หนวยประมวลผลกลางจะถกสรางใหอยในรปวงจรรวม (Integrated

Circuit: IC) เพยงตวเดยวทาใหงายในการนาไปใชงาน หนวยประมวลกลางเปนหนวยทมความซบซอนมากทสด ซงประกอบดวยสวนประกอบหลกตางๆ แสดงดงรปท 1.11 และภาพตวอยางของหนวยประมวลผลกลางแสดงดงรปท 1.12

Page 32: การเขียนโปรแกรมคอมพิวเตอร ์portal5.udru.ac.th/ebook/pdf/upload/17P88t2O788B98583682.pdfรูปภาพบางส่วนให

บทท 1 พนฐานระบบคอมพวเตอรและการเขยนโปรแกรมคอมพวเตอร

11

รปท 1.11 โครงสรางภายในของหนวยประมวลผลกลาง (ทมา William Stallings, 2003, 11)

รปท 1.12 ตวอยางซพยหรอหนวยประมวลผลกลาง (ทมา http:// srayaisom.dyndns.org สบคน 10 มนาคม 2555)

Page 33: การเขียนโปรแกรมคอมพิวเตอร ์portal5.udru.ac.th/ebook/pdf/upload/17P88t2O788B98583682.pdfรูปภาพบางส่วนให

บทท 1 พนฐานระบบคอมพวเตอรและการเขยนโปรแกรมคอมพวเตอร

12

หนวยคานวณทางคณตศาสตรและตรรกะ (Arithmetic and Logic Unit)

เปนหนวยททาหนาทประมวลผลโดยใชวธทางคณตศาสตร เชน บวก ลบ คณ หาร หรอ ทาหนาทประมวลผลทางตรรกะ เชน แอนด (AND) ออร(OR) และนอต (NOT) เปนตน

รวมทงยงทาหนาทในการเปรยบเทยบคาตางๆ หนวยเกบขอมลชวคราวทอยภายในหนวยประมวลผลกลางหรอเรจสเตอร (Register)

เปนหนวยความจาขนาดเลก ทาหนาทเปนทพกขอมล ชวคราวกอนทจะถกนาไปประมวลผล โดยปกตแลวในหนวยประมวลผลกลางจะม เรจสเตอร สาหรบเกบขอมลไมเกน

64 ตว การอางองขอมลของเรจสเตอร จะมความเรวเทากบความเรวของหนวยประมวลผลกลาง เพราะเปนหนวยความจาสวนทอยภายในตวหนวยประมวลผลกลางจงไมตองไปอางองถงภายนอกหนวยประมวลผล

หนวยควบคม (Control Unit)

เปนเสมอนหนวยบญชาการของระบบคอมพวเตอรทงหมด ทาหนาทกาหนดจงหวะการทางานตางๆ ของคอมพวเตอรไมเวนแมแตสวนประกอบอนๆ ของหนวยประมวลผลกลาง นอกจากนยงทาหนาทควบคมการรบสงขอมลระหวางหนวยตางๆ ในคอมพวเตอรใหสามารถทางานรวมกนไดอยางเปนระบบ

หนวยความจาหลก (Main Memory Unit)

เปนหนวยททาหนาทเกบขอมลของระบบคอมพวเตอร ไมวาจะเปนตวเลขหรอขอความแมกระทงคาสงตางๆ ในโปรแกรมทจะใชสงงานระบบคอมพวเตอร โดยทวไปแลวหนวยความจาจะถกสรางมาบนไอซเพอใหมความจสงแตมขนาดเลก ขอมลทเกบในหนวยความจาจะมสถานะเพยงแคเปดวงจร (0) หรอปดวงจร (1) เทานน หนวยความจาสามารถแบงออกไดเปน 2 ประเภทใหญ ๆ คอ

รอม หรอหนวยความจาอานอยางเดยว (ROM: Read Only Memory) เปนหนวยความจาแบบสารกงตวนาชวคราวชนดอานไดอยางเดยว ใชเปนสอบนทกในคอมพวเตอร เพราะไมสามารถบนทกซาได เปนหนวยความจาทมซอฟตแวรหรอขอมลอยแลว และพรอมทจะนามาตอกบไมโครโพรเซสเซอรไดโดยตรง หนวยความจาประเภทนแมไมมไฟเลยงตออย ขอมลกจะไมหายไปจากหนวยความจา โดยทวไปจะใชเกบขอมลทไมตองมการแกไขอกแลวเชนไบออส (Basic Input Output System: BIOS) ของเครองคอมพวเตอร ตวอยางของรอมแสดงดงรปท 1.13

Page 34: การเขียนโปรแกรมคอมพิวเตอร ์portal5.udru.ac.th/ebook/pdf/upload/17P88t2O788B98583682.pdfรูปภาพบางส่วนให

บทท 1 พนฐานระบบคอมพวเตอรและการเขยนโปรแกรมคอมพวเตอร

13

รปท 1.13 รอม

(ทมา http://www.projectsjugaad.com/2010/08/roms-read-only-memory-rom

สบคน 15 มถนายน 2555)

แรม หรอหนวยความจาเขาถงโดยสม (RAM: Random Access Memory)

หนวยความจาทเขาถงขอมลโดยการสม เปนหนวยความจาหลก ทใชในระบบคอมพวเตอรยคปจจบน หนวยความจาชนดน อนญาตใหเขยนและอานขอมลไดในตาแหนงตางๆ อยางอสระ และรวดเรว ซงตางจากสอเกบขอมลชนดอนๆ อยางเทป หรอดสก ทมขอจากดในการอานและเขยนขอมล ทตองทาตามลาดบกอนหลง หรอมขอจากดแบบรอม ทอนญาตใหอานเพยงอยางเดยว ขอมลในแรม จะหายไปทนท เมอระบบคอมพวเตอรถกปดลง เนองจากหนวยความจาชนดน จะเกบขอมลไดเฉพาะเวลาทมกระแสไฟฟาหลอเลยงเทานน ตวอยางของแรมแสดงดงรปท 1.14

Page 35: การเขียนโปรแกรมคอมพิวเตอร ์portal5.udru.ac.th/ebook/pdf/upload/17P88t2O788B98583682.pdfรูปภาพบางส่วนให

บทท 1 พนฐานระบบคอมพวเตอรและการเขยนโปรแกรมคอมพวเตอร

14

รปท 1.14 แรม

(ทมา http://www.learners.in.th/media/files/265500 สบคน 15 มถนายน 2555)

หนวยอนพต เอาตพตหรอหนวยรบเขาและสงออก (Input / Output Unit)

เปนหนวยททาหนาทรบการตดตอจากภายนอกเขาสระบบ และแสดงผลทไดจากการทางานของระบบออกสอปกรณภายนอก เชน คยบอรด, จอภาพ, ลาโพง, หนวยขบจานบนทก เปนตน หนวยรบเขาและสงออกเปนหนวยททาหนาทในการตดตอสอสารระหวางระบบภายในของคอมพวเตอรและอปกรณภายนอกตางๆ ใหสามารถตดตอสอสารขอมลและสามารถทางานรวมกนไดอยางมประสทธภาพ

หนวยการเชอมตอภายในเครองคอมพวเตอร (System Interconnection Unit)

เปนหนวยทใหสวนประกอบตางๆ ของคอมพวเตอรสามารถสอสารระหวางกนได เปนสอกลางในการเชอมโยงของโครงสรางตางๆ ภายในระบบคอมพวเตอรใหสามารถตดตอสอสารกนได

1.4 องคประกอบของระบบคอมพวเตอร (Element of Computer)

ระบบคอมพวเตอรจะสามารถทางานไดอยางมประสทธภาพจะตองประกอบดวย 5

องคประกอบคอ ฮารดแวร ซอฟตแวรระบบ ซอฟตแวรประยกต บคลากร และขนตอนการดาเนนงาน

Page 36: การเขียนโปรแกรมคอมพิวเตอร ์portal5.udru.ac.th/ebook/pdf/upload/17P88t2O788B98583682.pdfรูปภาพบางส่วนให

บทท 1 พนฐานระบบคอมพวเตอรและการเขยนโปรแกรมคอมพวเตอร

15

1.4.1 ฮารดแวร (Hardware)

ฮารดแวรหรอสวนเครองคอชนสวนของคอมพวเตอรและอปกรณตางๆ ของคอมพวเตอร หรออปกรณตางๆ ทประกอบขนเปนเครองคอมพวเตอร มลกษณะเปนโครงรางทสามารถมอง เหนดวยตาและสมผสไดเชนจอภาพ (Monitor) ลาโพง (Speaker) คยบอรด

(Keyboard) เครองพมพ (Printer) และเมาส (Mouse) เปนตน ดงตวอยางฮารดแวรทแสดงในรปท 1.15

รปท 1.15 ตวอยางฮารดแวรของเครองคอมพวเตอร (ทมา http://angsila.cs.buu.ac.th สบคน 8 มกราคม 2553)

1.4.2 ซอฟตแวร (Software)

หมายถงชดคาสง หรอโปรแกรมทเขยนขนมาเพอประมวลผลขอมล และควบคมการทางานของสวนประกอบตางๆ ของฮารดแวร เปรยบเสมอนเปนตวสงการใหคอมพวเตอรทางานตามทเราตองการ ในปจจบนซอฟตแวรมหลากหลายประเภท โดยแตละประเภทกมลกษณะการใชงานทแตกตางกนไป ซงแลวแตความเหมาะสมของงาน ซอฟตแวรสามารถแบงไดหลายกลม ดงเชนซอฟตแวรระบบ ซอฟตแวรประยกต และซอฟตแวรสาเรจรป ซงซอฟตแวรทงหมดจะเปนสอกลางในการตดตอระหวางผ ใชกบคอมพวเตอรใหสามารถทางานรวมกน

Page 37: การเขียนโปรแกรมคอมพิวเตอร ์portal5.udru.ac.th/ebook/pdf/upload/17P88t2O788B98583682.pdfรูปภาพบางส่วนให

บทท 1 พนฐานระบบคอมพวเตอรและการเขยนโปรแกรมคอมพวเตอร

16

อยางสะดวกและมประสทธภาพ ตวอยางซอฟตแวรระบบปฏบตการวนโดว XP แสดงดงรปท

1.16

รปท 1.16 ซอฟตแวรระบบปฏบตการวนโดว XP

1.4.3 ขอมล (Data)

ขอมลเปนองคประกอบทสาคญอยางหนงในระบบคอมพวเตอร เปนสงทตองปอนเขาไปในคอมพวเตอรพรอมกบโปรแกรมทนกเขยนโปรแกรมเขยนขน เพอนาไปใชในโปรแกรมและผลตผลลพธทตองการออกมา ดงนนขอมลทนาเขาไปจะตองมความถกตอง จงจะไดเอาตพตทถกตองออกมา ซงขอมลกมหลายประเภทเชน ขอมลตวเลข ขอมลตวอกขระ ขอมลบคลากร หนวยงานหรอองคกร กลมขอมลทจาเปนสาหรบการคานวณ และอนๆ อกมาก

สารสนเทศ (Information) คอขอมลทผานการประมวลผลดวยวธการใดๆ เชน การเปรยบเทยบ การคานวณ และการสรป เปนตน เพอใหสามารถนาไปใชใหเกดประโยชนตางๆ ตรงกบความตองการของผ ใช ดงเชนขอมลคอสวนสงของนกศกษาแตละคนเมอผานกระบวนการประมวลผลโดยการหาคาเฉลยทาใหไดสารสนเทศของคาเฉลยนกศกษาทงหอง

Page 38: การเขียนโปรแกรมคอมพิวเตอร ์portal5.udru.ac.th/ebook/pdf/upload/17P88t2O788B98583682.pdfรูปภาพบางส่วนให

บทท 1 พนฐานระบบคอมพวเตอรและการเขยนโปรแกรมคอมพวเตอร

17

1.4.4 บคลากร (Personnel)

เปนองคประกอบทสาคญทสดของระบบคอมพวเตอร ซงไดแก ผสราง และผ ใชระบบคอมพวเตอร บคลากรจะเปนผจดและควบคมระบบคอมพวเตอรใหสามารถปฏบตงานไดอยางมประสทธภาพ คอยแกไขปญหาตางๆ ทเกดขนกบระบบคอมพวเตอร รวมไปถงการใชงานโปรแกรมประยกตทถกพฒนาขน เราสามารถแบงบคลากรได 6 กลมดงน

หวหนาหนวยงานคอมพวเตอร (Electronic Data Processing Manager: EDP

Manager) เปนบคลากรทอยในตาแหนงทางบรหาร จะมหนาทวางแผนงาน กาหนดนโยบายของหนวยงาน จดทาโครงการและแผนงานการใชระบบคอมพวเตอร จดหาฮารดแวรและซอฟตแวรทจาเปนตองใชในองคกร อานวยความสะดวก เปนบคคลทมความรบผดชอบสง

นกวเคราะหระบบ (System Analysis) เปนผ ทมหนาทวเคราะหระบบและออกแบบระบบ โดยจะรวบรวมขอมลตางๆ ทเกยวของกบงานเดม และความตองการของผ ใช เพอทาการวเคราะหและออกแบบงานใหม หรอปรบปรงงานเดมใหมประสทธภาพ ผ ททางานดานน ควรมประสบการณเปนอยางด และมพนฐานในการเขยนโปรแกรมมากอน ถงแมวานกวเคราะหระบบ จะไมไดเขยนโปรแกรมเอง แตจะตองเปนผ คนหาวธการและขนตอนตางๆ ในการเขยนโปรแกรมเพอสงใหนกเขยนโปรแกรม

นกเขยนโปรแกรมระบบ (System Programmer) จะมหนาทเขยนโปรแกรมระบบควบคมเครอง จะคอยตรวจสอบและแกไขเมอระบบคอมพวเตอรมปญหาบคลากรประเภทน จะตองมความรทางฮารดแวรเปนอยางด เพราะตองมหนาทใหคาปรกษาตางๆ เกยวกบระบบคอมพวเตอรเมอมปญหา และตองคอยพฒนาโปรแกรมอานวยความสะดวกตางๆ ขน

บคลากรดานการเขยนโปรแกรม (Programmer) ไดแกนกเขยนโปรแกรมททาหนาทเขยนโปรแกรมประยกต (Application Program) ทางคอมพวเตอร ตามขนตอนทนกวเคราะหระบบไดออกแบบไวเพอใหผใชงานคอมพวเตอรสามารถใชงานโปรแกรมประยกตนนได

ผปฏบตการ (Operator) เปนเจาหนาทคอมพวเตอร ทมหนาทคอยปดและเปดเครองคอมพวเตอร และคอยเฝาดระบบ เมอมปญหาใดๆ เกยวกบระบบคอมพวเตอร กจะเปนผแจงใหกบนกเขยนโปรแกรมระบบทราบเพอทาการแกไข และยงมหนาทสงงานตางๆ เขาไปประมวลผลในคอมพวเตอร คอยรบงานการประมวลผลเพอแจกจาย สารองขอมล

ผ ใช (User) เปนผ ใชระบบคอมพวเตอร ซงจะมความสาคญตอการออกแบบและพฒนาระบบอยางมาก เพราะผ ใชเปนผตดสนใจ และระบความตองการลงไปวาตองการใหระบบคอมพวเตอรทาอะไรบาง ซงบรรดานกคอมพวเตอรตางๆ กจะตองพยามตอบสนองความตองการของผใชนนๆ

Page 39: การเขียนโปรแกรมคอมพิวเตอร ์portal5.udru.ac.th/ebook/pdf/upload/17P88t2O788B98583682.pdfรูปภาพบางส่วนให

บทท 1 พนฐานระบบคอมพวเตอรและการเขยนโปรแกรมคอมพวเตอร

18

1.4.5 ขนตอนการดาเนนงาน (Procedures)

เปนขนตอน หรอวธการในการใชระบบคอมพวเตอร เพอใหสามารถใชระบบคอมพวเตอรประมวลผลไดอยางถกตอง และมประสทธภาพ ขนตอนการดาเนนงานมหลากหลายวธทจะทาใหคอมพวเตอรประมวลผลไดอยางมประสทธภาพ ซงในแตละวธกจะเหมาะสมกบขนตอนบางขนตอน ดงนนการเลอกขนตอนการดาเนนงานเปนกระบวนการทสาคญกระบวนการหนงทจะทาใหใชงานระบบคอมพวเตอรไดอยางมประสทธภาพ

1.5 ซอฟตแวร (Software)

ซอฟตแวรหมายถงชดคาสงหรอโปรแกรมทใชสงงานใหคอมพวเตอรทางาน ซอฟตแวรจงหมายถงลาดบขนตอนการทางานทเขยนขนดวยคาสงของคอมพวเตอร คาสงเหลานเรยงกนเปนโปรแกรมคอมพวเตอร ดงนนโปรแกรมคอมพวเตอรทใชสงงานคอมพวเตอรจงเปนซอฟตแวร เพราะเปนลาดบขนตอนการทางานของคอมพวเตอร คอมพวเตอรเครองหนงทางานแตกตางกนไดมากมายดวยซอฟตแวรทแตกตางกน ซอฟตแวรจงหมายถงโปรแกรมคอมพวเตอรทกประเภทททาใหคอมพวเตอรทางานได การทเราเหนคอมพวเตอรทางานใหกบเราไดมากมาย เพราะวามผพฒนาโปรแกรมคอมพวเตอรมาใหเราทางานรวมกบคอมพวเตอรไดอยางมประสทธภาพ ดงเชนบรษทขายตวใชคอมพวเตอรชวยในระบบการจองตว คอมพวเตอรชวยในเรองกจการงานธนาคารทมขอมลตางๆ มากมาย คอมพวเตอรชวยงานพมพเอกสารใหรวดเรว เปนตน การทคอมพวเตอรดาเนนการไดดและมประสทธภาพสวนหนงมาจากประสทธภาพของซอฟตแวร ซอฟตแวรจงเปนสวนสาคญของระบบคอมพวเตอร หากขาดซอฟตแวรคอมพวเตอรกไมสามารถทางานได ซอฟตแวรจงเปนสงทจาเปน และมความสาคญมาก และเปนสวนประกอบหนงททาใหระบบคอมพวเตอรตางๆ เปนไปไดตามทตองการ โดยทวไปเราสามารถแบงซอฟตแวรออกเปน 3 กลมใหญไดแก ซอฟตแวรระบบ

ซอฟตแวรประยกต และซอฟตแวรสาเรจรป แสดงดงรปท 1.17 ซงจะกลาวถงในหวขอถดไป

Page 40: การเขียนโปรแกรมคอมพิวเตอร ์portal5.udru.ac.th/ebook/pdf/upload/17P88t2O788B98583682.pdfรูปภาพบางส่วนให

บทท 1 พนฐานระบบคอมพวเตอรและการเขยนโปรแกรมคอมพวเตอร

19

รปท 1.17 กลมของซอฟตแวรประเภทตางๆ

1.5.1 ซอฟตแวรระบบ (System Software)

ซอฟตแวรระบบคอซอฟตแวรททาหนาทเปนสอกลางในการตดตอสอสารกบมนษยเพอใหสามารถใชงานไดอยางมประสทธภาพ เปนตวควบคมฮารดแวรของระบบเครองคอมพวเตอรซงจะทางานใกลชดกบฮารดแวร การทางานของคอมพวเตอรประกอบดวย หนวยอนพต เอาตพต หนวยความจา และหนวยประมวลผลกลาง ดงนนในการทางานของคอมพวเตอรจาเปนตองมการดาเนนงานกบอปกรณพนฐาน จงตองมซอฟตแวรระบบเพอใชในการจดการระบบ หนาทหลกของซอฟตแวรระบบประกอบดวย

1. ใชในการจดการหนวยอนพต เอาตพต เชนการตดตอกบคยบอรด เมาส ลาโพง พรนเตอร และอปกรณตอพวงอนๆ

2. ใชในการจดการหนวยความจา เพอนาขอมลจากแหลงเกบขอมลภายนอกตางๆ มาเกบไวยงหนวยความจาหลก หรอในทานองกลบกน คอนาขอมลจากหนวยความจาหลกไปเกบไวยงแหลงเกบขอมลภายนอกตางๆ

3. ใชเปนตวเชอมตอระหวางผ ใชงานกบเครองคอมพวเตอร ทาใหสามารถใชงานไดงายขนและมประสทธภาพ เชนการดขอมลตางๆ ทอยภายในคอมพวเตอรกจะสามารถทาไดโดยงาย

Page 41: การเขียนโปรแกรมคอมพิวเตอร ์portal5.udru.ac.th/ebook/pdf/upload/17P88t2O788B98583682.pdfรูปภาพบางส่วนให

บทท 1 พนฐานระบบคอมพวเตอรและการเขยนโปรแกรมคอมพวเตอร

20

ซอฟตแวรระบบสามารถจาแนกออกได 3 กลมคอ ซอฟตแวรระบบปฏบตการ ซอฟตแวรตวแปลภาษา และซอฟตแวรอรรถประโยชน

ซอฟตแวรระบบปฏบตการ (Operating System)

ซอฟตแวรระบบปฏบตการ หรอโอเอส (OS) เปนซอฟตแวรททาหนาทในการบรหาร และจดทรพยากรตางๆ ในระบบคอมพวเตอร ดงเชนจดการกบฮารดแวร ใหกบผ ใชเพอใหสามารถใชงานไดสะดวกและมประสทธภาพ เปนซอฟตแวรใชในการดแลระบบคอมพวเตอร โดยเครองคอมพวเตอรทกเครองจะตองมซอฟตแวรระบบปฏบตการนจงจะสามารถใชงานคอมพวเตอรได หากปราศจากซอฟตแวรระบบปฏบตการแลว กจะไมสามารถใชงานคอมพวเตอรไดเลยเนองจากไมมสอกลางในการตดตอสอสารกบอปกรณตางๆ ของคอมพวเตอร ซอฟตแวรระบบปฏบตการมอยหลายชนด ดงเชน

ระบบปฏบตการดอส (Dos) เปนซอฟตแวรจดระบบงานทพฒนาเมอแรกเรมของการใชงานคอมพวเตอร ในการใชงานจะเปนการสงงานโดยใชคาสงเปนตวอกษร ในปจจบนระบบปฏบตการดอสไมไดรบความนยมเนองจากมการใชงานยาก ตองจาคาสงตางๆ ถงจะสามารถใชงานได แตอยางไรกตามระบบปฏบตการใหมๆ กยงคงมระบบปฏบตการดอสควบค เพอความเหมาะสมสาหรบงานบางอยาง

ระบบปฏบตการวนโดว เปนระบบปฏบตการทพฒนาตอจากดอส เพอเนนการใชงานทงายขน สามารถทางานหลายงานพรอมกนได โดยจะเปลยนแปลงการสงคอมพวเตอรจากการพมพคาสงเปนรปแบบของการใชรปแบบกราฟก ผ ใชงานสามารถใชเมาสเลอนตวช ตาแหนงเพอเลอกตาแหนงทปรากฏบนจอภาพ ทาใหใชงานคอมพวเตอรไดงาย วนโดวจงไดรบความนยมมากในปจจบน ระบบปฏบตการวนโดวไดเรมตงแตป 1985 ซงไดผลตวนโดว 1.0 ขนมาใชงาน ตอมาไดวนโดวรนใหมๆ ขนมาดงเชน วนโดว 2.0 วนโดว 2.1 วนโดว 3.0

วนโดว 3.1 วนโดว NT 3.5 วนโดว NT 3.51 วนโดว 95 วนโดว NT 4.0 วนโดว 98 วนโดว 2000

วนโดว Me วนโดว XP และ วนโดวเซรฟเวอร 2003 วนโดว Vista และวนโดวเซรฟเวอร 2008

และวนโดว 7 ซงเปนวนโดวทนยมใชกนในปจจบน ซงมทง 32 บต และ 64 บต เพอรองรบการทางานของคอมพวเตอรททางานเปนแบบ 64 บต

Page 42: การเขียนโปรแกรมคอมพิวเตอร ์portal5.udru.ac.th/ebook/pdf/upload/17P88t2O788B98583682.pdfรูปภาพบางส่วนให

บทท 1 พนฐานระบบคอมพวเตอรและการเขยนโปรแกรมคอมพวเตอร

21

ระบบปฏบตการโอเอสท (OS/2) เปนระบบปฏบตการทมลกษณะการตดตอสอสารโดยการใชรปแบบกราฟกแบบเดยวกบวนโดว แตบรษทผพฒนาคอบรษทไอบเอม ปจจบนไมไดรบความนยมมากนกและไดเลกการพฒนาไปตงแตป พ.ศ.2549

ระบบปฏบตการยนก ซ (UNIX) เ ปนระบบปฏบตการ ทพฒนามาเ พอใ ชกบมนคอมพวเตอรเปนสวนใหญ เหมาะสาหรบใชเปนระบบปฏบตการสาหรบเครองผ ใหบรการตางๆ ระบบปฏบตการยนกซเปนระบบปฏบตการทสามารถใชงานไดหลายงานพรอมกน และทางานไดหลาย ๆ งานในเวลาเดยวกน (Multitasking) ยนกซจงเหมาะสมกบเครองทเชอมโยงและตอกบเครองปลายทางไดหลายเครองพรอมกน

ระบบปฏบตการลนกซ (Linux) คอระบบปฏบตการแบบยนกซชนดหนง โดยใชลนกซ เคอรเนล เปนศนยกลางทางานรวมกบไลบรารและเครองมออน ลนกซเปนซอฟตแวรเสร และซอฟตแวรโอเพนซอรส ทนกพฒนาโปรแกรมทกๆ คนสามารถดหรอนาโคดของลนกซไปแกไข ดดแปลง ปรบปรง ใชงาน และแจกจายไดอยางไมผดขอกฎหมาย ลนกซจาหนายหรอแจกฟรในลกษณะเปนโปรแกรมสาเรจ (Package) โดยผจดทาจะรวมซอฟตแวรสาหรบใชงานในดานอนเปนชดเขาดวยกน ระบบปฏบตการลนกซเหมาะสาหรบรานคาทไมตองการเสยคาลขสทธซอฟตแวร ทาใหสามารถลดตนทนในการดาเนนการไดเปนอยางสง

ซอฟตแวรตวแปรภาษา (Compiler)

ซอฟตแวรตวแปลภาษาเปนซอฟตแวรในการสงงานใหคอมพวเตอรทางานตามคาสงทเราปอนเขาไป ในการพฒนาซอฟตแวรจาเปนตองมซอฟตแวรทใชในการแปลภาษาระดบสง เพอแปลภาษาระดบสงใหเปนภาษาเครอง (Compiler) เพอใหคอมพวเตอรสามารถเขาใจและทาตามคาสงได ภาษาคอมพวเตอร (Computer Language) คอภาษาทใชสงงานคอมพวเตอรโดยคอมพวเตอรสามารถเขาใจและนาไปประมวลผลได ภาษาคอมพวเตอรมทงภาษาระดบตาและภาษาระดงสง การเขยนภาษาระดบตาจะเขยนไดตองเขาใจโครงสรางทางฮารดแวรทาใหยากตอการเขยนและการพฒนา ภาษาระดบสงเปนภาษาทมสญลกษณของภาษาทมนษยสามารถเขาใจไดงาย ดงนนในปจจบนในการพฒนาโปรแกรมตางๆ จะใชภาษาระดบสงเปนเครองมอในการพฒนา ภาษาระดบสงมหลายภาษาดงเชนภาษาปาสคาล (Pascal) ภาษาเบสก (Basic) ภาษาซ (C) ภาษาจาวา (JAVA) และอนๆ อกมากมาย ซงแตละภาษาจะมจดเดนจดดอยในการใชงานทแตกตางกน

Page 43: การเขียนโปรแกรมคอมพิวเตอร ์portal5.udru.ac.th/ebook/pdf/upload/17P88t2O788B98583682.pdfรูปภาพบางส่วนให

บทท 1 พนฐานระบบคอมพวเตอรและการเขยนโปรแกรมคอมพวเตอร

22

ซอฟตแวรอรรถประโยชน (System Utilities)

เปนโปรแกรมทชวยอานวยความสะดวกในการจดการกบเครองคอมพวเตอรในดานตางๆ ทาใหประสทธภาพในการทางานทดขน ซอฟตแวรอรรถประโยชนในปจจบนมเปนจานวนมากเพอเสรมใหเครองคอมพวเตอรทางานไดอยางมประสทธภาพ เชน โปรแกรมตรวจจบไวรส โปรแกรมจดการกบขอมล โปรแกรมเกยวกบการลบขอมล การเขยนขอมล โปรแกรมเกยวกบการจดการกบระบบดสก ฮารดดสก โปรแกรมรกษาหนาจอภาพ โปรแกรมจดเรยงขอมล โปรแกรมตดตอสอสาร โปรแกรมบบอดขอมล เปนตน

1.5.2 ซอฟตแวรประยกต (Application Software)

ซอฟตแวรประยกตคอ ซอฟตแวรทถกสรางขนมาเพอใหผพฒนาสามารถนาไปใชไดอยางสะดวกและรวดเรว ทาใหประสทธภาพในการทางานทดขน ซงอาจจะเปนซอฟตแวรสาเรจหรอเปนซอฟตแวรทถกสรางขนมาใชงานในดานตางๆ ตามความตองการของผ ใชเชนซอฟตแวรในการจดพมพเอกสาร ซอฟตแวรสาหรบการคานวณดอกเบย ซอฟตแวรในการออกแบบบานซอฟตแวรในการออกแบบเสอผา ซอฟตแวรในการออกแบบหนงสอ ซอฟตแวรในการตดตอสอสารตางๆ ซอฟตแวรในการในการจายเงนเดอน ซอฟตแวรในการจดการระบบสนคาคลง และซอฟตแวรในการยมคนหนงสอหองสมด เปนตน โดยจะใชภาษาระดบสงในการพฒนาเชน ภาษาซ ภาษาปาสคาล ภาษาจาวา หรอภาษาระดบสงอนๆ การใชงานคอมพวเตอรตองมซอฟตแวรประยกต ซงอาจเปนซอฟตแวรสาเรจทมผพฒนาเพอใชงานทวไปทาใหทางานไดสะดวกขน หรออาจเปนซอฟตแวรใชงานเฉพาะ ซงผ ใชเปนผพฒนาขนเองเพอใหเหมาะสมกบสภาพการทางานของตน เราสามารถแบงลกษณะการใชงานของซอฟตแวรประยกตไดดงน

ดานการใชงานทางธรกจ เปนซอฟตแวรในการใชงานทางดานธรกจดงเชนซอฟตแวรพมพงานจาพวกการ

ประมวลคา (Word Processing) ซอฟตแวรแผนตารางทาการ (Spread Sheet) ซอฟตแวรฐานขอมล (Data Base) ซอฟตแวรการแสดงผลทางกราฟก (Presentation Graphics) และโปรแกรมบญชตางๆ (Accounting) เปนตน

Page 44: การเขียนโปรแกรมคอมพิวเตอร ์portal5.udru.ac.th/ebook/pdf/upload/17P88t2O788B98583682.pdfรูปภาพบางส่วนให

บทท 1 พนฐานระบบคอมพวเตอรและการเขยนโปรแกรมคอมพวเตอร

23

ดานการออกแบบและดานสอประสม

เปนซอฟตแวรทใชในการออกแบบและสอประสมดงเชนซอฟตแวรการออกแบบใชคอมพวเตอรชวยหรอแคด (Computer-Aided Design: CAD) ซอฟตแวรในการวาดภาพและแกไขภาพวาด (Paint/Image Editing) ซอฟตแวรในการแกไขภาพวดทศนและเสยง (Video

and Audio Editing) ซอฟตแวรคอมพวเตอรชวยสอนหรอซเอไอ (Computer-Assisted

Instruction: CAI) และซอฟตแวรในการออกแบบเวบเพจ (Web Page Authoring) เปนตน

ตวอยางซอฟตแวรในการใชงานทางดานการออกแบบ

ดานการใชงานสวนตว เปนซอฟตแวรทใชในการใชงานสวนตวดงเชนซอฟตแวรในดานความบนเทง (Entertainment) ซอฟตแวรในการจดการรปภาพ (Clip Art/Image Gallery) ซอฟตแวรประมวลคา (Word Processing) ซอฟตแวรแผนตารางทาการ (Spread Sheet) เปนตน

ตวอยางซอฟตแวรดานการใชงานสวนตว

ดานการตดตอสอสาร เปนซอฟตแวรทใชในการตดตอสอสารเพอชวยในการตดตอสอสารดานตางๆ อาจจะเปนการตดตอสอสารดวยเสยง ตดตอสอสารผานการพมพตางๆ ซอฟตแวรทใชในการตดตอสอสารดงเชน ซอฟตแวรสงจดหมายอเลกทรอนกส (E-Mail) ซอฟตแวรหองคย (Chat

Room) ซอฟตแวรเอฟทพ (File Transfer Protocol: FTP) ซอฟตแวรโปรแกรมคนดเวบหรอเวบเบราวเซอร (Web Browser) และซอฟตแวรการประชมทางวดทศน (Videoconference) เปนตน ตวอยางซอฟตแวรดานการตดตอสอสาร

1.5.3 ซอฟตแวรสาเรจรป (Package Software)

ซอฟตแวรสาเรจรปหมายถงซอฟตแวรประยกตชนดหนงทมผจดทาไวเพอใชในการทางานประเภทตางๆ หรอในดานตางๆ ตามความสามารถของโปรแกรม โดยผ ใชสามารถนาซอฟตแวรประเภทนไปใชกบการทางานเฉพาะอยาง แตจะไมสามารถดดแปลงหรอแกไขโปรแกรมได ผใชไมจาเปนตองเขยนโปรแกรมขนมาเอง จงเปนการประหยดเวลา แรงงาน และคาใชจายในการเขยนโปรแกรม ตวอยางของโปรแกรมเชนโปรแกรมจดการระบบฐานขอมล โดยสามารถจดเกบเปนหมวดหมได โปรแกรมจดพมพรายงาน โปรแกรมระบบบญช โปรแกรมเกม เปนตน

Page 45: การเขียนโปรแกรมคอมพิวเตอร ์portal5.udru.ac.th/ebook/pdf/upload/17P88t2O788B98583682.pdfรูปภาพบางส่วนให

บทท 1 พนฐานระบบคอมพวเตอรและการเขยนโปรแกรมคอมพวเตอร

24

1.6 ภาษาคอมพวเตอร (Computer Language)

ภาษาคอมพวเตอรเปนภาษาทคอมพวเตอรสามารถเขาใจและประมวลผลได

ภาษาคอมพวเตอรจะเปนภาษาเครองซงจะเปนรหสดจทล เนองจากคอมพวเตอรทางานในสภาวะโลจก “0” และ “1” ภาษาคอมพวเตอรเปนภาษาทมนษยเขาใจไดยาก ซงจะไมนยมเขยนโปรแกรมเปนภาษาเครอง ในปจจบนในการเขยนโปรแกรมจะเปนเขยนโปรแกรมดวยภาษาระดบสงเนองจากเปนภาษาทเขาใจงายและใกลเคยงกบภาษามนษย ภาษามนษยมหลากหลายภาษาในโลก ภาษาคอมพวเตอรกมหลายภาษาเหมอนกน การประยกตใชงานกประยกตใชงานภาษาในแตละงานโดยจะใหเหมาะกบงานทไดวางแผนไว

ภาษาโปรแกรมสามารถแบงออกเปนสองรปแบบ ภาษาระดบตา(Low Level

Language) และภาษาระดบสง (High Level Language) ภาษาทมความใกลเคยงกบมนษยมากเทาไหรเราจดไดวาเปนภาษาระดบสงมากเทานน ภาษาระดบตาทาความเขาใจและใชงานไดยากกวาภาษาระดบสง แตสามารถทาใหโปรแกรมทพฒนานนมความเรวสงและขนาดเลกกวาพฒนาดวยภาษาระดบสง แตอยางไรกตามในปจจบนจะนยมการเขยนโปรแกรมดวยภาษาระดบสงเนองจากสามารถเขยนไดโดยงายและเหมาะกบการประยกตใชงานในดานตางๆ ไดอยางรวดเรว เราสามารถแบงภาษาออกไดเปนกลมดงน

ภาษาระดบตาทสดคอ ภาษาเครอง (Machine language) ซงรหสคาสงจะเปนเลขฐานสองคอ “1” และ “0” ภาษาเครองจะเปนภาษาทคอมพวเตอรเขาใจเนองจากคอมพวเตอรทางานเปนระบบดจทล ทอย ในรปแบบของเลขฐานสอง รปแบบของภาษาระดบตาแสดงดงรปท 1.18

1100111101010101

0011111101110111

0110110101010101

0000100001010101

1110000001010100

รปท 1.18 ภาษาเครอง

Page 46: การเขียนโปรแกรมคอมพิวเตอร ์portal5.udru.ac.th/ebook/pdf/upload/17P88t2O788B98583682.pdfรูปภาพบางส่วนให

บทท 1 พนฐานระบบคอมพวเตอรและการเขยนโปรแกรมคอมพวเตอร

25

ภาษาทสงกวาภาษาเครองเลกนอยคอโปรแกรมภาษาแอสแซมบล (Assembly

Language Program) ภาษานจะใชขอความหรอสญลกษณตางๆ เปนคาสงในการสงงานใหคอมพวเตอรทางานตามทเราตองการ ดงเชนคาสง Mov Ax,Bx ซงหมายความวาเปนการยายขอมลทอยในเรจสเตอร Bx ไปเกบไวยงเรจสเตอร Ax การเขยนโปรแกรมภาษาแอสแซมบลจะเปนการเขยนทตองเขาใจโครงสรางของระบบคอมพวเตอร จงจะสามารถเขยนโปรแกรมภาษาแอสแซมบลได เนองจากตองจดการขอมลตางๆ ทเกบในหนวยความจาและรจสเตอรของไมโครโปรเซสเซอรโดยตรง ตวอยางภาษาแอสแซมบลแสดงดงรปท 1.19

Mov A, R0 เอาคาทอยในเรจสเตอร R0 มาเกบไวยงเรจสเตอร A

Mov R1, 20H เอาคาทอยในหนวยความจาตาแหนง 20H มาเกบไวยงเรจสเตอร R1

Add A,R1 เอาคาทอยในเรจสเตอร R1 มาบวกกบคาทอยในเรจสเตอร A

Mov 21H, A เอาคาทอยในเรจสเตอร A มาเกบไวยงตาแหนงหนวยความจาท 21H

Mov 22H,R1 เอาคาทอยในเรจสเตอร R1 มาเกบไวยงตาแหนงหนวยความจาท 22H

รปท 1.19 ภาษาแอสแซมบล

ภาษาระดบสงคอภาษาทถกสรางขนมาเพอชวยใหสามารถใชงานไดงายขน เชนภาษาซ ภาษาจาวา ภาษาปาสคาล ภาษาซ ภาษาจาวา ภาษาปาสคาล ภาษาเบสก และภาษาระดบสงอนๆ ชวยใหโปรแกรมเมอรเขยนโปรแกรมดวยภาษาทมความใกลเคยงกบภาษามนษย และโปรแกรมเมอรไมจาเปนตองจดการคาตางๆ ทอยในรจสเตอรหรอหนวยความจาเองเหมอนกบภาษาแอสแซมบล ตวอยางภาษาระดบสงดงเชนภาษาซ แสดงดงรปท 1.20

Page 47: การเขียนโปรแกรมคอมพิวเตอร ์portal5.udru.ac.th/ebook/pdf/upload/17P88t2O788B98583682.pdfรูปภาพบางส่วนให

บทท 1 พนฐานระบบคอมพวเตอรและการเขยนโปรแกรมคอมพวเตอร

26

#include<stdio.h>

#include<conio.h>

Void main(void)

{

int a,b,c;

printf(“Input a = ”);

scanf(“%i”,&a);

printf(“Input b = ”);

scanf(“%i”,&b);

c = a*b;

printf(“ a * b = %i”,c);

}

รปท 1.20 ตวอยางรปแบบภาษาซ

ภาษาระดบสงสรางขนมาเพอทาใหการเขยนโปรแกรมสงงานคอมพวเตอรงายขน โดยชดคาสงของภาษาระดบสงอานแลวเขาใจงาย (ซงจะสามารถเขาใจไดงายกวาภาษาระดบตา) การเขยนภาษาระดบสงเรายงไมอาจใชงานไดทนท เนองจากภาษาระดบสงเปนภาษาทหนวยประมวลผลไมเขาใจจะตองแปลงใหเปนภาษาเครองเสยกอน ดงนนจงตองมการแปลคาสงของภาษาระดบสงไปเปนภาษาแอสแซมบล ตวททาการแปลงโปรแกรมเปนภาษาเครองจะเรยกวา คอมไพเลอรหรอตวแปลโปรแกรม (Compiler) และแอสแซมเบลอร (Assembler)

หลกการทางานแสดงดงรปท 1.21 หนวยประมวลผลกลางแตละยหอจะมภาษาระดบตาทแตกตางกน ดงนนถาเขยนภาษาระดบตาของหนวยประมวลผลกลางยหออนเทล (Intel) กจะใชรปแบบของภาษาระดบตาของเครองอนเทล ถาใชหนวยประมวลผลกลางยหอเอเอมด

(AMD) กจะใชรปแบบของภาษาระดบตาของเครองเอเอมด ซงจะทาใหยงยากในการเขยนโปรแกรม ถาใชโปรแกรมภาษาระดบสงในการเขยนจะสามารถเขยนโปรแกรมเหมอนกนไดทกยหอ สวนเวลาในการแปลเปนภาษาระดบตา ตวแปลโปรแกรมกจะทาหนาทจดการแปลตามยหอแตละเครองโดยอตโนมต

Page 48: การเขียนโปรแกรมคอมพิวเตอร ์portal5.udru.ac.th/ebook/pdf/upload/17P88t2O788B98583682.pdfรูปภาพบางส่วนให

บทท 1 พนฐานระบบคอมพวเตอรและการเขยนโปรแกรมคอมพวเตอร

27

รปท 1.21 รปแบบของการแปลงภาษาระดบสงไปเปนภาษาเครอง

Page 49: การเขียนโปรแกรมคอมพิวเตอร ์portal5.udru.ac.th/ebook/pdf/upload/17P88t2O788B98583682.pdfรูปภาพบางส่วนให

บทท 1 พนฐานระบบคอมพวเตอรและการเขยนโปรแกรมคอมพวเตอร

28

1.7 หนาทการทางานของเครองคอมพวเตอร (Function of

Computer)

หนาทการทางานของเครองคอมพวเตอรคอการประมวลผลของชดคาสงหรอโปรแกรมทถกเขยนขนมา โดยมหนวยประมวลผลกลางเปนสวนททาหนาทในการประมวลผล เนองจากคอมพวเตอรปจจบนเปนคอมพวเตอรมพนฐานมาจากแบบจอหน ฟอน นอยมนน หรอเปนเครองจกรททางานตามขนตอนของคาสงหรอโปรแกรมทมนษยคดไว โดยนาโปรแกรมนนไปเกบในรปแบบของไฟลในดสก คอมพวเตอรกอานโปรแกรมไปเกบไวในหนวยความจาเพอใหหนวยประมวลผลกลาง มาอานคาสงไปทางานทละคาสง โดยเรมตงแตคาสงแรกไปจนจบโปรแกรม

การประมวลผลคาสงทละ 1 วงรอบของการทางาน จะประกอบดวยกระบวนการหลก 2 กระบวนการ

1. การดงชดคาสง (Instruction Fetch)

ในการทางานในแตละชดคาสง หนวยประมวลผลกลางจะตองดงคาสงทจะถกนามาประมวลผลจากหนวยความจามาเกบไวในหนวยประมวลกลางเพอทจะประมวลผล

2. การประมวลผลคาสง (Execute Instruction)

เมอมชดคาสงและขอมลตางๆ พรอมอยในหนวยประมวลผลกลางแลว กจะกระทาการประมวลผลคาสงเพอใหไดผลลพธตามทชดคาสงตองการ

รปท 1.22 วงรอบคาสง ทมา (William Stallings, 2003, 54)

จากรปท 1.22 กระบวนการทางานของคอมพวเตอรจะทาการดงชดคาสงเพอนามาประมวลผลจากนนกกระทาการประมวลผล ซงกจะกระทาซาแบบวนรอบไปเรอยๆ จนกวาจะจบโปรแกรมของชดคาสง การไปนามา (Fetch) คอการดงชดคาสงเขามา โดยขนตอนของการดงชดคาสง แสดงดงรปท 1.23

Page 50: การเขียนโปรแกรมคอมพิวเตอร ์portal5.udru.ac.th/ebook/pdf/upload/17P88t2O788B98583682.pdfรูปภาพบางส่วนให

บทท 1 พนฐานระบบคอมพวเตอรและการเขยนโปรแกรมคอมพวเตอร

29

รปท 1.23 ตวอยางการทางานของการดงชดคาสง

จากรปท 1.23 ประกอบไปดวย เรจสเตอรคาสงเครอง (IR) เรจสเตอรบพเฟอรหนวยความจา (MBR) และ เรจสเตอรตวนบระบตาแหนงคาสง(PC) ในแตละการทางานของวงรอบคาสง หนวยประมวลผลกลางจะดงคาสงมาจากหนวยความจาโดยดจากเรจสเตอรตวนบระบตาแหนงคาสง (PC) ซงจะเปนเรจสเตอรทอยภายในหนวยประมวลผลกลางมหนาทเกบตาแหนงของชดคาสงทจะถกนามาประมวลผลในลาดบถดไป ซงเมอชดคาสงไดถกนามาประมวลผลแลวเรจสเตอรตวนบระบตาแหนงคาสง (PC) กจะทาการเพมคาหรอชไปยงตาแหนงอนๆ ถดไป เพอทจะไดเอาชดคาสงถดไปมาประมวลผล ถาการประมวลผลปกต ถาเรมตนทตาแหนง 100 ตาแหนงถดไปกจะเปน 101, 102, 103 ตามลาดบไปเรอยๆ ซงลาดบน อาจเปลยนแปลงได ถาบางชดคาสงเปนการกระโดดไปยงตาแหนงอนๆ ชดคาสงทถกดงเขามาจะถกนาไปเกบไวทเรจสเตอรบพเฟอรหนวยความจา (MBR)

ซงจะเปนเรจสเตอรทเกบชดคาสงชวคราว และจะสงชดคาสงไปทเรจสเตอรคาสงเครอง (IR)

ซงเปนเรจสเตอรทเกบชดคาสงกอนทจะนาไปประมวลผล คาสงจะประกอบดวยบตตางๆ ทกาหนดใหหนวยประมวลกลางทางาน

Page 51: การเขียนโปรแกรมคอมพิวเตอร ์portal5.udru.ac.th/ebook/pdf/upload/17P88t2O788B98583682.pdfรูปภาพบางส่วนให

บทท 1 พนฐานระบบคอมพวเตอรและการเขยนโปรแกรมคอมพวเตอร

30

การกระทาการ (Execute) ชดคาสง คอการประมวลผลชดคาสงโดยหนวยประมวลผลกลางจะนาชดคาสงทอยในเรจสเตอรคาสงเครอง (IR) ไปประมวลผลแปลความหมายและทางานตามคาสงนน โดยทวไปหนวยประมวลกลางจะกระทาออกเปนกลมตางๆ ดงน

หนวยประมวลผลกลางและหนวยความจา (Processor-Memory) การเคลอนยายขอมลจาก หนวยประมวลผลกลางไปหนวยความจา หรอจากหนวยความจาไปหนวยประมวลกลาง

หนวยประมวลผลกลางและอนพต เอาตพต (Processor-Input/Output) การเคลอนยายขอมลจากหนวยประมวลผลกลางไปยงอปกรณอนพต เอาตพต หรอจากอปกรณอนพต เอาตพตไปยงหนวยประมวลผลกลาง

การประมวลผลขอมล (Data processing) เปนการประมวลผลขอมลหรอการคานวณทางคณตศาสตรและตรรกะตางๆ

การควบคม (Control) การควบคมลาดบของการประมวลผลหรอการควบคมอปกรณตางๆ ของระบบคอมพวเตอรใหทางานตางๆ ตามทไดรบคาสง

Page 52: การเขียนโปรแกรมคอมพิวเตอร ์portal5.udru.ac.th/ebook/pdf/upload/17P88t2O788B98583682.pdfรูปภาพบางส่วนให

บทท 1 พนฐานระบบคอมพวเตอรและการเขยนโปรแกรมคอมพวเตอร

31

แผนภาพสถานะหรอสเตทไดอะแกรม (State Diagram)

จากวงรอบคาสงจากรปท 1.22 อาจจะเขยนแผนภาพสถานะเพอแสดงรายละเอยดทแสดงใหเหนภาพการทางานทชดเจนดงรปท 1.24 ซงลกษณะการทางานในสวนยอยของวงรอบคาสงอธบายไดดงน

รปท 1.24 แผนภาพสถานะวงรอบคาสง ทมา (William Stallings, 2003, 57)

Instruction Address Calculation (IAC): คานวณตาแหนงของคาสง ซงเปนการคานวณหาตาแหนงของคาสงทจะถกนามาประมวลผล โดยทวไปบางระบบจะเปนการบวกคาตาแหนงทละ 1 ตาแหนงเชน ตาแหนง 100, 101, 102 ซงเปนการบวกทละ 1 ตาแหนงไปเรอย

Instruction Fetch (IF): การดงชดคาสง ซงเปนการดงชดคาสงทอยในหนวยความจามาสหนวยประมวลผล (เกบไวทเรจสเตอรทอยภายในหนวยประมวลผล)

Instruction Operation Decoding (IOD): การถอดรหสชดคาสง ซงเปนการแปลความหมายของชดคาสง โดยดวาชดคาสงจะกระทาอะไร และขอมลทจะนามาใชคออะไร

Page 53: การเขียนโปรแกรมคอมพิวเตอร ์portal5.udru.ac.th/ebook/pdf/upload/17P88t2O788B98583682.pdfรูปภาพบางส่วนให

บทท 1 พนฐานระบบคอมพวเตอรและการเขยนโปรแกรมคอมพวเตอร

32

Operand Address Calculation (OAC): การคานวณตาแหนงของตวถกกระทา ซงเปนการคานวณหาตาแหนงตวถกกระทาหรอโอเปอแรนด (Operand) ถาคาสงนนมการอางถงตวถกกระทาในหนวยความจา หรอผานอปกรณอนพต เอาตพตตางๆ เชนมการอางถงขอมลตางๆ ทอยในหนวยความจาทจะถกนามาใช

Operation Fetch (OF): การดงตวถกกระทามาเกบไวยงหนวยประมวลผล ซงเปนการดงตวถกกระทาตางๆ เชนดงขอมลทจะเปนตวถกกระทาจากหนวยความจาหรออปกรณอนพต

เอาตพตตางๆ มาไวยงหนวยประมวลผล

Data Operation (DO): การทางานกบขอมล ซงเปนการนาเอาขอมลตางๆ มาทาการประมวลผลตามชดคาสงทสงงาน

Operand Store (OS): การจดเกบขอมลตวถกกระทา ซงเปนการจดเกบขอมลทไดจากการประมวลผลตางๆไวทหนวยความจาหรอไวทอปกรณอนพต เอาตพตตางๆ

จากรปท 1.24 สงเกตเหนวาแผนภาพสถานะในสวนดานบนจะเกยวของกบการแลกเปลยนขอมลระหวางหนวยประมวลผลกบหนวยความจาหรออปกรณอนพต/เอาตพตตางๆ สวนแผนภาพสถานะทอยสวนลางจะเปนสวนทเกยวของกบการประมวลผลภายในหนวยประมวลผลเอง นอกจากนในแผนภาพสถานะสงเกตเหนวาระบบนสามารถยนยอมใหมตวถกกระทาไดหลายตวและมผลลพธไดหลายตวเชนกน เนองจากบางคาสงของระบบคอมพวเตอรบางชนดมความตองการในการทางานในลกษณะนดงเชนคาสง ADD A,B ซงจะเปนการอางตวถกกระทาจานวน 2 ตว

Page 54: การเขียนโปรแกรมคอมพิวเตอร ์portal5.udru.ac.th/ebook/pdf/upload/17P88t2O788B98583682.pdfรูปภาพบางส่วนให

บทท 1 พนฐานระบบคอมพวเตอรและการเขยนโปรแกรมคอมพวเตอร

33

บทสรป

ในบทนไดกลาวถงลกษณะการทางานของเครองคอมพวเตอร ประเภทของเครองคอมพวเตอร โครงสรางคอมพวเตอร องคประกอบของระบบคอมพวเตอร ซอฟตแวร และภาษาคอมพวเตอร ซงเปนพนฐานของการเรยนรของการทางานของเครองคอมพวเตอร ทาใหสามารถเขาใจและเปนพนฐานในการทางานเกยวกบคอมพวเตอรในระดบสงตอไป ลกษณะการทางานของเครองคอมพวเตอรมแนวคดมาจากการจาลองการทางานทางธรรมชาต ซงลกษณะการทางานของเครองคอมพวเตอรจะคลายๆ กบลกษณะการทางานของสมองมนษย จาลองการเลยนแบบการคดของมนษยนนเอง ประเภทของเครองคอมพวเตอรในปจจบนมผแบงออกเปนหลายชนดหลายประเภท ขนอยกบเกณฑทใชในการแบง ดงเชนแบงตามลกษณะการใชงานและแบงตามขนาดและความสามารถ โครงสรางคอมพวเตอรคอวธการทอปกรณตางๆ ของคอมพวเตอรเชอมตอเขาดวยกน โดยองคประกอบของคอมพวเตอรมองคประกอบทสาคญ หนวยประมวลผลกลาง หนวยความจาหลก หนวยอนพต เอาตพตหรอหนวยรบเขาและสงออก และหนวยการเชอมตอภายในเครองคอมพวเตอร องคประกอบของระบบคอมพวเตอรประกอบดวย 5 องคประกอบคอ ฮารดแวร ซอฟตแวร ขอมล บคลากร และขนตอนการดาเนนงาน ซงการทคอมพวเตอรจะสามารถทางานไดตองประกอบไปดวยทง 5 องคประกอบ

ซอฟตแวรหมายถงชดคาสงหรอโปรแกรมทใชสงงานใหคอมพวเตอรทางาน ซอฟตแวรระบบคอซอฟตแวรททาหนาทเปนสอกลางในการตดตอสอสารกบมนษยเพอใหสามารถใชงานไดอยางมประสทธภาพ เปนตวควบคมฮารดแวรของระบบเครองคอมพวเตอรซงจะทางานใกลชดกบฮารดแวร ซอฟตแวรระบบสามารถจาแนกออกได 3 กลมคอ ซอฟตแวรระบบปฏบตการ ซอฟตแวรตวแปลภาษา และซอฟตแวรอรรถประโยชน ซอฟตแวรประยกตคอ ซอฟตแวรทถกสรางขนมาเพอใหผพฒนาสามารถนาไปใชไดอยางสะดวกและรวดเรว ทาใหประสทธภาพในการทางานทดขน ซงอาจจะเปนซอฟตแวรสาเรจหรอเปนซอฟตแวรทถกสรางขนมาใชงานในดานตางๆ ตามความตองการของผ ใช ภาษาโปรแกรมสามารถแบงออกเปนสองรปแบบ

ภาษาระดบตาและภาษาระดบสง ภาษาทมความใกลเคยงกบมนษยมากเทาไหรเราจดไดวาเปนภาษาระดบสงมากเทานน ซงจะสามารถเขาใจงายมากกวาภาษาระดบตา ในปจจบนนยมการเขยนโปรแกรมตางๆ ดวยภาษาระดบสง เนองจากเขาใจงายและสามารถประยกตใชงานไดอยางรวดเรว หนาทการทางานของเครองคอมพวเตอรคอการประมวลผลของชดคาสงหรอโปรแกรมทถกเขยนขนมา โดยมหนวยประมวลผลกลางเปนสวนททาหนาทในการประมวลผล

Page 55: การเขียนโปรแกรมคอมพิวเตอร ์portal5.udru.ac.th/ebook/pdf/upload/17P88t2O788B98583682.pdfรูปภาพบางส่วนให

บทท 1 พนฐานระบบคอมพวเตอรและการเขยนโปรแกรมคอมพวเตอร

34

แบบฝกหดทบทวน

1. จงอธบายลกษณะการทางานของคอมพวเตอร 2. โครงสรางของคอมพวเตอรประกอบดวยอะไรบาง จงอธบาย 3. หนวยประมวลผลกลางคออะไรและมองคประกอบอะไรบาง 4. หนวยความจาคออะไรและมหนาททาอะไร 5. หนวยอนพต เอาตพต ทาหนาทอะไร 6. ซอฟตแวรคออะไร และทาหนาทอะไร 7. ซอฟตแวรสามารถแบงออกได 3 กลมใหญประกอบดวยซอฟตแวรอะไรบาง 8. จงยกตวอยางของซอฟตแวรระบบปฏบตการมา 3 ตวอยาง 9. ซอฟตแวรตวแปลภาษาคออะไร พรอมทงยกตวอยางซอฟตแวรตวแปลภาษามา 3

ตวอยาง 10. ซอฟตแวรสาเรจรปคออะไร จงอธบายพรอมทงยกตวอยางซอฟตแวรสาเรจรปมา 3

ตวอยาง 11. ภาษาระดบตา ภาษาระดบสงคออะไร พรอมทงยกตวอยางอธบาย 12. จงเขยนรปแบบของการแปลงภาษาระดบสงไปเปนภาษาเครอง มหลกการทางานอยางไร จงอธบาย

13. จงอธบายแผนภาพสถานะวงรอบคาสงดงรป

Page 56: การเขียนโปรแกรมคอมพิวเตอร ์portal5.udru.ac.th/ebook/pdf/upload/17P88t2O788B98583682.pdfรูปภาพบางส่วนให

บทท 2 หลกการเขยนโปรแกรมคอมพวเตอรพนฐาน

บทท 2

หลกการเขยนโปรแกรมคอมพวเตอรพนฐาน

ในบทนจะกลาวถงขนตอนในการเขยนโปรแกรม (Procedure of Computer

Programming) สญลกษณผงงาน (Flowchart Symbol) รหสเทยม (Pseudo Code) การวเคราะหผงงาน (Flowchart Analysis) การตรวจสอบขอผดพลาดของโปรแกรม (Testing

and Debugging) และโครงสรางการควบคมโปรแกรม (Structure of Program Control) ซงเปนหลกการพนฐานในการเขยนโปรแกรมคอมพวเตอร ในปจจบนระบบคอมพวเตอรสามารถคดและคานวณไดรวดเรวกวามนษย และสามารถทางานตางๆ ไดจานวนมาก การทางานตางๆ เหลานเกดขนไดกจากการเขยนโปรแกรมคอมพวเตอรทมประสทธภาพคอยสงงานใหคอมพวเตอรทางานตามคาสงทเราตองการ ดงนนการเขยนโปรแกรมคอมพวเตอรอยางมประสทธภาพจาเปนจะตองมกระบวนการในการแกปญหาอยางเปนระบบ และมความเขาใจรปแบบการเขยนโปรแกรม เพอใหเกดความรความเขาใจทถกตอง ชดเจน ซงจะเปนพนฐานทสาคญในการเขยนโปรแกรมเพอนาไปประยกตใชงานไดอยางมประสทธภาพ

2.1 ขนตอนในการเขยนโปรแกรม (Procedure of Programming)

การเขยนโปรแกรมคอมพวเตอรจาเปนตองมกระบวนการหรอขนตอนทสาคญเพอใหการแกปญหามประสทธภาพทดทสด ในการเขยนโปรแกรมจะมรปแบบในการพฒนาหลายรปแบบดงเชนวธการแบบจาลองนาตก (Waterfall Model) ซงเปนวธการหนงเขาใจงายและทนยมใชในปจจบน ซงหลกการกจะเปนเชนเดยวกบนาตกตามชอของวธการ โดยเรมตนจากการขนตอนของการสอบถามความตองการ (Requirement Phase) ขนตอนของการวเคราะห

(Specification (Analysis) Phase) ขนตอนของการวางแผน (Planning Phase) ขนตอนการออกแบบการทางานของแตละงานยอย (Design Phase) ขนตอนของการเขยนโปรแกรม

(Implementation Phase) ขนตอนของรวมงาน (Integration Phase) ขนตอนของการ

Page 57: การเขียนโปรแกรมคอมพิวเตอร ์portal5.udru.ac.th/ebook/pdf/upload/17P88t2O788B98583682.pdfรูปภาพบางส่วนให

บทท 2 หลกการเขยนโปรแกรมคอมพวเตอรพนฐาน

36

บารงรกษา (Maintenance Phase) สดทายคอขนตอนของการเลกใชงาน (Retirement) ดงแสดงในรปท 2.1

รปท 2.1 แบบจาลองนาตก

ขนตอนของการสอบถามความตองการ (Requirement Phase) เปนขนตอนสอบถามความตองการของผ ใชโปรแกรมหรอลกคา วาตองการใหโปรแกรมทสรางขนสามารถทาอะไรไดบาง ดงเชนความตองการของลกคาทตองการนาโปรแกรมไปใชจดการฐานขอมลในรานหนงสอ หรอรานคาตางๆ

ขนตอนของการวเคราะห (Specification (Analysis) Phase) เปนขนตอนของการวเคราะหหรอกาหนดรายละเอยดตางๆ หลงจากทราบความตองการของผ ใชแลวกมาทาการวเคราะหวาจะสรางโปรแกรมตามความตองการของผ ใช ตองทาอยางไร (อยางกวาง ๆ) จะใชเครองมออะไรบางในการพฒนาโปรแกรม

Page 58: การเขียนโปรแกรมคอมพิวเตอร ์portal5.udru.ac.th/ebook/pdf/upload/17P88t2O788B98583682.pdfรูปภาพบางส่วนให

บทท 2 หลกการเขยนโปรแกรมคอมพวเตอรพนฐาน

37

ขนตอนของการวางแผน (Planning Phase) เปนขนตอนของการวางแผนงาน จะกระทาการวางแผน สรางตารางเวลาการทางาน กระจายงานทตองทา ซงเปนงานทไดจากขนตอนของการวเคราะหในกอนหนาน

ขนตอนการออกแบบการทางานของแตละงานยอย (Design Phase) เปนขนตอนของการออกแบบของแตละงานยอย ซงเปนงานทไดจากการกระจายงานในขนตอนการวางแผน

ซงประกอบดวยสองขนตอนทสาคญคอ การคดหาวธการทางานของโปรแกรมหรอทเรยกกนวาขนตอนวธ (Algorithm) ซงการ

คดหาวธการทางานของแตละคนสาหรบแตละปญหากจะแตกตางกน ตามแตความสามารถในการคดของขนตอนวธ แตผลลพธทไดจะตองสามารถกระทาไดตามทตองการตามทไดวางแผนไว

การถายทอดความคดนนไปใหกบผ ทจะทางานในสวนการเขยนโปรแกรมเรามกจะใชสองวธการ (อยางใดอยางหนง) นนคอ การเขยนผงงาน (Flowchart) ซงเปนการอธบายขนตอนการทางานของโปรแกรมในรปแบบของกราฟกและ การเขยนรหสเทยม (Pseudo

code) ซงเปนการอธบายขนตอนการทางานของโปรแกรมในรปแบบของตวหนงสอ

ขนตอนของการเขยนโปรแกรม (Implementation Phase) เปนขนตอนของการเขยนโปรแกรมตามทออกแบบไวตามขนตอนการวางแผนงาน การเขยนโปรแกรมโดยมากจะดจากผงงานหรอรหสเทยม เพอสามารถใหเขยนโปรแกรมตามแนวทางของแตละคนไดตามแผนทวางไว เนองจากการเขยนโปรแกรมสามารถเขยนไดหลายภาษา แตภาษาทเปนมาตรฐานเดยวกนคอผงงานและรหสเทยม

ขนตอนของรวมงาน (Integration Phase) เปนขนตอนของการนาโปรแกรมทเขยนเสรจของแตละงานมารวมกน แลวลองนาไปใชจรง

ขนตอนของการบารงรกษา (Maintenance Phase) เปนขนตอนการบารงรกษาโปรแกรม ระหวางทใชโปรแกรมนนอาจเกดปญหาบางอยาง เชนโปรแกรมทางานผดพลาด

โปรแกรมทางานไมตรงกบความตองการตามทผใชโปรแกรมตองการ ซงผพฒนาโปรแกรมตองนาโปรแกรมไปแกไข ปรบปรงเพมเตมจนไดโปรแกรมทสมบรณตามทผใชตองการ

ขนตอนของการเลกใชงาน (Retirement) คอการเลกใชโปรแกรม

Page 59: การเขียนโปรแกรมคอมพิวเตอร ์portal5.udru.ac.th/ebook/pdf/upload/17P88t2O788B98583682.pdfรูปภาพบางส่วนให

บทท 2 หลกการเขยนโปรแกรมคอมพวเตอรพนฐาน

38

2.2 สญลกษณผงงาน (Flowchart Symbol)

สญลกษณผงงานเปนเครองมออกแบบหนงทใชรปภาพ แสดงถงขนตอนในการเขยนโปรแกรม หรอขนตอนในการแกปญหาทละขน และมเสนทแสดงทศทางการไหลของขอมลตงแต จดเรมตน จนกระทงจดสนสดของโปรแกรมหรอผลลพธของโปรแกรม ใชเปนโครงรางกอนการเขยนโปรแกรมคอมพวเตอร เพอสามารถเหนภาพของการแกปญหาไดอยางชดเจนและเขาใจงายยงขน สญลกษณผงงานเปนเครองมอทสาคญในการเขยนโปรแกรมของทกๆ ภาษา เนองจากสญลกษณผงงานจะใชรปมาตรฐานเดยวกนในทกๆ ภาษา ทาใหเมอเหนผงงานของโปรแกรมแลวจะสามารถนาไปเขยนโปรแกรมภาษาใดกได สญลกษณผงงานจะเปนเครองมอถายทอดแนวคดในการแกปญหาใหออกมาในรปของรปธรรม การเขยนโปรแกรมโดยใชสญลกษณผงงาน แบงไดออกเปน 2 แบบไดแก

1) ผงงานระบบ (System flowchart) เปนผงงานทเขยนขนเพอแสดงใหเหนถงความสมพนธระหวางโปรแกรมตางๆ วาไดรบขอมลเขามาประมวลผลจากทางใด ประมวลผลเสรจแลวจะสงไปทไหน และผลลพธทเกดขนจะแสดงออกในรปใด

2) ผงงานโปรแกรม (Program flowchart หรอ Detail flowchart) เปนผงงานทเขยนขนเพอแสดงขนตอนคาสงอยางละเอยด ซงตามปกตแลวผ เขยนโปรแกรมจะเขยนผงงานโปรแกรม ขนมากอน ตอจากนนจะตรวจสอบขนตอนคาสงงานแตละขนในผงงานวาไมมผดพลาดแลวจงลงมอเขยนโปรแกรมเพอนาไปประยกตใชงานตอไป

Page 60: การเขียนโปรแกรมคอมพิวเตอร ์portal5.udru.ac.th/ebook/pdf/upload/17P88t2O788B98583682.pdfรูปภาพบางส่วนให

บทท 2 หลกการเขยนโปรแกรมคอมพวเตอรพนฐาน

39

สญลกษณ ความหมาย สญลกษณ ความหมาย

เรมตนและสนสดโปรแกรม

พมพผลลพธออกทางกระดาษ

รบขอมลทางคยบอรด

ประมวลผล

อานเขยนขอมลจากดสก

ตดสนใจเลอก

อานเขยนขอมลจากเทปแมเหลก

รอยตอของเสนเชอม

อานเขยนขอมลลงฐานขอมล

แสดงการเชอมตอในหนาถดไป

แสดงผลลพธออกทางหนาจอ

เสนเชอมตอ

รปท 2.2 ความหมายของสญลกษณผงงาน

Page 61: การเขียนโปรแกรมคอมพิวเตอร ์portal5.udru.ac.th/ebook/pdf/upload/17P88t2O788B98583682.pdfรูปภาพบางส่วนให

บทท 2 หลกการเขยนโปรแกรมคอมพวเตอรพนฐาน

40

2.3 รหสเทยม (Pseudo Code)

รหสเทยมคอรหสจาลองทใชเปนตวแทนของขนตอนวธทใชในภาษาการเขยนโปรแกรมทวไป โดยจะแสดงขนตอนวธการทใชภาษาเขยนทเขาใจงาย โดยมถอยคาหรอประโยคคาสงทเขยนอยในรปแบบของภาษาองกฤษหรอภาษาไทยกได ขนอยกบความสะดวกของผ เขยนโปรแกรม แตโดยทวไปจะใชรปแบบภาษาองกฤษเพออธบายรายละเอยดของขนตอนวธตางๆ เนองจากเปนภาษากลางทสวนมากนยมใชกน

บางครงจะมการใชคาเฉพาะ (Reserve Words) ทมอยในภาษาโปรแกรมมาชวยเขยน

โครงสรางของรหสจาลองดงนนจงมสวนคลายกบการเขยนโปรแกรมมาก รหสจาลองจงเปนเครองมออกแบบทใชกนในการออกแบบโปรแกรม

หลกการเขยนรหสเทยม

ถอยคาทใชเขยน ใชภาษาองกฤษหรอภาษาไทยทเขาใจงาย ในหนงบรรทด ควรใหมเพยงหนงประโยคคาสงเทานน

ใชยอหนาใหเปนประโยชน ในการแสดงการควบคมอยางเปนสดสวน

แตละประโยคคาสงใหเขยนจากบนลงลาง และมทางออกทางเดยว กลมของประโยคคาสงอาจรวมเปนหมวดหมแลวเรยกใชเปนหนวยโปรแกรมประยกต

(Module)

ตวอยางท 2.1 ใหทาการเขยนรหสเทยมของการชงกาแฟ จานวน 5 ถวย วธทา

1. ซอกาแฟผง 5 ซอง 2. ตมนารอนจนเดอด

3. ทาซา 5 ถวย 3.1 เตรยมถวยและชอน สาหรบชงกาแฟ

3.2 ฉกซองกาแฟ แลวเทลงถวยเปลา 3.3 เทนารอนลงถวยแลวใชชอนคนใหเขากน

4. เรยกเพอนทง 5 คน

5. เชญทกรบประทานกาแฟ

Page 62: การเขียนโปรแกรมคอมพิวเตอร ์portal5.udru.ac.th/ebook/pdf/upload/17P88t2O788B98583682.pdfรูปภาพบางส่วนให

บทท 2 หลกการเขยนโปรแกรมคอมพวเตอรพนฐาน

41

ตวอยางท 2.2 ใหทาการเขยนรหสเทยมของการหาคานวณพนทสามเหลยม

วธทา 1. Set Variable

2. X = Input of Base

3. Y = Input of High

4. Z = ½ * X * Y

5. Output = Z

ตวอยางท 2.3 ใหทาการเขยนรหสเทยมของการคานวณของคา 3 คา วธทา

1. Set Variable

2. X = Input Value 1

3. Y = Input Value 2

4. Z = Input Value 3

5. Total = X * Y * Z

6. Output = Total

ตวอยางท 2.4 ใหทาการเขยนรหสเทยมของการคานวณของคาเกรดเฉลยของนกศกษา จานวน 2 เทอม

วธทา 1. Set Variable

2. X = Input Grade1

3. Y = Input Grade 2

4. Calculate Average by Using Z = (X+Y)/2

5. Show Result of Z

Page 63: การเขียนโปรแกรมคอมพิวเตอร ์portal5.udru.ac.th/ebook/pdf/upload/17P88t2O788B98583682.pdfรูปภาพบางส่วนให

บทท 2 หลกการเขยนโปรแกรมคอมพวเตอรพนฐาน

42

2.4 การวเคราะหผงงาน (Flowchart Analysis)

การวเคราะหผงงานเปนการวเคราะหถงปญหานบไดวาเปนสวนสาคญของการเขยนโปรแกรมประยกตตางๆ การวเคราะหผงงานเปนการศกษาถงลกษณะและรายละเอยดตางๆ ทเกยวของสาหรบการเขยนโปรแกรม เชนตองการใหเขยนโปรแกรมอะไรกจะทาการวเคราะหผงงานทงหมดตงแตอนพตจนถงเอาตพต และวธการประมวลผลตางๆ เพอใหผ เขยนโปรแกรมสามารถมองเหนปญหาไดงายขนและสามารถนาไปเขยนโปรแกรมประยกตใชงานจรงไดอยางรวดเรวและมความถกตองสมบรณ การวเคราะหผงงานทมประสทธภาพมหลากหลายวธ แตวธการทนยมใชกนอยางแพรหลาย จะสามารถแบงวธการวเคราะหผงงานไดดงน

สงทโจทยตองการ หมายถงสงทตองการใหเครองคอมพวเตอรทาให เชน ตองการใหคานวณเกรดเฉลยของนกศกษา คานวณเกรดของนกศกษา และอนๆ การพจารณาถงสงทโจทยตองการเปนสวนทสาคญมาก เพราะถาไมสามารถเขาสงทโจทยตองการกไมสามารถจะทาขนตอนตอไปไดเลย หรอถาเขาใจสวนนผดกจะทาใหงานขนตอนทเหลอผดหมด

ผลลพธทตองการแสดง (Output Results) หมายถงผลลพธทตองการใหคอมพวเตอรแสดงผลออกมาวาควรจะมลกษณะในการแสดงผลอยางไร มรายละเอยดทตองการใหแสดงผลมากนอยเพยงใด

ขอมลทตองนาเขา (Input Data) หมายถงขอมลอนพตทตองปอนเขามาเพอใชในการประมวลผล

ตวแปรทใช (Variable) หมายถงตวแปรทใชแทนความหมายของขอมล เพอความสะดวกในการอางถงขอมล ในการเขยนโปรแกรมควรตงชอตวแปรทมความหมายทมความเกยวของกบขอมล การตงชอตวแปรนจะขนอยกบกฎเกณฑของภาษาคอมพวเตอรของแตละภาษาทใชในการเขยนโปรแกรม เนองจากภาษาคอมพวเตอรแตละภาษามขอกาหนดในการตงตวแปรทแตกตางกนไป

วธการประมวลผล (Processing) หมายถงวธการประมวลผลโดยจะแสดงขนตอนตางๆ ของการประมวลผลทงหมด ในขนตอนของวธการนถาทาไดอยางมประสทธภาพและเขาใจงายกจะชวยในการเขยนโปรแกรมใหงายยงขน เนองจากมองเหนกระบวนการตางๆ ชดเจน

Page 64: การเขียนโปรแกรมคอมพิวเตอร ์portal5.udru.ac.th/ebook/pdf/upload/17P88t2O788B98583682.pdfรูปภาพบางส่วนให

บทท 2 หลกการเขยนโปรแกรมคอมพวเตอรพนฐาน

43

หลกการทวไปของการเขยนผงงานระบบทด เราสามารถสรปวธการเขยนไดดงน

ควรมจดเรมตนและจดสนสดเพยงจดเดยวในผงงาน

มทางเขาของสญลกษณเพยงทางเดยว มทางออกของสญลกษณเพยงทางเดยว แตยกเวนสญลกษณของการตดสนใจท

สามารถออกได สองทาง ทศทางของสญลกษณควรจะเขยนจากบนลงลาง ขอความทอยในสญลกษณควรจะสนกะทดรด และสอความหมายทเขาใจงาย ขนาดของสญลกษณควรมความพอด

เสนทางในการเชอมตอควรจะเขยนใหชดเจน วาจะมลกศรไปในทศทางใดบาง

ตวอยางท 2.5 จงเขยนผงงานของการบวกเลขจานวน 2 คา วธทา วเคราะหแนวคดท 1 ในการเขยนผงงาน

ถาโจทยไมไดระบวาใหคาตวเลขมาจากไหนอนพตอะไร ใหสมมตวาไดรบอนพตของเลขมาจากคยบอรด ดงนนทาการรบขอมลอนพตคอรบตวเลขสองตวเขามา เมอรบคาเขามาแลวจะเกบคาไวทไหน ซงโดยปกตแลวจะเกบไวในตวแปรทสรางขนมา ดงนนในการเขยนผงงาน เราจะเอาตวเลขตวแรกไวทตวแปร A และตวเลขตวทสองไวทตวแปร B แลวจากนนกเอาเลขสองตวมาบวกกนแลวแสดงผล ซงสามารถเขยนเปนผงงานไดดงรปท 2.3

Start

Input A,B

A+B

End

รปท 2.3 ผงงานของการบวกเลข ตามแนวคดท 1

Page 65: การเขียนโปรแกรมคอมพิวเตอร ์portal5.udru.ac.th/ebook/pdf/upload/17P88t2O788B98583682.pdfรูปภาพบางส่วนให

บทท 2 หลกการเขยนโปรแกรมคอมพวเตอรพนฐาน

44

วเคราะหแนวคดท 2 ในการเขยนผงงาน

ใหสมมตวาไดรบอนพตของเลขมาจากคยบอรด ดงนนทาการรบขอมลอนพตคอรบตวเลขสองตวเขามา เมอรบคาเขามาแลวจะเกบไวในตวแปร A และตวแปร B แลวจากนน เอาคาตวแปร A และ B ทาการบวกกนแลวเกบไวทตวแปร C สดทายนาเอาตวแปร C ไปแสดงผล ซงสามารถเขยนเปนผงงานไดดงรปท 2.4

Start

Input A,B

C

End

C = A + B

รปท 2.4 ผงงานของการบวกเลข ตามแนวคดท 2

ตวอยางท 2.6 จงเขยนผงงานของโปรแกรมสาหรบหาราคาของสนคา โดยใหผ ใชระบราคาสนคา และโปรแกรมจะแสดงราคากอนรวมภาษและราคาหลงรวมภาษแลวใหผใชสามารถเหนราคาสนคาทรวมภาษ

วธทา อตราภาษในทนสมมตใหอตราภาษเปน 7% จากนนสงเกตจากโจทยมคาวา “ผใชระบ

ราคา” แสดงวาจะตองมการรบคาอนพตจากผใช ดงนนใหรบคาอนพตจากคยบอรดแลวเกบไวทตวแปร A จากนนใหตวแปรทชอวา VAT ใชเกบผลลพธจากการคานวณภาษ โดยสามารถคานวณไดจาก VAT = 0.07 * A สดทายแสดงราคากอนรวมภาษ (คาของตวแปร A) และราคาหลงรวมภาษ (A+VAT) ซงสามารถเขยนเปนผงงานไดดงรปท 2.5

Page 66: การเขียนโปรแกรมคอมพิวเตอร ์portal5.udru.ac.th/ebook/pdf/upload/17P88t2O788B98583682.pdfรูปภาพบางส่วนให

บทท 2 หลกการเขยนโปรแกรมคอมพวเตอรพนฐาน

45

Start

Input A

AVAT+A

End

VAT = 0.07 x A

รปท 2.5 ผงงานของการคานวณราคาสนคา

ตวอยางท 2.7 จงเขยนผงงานของโปรแกรมสาหรบหาเกรดเฉลยรวมสองเทอม

วธทา จะหาเกรดเฉลยรวมสองเทอมไดจะตองรหนวยกตทลงเทอมหนง เกรดทไดเทอมหนง

หนวยกตทลงเทอมสอง เกรดทไดเทอมสอง ดงนนตองรบคามาทงหมดสคาโดยท รบคาหนวยกตทลงเทอมหนงเกบไวทตวแปร U1รบคาหนวยกตทลงเทอมสองเกบไวทตวแปร U2 รบคาเกรดเทอมหนงเกบไวทตวแปร G1 และรบคาเกรดเทอมสองเกบไวทตวแปร G2 จากนนทาการคานวณเกรดเฉลยแลวเกบผลลพธไวทตวแปรชอ G สดทายทาการแสดงผลคาของ G ออกมา ซงสามารถเขยนเปนผงงานไดดงรปท 2.6

Page 67: การเขียนโปรแกรมคอมพิวเตอร ์portal5.udru.ac.th/ebook/pdf/upload/17P88t2O788B98583682.pdfรูปภาพบางส่วนให

บทท 2 หลกการเขยนโปรแกรมคอมพวเตอรพนฐาน

46

Start

Input U1,U2G1, G2

G

End

G = (G1xU1 + G2xU2)/ (U1+U2)

รปท 2.6 ผงงานของการคานวณหาคาเกรดเฉลย 2 เทอม

2.5 การตรวจสอบขอผดพลาดของโปรแกรม (Testing and

Debugging)

การตรวจสอบขอผดพลาดของโปรแกรมเปนกระบวนการตรวจสอบความผดพลาดของโปรแกรมเมอนาไปสรางโปรแกรมขนมาจนเสรจสนแลว บางครงโปรแกรมอาจผานการแปล โดยไมมขอผดพลาดเกดขน แตเมอนาโปรแกรมไปใชงานปรากฏวาไดผลลพธทไมถกตอง ดงนนควรจะตองมขนตอนการทดสอบความถกตองของโปรแกรม ซงอาจจะตองตรวจสอบการใสขอมลทถกตอง ตรวจสอบการใชขอบเขตและความถกตองของขอมล ตรวจสอบการใชความสมเหตสมผล ตรวจสอบขอมลทเปนตวเลขและตวอกษร โปรแกรมทกโปรแกรมจะตองไดรบการตรวจสอบขอผดพลาดตางๆ กอนวา มขอผดพลาดในโปรแกรมหรอไม โดยทวไปวธทตรวจสอบขอผดพลาดของโปรแกรม จะมดงน

Page 68: การเขียนโปรแกรมคอมพิวเตอร ์portal5.udru.ac.th/ebook/pdf/upload/17P88t2O788B98583682.pdfรูปภาพบางส่วนให

บทท 2 หลกการเขยนโปรแกรมคอมพวเตอรพนฐาน

47

ตรวจสอบดวยตนเอง (Self Checking) เปนการทดลองเขยนโปรแกรมลงบนกระดาษ

แลวใสตรวจสอบการทางานของโปรแกรมทละขนดวยตนเองวาโปรแกรมมการทางานทถกตองตามผลลพธทตองการหรอไม

ตรวจสอบดวยการแปลโปรแกรม หลงจากเขยนโปรแกรมเสรจ กจะปอนโปรแกรมเขาสเครองเพอทาการแปลโปรแกรม โดยจะมการเรยกใชคอมไพเลอร (Compiler) และแอสแซมเบลอร (Assembler) ทาการแปลโปรแกรมใหเปนภาษาเครอง (Machine Language) ในการแปลจะเปนการตรวจสอบความผดพลาดของโปรแกรมไปในตว ซงถามขอผดพลาดเกดขนโปรแกรมทใชเขยนภาษานนจะแจงขอผดพลาดทเกดขน โดยทวไปมขอผดพลาดดานไวยากรณของภาษา ขอผดพลาดในระหวางการรนของโปรแกรม และขอผดพลาดทเกดจากการตความหมายของปญหาผดไป

2.6 โครงสรางการควบคมโปรแกรม (Structure of Program Control)

โครงสรางการควบคมโปรแกรมเปนการควบคมลาดบของการเขยนโปรแกรมใหดาเนนการตามงานทตองการซงโครงสรางการควบคมโปรแกรมมหลายโครงสรางดงเชนโครงสรางการควบคมโปรแกรมแบบลาดบ (Sequential Control) โครงสรางการควบคมโปรแกรมแบบเงอนไข (Selection Control) โครงสรางการควบคมโปรแกรมแบบวนซา (Iteration Control) โครงสรางการควบคมโปรแกรมแบบกระโดด (Jump Control) ซงจะเปนโครงสรางการควบคมโปรแกรมคอมพวเตอรในรปแบบตางๆ โดยจะเปนสวนสาคญในการสรางโปรแกรมคอมพวเตอรใหสามารถแกปญหาตางๆ เพอใชในการสรางโปรแกรมอยางมประสทธภาพ

2.6.1 โครงสรางการควบคมโปรแกรมแบบลาดบ (Sequential Control)

โครงสรางการควบคมโปรแกรมแบบลาดบหรอการเขยนโปรแกรมแบบลาดบจะมลกษณะการทางานของโปรแกรมจากบนลงลาง โดยจะทาคาสงทกๆ คาสงทเขยนจากบนลงลาง โดยไมมเงอนไข รปแบบโครงสรางการควบคมโปรแกรมแบบลาดบแสดงดงรปท 2.7

Page 69: การเขียนโปรแกรมคอมพิวเตอร ์portal5.udru.ac.th/ebook/pdf/upload/17P88t2O788B98583682.pdfรูปภาพบางส่วนให

บทท 2 หลกการเขยนโปรแกรมคอมพวเตอรพนฐาน

48

รปท 2.7 รปแบบการควบคมโปรแกรมแบบลาดบ

ในการเขยนโปรแกรมในแตละชดคาสง (Instruction) ของรปแบบโครงสรางการควบคมแบบลาดบจะดาเนนการประมวลผลของชดคาสงตงแตคาสงแรกจนถงคาสงสดทาย ดงผงงานตวอยางทแสดงในรปท 2.8

รปท 2.8 รปแบบประมวลผลชดคาสงแบบลาดบ

Page 70: การเขียนโปรแกรมคอมพิวเตอร ์portal5.udru.ac.th/ebook/pdf/upload/17P88t2O788B98583682.pdfรูปภาพบางส่วนให

บทท 2 หลกการเขยนโปรแกรมคอมพวเตอรพนฐาน

49

ตวอยางท 2.8 จงเขยนผงงานของโปรแกรมแบบลาดบเพอคานวณหาพนท 4 เหลยมผนผา วธทา

ถาโจทยไมไดระบวาใหคาตวเลขมาจากไหนอนพตอะไร ใหสมมตวาไดรบอนพตของเลขมาจากคยบอรด ดงนนทาการรบขอมลอนพตคอรบตวเลขสองตวเขามา เมอรบคาเขามาแลวจะเกบคาไวทตวแปร A และตวเลขตวทสองไวทตวแปร B แลวจากนนกเอาเลขสองตวมาคณกนเพอหาพนทของ 4 เหลยมผนผา จากนนแสดงผลทตองการ ซงสามารถเขยนเปนผงงานไดดงรปท 2.9

รปท 2.9 ผงงานแบบลาดบในการคานวณหาพนท

Page 71: การเขียนโปรแกรมคอมพิวเตอร ์portal5.udru.ac.th/ebook/pdf/upload/17P88t2O788B98583682.pdfรูปภาพบางส่วนให

บทท 2 หลกการเขยนโปรแกรมคอมพวเตอรพนฐาน

50

2.6.2 โครงสรางการควบคมโปรแกรมแบบเงอนไข (Selection Control)

โครงสรางการควบคมโปรแกรมแบบเงอนไขจะมลกษณะการทางานของโปรแกรมทสามารถเลอกชดคาสงในการประมวลผลได การจะกระทาชดคาสงไปในทศทางไหนแลวแตเงอนไขทตงไว รปแบบโครงสรางการควบคมโปรแกรมแบบลาดบแสดงดงรปท 2.10

รปท 2.10 รปแบบการควบคมโปรแกรมแบบเงอนไข

ในการเขยนโปรแกรมในแตละชดคาสง ของรปแบบโครงสรางการควบคมแบบเงอนไขจะดาเนนการประมวลผลเลอกชดคาสงตามเงอนไขทกาหนดไว ดงผงงานตวอยางทแสดงในรปท 2.11

Page 72: การเขียนโปรแกรมคอมพิวเตอร ์portal5.udru.ac.th/ebook/pdf/upload/17P88t2O788B98583682.pdfรูปภาพบางส่วนให

บทท 2 หลกการเขยนโปรแกรมคอมพวเตอรพนฐาน

51

หรอ

รปท 2.11 รปแบบประมวลผลชดคาสงแบบเงอนไข

Page 73: การเขียนโปรแกรมคอมพิวเตอร ์portal5.udru.ac.th/ebook/pdf/upload/17P88t2O788B98583682.pdfรูปภาพบางส่วนให

บทท 2 หลกการเขยนโปรแกรมคอมพวเตอรพนฐาน

52

ตวอยางท 2.9 จงเขยนผงงานของโปรแกรมตรวจสอบคาตวเลข โดยถาเลขทรบเขามาเปนเลขคใหแสดงคาวา Even ถาเลขทรบเขามาเปนเลขคใหแสดงคาวา Odd

วธทา ใหรบคาตวเลขไวทตวแปร A จากนนตรวจสอบตวเลขวาเปนเลขคหรอเลขค โดยถา A

หาร 2 แลวไดเศษ 0 แสดงวาเปนเลขค ถา A หาร 2 แลวไดเศษ 1 แสดงวาเปนเลขค ดงนนจะตองมตวแปรเกบเศษจากการหารสองสมมตวาเปนตวแปร B ถาเศษเปน 0 แสดงคาวา Even ถาเศษเปน 1 แสดงคาวา Odd จากนนแสดงผลทตองการ ซงสามารถเขยนเปนผงงานไดดงรปท 2.12

รปท 2.12 ผงงานแบบเงอนไขในการตรวจสอบตวเลขคและเลขค

Page 74: การเขียนโปรแกรมคอมพิวเตอร ์portal5.udru.ac.th/ebook/pdf/upload/17P88t2O788B98583682.pdfรูปภาพบางส่วนให

บทท 2 หลกการเขยนโปรแกรมคอมพวเตอรพนฐาน

53

ตวอยางท 2.10 จงเขยนผงงานของโปรแกรมตรวจสอบคาตวเลข โดยถาคาตวเลขทรบเขามา ถาตดลบใหแสดงคาวา Negative ถาเปนบวกใหแสดงคาวา Positive

วธทา โปรแกรมนรบคาอนพตหนงตวโดยใหรบเขามาเกบไวทตวแปร A จากนนทาการ

ตรวจสอบตวแปร A โดยถา A มากกวาหรอเทากบศนยกแสดงคาวา Positive ถานอยกวาใหแสดงคาวา Negative ซงสามารถเขยนเปนผงงานไดดงรปท 2.13

รปท 2.13 ผงงานแบบเงอนไขในการตรวจสอบตวเลขลบและบวก

ตวอยางท 2.11 จงเขยนผงงานของโปรแกรมรบคาอาย ถานอยกวา 10 พมพคาวา Children

ถานอยกวา 20 ใหพมพคาวา Young ถามากกวานนใหพมพคาวา Adult

วธทา โปรแกรมนรบคาอายเขามาเกบไวทตวแปร A แลวนาคา A มาพจารณาวานอยกวา

10 หรอไม ถานอยกวาใหพมพคาวา Children แตถาเปนอยางอนกไปมาพจารณาตอวา A

นอยกวา 20 หรอไม ถานอยกวาพมพคาวา Young และถานอกเหนอจากนนแสดงวาอายเกน

20 ป ใหพมพคาวา Adult เลย ซงสามารถเขยนเปนผงงานไดดงรปท 2.14

Page 75: การเขียนโปรแกรมคอมพิวเตอร ์portal5.udru.ac.th/ebook/pdf/upload/17P88t2O788B98583682.pdfรูปภาพบางส่วนให

บทท 2 หลกการเขยนโปรแกรมคอมพวเตอรพนฐาน

54

รปท 2.14 ผงงานแบบเงอนไขในการตรวจสอบอาย

ตวอยางท 2.12 จงเขยนผงงานของโปรแกรมตดเกรดตามเกณฑดงน

คะแนนตากวา 50 ได F

คะแนน 50 แตไมถง 60 ได D

คะแนน 60 แตไมถง 70 ได C

คะแนน 70 แตไมถง 80 ได B

คะแนน 80 เปนตนไปได A

Page 76: การเขียนโปรแกรมคอมพิวเตอร ์portal5.udru.ac.th/ebook/pdf/upload/17P88t2O788B98583682.pdfรูปภาพบางส่วนให

บทท 2 หลกการเขยนโปรแกรมคอมพวเตอรพนฐาน

55

วธทา โปรแกรมรบอนพตเปนคะแนนนกศกษาโดยเกบไวทตวแปร A จากนนตรวจสอบคา

เกรดทได โดยถา A<50 ให Grade = อกษร F และถา A<60 ให Grade = อกษร D และถา A<70 ให Grade = อกษร C และถา A<80 ให Grade = อกษร B และถา A>=80 ให Grade

= อกษร A สดทายใหแสดงคาของ Grade ทได ซงสามารถเขยนเปนผงงานไดดงรปท 2.15

รปท 2.15 ผงงานแบบเงอนไขในการตดเกรด

Page 77: การเขียนโปรแกรมคอมพิวเตอร ์portal5.udru.ac.th/ebook/pdf/upload/17P88t2O788B98583682.pdfรูปภาพบางส่วนให

บทท 2 หลกการเขยนโปรแกรมคอมพวเตอรพนฐาน

56

2.6.3 โครงสรางการควบคมโปรแกรมแบบวนซา (Iteration Control)

โครงสรางการควบคมโปรแกรมแบบวนซาจะมลกษณะการทางานของโปรแกรมทวนซาชดคาสง ซงเหมาะสาหรบการเขยนโปรแกรมทตองการทาซา คานวณซาหลายๆ รอบ โดยจะทาซาจนกวาจะไดผลลพธทตองการ รปแบบโครงสรางการควบคมโปรแกรมแบบวนซาแสดงดงรปท 2.16

รปท 2.16 รปแบบการควบคมโปรแกรมแบบวนซา

ในการเขยนโปรแกรมในแตละชดคาสง ของรปแบบโครงสรางการควบคมแบบวนซาจะดาเนนการประมวลผลทาซาตามเงอนไขทกาหนดไว ดงผงงานตวอยางทแสดงในรปท 2.17

Page 78: การเขียนโปรแกรมคอมพิวเตอร ์portal5.udru.ac.th/ebook/pdf/upload/17P88t2O788B98583682.pdfรูปภาพบางส่วนให

บทท 2 หลกการเขยนโปรแกรมคอมพวเตอรพนฐาน

57

(ก) รปแบบตรวจสอบเงอนไขกอน

(ข) รปแบบตรวจสอบเงอนไขทหลง รปท 2.17 รปแบบประมวลผลชดคาสงแบบวนซา

ตวอยางท 2.13 จงเขยนผงงานของโปรแกรมพมพชอออกทางหนาจอจานวน 100 ครง วธทา

การเขยนโปรแกรมในรปแบบนควรใชวธการวนซาโดยทเงอนไขในการทาซาคอจานวนรอบ เรมตนใหตวแปรนบรอบชอ A มคาเรมตนเปน 1 จากนนตรวจสอบเงอนไข ถา A > 1000

ใหหยดทา แตถานอยกวาใหพมพชอออกทางหนาจอภาพและเพมคา A โดยจะเปนการวนซาจนกวาคาของตวแปร A มคามากกวา 100 ซงสามารถเขยนเปนผงงานไดดงรปท 2.18

Page 79: การเขียนโปรแกรมคอมพิวเตอร ์portal5.udru.ac.th/ebook/pdf/upload/17P88t2O788B98583682.pdfรูปภาพบางส่วนให

บทท 2 หลกการเขยนโปรแกรมคอมพวเตอรพนฐาน

58

รปท 2.18 ผงงานแบบวนซาในการพมพชออกจานวน 100 ครง

ตวอยางท 2.14 จงเขยนผงงานของโปรแกรมหาคาผลรวมตงแต 1 ถง 10

วธทา การเขยนโปรแกรมควรมตวแปรสะสมคา ซงจะเปนตวแปรทเกบผลรวมของ 1 ถง 10

โดยจะตงชอวา SUM มคาเรมตนเปน 0 แลวใชการทาซา ถาเงอนไขในการทาซาคอ จานวนรอบ สมมตใหตวแปรนบรอบชอ A มคาเรมตนเปน 1 ถา A > 10 ใหหยดทา สงทตองทาซาคอการนาเอาคาของ A ไปรวมไวทตวสะสมคา หลงเสรจสนการทาซากแสดงคาผลลพธของ SUM

ออกมา ซงสามารถเขยนเปนผงงานไดดงรปท 2.19

Page 80: การเขียนโปรแกรมคอมพิวเตอร ์portal5.udru.ac.th/ebook/pdf/upload/17P88t2O788B98583682.pdfรูปภาพบางส่วนให

บทท 2 หลกการเขยนโปรแกรมคอมพวเตอรพนฐาน

59

รปท 2.19 ผงงานแบบวนซาในการหาคาผลรวมของเลข 1 ถง 10

ตวอยางท 2.15 จงเขยนผงงานของโปรแกรมหาคาผลรวมของเลขคตงแตเลข 1 ถง 10

วธทา การเขยนโปรแกรมในขอนจะคลายตวอยางกอนหนาน แตมการเพมการตรวจสอบ

คาทเปนเลขคและคาทเปนเลขคจากการหาร 2 และเกบเศษไวพจารณา ถาเศษได 0 แสดงวาตวเลขทตรวจสอบจะเปนเลขค ถาเศษได 1 แสดงวาตวเลขทตรวจสอบจะเปนเลขค ซงสามารถเขยนเปนผงงานไดดงรปท 2.20

Page 81: การเขียนโปรแกรมคอมพิวเตอร ์portal5.udru.ac.th/ebook/pdf/upload/17P88t2O788B98583682.pdfรูปภาพบางส่วนให

บทท 2 หลกการเขยนโปรแกรมคอมพวเตอรพนฐาน

60

รปท 2.20 ผงงานแบบวนซาในการหาคาผลรวมของเลขคตงแตเลข 1 ถง 10

Page 82: การเขียนโปรแกรมคอมพิวเตอร ์portal5.udru.ac.th/ebook/pdf/upload/17P88t2O788B98583682.pdfรูปภาพบางส่วนให

บทท 2 หลกการเขยนโปรแกรมคอมพวเตอรพนฐาน

61

ตวอยางท 2.16 จงเขยนผงงานของโปรแกรมหาคาเฉลยสวนสงของนกศกษา วธทา

การเขยนโปรแกรมตองทราบกอนวาในหองนมคนกคน แลวทาการทาซาทากบจานวนคนทมอยในหอง โดยแตละรอบของการทาซานนกจะทาการรบสวนสงของแตละคนเขามา แลวนาไปสะสมคากบตวแปรสะสมความสงรวม สดทายกนาเอาคาตวแปรสะสมความสงรวมไปหารกบจานวนคนทมอยในหอง กจะไดคาเฉลยออกมา ซงสามารถเขยนเปนผงงานไดดงรปท

2.21

รปท 2.21 ผงงานแบบวนซาในการหาคาเฉลยสวนสงของนกศกษา

Page 83: การเขียนโปรแกรมคอมพิวเตอร ์portal5.udru.ac.th/ebook/pdf/upload/17P88t2O788B98583682.pdfรูปภาพบางส่วนให

บทท 2 หลกการเขยนโปรแกรมคอมพวเตอรพนฐาน

62

2.6.4 โครงสรางการควบคมโปรแกรมแบบกระโดด (Jump Control)

โครงสรางการควบคมโปรแกรมแบบกระโดดจะมลกษณะการทางานของโปรแกรมทกระโดดขามชดคาสงถดไป โดยจะสามารถกระโดดไปในสวนไหนกได ซงสามารถกระโดดไดทงแบบมเงอนไข และกระโดดแบบไมมเงอนไข โดยทวไปรปโครงสรางการควบคมโปรแกรมแบบกระโดดจะไมนยมนามาใชในการเขยนโปรแกรมในภาษาระดบสง รปแบบโครงสรางการควบคมโปรแกรมแบบกระโดดแสดงดงรปท 2.22

รปท 2.22 รปแบบการควบคมโปรแกรมแบบกระโดด

ในการเขยนโปรแกรมในแตละชดคาสง ของรปแบบโครงสรางการควบคมแบบกระโดดจะดาเนนการกระโดดไปยงชดคาสงทตองการใหประมวลผล ดงผงงานตวอยางทแสดงในรปท

2.23

Page 84: การเขียนโปรแกรมคอมพิวเตอร ์portal5.udru.ac.th/ebook/pdf/upload/17P88t2O788B98583682.pdfรูปภาพบางส่วนให

บทท 2 หลกการเขยนโปรแกรมคอมพวเตอรพนฐาน

63

รปท 2.23 รปแบบประมวลผลชดคาสงแบบกระโดด

Page 85: การเขียนโปรแกรมคอมพิวเตอร ์portal5.udru.ac.th/ebook/pdf/upload/17P88t2O788B98583682.pdfรูปภาพบางส่วนให

บทท 2 หลกการเขยนโปรแกรมคอมพวเตอรพนฐาน

64

บทสรป

ในบทนไดกลาวถงขนตอนในการเขยนโปรแกรม สญลกษณผงงาน รหสเทยม การวเคราะหผงงาน การตรวจสอบขอผดพลาดของโปรแกรม และโครงสรางการควบคมโปรแกรม

ขนตอนการเขยนโปรแกรมคอมพวเตอรเปนขนตอนทสาคญเพอใหการเขยนโปรแกรมถกตองตามความตองการและเพอใหมประสทธภาพทดทสด ขนตอนการเขยนโปรแกรมมหลากหลายวธดงเชนรปแบบของวธการแบบจาลองนาตก ซงเปนวธการหนงเขาใจงายและทนยมใชในปจจบนซงทาใหสามารถเขยนโปรแกรมไดอยางมประสทธภาพมากยงขน สญลกษณผงงานเปนเครองมออกแบบหนงทใชรปภาพ แสดงถงขนตอนในการเขยนโปรแกรม หรอขนตอนในการแกปญหาทละขน และมเสนทแสดงทศทางการไหลของขอมลตงแต จดเรมตน จนกระทงจดสนสดของโปรแกรมหรอผลลพธของโปรแกรม ใชเปนโครงรางกอนการเขยนโปรแกรมคอมพวเตอร เพอสามารถเหนภาพของการแกปญหาไดอยางชดเจนและเขาใจงายยงขน รหสเทยมคอรหสจาลองทใชเปนตวแทนของขนตอนวธทใชในภาษาการเขยนโปรแกรมทวไป โดยจะแสดงขนตอนวธการทใชภาษาเขยนทเขาใจงาย โดยมถอยคาหรอประโยคคาสงทเขยนอยในรปแบบของภาษาองกฤษหรอภาษาไทยกได ขนอยกบความสะดวกของผ เขยนโปรแกรม

การวเคราะหผงงานเปนการวเคราะหถงปญหาซงเปนการศกษาถงลกษณะและรายละเอยดตางๆ ทเกยวของสาหรบการเขยนโปรแกรมทงหมดตงแตอนพตจนถงเอาตพต และวธการประมวลผลตางๆ เพอใหผ เขยนโปรแกรมสามารถมองเหนปญหาไดงายขนและสามารถนาไปเขยนโปรแกรมประยกตใชงานจรงไดอยางมประสทธภาพ การตรวจสอบขอผดพลาดของโปรแกรมเปนกระบวนการตรวจสอบความผดพลาดของโปรแกรมเมอโปรแกรมเสรจสนตามทตองการเพอใหไดโปรแกรมทถกตองและมประสทธภาพทสดซงโปรแกรมทกโปรแกรมจะตองไดรบการตรวจสอบขอผดพลาดตางๆ กอนวา มขอผดพลาดในโปรแกรมหรอไม โครงสรางการควบคมโปรแกรมเปนการควบคมลาดบของการเขยนโปรแกรมใหดาเนนการตามงานทตองการซงโครงสรางการควบคมโปรแกรมมหลายโครงสรางดงเชนโครงสรางการควบคมโปรแกรมแบบลาดบ โครงสรางการควบคมโปรแกรมแบบเงอนไข โครงสรางการควบคมโปรแกรมแบบวนซา โครงสรางการควบคมโปรแกรมแบบกระโดด ซงในแตละโครงสรางกจะสามารถนาไปประยกตเพอแกปญหาในการเขยนโปรแกรมตางๆ ไดอยางมประสทธภาพ

Page 86: การเขียนโปรแกรมคอมพิวเตอร ์portal5.udru.ac.th/ebook/pdf/upload/17P88t2O788B98583682.pdfรูปภาพบางส่วนให

บทท 2 หลกการเขยนโปรแกรมคอมพวเตอรพนฐาน

65

แบบฝกหดทบทวน

1. สญลกษณผงงานคออะไร และมประโยชนอะไร จงอธบาย 2. ขอแตกตางระหวางสญลกษณผงงานและรหสเทยมคออะไร จงอธบาย 3. จงอธบายขนตอนในการเขยนโปรแกรมตามแบบจาลองนาตก และจงอธบายขนตอนในแตละขน

4. จงเขยนรหสเทยมของโปรแกรมในการหาพนทของวงกลม

5. จงเขยนผงงานของโปรแกรมในการแปลงสกลเงนบาทเปนเงนดอลลาร และแปลงสกลเงนดอลลารเปนเงนบาท

6. จงเขยนผงงานของโปรแกรมในการแปลง พ.ศ. เปน ค.ศ. และแปลง ค.ศ. เปน พ.ศ.

7. จงเขยนผงงานของโปรแกรมในการแปลงนาทเปนชวโมงและใหแสดงนาททเหลอ 8. จงเขยนผงงานของโปรแกรมในการคานวณหาพนทของรปดงน

a

b โดยคานวณจากสมการ

½ * a * b * sin

9. จงเขยนผงงานของโปรแกรมในการตดเกรดของนกศกษา 10. จงเขยนผงงานของโปรแกรมในการบวกเลขคตงแตเลข 1 ถง 100

11. จงเขยนผงงานของโปรแกรมในการแสดงเลขคทหนาจอภาพตงแตเลข 1 ถง 100

12. จงเขยนผงงานของโปรแกรมในการแสดงชอของนกศกษาจานวน 100 ครง

Page 87: การเขียนโปรแกรมคอมพิวเตอร ์portal5.udru.ac.th/ebook/pdf/upload/17P88t2O788B98583682.pdfรูปภาพบางส่วนให

บทท 3 ภาษาซเบองตนและการใชงานโปรแกรมภาษาซ

บทท 3

ภาษาซเบองตนและการใชงานโปรแกรมภาษาซ

ในบทนจะกลาวถงประวตความเปนมาของภาษาซ (History of C Language)

ขนตอนของการทางานของภาษาซ (Procedure of C Language) โครงสรางของภาษาซ (Structure of C Language) และองคประกอบพนฐานของภาษาซ (Basic Element of C

Language) ในการเขยนโปรแกรมภาษาซจะตองรจกสวนตางๆ ของภาษาซเพอใหสามารถใชงานโปรแกรมไดอยางมประสทธภาพ ซงภาษาซกเปรยบเสมอนภาษาหนงดงทเราใชงานกนในยคปจจบน ดงนนในการทเราจะสามารถทางานกบภาษาซไดจาเปนตองศกษากระบวนการตางๆ โครงสรางตางๆ และองคประกอบตางๆ เสยกอน จงจะสามารถนาไปเขยนโปรแกรมไดอยางถกตองและมประสทธภาพ ในบทนจะเปนบทพนฐานทจะนาไปสการเขยนโปรแกรมภาษาซในระดบทสงขน

3.1 ประวตความเปนมาของภาษาซ (History of C Language)

ภาษาซ (C) เปนภาษาโปรแกรมบนคอมพวเตอรระดบสง พฒนาขนเมอ พ.ศ.

2515 (ค.ศ. 1972) โดย เดนนส รตช (Dennis Ritchie) มวตถประสงคเพอสรางระบบปฏบตการยนกซในขณะนน ซงในขณะนนการใชงานภาษาซยงไมนยมแพรหลายเหมอนเชนในปจจบน ตอมาเมอ พ.ศ. 2521 (ค.ศ. 1978) เดนนส รตช และไบรอน เคอรนกน (Brian

Kernighan) พฒนามาตรฐานของภาษาซขนมา และไดตพมพหนงสอเลมแรกชอ การเขยนโปรแกรมภาษาซ (The C Programming Language) ซงเปนทรจกในกลมของนกเขยนโปรแกรมหรอโปรแกรมเมอรภาษาซวา "เคแอนดอาร" (K&R Kernighan&Rtchie) หนงสอเลมนทาหนาทเปนขอกาหนดของภาษาอยางไมเปนทางการมาหลายป ตอมาภาษาซเรมไดรบความนยมมากขน จงไดเกดภาษาซในหลากหลายรปแบบ ดงนนในป พ.ศ. 2531 (ค.ศ. 1988)

เดนนส รตช และไบรอน เคอรนกน ไดรวมมอกบสถาบนมาตรฐานแหงชาตของสหรฐอเมรกา

Page 88: การเขียนโปรแกรมคอมพิวเตอร ์portal5.udru.ac.th/ebook/pdf/upload/17P88t2O788B98583682.pdfรูปภาพบางส่วนให

บทท 3 ภาษาซเบองตนและการใชงานโปรแกรมภาษาซ

68

หรอแอนซ (American National Standards Institute: ANSI) สรางมาตรฐานของภาษาซขนมา ซงเรยกวาแอนซ ซ (ANSI C) เพอใชเปนตวกาหนดมาตรฐานการสรางภาษาซรนถดไป

นอกจากภาษาซออกแบบขนมาเพอสรางซอฟตแวรระบบแลว ภาษาซยงสามารถใชอยางแพรหลายเพอพฒนาซอฟตแวรประยกตอนๆ อกดวย ปจจบนภาษาซเปนภาษาทไดรบความนยมสงและมการพฒนาขนมาอยางตอเนองดงเชนภาษาซพลสพลส (C++) และ ภาษาซเสมอน (Visual C++) เปนตน

ผลจากการยอมรบในวงกวางและประสทธภาพของทดภาษาซ ทาใหตวแปลโปรแกรม

ตวแปลคาสง ไลบรารตางๆ ของภาษาอน กจะพฒนามาจากภาษาซ ภาษาซเปนภาษาทมประสทธภาพสงจงเหมาะสาหรบคอมพวเตอรเพองานคานวณและวทยาศาสตร เนองจากความสนเปลองตา อยางไรกตามในปจจบนภาษาซเหมาะสาหรบการสรางโปรแกรมประยกตตางๆ ของผ ใชเอง แตเมองานประยกตทมขนาดใหญขนการพฒนาดวยภาษาซอาจจะกระทาไดไมสะดวกนก จงอาจจะสรางโปรแกรมดวยภาษาอนๆ ทพฒนามาจากภาษาซดงเชนภาษา ซพลสพลส (C++) และภาษาซชารป (C#) ซงมโครงสรางของภาษาทเหมอนกน ทาใหสามารถศกษาภาษาไดโดยงาย ภาษาซเปนภาษาทเหมาะสมกบการเรมตนการเขยนโปรแกรมและสามารถนาไปเขยนโปรแกรมภาษาระดบสงได

3.2 ขนตอนการทางานของภาษาซ (Procedure of C Langauge)

ขนตอนในการเขยนโปรแกรมภาษาซมทงหมด 4 กระบวนการ ไดแกขนตอนการเขยนโปรแกรมหรอเขยนรหสตนฉบบ (Source Code) ขนตอนการแปลโปรแกรม (Compile)

ขนตอนการเชอมโยงโปรแกรม (Link) และขนตอนการประมวลผลโปรแกรม (Run) ซงเมอไดทาการประมวลผลโปรแกรมแลวจะไดรหสกระทาการ (Execute Code) ดงแสดงในรปท 3.1

Page 89: การเขียนโปรแกรมคอมพิวเตอร ์portal5.udru.ac.th/ebook/pdf/upload/17P88t2O788B98583682.pdfรูปภาพบางส่วนให

บทท 3 ภาษาซเบองตนและการใชงานโปรแกรมภาษาซ

69

รปท 3.1 ขนตอนการทางานของภาษาซ

3.2.1 ขนตอนการเขยนโปรแกรม (Source Code)

ขนตอนการเขยนโปรแกรมเปนกระบวนการเขยนโปรแกรมในโปรแกรมบรรณาธกร (Edit Program) ตางๆ ซงเราอาจจะเขยนโปรแกรมในโปรแกรมบรรณาธกรตางๆ ได เชนโปรแกรม Notepad โปรแกรม TextPad หรอโปรแกรม EditPlus เปนตน หรอจะเขยนในหนาตางบรรณาธกรของโปรแกรมภาษาซกไดดงเชนโปรแกรมภาษาเทอรโบซพลสพลส (Turbo C++) หรอในโปรแกรม ไมโครซอฟตวชวลสตดโอ (Microsoft Visual Studio) หลงจากทไดเขยนโปรแกรมแลวใหทาการบนทกไฟลใหมนามสกลเปน .c เชน Hello.c หรอ Test.c เปนตน ตวอยางของการเขยนโปรแกรมแสดงดงรปท 3.2 รปท 3.3 และรปท 3.4

รปท 3.2 การเขยนโปรแกรมภาษาซในโปรแกรม Notepad

Page 90: การเขียนโปรแกรมคอมพิวเตอร ์portal5.udru.ac.th/ebook/pdf/upload/17P88t2O788B98583682.pdfรูปภาพบางส่วนให

บทท 3 ภาษาซเบองตนและการใชงานโปรแกรมภาษาซ

70

รปท 3.3 การเขยนโปรแกรมในโปรแกรมภาษาเทอรโบซพลสพลส

รปท 3.4 การเขยนโปรแกรมในโปรแกรม Microsoft Visual Studio

3.2.2 ขนตอนการแปลโปรแกรม (Compile)

ขนตอนการแปลโปรแกรมเปนขนตอนในการแปลภาษาระดบสงใหเปนภาษาทเครองคอมพวเตอรสามารถเขาใจไดและพรอมทจะนาไปใชงาน โดยในขนตอนนจะดาเนนการตรวจสอบรหสตนฉบบ (Source Code) เพอดวามขอผดพลาดหรอไม ถามจะทาการแจงเตอนขอผดพลาดใหผ ทาการเขยนโปรแกรมทราบ เพอทใหผ ทาการเขยนโปรแกรมไดทาการแกไข หากไมพบขอผดพลาดกจะดาเนนการแปลรหสตนฉบบเปนภาษาเครองทมนามสกล .obj เชน

Page 91: การเขียนโปรแกรมคอมพิวเตอร ์portal5.udru.ac.th/ebook/pdf/upload/17P88t2O788B98583682.pdfรูปภาพบางส่วนให

บทท 3 ภาษาซเบองตนและการใชงานโปรแกรมภาษาซ

71

ถาไฟลรหสตนฉบบชอ Doctor.c กจะถกแปลและจะจดเกบรหสทไดทาการแปลในชอไฟล Doctor.obj ในการแปลโปรแกรม ตวแปลโปรแกรมของภาษาซจะทาการแปลรหสตนฉบบทงหมด แตในบางครงเราสามารถทาการแปลทละคาสงไดในขณะใชโปรแกรมตรวจแกจดบกพรอง (Debugger) เพอตรวจสอบความถกตองของโปรแกรม การแปลทงโปรแกรมเราจะเรยกวาการแปลโปรแกรมหรอเรยกวาการคอมไพล (Compile) สวนการแปลทลาบรรทดเราเรยกวาตวแปลคาสงหรออนเทอรพรเตอร (Interpreter) ตวอยางการแปลโปรแกรมแลวมขอผดพลาดแสดงดงรปท 3.5 ซงจะประกอบไปดวยขอผดพลาด (Error) โดยจะมขอความบอกความผดพลาดทเกดขนวาขอผดพลาดเกดจากอะไร

รปท 3.5 การแปลโปรแกรมรหสตนฉบบแลวมขอผดพลาด

3.2.3 ขนตอนการเชอมโยงโปรแกรม (Link)

ขนตอนการเชอมโยงโปรแกรมเปนขนตอนของการเชอมโยงสวนตางๆ ของโปรแกรมเขาดวยกน ในการเขยนโปรแกรมภาษาซผ เขยนโปรแกรมไมจาเปนตองเขยนโปรแกรมทกขนตอนขนมาใหมหมด แตอาจจะใชในสงทมอยแลวของผ อน หรอของโปรแกรมทเตรยมไวดงเชนฟงกชนตางๆ ทเรยกใชงาน ดงนนเมอจะกระทาการประมวลผลโปรแกรมกจะดาเนนการเชอมโยงโปรแกรมทงหมดเขาดวยกนกอนเพอใหสามารถทางานรวมกนไดและพรอมทจะนาไปประมวลผลตอไป การเชอมโยงโปรแกรมในโปรแกรมภาษาซเมอมการประมวลผลโปรแกรมจะสามารถดาเนนการเชอมโยงโดยอตโนมตเพอใหพรอมในการทางาน ตวอยางในการเชอมโยงโปรแกรมดงเชนในโปรแกรมไดมการใชคาสง printf() เพอแสดงขอความตางๆ ออกทาง

Page 92: การเขียนโปรแกรมคอมพิวเตอร ์portal5.udru.ac.th/ebook/pdf/upload/17P88t2O788B98583682.pdfรูปภาพบางส่วนให

บทท 3 ภาษาซเบองตนและการใชงานโปรแกรมภาษาซ

72

หนาจอภาพ ซงจะเปนฟงกชนในภาษาซทมอยแลว เพยงแตมการเรยกใชงานกจะสามารถเรยกใชงานไดโดยงายซงจาเปนตองมการเชอมโยงกบโปรแกรมของเรากบฟงกชนทมอยในภาษาซ ใหสามารถนาไปใชงานได

รปท 3.6 ตวอยางการดาเนนการเชอมโยงขอมล

3.2.4 ขนตอนการประมวลผลโปรแกรม (Run)

ขนตอนการประมวลผลโปรแกรมเปนขนตอนของการทางานของโปรแกรมซงจะสงผลใหไดผลลพธทไดเขยนโปรแกรมไวออกมา ซงอาจจะเปนผลลพธทแสดงผลทหนาจอภาพ หรอเปนผลลพธของการคานวณคาตางๆ ดงตวอยางของผลลพธทเกดจากการประมวลผลโปรแกรมของการบวกเลขในรปท 3.7

Page 93: การเขียนโปรแกรมคอมพิวเตอร ์portal5.udru.ac.th/ebook/pdf/upload/17P88t2O788B98583682.pdfรูปภาพบางส่วนให

บทท 3 ภาษาซเบองตนและการใชงานโปรแกรมภาษาซ

73

รปท 3.7 ตวอยางผลลพธจากการประมวลผลของโปรแกรม

3.3 โครงสรางพนฐานของภาษาซ (Basic Structure of C Language)

โครงสรางพนฐานของภาษาซประกอบดวย 4 สวน พนฐาน คอสวนหวของโปรแกรม

(Preprocessing Directives) สวนประกาศตวแปร (Variable Declaration) สวนฟงกชน

(Function) และสวนของรายละเอยดโปรแกรมหรอคาสงโปรแกรม (Program Statement) ซงโครงสรางพนฐานทง 4 สวน เปนสวนทจาเปนพนฐานทจะทาใหสามารถเขยนโปรแกรมได ดงตวอยางแสดงดงรปท 3.8

Page 94: การเขียนโปรแกรมคอมพิวเตอร ์portal5.udru.ac.th/ebook/pdf/upload/17P88t2O788B98583682.pdfรูปภาพบางส่วนให

บทท 3 ภาษาซเบองตนและการใชงานโปรแกรมภาษาซ

74

รปท 3.8 โครงสรางการเขยนโปรแกรมพนฐานของภาษาซ

3.3.1 สวนหวของโปรแกรม (Preprocessing Directives)

สวนหวของโปรแกรมเปนสวนทใชระบเพอบอกใหตวแปลโปรแกรมหรอคอมไพเลอรนาเอาไฟลสวนหว (Header File) เขารวมการแปลโปรแกรมดวย ดงเชนการใชงานบางฟงกชนของภาษาซถาเราไมไดมการประกาศไฟลสวนหว เรากจะไมสามารถใชงานฟงกชนนนได

ตวอยางของตวชแนะหรอไดเรกทพ (Directive: #) ทใชบอยคอ include โดยคาสงนใชในการระบไฟลสวนหว สามารถเขยนได 2 รปแบบคอ

#include <ชอไฟลสวนหว> รปแบบนจะทาการคนหาไฟลสวนหวตามทระบชอไวในสารบบหรอไดเรคทอร ทใชเกบไฟลสวนหวเฉพาะ โดยปกตจะเกบไวในไดเรคทอรชอ “Include” เชน

#include <stdio.h>

#include <conio.h>

Page 95: การเขียนโปรแกรมคอมพิวเตอร ์portal5.udru.ac.th/ebook/pdf/upload/17P88t2O788B98583682.pdfรูปภาพบางส่วนให

บทท 3 ภาษาซเบองตนและการใชงานโปรแกรมภาษาซ

75

#include ”ชอไฟลสวนหว” รปแบบนจะทาการคนหาไฟลสวนหวตามทระบชอไวในไดเรคทอรเดยวกนกบไฟลของโปรแกรม ซงถาไมพบจะไปคนหาจากสวนทเกบไฟลสวนหวเฉพาะ เชน

#include “stdio.h”

#include “conio.h”

#include “c:\tc\include\stdio.h”

3.3.2 สวนประกาศตวแปร (Variable Declaration)

สวนประกาศตวแปรเปนสวนทแจงใหตวแปลภาษาทราบวาเราตองการใชตวแปรใดในการแทนขอมล ขอมลทใชเปนขอมลชนดใด (Data Type) โดยเขยนอยในรปแบบดงน

ชนดขอมล (data_type) ชอตวแปร (variable_name);

ดงเชน

int number;

float image;

int a,b,c,d;

สวนประกาศตวแปรสามารถประกาศตวแปรไดทงแบบตวแปรสวนกลาง (Global

Variable) และการประกาศตวแปรเฉพาะท (Local Variable) โดยตวแปรสวนกลางเปนการประกาศตวแปรขนมาแลวสามารถใชทกสวนของโปรแกรม สามารถใชไดทงฟงกชนหลก และฟงกชนอนๆ ของโปรแกรม สวนตวแปรเฉพาะทเปนการประกาศตวแปรขนมาใชในเฉพาะสวนของโปรแกรม เฉพาะเจาะจงของโปรแกรม ตวอยางการประกาศตวแปร แสดงดงในรปท 3.8

3.3.3 สวนฟงกชน (Function)

ในโปรแกรมภาษาซอยางนอยตองม 1 ฟงกชนจงจะสามารถทางานไดนนคอฟงกชนหลก (Main Function) ซงแสดงวาทกโปรแกรมทเขยนขนโดยภาษาซจะตองมฟงกชนหลกอยเสมอ แตอยางไรกตามในภาษาซกมสวนของฟงกชนอนๆ เชนฟงกชนของโปรแกรมทสรางขนมา ฟงกชนของโปรแกรมทมอยแลวในภาษาซ เปนตน โดยปกตการเขยนโปรแกรมในปจจบนจะมหลายฟงกชน เปรยบเสมอนกบการแบงกลมทางาน โดยแตละกลมกจะทางานของตนเองเมอทางานเสรจกจะสงคาคนไปประมวลผลตอไป ตวอยางของการเขยนฟงกชน

Page 96: การเขียนโปรแกรมคอมพิวเตอร ์portal5.udru.ac.th/ebook/pdf/upload/17P88t2O788B98583682.pdfรูปภาพบางส่วนให

บทท 3 ภาษาซเบองตนและการใชงานโปรแกรมภาษาซ

76

แสดงในรปท 3.9 ซงจะประกอบไปดวยฟงกชนหลก ฟงกชนยอยทสรางขนมา และฟงกชนทมอยแลวในภาษาซ ในภาษาซจะตองมฟงกชน main() อยเสมอซงกคอฟงกชนหลกของโปรแกรมโดยจะมขอบเขตของการเขยนโปรแกรมเรมตนและสนสดทเครองหมาย { และ }

#include <stdio.h>

void menu(void) //ฟงกชนยอย { printf(“\n”); printf(“[1] Bangkok\n”); printf(“[2] Chiang Mai\n”); printf(“Select : “); }

void main(void) //ฟงกชนหลก {//void ตวแรกไมคนคากลบออกไปจากฟงกชน void ตวทสองไมรบคาเขามาในฟงกชน

int a; do { menu();

scanf(“%i”,&a); //ฟงกชนทมอยแลวในภาษาซ } while((a!=1)&&(a!=2)); if(a==1)

printf("Bangkok\n"); //ฟงกชนทมอยแลวในภาษาซ else

printf("Chiang Mai\n"); //ฟงกชนทมอยแลวในภาษาซ }

รปท 3.9 ตวอยางรปแบบของฟงกชนในภาษาซ

3.3.4 สวนของรายละเอยดโปรแกรมหรอคาสงโปรแกรม (Program Statement)

สวนของรายละเอยดโปรแกรมหมายถงสวนของคาสงตางๆ ทสงใหคอมพวเตอรทางาน สงเกตดวาสวนของคาสงตางๆ ทถกเขยนขนในภาษาซจะมเครองหมายอฒภาค (Semicolon) อยทายคาสงตางๆ อยเสมอ เนองจากในภาษาซจะถอวาเปนจดสนสดของคาสง ดงนนในการเขยนคาสงของโปรแกรมตางๆ ในภาษาซจะตองมเครองหมายอฒภาคอยทายคาสงเสมอ ไมอยางนนแลวโปรแกรมจะไมสามารถทางานได สวนของรายละเอยดโปรแกรมหรอคาสงแสดงตวอยางดงรปท 3.10 ซงเปนโปรแกรมตดเกรดนกศกษา

Page 97: การเขียนโปรแกรมคอมพิวเตอร ์portal5.udru.ac.th/ebook/pdf/upload/17P88t2O788B98583682.pdfรูปภาพบางส่วนให

บทท 3 ภาษาซเบองตนและการใชงานโปรแกรมภาษาซ

77

#include <stdio.h> void main(void) { int score; scanf("%i",&score); if(score <50) { printf("F"); } else if(score < 60) { printf("D"); } else if(score < 70) { printf("C"); } else if(score < 80) { printf("B"); } else { printf("A"); } }

รปท 3.10 สวนของโปรแกรมตดเกรดนกศกษา

3.4 องคประกอบพนฐานของภาษาซ (Basic Element of C Language)

องคประกอบของภาษาซเปนสวนขององคประกอบตางๆ ของภาษาซ เพอใชในการเขยนโปรแกรม ในหวขอนจะกลาวถงองคประกอบพนฐานในภาษาซ องคประกอบเหลานเปนองคประกอบเบองตน ทจะใชในการเขยนโปรแกรมภาษาซดงเชนคาและสญลกษณ และตวแปรและชนดของขอมลเปนตน ซงจะเปนพนฐานในการเขยนโปรแกรมในระดบถดไป

3.4.1 คาและสญลกษณ

คาและสญลกษณ คอสงทตวแปลโปรแกรมสามารถเขาใจและทาการตความเปนภาษาระดบตาตอไปได ดงนนถาเราเขยนโปรแกรมทไมถกตองตามทกาหนดไว กจะเกดความผดพลาด (Error) ขณะทาการแปลโปรแกรม ในภาษาซเราสามารถแบงคาและสญลกษณออกเปนประเภทตางๆ ดงน

Page 98: การเขียนโปรแกรมคอมพิวเตอร ์portal5.udru.ac.th/ebook/pdf/upload/17P88t2O788B98583682.pdfรูปภาพบางส่วนให

บทท 3 ภาษาซเบองตนและการใชงานโปรแกรมภาษาซ

78

หมายเหต (Comment)

คอสวนของหมายเหตหรอคาอธบายของโปรแกรม ในบางครงในการเขยนโปรแกรมเราอาจตองการเขยนคาอธบายสวนของโปรแกรมเพอใหสามารถจดจาไดงาย เมอตองการแกไขโปรแกรม เมอเจอสวนของหมายเหต ตวแปลภาษาจะขามการแปลผลคาสงในสวนนไป

ซงเราสามารถนามาใชในการจากดการทางานของโปรแกรมบางสวนในกรณทเขยนโปรแกรมแลวไมตองการลบคาสงโปรแกรมคาสงบางสวนทง เรากสามารถใชสวนของหมายเหตในการดาเนนการได ในภาษาซสวนของหมายเหตมวธการ 2 แบบคอ

แบบท 1 หมายเหตแบบบรรทดเดยว จะใชเครองหมาย // สวนทหมายเหต

แบบท 2 หมายเหตแบบหลายบรรทด จะใชเครองหมาย /* สวนทหมายเหต */

#include <stdio.h> void main(void) { int a,b,c; //Variable Declaration : a,b,c is Integer printf("Input a"); scanf("%i",a); /*printf("Input b"); หมายเหตแบบหลายบรรทด

scanf("%i",&b);

c = a*b;*/

c = a*a; //printf("Result=%i",c); หมายเหตแบบบรรทดเดยว }

รปท 3.11 การหมายเหตโปรแกรม

จากโปรแกรมในรปท 3.11 เมอมการประมวลผลโปรแกรมจะเปรยบเสมอนการประมวลผลคาสงเฉพาะบางคาสง ดงแสดงในรปท 3.12

Page 99: การเขียนโปรแกรมคอมพิวเตอร ์portal5.udru.ac.th/ebook/pdf/upload/17P88t2O788B98583682.pdfรูปภาพบางส่วนให

บทท 3 ภาษาซเบองตนและการใชงานโปรแกรมภาษาซ

79

#include <stdio.h> void main(void) { int a,b,c; printf("Input a"); scanf("%i",&a);

c = a*a;

}

รปท 3.12 ผลของการหมายเหตโปรแกรม

ประโยชนของหมายเหตคอ 1) ใชเขยนกากบวาบรรทดหรอชดคาสงของโปรแกรมวาทาหนาทอะไร มความพเศษตรงไหน

2) ใชในการทบทวนความทรงจาและแจงใหทราบในการเขยนโปรแกรม ถามการเขยนบอกวา บรรทดนใชทาอะไร ตวแปรนคออะไร เวลากลบมาดโปรแกรมนอกรอบจะไดจาไดงายขน

หรอถาสงโปรแกรมทเขยนขนมาไปใหผ อน คนทไดรบโปรแกรมกจะทราบวาบรรทดนใชทาอะไร ตวแปรนคออะไร โดยสะดวก

3) ใชกาจดบรรทดทไมตองการใหทางาน เชนไมตองการบรรทดไหนใหประมวลผลกใหใสหมายเหตสงผลทาใหโปรแกรมในสวนนนไมถกแปลคาสง

ตวระบชอ (Identifier)

ในภาษาซจะมการตงชอใหกบสงตางๆ มากมายเชน ตงชอใหกบตวแปร ตงชอใหกบฟงกชน ซงการตงชอใด ๆ จะองตามกฎการตงชอมดงน

ตองไมซากบคาหลก (Keyword) ทมอยของโปรแกรมภาษาซ ประกอบดวยอกษร A-Z, a-z, 0-9, _ เทานน หามมเปนสญลกษณอน ๆ ปนอย ตวอกษรตวแรกของการตงชอหามเปนตวเลข ตวอกษรตวเลกตวใหญในภาษาซจะเปนคนละชอกน (Case-Sensitive) เชน Book

และ book ซงถอวาเปนคนละชอกน

การตงชอจะเวนวรรคไมได (ชองวางภายในชอ) ไมควรตงชอทขนตนดวย _ (ถงแมวาจะทาได)

Page 100: การเขียนโปรแกรมคอมพิวเตอร ์portal5.udru.ac.th/ebook/pdf/upload/17P88t2O788B98583682.pdfรูปภาพบางส่วนให

บทท 3 ภาษาซเบองตนและการใชงานโปรแกรมภาษาซ

80

คาหลก (Keyword)

คาหลกเปนชอทมอยแลวและเปนชอทสงวนไวใชงานอยแลว ดงนนคาหลกในทนคอชอทหามตงเชน

auto break case char const continue default do

double else enum extern float For goto If

int long register return short Signed sizeof static

struct switch typedef union unsigned Void volatile while

คาคงท (Constant)

คาคงทคอคาทสามารถเปนไปไดในภาษาซ คาคงทเปนคาทไมสามารถเปลยนแปลงไดขณะประมวลผลโปรแกรม คาคงทมหลากหลายชนดดงเชนคาของเลขจานวนเตม คาของจานวนเลขทศนยม และคาของตวอกขระ เปนตน คาคงทพนฐานของภาษาซไดแก คาคงทเปนเลขจานวนเตม คาคงททเปนเลขทศนยม คาคงททเปนตวอกษร คาคงททเปนขอความ และคาคงททเปนสญลกษณตางๆ เปนตน

จานวนเตม (Integer)

คอคาของเลขจานวนเตมบวกและจานวนเตมลบ การเขยนเลขจานวนเตมในภาษาซมขอกาหนดสาหรบการเขยน ซงขอกาหนดในการเขยนเลขจานวนเตมมดงน

1) ถาตองการเขยนเลขฐานสบสามารถเขยนไดเลย แตหามมศนยนาหนา เชน

1235 หมายถง หนงพนสองรอยสามสบหา 4324 หมายถง สพนสามรอยยสบส

2) ถาตองการเขยนเลขฐานแปดใหนาหนาดวยเลขศนย เชน

0123 หมายถง หนงรอยยสบสามฐานแปด

0765 หมายถง เจดรอยหกสบหาฐานแปด 3) ถาตองการเขยนเลขฐานสบหกใหนาหนาดวย 0x หรอ 0X เชน

0XAB93 หรอ 0xab93 (อกษรภาษาองกฤษตวเลกตวใหญไมมผล) หมายถง เอบเกาสามฐานสบหก

Page 101: การเขียนโปรแกรมคอมพิวเตอร ์portal5.udru.ac.th/ebook/pdf/upload/17P88t2O788B98583682.pdfรูปภาพบางส่วนให

บทท 3 ภาษาซเบองตนและการใชงานโปรแกรมภาษาซ

81

4) สามารถมเครองหมายตดลบขางหนาได ถาไมใสถอวาเปนเลขบวก เชน

-1234 หมายถง ตดลบหนงพนสองรอยสามสบส -01234 หมายถง ตดลบหนงสองสามสฐานแปด

-0x1234 หมายถง ตดลบหนงสองสามสฐานสบหก 5) จานวนเตม (Integer) คอจานวนเตมทมคาระหวาง -32768 ถง +32767 ใชหนวยความจา 16 บต ตวอยางเชน

1234 ถกตองตามหลกการเขยนเลขจานวนเตม

-1234 ถกตองตามหลกการเขยนเลขจานวนเตม

64321 ไมถกตอง เพราะคาทเขยนไวเกน 32767

-74321 ไมถกตอง เพราะคาทเขยนไวเกน -32768

6) จานวนเตมไมคดเครองหมาย (Unsigned Integer) คอจานวนเตมทมคาระหวาง 0 ถง 65535 ใชหนวยความจา 16 บต

7) จานวนเตมแบบยาว (Long Integer) คอจานวนเตมทมคาระหวาง -2147483648

ถง 2147483647 ใชหนวยความจา 32 บต

8) จานวนเตมแบบยาวไมคดเครองหมาย (Unsigned Long Integer) คอจานวนเตมทมคาระหวาง 0 ถง 4294967295 ใชหนวยความจา 32 บต

ทศนยม (Floating Point)

ทศนยมคอเลขทมคาทศนยม มคายอยของเลขจานวนเตม การเขยนทศนยมในภาษาซมขอกาหนดสาหรบการเขยนดงน

1) วธเขยนแบบปกตคอระบคาทศนยมทตองการเลย เชน

123.4 หมายถง หนงรอยยสบสามจดส .123 หมายถง ศนยจดหนงสองสาม

0.123 หมายถง ศนยจดหนงสองสาม

2) วธเขยนแบบวทยาศาสตร คอตวเลขทศนยมนนถกคณดวย 10n เขยนแทนดวย en

หรอ Enโดยทเราเปนคนระบคา n น เชน

1.57E1 หมายถง 1.57 x 101 = 15.75

1.575e-2 หมายถง 1.57 x 10-2 = 0.01575

25E-4 หมายถง 25 x 10-4 = 0.0025

Page 102: การเขียนโปรแกรมคอมพิวเตอร ์portal5.udru.ac.th/ebook/pdf/upload/17P88t2O788B98583682.pdfรูปภาพบางส่วนให

บทท 3 ภาษาซเบองตนและการใชงานโปรแกรมภาษาซ

82

3) สามารถมเครองหมายตดลบขางหนาได ถาไมระบถอวาเปนเลขบวก 4) เลขทศนยม (Floating point) คอเลขทศนยมมขนาดไดมากสดไดคอ [+/–]

3.40282e+38 มขนาดไดเลกสดคอ [+/–] 3.40282e-38 ใชหนวยความจา 32 บต

5) ทศนยมความละเอยดสองเทา (Double Precision Floating Point) คอทศนยมปกต ไมตองมอกษรตอทาย มขนาดไดมากสดคอ [+/–] 1.79769e+308 มขนาดไดเลกสดคอ [+/–]1.79769e-308 ใชหนวยความจา 64 บต

6) ทศนยมความละเอยดสองเทาแบบยาว (Long Double Precision Floating

Point) คอทศนยมทมขนาดไดมากทสดคอ [+/–] 1.18973e+4932 มขนาดไดเลกสดคอ [+/–] 3.3621e-4932 ใชหนวยความจา 80 บต

ตวอกขระหรอตวอกษร (Character)

ตวอกษรคอตวอกขระภาษาองกฤษ ตวเลข และสญลกษณตางๆ ซงขอกาหนดการเขยนอกษรในภาษาซมดงน

1) ตวอกษรตองมเพยงตวอกษรเดยว เปนอกษรทมอยในตารางแอสก หรอรหสมาตรฐานของสหรฐอเมรกาเพอการสบเปลยนสารสนเทศ (American

Standard Code for Information Interchange: ASCII) และตองอยระหวางเครองหมาย ' ' เทานน ตวอยางเชน

'a' หมายถง อกษรเอเลก 'A' หมายถง อกษรเอใหญ

'aA' ไมถอวาเปนอกขระเพราะมจานวนตวอกขระมากกวา 1 ตว 2) สามารถ เ ขยนอกษรในแบบเลขฐานสบหกไ ด (Hexadecimal-Escape-

Sequence) คอ ขนตนดวย \x ตามดวยเลขฐานสบหก ตวอยางเชน

'\x41' เลข 41 เปนฐานสบหกแปลงเปนฐานสบได 65 เมอไปเปดดในตาราง แอสกอกษรลาดบท 65 คออกษร A

'\x61' เลข 61 เปนฐานสบหกแปลงเปนฐานสบได 97 เมอไปเปดดในตาราง แอสก อกษรลาดบท 97 คออกษร a

Page 103: การเขียนโปรแกรมคอมพิวเตอร ์portal5.udru.ac.th/ebook/pdf/upload/17P88t2O788B98583682.pdfรูปภาพบางส่วนให

บทท 3 ภาษาซเบองตนและการใชงานโปรแกรมภาษาซ

83

3) สามารถเขยนอกษรในแบบเลขฐานแปดได (Octal-Escape-Sequence) คอ \ ตามดวยเลขฐานแปดสามหลก (ถาไมถงสามหลกใหเตมศนย) '\141' เลข 141 เปนฐานแปดแปลงเปนฐานสบได 97 เมอไปเปดดในตาราง แอสก อกษรลาดบท 97 คออกษร a

'\077' เลข 077 เปนฐานแปดแปลงเปนฐานสบได 63 เมอไปเปดดในตาราง แอสก อกษรลาดบท 63 คออกษร ?

4) มอกษรพเศษอยกลมหนง มไวเพอควบคมการทางานของคอมพวเตอร จะไมแสดงอกษรใด ๆ ออกมาทางหนาจอทงสน เรยกวา “Escape Sequence” ซงมรายละเอยดดงตารางท 3.1

ตารางท 3.1 อกษรพเศษ

Escape Sequence Represents

\a Bell (alert) เสยงระฆง \b Backspace เลอนกลบ

\f Form feed ขนหนาใหม

\n New line ขนบรรทดใหม

\r Carriage return เคอเซอรกลบไปตนบรรทด

\t Horizontal tab เวนระยะในแนวระดบ

\v Vertical tab เวนระยะในแนวตง \' Single quotation mark การกดเครองหมาย \ \\ Backslash การกดเครองหมาย \\ \? Literal question mark การกดเครองหมาย ?

Page 104: การเขียนโปรแกรมคอมพิวเตอร ์portal5.udru.ac.th/ebook/pdf/upload/17P88t2O788B98583682.pdfรูปภาพบางส่วนให

บทท 3 ภาษาซเบองตนและการใชงานโปรแกรมภาษาซ

84

5) อกษรแตละอกษรจะกนหนวยความจา 8 บต (มคาระหวาง 0 ถง 255) และเวลาเกบจรงจะเกบเปนตวเลขเสมอ โดยองตวเลขทจะเกบตามตารางแอสก ดงนนเราสามารถนาเอาอกษรมาบวก ลบ คณ หารกนไดตามปกต (เพราะอกษรคอตวเลข) เชน

'A' + 12 เมอเปดตารางแอสกปรากฏวาอกษร A เปนอกษรลาดบท 65 (มคา 65)

ดงนน 'A' + 12 จงหมายถง 65 + 12

'A' + 'a' เมอเปดตารางแอสกปรากฏวาอกษร A เปนอกษรลาดบท 65 (มคา 65)

และอกษร a เปนอกษรลาดบท 97 ดงนน 'A' + 'a' จงหมายถง 65 + 97

สายอกขระหรอขอความ (String)

ขอความคอการนาเอาอกขระหลายๆ ตวมาเรยงตอกน ภายใตเครองหมาย " "

ตวอยางเชน “cmu” , “Chula”, “Kmitl” และ “Kmutt”

คาความจรง (Boolean)

คาความจรงในภาษาซ จะถอวา 0 เปนเทจ อยางอนเปนจรงหมด เชน

-1 ถอวาเปนจรง 19 – 7 ถอวาเปนจรง 18 – (10 + 8) ถอวาเปนเทจ 'A' – 65 ถอวาเปนเทจ 'a' – 'A' ถอวาเปนจรง

สญลกษณ (Symbol)

เครองหมายและสญลกษณทสามารถใชไดในภาษาซดงเชน # ~ ! % ^ & * - = + | < > /

, : ; . ( ) { } [ ] เปนตน ดงนนการทจะเรมตนเขยนโปรแกรมภาษาซจาเปนทจะตองรจกความหมายของสญลกษณตางๆ ในภาษาซ จงจะดาเนนการเขยนโปรแกรมโดยไมมขอผดพลาด ซงสญลกษณตางๆ ในภาษาซจะไดกลาวในบทถดไป ตวอยางของการใชงานสญลกษณแสดงดงรปท 3.13

Page 105: การเขียนโปรแกรมคอมพิวเตอร ์portal5.udru.ac.th/ebook/pdf/upload/17P88t2O788B98583682.pdfรูปภาพบางส่วนให

บทท 3 ภาษาซเบองตนและการใชงานโปรแกรมภาษาซ

85

#include <stdio.h> void main(void) {

int a,b,c; printf("Input a"); scanf("%i",&a); printf("Input b");

scanf("%i",&b); c = a*b; }

รปท 3.13 สญลกษณตางๆ ทปรากฏในโปรแกรม

3.4.2 ตวแปรและชนดของขอมล ตวแปร (Variables) คอสงทกาหนดขนมาเพอใชในการเกบขอมล ซงการประกาศตว

แปรตางๆ มหลกการทไดกลาวในหวขอท 3.4.1 การประกาศตวแปรเปนสวนทจาเปนเนองจากหากไมมการประกาศตวแปรขนมากจะไมสามารถเกบขอมลได การประกาศตวแปรขนมากสามารถประกาศไดวาเปนการประกาศตวแปรชนดไหน ชนดของขอมล (Data Type) คอสงทใชในการกาหนดลกษณะขอบเขตของขอมล ซงขอมลมหลากหลายชนด และมลกษณะทแตกตางกนไป ดงเชนขอมลตวอกษร ขอมลตวเลข และขอมลตวเลขทศนยมเปนตน ในสวนรายละเอยดของตวแปรและชนดของขอมลตางๆ จะกลาวถงในบทถดไป

ขอควรทราบของการใชตวแปรในภาษาซคอ ตองมการบอกใหตวแปลภาษา (Compiler) ทราบกอนวาตวแปรแตละตวนนใชเกบ

คาคงทแบบไหน (ดงเชน จานวนเตม ทศนยม อกษร ขอความ คาความจรง) เรยกวาการประกาศตวแปร (Variable Declaration) ดงแสดงตวอยางในรปท 3.14

#include <stdio.h> #include <conio.h> void main(void) { clrscr(); int a,b,c; //การประกาศตวแปร a = 3; //หลงจากมการประกาศตวแปรแลวจงจะสามารถใชงานตวแปรได

b = 6; c = a + b; printf("c = %i \n",c); }

รปท 3.14 การประกาศตวแปร

Page 106: การเขียนโปรแกรมคอมพิวเตอร ์portal5.udru.ac.th/ebook/pdf/upload/17P88t2O788B98583682.pdfรูปภาพบางส่วนให

บทท 3 ภาษาซเบองตนและการใชงานโปรแกรมภาษาซ

86

เ มอตวแปลภาษาทางานมาจนถงบรรทดทประกาศตวแปร กจะทาการจองหนวยความจาขนาดเทากบขอมลทจะเกบ เชนถาจะใชตวแปรนเกบจานวนเตม ตวแปรตวนกจะจองหนวยความจาขนาด 16 บต ไว

การทางานของภาษาซจะทางานจากบนลงลาง (ทาประโยคท 1 เสรจแลวคอยทาประโยคท 2 เสรจแลวตอดวยประโยคท 3 ตอเนองไปจนเสรจสน) ดงนนควรประกาศตวแปรไวสวนตนของโปรแกรม ซงจะทาใหตวแปรทไดประกาศไวจะสามารถใชไดทงโปรแกรม ดงตวอยางทแสดงในรปท 3.14 ซงเปนประกาศตวแปรไวในสวนตนของโปรแกรม ดงนนในโปรแกรมนจงสามารถใชตวแปรนไดทกสวนหลงจากการประกาศตวแปร แตถาไมไดประกาศตวแปรกอนประมวลผลคาสงจะเกดความผดพลาดของโปรแกรมไมสามารถทางานไดดงเชนโปรแกรมในรปท 3.15

#include <stdio.h> void main(void) { a=1000; int a; //ประกาศตวแปร a หลงการใชงาน ทาใหโปรแกรมเกดความผดพลาด b=2000; }

รปท 3.15 การประกาศตวแปรทผดพลาด

การกาหนดคาใหกบตวแปร (Variable Assignment) จะพรอมกบการประกาศตวแปรหรอหลงประกาศตวแปรกได ในตวอยางท 3.14 แสดงใหเหนการประกาศตวแปรกอนทจะกาหนดคา สวนในรปท 3.16 แสดงใหเหนการประกาศตวแปรพรอมกบกาหนดคา

Page 107: การเขียนโปรแกรมคอมพิวเตอร ์portal5.udru.ac.th/ebook/pdf/upload/17P88t2O788B98583682.pdfรูปภาพบางส่วนให

บทท 3 ภาษาซเบองตนและการใชงานโปรแกรมภาษาซ

87

#include <stdio.h> void main(void) { int a = 3; int b = 6; //การประกาศตวแปรพรอมทงกาหนดคา int c; //การประกาศตวแปรทยงไมไดกาหนดคา c = a + b; printf("c = %i \n",c); }

รปท 3.16 การประกาศตวแปรทกาหนดคาเรมตน

ถากาหนดคาใหกบตวแปรไมตรงกบชนดตวแปรทประกาศไว เชน การกาหนดคามากเกนเกบ (Overflow) การกาหนดคานอยเกนเกบ (Underflow) จะทาใหคาทเกบไวในตวแปรผดพลาดได

ชนดของตวแปรตามทไดกลาวขางตนมหลายรปแบบซงเราสามารถสรปชนดของตวแปรไดดงในตารางท 3.2

ตารางท 3.2 ชนดตวแปรสาหรบเกบคาคงทชนดตาง ๆ ในภาษาซ ชนดคาคงท ชนดตวแปรในภาษาซ ตวอยางการประกาศ

ตวแปรชอวา a

Character char char a

Integer int int a;

Unsigned integer unsigned unsigned a;

Long integer long long a;

Unsigned long integer unsigned long unsigned long a;

Floating point float float a;

Double precision floating point double double a;

Long double precision floating

point

long double long double a;

String (จานวนตวอกษร) char char a[ความยาว+1]

Page 108: การเขียนโปรแกรมคอมพิวเตอร ์portal5.udru.ac.th/ebook/pdf/upload/17P88t2O788B98583682.pdfรูปภาพบางส่วนให

บทท 3 ภาษาซเบองตนและการใชงานโปรแกรมภาษาซ

88

บทสรป

ในบทนไดกลาวถงประวตความเปนมาของภาษาซ ขนตอนของการทางานของภาษาซ โครงสรางของภาษาซ และองคประกอบพนฐานของภาษาซ ซงเปนการศกษาภาษาซเบองตนกอนทจะดาเนนการเขยนโปรแกรมไดอยางถกตอง ความเปนมาของภาษาซเรมพฒนาขนเมอ พ.ศ. 2515 (ค.ศ. 1972) โดย เดนนส รตช (Dennis Ritchie) ตอมาเมอ พ.ศ. 2521 (ค.ศ.

1978) เดนนส รตช และไบรอน เคอรนกน (Brian Kernighan) พฒนามาตรฐานของภาษาซขนมา ซงเปนทรจกในกลมโปรแกรมเมอรภาษาซวา "เคแอนดอาร" (K&R Kernighan&Rtchie)

ตอมาในป พ.ศ. 2531 (ค.ศ. 1988) เดนนส รตช และไบรอน เคอรนกน ไดรวมมอกบสถาบนมาตรฐานแหงชาตของสหรฐอเมรกาหรอแอนซ (American National Standards Institute:

ANSI) สรางมาตรฐานของภาษาซขนมา ซงเรยกวา ANSI C เพอใชเปนตวกาหนดมาตรฐานการสรางภาษาซรนถดไป ปจจบนภาษาซเปนภาษาทไดรบความนยมสงและมการพฒนาขนมาอยางตอเนองดงเชนภาษาซพลสพลส (C++) และ ภาษาซเสมอน (Visual C++) เปนตน

ขนตอนในการเขยนโปรแกรมภาษาซมทงหมด 4 กระบวนการ ไดแกขนตอนการเขยนโปรแกรมหรอเขยนรหสตนฉบบ (Source Code) ขนตอนการแปลโปรแกรม (Compile) ขนตอนการเชอมโยงโปรแกรม (Link) และขนตอนการประมวลผลโปรแกรม (Run) ซงเมอไดทาการประมวลผลโปรแกรมแลวจะไดรหสกระทาการ (Execute Code) โครงสรางพนฐานของภาษาซประกอบดวย 4 สวน พนฐาน คอสวนหวของโปรแกรม (Preprocessing Directives) สวนประกาศตวแปร (Variable Declaration) สวนฟงกชน (Function) และสวนของรายละเอยดโปรแกรมหรอคาสงโปรแกรม (Program Statement) องคประกอบพนฐานของภาษาซเปนสวนขององคประกอบตางๆ ของภาษาซ เพอใชในการเขยนโปรแกรม ในการเขยนโปรแกรมภาษาซจาเปนทจะตองรองคประกอบพนฐานกอนทจะดาเนนการเขยนโปรแกรมไดอยางถกตอง ดงเชนคาและสญลกษณทสามารถใชในภาษาซมอะไรบาง ตวแปรและชนดของขอมลในภาษาซจะดาเนนการใชกบโปรแกรมอยางไรเปนตน ในบทนเปนบทพนฐานทจะนาไปสกระบวนการเขยนโปรแกรมไดอยางถกตองและมประสทธภาพตอไป

Page 109: การเขียนโปรแกรมคอมพิวเตอร ์portal5.udru.ac.th/ebook/pdf/upload/17P88t2O788B98583682.pdfรูปภาพบางส่วนให

บทท 3 ภาษาซเบองตนและการใชงานโปรแกรมภาษาซ

89

แบบฝกหดทบทวน

1. จงอธบายประวตความเปนมาของภาษาซ 2. ชอตอไปน ชอใดไมถกตองตามกฎการตงชอ

1) aaa

2) aaa1

3) student_name

4) stdntNm

5) _drQ

6) Std nm

7) printf

8) int

9) $sum

10) 2names

3. จากรปจงอธบายขนตอนการทางานของภาษาซ

Page 110: การเขียนโปรแกรมคอมพิวเตอร ์portal5.udru.ac.th/ebook/pdf/upload/17P88t2O788B98583682.pdfรูปภาพบางส่วนให

บทท 3 ภาษาซเบองตนและการใชงานโปรแกรมภาษาซ

90

4. จงอธบายโครงสรางตางๆ ของภาษาซดงรป

#include<stdio.h)

#include<conio.h>

int a_global,b_global;

main()

{

int a,b,c;

a = 5;

b = 5;

c = a + b;

}

Preprocessing

Directives

Global

Variable Declaration

Function

Program Statement

Local

Variable Declaration

5. หมายเหต (Comment) คออะไรในภาษาซ มประโยชนยงไง และมการใชงานอยางไร จงอธบาย พรอมทงแสดงโปรแกรมประกอบ

6. ตวระบชอ (Identifier) คออะไรในภาษาซ 7. คาคงท (Constant) คออะไรในภาษาซ และคาคงทมอะไรบางจงอธบายใหละเอยด

8. จงอธบายตวอกษรพเศษดงตอไปน

Escape Sequence Represents

\a

\b

\f

\n

\r

\t

\v

\'

9. ตวแปร (Variables) และชนดของขอมล (Data Type) คออะไรในภาษาซ 10. ขอควรทราบของการใชตวแปรในภาษาซมอะไรบางทสาคญ จงอธบายอยางละเอยด

Page 111: การเขียนโปรแกรมคอมพิวเตอร ์portal5.udru.ac.th/ebook/pdf/upload/17P88t2O788B98583682.pdfรูปภาพบางส่วนให

บทท 4 ชนดของขอมล ตวแปร คาคงท และการรบและแสดงผลขอมล

บทท 4

ชนดของขอมล ตวแปร คาคงท และการรบและแสดงผลขอมล

ในบทนจะกลาวถงชนดของขอมล (Data Type) ตวแปร (Variables) คาคงท

(Constant) และการรบและแสดงผลขอมล (Input and Output of Data) ในการเขยนโปรแกรมภาษาซหรอภาษาระดบสงอนๆ โดยสวนมากจะตองมการบอกถงชนดขอมลทจะนามาใชประมวลผล ชนดของตวแปรทจะทาการประกาศ คาคงททจะใชในโปรแกรม การนาขอมลมาประมวลผลและการแสดงผล ซงเปนกระบวนการพนฐานทสาคญในการเขยนโปรแกรม เปนสงทจาเปนทจะตองเขาใจรปแบบกอนทจะเรมเขยนโปรแกรมในระดบสงตอไป

ขอมลในภาษาซมหลายชนด แตละชนดจะเหมาะกบลกษณะของขอมลคนละแบบ ซงในการเขยนโปรแกรมคอมพวเตอรจะตองใชตวแปรหรอคาคงทในการเกบขอมล จะตองมการประกาศตวแปรหรอคาคงท โดยกาหนดชนดขอมลใหเหมาะสมกบชนดของขอมลทตองการเกบ เพอใหเกดความถกตองและประหยดเนอทหนวยความจาในการจดเกบ ในการเขยนโปรแกรมจะมการปอนขอมลเขาและแสดงผลขอมลออก ซงในบทนการนาขอมลมาประมวลผลจะอธบายการปอนขอมลผานทางคยบอรดเขามาในโปรแกรมเพอประมวลผลได

ซงหลงจากทไดมการประมวลผลแลวไดผลลพธ กจะสามารถแสดงผลออกทางจอภาพ

4.1 ชนดของขอมล (Data Type)

ชนดของขอมลคอสงทใชกาหนดลกษณะของขอมล และกาหนดขอบเขตของขอมล ขอมลในภาษาซมหลายชนด ซงแตละชนดมลกษณะและขอบเขตของขอมลทแตกตางกนไป

ในการเขยนโปรแกรมคอมพวเตอรจะตองมการประกาศตวแปรโดยกาหนดชนดขอมลใหเหมาะสมกบชนดของขอมลทตองการเกบ เพอใหเกดความถกตองและประหยดเนอทหนวยความจาในการจดเกบ ซงการกาหนดชนดของขอมลแตกตางกน จะทาใหลกษณะและ

Page 112: การเขียนโปรแกรมคอมพิวเตอร ์portal5.udru.ac.th/ebook/pdf/upload/17P88t2O788B98583682.pdfรูปภาพบางส่วนให

บทท 4 ชนดของขอมล ตวแปร คาคงท และการรบและแสดงผลขอมล

92

ขนาดของขอมลทเกบไดแตกตางกน เราสามารถแบงได 4 ชนด คอ ชนดขอมลแบบวอยหรอดาง (Void) ชนดขอมลแบบตวอกษร (Character) ชนดขอมลแบบเลขจานวนเตม (Integer)

และชนดขอมลแบบเลขทศนยม (Floating Point) โดยชนดของขอมลมขนาดของชนดขอมลดงแสดงในตารางท 4.1

ตารางท 4.1 แสดงการเปรยบเทยบขนาดของขอมลชนดตางๆ

ชนดขอมล ขนาด (ไบต) การคดเครองหมาย คาตาสด คาสงสด

char 1 signed -128 127

unsigned 0 255

short int 2 signed -32,768 32,767

unsigned 0 65,535

int 2 signed -32,768 32,767

unsigned 0 65,535

long int 4 signed -2,147,483,648 2,147,483,647

unsigned 0 4,294,967,295

float 4 signed 3.4 10 -38

3.4 10 38

double 8 signed 1.710-308

1.710308

long double 10 signed 3.410-4932

1.1104932

ขอควรทราบของการใชตวแปรในภาษาซคอ ตองมการบอกใหตวแปลภาษา (Compiler) ทราบกอนวาตวแปรแตละตวนนใชเกบ

คาคงทแบบไหน (ดงเชน จานวนเตม ทศนยม อกษร ขอความ คาความจรง) เรยกวาการประกาศตวแปร (Variable Declaration)

เ มอตวแปลภาษาทางานมาจนถงบรรทดทประกาศตวแปร กจะทาการจองหนวยความจาขนาดเทากบขอมลทจะเกบ

การประกาศตวแปรควรประกาศตวแปรไวสวนตนของโปรแกรม ซงจะทาใหตวแปรทไดประกาศไวจะสามารถใชไดทงโปรแกรม

การกาหนดคาใหกบตวแปร (Variable Assignment) จะพรอมกบการประกาศตวแปรหรอหลงประกาศตวแปรกได

Page 113: การเขียนโปรแกรมคอมพิวเตอร ์portal5.udru.ac.th/ebook/pdf/upload/17P88t2O788B98583682.pdfรูปภาพบางส่วนให

บทท 4 ชนดของขอมล ตวแปร คาคงท และการรบและแสดงผลขอมล

93

ถากาหนดคาใหกบตวแปรไมตรงกบชนดตวแปรทประกาศไว เชน การกาหนดคาสงเกนกวาทจะรบได (Overflow) การกาหนดคาตาเกนกวาจะรบได (Underflow) จะทาใหคาทเกบไวในตวแปรผดพลาดได

4.1.1 ชนดขอมลแบบวอย ชนดขอมลแบบวอย (void) เปนชนดขอมลทไมมคา (0 ไบต) ดงนนจะไมใชกาหนด

ใหกบตวแปร แตจะใชกาหนดใหกบฟงกชนในกรณทไมตองการใหฟงกชนรบหรอสงคาใดๆ เชน

#include <stdio.h> void main(void)

{ int a,b,c; a = 10; b = 20; c = a + b;

}

รปท 4.1 การประกาศตวแปรชนดขอมลแบบวอย

void main(void) หมายถงฟงกชน main จะไมรบหรอสงคาใดๆ กลาวคอ void ทอยขางหนาฟงกชน main คอจะไมมการสงคาใดๆ ออกไปจากฟงกชน main สวน void ทอยในวงเลบ คอจะไมมการรบคาใดๆ เขามาในฟงกชน main

4.1.2 ชนดขอมลแบบตวอกษร ชนดขอมลแบบตวอกษร (Character) เปนชนดขอมลทเกบขอมลได 1 ตวอกษร

เทานน ซงคอมพวเตอรจะเกบขอมลในลกษณะของรหสแอสก (American Standard Code

for Information Interchange: ASCII) 1 ไบต ซงทาใหชนดขอมลแบบตวอกษรเทยบไดกบขอมลชนดตวเลขจานวนเตมทมคาตงแต 0 ถง 255 สาหรบชนดขอมลแบบตวอกษรทไมคดเครองหมาย (Unsigned Char) และมคาตงแต -128 ถง 127 สาหรบชนดขอมลแบบตวอกษรทคดเครองหมาย (Signed Char) ดงนนจงสามารถนาขอมลแบบตวอกษร มากระทาการทางคณตศาสตรได และถาตองการกาหนดใหตวแปรเกบขอมลแบบตวอกษรใหกาหนด เปน char

Page 114: การเขียนโปรแกรมคอมพิวเตอร ์portal5.udru.ac.th/ebook/pdf/upload/17P88t2O788B98583682.pdfรูปภาพบางส่วนให

บทท 4 ชนดของขอมล ตวแปร คาคงท และการรบและแสดงผลขอมล

94

สวนการกาหนดคาใหกบตวแปรทเกบขอมลตวอกษรนนตองระบในเครองหมาย (‘ ‘) เชน ถาตวแปรเกบขอมลคาเทากบ ‘A’ หมายความวาคอมพวเตอรจะเกบคาเทากบ 01000001 ซงกคอคา 65 นนเอง

ในกรณทมตวอกษรหลายๆ ตวรวมกนเราเรยกวา ขอความ (String) ซงกคอการนาเอาอกขระหลายๆ ตวมาเรยงตอกน ภายใตเครองหมาย " " ตวอยางเชน “CMU”, “Chula”,

“KKU”, “Kmitl”, “Mahidol”, “Kmitnb” และ “Kmutt” เปนตน

4.1.3 ชนดขอมลแบบเลขจานวนเตม

ชนดขอมลแบบเลขจานวนเตม (Integer) เปนชนดขอมลทเกบเลขจานวนเตมทงแบบทคดเครองหมายและไมคดเครองหมาย ซงถาเปนแบบคดเครองหมายจะกาหนดใหบตดานซายสดเกบคาเครองหมาย โดยถามคาเทากบ 0 แสดงวาเปนจานวนเตมบวก และถามคาเทากบ 1 แสดงวาเปนจานวนเตมลบ ซงจะเรยกบตดานซายสดวาบตเครองหมาย (Sign Bit)

ซงสามารถแบงออกเปน 3 ประเภทคอ

เลขจานวนเตมแบบสน (Short Integer) เปนชนดขอมลทเกบเลขจานวนเตมขนาด 2

ไบต มคาตงแต 0 ถง 65,535 สาหรบชนดขอมลแบบเลขจานวนเตมแบบสนทไมคดเครองหมาย และมคาตงแต -32,768 ถง 32,767 สาหรบชนดขอมลแบบเลขจานวนเตมแบบสนทคดเครองหมาย และถาตองการกาหนดใหตวแปรเกบขอมลเลขจานวนเตมแบบสนใหกาหนด เปน short int

เลขจานวนเตมแบบปกต (Integer) เปนชนดขอมลทเกบเลขจานวนเตมขนาด 2 ไบต

มคาตงแต 0 ถง 65,535 สาหรบชนดขอมลแบบเลขจานวนเตมแบบปกตทไมคดเครองหมาย และมคาตงแต -32,768 ถง 32,767 สาหรบชนดขอมลแบบเลขจานวนเตมแบบปกตทคดเครองหมายและถาตองการกาหนดใหตวแปรเกบขอมลเลขจานวนเตมแบบปกตใหกาหนด เปน int

เลขจานวนเตมแบบยาว (Long Integer) เปนชนดขอมลทเกบเลขจานวนเตมขนาด 4

ไบต มคาตงแต 0 ถง 4,294,967,295 สาหรบชนดขอมลแบบเลขจานวนเตมแบบยาวทไมคดเครองหมาย และมคาตงแต -2,147,483,648 ถง 2,147,483,647 สาหรบชนดขอมลแบบเลขจานวนเตมแบบสนทคดเครองหมาย และถาตองการกาหนดใหตวแปรเกบขอมลเลขจานวนเตมแบบยาวใหกาหนด เปน long int

Page 115: การเขียนโปรแกรมคอมพิวเตอร ์portal5.udru.ac.th/ebook/pdf/upload/17P88t2O788B98583682.pdfรูปภาพบางส่วนให

บทท 4 ชนดของขอมล ตวแปร คาคงท และการรบและแสดงผลขอมล

95

#include <stdio.h> void main(void) { short int a; //การประกาศชนดของขอมลของเลขจานวนเตมแบบสน int b; //การประกาศชนดของขอมลของเลขจานวนเตมแบบเตมปกต long int c; //การประกาศชนดของขอมลของเลขจานวนเตมแบบยาว a = 15; b = 100000; c = 100000000; printf(" a = %i \n b = %i \n c = %li \n",a,b,c); }

รปท 4.2 การกาหนดชนดของขอมลแบบจานวนเตม

ในการกาหนดชนดขอมลขอทพงควรระวงจะตองกาหนดคาตวแปรไมใหเกนคาขอบเขตของชนดขอมลในแตละชนด ถากาหนดคามากเกนเกบ (Overflow) กาหนดคานอยเกนเกบ (Underflow) ซงจะทาใหคาทเกบไวในตวแปรมความผดพลาด ดงแสดงในตวอยางดงรปท 4.3 และรปท 4.4

#include <stdio.h> void main(void) { int a,b; a = 32767; b = 32768; printf(" a = %i \n b = %i \n",a,b); }

รปท 4.3 ตวอยางการกาหนดคามากเกนเกบ

จากรปท 4.3 ผลลพธทไดของตวแปร a = 32767 ซงเปนคาทถกตอง แตผลลพธของตวแปร b = -32768 ซงจะผดพลาดจากคาทตองการจะจดเกบเนองจากขอบเขตของชนดขอมลของเลขจานวนเตมแบบปกต (Integer) ซงเปนชนดขอมลทเกบเลขจานวนเตมขนาด 2

ไบต มคาตงแต -32,768 ถง 32,767 ดงนนถาเกนคาทกาหนดไวจะเปนคาทผดพลาด

Page 116: การเขียนโปรแกรมคอมพิวเตอร ์portal5.udru.ac.th/ebook/pdf/upload/17P88t2O788B98583682.pdfรูปภาพบางส่วนให

บทท 4 ชนดของขอมล ตวแปร คาคงท และการรบและแสดงผลขอมล

96

#include <stdio.h> void main(void) { long int a,b; a = -2147483648; b = -2147483649; printf(" a = %li \n b = %li \n",a,b); }

รปท 4.4 ตวอยางการกาหนดคานอยเกนเกบ

จากรปท 4.4 ผลลพธทไดของตวแปร a = -2147483648 ซงเปนคาทถกตอง แตผลลพธของตวแปร b = 2147483647 ซงจะผดพลาดจากคาทตองการจะจดเกบเนองจากขอบเขตของชนดขอมลของเลขจานวนเตมแบบยาว (Long Integer) ซงเปนชนดขอมลทเกบเลขจานวนเตมขนาด 4 ไบต มคาตงแต -2,147,483,648 ถง 2,147,483,647 ดงนนถาเกนคาทกาหนดไวจะเปนคาทผดพลาด

4.1.4 ชนดขอมลแบบเลขทศนยม

ชนดขอมลแบบเลขทศนยม (Floating Point) เปนชนดขอมลทเกบเลขทศนยมหรอเลขจานวนจรง โดยจะเกบขอมลแบบคดเครองหมายเทานน สามารถแบงออกเปน 3 ประเภทคอ

เลขทศนยมแบบจดลอยตว float (Floating Point Number) เปนชนดขอมลทเกบเลขทศนยมขนาด 4 ไบต มคาตงแต 3.4 10

-38 ถง 3.4 10

38 และถาตองการกาหนดใหตวแปรเกบขอมลเลขทศนยมแบบจดลอยตว float ใหกาหนด เปน float

เลขทศนยมแบบดบเบล double (Double Precision Floating Point Number) เปนชนดขอมลทเกบเลขทศนยมขนาด 8 ไบต มคาตงแต 1.710

-308 ถง 1.710

308 และถาตองการกาหนดใหตวแปรเกบขอมลเลขทศนยมแบบดบเบล double ใหกาหนด เปน double

เลขทศนยมแบบดบเบลยาว long double (Long Double Precision Floating Point

Number) เปนชนดขอมลทเกบเลขทศนยมขนาด 10 ไบต มคาตงแต 3.410-4932

ถง 1.110

4932 และถาตองการกาหนดใหตวแปรเกบขอมลเลขทศนยมแบบดบเบลยาว long

double ใหกาหนด เปน long double

Page 117: การเขียนโปรแกรมคอมพิวเตอร ์portal5.udru.ac.th/ebook/pdf/upload/17P88t2O788B98583682.pdfรูปภาพบางส่วนให

บทท 4 ชนดของขอมล ตวแปร คาคงท และการรบและแสดงผลขอมล

97

#include <stdio.h> void main(void) { float a; //การประกาศชนดของขอมลของเลขเทศนยม double b; //การประกาศชนดของขอมลของเลขเทศนยม long double c; //การประกาศชนดของขอมลของเลขเทศนยม a = 15.5644; b = 100.5749593434; c = 100.87084745278; printf(" a = %f \n b = %.30lf \n c = %.30Lf \n",a,b,c); }

รปท 4.5 การกาหนดชนดของขอมลแบบทศนยม

4.2 ตวแปร (Variables)

ตวแปร คอชอทกาหนดขนมา เพอใชเรยกสวนของหนวยความจาของคอมพวเตอรทใชเกบคาใดๆ ทสามารถเปลยนแปลงคาได เพอใหผ เขยนโปรแกรมสามารถเรยกใชคาทเกบอยในหนวยความจาของคอมพวเตอรไดสะดวกรวดเรว

ในการเขยนโปรแกรมคอมพวเตอรกระบวนการหนงทสาคญคอกระบวนการรบคาขอมลเขามา การแสดงผลขอมล การประมวลผลขอมล ซงเปนการกระทากบขอมล ซงขอมลตางๆ ทรบเขามาจะถกจดเกบไวทหนวยความจาของเครองคอมพวเตอรแลวสงไปประมวลผล จากนนกเกบไวทหนวยความจากอนไปแสดงผลลพธตางๆ ดงนนในการเขยนโปรแกรมคอมพวเตอรใหสามารถรบขอมลเขามา ประมวลผลขอมล และแสดงผลขอมล จะใชตวแปรเขามาชวยในการทางาน ซงแตกตางจากภาษาระดบตาทตองอางองหนวยความจา ในโปรแกรมภาษาระดบสงเมอมการสรางตวแปรขนมากจะเกดการจองพนทหนวยความจาโดยอตโนมต โดยทผ เขยนโปรแกรมไมจาเปนตองรวาตวแปรทสรางขนมาใชหนวยความจาตาแหนงไหน ซงการอางชอตวแปรในทนกเปรยบเสมอนการอางตาแหนงในหนวยความจานนเอง ซงจะงายกวาการเขยนโปรแกรมภาษาระดบตา เชนคาสง Add 0,1,2,3

(ภาษาระดบตา) ซงสมมตวาเปนการบวกคาตาแหนงท 0 ตาแหนงท 1 ตาแหนงท 2 แลวเกบไวทตาแหนงท 3 แตถาเปนการเขยนในโปรแกรมภาษาระดบสงกจะเขยนเปน d = a + b + c ดงตวอยางแสดงดงรป

Page 118: การเขียนโปรแกรมคอมพิวเตอร ์portal5.udru.ac.th/ebook/pdf/upload/17P88t2O788B98583682.pdfรูปภาพบางส่วนให

บทท 4 ชนดของขอมล ตวแปร คาคงท และการรบและแสดงผลขอมล

98

รปท 4.6 การอางองขอมลในหนวยความจา

4.2.1 กฎการตงชอตวแปร ชอตวแปรตองขนตนดวยตวอกษรหรอเครองหมาย underscore (_)เทานน เชน

Name, _Name เปนตน

ภายในชอตวแปรสามารถประกอบดวยตวอกษร ตวเลข และเค รองหมาย underscore เทานน โดยหามมชองวางภายในชอ เชน Name, Name1, User_name เปนตน

ตวอกษรพมพเลก และตวอกษรพมพใหญ มความแตกตางกน เชน Name, NAME,

NaMe, NamE ถอวาเปนคนละชอกน

ชอตวแปรตองไมซากบคาสงวน (Reserve word) ซงคาสงวนตางๆ แสดงดงในตารางท 4.2

ตารางท 4.2 คาสงวน

auto break case char const continue default do

double else enum extern float for goto if

int long register return short signed sizeof static

struct switch typedef union unsigned void volatile while

Page 119: การเขียนโปรแกรมคอมพิวเตอร ์portal5.udru.ac.th/ebook/pdf/upload/17P88t2O788B98583682.pdfรูปภาพบางส่วนให

บทท 4 ชนดของขอมล ตวแปร คาคงท และการรบและแสดงผลขอมล

99

ตวอยางการตงชอตวแปร Test ถกตอง _test ถกตอง Test1 ถกตอง 1test ผด เพราะขนตนดวยตวเลข User-name ผด เพราะมเครองหมาย (-) อยในชอ User1name ถก if ผด เพราะเปนคาสงวน

4.2.2 รปแบบการประกาศตวแปร การประกาศคาตวแปรสามารถกาหนดไดดงน

เชน

int score; เปนการประกาศตวแปร score ใหเกบขอมลชนดเลขจานวนเตม

char grade; เปนการประกาศตวแปร grade ใหเกบขอมลชนดตวอกษร

การประกาศคาตวแปรสามารถกาหนดคาเรมตนใหกบตวแปรได เชน

int score = 80; เปนการประกาศตวแปร score ใหเกบขอมลชนดเลขจานวนเตมโดยมคาเรมตน คอ 80

char grade = ‘A’ เปนการประกาศตวแปร grade ใหเกบขอมลชนดตวอกษร โดยมคาเรมตน คอ A

ชนดของตวแปรขนอยกบวาจะใชตวแปรนนเกบคาคงทชนดไหน ซงชนดของคาตวแปรมหลายรปแบบ ดงแสดงในตาราง 4.3

ชนดของขอมล ชอตวแปร[,ชอตวแปร];

Page 120: การเขียนโปรแกรมคอมพิวเตอร ์portal5.udru.ac.th/ebook/pdf/upload/17P88t2O788B98583682.pdfรูปภาพบางส่วนให

บทท 4 ชนดของขอมล ตวแปร คาคงท และการรบและแสดงผลขอมล

100

ตารางท 4.3 ชนดของตวแปรประเภทตางๆ ในภาษาซ ชนดคาคงท ชนดตวแปรใน

ภาษาซ ตวอยางการประกาศตวแปร a

Character char char a

Integer int int a;

Unsigned integer unsigned unsigned a;

Long integer long long a;

Unsigned long integer unsigned long unsigned long a;

Floating point float float a;

Double precision floating point double double a;

Long double precision floating

point

long double long double a;

String (ตองระบวายาวกอกษร) char char a[ความยาว+1]

ตวอยางการประกาศตวแปรเชน

char a, b; ตวแปร a และ b ใชเกบคาคงทชนดตวอกษร long d; ตวแปร d ใชเกบชนดขอมลจานวนเตมแบบยาว float x, y, z; ตวแปร x, y และ z ใชเกบคาคงทชนดทศนยม

int ไมถกตองตามรปแบบ เพราะไมบอกชอตวแปร

4.2.3 ประเภทของตวแปร ประเภทของตวแปรสามารถแบงออกเปน 2 ประเภท คอ

ตวแปรสวนกลางหรอตวแปรแบบโกลบอล (Global Variable) คอตวแปรสาธารณะทประกาศไวนอกฟงกชนทกฟงกชน ดงนนทกฟงกชนสามารถเรยกใชตวแปรประเภทนได จะมคาเรมตนเปน 0 โดยอตโนมตถาไมไดกาหนดคาเรมตนใหกบตวแปร

ตวแปรเฉพาะท (Local Variable) หรอตวแปรแบบโลคอล คอตวแปรทประกาศไวในฟงกชนใดๆ ดงนนจะมเฉพาะฟงกชนททาการประกาศเทานนทสามารถเรยกใชได ไมมการกาหนดคาเรมตนโดยอตโนมต

Page 121: การเขียนโปรแกรมคอมพิวเตอร ์portal5.udru.ac.th/ebook/pdf/upload/17P88t2O788B98583682.pdfรูปภาพบางส่วนให

บทท 4 ชนดของขอมล ตวแปร คาคงท และการรบและแสดงผลขอมล

101

ตวอยางท 4.1 โปรแกรมแสดงการประกาศตวแปรแตละประเภท

1 #include <stdio.h> 2 int x; //เปนการประกาศตวแปร x แบบโกลบอล 3 int y = 2; //เปนการประกาศตวแปร y แบบโกลบอล โดยมการกาหนดคาเรมตน 4 int test(int x){ 5 int i = 3; //เปนการประกาศตวแปร i แบบโลคอล 6 return x + y + i; 7 } 8 main(){ 9 int z; //เปนการประกาศตวแปร z แบบโลคอล 10 x = 5; 11 y = 10; 12 z = test(x); 13 printf(“x + y + i = %d\n”, z); 14 }

ผลลพธของโปรแกรม

x + y + i = 18

อธบายโปรแกรม

บรรทดท 2 : เปนการประกาศตวแปร x แบบโกลบอล บรรทดท 3 : เปนการประกาศตวแปร y แบบโกลบอล โดยมการกาหนดคาเรมตน

ใหกบตวแปร y

บรรทดท 4 : สรางฟงกชน test()

บรรทดท 5 : เปนการประกาศตวแปร i แบบโลคอล โดยมการกาหนดคาเรมตนใหกบตวแปร i โดยมฟงกชน test() เทานนทสามารถเรยกใชตวแปรน ได

บรรทดท 9 : เปนการประกาศตวแปร z แบบโลคอล โดยมฟงกชน main() เทานนทสามารถเรยกใชตวแปรนได

บรรทดท 10 : กาหนดคาใหตวแปร x

บรรทดท 11 : กาหนดคาใหตวแปร y

บรรทดท 12 : มการเรยกใชฟงกชน test() โดยสงคาพารามเตอรคอ x = 5 เขาไปประมวลผลในฟงกชน test() ซงฟงกชน test จะนาคา x มาบวกกบคา y ซงฟงกชน main() ไดกาหนดคาใหเทากบ 10 แลวนาไปบวกกบคา i ซงมคาเทากบ 3 ดงนนฟงกชน test() จะสงคา 18 กลบออกไปจากฟงกชน

Page 122: การเขียนโปรแกรมคอมพิวเตอร ์portal5.udru.ac.th/ebook/pdf/upload/17P88t2O788B98583682.pdfรูปภาพบางส่วนให

บทท 4 ชนดของขอมล ตวแปร คาคงท และการรบและแสดงผลขอมล

102

4.2.4 ขอบเขตการทางานของตวแปร (Variable Storage Classes)

ขอบเขตการทางานของตวแปร คอการกาหนดวาฟงกชนใดสามารถใชตวแปรใดบาง และโปรแกรมสามารถเกบคาของตวแปรไวไดนานเทาใด แบงออกเปน 4 ประเภท คอ

ตวแปรอตโนมต (Automatic Variable) คอการกาหนดขอบเขตของตวแปรใหกบตวแปรแบบโลคอลเทานน โดยคาของตวแปรจะถกทาลายเมอออกจากฟงกชน และจะเรมตนคาใหมทกครงเมอมการเรยกใชฟงกชน โดยทวไปการประกาศตวแปรแบบโลคอลจะถกกาหนดใหเปนแบบนโดยอตโนมต เชน

ประกาศตวแปร int x = 5;

หมายถง การประกาศ auto x = 5; ซงไมจาเปนตองระบ auto กากบไว

ตวแปรเรจสเตอร (Register Variable) คอการกาหนดใหตวแปรถกเกบในเรจสเตอรของคอมพวเตอร แทนทจะเกบไวในหนวยความจาหลกเหมอนตวแปรโดยทวไป มขอดคอสามารถเขาถงตวแปรไดอยางรวดเรว แตมขอเสยคอ ขนาดของเรจสเตอรทจากดทาใหเกบขอมลไดนอย เชน

ประกาศตวแปร register int x = 5;

หมายถงจะมการทางานเชนเดยวกบการประกาศ int x = 5; เพยงแตมการเกบคาของตวแปรไวในเรจสเตอรแทนทจะเกบไวในหนวยความจาหลกนนเอง

ตวแปรภายนอก (External Variable) คอการกาหนดขอบเขตของตวแปรทอยในโปรแกรมไฟลใดๆ ทมการเรยกใชตวแปรแบบโกลบอลทมการประกาศอยในโปรแกรมไฟลอน

Page 123: การเขียนโปรแกรมคอมพิวเตอร ์portal5.udru.ac.th/ebook/pdf/upload/17P88t2O788B98583682.pdfรูปภาพบางส่วนให

บทท 4 ชนดของขอมล ตวแปร คาคงท และการรบและแสดงผลขอมล

103

ตวอยางท 4.2 โปรแกรมแสดงการทางานของตวแปรแบบภายนอก

main_extern.c 1 #include <stdio.h> 2 #include "write_extern.c" 3 int a=10; 4 main(){ 5 write(); 6 }

write_extern.c 1 #include <stdio.h> 2 extern int a; 3 write(){ 4 printf("a = %d\n", a); 5 }

ผลลพธของโปรแกรม

a = 10

อธบายโปรแกรม (write_extern)

บรรทดท 2 ทาการประกาศตวแปร a เปนแบบ external หมายความวา มการอางองไปยงตวแปร a ในโปรแกรมไฟล main_extern ดงนนตวแปร a

ในโปรแกรมไฟล write_extern จงมคาเทากบ 10 และจะเปลยนแปลงตามคาของตวแปร a ในโปรแกรมไฟล main_extern

ตวแปรสถต (Static Variable) คอการกาหนดใหตวแปรแบบโลคอลเกบคาไวจนกวาจะจบการทางานของโปรแกรม คาของตวแปรจงจะถกทาลาย ดงนนเมอมการเรยกใชงานฟงกชนใดๆ อกครงหลงจากออกจากการใชงานฟงกชนนนๆ แลว คาของตวแปรจะยงคงอย สวนตวแปรโกลบอลจะถกกาหนดใหเปนตวแปรแบบสถตโดยอตโนมต เชน

ประกาศตวแปรโกลบอล int x = 5;

หมายถง การประกาศ static x = 5; ซงไมจาเปนตองระบ static กากบไว

Page 124: การเขียนโปรแกรมคอมพิวเตอร ์portal5.udru.ac.th/ebook/pdf/upload/17P88t2O788B98583682.pdfรูปภาพบางส่วนให

บทท 4 ชนดของขอมล ตวแปร คาคงท และการรบและแสดงผลขอมล

104

ตวอยางท 4.3 โปรแกรมแสดงการทางานของตวแปรแบบสถต

main_static.c

1 #include <stdio.h> 2 #include "write_static.c" 3 int i; 4 main(){ 5 for(i = 1; i <= 3 ; i++){ 6 write_static(); 7 } 8 }

write_static.c

1 #include<stdio.h> 2 write_static(){ 3 extern int i; 4 int a = 4; 5 static int b = 4; 6 a = a + 1; 7 b = b + a; 8 printf("i = %d a = %d b = %d\n" ,i ,a ,b); 9 }

ผลลพธของโปรแกรม i = 1 a = 5 b = 9 i = 2 a = 5 b = 14 i = 3 a = 5 b = 19

อธบายโปรแกรม (write_static.c)

บรรทดท 3 : ประกาศตวแปร i เปนแบบภายนอก (Extern Variable) หมายความวา มการอางองไปยงตวแปร i ในโปรแกรมไฟล main_static ดงนนตวแปร i ในโปรแกรมไฟล write_static จะเปลยนแปลงตามคาของตวแปร i ในโปรแกรมไฟล main_static

บรรทดท 4 : ประกาศตวแปร a เปนแบบอตโนมต (Automatic Variable)

หมายความวา คาของตวแปรจะถกทาลายเมอออกจากฟงกชน

write_static() และจะเรมตนคาใหมทกครงเมอมการเรยกใชฟงกชน

write_static() ดงนนไมวาจะมการเรยกใชฟงกชน write_static() กครงกตามคาของตวแปร a จะมคาเทากบ 5 เสมอ

Page 125: การเขียนโปรแกรมคอมพิวเตอร ์portal5.udru.ac.th/ebook/pdf/upload/17P88t2O788B98583682.pdfรูปภาพบางส่วนให

บทท 4 ชนดของขอมล ตวแปร คาคงท และการรบและแสดงผลขอมล

105

บรรทดท 5 : ประกาศตวแปร b เปนแบบสถต (Static Variable) หมายความวา คาของตวแปรจะถกเกบไว แมวาจะออกจากฟงกชน write_static()

ดงนนเมอมการเรยกใชฟงกชน write_static() จะมการนาคาของตวแปรทถกเกบไวมาใชงานตอ ดงนนจะเหนวาคาของตวแปร b จะเพมขนทละ 5 จากคาสง b = b+a;

4.3 คาคงท (Constant)

คาคงท คอคาของขอมลทแนนอน ไมสามารถเปลยนแปลงคาไดในขณะทโปรแกรมทางาน ตวแปรคาคงทคอตวแปรทกาหนดคาไดครงเดยว และคานนจะคงเดมจนจบโปรแกรม

มกใชเกบคาคงทสาหรบการคานวณเชน คา pi, คา e, จานวนชวโมงในหนงวน เปนตน

4.3.1 ชนดของคาคงท ชนดของคาคงทโดยทวไปจะเปนชนดตวเลขและตวอกษร ดงน

คาคงทชนดจานวนเตม (Integer Constant) เปนคาคงทชนดตวเลขทเปนจานวนเตมลบ และจานวนเตมบวก

คาคงทชนดจานวนเตมฐานสบ (Decimal Integer Constant) หมายถงตวเลขตงแต 0

ถง 9 ซงตวเลขแรกของขอมลตองไมเปน 0 เชน

o const int a = 120;

o const int b = 9999;

คาคงทชนดจานวนเตมฐานแปด (Octal Integer Constant) หมายถงตวเลขตงแต 0

ถง 7 โดยกาหนดใหตวเลขแรกของขอมลตองเปน 0 เชน

o const int a = 0170;

o const int b = 023417;

คาคงทชนดจานวนเตมฐานสบหก (Hexadecimal Integer Constant) หมายถงตวเลขตงแต 0 ถง 9 และ A ถง F โดยกาหนดใหม 0x หรอ 0X นาหนา เชน

o const int a = 0x78;

o const int b = 0x270F;

Page 126: การเขียนโปรแกรมคอมพิวเตอร ์portal5.udru.ac.th/ebook/pdf/upload/17P88t2O788B98583682.pdfรูปภาพบางส่วนให

บทท 4 ชนดของขอมล ตวแปร คาคงท และการรบและแสดงผลขอมล

106

คาคงทชนดเลขทศนยม (Floating Point Constant) เปนคาคงททเปนเลขจานวนจรง

คาคงทชนดเลขทศนยมระบคาทศนยมแบบปกต หมายถงตวเลขตงแต 0 ถง 9 และจดทศนยม เชน

o const float a = 3.55;

o const float b = 0.03;

คาคงทชนดเลขทศนยมทเขยนแบบวทยาศาสตร หมายถงตวเลขทศนยมคณดวย 10n

เขยนแทนดวยอกษร E (หรอ e) ตามดวยเลขจานวนเตมบวกหรอจานวนเตมลบ เชน

o const float a = 1.0E2 หมายถง 1.0 * 102 = 100.0

o const float b = 23E-3 หมายถง 23 * 10-3 = 0.023

คาคงทชนดตวอกษร (Character Constant) เปนคาคงททเปนตวอกษรเพยงตวเดยว โดยกาหนดใหอยในเครองหมาย (‘ ‘) เชน

const char a = ‘a’;

const char grade = ‘A’;

คาคงทชนดตวอกษรทมไวเพอควบคมการทางานของคอมพวเตอร โดยจะไมแสดงอกษรใดๆ เรยกวาคาคงทตวอกษรพเศษหรอเอสเคปซเควนซ (Escape Sequence) ซงเปนคาคงททประกอบดวยเครองหมาย \ และตวอกษร โดยตองอยในเครองหมาย (‘ ‘) เชน ‘\n’ , ‘\t’

คาคงทประเภทนสามารถแสดงไดดงตารางท 4.4

Page 127: การเขียนโปรแกรมคอมพิวเตอร ์portal5.udru.ac.th/ebook/pdf/upload/17P88t2O788B98583682.pdfรูปภาพบางส่วนให

บทท 4 ชนดของขอมล ตวแปร คาคงท และการรบและแสดงผลขอมล

107

ตารางท 4.4 คาคงทตวอกษรพเศษ

เอสเคปซเควนซ ชอ ความหมาย \a Alarm bell เสยงระฆงเตอน

\b Backspace ถอยกลบ

\f Formfeed ขนหนาใหม

\n Newline ขนบรรทดใหม

\r Return เคอรเซอรกลบไปอยทตนบรรทด

\t Tab เวนระยะ \\ Backslash พมพเครองหมาย \\ \’ Single quote พมพเครองหมาย ‘ \” Double quote พมพเครองหมาย “

\? Question mark พมพเครองหมาย ?

คาคงทชนดสายอกขระหรอขอความ (String) คอการนาตวอกษรมาเรยงตอกนภายใตเครองหมาย “” เชน

const char name[10] = ”wilaiporn”;

const char a[3] = “ab”;

Page 128: การเขียนโปรแกรมคอมพิวเตอร ์portal5.udru.ac.th/ebook/pdf/upload/17P88t2O788B98583682.pdfรูปภาพบางส่วนให

บทท 4 ชนดของขอมล ตวแปร คาคงท และการรบและแสดงผลขอมล

108

ตวอยางท 4.4 โปรแกรมแสดงการกาหนดคาคงทพรอมการประกาศคาตวแปร

1 #include <stdio.h> 2 main(){ 3 const int a = 120; 4 const int b = 0170; 5 const int c = 0x78; 6 const float d = 3.55; 7 const float e = 23E-3; 8 const char f = '\?'; 9 const char grade = 'A'; 10 const char name[10] = "Ahumporn"; 11 printf("a = %d\n", a); 12 printf("b = %d\n", b); 13 printf("c = %d\n", c); 14 printf("d = %f\n", d); 15 printf("e = %f\n", e); 16 printf("f = %c\n", f); 17 printf("grade = %c\n", grade); 18 printf("name = %s\n", name); 19 }

ผลลพธของโปรแกรม a = 120 b = 120 c = 120 d = 3.550000 e = 0.023000 f = ? grade = A name = Ahumporn

อธบายโปรแกรม

บรรทดท 3 เปนการประกาศตวแปร a เกบคาคงทชนดจานวนเตมฐานสบ

บรรทดท 4 เปนการประกาศตวแปร b เกบคาคงทชนดจานวนเตมฐานแปด

บรรทดท 5 เปนการประกาศตวแปร c เกบคาคงทชนดจานวนเตมฐานสบหก บรรทดท 6 – 7 เปนการประกาศตวแปร d และ e เกบคาคงทชนดจานวนจรง บรรทดท 8 – 9 เปนการประกาศตวแปร f และ grade เกบคาคงทชนดตวอกษร

บรรทดท 10 เปนการประกาศตวแปร name เกบคาคงทชนดขอความ

จากโปรแกรมในตวอยางท 3.5 ถามการกาหนดคาใหกบตวแปรใหม จะพบวาโปรแกรมคอมไพลไมผาน เกดขอผดพลาด (error) ขน เชน เพมคาสง grade = ‘B’;

Page 129: การเขียนโปรแกรมคอมพิวเตอร ์portal5.udru.ac.th/ebook/pdf/upload/17P88t2O788B98583682.pdfรูปภาพบางส่วนให

บทท 4 ชนดของขอมล ตวแปร คาคงท และการรบและแสดงผลขอมล

109

4.3.2 การกาหนดคาคงท การกาหนดคาคงทสามารถทาได 3 วธ คอ

คาคงททกาหนดในโปรแกรมโดยตรง (Literal Constant) คอคาคงททกาหนดในโปรแกรมโดยตรงโดยไมตองใชตวแปรในการเกบขอมล เชน

printf(“Score = %d”, 100);

printf(“Grade = %c”, ‘A’);

คาคงททกาหนดในสวนหวของโปรแกรม (Defined constant) คอคาคงททกาหนดในสวนหวของโปรแกรม (Preprocessing Directives) โดยมรปแบบการกาหนดดงน

ชอตวแปรทมการกาหนดคาคงททสวนหวของโปรแกรม มหลกเกณฑการตงชอเหมอนตวแปรทวไป แตมกนยมใชตวอกษรตวใหญทงหมด

ตวอยางท 4.5 โปรแกรมแสดงการกาหนดคาคงทไวทสวนหวของโปรแกรม

1 #include <stdio.h> 2 #define A 120 3 #define B 0170

4 #define C 0x78 5 #define D 3.55 6 #define E 23E-3 7 #define F '\?' 8 #define GRADE 'A' 9 #define NAME "Assit.Prof.Dr.Krit" 10 main(){ 11 printf("A = %d\n", A); 12 printf("B = %d\n", B); 13 printf("C = %d\n", C); 14 printf("D = %f\n", D); 15 printf("E = %f\n", E); 16 printf("F = %c\n", F); 17 printf("GRADE = %c\n", GRADE); 18 printf("NAME = %s\n", NAME); 19 }

ผลลพธของโปรแกรม A = 120 B = 120 C = 120 D = 3.550000 E = 0.023000 F = ?

#define ชอตวแปร คาคงท

Page 130: การเขียนโปรแกรมคอมพิวเตอร ์portal5.udru.ac.th/ebook/pdf/upload/17P88t2O788B98583682.pdfรูปภาพบางส่วนให

บทท 4 ชนดของขอมล ตวแปร คาคงท และการรบและแสดงผลขอมล

110

GRADE = A NAME = Assit.Prof.Dr.Krit

คาคงททกาหนดใหพรอมกบการประกาศตวแปร (Memory Constant) คอคาคงททกาหนดใหพรอมกบการประกาศตวแปร มรปแบบการกาหนดดงน

เชน

const int tax = 7;

หมายความวา tax เปนคาคงททเกบขอมลจานวนเตม ซงมคาเทากบ 7

ตวอยางท 4.6 การประกาศตวแปรคาคงททกาหนดใหพรอมกบการประกาศตวแปร

1 #include <stdio.h> 2 const float a = 3.14; 3 const int b=10; 4 void main(void) 5 { 6 const int d=10; 7 8 }

การกาหนดคาคงทโดยทวไปนยมกาหนดเปนคาเฉพาะของตวเลขทใชในโปรแกรมทงหมดเชนคาตวเลขคงทตางๆ ของสมการคณตศาสตร ดงแสดงในตวอยางท 4.7 ซงแสดงใหเหนวาเราสามารถแทนตวอกษร pi แทนคาทางคณตศาสตรทกสวนของโปรแกรมไดทงหมด

ทาใหงายตอการเขยนโปรแกรม

ตวอยางท 4.7 การกาหนดคาคงททเปนคาทางคณตศาสตร 1 2 3 4 5 6 7 8

#include <stdio.h> #define pi 3.1416 void main(void) { int a; a = 2 * pi * 15; }

#include <stdio.h> #define pi 3.1416 void main(void) { int a; a = 2 * 3.1416* 15; }

const ชนดของขอมล ชอคาคงท = คาคงท;

Page 131: การเขียนโปรแกรมคอมพิวเตอร ์portal5.udru.ac.th/ebook/pdf/upload/17P88t2O788B98583682.pdfรูปภาพบางส่วนให

บทท 4 ชนดของขอมล ตวแปร คาคงท และการรบและแสดงผลขอมล

111

4.4 การรบและแสดงผลขอมล (Input and Output of Data)

การรบและแสดงผลขอมลเปนการกระทาเกยวกบขอมลเบองตนวาจะมการรบขอมลเขามาประมวลผลอยางไร และเมอประมวลผลเรยบรอยแลวเราจะแสดงผลขอมลอยางไร ซงในทนเราไดใชฟงกชนทมอยแลวในภาษาซในการรบและแสดงผลดงน

4.4.1 การรบขอมลดวยฟงกชน scanf()

การรบขอมลเพอใหโปรแกรมประมวลผลสามารถทาไดหลายทางเชน คยบอรด เมาส สแกนเนอร เปนตน ในทนจะเนนการรบขอมลจากคยบอรด คาทไดรบมาจะเกบไวทตวแปรทกาหนด แลวนาตวแปรนนไปประมวลผลตอไป ฟงกชนทรบขอมลทนยมใชกนคอ scanf( ) ซงรบขอมลจากคยบอรดไดทกๆ ประเภท ไมวาจะเปน จานวนเตม ทศนยม อกษร ขอความ การใชฟงกชนนจะตองรวมไฟลสวนหวทชอวา “stdio.h” กอนจงจะใชได ดงตวอยางตอไปน

ฟงกชนทใชในการรบขอมลจากคยบอรด คอ ฟงกชน scanf (scan formatted) โดยมรปแบบการใชฟงกชนดงน

string_format คอตวแทนชนดขอมลทตองการรบเขามา เชน %d , %f เปนตน ซงตวแทนชนดขอมลสามารถแสดงไดดงตารางท 5.1

address_list คอทอย (address) ของตวแปรเพอเกบขอมลทรบเขามาจากคยบอรดไวในหนวยความจาตรงตาแหนงใดๆ ซงตองใชเครองหมายแอมเพอรแซนด (&) นาหนาชอตวแปรทตองการรบขอมลเขามาเกบไว ยกเวนการรบขอมลสายอกขระหรอขอความ ไมตองนาหนาชอตวแปรดวยเครองหมาย &

scanf(“string_format”, address_list);

Page 132: การเขียนโปรแกรมคอมพิวเตอร ์portal5.udru.ac.th/ebook/pdf/upload/17P88t2O788B98583682.pdfรูปภาพบางส่วนให

บทท 4 ชนดของขอมล ตวแปร คาคงท และการรบและแสดงผลขอมล

112

ตารางท 4.5 ตวแทนชนดขอมล

ชนดขอมล ตวแทนชนดขอมล char %c

string %s

short int %hd

unsigned short int %hu

int %d หรอ %i

unsigned int %u

long int %Ld

unsigned long int %Lu

float %f

double %lf

long double %Lf

ตารางท 4.6 ตวแทนชนดขอมลอนๆ

ชนดของคางคงททตองการแสดงผล

รปแบบการแสดงผลทตองการ ตวแทนชนดขอมล

Character ตวอกษร %c

จานวนเตมฐานสบ %i หรอ %d

จานวนเตมฐานแปด ไมคดเครองหมาย %o

จานวนเตมฐานสบหก ไมคดเครองหมาย %x หรอ %X

Integer ตวอกษร (ถกตองเฉพาะ 0 - 255)

%c

จานวนเตมฐานสบ %i หรอ %d

จานวนเตมฐานแปด ไมคดเครองหมาย (ถกตองเฉพาะ Integer คาบวก)

%o

จานวนเตมฐานสบหก ไมคดเครองหมาย (ถกตองเฉพาะ Integer คาบวก)

%x หรอ %X

Page 133: การเขียนโปรแกรมคอมพิวเตอร ์portal5.udru.ac.th/ebook/pdf/upload/17P88t2O788B98583682.pdfรูปภาพบางส่วนให

บทท 4 ชนดของขอมล ตวแปร คาคงท และการรบและแสดงผลขอมล

113

ชนดของคางคงททตองการแสดงผล

รปแบบการแสดงผลทตองการ ตวแทนชนดขอมล

Unsigned Integer ตวอกษร (ถกตองเฉพาะ 0 - 255)

%c

จานวนเตมฐานสบ %u

จานวนเตมฐานแปด ไมคดเครองหมาย %o

จานวนเตมฐานสบหก ไมคดเครองหมาย %x หรอ %X

Long Integer ตวอกษร (ถกตองเฉพาะ -0l - 255l)

%c

จานวนเตมฐานสบ %li หรอ %ld

จานวนเตมฐานแปด ไมคดเครองหมาย (ถกตองเฉพาะ Long Integer คาบวก)

%lo

จานวนเตมฐานสบหก ไมคดเครองหมาย (ถกตองเฉพาะ Long Integer คาบวก)

%lx หรอ %lX

Unsigned Long

Integer

ตวอกษร (ถกตองเฉพาะ 0ul - 255ul)

%c

จานวนเตมฐานสบ %lu

จานวนเตมฐานแปด ไมคดเครองหมาย %lo

จานวนเตมฐานสบหก ไมคดเครองหมาย %lx หรอ %lX

Floating Point ทศนยม %f

ทศนยมแบบวทยาศาสตร %e หรอ %E

Double Precision

Floating Point

ทศนยม %lf

ทศนยมแบบวทยาศาสตร

%le หรอ %lE

Page 134: การเขียนโปรแกรมคอมพิวเตอร ์portal5.udru.ac.th/ebook/pdf/upload/17P88t2O788B98583682.pdfรูปภาพบางส่วนให

บทท 4 ชนดของขอมล ตวแปร คาคงท และการรบและแสดงผลขอมล

114

ชนดของคางคงททตองการแสดงผล

รปแบบการแสดงผลทตองการ ตวแทนชนดขอมล

Long Double

Precision Floating

Point

ทศนยม %Lf

ทศนยมแบบวทยาศาสตร %Le หรอ %LE

String

สายอกขระหรอขอความ %s

ตวอยางท 4.8 โปรแกรมแสดงการรบขอมลดวยฟงกชน scanf

1 #include<stdio.h> 2 main(){ 3 char a ,b[10]; 4 int c; 5 float d; 6 printf("Enter Character : "); 7 scanf("%c",&a); 8 printf("Enter String : "); 9 scanf("%s",b); 10 printf("Enter Integer : "); 11 scanf("%d",&c); 12 printf("Enter Float : "); 13 scanf("%f",&d); 14 printf("Character = %c String = %s Integer = %d

Float = %f",a,b,c,d); 15 }

ผลลพธของโปรแกรม Enter Character : a Enter String : witchakorn Enter Integer : 11 Enter Float : 11.1111 Character = a String = witchakorn Integer = 11 Float = 11.1111

ถาตองการรบขอมลใหกบตวแปรหลายๆ ตวในเวลาเดยวกน สามารถเขยนโดยการกาหนดตวแทนชนดขอมลทตองการรบเขามาเรยงตามลาดบโดยใหเวนวรรคระหวางตวแทนชนดขอมลแตละตว สวนการกาหนดชอตวแปรนน ใหเรยงตามลาดบโดยมเครองหมายจลภาคหรอคอมมา (,) คนระหวางตวแปร ดงตวอยางท 4.9

Page 135: การเขียนโปรแกรมคอมพิวเตอร ์portal5.udru.ac.th/ebook/pdf/upload/17P88t2O788B98583682.pdfรูปภาพบางส่วนให

บทท 4 ชนดของขอมล ตวแปร คาคงท และการรบและแสดงผลขอมล

115

ตวอยางท 4.9 โปรแกรมแสดงการรบขอมลใหกบตวแปรหลายๆ ตวพรอมกน

1 #include<stdio.h> 2 main(){ 3 char a ,b[10]; 4 int c; 5 float d; 6 printf("Enter Character String Integer and Float : ");7 scanf("%c %s %d %f",&a ,b ,&c ,&d); 8 printf("Character = %c String = %s Integer = %d Float

= %f",a,b,c,d); 9 }

ผลลพธของโปรแกรม Enter Character String Integer and Float :a witchakorn 11

11.1111 Character = a String = witchakorn Integer = 11 Float = 11.1111

อธบายโปรแกรม

บรรทดท 6 แสดงขอมล Enter Character String Integer and Float :

บรรทดท 7 รบคาตวอกษร สตรง เลขจานวนเตม เลขทศนยม โดยใหผ ใชปอนคา ซงตองเวนวรรคเมอปอนหนงคา และกด Enter เมอปอนครบทกคาแลว

โปรแกรมตวอยางท 4.9 เปนโปรแกรมรบชอแลวแสดงคาพดทกทาย โปรแกรมนมขอเสยคอ เมอโปรแกรมทางานขนมา หนาจอจะปรากฏตวชตาแหนง (Cursor) กระพรบ ทาใหผใชไมทราบวา คอมพวเตอรรอคาจากคนใช หรอ คนใชรอใหคอมพวเตอรทางาน

ตวอยางท 4.10 โปรแกรมรบชอแลวแสดงคาพดทกทาย 1 #include <stdio.h> 2 void main(void) 3 { 4 char a[80+1]; 5 scanf("%80s",&a); 6 printf("Hi! %s",a); 7 }

ผลลพธของโปรแกรม Krit Somkantha //ปอนคาอนพต

Hi! Krit Somkantha

เพอแกปญหาในการเขยนโปรแกรมควรจะเพมประโยค printf( ) โดยจะเพมเขาไปกอนทจะใชคาสง scanf( ) เพอเปนการบอกแกผใชวา ขณะนคอมพวเตอรรอรบคาจากผใช

Page 136: การเขียนโปรแกรมคอมพิวเตอร ์portal5.udru.ac.th/ebook/pdf/upload/17P88t2O788B98583682.pdfรูปภาพบางส่วนให

บทท 4 ชนดของขอมล ตวแปร คาคงท และการรบและแสดงผลขอมล

116

ตวอยางท 4.11 โปรแกรมรบชอแลวแสดงคาพดทกทาย 1 #include <stdio.h> 2 void main(void) 3 { 4 char a[80+1]; 5 printf("Input your name : "); 6 scanf("%80s",&a); 7 printf("Hi! %s",a); 8 }

ผลลพธของโปรแกรม Input your name : Krit Somkantha Hi! Krit Somkantha

4.4.2 การแสดงผลขอมลดวยฟงกชน printf()

ฟงกชนทใชในการแสดงผลขอมลออกทางจอภาพ คอ ฟงกชน printf (print

formatted) โดยมรปแบบการใชฟงกชนดงน

string_format คอสงทตองการแสดงผล ซงอาจเปนขอความทวๆ ไป ตวแทนชนดขอมลตามหรอเอสเคปซเควนซ

data_list คอขอมลทจะแสดงผล ซงอาจเปนคาคงท ตวแปร หรอนพจนใดๆ โดยมเครองหมายคอมมา (,) คนระหวางขอมล ซงจะจบคกบตวแทนชนดขอมลตามลาดบ

printf(“string_format”, data_list);

Page 137: การเขียนโปรแกรมคอมพิวเตอร ์portal5.udru.ac.th/ebook/pdf/upload/17P88t2O788B98583682.pdfรูปภาพบางส่วนให

บทท 4 ชนดของขอมล ตวแปร คาคงท และการรบและแสดงผลขอมล

117

ตวอยางท 4.12 โปรแกรมแสดงผลขอมลดวยฟงกชน printf

1 #include<stdio.h> 2 main(){ 3 int score1 = 80 ,score2 = 90; 4 printf("My name is Witchakorn\n"); 5 printf("GPA = %f\n" ,3.88); 6 printf("Score1 = %d\t Score2 = %d\n\a",score1

,score2+5); 7 }

ผลลพธของโปรแกรม My name is Witchakorn GPA = 3.880000 Score1 = 80 Score2 = 95

อธบายโปรแกรม

บรรทดท 4 เปนการแสดงขอความทวๆ ไป ซงกคอ My name is Witchakorn

แลวใหขนบรรทดใหม

บรรทดท 5 เปนการแสดงขอความทวๆ ไป ซงกคอ GPA = แลวตามดวยตวแทนชนดขอมลเลขทศนยม โดยจะนาคาคงท 3.88 มาแสดงผล แลวใหขนบรรทดใหม

บรรทดท 6 เปนการแสดงขอความทวๆ ไป ซงกคอ Score1 = แลวตามดวยตวแทนชนดขอมลจานวนเตม โดยจะนาคาตวแปรตวแรกมาแสดงผล ซงกคอ ตวแปร score1 ซงมคา 80 แลวตามดวยการกดแทบ และขอความทวๆ ไป ซงกคอ Score2 = แลวตามดวยตวแทนชนดขอมลจานวนเตม โดยจะนาคาของนพจน score2 + 5 ซงมคา 95 มาแสดงผล แลวใหขนบรรทดใหม และสงเสยง 1 ครง

Page 138: การเขียนโปรแกรมคอมพิวเตอร ์portal5.udru.ac.th/ebook/pdf/upload/17P88t2O788B98583682.pdfรูปภาพบางส่วนให

บทท 4 ชนดของขอมล ตวแปร คาคงท และการรบและแสดงผลขอมล

118

ในการแสดงผลขอมลดวยฟงกชน printf สามารถใสสวนขยายใหกบตวแทนชนดขอมลเพอแสดงผลลพธในตาแหนงตามตองการ ดงตวอยางท 4.13

ตวอยางท 4.13 โปรแกรมแสดงผลขอมลดวยฟงกชน printf โดยใสสวนขยายใหกบตวแทนชนดขอมล

1 #include<stdio.h> 2 main(){ 3 printf("%d\n" ,456); 4 printf("%7d\n" ,456); 5 printf("%07d\n" ,456); 6 printf("%f\n" ,456.55); 7 printf("%.4f\n" ,456.55); 8 printf("%11.4f\n" ,456.55); 9 printf("%-11.4f\n" ,456.55); 10 printf("%c\n",'A'); 11 printf("%11c\n",'A'); 12 printf("%s\n","AAAA"); 13 printf("%11s\n","AAAA"); 14 }

ผลลพธของโปรแกรม 456 456 0000456 456.550000 456.5500 456.5500 456.5500 A A AAAA AAAA

อธบายโปรแกรม

บรรทดท 3 ตวแทนชนดขอมลไมมสวนขยาย ดงนนจงแสดงผลขอมลจานวนเตมชดซาย

บรรทดท 4 ตวแทนชนดขอมลมสวนขยายคอ 7 ดงนนจงแสดงผลขอมลจานวนเตมตวสดทาย (ขวาสด) ทตาแหนงท 7

บรรทดท 5 ตวแทนชนดขอมลมสวนขยายคอ 07 ดงนนจงแสดงผลขอมลจานวนเตมตวสดทาย (ขวาสด) ทตาแหนงท 7 ซงถาจานวนเตมมไมถง 7

หลก จะเตม 0 เขาขางหนาตวเลขทตองการแสดงผลจนครบ 7 หลก

Page 139: การเขียนโปรแกรมคอมพิวเตอร ์portal5.udru.ac.th/ebook/pdf/upload/17P88t2O788B98583682.pdfรูปภาพบางส่วนให

บทท 4 ชนดของขอมล ตวแปร คาคงท และการรบและแสดงผลขอมล

119

บรรทดท 6 ตวแทนชนดขอมลไมมสวนขยาย ดงนนจงแสดงผลขอมลทศนยมชดซาย โดยแสดงเลขทศนยม 6 ตาแหนง

บรรทดท 7 ตวแทนชนดขอมลมสวนขยายคอ .4 ดงนนจงแสดงผลขอมลทศนยมชดซาย โดยแสดงเลขทศนยม 4 ตาแหนง

บรรทดท 8 ตวแทนชนดขอมลมสวนขยายคอ 11.4 ดงนนจงแสดงผลขอมลตวสดทาย (ขวาสด) ทตาแหนงท 11 โดยแสดงเลขทศนยม 4 ตาแหนง

บรรทดท 9 ตวแทนชนดขอมลมสวนขยายคอ -11.4 ดงนนจงแสดงผลขอมลทศนยมชดซาย โดยแสดงขอมลทงหมด 11 ตาแหนง ซงจะเปนเลขทศนยม 4 ตาแหนง ซงถามขอมลไมครบ 11 ตาแหนง (รวมจดทศนยม) กจะไมแสดงขอมลอะไรเพมเตม

บรรทดท 10 ตวแทนชนดขอมลไมมสวนขยาย ดงนนจงแสดงผลขอมลตวอกษรชดซาย

บรรทดท 11 ตวแทนชนดขอมลมสวนขยายคอ 11 ดงนนจงแสดงผลขอมลตวอกษรทตาแหนงท 11

บรรทดท 12 ตวแทนชนดขอมลไมมสวนขยาย ดงนนจงแสดงผลขอมลสตรงชดซาย

บรรทดท 13 ตวแทนชนดขอมลมสวนขยายคอ 11 ดงนนจงแสดงผลขอมลสตรงตวสดทาย (ขวาสด) ทตาแหนงท 11

ตวอยางท 4.14 โปรแกรมแสดงการคานวณพนทรปสามเหลยมโดยการรบฐาน และความสงของรปสามเหลยมผานทางคยบอรด และแสดงผลฐาน ความสง และพนทของรปสามเหลยมผานทางหนาจอ

1 #include<stdio.h> 2 main(){ 3 float base ,height ,area; 4 printf("Base of triangle : "); 5 scanf("%f",&base); 6 printf("\nHeight of triangle : "); 7 scanf("%f",&height); 8 area = 0.5 * base * height; 9 printf("*****************************************

************\n"); 10 printf("Base \t\tHeight \t\tArea"); 11 printf("\n%.2f \t\t%.2f \t\t%.2f\n",base ,height

,area); 12 }

Page 140: การเขียนโปรแกรมคอมพิวเตอร ์portal5.udru.ac.th/ebook/pdf/upload/17P88t2O788B98583682.pdfรูปภาพบางส่วนให

บทท 4 ชนดของขอมล ตวแปร คาคงท และการรบและแสดงผลขอมล

120

ผลลพธของโปรแกรม Base of triangle : 3.5 Height of triangle : 4 ************************************************************************************* Base Height Area 3.50 4.00 7.00

อธบายโปรแกรม

บรรทดท 4 แสดงขอความ “Base of triangle : ”

บรรทดท 5 รบคาฐานของรปสามเหลยมเปนเลขทศนยมไปเกบไวในตวแปร base

บรรทดท 5 ขนบรรทดใหม และแสดงขอความ “Height of triangle : ”

บรรทดท 6 รบคาความสงของรปสามเหลยมเปนเลขทศนยมไปเกบไวในตวแปร height

บรรทดท 8 คานวณพนทรปสามเหลยม

บรรทดท 9 ขนบรรทดใหม และแสดงขอความ

“*************************************”

บรรทดท 10 แสดงขอความ Base แลวเลอนไป 2 แทบ และแสดงขอความ

“Height” แลวเลอนไป 2 แทบ และแสดงขอความ “Area”

บรรทดท 11 แสดงคาฐานแลวเลอนไป 2 แทบ และคาความสง” แลวเลอนไป 2

แทบ และแสดงคาพนทของรปสามเหลยม โดยแตละคาแสดงทศนยม 2 ตาแหนง

4.4.3 การรบและแสดงผลขอมลดวยฟงกชน getchar() และ putchar()

ฟงกชน getchar() เปนฟงกชนทใชในการรบขอมลตวอกษร 1 ตวจากคยบอรด

ฟงกชน putchar() เปนฟงกชนทใชในการแสดงขอมลตวอกษร 1 ตวจากจอภาพ

Page 141: การเขียนโปรแกรมคอมพิวเตอร ์portal5.udru.ac.th/ebook/pdf/upload/17P88t2O788B98583682.pdfรูปภาพบางส่วนให

บทท 4 ชนดของขอมล ตวแปร คาคงท และการรบและแสดงผลขอมล

121

ตวอยางท 4.15 โปรแกรมแสดงการใชฟงกชน getchar() และ putchar()

1 #include<stdio.h> 2 main(){ 3 char a; 4 printf("Enter a value : "); 5 a = getchar(); 6 printf("\n You entered : "); 7 putchar(a); 8 }

ผลลพธของโปรแกรม Enter a value : A You entered : A

อธบายโปรแกรม

บรรทดท 5 รบตวอกษร 1 ตว ไปเกบไวในตวแปร a ไมวาจะพมพอกษรเขาไปทางคยบอรดกตวกตาม เมอกด Enter คาจะถกเกบไวในตวแปรเพยงตวแรกทพมพเทานน

บรรทดท 7 แสดงคาตวแปร a

4.4.4 การรบและแสดงผลขอมลแบบสตรงดวยฟงกชน gets() และ puts()

ฟงกชน gets() มาจากคาวา get string เปนฟงกชนทใชในการรบขอมลสตรงจากคยบอรดมาเกบไวในตวแปรชนดอารเรย โดยสามารถปอนชองวาง (space) ได โดยจะสนสดการรบขอมลสตรงเมอกด Enter ซงฟงกชน gets() นจะใส ‘\0’ (null string) ปดทายใหกบขอความ

ฟงกชน puts() มาจากคาวา put string เปนฟงกชนทใชแสดงขอมลสตรงออกทางจอภาพ

ตวอยางท 4.16 โปรแกรมแสดงการใชฟงกชน gets() และ puts()

1 #include<stdio.h> 2 main(){ 3 char name[50]; 4 printf("Enter a value : "); 5 gets(name); 6 printf("\nYou entered : "); 7 puts(name); 8 }

ผลลพธของโปรแกรม Enter a value : Dr.Krit Somkantha You entered : Dr.Krit Somkantha

Page 142: การเขียนโปรแกรมคอมพิวเตอร ์portal5.udru.ac.th/ebook/pdf/upload/17P88t2O788B98583682.pdfรูปภาพบางส่วนให

บทท 4 ชนดของขอมล ตวแปร คาคงท และการรบและแสดงผลขอมล

122

อธบายโปรแกรม

บรรทดท 5 รบคาสตรง ไปเกบไวในตวแปร name โดยสามารถรบคาชองวางได

จะหยดรบคาเมอกด Enter

บรรทดท 7 แสดงคาตวแปร name

Page 143: การเขียนโปรแกรมคอมพิวเตอร ์portal5.udru.ac.th/ebook/pdf/upload/17P88t2O788B98583682.pdfรูปภาพบางส่วนให

บทท 4 ชนดของขอมล ตวแปร คาคงท และการรบและแสดงผลขอมล

123

บทสรป

ในบทนไดกลาวถงชนดของขอมล ตวแปร คาคงท และการรบและแสดงผลขอมล ซงเปนพนฐานของการเขยนโปรแกรมภาษาซ ชนดของขอมลคอสงทใชกาหนดลกษณะของขอมล และกาหนดขอบเขตของขอมล ซงชนดของขอมลแตละชนดมลกษณะและขอบเขตของขอมลทแตกตางกนไป ในการเขยนโปรแกรมคอมพวเตอรจะตองมกาหนดชนดของขอมลใหกบคาตวแปรซงควรจะเหมาะสมกบชนดของขอมลทตองการเกบ เพอใหเกดความถกตองและประหยดเนอทหนวยความจาในการจดเกบ ตวแปร คอชอทกาหนดขนมา เพอใชเรยกสวนของหนวยความจาของคอมพวเตอรทใชเกบคาใดๆ ทสามารถเปลยนแปลงคาได ในการเขยนโปรแกรมคอมพวเตอรจะมการกระทากบขอมล ซงขอมลตางๆ ดงนนในการเขยนโปรแกรมคอมพวเตอรใหสามารถรบขอมลเขามา ประมวลผลขอมล และแสดงผลขอมล จะใชตวแปรเขามาชวยในการทางาน ซงแตกตางจากภาษาระดบตาทตองอางองหนวยความจา ในโปรแกรมภาษาระดบสงเมอมการสรางตวแปรขนมากจะเกดการจองพนทหนวยความจาโดยอตโนมต โดยทผ เขยนโปรแกรมไมจาเปนตองรวาตวแปรทสรางขนมาใชหนวยความจาตาแหนงไหน ซงการอางชอตวแปรในทนกเปรยบเสมอนการอางตาแหนงในหนวยความจานนเอง คาคงท คอคาของขอมลทแนนอน ไมสามารถเปลยนแปลงคาไดในขณะทโปรแกรมทางาน ตวแปรคาคงทคอตวแปรทกาหนดคาไดครงเดยว และคานนจะคงเดมจนจบโปรแกรม

มกใชเกบคาคงทสาหรบการคานวณเชน คา pi, คา e, จานวนชวโมงในหนงวน เปนตน คาคงทมหลายชนดเชนคาคงทชนดจานวนเตม คาคงทชนดเลขทศนยม และคาคงทชนดตวอกษรเปนตน การรบและแสดงผลขอมลเปนการกระทาเกยวกบขอมลตางๆ ซงขอมลทไดมาจากแหลงใดในบทนแสดงตวอยางของการรบและแสดงผลขอมลพนฐานของภาษาซ ดงเชนการรบขอมลดวยฟงกชน scanf() การแสดงผลขอมลดวยฟงกชน printf() การรบและแสดงผลขอมลดวยฟงกชน getchar() และ putchar() การรบและแสดงผลขอมลแบบสตรงดวยฟงกชน gets()

และ puts() เปนตน

Page 144: การเขียนโปรแกรมคอมพิวเตอร ์portal5.udru.ac.th/ebook/pdf/upload/17P88t2O788B98583682.pdfรูปภาพบางส่วนให

บทท 4 ชนดของขอมล ตวแปร คาคงท และการรบและแสดงผลขอมล

124

แบบฝกหดทบทวน

1. ชนดขอมลคออะไร แบงออกเปนกชนดอะไรบาง 2. ตวแปรคออะไร มวธการประกาศคาตวแปรอยางไร 3. จงอธบายความแตกตางระหวางตวแปรแบบโกลบอล และตวแปรแบบโลคอล พรอมทงยกตวอยางประกอบ

4. คาคงทคออะไร มวธการกาหนดคาคงทอยางไร 5. จงพจารณาชอตวแปรตอไปน แลวบอกวาชอตวแปรแตละตวตงชอถกตองตามกฎการตงชอหรอไมอยางไร

a. password

b. password1

c. PASSWORD

d. Pass_Word

e. _Password

f. 1password

g. switch

h. pass word

i. pass@word

j. #password

6. จงหาผลลพธของโปรแกรมตอไปน

1 #include<stdio.h> 2 main(){ 3 char var = ‘P’; 4 var = var – 5; 5 printf(“Variable = %c\n”, var); 6 }

Page 145: การเขียนโปรแกรมคอมพิวเตอร ์portal5.udru.ac.th/ebook/pdf/upload/17P88t2O788B98583682.pdfรูปภาพบางส่วนให

บทท 4 ชนดของขอมล ตวแปร คาคงท และการรบและแสดงผลขอมล

125

7. จงหาผลลพธของโปรแกรมตอไปน

1 2 3 4 5 6 7 8 9 10 11 12

#include<stdio.h> main(){ char a = ‘P’ ,d; int b = 10 ,e; float c = 10.5 ,f; d = a + b + c; e = a + b + c; f = a + b + c; printf(“Result = %c\n” ,d); printf(“Result = %d\n” ,e); printf(“Result = %f\n” ,f); }

8. จงหาผลลพธของโปรแกรมตอไปน main_test.c

1 2 3 4 5 6

#include <stdio.h> #include "write_test.c" float a=44.44; main(){ write(); }

write_test.c

1 2 3 4 5

#include <stdio.h> extern float a; write(){ printf("a = %f\n", a); }

9. จงหาผลลพธของโปรแกรมตอไปน

1 #include<stdio.h> 2 main(){ 3 printf("%d\n" ,1234); 4 printf("%7d\n" ,1234); 5 printf("%07d\n" ,1234); 6 printf("%f\n" ,1234.56); 7 printf("%.2f\n" ,1234.56); 8 printf("%c\n",'A'); 9 printf("%10c\n",'A'); 10 printf("%s\n","ABCD"); 11 printf("%10s\n","ABCD"); 12 }

Page 146: การเขียนโปรแกรมคอมพิวเตอร ์portal5.udru.ac.th/ebook/pdf/upload/17P88t2O788B98583682.pdfรูปภาพบางส่วนให

บทท 4 ชนดของขอมล ตวแปร คาคงท และการรบและแสดงผลขอมล

126

10. จงหาผลลพธของโปรแกรมตอไปน

1 #include <stdio.h> 2 void main(void) 3 { 4 printf("%c\n",'A'); 5 printf("%i\n",'A'); 6 printf("%o\n",'A'); 7 printf("%x\n\n",'A'); 8 9 printf("%c\n",97); 10 printf("%i\n",97); 11 printf("%o\n",97); 12 printf("%x\n\n",97); 13 14 printf("%c\n",45678u); 15 printf("%u\n",45678u); 16 printf("%o\n",45678u); 17 printf("%x\n\n",45678u); 18 19 printf("%c\n",2147483514l); 20 printf("%li\n",2147483514l); 21 printf("%lo\n",2147483514l); 22 printf("%lx\n\n",2147483514l); 23 }

11. จงหาผลลพธของโปรแกรมตอไปน

1 #include <stdio.h> 2 void main(void) 3 { 4 printf("%f\n",321.123456789f); 5 printf("%e\n\n",321.0123456789f); 6 7 printf("%lf\n",-112.345678901234567890e60); 8 printf("%le\n\n",-112.345678901234567890e60); 9 10 printf("%Lf\n",-112.345678901234567890e360L); 11 printf("%Le\n\n",-112.345678901234567890e360L); 12 }

Page 147: การเขียนโปรแกรมคอมพิวเตอร ์portal5.udru.ac.th/ebook/pdf/upload/17P88t2O788B98583682.pdfรูปภาพบางส่วนให

บทท 4 ชนดของขอมล ตวแปร คาคงท และการรบและแสดงผลขอมล

127

12. จงเขยนโปรแกรมเพอคานวณหาผลรวมและคาเฉลยของคะแนนของนกศกษา 3 วชา โดยใหผ ใชปอนขอมลคะแนนทง 3 วชาทางคยบอรด และแสดงผลรวมและคาเฉลยผานทางจอภาพ

ตวอยางหนาจอโปรแกรม คอ

13. จงเขยนโปรแกรมเพอคานวณหาพนทของวงกลมโดยรบคารศมของวงกลมทางคยบอรด

จากนนใหแสดงรศม และพนทของวงกลมออกทางหนาจอ 14. จงเขยนโปรแกรมเพอใหสามารถรบคายอดซอของลกคาทางคยบอรด แลวคานวณสวนลด

และราคาหลงหกสวนลด จากนนใหแสดงยอดซอ สวนลด และ ราคาหลงหกสวนลดผานทางจอภาพ

โดย สวนลด = ยอดซอ * 10 /100

ราคาหลงหกสวนลด = ยอดซอ – สวนลด

Input score : 76 99 87

sum = 262 average = 87.00

Page 148: การเขียนโปรแกรมคอมพิวเตอร ์portal5.udru.ac.th/ebook/pdf/upload/17P88t2O788B98583682.pdfรูปภาพบางส่วนให

บทท 5 การดาเนนการในภาษาซ

บทท 5

การดาเนนการในภาษาซ

ในบทนจะกลาวถงตวดาเนนการ (Operator) ตวดาเนนการทางคณตศาสตร (Arithmetic Operators) ตวดาเนนการทางตรรกะ (Logical Operators) ตวดาเนนการเชงสมพนธ (Relational Operators) ตวดาเนนการระดบบต (Bitwise Operators) ตวดาเนนการกาหนดคา (Assignment Operator) ตวดาเนนการเงอนไข (Condition Operators) ลาดบการทางาน (Precedence) ในการเขยนโปรแกรมจะมการดาเนนการระหวางขอมลหรอตวแปรตางๆ เพอทาการประมวลผลใหไดผลลพธทตองการ ดงนนในการเขยนโปรแกรมจาเปนตองศกษาการดาเนนการตางๆ ในภาษาซ ซงจะทาใหสามารถเขยนโปรแกรมไดอยางถกตองและมประสทธภาพ ในการดาเนนการมองคประกอบทสาคญคอตวดาเนนการซงมกจะนามาใชรวมกบนพจนในรปแบบตางๆ ซงตวดาเนนการเมอนาไปใชกบนพจนกจะทาใหเกดการประมวลผลตางๆ ตวดาเนนการทใชในการประมวลผลขอมลในภาษาซมหลากหลายชนด ซงแตละชนดจะมลาดบความสาคญ และลาดบการทางานแตกตางกน ดงนนจงควรจะเขาใจขนตอนการประมวลผลขอมลดวยตวดาเนนการตางๆ เพอสามารถเลอกใชตวดาเนนการตางๆ ไดอยางถกตองและเหมาะสม

5.1 ตวดาเนนการ (Operator)

ตวดาเนนการคอเครองหมายทใชประมวลผลขอมล ซงอาจเปนการดาเนนการทางคณตศาสตร การดาเนนการทางตรรกศาสตร หรอการดาเนนการดานอนๆ ตวดาเนนการมหลายประเภท ในการศกษาตวดาเนนการในภาษาซจะมสงทจาเปนตองรคอ

Page 149: การเขียนโปรแกรมคอมพิวเตอร ์portal5.udru.ac.th/ebook/pdf/upload/17P88t2O788B98583682.pdfรูปภาพบางส่วนให

บทท 5 การดาเนนการในภาษาซ

130

ตวถกดาเนนการ (Operand) คอตวถกกระทา ซงอาจเปนคาคงท นพจน ฟงกชน หรอตวแปรใดๆ กได

นพจน (Expression) คอการนาเอาตวดาเนนการ และตวถกดาเนนการมาสรางความสมพนธกน ดงเชนนพจนทางคณตศาสตรคอ 2X

2 และนพจนในภาษาซ คอ 2*(x*x)

ยนาร (Unary) คอตวดาเนนการทใชตวถกดาเนนการเพยงตวเดยวในการประมวลผล เชน ~a ,a++ เปนตน

ไบนาร (Binary) คอตวดาเนนการทใชตวถกดาเนนการสองตวในการประมวลผล เชน

a + b , a || b เปนตน

เทอนาร (Ternary) คอตวดาเนนการทใชตวถกดาเนนการสามตวในการประมวลผล เชน a ? b : c เปนตน

ตวดาเนนการมหลากหลายประเภทดงเชนตวดาเนนการทางคณตศาสตร (Arithmetic

Operators) ตวดาเนนการทางตรรกะ (Logical Operators) ตวดาเนนการเชงสมพนธ (Relational Operators) ตวดาเนนการระดบบต (Bitwise Operators) ตวดาเนนการกาหนดคา (Assignment Operator) และตวดาเนนการเงอนไข (Condition Operators) เปนตน ตวดาเนนการเมอนาไปใชกบนพจนจะทาใหเกดพจนในรปแบบตางๆ เพอทจะนาไปใชประมวลผล

5.2 ตวดาเนนการทางคณตศาสตร (Arithmetic Operators)

ตวดาเนนการทางคณตศาสตรหมายถงการนาคาตวถกดาเนนการมาประมวลผลตามชนดของตวดาเนนการทางคณตศาสตร ซงตวดาเนนการทางคณตศาสตรดงแสดงในตารางท

5.1 ซงจะแสดงตวอยางโดยการกาหนดตวแปร a และตวแปร b ใหมคาเทากบ 10 และ 6

ตามลาดบ

Page 150: การเขียนโปรแกรมคอมพิวเตอร ์portal5.udru.ac.th/ebook/pdf/upload/17P88t2O788B98583682.pdfรูปภาพบางส่วนให

บทท 5 การดาเนนการในภาษาซ

131

ตารางท 5.1 ตวดาเนนการทางคณตศาสตร

ตวดาเนนการ ความหมาย ตวอยาง ผลลพธ + บวก a+b 16

- ลบ a-b 4

* คณ a*b 60

/ หาร a/b 1

% หารเอาเศษ a%b 4

++ ++a หมายถงการบวกคาของ a ดวย 1 กอน แลวจงนาคา a ไปใช

c=++a c = 11 ,a = 11

a++ หมายถงการนาคาของ a ไปใชกอน แลวจงนา a ไปบวกดวย 1

c = a++ c = 10 ,a = 11

-- --a หมายถงการลบคาของ a ดวย 1 กอน แลวจงนาคา a ไปใช

c = --a c = 9 ,a = 9

a-- หมายถงการนาคาของ a ไปใชกอน แลวจงนา a

ไปลบดวย 1

c = a-- c = 10 ,a = 9

Page 151: การเขียนโปรแกรมคอมพิวเตอร ์portal5.udru.ac.th/ebook/pdf/upload/17P88t2O788B98583682.pdfรูปภาพบางส่วนให

บทท 5 การดาเนนการในภาษาซ

132

ตวอยางท 5.1 โปรแกรมแสดงการดาเนนการทางคณตศาสตร

1 #include<stdio.h> 2 main(){ 3 int a=10,b=6,c; 4 printf("a = %d, b = %d\n" ,a,b); 5 printf("a + b = %d\n" ,a + b); 6 printf("a - b = %d\n" ,a - b); 7 printf("a * b = %d\n" ,a * b); 8 printf("a / b = %d\n" ,a / b); 9 printf("a % b = %d\n" ,a % b); 10 c = ++a; 11 printf("c = ++a, c = %d a = %d\n" ,c ,a); 12 c = a++; 13 printf("c = a++, c = %d a = %d\n" ,c ,a); 14 c = --a; 15 printf("c = --a, c = %d a = %d\n" ,c ,a); 16 c = a--; 17 printf("c = a--, c = %d a = %d\n" ,c ,a); 18 }

ผลลพธของโปรแกรม a = 10, b =6 a + b = 16 a - b = 4 a * b = 60 a / b = 1 a % b = 4 c = ++a, c = 11 a =11 c = a++, c = 11 a =12 c = --a, c = 11 a = 11 c = a--, c = 11 a = 10

อธบายโปรแกรม

บรรทดท 5 เปนการแสดงผลลพธของ a + b

บรรทดท 6 เปนการแสดงผลลพธของ a - b

บรรทดท 7 เปนการแสดงผลลพธของ a * b

บรรทดท 8 เปนการแสดงผลลพธของ a / b

บรรทดท 9 เปนการแสดงผลลพธของ a % b

บรรทดท 10 สงให a บวก 1 แลวให c เทากบ a

บรรทดท 12 สงให c เทากบ a แลวให a บวก 1

บรรทดท 14 สงให a ลบ 1 แลวให c เทากบ a

บรรทดท 16 สงให c เทากบ a แลวให a ลบ 1

Page 152: การเขียนโปรแกรมคอมพิวเตอร ์portal5.udru.ac.th/ebook/pdf/upload/17P88t2O788B98583682.pdfรูปภาพบางส่วนให

บทท 5 การดาเนนการในภาษาซ

133

ตวดาเนนการทางคณตศาสตรเราสามารถจาแนกออกเปน 4 กลมใหญ คอ ตวดาเนนการทางคณตศาสตรจานวนเตม (Integer Arithmetic Operator) ตวดาเนนการทางคณตศาสตรทศนยม (Floating Point Arithmetic Operator) ตวดาเนนการกาหนดคาทางคณตศาสตร (Arithmetic Assignment Operator) และตวดาเนนการทางคณตศาสตรเพมคาลดคา (Increment and Decrement Operator)

5.2.1 ตวดาเนนการทางคณตศาสตรจานวนเตม (Integer Arithmetic Operator)

ตวดาเนนการทางคณตศาสตรจานวนเตมเปนตวดาเนนการทางคณตศาสตรทเปนเลขจานวนเตมทใชกบตวถกดาเนนการทเปนเลขจานวนเตมและไดผลลพธเปนเลขจานวนเตม

ดงตวอยางทแสดงในตารางท 5.2

ตารางท 5.2 ตวดาเนนการทางคณตศาสตรจานวนเตม

ชอ เครองหมาย ตวอยางการใช

ความหมาย ผลลพธ

บวก (Add)

+ 1 + 2 หนงบวกสอง 3

ลบ

(Sub) - 1 – 2 หนงลบสอง -1

คณ

(Multiply) * 1 * 2 หนงคณสอง 2

หาร (Division)

/ 3 / 2 สามหารสอง 1 (ตอบเฉพาะจานวนเตม)

%

(Modulus) % 1 % 2 เศษจากหนงหารสอง 1

Page 153: การเขียนโปรแกรมคอมพิวเตอร ์portal5.udru.ac.th/ebook/pdf/upload/17P88t2O788B98583682.pdfรูปภาพบางส่วนให

บทท 5 การดาเนนการในภาษาซ

134

ตวอยางท 5.2 โปรแกรมแสดงการดาเนนการทางคณตศาสตรทเปนเลขจานวนเตม

1 #include <stdio.h> 2 main() 3 { 4 printf("%i\n",1 + 2); 5 printf("%i\n",2 - 3); 6 printf("%i\n",3 * 4); 7 printf("%i\n",4 / 5); 8 printf("%i\n",6 % 7); 9 }

ผลลพธของโปรแกรม 3 -1 12 0 6

อธบายโปรแกรม

บรรทดท 4 เปนการบวกคาแลวแสดงผล บรรทดท 5 เปนการลบคาแลวแสดงผล บรรทดท 6 เปนการคณคาแลวแสดงผล บรรทดท 7 เปนการหารคาแลวแสดงผลซงจะได 0.8 แตในผลลพธจะแสดงคา 0

เพราะเปนเลขจานวนเตม

บรรทดท 8 เปนการหารเอาเศษแลวแสดงผล

5.2.2 ตวดาเนนการทางคณตศาสตรทศนยม (Floating Point Arithmetic Operator)

ตวดาเนนการทางคณตศาสตรทศนยมเปนตวดาเนนการทใชกบตวถกกระทาเลขทศนยมและไดผลลพธเปนเลขทศนยม ดงตวอยางทแสดงในตารางท 5.3

ตารางท 5.3 ตวดาเนนการทางคณตศาสตรทศนยม

ชอ เครองหมาย ตวอยางการใช ความหมาย ผลลพธ บวก (Add) + 1.0 + 2.0 หนงบวกสอง 3.0

ลบ (Sub) - 1.0 – 2.0 หนงลบสอง -1.0

คณ (Multiply) * 1.0 * 2.0 หนงคณสอง 2.0

หาร (Division) / 1.0 / 2.0 หนงหารสอง 0.5

Page 154: การเขียนโปรแกรมคอมพิวเตอร ์portal5.udru.ac.th/ebook/pdf/upload/17P88t2O788B98583682.pdfรูปภาพบางส่วนให

บทท 5 การดาเนนการในภาษาซ

135

ตวอยางท 5.3 โปรแกรมแสดงการดาเนนการทางคณตศาสตรทเปนเลขทศนยม

1 #include <stdio.h> 2 main() 3 { 4 printf("%f\n",1.0f + 2.0f); 5 printf("%f\n",2.0f - 3.0f); 6 printf("%f\n",3.0f * 4.0f); 7 printf("%f\n",4.0f / 5.0f); 8 }

ผลลพธของโปรแกรม 3.000000 -1.000000 12.000000 0.800000

อธบายโปรแกรม

บรรทดท 4 เปนการบวกคาของเลขทศนยมแลวแสดงผล บรรทดท 5 เปนการลบคาของเลขทศนยมแลวแสดงผล บรรทดท 6 เปนการคณคาของเลขทศนยมแลวแสดงผล บรรทดท 7 เปนการหารคาของเลขทศนยมแลวแสดงผล

5.2.3 ตวดาเนนการกาหนดคาทางคณตศาสตร (Arithmetic Assignment Operator)

ตวดาเนนการกาหนดคาทางคณตศาสตรเปนการกาหนดคาทางคณตศาสตร ในประโยคกาหนดคาประโยคหนง หากมตวแปรตวหนงปรากฏในดานซายและขวาของเครองหมายเทากบ ประโยคนนกอาจถกเปลยนไปใชตวดาเนนการกาหนดคาทางคณตศาสตร ดงตวอยางทแสดงในตารางท 5.4

Page 155: การเขียนโปรแกรมคอมพิวเตอร ์portal5.udru.ac.th/ebook/pdf/upload/17P88t2O788B98583682.pdfรูปภาพบางส่วนให

บทท 5 การดาเนนการในภาษาซ

136

ตารางท 5.4 ตวดาเนนการกาหนดคาทางคณตศาสตร คาเรมตน เครองหมาย ตวอยางการใช ความหมาย ผลลพธ

p = 3 += p += 5 p = p + 5 8

p = 3 -= p -= 5 p = p - 5 -2

p = 3 *= p *= 5 p = p * 5 15

p = 3 /= p /= 5 p = p / 5 0

q = 1.0 += p += 2.5 p = p + 2.5 3.5

q = 1.0 -= p -= 2.5 p = p - 2.5 -1.5

q = 1.0 *= p *= 2.5 p = p * 2.5 2.5

q = 1.0 /= p /= 2.5 p = p / 2.5 0.4

ตวอยางท 5.4 โปรแกรมแสดงตวดาเนนการกาหนดคาทางคณตศาสตร 1 #include <stdio.h> 2 3 main() 4 { 5 int x = 1; 6 x += 1; printf("%i\n",x); /* x = x + 1 */ 7 x *= 2; printf("%i\n",x); /* x = x * 2 */ 8 x -= 3; printf("%i\n",x); /* x = x – 3 */ 9 x /= 4; printf("%i\n",x); /* x = x / 4 */ 10 11 float y = 1.0f; 12 y += 1.0f; printf("%f\n",y);/* y = y + 1.0f */ 13 y *= 2.0f; printf("%f\n",y);/* y = y * 2.0f */ 14 y -= 3.0f; printf("%f\n",y);/* y = y – 3.0f */ 15 y /= 4.0f; printf("%f\n",y);/* y = y / 4.0f */ 16 }

ผลลพธของโปรแกรม 2 4 1 0 2.000000 4.000000 1.000000 0.250000

Page 156: การเขียนโปรแกรมคอมพิวเตอร ์portal5.udru.ac.th/ebook/pdf/upload/17P88t2O788B98583682.pdfรูปภาพบางส่วนให

บทท 5 การดาเนนการในภาษาซ

137

อธบายโปรแกรม

บรรทดท 6 เปนการกาหนดคาทางคณตศาสตรโดยการบวกของเลขจานวนเตม

บรรทดท 7 เปนการกาหนดคาทางคณตศาสตรโดยการลบของเลขจานวนเตม

บรรทดท 8 เปนการกาหนดคาทางคณตศาสตรโดยการคณของเลขจานวนเตม

บรรทดท 9 เปนการกาหนดคาทางคณตศาสตรโดยการหารของเลขจานวนเตม

บรรทดท 12 เปนการกาหนดคาทางคณตศาสตรโดยการบวกของเลขทศนยม

บรรทดท 13 เปนการกาหนดคาทางคณตศาสตรโดยการลบของเลขทศนยม

บรรทดท 14 เปนการกาหนดคาทางคณตศาสตรโดยการคณของเลขทศนยม

บรรทดท 15 เปนการกาหนดคาทางคณตศาสตรโดยการหารของเลขทศนยม

จะเหนไดวาการเขยนโปรแกรมดวยการใชตวดาเนนการกาหนดคาทางคณตศาสตรในลกษณะนนนทาใหเขาใจโปรแกรมไดยาก แตขอดของการกาหนดคาในลกษณะนคอโปรแกรมจะทางานไดเรวขน เนองจากการคนหาตาแหนงของตวแปรในหนวยความจาของประโยค ดงเชน x += 1 ทาเพยงครงเดยวในขณะท x = x +1 ทาสองครง

5.2.4 ตวดาเนนการทางคณตศาสตรเพมคาและลดคา (Increment and Decrement

Operator)

ตวดาเนนการทางคณตศาสตรเพมคาและลดคาคอการเพมคาและการลดคาของตวแปรตางๆ เชนถาหากมการเพมคาของตวแปรขนหนง เชน x = x +1 อาจถกเปลยนเปน ++x

หรอ x++ และหากมประโยคทลดคาตวแปรลงหนงเชน x = x – 1 กอาจถกเปลยนเปน - - x

หรอ x - - ตวดาเนนการทางคณตศาสตรเพมคาและลดคาสามารถใชไดสองรปแบบคอ

แบบเตมหนา (Prefix) คอมเครองหมาย ++ หรอ - - นาหนาเชน - - x, ++x

แบบเตมหลง (Postfix) คอมเครองหมาย ++ หรอ - - ตามหลงเชน x- -, x++

กรณทเปนประโยคเดยวเชน x++ หรอ ++x จะใหความหมายเหมอนกน แตถามการใชกบคาอนๆ จะใหผลลพธทแตกตางกน โดยถาเปนแบบเตมหนาจะทาการประมวลผลเครองหมาย ++,- - กอน แตถาเปนแบบเตมหลงจะทาการประมวลผลเครองหมาย ++, - - ทหลง ดงตวอยางทแสดงในตารางท 5.5

Page 157: การเขียนโปรแกรมคอมพิวเตอร ์portal5.udru.ac.th/ebook/pdf/upload/17P88t2O788B98583682.pdfรูปภาพบางส่วนให

บทท 5 การดาเนนการในภาษาซ

138

ตารางท 5.5 ตวดาเนนการทางคณตศาสตรเพมคาและลดคา คาเรมตน เครองหมาย ตวอยางการใช ขนตอนการทางาน ผลลพธ p = 3

q= 7

++ a = ++p + q p = p + 1

a = p + q

p = 4

q = 7

a = 11

p = 3

q= 7

++ a = (p++) + q a = p + q

p = p + 1

p = 4

q = 7

a = 10

p = 3

q= 7

++ a = (p++) + (++q) q = q + 1

a = p + q

p = p + 1

p = 4

q = 8

a = 11

p = 3

q= 7

- - a = - -p + q p = p - 1

a = p + q

p = 2

q = 7

a = 9

p = 3

q= 7

- - a = (p- -) + q a = p + q

p = p - 1

p = 2

q = 7

a = 10

p = 3

q= 7

- - a = (p- -) + (- -q) q = q - 1

a = p + q

p = p - 1

p = 2

q = 6

a = 9

p = 3

q= 7

- - a = (p- -) + (+ +q) q = q - 1

a = p + q

p = p - 1

p = 2

q = 8

a = 11

Page 158: การเขียนโปรแกรมคอมพิวเตอร ์portal5.udru.ac.th/ebook/pdf/upload/17P88t2O788B98583682.pdfรูปภาพบางส่วนให

บทท 5 การดาเนนการในภาษาซ

139

ตวอยางท 5.5 โปรแกรมแสดงตวดาเนนการทางคณตศาสตรเพมคาและลดคา

1 #include <stdio.h> 2 main() 3 { 4 int x = 1; int y = 1; 5 x++; ++y; 6 printf("x=%i y=%i\n",x,y); 7 x--; --y; 8 printf("x=%i y=%i\n",x,y); 9 }

ผลลพธของโปรแกรม x=2 y=2 x=1 y=1

อธบายโปรแกรม

บรรทดท 5 เปนการดาเนนการทางคณตศาสตรโดยการเพมคา เครองหมายสวนเพม (Increment) ถกใชแบบประโยคเดยว ดงนนเราสามารถเปลยนบรรทดนเปน ++x; y++; ผลลพธกยงคงใหผลลพธเดม

บรรทดท 7 เปนการดาเนนการทางคณตศาสตรโดยการลบคา เครองหมายสวนลด (Decrement) ถกใชแบบประโยคเดยว ดงนนเราสามารถเปลยนบรรทดนเปน --x; --y; ผลลพธกยงคงใหผลลพธเดม

ตวอยางท 5.6 โปรแกรมแสดงตวดาเนนการทางคณตศาสตรเพมคาและลดคา

1 #include <stdio.h> 2 3 main() 4 { 5 int a,b; 6 int x = 1; int y = 1; 7 a = x++; b = ++y; 8 printf("x=%i y=%i\n",x,y); 9 printf("a=%i b=%i\n",a,b); 10 a = x--; b = --y; 11 printf("x=%i y=%i\n",x,y); 12 printf("a=%i b=%i\n",a,b); 13 }

ผลลพธของโปรแกรม x=2 y = 2 a=1 b=2 x=1 y = 1 a=2 b=1

Page 159: การเขียนโปรแกรมคอมพิวเตอร ์portal5.udru.ac.th/ebook/pdf/upload/17P88t2O788B98583682.pdfรูปภาพบางส่วนให

บทท 5 การดาเนนการในภาษาซ

140

อธบายโปรแกรม

บรรทดท 7 เปนการดาเนนการทางคณตศาสตรโดยการเพมคา เครองหมายสวนเพม ถกใช รวมกบประโยคอน ดงนน ลาดบเครองหมายจงมความสาคญ a = x++; หมายความวาใหตวแปร a เกบคา x กอนแลวคอยทาการเพมคา x ทหลง และ b = ++y; หมายความวาใหทาการเพมคา y กอน แลวคอยสงคาใหตวแปร b

บรรทดท 10 เปนการดาเนนการทางคณตศาสตรโดยการลบคา เครองหมายสวนเพม ถกใช รวมกบประโยคอน ดงนน ลาดบเครองหมายจงมความสาคญ a = x--; หมายความวาใหตวแปร a เกบคา x กอนแลวคอยทาการลดคา x ทหลง และ b = --y; หมายความวาใหลดคา y

กอน แลวคอยสงคาใหกบตวแปร b

สาเหตทตองมการเขยน x = x + 1 ในรปของ x++ (หรอ ++x) และ x = x - 1 ในรปของ x-- (หรอ -- x) เนองจากหนวยประมวลผลจะมภาษาแอสเซมบลของแตหนวยประมวลผล ทสงใหบวกคาขนหนง (INC) และคาสงลดคาลงหนง (DEC) ดงนนการเขยนประโยค ++ หรอ -- จงเสมอนกบการเขยนภาษาเครองโดยตรงทาใหโปรแกรมมขนาดเลกลง ความเรวในการทางานสงขนและเขยนโปรแกรมสนลง

5.2.5 ลาดบการทางานของตวดาเนนการ คอการเรยงลาดบการทางานตามความสาคญของชนดของตวดาเนนการ โดยตว

ดาเนนการทมความสาคญมากกวาตวดาเนนการอนๆ ทอยในนพจนเดยวกนจะถกประมวลผลกอน แตถามตวดาเนนการทมความสาคญเทากนจะประมวลผลจากซายไปขวา ยกเวนตวดาเนนการ ++ และตวดาเนนการ -- ทจะประมวลผลจากขวาไปซาย โดยลาดบของความสาคญของตวดาเนนการสามารถแสดงไดดงตารางท 5.6 ซงแสดงใหเหนวา เครองหมายวงเลบมความสาคญเปนลาดบแรก ในขณะทเครองหมายบวก และเครองหมายลบมความสาคญเปนลาดบสดทาย

Page 160: การเขียนโปรแกรมคอมพิวเตอร ์portal5.udru.ac.th/ebook/pdf/upload/17P88t2O788B98583682.pdfรูปภาพบางส่วนให

บทท 5 การดาเนนการในภาษาซ

141

ตารางท 5.6 ลาดบความสาคญของตวดาเนนการ ลาดบความสาคญ ตวดาเนนการ

1 ()

2 ++ ,--

3 - (เครองหมายลบหนาตวเลข) 4 * ,/ ,%

5 + ,-

ตวอยางท 5.7 จงหาคาของนพจน 2 + 3 * 4 – 5

วธทา 2 + 3 * 4 – 5 เครองหมาย * มความสาคญสงกวาเครองหมาย + , –

ดงนนจงประมวลผลกอน

2 + 12 – 5 เครองหมาย + มความสาคญเทากบเครองหมาย – แตอยดานซายสดจงประมวลผลกอนเครองหมาย –

14 – 5 เครองหมาย – ประมวลผลเปนลาดบสดทาย 9

ตวอยางท 5.8 จงหาคาของนพจน 2 + 3 * 4 – 5 % ( 6 / 3 )

วธทา 2 + 3 * 4 – 5 % ( 6 / 3 ) เครองหมาย () มความสาคญสงสด ดงนนจงทาในวงเลบกอน

2 + 3 * 4 – 5 % 2 เครองหมาย * มความสาคญเทากบเครองหมาย % แตอยดานซายจงประมวลผลกอนเครองหมาย /

2 + 12 – 5 % 2 เครองหมาย % มความสาคญสงกวาเครองหมาย + , –

ดงนนจงประมวลผลกอน

2 + 12 – 1 เครองหมาย + มความสาคญเทากบเครองหมาย – แตอยดานซายสดจงประมวลผลกอนเครองหมาย –

14 – 1 เครองหมาย – ประมวลผลเปนลาดบสดทาย 13

Page 161: การเขียนโปรแกรมคอมพิวเตอร ์portal5.udru.ac.th/ebook/pdf/upload/17P88t2O788B98583682.pdfรูปภาพบางส่วนให

บทท 5 การดาเนนการในภาษาซ

142

5.2.6 การแปลงชนดขอมล ชนดขอมลของตวถกดาเนนการในนพจนใดๆ จะตองเปนชนดขอมลเดยวกน ดงนนถาตวถกดาเนนการมชนดขอมลแตกตางกน จะตองทาการแปลงใหเปนขอมลชนดเดยวกนกอน

แลวจงทาการประมวลผล ซงการแปลงชนดขอมลม 2 แบบ คอ

1. ตวแปลภาษาหรอคอมไพเลอรทาการแปลง (Implicit Type Conversion) คอคอมไพเลอรจะทาการแปลงชนดขอมลทมนยสาคญตาไปเปนชนดขอมลทมนยสาคญสงสดในนพจนใดๆ และถานพจนใดทมเครองหมายเทากบ (=) จะดาเนนการทางขวามอของเครองหมายเทากบกอน แลวจงแปลงชนดขอมลทางขวามอของเครองหมายเทากบใหเหมอนกบชนดขอมลทางซายมอของเครองหมายเทากบ โดยนยสาคญของตวถกดาเนนการสามารถแสดงไดดงตารางท 5.7 ซงแสดงใหเหนวา ชนดขอมลแบบ “long double” มนยสาคญสงสด ในขณะทชนดขอมลแบบ “char” มนยสาคญตาสด ตวอยางของการแปลงขอมลและชนดขอมลสดทายทไดจากการคานวณเชน

Data type of expression Final data type

char + float float

int – long long

int * double double

float / long double long double

การเปลยนขอมลลกษณะนจะรบประกนความถกตองของขอมลวาจะไมมการสญหายของขอมลเพราะเปนการแปลงชนดขอมลจากขนาดเลกไปเปนขนาดใหญ เรยกการแปลงชนดขอมลจากเลกไปใหญวา

Page 162: การเขียนโปรแกรมคอมพิวเตอร ์portal5.udru.ac.th/ebook/pdf/upload/17P88t2O788B98583682.pdfรูปภาพบางส่วนให

บทท 5 การดาเนนการในภาษาซ

143

ตารางท 5.7 ลาดบนยสาคญของตวถกดาเนนการ ลาดบนยสาคญ ชนดขอมล

1 long double

2 double

3 float

4 unsigned long int

5 long int

6 unsigned int

7 int

8 short

9 char

ตวอยางท 5.9 โปรแกรมแสดงการแปลงชนดขอมลโดยคอมไพเลอร

1 #include<stdio.h> 2 main(){ 3 char a = 'K'; 4 int b = 5 ,d; 5 float c = 10.00; 6 d = a + b * c; 7 printf(“d = %d\n” , d); 8 printf("a + b * c = %f\n" , a + b * c); 9 printf("(a + b)* c = %f\n" , (a + b) * c); 10 }

ผลลพธของโปรแกรม d = 125 a + b * c = 125.000000 (a + b) * c = 800.000000

บรรทดท 6 ทาการคานวณคาระหวางขอมลชนดตวอกษร จานวนเตม และทศนยม จากนนแปลงผลลพธใหเปนชนดขอมลเดยวกบชนดขอมลของตวแปร d ซงกคอ จานวนเตมนนเอง

บรรทดท 8 - 9 ทาการคานวณคาระหวางขอมลชนดตวอกษร จานวนเตม และทศนยม ซงผลลพธทไดจะเปนขอมลชนดทมนยสาคญสงสด ซงกคอขอมลทศนยมนนเอง

Page 163: การเขียนโปรแกรมคอมพิวเตอร ์portal5.udru.ac.th/ebook/pdf/upload/17P88t2O788B98583682.pdfรูปภาพบางส่วนให

บทท 5 การดาเนนการในภาษาซ

144

2. ผ เขยนโปรแกรมทาการแปลง (Explicit Type Conversion) คอผ เขยนโปรแกรมจะทาการแปลงชนดขอมลไปเปนชนดขอมลทตองการ มกเรยกวา “Casting” โดยมรปแบบการแปลงชนดขอมลดงน

ดงเชน

int a;

double b = 10.2;

a = (int)b;

หมายความวา แปลงคาทเกบใน b (คอ 10.2) ไปเปนจานวนเตม แลวเกบไวทตวแปร a

และ

int a;

a = (int)(12.5f / 3.2f);

หมายความวา แปลงคาผลลพธของเลขทศนยมไปเปนจานวนเตม แลวเกบไวทตวแปร a

ตวอยางท 5.10 โปรแกรมแสดงการแปลงชนดขอมลโดยผใช

1 #include<stdio.h> 2 main(){ 3 char a = 'K'; 4 int b = 5; 5 float c = 10.00; 6 printf("a + b * c = %d\n" , (int)(a + b * c)); 7 printf("(a + b)* c = %d\n" , (int)((a + b) *

c)); 8 }

ผลลพธของโปรแกรม a + b * c = 125 (a + b) * c = 800

(ชนดขอมลทตองการ)นพจนทตองการแปลงชนดขอมล

Page 164: การเขียนโปรแกรมคอมพิวเตอร ์portal5.udru.ac.th/ebook/pdf/upload/17P88t2O788B98583682.pdfรูปภาพบางส่วนให

บทท 5 การดาเนนการในภาษาซ

145

อธบายโปรแกรม

บรรทดท 6 - 7 ทาการคานวณคาระหวางขอมลชนดตวอกษร จานวนเตม และทศนยม ซงผลลพธทไดจะเปนขอมลชนดทมนยสาคญสงสด ซงกคอขอมลทศนยม แลวทาการแปลงชนดขอมลใหเปนจานวนเตม

5.3 ตวดาเนนการทางตรรกะ (Logical Operators)

ตวดาเนนการทางตรรกะหมายถงการพจารณาเชงเหตและผลทเกยวของกบคาตรรกะ 2 คา คอ จรง (True) และเทจ (False) โดยจะถอวาเลข 0 เปนคาเทจ และเลข 1 หรอเลขอนๆ เปนคาจรง ซงตวดาเนนการทางตรรกะแบงออกเปน 3 ชนด ดงตารางท 5.8 ซงจะแสดงตวอยางโดยการกาหนดตวแปร A และตวแปร B ใหมคาเทากบ 1 และ 0 ตามลาดบ โดยทวไปตวดาเนนการทางตรรกะมกนยมใชกบคาสงควบคม

ตารางท 5.8 ตวดาเนนการทางตรรกะ ตวดาเนนการ ความหมาย ตวอยาง ผลลพธ

&& และ (AND) คาตรรกะจะเปนจรงในกรณทตวถกดาเนนการทงคเปนจรง

A && B เทจ

|| หรอ (OR) คาตรรกะจะเปนจรงในกรณทตวถกดาเนนการตวใดตวหนงเปนจรง

A || B จรง

! นเสธ (NOT) คาตรรกะจะมคาตรงขามกบคาของตวถกดาเนนการ

!A เทจ

Page 165: การเขียนโปรแกรมคอมพิวเตอร ์portal5.udru.ac.th/ebook/pdf/upload/17P88t2O788B98583682.pdfรูปภาพบางส่วนให

บทท 5 การดาเนนการในภาษาซ

146

ตวอยางท 5.11 โปรแกรมแสดงการดาเนนการทางตรรกะ 1 #include <stdio.h> 2 main(){ 3 printf("1 && 1 = %d\n", 1 && 1); 4 printf("1 && 0 = %d\n", 1 && 0); 5 printf("0 && 1 = %d\n", 0 && 1); 6 printf("0 && 0 = %d\n", 0 && 0); 7 printf("1 || 1 = %d\n", 1 || 1); 8 printf("1 || 0 = %d\n", 1 || 0); 9 printf("0 || 1 = %d\n", 0 || 1); 10 printf("0 || 0 = %d\n", 0 || 0); 11 printf("!1 = %d\n", !1); 12 printf("!0 = %d\n", !0); 13 printf("(2+3*4) && 0 = %d\n", (2+3*4) && 0); 14 printf("(2+3*4) || 0 = %d\n", (2+3*4) || 0); 15 printf("!((2+3*4) && 0) = %d\n", !((2+3*4) && 0)); 16 printf("!(2+3*4) || 0) = %d\n", !((2+3*4) || 0)); 17 }

ผลลพธของโปรแกรม 1 && 1 = 1 1 && 0 = 0 0 && 1 = 0 0 && 0 = 0 1 || 1 = 1 1 || 0 = 1 0 || 1 = 1 0 || 0 = 0 !1 = 0 !0 = 1 (2+3*4) && 0 = 0 (2+3*4) || 0 = 1 !((2+3*4) && 0) = 1 !((2+3*4) || 0) = 0

อธบายโปรแกรม

บรรทดท 13 ผลลพธของ 2+3*4 = 14 ดงนน 14 && 0 เทากบ 0

บรรทดท 14 ผลลพธของ 2+3*4 = 14 ดงนน 14 || 0 เทากบ 1

บรรทดท 15 ผลลพธของ 14 && 0 เทากบ 0 ดงนน นเสธของ 0 เทากบ 1

บรรทดท 16 ผลลพธของ 14 || 0 เทากบ 1 ดงนน นเสธของ 1 เทากบ 0

Page 166: การเขียนโปรแกรมคอมพิวเตอร ์portal5.udru.ac.th/ebook/pdf/upload/17P88t2O788B98583682.pdfรูปภาพบางส่วนให

บทท 5 การดาเนนการในภาษาซ

147

ตวอยางท 5.12 ตวอยางการใชงานตวดาเนนการทางตรรกะ คาเรมตน ตวอยางการใชงาน ความหมาย ผลลพธ a = 1

b = ‘B’

(a==1) && (b==‘B’) ตวแปร a มคาเทากบหนง และ ตวแปร b มคาเทากบอกษร B จรงหรอไม

จรง

a = 1

b = ‘B’

(a<=1) || (b!=‘B’) ตวแปร a มคานอยกวาหรอเทากบหนง หรอ

ตวแปร b มคาไมเทากบอกษร B จรงหรอไม จรง

a = 1

b = ‘B’

(a>1) || (‘A’>‘B’) ตวแปร a มคามากกวาหนง หรอ

อกษร A (มคา 65) มคามากกวาอกษร B (มคา 66) จรงหรอไม เทจ

ตวอยางท 5.13 โปรแกรมแสดงการดาเนนการทางตรรกะ 1 #include <stdio.h> 2 3 main() 4 { 5 int x=1, y=-1; 6 printf("%i\n",(x<0) && (y<0)); /* Is x < 0 and y < 0 ? */ 7 printf("%i\n",(x<0) || (y<0)); /* Is x < 0 or y < 0 ? */ 8 printf("%i\n",!(x<0)); /* Isn’t x < 0 ? */ 9 }

ผลลพธของโปรแกรม 0 1 1

อธบายโปรแกรม

บรรทดท 6 เปรยบเทยบ 1 < 0 เปนเทจ และ -1 < 0 เปนจรง เงอนไขใดเงอนไขหนงเปนเทจถอวาเปนเทจดงนนจงแสดง 0

บรรทดท 7 เปรยบเทยบ 1 < 0 เปนเทจ หรอ -1 < 0 เปนจรง เงอนไขใดเงอนไขหนงเปนจรงถอวาเปนจรงดงนนจงแสดง 1

บรรทดท 8 เปรยบเทยบ 1 < 0 เปนเทจ ไดผลลพธเปน 0 แต มนเสธ (NOT) คาตรรกะจะมคาตรงขามกบคาของตวถกดาเนนการดงนนผลลพธจงกลายเปน 1

Page 167: การเขียนโปรแกรมคอมพิวเตอร ์portal5.udru.ac.th/ebook/pdf/upload/17P88t2O788B98583682.pdfรูปภาพบางส่วนให

บทท 5 การดาเนนการในภาษาซ

148

5.4 ตวดาเนนการเชงสมพนธ (Relational Operators)

ตวดาเนนการเชงสมพนธหมายถงการพจารณาความสมพนธของขอมลของตวถกดาเนนการ ซงเปนไปได 2 คา คอ จรง (True) และเทจ (False) โดยจะถอวาเลข 0 เปนคาเทจ และเลข 1 หรอเลขอนๆ เปนคาจรง ซงตวดาเนนการเชงสมพนธแบงออกเปน 6 ชนด ดงตารางท 5.9 ซงจะแสดงตวอยางโดยการกาหนดตวแปร A และตวแปร B ใหมคาเทากบ 10 และ 5

ตามลาดบ โดยทวไปมกใชตวดาเนนการเชงสมพนธกบโครงสรางโปรแกรมแบบตรวจสอบเงอนไข

ตารางท 5.9 ตวดาเนนการเชงสมพนธ ตวดาเนนการ ความหมาย ตวอยาง ผลลพธ

== ต ร ว จ ส อ บ ว า ค า ข อ ง ต ว ถ กดาเนนการมคาเทากนหรอไม ถาเทากนแสดงวา เ ปนจรง ถาไมแสดงวาเปนเทจ

A == B เทจ

!= ต ร ว จ ส อ บ ว า ค า ข อ ง ต ว ถ กดาเนนการมคาเทากนหรอไม ถาเทากนแสดงวา เ ปนเทจ ถาไมแสดงวาเปนจรง

A != B จรง

> ต ร ว จ ส อ บ ว า ค า ข อ ง ต ว ถ กดาเนนการดานซายมคามากกวาคาของตวถกดาเนนการดานขวาหรอไม ถาใชแสดงวาเปนจรง ถาไมแสดงวาเปนเทจ

A > B จรง

< ต ร ว จ ส อ บ ว า ค า ข อ ง ต ว ถ กดาเนนการดานซายมคานอยกวาคาของตวถกดาเนนการดานขวาหรอไม ถาใชแสดงวาเปนจรง ถาไมแสดงวาเปนเทจ

A < B เทจ

Page 168: การเขียนโปรแกรมคอมพิวเตอร ์portal5.udru.ac.th/ebook/pdf/upload/17P88t2O788B98583682.pdfรูปภาพบางส่วนให

บทท 5 การดาเนนการในภาษาซ

149

ตวดาเนนการ ความหมาย ตวอยาง ผลลพธ >= ต ร ว จ ส อ บ ว า ค า ข อ ง ต ว ถ ก

ดาเนนการดานซายมคามากกวาห ร อ เ ท า ก บ ค า ข อ ง ต ว ถ กดาเนนการดานขวาหรอไม ถาใชแสดงวาเปนจรง ถาไมแสดงวาเปนเทจ

A >= B จรง

<= ต ร ว จ ส อ บ ว า ค า ข อ ง ต ว ถ กดาเนนการดานซายมคานอยกวาห ร อ เ ท า ก บ ค า ข อ ง ต ว ถ กดาเนนการดานขวาหรอไม ถาใชแสดงวาเปนจรง ถาไมแสดงวาเปนเทจ

A <= B เทจ

ตวอยางท 5.14 ตวอยางการดาเนนการเชงสมพนธ

ตวอยางการใช ความหมาย ผลลพธ 1 = = 2 หนงเทากบสองจรงหรอไม ไมจรง (เทจ) 1 ! = 2 หนงไมเทากบสองจรงหรอไม จรง 1 < 1 หนงนอยกวาหนงจรงหรอไม ไมจรง (เทจ) 1 <= 1 หนงนอยกวาหรอเทากบหนงจรงหรอไม จรง 1 > 1 หนงมากกวาหนงจรงหรอไม ไมจรง (เทจ) 1 >= 1 หนงมากกวาหรอเทากบหนงจรงหรอไม จรง

Page 169: การเขียนโปรแกรมคอมพิวเตอร ์portal5.udru.ac.th/ebook/pdf/upload/17P88t2O788B98583682.pdfรูปภาพบางส่วนให

บทท 5 การดาเนนการในภาษาซ

150

ตวอยางท 5.15 โปรแกรมแสดงการดาเนนการเชงสมพนธ

1 #include <stdio.h> 2 main(){ 3 printf("10 == 5 is %d\n", 10 == 5); 4 printf("10 != 5 is %d\n", 10 != 5); 5 printf("10 > 5 is %d\n", 10 > 5); 6 printf("10 < 5 is %d\n", 10 < 5); 7 printf("10 >= 5 is %d\n", 10 >= 5); 8 printf("10 <= 5 is %d\n", 10 <= 5); 9 printf("(2+3*4)==((2+3)*4) is %d\n", (2+3*4)==

((2+3)*4)); 10 }

ผลลพธของโปรแกรม 10 == 5 is 0 10 != 5 is 1 10 > 5 is 1 10 < 5 is 0 10 >= 5 is 1 10 <= 5 is 0 (2+3*4) == ((2+3)*4) is 0

อธบายโปรแกรม

บรรทดท 9 ผลลพธของ 2+3*4 คอ 14 สวนผลลพธของ (2+3)*4 คอ 20 ดงนน

(2+3*4) == ((2+3)*4) จงเปนเทจ ซงมคาเทากบ 0

ตวอยางท 5.16 โปรแกรมแสดงการดาเนนการเชงสมพนธ

1 #include <stdio.h> 2 3 main() 4 { 5 int a=1,b=2; 6 7 printf("a=%i b=%i\n",a,b); 8 printf("a==a is %i\n",a==a); 9 printf("a!=a is %i\n",a!=a); 10 printf("a<b is %i\n",a<b); 11 printf("a>b is %i\n",a>b); 12 printf("a<=b is %i\n",a<=b); 13 printf("a>=b is %i\n",a>=b); 14 }

ผลลพธของโปรแกรม a=1 b=2 a==a is 1 a!=a is 0 a<b is 1 a>b is 0

Page 170: การเขียนโปรแกรมคอมพิวเตอร ์portal5.udru.ac.th/ebook/pdf/upload/17P88t2O788B98583682.pdfรูปภาพบางส่วนให

บทท 5 การดาเนนการในภาษาซ

151

a<=b is 1 a>=b is 0

อธบายโปรแกรม

บรรทดท 8 เปรยบเทยบ 1 เทากบ 1 จรงหรอเทจ ซงไดแสดงผลลพธเปนจรง บรรทดท 9 เปรยบเทยบ 1 ไมเทากบ 1 จรงหรอเทจ ซงไดแสดงผลลพธเปนเทจ บรรทดท 10 เปรยบเทยบ 1 นอยกวา 2 จรงหรอเทจ ซงไดแสดงผลลพธเปนจรง บรรทดท 11 เปรยบเทยบ 1 มากกวา 2 จรงหรอเทจ ซงไดแสดงผลลพธเปนเทจ บรรทดท 12 เปรยบเทยบ 1 นอยกวาหรอเทากบ 2 จรงหรอเทจ ซงไดแสดงผล

ลพธเปนจรง บรรทดท 13 เปรยบเทยบ 1 มากกวาหรอเทากบ 2 จรงหรอเทจ ซงไดแสดงผล

ลพธเปนเทจ

5.5 ตวดาเนนการระดบบต (Bitwise Operators)

ตวดาเนนการระดบบตหมายถงการแปลงตวถกดาเนนการใหเปนเลขฐานสองกอนแลวจงนาคาแตละบตของตวถกดาเนนการมาประมวลผลดวยตวดาเนนการ ซงตวดาเนนการระดบบตแบงออกเปน 6 ชนด ดงตารางท 5.10 ตวถกดาเนนการทจะถกคานวณโดยตวดาเนนการระดบบตจะถกตความเปนเลขฐานสองกอนแลวคอยทาการคานวณ ซงจะใชไดกบขอมลประเภทจานวนเตม

ตารางท 5.10 ตวดาเนนการระดบบต

ตวดาเนนการ ความหมาย & Bitwise AND

| Bitwise OR

^ Bitwise XOR

~ Bitwise NOT

>> Right Shift

<< Left Shift

Page 171: การเขียนโปรแกรมคอมพิวเตอร ์portal5.udru.ac.th/ebook/pdf/upload/17P88t2O788B98583682.pdfรูปภาพบางส่วนให

บทท 5 การดาเนนการในภาษาซ

152

ผลลพธของตวดาเนนการระดบบต & ,| ,^ ,~ สามารถแสดงไดดงตารางท 5.11

ตารางท 5.11 ผลลพธของตวดาเนนการระดบบต & ,| ,^ ,~

A B A & B A | B A ^ B ~A

1 1 1 1 0 0

1 0 0 1 1 0

0 1 0 1 1 1

0 0 0 0 0 1

“Left Shift” คอ การเลอนบตไปทางซายสวนทางขวามอสดใหเตมศนยไปหนงตวผลลพธทไดคอการคณสองคาเรมตน ในขณะท “Right shift” คอการเลอนบตไปทางขวามอสวนทางซายมอสดกเพมศนยไปอกตวหนงผลลพธทไดคอการ หาร 2 คาเรมตน (ผลหารทไดปดเศษลงเสมอ) แสดงตวอยางดงรป 5.1

รปท 5.1 แสดงการเลอนบตทางซายและการเลอนบตทางขวา

เหตผลทมการใชตวดาเนนการระดบบตเนองมาจากการคานวณระดบบตเปนการคานวณในเลขฐานสอง ซงสอดคลองกบลกษณะการทางานของคอมพวเตอร จงทาใหคาสงทใชตวดาเนนการระดบบตทางานไดเรวเมอเปรยบเทยบกบตวดาเนนการทางคณตศาสตรอนๆ อกทงในหนวยประมวลผลมคาสงสาหรบกระทาระดบบตโดยตรง ทาใหการใชงานเทยบเทากบคาสงภาษาเครอง สงผลใหโปรแกรมทางานไดเรว นกเขยนโปรแกรมทมประสบการณมกใชตว ดาเนนการระดบบตในการคานวณบางอยางทตองการความเรวสง และประหยดหนวยความจา

Page 172: การเขียนโปรแกรมคอมพิวเตอร ์portal5.udru.ac.th/ebook/pdf/upload/17P88t2O788B98583682.pdfรูปภาพบางส่วนให

บทท 5 การดาเนนการในภาษาซ

153

ถากาหนดให a = 17 และ b = 28 และใหตวเลขตอไปนใชหนวยความจา 8 บต

ผลลพธจากการคานวณดวยตวกระทาระดบบตตางๆ แสดงดงในตารางท 5.12

ตารางท 5.12 ตวอยางการดาเนนการระดบบต

เครองหมาย ตวอยาง การใช

ขนตอนการทางาน ผลลพธ

& a & b 17 = 0001 0001 28 = 0001 1100 17 & 28 = 0001 0000

0001 0000 = 16

| a | b 17 = 0001 0001 28 = 0001 1100 17 | 28 = 0001 1101

0001 1101 = 29

^ a ^ b 17 = 0001 0001 28 = 0001 1100 17 ^ 28 = 0000 1101

0000 1101 = 13

<< a << 2 17 = 0001 0001 Left Shift first = 0010 0010 Left Shift second = 0100 0100

0100 0100 = 68

>> a >> 2 17 = 0001 0001 Right Shift first = 0000 1000 Right Shift second = 0000 0100

0000 0100 = 4

~ ~a 17 = 0001 0001 ~17 = 1110 1110

1110 1110 = -18

ตวอยางท 5.17 กาหนดให A = 45, B = 54 จงหาผลลพธตอไปน

1. A & B

2. A | B

3. A ^ B

4. ~A

5. A >> 2

6. A << 2

วธทา 45 เขยนในรปของบต คอ 0010 1101

54 เขยนในรปของบต คอ 0011 0110

A = 45 0010 1101

B = 54 0011 0110

A & B 0010 0100

เพราะฉะนน A & B คอ 36

Page 173: การเขียนโปรแกรมคอมพิวเตอร ์portal5.udru.ac.th/ebook/pdf/upload/17P88t2O788B98583682.pdfรูปภาพบางส่วนให

บทท 5 การดาเนนการในภาษาซ

154

A = 45 0010 1101

B = 54 0011 0110

A | B 0011 1111

เพราะฉะนน A | B คอ 63

A = 45 0010 1101

B = 54 0011 0110

A ^ B 0001 1011

เพราะฉะนน A ^ B คอ 27

A = 45 0010 1101

~A 1101 0010

เพราะฉะนน ~A คอ -46

A 0010 1101

A >> 2 0000 1011 01

เพราะฉะนน A >> 2 คอ 11

A 0010 1101

A << 2 00 1011 0100

เพราะฉะนน A << 2 คอ 180

ตวอยางท 5.18 โปรแกรมแสดงการดาเนนการระดบบต

1 #include <stdio.h> 2 main(){ 3 printf("45 & 54 = %d\n", 45 & 54); 4 printf("45 | 54 = %d\n", 45 | 54); 5 printf("45 ^ 54 = %d\n", 45 ^ 54); 6 printf("~45 = %d\n", ~45); 7 printf("45 >> 2 = %d\n", 45 >> 2); 8 printf("45 << 2 = %d\n", 45 << 2); 9 }

ผลลพธของโปรแกรม 45 & 54 = 36 45 | 54 = 63 45 ^ 54 = 27 ~45 = -46 45 >> 2 = 11 45 << 2 = 180

Page 174: การเขียนโปรแกรมคอมพิวเตอร ์portal5.udru.ac.th/ebook/pdf/upload/17P88t2O788B98583682.pdfรูปภาพบางส่วนให

บทท 5 การดาเนนการในภาษาซ

155

อธบายโปรแกรม

บรรทดท 3 กระทาการแอนด (AND) กนระหวางคาสองคาแลวแสดงผล บรรทดท 4 กระทาการออร (OR) กนระหวางคาสองคาแลวแสดงผล บรรทดท 5 กระทาการเอกซคลซพออร (XOR) กนระหวางคาสองคาแลว

แสดงผล บรรทดท 6 กระทาการนอต (NOT) กนระหวางคาสองคาแลวแสดงผล บรรทดท 7 กระทาการเลอนบตไปทางขวา 2 บต (Right Shift) แลวแสดงผล บรรทดท 8 กระทาการเลอนบตไปทางซาย 2 บต (Left Shift) แลวแสดงผล

ในการดาเนนการระดบบตสามารถทาไดอกรปแบบคอใชการกาหนดคาตวถกดาเนนการระดบบต ทมการคนหาตาแหนงของตวแปรในหนวยความจาเพยงครงเดยว ทาใหสามารถทางานไดเรวกวาการดาเนนการระดบบตแบบทวไป ดงแสดงในตวอยางในตารางท

5.13

ตารางท 5.13 การกาหนดคาตวถกดาเนนการระดบบต

คาเรมตน เครองหมาย ตวอยางการใช ขนตอนการทางาน

ผลลพธ

a = 17 &= a &= 28 a = a & 28 16

a = 17 |= a |= 28 a = a | 28 28

a = 17 ^= a ^= 28 a = a ^ 28 13

a = 17 <<= a <<= 2 a = a << 2 16

a = 17 >>= a >>= 2 a = a >> 2 4

ตวอยางท 5.19 โปรแกรมแสดงการดาเนนการระดบบต

1 #include <stdio.h> 2 void main(void) 3 { 4 int a = 17; /* 10001 */ 5 a &= 48; printf("%i\n",a); 6 a |= 8; printf("%i\n",a); 7 a ^= 14; printf("%i\n",a); 8 a <<= 2; printf("%i\n",a); 9 a >>= 3; printf("%i\n",a); 10 }

Page 175: การเขียนโปรแกรมคอมพิวเตอร ์portal5.udru.ac.th/ebook/pdf/upload/17P88t2O788B98583682.pdfรูปภาพบางส่วนให

บทท 5 การดาเนนการในภาษาซ

156

ผลลพธของโปรแกรม 16 24 22 88 11

อธบายโปรแกรม

บรรทดท 5 กระทาการแอนด (AND) กนระหวางคาสองคาแลวแสดงผล บรรทดท 6 กระทาการออร (OR) กนระหวางคาสองคาแลวแสดงผล บรรทดท 7 กระทาการเอกซคลซพออร (XOR) กนระหวางคาสองคาแลว

แสดงผล บรรทดท 8 กระทาการเลอนบตไปทางซาย 2 บต (Left Shift) แลวแสดงผล

เชนเดยวกนกบ a = a << 2

บรรทดท 9 กระทาการเลอนบตไปทางขวา 3 บต (Right Shift) แลวแสดงผล เชนเดยวกนกบ a = a >> 3

5.6 ตวดาเนนการกาหนดคา (Assignment Operator)

ตวดาเนนการกาหนดคาหมายถงการกาหนดคาโดยใชเครองหมายเทากบ (=) โดยใหตวแปรซงเปนตวถกดาเนนการทอยดานซายของเครองหมายเทากบมคาเทากบคาทอยดานขวาของเครองหมายเทากบ ซงตวดาเนนการทใชในการกาหนดคาแบงออกเปน 11 ชนด

ดงตารางท 5.14

ตารางท 5.14 ตวดาเนนการกาหนดคา ตวดาเนนการ ความหมาย ตวอยาง

= กาหนดคาใหตวถกดาเนนการดานซายมคาเทากบคาของตวถกดาเนนการดานขวา

A = B + C หมายถง การกาหนดคาให A มคาเทากบ

B + C

+= กาหนดคาใหตวถกดาเนนการดานซายมคาเทากบคาของตวถกดาเนนการดานซายบวกดวยตวถกดาเนนการดานขวา

A += B หมายถง A = A +

B

Page 176: การเขียนโปรแกรมคอมพิวเตอร ์portal5.udru.ac.th/ebook/pdf/upload/17P88t2O788B98583682.pdfรูปภาพบางส่วนให

บทท 5 การดาเนนการในภาษาซ

157

ตวดาเนนการ ความหมาย ตวอยาง -= กาหนดคาใหตวถกดาเนนการดานซายมคา

เทากบคาของตวถกดาเนนการดานซายลบดวยตวถกดาเนนการดานขวา

A -= B หมายถง A = A – B

*= กาหนดคาใหตวถกดาเนนการดานซายมคาเทากบคาของตวถกดาเนนการดานซายคณดวยตวถกดาเนนการดานขวา

A *= B หมายถง A = A * B

/= กาหนดคาใหตวถกดาเนนการดานซายมคาเทากบคาของตวถกดาเนนการดานซายหารดวยตวถกดาเนนการดานขวา

A /= B หมายถง A = A / B

%= กาหนดคาใหตวถกดาเนนการดานซายมคาเทากบคาของตวถกดาเนนการดานซายหารเอาเศษดวยตวถกดาเนนการดานขวา

A %= B หมายถง A = A % B

&= กาหนดคาใหตวถกดาเนนการดานซายมคาเทากบตวถกดาเนนการดานซาย Bitwise

AND ตวถกดาเนนการดานขวา

A &= 2 หมายถง A = A & 2

|= กาหนดคาใหตวถกดาเนนการดานซายมคาเทากบตวถกดาเนนการดานซาย Bitwise

OR ตวถกดาเนนการดานขวา

A |= 2 หมายถง A = A |2

^= กาหนดคาใหตวถกดาเนนการดานซายมคาเทากบตวถกดาเนนการดานซาย Bitwise

XORตวถกดาเนนการดานขวา

A ^= 2 หมายถง A = A ^ 2

>>= กาหนดคาใหตวถกดาเนนการดานซายมคาเทากบตวถกดาเนนการเลอนบตไปดานขวา

A >>= 2 หมายถง A = A >> 2

<<= กาหนดคาใหตวถกดาเนนการดานซายมคาเทากบตวถกดาเนนการเลอนบตไปดานซาย

A >>= 2 หมายถง A = A >> 2

Page 177: การเขียนโปรแกรมคอมพิวเตอร ์portal5.udru.ac.th/ebook/pdf/upload/17P88t2O788B98583682.pdfรูปภาพบางส่วนให

บทท 5 การดาเนนการในภาษาซ

158

ตวอยางท 5.20 โปรแกรมแสดงการกาหนดคา

1 #include <stdio.h> 2 main(){ 3 int A = 45; 4 int B = 54; 5 printf("A += B is %d\n", A += B); 6 printf("A -= B is %d\n", A -= B); 7 printf("A *= B is %d\n", A *= B); 8 printf("A /= B is %d\n", A /= B); 9 printf("A %= B is %d\n", A %= B); 10 printf("A &= B is %d\n", A &= B); 11 printf("A |= B is %d\n", A |= B); 12 printf("A >>= 3 is %d\n", A >>= 3); 13 printf("A <<= 3 is %d\n", A <<= 3); 14 printf("A ^= B is %d\n", A ^= B); 15 }

ผลลพธของโปรแกรม A += B is 99 A -= B is 45 A *= B is 2430 A /= B is 45 A %= B is 45 A &= B is 36 A |= B is 54 A >>= 3 is 6 A <<= 3 is 48 A ^= B is 6

อธบายโปรแกรม

บรรทดท 5 กระทาการบวกระหวางสองคา แลวแสดงผล บรรทดท 6 กระทาการลบระหวางสองคา แลวแสดงผล บรรทดท 7 กระทาการคณระหวางสองคา แลวแสดงผล บรรทดท 8 กระทาการหารระหวางสองคา แลวแสดงผล บรรทดท 9 กระทาการหารเอาเศษระหวางสองคา แลวแสดงผล บรรทดท 10 กระทาการแอนดระหวางสองคา แลวแสดงผล บรรทดท 11 กระทาการออรระหวางสองคา แลวแสดงผล บรรทดท 12 กระทาการเลอนบตไปทางขวา 3 บต แลวแสดงผล บรรทดท 13 กระทาการเลอนบตไปทางซาย 3 บต แลวแสดงผล บรรทดท 14 กระทาการเอกซคลซพออร ระหวางคาสองคาแลวแสดงผล

Page 178: การเขียนโปรแกรมคอมพิวเตอร ์portal5.udru.ac.th/ebook/pdf/upload/17P88t2O788B98583682.pdfรูปภาพบางส่วนให

บทท 5 การดาเนนการในภาษาซ

159

5.7 ตวดาเนนการเงอนไข (Condition Operators)

ตวดาเนนการเงอนไขหมายถงตวดาเนนการทใชตรวจสอบเงอนไขของนพจน (?:) โดยจะตรวจสอบวานพจนท 1 มคาเปนจรงหรอเทจ ถาเปนจรงจะประมวลผลนพจนท 2 แตถาเปนเทจจะประมวลผลนพจนท 3 มรปแบบการตรวจสอบ ดงน

ตวอยางท 5.21 โปรแกรมแสดงการดาเนนการตรวจสอบเงอนไข

1 #include <stdio.h> 2 main(){ 3 int a = 10 ,b = 15; 4 (a > b) ? printf("%d > %d\n",a ,b) : printf("%d

> %d\n",b ,a); 5 }

ผลลพธของโปรแกรม 15 > 10

อธบายโปรแกรม

บรรทดท 4 เปนการใชตวดาเนนการตรวจสอบเงอนไข ถา a > b จรง ใหพมพ a

> b แตถาไมใชใหพมพ b > a

5.8 ลาดบการทางาน (Precedence)

ลาดบการทางานคอการเรยงลาดบการทางานตามความสาคญของชนดของตวดาเนนการ โดยตวดาเนนการทมความสาคญมากกวาตวดาเนนการอนๆ ทอยในนพจนเดยวกนจะถกประมวลผลกอน แตถามตวดาเนนการทมความสาคญเทากนจะประมวลผลตามทศทางการการคานวณ (Associativity) วาจากซายไปขวา (Left Associativity) หรอขวาไปซาย (Right Associativity) โดยทศทางการคานวณสามารถแสดงไดดงตารางท 5.15

นพจน1 ? นพจน2 : นพจน3

Page 179: การเขียนโปรแกรมคอมพิวเตอร ์portal5.udru.ac.th/ebook/pdf/upload/17P88t2O788B98583682.pdfรูปภาพบางส่วนให

บทท 5 การดาเนนการในภาษาซ

160

ตารางท 5.15 ทศทางการคานวณ

ประเภท ตวดาเนนการ ทศทางการคานวณ

ตวดาเนนการทางคณตศาสตร + ,- ,* ,/ ,% ซายไปขวา ตวดาเนนการทางตรรกะ && ,|| ซายไปขวา ตวดาเนนการเชงสมพนธ == ,!= , > ,< ,>= ,<= ซายไปขวา ตวดาเนนการระดบบต & ,| , ^ , >> ,<< ซายไปขวา ยนาร ++ ,-- ,! ,~ ,+ ,- ขวาไปซาย การกาหนดคาตวแปร = ,+= ,-= ,*= ,/= ,%= , &= ,|=

,^= ,>>= ,<<=

ขวาไปซาย

ตว ด า เ น น ก า รต ร ว จสอบเงอนไข

?: ขวาไปซาย

ตวอยางท 5.22 โปรแกรมแสดงทศทางการคานวณ

1 #include <stdio.h> 2 void main(void){ 3 printf("(2+3*4) && 0 || 1 = %d\n", (2+3*4) && 0 || 1); 4 printf("15 >> 3 << 2 = %d\n", 15 >> 3 << 2); 5 printf("10 == 5 != 3 is %d\n", 10 == 5 != 3); 6 printf("45 & 54 | 10 = %d\n", 45 & 54 | 10); 7 }

ผลลพธของโปรแกรม (2+3*4) && 0 || 1 =1 15 >> 3 << 2 =4 10 == 5 != 3 is 1 45 & 54 | 10 =46

อธบายโปรแกรม

บรรทดท 3 คานวณคาในวงเลบ (2+3*4) = 14 แลวนา 14 && 0 จะได 0 แลวนา 0 || 1 จะได 1

บรรทดท 4 นา 15 มาเลอนบตไปทางขวา 3 จะได 1 แลวเลอนบตไปทางซาย 2

จะได 4

บรรทดท 5 10 == 5 จะได 0 แลวนา 0 != 3 จะได 1

บรรทดท 6 นา 45 & 54 จะได 36 แลวนา 36 | 10 จะได 46

Page 180: การเขียนโปรแกรมคอมพิวเตอร ์portal5.udru.ac.th/ebook/pdf/upload/17P88t2O788B98583682.pdfรูปภาพบางส่วนให

บทท 5 การดาเนนการในภาษาซ

161

บทสรป

ในบทนไดกลาวถงตวดาเนนการ ตวดาเนนการทางคณตศาสตร ตวดาเนนการทางตรรกะ ตวดาเนนการเชงสมพนธ ตวดาเนนการระดบบต ตวดาเนนการกาหนดคา ตวดาเนนการเงอนไข ลาดบการทางาน ซงเปนพนฐานของการดาเนนการตางๆ ในการเขยนโปรแกรมภาษาซ ในการดาเนนการมองคประกอบทสาคญคอตวดาเนนการตางๆ ทมอยหลากหลายชนด แตละชนดกเหมาะสาหรบการประมวลผลในแตละรปแบบ ตวดาเนนการคอเครองหมายทใชประมวลผลขอมล ซงอาจเปนการดาเนนการทางคณตศาสตร การดาเนนการทางตรรกศาสตร หรอการดาเนนการดานอนๆ ตวดาเนนการทางคณตศาสตรหมายถงการนาคาตวถกดาเนนการมาประมวลผลตามชนดของตวดาเนนการทางคณตศาสตร ซงตวดาเนนการทางคณตศาสตรสามารถจาแนกออกเปน 4 กลมใหญ คอ ตวดาเนนการทางคณตศาสตรจานวนเตม ตวดาเนนการทางคณตศาสตรทศนยม ตวดาเนนการกาหนดคาทางคณตศาสตร และตวดาเนนการทางคณตศาสตรเพมคาลดคา ตวดาเนนการทางตรรกะหมายถงการพจารณาเชงเหตและผลทเกยวของกบคาตรรกะ 2 คา คอ จรง (True) และเทจ (False) โดยจะถอวาเลข 0 เปนคาเทจ และเลข 1 หรอเลขอนๆ เปนคาจรง ซงตวดาเนนการทางตรรกะสามารถแบงออกเปน 3 ชนด ตวดาเนนการเชงสมพนธหมายถงการพจารณาความสมพนธของขอมลของตวถกดาเนนการ ซงเปนไปได 2 คา คอ จรง (True) และเทจ (False) โดยจะถอวาเลข 0 เปนคาเทจ และเลข 1 หรอเลขอนๆ เปนคาจรง ซงตวดาเนนการเชงสมพนธแบงออกเปน 6 ชนด ตวดาเนนการระดบบตหมายถงการแปลงตวถกดาเนนการใหเปนเลขฐานสองกอนแลวจงนาคาแตละบตของตวถกดาเนนการมาประมวลผลดวยตวดาเนนการ ซงตวดาเนนการระดบบตแบงออกเปน 6 ชนด ตวดาเนนการกาหนดคาหมายถงการกาหนดคาโดยใชเครองหมายเทากบ (=) โดยใหตวแปรซงเปนตวถกดาเนนการทอยดานซายของเครองหมายเทากบมคาเทากบคาทอยดานขวาของเครองหมายเทากบ ซงตวดาเนนการทใชในการกาหนดคาสามารถแบงออกเปน 11 ชนด ตวดาเนนการเงอนไขหมายถงตวดาเนนการทใชตรวจสอบเงอนไขของนพจน ลาดบการทางานคอการเรยงลาดบการทางานตามความสาคญของชนดของตวดาเนนการ โดยตวดาเนนการทมความสาคญมากกวาตวดาเนนการอนๆ ทอยในนพจนเดยวกนจะถกประมวลผลกอน แตถามตวดาเนนการทมความสาคญเทากนจะประมวลผลตามทศทางการการคานวณ

Page 181: การเขียนโปรแกรมคอมพิวเตอร ์portal5.udru.ac.th/ebook/pdf/upload/17P88t2O788B98583682.pdfรูปภาพบางส่วนให

บทท 5 การดาเนนการในภาษาซ

162

แบบฝกหดทบทวน

1. ตวดาเนนการคออะไร จงอธบาย และมอะไรบาง 2. ตวถกดาเนนการคออะไร จงอธบาย พรอมทงยกตวอยาง 3. นพจนคออะไร จงอธบาย พรอมทงยกตวอยาง 4. จงหาคาของนพจนตอไปน

1. 2 + 3 * 4 -15 /5

2. (4 + 5 – (2 + 3)) * 5 % 6

3. 10 /5 * 2 + 3 % 5

4. 15 ^ 3

5. 15 & 3

6. 15 | 3

7. ~15

8. 15 >> 3 << 3

5. จงหาคาของ a เมอ a = 8 ,b = 4

1. a += b

2. a -=b

3. a*=b

4. a/=b

5. a %=b

6. จงหาคาของนพจนตอไปน

1. (20 >= 10) && (20 <= 10)

2. (10 != 1) && 0

3. (2 + 3 * 4) || 1

4. !(!1 || !0)

Page 182: การเขียนโปรแกรมคอมพิวเตอร ์portal5.udru.ac.th/ebook/pdf/upload/17P88t2O788B98583682.pdfรูปภาพบางส่วนให

บทท 5 การดาเนนการในภาษาซ

163

7. จงหาผลลพธของโปรแกรมตอไปน

1 #include<stdio.h> 2 main(){ 3 int a = 2 ,b = 5 ,c; 4 c = (a++) + (++b); 5 printf("a = %d b = %d c = %d\n",a,b,c); 6 c = (--a) + (b--); 7 printf("a = %d b = %d c = %d\n",a,b,c); 8 c = c - a-- + b; 9 printf("a = %d b = %d c = %d\n",a,b,c); 10 c = c + ++a - b; 11 printf("a = %d b = %d c = %d\n",a,b,c); 12 }

8. จงหาผลลพธของโปรแกรมตอไปน

1 #include<stdio.h> 2 main(){ 3 char a = 'W'; 4 int b = 15 ,d; 5 float c = 5.00; 6 d = a + b * c /11; 7 printf("d = %d\n" , d); 8 printf("a + b * c / 11 = %f\n",a + b * c /11); 9 printf("(a + b)* c /11 = %f\n",(a + b) * c /11); 10 printf("a + b * c /11 = %d\n",(int)(a + b * c/11));11 }

9. จงเตมคาลงในตารางใหถกตอง คาเรมตน การใชงาน ขนตอนการทางาน ผลลพธ p = 3

q= 7

a = - - p + (++q) p =

q =

a =

p = 3

q= 7

a = (- -p) – (++q) p =

q =

a =

p = 3

q= 7

a = (++p) + (q++) p =

q =

a =

Page 183: การเขียนโปรแกรมคอมพิวเตอร ์portal5.udru.ac.th/ebook/pdf/upload/17P88t2O788B98583682.pdfรูปภาพบางส่วนให

บทท 5 การดาเนนการในภาษาซ

164

คาเรมตน การใชงาน ขนตอนการทางาน ผลลพธ p = 3

q= 7

a = p++ * q p =

q =

a =

p = 3

q= 7

a = (p- -) / q p =

q =

a =

p = 3

q= 7

a = (q- -) % (- -p) p =

q =

a =

10. จงเตมคาลงในตารางใหถกตอง คาเรมตน ตวอยางการใชงาน ความหมาย ผลลพธ a = 1

b = ‘B’

(a!=1) || (b!=‘B’)

a = 1

b = ‘B’

(a>1) && (b==‘B’)

a = 1

b = ‘B’

(a<1) || (‘A’==‘B’)

11. จงเขยนผลลพธของโปรแกรมพรอมทงอธบายการทางานของโปรแกรม

1 #include <stdio.h> 2 void main(void) 3 { 4 int a = 1; 5 printf("%i\n",a++); 6 printf("%i\n",a); 7 printf("%i\n",++a); 8 printf("%i\n",a); 9 }

Page 184: การเขียนโปรแกรมคอมพิวเตอร ์portal5.udru.ac.th/ebook/pdf/upload/17P88t2O788B98583682.pdfรูปภาพบางส่วนให

บทท 5 การดาเนนการในภาษาซ

165

1 #include <stdio.h> 2 void main(void) 3 { 4 int a = 2002;

5 printf("This year is %i and next year is %i\n",a++,a);

6 printf("%i",a); 7 }

12. จงเขยนโปรแกรมรบคาเลขจานวนเตมเขามา 3 คา แลวแสดงผลออกทางจอภาพ ดงตวอยาง

Please enter three numbers: 15 35 72 Your numbers forward: 15 35 72 Your numbers reversed: 72 35 15

13. จงเขยนโปรแกรมแปลงคาองศาเซลเซยส (Degree Celsius) เปนองศาฟาเรนไฮต (Degree Fahrenheit) ดงสมการน )

100

180(32 CF

14. จงเขยนโปรแกรม แปลงคาเงนบาทเปนดอลลารสหรฐ และโปรแกรมแปลงคาดอลลารสหรฐเปนเงนบาท

15. จงเขยนโปรแกรมแปลง พศ. เปน คศ. และ โปรแกรมแปลง คศ. เปน พศ.

16. จงเขยนโปรแกรมแปลงนาทเปนชวโมงพรอมทงระบเศษนาท

17. จงเขยนโปรแกรมเพอหาคาพนทของรปสามเหลยมดงรป

สง

ฐาน

จากสตร ½ * ฐาน * สง

a

b จากสตร

½ * a * b * sin

Page 185: การเขียนโปรแกรมคอมพิวเตอร ์portal5.udru.ac.th/ebook/pdf/upload/17P88t2O788B98583682.pdfรูปภาพบางส่วนให

บทท 5 การดาเนนการในภาษาซ

166

a

b

c

จากสตร 2

))()((

cbas

csbsass

Page 186: การเขียนโปรแกรมคอมพิวเตอร ์portal5.udru.ac.th/ebook/pdf/upload/17P88t2O788B98583682.pdfรูปภาพบางส่วนให

บทท 6 คาสงควบคม

บทท 6

คาสงควบคม

ในบทนจะกลาวถงพนฐานคาสงควบคมในภาษาซ (Fundamental of Control

Statement of C Language) คาสงแบบลาดบ (Sequential Statement) คาสงแบบเลอกหรอแบบมเงอนไข (Condition Statement) คาสงแบบวนซา (Repetition Statement) คาสงแบบกระโดด (Jump Statement) คาสงควบคมเปนกระบวนการในการควบคมลาดบการทางานของโปรแกรม ชวยควบคมทศทางของคาสงไปตามการทางานของโปรแกรมตางๆ เพอใหสามารถแกไขปญหาตางๆ ไดอยางเหมาะสม โดยทวไปการทางานของโปรแกรมคอมพวเตอรคาสงจะถกดาเนนการเปนคาสงแบบลาดบตงแตตนจนจบโปรแกรม แตในการเขยนโปรแกรมในการแกปญหางานทซบซอนตางๆ จะมการเปลยนแปลงคาสงของการทางานเชนกระโดดไปทางานในคาสงอน วนกลบมาทาซา หรอตรวจสอบเงอนไขเปนตน ซงลกษณะการทางานแบบนจาเปนตองใชคาสงควบคมจงจะสามารถเขยนโปรแกรมไดอยางมประสทธภาพ

6.1 พนฐานคาสงควบคมในภาษาซ (Fundamental of Control Statement of

C Language)

ในการเขยนโปรแกรมภาษาจะมรปแบบในการเขยนคาสงเพอแกปญหาหรอรปแบบในการเขยนโปรแกรมตางๆ เพอใหสามารถดาเนนการเขยนโปรแกรมนนอยางมประสทธภาพ

คาสงควบคมพนฐานในภาษาซสามารถเขยนคาสงควบคมได 4 รปแบบ นนคอ แบบเสนตรง (Sequential) แบบมทางเลอก (Selection) แบบทาซา (Repetition) และแบบกระโดด (Jump)

โดยแตละแบบกจะมโครงสรางการทางานทแตกตางกน ดงแสดงในรปท 6.1

Page 187: การเขียนโปรแกรมคอมพิวเตอร ์portal5.udru.ac.th/ebook/pdf/upload/17P88t2O788B98583682.pdfรูปภาพบางส่วนให

บทท 6 คาสงควบคม

168

1

5

4

3

2

1

5

4

3

2

1

5

4

3

2

1

5

4

3

2

(ก) (ข) (ค) (ง)

รปท 6.1 รปแบบการเขยนคาสงของโปรแกรม

แบบเสนตรง รปท 6.1(ก) คอการทางานจากบนลงลาง เราจะตองทาตามคาสงทก ๆ คาสงทเขยน จากรปท 6.1(ก) จะเปนรปของคาสง 5 คาสงซงจะตองประมวลคาสงทกคาสง โดยจะตองเรยงจากบนลงลาง ลกษณะการทางานแบบนเปนลกษณะการทางานของโปรแกรมทวไป ดงตวอยางผงงานของการเขยนคาสงในรปท 6.2

รปท 6.2 คาสงแบบเรยงลาดบ

Page 188: การเขียนโปรแกรมคอมพิวเตอร ์portal5.udru.ac.th/ebook/pdf/upload/17P88t2O788B98583682.pdfรูปภาพบางส่วนให

บทท 6 คาสงควบคม

169

แบบมเงอนไข รปท 6.1(ข) คอการทางานของโปรแกรมจะสามารถเลอกคาสงได โดยจะทาการตรวจสอบกบเงอนไขทไดตงไว จากรปท 6.1(ข) คาสงท 1 เปนคาสงเงอนไขเลอกทา ถาตรงกบเงอนไขแรกกจะทาคาสงท 2 และ 3 ถาตรงกบอกเงอนไขกจะทาคาสงท 4 และไปทาคาสงท 5 ถดไป จะเหนวาการประมวลผลในลกษณะนคาสงทกคาสงไมไดถกประมวลผลแบบเสนตรงแตจะมบางคาสงเทาทจะถกเรยกใหทางานตามทตองการในการเขยนโปรแกรม ดงตวอยางผงงานของการเขยนคาสงในรปท 6.3

(ก)

(ข)

Page 189: การเขียนโปรแกรมคอมพิวเตอร ์portal5.udru.ac.th/ebook/pdf/upload/17P88t2O788B98583682.pdfรูปภาพบางส่วนให

บทท 6 คาสงควบคม

170

(ค)

รปท 6.3 ผงงานของคาสงแบบมเงอนไข (ก) แบบเงอนไข 1 ทางเลอก (ข) แบบเงอนไข 2 ทางเลอก (ค) แบบหลายเงอนไข

แบบทาซา รปท 6.1(ค) คอการทางานของคาสงทจะกระทาซา ซงจะมการทางานคาสงบางคาสงซากน ถาตรงกบเงอนไขทไดกาหนดไว จากรปท 6.1(ค) คาสงท 2 เปนคาสงตดสนใจวาจะทาซาหรอ ถาทาซาจะตองทาคาสงท 3 และ 4 ซาแลวไปตรวจสอบเงอนไขคาสงท 2 อกครงจนถกตองตามเงอนไขการหยดทาซากจะมาทางานถดไปในคาสงท 5 ดงตวอยางผงงานของการเขยนคาสงในรปท 6.4

(ก)

Page 190: การเขียนโปรแกรมคอมพิวเตอร ์portal5.udru.ac.th/ebook/pdf/upload/17P88t2O788B98583682.pdfรูปภาพบางส่วนให

บทท 6 คาสงควบคม

171

(ข)

รปท 6.4 ผงงานของคาสงแบบทาซา (ก) แบบตรวจสอบเงอนไขกอนแลวจงทาซา (ข) แบบทากอนแลวจงตรวจสอบเงอนไขเพอทาซา

แบบกระโดด รปท 6.1(ง) คอการทางานของคาสงทกระโดดไปทางานในตาแหนงอนๆ ทตองการโดยไมมการตรวจสอบเงอนไขอะไร จากรปท 6.1(ง) เมอทาคาสงท 2 เสรจกจะโดดมาทาคาสงท 4 ทนทโดยไมมเงอนไข ดงตวอยางผงงานของการเขยนคาสงในรปท 6.5

รปท 6.5 รปแบบคาสงแบบแบบกระโดด

Page 191: การเขียนโปรแกรมคอมพิวเตอร ์portal5.udru.ac.th/ebook/pdf/upload/17P88t2O788B98583682.pdfรูปภาพบางส่วนให

บทท 6 คาสงควบคม

172

6.2 คาสงแบบลาดบ (Sequential Statement)

คาสงแบบลาดบคอการเขยนคาสงในลกษณะจากบนลงลางโดยทวไป ในทกๆ คาสงตงแตตนจนจบโปรแกรม จนครบทกคาสง ในภาษาซจะตองลงทายดวยเครองหมายอฒภาคหรอเซมโคลอน (;) เพอเปนการบงบอกใหรจดสนสดของคาสง ถาไมมเครองหมายเซมโคลอน

(Semi Colon) ตวแปรภาษาจะแจงความผดพลาดวาโปรแกรมไมสามารถทาการแปลภาษาได

ในการเขยนโปรแกรมภาษาซจะมคาสงประเภทหนงทถกสรางมาจากหลายๆ คาสงประกอบกนซงเราเรยกวาคาสงเชงซอน (Compound Statement) โดยคาสงในลกษณะนจะอยภายในเครองหมายวงเลบปกกา ({ }) ซงหลงเครองหมายวงเลบปกกาเราไมตองใสเครองหมายเซมโคลอนตอทาย

ตวอยางท 6.1 โปรแกรมแสดงรปแบบการทางานของคาสงแบบลาดบ

1 #include <stdio.h> 2 main() 3 { 4 int x = 1; 5 int y = 1; 6 int z; 7 z = x + y; 8 printf("x + y = %i\n",z); 9 }

ผลลพธของโปรแกรม x + y = 2

ตวอยางท 6.2 โปรแกรมแสดงคาสงประเภทคาสงเชงซอน 1 #include <stdio.h> 2 main() 3 { 4 int a; 5 { 6 a = 10; 7 printf("%i",a); 8 } 9 }

อธบายโปรแกรม

บรรทดท 5 และ 8 เปนคาสงเชงซอน ซงภายในเครองหมายวงเลบปกกาจะมคาสงยอยหลายๆ คาสง

Page 192: การเขียนโปรแกรมคอมพิวเตอร ์portal5.udru.ac.th/ebook/pdf/upload/17P88t2O788B98583682.pdfรูปภาพบางส่วนให

บทท 6 คาสงควบคม

173

6.3 คาสงแบบเลอกหรอแบบมเงอนไข (Condition Statement)

คาสงแบบเลอกหรอแบบมเงอนไขคอการเขยนคาสงในลกษณะตรวจสอบเงอนไขของชดคาสงวาตรงตามเงอนไขทกาหนดหรอไม ถาตรงตามเงอนไขกใหกระทาในสวนหนง ถาไมตรงตามเงอนไขกใหไปกระทาอกสวน ซงการเขยนโปรแกรมของคาสงในรปแบบนคาสงจะไมถกกระทาทงหมดเนองจากเปนการเลอกคาสงทจะกระทาการประมวลผล คาสงแบบเลอกเปนคาสงทมการทดสอบเงอนไขกอนทจะทางานอยางใดอยางหนง สามารถแบงออกเปน 4 ชนด คอ

6.3.1 คาสงทดสอบเงอนไข 1 ทางเลอก (if) คอมการทดสอบเงอนไขวาเปนจรงหรอเปนเทจ โดยจะทางานตามชดคาสงทกาหนด

ไว เฉพาะกรณทเงอนไขเปนจรงเทานน โดยมรปแบบคาสง คอ

รปท 6.6 ผงงานของคาสงแบบมเงอนไขแบบเงอนไข 1 ทางเลอก

if(เงอนไข){ ชดคาสง }

Page 193: การเขียนโปรแกรมคอมพิวเตอร ์portal5.udru.ac.th/ebook/pdf/upload/17P88t2O788B98583682.pdfรูปภาพบางส่วนให

บทท 6 คาสงควบคม

174

ตวอยางท 6.3 โปรแกรมแสดงคาสงทดสอบเงอนไข 1 ทางเลอก ในการตรวจสอบเลขค

1 #include<stdio.h> 2 main(){ 3 int a; 4 printf("Enter number : "); 5 scanf("%d",&a); 6 printf("*******************\n"); 7 if(a%2==0){ 8 printf("Even number\n"); 9 } 10 printf("*******************\n"); 11 }

ผลลพธของโปรแกรม (รนครงท 1)

Enter number : 56 *********************** Even number ***********************

(รนครงท 2)

Enter number : 57 *********************** ***********************

อธบายโปรแกรม

บรรทดท 5 รบคาตวเลขจานวนเตม

บรรทดท 7 ตรวจสอบเงอนไขวาตวเลขจานวนเตมทรบเขามาเปนเลขคหรอไม

ถาใชใหแสดงผลวา “Even number” ในบรรทดท 8 แลวแสดงผลตอในบรรทดท 10 แตถาไมใชเลขคจะไมแสดงผลในบรรทดท 8 แตจะขามไปแสดงผลบรรทดท 10

Page 194: การเขียนโปรแกรมคอมพิวเตอร ์portal5.udru.ac.th/ebook/pdf/upload/17P88t2O788B98583682.pdfรูปภาพบางส่วนให

บทท 6 คาสงควบคม

175

ตวอยางท 6.4 โปรแกรมแสดงคาสงทดสอบเงอนไข 1 ทางเลอก ในการตรวจคาลบและบวก

1 #include <stdio.h> 2 3 main() 4 { 5 int a; 6 scanf("%i",&a); 7 if(a<0) 8 { 9 printf("This is Negative"); 10 } 11 if(a>0) 12 { 13 printf("This is Positive"); 14 } 15 }

ผลลพธของโปรแกรม

(รนครงท 1)

-5 This is Negative

(รนครงท 2)

0 This is Positive

อธบายโปรแกรม

บรรทดท 6 รบคาตวเลขจานวนเตม

บรรทดท 7 ตรวจสอบเงอนไขวาตวแปร a มคานอยกวา 0 หรอไม ถานอยกวาใหกระทาคาสงในบรรทดท 9 และทาคาสงท 11 ถดไป ถามากกวาใหขามไปทาคาสงท 11

บรรทดท 11 ตรวจสอบเงอนไขวาตวแปร a มคามากกวา 0 หรอไม ถามากกวาใหกระทาคาสงในบรรทดท 13 และทาคาสงลาดบถดไป ถามากกวาใหขามไปสนสดทบรรทดท 15 กจะจบโปรแกรม

Page 195: การเขียนโปรแกรมคอมพิวเตอร ์portal5.udru.ac.th/ebook/pdf/upload/17P88t2O788B98583682.pdfรูปภาพบางส่วนให

บทท 6 คาสงควบคม

176

ตวอยางท 6.5 โปรแกรมแสดงคาสงทดสอบเงอนไข 1 ทางเลอก ในการตรวจคาลบและบวก

1 #include <stdio.h> 2 3 main() 4 { 5 int a; 6 scanf("%i",&a); 7 if(a<0) 8 printf("This is Negative"); 9 if(a>0) 10 printf("This is Positive"); 11 }

ผลลพธของโปรแกรม

(รนครงท 1)

-5 This is Negative

(รนครงท 2)

0 This is Positive

อธบายโปรแกรม

บรรทดท 6 รบคาตวเลขจานวนเตม

บรรทดท 7 ตรวจสอบเงอนไขวาตวแปร a มคานอยกวา 0 หรอไม ถานอยกวาใหกระทาคาสงในบรรทดท 8 และทาคาสงท 9 ถดไป ถามากกวาใหขามไปทาคาสงท 9

บรรทดท 9 ตรวจสอบเงอนไขวาตวแปร a มคามากกวา 0 หรอไม ถามากกวาใหกระทาคาสงในบรรทดท 10 และทาคาสงลาดบถดไป ถามากกวาใหขามไปสนสดทบรรทดท 11 กจะจบโปรแกรม

Page 196: การเขียนโปรแกรมคอมพิวเตอร ์portal5.udru.ac.th/ebook/pdf/upload/17P88t2O788B98583682.pdfรูปภาพบางส่วนให

บทท 6 คาสงควบคม

177

ตวอยางท 6.6 โปรแกรมแสดงคาสงทดสอบเงอนไข 1 ทางเลอก ในการตรวจคาลบและบวก

1 #include <stdio.h> 2 3 main() 4 { 5 int a; 6 scanf("%i",&a); 7 if(a<0) printf("This is Negative"); 8 if(a>0) printf("This is Positive"); 9 }

ผลลพธของโปรแกรม

(รนครงท 1)

-5 This is Negative

(รนครงท 2)

0 This is Positive

อธบายโปรแกรม

บรรทดท 6 รบคาตวเลขจานวนเตม

บรรทดท 7 ตรวจสอบเงอนไขวาตวแปร a มคานอยกวา 0 หรอไม ถานอยกวาใหกระทาคาสงดานหลง ถามากกวาใหขามไปทาคาสงท 8

บรรทดท 8 ตรวจสอบเงอนไขวาตวแปร a มคามากกวา 0 หรอไม ถามากกวาใหกระทาคาสงดานหลง ถามากกวาใหขามไปบรรทดท 9 สนสดโปรแกรม

จากตวอยางท 6.4, 6.5 และ 6.6 การทางานของโปรแกรมจะไดผลลพธทเหมอนกน

แตกตางกนตรงวธเขยนโปรแกรมในสวนเครองหมายวงเลบปกกา ({ }) ถาประโยคตามหลงคาสง if มเพยงประโยคเดยวไมจาเปนทจะตองมเครองหมายวงเลบปกกา แตถามหลายคาสงจะตองมเครองหมายวงเลบปกกาเพอบงบอกใหกระทาในคาสงใดบาง ดงตวอยางถดไป

สาหรบผ ทเรมตนแนะนาใหเขยนเครองหมายวงเลบปกกาเพอไมใหสบสน

Page 197: การเขียนโปรแกรมคอมพิวเตอร ์portal5.udru.ac.th/ebook/pdf/upload/17P88t2O788B98583682.pdfรูปภาพบางส่วนให

บทท 6 คาสงควบคม

178

ตวอยางท 6.7 โปรแกรมแสดงคาสงทดสอบเงอนไข 1 ทางเลอก ในการตรวจคาลบ

1 #include <stdio.h> 2 main() 3 { 4 int a; 5 printf("Input a = "); scanf("%i",&a); 6 if (a<0) 7 { 8 printf("a less than zero\n"); 9 printf("a may be more than zero\n"); 10 } 11 printf("a = %i\n",a); 12 }

ผลลพธของโปรแกรม

(รนครงท 1)

Input a = -5 a less than zero a may be more than zero a = -5

(รนครงท 2)

Input a = 5 a = 5

อธบายโปรแกรม

บรรทดท 5 แสดงตวอกษรและรบคาตวเลขจานวนเตม

บรรทดท 6 ตรวจสอบเงอนไขวาตวแปร a มคานอยกวา 0 หรอไม ถานอยกวาใหกระทาคาสงในวงเลบปกกาทงหมด ในบรรทดท 8 และบรรทดท 9

จากนนกกระทาในบรรทดท 11 ถามากกวาใหขามไปทาคาสงท 11

Page 198: การเขียนโปรแกรมคอมพิวเตอร ์portal5.udru.ac.th/ebook/pdf/upload/17P88t2O788B98583682.pdfรูปภาพบางส่วนให

บทท 6 คาสงควบคม

179

6.3.2 คาสงทดสอบเงอนไข 2 ทางเลอก (if-else)

คาสงทดสอบเงอนไข 2 ทางเลอกคอคาสงทมการทดสอบเงอนไขวาเปนจรง หรอเปนเทจ ถาเงอนไขเปนจรง ใหทางานตามชดคาสง A แตถาเงอนไขเปนเทจ ใหทางานตามชดคาสง B โดยมรปแบบคาสง คอ

รปท 6.7 ผงงานของคาสงแบบมเงอนไขแบบเงอนไข 2 ทางเลอก

ตวอยางท 6.8 โปรแกรมแสดงคาสงทดสอบเงอนไข 2 ทางเลอก ในการตรวจคาคและค

1 #include<stdio.h> 2 main(){ 3 int a; 4 printf("Enter number : "); 5 scanf("%d",&a); 6 printf("*******************\n"); 7 if(a%2==0){ 8 printf("Even number\n"); 9 } 10 else{ 11 printf("Odd number\n"); 12 } 13 printf("*******************\n"); 14 }

if(เงอนไข){ ชดคาสง A

}

else{

ชดคาสง B

}

Page 199: การเขียนโปรแกรมคอมพิวเตอร ์portal5.udru.ac.th/ebook/pdf/upload/17P88t2O788B98583682.pdfรูปภาพบางส่วนให

บทท 6 คาสงควบคม

180

ผลลพธของโปรแกรม

(รนครงท 1)

Enter number : 56 *********************** Even number ***********************

(รนครงท 2)

Enter number : 57 *********************** Odd number ***********************

อธบายโปรแกรม

บรรทดท 5 รบคาตวเลขจานวนเตม

บรรทดท 7 ตรวจสอบวาตวเลขจานวนเตมทรบเขามาเปนเลขคหรอไม

ถาใชใหแสดงผลวา “Even number” ในบรรทดท 8 แลวแสดงผลตอในบรรทดท 13

แตถาไมใชเลขค (เลขค) จะแสดงผลวา “Odd number” ในบรรทดท

11 แลวแสดงผลตอในบรรทดท 13

ตวอยางท 6.9 โปรแกรมแสดงคาสงทดสอบเงอนไข 2 ทางเลอก ในการตรวจคาลบและบวก

1 #include <stdio.h> 2 main() 3 { 4 int a; 5 scanf("%i",&a); 6 if(a<0) 7 { 8 printf("This is Negative"); 9 } else 10 { 11 printf("This is Positive"); 12 } 13 }

ผลลพธของโปรแกรม

(รนครงท 1)

-5 This is Negative

(รนครงท 2)

0 This is Positive

Page 200: การเขียนโปรแกรมคอมพิวเตอร ์portal5.udru.ac.th/ebook/pdf/upload/17P88t2O788B98583682.pdfรูปภาพบางส่วนให

บทท 6 คาสงควบคม

181

อธบายโปรแกรม

บรรทดท 5 รบคาตวเลขจานวนเตม

บรรทดท 6 ตรวจสอบเงอนไขวาตวแปร a มคานอยกวา 0 หรอไม ถานอยกวาใหกระทาคาสงในบรรทดท 9 จากนนกจะกระโดดไปบรรทดสดทาย ถามากกวาใหกระทาคาสงในบรรทดท 12 จากนนกจะกระโดดไปบรรทดสดทาย

เชนเดยวกนคาสง if มเพยงประโยคเดยวไมจาเปนทจะตองมเครองหมายวงเลบปกกา แตถามหลายคาสงจะตองมเครองหมายวงเลบปกกาเพอบงบอกใหกระทาในคาสงใดบาง ดงตวอยางถดไป

ตวอยางท 6.10 โปรแกรมแสดงคาสงทดสอบเงอนไข 2 ทางเลอก ในการตรวจคาลบและบวก

1 #include <stdio.h> 2 3 main() 4 { 5 int a; 6 scanf("%i",&a); 7 if(a<0) 8 9 printf("Negative"); 10 else 11 12 printf("Positive"); 13 14 }

ผลลพธของโปรแกรม

(รนครงท 1)

-5 This is Negative

(รนครงท 2)

0 This is Positive

Page 201: การเขียนโปรแกรมคอมพิวเตอร ์portal5.udru.ac.th/ebook/pdf/upload/17P88t2O788B98583682.pdfรูปภาพบางส่วนให

บทท 6 คาสงควบคม

182

อธบายโปรแกรม

บรรทดท 6 รบคาตวเลขจานวนเตม

บรรทดท 7 ตรวจสอบเงอนไขวาตวแปร a มคานอยกวา 0 หรอไม ถานอยกวาใหกระทาคาสงในบรรทดท 9 จากนนกจะกระโดดไปบรรทดสดทาย ถามากกวาใหกระทาคาสงในบรรทดท 12 จากนนกจะกระโดดไปบรรทดสดทาย

ตวอยางท 6.11 โปรแกรมแสดงคาสงทดสอบเงอนไข 2 ทางเลอก ในการตรวจคาลบและบวก

1 #include <stdio.h> 2 main() 3 { 4 int a; 5 scanf("%i",&a); 6 if(a<0) printf("Negative"); 7 else printf("Positive"); 8 }

ผลลพธของโปรแกรม

(รนครงท 1)

-5 This is Negative

(รนครงท 2)

0 This is Positive

อธบายโปรแกรม

บรรทดท 5 รบคาตวเลขจานวนเตม

บรรทดท 6 ตรวจสอบเงอนไขวาตวแปร a มคานอยกวา 0 หรอไม ถานอยกวาใหกระทาคาสงดานหลง จากนนกจะกระโดดไปบรรทดสดทาย ถามากกวาใหกระทาคาสงในบรรทดท 7 จากนนกจะกระโดดไปบรรทดสดทาย

Page 202: การเขียนโปรแกรมคอมพิวเตอร ์portal5.udru.ac.th/ebook/pdf/upload/17P88t2O788B98583682.pdfรูปภาพบางส่วนให

บทท 6 คาสงควบคม

183

ตวอยางท 6.12 จงตรวจสอบโปรแกรมดงตอไปน หากมการตดเครองหมายวงเลบปกกาในบรรทดท 7 และบรรทดท 10 ออก ผลลพธทไดจะแตกตางกนหรอเหมอนกน

1 #include <stdio.h> 2 main() 3 { 4 int a; 5 printf("Input a = "); scanf("%i",&a); 6 if (a<0) 7 { 8 printf("a less than zero\n"); 9 printf("a may be more than zero\n"); 10 } 11 printf("a = %i\n",a); 12 }

ผลลพธของโปรแกรม

(รนครงท 1 ในกรณทไมตดเครองหมายวงเลบปกกาออก) Input a = 5 a = 5

(รนครงท 2 ในกรณทตดเครองหมายวงเลกปกกาออก) Input a = 5 a may be more than zero a = 5

จากการประมวลผลโปรแกรมผลลพธทไดจะแตกตางกน ดงนนในการใชเครองหมายวงเลบปกกาควรจะใชอยางระมดระวง ซงอาจจะทาใหเกดขอผดพลาดได

Page 203: การเขียนโปรแกรมคอมพิวเตอร ์portal5.udru.ac.th/ebook/pdf/upload/17P88t2O788B98583682.pdfรูปภาพบางส่วนให

บทท 6 คาสงควบคม

184

6.3.3 คาสงทดสอบเงอนไขหลายทางเลอก (nested if)

คาสงทดสอบเงอนไขหลายทางเลอกคอคาสงทมการทดสอบเงอนไขวาเปนจรง หรอเปนเทจ ถาเปนจรงในเงอนไขใด ใหทางานตามชดคาสงของเงอนไขนนๆ โดยสามารถทาการทดสอบเงอนไขตอเนองได มรปแบบคาสง คอ

รปท 6.8 ผงงานของคาสงแบบมเงอนไขแบบเงอนไขหลายทางเลอก

if(เงอนไข){ ชดคาสง A

}

else if(เงอนไข){ ชดคาสง B

}

else if(เงอนไข){ ชดคาสง C

}

Page 204: การเขียนโปรแกรมคอมพิวเตอร ์portal5.udru.ac.th/ebook/pdf/upload/17P88t2O788B98583682.pdfรูปภาพบางส่วนให

บทท 6 คาสงควบคม

185

ตวอยางท 6.13 โปรแกรมแสดงคาสงทดสอบเงอนไขหลายทางเลอก ในการตดเกรด

1 #include<stdio.h> 2 main(){ 3 int score; 4 char grade; 5 printf("Enter score : "); 6 scanf("%d",&score); 7 printf("*******************\n"); 8 if(score>=80){ 9 grade = 'A'; 10 } 11 else if (score >= 70){ 12 grade = 'B'; 13 } 14 else if (score >= 60){ 15 grade = 'C'; 16 } 17 else if (score >= 50){ 18 grade = 'D'; 19 } 20 else{ 21 grade = 'F'; 22 } 23 printf("Grade = %c\n",grade); 24 printf("*******************\n"); 25 }

ผลลพธของโปรแกรม

(รนครงท 1)

Enter score : 56 *********************** Grade = D ***********************

(รนครงท 2)

Enter number : 97 *********************** Grade = A ***********************

อธบายโปรแกรม

บรรทดท 6 รบคาคะแนน

บรรทดท 8 ตรวจสอบวาคะแนนมากกวา 80 หรอไม ถาใชใหตวแปร grade เกบคา A แลวขามไปทาคาสงในบรรทดท 23 และ 24 ถาไมใชใหไปทาคาสงในบรรทดท 11

Page 205: การเขียนโปรแกรมคอมพิวเตอร ์portal5.udru.ac.th/ebook/pdf/upload/17P88t2O788B98583682.pdfรูปภาพบางส่วนให

บทท 6 คาสงควบคม

186

บรรทดท 11 ตรวจสอบวาคะแนนมากกวา 70 หรอไม ถาใชใหตวแปร grade เกบคา B แลวขามไปทาคาสงในบรรทดท 23 และ 24 ถาไมใชใหไปทาคาสงในบรรทดท 14

บรรทดท 14 ตรวจสอบวาคะแนนมากกวา 60 หรอไม ถาใชใหตวแปร grade เกบคา C แลวขามไปทาคาสงในบรรทดท 23 และ 24 ถาไมใชใหไปทาคาสงในบรรทดท 17

บรรทดท 17 ตรวจสอบวาคะแนนมากกวา 50 หรอไม ถาใชใหตวแปร grade เกบคา D แลวขามไปทาคาสงในบรรทดท 23 และ 24 ถาไมใชใหตวแปร grade เกบคา F แลวขามไปทาคาสงในบรรทดท 23 และ 24

เชนเดยวกนคาสง if มเพยงประโยคเดยวไมจาเปนทจะตองมเครองหมายวงเลบปกกา แตถามหลายคาสงจะตองมเครองหมายวงเลบปกกาเพอบงบอกใหกระทาในคาสงใดบาง ดงตวอยางถดไป

ตวอยางท 6.14 โปรแกรมแสดงคาสงทดสอบเงอนไขหลายทางเลอก ในการตดเกรด

1 #include <stdio.h> 2 main() 3 { 4 int score; 5 scanf("%i",& score); 6 if(score <50) printf("F"); 7 else if(score <60) printf("D"); 8 else if(score <70) printf("C"); 9 else if(score <80) printf("B"); 10 else printf("A"); 11 }

ผลลพธของโปรแกรม

(รนครงท 1)

56 D

(รนครงท 2)

97 A

Page 206: การเขียนโปรแกรมคอมพิวเตอร ์portal5.udru.ac.th/ebook/pdf/upload/17P88t2O788B98583682.pdfรูปภาพบางส่วนให

บทท 6 คาสงควบคม

187

อธบายโปรแกรม

บรรทดท 5 รบคาคะแนน

บรรทดท 6 ตรวจสอบวาคะแนนนอยกวา 50 หรอไม ถาใชใหแสดงคา F ถาไมใชใหไปบรรทดท 7

บรรทดท 7 ตรวจสอบวาคะแนนนอยกวา 60 หรอไม ถาใชใหแสดงคา D ถาไมใชใหไปบรรทดท 7

บรรทดท 8 ตรวจสอบวาคะแนนนอยกวา 70 หรอไม ถาใชใหแสดงคา C ถาไมใชใหไปบรรทดท 7

บรรทดท 9 ตรวจสอบวาคะแนนนอยกวา 80 หรอไม ถาใชใหแสดงคา B ถาไมใชใหไปบรรทดท 10 ใหแสดงคา A

ในการเขยนคาสงทดสอบเงอนไขหลายทางเลอกควรจะแสดงเครองหมายวงเลบปกกาเนองจากถาไมใสอาจจะทาใหสบสน วา if else ตวไหนจะคกน ดงแสดงในรปท 6.9

if(a>0) { if(a<=5) printf("s1"); else printf("s2"); }

if(a>0) { if(a<=5) printf("s1"); } else printf("s2");

แบบท 1 แบบท 2

รปท 6.9 คาสงทดสอบเงอนไขหลายทางเลอกทมความสบสน

จากรปท 6.9 ถาเรากาหนดคา a ทนอยกวาศนย ถาไมมการแสดงผลลพธทหนาจอภาพแสดงวาเปนแบบท 1 แตถามผลลพธแสดงทหนาจอภาพโดยพมพคาวา s2 ออกทางหนาจอ แสดงวาเปนแบบท 2 ดงนนการใชเครองหมายวงเลบปกกาควรจะใชอยางระวง โดยในภาษาซจะยดถอวา else นนเปนคของ if ตวทใกลทสด (The Most Recently Nested

Rule)

Page 207: การเขียนโปรแกรมคอมพิวเตอร ์portal5.udru.ac.th/ebook/pdf/upload/17P88t2O788B98583682.pdfรูปภาพบางส่วนให

บทท 6 คาสงควบคม

188

6.3.4 คาสงเลอกเงอนไข (switch-case)

คาสงเลอกเงอนไขคอคาสงทมการเลอกทางานตามเงอนไขของคาของตวแปรหรอนพจนวาตรงกบกรณ (case) ใดๆ กลาวคอถามการเลอกคาตวแปรหรอนพจนตรงกบกรณใดๆ ใหทางานตามคาสงในกรณนนๆ แตถาไมตรงกบกรณใดๆ จะทางานตามคาสงในสวนของ default แตถาไมมสวนของ default กจะไมทางานตามคาสงภายใตเงอนไขใดๆ ดงนนในสวนของ default จะมหรอไมมกได คาสงเลอกเงอนไขมรปแบบคาสง ซงสามารถเขยนได 2 รปแบบดงน

switch(ตวแปรหรอนพจนทตรวจสอบ){

case คาท 1 :

ชดคาสง A;

break;

case คาท 2 :

ชดคาสง B;

break;

case คาท 3 :

ชดคาสง C;

break;

default :

ชดคาสง D;

}

switch(ตวแปรหรอนพจนทตรวจสอบ){

case คาท 1 :

ชดคาสง A;

case คาท 2 :

ชดคาสง B;

case คาท 3 :

ชดคาสง C;

default :

ชดคาสง D;

}

Page 208: การเขียนโปรแกรมคอมพิวเตอร ์portal5.udru.ac.th/ebook/pdf/upload/17P88t2O788B98583682.pdfรูปภาพบางส่วนให

บทท 6 คาสงควบคม

189

ตวแปรหรอนพจนทตรวจสอบจะตองเปนเลขจานวนเตม หรอตวอกษรเทานน และในแตละกรณจะตองจบลงดวยคาสงหยด (break) เพอใหออกจากคาสงเลอกเงอนไข ถาไมมคาสงจะทางานตามคาสงถดไปดงแสดงในผงงานในรปท 6.10 (ก) แตถามคาสงหยดกจะกระทาคาสงในกรณนนจนเสรจและกออกจากกระบวนการไปดงแสดงในผงงานในรปท 6.10

(ข)

เงอนไข

ชดคำสง A

ชดคำสง C

ชดคำสง B

ชดคำสง D

case 1

case 2

case 3

Default

value

(ก) (ข)

รปท 6.10 รปแบบคาสงเลอกเงอนไข (ก) คาสงเลอกเงอนไขทไมมคาสงสนสด

(ข) คาสงเลอกเงอนไขทมคาสงสนสด

Page 209: การเขียนโปรแกรมคอมพิวเตอร ์portal5.udru.ac.th/ebook/pdf/upload/17P88t2O788B98583682.pdfรูปภาพบางส่วนให

บทท 6 คาสงควบคม

190

ตวอยางท 6.15 โปรแกรมแสดงคาสงทดสอบเงอนไขหลายทางเลอก ไมใชจดสนสด

1 #include <stdio.h> 2 main() 3 { 4 int num; 5 scanf("%i",&num); 6 switch(num) 7 { 8 case 1: 9 printf("One\n"); 10 11 case 2: 12 printf("Two\n"); 13 14 case 3: 15 printf("Three\n"); 16 17 default: 18 printf("No\n"); 19 20 }}

ผลลพธของโปรแกรม

(รนครงท 1)

5 No

(รนครงท 2)

3 Three No

(รนครงท 3)

1 One Two Three No

อธบายโปรแกรม

บรรทดท 5 รบคาอนพตเปนตวเลขเกบไวทตวแปร num

บรรทดท 6 ตรวจสอบเงอนไขวาตวเลขทไดรบตรงกบกรณไหน กใหทาในกรณนน เมอกระทาชดคาสงในกรณนนเสรจสนกกระทาในกรณถดไปจนจบโปรแกรม ซงในลกษณะแบบนอาจจะไมเหมาะสมนก ดงนนควรจะมคาสงสนสด เพราะโดยทวไปการเขยนโปรแกรมจะกระทาเฉพาะในกรณทตองการเทานน

Page 210: การเขียนโปรแกรมคอมพิวเตอร ์portal5.udru.ac.th/ebook/pdf/upload/17P88t2O788B98583682.pdfรูปภาพบางส่วนให

บทท 6 คาสงควบคม

191

ตวอยางท 6.16 โปรแกรมแสดงคาสงทดสอบเงอนไขหลายทางเลอก โดยใชจดสนสด

1 #include <stdio.h> 2 main() 3 { 4 int num; 5 scanf("%i",&num); 6 switch(num) 7 { 8 case 1: 9 printf("One"); 10 break; 11 case 2: 12 printf("Two"); 13 break; 14 case 3: 15 printf("Three"); 16 break; 17 default: 18 printf("No"); 19 break; 20 } 21 }

ผลลพธของโปรแกรม

(รนครงท 1)

5 No

(รนครงท 2)

3 Three

(รนครงท 3)

1 One

อธบายโปรแกรม

บรรทดท 5 รบคาอนพตเปนตวเลขเกบไวทตวแปร num

บรรทดท 6 ตรวจสอบเงอนไขวาตวเลขทไดรบตรงกบกรณไหน กใหทาในกรณนน สงเกตคาสงในทกกรณจะมคาสงหยด (break) ดงนนเมอกระทาชดคาสงในกรณนนเสรจสนกจะกระโดดมายงบรรทดสดทายของโปรแกรม

Page 211: การเขียนโปรแกรมคอมพิวเตอร ์portal5.udru.ac.th/ebook/pdf/upload/17P88t2O788B98583682.pdfรูปภาพบางส่วนให

บทท 6 คาสงควบคม

192

ตวอยางท 6.17 โปรแกรมแสดงคาสงเลอกเงอนไข ในการเลอกคาทกทาย

1 #include<stdio.h> 2 main(){ 3 char choice,name[30]; 4 printf("************************\n"); 5 printf("Select choice\n"); 6 printf("************************\n"); 7 printf("a.Morning\n"); 8 printf("b.Afternoon\n"); 9 printf("c.Evening\n"); 10 printf("d.Night\n"); 11 printf("************************\n"); 12 printf("Enter choice : "); 13 scanf("%c",&choice); 14 printf("Enter name : "); 15 scanf("%s",name); 16 printf("************************\n"); 17 switch(choice){ 18 case 'a' : 19 printf("Good Morning!!! %s\n",name); 20 break; 21 case 'b' : 22 printf("Good Afternoon!!! %s\n",name); 23 break; 24 case 'c' : 25 printf("Good Evening!!! %s\n",name); 26 break; 27 case 'd' : 28 printf("Good Night!!! %s\n",name); 29 break; 30 default : 31 printf("Bye Bye!!! %s\n",name); 32 } 33 }

ผลลพธของโปรแกรม

(รนครงท 1)

************************ Select choice ************************ a.Morning b.Afternoon c.Evening d.Night ************************ Enter choice : a Enter name : Krit ************************ Good Morning!!! Krit

Page 212: การเขียนโปรแกรมคอมพิวเตอร ์portal5.udru.ac.th/ebook/pdf/upload/17P88t2O788B98583682.pdfรูปภาพบางส่วนให

บทท 6 คาสงควบคม

193

(รนครงท 2)

************************ Select choice ************************ a.Morning b.Afternoon c.Evening d.Night ************************ Enter choice : c Enter name : Krit ************************ Good Evening!!! Krit

(รนครงท 3)

************************ Select choice ************************ a.Morning b.Afternoon c.Evening d.Night ************************ Enter choice : z Enter name : Krit ************************ Bye Bye!!! Krit

อธบายโปรแกรม

โปรแกรมนจะทาการรบคาตวอกษรมาเกบไวในตวแปร choice แลวทาการตรวจสอบวามคาเปนอะไร กรณท 1 คาเปน a จะทางานตามคาสงในบรรทดท 19 – 20

กรณท 2 คาเปน b จะทางานตามคาสงในบรรทดท 22 – 23

กรณท 3 คาเปน c จะทางานตามคาสงในบรรทดท 25 – 26

กรณท 4 คาเปน d จะทางานตามคาสงในบรรทดท 28 – 29

กรณทคาของตวแปร choice ไมใช a ,b ,c และ d จะทางานตามคาสงในบรรทดท 31

Page 213: การเขียนโปรแกรมคอมพิวเตอร ์portal5.udru.ac.th/ebook/pdf/upload/17P88t2O788B98583682.pdfรูปภาพบางส่วนให

บทท 6 คาสงควบคม

194

ตวอยางท 6.18 โปรแกรมแสดงคาสงทดสอบเงอนไขหลายทางเลอก โดยใหรบคาเขามา ถาคาทรบเขามาเปนเลข 1 – 3 ใหกระทาในกรณท 1 ถาคาทรบเขามาเปนเลข 4 – 6 ใหกระทาในกรณท 2 ถาคาทรบเขามาเปนเลข 7 – 9 ใหกระทาในกรณท 3 ถาไมใชเลข 1-9 ใหพมพคาวา Error

1 #include <stdio.h> 2 main() 3 { 4 int a; 5 printf("Input Number = "); scanf("%i",&a); 6 switch(a); 7 { 8 case 1: case 2: case 3: 9 printf("D"); 10 break; 11 case 4: case 5: case 6: 12 printf("C"); 13 break; 14 case 7: case 8: case 9: 15 printf("D"); 16 break; 17 default: 18 printf("Error"); 19 break; 20 } 21 }

ผลลพธของโปรแกรม

(รนครงท 1)

Input Number = 2 D

(รนครงท 2)

Input Number = 5 C

(รนครงท 3)

Input Number = 10 Error

อธบายโปรแกรม

บรรทดท 5 แสดงตวอกษรและรบคาอนพตเกบไวทตวแปร a

บรรทดท 6 ตรวจสอบเงอนไขวาตวเลขทไดรบตรงกบกรณไหน กใหทาในกรณนน ถาคาทรบเขามาเปนเลข 1 – 3 จะกระทาในกรณท 1 ถาคาทรบเขามาเปนเลข 4 – 6 จะกระทาในกรณท 2 ถาคาทรบเขามาเปน

Page 214: การเขียนโปรแกรมคอมพิวเตอร ์portal5.udru.ac.th/ebook/pdf/upload/17P88t2O788B98583682.pdfรูปภาพบางส่วนให

บทท 6 คาสงควบคม

195

เลข 7 – 9 จะกระทาในกรณท 3 ถาไมใชเลข 1-9 กระทาในกรณ

default ในบรรทดท 17,18 และ 19

ตวอยางท 6.19 จงเขยนโปรแกรมดงตอไปนใหอยในรปแบบของคาสงเลอกเงอนไข (switch-

case)

1 #include <stdio.h> 2 main() 3 { 4 int a; 5 printf("Input gift number : "); 6 scanf("%i",&a); 7 if(a==1) printf("Notebook"); 8 else if(a==2) printf("Computer Desktop"); 9 else if(a==3) printf("PDA"); 10 else if(a==4) printf("Disket"); 11 else printf("Invalid"); 12 }

จะได

1 #include <stdio.h> 2 main() 3 { 4 int a; 5 printf("Input gift number : "); 6 scanf("%i",&a); 7 switch(a) 8 { 9 case 1 : 10 printf("Notebook"); 11 break; 12 case 2 : 13 printf("Computer Desktop"); 14 break; 15 case 3 : 16 printf("PDA"); 17 break; 18 case 4 : 19 printf("Disket"); 20 break; 21 default : 22 printf("Invalid"); 23 break; 24 } 25 }

Page 215: การเขียนโปรแกรมคอมพิวเตอร ์portal5.udru.ac.th/ebook/pdf/upload/17P88t2O788B98583682.pdfรูปภาพบางส่วนให

บทท 6 คาสงควบคม

196

6.4 คาสงแบบวนซา (Repetition Statement)

คาสงแบบวนซาคอการเขยนคาสงในลกษณะคาสงทมการทางานวนซาๆ เปนวงรอบหรอลป (Loop) จนกวาเงอนไขททดสอบจะเปนเทจ จงจะสามารถออกจากการทางานของคาสง แบงออกเปน 3 ชนด คอคาสงตรวจสอบเงอนไขกอนแลวจงทาซา (while) คาสงทากอนแลวจงตรวจสอบเงอนไขเพอทาซา (do-while) คาสงทาซาตามจานวนรอบทระบ (for)

6.4.1 คาสงตรวจสอบเงอนไขกอนแลวจงทาซา (while)

คาสงตรวจสอบเงอนไขกอนแลวจงทาซาจะใชในงานทมการตรวจสอบเงอนไขกอน ถาเงอนไขเปนจรง ใหทางานตามชดคาสงทตองการภายในลป จากนนกลบไปตรวจสอบเงอนไขอกครง ทางานซาๆ เชนน จนกวาเงอนไขจะเปนเทจ จงออกจากการทางานของคาสงน โดยมรปแบบคาสง คอ

รปท 6.11 ผงงานของคาสงแบบทาซาแบบตรวจสอบเงอนไขกอนแลวจงทาซา

while(เงอนไข){ ชดคาสง }

Page 216: การเขียนโปรแกรมคอมพิวเตอร ์portal5.udru.ac.th/ebook/pdf/upload/17P88t2O788B98583682.pdfรูปภาพบางส่วนให

บทท 6 คาสงควบคม

197

หลกการทางานซาคอเมอทางานมาถงคาสง while กจะกระทาการตรวจสอบเงอนไข ถาเปนจรงกจะกระทาในคาสง เมอทาเสรจกจะกลบขนไปตรวจสอบเงอนไขอกครงจนกวาเงอนไขเปนเทจจงจะจบกระบวนการของคาสงน ดงนนในการเขยนคาสงในรปแบบนจะตองตรวจสอบใหดในการตรวจสอบเงอนไข เนองจากอาจจะทาใหเกดการวนลปทไมมทสนสด (วนซาตลอดกาล) ทาใหโปรแกรมเกดความผดพลาด

ตวอยางท 6.20 โปรแกรมแสดงคาสงตรวจสอบเงอนไขกอนแลวจงทาซา ในการตรวจคาทรบเขามา

1 #include <stdio.h> 2 main() 3 { 4 int num; 5 printf("Input = "); scanf("%i",&num); 6 while(num==0) 7 { 8 printf("Input = ");scanf("%i",&num); 9 } 10 printf("Output = %i\n",num); 11 }

ผลลพธของโปรแกรม

(รนครงท 1) ในกรณทปอนคา 0 เขาไปจานวนหลายครง Input = 0 Input = 0 Input = 0

(รนครงท 2) ในกรณทปอนคาอน ทไมใช 0

Input = 5 Output = 5

อธบายโปรแกรม

บรรทดท 5 แสดงตวอกษรและรบคาอนพตเกบไวทตวแปร num

บรรทดท 6 ตรวจสอบเงอนไขวาตวเลขทไดรบเขามา = 0 หรอไม ถาเทากบ 0 ใหดาเนนการในสวนของคาสงบรรทดท 8 ซงเปนคาสงใหรบคาอนพตอก จากนนกจะดาเนนการตรวจสอบเงอนไขอกครงในบรรทดท 6

โดยจะทาการวนซาไปจนกวาจะปอนคาทไมใชเลข 0 ถาในกรณทปอนคาเลขอนทไมใชเลข 0 กจะดาเนนการในบรรทดท 10 และจบโปรแกรม

Page 217: การเขียนโปรแกรมคอมพิวเตอร ์portal5.udru.ac.th/ebook/pdf/upload/17P88t2O788B98583682.pdfรูปภาพบางส่วนให

บทท 6 คาสงควบคม

198

ตวอยางท 6.21 โปรแกรมแสดงคาสงตรวจสอบเงอนไขกอนแลวจงทาซา โดยโปรแกรมจะรบคาตวเลขตงแต 1 – 10 ถาอยนอกชวงนใหทาการบใหมจนตวเลขนนอยในชวง 1 – 10 แลวแสดงคานนออกทางหนาจอ

1 10

x x

1 #include <stdio.h> 2 main() 3 { 4 int num; 5 printf("Input = "); scanf("%i",&num); 6 while((num<1)||(num>10)) scanf("%i",&num); 7 printf("Output = %i\n",num); 8 }

ผลลพธของโปรแกรม

(รนครงท 1) ในกรณทปอนเลขทอยนอกเหนอเลข 1-10

Input = 15 -8 100

(รนครงท 2) ในกรณทปอนเลขทอยในชวงเลข 1-10

Input = 9 Output = 9

อธบายโปรแกรม

บรรทดท 5 แสดงตวอกษรและรบคาอนพตเกบไวทตวแปร num

บรรทดท 6 ตรวจสอบเงอนไขวาตวเลขทไดรบเขามานอยกวา 1 หรอมากกวา 10

หรอไม ถาใชกใหดาเนนการในสวนของคาสงดานหลงบรรทดท 5 ซงเปนคาสงใหรบคาอนพตอก จากนนกจะดาเนนการตรวจสอบเงอนไขอกครงในบรรทดท 6 โดยจะทาการวนซาไปจนกวาจะปอนคาทอยในชวงเลข 1-10 จากนนกจะแสดงผลของคาเลขทอยในชวง 1-10

Page 218: การเขียนโปรแกรมคอมพิวเตอร ์portal5.udru.ac.th/ebook/pdf/upload/17P88t2O788B98583682.pdfรูปภาพบางส่วนให

บทท 6 คาสงควบคม

199

ตวอยางท 6.22 โปรแกรมแสดงคาสงตรวจสอบเงอนไขกอนแลวจงทาซา ในการหาคาผลรวมตงแตเลขทปอนเขาไปจนถงเลข 50

1 #include<stdio.h> 2 main(){ 3 int i,sum=0; 4 printf("Enter number : "); 5 scanf("%d",&i); 6 printf("#############################\n"); 7 while(i<=50){ 8 sum = sum+i; 9 printf("%d \t %d \n" ,i,sum); 10 i=i+1; 11 } 12 printf("#############################\n"); 13 }

ผลลพธของโปรแกรม

(รนครงท 1)

Enter number : 45 ############################# 45 45 46 91 47 138 48 186 49 235 50 285 #############################

(รนครงท 2)

Enter number : 57 ############################# #############################

อธบายโปรแกรม

บรรทดท 4,5,6 แสดงตวอกษรและรบคาอนพตเกบไวทตวแปร i บรรทดท 7 ตรวจสอบตวเลขทรบเขามาวามคานอยกวาหรอเทากบ 50 หรอไม

ถาใช จะทางานตามคาสงในบรรทดท 8 – 10 ทาซาไปเรอยๆ จนกวาคา i จะมากกวา 50 จงจะหยดทาซา และไปทางานตามคาสงในบรรทดท 12 ถาไมใช จะทางานตามคาสงในบรรทดท 12

Page 219: การเขียนโปรแกรมคอมพิวเตอร ์portal5.udru.ac.th/ebook/pdf/upload/17P88t2O788B98583682.pdfรูปภาพบางส่วนให

บทท 6 คาสงควบคม

200

ตวอยางท 6.23 โปรแกรมแสดงเลข 1 ถง 100 ออกทางหนาจอโดยใชคาสงแบบวนซา

1 #include <stdio.h> 2 main() 3 { 4 int A=1; 5 while(A<=100) 6 { 7 printf("%i\n",A); 8 A++; 9 } 10 }

ผลลพธของโปรแกรม

1 2 3 4 . . . 96 97 98 99 100

อธบายโปรแกรม

บรรทดท 4 กาหนดคาเรมตนให A = 1 เพอเปนตวนบ

บรรทดท 5 ตรวจสอบเงอนไขวา A นอยกวาหรอเทากบ 100 หรอไม ถาใชกใหดาเนนการในสวนของคาสงบรรทดท 7 ซงเปนคาสงใหแสดงผลลพธคาคาตวแปรนน จากนนดาเนนการในสวนของการเพมคา A โดยเพมทละ 1 จากนนกจะดาเนนการตรวจสอบเงอนไขอกครง โดยจะกระทาซาไปเรอยๆ จนกวาคาตวแปร A จะมากกวา 100 กจะจบโปรแกรม

Page 220: การเขียนโปรแกรมคอมพิวเตอร ์portal5.udru.ac.th/ebook/pdf/upload/17P88t2O788B98583682.pdfรูปภาพบางส่วนให

บทท 6 คาสงควบคม

201

ตวอยางท 6.24 โปรแกรมบวกเลข 1 ถง 100 แลวแสดงผลลพธ

1 #include <stdio.h> 2 main() 3 { 4 int A=1,sum=0; 5 while(A<=100) 6 { 7 sum = sum + A; 8 A++; 9 } 10 printf("%i",sum); 11 }

ผลลพธของโปรแกรม

5050

อธบายโปรแกรม

บรรทดท 4 กาหนดคาเรมตนให A = 1 เพอเปนตวนบ และ sum = 0 เพอใชเปนตวเกบคาผลรวม

บรรทดท 5 ตรวจสอบเงอนไขวา A นอยกวาหรอเทากบ 100 หรอไม ถาใชกใหดาเนนการในสวนของคาสงบรรทดท 7 ซงเปนคาสงใหทาการบวกคา แลวเกบไวทตวแปร sum และดาเนนการของคาสงในบรรทดท 8 ซงเปนคาสงในการการเพมคา A โดยเพมทละ 1 จากนนกจะดาเนนการตรวจสอบเงอนไขอกครง โดยจะกระทาซาไปเรอยๆ จนกวาคาตวแปร A จะมากกวา 100 กจะกระทาในบรรทดท 11 ซงเปนคาสงในการแสดงคาผลรวมทงหมด

6.4.2 คาสงทากอนแลวจงตรวจสอบเงอนไขเพอทาซา (do-while)

คาสงทากอนแลวจงตรวจสอบเงอนไขเพอทาซาคอคาสงทจะทางานคาสงกอนการตรวจสอบเงอนไข โดยทางานตามคาสงภายในลป 1 รอบ จากนนจงทาการทดสอบเงอนไขวาเปนจรง หรอเปนเทจ ถาเงอนไขเปนจรง ใหกลบไปทางานตามชดคาสงภายในลปอก ทางานซาๆ เชนน จนกวาเงอนไขจะเปนเทจ จงออกจากการทางานของคาสงน โดยมรปแบบคาสง คอ

Page 221: การเขียนโปรแกรมคอมพิวเตอร ์portal5.udru.ac.th/ebook/pdf/upload/17P88t2O788B98583682.pdfรูปภาพบางส่วนให

บทท 6 คาสงควบคม

202

รปท 6.12 ผงงานของคาสงแบบทาซาแบบทากอนแลวจงตรวจสอบเงอนไขเพอทาซา

ตวอยางท 6.25 โปรแกรมแสดงคาสงทากอนแลวจงตรวจสอบเงอนไขในการรบคา ในการตรวจคาทรบเขามา

1 #include <stdio.h> 2 main() 3 { 4 int num; 5 do 6 { 7 printf("Input = "); scanf("%i",&num); 8 } while(num==0); 9 printf("Output = %i\n",num); 10 }

ผลลพธของโปรแกรม

(รนครงท 1) ในกรณทปอนคา 0 เขาไปจานวนหลายครง Input = 0 Input = 0 Input = 0

(รนครงท 2) ในกรณทปอนคาอน ทไมใช 0

Input = 5 Output = 5

do{

ชดคาสง }while(เงอนไข);

Page 222: การเขียนโปรแกรมคอมพิวเตอร ์portal5.udru.ac.th/ebook/pdf/upload/17P88t2O788B98583682.pdfรูปภาพบางส่วนให

บทท 6 คาสงควบคม

203

อธบายโปรแกรม

บรรทดท 5 เรมคาสงวนซา และใหทาคาสงบรรทดท 7

บรรทดท 7 แสดงตวอกษรและรบคาอนพตเกบไวทตวแปร num

บรรทดท 8 ตรวจสอบเงอนไขวาตวเลขทไดรบเขามา = 0 หรอไม ถาเทากบ 0 ใหดาเนนการในสวนของคาสงบรรทดท 5, 6 และ7 ใหม ซงเปนคาสงใหรบคาอนพตอก จากนนกจะดาเนนการตรวจสอบเงอนไขอกครงในบรรทดท 8 โดยจะทาการวนซาไปจนกวาจะปอนคาทไมใชเลข 0 ถาในกรณทปอนคาเลขอนทไมใชเลข 0 กจะดาเนนการในบรรทดท 9

และจบโปรแกรม

ตวอยางท 6.26 โปรแกรมแสดงคาสงทากอนแลวจงตรวจสอบเงอนไขเพอทาซาในการหาคาผลรวมตงแตเลขทปอนเขาไปจนถงเลข 50

1 #include<stdio.h> 2 main(){ 3 int i,sum=0; 4 printf("Enter number : "); 5 scanf("%d",&i); 6 printf("#############################\n"); 7 do{ 8 sum = sum+i; 9 printf("%d \t %d \n" ,i,sum); 10 i=i+1; 11 }while(i<=50); 12 printf("#############################\n"); 13 }

ผลลพธของโปรแกรม

(รนครงท 1)

Enter number : 45 ############################# 45 45 46 91 47 138 48 186 49 235 50 285 #############################

(รนครงท 2)

Enter number : 57 ############################# 57 57 #############################

Page 223: การเขียนโปรแกรมคอมพิวเตอร ์portal5.udru.ac.th/ebook/pdf/upload/17P88t2O788B98583682.pdfรูปภาพบางส่วนให

บทท 6 คาสงควบคม

204

อธบายโปรแกรม

บรรทดท 4,5,6 แสดงตวอกษรและรบคาอนพตเกบไวทตวแปร i บรรทดท 7-11 โปรแกรมจะทางานตามคาสงในบรรทดท 8 – 10 จากนนตรวจสอบ

วาคาตวแปร i นอยกวาหรอเทากบ 50 หรอไม ถาใช จะกลบไปทางานตามคาสงในบรรทดท 8 – 10 ทาซาไปเรอยๆ จนกวาคา i จะมากกวา 50 จงจะหยดทาซา และไปทางานตามคาสงในบรรทดท 12

ถาไมใช จะทางานตามคาสงในบรรทดท 12

ตวอยางท 6.27 โปรแกรมบวกเลข 1 ถง 100 แลวแสดงผลลพธ

1 #include <stdio.h> 2 main() 3 { 4 int A,sum; 5 sum = 0; 6 A = 1; 7 do 8 { 9 sum = sum + A; 10 A++; 11 } while (A<=100); 12 printf("%i",sum); 13 }

ผลลพธของโปรแกรม

5050

อธบายโปรแกรม

บรรทดท 5,6 กาหนดคาเรมตนให A = 1 เพอเปนตวนบ และ sum = 0 เพอใชเปนตวเกบคาผลรวม

บรรทดท 7 ดาเนนการคาสงในบรรทดท 9 และ 10 จากนนตรวจสอบเงอนไขวา A นอยกวาหรอเทากบ 100 หรอไม ถาใชกใหดาเนนการของคาสงในบรรทดท 9 และ 10 ไปเรอยๆ จนกวาคาตวแปร A จะมากกวา 100 กจะกระทาในบรรทดท 11 ซงเปนคาสงในการแสดงคาผลรวมทงหมด

Page 224: การเขียนโปรแกรมคอมพิวเตอร ์portal5.udru.ac.th/ebook/pdf/upload/17P88t2O788B98583682.pdfรูปภาพบางส่วนให

บทท 6 คาสงควบคม

205

6.4.3 คาสงทาซาตามจานวนรอบทระบ (for)

คาสงทาซาตามจานวนรอบทระบ จะใชในงานทสามารถระบจานวนรอบในการทาซาได โดยมรปแบบคาสง คอ

กาหนดคาเรมตนใหกบตวแปร เปนการกาหนดคาเรมตนใหกบตวแปรทใชในการตรวจสอบการทาซา เงอนไขทตองการตรวจสอบ เปนการตรวจสอบคาตวแปรทใชในการทาซา โดยถาคาเปนจรงจะทาซา แตถาคาเปนเทจจะหยดการทาซา การปรบคาของตวแปร เปนการเพมหรอลดคาตวแปรเพอใหสามารถทาซาหรอหยดการทาซาได

รปแบบคาสงทาซาตามจานวนรอบทระบกจะคลายกนกบรปแบบการวนซาของหวขอทไดกลาวกอนหนาน เพยงแตวารปแบบคาสงทาซาแบบนจะมการกาหนดในคาสงโดยตรง กาหนดคาเรมตน กาหนดเงอนไข กาหนดการปรบคาตวแปร ทาใหสะดวกตอการใชงาน ดงตวอยางของรปแบบคาสงทาซาตามจานวนรอบในรปท 6.13

รปท 6.13 ผงงานของคาสงแบบทาซาตามจานวนรอบ

for(กาหนดคาเรมตนใหกบตวแปร ; เงอนไขในการตรวจสอบ ; ปรบคาตวแปร){ ชดคาสง }

Page 225: การเขียนโปรแกรมคอมพิวเตอร ์portal5.udru.ac.th/ebook/pdf/upload/17P88t2O788B98583682.pdfรูปภาพบางส่วนให

บทท 6 คาสงควบคม

206

ตวอยางท 6.28 โปรแกรมแสดงคาสงทาซาตามจานวนรอบทระบ โดยใหแสดงชอของนกศกษาออกทางหนาจอภาพจานวน 100 ครง

1 #include <stdio.h> 2 main() 3 { 4 int count; 5 for(count=0;count<100;count++) 6 { 7 printf("[%i] Asst.Prof.Dr.Krit\n",count); 8 } 9 }

ผลลพธของโปรแกรม

[0]Asst.Prof.Dr.Krit [1]Asst.Prof.Dr.Krit [2]Asst.Prof.Dr.Krit . . . [98]Asst.Prof.Dr.Krit [99]Asst.Prof.Dr.Krit

อธบายโปรแกรม

บรรทดท 5 เรมคาสงวนซา โดยกาหนดให count = 0 และใหเปรยบเทยบเงอนไขวา count มคานอยกวา 100 หรอไม ถาใช (มคานอยกวา) ใหกระทาคาสงในบรรทดท 7 สดทายใหทาการปรบคา count เพมทละ 1 และทาการตรวจสอบเงอนไขตอไป ใหกระทาจนกวาคา count มคา = 100 จงจะหยดทางานของโปรแกรม

บรรทดท 7 แสดงตวอกษร

ตวอยางท 6.29 โปรแกรมแสดงคาสงทาซาตามจานวนรอบทระบ โดยใหแสดงเลข 10 ถง 100

ออกทางหนาจอภาพ

1 #include <stdio.h> 2 main() 3 { 4 int num; 5 for(num=10;num<=100;num++) printf("[%i]\n",num); 6 }

Page 226: การเขียนโปรแกรมคอมพิวเตอร ์portal5.udru.ac.th/ebook/pdf/upload/17P88t2O788B98583682.pdfรูปภาพบางส่วนให

บทท 6 คาสงควบคม

207

ผลลพธของโปรแกรม

[10] [11] [12] . . . [99] [100]

อธบายโปรแกรม

บรรทดท 5 เรมคาสงวนซา โดยกาหนดให num = 10 และใหเปรยบเทยบเงอนไขวา num มคานอยกวาหรอเทากบ 100 หรอไม ถาใชใหกระทาคาสงถดไปคอคาสงแสดงผลตวเลข สดทายใหทาการปรบคา num เพมทละ 1 และทาการตรวจสอบเงอนไขตอไป ใหกระทาจนกวาคา num มคา = 101 จงจะหยดทางานของโปรแกรม

ตวอยางท 6.30 โปรแกรมแสดงคาสงทาซาตามจานวนรอบทระบ โดยใหแสดงเลข 100 ถง 1

ออกทางหนาจอภาพ

1 #include <stdio.h> 2 main() 3 { 4 int num; 5 for(num=100;num>=1;num--) printf("[%i]\n",num); 6 }

ผลลพธของโปรแกรม

[100] [99] [98] . . . [2] [1]

อธบายโปรแกรม

บรรทดท 5 เรมคาสงวนซา โดยกาหนดให num = 100 และใหเปรยบเทยบเงอนไขวา num มคามากกวาหรอเทากบ 1 หรอไม ถาใชใหกระทา

Page 227: การเขียนโปรแกรมคอมพิวเตอร ์portal5.udru.ac.th/ebook/pdf/upload/17P88t2O788B98583682.pdfรูปภาพบางส่วนให

บทท 6 คาสงควบคม

208

คาสงถดไปคอคาสงแสดงผลตวเลข สดทายใหทาการปรบคา num

ลดทละ 1 และทาการตรวจสอบเงอนไขตอไป ใหกระทาจนกวาคา num มคา = 0 จงจะหยดทางานของโปรแกรม

ตวอยางท 6.31 โปรแกรมแสดงคาสงทาซาตามจานวนรอบทระบ โดยใหแสดงเลขค ตงแตเลข 1 ถง 10 ออกทางหนาจอภาพ

1 #include <stdio.h> 2 main() 3 { 4 int num; 5 for(num =1; num <=10; num +=2) 6 printf("[%i]\n", num); 7 }

ผลลพธของโปรแกรม

[1] [3] [5] [7] [9]

อธบายโปรแกรม

บรรทดท 5 เรมคาสงวนซา โดยกาหนดให num = 1 และใหเปรยบเทยบเงอนไขวา num มคานอยกวาหรอเทากบ 10 หรอไม ถาใชใหกระทาคาสงถดไปคอคาสงแสดงผลตวเลขในบรรทดท 6 สดทายใหทาการปรบคา num โดยใหเพมคาทละ 2 และทาการตรวจสอบเงอนไขตอไป ใหกระทาจนกวาคา num มคา = 11 จงจะหยดทางานของโปรแกรม

บรรทดท 7 แสดงตวอกษรผลลพธ

ตวอยางท 6.32 โปรแกรมแสดงคาสงทาซาตามจานวนรอบทระบ โดยใหแสดงผลรวมของเลขททาการแสดงผลทงหมดและแสดงหมายเลขของคาสง

1 #include<stdio.h> 2 main(){ 3 int i,sum=0; 4 for(i=1;i<=10;i++){ 5 sum = sum + i; 6 printf("%d \t %d \n" ,i,sum); 7 } 8 }

Page 228: การเขียนโปรแกรมคอมพิวเตอร ์portal5.udru.ac.th/ebook/pdf/upload/17P88t2O788B98583682.pdfรูปภาพบางส่วนให

บทท 6 คาสงควบคม

209

ผลลพธของโปรแกรม 1 1 2 3 3 6 4 10 5 15 6 21 7 28 8 36 9 45 10 55

อธบายโปรแกรม

บรรทดท 5 เรมคาสงวนซา โดยกาหนดให i = 1 และใหเปรยบเทยบเงอนไขวา i มคานอยกวาหรอเทากบ 10 หรอไม ถาใชใหกระทาคาสงบรรทดท 5

และบรรทดท 6 สดทายใหทาการปรบคา i โดยใหเพมคาทละ 1 และทาการตรวจสอบเงอนไขตอไป ใหกระทาจนกวาคา i มคาเกน 10 จงจะหยดทางานของโปรแกรม

บรรทดท 5 เกบคาผลรวม

บรรทดท 7 แสดงตวอกษรผลลพธ

การใชคาสง for ซอน for (nested for) เปนการนาคาสง for หลายๆ ชดมาทางานซอนกน ซงจะเรมจากลป for ทอยขางนอก ไปยงลป for ทอยขางใน โดยทางานลป for ทอยขางนอก แตละรอบ จะทางานลป for ทอยขางในจนครบทกรอบ แลวจงจะกลบไปทาลป for ทอยขางนอกรอบตอไป ทาจนกวาลป for นอกสดจะเปนเทจ

ตวอยางท 6.33 โปรแกรมแสดงคาสง for ซอน for ในการแสดงผลของสญลกษณ

1 #include<stdio.h> 2 main(){ 3 for(int i=5;i>=1;i--){ 4 printf("%d\n",i); 5 for(int j=1;j<=i;j++){ 6 printf("*"); 7 } 8 printf("\n"); 9 } 10 }

Page 229: การเขียนโปรแกรมคอมพิวเตอร ์portal5.udru.ac.th/ebook/pdf/upload/17P88t2O788B98583682.pdfรูปภาพบางส่วนให

บทท 6 คาสงควบคม

210

ผลลพธของโปรแกรม 5 ***** 4 **** 3 *** 2 ** 1 *

อธบายโปรแกรม

บรรทดท 3 เรมคาสงวนซา โดยกาหนดให i = 5 และใหเปรยบเทยบเงอนไขวา i มคามากกวาหรอเทากบ 1 หรอไม ถาใชใหกระทาคาสงบรรทดท 4

ถงบรรทดท 6 ซงเปนการพมพเลขทประมวลผลตอนนนออกทางหนาจอภาพอกทงยงมการตรวจสอบเงอนไขอกชน สดทายใหทาการปรบคา i โดยใหลดคาทละ 1 และทาการตรวจสอบเงอนไขตอไป ใหกระทาจนกวาคา i มคานอยกวา 1 จงจะหยดทางานของโปรแกรม

บรรทดท 4 แสดงตวเลข บรรทดท 5 เรมคาสงวนซา โดยกาหนดให j = 1 และใหเปรยบเทยบเงอนไขวา j

มคามากกวาหรอเทากบ 1 หรอไม ถาใชใหกระทาคาสงบรรทดท 6

ซงเปนการพมพ * ออกทางหนาจอภาพ สดทายใหทาการปรบคา j โดยใหลดคาทละ 1 และทาการตรวจสอบเงอนไขตอไป ใหกระทาจนกวาคา j มคานอยกวา 1 จงจะหยดทางานของโปรแกรม

บรรทดท 6 แสดงสญลกษณ *

โปรแกรมนจะทางานลปนอก 5 รอบ คอ i เรมตนท 5 และลดคาทละ 1 จนกระทง i เปน 0 จงออกจากลปนอก โดยการทางานลปนอกแตละครงจะทาลปใน i รอบ เชน ถา i เปน 5

จะทาลปใน 5 รอบ คอการพมพเครองหมาย * 5 ครง และถา i เปน 4 จะทางานลปใน 4 รอบ

คอการพมพเครองหมาย * 4 ครง เปนตน

Page 230: การเขียนโปรแกรมคอมพิวเตอร ์portal5.udru.ac.th/ebook/pdf/upload/17P88t2O788B98583682.pdfรูปภาพบางส่วนให

บทท 6 คาสงควบคม

211

ตวอยางท 6.34 โปรแกรมแสดงคาสง for ซอน for โดยพมพแมสตรคณตงแต แม 2 ถงแม 5

1 #include <stdio.h> 2 main() 3 { 4 int i,j; 5 for(i=2;i<=5;i++) 6 { 7 for(j=2;j<=12;j++) 8 { 9 printf("%i x %i = %i\n",i,j,i*j); 10 } 11 printf("\n"); 12 } 13 }

ผลลพธของโปรแกรม 2 x 2 = 4 2 x 3 = 6 2 x 4 = 8 2 x 5 = 10 2 x 6 = 12 2 x 7 = 14 2 x 8 = 16 2 x 9 = 18 2 x 10 = 20 2 x 11 = 22 2 x 12 = 24 . . . 3 x 2 = 6 3 x 3 = 9 3 x 4 = 12 . . . 5 x 10 = 50 5 x 11 = 55 5 x 12 = 60

อธบายโปรแกรม

บรรทดท 5 เรมคาสงวนซา โดยกาหนดให i = 2 และใหเปรยบเทยบเงอนไขวา i มคานอยกวาหรอเทากบ 5 หรอไม ถาใชใหกระทาคาสงบรรทดท 7

ถงบรรทดท 11 สดทายใหทาการปรบคา i โดยใหเพมคาทละ 1 และทาการตรวจสอบเงอนไขตอไป ใหกระทาจนกวาคา i มคามากกวา 5

จงจะหยดทางานในสวนของการทาซาในสวนน

Page 231: การเขียนโปรแกรมคอมพิวเตอร ์portal5.udru.ac.th/ebook/pdf/upload/17P88t2O788B98583682.pdfรูปภาพบางส่วนให

บทท 6 คาสงควบคม

212

บรรทดท 7 เรมคาสงวนซายอย โดยกาหนดให j = 2 และใหเปรยบเทยบเงอนไขวา j มคานอยกวาหรอเทากบ 12 หรอไม ถาใชใหกระทาคาสงบรรทดท 9 สดทายใหทาการปรบคา j โดยใหเพมคาทละ 1 และทาการตรวจสอบเงอนไขตอไป ใหกระทาจนกวาคา j มคามากกวา 12 จงจะหยดทางานในสวนของการทาซาในสวนน และไปกระทาในบรรทดท

11

บรรทดท 9 แสดงผลลพธ

คาสงทาซาตามจานวนรอบทระบของคาสง for ไมจาเปนตองเปนจานวนเตม โดยตวนบสามารถทจะเปนชนดขอมลใดกไดหรอแมแตไมมตวนบ ในกรณทใชตวนบเปนเลขทศนยมกกระทาไดแตการใชตวนบทเปนทศนยมมขอควรระวงคอ ไมควรใชการเปรยบเทยบคาโดยใช == หรอ != สาหรบเปนเงอนไขหยดการวนซาเพราะการเปรยบเทยบ == และ != ของเลขทศนยมจะไมไดผลลพธถกตองพอด ซงอาจทาใหเงอนไขการหยดไมเกดขน ดงนนในการเขยนโปรแกรมในการทาซาสาหรบผ เรมตนควรจะเขยนใหอยในรปของชนดขอมลแบบจานวนเตมกอน แลวถามปญหาใดทตองใชเลขทศนยมคอยปรบเปลยนการเขยนรปแบบใหเหมาะสม

ดงแสดงในตวอยางท 6.35

ตวอยางท 6.35 โปรแกรมแสดงคาสง for ซอน for ทตวนบเปนเลขทศนยมทผดพลาด

1 #include <stdio.h> 2 main() 3 { 4 float i; 5 for(i=0.1;i!=0.6;i+=0.1) 6 printf("%f\n",i); 7 }

ผลลพธของโปรแกรม 0.100000 0.200000 0.300000 0.400000 0.500000 0.600000 0.700000 . . .

Page 232: การเขียนโปรแกรมคอมพิวเตอร ์portal5.udru.ac.th/ebook/pdf/upload/17P88t2O788B98583682.pdfรูปภาพบางส่วนให

บทท 6 คาสงควบคม

213

อธบายโปรแกรม

บรรทดท 5 เรมคาสงวนซา โดยกาหนดให i = 0.1 และใหเปรยบเทยบเงอนไขวา i ไมเทากบ 0.6 หรอไม ถาใชใหกระทาคาสงบรรทดท 6 สดทายใหทาการปรบคา i โดยใหเพมคาทละ 0.1 และทาการตรวจสอบเงอนไขตอไป ใหกระทาจนกวาคา i = 0.6 จงจะหยดทางานของโปรแกรม

แตเมอนาโปรแกรมไปใชงานจรงปรากฏวาโปรแกรมทางานประโยค for ไปเรอยๆ ทเปนเชนนเพราะ i ไมใชคา 0.6 พอด ดงนนในโปรแกรมนกจะแสดงคาไปเรอยๆ ไมมทสนสด

บรรทดท 6 แสดงตวเลข

6.5 คาสงแบบกระโดด (Jump Statement)

คาสงแบบกระโดดคอการเขยนคาสงในลกษณะทกระโดดไปทาในคาสงบรรทดทตองการโดยไมมเงอนไขดงฟงกชน break, continue และ goto เปนตน

6.5.1 คาสงกระโดดโดยใชฟงกชน break

คาสง break จะวางอยในสวนของประโยค switch, while, do...while หรอ for โดยคาสงนจะไมสามารถทจะอยนอกสวนของประโยคเหลานนได ในการทางานกเปรยบเสมอนการทางานของคาสงวนซาตางๆ เพยงแตจะมการสนสดของโปรแกรมเกดขนเมอใชคาสง break และจะดาเนนตอไปทประโยคถดไป ดงแสดงในตวอยาง

ตวอยางท 6.36 โปรแกรมพมพเลขตงแต 1 ถง 5 แตเมอ i = 3 กจะทาประโยค if (i==3)

break; ซงเปนการกระโดดออกจาก Loop ไปเลย

1 #include <stdio.h> 2 main() 3 { 4 int i; 5 for(i=1;i<=5;i++) 6 { 7 if (i==3) break; 8 printf("%i\n",i); 9 } 10 }

Page 233: การเขียนโปรแกรมคอมพิวเตอร ์portal5.udru.ac.th/ebook/pdf/upload/17P88t2O788B98583682.pdfรูปภาพบางส่วนให

บทท 6 คาสงควบคม

214

ผลลพธของโปรแกรม 1 2

อธบายโปรแกรม

บรรทดท 5 เรมคาสงวนซา โดยกาหนดให i = 1 และใหเปรยบเทยบเงอนไขวา i มคานอยกวาหรอเทากบ 5 หรอไม ถาใชใหกระทาคาสงบรรทดท 7

ถงบรรทดท 8 สดทายใหทาการปรบคา i โดยใหเพมคาทละ 1 และทาการตรวจสอบเงอนไขตอไป ใหกระทาจนกวาคา i มคามากกวา 5

จงจะหยดทางานของโปรแกรม

บรรทดท 7 ตรวจสอบเงอนไข ถา i = 3 ให หยดโปรแกรมและออกจากสวนของการทาซา

บรรทดท 8 แสดงตวเลข

6.5.2 คาสงกระโดดโดยใชฟงกชน continue

คาสง break จะวางอยในสวนของประโยค while, do...while หรอ for เทานน ไมสามารถใชไดกบคาสง switch โดยคาสงนจะไมสามารถทจะอยนอกสวนของประโยคเหลานนได ในการทางานกเปรยบเสมอนการทางานของคาสงวนซาตางๆ เพยงแตจะมการเรมตนใหมเมอใชคาสง continue ดงแสดงในตวอยาง

ตวอยางท 6.37 โปรแกรมพมพเลขตงแต 1 ถง 5 โดยไมพมพเลข 2 ออกมา

1 #include <stdio.h> 2 main() 3 { 4 int i; 5 for(i=1;i<=5;i++) 6 { 7 if (i==2) continue; 8 printf("%i\n",i); 9 } 10 }

ผลลพธของโปรแกรม 1 3 4 5

Page 234: การเขียนโปรแกรมคอมพิวเตอร ์portal5.udru.ac.th/ebook/pdf/upload/17P88t2O788B98583682.pdfรูปภาพบางส่วนให

บทท 6 คาสงควบคม

215

อธบายโปรแกรม

บรรทดท 5 เรมคาสงวนซา โดยกาหนดให i = 1 และใหเปรยบเทยบเงอนไขวา i มคานอยกวาหรอเทากบ 5 หรอไม ถาใชใหกระทาคาสงบรรทดท 7

ถงบรรทดท 8 สดทายใหทาการปรบคา i โดยใหเพมคาทละ 1 และทาการตรวจสอบเงอนไขตอไป ใหกระทาจนกวาคา i มคามากกวา 5

จงจะหยดทางานของโปรแกรม

บรรทดท 7 ตรวจสอบเงอนไข ถา i = 2 ใหเรมตนตรวจสอบเงอนไขใหมในบรรทดท 5

บรรทดท 8 แสดงตวเลข

6.5.3 คาสงกระโดดโดยใชฟงกชน goto

คาสง goto เปนคาสงทกระโดดไปยงคาสงทตองการโดยจะตองมการกาหนดปาย (Label) ซงเปนชอทใชอางองในตาแหนงทจะกระโดดไปทางาน โดยมขอบเขตวาการกระโดดไปยงคาสงทตองการจะตองอยภายในฟงกชนเดยวกนเทานน ดงแสดงในตวอยาง

ตวอยางท 6.38 โปรแกรมแสดงการใชคาสง goto

1 #include <stdio.h> 2 main() 3 { 4 int i = 1; 5 loop : 6 printf("%i\n",i++); 7 if (i <= 5) goto loop; 8 /* End of loop */ 9 }

ผลลพธของโปรแกรม 1 3 4 5

อธบายโปรแกรม

บรรทดท 5 กาหนดปาย (Label) ทใชระบตาแหนงทจะกระโดด

บรรทดท 6 แสดงตวเลข

Page 235: การเขียนโปรแกรมคอมพิวเตอร ์portal5.udru.ac.th/ebook/pdf/upload/17P88t2O788B98583682.pdfรูปภาพบางส่วนให

บทท 6 คาสงควบคม

216

บรรทดท 7 ตรวจสอบเงอนไข ถา i <= 5 ใหกระโดดไปยงปายทชอวา loop ในบรรทดท 5 ถามากกวากจบโปรแกรม

จะเหนวาการใช goto จะหาจดสนสดของ loop ไดยากกวาการใชคาสงวนซา ดงนนในปจจบนเราจะไมนยมใช goto ในการกระโดดของโปรแกรมเพราะจะทาใหยากตอการทาความเขาใจโปรแกรม

Page 236: การเขียนโปรแกรมคอมพิวเตอร ์portal5.udru.ac.th/ebook/pdf/upload/17P88t2O788B98583682.pdfรูปภาพบางส่วนให

บทท 6 คาสงควบคม

217

บทสรป

ในบทนไดกลาวถงพนฐานคาสงควบคมในภาษาซ คาสงแบบลาดบ คาสงแบบเลอกหรอแบบมเงอนไข คาสงแบบวนซา และคาสงแบบกระโดด ซงเปนพนฐานทสาคญในการเขยนโปรแกรมทาใหสามารถชวยควบคมการทางานของโปรแกรม ชวยใหคดวธการเขยนโปรแกรมเพอแกปญหาทซบซอนตางๆ ทาใหสามารถแกปญหาไดอยางเปนระบบ คาสงควบคมในการเขยนโปรแกรมม 4 รปแบบ นนคอ แบบเสนตรง แบบมทางเลอก แบบทาซา และแบบกระโดด โดยแตละแบบกจะมโครงสรางการทางานทแตกตางกน และนาไปใชในรปของปญหาทเหมาะสมกบงาน คาสงแบบลาดบคอการเขยนคาสงในลกษณะจากบนลงลางโดยทวไป ในทกๆ คาสงตงแตตนจนจบโปรแกรม จนครบทกคาสง คาสงแบบเลอกหรอแบบมเงอนไขคอการเขยนคาสงในลกษณะตรวจสอบเงอนไขของชดคาสงวาตรงตามเงอนไขทกาหนดหรอไม ถาตรงตามเงอนไขกใหกระทาในสวนหนง ถาไมตรงตามเงอนไขกใหไปกระทาอกสวน

เปรยบเสมอนการเลอกเสนทางในการดาเนนการของชดคาสง โดยในภาษาซมคาสงในการเลอกดงนคาสงทดสอบเงอนไข 1 ทางเลอก (if) คาสงทดสอบเงอนไข 2 ทางเลอก (if-else)

คาสงทดสอบเงอนไขหลายทางเลอก (nested if) และคาสงเลอกเงอนไข (switch-case) คาสงแบบวนซาคอการเขยนคาสงในลกษณะคาสงทมการทางานวนซาๆ เปนวงรอบหรอลป (Loop)

จนกวาเงอนไขททดสอบจะเปนเทจ จงจะสามารถออกจากการทางานของคาสง ในภาษาซสามารถแบงออกเปน 3 ชนด คอคาสงตรวจสอบเงอนไขกอนแลวจงทาซา (while) คาสงทากอนแลวจงตรวจสอบเงอนไขเพอทาซา (do-while) คาสงทาซาตามจานวนรอบทระบ (for)

คาสงแบบกระโดดคอการเขยนคาสงในลกษณะทกระโดดไปทาในคาสงบรรทดทตองการโดยไมมเงอนไขดงฟงกชน break, continue และ goto เปนตน

Page 237: การเขียนโปรแกรมคอมพิวเตอร ์portal5.udru.ac.th/ebook/pdf/upload/17P88t2O788B98583682.pdfรูปภาพบางส่วนให

บทท 6 คาสงควบคม

218

แบบฝกหดทบทวน

1. จงหาคาผลลพธตวแปรของโปรแกรมดงตอไปน

int a = 10,count=0; if(a>0) { count++; }

int a = 10,count=0; if(a>10) { count++; }

int a = 10,count=0; if(a<10) { count++; }

int a = 10,count=0; if(a!=10) { count++; }

int a = 10,count=0; if(a-->10) { count++; }

int a = 10,count=0; if(++a>10) { count++; }

2. จงหาคาผลลพธตวแปรของโปรแกรมดงตอไปน

int a=-1,b=1,c=0,count=0; if( (a<0) && (b>0) ) { count++; }

int a=-1,b=1,c=0,count=0; if( (a<0) && (b<0) ) { count++; }

int a=-1,b=1,c=0,count=0; if( (a>0) && (b>0) ) { count++; }

int a=-1,b=1,c=0,count=0; if( (a>0) && (b<0) ) { count++; }

Page 238: การเขียนโปรแกรมคอมพิวเตอร ์portal5.udru.ac.th/ebook/pdf/upload/17P88t2O788B98583682.pdfรูปภาพบางส่วนให

บทท 6 คาสงควบคม

219

3. จงแปลงโปรแกรมดงตอไปนใหอยในรปแบบคาสงเลอกเงอนไข (switch-case)

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25

#include <stdio.h> main() { char grade; printf("Input grade "); scanf("%c",&grade); if(grade=='A') { printf("Excellent"); } else if(grade=='B') { printf("Good"); } else if(grade=='C') { printf("Fair"); } else if(grade=='D') { printf("Bad"); } else if(grade=='F') { printf("Fail"); } else { printf("Invalid"); } }

4. จงหาคาผลลพธตวแปรของโปรแกรมดงตอไปน

int a=1,count=0; while(a<10) { a++; }

int a=1,count=0; while(a<10) a++;

int a=1,count=0; while(a<10) a++;

int a=1,count=0; while(a<10) { a++; count++; }

int a=1,count=0; while(a<10) a++; count++;

int a=1,count=0; while(a<10) a++; count++;

Page 239: การเขียนโปรแกรมคอมพิวเตอร ์portal5.udru.ac.th/ebook/pdf/upload/17P88t2O788B98583682.pdfรูปภาพบางส่วนให

บทท 6 คาสงควบคม

220

5. จงหาคาผลลพธตวแปรของโปรแกรมดงตอไปน

int a=-5,count=0; do { a++; } while(a<0);

int a=-5,count=0; do a++; while(a<0);

int a=-5,count=0; do a++; while(a<0);

int a=-5,count=0; do { a++; count++; } while(a<0);

int a=-5,count=0; do a++; count++; while(a<0);

int a=-5,count=0; do a++; count++; while(a<0);

6. จงหาคาผลลพธตวแปรของโปรแกรมดงตอไปน

int i,count=0; for(i=0;i<10;i++) { count++; }

int i,count=0; for(i=10;i<10;i++) { count++; }

int i=10,count=0; for(i=0;i<10;i++) { count++; }

int i=10,count=0; for(;i<10;i++) { count++; }

int i,count=0; for(i=20;i<10;i++) { count++; }

int i,count=0; for(i=0;1<10;i++) { count++; }

int i,count=0; for(i=0;1>10;i++) { count++; }

int i,count=0; for(i=0; ;i++) { count++; }

int i,count=0; for(i=0;i<10;i++) { count++; i++; }

Page 240: การเขียนโปรแกรมคอมพิวเตอร ์portal5.udru.ac.th/ebook/pdf/upload/17P88t2O788B98583682.pdfรูปภาพบางส่วนให

บทท 6 คาสงควบคม

221

7. จงหาคาผลลพธตวแปรของโปรแกรมดงตอไปน

int i=0,j=0,count=0; while(i<5) { while(j<5) { count++; j++; } i++; }

int i=0,j=0,count=0; while(i<5) { do { i++; count++; } while(i<5); }

int i=0,j=0,count=0; while(i<5) { for(j=0;j<5;j++) count++; }

int i=0,j=0,count=0; do { while(i<5) { j++; count++; } i++; } while(i<5);

int i=0,j=0,count=0; do { do { j++; count++; } while(j<5); i++; } while(i<5);

int i=0,j=0,count=0; do { for(j=0;j<5;j++) count++; i++; } while(i<5);

int i=0;j=0;count=0; for(i=0;i<5;i++) { while(j<5) { count++; j++; } }

int i=0;j=0;count=0; for(i=0;i<5;i++) { do { j++; count++; } }

int i=0;j=0;count=0; for(i=0;i<5;i++) { for(j=0;j<5;j++) count++; }

Page 241: การเขียนโปรแกรมคอมพิวเตอร ์portal5.udru.ac.th/ebook/pdf/upload/17P88t2O788B98583682.pdfรูปภาพบางส่วนให

บทท 6 คาสงควบคม

222

8. จงหาคาผลลพธตวแปรของโปรแกรมดงตอไปน

int i,j,k,count=0; int count_i=0,count_j=0,count_k=0; for(i=0;i<3;i++) { for(j=0;j<4;j++) { for(k=0;k<5;k++) { count++; count_k++; } count_j++; } count_i++; }

int i=3,j=3,k=3,count=0; int count_i=0,count_j=0,count_k=0; for(i=0;i<=j;i++) { for(j=0;j<=k;j++) { for(k=0;k<5;k++) { count++; count_k++; } count_j++; } count_i++; }

9. จงเขยนผลลพธของโปรแกรม

1 2 3 4 5 6 7 8 9 10 11 12 13

#include <stdio.h> main() { for(int i = 0; i < 3; i++) { for(int j = 0; j < 3; j++) { if ((i==1) && (j==1)) break; printf("i = %i j = %i\n",i,j); } printf("End j loop\n"); } }

10. จงเขยนโปรแกรมเพอรบคาคะแนนของนกศกษาทางคยบอรด แลวพจารณาวาถาคะแนนนอยกวา 50 ใหแสดงคาวา Fail ถามากกวานนใหแสดงคาวา Pass ทางหนาจอ

11. จงเขยนโปรแกรมเพอใหสามารถรบคายอดซอของลกคาทางคยบอรด แลวคานวณสวนลด

และราคาหลงหกสวนลด จากนนใหแสดงยอดซอ สวนลด และ ราคาหลงหกสวนลดออกทางหนาจอ โดยมเงอนไขการลดราคาสนคาใหกบลกคาดงน

- ยอดซอตงแต 3,000 – 4,999 บาท ลด 10%

- ยอดซอตงแต 5,000 – 7,999 บาท ลด 20%

- ยอดซอตงแต 8,000 บาท ขนไป ลด 30%

Page 242: การเขียนโปรแกรมคอมพิวเตอร ์portal5.udru.ac.th/ebook/pdf/upload/17P88t2O788B98583682.pdfรูปภาพบางส่วนให

บทท 6 คาสงควบคม

223

12. จงเขยนโปรแกรมเพอรบคาอายของลกคาทางคยบอรดจานวน 10 คน เพอตรวจสอบวา มลกคาทมอายระหวาง 25-35 ป อยกคน โดยใหแสดงผลลพธออกทางหนาจอ

13. จงเขยนโปรแกรมเพอรบคาตวเลข 2 จานวน คอ A กบ B ทางคยบอรด โดย A,B เปนเลขจานวนเตมบวกใดๆ โดย A <= B แลว ใหแสดงตวเลขจาก A ถง B ออกทางหนาจอ

14. จงเขยนโปรแกรมเพอแสดงเลขคตงแต 1 ถง 100 ออกทางหนาจอพรอมทงแสดงคาผลรวมของเลขคออกทางหนาจอภาพดวย

15. จงเขยนโปรแกรมเพอแสดงเลขคตงแต 1 ถง 100 ออกทางหนาจอพรอมทงแสดงคาผลรวมของเลขคออกทางหนาจอภาพดวย

16. จงเขยนโปรแกรมเพอแสดงจานวนทอยระหวาง 1 ถง 100 โดยใหแสดงเฉพาะเลขทหารดวย 5 ลงตวพรอมทงแสดงคาผลรวมของเลขทหารดวย 5 ลงตวทงหมดตงแต 1 ถง 100

ออกทางหนาจอภาพ

17. จงเขยนโปรแกรมใหแสดงผลลพธดงรป โดยผใชปอนคาตวเลขสงสดทตองการแสดงผล

1 2 2 3 3 3 4 4 4 4 5 5 5 5 5

5 4 4 3 3 3 2 2 2 2 1 1 1 1 1

1 1 1 1 1 2 2 2 2 3 3 3 4 4 5

5 5 5 5 5 4 4 4 4 3 3 3 2 2 1

1 1 1 1 1 2 2 2 2 2 3 3 3 3 3 4 4 4 4 4 5 5 5 5 5

18. จงเขยนโปรแกรมหาคา Factorial โดย นยามของ Factorial คอ 0! = 1 1! = 0! * 1 = 1 * 1 2! = 1! * 2 = 1 * 1 * 2 3! = 2! * 3 = 1 * 1 * 2 * 3 4! = 3! * 4 = 1 * 1 * 2 * 3 * 4 ... n! = (n-1)! * n

Page 243: การเขียนโปรแกรมคอมพิวเตอร ์portal5.udru.ac.th/ebook/pdf/upload/17P88t2O788B98583682.pdfรูปภาพบางส่วนให

บทท 7 แถวลาดบ

บทท 7

แถวลาดบ

ในบทนจะกลาวถง โครงสรางแถวลาดบ (Array Structure) แถวลาดบ 1 มต (One-

Dimensional Array) แถวลาดบแบบ 2 มต (Two-Dimensional Array) แถวลาดบ 3 มต

(Three-Dimension Array) ขนาดแถวลาดบอตโนมต (Automatic Size of Array) และแถวลาดบของสายอกขระ (Array of String) แถวลาดบเปนกลมของขอมลทมลกษณะของขอมลชนดเดยวกน ทาการจดกลมรวมกนโดยใชชอเดยวกนซงสามารถอางองขอมลโดยใชดรรชน

โดยแถวลาดบจะมขนาดคงท และมการจดเกบขอมลชนดใดชนดหนงตามทกาหนด

นอกจากนนสามารถกาหนดจานวนมตของแถวลาดบได จงสามารถนามาประยกตใชในการจดเกบขอมลประเภทตางๆ ไดอยางเหมาะสม และมประสทธภาพ ซงเปนโครงสรางทมความสาคญในการประยกตไปสการเขยนโปรแกรมระดบสง

7.1 โครงสรางแถวลาดบ (Array Structure)

ในการเขยนโปรแกรมถาเราตองการตวแปรหลายตวเพอเกบคาหลายคาทมลกษณะเดยวกน เชน ตองการประกาศตวแปรเพอเกบคาของคะแนนนกศกษาจานวน 150 คนกตองประกาศตวแปรจานวน 150 ตว ดงน int x1,x2,x3,...,x150; กจะทาใหเขยนโปรแกรมลาบาก ยากตอการจดการ ยงถามการบคาเขามาโดยใชคาสง scanf กจะตองใชคาสง scanf จานวน

150 คาสง ซงเปนเรองยงยาก ดงนนจงมแนวคดของแถวลาดบ (Array) ขนมาเพอใชจดการกบตวแปรทใชเกบคาลกษณะเดยวกน ดงนนถาตองการตวแปร 150 ตวเกบคาคะแนนนกศกษากประกาศตวแปรดงน int x[150]; และการอางองขอมลในแตละตวกสามารถกระทาไดโดยงายโดยใชดรรชนหรอหมายเลขระบตาแหนงของขอมลทตองการ ตวแปรภาษา (Compiler) จะทาการจองหนวยความจาสาหรบเกบตวแปรชนด int จานวน 150 ตวไว โดยตวแปรตวแรกคอ

Page 244: การเขียนโปรแกรมคอมพิวเตอร ์portal5.udru.ac.th/ebook/pdf/upload/17P88t2O788B98583682.pdfรูปภาพบางส่วนให

บทท 7 แถวลาดบ

226

x[0] ตวแปรทสองคอ x[1] ... ตวแปรตวท 150 คอ x[149] โดยรปแบบนเราเรยกวาแถวลาดบ

1 มต

แถวลาดบหรออาเรย คอโครงสรางขอมลทใชตวแปรเดยวเกบกลมของขอมลชนดเดยวกนไว แถวลาดบเปนชนดขอมลประเภทหนง และจะกาหนดจานวนขอมล หรอสมาชกของแถวลาดบไวแนนอน โดยจะใชดรรชน (Index) ในการอางถงตาแหนงของขอมลในแถวลาดบ และตองระบดรรชนในเครองหมายวงเลบเหลยม [ ] ดงนนผ ใชสามารถเขาถงขอมลทตองการไดทนท (Direct Access) โดยไมตองเขาถงขอมลกอนหนา

คาของดรรชนจะตองเปนคาทมลาดบแนนอน โดยจะใชตวเลข เชน [0 : 9] จะมคาของดรรชน คอ 0, 1, 2,…,9

Index 0 1 2 3 4 5 6

value 56 76 55 33 12 22 59

รปท 7.1 โครงสรางขอมลแบบแถวลาดบ

จากภาพท 7.1 จะเหนวาตวแปร week เกบขอมลแบบแถวลาดบ และมสมาชก 7 คา โดยมดรรชนตงแต 0-6

การนาขอมลเขาแถวลาดบ สามารถเขยนไดดงน

หมายถง การนาคา x ไปเกบไวในแถวลาดบ week ดรรชนท i

การนาขอมลออกจากแถวลาดบ สามารถเขยนไดดงน

หมายถง การกาหนดใหคา x มคาเทากบคาของแถวลาดบ week ดรรชนท i

week

week[i] = x;

x = week[i];

Page 245: การเขียนโปรแกรมคอมพิวเตอร ์portal5.udru.ac.th/ebook/pdf/upload/17P88t2O788B98583682.pdfรูปภาพบางส่วนให

บทท 7 แถวลาดบ

227

ขอควรระวงในการใชงานแถวลาดบ ในภาษาซจะไมมการกาหนดใหตรวจสอบขอบเขตของแถวลาดบ ดงนนจะตองพยายามเขยนโปรแกรมตรวจสอบขอบเขตของแถวลาดบ

หากมการอางองถงสมาชกตวแปรนอกขอบเขตทไดระบไว เชน week[7] สงทไดคอการอานขอมลในพนทของหนวยความจาอนๆ ทอาจจะเปนขอมลทเราไมตองการ

7.2 แถวลาดบ 1 มต (One-Dimensional Array)

แถวลาดบ 1 มต จะมการจดเกบขอมลในลกษณะตอเนองกนเปนแถว ซงจะตองมการกาหนดขนาดใหเพยงพอกบจานวนขอมลทตองการจดเกบ แตกไมใหมขนาดใหญมากเกนกวาจานวนขอมล เพราะจะเปนการสนเปลองพนทหนวยความจาโดยเปลาประโยชน

แถวลาดบแบบ 1 มต เปนโครงสรางของแถวลาดบทงายทสด โดย โครงสรางขอมลแถวลาดบแบบ 1 มต จะมการจดเกบขอมลในลกษณะตอเนองกน ดงตวอยางในรปท 7.2

0 1 2 3 4 5 6 7 01234567

Column

Row

รปท 7.2 รปแบบของแถวลาดบแบบ 1 มต

Page 246: การเขียนโปรแกรมคอมพิวเตอร ์portal5.udru.ac.th/ebook/pdf/upload/17P88t2O788B98583682.pdfรูปภาพบางส่วนให

บทท 7 แถวลาดบ

228

7.2.1 การประกาศตวแปรแถวลาดบ 1 มต การประกาศตวแปรแถวลาดบ 1 มต มรปแบบคาสง คอ

เชน int a[10]; เปนการประกาศตวแปร a ใหเกบขอมลชนดเลขจานวนเตม โดยมขนาด 10

ชอง ซงขอมลชนดเลขจานวนเตมแบบ int จะมขนาด 2 ไบต ดงนน ตวแปร a จงมขนาด 20 ไบต

2

ไบต 2

ไบต 2

ไบต 2

ไบต 2

ไบต 2

ไบต 2

ไบต

2

ไบต

2

ไบต

2

ไบต

[0] [1] [2] [3] [4] [5] [6] [7] [8] [9]

20 ไบต

สมมตถาตองการประกาศตวแปรแถวลาดบ 1มต ทสามารถเกบตวแปรไดจานวน 5

ตวแปร สามารถประกาศตวแปรไดดงน

int a[5]; ตวแปรตวท 1 คอ a[0]

ตวแปรตวท 2 คอ a[1]

ตวแปรตวท 3 คอ a[2]

ตวแปรตวท 4 คอ a[3]

ตวแปรตวท 5 คอ a[4]

float b[20]; เปนการประกาศตวแปร b ใหเกบขอมลชนดเลขทศนยม โดยมขนาด 20

ชอง ซงขอมลชนดเลขทศนยมแบบ float จะมขนาด 4 ไบต ดงนน ตวแปร b จงมขนาด 80 ไบต

4

ไบต 4

ไบต 4

ไบต 4

ไบต 4

ไบต 4

ไบต ……………….

[0] [1] [2] [17] [18] [19]

80 ไบต

ชนดขอมล ชอตวแปร[ขนาดของแถวลาดบ];

Page 247: การเขียนโปรแกรมคอมพิวเตอร ์portal5.udru.ac.th/ebook/pdf/upload/17P88t2O788B98583682.pdfรูปภาพบางส่วนให

บทท 7 แถวลาดบ

229

char c[5]; เปนการประกาศตวแปร c ใหเกบขอมลชนดตวอกษรโดยมขนาด 5 ชอง ซงขอมลชนดตวอกษรจะมขนาด 1 ไบต ดงนน ตวแปร c จงมขนาด 5 ไบต

1

ไบต 1

ไบต 1

ไบต 1

ไบต 1

ไบต

[0] [1] [2] [3] [4]

5 ไบต

7.2.2 การกาหนดคาเรมตนใหกบแถวลาดบ 1 มต

การกาหนดคาเรมตนใหกบแถวลาดบ 1 มต เปนการกาหนดคาเรมตนใหกบตวแปรพรอมกบการประกาศใชตวแปร โดยตองระบไวในเครองหมายวงเลบปกกา { } และใหมเครองหมายจลภาค , คนระหวางขอมลแตละคา ยกเวนขอมลชนดตวอกษรทสามารถกาหนดขอมลเปนสายอกขระโดยกาหนดใหขอมลสายอกขระอยในเครองหมายอญประกาศ “ ” และถามการกาหนดคาเรมตนใหกบตวแปรพรอมกบการประกาศใชตวแปร ไมตองระบขนาดของแถวลาดบกได โดยตวแปรภาษา (Compiler) จะกาหนดขนาดของแถวลาดบเทากบจานวนของคาเรมตนทกาหนดให โดยมรปแบบคาสงทวไป คอ

เชน int a[5] = {80,78,99,65,68}; เปนการประกาศตวแปร a เปนแถวลาดบเกบขอมลชนดเลขจานวนเตม โดยมขนาด 5 ชอง กาหนดคาเรมตนเปน 80 ,78 ,99 ,65 และ 68

ตามลาดบ

80 78 99 65 68

[0] [1] [2] [3] [4]

ชนดขอมล ชอตวแปร[ขนาดของแถวลาดบ] = {คาขอมล ,คาขอมล ,………………};

Page 248: การเขียนโปรแกรมคอมพิวเตอร ์portal5.udru.ac.th/ebook/pdf/upload/17P88t2O788B98583682.pdfรูปภาพบางส่วนให

บทท 7 แถวลาดบ

230

int a[5] = {80,78,99}; เปนการประกาศตวแปร a เปนแถวลาดบเกบขอมลชนดเลขจานวนเตม โดยมขนาด 5 ชอง กาหนดคาเรมตนเปน 80 ,78 และ 99 ตามลาดบ ซงอก 2 ชองทเหลอไมไดมการกาหนดคาเรมตนให แตจะเกบคาเรมตนเปน 0 โดยอตโนมต

80 78 99 0 0

[0] [1] [2] [3] [4]

int a[ ] = {80,78,99}; เปนการประกาศตวแปร a เปนแถวลาดบเกบขอมลชนดเลขจานวนเตม โดยมขนาด 3 ชอง กาหนดคาเรมตน เปน 80 ,78 และ 99 ตามลาดบ

80 78 99

[0] [1] [2]

float a[5] = {66.44,76.33,63.77}; เปนการประกาศตวแปร a เปนแถวลาดบเกบขอมลชนดเลขทศนยม โดยมขนาด 5 ชอง กาหนดคาเรมตนเปน 66.44 ,76.33 และ 63.77ตามลาดบ ซงอก 2 ชองทเหลอไมไดมการกาหนดคาเรมตนให แตจะเกบคาเรมตนเปน 0 โดยอตโนมต

66.44 76.33 63.77 0 0

[0] [1] [2] [3] [4]

char a[5] = {‘a’ ,’b’ ,’c’ ,’d’}; เปนการประกาศตวแปร a เปนแถวลาดบเกบขอมลชนดตวอกษร โดยมขนาด 5 ชอง กาหนดคาเรมตนเปน a ,b ,c และ d ตามลาดบ ซงชองสดทายของแถวลาดบจะตองเปน ‘\0’ เสมอ ดงนนแถวลาดบจงเตม ไมสามารถเพมขอมลเขาไปได

a b c d \0

[0] [1] [2] [3] [4]

Page 249: การเขียนโปรแกรมคอมพิวเตอร ์portal5.udru.ac.th/ebook/pdf/upload/17P88t2O788B98583682.pdfรูปภาพบางส่วนให

บทท 7 แถวลาดบ

231

char a[5] = {‘a’ ,’b’ ,’c’}; เปนการประกาศตวแปร a เปนแถวลาดบเกบขอมลชนดตวอกษร โดยมขนาด 5 ชอง กาหนดคาเรมตนเปน a ,b และ c ตามลาดบ ซงชองสดทายของแถวลาดบจะตองเปน ‘\0’ เสมอ ดงนนแถวลาดบจงมชองวาง 1 ชองทสามารถเพมขอมลเขาไปได โดยจะเกบคาเรมตนเปน ‘\0’ โดยอตโนมต

a b c \0 \0

[0] [1] [2] [3] [4]

char a[5] = “abcd”; เปนการประกาศตวแปร a เปนแถวลาดบเกบขอมลชนดตวอกษร โดยมขนาด 5 ชอง กาหนดคาเรมตนเปน a ,b ,c และ d ตามลาดบ ซงชองสดทายของแถวลาดบจะตองเปน ‘\0’ เสมอ ดงนนแถวลาดบจงเตม ไมสามารถเพมขอมลเขาไปได

a b c d \0

[0] [1] [2] [3] [4]

การกาหนดตวแปรหลงจากการประกาศตวแปรสามารถกระทาไดโดย int a[3];

a[0] = 1;

a[1] = 2;

a[2] = 3;

Page 250: การเขียนโปรแกรมคอมพิวเตอร ์portal5.udru.ac.th/ebook/pdf/upload/17P88t2O788B98583682.pdfรูปภาพบางส่วนให

บทท 7 แถวลาดบ

232

7.2.3 การเขาถงขอมลในแถวลาดบ 1 มต

การเขาถงขอมลในแถวลาดบ 1 มต จะใชดรรชน (Index) ในการเขาถงขอมลในแถวลาดบ ซงดรรชนเรมตนมคาเทากบ 0 เสมอ และดรรชนสดทายมคาเทากบขนาดของแถวลาดบลบดวยหนงเสมอ โดยมรปแบบคาสง คอ

เชน int a[5] = {80,78,99,65,68};

80 78 99 65 68

[0] [1] [2] [3] [4]

a[0] = 80

a[1] = 78

a[2] = 99

a[3] = 65

a[4] = 68

สามารถกาหนดคาใหกบตวแปรแถวลาดบได เชน a[3] = 55; จะได

80 78 99 55 68

[0] [1] [2] [3] [4]

a[0] = 80

a[1] = 78

a[2] = 99

a[3] = 55

a[4] = 68

ชอตวแปร[ดรรชน];

Page 251: การเขียนโปรแกรมคอมพิวเตอร ์portal5.udru.ac.th/ebook/pdf/upload/17P88t2O788B98583682.pdfรูปภาพบางส่วนให

บทท 7 แถวลาดบ

233

ตวอยางท 7.1 โปรแกรมแสดงการใชแถวลาดบ 1 มต

1 #include<stdio.h> 2 main(){ 3 int a[5] = {80,78,99,65,68}; 4 int b[5] = {80,78,99}; 5 int c[] = {80,78,99}; 6 float d[5] = {66.44,76.33,63.77}; 7 char e[5] = "abcd"; 8 char f[5] = {'a','b','c','d'}; 9 char g[] = "abcd"; 10 a[3] = 55; 11 printf("a[0] = %d a[1] = %d a[2] = %d a[3] = %d

a[4] = %d\n",a[0],a[1],a[2],a[3],a[4]); 12 printf("b[0] = %d b[1] = %d b[2] = %d b[3] = %d

b[4] = %d\n",b[0],b[1],b[2],b[3],b[4]); 13 printf("c[0] = %d c[1] = %d c[2] =

%d\n",c[0],c[1],c[2]); 14 printf("d[0] = %.2f d[1] = %.2f d[2] = %.2f d[3]

= %.2f d[4] = %.2f\n",d[0],d[1],d[2],d[3],d[4]); 15 printf("e[0] = %c e[1] = %c e[2] = %c e[3] = %c

e[4] = %c\n",e[0],e[1],e[2],e[3],e[4]); 16 printf("f[0] = %c f[1] = %c f[2] = %c f[3] = %c

f[4] = %c\n",f[0],f[1],f[2],f[3],f[4]); 17 printf("g[0] = %c g[1] = %c g[2] = %c g[3] = %c

g[4] = %c\n",g[0],g[1],g[2],g[3],g[4]); 18 printf("e = %s\n",e); 19 printf("f = %s\n",f); 20 printf("g = %s\n",g); 21 }

ผลลพธของโปรแกรม a[0] = 80 a[1] = 78 a[2] = 99 a[3] = 55 a[4] = 68 b[0] = 80 b[1] = 78 b[2] = 99 b[3] = 0 b[4] = 0 c[0] = 80 c[1] = 78 c[2] = 99 d[0] = 66.44 d[1] = 76.33 d[2] = 63.77 d[3] = 0.00 d[4] = 0.00 e[0] = a e[1] = b e[2] = c e[3] = d e[4] = f[0] = a f[1] = b f[2] = c f[3] = d f[4] = g[0] = a g[1] = b g[2] = c g[3] = d g[4] = e = abcd f = abcd g = abcd

อธบายโปรแกรม

บรรทดท 3-5 ประกาศตวแปรชนดแถวลาดบ ทเปนชนดเลขจานวนเตม พรอมกาหนดคาเรมตน

บรรทดท 6 ประกาศตวแปรชนดแถวลาดบ ท เปนชนดเลขทศนยม พรอมกาหนดคาเรมตน

Page 252: การเขียนโปรแกรมคอมพิวเตอร ์portal5.udru.ac.th/ebook/pdf/upload/17P88t2O788B98583682.pdfรูปภาพบางส่วนให

บทท 7 แถวลาดบ

234

บรรทดท 7-9 ประกาศตวแปรชนดแถวลาดบ ท เปนชนดสายอกขระ พรอมกาหนดคาเรมตน

บรรทดท 11-20 แสดงผลลพธทไดจากการประมวลผล

ตวอยางท 7.2 โปรแกรมแสดงการคานวณหาคะแนนเฉลยของวชาคอมพวเตอรของนกศกษาทงหมด 10 คน โดยรบคาคะแนนทางคยบอรด และแสดงคาเฉลยผานทางหนาจอ

1 #include<stdio.h> 2 main(){ 3 int score[10],sum = 0,i,avg; 4 for(i=0;i<10;i++){ 5 printf("Input score[%d] : ",i); 6 scanf("%d",&score[i]); 7 sum = sum + score[i]; 8 } 9 avg = sum/10; 10 printf("Average Score = %d\n",avg); 11 }

ผลลพธของโปรแกรม Input score[0] : 76 Input score[1] : 84 Input score[2] : 65 Input score[3] : 98 Input score[4] : 72 Input score[5] : 66 Input score[6] : 83 Input score[7] : 49 Input score[8] : 52 Input score[9] : 90 Average Score = 73

อธบายโปรแกรม

บรรทดท 3 ประกาศตวแปร score เปนตวแปรชนดแถวลาดบ ทเปนชนดเลขจานวนเตม พรอมกาหนดคาเรมตน และประกาศตวแปร sum และ avg เปนเลขจานวนเตม

บรรทดท 4-8 รบคาคะแนนของนกศกษาจานวน 10 คน แลวหาผลรวมของคะแนนของนกศกษา

บรรทดท 9 หาคาเฉลยของคะแนนวชาคอมพวเตอรของนกศกษา โดยการนาผลรวมของคะแนนมาหารดวยจานวนนกศกษาทงหมด

Page 253: การเขียนโปรแกรมคอมพิวเตอร ์portal5.udru.ac.th/ebook/pdf/upload/17P88t2O788B98583682.pdfรูปภาพบางส่วนให

บทท 7 แถวลาดบ

235

ตวอยางท 7.3 โปรแกรมแสดงการคานวณหาคะแนนสงสด และคะแนนตาสดของวชาคอมพวเตอรของนกศกษาทงหมด 5 คน โดยรบคาคะแนนทางคยบอรด

1 #include<stdio.h> 2 main(){ 3 int num[5],i,max,min; 4 for(i=0;i<5;i++){ 5 printf("Input number[%d] : ",i); 6 scanf("%d",&num[i]); 7 } 8 max = num[0]; 9 min = num[0]; 10 for(i=1;i<5;i++){ 11 if(num[i]>max) 12 max = num[i]; 13 if(num[i]<min) 14 min = num[i]; 15 } 16 printf("Max = %d\t Min = %d\n",max,min); 17 }

ผลลพธของโปรแกรม Input number[0] : 76 Input number[1] : 84 Input number[2] : 65 Input number[3] : 98 Input number[4] : 72 Max = 98 Min = 65

อธบายโปรแกรม

บรรทดท 4 – 7 ทาการรบคาตวเลขมาเกบไวในตวแปรแถวลาดบ 5 คา บรรทดท 10 – 15 ทาการหาคาทมากทสดและนอยทสด

Page 254: การเขียนโปรแกรมคอมพิวเตอร ์portal5.udru.ac.th/ebook/pdf/upload/17P88t2O788B98583682.pdfรูปภาพบางส่วนให

บทท 7 แถวลาดบ

236

7.3 แถวลาดบแบบ 2 มต (Two-Dimensional Array)

แถวลาดบแบบ 2 มต จะมการจดเกบขอมลในลกษณะของเมทรกซ (Matrix) กลาวคอ จะมรปแบบเปนตารางทประกอบไปดวย แถว (Row) และคอลมน (Column) ดงนนการอางองถงขอมล จะตองอางองดวยตวเลข 2 ชด คอ แถว และคอลมน เชน a[0][0], a[0][1] เปนตน

ดงตวอยางแสดงในรปท 7.3

รปท 7.3 รปแบบของแถวลาดบแบบ 2 มตหรอเมทรกซ (เมทรกซขนาด 5x5)

7.3.1 การประกาศตวแปรแถวลาดบ 2 มต การประกาศตวแปรแถวลาดบ 2 มต มรปแบบคาสง คอ

เชน int a[3][4]; เปนการประกาศตวแปร a ใหเกบขอมลชนดเลขจานวนเตม โดยมขนาด

3 แถว 4 คอลมน ดงนน ตวแปร a จงเกบขอมลได 3 * 4 = 12 คา ขนาด 48 ไบต

คอลมน

0 1 2 3

แถว 0 a[0][0] a[0][1] a[0][2] a[0][3]

1 a[1][0] a[1][1] a[1][2] a[1][3]

2 a[2][0] a[2][1] a[2][2] a[2][3]

ชนดขอมล ชอตวแปร[ขนาดของแถว][ขนาดของคอลมน];

Page 255: การเขียนโปรแกรมคอมพิวเตอร ์portal5.udru.ac.th/ebook/pdf/upload/17P88t2O788B98583682.pdfรูปภาพบางส่วนให

บทท 7 แถวลาดบ

237

7.3.2 การกาหนดคาเรมตนใหกบแถวลาดบ 2 มต

การกาหนดคาเรมตนใหกบแถวลาดบ 2 มต เปนการกาหนดคาเรมตนใหกบตวแปรพรอมกบการประกาศใชตวแปร โดยตองระบไวในเครองหมายวงเลบปกกา { } และใหมเครองหมายจลภาค , คนระหวางขอมลแตละคา เชน int a[3][4] = { 2 ,5 ,3 ,6 ,9 ,43 ,5 ,67 ,34 ,12 ,10 ,44};

int a[4][3] = { 2 ,5 ,3 ,6 ,9 ,43 ,5 ,67 ,34 ,12 ,10 ,44};

สามารถกาหนดคาเรมตนใหกบตวแปร โดยระบขอมลทละแถวไวในเครองหมายวงเลบปกกา และใหมเครองหมายจลภาคคนระหวางขอมลแตละคา และขอมลแตละแถว โดยขอมลของทกแถวอยในเครองหมายวงเลบปกกา

คอลมน

0 1 2 3

แถว 0 2 5 3 6

1 9 43 5 67

2 34 12 10 44

คอลมน

0 1 2

แถว

0 2 5 3

1 6 9 43

2 5 67 34

3 12 10 44

Page 256: การเขียนโปรแกรมคอมพิวเตอร ์portal5.udru.ac.th/ebook/pdf/upload/17P88t2O788B98583682.pdfรูปภาพบางส่วนให

บทท 7 แถวลาดบ

238

เชน int a[3][4] = { {2 ,5 ,3 ,6} ,{9 ,43 ,5 ,67} ,{34 ,12 ,10 ,44} };

int a[4][3] = { {2 ,5 ,3} ,{6 ,9 ,43} ,{5 ,67 ,34} ,{12 ,10 ,44} };

สมมตถาตองการประกาศตวแปรแถวลาดบ 2 มต ทสามารถเกบตวแปรไดจานวน 6

ตวแปร สามารถประกาศตวแปรไดดงน

int a[2][3];

ตวแปรตวท 1 คอ a[0][0] ตวแปรตวท 2 คอ a[0][1] ตวแปรตวท 3 คอ a[0][2]

ตวแปรตวท 4 คอ a[1][0] ตวแปรตวท 5 คอ a[1][1] ตวแปรตวท 6 คอ a[1][2]

int a[3][2];

ตวแปรตวท 1 คอ a[0][0] ตวแปรตวท 2 คอ a[0][1]

ตวแปรตวท 3 คอ a[1][0] ตวแปรตวท 4 คอ a[1][1]

ตวแปรตวท 5 คอ a[2][0] ตวแปรตวท 6 คอ a[2][1]

คอลมน

0 1 2 3

แถว 0 2 5 3 6

1 9 43 5 67

2 34 12 10 44

คอลมน

0 1 2

แถว

0 2 5 3

1 6 9 43

2 5 67 34

3 12 10 44

Page 257: การเขียนโปรแกรมคอมพิวเตอร ์portal5.udru.ac.th/ebook/pdf/upload/17P88t2O788B98583682.pdfรูปภาพบางส่วนให

บทท 7 แถวลาดบ

239

7.3.3 การเขาถงขอมลในแถวลาดบ 2 มต

การเขาถงขอมลในแถวลาดบ 2 มต จะใชดรรชนแถว และดรรชนคอลมนในการเขาถงขอมลในแถวลาดบ 2 มต โดยจะตองระบดรรชนแถว และดรรชนคอลมน ซงดรรชนแถว และดรรชนคอลมนเรมตนมคาเทากบ 0 เสมอ และดรรชนสดทายของดรรชนแถว และดรรชนคอลมนมคาเทากบขนาดของแถว และขนาดของคอลมน ลบดวยหนงเสมอ โดยมรปแบบคาสง คอ

เชน int a[3][4] = { {2 ,5 ,3 ,6} ,{9 ,43 ,5 ,67} ,{34 ,12 ,10 ,44} };

a[0][0] = 2 a[0][1] = 5 a[0][2] = 3 a[0][3] = 6

a[1][0] = 9 a[1][1] = 43 a[1][2] = 5 a[1][3] = 67

a[2][0] = 34 a[2][1] = 12 a[2][2] = 10 a[2][3] = 44

int a[4][3] = { {2 ,5 ,3} ,{6 ,9 ,43} ,{5 ,67 ,34} ,{12 ,10 ,44} };

คอลมน

0 1 2 3

แถว 0 2 5 3 6

1 9 43 5 67

2 34 12 10 44

คอลมน

0 1 2

แถว

0 2 5 3

1 6 9 43

2 5 67 34

3 12 10 44

ชอตวแปร[ดรรชนแถว][ดรรชนคอลมน];

Page 258: การเขียนโปรแกรมคอมพิวเตอร ์portal5.udru.ac.th/ebook/pdf/upload/17P88t2O788B98583682.pdfรูปภาพบางส่วนให

บทท 7 แถวลาดบ

240

a[0][0] = 2 a[0][1] = 5 a[0][2] = 3

a[1][0] = 6 a[1][1] = 9 a[1][2] = 43

a[2][0] = 5 a[2][1] = 67 a[2][2] = 34

a[3][0] = 12 a[3][1] = 10 a[3][2] = 44

สามารถกาหนดคาใหกบตวแปรแถวลาดบได เชน a[2][2] = 99; จะได

a[0][0] = 2 a[0][1] = 5 a[0][2] = 3

a[1][0] = 6 a[1][1] = 9 a[1][2] = 43

a[2][0] = 5 a[2][1] = 67 a[2][2] = 99

a[3][0] = 12 a[3][1] = 10 a[3][2] = 44

ตวอยางท 7.4 โปรแกรมแสดงการใชแถวลาดบ 2 มต กาหนดคาและแสดงผลลพธ 1 #include <stdio.h> 2 main() 3 { 4 char a[2][3]; 5 a[0][0]='A'; a[0][1]='B'; a[0][2]='C'; 6 a[1][0]='D'; a[1][1]='E'; a[1][2]='F'; 7 printf("%c %c %c\n",a[0][0],a[0][1],a[0][2]); 8 printf("%c %c %c\n",a[1][0],a[1][1],a[1][2]); 9 }

ผลลพธของโปรแกรม A B C D E F

คอลมน

0 1 2

แถว

0 2 5 3

1 6 9 43

2 5 67 99

3 12 10 44

Page 259: การเขียนโปรแกรมคอมพิวเตอร ์portal5.udru.ac.th/ebook/pdf/upload/17P88t2O788B98583682.pdfรูปภาพบางส่วนให

บทท 7 แถวลาดบ

241

อธบายโปรแกรม

บรรทดท 4 ประกาศตวแปรชนดแถวลาดบ 2 มต ทเปนชนดสายอกขระ บรรทดท 5-6 กาหนดคาใหกบตวแปร บรรทดท 7-8 แสดงผลลพธ

ตวอยางท 7.5 โปรแกรมแสดงการใชแถวลาดบ 2 มต รบคาเกบไวในตวแปรและแสดงผล 1 #include <stdio.h> 2 main() 3 { 4 float a[2][2]; 5 scanf("%f",&a[0][0]); 6 scanf("%f",&a[0][1]); 7 scanf("%f",&a[1][0]); 8 scanf("%f",&a[1][1]); 9 printf("%f\n",a[0][0]); 10 printf("%f\n",a[0][1]); 11 printf("%f\n",a[1][0]); 12 printf("%f\n",a[1][1]); 13 }

ผลลพธของโปรแกรม 5 4 3 2 5.000000 4.000000 3.000000 2.000000

อธบายโปรแกรม

บรรทดท 4 ประกาศตวแปรชนดแถวลาดบ 2 มต ทเปนชนดทศนยม

บรรทดท 5-8 ทาการรบคาและเกบไวทตวแปรแถวลาดบ

บรรทดท 9-12 แสดงผลลพธ

Page 260: การเขียนโปรแกรมคอมพิวเตอร ์portal5.udru.ac.th/ebook/pdf/upload/17P88t2O788B98583682.pdfรูปภาพบางส่วนให

บทท 7 แถวลาดบ

242

ตวอยางท 7.6 โปรแกรมแสดงการใชแถวลาดบ 2 มต สรางตวแปรแถวลาดบพรอมทงกาหนดคา และแสดงผล

1 #include<stdio.h> 2 main(){ 3 int a[3][4] = { 2 ,5 ,3 ,6 ,9 ,43 ,5 ,67 ,34 ,12 ,10

,44}; 4 int b[4][3] = { 2 ,5 ,3 ,6 ,9 ,43 ,5 ,67 ,34 ,12 ,10

,44}; 5 int c[3][4] = { {2 ,5 ,3 ,6} ,{9 ,43 ,5 ,67} ,{34 ,12

,10 ,44} }; 6 int d[4][3] = { {2 ,5 ,3} ,{6 ,9 ,43} ,{5 ,67 ,34}

,{12 ,10 ,44} }; 7 a[2][2]=99; 8 printf("a[0][0] = %d\t a[0][1] = %d\t a[0][2] = %d\t

a[0][3] = %d\n",a[0][0],a[0][1],a[0][2],a[0][3]); 9 printf("a[1][0] = %d\t a[1][1] = %d\t a[1][2] = %d\t

a[1][3] = %d\n",a[1][0],a[1][1],a[1][2],a[1][3]); 10 printf("a[2][0] = %d\t a[2][1] = %d\t a[2][2] = %d\t

a[2][3] = %d\n",a[2][0],a[2][1],a[2][2],a[2][3]); 11 printf("b[0][0] = %d\t b[0][1] = %d\t b[0][2] =

%d\n",b[0][0],b[0][1],b[0][2]); 12 printf("b[1][0] = %d\t b[1][1] = %d\t b[1][2] =

%d\n",b[1][0],b[1][1],b[1][2]); 13 printf("b[2][0] = %d\t b[2][1] = %d\t b[2][2] =

%d\n",b[2][0],b[2][1],b[2][2]); 14 printf("b[3][0] = %d\t b[3][1] = %d\t b[3][2] =

%d\n",b[3][0],b[3][1],b[3][2]); 15 printf("c[0][0] = %d\t c[0][1] = %d\t c[0][2] = %d\t

c[0][3] = %d\n",c[0][0],c[0][1],c[0][2],c[0][3]); 16 printf("c[1][0] = %d\t c[1][1] = %d\t c[1][2] = %d\t

c[1][3] = %d\n",c[1][0],c[1][1],c[1][2],c[1][3]); 17 printf("c[2][0] = %d\t c[2][1] = %d\t c[2][2] = %d\t

c[2][3] = %d\n",c[2][0],c[2][1],c[2][2],c[2][3]); 18 printf("d[0][0] = %d\t d[0][1] = %d\t d[0][2] =

%d\n",d[0][0],d[0][1],d[0][2]); 19 printf("d[1][0] = %d\t d[1][1] = %d\t d[1][2] =

%d\n",d[1][0],d[1][1],d[1][2]); 20 printf("d[2][0] = %d\t d[2][1] = %d\t d[2][2] =

%d\n",d[2][0],d[2][1],d[2][2]); 21 printf("d[3][0] = %d\t d[3][1] = %d\t d[3][2] =

%d\n",d[3][0],d[3][1],d[3][2]); 22 }

ผลลพธของโปรแกรม a[0][0] = 2 a[0][1] = 5 a[0][2] = 3 a[0][3] = 6 a[1][0] = 9 a[1][1] = 43 a[1][2] = 5 a[1][3] = 67 a[2][0] = 34 a[2][1] = 12 a[2][2] = 99 a[2][3] = 44 b[0][0] = 2 b[0][1] = 5 b[0][2] = 3 b[1][0] = 6 b[1][1] = 9 b[1][2] = 43 b[2][0] = 5 b[2][1] = 67 b[2][2] = 34

Page 261: การเขียนโปรแกรมคอมพิวเตอร ์portal5.udru.ac.th/ebook/pdf/upload/17P88t2O788B98583682.pdfรูปภาพบางส่วนให

บทท 7 แถวลาดบ

243

b[3][0] = 12 b[3][1] = 10 b[3][2] = 44 c[0][0] = 2 c[0][1] = 5 c[0][2] = 3 c[0][3] = 6 c[1][0] = 9 c[1][1] = 43 c[1][2] = 5 c[1][3] = 67 c[2][0] = 34 c[2][1] = 12 c[2][2] = 10 c[2][3] = 44 d[0][0] = 2 d[0][1] = 5 d[0][2] = 3 d[1][0] = 6 d[1][1] = 9 d[1][2] = 43 d[2][0] = 5 d[2][1] = 67 d[2][2] = 34 d[3][0] = 12 d[3][1] = 10 d[3][2] = 44

อธบายโปรแกรม

บรรทดท 3-6 ประกาศตวแปรชนดแถวลาดบ 2 มต ทเปนชนดเลขจานวนเตม

พรอมกาหนดคาเรมตน

บรรทดท 7 กาหนดคาใหตวแถวลาดบตาแหนง แถวท 2 คอลมน ท 2 โดยใหเกบคา 99

บรรทดท 8-21 แสดงผลลพธจากการประมวลผล

ตวอยางท 7.7 โปรแกรมแสดงการคานวณหาคะแนนเฉลยของวชาคอมพวเตอร คณตศาสตร และฟสกส โดยมนกศกษาวชาละ 5 คน โดยใหรบคาคะแนนผานทางคยบอรด จากนนใหแสดงคะแนนของนกศกษาแตละคน และแสดงคะแนนเฉลยของแตละวชาผานทางจอภาพ

1 #include<stdio.h> 2 main(){ 3 int score[5][3],sum[3] = {0,0,0},avg[3] = {0,0,0},i,j; 4 for(i=0;i<5;i++){ 5 for(j=0;j<3;j++){ 6 printf("Input score[%d][%d] : ",i+1,j+1); 7 scanf("%d",&score[i][j]); 8 } 9 } 10 for(i=0;i<5;i++){ 11 sum[0] = sum[0] + score[i][0]; 12 sum[1] = sum[1] + score[i][1]; 13 sum[2] = sum[2] + score[i][2]; 14 } 15 avg[0] = sum[0]/5; 16 avg[1] = sum[1]/5; 17 avg[2] = sum[2]/5; 18 printf("**************************************\n");19 printf("\t\t\tComputer\tMath\t\tPhysic\n"); 20 printf("**************************************\n");21 for(i=0;i<5;i++){ 22 printf("\nStudent%d",i+1);

Page 262: การเขียนโปรแกรมคอมพิวเตอร ์portal5.udru.ac.th/ebook/pdf/upload/17P88t2O788B98583682.pdfรูปภาพบางส่วนให

บทท 7 แถวลาดบ

244

23 for(j=0;j<3;j++){ 24 printf("\t\t%d",score[i][j]); 25 } 26 } 27 printf("\n************************************\n");28 printf("Average Score of Computer = %d\n",avg[0]); 29 printf("Average Score of Math = %d\n",avg[1]); 30 printf("Average Score of Physic = %d\n",avg[2]); 31 }

ผลลพธของโปรแกรม Input score[1][1] : 60 Input score[1][2] : 67 Input score[1][3] : 73 Input score[2][1] : 80 Input score[2][2] : 78 Input score[2][3] : 81 Input score[3][1] : 97 Input score[3][2] : 67 Input score[3][3] : 84 Input score[4][1] : 56 Input score[4][2] : 70 Input score[4][3] : 80 Input score[5][1] : 65 Input score[5][2] : 49 Input score[5][3] : 70 ************************************************************** Computer Math Physic **************************************************************Student1 60 67 73 Student2 80 78 81 Student3 97 67 84 Student4 56 70 80 Student5 65 49 70 **************************************************************Average Score of Computer = 71 Average Score of Math = 66 Average Score of Physic = 77

อธบายโปรแกรม

บรรทดท 4 – 9 วนลปรบคาคะแนนมาเกบไวในตวแปรแถวลาดบ15 คา (นกศกษา5 คน คนละ 3 วชา)

บรรทดท 10 – 14 วนลปรวมคะแนนในแตละวชา บรรทดท 15 คานวณคะแนนเฉลยของวชาคอมพวเตอร บรรทดท 16 คานวณคะแนนเฉลยของวชาคณตศาสตร บรรทดท 17 คานวณคะแนนเฉลยของวชาฟสกส บรรทดท 21 – 26 วนลปแสดงคะแนนของนกศกษาแตละคน

Page 263: การเขียนโปรแกรมคอมพิวเตอร ์portal5.udru.ac.th/ebook/pdf/upload/17P88t2O788B98583682.pdfรูปภาพบางส่วนให

บทท 7 แถวลาดบ

245

7.4 แถวลาดบ 3 มต (Three-Dimension Array)

แถวลาดบแบบ 3 มต จะมลกษณะเหมอนกบการนาแถวลาดบแบบ 2 มต มาเรยงซอนกนหลายๆ ชน ทาใหแถวลาดบแบบ 3 มต มชน แถว และคอลมน ดงนนการอางองถงขอมล จะตองอางองดวยตวเลข 3 ชด คอ ชน แถว และคอลมน เชน a[0][0][1], a[0][0][2]

เปนตน ดงตวอยางแสดงในรปท 7.4

รปท 7.4 รปแบบของแถวลาดบแบบ 3 มต (เมทรกซขนาด 2x5x5)

จากรป แถวลาดบ 3 มตจะม 3 แกนดงรป ซงจะมแกน X (แถว) แกน Y (คอลมน) และ แกน Z (ชน)

7.4.1 การประกาศตวแปรแถวลาดบ 3 มต การประกาศตวแปรแถวลาดบ 3 มต มรปแบบคาสง คอ

เชน int a[2][3][4]; เปนการประกาศตวแปร a ใหเกบขอมลชนดเลขจานวนเตม โดยม 2

ชน แตละชนม 3 แถว 4 คอลมน ดงนน ตวแปร a จงเกบขอมลไดทงหมด 2*3*4 = 24

คา มขนาด 96 ไบต

ชนดขอมล ชอตวแปร[ขนาดของชน][ขนาดของแถว][ขนาดของคอลมน];

Page 264: การเขียนโปรแกรมคอมพิวเตอร ์portal5.udru.ac.th/ebook/pdf/upload/17P88t2O788B98583682.pdfรูปภาพบางส่วนให

บทท 7 แถวลาดบ

246

7.4.2 การกาหนดคาเรมตนใหกบแถวลาดบ 3 มต

การกาหนดคาเรมตนใหกบแถวลาดบ 3 มต เปนการกาหนดคาเรมตนใหกบตวแปรพรอมกบการประกาศใชตวแปร โดยตองระบไวในเครองหมายวงเลบปกกา { } และใหมเครองหมายจลภาค , คนระหวางขอมลแตละคา เชน int a[2][3][4] = { 2 ,5 ,3 ,6 ,9 ,43 ,5 ,67 ,34 ,12 ,10 ,44 ,11 ,12 ,13 ,34 ,23 ,54

,55 ,53 ,34 ,45 ,4 ,9};

สามารถกาหนดคาเรมตนใหกบตวแปร โดยระบขอมลทละแถวไวในเครองหมายวงเลบปกกา และใหมเครองหมายจลภาคคนระหวางขอมลแตละคา และขอมลแตละแถว โดยขอมลของทกแถวทอยในชนเดยวกนจะอยในเครองหมายวงเลบปกกาและขอมลทกชนอยในเครองหมายวงเลบปกกาโดยมเครองหมายจลภาคคนระหวางชน

เชน int a[2][3][4] = { { {2 ,5 ,3 ,6} ,{9 ,43 ,5 ,67} ,{34 ,12 ,10 ,44}} ,{ {11 ,12 ,13

,34} ,{23 ,54 ,55 ,53} ,{34 ,45 ,4 ,9} } };

แถว 0

แถว 1

แถว 2 ชน 0

a[0][2][0]

a[0][1][0]

11

a[0][2][1]

a[0][1][1]

12

a[0][2][2]

a[0][1][2]

13

a[0][2][3]

a[0][1][3]

34

คอลมน 0 คอลมน 1 คอลมน 2 คอลมน 3

34

9

12

43

10

5

44

67

2 5 3 6

ชน 1

แถว 0

แถว 1

แถว 2 ชน 0

a[0][2][0]

a[0][1][0]

11

a[0][2][1]

a[0][1][1]

12

a[0][2][2]

a[0][1][2]

13

a[0][2][3]

a[0][1][3]

34

คอลมน 0 คอลมน 1 คอลมน 2 คอลมน 3

34

9

12

43

10

5

44

67

2 5 3 6

ชน 1

Page 265: การเขียนโปรแกรมคอมพิวเตอร ์portal5.udru.ac.th/ebook/pdf/upload/17P88t2O788B98583682.pdfรูปภาพบางส่วนให

บทท 7 แถวลาดบ

247

สมมตถาตองการประกาศตวแปรแถวลาดบ 3 มต ทสามารถเกบตวแปรไดจานวน 12

ตวแปร สามารถประกาศตวแปรไดดงน

int a[2][2][3];

ตวแปรตวท 1 คอ a[0][0][0] ตวแปรตวท 2 คอ a[0][0][1]

ตวแปรตวท 3 คอ a[0][0][2] ตวแปรตวท 4 คอ a[0][1][0]

ตวแปรตวท 5 คอ a[0][1][1] ตวแปรตวท 6 คอ a[0][1][2]

ตวแปรตวท 7 คอ a[1][0][0] ตวแปรตวท 8 คอ a[1][0][1]

ตวแปรตวท 9 คอ a[1][0][2] ตวแปรตวท 10 คอ a[1][1][0]

ตวแปรตวท 11 คอ a[1][1][1] ตวแปรตวท 12 คอ a[1][1][2]

เราสามารถกาหนดคาเรมตนของ int d [2][3][5]; ไดดงน

d[0][0][0] = 0; d[1][0][0] = 15;

d[0][0][1] = 1; d[1][0][1] = 16;

d[0][0][2] = 2; d[1][0][2] = 17;

d[0][0][3] = 3; d[1][0][3] = 18;

d[0][0][4] = 4; d[1][0][4] = 19;

d[0][1][0] = 5; d[1][1][0] = 20;

d[0][1][1] = 6; d[1][1][1] = 21;

d[0][1][2] = 7; d[1][1][2] = 22;

d[0][1][3] = 8; d[1][1][3] = 23;

d[0][1][4] = 9; d[1][1][4] = 24;

d[0][2][0] = 10; d[1][2][0] = 25;

d[0][2][1] = 11; d[1][2][1] = 26;

d[0][2][2] = 12; d[1][2][2] = 27;

d[0][2][3] = 13; d[1][2][3] = 28;

d[0][2][4] = 14; d[1][2][4] = 29;

หรอ int d [2][3][5] ={ { {0,1,2,3,4} , {5,6,7,8,9} , {10,11,12,13,14} },

{ {15,16,17,18,19} , {20,21,22,23,24} , {25,26,27,28,29} } };

Page 266: การเขียนโปรแกรมคอมพิวเตอร ์portal5.udru.ac.th/ebook/pdf/upload/17P88t2O788B98583682.pdfรูปภาพบางส่วนให

บทท 7 แถวลาดบ

248

7.4.3 การเขาถงขอมลในแถวลาดบ 3 มต

การเขาถงขอมลในแถวลาดบ 3 มต จะใชดรรชนชน ดรรชนแถว และดรรชนคอลมนในการเขาถงขอมลในแถวลาดบ 3 มต โดยจะตองระบดรรชนชน ดรรชนแถว และดรรชนคอลมน

ซงดรรชนชน ดรรชนแถว และดรรชนคอลมนเรมตนมคาเทากบ 0 เสมอ และดรรชนสดทายของดรรชนชน ดรรชนแถว และดรรชนคอลมนมคาเทากบขนาดของชน ขนาดของแถว และขนาดของคอลมน ลบดวยหนงเสมอ โดยมรปแบบคาสง คอ

เชน int a[2][3][4] = { { {2 ,5 ,3 ,6} ,{9 ,43 ,5 ,67} ,{34 ,12 ,10 ,44}} ,{ {11 ,12 ,13

,34} ,{23 ,54 ,55 ,53} ,{34 ,45 ,4 ,9} } };

a[0][0][0] = 2 a[0][0][1] = 5 a[0][0][2] = 3 a[0][0][3] = 6

a[0][1][0] = 9 a[0][1][1] = 43 a[0][1][2] = 5 a[0][1][3] = 67

a[0][2][0] = 34 a[0][2][1] = 12 a[0][2][2] = 10 a[0][2][3] = 44

a[1][0][0] = 11 a[1][0][1] = 12 a[1][0][2] = 13 a[1][0][3] = 34

a[1][1][0] = 23 a[1][1][1] = 54 a[1][1][2] = 55 a[1][1][3] = 53

a[1][2][0] = 34 a[1][2][1] = 45 a[1][2][2] = 4 a[1][2][3] = 9

สามารถกาหนดคาใหกบตวแปรแถวลาดบได เชน a[0][2][2] = 99; จะได

ชอตวแปร[ดรรชนชน][ดรรชนแถว][ดรรชนคอลมน];

แถว 0

แถว 1

แถว 2 ชน 0

a[0][2][0]

a[0][1][0]

11

a[0][2][1]

a[0][1][1]

12

a[0][2][2]

a[0][1][2]

13

a[0][2][3]

a[0][1][3]

34

คอลมน 0 คอลมน 1 คอลมน 2 คอลมน 3

34

9

12

43

10

5

44

67

2 5 3 6

ชน 1

Page 267: การเขียนโปรแกรมคอมพิวเตอร ์portal5.udru.ac.th/ebook/pdf/upload/17P88t2O788B98583682.pdfรูปภาพบางส่วนให

บทท 7 แถวลาดบ

249

a[0][0][0] = 2 a[0][0][1] = 5 a[0][0][2] = 3 a[0][0][3] = 6

a[0][1][0] = 9 a[0][1][1] = 43 a[0][1][2] = 5 a[0][1][3] = 67

a[0][2][0] = 34 a[0][2][1] = 12 a[0][2][2] = 99 a[0][2][3] = 44

a[1][0][0] = 11 a[1][0][1] = 12 a[1][0][2] = 13 a[1][0][3] = 34

a[1][1][0] = 23 a[1][1][1] = 54 a[1][1][2] = 55 a[1][1][3] = 53

a[1][2][0] = 34 a[1][2][1] = 45 a[1][2][2] = 4 a[1][2][3] = 9

ตวอยางท 7.8 โปรแกรมแสดงการใชแถวลาดบ 3 มต

1 #include<stdio.h> 2 main(){ 3 int a[2][3][4] = { {{2 ,5 ,3 ,6} ,{9 ,43 ,5 ,67} ,{34

,12 ,10 ,44}},{{11 ,12 ,13 ,34},{23 ,54 ,55 ,53},{34 ,45 ,4,9}}};

4 a[0][2][2]=99; 5 printf("a[0][0][0] = %d a[0][0][1] = %d

a[0][0][2] = %d a[0][0][3] = %d\n",a[0][0][0],a[0][0][1],a[0][0][2],a[0][0][3]);

6 printf("a[0][1][0] = %d a[0][1][1] = %d a[0][1][2] = %d a[0][1][3] = %d\n",a[0][1][0],a[0][1][1],a[0][1][2],a[0][1][3]);

7 printf("a[0][2][0] = %d a[0][2][1] = %d a[0][2][2] = %d a[0][2][3] = %d\n",a[0][2][0],a[0][2][1],a[0][2][2],a[0][2][3]);

8 printf("a[1][0][0] = %d a[1][0][1] = %d a[1][0][2] = %d a[1][0][3] = %d\n",a[1][0][0],a[1][0][1],a[1][0][2],a[1][0][3]);

9 printf("a[1][1][0] = %d a[1][1][1] = %d a[1][1][2] = %d a[1][1][3] = %d\n",a[1][1][0],a[1][1][1],a[1][1][2],a[1][1][3]);

10 printf("a[1][2][0] = %d a[1][2][1] = %d a[1][2][2] = %d a[1][2][3] = %d\n",a[1][2][0],a[1][2][1],a[1][2][2],a[1][2][3]);

11 }

แถว 0

แถว 1

แถว 2 ชน 0

a[0][2][0]

a[0][1][0]

11

a[0][2][1]

a[0][1][1]

12

a[0][2][2]

a[0][1][2]

13

a[0][2][3]

a[0][1][3]

34

คอลมน 0 คอลมน 1 คอลมน 2 คอลมน 3

34

9

12

43

99

5

44

67

2 5 3 6

ชน 1

Page 268: การเขียนโปรแกรมคอมพิวเตอร ์portal5.udru.ac.th/ebook/pdf/upload/17P88t2O788B98583682.pdfรูปภาพบางส่วนให

บทท 7 แถวลาดบ

250

ผลลพธของโปรแกรม a[0][0][0] = 2 a[0][0][1] = 5 a[0][0][2] = 3 a[0][0][3] = 6 a[0][1][0] = 9 a[0][1][1] = 43 a[0][1][2] = 5 a[0][1][3] = 67 a[0][2][0] = 34 a[0][2][1] = 12 a[0][2][2] = 99 a[0][2][3] = 44 a[1][0][0] = 11 a[1][0][1] = 12 a[1][0][2] = 13 a[1][0][3] = 34 a[1][1][0] = 23 a[1][1][1] = 54 a[1][1][2] = 55 a[1][1][3] = 53 a[1][2][0] = 34 a[1][2][1] = 45 a[1][2][2] = 4 a[1][2][3] = 9

อธบายโปรแกรม

บรรทดท 3 ประกาศตวแปรชนดแถวลาดบ 3 มต ทเปนชนดจานวนเตมพรอมทงกาหนดคาเรมตน

บรรทดท 4 กาหนดคาใหกบตวแปร บรรทดท 5-10 แสดงผลลพธ

7.5 ขนาดแถวลาดบอตโนมต (Automatic Size of Array)

7.5.1 การกาหนดขนาดแถวลาดบโดยอตโนมต ในการกาหนดขนาดของแถวลาดบจะเปนการกาหนดโดยไมสามารถเปลยนแปลงคาได ดงนนหากมการอางคาตวแปรทอยนอกเหนอจากขนาดทกาหนดกจะกระทาใหเกดความผดพลาด ปญหาทพบบอยสาหรบการกาหนดคาเรมตนใหกบแถวลาดบคอการกาหนดคาเรมตนเกนขนาดของแถวลาดบเชน

int a[3] = {1,2,3,4};

แถวลาดบมสามเกบขอมลได 3 ตวแปร แตกาหนดคาเรมตน 4 ตว ซงจะทาใหเกดความผดพลาดขณะประมวลผลเนองจากกาหนดคาเกนขนาดของแถวลาดบ ดงนนในบางครงเพอหลกเลยงปญหาน ภาษาซจงมกลไกสาหรบหาขนาดของแถวลาดบใหโดยอตโนมต ซงถาใชกลไกนแลว การประกาศคาเรมตนกจะเปน

int a[] = {1,2,3,4};

จะเหนไดวาวธดงกลาวมขอดคอ ลดปญหาเรองการกาหนดคาเรมตนเกนขนาดของแถวลาดบ และสามารถขยายคาเรมตนใหมจานวนมากขนไดงาย ขอเสยคอ ผ เขยนโปรแกรมจะตองเขยนโปรแกรมเพอหาขนาดของแถวลาดบเอง

Page 269: การเขียนโปรแกรมคอมพิวเตอร ์portal5.udru.ac.th/ebook/pdf/upload/17P88t2O788B98583682.pdfรูปภาพบางส่วนให

บทท 7 แถวลาดบ

251

สาหรบกรณแถวลาดบขนาดสองมตขนไปนน ในมตทสองเปนตนไปไมสามารถกาหนดขนาดของแถวลาดบอตโนมตได เชน

int a[ ][ ] = { {1,2,3} , {4,5,6} };

int a[2][ ] = { {1,2,3} , {4,5,6} };

ถาใหมตทหนงมการกาหนดขนาดอตโนมตจะสามารถกระทาไดเชน

int a[ ][2] = { {1,2} , {4,5} , {6,7} };

ซงถกตความเปน

int a[3][2] = { {1,2} , {4,5} , {6,7} };

ตวอยางการกาหนดขนาดของแถวลาดบโดยอตโนมต เชน

การกาหนดคา char a[] = {'A','E','I','O','U'};

ความหมาย char a[5] = {'A','E','I','O','U'};

การกาหนดคา int a[] = {0};

ความหมาย int a[1] = {0};

การกาหนดคา int a[] = { };

ความหมาย เกดความผดพลาด เนองจากเปนการกาหนดใหแถวลาดบ a มขนาด 0

การกาหนดคา int a[][3] = { {1,2,3}, {4,5,6} };

ความหมาย int a[2][3] = { {1,2,3}, {4,5,6} };

การกาหนดคา int a[][2] = { {1,2} ,{3,4} ,{5,6} };

ความหมาย int a[][2] = { {1,2} ,{3,4} ,{5,6} };

การกาหนดคา int a[][3] = {1,2,3,4,5,6};

ความหมาย int a[2][3] = { {1,2,3} ,{4,5,6} };

การกาหนดคา int a[][2] = {1,2,3,4,5,6};

ความหมาย int a[3][2] = { {1,2} ,{3,4} ,{5,6} };

Page 270: การเขียนโปรแกรมคอมพิวเตอร ์portal5.udru.ac.th/ebook/pdf/upload/17P88t2O788B98583682.pdfรูปภาพบางส่วนให

บทท 7 แถวลาดบ

252

การกาหนดคา int a[][4] = {1,2,3,4,5,6};

ความหมาย เกดความผดพลาด เนองจากจานวนสมาชกในแถวลาดบหาร 4ไมลงตวทาใหหาขนาดในมตท 1 ไมได

การกาหนดคา int a[][3][2] = {{1,2},{3,4},{5,6},{7,8},{9,0},{1,2}}

ความหมาย int a[2][3][2] = { {{1,2},{3,4},{5,6}}, {{7,8},{9,0},{1,2}} }

การกาหนดคา int a[][3][2] = {1,2,3,4,5,6,7,8,9,0,1,2};

ความหมาย int a[2][3][2] = { {{1,2},{3,4},{5,6}}, {{7,8},{9,0},{1,2}} }

การกาหนดคา int a[][2][3] = { 1,2,3,4,5,6,7,8,9,0,1,2 };

ความหมาย int a[][2][3] = { {1,2,3},{4,5,6},{7,8,9},{0,1,2} };

7.5.2 การหาขนาดของแถวลาดบโดยฟงกชน sizeof()

การหาขนาดของแถวลาดบโดยฟงกชน sizeof() เปนการหาขนาดของแถวลาดบ โดยฟงกชน sizeof( ) โดยหนาทของ sizeof( ) คอ

หาขนาดหนวยความจาชนดตวแปรตางๆ หาขนาดหนวยความจาทตวแปรนนๆ ใช

ตวอยางท 7.9 โปรแกรมการใชฟงกชน sizeof รวมกบชนดตวแปรทมอยในภาษาซ 1 #include <stdio.h> 2 main() 3 { 4 printf("short = %i\n",sizeof(short)); 5 printf("int = %i\n",sizeof(int)); 6 printf("unsigned int = %i\n",sizeof(unsigned int)); 7 printf("long int = %i\n",sizeof(long int)); 8 printf("float = %i\n",sizeof(float)); 9 printf("double = %i\n",sizeof(double)); 10 printf("long double = %i\n",sizeof(long double)); 11 }

ผลลพธของโปรแกรม short = 2 int = 2 unsigned int = 2 long int = 4 float = 4

Page 271: การเขียนโปรแกรมคอมพิวเตอร ์portal5.udru.ac.th/ebook/pdf/upload/17P88t2O788B98583682.pdfรูปภาพบางส่วนให

บทท 7 แถวลาดบ

253

double = 8 long double = 10

อธบายโปรแกรม

บรรทดท 4-10 หาคาขนาดของหนวยความจาตามประเภทชนดของตวแปลตาง และแสดงผล โดยผลลพธทไดคอขนาดหนวยความจาของชนดตวแปรแบบตาง ๆ (มหนวยเปนไบต) และแสดงผล

ตวอยางท 7.10 โปรแกรมการใชฟงกชน sizeof รวมกบชนดตวแปรทมอยในภาษาซ 1 #include <stdio.h> 2 main() 3 { 4 int a[3]; 5 printf("int = %i\n",sizeof(int)); 6 printf("a = %i\n",sizeof(a)); 7 printf("a[0] = %i\n",sizeof(a[0])); 8 printf("a[1] = %i\n",sizeof(a[1])); 9 printf("a[2] = %i\n",sizeof(a[2])); 10 }

ผลลพธของโปรแกรม int = 2 a = 6 a[0] = 2 a[1] = 2 a[2] = 2

อธบายโปรแกรม

บรรทดท 4 ประกาศตวแปรชนดแถวลาดบ ทเปนชนดจานวนเตม

บรรทดท 5 หาคาขนาดของหนวยความจาตามประเภทชนดของตวแปลตาง และแสดงผล

บรรทดท 6 หาคาขนาดของหนวยความจาของตวแปรชนดแถวลาดบ ของตวแปร a ทงหมด และแสดงผล

บรรทดท 7-8 หาคาขนาดของหนวยความจาในแตละตวแปร ของตวแปร a ทละตว และแสดงผล

Page 272: การเขียนโปรแกรมคอมพิวเตอร ์portal5.udru.ac.th/ebook/pdf/upload/17P88t2O788B98583682.pdfรูปภาพบางส่วนให

บทท 7 แถวลาดบ

254

ตวอยางท 7.11 โปรแกรมการหาจานวนสมาชกของแถวลาดบ 1 มต

1 #include <stdio.h> 2 main() 3 { 4 int a[3]; 5 printf("int = %i\n",sizeof(int)); 6 printf("a = %i\n",sizeof(a)); 7 printf("Array have %i element",sizeof(a)/sizeof(int)); 8 }

ผลลพธของโปรแกรม int = 2 a = 6 Array have 3 element

อธบายโปรแกรม

บรรทดท 4 ประกาศตวแปรชนดแถวลาดบ ทเปนชนดจานวนเตม

บรรทดท 5 หาคาขนาดของหนวยความจาตามประเภทชนดของตวแปลตาง และแสดงผล

บรรทดท 6 หาคาขนาดของหนวยความจาของตวแปรชนดแถวลาดบ ของตวแปร a ทงหมด และแสดงผล

บรรทดท 7 ทาการคานวณหาจานวนสมาชกของตวแปร โดยนาคาขนาดของหนวยความจาตวแปร a ทงหมด หารดวยขนาดของหนวยความจาของตวแปร a แตละตว และแสดงผล

จากโปรแกรมทาใหทราบวาตวแปร a มจานวนสมาชกทงหมด 3 ตว แตถาตองการเขยนโปรแกรมเพอหาจานวนสมาชกทงหมดกอาศยความรทวาสมาชกทกตวในแถวลาดบจะตองมชนดตวแปรเหมอนกน (ทาใหใชหนวยความจาเทากนดวย) ดงนนถานาเอาขนาดหนวยความจาทตวแปรแถวลาดบใชหารดวยขนาดของชนดตวแปรแถวลาดบกจะไดจานวนสมาชกของแถวลาดบทงหมด

ตวอยางท 7.12 โปรแกรมการหาจานวนสมาชกของแถวลาดบ 2 มต

1 #include <stdio.h> 2 main() 3 { 4 int a[2][3]; 5 printf("int = %i\n",sizeof(int)); 6 printf("a = %i\n",sizeof(a)); 7 printf("Array have %i element",sizeof(a)/sizeof(int)); 8 }

Page 273: การเขียนโปรแกรมคอมพิวเตอร ์portal5.udru.ac.th/ebook/pdf/upload/17P88t2O788B98583682.pdfรูปภาพบางส่วนให

บทท 7 แถวลาดบ

255

ผลลพธของโปรแกรม int = 2 a = 12 Array have 6 element

อธบายโปรแกรม

บรรทดท 4 ประกาศตวแปรชนดแถวลาดบ ทเปนชนดจานวนเตม

บรรทดท 5 หาคาขนาดของหนวยความจาตามประเภทชนดของตวแปลตาง และแสดงผล

บรรทดท 6 หาคาขนาดของหนวยความจาของตวแปรชนดแถวลาดบ ของตวแปร a ทงหมด และแสดงผล

บรรทดท 7 ทาการคานวณหาจานวนสมาชกของตวแปร โดยนาคาขนาดของหนวยความจาตวแปร a ทงหมด หารดวยขนาดของหนวยความจาของตวแปร a แตละตว และแสดงผล

ตวอยางท 7.12 โปรแกรมการหาขนาดของแถวลาดบทมการกาหนดขนาดอตโนมต

1 #include <stdio.h> 2 main() 3 { 4 int a[] = {1,2,3,4,5,6,7,8}; 5 printf("int = %i\n",sizeof(int)); 6 printf("a = %i\n",sizeof(a)); 7 printf("Array have %i element",sizeof(a)/sizeof(int)); 8 }

ผลลพธของโปรแกรม int = 2 a = 16 Array have 8 element

อธบายโปรแกรม

บรรทดท 4 ประกาศตวแปรชนดแถวลาดบ ทเปนชนดจานวนเตมโดยกาหนดขนาดอตโนมต

บรรทดท 5 หาคาขนาดของหนวยความจาตามประเภทชนดของตวแปลตาง และแสดงผล

บรรทดท 6 หาคาขนาดของหนวยความจาของตวแปรชนดแถวลาดบ ของตวแปร a ทงหมด และแสดงผล

Page 274: การเขียนโปรแกรมคอมพิวเตอร ์portal5.udru.ac.th/ebook/pdf/upload/17P88t2O788B98583682.pdfรูปภาพบางส่วนให

บทท 7 แถวลาดบ

256

บรรทดท 7 ทาการคานวณหาจานวนสมาชกของตวแปร โดยนาคาขนาดของหนวยความจาตวแปร a ทงหมด หารดวยขนาดของหนวยความจาของตวแปร a แตละตว และแสดงผล

ตวอยางท 7.13 โปรแกรมการหาขนาดของมตทหนงของแถวลาดบ 2 มต

1 #include <stdio.h> 2 void main(void) 3 { 4 int a[2][5] = {1,2,3,4,5,6,7,8,9,0}; 5 printf("int = %i\n",sizeof(int)); 6 printf("a = %i\n",sizeof(a)); 7 printf("a[0] = %i\n",sizeof(a[0])); 8 printf("a[1] = %i\n",sizeof(a[1])); 9 }

ผลลพธของโปรแกรม int = 2 a = 20 a[0] = 10 a[1] = 10

อธบายโปรแกรม

บรรทดท 4 ประกาศตวแปรชนดแถวลาดบ ทเปนชนดจานวนเตม

บรรทดท 5 หาคาขนาดของหนวยความจาตามประเภทชนดของตวแปลตาง และแสดงผล

บรรทดท 6 หาคาขนาดของหนวยความจาของตวแปรชนดแถวลาดบ ของตวแปร a ทงหมด และแสดงผล

บรรทดท 7 หาคาขนาดของหนวยความจาของตวแปรชนดแถวลาดบ ของตวแปร a ในแถวแรก และแสดงผล

บรรทดท 8 หาคาขนาดของหนวยความจาของตวแปรชนดแถวลาดบ ของตวแปร a ในแถวทสอง และแสดงผล

โปรแกรมขางตนมการใชแถวลาดบสองมตคอตวแปร a โดยปกตแลวการอางถงตวแปรแถวลาดบทเปนสองมตแลวจะตองระบคาตวแปรทงมตท 1 และมตท 2 เชน a[0][2],

a[1][4] เปนตน แตถาเราอางเฉพาะมตแรกเทานนเชน a[0], a[1] กจะหมายรวมถงสมาชกทก

Page 275: การเขียนโปรแกรมคอมพิวเตอร ์portal5.udru.ac.th/ebook/pdf/upload/17P88t2O788B98583682.pdfรูปภาพบางส่วนให

บทท 7 แถวลาดบ

257

ตวทอยในมตถดไป (มตท 2,3,4,...) แสดงเปนรปขางลาง ดงนนถาใช sizeof(a[i]) กจะไดขนาดของสมาชกแถวลาดบ 5 ตว ซงมขนาดเปน 10 นนเอง

1 2 3 4 5

6 7 8 9 0

a[0]

a[1]

a[0][0] a[0][1] a[0][2] a[0][3] a[0][4]

a[1][0] a[1][1] a[1][2] a[1][3] a[1][4]

ตวอยางท 7.14 โปรแกรมการหาขนาดของมตทหนงของแถวลาดบ 2 มต

1 #include <stdio.h> 2 void main(void) 3 { 4 int a[][3][2] = {1,2,3,4,5,6,7,8,9,0,1,2}; 5 printf("int = %i\n",sizeof(int)); 6 printf("a = %i\n",sizeof(a)); 7 printf("a[0] = %i\n",sizeof(a[0])); 8 printf("First Dimention =

%i\n",sizeof(a)/sizeof(a[0])); 9 }

ผลลพธของโปรแกรม int = 2 a = 24 a[0] = 12 First Dimention = 2

อธบายโปรแกรม

บรรทดท 4 ประกาศตวแปรชนดแถวลาดบ 3 มต ทเปนชนดจานวนเตม

บรรทดท 5 หาคาขนาดของหนวยความจาตามประเภทชนดของตวแปลตาง และแสดงผล และแสดงผล

บรรทดท 6 หาคาขนาดของหนวยความจาของตวแปรชนดแถวลาดบ ของตวแปร a ทงหมด และแสดงผล

บรรทดท 7 หาคาขนาดของหนวยความจาของตวแปรชนดแถวลาดบ ของตวแปร a ในแถวแรก และแสดงผล

บรรทดท 8 ทาการคานวณหาจานวนสมาชกของตวแปร โดยนาคาขนาดของหนวยความจาตวแปร a ทงหมด หารดวยขนาดของหนวยความจาของตวแปร a ของแถวแรก และแสดงผล

Page 276: การเขียนโปรแกรมคอมพิวเตอร ์portal5.udru.ac.th/ebook/pdf/upload/17P88t2O788B98583682.pdfรูปภาพบางส่วนให

บทท 7 แถวลาดบ

258

7.6 แถวลาดบของสายอกขระ (Array of String)

แถวลาดบของสายอกขระหรอสตรงเปนแถวลาดบทนาชนดขอมลของสายอกขระหรอตวอกษรมาสรางเปนแถวลาดบ ในการสรางแถวลาดบของสายอกขระมขอควรทราบคอ

ตองทราบจานวนอกษรสงสดทตวแปรนนรบได เพราะในภาษาซไมมการตรวจสอบการใชแถวลาดบของสายอกขระเกนขอบเขต ดงนนจงเปนหนาทของผ เขยนโปรแกรมจะตองระวงในเรองน

ฟงกชนทรบขอมลจากผ ใชควรมการตรวจสอบความยาวของขอความดวยวาเกนขนาดสงสดทรบไดหรอไมดวย กอนทจะนาคาทรบจากผ ใชเกบไวในตวแปรเพอเปนการปองกนความผดพลาดทจะเกดขน

ในการสรางแถวลาดบของสายอกขระสามารถกระทาไดโดยการประกาศตวแปรดงน

char name[10]; //เปนการสรางแถวลาดบทเปนชนดของสายอกขระจานวน

10 ตวอกษร char address[50]; //เปนการสรางแถวลาดบทเปนชนดของสายอกขระจานวน 50 ตวอกษร

การประกาศตวแปรในลกษณะนเปรยบเสมอนการจองเนอทในหนวยความจาดงรปท

7.5 โดยเปนการจองหนวยความจาของตวแปรทชอ name ทมขนาดสงสดในการเกบตวอกษรไดสงสด 6 ตว ซงในการเขยนโปรแกรมตวสดทายจะกาหนดใหเปน \0 ซงเปนจดสนสดของสายอกขระ

Index 0 1 2 3 4 5 6

value ‘D’ ‘R’ ‘K’ ‘R’ ‘I’ ‘T’ \0

รปท 7.5 การจองหนวยความจาของตวแปร char name[6];

ในการกาหนดคาใหกบสายอกขระสามารถกระทาไดหลายลกษณะดงเชนการกาหนดคาใหกบแถวลาดบทตวหรอกาหนดคาเรมตนพรอมกบการประกาศตวแปร

name

Page 277: การเขียนโปรแกรมคอมพิวเตอร ์portal5.udru.ac.th/ebook/pdf/upload/17P88t2O788B98583682.pdfรูปภาพบางส่วนให

บทท 7 แถวลาดบ

259

การกาหนดคาใหกบแถวลาดบทตวดงเชน

char name[5];

name[0] = ‘D’;

name[1] = ‘r’;

name[2] = ‘.’;

name[3] = ‘K’;

name[4] = ‘\0’;

การกาหนดคาเรมตนพรอมกบการประกาศตวแปรดงเชน

char name[] = {‘D’,’r’,’.’,’K’,’\0’};

char name[4] = {‘D’,’r’,’.’,’K’,’\0’};

จากการประกาศตวแปรแถวลาดบของสายอกขระสงเกตดวาจะมตวอกษร ‘\0’ ซงเปนตวอกษรทบงบอกการปดทายในสวนของสายอกขระหรอบงบอกจดสนสดของสายอกขระ

ตวอยางท 7.15 โปรแกรมในการประกาศตวแปรแถวลาดบของสายอกขระโดยกาหนดคาพรอมกบการประกาศตวแปร

1 #include <stdio.h> 2 void main(void) 3 { 4 char name[8] = {'D','R','.','K','r','i','t','\0'}; 5 printf("%s \n",name); 6 char surname[]={'S','o','m','k','a','n','t', 'a',

'r','\0'}; 7 printf("%s \n",surname); 8 char nickname[] = "My nickname is Q"; 9 printf("%s \n",nickname); 10 char othername[21] = "My other name is Aob"; 11 printf("%s \n",othername); 12 }

ผลลพธของโปรแกรม

DR.Krit Somkantar My nickname is Q My other name is Aob

Page 278: การเขียนโปรแกรมคอมพิวเตอร ์portal5.udru.ac.th/ebook/pdf/upload/17P88t2O788B98583682.pdfรูปภาพบางส่วนให

บทท 7 แถวลาดบ

260

อธบายโปรแกรม

บรรทดท 4 ประกาศตวแปรสายอกขระทมจานวนตวอกษรได 8 ตว พรอมทงกาหนดคาเรมตนใหกบตวแปร

บรรทดท 6 ประกาศตวแปรสายอกขระทไมกาหนดขนาดเรมตน แตเปนการกาหนดขนาดอตโนมตโดยขนาดขนอยกบตวแปรเรมตนทไดประกาศไว

บรรทดท 8 ประกาศตวแปรสายอกขระทไมกาหนดขนาดเรมตน แตเปนการกาหนดขนาดอตโนมตโดยขนาดขนอยกบตวแปรเรมตนทเปนขอความจะอยภายในเครองหมายอญประกาศ (“ ”)

บรรทดท 10 ประกาศตวแปรสายอกขระทกาหนดขนาดเรมตน พรอมทงประกาศคาตวแปร ตวแปรเรมตนทเปนขอความจะอยภายในเครองหมายอญประกาศ (“ ”) ซงการประกาศลกษณะนจะไมนยมกาหนดคาเรมตน เพราะถากาหนดขนาดผดพลาดนอยกวาจานวนตวอกษรกจะเกดความผดพลาด โดยทวไปถาตองการกาหนดตวแปรในลกษณะนจะนยมกระทาการประกาศตวแปรดงบรรทดท 8

ตวอยางท 7.16 โปรแกรมในการประกาศตวแปรแถวลาดบของสายอกขระโดยกาหนดคาหลงจากการประกาศตวแปร

1 #include <stdio.h> 2 void main(void) 3 { 4 char name[20]; 5 name[0] = 'D'; 6 name[1] = 'r'; 7 name[2] = '.'; 8 name[3] = 'K'; 9 name[4] = 'r'; 10 name[5] = 'i'; 11 name[6] = 't'; 12 name[7] = '\0'; 13 printf("%s \n",name); 14 }

ผลลพธของโปรแกรม

DR.Krit

Page 279: การเขียนโปรแกรมคอมพิวเตอร ์portal5.udru.ac.th/ebook/pdf/upload/17P88t2O788B98583682.pdfรูปภาพบางส่วนให

บทท 7 แถวลาดบ

261

อธบายโปรแกรม

บรรทดท 4 ประกาศตวแปรสายอกขระทมจานวนตวอกษรได 20 ตว พรอมทงกาหนดคาเรมตนใหกบตวแปร

บรรทดท 5-12 กาหนดคาตวแปรในแตแถวลาดบของสายอกขระ

Page 280: การเขียนโปรแกรมคอมพิวเตอร ์portal5.udru.ac.th/ebook/pdf/upload/17P88t2O788B98583682.pdfรูปภาพบางส่วนให

บทท 7 แถวลาดบ

262

บทสรป

ในบทนไดกลาวถงโครงสรางแถวลาดบ แถวลาดบ 1 มต แถวลาดบแบบ 2 มต แถวลาดบ 3 มต ขนาดแถวลาดบอตโนมต และแถวลาดบของสายอกขระ แถวลาดบหรออาเรย คอโครงสรางขอมลทใชตวแปรเดยวเกบกลมของขอมลชนดเดยวกนไว แถวลาดบเปนชนดขอมลประเภทหนง และจะกาหนดจานวนขอมล หรอสมาชกของแถวลาดบไวแนนอน โดยจะใชดรรชน ในการอางถงตาแหนงของขอมลในแถวลาดบ และตองระบดรรชนในเครองหมายวงเลบเหลยม แถวลาดบ 1 มต จะมการจดเกบขอมลในลกษณะตอเนองกนเปนแถว ซงจะตองมการกาหนดขนาดใหเพยงพอกบจานวนขอมลทตองการจดเกบ แตกไมใหมขนาดใหญมากเกนกวาจานวนขอมล เพราะจะเปนการสนเปลองพนทหนวยความจาโดยเปลาประโยชน ซงเปนโครงสรางของแถวลาดบทงายทสด แถวลาดบแบบ 2 มต จะมการจดเกบขอมลในลกษณะของเมทรกซ โดยจะมรปแบบเปนตารางทประกอบไปดวยแถวและคอลมน ซงการอางองขอมล จะตองอางองดวยตวเลข 2 ชด คอ แถวและคอลมน แถวลาดบแบบ 3 มต จะมลกษณะเหมอนกบการนาแถวลาดบแบบ 2 มต มาเรยงซอนกนหลายๆ ชน ทาใหแถวลาดบแบบ 3 มต

มชน แถว และคอลมน ดงนนการอางองถงขอมล จะตองอางองดวยตวเลข 3 ชด คอ ชน แถว และคอลมน การกาหนดขนาดแถวลาดบโดยอตโนมตกลไกสาหรบหาขนาดของแถวลาดบใหโดยอตโนมตเนองจากถามการกาหนดขนาดของแถวลาดบจะไมสามารถเปลยนแปลงคาได

ดงนนหากมการอางคาตวแปรทอยนอกเหนอจากขนาดทกาหนดกจะกระทาใหเกดความผดพลาด ดงนนในบางครงเพอหลกเลยงปญหาน ภาษาซจงมวธการกาหนดขนาดแถวลาดบโดยอตโนมต เพอใหสามารถใชงานไดอยางมประสทธภาพมากขน การหาขนาดของแถวลาดบเปนการหาขนาดของแถวลาดบโดยใชฟง กชนในภาษาซเ พอใหสามารถหาขนาดหนวยความจาชนดตวแปรตางๆ และหาขนาดหนวยความจาทตวแปรนนใชได แถวลาดบของสายอกขระหรอสตรงเปนแถวลาดบทนาชนดขอมลของสายอกขระหรอตวอกษรมาสรางเปนแถวลาดบ

Page 281: การเขียนโปรแกรมคอมพิวเตอร ์portal5.udru.ac.th/ebook/pdf/upload/17P88t2O788B98583682.pdfรูปภาพบางส่วนให

บทท 7 แถวลาดบ

263

แบบฝกหดทบทวน

1. จงเขยนโปรแกรมเพอแสดงวาเลข 5 อยทตาแหนงใดในแถวลาดบ 1 มต ตอไปน {1 ,2 ,3

,4 ,5 ,6 ,7 ,8 ,9 ,10}

2. จงเขยนโปรแกรมเพอแสดงวาเลข 5 อยทตาแหนงใดในแถวลาดบ 2 มต ตอไปน { {1 ,2 ,3

,4} ,{5 ,6 ,7 ,8} ,{9 ,10 ,11 ,12}}

3. จงเขยนโปรแกรมเพอแสดงวาเลข 15 อยทตาแหนงใดในแถวลาดบ 3 มต ตอไปน { { {1 ,2

,3 ,4} ,{5 ,6 ,7 ,8} ,{9 ,10 ,11 ,12} } , { {13 ,14 ,15 ,16} ,{17 ,18 ,19 ,20} ,{21 ,22 ,23

,24} } }

4. จงเขยนโปรแกรมแสดงการคานวณหาจานวนนกศกษาทไดคะแนนตงแต 60 ถง 80

คะแนน โดยใหรบคาคะแนนผานทางคยบอรดจานวน 10 คน จากนนใหแสดงคะแนนของนกศกษาแตละคน และแสดงจานวนนกศกษาทไดคะแนนตงแต 60 ถง 80 คะแนน

5. จงเขยนโปรแกรมแสดงการคานวณหาคะแนนสงสดของวชาคอมพวเตอร คณตศาสตร และฟสกส โดยมนกศกษาวชาละ 5 คน โดยใหรบคาคะแนนผานทางคยบอรด จากนนใหแสดงคะแนนของนกศกษาแตละคน และแสดงคะแนนสงสดของแตละวชาผานทางจอภาพ

6. จงเขยนโปรแกรมบวกเลขของเมทรกซขนาด 3 แถว 3 คอลมน โดยใหมการรบคาเขามาเพอทาการประมวลผล

7. จงเขยนโปรแกรมคานวณหาเฉลยของเลข 10 จานวน โดยใชโครงสรางของแถวลาดบและใหทาการรบคาเขามาเพอทาการประมวลผล

8. จงเขยนโปรแกรมเพอหาคาตาสดและสงสด ของเมทรกซขนาด 5 แถว 5 คอลมน

9. จงเขยนโปรแกรมหาคาผลรวมของคาแนวทแยง ของเมทรกซขนาด 5 แถว 5 คอลมน

10. จงเขยนโปรแกรมคณเลขของเมทรกซขนาด ขนาด 3 แถว 3 คอลมน

Page 282: การเขียนโปรแกรมคอมพิวเตอร ์portal5.udru.ac.th/ebook/pdf/upload/17P88t2O788B98583682.pdfรูปภาพบางส่วนให

บทท 8 ฟงกชน

บทท 8

ฟงกชน

ในบทนจะกลาวถงแนวคดของฟงกชน (Concept of Functions) ฟงกชนมาตรฐาน

(Standard Library Function) ฟงกชนทสรางขนมา (User-Defined Functions) และการประกาศตวแปรของเรองฟงกชน (Variable Declaration of Functions) ซงในการเขยนโปรแกรมคอมพวเตอรมกจะมคาสงจานวนมากทาใหเกดเปนโปรแกรมขนาดใหญ ทาใหยากตอการเขยนโปรแกรม ยากตอการเขาใจ มความซบซอน และมความยงยากในการแกไขเปลยนแปลงโปรแกรม สงผลทาใหการพฒนาโปรแกรมเปนไปอยางไมมประสทธภาพ ดงนนจงมการเขยนโปรแกรมใหเปนสวนเลกๆ จานวนหลายสวนเพอทาใหเกดความสะดวกตอการออกแบบ สะดวกในการสราง แกไขปรบปรงไดโดยงาย และพฒนาตอไดโดยสะดวก ซงฟงกชนเปนการกระจายโปรแกรมออกเปนสวนเลกสงผลทาใหสามารถชวยแกปญหาการเขยนโปรแกรมทมความซบซอน ในปจจบนการเขยนโปรแกรมโดยการเขยนแบบฟงกชนเปนวธการทนยมและมประสทธภาพใชกนอยางแพรหลาย ทาใหสามารถพฒนาโปรแกรมขนาดใหญไดอยางมประสทธภาพ

8.1 แนวคดของฟงกชน (Concept of Functions)

ฟงกชนเปรยบเสมอนกลมของคาสงโปรแกรมกลมหนงททาหนาทบางอยางตามทหนาทของฟงกชนนนตองการ ซงในมมมองของผ เรยกใชฟงกชนนนฟงกชนเปรยบเสมอนกลองดา ผ เรยกใชไมจาเปนตองทราบวาฟงกชนทจะเรยกใชนนมขนตอนการทางานอยางไร สงทผเรยกใชสนใจกคอผลลพธของการเรยกใชฟงกชนเทานน และเพอใหผลการทางานถกตองตามทผ เรยกใชตองการ ผ เรยกใชจะตองทราบขอตกลงของการเรยกใชงานฟงกชนวาจะตองสงอะไรไปใหฟงกชนบาง และผลลพธของโปรแกรมควรเปนเชนไร ในมมมองของผสรางฟงกชน

ผสรางจะตองแจงใหผใชทราบถงรปแบบการใชงานตางๆ ของฟงกชน และในการสรางฟงกชน

Page 283: การเขียนโปรแกรมคอมพิวเตอร ์portal5.udru.ac.th/ebook/pdf/upload/17P88t2O788B98583682.pdfรูปภาพบางส่วนให

บทท 8 ฟงกชน

266

นนกจะตองทาการเขยนโปรแกรมใหตรงตามขอกาหนดของฟงกชนนน ซงถาไมกระทาตามขอกาหนดจะสงผลใหเกดความผดพลาดได รปแบบของฟงกชนเปรยบเสมอนเปนสวนของโปรแกรมยอยอนๆ ททาหนาทเฉพาะอยาง จะเรยกใชงานเมอสวนของโปรแกรมหลกตองการประมวลผลในสวนยอยนน ซงเมอเสรจสนกระบวนการของฟงกชนกจะกลบมายงสวนโปรแกรมหลก ซงรปแบบตวอยางดงแสดงในรปท 8.1

รปท 8.1 รปแบบตวอยางการทางานของฟงกชน

ในการออกแบบฟงกชนควรจะตองวางแผนขอมลเขาและขอมลออกของฟงกชนเนองจากการสรางฟงกชนมจดมงหมายเพอใหสามารถใชงานไดโดยสะดวก โดยอาจจะไมตองเขาใจการทางานภายในของฟงกชน แตตองการแคปอนคาเขาไปในฟงกชนและสนใจเฉพาะคาทเปนผลลพธทไดจากฟงกชน ในการออกแบบฟงกชนจะประกอบไปดวย ขอมลเขา กระบวนการ และขอมลออก ในมมมองของผใชจะสนใจเฉพาะขอมลเขาและขอมลออก

ขอมลเขา หมายถงขอมลทจาเปนตองปอนขอมลเขาสฟงกชนเพอทาการประมวลผล กระบวนการ หมายถงกระบวนการตางๆ ของฟงกชนเพอใหไดงานตามทตองการ เชน

กระบวนการคานวณคาสมการในการหาพนทตางๆ ขอมลออก หมายถงขอมลทไดจากการประมวลผลของฟงกชน โดยจะมการสงคา

ผลลพธทไดจากการประมวลผล

Page 284: การเขียนโปรแกรมคอมพิวเตอร ์portal5.udru.ac.th/ebook/pdf/upload/17P88t2O788B98583682.pdfรูปภาพบางส่วนให

บทท 8 ฟงกชน

267

ตวอยางท 8.1 แนวคดการออกแบบฟงกชนในการคานวณหาพนทสเหลยมผนผา

ในการสรางฟงกชนน สามารถแบงออกเปนงานยอย ๆ ดงน

� ขอมลเขา จะเปนการรบขอมล 2 จานวนจากผใช แลวทาการสงคาไปยงฟงกชน

� กระบวนการ จะเปนการคานวณหาพนทสเหลยมผนผา (กวาง x ยาว) โดยคาทนามาทาการประมวลผลเปนคาทไดจากในสวนของขอมลเขา หลงจากการประมวลผลแลวเกบผลลพธ � ขอมลออก แสดงผลลพธของการประมวลผลโดยการสงคาคน

โครงสรางรปแบบฟงกชนคอ <return type> function_name(<parameter>)

โดยท

function_name คอชอของฟงกชน โดยชอของฟงกชนจะใชหลกการตงชอเชนเดยวกบกบการตงชอตวแปร

parameter คอคาทตองใชประกอบการทางาน ถาไมมใหเขยนคาวา void หรอไมเขยนเลย

return type คอชนดขอมลทฟงกชนจะคนใหกบผ ทเรยกใชฟงกชน (ถาม) ถาไมมใหเขยนวา void แตถาไมระบจะถอวามคาทคนเปนชนดจานวนเตม (Integer)

Page 285: การเขียนโปรแกรมคอมพิวเตอร ์portal5.udru.ac.th/ebook/pdf/upload/17P88t2O788B98583682.pdfรูปภาพบางส่วนให

บทท 8 ฟงกชน

268

ตวอยางโปรแกรมตอประสานฟงกชน (Function Interface) พรอมความหมาย Function Interface Function Name Parameter Return Type

void main(void) main void void main() main void int void randomize(void) randomize void void void closegraph(void) closegraph void void int getch(void) getch void int int getdisk(void) getdisk void int int flushall(void) flushall void int int wherex(void) wherex void int void sound(unsigned frequency) sound unsigned void double sin(double x) sin double double int isdigit(int c) isdigit int int

ตวอยางการเรยกใชงานฟงกชน

randomize() //เปนการเรยกใชฟงกชนสม

gotoxy(12,35) //เปนการเรยกใชฟงกชนทไปยงตาแหนงทตองการ โดยเปนการใสตาแหนงทตองการโดยตรง

gotoxy(a,b) //เปนการเรยกใชฟงกชนทไปยงตาแหนงทตองการ โดยท a กบ b เปนตวแปรชนดจานวนเตม (int)

gotoxy(12,b) //เปนการเรยกใชฟงกชนทไปยงตาแหนงทตองการ โดยทตวแปร b เปนตวแปรชนดจานวนเตม (int)

a = sin(2.3) //เปนการเรยกใชฟงกชนการคานวณคา sin

a = sin(sin(2.5)) //เปนการเรยกใชฟงกชนการคานวณคา sin โดยเปนการเรยกฟงกชนซอนฟงกชน

จากตวอยางการเรยกใชงานขางบนน ไดขอสรปวา การใชงานฟงกชนนนกตองสงคาใหสอดคลองกบตวแปรเสรมฟงกชน (Function

Parameter) ทกาหนด

ถาไมมตวแปรเสรมฟงกชน ใหละเวนการเขยน ดงตวอยางของฟงกชน ramdomize

ถาฟงกชนมการคนคาจะมตวแปรมารบคานน ดงตวอยางฟงกชน sin

Page 286: การเขียนโปรแกรมคอมพิวเตอร ์portal5.udru.ac.th/ebook/pdf/upload/17P88t2O788B98583682.pdfรูปภาพบางส่วนให

บทท 8 ฟงกชน

269

8.2 ฟงกชนมาตรฐาน (Standard Library Functions)

ฟงกชนมาตรฐาน คอฟงกชนทภาษาซไดจดเตรยมไวเพอใหสามารถเรยกใชงานฟงกชนพนฐานทจาเปนไดโดยงาย โดยจะเกบอยในแฟมสวนหว (Header File) ฟงกชนมาตรฐานจะอยในรปแบบของรหสจดหมาย (Object Code) ซงภาษาซแฟมสวนหวคอแฟมทมนามสกล *.h ตางๆ เมอตองการใชฟงกชนใด จะตองรวาฟงกชนนนอยในไฟลสวนหวใด เพอระบคาสง #include<header file.h> ไวทสวนหวของโปรแกรม จากนนจงสามารถเรยกใชฟงกชนโดยตองเขยนชอฟงกชนตามดวยวงเลบซงภายในเปนขอมลทฟงกชนตองการใช ในการใชงานฟงกชนใดทเปนฟงกชนมาตรฐานจาเปนจะตองรลกษณะการทางานของฟงกชน วาจะตองทาการปอนคาอะไรเขาไป ประมวลผลอะไร และคนคาผลลพธอะไร จงจะสามารถใชงานไดอยางถกตอง ซงโดยทวไปหากจารปแบบไมไดกจะมคาอธบายของรปแบบฟงกชนมาตรฐานในสวนชวยเหลอ (Help) ทจะอธบายการทางานของฟงกชนและพรอมแสดงตวอยาง อยางงาย

ตวอยางของฟงกชนมาตรฐาน โดยแยกตามแฟมสวนหวพรอมตวอยางการใชงานดงตารางท 8.1, 8.2, 8.3 และ 8.4 ซงฟงกชนในตารางทงหมดทไดกลาวถงเปนเพยงสวนหนงของฟงกชนมาตรฐาน ในการเขยนโปรแกรมใชงานควรจะตองศกษาฟงกชนมาตรฐานเพมเตม ซงโดยทวไปจะมสวนชวยเหลอ (Help) ในการอธบายฟงกชนตางๆ อย

8.2.1 ฟงกชนในแฟมสวนหว math.h

ตารางท 8.1 แฟมสวนหว math.h

โปรแกรมตอประสานฟงกชน

[math.h]

ความหมาย

double cos(double x) หาคา Cosine

double sin(double x) หาคา Sine

double tan(double x) หาคา Tangent

double acos(double x) หาคา Arccosine

double asin(double x) หาคา Arcsine

double atan(double x) หาคา Arctangent

double cosh(double x) หาคา Hyperbolic cosine

double sinh(double x) หาคา Hyperbolic sine

Page 287: การเขียนโปรแกรมคอมพิวเตอร ์portal5.udru.ac.th/ebook/pdf/upload/17P88t2O788B98583682.pdfรูปภาพบางส่วนให

บทท 8 ฟงกชน

270

double tanh(double x) หาคา Hyperbolic tangent

double exp(double x) หาคา ex เมอ e เปนคาคงทประมาณ 2.71

double log(double x) หาคา log ฐาน e หรอ ln(x)

double log10(double x) หาคา log ฐาน 10 ของคา x

double pow(double x, double y) หาคา xy

double sqrt(double x) หาคารากทสองของ x

int abs(int x) หาคาสมบรณของจานวนเตม x

long int labs(long int x) หาคาสมบรณของจานวนเตมแบบยาว x

double fabs(double x) หาคาสมบรณของทศนยม x

double ceil(double x) การปดเศษขนของทศนยม x

celi(2.538) =

3.000

celi(2.857) =

3.000

celi(2.000) =

2.000

celi(-2.75) = -

2.000

double floor(double x) การปดเศษลงของทศนยม x

floor(2.538) =

2.000

floor(2.857) =

2.000

floor(2.000) =

2.000

floor(-2.75) = -

3.000

ฟงกชนในแฟมสวนหว math.h เปนฟงกชนทใชสาหรบการคานวณทางคณตศาสตร ตวแปรรบคาทฟงกชนสงกลบจะตองมชนดขอมลเปนเลขทศนยมแบบดบเบล(double)

เนองจากฟงกชนจะสงคากลบออกไปจากฟงกชนเปนชนดขอมลแบบเลขทศนยมแบบดบเบล นอกจากนชนดขอมลทรบเขามาในฟงกชนเปนชนดขอมลแบบเลขทศนยมแบบดบเบล เชนกน

Page 288: การเขียนโปรแกรมคอมพิวเตอร ์portal5.udru.ac.th/ebook/pdf/upload/17P88t2O788B98583682.pdfรูปภาพบางส่วนให

บทท 8 ฟงกชน

271

สาหรบฟงกชนทจะกลาวถงตอไปน เปนฟงกชนทมการใชงานบอยๆ ไดแก ฟงกชน double sqrt(double x)

เปนฟงกชนทใชในการคานวณหารากท 2 ของตวแปร x

ฟงกชน double pow(double x,double y)

เปนฟงกชนทใชในการคานวณหาคาเลขยกกาลง ซงกคอ ตวแปร x ยกกาลงตวแปร y

ฟงกชน double ceil(double x)

เปนฟงกชนทใชในการปดเศษของตวแปร x ขน

ฟงกชน double floor(double x)

เปนฟงกชนทใชในการปดเศษของตวแปร x ลง ฟงกชน double fabs(double x)

เปนฟงกชนทใชในการหาคาสมบรณของตวแปร x

ฟงกชน double sin(double x)

เปนฟงกชนทใชในการหาคา sine ทางตรโกณมต ของตวแปร x ซงเกบคามมทตองการ ฟงกชน double cos(double x)

เปนฟงกชนทใชในการหาคา cosine ทางตรโกณมต ของตวแปร x ซงเกบคามมทตองการ ฟงกชน double tan(double x)

เปนฟงกชนทใชในการหาคา tangent ทางตรโกณมต ของตวแปร x ซงเกบคามมทตองการ

Page 289: การเขียนโปรแกรมคอมพิวเตอร ์portal5.udru.ac.th/ebook/pdf/upload/17P88t2O788B98583682.pdfรูปภาพบางส่วนให

บทท 8 ฟงกชน

272

ตวอยางท 8.1 โปรแกรมแสดงการใชฟงกชนในไฟลสวนหว math.h

1 #include<stdio.h> 2 #include<math.h> 3 main(){ 4 double a=16,b=2,c=3.3,d=3.5,e=-4,f=60; 5 printf("Square root of %.2f = %.2f\n",a,sqrt(a)); 6 printf("%.2f power %.2f = %.2f\n",a,b,pow(a,b)); 7 printf("Ceil of %.2f = %.2f\n",c,ceil(c)); 8 printf("Floor of %.2f = %.2f\n",c,floor(c)); 9 printf("Ceil of %.2f = %.2f\n",d,ceil(d)); 10 printf("Floor of %.2f = %.2f\n",d,floor(d)); 11 printf("Absolute of %.2f = %.2f\n",e,fabs(e)); 12 printf("Sin of %.2f = %.2f\n",f,sin(f)); 13 printf("Cos of %.2f = %.2f\n",f,cos(f)); 14 printf("tan of %.2f = %.2f\n",f,tan(f)); 15 }

ผลลพธของโปรแกรม Square root of 16.00 = 4.00 16.00 power 2.00 = 256.00 Ceil of 3.30 = 4.00 Floor of 3.30 = 3.00 Ceil of 3.50 = 4.00 Floor of 3.50 = 3.00 Absolute of -4.00 = 4.00 Sin of 60.00 = -0.30 Cos of 60.00 = -0.95 Tan of 60.00 = 0.32

อธบายโปรแกรม

บรรทดท 4 ประกาศตวแปรของขอมลเปนเลขทศนยมแบบดบเบล บรรทดท 5-14 เรยกใชงานฟงกชนพรอมทงสงคาเขาไปในฟงกชนเพอทาการ

ประมวลผลและแสดงผลลพธทไดจากการเรยกใชงานฟงกชน

Page 290: การเขียนโปรแกรมคอมพิวเตอร ์portal5.udru.ac.th/ebook/pdf/upload/17P88t2O788B98583682.pdfรูปภาพบางส่วนให

บทท 8 ฟงกชน

273

ตวอยางท 8.2 โปรแกรมแสดงการใชฟงกชนในไฟลสวนหว math.h

1 #include <stdio.h> 2 #include <math.h> 3 main() 4 { 5 double a,b,c,d,e,f,g,h; 6 a = sin(45.0); /* Find sine 45 radian */ 7 b = cos(45.0); /* Find cosine 45 radian */ 8 c = tan(45.0); /* Equal sin(45)/cos(45) */ 9 d = exp(1.0); /* Equal 2.71^1.0 */ 10 e = log(2.71); /* Equal ln(2.71) */ 11 f = log10(100.0); /* Equal log base 10 of 100 */ 12 g = pow(5.0,3.0); /* Equal 5^3 */ 13 h = sqrt(100.0); /* Equal root of 100 */ 14 15 printf("sin(45) = %lf\n",a); 16 printf("cos(45) = %lf\n",b); 17 printf("tan(45) = %lf\n",c); 18 printf("e^1.0 = %lf\n",d); 19 printf("ln(2.71) = %lf\n",e); 20 printf("log(100) = %lf\n",f); 21 printf("5^3 = %lf\n",g); 22 printf("root(100) = %lf\n",h); 23 }

ผลลพธของโปรแกรม sin(45) = 0.850904 cos(45) = 0.525322 tan(45) = 1.619775 e^1.0 = 2.718282 ln(2.71) = 0.996949 log(100) = 2.000000 5^3 = 125.000000 root(100) = 10.000000

อธบายโปรแกรม

บรรทดท 5 ประกาศตวแปรของขอมลเปนเลขทศนยมแบบดบเบล บรรทดท 6-13 ทาการเรยกใชงานฟงกชน

บรรทดท 15-22 แสดงผลลพธของฟงกชน

Page 291: การเขียนโปรแกรมคอมพิวเตอร ์portal5.udru.ac.th/ebook/pdf/upload/17P88t2O788B98583682.pdfรูปภาพบางส่วนให

บทท 8 ฟงกชน

274

8.2.2 ฟงกชนในแฟมสวนหว ctype.h

ตารางท 8.2 แฟมสวนหว ctype.h

โปรแกรมตอประสานฟงกชน

[ctype.h]

ความหมาย

int isalnum(int c) ใหคาจรงถาอกขระ c เปนอกขระ A – Z, a – z, 0 – 9

int isalpha(int c) ใหคาจรงถาอกขระ c เปนอกขระ A – Z, a – z

int isdigit(int c) ใหคาจรงถาอกขระ c เปนอกขระตวเลข 0 – 9

int islower(int c) ใหคาจรงถาอกขระ c เปนอกขระตวเลกในภาษาองกฤษ

int isupper(int c) ใหคาจรงถาอกขระ c เปนอกขระตวใหญในภาษาองกฤษ

char tolower(char ch) ทาการแปลงอกขระ ch จากอกษรตวใหญปนอกษรตวเลก

char toupper(char ch) ทาการแปลงอกขระ ch จากอกษรตวเลกเปนอกษรตวใหญ

ฟงกชนในแฟมสวนหว ctype.h เปนฟงกชนทใชสาหรบตวอกษรเทานน สาหรบฟงกชนทจะกลาวถงตอไปน เปนฟงกชนทมการใชงานบอยๆ ไดแก

ฟงกชน int islower(char x);

เปนฟงกชนทใชในการตรวจสอบวาคาของตวแปร x เปนตวอกษรพมพเลกหรอไม ถาใชจะคนคาจานวนเตมทไมใช 0 กลบมา แตถาไมใชจะคนคา 0 กลบมา

ฟงกชน int isupper(char x);

เปนฟงกชนทใชในการตรวจสอบวาคาของตวแปร x เปนตวอกษรพมพใหญหรอไม ถาใชจะคนคาจานวนเตมทไมใช 0 กลบมา แตถาไมใชจะคนคา 0 กลบมา

ฟงกชน int isalnum(char x)

เปนฟงกชนทใชในการตรวจสอบวาคาของตวแปร x เปนตวอกษรหรอตวเลขหรอไม

ถาใชจะคนคาจานวนเตมทไมใช 0 กลบมา แตถาไมใชจะคนคา 0 กลบมา ฟงกชน int isalpha(char x);

เปนฟงกชนทใชในการตรวจสอบวาคาของตวแปร x เปนตวอกษรหรอไม ถาใชจะคนคาจานวนเตมทไมใช 0 กลบมา แตถาไมใชจะคนคา 0 กลบมา

Page 292: การเขียนโปรแกรมคอมพิวเตอร ์portal5.udru.ac.th/ebook/pdf/upload/17P88t2O788B98583682.pdfรูปภาพบางส่วนให

บทท 8 ฟงกชน

275

ฟงกชน int isdigit(char x);

เปนฟงกชนทใชในการตรวจสอบวาคาของตวแปร x เปนตวเลขหรอไม ถาใชจะคนคาจานวนเตมทไมใช 0 กลบมา แตถาไมใชจะคนคา 0 กลบมา

ฟงกชน char tolower(char x);

เปนฟงกชนทใชในการแปลงคาของตวแปร x ใหเปนตวอกษรพมพเลก ฟงกชน char toupper(char x);

เปนฟงกชนทใชในการแปลงคาของตวแปร x ใหเปนตวอกษรพมพใหญ

ตวอยางท 8.3 โปรแกรมแสดงการใชฟงกชนในแฟมสวนหว ctype.h

1 #include<stdio.h> 2 #include<ctype.h> 3 main(){ 4 char a='A',b='a',c='5',d='*'; 5 printf("%c is lower : %d\n",a,islower(a)); 6 printf("%c is lower : %d\n",b,islower(b)); 7 printf("%c is upper : %d\n",a,isupper(a)); 8 printf("%c is upper : %d\n",b,isupper(b)); 9 printf("%c is alpha or digit : %d\n",a,isalnum(a));10 printf("%c is alpha or digit : %d\n",c,isalnum(c));11 printf("%c is alpha or digit : %d\n",d,isalnum(d));12 printf("%c is alpha : %d\n",a,isalpha(a)); 13 printf("%c is alpha : %d\n",c,isalpha(c)); 14 printf("%c is alpha : %d\n",d,isalpha(d)); 15 printf("%c is digit : %d\n",a,isdigit(a)); 16 printf("%c is digit : %d\n",c,isdigit(c)); 17 printf("%c is digit : %d\n",d,isdigit(d)); 18 printf("%c tolower : %c\n",a,tolower(a)); 19 printf("%c tolower : %c\n",b,tolower(b)); 20 printf("%c toupper : %c\n",a,toupper(a)); 21 printf("%c toupper : %c\n",b,toupper(b)); 22 }

ผลลพธของโปรแกรม A is lower : 0 a is lower : 2 A is upper : 1 a is upper : 0 A is alpha of digit : 1 5 is alpha of digit : 4 * is alpha of digit : 0 A is alpha : 1 5 is alpha : 0 * is alpha : 0 A is digit : 0 5 is digit : 4 * is digit : 0

Page 293: การเขียนโปรแกรมคอมพิวเตอร ์portal5.udru.ac.th/ebook/pdf/upload/17P88t2O788B98583682.pdfรูปภาพบางส่วนให

บทท 8 ฟงกชน

276

A tolower : a a tolower : a A toupper : A a toupper : A

บรรทดท 4 ประกาศตวแปรของขอมลเปนขอมลแบบตวอกษร (Character)

บรรทดท 5-21 สงคาเขาไปในฟงกชนเพอทาการประมวลผลและแสดงผลลพธทไดจากการเรยกใชงานฟงกชน

ตวอยางท 8.4 โปรแกรมแสดงการใชฟงกชนในแฟมสวนหว ctype.h

1 #include <ctype.h> 2 #include <stdio.h> 3 main() 4 { 5 int a,b,c,d,e; 6 a=isalnum('5'); /* 5 is alphabet or number */ 7 b=isalpha('5'); /* 5 is alphabet */ 8 c=isdigit('5'); /* 5 is digital */ 9 d=isupper('A'); /* A is upper case */ 10 e=islower('A'); /* A is lower case */ 11 12 char f,g; 13 f = tolower('A'); /* convert A -> a */ 14 g = toupper('a'); /* convert a -> A */ 15 16 printf("isalnum('5') = %i\n",a); 17 printf("isalpha('5') = %i\n",b); 18 printf("isdigit('5') = %i\n",c); 19 printf("isupper('A') = %i\n",d); 20 printf("islower('A') = %i\n",e); 21 printf("tolower('A') = %c\n",f); 22 printf("toupper('a') = %c\n",g); 23 }

ผลลพธของโปรแกรม isalnum('5') = 2 isalpha('5') = 0 isdigit('5') = 2 isupper('A') = 4 islower('A') = 0 tolower('A') = a toupper('a') = A

Page 294: การเขียนโปรแกรมคอมพิวเตอร ์portal5.udru.ac.th/ebook/pdf/upload/17P88t2O788B98583682.pdfรูปภาพบางส่วนให

บทท 8 ฟงกชน

277

อธบายโปรแกรม

บรรทดท 5 ประกาศตวแปรของขอมลเปนขอมลแบบเลขจานวนเตม (Integer)

บรรทดท 6-10 ทาการเรยกใชงานฟงกชน

บรรทดท 11 ประกาศตวแปรของขอมลเปนขอมลแบบตวอกษร (Character)

บรรทดท 13-14 ทาการเรยกใชงานฟงกชน

บรรทดท 16-22 แสดงผลลพธของฟงกชน

8.2.3 ฟงกชนในแฟมสวนหว string.h

ตารางท 8.3 แฟมสวนหว string.h

โปรแกรมตอประสานฟงกชน[string.h]

ความหมาย

int strcmp(const char *str1, const

char*str2)

ทาการเปรยบเทยบขอความ str1 และ str2 วาขอความใดมากอนกนถาเรยงตามรหสแอสก คาทไดจะมอยสามกรณดงน

นอยกวาศนยถา str1 มากอน str2

เทากบศนยถา str1 เหมอนกบ str2

มากกวาศนยถา str2 มากอน str1

char *strcpy(char *str1, const

char *str2)

ทาการสาเนาขอความในตวแปร str1 เกบไวในตวแปร str2

char *strcat(char *str1, const

char *str2)

นาเอาขอความทอยในตวแปร str1 ไปตอกบขอความทมอยในตวแปร str2

int strlen(const char *str) หาความยาวของขอความ str โดยไมนบ Null Character

ฟงกชนในแฟมสวนหว string.h เปนฟงกชนทใชกบขอมลสายอกขระ (String) สาหรบฟงกชนทจะกลาวถงตอไปน เปนฟงกชนทมการใชงานบอยๆ ไดแก

Page 295: การเขียนโปรแกรมคอมพิวเตอร ์portal5.udru.ac.th/ebook/pdf/upload/17P88t2O788B98583682.pdfรูปภาพบางส่วนให

บทท 8 ฟงกชน

278

ฟงกชน char strcpy(char str1[ ],char str2[ ])

เปนฟงกชนทใชในการสาเนาขอมลจากสายอกขระตวท 2 (str2) ไปยงสายอกขระตวท

1 (str1)

ฟงกชน char strcat(cha str1[ ],char str2[ ])

เปนฟงกชนทใชในการนาสายอกขระตวท 2 (str2) ไปเชอมตอสายอกขระตวท 1

(str1) แลวเกบผลลพธไวในสายอกขระตวท 1 (str1)

ฟงกชน int strlen(char str1[ ])

เปนฟงกชนทใชในการหาความยาวของสายอกขระ

ตวอยางท 8.5 โปรแกรมแสดงการใชฟงกชนในแฟมสวนหว string.h

1 #include<stdio.h> 2 #include<string.h> 3 main(){ 4 char str1[30]="Hi",str2[30]="Hello"; 5 strcpy(str1,str2); 6 printf("%s\n",str1); 7 strcpy(str1,"Good Morning"); 8 printf("%s\n",str1); 9 strcat(str1,str2); 10 printf("%s\n",str1); 11 printf("%d\n",strlen(str1)); 12 }

ผลลพธของโปรแกรม Hello Good Morning Good MorningHello 17

อธบายโปรแกรม

บรรทดท 4 ประกาศตวแปรของขอมลเปนขอมลแบบสายอกขระ (String)

บรรทดท 5-6 ทาการสาเนาขอความของตวแปร str2 ไปยง str1 และแสดงผลลพธ บรรทดท 7-8 ทาการสาเนาขอความ "Good Morning" ไปยง str1 และแสดง

ผลลพธ บรรทดท 9-10 ทาการเชอมตอขอความของตวแปร str2 ไปยง str1 และแสดง

ผลลพธ บรรทดท 11 แสดงผลลพธของความยาวสายอกขระของตวแปร str1

Page 296: การเขียนโปรแกรมคอมพิวเตอร ์portal5.udru.ac.th/ebook/pdf/upload/17P88t2O788B98583682.pdfรูปภาพบางส่วนให

บทท 8 ฟงกชน

279

8.2.4 ฟงกชนในแฟมสวนหว stdlib.h

ตารางท 8.4 แฟมสวนหว stdlib.h

โปรแกรมตอประสานฟงกชน

[stdlib.h]

ความหมาย

int atoi(const char *str) เปลยนสายอกขระ str ไปเปนจาเตม

long atol(const char *str) เปลยนสายอกขระ str ไปเปนจาเตมแบบยาว double atof(const char *str) เปลยนสายอกขระ str ไปเปนเลขทศนยม

void randomize(void) ทาหนาทเตรยมการสมคาตวเลข ตองเรยกใชฟงกชนน กอน rand( ) และ random( ) เสมอ

int rand(void) ทาการสมคาจานวนเตมระหวาง 0 ถง RAND_MAX

int random(int num) ทาการสมคาจานวนเตมตงแต 0 ถง num-1

void exit(int status) ทาการออกจากโปรแกรมพรอมทง คนคาสถานะ (Status) ใหกบผ ทเรยกใชโปรแกรมน (ระบบปฏบตการ) โดยถาสถานะมคาเปนศนยแสดงวาโปรแกรมทางานเสรจสนอยางสมบรณ

void abort(void) ทาการหยดการทางานของโปรแกรมโดยทนท พรอมทงแสดงคาวา “Abnormal termination program” ออกทางหนาจอ

สาหรบฟงกชนทจะกลาวถงตอไปน เปนฟงกชนทมการใชงานบอยๆ ไดแก ฟงกชน int atoi(char str[ ])

เปนฟงกชนทใชในการเปลยนสายอกขระทตองการใหเปนเลขจานวนเตม เชน

“123445” ของสายอกขระกจะกลายเปนเลข 123445 ของเลขจานวนเตม

ฟงกชน double atof(const char str[ ])

เปนฟงกชนทใชในการเปลยนสายอกขระทตองการใหเปนเลขทศนยม เชน “123.99”

ของสายอกขระกจะกลายเปนเลข 123.99 ของเลขจานวนเตม

ฟงกชน int random(int num)

เปนฟงกชนทใชในการสมคาตงแตเลข 0 ถง num -1 โดยจะตองมการเรยกใชฟงกชน

void randomize(void) กอนเสมอเพอเตรยมการสมคาตวเลข

Page 297: การเขียนโปรแกรมคอมพิวเตอร ์portal5.udru.ac.th/ebook/pdf/upload/17P88t2O788B98583682.pdfรูปภาพบางส่วนให

บทท 8 ฟงกชน

280

ตวอยางท 8.6 โปรแกรมแสดงการใชฟงกชนในแฟมสวนหว stdlib.h

1 #include <stdio.h> 2 #include <stdlib.h> 3 main() 4 { 5 int a = atoi("123.45"); 6 long int b = atol("99999.88"); 7 double c = atof("99999.88"); 8 printf("%i\n%li\n%lf",a,b,c); 9 }

ผลลพธของโปรแกรม 123 99999 99999.880000

อธบายโปรแกรม

บรรทดท 5 ทาการแปลงคาสายอกขระ "123.45" ใหเปนเลขจานวนเตม ซงเวลาแปลงจะไดเฉพาะคา 123

บรรทดท 6 ทาการแปลงคาสายอกขระ "99999.88" ใหเปนเลขจานวนเตม แบบยาว ซงเวลาแปลงจะไดเฉพาะคา 99999

บรรทดท 7 ทาการแปลงคาสายอกขระ "99999.88" ใหเปนเลขทศนยม ซงเวลาแปลงจะไดคาทเปนทศนยมดวย

บรรทดท 8 แสดงผลลพธของคาทงสาม

ตวอยางท 8.7 โปรแกรมแสดงการใชฟงกชนในแฟมสวนหว stdlib.h

1 #include <stdio.h> 2 #include <stdlib.h> 3 main() 4 { 5 int a,b; 6 randomize(); 7 a = rand(); 8 b = random(100); /* Random between 0 -99 */ 9 printf("%i \n%i",a,b); 10 }

ผลลพธของโปรแกรม 32350 30

Page 298: การเขียนโปรแกรมคอมพิวเตอร ์portal5.udru.ac.th/ebook/pdf/upload/17P88t2O788B98583682.pdfรูปภาพบางส่วนให

บทท 8 ฟงกชน

281

อธบายโปรแกรม

บรรทดท 6 เตรยมการสมคา บรรทดท 7 ทาการสมคาแลวคนคาเกบไวยงตวแปร a

บรรทดท 8 ทาการสมคาตงแต 0 ถง 99 แลวคนคาเกบไวยงตวแปร b

บรรทดท 9 แสดงผลลพธของคาทงสาม

8.3 ฟงกชนสรางเอง (User-Defined Functions)

ฟงกชนทสรางขนมาคอฟงกชนยอยททางานใดงานหนงโดยเฉพาะ ถกสรางอยภายนอกฟงกชนหลกและถกเรยกใชโดยฟงกชนตางๆ โครงสรางของฟงกชนสรางเองมรปแบบ

คอ

เชน int sum(int a, int b)

{

int c;

c = a + b;

return c;

}

หมายถง สรางฟงกชน sum() ขนมา โดยทาการรบคาขอมลชนดจานวนเตมผานทางตวแปร a และตวแปร b เขามาในฟงกชน หลงจากทางานเสรจเรยบรอยจะสงผลลพธเปนขอมลชนดจานวนเตมผานทางตวแปร c ออกไปจากฟงกชน

ชนดขอมลทตองการสงกลบ ชอฟงกชน(ชนดขอมลทรบเขามา ชอตวแปรทรบเขามา){ .....

}

Page 299: การเขียนโปรแกรมคอมพิวเตอร ์portal5.udru.ac.th/ebook/pdf/upload/17P88t2O788B98583682.pdfรูปภาพบางส่วนให

บทท 8 ฟงกชน

282

float sum(float a, float b){

float c;

c = a + b;

return c;

}

หมายถง สรางฟงกชน sum() ขนมา โดยทาการรบคาขอมลชนดจานวนจรงผานทางตวแปร a และตวแปร b เขามาในฟงกชน หลงจากทางานเสรจเรยบรอยจะสงผลลพธเปนขอมลชนดจานวนจรงผานทางตวแปร c ออกไปจากฟงกชน

การทางานของภาษาซมลกษณะทางานจากบนลงลาง ดงนนถาเขยนฟงกชนหลงฟงกชนหลก (main()) จะไมสามารถถกเรยกใชงานได ดงแสดงในรปท 8.2

Funtion B

Funtion A

main( )

Funtion C

Funtion C

Funtion B

Function A

main( )

(ก) (ข)

รปท 8.2 รปแบบตวอยางการเรยกใชงานฟงกชน

Page 300: การเขียนโปรแกรมคอมพิวเตอร ์portal5.udru.ac.th/ebook/pdf/upload/17P88t2O788B98583682.pdfรูปภาพบางส่วนให

บทท 8 ฟงกชน

283

จากการเรยกใชฟงกชนในรปท 8.2(ก) การเรยกใชฟงกชน C จะไมสามารถกระทาได

แตถาตองการเรยกใชฟงกชน C จะตองเขยนฟงกชนดงรป 8.2(ข) ดงนนการสรางฟงกชนขนมานน จะตองเขยนไวกอนฟงกชนทเรยกใชเสมอ เพราะหากไมเขยนไวกอนจะเกดขอผดพลาดขน เพราะฟงกชนทเรยกใชจะไมรจกฟงกชนทสรางขนมา แตหากตองการเขยนไวทหลงฟงกชนทเรยกใช สามารถทาไดโดยการประกาศตนแบบของฟงกชน (Function

Prototype) ไวทสวนหวของโปรแกรม มรปแบบคอ

ตวอยางท 8.8 โปรแกรมแสดงการเรยกใชฟงกชนทไมสามารถเรยกใชงานได

1 #include <stdio.h> 2 main() 3 { 4 int a=-3,b; 5 b = abs(a) - abs(-4) - 5; 6 b = abs(b); 7 printf("%i",b); 8 } 9 int abs(int a) 10 { 11 if(a<0) return(-a); 12 else return(a); 13 }

อธบายโปรแกรม

บรรทดท 9 –13 คอฟงกชนสรางเองซงเปนการสรางฟงกชนหลงการเรยกใช สงผลใหโปรแกรมไมสามารถประมวลผลได

ชนดขอมลทตองการสงกลบ ชอฟงกชน(ชนดขอมลทรบเขามา ชอตวแปรทรบเขามา);

Page 301: การเขียนโปรแกรมคอมพิวเตอร ์portal5.udru.ac.th/ebook/pdf/upload/17P88t2O788B98583682.pdfรูปภาพบางส่วนให

บทท 8 ฟงกชน

284

ตวอยางท 8.9 โปรแกรมแสดงการเรยกใชฟงกชนทสามารถเรยกใชงานได

1 #include <stdio.h> 2 int abs(int a);

3 main() 4 { 5 int a=-3,b; 6 b = abs(a) - abs(-4) - 5; 7 b = abs(b); 8 printf("%i",b); 9 } 10 int abs(int a) 11 { 12 if(a<0) return(-a); 13 else return(a); 14 }

อธบายโปรแกรม

บรรทดท 2 การประกาศตนแบบของฟงกชน (Function Prototype) ไวทสวนหวของโปรแกรม ทาใหสามารถสรางฟงกชนหลงจากฟงกชน main() ได

บรรทดท 10–14 คอฟงกชนสรางเองซงเปนการสรางฟงกชนหลงการเรยกใช แตสามารถเรยกใชไดเนองจากมการประกาศตนแบบของฟงกชนไวกอน

8.3.1 ฟงกชนทไมมการรบคาเขามาในฟงกชน และไมมการสงคากลบออกไปจากฟงกชน

ฟงกชนทไมมการรบคาเขามาในฟงกชนและไมมการสงคากลบออกไปจากฟงกชนเปนฟงกชนทสรางขนมาเพอเรยกใชโดยไมสงคาไปและสงคากลบเพยงแตเปนการเรยกใชในสวนของโปรแกรมยอยทตองการใหกระทา โดยมรปแบบฟงกชน คอ

การเรยกใชงานฟงกชน มรปแบบคาสง คอ

void ชอฟงกชน(void){

….

}

ชอฟงกชน()

Page 302: การเขียนโปรแกรมคอมพิวเตอร ์portal5.udru.ac.th/ebook/pdf/upload/17P88t2O788B98583682.pdfรูปภาพบางส่วนให

บทท 8 ฟงกชน

285

ตวอยางท 8.10 โปรแกรมแสดงการใชฟงกชนทไมมการรบคาเขามาในฟงกชน และไมมการสงคากลบออกไปจากฟงกชน

1 #include<stdio.h> 2 void show(void){ 3 char name[30]; 4 printf("Enter name :"); 5 scanf("%s",name); 6 printf("Hello !!! %s\n",name); 7 } 8 main(){ 9 printf("**************************\n"); 10 printf("*********Greeting*********\n"); 11 printf("**************************\n"); 12 show(); 13 }

ผลลพธของโปรแกรม *********************************************** ******************Greeting******************* *********************************************** Enter name :Witchakorn Hello !!! Witchakorn

อธบายโปรแกรม

บรรทดท 2 – 7 สรางฟงกชน show()

บรรทดท 12 ฟงกชนหลก main() เรยกใชงานฟงกชน show() ซงทาใหมการทางานในบรรทดท 2 – 7 โดยจะทาการรบชอและแสดงผลการทกทาย จากนนกจะกลบไปสการทางานของฟงกชนหลกในบรรทดตอไป

Page 303: การเขียนโปรแกรมคอมพิวเตอร ์portal5.udru.ac.th/ebook/pdf/upload/17P88t2O788B98583682.pdfรูปภาพบางส่วนให

บทท 8 ฟงกชน

286

ตวอยางท 8.11 โปรแกรมแสดงการใชฟงกชนทไมมการรบคาเขามาในฟงกชน และไมมการสงคากลบออกไปจากฟงกชน

1 #include<stdio.h> 2 void sum(void){ 3 int a,b,c; 4 printf("Enter a :"); 5 scanf("%d",&a); 6 printf("Enter b :"); 7 scanf("%d",&b); 8 c = a + b; 9 printf("%d + %d = %d\n",a,b,c); 10 } 11 main(){ 12 printf("**************************\n"); 13 printf("*********Sum*********\n"); 14 printf("**************************\n"); 15 sum(); 16 sum(); 17 }

ผลลพธของโปรแกรม *********************************************** ******************Sum******************* *********************************************** Enter a :111 Enter b :123 111 + 123 = 234 Enter a :222 Enter b :234 222+234 = 456

อธบายโปรแกรม

บรรทดท 2 – 10 สรางฟงกชน sum()

บรรทดท 15 ฟงกชนหลก main() เรยกใชงานฟงกชน sum() ซงทาใหมการทางานในบรรทดท 2 – 10 โดยจะทาการรบคาตวเลขจานวนเตม 2 คา แลวหาผลรวม และแสดงผลรวมทได จากนนกจะกลบไปสการทางานของฟงกชนหลกในบรรทดตอไป

บรรทดท 16 ฟงกชนหลก main() เรยกใชงานฟงกชน sum() ซงทาใหมการทางานในบรรทดท 2 – 10 โดยจะทาการรบคาตวเลขจานวนเตม 2 คา แลวหาผลรวม และแสดงผลรวมทได จากนนกจะกลบไปสการทางานของฟงกชนหลกในบรรทดตอไป

Page 304: การเขียนโปรแกรมคอมพิวเตอร ์portal5.udru.ac.th/ebook/pdf/upload/17P88t2O788B98583682.pdfรูปภาพบางส่วนให

บทท 8 ฟงกชน

287

ตวอยางท 8.12 โปรแกรมแสดงการประกาศตนแบบของฟงกชน เมอมการเขยนฟงกชนไวหลงฟงกชนทเรยกใช

1 #include<stdio.h> 2 void sum(void);

3 main(){ 4 printf("**************************\n"); 5 printf("*********Sum*********\n"); 6 printf("**************************\n"); 7 sum(); 8 sum(); 9 } 10 void sum(void){ 11 int a,b,c; 12 printf("Enter a :"); 13 scanf("%d",&a); 14 printf("Enter b :"); 15 scanf("%d",&b); 16 c = a + b; 17 printf("%d + %d = %d\n",a,b,c); 18 }

ผลลพธของโปรแกรม *********************************************** ******************Sum******************* *********************************************** Enter a :111 Enter b :123 111 + 123 = 234 Enter a :222 Enter b :234 222+234 = 456

8.3.2 ฟงกชนทมการรบคาเขามาในฟงกชน แตไมมการสงคากลบออกไปจากฟงกชน

ฟงกชนทมการรบคาเขามาในฟงกชน แตไมมการสงคากลบออกไปจากฟงกชน เปนฟงกชนทสรางขนมาเพอเรยกใชโดยมการสงคาไปเพอทาการประมวลผลซงผลลพธทไดจากการประมวลผลจะไมสงคากลบ มรปแบบฟงกชนคอ

void ชอฟงกชน(ชนดขอมลทรบเขามา ชอตวแปรทรบเขามา){ ….

}

Page 305: การเขียนโปรแกรมคอมพิวเตอร ์portal5.udru.ac.th/ebook/pdf/upload/17P88t2O788B98583682.pdfรูปภาพบางส่วนให

บทท 8 ฟงกชน

288

การเรยกใชงานฟงกชน มรปแบบคาสง คอ

ตวอยางท 8.13 โปรแกรมแสดงการใชฟงกชนทมการรบคาเขามาในฟงกชน แตไมมการสงคากลบออกไปจากฟงกชน

1 #include<stdio.h> 2 void sum(int a,int b){ 3 int c; 4 c = a + b; 5 printf("%d + %d = %d\n",a,b,c); 6 } 7 main(){ 8 int num1,num2; 9 printf("**************************\n"); 10 printf("*********Sum*********\n"); 11 printf("**************************\n"); 12 printf("Enter num1 :"); 13 scanf("%d",&num1); 14 printf("Enter num2 :"); 15 scanf("%d",&num2); 16 sum(num1,num2); 17 printf("Enter num1 :"); 18 scanf("%d",&num1); 19 printf("Enter num2 :"); 20 scanf("%d",&num2); 21 sum(num1,num2); 22 }

ผลลพธของโปรแกรม *********************************************** ******************Sum******************* *********************************************** Enter a :111 Enter b :123 111 + 123 = 234 Enter a :222 Enter b :234 222 + 234 = 456

อธบายโปรแกรม

บรรทดท 2 – 6 สรางฟงกชน sum()

ชอฟงกชน(พารามเตอรทตองการสงไปฟงกชน)

Page 306: การเขียนโปรแกรมคอมพิวเตอร ์portal5.udru.ac.th/ebook/pdf/upload/17P88t2O788B98583682.pdfรูปภาพบางส่วนให

บทท 8 ฟงกชน

289

บรรทดท 16 ฟงกชนหลก main() เรยกใชงานฟงกชน sum() ซงทาใหมการทางานในบรรทดท 2 – 6 โดยจะสงคาตวเลขจานวนเตม 2 คา เพอไปหาผลรวมในฟงกชน sum() และแสดงผลรวมทได จากนนกจะกลบไปสการทางานของฟงกชนหลกในบรรทดตอไป

บรรทดท 21 ฟงกชนหลก main() เรยกใชงานฟงกชน sum() ซงทาใหมการทางานในบรรทดท 2 – 6 โดยจะสงคาตวเลขจานวนเตม 2 คา เพอไปหาผลรวมในฟงกชน sum() และแสดงผลรวมทได จากนนกจะกลบไปสการทางานของฟงกชนหลกในบรรทดตอไป

8.3.3 ฟงกชนทมการรบคาเขามาในฟงกชน และมการสงคากลบออกไปจากฟงกชน

ฟงกชนทมการรบคาเขามาในฟงกชนและมการสงคากลบออกไปจากฟงกชนเปนฟงกชนทสรางขนมาเพอเรยกใชโดยมการสงคาไปเพอทาการประมวลผลซงผลลพธทไดจากการประมวลผลกจะสงคากลบยงฟงกชนทมการเรยกใช มรปแบบฟงกชนคอ

การเรยกใชงานฟงกชน มรปแบบคาสง คอ

ตวอยางท 8.14 โปรแกรมแสดงการใชฟงกชนทมการรบคาเขามาในฟงกชน และมการสงคากลบออกไปจากฟงกชน

1 #include<stdio.h> 2 int sum(int a,int b){ 3 printf("%d + %d = %d\n",a,b,a+b); 4 return a + b; 5 } 6 main(){ 7 int num1,num2,result1,result2,total; 8 printf("**************************\n"); 9 printf("*********Sum*********\n");

ชนดขอมลทตองการสงกลบ ชอฟงกชน(ชนดขอมลทรบเขามา ชอตวแปรทรบเขามา){ ….

return คาทตองการสงกลบออกไปจากฟงกชน

}

ตวแปรรบคาทฟงกชนสงกลบ = ชอฟงกชน(พารามเตอรทตองการสงไปฟงกชน)

Page 307: การเขียนโปรแกรมคอมพิวเตอร ์portal5.udru.ac.th/ebook/pdf/upload/17P88t2O788B98583682.pdfรูปภาพบางส่วนให

บทท 8 ฟงกชน

290

10 printf("**************************\n"); 11 printf("Enter num1 :"); 12 scanf("%d",&num1); 13 printf("Enter num2 :"); 14 scanf("%d",&num2); 15 result1 = sum(num1,num2); 16 printf("Enter num1 :"); 17 scanf("%d",&num1); 18 printf("Enter num2 :"); 19 scanf("%d",&num2); 20 result2 = sum(num1,num2); 21 printf("**************************\n"); 22 total= sum(result1,result2); 23 }

ผลลพธของโปรแกรม *********************************************** ******************Sum******************* *********************************************** Enter num1 :111 Enter num2 :123 111 + 123 = 234 Enter num1 :222 Enter num2 :234 222 + 234 = 456 *********************************************** 234 + 456 = 690

อธบายโปรแกรม

บรรทดท 2 – 5 สรางฟงกชน sum()

บรรทดท 15 ฟงกชนหลก main() เรยกใชงานฟงกชน sum() ซงทาใหมการทางานในบรรทดท 2 – 5 โดยจะสงคาตวเลขจานวนเตม 2 คา เพอไปหาผลรวมในฟงกชน sum() และสงผลรวมทไดกลบออกมาทฟงกชนหลก จากนนกจะกลบไปสการทางานของฟงกชนหลก

บรรทดท 20 ฟงกชนหลก main() เรยกใชงานฟงกชน sum() ซงทาใหมการทางานในบรรทดท 2 – 5 โดยจะสงคาตวเลขจานวนเตม 2 คา เพอไปหาผลรวมในฟงกชน sum() และสงผลรวมทไดกลบออกมาทฟงกชนหลก จากนนกจะกลบไปสการทางานของฟงกชนหลก

บรรทดท 22 ฟงกชนหลก main() เรยกใชงานฟงกชน sum() ซงทาใหมการทางานในบรรทดท 2 – 5 โดยจะสงคาตวเลขจานวนเตม 2 คา เพอไปหาผลรวมในฟงกชน sum() และสงผลรวมทไดกลบออกมาทฟงกชนหลก จากนนกจะกลบไปสการทางานของฟงกชนหลก

Page 308: การเขียนโปรแกรมคอมพิวเตอร ์portal5.udru.ac.th/ebook/pdf/upload/17P88t2O788B98583682.pdfรูปภาพบางส่วนให

บทท 8 ฟงกชน

291

ตวอยางท 8.15 โปรแกรมแสดงการใชฟงกชนทมการรบคาเขามาในฟงกชน และมการสงคากลบออกไปจากฟงกชน โดยเปนฟงกชนสาหรบหาคาสมบรณของเลขจานวนเตม

1 #include <stdio.h> 2 int abs(int a) 3 { 4 if(a<0) 5 return(-a); 6 else 7 return(a); 8 } 9 void main(void) 10 { 11 int a,b; 12 printf("Input number = "); 13 scanf("%i",&a); 14 b = abs(a); 15 printf("Output Absolute = %i\n",b); 16 }

ผลลพธของโปรแกรม

อธบายโปรแกรม

บรรทดท 2 – 8 สรางฟงกชน abs() เพอใชในการหาคาสมบรณของเลขทรบเขามา โดยทาการตรวจสอบเลขทรบเขามา ถาเปนเลขจานวนเตมบวกใหคนคาจานวนเดมกลบไป แตถาหากเปนเลขจานวนเตมลบใหคนคาจานวนเตมลบกลบไป

บรรทดท 14 ทาการเรยกใชฟงกชน โดยมการสงคา a ไป และ ใหรบคากลบโดยใหเกบไวทตวแปร b

ตวอยางท 8.16 โปรแกรมแสดงการใชฟงกชนทมการรบคาเขามาในฟงกชน และมการสงคากลบออกไปจากฟงกชน โดยเปนฟงกชนแปลงคาเงนโดยมการรบคาเขามา 2 ตวคอ ตวแรกเปนจานวนเงนบาท ตวทสองเปนจานวนเตมบอกสกลเงนเปาหมายทตองการแปลงโดยท

1=US, 2=Euro, 3=Yen

1 #include <stdio.h> 2 double convert(double bath,int dest) 3 { 4 switch(dest) 5 { 6 case 1 : //US

Page 309: การเขียนโปรแกรมคอมพิวเตอร ์portal5.udru.ac.th/ebook/pdf/upload/17P88t2O788B98583682.pdfรูปภาพบางส่วนให

บทท 8 ฟงกชน

292

7 return(bath/42.5); 8 break; 9 case 2 : //EURO 10 return(bath/43.45); 11 break; 12 case 3 : //YEN 13 return(bath*0.123); 14 break; 15 } 16 } 17 18 void main(void) 19 { 20 double a = convert(100,1); 21 printf("100 bath = %f us\n",a); 22 printf("100 bath = %f euro\n",convert(100.0,2)); 23 printf("100 bath = %f yen\n",convert(100.0,3)); 24 }

ผลลพธของโปรแกรม 100 bath = 2.352941 us 100 bath = 2.301496 euro 100 bath = 12.300000 yen

อธบายโปรแกรม

บรรทดท 2–16 สรางฟงกชน convert() เพอแปลงสกลเงน โดยใหมการปอนคาตวเลอกทตองการจะแปลง

บรรทดท 20 ประกาศตวแปรและเรยกใชฟงกชน convert เพอทาการแปลงสกลเงน และมการคนคาทไดจากฟงกชนยอยเกบไวทตวแปร a

บรรทดท 21-23 แสดงคาผลลพธออกทางหนาจอภาพ

8.3.4 ฟงกชนทไมมการรบคาเขามาในฟงกชน แตมการสงคากลบออกไปจากฟงกชน

ฟงกชนทไมมการรบคาเขามาในฟงกชนแตมการสงคากลบออกไปจากฟงกชนเปนฟงกชนทสรางขนมาเพอเรยกใชโดยไมมการสงคาไปในสวนของฟงกชนยอย แตผลลพธทไดจากฟงกชนยอยจะสงคากลบยงฟงกชนทมการเรยกใช มรปแบบฟงกชนคอ

ชนดขอมลทตองการสงกลบ ชอฟงกชน(void){

….

return คาทตองการสงกลบออกไปจากฟงกชน;

}

Page 310: การเขียนโปรแกรมคอมพิวเตอร ์portal5.udru.ac.th/ebook/pdf/upload/17P88t2O788B98583682.pdfรูปภาพบางส่วนให

บทท 8 ฟงกชน

293

การเรยกใชงานฟงกชน มรปแบบคาสง คอ

ตวอยางท 8.17 โปรแกรมแสดงการใชฟงกชนทไมมการรบคาเขามาในฟงกชน แตมการสงคากลบออกไปจากฟงกชน

1 #include<stdio.h> 2 int sum(void){ 3 int a,b,c; 4 printf("Enter a :"); 5 scanf("%d",&a); 6 printf("Enter b :"); 7 scanf("%d",&b); 8 c = a + b; 9 printf("%d + %d = %d\n",a,b,c); 10 return c; 11 } 12 void main(void){ 13 int result1,result2,result3; 14 printf("**************************\n"); 15 printf("*********Sum*********\n"); 16 printf("**************************\n"); 17 result1 = sum(); 18 result2 = sum(); 19 result3 = result1*result2; 20 printf("**************************\n"); 21 printf("%d * %d = %d\n",result1,result2,result3); 22 }

ผลลพธของโปรแกรม *********************************************** ******************Sum******************* *********************************************** Enter a :111 Enter b :123 111 + 123 = 234 Enter a :222 Enter b :234 222 + 234 = 456 *********************************************** 234 * 456 = 106704

ตวแปรรบคาทฟงกชนสงกลบ = ชอฟงกชน()

Page 311: การเขียนโปรแกรมคอมพิวเตอร ์portal5.udru.ac.th/ebook/pdf/upload/17P88t2O788B98583682.pdfรูปภาพบางส่วนให

บทท 8 ฟงกชน

294

อธบายโปรแกรม

บรรทดท 2 – 11 สรางฟงกชน sum()

บรรทดท 17 ฟงกชนหลก main() เรยกใชงานฟงกชน sum() ซงทาใหมการทางานในบรรทดท 2 – 11 โดยจะทาการรบคาตวเลขจานวนเตม 2 คา แลวหาผลรวม และสงผลรวมทไดกลบออกมาทฟงกชนหลก จากนนกจะกลบไปสการทางานของฟงกชนหลก

บรรทดท 18 ฟงกชนหลก main() เรยกใชงานฟงกชน sum() ซงทาใหมการทางานในบรรทดท 2 – 11 โดยจะทาการรบคาตวเลขจานวนเตม 2 คา แลวหาผลรวม และสงผลรวมทไดกลบออกมาทฟงกชนหลก จากนนกจะกลบไปสการทางานของฟงกชนหลก

8.3.5 การใชแถวลาดบในฟงกชน

การใชแถวลาดบในฟงกชนเปนกระบวนการใชงานตวแปรชด เนองจากการสงคาในฟงกชนจากทไดกลาวในหวขอขางตนสามารถสงขอมลไดทละคา แตถาหากมจานวนขอมลจานวนมากกจะทาใหการเขยนโปรแกรมไมสะดวก ซงในภาษาซเราสามารถใชแถวลาดบในการใชงานฟงกชนได โดยมรปแบบฟงกชน คอ

การเรยกใชงานฟงกชน มรปแบบคาสง คอ

ชนดขอมลทตองการสงกลบ ชอฟงกชน(ชนดขอมลทรบเขามา ชอตวแปรแถวลาดบ[ขนาดของแถวลาดบ]){

….

}

ตวแปรรบคาทฟงกชนสงกลบ = ชอฟงกชน(ชอตวแปรแถวลาดบ)

Page 312: การเขียนโปรแกรมคอมพิวเตอร ์portal5.udru.ac.th/ebook/pdf/upload/17P88t2O788B98583682.pdfรูปภาพบางส่วนให

บทท 8 ฟงกชน

295

ตวอยางท 8.18 โปรแกรมแสดงการสงคาแถวลาดบเขาไปในฟงกชน

1 #include<stdio.h> 2 int i; 3 int FindMax(int a[]){ 4 int max = a[0]; 5 for(i=1;i<5;i++){ 6 if(a[i]>max) 7 max = a[i]; 8 } 9 return max; 10 } 11 int FindMin(int a[]){ 12 int min = a[0]; 13 for(i=1;i<5;i++){ 14 if(a[i]<min) 15 min = a[i]; 16 } 17 return min; 18 } 19 void show(int a[]){ 20 for(i=0;i<5;i++){ 21 printf("%d\t ",a[i]); 22 } 23 } 24 void main(void){ 25 int maximum,minimum; 26 int num[5]={14,25,3,12,15}; 27 maximum = FindMax(num); 28 minimum = FindMin(num); 29 show(num); 30 printf("\nMax = %d\t Min = %d\n",maximum,minimum); 31 }

ผลลพธของโปรแกรม 14 25 3 12 15 Max = 25 Min = 3

อธบายโปรแกรม

บรรทดท 3–10 สรางฟงกชน FindMax() เพอหาคาสงสดและมการคนคา บรรทดท 11–18 สรางฟงกชน FindMin()เพอหาคาตาสดและมการคนคา บรรทดท 19– 23 สรางฟงกชน show() เพอแสดงคาของแถวลาดบ

บรรทดท 27 เรยกใชฟงกชน FindMax() แลวคนคาไวยงตวแปร maximum

บรรทดท 28 เรยกใชฟงกชน FindMin()แลวคนคาไวยงตวแปร minimum

บรรทดท 29 เรยกใชฟงกชน show()

Page 313: การเขียนโปรแกรมคอมพิวเตอร ์portal5.udru.ac.th/ebook/pdf/upload/17P88t2O788B98583682.pdfรูปภาพบางส่วนให

บทท 8 ฟงกชน

296

ตวอยางท 8.19 โปรแกรมแสดงการสงคาแถวลาดบเขาไปในฟงกชน โดยการสงคาแถวลาดบ

1 มตไปยงฟงกชนเพอหาคาเลขยกกาลงสองและแสดงผล 1 #include <stdio.h> 2 void mul(int a[5]) 3 { 4 for(int i=0;i<5;i++) a[i] *= a[i]; 5 printf("\ntest() : "); 6 for(i=0;i<5;i++) printf("%i ",a[i]); 7 printf("\n"); 8 } 9 void main(void) 10 { 11 int p[5] = {1,2,3,4,5}; 12 printf("Before : "); 13 for(int i=0;i<5;i++) printf("%i ",p[i]); 14 mul(p); 15 printf("After : "); 16 for(i=0;i<5;i++) printf("%i ",p[i]); 17 }

ผลลพธของโปรแกรม Before : 1 2 3 4 5 test() : 1 4 9 16 25 After : 1 4 9 16 25

อธบายโปรแกรม

บรรทดท 2–9 สรางฟงกชน mul() เพอหาเลขยกกาลงสองและมการคนคา บรรทดท 14 เรยกใชฟงกชน mul()

บรรทดท 15-16 แสดงผลลพธ

ตวอยางท 8.20 โปรแกรมแสดงการสงคาแถวลาดบเขาไปในฟงกชน โดยการสงคาแถวลาดบ

2 มตไปยงฟงกชนเพอแสดงผลการสลบคาตาแหนงแถวและหลก (Transpose)

1 #include <stdio.h> 2 void P_Array(int a[3][5]) 3 { 4 for(int i=0;i<3;i++) 5 { 6 for(int j=0;j<5;j++) printf("%i ",a[i][j]); 7 printf("\n"); 8 } 9 } 10 void P_Transpose(int a[3][5]) 11 { 12 for(int j=0;j<5;j++)

Page 314: การเขียนโปรแกรมคอมพิวเตอร ์portal5.udru.ac.th/ebook/pdf/upload/17P88t2O788B98583682.pdfรูปภาพบางส่วนให

บทท 8 ฟงกชน

297

13 { 14 for(int i=0;i<3;i++) printf("%i ",a[i][j]); 15 printf("\n"); 16 } 17 } 18 void main(void) 19 { 20 int p[3][5] = { { 1, 2, 3, 4, 5}, 21 { 10, 11, 12, 12, 14}, 22 {20, 21, 22, 23, 24}}; 23 printf("Data\n"); P_Array(p); 24 printf("Transpose\n"); P_Transpose(p); 25 }

ผลลพธของโปรแกรม Data 1 2 3 4 5 10 11 12 12 14 20 21 22 23 24 Transpose 1 10 20 2 11 21 3 12 22 4 12 23 5 14 24

อธบายโปรแกรม

บรรทดท 2–9 สรางฟงกชน P_Array เพอแสดงผลของแถวลาดบทสงคาเขามา บรรทดท 10–17 สรางฟงกชน P_Transpose เพอแสดงผลของแถวลาดบทมการ

สลบคาหลกสลบคาแถว (Transpose)

บรรทดท 20 ประกาศตวแปรใหเปนแถวลาดบ 2 มต

บรรทดท 23 เรยกใชฟงกชน P_Array พรอมสงคาตวแปรของแถวลาดบ 2 มต

บรรทดท 24 เรยกใชฟงกชน P_Transpose พรอมสงคาตวแปรของแถวลาดบ 2

มต

Page 315: การเขียนโปรแกรมคอมพิวเตอร ์portal5.udru.ac.th/ebook/pdf/upload/17P88t2O788B98583682.pdfรูปภาพบางส่วนให

บทท 8 ฟงกชน

298

8.4 การประกาศตวแปรของเรองฟงกชน (Variable Declaration of

Functions)

การประกาศตวแปรของฟงกชนเปนสวนทแจงใหตวแปลภาษาทราบวาเราตองการใชตวแปรใดในการแทนขอมล ขอมลทใชเปนขอมลชนดใด (Data Type) ซงการประกาศตวแปรของเรองฟงกชนกจะเปนการประกาศตวแปรเชนเดยวกบการประกาศตวแปรในบทกอนหนาน โดยเขยนอยในรปแบบดงน

ชนดขอมล (data_type) ชอตวแปร (variable_name);

ดงเชน

int number;

float image;

int a,b,c,d;

ในภาษาซไดมการแบงตวแปรทใชในฟงกชนออกเปนชนดตางๆ ดงน

ตวแปรสวนกลาง (Global Variable)

ตวแปรเฉพาะท (Local Variable)

ตวแปรสถต (Static Variable)

ตวแปรเรจสเตอร (Register Variable)

8.4.1 ตวแปรสวนกลาง (Global Variable)

ตวแปรสวนกลางหรอตวแปรภายนอก (External Variable) ซงเปนการประกาศตวแปรขนมาแลวสามารถใชทกสวนของโปรแกรม สามารถใชไดทงฟงกชนหลก และฟงกชนอนๆ ของโปรแกรม โดยการประกาศตวแปรสวนกลางจะประกาศไวภายนอกของฟงกชน ดงตวอยางโปรแกรม

Page 316: การเขียนโปรแกรมคอมพิวเตอร ์portal5.udru.ac.th/ebook/pdf/upload/17P88t2O788B98583682.pdfรูปภาพบางส่วนให

บทท 8 ฟงกชน

299

ตวอยางท 8.21 โปรแกรมแสดงการใชงานของตวแปรสวนกลาง

1 #include <stdio.h> 2 int a; //Global Variable

3 void test2(void) 4 { 5 a = 2; 6 printf("In test2() a = %i\n",a); 7 } 8 void test1(void) 9 { 10 a = 1; 11 printf("In test1() a = %i\n",a); 12 test2(); 13 } 14 void main(void) 15 { 16 a = 0; 17 printf("Before () a = %i\n",a); 18 test1(); 19 printf("After () a = %i\n",a); 20 }

ผลลพธของโปรแกรม Before () a = 0 In test1() a = 1 In test2() a = 2 After () a = 2

อธบายโปรแกรม

บรรทดท 2 ประกาศตวแปร a เปนแบบตวแปรสวนกลาง บรรทดท 3–7 สรางฟงกชน test2 โดยกาหนดคา a = 2 และแสดงผลของคาตว

แปร a

บรรทดท 8–13 สรางฟงกชน test1 โดยกาหนดคา a = 1 แสดงผลของคาตวแปร a

และเรยกใชฟงกชน test2

บรรทดท 14-20 ฟงกชนหลกของโปรแกรม โดยในฟงกชนประกอบดวยการกาหนดคาตวแปร a = 0 แสดงผลลพธของตวแปร a และมการเรยกใชงานฟงกชน test1

Page 317: การเขียนโปรแกรมคอมพิวเตอร ์portal5.udru.ac.th/ebook/pdf/upload/17P88t2O788B98583682.pdfรูปภาพบางส่วนให

บทท 8 ฟงกชน

300

8.4.2 ตวแปรเฉพาะท (Local Variable)

ตวแปรเฉพาะทหรอตวแปรอตโนมต (Automatic Variable) ซงเปนการประกาศตวแปรขนมาใชในเฉพาะสวนของโปรแกรม เฉพาะเจาะจงของโปรแกรม โดยคาของตวแปรจะถกทาลายเมอออกจากฟงกชน และจะเรมตนคาใหมทกครงเมอมการเรยกใชฟงกชน

ตวอยางท 8.22 โปรแกรมแสดงการใชงานของตวแปรเฉพาะท

1 #include <stdio.h> 2 void test2(void) 3 { 4 int a = 2; 5 printf("In test2() a = %i\n",a); 6 } 7 void test1(int a) 8 { 9 printf("In test1() a = %i\n",a); 10 test2(); 11 } 12 void main(void) 13 { 14 int a = 0; 15 printf("Before () a = %i\n",a); 16 test1(1); 17 printf("After () a = %i\n",a); 18 }

ผลลพธของโปรแกรม Before () a = 0 In test1() a = 1 In test2() a = 2 After () a = 0

อธบายโปรแกรม

บรรทดท 2–6 สรางฟงกชน test2 โดยประกาศตวแปรเฉพาะทพรอมทงกาหนดคา a = 2 และแสดงผลของคาตวแปร a

บรรทดท 7–11 สรางฟงกชน test1 โดยแสดงผลของคาตวแปร a ทรบเขามา พรอมทงเรยกใชฟงกชน test2

บรรทดท 12-18 ฟงกชนหลกของโปรแกรม โดยประกาศตวแปรเฉพาะทพรอมทงกาหนดคา a = 0 แสดงผลลพธของตวแปร a และมการเรยกใชงานฟงกชน test1

Page 318: การเขียนโปรแกรมคอมพิวเตอร ์portal5.udru.ac.th/ebook/pdf/upload/17P88t2O788B98583682.pdfรูปภาพบางส่วนให

บทท 8 ฟงกชน

301

8.4.3 ตวแปรสถต (Static Variable)

คอการกาหนดใหตวแปรแบบเฉพาะทเกบคาไวจนกวาจะจบการทางานของโปรแกรม

คาของตวแปรจงจะถกทาลาย ดงนนเมอมการเรยกใชงานฟงกชนใดๆ อกครงหลงจากออกจากการใชงานฟงกชนนนๆ แลว คาของตวแปรจะยงคงอย สวนตวแปรสวนกลางจะถกกาหนดใหเปนตวแปรแบบสถตโดยอตโนมต เชน

static int x = 5;

หมายถงจะมการทางานเชนเดยวกบการประกาศ int x = 5; เพยงแตเมอสนสดการทางานของฟงกชนแลวคาตวแปรเหลานยงคงอย

ตวอยางท 8.23 โปรแกรมแสดงการทางานของตวแปรแบบสถต

1 #include <stdio.h> 2 void write_static(void) 3 { 4 int a = 4; 5 static int b = 4; 6 a = a + 1; 7 b = b + a; 8 printf("a = %d b = %d\n" ,a ,b); 9 } 10 void main(void) 11 { 12 int i; 13 for(i = 1;i<=3;i++) 14 { 15 write_static(); 16 } 17 }

ผลลพธของโปรแกรม a = 5 b = 9 a = 5 b = 14

a = 5 b = 19

อธบายโปรแกรม

บรรทดท 2–9 สรางฟงกชน write_static

Page 319: การเขียนโปรแกรมคอมพิวเตอร ์portal5.udru.ac.th/ebook/pdf/upload/17P88t2O788B98583682.pdfรูปภาพบางส่วนให

บทท 8 ฟงกชน

302

บรรทดท 5 : ประกาศตวแปร b เปนแบบสถต (Static Variable) หมายความวา คาของตวแปรจะถกเกบไว แมวาจะออกจากฟงกชน write_static()

ดงนนเมอมการเรยกใชฟงกชน write_static() จะมการนาคาของตวแปรทถกเกบไวมาใชงานตอ ดงนนจะเหนวาคาของตวแปร b จะเพมขนทละ 5 จากคาสง b = b+a;

บรรทดท 10-17 ฟงกชนหลกของโปรแกรม โดยทาการวนซาจานวน 3 ครง ในแตละครงมการเรยกใชงานฟงกชน write_static()

8.4.4 ตวแปรเรจสเตอร (Register Variable)

ตวแปรเรจสเตอรคอการกาหนดใหตวแปรถกเกบในเรจสเตอรของคอมพวเตอร แทนทจะเกบไวในหนวยความจาหลกเหมอนตวแปรโดยทวไป มขอดคอสามารถเขาถงตวแปรไดอยางรวดเรว แตมขอเสยคอ ขนาดของเรจสเตอรทจากดทาใหเกบขอมลไดนอย การประกาศขอมลชนดนดงเชน

register int x = 5;

หมายถงจะมการทางานเชนเดยวกบการประกาศ int x = 5; เพยงแตมการเกบคาของตวแปรไวในรจสเตอรแทนทจะเกบไวในหนวยความจาหลกนนเอง ในการใชตวแปรเรจสเตอรมกนยมใชกบตวแปรทมการเปลยนแปลงบอยครง ดงนนในการประกาศตวแปรเรจสเตอรควรจะดการใชงานของตวแปรวาเหมาะสมหรอไม ตวแปรเรจสเตอรเปนหนวยความจาทมขนาดเลกจงสามารถใชไดเฉพาะตวแปรบางชนด

ตวอยางท 8.24 โปรแกรมแสดงการทางานของตวแปรแบบเรจสเตอร

1 #include <stdio.h> 2 void write_static(void) 3 { 4 int a = 4; 5 register int b = 4; 6 a = a + 1; 7 b = b + a; 8 printf("a = %d b = %d\n" ,a ,b); 9 } 10 void main(void) 11 { 12 int i; 13 for(i = 1;i<=3;i++)

Page 320: การเขียนโปรแกรมคอมพิวเตอร ์portal5.udru.ac.th/ebook/pdf/upload/17P88t2O788B98583682.pdfรูปภาพบางส่วนให

บทท 8 ฟงกชน

303

14 { 15 write_static(); 16 } 17 }

ผลลพธของโปรแกรม a = 5 b = 9 a = 5 b = 9

a = 5 b = 9

อธบายโปรแกรม

บรรทดท 2–9 สรางฟงกชน write_static

บรรทดท 5 : ประกาศตวแปร b เปนแบบเรจสเตอร (Register Variable)

บรรทดท 10-17 ฟงกชนหลกของโปรแกรม โดยทาการวนซาจานวน 3 ครง ในแตละครงมการเรยกใชงานฟงกชน write_static()

Page 321: การเขียนโปรแกรมคอมพิวเตอร ์portal5.udru.ac.th/ebook/pdf/upload/17P88t2O788B98583682.pdfรูปภาพบางส่วนให

บทท 8 ฟงกชน

304

บทสรป

ในบทนไดกลาวถงแนวคดของฟงกชน ฟงกชนมาตรฐาน ฟงกชนทสรางขนมา และการประกาศตวแปรของเรองฟงกชน ฟงกชนเปรยบเสมอนกลมของคาสงโปรแกรมกลมหนงททาหนาทบางอยางตามทหนาทของฟงกชนนนตองการ ซงในมมมองของผ เรยกใชฟงกชนนนฟงกชนเปรยบเสมอนกลองดา ผ เรยกใชไมจาเปนตองทราบวาฟงกชนทจะเรยกใชนนมขนตอนการทางานอยางไร สงทผ เรยกใชสนใจกคอผลลพธของการเรยกใชฟงกชนเทานน ในมมมองของผสรางฟงกชน ผสรางจะตองแจงใหผ ใชทราบถงรปแบบการใชงานตางๆ ของฟงกชน และในการสรางฟงกชนนนกจะตองทาการเขยนโปรแกรมใหตรงตามขอกาหนดของฟงกชนนน ซงถาไมกระทาตามขอกาหนดจะสงผลใหเกดความผดพลาดได ฟงกชนมาตรฐาน คอฟงกชนทภาษาซไดจดเตรยมไวเพอใหสามารถเรยกใชงานฟงกชนพนฐานทจาเปนไดโดยงาย โดยจะเกบอยในแฟมสวนหว (Header File) ฟงกชนมาตรฐานจะอยในรปแบบของรหสจดหมาย (Object Code) ซงภาษาซแฟมสวนหวคอแฟมทมนามสกล *.h ตางๆ เมอตองการใชฟงกชนใด จะตองรวาฟงกชนนนอยในไฟลสวนหวใด เพอระบคาสง #include<header file.h> ไวทสวนหวของโปรแกรม จากนนจงสามารถเรยกใชฟงกชนโดยตองเขยนชอฟงกชนตามดวยวงเลบซงภายในเปนขอมลทฟงกชนตองการใช โดยฟงกชนสรางเอง คอฟงกชนยอยททางานใดงานหนงโดยเฉพาะ ถกสรางอยภายนอกฟงกชนหลกและถกเรยกใชโดยฟงกชนตางๆ แบงออกเปน 5 ชนด ไดแก ฟงกชนทไมมการรบคาเขามาในฟงกชน และไมมการสงคากลบออกไปจากฟงกชน ฟงกชนทมการรบคาเขามาในฟงกชน แตไมมการสงคากลบออกไปจากฟงกชน

ฟงกชนทมการรบคาเขามาในฟงกชน และมการสงคากลบออกไปจากฟงกชน ฟงกชนทไมมการรบคาเขามาในฟงกชน แตมการสงคากลบออกไปจากฟงกชน และการใชแถวลาดบในฟงกชน การประกาศตวแปรของเรองฟงกชนเปนสวนทแจงใหตวแปลภาษาทราบวาเราตองการใชตวแปรใดในการแทนขอมล ขอมลทใชเปนขอมลชนดใด ในภาษาซไดมการแบงตวแปรทใชในฟงกชนออกเปนชนด 4 ชนด ไดแก ตวแปรสวนกลาง ตวแปรเฉพาะท ตวแปรสถต

และตวแปรเรจสเตอร

Page 322: การเขียนโปรแกรมคอมพิวเตอร ์portal5.udru.ac.th/ebook/pdf/upload/17P88t2O788B98583682.pdfรูปภาพบางส่วนให

บทท 8 ฟงกชน

305

แบบฝกหดทบทวน

1. จงหาคาผลลพธของฟงกชนเมอกาหนดคาของตวแปรตางๆ ดงน

a = -3 ,b = 3 ,c = 4 ,d = 2. 8 ,e = A ,f = # ,g = Hello ,h = World

1.1 sqrt(a+b*c)

1.2 pow(b,c)

1.3 ceil(d)

1.4 floor(d)

1.5 fabs(a)

1.6 tolower(e)

1.7 isalpha(e)

1.8 isalnum(f);

1.9 strcpy(g,h)

1.10 strlen(strcat(g,h))

2. จงเขยนฟงกชนโปรแกรมแปลงคาองศาเซลเซยส (Degree Celsius) เปนองศาฟาเรนไฮต

(Degree Fahrenheit) ดงสมการน )100

180(32 CF

3. จงเขยนฟงกชนโปรแกรม แปลงคาเงนบาทเปนดอลลารสหรฐ และโปรแกรมแปลงคาดอลลารสหรฐเปนเงนบาท โดยใหมการเลอกการแปลงสกลคาเงน เชนถาเลอก 1 ใหแปลงคาเงนบาทเปนดอลลารสหรฐ และถาเลอก 2 ใหแปลงคาดอลลารสหรฐเปนเงนบาท

4. จงเขยนฟงกชนโปรแกรมแปลง พศ. เปน คศ. และ โปรแกรมแปลง คศ. เปน พศ. โดยใหมการเลอกการแปลง เชนถาเลอก 1 ใหแปลง พศ. เปน คศ.และถาเลอก 2 ใหแปลง คศ.

เปน พศ.

5. จงเขยนฟงกชนโปรแกรมสาหรบการหาคา Factorial

6. จงเขยนฟงกชนโปรแกรมหาคาสงสดและตาสดในแถวลาดบ โดยใหทาการเลอกขอมลเขาวาจะหาคาตาสดหรอสงสด

7. จงเขยนฟงกชนโปรแกรมหาคาเลขคและเลขคในแถวลาดบ โดยใหทาการเลอกขอมลเขาวาจะหาคาเลขคหรอหาคาเลขค พรอมทงแสดงคาผลรวมของคาผลลพธ

Page 323: การเขียนโปรแกรมคอมพิวเตอร ์portal5.udru.ac.th/ebook/pdf/upload/17P88t2O788B98583682.pdfรูปภาพบางส่วนให

บทท 8 ฟงกชน

306

8. จงเขยนฟงกชนโปรแกรมการคานวณการบวกเลขของแถวลาดบ 2 มต ขนาด 3 แถว 3

คอลมน โดยใหรบคาอนพตเขามา 9. จงเขยนฟงกชนโปรแกรมตรวจสอบจานวนตวอกษรตวเลก ตวอกษรตวใหญ และตวอกษรทงหมดของประโยคททาการรบคาเขามา

10. จงเขยนฟงกชนโปรแกรมเพอหาคา x ดงสมการ

a

acbbx

2

42

โดยใหทาการรบคาตวแปร a, b และ c เพอทาการหาคา x

Page 324: การเขียนโปรแกรมคอมพิวเตอร ์portal5.udru.ac.th/ebook/pdf/upload/17P88t2O788B98583682.pdfรูปภาพบางส่วนให

บทท 9 โครงสรางและยเนยน

บทท 9

โครงสรางและยเนยน

ในบทนจะกลาวถงขอมลแบบโครงสราง (Structure) และขอมลแบบยเนยน (Unions)

โดยขอมลแบบโครงสรางจะเปนชนดขอมลทมการรวมขอมลหลายๆ ชนด ทมความสมพนธกนรวมเขาไวดวยกน ซงชนดขอมลแตละตวอาจจะเปนคนละชนดกนซงแตกตางจากขอมลแบบแถวลาดบทจะตองเปนขอมลชนดเดยวกน ทาใหขอมลแบบโครงสรางจดการขอมลไดอยางมประสทธภาพ และเมอมการอางองในสวนของขอมลกสามารถอางองชอของกลมขอมลไดโดยสะดวก สวนขอมลแบบยเนยนจะมความคลายคลงกบขอมลแบบโครงสรางแตแตกตางกนทหนวยความจาทใชในการเกบขอมลโดยขอมลแบบยเนยนตวแปรหลายตวสามารถใชหนวยความจารวมกนได ซงเนอหาในบทนจะเปนพนฐานในการจดเกบขอมลเปนหมวดหมใหเหมาะสมเพอทจะนาไปใชงานอยางมประสทธภาพ

9.1 โครงสราง (Structure)

ในงานเขยนโปรแกรมโดยทวไปตวแปรแตละตวจะมคาใดคาหนงแตบางสถานการณตวแปรตองมคามากกวาหนงคาดงนนปญหาในลกษณะนจงใหมการยอมใหผ เขยนโปรแกรมนยามชนดขอมลทมลกษณะเปนกลมเรยกกวาชนดขอมลแบบโครงสราง (Structure Data

Type) ซงนนกคอการรวมกลมของตวแปรตางๆ จานวนหลายตวแปรเขาไวดวยกนภายใตชอเพยงชอเดยว ซงจะทาใหเราสามารถจดกลมของขอมลและการนาไปประยกตสามารถกระทาไดสะดวกยงขนเชนการเกบขอมลหนงของบคคลหนงอาจจะตองมขอมลจานวนหลายตวแปรดงเชน อาย เพศ ชอ นามสกล ตาแหนง เงนเดอน เปนตน ในหวขอนจะกลาวถง ความหมาย และการประกาศขอมลแบบโครงสราง การกาหนดคาเรมตนใหกบตวแปรภายในขอมลแบบโครงสราง การเขาถงตวแปรภายในขอมลแบบโครงสราง การรบขอมลของตวแปรภายในขอมล

Page 325: การเขียนโปรแกรมคอมพิวเตอร ์portal5.udru.ac.th/ebook/pdf/upload/17P88t2O788B98583682.pdfรูปภาพบางส่วนให

บทท 9 โครงสรางและยเนยน

308

แบบโครงสราง ขอมลแบบโครงสรางซอนขอมลแบบโครงสราง และแถวลาดบกบขอมลแบบโครงสราง

9.1.1 ความหมายและการประกาศขอมลแบบโครงสราง ขอมลแบบโครงสราง คอการรวมกลมของขอมลทมชนดขอมลแตกตางกน แตมความสมพนธกน มาเกบเขาไวภายในโครงสรางเดยวกนภายใตชอเพยงชอเดยว เชน ขอมลของพนกงานทตองเกบรหส ชอ นามสกล แผนก เงนเดอน ซงถาตองการนาขอมลเหลานไปเกบไวในหนวยความจา จะตองเตรยมตวแปรใหกบขอมล โดยทาการเกบ รหส ชอ นามสกล แผนก เปนสตรง สวนเงนเดอนเปนจานวนจรง เชน

ขอมล ชอตวแปร ชนดขอมล รหส id char[10]

ชอ name char[15]

นามสกล surname char[15]

แผนก department char[15]

เงนเดอน salary float

การประกาศขอมลแบบโครงสรางสามารถทาได 2 รปแบบ คอ รปแบบท 1

ตวแปรทกาหนดใหชนดขอมลเปนโครงสรางสามารถกาหนดไดมากกวา 1 ตว โดยใชเครองหมายจลภาคหรอคอมมา (,) คนระหวางชอตวแปรชนดโครงสรางเชน

struct ชอขอมลแบบโครงสราง{ ชนดของขอมลตวท 1 ชอตวแปรตวท 1;

ชนดของขอมลตวท 2 ชอตวแปรตวท 2;

ชนดของขอมลตวท n ชอตวแปรตวท n;

}ชอตวแปรชนดโครงสราง[,ชอตวแปรชนดโครงสราง,ชอตวแปรชนดโครงสราง];

Page 326: การเขียนโปรแกรมคอมพิวเตอร ์portal5.udru.ac.th/ebook/pdf/upload/17P88t2O788B98583682.pdfรูปภาพบางส่วนให

บทท 9 โครงสรางและยเนยน

309

struct employee //สรางตวแปร emp เปนขอมลชนดโครงสราง {

char id[10];

char name[15];

char surname[15];

char department[15];

float salary;

}emp;

struct student

{

char name[80+1];

long int code;

float point;

} a;

//สรางตวแปร a เปนขอมลชนดโครงสราง

struct complex

{

float r,i;

} a,b,c;

//สรางตวแปร a,b,c เปนขอมลชนดโครงสราง โดยจะใชเปนตวแทนของจานวนเชงซอนสามจานวน

struct Customer

{

char code[15+1];

int sex;

char name[80+1];

int age;

char address[255+1];

char phone[30+1];

} p,q,r;

//สรางตวแปร p,q,r เปนขอมลชนดโครงสราง โดยจะใชเปนตวแทนของขอมลลกคาสามคน

Page 327: การเขียนโปรแกรมคอมพิวเตอร ์portal5.udru.ac.th/ebook/pdf/upload/17P88t2O788B98583682.pdfรูปภาพบางส่วนให

บทท 9 โครงสรางและยเนยน

310

struct point

{

float x,y,z;

} a[10];

//สรางตวแปร a เปนขอมลชนดโครงสรางแบบแถวลาดบ

รปแบบท 2

เชน

struct employee

{

char id[10];

char name[15];

char surname[15];

char department[15];

float salary;

};

struct employee emp; //สรางตวแปร emp เปนขอมลชนดโครงสราง

struct ชอขอมลแบบโครงสราง{ ชนดของขอมลตวท 1 ชอตวแปรตวท 1;

ชนดของขอมลตวท 2 ชอตวแปรตวท 2;

ชนดของขอมลตวท n ชอตวแปรตวท n;

};

struct ชอขอมลแบบโครงสราง ชอตวแปรชนดโครงสราง[,ชอตวแปรชนดโครงสราง];

Page 328: การเขียนโปรแกรมคอมพิวเตอร ์portal5.udru.ac.th/ebook/pdf/upload/17P88t2O788B98583682.pdfรูปภาพบางส่วนให

บทท 9 โครงสรางและยเนยน

311

struct student

{

char name[80+1];

long int code;

float point;

};

struct employee a; //สรางตวแปร a เปนขอมลชนดโครงสราง

struct point

{

float x,y,z;

};

struct point a[10]; //สรางตวแปร a เปนขอมลชนดโครงสรางแบบแถวลาดบ

struct Customer

{

char code[15+1];

int sex;

char name[80+1];

int age;

char address[255+1];

char phone[30+1];

};

struct Customer a,b,c; //สรางตวแปร a,b,c เปนขอมลชนดโครงสราง โดยจะ ใชเปนตวแทนของขอมลลกคาสามคน

Page 329: การเขียนโปรแกรมคอมพิวเตอร ์portal5.udru.ac.th/ebook/pdf/upload/17P88t2O788B98583682.pdfรูปภาพบางส่วนให

บทท 9 โครงสรางและยเนยน

312

การประกาศขอมลแบบโครงสรางสามารถทาไดทง 2 แบบ ผ เขยนโปรแกรมสามารถเลอกประกาศแบบใดกไดแลวแตความเหมาะสม เพราะรปแบบทง 2 แบบใหความหมายทเหมอนกน

การกาหนดใหตวแปรอนๆ มชนดขอมลเหมอนกบขอมลแบบโครงสรางทประกาศไวแลว มรปแบบ คอ

ตวแปรทกาหนดใหชนดขอมลเปนโครงสรางสามารถกาหนดไดมากกวา 1 ตว โดยใชเครองหมายจลภาค (,) คนระหวางชอตวแปรชนดโครงสราง เชน

struct employee emp1 ,emp2;

หมายความวา ประกาศใหตวแปร emp1 และตวแปร emp2 เปนตวแปรชนดโครงสรางทมโครงสรางขอมลเหมอนกบชอขอมลแบบโครงสราง employee ทไดประกาศไว

9.1.2 การกาหนดคาเรมตนใหกบตวแปรภายในขอมลแบบโครงสราง การกาหนดคาเรมตนใหกบตวแปรภายในขอมลแบบโครงสราง สามารถทาไดโดยกาหนดคาเรมตนไวภายในในเครองหมายวงเลบปกกา { } และแยกคาของแตละขอมลดวยเครองหมายจลภาค (,) เชน

struct student

{

char name[15];

int score;

}std = {“Witcharkorn”, 89};

struct ชอขอมลแบบโครงสราง ชอตวแปรชนดโครงสราง[,ชอตวแปรชนดโครงสราง];

Page 330: การเขียนโปรแกรมคอมพิวเตอร ์portal5.udru.ac.th/ebook/pdf/upload/17P88t2O788B98583682.pdfรูปภาพบางส่วนให

บทท 9 โครงสรางและยเนยน

313

หมายถง การกาหนดใหตวแปร std มชนดขอมลแบบโครงสราง student โดยใหตวแปรภายในขอมลแบบโครงสรางซงไดแก ตวแปร name และตวแปร score มคาเรมตนเปน

Witcharkorn และ 89 ตามลาดบ

struct employee

{

char id[10];

char name[15];

char surname[15];

char department[15];

float salary;

}emp = {“001”,”Prof.Dr.Prabhas”,”Chongstitvattana”};

หมายถง การกาหนดใหตวแปร emp มชนดขอมลแบบโครงสราง employee โดยใหตวแปรภายในขอมลแบบโครงสรางซงไดแก ตวแปร id มคาเรมตนเปน 001 ตวแปร name มคาเรมตนเปน Prof.Dr.Prabhas ตวแปร surname มคาเรมตนเปน Chongstitvattana ตวแปร department และตวแปร salary ไมไดกาหนดคาเรมตน จะถกแทนคาดวย null (\0) และ 0.0

ตามลาดบ เนองจากมชนดขอมลสายอกขระ และชนดขอมลจานวนจรงตามลาดบ

9.1.3 การเขาถงตวแปรภายในขอมลแบบโครงสราง

การเขาถงตวแปรภายในขอมลแบบโครงสรางจะขนตนดวยชอตวแปรชนดโครงสรางตามดวยเครองหมายจด (Dot Operator) และตามดวยชอสมาชกตวแปรในขอมลแบบโครงสรางนน มรปแบบดงนคอ

เชน

emp.id หมายถงรหสของพนกงาน

emp.name หมายถงชอของพนกงาน

emp.surname หมายถงนามสกลของพนกงาน

emp.department หมายถงแผนกของพนกงาน

emp.salary หมายถงเงนเดอนของพนกงาน

ชอตวแปรชนดโครงสราง.ตวแปรภายในขอมลแบบโครงสราง

Page 331: การเขียนโปรแกรมคอมพิวเตอร ์portal5.udru.ac.th/ebook/pdf/upload/17P88t2O788B98583682.pdfรูปภาพบางส่วนให

บทท 9 โครงสรางและยเนยน

314

ตวอยางท 9.1 โปรแกรมแสดงการเขาถงตวแปรภายในขอมลแบบโครงสราง

1 2 3 4 5 6 7 8 9 10 11 12 13 14

#include<stdio.h> main(){ struct student{ char name[15]; int score; }std1 = {"Dr.Krit", 89},std2 = {"Witchakorn", 99}; printf("Student1\n"); printf("Name = %s\n",std1.name); printf("Score = %d\n",std1.score); printf("*********************************\n"); printf("Student2\n"); printf("Name = %s\n",std2.name); printf("Score = %d\n",std2.score); }

ผลลพธของโปรแกรม Student1 Name = Dr.Krit Score = 89 ***************************************************** Student2 Name = Witchakorn Score = 99

อธบายโปรแกรม

บรรทดท 3–6 สรางขอมลแบบโครงสรางชอ student โดยมตวแปร name และ score เปนตวแปรภายในขอมลแบบโครงสราง และกาหนดตวแปร std1 และ std2 เปนตวแปรชนดโครงสราง พรอมทงกาหนดคาเรมตนให

บรรทดท 8 แสดงคาของตวแปร name ทเปนสมาชกของขอมลแบบโครงสรางภายใตตวแปร std1

บรรทดท 9 แสดงคาของตวแปร score ทเปนสมาชกของขอมลแบบโครงสรางภายใตตวแปร std1

บรรทดท 12 แสดงคาของตวแปร name ทเปนสมาชกของขอมลแบบโครงสรางภายใตตวแปร std2

บรรทดท 13 แสดงคาของตวแปร score ทเปนสมาชกของขอมลแบบโครงสรางภายใตตวแปร std2

Page 332: การเขียนโปรแกรมคอมพิวเตอร ์portal5.udru.ac.th/ebook/pdf/upload/17P88t2O788B98583682.pdfรูปภาพบางส่วนให

บทท 9 โครงสรางและยเนยน

315

ตวอยางท 9.2 โปรแกรมแสดงการเขาถงและการกาหนดคาตวแปรภายในขอมลแบบโครงสราง 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19

20 21

22

#include<stdio.h> main(){ struct data{ int a; float b; char c; char d[10]; }test1,test2; test1.a=11; test1.b=11.11; test1.c='A'; strcpy(test1.d,"AAA"); test2.a=22; test2.b=22.22; test2.c='B'; strcpy(test2.d,"BBB"); printf("Test1\n"); printf("a = %d\tb = %.2f\tc = %c\td = %s\n",test1.a,test1.b,test1.c,test1.d); printf("***************************************\n"); printf("Test2\n"); printf("a = %d\tb = %.2f\tc = %c\td = %s\n",test2.a,test2.b,test2.c,test2.d); }

ผลลพธของโปรแกรม Test1 a = 11 b = 11.11 c = A d = AAA ******************************************************** Test2 a = 22 b = 22.22 c = B d = BBB

อธบายโปรแกรม

บรรทดท 3–8 สรางขอมลแบบโครงสรางชอ data โดยมตวแปร a, b, c และ d เปนตวแปรภายในขอมลแบบโครงสราง และกาหนดตวแปร test1 และ test2 เปนตวแปรชนดโครงสราง

บรรทดท 9–16 กาหนดคาใหกบตวแปรแตละตวทเปนสมาชกของขอมลแบบโครงสราง

บรรทดท 18 แสดงคาของตวแปรแตละตวทเปนสมาชกของขอมลแบบโครงสรางภายใตตวแปร test1

Page 333: การเขียนโปรแกรมคอมพิวเตอร ์portal5.udru.ac.th/ebook/pdf/upload/17P88t2O788B98583682.pdfรูปภาพบางส่วนให

บทท 9 โครงสรางและยเนยน

316

บรรทดท 21 แสดงคาของตวแปรแตละตวทเปนสมาชกของขอมลแบบโครงสรางภายใตตวแปร test2

ตวอยางท 9.3 โปรแกรมแสดงการเขาถงและการกาหนดคาตวแปรภายในขอมลแบบโครงสราง

1 2 3 4 5 6 7 8 9 10 11

#include <stdio.h> main() { struct complex { float x,y; } a,b; a.x = 20.0f; a.y = 3.2f; b.x = 12.5f; b.y = 3.0f; printf("(20+3.2i)+(12.5+3i) = %f+%fi",a.x+b.x,a.y+b.y); }

ผลลพธของโปรแกรม (20+3.2i)+(12.5+3i) = 32.500000+6.200000i

อธบายโปรแกรม

บรรทดท 4–7 สรางขอมลแบบโครงสรางชอ complex โดยมตวแปร a, b เปนตวแปรภายในขอมลแบบโครงสราง

บรรทดท 8–9 กาหนดคาใหกบตวแปรแตละตวทเปนสมาชกของขอมลแบบโครงสราง

บรรทดท 10 แสดงคาของตวแปรแตละตวทเปนสมาชกของขอมลแบบโครงสราง

Page 334: การเขียนโปรแกรมคอมพิวเตอร ์portal5.udru.ac.th/ebook/pdf/upload/17P88t2O788B98583682.pdfรูปภาพบางส่วนให

บทท 9 โครงสรางและยเนยน

317

ตวอยางท 9.4 โปรแกรมแสดงการเขาถงและการกาหนดคาตวแปรภายในขอมลแบบโครงสราง 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16

#include <stdio.h> #include <string.h> void main(void) { struct student { long int code; char name[80]; } A,B; A.code = 451350001; strcpy(A.name,"One"); B.code = 451310001; strcpy(B.name,"Two"); printf("Code : %li\tName : %s\n",A.code,A.name); printf("Code : %li\tName : %s\n",B.code,B.name); }

ผลลพธของโปรแกรม Code : 11111 Name : One Code : 22222 Name : Two

อธบายโปรแกรม

บรรทดท 5–9 สรางขอมลแบบโครงสรางชอ student โดยมตวแปร A, B เปนตวแปรภายในขอมลแบบโครงสราง

บรรทดท 10–13 กาหนดคาใหกบตวแปรแตละตวทเปนสมาชกของขอมลแบบโครงสรางโดยฟงกชน strcpy เปนฟงกชนสาหรบสาเนาขอมล

บรรทดท 14-15 แสดงคาของตวแปรแตละตวทเปนสมาชกของขอมลแบบโครงสราง

Page 335: การเขียนโปรแกรมคอมพิวเตอร ์portal5.udru.ac.th/ebook/pdf/upload/17P88t2O788B98583682.pdfรูปภาพบางส่วนให

บทท 9 โครงสรางและยเนยน

318

9.1.4 การรบขอมลของตวแปรภายในขอมลแบบโครงสราง การรบขอมลจากแปนพมพสามารถใชฟงกชน gets() ในการรบขอมลสตรง และ getchar() ในการรบขอมลตวอกษรได เชน

gets(emp.name);

หมายถง การรบขอมลจากแปนพมพมาเกบไวในตวแปร name ทเปนสมาชกของขอมลแบบโครงสรางภายใตตวแปร emp ซงตวแปร name จะตองเกบขอมลสตรง

std1.grade = getchar()

หมายถง การรบขอมลจากแปนพมพมาเกบไวในตวแปร grade ทเปนสมาชกของขอมลแบบโครงสรางภายใตตวแปร std1 ซงตวแปร grade จะตองเกบขอมลตวอกษร

ตวอยางท 9.5 โปรแกรมแสดงการรบขอมลของตวแปรภายในขอมลแบบโครงสราง

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21

22

#include<stdio.h> #include<stdlib.h> main(){ struct data{ int a; float b; char c[10]; char d; }test; char temp[10]; printf("Enter Integer :"); gets(temp); test.a = atoi(temp); printf("Enter Float :"); gets(temp); test.b = atof(temp); printf("Enter String :"); gets(test.c); printf("Enter Character :"); test.d = getchar(); printf("a = %d\tb = %.2f\tc = %s\td = %c\n",test.a,test.b,test.c,test.d); }

ผลลพธของโปรแกรม Enter Integer :99 Enter Float :89 Enter String :AAAA Enter Character :A a = 99 b = 89.00 c = AAAA d = A

Page 336: การเขียนโปรแกรมคอมพิวเตอร ์portal5.udru.ac.th/ebook/pdf/upload/17P88t2O788B98583682.pdfรูปภาพบางส่วนให

บทท 9 โครงสรางและยเนยน

319

อธบายโปรแกรม

บรรทดท 2 ทาการรวมไฟลสวนหว stdlib.h เขาไวในการแปลโปรแกรม เพอเรยกใชฟงกชนมาตรฐาน atoi() และ atof()

บรรทดท 4–9 สรางขอมลแบบโครงสรางชอ data โดยมตวแปร a, b, c และ d เปนตวแปรภายในขอมลแบบโครงสราง และกาหนดตวแปร test เปนตวแปรชนดโครงสราง

บรรทดท 12-13 รบคาขอมลสายอกขระจากแปนพมพ เขามาเกบไวในตวแปรชวคราว ซงกาหนดเปนตวแปร temp จากนนใชฟงกชนมาตรฐาน atoi()

แปลงชนดขอมลของตวแปร temp จากสายอกขระเปนเลขจานวนเตม แลวจงเกบคาลงในตวแปร a

บรรทดท 15-16 รบคาขอมลสายอกขระจากแปนพมพ เขามาเกบไวในตวแปรชวคราว ซงกาหนดเปนตวแปร temp จากนนใชฟงกชนมาตรฐาน atof()

แปลงชนดขอมลของตวแปร temp จากสายอกขระเปนเลขจานวนจรง แลวจงเกบคาลงในตวแปร b

บรรทดท 18 รบคาขอมลสายอกขระจากแปนพมพ แลวเกบคาลงในตวแปร c

บรรทดท 20 รบคาขอมลตวอกษรจากแปนพมพ แลวเกบคาลงในตวแปร d

บรรทดท 21 แสดงคาของตวแปรแตละตวทเปนสมาชกของขอมลแบบโครงสรางภายใตตวแปร test

การคดลอกขอมลระหวางตวแปรทมชนดขอมลแบบโครงสราง สามารถทาไดโดยใชตวดาเนนการเทากบ (=)

เชน

struct student{

char name[15];

int score;

}std1 = {“Somkantha”,90} ,std2 ={“Witchakorn”,88};

Page 337: การเขียนโปรแกรมคอมพิวเตอร ์portal5.udru.ac.th/ebook/pdf/upload/17P88t2O788B98583682.pdfรูปภาพบางส่วนให

บทท 9 โครงสรางและยเนยน

320

เมอใชคาสง std1 = std2; จะไดผลลพธดงน

std1.name = Somkantha std1.score = 90

std2.name = Wilaiporn std2.score = 90

ตวอยางท 9.6 โปรแกรมแสดงการคดลอกขอมลระหวางตวแปรทมชนดขอมลแบบโครงสราง

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23

#include<stdio.h> #include<stdlib.h> main(){ struct student{ char name[15]; int score; }std1,std2; char temp[10]; printf("Enter Name :"); gets(std1.name); printf("Enter Score :"); gets(temp); std1.score = atoi(temp); std2 = std1; printf("*********************************\n"); printf("Student1\n"); printf("Name = %s\n",std1.name); printf("Score = %d\n",std1.score); printf("*********************************\n"); printf("Student2\n"); printf("Name = %s\n",std2.name); printf("Score = %d\n",std2.score); }

ผลลพธของโปรแกรม Enter Name :Asst.Prof.Krit Enter Score :99 ********************************* Student1 Name = Asst.Prof.Krit Score = 99 ********************************* Student2 Name = Asst.Prof.Krit Score = 99

Page 338: การเขียนโปรแกรมคอมพิวเตอร ์portal5.udru.ac.th/ebook/pdf/upload/17P88t2O788B98583682.pdfรูปภาพบางส่วนให

บทท 9 โครงสรางและยเนยน

321

อธบายโปรแกรม

บรรทดท 2 ทาการรวมไฟลสวนหว stdlib.h เขาไวในการแปลโปรแกรม เพอเรยกใชฟงกชนมาตรฐาน atoi()

บรรทดท 4–7 สรางขอมลแบบโครงสรางชอ student โดยมตวแปร name และ score เปนตวแปรภายในขอมลแบบโครงสราง และกาหนดตวแปร std1 และ std2 เปนตวแปรชนดโครงสราง

บรรทดท 10 รบคาขอมลสตรงจากแปนพมพ แลวเกบคาลงในตวแปร name

บรรทดท 12-13 รบคาขอมลสตรงจากแปนพมพ เขามาเกบไวในตวแปรชวคราว ซงกาหนดเปนตวแปร temp จากนนใชฟงกชนมาตรฐาน atoi() แปลงชนดขอมลของตวแปร temp จากสตรงเปนเลขจานวนเตม แลวจงเกบคาลงในตวแปร score

บรรทดท 14 คดลอกขอมลของตวแปร std1 ไปยงตวแปร std2

9.1.5 ขอมลแบบโครงสรางซอนขอมลแบบโครงสราง จากเนอหาทผานมาชนดขอมลแบบโครงสรางสามารถประกอบดวยสมาชกตางๆ ทมชนดขอมลทแตกตางกนได แตนอกเหนอจากการกาหนดตวแปรดงกลาวยงสามารถนาโครงสรางหนงใหเปนสมาชกของโครงสรางตวอนไดดวย เปรยบเสมอนการซอนกนของโครงสราง ซงเราเรยกวาขอมลแบบโครงสรางซอนขอมลแบบโครงสราง โดยสามารถกาหนดขอมลแบบโครงสรางเปนสมาชกของขอมลแบบโครงสรางไดเชน

struct score{

int midterm;

int final;

};

struct student{

char name[15];

char surname[15];

struct score s;

}std1;

Page 339: การเขียนโปรแกรมคอมพิวเตอร ์portal5.udru.ac.th/ebook/pdf/upload/17P88t2O788B98583682.pdfรูปภาพบางส่วนให

บทท 9 โครงสรางและยเนยน

322

สามารถกาหนดคาเรมตนใหกบขอมลแบบโครงสรางซอนขอมลแบบโครงสราง เชน

struct score{

int midterm;

int final;

};

struct student{

char name[15];

char surname[15];

struct score s;

}std1 = {“Krit”,”Somkantha”,{66,28}};

การเขาถงสมาชกขอมลแบบโครงสรางซอนขอมลแบบโครงสรางมรปแบบ คอ

ดงเชน

struct_var.nest_struct_var.mem_nest_struct_var

โดย struct_var คอตวแปรชนดโครงสราง nest_struct_var คอตวแปรชนดโครงสรางทซอนอยในขอมลแบบโครงสราง

mem_nest_struct_var คอสมาชกหรอตวแปรของขอมลแบบโครงสรางทซอนอยในขอมลแบบโครงสราง

เชน

struct score{

int midterm;

int final;

};

ชอตวแปรชนดโครงสราง.ตวแปรชนดโครงสรางทซอนอยในขอมลแบบโครงสราง.สมาชกหรอตวแปรของขอมลแบบโครงสรางทซอนอยในขอมลแบบโครงสราง

Page 340: การเขียนโปรแกรมคอมพิวเตอร ์portal5.udru.ac.th/ebook/pdf/upload/17P88t2O788B98583682.pdfรูปภาพบางส่วนให

บทท 9 โครงสรางและยเนยน

323

struct student{

char name[15];

char surname[15];

struct score s;

}std1 = {“Krit”,”Somkantha”,{66,28}};

เมอระบ std1.name จะไดคาคอ Krit

เมอระบ std1.surname จะไดคาคอ Somkantha

เมอระบ std1.s จะไดคาคอ 66 และ 28 ซงเปนคาของสมาชกหรอตวแปรทกตวของขอมลแบบโครงสราง score

เมอระบ std1.s.midterm จะไดคาคอ 66 ซงเปนคาของสมาชกหรอตวแปร midterm

ของขอมลแบบโครงสราง score

เมอระบ std1.s.final จะไดคาคอ 28 ซงเปนคาของสมาชกหรอตวแปร midtermของขอมลแบบโครงสราง score

ตวอยางท 9.7 โปรแกรมแสดงการใชขอมลแบบโครงสรางซอนขอมลแบบโครงสราง 1 2 3 4 5 6 7 8 9 10 11

12 13 14 15 16 17

18 19 20 21 22 23

24

#include<stdio.h> main(){ struct score{ int midterm; int final; }; struct student{ char name[15]; char surname[15]; struct score s; }std1 = {"Krit","Somkantha",{66,28}},std2 = {"Witchakorn","Somkantha",{68,29}}; printf("Student1\n"); printf("Name = %s\n",std1.name); printf("Surname = %s\n",std1.surname); printf("Midterm = %d\n",std1.s.midterm); printf("Final = %d\n",std1.s.final); printf("Total score = %d\n",std1.s.midterm+std1.s.final); printf("****************************\n"); printf("Student2\n"); printf("Name = %s\n",std2.name); printf("Surname = %s\n",std2.surname); printf("Midterm and Final = %d and %d\n",std2.s); printf("Total score = %d\n",std2.s.midterm+std2.s.final); }

Page 341: การเขียนโปรแกรมคอมพิวเตอร ์portal5.udru.ac.th/ebook/pdf/upload/17P88t2O788B98583682.pdfรูปภาพบางส่วนให

บทท 9 โครงสรางและยเนยน

324

ผลลพธของโปรแกรม Student1 Name = Krit Surname = Somkantha Midterm = 66 Final = 28 Total score = 94 **************************** Student2 Name = Witchakorn Surname = Somkantha Midterm and Final = 68 and 29 Total score = 97

อธบายโปรแกรม

บรรทดท 3–6 สรางขอมลแบบโครงสรางชอ score โดยมตวแปร midterm และ final เปนตวแปรภายในขอมลแบบโครงสราง

บรรทดท 7–11 สรางขอมลแบบโครงสรางชอ student โดยมตวแปร name,

surname และตวแปร s ทมชนดขอมลแบบโครงสราง เปนตวแปรภายในขอมลแบบโครงสราง และกาหนดตวแปร std1 และ std2 เปนตวแปรชนดโครงสราง โดยมการกาหนดคาเรมตนของตวแปร std1

และ std2

บรรทดท 13-17 แสดงคาของตวแปรแตละตวทเปนสมาชกของขอมลแบบโครงสรางภายใตตวแปร std1

บรรทดท 20-23 แสดงคาของตวแปรแตละตวทเปนสมาชกของขอมลแบบโครงสรางภายใตตวแปร std2

Page 342: การเขียนโปรแกรมคอมพิวเตอร ์portal5.udru.ac.th/ebook/pdf/upload/17P88t2O788B98583682.pdfรูปภาพบางส่วนให

บทท 9 โครงสรางและยเนยน

325

9.1.6 แถวลาดบกบขอมลแบบโครงสราง การสรางตวแปรแถวลาดบใหมชนดขอมลแบบโครงสราง มรปแบบ คอ

การเขาถงสมาชกของตวแปรแถวลาดบทมชนดขอมลแบบโครงสราง มรปแบบ คอ

เชน struct employee{

char id[10];

char name[15];

char surname[15];

char department[15];

float salary;

}emp[10];

emp[4].id คอการเขาถงรหสของพนกงานคนท 5

emp[9].department คอการเขาถงแผนกของพนกงานคนท 10

emp[0].name คอการเขาถงชอของพนกงานคนท 1

struct ชอขอมลแบบโครงสราง{ ชนดของขอมลตวท 1 ชอตวแปรตวท 1;

ชนดของขอมลตวท 2 ชอตวแปรตวท 2;

ชนดของขอมลตวท n ชอตวแปรตวท n;

}ชอตวแปรชนดโครงสราง[ขนาดของแถวลาดบ];

ชอตวแปรชนดโครงสราง[ดรรชน].ชอสมาชกของขอมลแบบโครงสราง

Page 343: การเขียนโปรแกรมคอมพิวเตอร ์portal5.udru.ac.th/ebook/pdf/upload/17P88t2O788B98583682.pdfรูปภาพบางส่วนให

บทท 9 โครงสรางและยเนยน

326

ตวอยางท 9.8 โปรแกรมแสดงการสรางตวแปรแถวลาดบใหมชนดขอมลแบบโครงสราง

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28

#include<stdio.h> #include<stdlib.h> main(){ struct student{ char name[15]; int score; }std1[5]; char temp[10]; int i,sum=0; float avg; for(i=0;i<5;i++){ printf("Enter Name[%d] :",i+1); gets(std1[i].name); printf("Enter Score[%d] :",i+1); gets(temp); std1[i].score = atoi(temp); sum = sum + std1[i].score; } avg = sum/5; printf("*********************************\n"); for(i=0;i<5;i++){ printf("Student[%d]\n",i+1); printf("\tName = %s\n",std1[i].name); printf("\tScore = %d\n",std1[i].score); } printf("*********************************\n"); printf("Average Score = %.2f\n",avg); }

ผลลพธของโปรแกรม Enter Name[1] :Inson Enter Score[1] : 89 Enter Name[2] :Ahumporn Enter Score[2] :67 Enter Name[3] :Prawphan Enter Score[3] :78 Enter Name[4] :Krit Enter Score[4] :65 Enter Name[5] :Witchakorn Enter Score[5] :99 ******************************************************** Student[1] Name = Inson Score = 89 Student[2] Name = Ahumporn Score = 67 Student[3] Name = Prawphan Score = 78

Page 344: การเขียนโปรแกรมคอมพิวเตอร ์portal5.udru.ac.th/ebook/pdf/upload/17P88t2O788B98583682.pdfรูปภาพบางส่วนให

บทท 9 โครงสรางและยเนยน

327

Student[4] Name = Krit Score = 65 Student[5] Name = Witchakorn Score = 99 ******************************************************** Average Score = 79.00

อธบายโปรแกรม

บรรทดท 4 – 7 สรางขอมลแบบโครงสรางชอ student โดยมตวแปร name และ score เปนตวแปรภายในขอมลแบบโครงสราง และกาหนดใหตวแปร std เปนตวแปรแถวลาดบขนาด 5 ชอง ใหเปนตวแปรชนดโครงสราง

บรรทดท 11–18 วนซารบคาสมาชกของตวแปรแถวลาดบทมชนดขอมลแบบโครงสราง จานวน 5 รอบ เพอหาคะแนนเฉลยของนกศกษาทง 5 คน

บรรทดท 21–25 วนซาแสดงคาสมาชกของตวแปรแถวลาดบทมชนดขอมลแบบโครงสราง จานวน 5 รอบ

บรรทดท 27 แสดงคะแนนเฉลย

ตวอยางท 9.9 โปรแกรมแสดงการสรางตวแปรแถวลาดบใหมชนดขอมลแบบโครงสราง 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25

#include <stdio.h> #include <stdlib.h> main() { int i; struct student { long int code; char name[80+1]; }; struct student cpe[5]; for(int i=0;i<5;i++) { printf("Input Code Student NO.%i : ",i+1); scanf("%li",&cpe[i].code); printf("Input name student NO.%i : ",i+1); scanf("%80s",&cpe[i].name); } for(i=0;i<5;i++) { printf("Code : %li\t",cpe[i].code); printf("Name : %s\n",cpe[i].name); } }

Page 345: การเขียนโปรแกรมคอมพิวเตอร ์portal5.udru.ac.th/ebook/pdf/upload/17P88t2O788B98583682.pdfรูปภาพบางส่วนให

บทท 9 โครงสรางและยเนยน

328

ผลลพธของโปรแกรม Input Code Student NO.1 : 0001 Input name student NO.1 : Asst.Prof.Dr.Krit Input Code Student NO.2 : 0002 Input name student NO.2 : Prof.Dr.Boontee Input Code Student NO.3 : 0003 Input name student NO.3 : Prof.Dr.Niphon Input Code Student NO.4 : 0004 Input name student NO.4 : Prof.Dr.Prabhas Input Code Student NO.5 : 0005 Input name student NO.5 : Prof.Dr.Chidchanok Code : 1 Name : Asst.Prof.Dr.Krit Code : 2 Name : Prof.Dr.Boontee Code : 3 Name : Prof.Dr.Niphon Code : 4 Name : Prof.Dr.Prabhas Code : 5 Name : Prof.Dr.Chidchanok

อธบายโปรแกรม

บรรทดท 6 –10 สรางขอมลแบบโครงสรางชอ student โดยมตวแปร code และ name เปนตวแปรภายในขอมลแบบโครงสราง

บรรทดท 11 กาหนดใหตวแปร cpe เปนตวแปรแถวลาดบขนาด 5 ชอง ใหเปนตวแปรชนดโครงสราง

บรรทดท 12-18 วนซา รบคาสมาชกของตวแปรแถวลาดบทมชนดขอมลแบบโครงสราง จานวน 5 รอบ เพอรบคา code และ name

บรรทดท 19-23 วนซาแสดงคาสมาชกของตวแปรแถวลาดบทมชนดขอมลแบบโครงสราง จานวน 5 รอบ

Page 346: การเขียนโปรแกรมคอมพิวเตอร ์portal5.udru.ac.th/ebook/pdf/upload/17P88t2O788B98583682.pdfรูปภาพบางส่วนให

บทท 9 โครงสรางและยเนยน

329

ตวอยางท 9.10 โปรแกรมแสดงการสรางตวแปรแถวลาดบใหมชนดขอมลแบบโครงสรางโดยการกาหนดคาเรมตนใหกบแถวลาดบของตวแปรโครงสราง

1 2 3 4 5 6 7 8 9

10 11 12

#include <stdio.h> main() { struct student { long int code; char name[80]; }; struct student s[2] = { {36000001,"One"}, {36000002,"Two"} }; printf("Code : %li\tName : %s\n",s[0].code,s[0].name); printf("Code : %li\tName : %s\n",s[1].code,s[1].name); }

ผลลพธของโปรแกรม Code : 36000001 Name : One Code : 36000002 Name : Two

อธบายโปรแกรม

บรรทดท 4 –9 สรางขอมลแบบโครงสรางชอ student โดยมตวแปร code และ name เปนตวแปรภายในขอมลแบบโครงสราง

บรรทดท 9 กาหนดใหตวแปร s เปนตวแปรแถวลาดบขนาด 2 ชอง ใหเปนตวแปรชนดโครงสราง และกาหนดคาเรมตนใหกบแถวลาดบของตวแปรโครงสราง

Page 347: การเขียนโปรแกรมคอมพิวเตอร ์portal5.udru.ac.th/ebook/pdf/upload/17P88t2O788B98583682.pdfรูปภาพบางส่วนให

บทท 9 โครงสรางและยเนยน

330

9.2 ยเนยน (Unions)

9.2.1 ความหมายและการประกาศขอมลแบบยเนยน

ยเ นยนจะมความคลายคลงกบ ขอมลชนดของโครงสรางแตแตกตางกน ทหนวยความจาทใชในการเกบขอมลโดยขอมลแบบยเนยนตวแปรหลายตวสามารถใชหนวยความจารวมกนได จากขอมลชนดโครงสรางทไดศกษาในเนอหากอนหนานสมาชกแตละตวจะใชหนวยความจาในการจดเกบขอมลทแยกกน ดงรปตวอยางการเปรยบเทยบการเกบขอมลชนดของโครงสรางและชนดของยเนยน

รปท 9.1 โครงสรางการจดเกบขอมลชนดโครงสราง

รปท 9.2 โครงสรางการจดเกบขอมลชนดยเนยน

Page 348: การเขียนโปรแกรมคอมพิวเตอร ์portal5.udru.ac.th/ebook/pdf/upload/17P88t2O788B98583682.pdfรูปภาพบางส่วนให

บทท 9 โครงสรางและยเนยน

331

ยเนยนจะพจารณาขนาดของสมาชกของตวแปรแตละตววาตวไหนมคาขนาดของขอมลมากทสด กจะกระทาการจองพนทเทากบขนาดของตวแปรทมคามากทสด ทาใหการใชงานประหยดหนวยความจาไดดกวาการประกาศตวแปรชนดโครงสราง

สงสาคญทขอมลแบบยเนยนแตกตางจากขอมลแบบโครงสรางคอวธการจดการหนวยความจา โดยการจดการหนวยความจาของยเนยนจะใชพนทหนวยความจาเดยวกน

สมาชกทกตวจะใชพนทหนวยความจาเดยวกน ทาใหตวแปรชนดยเนยนสามารถใชสมาชกไดทละตวเทานน ดวยเหตนทาใหขนาดหนวยความจาของตวแปรยเนยนนอยกวาแบบโครงสรางทมสมาชกเหมอนกนเสมอ โดยขนาดหนวยความของยเนยนจะเทากบขนาดหนวยความจาสงสดของสมาชกใดๆ ในขณะทขอมลแบบโครงสรางจะใชหนวยความจาเทากบจานวนหนวยความจาทสมาชกทกตวรวมกน

การประกาศตวแปรประเภทยเนยนสามารถกระทาไดเชนเดยวกนกบการประกาศขอมลมลแบบโครงสรางดงน

รปแบบท 1

ตวแปรทกาหนดใหชนดขอมลเปนยเนยนสามารถกาหนดไดมากกวา 1 ตว โดยใชเครองหมายจลภาค (,) คนระหวางชอตวแปรชนดยเนยนเชน

union ชอขอมลแบบยเนยน{

ชนดของขอมลตวท 1 ชอตวแปรตวท 1;

ชนดของขอมลตวท 2 ชอตวแปรตวท 2;

ชนดของขอมลตวท n ชอตวแปรตวท n;

}ชอตวแปรชนดยเนยน[,ชอตวแปรชนดยเนยน,ชอตวแปรชนดยเนยน];

Page 349: การเขียนโปรแกรมคอมพิวเตอร ์portal5.udru.ac.th/ebook/pdf/upload/17P88t2O788B98583682.pdfรูปภาพบางส่วนให

บทท 9 โครงสรางและยเนยน

332

union employee //สรางตวแปร emp เปนขอมลชนดยเนยน

{

char id[10];

char name[15];

char surname[15];

char department[15];

float salary;

}emp;

union student

{

char name[80+1];

long int code;

float point;

} a;

//สรางตวแปร a เปนขอมลชนดยเนยน

union complex

{

float r,i;

} a,b,c;

//สรางตวแปร a,b,c เปนขอมลชนดยเนยน โดยจะใชเปนตวแทนของจานวนเชงซอนสามจานวน

union Customer

{

char code[15+1];

int sex;

char name[80+1];

int age;

char address[255+1];

char phone[30+1];

} p,q,r;

//สรางตวแปร p,q,r เปนขอมลชนดยเนยน โดยจะใชเปนตวแทนของขอมลลกคาคาสามคน

Page 350: การเขียนโปรแกรมคอมพิวเตอร ์portal5.udru.ac.th/ebook/pdf/upload/17P88t2O788B98583682.pdfรูปภาพบางส่วนให

บทท 9 โครงสรางและยเนยน

333

รปแบบท 2

เชน

union employee

{

char id[10];

char name[15];

char surname[15];

char department[15];

float salary;

};

union employee emp; //สรางตวแปร emp เปนขอมลชนดยเนยน

union student

{

char name[80+1];

long int code;

float point;

};

union employee a; //สรางตวแปร a เปนขอมลชนดยเนยน

union ชอขอมลแบบยเนยน{

ชนดของขอมลตวท 1 ชอตวแปรตวท 1;

ชนดของขอมลตวท 2 ชอตวแปรตวท 2;

ชนดของขอมลตวท n ชอตวแปรตวท n;

};

struct ชอขอมลแบบยเนยน ชอตวแปรชนดยเนยน[,ชอตวแปรชนดยเนยน];

Page 351: การเขียนโปรแกรมคอมพิวเตอร ์portal5.udru.ac.th/ebook/pdf/upload/17P88t2O788B98583682.pdfรูปภาพบางส่วนให

บทท 9 โครงสรางและยเนยน

334

union point

{

float x,y,z;

};

union point a[10]; //สรางตวแปร a เปนขอมลชนดยเนยนแบบแถวลาดบ

union Customer

{

char code[15+1];

int sex;

char name[80+1];

int age;

char address[255+1];

char phone[30+1];

};

union Customer a,b,c; //สรางตวแปร a,b,c เปนขอมลชนดยเนยน โดยจะ ใชเปนตวแทนของขอมลลกคาคาสามคน

การประกาศขอมลแบบยเนยนสามารถทาไดทง 2 แบบ ผ เขยนโปรแกรมสามารถเลอกประกาศแบบใดกไดแลวแตความเหมาะสม เพราะรปแบบทง 2 แบบใหความหมายทเหมอนกน

การกาหนดใหตวแปรอนๆ มชนดขอมลเหมอนกบขอมลแบบยเนยนทประกาศไวแลว มรปแบบ คอ

ตวแปรทกาหนดใหชนดขอมลเปนยเนยนสามารถกาหนดไดมากกวา 1 ตว โดยใชเครองหมายจลภาค (,) คนระหวางชอตวแปรชนดยเนยน

union ชอขอมลแบบยเนยน ชอตวแปรชนดยเนยน[,ชอตวแปรชนดยเนยน];

Page 352: การเขียนโปรแกรมคอมพิวเตอร ์portal5.udru.ac.th/ebook/pdf/upload/17P88t2O788B98583682.pdfรูปภาพบางส่วนให

บทท 9 โครงสรางและยเนยน

335

เชน

union employee emp1 ,emp2;

หมายความวา ประกาศใหตวแปร emp1 และตวแปร emp2 เปนตวแปรชนดยเนยนทมโครงสรางขอมลเหมอนกบชอขอมลแบบยเนยน employee ทไดประกาศไว

ตวอยางท 9.11 โปรแกรมแสดงการใชหนวยความจาของตวแปรชนดยเนยนและโครงสราง

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20

#include<stdio.h> main(){ struct st_struct { long int code; int num; char name[80+1]; }; union st_union { long int code; int num; char name[80+1]; }; printf("sizeof(long int) = %i\n",sizeof(long int)); printf("sizeof(int) = %i\n",sizeof(int)); printf("sizeof(char [80+1])=%i\n",sizeof(char [80+1])); printf("sizeof(st_struct) = %i\n",sizeof(st_struct)); printf("sizeof(st_union) = %i\n",sizeof(st_union)); }

ผลลพธของโปรแกรม sizeof(long int) = 4 sizeof(int) = 2 sizeof(char [80+1]) = 81 sizeof(st_struct) = 87 sizeof(st_union) = 81

จากโปรแกรมแสดงใหเหนวาตวแปรชนดและยเนยนมขนาดของขอมลทแตกตางกนโดยขนาดของตวแปรชนดขอมลแบบโครงสรางจะมขนาดขอมลทใหญกวานนคอ 87 สวน

ขนาดของตวแปรชนดขอมลแบบยเนยนจะมขนาดขอมล 81 นนกคอขนาดสงสดของการประกาศตวแปร char name[80+1] ซงกคอ 81 นนเอง

Page 353: การเขียนโปรแกรมคอมพิวเตอร ์portal5.udru.ac.th/ebook/pdf/upload/17P88t2O788B98583682.pdfรูปภาพบางส่วนให

บทท 9 โครงสรางและยเนยน

336

อธบายโปรแกรม

บรรทดท 3–8 สรางขอมลแบบโครงสรางชอ st_struct

บรรทดท 9–14 สรางขอมลแบบยเนยนชอ st_union

บรรทดท 18-20 แสดงคาขนาดของขอมลแตละชนด

9.2.2 การกาหนดคาเรมตนใหกบตวแปรภายในขอมลแบบยเนยน

การกาหนดคาเรมตนใหกบตวแปรภายในขอมลแบบยเนยน สามารถทาไดโดยกาหนดคาเรมตนไวภายในในเครองหมายวงเลบปกกา { } โดยชนดขอมลแบบยเนยนจะสามารถกาหนดไดทละ 1 ตวเทานน เนองจากหนวยความจาของยเนยนจะใชพนทหนวยความจาเดยวกน ดงนนสมาชกทกตวจะใชพนทหนวยความจาเดยวกน ทาใหตวแปรชนดยเนยนสามารถใชสมาชกไดทละตวเทานน

union student

{

char name[15];

int score;

}std = {“Witcharkorn”};

หมายถง การกาหนดใหตวแปร std มชนดขอมลแบบยเนยน student โดยใหตวแปรภายในขอมลแบบยเนยนซงไดแก ตวแปร name และตวแปร score มคาเรมตนเปน

Witcharkorn

union student

{

char name[15];

int score;

}std = {99};

หมายถง การกาหนดใหตวแปร std มชนดขอมลแบบยเนยน student โดยใหตวแปรภายในขอมลแบบยเนยนซงไดแก ตวแปร name และตวแปร score มคาเรมตนเปน 99

Page 354: การเขียนโปรแกรมคอมพิวเตอร ์portal5.udru.ac.th/ebook/pdf/upload/17P88t2O788B98583682.pdfรูปภาพบางส่วนให

บทท 9 โครงสรางและยเนยน

337

9.2.3 การเขาถงตวแปรภายในขอมลแบบยเนยน

การเขาถงตวแปรภายในขอมลแบบยเนยนจะขนตนดวยชอตวแปรชนดยเนยนตามดวยเครองหมายจด (Dot Operator) และตามดวยชอสมาชกตวแปรในขอมลแบบยเนยนนน

จากวธการเขาถงตวแปรสงเกตไดวาจะมวธการเขาถงเหมอนกบการเขาถงตวแปรภายในขอมลแบบโครงสราง แตควรสงเกตวายเนยนจะใชหนวยความจารวมกนดงนนจะมขอแตกตางบางประการระหวางขอมลแบบยเนยนและแบบโครงสราง โดยการเขาถงตวแปรภายในขอมลแบบยเนยนมรปแบบดงนคอ

เชน

emp.id หมายถงรหสของพนกงาน

emp.name หมายถงชอของพนกงาน

ตวอยางท 9.12 โปรแกรมแสดงการเขาถงตวแปรภายในขอมลแบบยเนยน

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19

#include<stdio.h> #include<string.h> main(){ union student{ char name[15]; int score; }std1,std2; strcpy(std1.name,"Dr.Krit"); std1.score = 89; strcpy(std2.name,"Witcharkorn"); std2.score = 99; printf("Student1\n"); printf("Name = %s\n",std1.name); printf("Score = %d\n",std1.score); printf("*********************************\n"); printf("Student2\n"); printf("Name = %s\n",std2.name); printf("Score = %d\n",std2.score); }

ผลลพธของโปรแกรม Student1 Name = Y Score = 89 *********************************

ชอตวแปรชนดยเนยน.ตวแปรภายในขอมลแบบยเนยน

Page 355: การเขียนโปรแกรมคอมพิวเตอร ์portal5.udru.ac.th/ebook/pdf/upload/17P88t2O788B98583682.pdfรูปภาพบางส่วนให

บทท 9 โครงสรางและยเนยน

338

Student2 Name = c Score = 99

สงเกตผลลพธจากโปรแกรมแสดงใหเหนวา Name จะแสดงผลลพธทผดพลาดซงผลลพธแสดงตางจากคาทตองการทงนเนองจากเรมแรกหนวยความจาจะเกบตวแปรประเภทสายอกขระกอนจากนนกจะเกบตวแปรจานวนเตม ซงตวแปรจานวนเตมจะไปแทนทในสวนของหนวยความจาทาใหคาทไดผดพลาด ดงนนในการใชควรระวงการใชงานใหจาไวเสมอวา หนวยความจาของยเนยนจะใชพนทหนวยความจาเดยวกน ดงนนสมาชกทกตวจะใชพนทหนวยความจาเดยวกน ทาใหตวแปรชนดยเนยนสามารถใชสมาชกไดทละตวเทานน

อธบายโปรแกรม

บรรทดท 4–7 สรางขอมลแบบยเนยนชอ student โดยมตวแปร name และ score

เปนตวแปรภายในขอมลแบบยเนยน และกาหนดตวแปร std1 และ std2 เปนตวแปรชนดยเนยน

บรรทดท 8–11 กาหนดคาเรมตนใหขอมลชนดยเนยน

บรรทดท 13 แสดงคาของตวแปร name ทเปนสมาชกของขอมลแบบยเนยนภายใตตวแปร std1

บรรทดท 14 แสดงคาของตวแปร score ทเปนสมาชกของขอมลแบบยเนยนภายใตตวแปร std1

บรรทดท 17 แสดงคาของตวแปร name ทเปนสมาชกของขอมลแบบยเนยนภายใตตวแปร std2

บรรทดท 18 แสดงคาของตวแปร score ทเปนสมาชกของขอมลแบบยเนยนภายใตตวแปร std2

Page 356: การเขียนโปรแกรมคอมพิวเตอร ์portal5.udru.ac.th/ebook/pdf/upload/17P88t2O788B98583682.pdfรูปภาพบางส่วนให

บทท 9 โครงสรางและยเนยน

339

ตวอยางท 9.13 โปรแกรมแสดงการเขาถงและการกาหนดคาตวแปรภายในขอมลแบบยเนยน

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34

#include <stdio.h> #include <string.h> void main(void) { struct student2 { long int code; char name[80]; } A,B; union student1 { long int code; char name[80]; } C,D; //Structure A.code = 551350001; strcpy(A.name,"One"); B.code = 551310002; strcpy(B.name,"Two"); printf("Code : %li\tName : %s\n",A.code,A.name); printf("Code : %li\tName : %s\n",B.code,B.name); //Union C.code = 551350001; printf("Code : %li\t",C.code); strcpy(C.name,"One"); printf("Name : %s\n",C.name); D.code = 551310002; printf("Code : %li\t",D.code); strcpy(D.name,"Two"); printf("Name : %s\n",D.name); }

ผลลพธของโปรแกรม Code : 551350001 Name : One Code : 551310002 Name : Two Code : 551350001 Name : One Code : 551310002 Name : Two

จากตวอยางของโจทยในสวนของลกษณะขอมลตวแปรแบบยเนยนจะเปนการใชหนวยความจารวมกนดงนนจะมเพยงสมาชกเพยงตวเดยวเทานนทใชหนวยความจาในขณะนน หากตองการแสดงผลลพธควรจะสงพมพคาของสมาชกตวดงกลาวกอนแลวคอย

Page 357: การเขียนโปรแกรมคอมพิวเตอร ์portal5.udru.ac.th/ebook/pdf/upload/17P88t2O788B98583682.pdfรูปภาพบางส่วนให

บทท 9 โครงสรางและยเนยน

340

กาหนดคาใหกบสมาชกตวอนตอไป ดงแสดงในตวอยางโปรแกรมในบรรทดท 25-33 ดงนนการใชตวแปรประเภทนจงควรระวงเปนพเศษ

อธบายโปรแกรม

บรรทดท 5–9 สรางขอมลแบบโครงสรางชอ student1 โดยม A, B เปนตวแปรชนดขอมลแบบโครงสราง

บรรทดท 10–14 สรางขอมลแบบยเนยนชอ student2 โดยม C, D เปนตวแปรชนดขอมลแบบยเนยน

บรรทดท 17-22 แสดงคาของตวแปรแตละตวทเปนสมาชกของขอมลแบบโครงสราง บรรทดท 25-33 แสดงคาของตวแปรแตละตวทเปนสมาชกของขอมลแบบยเนยน

9.2.4 การรบขอมลของตวแปรภายในขอมลแบบยเนยน

การรบขอมลจากแปนพมพสามารถใชฟงกชน gets() ในการรบขอมลสตรง และ getchar() ในการรบขอมลตวอกษรได เชนเดยวกนกบตวแปรชนดโครงสราง เชน

gets(emp.name);

หมายถง การรบขอมลจากแปนพมพมาเกบไวในตวแปร name ทเปนสมาชกของขอมลแบบยเนยนภายใตตวแปร emp ซงตวแปร name จะตองเกบขอมลสตรง

std1.grade = getchar()

หมายถง การรบขอมลจากแปนพมพมาเกบไวในตวแปร grade ทเปนสมาชกของขอมลแบบยเนยนภายใตตวแปร std1 ซงตวแปร grade จะตองเกบขอมลตวอกษร

Page 358: การเขียนโปรแกรมคอมพิวเตอร ์portal5.udru.ac.th/ebook/pdf/upload/17P88t2O788B98583682.pdfรูปภาพบางส่วนให

บทท 9 โครงสรางและยเนยน

341

ตวอยางท 9.14 โปรแกรมแสดงการรบขอมลของตวแปรภายในขอมลแบบยเนยน

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28

#include<stdio.h> #include<stdlib.h> main(){ struct data{ int a; float b; char c[10]; char d; }test; char temp[10]; printf("Enter Integer :"); gets(temp); test.a = atoi(temp); printf("a = %d\n",test.a); printf("Enter Float :"); gets(temp); test.b = atof(temp); printf("b = %.2f\n",test.b); printf("Enter String :"); gets(test.c); printf("c = %s\n",test.c); printf("Enter Character :"); test.d = getchar(); printf("d = %c\n",test.d); }

ผลลพธของโปรแกรม Enter Integer :99 a = 99 Enter Float :88.88 b = 88.88 Enter String :Hello Dr. c = Hello Dr. Enter Character :A d = A

อธบายโปรแกรม

บรรทดท 2 ทาการรวมไฟลสวนหว stdlib.h เขาไวในการแปลโปรแกรม เพอเรยกใชฟงกชนมาตรฐาน atoi() และ atof()

Page 359: การเขียนโปรแกรมคอมพิวเตอร ์portal5.udru.ac.th/ebook/pdf/upload/17P88t2O788B98583682.pdfรูปภาพบางส่วนให

บทท 9 โครงสรางและยเนยน

342

บรรทดท 4–9 สรางขอมลแบบยเนยนชอ data โดยมตวแปร a, b, c และ d เปนตวแปรภายในขอมลแบบยเนยน และกาหนดตวแปร test เปนตวแปรชนดยเนยน

บรรทดท 10-14 รบคาขอมลสายอกขระจากแปนพมพ เขามาเกบไวในตวแปรชวคราว ซงกาหนดเปนตวแปร temp จากนนใชฟงกชนมาตรฐาน atoi()

แปลงชนดขอมลของตวแปร temp จากสายอกขระเปนเลขจานวนเตม แลวจงเกบคาลงในตวแปร a และสดทายแสดงคาตวแปรททาการรบคาเขามา

บรรทดท 16-19 รบคาขอมลสายอกขระจากแปนพมพ เขามาเกบไวในตวแปรชวคราว ซงกาหนดเปนตวแปร temp จากนนใชฟงกชนมาตรฐาน atof()

แปลงชนดขอมลของตวแปร temp จากสายอกขระเปนเลขจานวนจรง แลวจงเกบคาลงในตวแปร b และสดทายแสดงคาตวแปรททาการรบคาเขามา

บรรทดท 21-23 รบคาขอมลสายอกขระจากแปนพมพ แลวเกบคาลงในตวแปร c

และสดทายแสดงคาตวแปรททาการรบคาเขามา บรรทดท 25-27 รบคาขอมลตวอกษรจากแปนพมพ แลวเกบคาลงในตวแปร d และ

สดทายแสดงคาตวแปรททาการรบคาเขามา

9.2.5 ขอมลแบบยเนยนซอนขอมลแบบยเนยน

จากเนอหาทผานมาชนดขอมลแบบยเนยนสามารถประกอบดวยสมาชกตางๆ ทมชนดขอมลทแตกตางกนได แตนอกเหนอจากการกาหนดตวแปรดงกลาวยงสามารถนายเนยนหนงใหเปนสมาชกของยเนยนตวอนไดดวย เปรยบเสมอนการซอนกนของยเนยน ซงจะมความคลายคลงเชนเดยวกบโครงสรางซอนโครงสราง แตเรามกจะไมนยมการทายเนยนซอนยเนยนเนองจากหนวยความจาของยเนยนจะใชพนทหนวยความจาเดยวกน ดงนนสมาชกทกตวจะใชพนทหนวยความจาเดยวกน ทาใหตวแปรชนดยเนยนสามารถใชสมาชกไดทละตวเทานน ซงการใชงานจะตองใชอยางระมดระวงไมเชนนนแลวจะเกดความผดพลาดของขอมล สวนการเขาถงสมาชกขอมลแบบยเนยนซอนขอมลแบบยเนยนมรปแบบเชนเดยวกนกบขอมลแบบโครงสราง

Page 360: การเขียนโปรแกรมคอมพิวเตอร ์portal5.udru.ac.th/ebook/pdf/upload/17P88t2O788B98583682.pdfรูปภาพบางส่วนให

บทท 9 โครงสรางและยเนยน

343

ตวอยางท 9.15 โปรแกรมแสดงการใชขอมลแบบยเนยนซอนขอมลแบบยเนยน

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19

#include<stdio.h> main(){ union score{ int midterm; int final; }; union student{ union score s; }std1,std2; std1.s.midterm = 50; printf("Midterm = %d\n",std1.s.midterm); std1.s.final = 30; printf("Final = %d\n",std1.s.final); printf("Total score = d\n",std1.s.midterm+std1.s.final); printf("****************************\n"); }

ผลลพธของโปรแกรม Midterm = 50 Final = 30 Total score = 60 ****************************

สงเกตในสวนของ Total score = 60 จะมความผดพลาด ซงในการเขยนโปรกรมจะตองระวงขอผดพลาดในสวนน ทาใหลกษณะการทางานในรปแบบนไมเปนทนยมนกในหมนกเขยนโปรแกรม ถงแมวาจะเปนการประหยดหนวยความจาแตกอาจจะทาใหมความผดพลาดของขอมลเกดขนได

อธบายโปรแกรม

บรรทดท 3–6 สรางขอมลแบบยเนยนชอ score โดยมตวแปร midterm และ final

เปนตวแปรภายในขอมลแบบยเนยน

บรรทดท 7–9 สรางขอมลแบบยเนยน ชอ student โดยมตวแปร s ทมชนดขอมลแบบยเนยน เปนตวแปรภายในขอมลแบบยเนยน และกาหนดตวแปร std1 และ std2 เปนตวแปรชนดยเนยน

บรรทดท 11-18 กาหนดคาใหกบตวแปรชนดยเนยนและแสดงคาของตวแปรแตละตวทเปนสมาชกของขอมลแบบยเนยน

Page 361: การเขียนโปรแกรมคอมพิวเตอร ์portal5.udru.ac.th/ebook/pdf/upload/17P88t2O788B98583682.pdfรูปภาพบางส่วนให

บทท 9 โครงสรางและยเนยน

344

9.2.6 แถวลาดบกบขอมลแบบยเนยน

การสรางตวแปรแถวลาดบใหมชนดขอมลแบบยเนยน มรปแบบ คอ

การเขาถงสมาชกของตวแปรแถวลาดบทมชนดขอมลแบบยเนยน มรปแบบ คอ

เชน union employee{

char id[10];

char name[15];

char surname[15];

char department[15];

float salary;

}emp[10];

emp[4].id คอการเขาถงรหสของพนกงานคนท 5

emp[9].department คอการเขาถงแผนกของพนกงานคนท 10

emp[0].name คอการเขาถงชอของพนกงานคนท 1

union ชอขอมลแบบยเนยน{

ชนดของขอมลตวท 1 ชอตวแปรตวท 1;

ชนดของขอมลตวท 2 ชอตวแปรตวท 2;

ชนดของขอมลตวท n ชอตวแปรตวท n;

}ชอตวแปรชนดยเนยน[ขนาดของแถวลาดบ];

ชอตวแปรชนดยเนยน[ดรรชน].ชอสมาชกของขอมลแบบยเนยน

Page 362: การเขียนโปรแกรมคอมพิวเตอร ์portal5.udru.ac.th/ebook/pdf/upload/17P88t2O788B98583682.pdfรูปภาพบางส่วนให

บทท 9 โครงสรางและยเนยน

345

ตวอยางท 9.16 โปรแกรมแสดงการสรางตวแปรแถวลาดบใหมชนดขอมลแบบยเนยน

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24

#include<stdio.h> #include<stdlib.h> main(){ union student{ int score; }std1[5]; char temp[10]; int i,sum=0; float avg; for(i=0;i<3;i++){ printf("Enter Score[%d] :",i+1); gets(temp); std1[i].score = atoi(temp); sum = sum + std1[i].score; } avg = sum/3; printf("*********************************\n"); for(i=0;i<3;i++){ printf("Student[%d]\n",i+1); printf("\tScore = %d\n",std1[i].score); } printf("*********************************\n"); printf("Average Score = %.2f\n",avg); }

ผลลพธของโปรแกรม Enter Score[1] :80 Enter Score[2] :90 Enter Score[3] :100 ********************************* Student[1] Score = 80 Student[2] Score = 90 Student[3] Score = 100 ********************************* Average Score = 90.00

อธบายโปรแกรม

บรรทดท 4–6 สรางขอมลแบบยเนยนชอ student โดยมตวแปร score เปนตวแปรภายในขอมลแบบยเนยนและกาหนดใหตวแปร std เปนตวแปรแถวลาดบขนาด 5 ชอง ใหเปนตวแปรชนดยเนยน

Page 363: การเขียนโปรแกรมคอมพิวเตอร ์portal5.udru.ac.th/ebook/pdf/upload/17P88t2O788B98583682.pdfรูปภาพบางส่วนให

บทท 9 โครงสรางและยเนยน

346

บรรทดท 10–15วนซารบคาสมาชกของตวแปรแถวลาดบทมชนดขอมลแบบยเนยน

จานวน 3 รอบ เพอหาคะแนนเฉลยของนกศกษาทง 3 คน

บรรทดท 17–21วนซาแสดงคาสมาชกของตวแปรแถวลาดบทมชนดขอมลแบบยเนยน

จานวน 3 รอบ

บรรทดท 23 แสดงคะแนนเฉลย

Page 364: การเขียนโปรแกรมคอมพิวเตอร ์portal5.udru.ac.th/ebook/pdf/upload/17P88t2O788B98583682.pdfรูปภาพบางส่วนให

บทท 9 โครงสรางและยเนยน

347

บทสรป

ในบทนไดกลาวถงขอมลแบบโครงสรางและขอมลแบบยเนยนโดยขอมลแบบโครงสรางคอการรวมกลมของขอมลทมชนดขอมลแตกตางกน แตมความสมพนธกน มาเกบเขาไวภายในโครงสรางเดยวกนภายใตชอเพยงชอเดยว ดงเชนการเกบขอมลของนกศกษาของแตละคนอาจจะมขอมลในการจดเกบคอ ชอ นามสกล รหสนกศกษา เกรดเฉลย ประวตนกศกษา เปนตน การนาเอาขอมลตางๆ มารวมไวภายในโครงสรางเดยวกนเพอความเหมาะสมในการเขยนโปรแกรมเปนหมวดหมสงผลทาใหการเขยนโปรแกรมมประสทธภาพมากยงขน ขอมลแบบยเนยนจะมความคลายคลงกบขอมลชนดของโครงสรางแตแตกตางกนทหนวยความจาทใชในการเกบขอมลโดยขอมลแบบยเนยนตวแปรหลายตวสามารถใชหนวยความจารวมกนได สวนขอมลแบบโครงสรางสมาชกแตละตวจะใชหนวยความจาในการจดเกบขอมลทแยกกนสงผลทาใหมการใชหนวยความจาทนอยกวาขอมลแบบโครงสราง แตอยางไรกตามขอมลแบบยเนยนไมเปนทนยมใชกนเนองจากหนวยความจาของขอมลแบบยเนยนจะใชพนทหนวยความจาเดยวกน ดงนนสมาชกทกตวจะใชพนทหนวยความจาเดยวกน

ทาใหตวแปรชนดยเนยนสามารถใชสมาชกไดทละตวเทานนไมสามารถใชพรอมกนได เพราะถาใชพรอมกนจะเกดการซาซอนของขอมลสงผลทาใหขอมลมความผดพลาด

Page 365: การเขียนโปรแกรมคอมพิวเตอร ์portal5.udru.ac.th/ebook/pdf/upload/17P88t2O788B98583682.pdfรูปภาพบางส่วนให

บทท 9 โครงสรางและยเนยน

348

แบบฝกหดทบทวน

1. ขอมลแบบโครงสรางคออะไรจงอธบายพรอมยกตวอยาง 2. จงอธบายขอดของการเขยนโปรแกรมแบบโครงสรางและประโยชน

3. จงสรางขอมลชนดโครงสรางทมลกษณะดงน

3.1 เศษสวน ซงประกอบดวย เศษ และ สวน

3.2 ขอมลบคคล ซงประกอบดวย ชอ สวนสง นาหนก 3.3 วนท ซงประกอบดวยขอมลยอยคอ วนท เดอนท ป

3.4 เวลา ซงประกอบดวย ชวโมง นาท วนาท

3.5 ขอมลนกศกษา ซงประกอบดวย รหสประจาตว เพศ ชอนกศกษา วนเกด อาย ทอย และเบอรโทรศพท

4. จงอธบายวธการเขาถงตวแปรภายในขอมลแบบโครงสรางพรอมยกตวอยางใหชดเจน

5. ใหออกแบบชนดขอมลโครงสรางดงตอไปน

Name Height Krit 175 Noi 170 Porn 165 In 170 Meaw 166

พรอมทงเขยนโปรแกรมเพอหาคาเฉลยของสวนสงทงหมดแลวแสดงผลลพธออกทางหนาจอ 6. จงตรวจสอบโปรแกรมดงตอไปนวามขอผดพลาดตรงไหนและใหแกไขใหถกตองพรอมทงแสดงผลลพธของโปรแกรม

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16

#include <stdio.h> #include <string.h> void main(void) { struct student { long int code; char name[80]; } A,B; A.code = 451350001; A.name = "One"; B.code = 451310001; B.name = "Two"); printf("Code : %li\tName : %s\n",A.code,A.name); printf("Code : %li\tName : %s\n",B.code,B.name); }

Page 366: การเขียนโปรแกรมคอมพิวเตอร ์portal5.udru.ac.th/ebook/pdf/upload/17P88t2O788B98583682.pdfรูปภาพบางส่วนให

บทท 9 โครงสรางและยเนยน

349

7. จงอธบายถงความแตกตางระหวางโครงสรางและยเนยนพรอมทงยกตวอยางใหชดเจน

8. จงอธบายถงหนวยความจาทใชระหวางโครงสรางและยเนยน พรอมทงยกตวอยางในการเขยนโปรแกรมของทงสองแบบเพอแสดงใหเหนภาพผลลพธทชดเจน

9. จงตรวจสอบโปรแกรมดงตอไปนวามขอผดพลาดตรงไหนและใหแกไขใหถกตองพรอมทงแสดงผลลพธของโปรแกรม

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16

#include <stdio.h> #include <string.h> void main(void) { union student { long int code; int sex; char name[80+1]; } a; a.code = 50123001; printf("code : %li\n",a.code); strcpy(a.name,"test"); printf("name : %s\n",a.name); printf("code : %li\tname : %s\n",a.code,a.name); }

10. จงเขยนโปรแกรมดงตอไปนใหอยในรปแบบยเนยน โดยใหแสดงผลลพธไดเชนเดม

1 2 3 4 5 6 7 8 9

10 11 12

#include <stdio.h> void main(void) { struct student { long int code; char name[80]; }; struct student s[2] = { {36000001,"One"}, {36000002,"Two"} }; printf("Code : %li\tName : %s\n",s[0].code,s[0].name); printf("Code : %li\tName : %s\n",s[1].code,s[1].name); }

Page 367: การเขียนโปรแกรมคอมพิวเตอร ์portal5.udru.ac.th/ebook/pdf/upload/17P88t2O788B98583682.pdfรูปภาพบางส่วนให

บทท 10 ตวช

บทท 10

ตวช

ในบทนจะกลาวถงพนฐานเกยวกบตวชและทอยหนวยความจา (Introduction to

Pointer and Memory Address) สญลกษณสาหรบตวช (Symbol of Pointer) การประกาศตวแปรของตวช (Declarations of Pointer) การกาหนดคาเรมตนของตวช (Initialization of

Pointer) ตวชของตวช (Pointer of Pointer) และตวชและแถวลาดบ (Pointer and Array) โดยตวชจะเปนตวแปรประเภทหนงทถกสรางขนมาโดยอาศยรปแบบของตวชไปยงขอมลตางๆ โดยตวชจะเกบคาทอยของตวแปรแทนทจะเกบขอมลโดยตรง ซงคาทอยจะถกอางองไปยงขอมล ทาใหสามารถนาไปประยกตใชงานในการเขยนโปรแกรมเพอเพมประสทธภาพในการเขยนโปรแกรมบางประเภททเหมาะสม ทาใหโปรแกรมมประสทธภาพทดขน ดงเชนมประโยชนในการลดปรมาณหนวยความจาในการเขยนโปรแกรม หรอมประโยชนในดานการจดการโครงสรางขอมล เปนตน

10.1 พนฐานเกยวกบตวชและทอยหนวยความจา (Introduction to Pointer and Memory Address)

ตวช (Pointer) เปนตวแปรชนดหนงทเกบตาแหนงทอย (Address) แทนการเกบขอมลโดยตรง โดยจะใชคาทอยเปนตวอางองไปยงขอมลทเกบไว โดยหนาทหลกของตวชคอการชไปยงทอยใดๆ เพอจดการกบขอมลตางๆ ทเกบอยในทอยเหลานน ดงนนคาทตวชเกบอยจะไมใชคาขอมลทแทจรงแตเปนคาทอยของตวแปรอน ซงจะตองนาคานชไปยงทอยของตวแปรอนเสยกอนจงจะไดคาทแทจรง

Page 368: การเขียนโปรแกรมคอมพิวเตอร ์portal5.udru.ac.th/ebook/pdf/upload/17P88t2O788B98583682.pdfรูปภาพบางส่วนให

บทท 10 ตวช

352

ลกษณะการทางานของคอมพวเตอรในการนาขอมลตางๆ มาใชงานเชน ตวแปร ขอมล หรอไฟล ตางๆ ซงการทคอมพวเตอรจะเขาถงขอมลเหลานได คอมพวเตอรจะตองนาเอาขอมลเหลานลงหนวยความจาเสยกอน เปนผลทาใหขอมลทตองการเขาถงมทอยทแนนอนในหนวยความจา ดงตวอยางแสดงในรปท 10.1

A B C

Variable

File

Database

B

C

A

File

Database

0005

0011

0015

0030

0033

0040

0045

0016

รปท 10.1 ตวอยางรปแบบของขอมลทจดเกบในหนวยความจา

จากรปเปนการนาเอาขอมลแบบตาง ๆ เขาไวในหนวยความจา โดยทตวแปร A, B, C

ถกเกบไวทตาแหนง 0005 ถง 0016 ซงตวแปรแตละตวกจะมตาแหนงหนวยความจาทถกกาหนดไว สวนแฟมขอมลและฐานขอมลกจะถกจดเกบตามตาแหนงตางๆ ซงการเกบขอมลในลกษณะนทาใหเราสามารถอางองขอมลโดยผานตาแหนงทอยไดโดยงาย ซงเครองมอทใชในการอางองขอมลตางๆ โดยผานตาแหนงทอยคอตวชนนเอง ดงนนถาตองการเปลยนคาตวแปร A กทาการแกไขขอมลทหนวยความจาตาแหนง 0015 ถาตองการแกไขขอมลในไฟล กทาการแกไขขอมลทหนวยความจาตาแหนง 0040 ซงสรปไดวาตวชเปนกลไกในการเขาถงขอมลผานทางหนวยความจานนเอง โดยเราเรยกตวแปรทใชเกบตาแหนงของหนวยความจาทตองการเขาถงวาตวแปรตวช

Page 369: การเขียนโปรแกรมคอมพิวเตอร ์portal5.udru.ac.th/ebook/pdf/upload/17P88t2O788B98583682.pdfรูปภาพบางส่วนให

บทท 10 ตวช

353

จากบททผานมาในการประกาศตวแปรทวไปเปนชนดขอมลพนฐาน เชน int k = 100;

ซงกคอการประกาศตวแปร k มคาเทากบ 100 ทเปนเลขจานวนเตม โดยตวแปร k เกบคาตวเลขจานวนเตม 100 ไว แตถาเปนการประกาศตวแปรทเปนตวชจะกาหนด 100 ใหกบตวแปร k โดยตรงไมได เนองจากหนาทหลกของตวชคอการช ดงนนจะตองชไปยงทอยของตวแปรเสยกอนแลวจงดาเนนการจดการกบขอมลของตวแปรนนได

การกาหนดตาแหนงทอยหนวยความจาขนอยกบสถาปตยกรรมทางดานฮารดแวรและซอฟตแวร เชน MCS-51 อนญาตใหใชตาแหนงหนวยความจาทบซอนกนไดระหวางหนวยความจาภายในและหนวยความจาภายนอก เชน หนวยความจาตาแหนง 20 อาจหมายความถงตาแหนงหนวยความภายในหรอภายนอกกได Z80 บงคบใหหนวยความจาภายในและภายนอกตองไมซากน 80386 หรอสงกวา มกลไกอางองหนวยความจามากกวาทมอยจรงเรยกวาหนวยความจาเสมอน โดยการนาเอาจานบนทกแบบแขง (Hard disk) มาทาเปนหนวยความจา แตถาไมตองการตดตอกบฮารดแวรโดยตรง กจะกระทาผานทางระบบปฏบตการ ซงการอางองตาแหนงหนวยความจาของแตละระบบปฏบตการกไมเหมอนกนอกเชนระบบปฏบตการดอส (DOS) สามารถอางองหนวยความจาได 1 เมกะไบต เทานน สวน EMM386 เปนกลไกททาใหระบบปฏบตการดอสสามารถอางองหนวยความจาไดเกน 1 เมกะไบต โดยทาหนาทสลบเปลยนขอมลทตองการใชงานจรงไวใน 1 เมกะไบต แรก และสลบเอาขอมลทไมไดใชไวในหนวยความจาตาแหนงสงกวา 1 เมกะไบต สวนระบบปฏบตการยนกซ (UNIX) และวนโดวส (Windows) สามารถอางองหนวยความจาไดมากกวาระบบเดมซงสามารถอางองไดจานวนมาก และสนบสนนการใชหนวยความจาเสมอน

ซงจานวนหนวยความจาสงสดทอางองไดขนอยกบรนของระบบปฏบตการ ในปจจบนการอางองตาแหนงทอยสามารถอางองไดจานวนมากทงนเนองจากประสทธภาพของฮารดแวรและประสทธภาพของระบบปฏบตการทมประสทธภาพสงมากขน สวนในการเขยนโปรแกรมภาษาซจะกาหนดตวชเขาถงขอมลทมอยจรงในหนวยความจาเทานน เพราะถาใหผ เขยนโปรแกรมเขาถงหนวยความจาไดทกสวน กอาจจะทาใหผ เขยนโปรแกรมทาการเขาถงตาแหนงหนวยความจาทอาจจะผดพลาดได หรออาจจะไปทาใหสวนของขอมลอนๆ เกดความเสยหายในสวนของระบบปฏบตการจองอย

Page 370: การเขียนโปรแกรมคอมพิวเตอร ์portal5.udru.ac.th/ebook/pdf/upload/17P88t2O788B98583682.pdfรูปภาพบางส่วนให

บทท 10 ตวช

354

10.2 สญลกษณสาหรบตวช (Symbol of Pointer)

ตวชมสญลกษณทสาคญอย 2 ตวคอ สญลกษณแอมเพอรแซนด & และสญลกษณดอกจน * ซงจะเปนสญลกษณทจาเปนสาหรบการใชงานตวชอยางถกตอง

สญลกษณแอมเพอรแซนด &

คอสญลกษณ ทใ ช เ มอตองการเอาคา ตาแหนง ทอย ของตวแปร ท เ กบไ วในหนวยความจาออกมาใชงาน เปนการกาหนดคาวาตองการใหตวช ชไปยงตาแหนงทอยของตวแปรใดๆ ดงแสดงในตวอยาง

ตวอยางท 10.1 ตวอยางการใชงานตวแปรตวชในการใชสญลกษณ &

int *Ptr, a = 100;

Ptr = &a; // หมายความวาตวช Prt เกบคาตาแหนงทอยของตวแปร a

ซงจะหมายความวาตวแปร Ptr ซงเปนตวแปรตวชจะเกบคา AAAA ทซงเปนตาแหนงทอยของตวแปร a ดงแสดงในรปท

รปท 10.2 ตวอยางการใชงานสญลกษณ &

สญลกษณดอกจน *

คอสญลกษณทใชเมอตองการคาทอยในตาแหนงทตวแปรตวชนนชอยออกมาดาเนนการประมวลผลตางๆ ซงเปนการนาคาขอมลทแทจรงทไดมาจากทตวแปรตวช ชไปยงตาแหนงทอยของตวแปรใดๆ ดงแสดงในตวอยาง

Page 371: การเขียนโปรแกรมคอมพิวเตอร ์portal5.udru.ac.th/ebook/pdf/upload/17P88t2O788B98583682.pdfรูปภาพบางส่วนให

บทท 10 ตวช

355

ตวอยางท 10.2 ตวอยางการใชงานตวแปรตวชในการใชสญลกษณดอกจน *

int *Ptr,count,val;

count = 1000;

Ptr = &count; // หมายความวาตวช Prt เกบคาตาแหนงทอยของตวแปร count

val = *Ptr; // หมายความวา val มคาเทากบคาทตวช Ptr ชอย

ซงลกษณะการเกบขอมลในหนวยความจาจะมลกษณะแสดงดงรปท 10.3

0000

FFFF

b

a

BBBBPtr

AAAA

Address

1000val

1000count BBBB

รปท 10.3 ตวอยางการใชงานสญลกษณดอกจน *

ตวอยางท 10.3 ตวอยางการใชงานตวแปรตวชในการใชสญลกษณดอกจน * และแอมเพอรแซนด &

int a,b,c,*d,*Ptr;

a = 25;

Ptr = &a;

b = a;

c = *Ptr;

d = Ptr;

ซงลกษณะการเกบขอมลในหนวยความจาจะมลกษณะแสดงดงรปท 10.4

Page 372: การเขียนโปรแกรมคอมพิวเตอร ์portal5.udru.ac.th/ebook/pdf/upload/17P88t2O788B98583682.pdfรูปภาพบางส่วนให

บทท 10 ตวช

356

รปท 10.4 ตวอยางการทางานของตวแปรตวชในการใช

สญลกษณแอมเพอรแซนด & และดอกจน *

Page 373: การเขียนโปรแกรมคอมพิวเตอร ์portal5.udru.ac.th/ebook/pdf/upload/17P88t2O788B98583682.pdfรูปภาพบางส่วนให

บทท 10 ตวช

357

10.3 การประกาศตวแปรของตวช (Declarations of Pointer)

ตวแปรทจะทาหนาทเปนตวชจะตองดาเนนการประกาศตวแปรของตวชในตอนตนของโปรแกรมกอน จงจะสามารถกาหนดตวแปรนนใหเปนตวแปรทเปนตวชได โดยรปแบบของการประกาศตวแปรตวชคอ

เชน

int *a; ตวแปร a เปนตวแปรตวชชนดขอมลเลขจานวนเตมโดยขนาดขอมลทสามารถเขาถงไดมขนาดเทากบ int (16 บต)

float *b; ตวแปร b เปนตวแปรตวชชนดขอมลเลขจานวนจรงโดยขนาดขอมลทสามารถเขาถงไดมขนาดเทากบ float (32 บต)

long double *c; ตวแปร b เปนตวแปรตวชชนดขอมลเลขจานวนจรงโดยขนาดขอมลทสามารถเขาถงไดมขนาดเทากบ long double (80 บต

char *d; ตวแปร d เปนตวแปรตวชชนดขอมลตวอกษร

ในการประกาศตวแปรตวชหากมการประกาศตวแปรใหเปนชนดขอมลประเภทใดแลว ตวแปรตวชจะตองชไปยงตวแปรทมชนดขอมลชนดเดยวกนหากไมเชนนนแลวจะเกดความผดพลาดของโปรแกรม ดงเชนกาหนดให

int a = 5;

int *Ptr1;

char b = 10;

char *Ptr2;

float c = 9.99;

float *Ptr3;

ชนดขอมล *ชอตวแปรตวช;

Page 374: การเขียนโปรแกรมคอมพิวเตอร ์portal5.udru.ac.th/ebook/pdf/upload/17P88t2O788B98583682.pdfรูปภาพบางส่วนให

บทท 10 ตวช

358

ดงนนหากมการกาหนด

Ptr1 = &a; ถกตองตามรปแบบ เปนรปแบบของขอมลประเภทเดยวกน

300Ptr1

5a

100

Address

300

Address

Ptr1=&a;

Ptr2 = &b; ถกตองตามรปแบบ เปนรปแบบของขอมลประเภทเดยวกน

400Ptr2

Ab

100

Address

400

Address

Ptr2=&b;

Ptr3 = &c; ถกตองตามรปแบบ เปนรปแบบของขอมลประเภทเดยวกน

Page 375: การเขียนโปรแกรมคอมพิวเตอร ์portal5.udru.ac.th/ebook/pdf/upload/17P88t2O788B98583682.pdfรูปภาพบางส่วนให

บทท 10 ตวช

359

Ptr1 = &b; จะเกดความผดพลาดของโปรแกรม เนองจากตวตวตวชเปนชนดขอมลจานวนเตม แตชไปยงตวแปร b ทมชนดขอมลเปนตวอกษร (คนละรปแบบของขอมล)

Ptr2 = &c; จะเกดความผดพลาดของโปรแกรม เนองจากตวตวตวชเปนชนดขอมลตวอกษร แตชไปยงตวแปร c ทมชนดขอมลเปนจานวนจรง (คนละรปแบบของขอมล)

ในการใชงานตวแปรตวชสามารถชไปยงตวแปรตวเดยวได เชนกาหนดให

int a = 10;

int *x,*y,*z;

x = &a;

y = &b;

z = &c;

Page 376: การเขียนโปรแกรมคอมพิวเตอร ์portal5.udru.ac.th/ebook/pdf/upload/17P88t2O788B98583682.pdfรูปภาพบางส่วนให

บทท 10 ตวช

360

`ในการใชงานของตวแปรตวชในภาษาซ การกาหนดตาแหนงหนวยความจาทตองการเขาถง เราไมสามารถกาหนดไดโดยตรงเชน

int *a;

a = 0xFFFF;

เพราะถาใหผ เขยนโปรแกรมเขาถงหนวยความจาไดอยางเสร จะทาใหผ เขยนโปรแกรมทาการเขาถงตาแหนงหนวยความจาทไมมขอมลอยจรง จะทาใหผ เขยนโปรแกรมอาจทาการแกไขขอมลในหนวยความจาในตาแหนงทโปรแกรมอนทางานอย ทาใหโปรแกรมอนทางานผดพลาดได และอาจจะทาใหผ เขยนโปรแกรมอาจทาการแกไขคาในหนวยความจาทระบบปฏบตการจองอย ทาใหระบบปฏบตการทางานผดพลาด จนทาใหระบบเกดความเสยหาย ดงนนในภาษาซจงกาหนดตวชเขาถงขอมลทมอยจรงในหนวยความจาเทานน เชนถาเรามตวแปร a ในหนวยความจา เราสามารถขอทราบตาแหนงของตวแปร a ไดโดยการวางเครองหมายแอมเพอรแซนดหรอเรยกวาแอนด & ไวขางหนาตวแปรดงน

int a;

int *Ptr;

Ptr = &a;

กจะทาใหตวแปร Ptr เกบตาแหนงหนวยความจาทตวแปร a จองไว

Page 377: การเขียนโปรแกรมคอมพิวเตอร ์portal5.udru.ac.th/ebook/pdf/upload/17P88t2O788B98583682.pdfรูปภาพบางส่วนให

บทท 10 ตวช

361

สาหรบวธการกาหนดคาในหนวยความจาผานตวแปรตวชจะตองมเครองหมายดอกจน * เหมอนกบตอนประกาศตวแปรและเราสามารถตวแปรตวชเปรยบเสมอนกบตวแปรธรรมดาทวไป เชนจากโปรแกรมน บรรทดสดทายใหความหมายเหมอนกน

int a;

int *Ptr;

Ptr = &a;

a = 10

int a;

int *Ptr;

Ptr = &a;

*Ptr = 10

ตวอยางท 10.4 การประกาศและใชงานตวแปรตวช

1 #include <stdio.h> 2 main() 3 { 4 int a=5; 5 float b=9.99f; 6 int *Ptra; 7 float *Ptrb; 8 Ptra = &a; 9 Ptrb = &b; 10 printf("a = %i\n",a); 11 printf("*Ptra = %i\n",*Ptra); 12 printf("Ptra = %p\n",Ptra); 13 printf("b = %f\n",b); 14 printf("*Ptrb = %f\n",*Ptrb); 15 printf("Ptrb = %p\n",Ptrb); 16 }

ผลลพธของโปรแกรม a = 5 *Ptra = 5 Ptra = FFF4 b = 9.9900000 *Ptrb = 9.9900000 Ptrb = FFF0

อธบายโปรแกรม

บรรทดท 4-5 เปนการประกาศตวแปร a และประกาศตวแปร b

บรรทดท 6-7 เปนการประกาศตวแปรตวช

Page 378: การเขียนโปรแกรมคอมพิวเตอร ์portal5.udru.ac.th/ebook/pdf/upload/17P88t2O788B98583682.pdfรูปภาพบางส่วนให

บทท 10 ตวช

362

บรรทดท 8-9 เปนการกาหนดใหตวแปร Ptra เกบตาแหนงหนวยความจาตวแปร a

และตวแปร Ptrb เกบตาแหนงหนวยความจาตวแปร b ตามลาดบ

บรรทดท 10-15 เปนการแสดงคาผลลพธเพอแสดงใหเหนวา *Ptra ใหผลลพธเชนเดยวกนกบตวแปร a และ *Ptrb ใหผลลพธเชนเดยวกบตวแปร b

เมอนาเอาตาแหนงของตวแปร a และ b มาเขยนเปนแผนภาพจะแสดงใหเหนดงรปท

10.5

รปท 10.5 ตวอยางตาแหนงหนวยความจาของขอมลในการใชตวแปรตวช

ตวอยางท 10.5 การประกาศและใชงานตวแปรตวช 2 ตว ชไปยงหนวยความจาตาแหนงเดยวกน

1 #include <stdio.h> 2 main() 3 { 4 int a=10; 5 int *x,*y; 6 x = y = &a; 7 printf("%i %i %i\n",a,*x,*y); 8 *x = 20; 9 printf("%i %i %i\n",a,*x,*y); 10 *y = 30; 11 printf("%i %i %i\n",a,*x,*y); 12 }

ผลลพธของโปรแกรม 10 10 10 20 20 20 30 30 30

Page 379: การเขียนโปรแกรมคอมพิวเตอร ์portal5.udru.ac.th/ebook/pdf/upload/17P88t2O788B98583682.pdfรูปภาพบางส่วนให

บทท 10 ตวช

363

อธบายโปรแกรม

บรรทดท 4-5 เปนการประกาศตวแปร a และประกาศตวแปร x และ y เปนตวแปรตวช

บรรทดท 6 เปนการกาหนดใหทงตวแปรตวช x และ y เกบตาแหนงหนวยความจาของตวแปร a ดงนนการแกไขคาหนวยความจาตาแหนงนผานตวแปร x ในบรรทดท 8 กจะทาใหคาของ a เปลยนไปตาม แตเรากสามารถแกไขคาในหนวยความตาแหนงตวแปร a ดวยแปร y ไดดวยเชนกนแสดงในบรรทดท 10

บรรทดท 8,10 การแกไขคาหนวยความจาตาแหนงนผานตวแปร x และ y ซงสงผลทาใหคาของตวแปรเปลยนตาม

บรรทดท 7,9,11 เปนการแสดงคาผลลพธเพอแสดงใหเหนวาตวแปรตวช ชไปยงหนวยความจาตาแหนงเดยวกน

ตวอยางท 10.6 การประกาศและใชงานตวแปรตวช ทชหนวยความจาตาแหนงทมชนดขอมลไมตรงกน

1 #include <stdio.h> 2 main() 3 { 4 int a=99; 5 float b=99.99; 6 int *Ptra; 7 float *Ptrb; 8 Ptra = b; 9 Ptrb = a; 10 }

ผลลพธของโปรแกรม error C2440: '=' : cannot convert from 'int' to 'float *'

อธบายโปรแกรม

บรรทดท 4-5 เปนการประกาศตวแปร a เปนชนดขอมลจานวนเตม และประกาศตวแปร b เปนชนดขอมลทศนยม

บรรทดท 6-7 เปนการประกาศตวแปรตวช Ptra เกบตาแหนงหนวยความจาขนาด16 บต ตามขนาดขอมลของตวแปรชนดทเปนจานวนเตม (int) และ Ptrb เกบตาแหนงหนวยความจาขนาด 32 บต ตามขนาดขอมลของตวแปรชนดทเปนทศนยม (float)

Page 380: การเขียนโปรแกรมคอมพิวเตอร ์portal5.udru.ac.th/ebook/pdf/upload/17P88t2O788B98583682.pdfรูปภาพบางส่วนให

บทท 10 ตวช

364

บรรทดท 8-9 กาหนดใหตวแปร Ptra เกบตาแหนงขอมลของ b และกาหนดใหตวแปร Ptrb เกบตาแหนงขอมลของ a ซงจดนจะทาใหการแปลโปรแกรมไมผานเนองจากขนาดขอมลไมเทากน และเปนคนละชนดขอมล

ตวอยางท 10.7 การใชงานตวแปรตวชและฟงกชน scanf

1 #include <stdio.h> 2 main() 3 { 4 int a,*Ptra; 5 Ptra = &a; 6 scanf("%i",&a); 7 printf("%i\n",a); 8 scanf("%i",Ptra); 9 printf("%i\n",*Ptra); 10 }

ผลลพธของโปรแกรม 5 5 10 10

อธบายโปรแกรม

บรรทดท 4 เปนการประกาศตวแปร a เปนชนดขอมลจานวนเตม และประกาศตวแปร Ptra เปนตวแปรตวช

บรรทดท 5 เปนการกาหนดตวแปรตวช Ptra เกบตาแหนงหนวยความจาของตวแปร a

บรรทดท 6,8 เปนการรบคาขอมลเพอเกบไวยงตวแปร โดยจะตองระบตาแหนงหนวยความจาของตวแปรในกรณใชในรปแบบปกต แตถาใชในกรณตวแปรตวชเราสามารถใชตวชเพอแทนได

บรรทดท 7,9 เปนการแสดงคาผลลพธ

Page 381: การเขียนโปรแกรมคอมพิวเตอร ์portal5.udru.ac.th/ebook/pdf/upload/17P88t2O788B98583682.pdfรูปภาพบางส่วนให

บทท 10 ตวช

365

ตวอยางท 10.8 การใชงานตวแปรตวชและฟงกชน scanf ทผดวธ

1 #include <stdio.h> 2 main() 3 { 4 int *Ptra; 5 scanf("%i",Ptra); 6 printf("%i\n",*Ptra); 7 }

ผลลพธของโปรแกรม

อธบายโปรแกรม

บรรทดท 4 เปนการประกาศตวแปร Ptra เปนตวแปรตวช บรรทดท 5 เปนการรบคาขอมลจากแผงแปนอกขระแลวเกบคาลงในตาแหนงท

ไมสามารถระบได ซงอาจจะเปนตาแหนงของโปรแกรมอนๆ ซงอาจจะทาใหเกดความผดพลาดได

บรรทดท 6 เปนการแสดงคาผลลพธ

10.4 การกาหนดคาเรมตนของตวช (Initialization of Pointer)

การกาหนดคาเรมตนของตวชคอการกาหนดคาเรมตนของตวชวาใหชไปยงตาแหนงใดในหนวยความจา การกาหนดคาเรมตนไมวาจะเปนการประกาศกบตวแปรใดๆ เชนตวแปรพนฐานทวไปหรอตวแปรแบบแถวลาดบ ถาเราไมกาหนดคาเรมตนกจะไมสามารถทราบคาขอมลทจะดาเนนการ ซงถาเราไมกาหนดคาเรมตนอาจจะเปนคาทไมมความหมายใดๆ เปนคาทไมตองการและเมอนามาประมวลผลของโปรแกรมกจะเกดความผดพลาด ดงนนการใชงานตวชจะตองมการกาหนดคาเรมตนของตวชกอน ดงเชนตวแปรตวช x ไมทราบตาแหนงทจะชไปดงรปท 10.6

รปท 10.6 การประกาศตวแปรตวชทไมกาหนดคาเรมตน

Page 382: การเขียนโปรแกรมคอมพิวเตอร ์portal5.udru.ac.th/ebook/pdf/upload/17P88t2O788B98583682.pdfรูปภาพบางส่วนให

บทท 10 ตวช

366

รปแบบของการกาหนดคาเรมตนตวแปรตวชคอ

เชน

int a = 100;

int *Ptr;

จากรปในขนตอนนเปนการประกาศตวแปร a และ ประกาศตวแปรตวช Ptr ซงยงไมไดมการชไปยงตาแหนงใดๆ Ptr = &a;

จากรปในขนตอนนเปนการชไปยงตวแปร a ดงนน ตวแปรตวชจงเกบคาตาแหนงทอยของตวแปร a นนคอ ตาแหนงท 300

ตวแปรตวช = &ชอตวแปรทตองการช;

Page 383: การเขียนโปรแกรมคอมพิวเตอร ์portal5.udru.ac.th/ebook/pdf/upload/17P88t2O788B98583682.pdfรูปภาพบางส่วนให

บทท 10 ตวช

367

*Ptr = 50;

จากรปในขนตอนนเปนนาคา 50 ไปเกบไวยง *Ptr ทชอย นนกคอเกบไวทตวแปร a

เพราะการกระทาใดๆ กบคาของตวแปร *Ptr กเปนการกระทากบคาของตวแปร a นนเอง ซง *Ptr = 50; กมความหมายเชนเดยวกนกบ a = 50;

ในการกาหนดคาเรมตนของการดาเนนการกบตวแปรตวชสามารถกระทาได 2 วธดงน

วธท 1 ประกาศตวแปรตวชและการกาหนดคาเรมตนพรอมกน ในชดคาสงเดยวกนเชน

int x;

int *Ptr = &x;

วธท 2 ประกาศตวแปรตวชหลงจากนนกาหนดคาเรมตนในคาสงถดไป

int x;

int *Ptr;

Ptr = &x;

Page 384: การเขียนโปรแกรมคอมพิวเตอร ์portal5.udru.ac.th/ebook/pdf/upload/17P88t2O788B98583682.pdfรูปภาพบางส่วนให

บทท 10 ตวช

368

ตวอยางท 10.9 การใชงานตวแปรตวชในการบวกเลข 2 จานวน

1 #include <stdio.h> 2 main() 3 { 4 int a,b,c; 5 int *Ptra = &a; 6 int *Ptrb = &b; 7 int *Ptrc = &c; 8 printf("First Number = "); 9 scanf("%d",Ptra); 10 printf("Second Number = "); 11 scanf("%d",Ptrb); 12 *Ptrc = *Ptra + *Ptrb; 13 printf("%d + %d = %d ",*Ptra,*Ptrb,*Ptrc);

14 }

ผลลพธของโปรแกรม First Number = 100 Second Number = 200 100 + 200 = 300

อธบายโปรแกรม

บรรทดท 4 เปนการประกาศตวแปร a,b,c เปนจานวนเตม

บรรทดท 5-7 เปนการประกาศตวแปร Ptra, Ptrb, และ Ptrc เปนตวแปรตวช บรรทดท 8,10 แสดงขอความทหนาจอแสดงผล บรรทดท 9,11 รบขอมลผานทางแผงแปนอกขระ บรรทดท 12 ทาการบวกคาของเลขทรบเขาทตวแปรตวช ชอย บรรทดท 13 แสดงผลลพธของโปรแกรม

Page 385: การเขียนโปรแกรมคอมพิวเตอร ์portal5.udru.ac.th/ebook/pdf/upload/17P88t2O788B98583682.pdfรูปภาพบางส่วนให

บทท 10 ตวช

369

10.5 ตวชของตวช (Pointer of Pointer)

ตวชของตวชคอการใชตวแปรตวชทชไปยงทตวชอกตว ซงจะทาใหตวชเกบตาแหนงหนวยของจาของตวแปรตวชได ซงแตกตางจากการทางานแบบเดมทไดกลาวไปในหวขอกอนหนาน โดยตวแปรตวชแบบเดมนนจะเปนตวแปรตวชทชไปยงตาแหนงทอยของตวแปรอนโดยตรง แตตวแปรตวชของตวชจะชไปยงตวชอกตวหนง ดงตวอยางแสดงในรปท 10.7

300Ptr1

5a

100

Address

300

Address

(ก) ตวอยางตวชธรรมดา

(ข) ตวอยางตวชของตวช

รปท 10.7 เปรยบเทยบตวอยางของตวแปรตวชของตวช

จากรปตวแปรตวชของตวชจะชไปยงตาแหนงทอยถดไปดงเชนตวแปรตวช Ptr1 ชไปยงตาแหนงทอยของตวแปร a คอตาแหนงท 300 จากนนชไปยงตาแหนงถดไปโดยชไปยงทอยตาแหนงท 500 อกทหนง

Page 386: การเขียนโปรแกรมคอมพิวเตอร ์portal5.udru.ac.th/ebook/pdf/upload/17P88t2O788B98583682.pdfรูปภาพบางส่วนให

บทท 10 ตวช

370

รปแบบของการประกาศคาตวแปรตวชของตวชสามารถกาหนดโดยมรปแบบดงน

เชน

int **Ptr; เปนการประกาศตวแปรตวชของตวชทชไปยงตวชตวอน

char **Ptr; เปนการประกาศตวแปรตวชของตวชทชไปยงตวชตวอน

การกาหนดคาเรมตนใหกบตวแปรตวชของตวชสามารถกาหนดโดยมรปแบบดงน

เชน

a = 9;

Ptr2 = &a; เปนการกาหนดใหตวแปรตวช ชไปยงตาแหนงทอยของตวแปร a

Ptr1 = &Ptr2; เปนการกาหนดใหตวแปรตวช Ptr1 ชไปยงตาแหนงทอยของตวแปรตวช Ptr2

แสดงดงตวอยางในรปท 10.8

รปท 10.8 ตวอยางการกาหนดคาเรมตนใหกบตวแปรตวชของตวช

ชนดของขอมล **ชอตวแปรตวช;

ตวแปรตวชของตวช = &ชอตวแปรตวชทชไปยงตวแปรอนๆ;

Page 387: การเขียนโปรแกรมคอมพิวเตอร ์portal5.udru.ac.th/ebook/pdf/upload/17P88t2O788B98583682.pdfรูปภาพบางส่วนให

บทท 10 ตวช

371

ตวอยางท 10.10 การใชงานตวแปรตวชของตวช 2 ตวช

1 #include <stdio.h> 2 main() 3 { 4 int a=99; 5 int *Ptr2 = &a; 6 int **Ptr1 = &Ptr2; 7 printf("Address a is %p value is %i\n",&a,a); 8 printf("Address Ptr2 is %p value is %p\n",&Ptr2,Ptr2); 9 printf("Address Ptr1 is %p value is %p\n",&Ptr1,Ptr1); 10 **Ptr1 = 100; 11 printf("a = %i\n",a);12 }

ผลลพธของโปรแกรม Address a is F790 value is 99 Address Ptr2 is F784 value is F790 Address Ptr1 is F778 value is F784 a = 100

อธบายโปรแกรม

บรรทดท 4 เปนการประกาศตวแปร a เปนจานวนเตม

บรรทดท 5 เปนการประกาศตวแปร Ptr2 และชไปยงตาแหนงหนวยความจาของตวแปร a

บรรทดท 6 เปนการประกาศตวแปร Ptr1 และชไปยงตาแหนงหนวยความจาของตวแปร Ptr2

บรรทดท 7-9 เปนการแสดงผลลพธของตวแปรตางๆ บรรทดท 10 กาหนดใหตวแปรตวชของตวช มคาเทากบ 100 ซงแสดงวาท

ตาแหนงทตวแปรตวช Ptr1 ชอยจะมคาเทากบ 100

บรรทดท 11 เปนการแสดงผลลพธของตวแปร a วามการเปลยนแปลงหรอไมหลงจากการใชตวแปรตวชของตวชในการกาหนดคาใหมให

เมอนาเอาตาแหนงของตวแปร a, Ptr1 และ Ptr2 มาเขยนเปนแผนภาพจะแสดงใหเหนดงรปท 10.9

Page 388: การเขียนโปรแกรมคอมพิวเตอร ์portal5.udru.ac.th/ebook/pdf/upload/17P88t2O788B98583682.pdfรูปภาพบางส่วนให

บทท 10 ตวช

372

Ptr1

Ptr2

F778

Address

F784

Address

99Address

F790a

รปท 10.9 แผนภาพการชตาแหนงตางๆ ของขอมลของโปรแกรม

ตวอยางท 10.11 การใชงานตวแปรตวชของตวช 3 ตวช

1 #include <stdio.h> 2 main() 3 { 4 int a=99; 5 int *Ptr3 = &a; 6 int **Ptr2 = &Ptr3; 7 int ***Ptr1 = &Ptr2; 8 printf("Address a is %p value is %i\n",&a,a); 9 printf("Address Ptr3 is %p value is %p\n",&Ptr3,Ptr3); 10 printf("Address Ptr2 is %p value is %p\n",&Ptr2,Ptr2); 11 printf("Address Ptr1 is %p value is %p\n",&Ptr1,Ptr1); 12 ***Ptr1 = 100; 13 printf("a = %i\n",a);14 }

ผลลพธของโปรแกรม Address a is F878 value is 99 Address Ptr3 is F86C value is F878 Address Ptr2 is F860 value is F86C Address Ptr1 is F854 value is F860 a = 100

อธบายโปรแกรม

บรรทดท 4 เปนการประกาศตวแปร a เปนจานวนเตม

Page 389: การเขียนโปรแกรมคอมพิวเตอร ์portal5.udru.ac.th/ebook/pdf/upload/17P88t2O788B98583682.pdfรูปภาพบางส่วนให

บทท 10 ตวช

373

บรรทดท 5 เปนการประกาศตวแปร Ptr3 และชไปยงตาแหนงหนวยความจาของตวแปร a

บรรทดท 6 เปนการประกาศตวแปร Ptr2 และชไปยงตาแหนงหนวยความจาของตวแปร Ptr3

บรรทดท 7 เปนการประกาศตวแปร Ptr1 และชไปยงตาแหนงหนวยความจาของตวแปร Ptr2

บรรทดท 8-11 เปนการแสดงผลลพธของตวแปรตางๆ บรรทดท 12 กาหนดใหตวแปรตวชของตวช มคาเทากบ 100 ซงแสดงวาท

ตาแหนงทตวแปรตวช Ptr1 ชอยจะมคาเทากบ 100 ซงจะเปนการช ไปยงตวแปรตวชของตวชจานวน 3 ระดบ

บรรทดท 13 เปนการแสดงผลลพธของตวแปร a วามการเปลยนแปลงหรอไมหลงจากการใชตวแปรตวชของตวชในการกาหนดคาใหมให

เมอนาเอาตาแหนงของตวแปร a, Ptr1, Ptr2 และ Ptr3 มาเขยนเปนแผนภาพจะแสดงใหเหนดงรปท 10.10

รปท 10.10 แผนภาพการชตาแหนงตางๆ ของขอมลตวชของตวช 3 ตวช

Page 390: การเขียนโปรแกรมคอมพิวเตอร ์portal5.udru.ac.th/ebook/pdf/upload/17P88t2O788B98583682.pdfรูปภาพบางส่วนให

บทท 10 ตวช

374

10.6 ตวชและแถวลาดบ (Pointer and Array)

10.6.1 การใชงานตวชและแถวลาดบ

จากบททผานมาเรองแถวลาดบจะมการอางสมาชกแตละตวโดยจะใชเครองหมายวงเลบเหลยม [ ] แตในการเขยนโปรแกรมภาษาซตวชและแถวลาดบมความสมพนธตอกน

ดงนนเราสามารถใชตวแปรตวช ชไปยงขอมลในแตละชองของแถวลาดบได โดยการกาหนดใหตวแปรตวช ชไปยงตาแหนงทอยทตองการอางถง การระบใหตวแปรตวช ชไปยงชองแรกของแถวลาดบทาไดโดยการกาหนดชอของแถวลาดบใหกบตวแปรตวชซงสามารถทาได 2 รปแบบ

ดงน

รปแบบท 1 กาหนดชอของแถวลาดบใหกบตวแปรตวชโดยตรงดงเชน

int data[10];

int *Ptr;

Ptr = data; กาหนดชอของแถวลาดบใหกบตวแปรตวชโดยตรง โดยจะชไปยงตาแหนงแรกนนคอ data[0]

รปแบบท 2 กาหนดตาแหนงทอยชองแรกของแถวลาดบใหกบตวแปรตวชดงเชน

int data[10];

int *Ptr;

Ptr = &data[0]; กาหนดตาแหนงทอยโดยอางตาแหนงหนวยความจาชองแรกของแถวลาดบ

ในการอางตวแปรแถวลาดบสามารถอางองโดยการเพมหรอลดคาตวแปรตวช ดงนนในการอางองสมาชกในแถวลาดบดวยตวแปรตวชสามารถกระทาไดดงตวอยางดงตอไปน

การอางองตวแปรตวชของแถวลาดบ 1 มต

int a[5] = {1,2,3,4,5,6}

แถวลาดบ ตวแปรตวช a[0] a[1] a[2] a[3] a[4] a[5]

*(a+0) or *(a) or *a *(a+1) *(a+2) *(a+3) *(a+4) *(a+5)

Page 391: การเขียนโปรแกรมคอมพิวเตอร ์portal5.udru.ac.th/ebook/pdf/upload/17P88t2O788B98583682.pdfรูปภาพบางส่วนให

บทท 10 ตวช

375

รปท 10.11 การอางองตวแปรตวชของแถวลาดบ 1 มต

การอางองตวแปรตวชของแถวลาดบ 2 มต

int a[2][5] = { {1,2,3,4,5} , {6,7,8,9,0} }

แถวลาดบ ตวแปรตวช a[0][0] a[0][1] a[0][2] a[0][3] a[0][4] a[1][0] a[1][1] a[1][2] a[1][3] a[1][4]

*(a[0]+0) or *(*(a+0)+0) or *(*(a)+0) or *(*(a)) or **a *(a[0]+1) or *(*(a+0)+1) or *(*a+1) *(a[0]+2) or *(*(a+0)+2) or *(*a+2) *(a[0]+3) or *(*(a+0)+3) or *(*a+3) *(a[0]+4) or *(*(a+0)+4) or *(*a+4) *(a[1]+0) or *(*(a+1)+0) or *(*(a+1)) or **(a+1) *(a[1]+1) or *(*(a+1)+1) *(a[1]+2) or *(*(a+1)+2) *(a[1]+3) or *(*(a+1)+3) *(a[1]+4) or *(*(a+1)+4)

1 2 3 4 5

a[0][0] a[0][1] a[0][2] a[0][3] a[0][4]

*(a[0]+0) *(a[0]+1) *(a[0]+2) *(a[0]+3) *(a[0]+4)

a[0]

6 7 8 9 0

a[1][0] a[1][1] a[1][2] a[1][3] a[1][4]

*(a[1]+0) *(a[1]+1) *(a[1]+2) *(a[1]+3) *(a[1]+4)

a[1]

1 2 3 4 5

a[0][0] a[0][1] a[0][2] a[0][3] a[0][4]

*(*(a+0)+0) *(*(a+0)+1) *(*(a+0)+2) *(*(a+0)+3) *(*(a+0)+4)

a[0]

6 7 8 9 0

a[1][0] a[1][1] a[1][2] a[1][3] a[1][4]

*(*(a+1)+0) *(*(a+1)+1) *(*(a+1)+2) *(*(a+1)+3) *(*(a+1)+4)

a[1]

รปท 10.12 การอางองตวแปรตวชของแถวลาดบ 2 มต

Page 392: การเขียนโปรแกรมคอมพิวเตอร ์portal5.udru.ac.th/ebook/pdf/upload/17P88t2O788B98583682.pdfรูปภาพบางส่วนให

บทท 10 ตวช

376

การอางองตวแปรตวชของแถวลาดบ 3 มต

int a[2][2][4] = { {{1,2,3,4} , {5,6,7,8}}, {{9,10,11,12}, {13,14,15,16}} }

แถวลาดบ ตวแปรตวช a[0][0][0] a[0][0][1] a[0][0][2] a[0][0][3] a[0][1][0] a[0][1][1] a[0][1][2] a[0][1][3] a[1][0][0] a[1][0][1] a[1][0][2] a[1][0][3] a[1][1][0] a[1][1][1] a[1][1][2] a[1][1][3]

*(a[0][0]+0) or *(*(*(a+0)+0)+0) or ***a *(a[0][0]+1) or *(*(*(a+0)+0)+1) *(a[0][0]+2) or *(*(*(a+0)+0)+2) *(a[0][0]+3) or *(*(*(a+0)+0)+3) *(a[0][1]+0) or *(*(*(a+0)+1)+0) *(a[0][1]+1) or *(*(*(a+0)+1)+1) *(a[0][1]+2) or *(*(*(a+0)+1)+2) *(a[0][1]+3) or *(*(*(a+0)+1)+3) *(a[1][1]+0) or *(*(*(a+1)+1)+0) *(a[1][1]+1) or *(*(*(a+1)+1)+1) *(a[1][1]+2) or *(*(*(a+1)+1)+2) *(a[1][1]+3) or *(*(*(a+1)+1)+3) *(a[1][1]+0) or *(*(*(a+1)+1)+0) *(a[1][1]+1) or *(*(*(a+1)+1)+1) *(a[1][1]+2) or *(*(*(a+1)+1)+2) *(a[1][1]+3) or *(*(*(a+1)+1)+3)

a[0][1][0] a[0][1][1] a[0][1][2] a[0][1][3]

1 2 3 4

*(*(*(a+0)+0)+0) *(*(*(a+0)+0)+1) *(*(*(a+0)+0)+2) *(*(*(a+0)+0)+3)

5 6 7 8

*(*(*(a+0)+1)+0) *(*(*(a+0)+1)+1) *(*(*(a+0)+1)+2) *(*(*(a+0)+1)+3)

a[0][0][0] a[0][0][1] a[0][0][2] a[0][0][3]

a[1][1][0] a[1][1][1] a[1][1][2] a[1][1][3]

9 0 10 11

*(*(*(a+1)+0)+0) *(*(*(a+1)+0)+1) *(*(*(a+1)+0)+2) *(*(*(a+1)+0)+3)

12 13 14 15

*(*(*(a+1)+1)+0) *(*(*(a+1)+1)+1) *(*(*(a+1)+1)+2) *(*(*(a+1)+1)+3)

a[1][0][0] a[1][0][1] a[1][0][2] a[1][0][3]

รปท 10.13 การอางองตวแปรตวชของแถวลาดบ 3 มต

Page 393: การเขียนโปรแกรมคอมพิวเตอร ์portal5.udru.ac.th/ebook/pdf/upload/17P88t2O788B98583682.pdfรูปภาพบางส่วนให

บทท 10 ตวช

377

ตวอยางท 10.12 การใชงานตวแปรตวชกบแถวลาดบ

1 #include <stdio.h> 2 main() 3 { 4 int a[5] = {1,2,3,4,5}; 5 int *Ptr; 6 Ptr = a; 7 printf("%i \n",a[0]); 8 printf("%i \n",*Ptr); 9 printf("%i \n",*Ptr + 1); 10 printf("%i \n",*Ptr + 2); 11 printf("%i \n",*(a+3)); 12 printf("%i \n",*(a+4)); 13 printf("%i \n",Ptr[3]);14 }

ผลลพธของโปรแกรม 1 1 2 3 4 5 4

อธบายโปรแกรม

บรรทดท 4 เปนการประกาศตวแปรแถวลาดบทเปนชนดจานวนเตม

บรรทดท 5 เปนการประกาศตวแปร Ptr เปนตวแปรตวช บรรทดท 6 กาหนดตวชของแถวลาดบโดยจะชไปยงตาแหนงแรกนนคอ a[0]

บรรทดท 7-13 เปนการแสดงผลลพธของตวอยางในการใชงานตวแปรตวชกบแถวลาดบ

ตวอยางท 10.13 การใชงานตวแปรตวชกบแถวลาดบ

1 #include <stdio.h> 2 main() 3 { 4 int a[3] = {10,20,30};

5 int b[2][3] = {10,20,30,40,50,60};

6 printf("%i %i %i\n",a[0],a[1],a[2]);

7 printf("%i %i %i\n\n",*(a+0),*(a+1),*(a+2));

8 printf("%i %i %i\n",b[0][0],b[0][1],b[0][2]);

9 printf("%i %i %i\n\n",b[1][0],b[1][1],b[1][2]);

10 printf("%i %i %i\n",*(b[0]+0),*(b[0]+1),*(b[0]+2));

11 printf("%i %i %i\n\n",*(b[1]+0),*(b[1]+1),*(b[1]+2));

12 printf("%i %i %i\n",*(*(b+0)+0),*(*(b+0)+1),*(*(b+0)+2));

Page 394: การเขียนโปรแกรมคอมพิวเตอร ์portal5.udru.ac.th/ebook/pdf/upload/17P88t2O788B98583682.pdfรูปภาพบางส่วนให

บทท 10 ตวช

378

13 printf("%i %i %i\n\n",*(*(b+1)+0),*(*(b+1)+1),*(*(b+1)+2));

14 }

ผลลพธของโปรแกรม 10 20 30 10 20 30 10 20 30 40 50 60 10 20 30 40 50 60 10 20 30 40 50 60

อธบายโปรแกรม

บรรทดท 4 เปนการประกาศตวแปรแถวลาดบ 1 มต ทเปนชนดจานวนเตม

บรรทดท 5 เปนการประกาศตวแปรแถวลาดบ 2 มต ทเปนชนดจานวนเตม

บรรทดท 6-13 เปนการแสดงผลลพธของตวอยางในการใชงานตวแปรตวชกบแถวลาดบ

10.6.2 การสรางแถวลาดบจากตวช ในการใชงานแถวลาดบสามารถสรางตวแปรชดซงสะดวกตอการใชงานในการเขยนโปรแกรมระดบสง แตอยางไรกตามตวแปรชดทถกสรางขนมาอาจจะไมไดถกใชงานตลอดเวลา ซงอาจจะมการใชเพยงชวงใดชวงหนงของแถวลาดบเทานนสงผลทาใหสนเปลองหนวยความจา โดยปญหานสามารถแกไขไดโดยใชกลไกของตวแปรตวชทสามารถยกเลกตวแปรเหลานนได ซงกคอกลไกในการสรางแถวลาดบจากตวช สงทแตกตางของแถวลาดบปกตและแถวลาดบทสรางจากตวชคอการของหนวยความจา โดยแถวลาดบทสรางจากตวช สามารถทจะจองหนวยความจาขณะทโปรแกรมทางานได ในขณะทแถวลาดบปกตจะจองหนวยความจาในขณะการแปลโปรแกรม

ในการจองหนวยความจาในการทาแถวลาดบจะใชฟงกชน malloc() และการคนคาหนวยความจาจะใชฟงกชน free() ซงในการใชฟงกชนเหลานจะตองประกาศในไฟลสวนหวในสวนของ stdlib.h ดวย โดยการจองหนวยความจาและการคนคาหนวยความจามตวอยางรปแบบดงน

Page 395: การเขียนโปรแกรมคอมพิวเตอร ์portal5.udru.ac.th/ebook/pdf/upload/17P88t2O788B98583682.pdfรูปภาพบางส่วนให

บทท 10 ตวช

379

void *malloc(memory_size); free(variable);

โดยคาสง malloc() คอฟงกชนทใชในการจองหนวยความจา ซงจะนาเอาหนวยความจาทจองไวไปใชงานตางๆ ซงในทนเราจะใชฟงกชนนจองหนวยความจาสาหรบการสรางแถวลาดบ โดยฟงกชนนตองการอารกวเมนตขนาดเทากบหนวยความจาทตองการจอง ซงถามการจองหนวยความจาทมากเกนไปกจะไมสามารถจดสรรพนทสาหรบการจองใหไดกจะคนคาศนยกลบมา (NULL) แตถาจองสาเรจกจะคนคาออกมาเปนตวช ดงนนในการใชฟงกชนนจะตองมการตรวจสอบทกครงจงจะทาใหโปรแกรมมประสทธภาพ สวนในการตรวจสอบขนาดของตวแปรจะใชฟงกชน sizeof()

ในการประกาศตวชทจะใชทาเปนแถวลาดบจะตองระบดวยวาเปนแถวลาดบกมตโดยเครองหมายดอกจน * ซง 1 ตวกจะหมายถงแถวลาดบ 1 มต 2 ตวกจะหมายถงแถวลาดบ 2

มต เปนตน ดงแสดงในตารางท 10.1

ตารางท 10.1 การประกาศแถวลาดบแบบปกตและแถวลาดบแบบตวแปรตวช การประกาศแถวลาดบแบบปกต การประกาศแถวลาดบโดยใชตวแปรตวช int a[3]; int *a

int a[3][ 3]; int **a

int a[3][ 3][ 3]; int ***a

ตวอยางท 10.14 การสรางแถวลาดบ 1 มต จากตวแปรตวช

1 #include <stdio.h> 2 #include <stdlib.h> 3 main() 4 { 5 int *Ptr; 6 Ptr = (int *)malloc(3*sizeof(int)); 7 if (Ptr==NULL) 8 { 9 printf("Cannot allocate memory\n"); 10 exit(1); 11 } 12 Ptr[0] = 1; Ptr[1] = 2; Ptr[2] = 3; 13 printf("%i %i %i",*Ptr,*(Ptr+1),*(Ptr+2)); 14 free(Ptr);

15 }

Page 396: การเขียนโปรแกรมคอมพิวเตอร ์portal5.udru.ac.th/ebook/pdf/upload/17P88t2O788B98583682.pdfรูปภาพบางส่วนให

บทท 10 ตวช

380

ผลลพธของโปรแกรม 1 2 3

อธบายโปรแกรม

บรรทดท 5 เปนการประกาศตวแปร Ptr เปนตวแปรตวช บรรทดท 6 เปนการสรางแถวลาดบ 1 มต จากตวแปรตวช ซงถาเปนการสราง

แถวลาดบแบบปกตกจะประกาศเปน int Ptr[3] ซงกคอการสรางแถวลาดบเชนเดยวกนตางกนแตวธการสราง

บรรทดท 7-11 เปนการตรวจสอบวาตวแปรตวชสามารถจดสรรพนทไดหรอไม

บรรทดท 12 เปนการกาหนดคาใหกบแถวลาดบ

บรรทดท 13 เปนการแสดงคาผลลพธในแถวลาดบแตละสมาชก บรรทดท 14 เปนการคนคาหนวยความจา

จากโปรแกรมหากไมมการกาหนดคาใหกบแถวลาดบในบรรทดท 12 ซงจะเปนการนาเอาแถวลาดบมาใชงานโดยไมมการกาหนดคาเรมตนสงผลทาใหไดคาทไมตองการ ซงเปนจดดอยของแถวลาดบทถกสรางโดยตวแปรตวช ซงเมอเปรยบเทยบกบแถวลาดบแบบปกตทสามารถกาหนดคาเรมตนไปพรอมๆ กบการประกาศตวแปร ดงนนเพอแกปญหานจะมการใชฟงกชน calloc() ซงเปนฟงกชนทกาหนดคาเรมตนใหกบแถวลาดบทสรางจากตวแปรตวชใหมคาเปนศนย

ตวอยางท 10.15 การสรางแถวลาดบ 1 มต จากตวแปรตวช โดยกาหนดคาเรมตนพรอมกบการสรางตวแปรแถวลาดบ

1 #include <stdio.h> 2 #include <stdlib.h> 3 main() 4 { 5 int *Ptr; 6 Ptr = (int *)calloc(3 , sizeof(int)); 7 If (Ptr==NULL) 8 { 9 printf("Cannot allocate memory\n"); 10 exit(1); 11 } 12 printf("%i %i %i",* Ptr,*( Ptr +1),*( Ptr +2)); 13 free(Ptr);

14 }

Page 397: การเขียนโปรแกรมคอมพิวเตอร ์portal5.udru.ac.th/ebook/pdf/upload/17P88t2O788B98583682.pdfรูปภาพบางส่วนให

บทท 10 ตวช

381

ผลลพธของโปรแกรม 0 0 0

อธบายโปรแกรม

บรรทดท 5 เปนการประกาศตวแปร Ptr เปนตวแปรตวช บรรทดท 6 เปนการสรางแถวลาดบ 1 มต จากตวแปรตวช โดยจะมการใช

ฟงกชน calloc ในการกาหนดคาเรมตนใหกบแถวลาดบใหมคาเปนศนยในทกสมาชกของแถวลาดบ

บรรทดท 7-11 เปนการตรวจสอบวาตวแปรตวชสามารถจดสรรพนทไดหรอไม

บรรทดท 12 เปนการแสดงคาผลลพธในแถวลาดบแตละสมาชก บรรทดท 13 เปนการคนคาหนวยความจา

สาหรบการสรางแถวลาดบ 2 มต โดยตวแปรตวชจะสามารถสรางไดดงน

เชน

int **a;

การประกาศในลกษณะนหนวยความจายงไมไดถกจองและการแปลโปรแกรมยงไมทราบวาแถวลาดบมขนาดเทาไหร แสดงดงตวอยาง

?

?

a = (int **)malloc(4*sizeof(int *));

การประกาศในลกษณะนทาการระบวาแถวลาดบมตแรกมขนาดเทาไหรแตยงไมทราบขนาดของมตทสอง ซงถามการประกาศในรปแบบนจะสามารถบอกไดวามตแรกมขนาดเทาไหร แสดงดงตวอยาง

Page 398: การเขียนโปรแกรมคอมพิวเตอร ์portal5.udru.ac.th/ebook/pdf/upload/17P88t2O788B98583682.pdfรูปภาพบางส่วนให

บทท 10 ตวช

382

a[0] = (int *)malloc(3*sizeof(int));

a[1] = (int *)malloc(3*sizeof(int));

a[2] = (int *)malloc(3*sizeof(int));

a[3] = (int *)malloc(3*sizeof(int));

a[4] = (int *)malloc(3*sizeof(int));

การประกาศในลกษณะนทาการระบทงสองมตวาแตละมตมขนาดเทาไหรซงหลงจากการประกาศในลกษณะนกสามารถใชงานแถวลาดบไดอยางมประสทธภาพ

a[0]

a1]

a[2]

a[3]

a[4]

เ มอตองการยกเลกการใชงานแถวลาดบทสรางโดยตวแปรตวช ก ทาการคนหนวยความจามตทสองทกๆ ตวกอน ดงน

free(b[0]);

free(b[1]);

free(b[2]);

free(b[3]);

free(b[4]);

Page 399: การเขียนโปรแกรมคอมพิวเตอร ์portal5.udru.ac.th/ebook/pdf/upload/17P88t2O788B98583682.pdfรูปภาพบางส่วนให

บทท 10 ตวช

383

หลงจากนนทาการคนคาหนวยความจามตแรก ดงน

free (a);

?

?

ตวอยางท 10.16 การสรางแถวลาดบ 2 มต จากตวแปรตวช

1 #include <stdio.h> 2 #include <stdlib.h> 3 main() 4 { 5 int **a,i,j; 6 a = (int **)malloc(5*sizeof(int *)); 7 for(i=0;i<5;i++) 8 a[i] = (int *)malloc(2*sizeof(int)); 9 for(i=0;i<5;i++) 10 for(j=0;j<2;j++) 11 { 12 a[i][j] = i*3+j; 13 printf("a[%i][%i] = %i\n",i,j,a[i][j]); 14 } 15 for(i=0;i<5;i++) free(a[i]); 16 free(a);

17 }

ผลลพธของโปรแกรม a[0][0] = 0 a[0][1] = 1 a[1][0] = 3 a[1][1] = 4 a[2][0] = 6 a[2][1] = 7 a[3][0] = 9

Page 400: การเขียนโปรแกรมคอมพิวเตอร ์portal5.udru.ac.th/ebook/pdf/upload/17P88t2O788B98583682.pdfรูปภาพบางส่วนให

บทท 10 ตวช

384

a[3][1] = 10 a[4][0] = 12 a[4][1] = 13

อธบายโปรแกรม

บรรทดท 5 เปนการประกาศตวแปร a เปนตวแปรตวช และตวแปร i และ j เปนตวแปรปกตของเลขจานวนเตม

บรรทดท 6 เปนการจองหนวยความจาของแถวลาดบในมตทหนง บรรทดท 7-8 เปนการจองหนวยความจาของแถวลาดบในมตทสอง บรรทดท 9-14 เปนการกาหนดคาใหกบแถวลาดบ 2 มต และแสดงผลลพธ บรรทดท 15-16 เปนการคนคาหนวยความจา

จากการดาเนนการสรางแถวลาดบจากตวแปรตวชจะเหนวาในขนตอนของการระบในมตทสองนนไมไดกาหนดใหทกๆ แถวมขนาดเทากน ดงนนเราสามารถกาหนดใหแตละแถวมสมาชกทจานวนไมเทากนได ทาใหประหยดหนวยความจาไดมากกวาการสรางแถวลาดบทปกต ซงมกจะใชในกรณทตองการประหยดหนวยความจา เชน

int **a;

a = (int **)malloc(5*sizeof(int *));

a [0] = (int *)malloc(4*sizeof(int));

a [1] = (int *)malloc(2*sizeof(int));

a [2] = (int *)malloc(1*sizeof(int));

a [3] = (int *)malloc(5*sizeof(int));

a [4] = (int *)malloc(3*sizeof(int));

Page 401: การเขียนโปรแกรมคอมพิวเตอร ์portal5.udru.ac.th/ebook/pdf/upload/17P88t2O788B98583682.pdfรูปภาพบางส่วนให

บทท 10 ตวช

385

10.6.3 การเปลยนขนาดของแถวลาดบ

ในการใชงานแถวลาดบทสรางจากตวแปรตวชสามารถเปลยนแปลงไดใหมขนาดทใหญขนไดโดยขอมลยงคงอย ซงในการเปลยนขนาดของแถวลาดบจะใชคาสง realloc() ซงจะตองประกาศไฟลสวนหว stdlib.h เพอใหสามารถใชงานฟงกชนนได ซงมรปแบบในการใชงานคอ

เชน

Ptr = (int *)realloc(Ptr,5*sizeof(int));

Ptr = (char *)realloc(Ptr, 5*sizeof(char));

ซงกคอการเปลยนขนาดของพนทหนวยความจาในการเกบขอมลของแถวลาดบทตวช Ptr ชอยใหสามารถเกบขอมลไดจานวน 5 ตว โดยขอมลเดมยงคงอย

ตวอยางท 10.17 การเปลยนขนาดของแถวลาดบ

1 #include <stdio.h> 2 #include <stdlib.h> 3 main() 4 { 5 int *Ptr; 6 Ptr = (int *)malloc(4*sizeof(int)); 7 if (Ptr==NULL) 8 { 9 printf("Cannot allocate memory\n"); 10 exit(1); 11 } 12 Ptr[0]=0;Ptr[1]=1;Ptr[2]=2;Ptr[3]=3; 13 printf("%i %i %i %i\n",*Ptr,*(Ptr+1),*(Ptr+2),*(Ptr+3)); 14 Ptr = (int *)realloc(Ptr,6*sizeof(int)); 15 Ptr[4]=4;Ptr[5]=5; 16 printf("%i %i %i %i %i %i \n”, *Ptr,*(Ptr+1),

*(Ptr+2),*(Ptr+3),*(Ptr+4),*(Ptr+5)); 17 free(Ptr);

18 }

ผลลพธของโปรแกรม 0 1 2 3 0 1 2 3 4 5

void *realloc(ชอตวแปรตวชทจะเปลยน, ขนาดใหมของหนวยความจาทตองการ)

Page 402: การเขียนโปรแกรมคอมพิวเตอร ์portal5.udru.ac.th/ebook/pdf/upload/17P88t2O788B98583682.pdfรูปภาพบางส่วนให

บทท 10 ตวช

386

อธบายโปรแกรม

บรรทดท 5 เปนการประกาศตวแปร Ptr เปนตวแปรตวช บรรทดท 6 เปนการสรางแถวลาดบ 1 มต จากตวแปรตวช โดยจะมจานวน

สมาชกเปนเลขจานวนเตมจานวน 4 ตว บรรทดท 7-11 เปนการตรวจสอบวาตวแปรตวชสามารถจดสรรพนทไดหรอไม

บรรทดท 12 เปนการกาหนดคาใหกบสมาชกของแถวลาดบแตละตว ซงจะมการกาหนดจานวนสมาชกจานวน 4 ตว

บรรทดท 13 เปนการแสดงคาผลลพธในแถวลาดบแตละสมาชก บรรทดท 14 เปนการเปลยนขนาดของแถวลาดบจากเดมจานวน 4 ตว เปน 6 ตว บรรทดท 15 เปนการกาหนดคาใหกบสมาชกของแถวลาดบเพมอกจานวน 2 ตว บรรทดท 16 เปนการแสดงคาผลลพธในแถวลาดบแตละสมาชก บรรทดท 17 เปนการคนคาหนวยความจา

Page 403: การเขียนโปรแกรมคอมพิวเตอร ์portal5.udru.ac.th/ebook/pdf/upload/17P88t2O788B98583682.pdfรูปภาพบางส่วนให

บทท 10 ตวช

387

บทสรป

ในบทนไดกลาวถงพนฐานเกยวกบตวชและทอยหนวยความจา สญลกษณสาหรบตวช การประกาศตวแปรของตวช การกาหนดคาเรมตนของตวช ตวชของตวช และตวชและแถวลาดบ ซงเปนตวแปรตวหนงททาหนาทชไปยงขอมลตางๆ ทาใหเราสามารถอางองหรอจดการเกยวกบขอมลไดมประสทธภาพมากยงขน เชนการจดการหนวยความจาของขอมลทถกสรางโดยตวแปรตวชจะใชปรมาณหนวยความจาทนอยกวาเปนตน ตวชเปนตวแปรพเศษชนดหนงทเกบตาแหนงทอยแทนการเกบขอมลโดยตรง โดยจะใชคาทอยเปนตวอางองไปยงขอมลทเกบไว โดยหนาทหลกของตวชคอการชไปยงทอยใดๆ เพอจดการกบขอมลตางๆ ทเกบอยในทอยเหลานน ตวชมสญลกษณทสาคญอย 2 ตวคอ สญลกษณแอมเพอรแซนด & และสญลกษณดอกจน * โดยสญลกษณแอมเพอรแซนคอสญลกษณทใชเมอตองการเอาคาตาแหนงทอยของตวแปรทเกบไวในหนวยความจาออกมาใชงาน เปนการกาหนดคาวาตองการใหตวช ชไปยงตาแหนงทอยของตวแปรใดๆ สวนสญลกษณดอกจนคอสญลกษณทใชเมอตองการคาทอยในตาแหนงทตวแปรตวชนนชอยออกมาดาเนนการประมวลผลตางๆ ซงเปนการนาคาขอมลทแทจรงทไดมาจากทตวแปรตวช ชไปยงตาแหนงทอยของตวแปรใดๆ ในการประกาศตวแปรตวชจะตองดาเนนการประกาศตวแปรของตวชในตอนตนของโปรแกรมกอนซงในการประกาศตวแปรตวชหากมการประกาศตวแปรใหเปนชนดขอมลประเภทใดแลว ตวแปรตวชจะตองชไปยงตวแปรทมชนดขอมลชนดเดยวกนหากไมเชนนนแลวจะเกดความผดพลาดของโปรแกรม การกาหนดคาเรมตนของตวชคอการกาหนดคาเรมตนของตวชวาใหชไปยงตาแหนงใดในหนวยความจา ซงถาเราไมกาหนดคาเรมตนอาจจะเปนคาทไมมความหมายใดๆ เปนคาทไมตองการและเมอนามาประมวลผลของโปรแกรมกจะเกดความผดพลาด ดงนนการใชงานตวช จะตองมการกาหนดคาเรมตนของตวชกอน ตวชของตวชคอการใชตวแปรตวชทชไปยงทตวช อกตว ซงจะทาใหตวชเกบตาแหนงหนวยของจาของตวแปรตวชได ตวแปรตวชและแถวลาดบคอตวแปรตวชทดาเนนการกบแถวลาดบซงจากเดมแถวลาดบจะมการอางสมาชกแตละตวโดยจะใชเครองหมายวงเลบเหลยม [ ] แตถาใชตวแปรตวชกบแถวลาดบเราสามารถใชตวแปรตวช ชไปยงขอมลในแตละชองของแถวลาดบได โดยการกาหนดใหตวแปรตวช ชไปยงตาแหนงทอยทตองการอางถง ซงถามการสรางแถวลาดบจากตวแปรตวชจะสามารถทาการเพมประสทธภาพของหนวยความจาทอาจจะมการใชปรมาณทนอยกวาเดมอกทงสามารถเพมจานวนขนาดของหนวยความจาของตวแปรแถวลาดบไดจากเดมจะไมสามารถกระทาได

Page 404: การเขียนโปรแกรมคอมพิวเตอร ์portal5.udru.ac.th/ebook/pdf/upload/17P88t2O788B98583682.pdfรูปภาพบางส่วนให

บทท 10 ตวช

388

ดงนนตวแปรตวชจงเปนตวแปรทมลกษณะเฉพาะพเศษตวแปรหนง ทสามารถเพมประสทธภาพในการเขยนโปรแกรมใหมประสทธภาพยงขนได

Page 405: การเขียนโปรแกรมคอมพิวเตอร ์portal5.udru.ac.th/ebook/pdf/upload/17P88t2O788B98583682.pdfรูปภาพบางส่วนให

บทท 10 ตวช

389

แบบฝกหดทบทวน

1. จงอธบายเกยวกบตวแปรตวช คออะไร มหลกการอยางไร พรอมทงประโยชนของตวแปรชนดน

2. จงอธบายสญลกษณ & และสญลกษณ * ในการใชงานกบตวแปรตวช พรอมทงยกตวอยางประกอบ

3. การสรางแถวลาดบจากตวชมขอดกวาการสรางแถวลาดบแบบปกตอยางไร จงอธบาย 4. จงอธบายการใชงานฟงกชน malloc(), free(), calloc(), sizeof() และ realloc() พรอมทงยกตวอยางการใชงานของฟงกชน

5. จงเขยนผลลพธของโปรแกรมดงตอไปน

1 #include <stdio.h> 2 main() 3 { 4 int a=100; 5 float b=100.999f; 6 int *Ptra; 7 float *Ptrb; 8 Ptra = &a; 9 Ptrb = &b; 10 printf("a = %i\n",a); 11 printf("*Ptra = %i\n",*Ptra); 12 printf("Ptra = %p\n",Ptra); 13 printf("b = %f\n",b); 14 printf("*Ptrb = %f\n",*Ptrb); 15 printf("Ptrb = %p\n",Ptrb); 16 }

6. จงเขยนผลลพธของโปรแกรมดงตอไปน

1 #include <stdio.h> 2 main() 3 { 4 int a=5,b=10; 5 int *pa = &a; 6 void *px; 7 printf("a=%i b=%i\n",a,b); 8 px = pa; 9 b = *((int *)px); 10 printf("a=%i b=%i",a,b);11 }

Page 406: การเขียนโปรแกรมคอมพิวเตอร ์portal5.udru.ac.th/ebook/pdf/upload/17P88t2O788B98583682.pdfรูปภาพบางส่วนให

บทท 10 ตวช

390

7. จงเขยนผลลพธของโปรแกรมดงตอไปน หากมความผดพลาดใหแกไขใหถกตองและเขยนผลลพธของโปรแกรม

1 #include <stdio.h> 2 3 main() 4 { 5 int **a,i,j; 6 a = (int **)malloc(5*sizeof(int *)); 7 for(i=0;i<5;i++) 8 a[i] = (int *)malloc(2*sizeof(int)); 9 for(i=0;i<5;i++) 10 for(j=0;j<2;j++) 11 { 12 a[i][j] = i*2+j; 13 printf("a[%i][%i] = %i\n",i,j,a[i][j]); 14 } 15 for(i=0;i<5;i++) free(a[i]); 16 free(a);

17 }

8. จงเขยนการอางองของตวแปรตวชในแถวลาดบดงน

แถวลาดบ ตวแปรตวช a[0] a[1] a[2] a[3] a[4] a[5]

แถวลาดบ ตวแปรตวช a[0][0] a[0][1] a[0][2] a[0][3] a[0][4] a[1][0] a[1][1] a[1][2] a[1][3] a[1][4]

Page 407: การเขียนโปรแกรมคอมพิวเตอร ์portal5.udru.ac.th/ebook/pdf/upload/17P88t2O788B98583682.pdfรูปภาพบางส่วนให

บทท 10 ตวช

391

แถวลาดบ ตวแปรตวช a[0][0][0] a[0][0][1] a[0][0][2] a[0][0][3] a[0][1][0] a[0][1][1] a[0][1][2] a[0][1][3] a[1][0][0] a[1][0][1] a[1][0][2] a[1][0][3] a[1][1][0] a[1][1][1] a[1][1][2] a[1][1][3]

9. จงเขยนโปรแกรมคานวณหาคาเฉลยของเลข n จานวน โดยใชโครงสรางของแถวลาดบทสรางจากตวแปรตวชทสามารถเพมขนาดของจานวนสมาชกของแถวลาดบ โดย n จานวน

คอจานวนสมาชกของแถวลาดบทสามารถเปลยนแปลงไดจากการรบคาทผใชตองการ) 10. จงเขยนโปรแกรมบวกเลขของเมทรกซขนาด ขนาด 3 แถว 3 คอลมน โดยใชโครงสรางของแถวลาดบทสรางจากตวแปรตวช

Page 408: การเขียนโปรแกรมคอมพิวเตอร ์portal5.udru.ac.th/ebook/pdf/upload/17P88t2O788B98583682.pdfรูปภาพบางส่วนให

บทท 11 แฟมขอมล

บทท 11

แฟมขอมล

ในบทนจะกลาวถงพนฐานแฟมขอมล (Fundamental of File) การทางานเกยวกบแฟมขอมลขอความ (Text File) ฟงกชนในการจดการแฟมขอมล (Function of File

Manipulation) การทางานเกยวกบแฟมฐานสอง (Binary File) และการเขาถงขอมลแบบสม

(Random Access) ลกษณะของขอมลของตวแปรไมวาจะเปนขอมลนาเขา หรอขอมลทไดจากการประมวลผลของโปรแกรม จะถกเกบในหนวยความจาขณะทประมวลผลโปรแกรมเทานน ดงนนจงไมสามารถนากลบมาใชใหมได หากตองการทจะเกบขอมลไวจะตองเกบไวในรปของแฟมขอมล (File) ซงจะถกเกบในหนวยความจาทสามารถเกบไดถาวรเชนจากหนวยความจาประเภทจานแมเหลกเปนตน ซงจะเปนประโยชนในการเขยนโปรแกรมในระดบสงตอไปอยางมประสทธภาพ เชนเปนประโยชนในการรบและแสดงผลขอมลจานวนมากได ซงถาเปนการรบและแสดงผลในลกษณะเดมจะสามารถกระทาไดครงละ 1 รายการ ทาใหไมกอใหเกดความสะดวกในการใชงาน เปนตน

11.1 พนฐานแฟมขอมล (Fundamental of File)

แฟมขอมลคอขอมลทถกจดเกบในรปแบบของแฟมทสามารถจดเกบไวในทเกบขอมลแบบถาวรได ซงจะทาใหเราสามารถเรยกใชงานแฟมขอมลไดตลอดเวลาเนองจากขอมลไมสญหาย แฟมขอมลเปรยบเสมอนกบการรวมขอมลทมความสมพนธกนหรอทเกยวของกนมาเกบไวในแฟมเดยวกน ทาใหสะดวกในการเรยกใชงาน โดยทวไปแฟมขอมลจะแบงออกเปนการบนทกขอมลลงแฟมขอมลและการอานขอมลจากแฟมขอมล ซงจะมขนตอนการทางานทคลายกนนนคอเรมตนจากการเปดแฟมขอมล (Open File) จากนนทาการบนทกขอมลลงแฟมขอมลหรออานแฟมขอมลจากแฟมขอมล (Write File and Read File) สดทายคอการปดแฟมขอมล (Close File) ดงแสดงในตวอยางในรปท 11.1

Page 409: การเขียนโปรแกรมคอมพิวเตอร ์portal5.udru.ac.th/ebook/pdf/upload/17P88t2O788B98583682.pdfรูปภาพบางส่วนให

บทท 11 แฟมขอมล

394

รปท 11.1 ลกษณะรปแบบของการทางานของแฟมขอมล

นกเขยนโปรแกรม (Programmer) เมอดาเนนการเขยนโปรแกรมเกยวกบขอมลตางๆ เมอไดขอมลทตองการสามารถทจะนาไปบนทกลงไปในแฟมขอมลโดยการเปดแฟมขอมลใหเรยบรอยซงจะทาใหมตวชตาแหนงแฟมขอมล (File Pointer) โดยจะชทตาแหนงแรกสดของแฟมขอมล และจะมการเตรยมทพกขอมลหรอบฟเฟอร ทเปนทเกบขอมลชวคราว โดยขอมลจะถกนาไปเกบทพกขอมลกอนทจะนาลงไปบนทกทไฟล ซงในการบนทกแตละครงกจะทาใหตาแหนงของตวชเปลยนแปลงไป ในการบนทกขอมลลงในทพกขอมลเปรยบเสมอนการบนทกขอมลลงในแฟมขอมลซงถาทพกขอมลเตมกจะดาเนนการบนทกขอมลลงในแฟมขอมลโดยอตโนมตและถาหากไมเตมในทพกขอมลแตมการปดแฟมขอมลกจะมการบนทกขอมลทเหลอลงแฟมขอมลกอนจะปดแฟมขอมลนน สวนในการอานขอมลเมอมการอานขอมลกจะนาขอมลมาเกบไวยงทพกขอมล โดยในการอานในแตละครงจะไดขอมลตาแหนงทตวชตาแหนงขอมลในแฟมนนชอย ซงจะทาการอานขอมลจนสนสดแฟมขอมล (End of File)

ในภาษาซแฟมขอมลจะแบงออกเปน 2 ประเภทใหญๆ คอแฟมขอความและแฟมฐานสองโดยนกเขยนโปรแกรมจะเปนผ กาหนดชนดของแฟมขอมล

แฟมขอความ (Text File)

แฟมขอความคอแฟมขอมลทเกบขอมลในรปแบบของตวอกษร ทแยกแตละบรรทดของแฟมขอความโดยเครองหมาย “\n” ซงหมายถงการขนบรรทดใหม

แฟมทวภาคหรอแฟมฐานสอง (Binary File)

แฟมทวภาคคอแฟมขอมลทเกบขอมลในรปแบบของเลขฐานสองซงเปนรปแบบเฉพาะของคอมพวเตอร

Page 410: การเขียนโปรแกรมคอมพิวเตอร ์portal5.udru.ac.th/ebook/pdf/upload/17P88t2O788B98583682.pdfรูปภาพบางส่วนให

บทท 11 แฟมขอมล

395

11.2 การทางานกบแฟมขอความ (Text Files)

การทางานกบแฟมขอความนน โปรแกรมจะตองมตวแปรซงเปนตวชขอมลในแฟมขอมลหรอตวชแฟมขอมล (File Pointer) ซงการประกาศตวแปรจะกาหนดใหเปนชนด

FILE โดยมรปแบบดงน

การกาหนดลกษณะนใหกบตวแปรจาเปนตองรวมไฟลสวนหว “stdio.h” เขาไวในการแปลโปรแกรมดวย เชน

FILE *input, *output;

เปนการกาหนดใหตวแปร input และตวแปร output เปนตวชแฟมขอมล

การเปดไฟล มรปแบบดงน

fopen() คอฟงกชนทสงใหมการเปดไฟลขน เพอดาเนนการใดๆ ตามทระบไวในสวนของ mode ซงโหมดการทางานของแฟมขอความแบงออกเปน 6 ชนด ดงตารางท 11.1

ตารางท 11.1 โหมดการทางานของแฟมขอความ

โหมด ความหมาย r เปดแฟมขอมลขนมาเพออานขอมลขางใน

- ถามแฟมขอมลอยแลว จะทาการกาหนดตาแหนงไปทตาแหนงเรมตนของแฟมขอมล

- ถายงไมมแฟมขอมล จะเกดขอผดพลาด (error) ขน

w เปดแฟมขอมลขนมาเพอเขยนขอมลลงไป

- ถามแฟมขอมลอยแลว แฟมขอมลนนจะถกลบแลวสรางขนใหม

- ถายงไมมแฟมขอมล จะสรางแฟมขอมลขนมาใหม

FILE *ชอตวแปรทกาหนดขนเพอเปนตวชขอมลในแฟมขอมล;

ชอตวแปรตวชแฟมขอมล = FILE *fopen(“ชอแฟมขอมลทตองการเปดใชงาน”,”mode”);

Page 411: การเขียนโปรแกรมคอมพิวเตอร ์portal5.udru.ac.th/ebook/pdf/upload/17P88t2O788B98583682.pdfรูปภาพบางส่วนให

บทท 11 แฟมขอมล

396

a เปดแฟมขอมลขนมาเพอเขยนขอมลตอทายขอมลเดม

- ถามแฟมขอมลอยแลว จะทาการกาหนดตาแหนงไปทตาแหนงสดทายของแฟมขอมล เพอเรมตนเขยนขอมลตอทายขอมลเดม

- ถายงไมมแฟมขอมล จะสรางแฟมขอมลขนมาใหม

r+ เปดแฟมขอมลขนมาเพออานหรอเขยนขอมลทบแฟมขอมลเกา w+ เปดแฟมขอมลขนมาเพออานหรอเขยนขอมลทบแฟมขอมลเกา หรอสราง

แฟมขอมลใหมขนมาเพออานหรอเขยนขอมล a+ เปดแฟมขอมลขนมาเพอเขยนขอมลตอทายขอมลเกา หรอสราง

แฟมขอมลใหมขนมาเพอเขยนขอมล

เชน

input = fopen(“data.txt”,“r”);

เปนการเปดแฟมขอมลชอ data.txt จากสารบบ (Directory) ปจจบนทใชงานอย เพอทาการอานขอมล โดยกาหนดใหตวแปร input เปนตวชแฟมขอมล เพอใชในการอางถงขอมลในแฟมขอมล output = fopen(“c:\\data.txt”,“w”);

เปนการเปดแฟมขอมลชอ data.txt จากสารบบ c:\\ เพอทาการเขยนขอมลลงในแฟมขอมล โดยกาหนดใหตวแปร output เปนตวชแฟมขอมล เพอใชในการอางถงขอมลในแฟมขอมล

หากตวแปรตวชแฟมขอมล (input,output) มคาเทากบ NULL แสดงวาการเปดแฟมขอมลไมสาเรจ ซงในการเขยนโปรแกรมจะทาการแจงโดยใชคาสง exit(1) ซงเปนคาสงออกจากโปรแกรมในกรณทการจบการทางานของโปรแกรมโดยไมสมบรณแบบซงกคอเกดความผดพลาด แตถาจบการทางานของโปรแกรมโดยสมบรณแบบจะใชคาสง exit(0) ซงกคอไมเกดความผดพลาดนนเอง (คา 0 หมายถงสมบรณ คา 1 หมายถงผดพลาด) ในการใชงานฟงกชน exit() จะตองรวมไฟลสวนหว “stdlib.h” เขาไปในโปรแกรมดวย

Page 412: การเขียนโปรแกรมคอมพิวเตอร ์portal5.udru.ac.th/ebook/pdf/upload/17P88t2O788B98583682.pdfรูปภาพบางส่วนให

บทท 11 แฟมขอมล

397

(ก) โหมด “r” กาหนดตวชแฟมขอมลไปยงตาแหนงเรมตนของแฟม

(ข) โหมด “w” กาหนดตวชแฟมขอมลไปยงตาแหนงเรมตนของแฟมขอมลเพอเขยน

ขอมลใหม

(ค) โหมด “a” กาหนดตวชแฟมขอมลไปยงตาแหนงสดทายของแฟมเพอเพมขอมล

ตอทายขอมลเดม

รปท 11.2 รปแสดงการทางานของแฟมขอความในโหมดตางๆ

การปดไฟล มรปแบบดงน

fclose() คอฟงกชนทสงใหมการปดแฟมขอมล ซงจะตองทาการปดแฟมขอมลทกครงทดาเนนการกบแฟมขอมลเสรจเรยบรอยแลว

fclose(ชอตวแปรตวชแฟมขอมล);

Page 413: การเขียนโปรแกรมคอมพิวเตอร ์portal5.udru.ac.th/ebook/pdf/upload/17P88t2O788B98583682.pdfรูปภาพบางส่วนให

บทท 11 แฟมขอมล

398

ตวอยางท 11.1 โปรแกรมแสดงการเปดปดแฟมขอมล

1 #include <stdio.h> 2 #include <stdlib.h> 3 main() 4 { 5 FILE *Ptr; 6 Ptr = fopen("c:\\data.txt","w"); 7 if(Ptr==NULL){ 8 printf("Cannot open file\n"); 9 exit(0); 10 } 11 fclose(Ptr); 12 }

อธบายโปรแกรม

บรรทดท 5 กาหนดตวแปร Ptr เปนตวชแฟมขอมล เพอใชเปนตวอางองแฟมขอมล

บรรทดท 6 ใชฟงกชน fopen() เปดแฟมขอมล data.txt เพอเขยนขอมล บรรทดท 7-10 ทาการตรวจสอบวาเปดแฟมขอมลสาเรจหรอไม ถาไมสาเรจ (Ptr =

NULL) จะแสดงขอความ “Cannot open file” แลวออกจากโปรแกรม

บรรทดท 11 ใชฟงกชน fclose() ปดแฟมขอมล กลาวคอเปนการสงใหตวแปร Ptr

เลกการชไปทแฟมขอมล data.txt นนเอง (ในกรณทเปดไฟลสาเรจ)

Page 414: การเขียนโปรแกรมคอมพิวเตอร ์portal5.udru.ac.th/ebook/pdf/upload/17P88t2O788B98583682.pdfรูปภาพบางส่วนให

บทท 11 แฟมขอมล

399

11.3 ฟงกชนในการจดการแฟมขอมล (Function of File Manipulation)

การจดการแฟมขอมลจะมฟงกชนในการจดการแฟมขอมลทงในรปแบบของตวอกขระ (Character) และในรปแบบของขอความ (String) ซงจะมฟงกชนใชทแตกตางกนทงในสวนของการรบขอมลและการแสดงผลขอมล ซงในหวขอนจะแสดงตวอยางของฟงกชนทสาคญในการจดการแฟมขอมล และเพอแสดงใหเหนตวอยางทชดเจนในหวขอนจะแบงการจดการแฟมขอมลออกเปน 2 ประเภท

11.3.1 ฟงกชนในการจดการแฟมขอมลในรปแบบตวอกขระ ฟงกชนในการจดการแฟมขอมลในรปแบบตวอกขระจะเปนการประมวลผลทละ 1 ตว

อกขระหรอ 1 ตวอกษร โดยสามารถใชฟงกชน putc(), fputc(), getch(),และ fgetc() ในการจดการแฟมขอมลทละ 1 ตวอกขระ โดยแตละฟงกชนมรปแบบดงน

ฟงกชน putc() และ fputc()

ฟงกชน putc() และ fputc() คอฟงกชนในการบนทกขอมลทละ 1 ตวอกขระ เพอเกบลงในแฟมขอมลทตวชแฟมขอมลชอย เมอบนทกขอมลเรยบรอยแลวจะทาการเลอนตาแหนงของตวชไป 1 ตาแหนง โดยมรปแบบการใชงานดงน

เชน

FILE *Ptr;

char ch;

putc(ch,fPtr);

fputc(ch,fPtr);

putc(ตวแปรทเกบคาอกขระทตองการบนทก,ตวชแฟมขอมลทตองการบนทกขอมล);

fputc(ตวแปรทเกบคาอกขระทตองการบนทก,ตวชแฟมขอมลทตองการบนทกขอมล);

Page 415: การเขียนโปรแกรมคอมพิวเตอร ์portal5.udru.ac.th/ebook/pdf/upload/17P88t2O788B98583682.pdfรูปภาพบางส่วนให

บทท 11 แฟมขอมล

400

ฟงกชน getc() และ fgetc()

ฟงกชน getc() และ fgetc() คอฟงกชนในการอานขอมลทละ 1 ตวอกขระ จากตาแหนงตวชแฟมขอมล โดยฟงกชนนจะมรปแบบการทางานทคลายกบฟงกชน getchar()

เพยงแตแตกตางกนในสวนของฟงกชน getchar() จะทาการอานตวอกขระทละตวจากอปกรณรบรองมาตรฐานแตฟงกชน getc() และ fgetc() จะทาการอานตวอกขระทละตวจากแฟมขอมล โดยมรปแบบการใชงานดงน

เชน

FILE *Ptr;

getc (Ptr);

fgetc(Ptr);

ในการอานขอมลจากแฟมขอมลถาเปนแฟมขอความจะอานจนจบแฟมขอมลแลวใหคา EOF ซงเปนการบอกวาจบแฟมขอมลแตถาเปนแฟมฐานสอง (Binary File) จะใชฟงกชน

feof() ตรวจสอบการสนสดของแฟมขอมล

getc(ตวชแฟมขอมลทตองการอานขอมล);

fgetc(ตวชแฟมขอมลทตองการอานขอมล);

Page 416: การเขียนโปรแกรมคอมพิวเตอร ์portal5.udru.ac.th/ebook/pdf/upload/17P88t2O788B98583682.pdfรูปภาพบางส่วนให

บทท 11 แฟมขอมล

401

ตวอยางท 11.2 โปรแกรมรบขอมลจากแผงแปนอกขระบนทกลงแฟมขอมล จานวน 5 ตวอกขระ

1 #include <stdio.h> 2 #include <stdlib.h> 3 void main(void) 4 { 5 FILE *Ptr; 6 char ch; 7 int i; 8 if((Ptr = fopen("data.txt","w")) == NULL) 9 { 10 printf("Cannot Open File \n"); exit(0); 11 } 12 for(i =1; i<=5;i++) 13 { 14 ch = getchar(); 15 fputc(ch,Ptr); 16 } 17 fclose(Ptr);18 }

ผลลพธของโปรแกรม abcde

ผลลพธในสวนของแฟมขอมล

อธบายโปรแกรม

บรรทดท 5 กาหนดตวแปร Ptr เปนตวชแฟมขอมล เพอใชเปนตวอางองแฟมขอมล

บรรทดท 6-7 กาหนดตวแปร ch เปนตวแปรอกขระ และกาหนดตวแปร i เปนตวแปรของเลขจานวนเตม

บรรทดท 8-11 ทาการตรวจสอบวาเปดแฟมขอมลสาเรจหรอไมโดยจะทาการเปดแฟมขอมลเพอทาการเขยนขอมลลงไปใหมจากแฟมในโหมด “w”

ถาไมสาเรจ (Ptr = NULL) จะแสดงขอความ “Cannot open file”

แลวออกจากโปรแกรม

บรรทดท 12-16 ทาการรบตวอกขระจากแผงแปนอกขระจานวน 5 ตวอกขระ จากนนใหทาการบนทกลงในแฟมขอมล

บรรทดท 17 ใชฟงกชน fclose() ปดแฟมขอมล

Page 417: การเขียนโปรแกรมคอมพิวเตอร ์portal5.udru.ac.th/ebook/pdf/upload/17P88t2O788B98583682.pdfรูปภาพบางส่วนให

บทท 11 แฟมขอมล

402

ตวอยางท 11.3 โปรแกรมบนทกตวอกขระตงแตตวอกขระ a-z ลงในแฟมขอมล

1 #include <stdio.h> 2 #include <stdlib.h> 3 void main(void) 4 { 5 FILE *Ptr; 6 char ch; 7 int i = 0; 8 if((Ptr = fopen("data.txt","w")) == NULL) 9 { 10 printf("Cannot Open File \n");exit(0); 11 } 12 for(ch='a';ch<='z';ch++) 13 { 14 fputc(ch,Ptr); 15 } 16 fclose(Ptr);

17 }

ผลลพธในสวนของแฟมขอมล

อธบายโปรแกรม

บรรทดท 5 กาหนดตวแปร Ptr เปนตวชแฟมขอมล เพอใชเปนตวอางองแฟมขอมล

บรรทดท 6-7 กาหนดตวแปร ch เปนตวแปรอกขระ และกาหนดตวแปร i เปนตวแปรของเลขจานวนเตม

บรรทดท 8-11 ทาการตรวจสอบวาเปดแฟมขอมลสาเรจหรอไม โดยจะทาการเปดแฟมขอมลเพอทาการเขยนขอมลลงไปใหมจากแฟมในโหมด “w”

ถาไมสาเรจ (Ptr = NULL) จะแสดงขอความ “Cannot open file”

แลวออกจากโปรแกรม

บรรทดท 12-15 ทาการบนทกตวอกขระ a-z ลงในแฟมขอมล บรรทดท 17 ใชฟงกชน fclose() ปดแฟมขอมล

Page 418: การเขียนโปรแกรมคอมพิวเตอร ์portal5.udru.ac.th/ebook/pdf/upload/17P88t2O788B98583682.pdfรูปภาพบางส่วนให

บทท 11 แฟมขอมล

403

ตวอยางท 11.4 โปรแกรมอานขอมลจากแฟมขอมล data.txt ทมขอมลตวอกษรตงแตตว a-z

แฟมขอมล data.txt มขอมลดงน

1 #include <stdio.h> 2 #include <stdlib.h> 3 void main(void) 4 { 5 FILE *Ptr; 6 char ch; 7 if((Ptr = fopen("data.txt","r")) == NULL) 8 { 9 printf("Cannot Open File \n");exit(0); 10 } 11 ch = fgetc(Ptr); 12 while(ch != EOF) 13 { 14 putchar(ch); 15 ch = fgetc(Ptr); 16 } 17 fclose(Ptr);18 }

ผลลพธของโปรแกรม abcdefghijklmnopqrstuvwxyz

อธบายโปรแกรม

บรรทดท 5 กาหนดตวแปร Ptr เปนตวชแฟมขอมล เพอใชเปนตวอางองแฟมขอมล

บรรทดท 6-7 กาหนดตวแปร ch เปนตวแปรอกขระ และกาหนดตวแปร i เปนตวแปรของเลขจานวนเตม

บรรทดท 8-11 ทาการตรวจสอบวาเปดแฟมขอมลสาเรจหรอไม โดยจะทาการเปดแฟมขอมลเพอทาการอานขอมลจากแฟมในโหมด “r” ถาไมสาเรจ (Ptr = NULL) จะแสดงขอความ “Cannot open file” แลวออกจากโปรแกรม

Page 419: การเขียนโปรแกรมคอมพิวเตอร ์portal5.udru.ac.th/ebook/pdf/upload/17P88t2O788B98583682.pdfรูปภาพบางส่วนให

บทท 11 แฟมขอมล

404

บรรทดท 12-16 ทาการตรวจสอบและอานขอมลทละตวอกขระโดยจะทาการตรวจสอบกบคา EOF (End of Line) วาจบแฟมขอมลแลวหรอไม

ถายงไมจบแฟมขอมลใหทาการอานขอมลทละอกขระไปจนกวาจะจบแฟมขอมล

บรรทดท 17 ใชฟงกชน fclose() ปดแฟมขอมล

11.3.2 ฟงกชนในการจดการแฟมขอมลในรปแบบขอความ

ฟงกชนในการจดการแฟมขอมลในรปแบบขอความจะเปนการประมวลผลทละ 1 สายอกขระหรอขอความ (String) จานวนหลายตวอกขระ โดยสามารถใชฟงกชน fputs(), fgets(),

fprint() และ fscanf() ในการจดการแฟมขอมลทละสายอกขระโดยแตละฟงกชนมรปแบบดงน

ฟงกชน fputs() และ fgets()

ฟงกชน fputs() และ fgets() คอฟงกชนในการบนทกขอมลและอานขอมลทละสายอกขระ โดยฟงกชน fputs() จะเปนฟงกชนในการบนทกขอมลลงในแฟมขอมลทเปนสายอกขระซงถาเกดคาผดพลาดจะคนคา NULL กลบมา สวนฟงกชน fgets() จะเปนฟงกชนในการอานขอมลสายอกขระจากแฟมขอมลโดยจะนาเขามาเกบทตวแปรแถวลาดบ โดยจะอานขอมลสายอกขระจนกวาจะพบ “\n” ซงถาเกดคาผดพลาดกจะคนคา NULL กลบมา โดยฟงกชนทงสองมรปแบบการใชงานดงน

เชน

FILE *Ptr;

char name[20];

fputs(name,Ptr);

และ FILE *Ptr;

char str[128];

fgets(str,126,Ptr);

fputs(ตวแปรทเกบคาสายอกขระทตองการบนทก,ตวชแฟมขอมลทตองการบนทกขอมล);

fgets(ตวแปรแถวลาดบทจะเกบขอมลจากการอาน,จานวนไบตของขอมลทตองการอานขอมลในแตละครง,ตวชแฟมขอมลทตองการบนทกขอมล);

Page 420: การเขียนโปรแกรมคอมพิวเตอร ์portal5.udru.ac.th/ebook/pdf/upload/17P88t2O788B98583682.pdfรูปภาพบางส่วนให

บทท 11 แฟมขอมล

405

ตวอยางท 11.5 โปรแกรมรบคาสายอกขระจานวน 3 สายอกขระแลวบนทกลงในแฟมขอมล

1 #include <stdio.h> 2 #include <stdlib.h> 3 void main(void) 4 { 5 FILE *Ptr; 6 char str[30]; 7 int i; 8 if((Ptr = fopen("data.txt","w")) == NULL) 9 { 10 printf("Cannot Open File \n");exit(0); 11 } 12 for(i=1;i<=3;i++) 13 { 14 printf("Input name [%i] ",i); 15 gets(str); 16 fputs(str,Ptr); 17 } 18 fclose(Ptr); 19 }

ผลลพธของโปรแกรม Input name [1] Asst.Prof.Dr. Input name [2] Krit Input name [3] Somkantha

ผลลพธในสวนของแฟมขอมล

อธบายโปรแกรม

บรรทดท 5 กาหนดตวแปร Ptr เปนตวชแฟมขอมล เพอใชเปนตวอางองแฟมขอมล

บรรทดท 6-7 กาหนดตวแปร str เปนตวแปรสายอกขระ และกาหนดตวแปร i เปนตวแปรของเลขจานวนเตม

บรรทดท 8-11 ทาการตรวจสอบวาเปดแฟมขอมลสาเรจหรอไม โดยจะทาการเปดแฟมขอมลเพอทาการเขยนขอมลลงไปใหมจากแฟมในโหมด “w” ถาไมสาเรจ (Ptr = NULL) จะแสดงขอความ “Cannot open file” แลวออกจากโปรแกรม

Page 421: การเขียนโปรแกรมคอมพิวเตอร ์portal5.udru.ac.th/ebook/pdf/upload/17P88t2O788B98583682.pdfรูปภาพบางส่วนให

บทท 11 แฟมขอมล

406

บรรทดท 12-17 ทาการรบคาขอความสายอกขระจานวน 3 ขอความจากแผงแปนอกขระ และบนทกคาขอความสายอกขระลงในแฟมขอมล

บรรทดท 18 ใชฟงกชน fclose() ปดแฟมขอมล

ตวอยางท 11.6 โปรแกรมอานขอมลสายอกขระจากแฟมขอมลทละ 10 ตวอกขระ แลวนาไปแสดงผลทจอภาพทละ 10 ตวอกขระ

แฟมขอมล data.txt มขอมลดงน

1 #include <stdio.h> 2 #include <stdlib.h> 3 void main(void) 4 { 5 FILE *Ptr; 6 char str[20]; 7 int i; 8 if((Ptr = fopen("data.txt","r")) == NULL) 9 { 10 printf("Cannot Open File \n");exit(0); 11 } 12 while(!feof(Ptr)) 13 { 14 fgets(str,11,Ptr); 15 printf("%s \n",str); 16 } 17 fclose(Ptr);

18 }

ผลลพธของโปรแกรม 1111111111 2222222222 2222222222 3333333333 4444444444 55555

Page 422: การเขียนโปรแกรมคอมพิวเตอร ์portal5.udru.ac.th/ebook/pdf/upload/17P88t2O788B98583682.pdfรูปภาพบางส่วนให

บทท 11 แฟมขอมล

407

อธบายโปรแกรม

บรรทดท 5 กาหนดตวแปร Ptr เปนตวชแฟมขอมล เพอใชเปนตวอางองแฟมขอมล

บรรทดท 6-7 กาหนดตวแปร str เปนตวแปรสายอกขระ และกาหนดตวแปร i เปนตวแปรของเลขจานวนเตม

บรรทดท 8-11 ทาการตรวจสอบวาเปดแฟมขอมลสาเรจหรอไม โดยจะทาการเปดแฟมขอมลเพอทาการอานขอมลจากแฟมในโหมด “r” ถาไมสาเรจ (Ptr = NULL) จะแสดงขอความ “Cannot open file” แลวออกจากโปรแกรม

บรรทดท 12-16 ทาการตรวจสอบตาแหนงปจจบนของตวชแฟมขอมลวาเปนตาแหนงสนสดของแฟมขอมลหรอไม ถาไมสนสดใหทาการอานแฟมขอมลทละ 11 ตว เกบไวยงตวแปรแถวลาดบ str (ซงในโปรแกรมกาหนด 11

ตวเพอทาการเกบตวอกขระจานวน 10 ตว โดยจะทาใหโปรแกรมแสดงผลทละ 10 ตวออกทางจอภาพ) จากนนทาการแสดงผลขอมลทอยในแถวลาดบ str ออกทางจอภาพทละสายอกขระทอานเขามา และใหทาไปจนสนสดของแฟมขอมล

บรรทดท 17 ใชฟงกชน fclose() ปดแฟมขอมล

ฟงกชน fprintf() และ fscanf()

ฟงกชน fprintf() และ fscanf() คอฟงกชนในการบนทกขอมลและอานขอมลทสามารถกาหนดรปแบบของการประมวลผลได ซงฟงกชนทงสองจะมลกษณะการทางานทคลายกนกบฟงกชน printf() และ scanf() เพยงแตแตกตางกนตรงทฟงกชน fprintf() และ fscanf() เปนการบนทกขอมลและอานขอมลกบแฟมขอมล ฟงกชน fscanf จะคนคาออกมาเปนเลขจานวนเตม

ซงบอกสถานะของการอานขอมล หากมการสงใหอานขอมลใดๆ แตขอมลไมมใหอานเนองจากตวชแฟมขอมลชไปทตาแหนงสดทายของไฟล ฟงกชน fscanf จะคนคาออกมาเปน

EOF (End Of File)

Page 423: การเขียนโปรแกรมคอมพิวเตอร ์portal5.udru.ac.th/ebook/pdf/upload/17P88t2O788B98583682.pdfรูปภาพบางส่วนให

บทท 11 แฟมขอมล

408

โดยฟงกชนทงสองมรปแบบการใชงานดงน

รหสรปแบบของการบนทกและการอานขอมลคอตวแทนชนดขอมลทตองการบนทกและการอานขอมล ตวอยางรหสรปแบบคอ %i, %d , %f, %s เปนตน

เชน

FILE *Ptr;

float a,b,c;

fprintf(Ptr,”%f %f %f”,a,b,c);

และ FILE *Ptr;

char str[128];

fscanf(Ptr,”%s”,char);

ตวแปรทจะเกบขอมลจากการอานคอทอยของตวแปรเพอเกบขอมลทรบเขามาจากการอานจากแฟมขอมล ในหนวยความจาตรงตาแหนงใดๆ ซงตองใชเครองหมายแอมเพอรแซนด & นาหนาชอตวแปรทตองการรบขอมลเขามาเกบไว ยกเวนการรบขอมลสายอกขระ ไมตองนาหนาชอตวแปรดวยเครองหมายแอมเพอรแซนด

fprintf(ตวชตาแหนงขอมลในแฟมขอมล,“รหสรปแบบของการบนทกขอมล”,ตวแปรทเกบคาสายอกขระทตองการบนทก);

fscanf(ตวชตาแหนงขอมลในแฟมขอมล,“รหสรปแบบของการอานขอมล”,ตวแปรทจะเกบขอมลจากการอาน);

Page 424: การเขียนโปรแกรมคอมพิวเตอร ์portal5.udru.ac.th/ebook/pdf/upload/17P88t2O788B98583682.pdfรูปภาพบางส่วนให

บทท 11 แฟมขอมล

409

ตวอยางท 11.7 โปรแกรมอานขอมลสายอกขระจากแฟมขอมล แลวนาไปแสดงผลทจอภาพทละบรรทด

แฟมขอมล data.txt มขอมลดงน

1 #include <stdio.h> 2 #include <stdlib.h> 3 void main(void) 4 { 5 FILE *Ptr; 6 char id[5],name[20]; 7 int midterm,final; 8 Ptr = fopen("data.txt","r"); 9 if(Ptr==NULL){ 10 printf("Cannot open file\n"); 11 exit(0); 12 } 13 else{ 14 printf("Id\tName\t\tMidterm\tFinal\n"); 15 while(fscanf(Ptr,"%s %s %d %d",id ,name ,

&midterm,&final)!= EOF) 16 { 17 printf("%s \t%s \t%d \t%d\n",id,name,midterm,final); 18 } 19 fclose(Ptr); 20 }

21 }

ผลลพธของโปรแกรม Id Name Midterm Final 001 Wilaiporn 67 25 002 Witchakorn 66 29 003 Ahumporn 70 30

อธบายโปรแกรม

บรรทดท 5 กาหนดตวแปร Ptr เปนตวชแฟมขอมล เพอใชเปนตวอางองแฟมขอมล

Page 425: การเขียนโปรแกรมคอมพิวเตอร ์portal5.udru.ac.th/ebook/pdf/upload/17P88t2O788B98583682.pdfรูปภาพบางส่วนให

บทท 11 แฟมขอมล

410

บรรทดท 6-7 กาหนดตวแปร id และ name เปนตวแปรสายอกขระ และกาหนดตวแปร midterm และ final เปนตวแปรของเลขจานวนเตม

บรรทดท 8-12 ทาการตรวจสอบวาเปดแฟมขอมลสาเรจหรอไม โดยจะทาการเปดแฟมขอมลเพอทาการอานขอมลจากแฟมในโหมด “r” ถาไมสาเรจ (Ptr = NULL) จะแสดงขอความ “Cannot open file” แลวออกจากโปรแกรม ถาเปดแฟมขอมลสาเรจใหไปทางานในบรรทดท 13

บรรทดท 13-18 ทาการตรวจสอบตาแหนงปจจบนของตวชแฟมขอมลวาเปนตาแหนงสนสดของแฟมขอมลหรอไม ถาไมสนสดใหทาการอานแฟมขอมลทละบรรทดโดยเกบไวทตวแปร 4 ตว (id, name, midterm, final)

จากนนใหแสดงผลลพธทอานจากแฟมขอมลทเกบไวในตวแปรทง 4

ตวออกทางจอภาพ และใหทาซาไปจนสนสดของแฟมขอมล บรรทดท 19 ใชฟงกชน fclose() ปดแฟมขอมล

ตวอยางท 11.8 โปรแกรมแสดงการเขยนขอมลลงในแฟมขอความ

1 #include <stdio.h> 2 #include <stdlib.h> 3 #include <conio.h> 4 void main(void) 5 { 6 FILE *Ptr; 7 char id[5],name[20],ans; 8 int midterm,final,i; 9 Ptr = fopen("output.txt","w"); 10 if(Ptr==NULL){ 11 printf("Cannot open file\n"); 12 exit(0); 13 } 14 else{ 15 i=0; 16 do{ 17 printf("\nEnter id,name,midterm and final of student

%d :",i+1); 18 scanf("%s %s %d %d",id,name,&midterm,&final); 19 fprintf(Ptr,"%s \t%s \t%d \t%d\n"

,id,name,midterm,final); 20 printf("\nDo you want to add data?\n"); 21 printf("Yes(press y) or No(press any key) :"); 22 ans = getche(); 23 i++; 24 }while(ans=='y'); 25 fclose(Ptr); 26 }

27 }

Page 426: การเขียนโปรแกรมคอมพิวเตอร ์portal5.udru.ac.th/ebook/pdf/upload/17P88t2O788B98583682.pdfรูปภาพบางส่วนให

บทท 11 แฟมขอมล

411

ผลลพธของโปรแกรม Enter id,name,midterm and final of student 1 :001 Krit 70 30 Do you want to add data? Yes(press y) or No(press any key) : Enter id,name,midterm and final of student 2 :002 Aumporn 69 29 Do you want to add data? Yes(press y) or No(press any key) : Enter id,name,midterm and final of student 3 :003 Insol 65 25 Do you want to add data? Yes(press y) or No(press any key) : n

ผลลพธในสวนของแฟมขอมล

อธบายโปรแกรม

บรรทดท 6 กาหนดตวแปร Ptr เปนตวชแฟมขอมล เพอใชเปนตวอางองแฟมขอมล

บรรทดท 7-8 กาหนดตวแปร id, และ name เปนตวแปรสายอกขระ กาหนดตวแปร ans เปนตวแปรอกขระ และกาหนดตวแปร midterm, final และ i เปนตวแปรของเลขจานวนเตม

บรรทดท 9-13 ทาการตรวจสอบวาเปดแฟมขอมลสาเรจหรอไม โดยจะทาการเปดแฟมขอมลเพอทาการเขยนขอมลลงไปใหมจากแฟมในโหมด “w” ถาไมสาเรจ (Ptr = NULL) จะแสดงขอความ “Cannot open file” แลวออกจากโปรแกรม ถาเปดแฟมขอมลสาเรจใหไปทางานบรรทดท 14

บรรทดท 14-24 ทาการรบขอมลสายอกขระทางแผงแปนอกขระเพอนาไปเกบไวในตวแปรทง 4 ตว (id, name, midterm, final) จากนนใหบนทกขอมลลงในแฟมขอมลทตวชแฟมขอมลชอย (Ptr) เมอทาการบนทกขอมลเรยบรอยใหตรวจสอบวาตองการเพมขอมลลงแฟมขอมลอกหรอไมผานตวแปร ans ถาตองการเพมขอมลพมพ “y” กจะทาการรบขอมล

Page 427: การเขียนโปรแกรมคอมพิวเตอร ์portal5.udru.ac.th/ebook/pdf/upload/17P88t2O788B98583682.pdfรูปภาพบางส่วนให

บทท 11 แฟมขอมล

412

สายอกขระทางแผงแปนอกขระอกทง 4 ตวและนาไปบนทกขอมล ถาไมตองการใหพมพตวอกขระอนๆ จะเปนการกระโดดไปบรรทดท 25

บรรทดท 25 ใชฟงกชน fclose() ปดแฟมขอมล

ตวอยางท 11.9 โปรแกรมแสดงการเขยนขอมลตอทายลงในแฟมขอมลเกา

แฟมขอมลเกา output.txt

1 #include <stdio.h> 2 #include <stdlib.h> 3 #include <conio.h> 4 void main(void) 5 { 6 FILE *Ptr; 7 char id[5],name[20],ans; 8 int midterm,final,i; 9 Ptr = fopen("output.txt","a"); 10 if(Ptr==NULL){ 11 printf("Cannot open file\n"); 12 exit(0); 13 } 14 else{ 15 i=0; 16 do{ 17 printf("\nEnter id,name,midterm and final of student

%d :",i+1); 18 scanf("%s %s %d %d",id,name,&midterm,&final); 19 fprintf(Ptr,"%s \t%s \t%d \t%d\n"

,id,name,midterm,final); 20 printf("\nDo you want to add data?\n"); 21 printf("Yes(press y) or No(press any key) :"); 22 ans = getche(); 23 i++; 24 }while(ans=='y'); 25 fclose(Ptr); 26 }

27 }

Page 428: การเขียนโปรแกรมคอมพิวเตอร ์portal5.udru.ac.th/ebook/pdf/upload/17P88t2O788B98583682.pdfรูปภาพบางส่วนให

บทท 11 แฟมขอมล

413

ผลลพธของโปรแกรม Enter id,name,midterm and final of student 1 :004 Wilai 65 15 Do you want to add data? Yes(press Y) or No(press any key) :Y Enter id,name,midterm and final of student 2 :005 Witcha 70 30 Do you want to add data? Yes(press Y) or No(press any key) :n

ผลลพธในสวนของแฟมขอมลใหม

อธบายโปรแกรม

บรรทดท 6 กาหนดตวแปร Ptr เปนตวชแฟมขอมล เพอใชเปนตวอางองแฟมขอมล

บรรทดท 7-8 กาหนดตวแปร id, และ name เปนตวแปรสายอกขระ กาหนดตวแปร ans เปนตวแปรอกขระ และกาหนดตวแปร midterm, final และ i เปนตวแปรของเลขจานวนเตม

บรรทดท 9-13 ทาการตรวจสอบวาเปดแฟมขอมลสาเรจหรอไม โดยจะทาการเปดแฟมขอมลเกาเพอทจะทาการบนทกขอมลตอทายในโหมด “a” ถาไมสาเรจ (Ptr = NULL) จะแสดงขอความ “Cannot open file” แลวออกจากโปรแกรม ถาเปดแฟมขอมลสาเรจใหไปทางานในบรรทดท

14 ซงในโปรแกรมนจะแตกตางตรงการกาหนดคาโหมด “w” และ โหมด “a” โดยโหมด “w” จะเปนการเปดแฟมขอมลขนมาเพอเขยนขอมลลงไปใหม สวนโหมด “a” จะเปนการเปดแฟมขอมลขนมาเพอเขยนขอมลตอทายขอมลเดม

Page 429: การเขียนโปรแกรมคอมพิวเตอร ์portal5.udru.ac.th/ebook/pdf/upload/17P88t2O788B98583682.pdfรูปภาพบางส่วนให

บทท 11 แฟมขอมล

414

บรรทดท 14-24 ทาการรบขอมลสายอกขระทางแผงแปนอกขระเพอนาไปเกบไวในตวแปรทง 4 ตว (id, name, midterm, final) จากนนใหบนทกขอมลลงในแฟมขอมลทตวชแฟมขอมลชอย (Ptr) เมอทาการบนทกขอมลเรยบรอยใหตรวจสอบวาตองการเพมขอมลลงแฟมขอมลอกหรอไมผานตวแปร ans ถาตองการเพมขอมลพมพ “y” กจะทาการรบขอมลสายอกขระทางแผงแปนอกขระอกทง 4 ตวและนาไปบนทกขอมล ถาไมตองการใหพมพตวอกขระอนๆ กจะเปนการกระโดยไปยงบรรทดท

25

บรรทดท 25 ใชฟงกชน fclose() ปดแฟมขอมล

ตวอยางท 11.10 โปรแกรมแสดงการสาเนาขอมลระหวางแฟมขอมล output.txt ไปยงแฟมขอมล output1.txt

แฟมขอมลเกา output.txt ทมอยแลว

1 #include <stdio.h> 2 #include <stdlib.h> 3 #include <conio.h> 4 void main(void) 5 { 6 FILE *Ptr,*Ptr1; 7 char id[5],name[20]; 8 int midterm,final; 9 Ptr = fopen("output.txt","r"); 10 if(Ptr ==NULL){ 11 printf("Cannot open file\n"); 12 exit(0); 13 } 14 Ptr1 = fopen("output1.txt","w"); 15 if(Ptr1==NULL){ 16 printf("Cannot open file\n"); 17 exit(0); 18 }

Page 430: การเขียนโปรแกรมคอมพิวเตอร ์portal5.udru.ac.th/ebook/pdf/upload/17P88t2O788B98583682.pdfรูปภาพบางส่วนให

บทท 11 แฟมขอมล

415

19 while(fscanf(Ptr,"%s %s %d %d",id,name,&midterm,&final) != EOF){

20 fprintf(Ptr1,"%s \t%s \t%d \t%d\n",id,name,midterm,final); 21 } 22 printf("File copy complete\n"); 23 fclose(Ptr); 24 fclose(Ptr1);25 }

ผลลพธของโปรแกรม File copy complete

ผลลพธในสวนของแฟมขอมลใหม output1.txt

อธบายโปรแกรม

บรรทดท 6 กาหนดตวแปร Ptr และ Ptr1 เปนตวชแฟมขอมล เพอใชเปนตวอางองแฟมขอมล

บรรทดท 7-8 กาหนดตวแปร id, และ name เปนตวแปรสายอกขระ และกาหนดตวแปร midterm และ final เปนตวแปรของเลขจานวนเตม

บรรทดท 9-13 ทาการตรวจสอบวาเปดแฟมขอมลสาเรจหรอไม โดยจะทาการเปดแฟมขอมลเพอทาการอานขอมลจากแฟมในโหมด “r” ถาไมสาเรจ (Ptr = NULL) จะแสดงขอความ “Cannot open file” แลวออกจากโปรแกรม ถาเปดแฟมขอมลสาเรจใหไปทางานในบรรทดท 14

บรรทดท 14-18 ทาการตรวจสอบวาเปดแฟมขอมลสาเรจหรอไม โดยจะทาการเปดแฟมขอมลเพอทาการเขยนขอมลลงไปใหมจากแฟมในโหมด “w”

ถาไมสาเรจ (Ptr = NULL) จะแสดงขอความ “Cannot open file”

แลวออกจากโปรแกรม ถาเปดแฟมขอมลสาเรจใหไปทางานในบรรทดท 19

Page 431: การเขียนโปรแกรมคอมพิวเตอร ์portal5.udru.ac.th/ebook/pdf/upload/17P88t2O788B98583682.pdfรูปภาพบางส่วนให

บทท 11 แฟมขอมล

416

บรรทดท 19-21 อานขอมลจากแฟมขอมล output.txt เพอไปเกบไวในตวแปร id

,name ,midterm และ final ถามขอมลใหทาบรรทดท 20 ถาไมมขอมลแลวใหทาบรรทดท 22 โดยในบรรทดท 20 จะเปนการบนทกคาของขอมลลงแฟมขอมล output1.txt ซงจะทาการทาซาไปจนกวาจะสนสดขอมล

บรรทดท 23 ใชฟงกชน fclose() ปดแฟมขอมล กลาวคอเปนการสงใหตวแปร Ptr

เลกการชไปทแฟมขอมล output.txt

บรรทดท 24 ใชฟงกชน fclose() ปดแฟมขอมล กลาวคอเปนการสงใหตวแปร Ptr1 เลกการชไปทแฟมขอมล output1.txt

11.4 การทางานเกยวกบแฟมฐานสอง (Binary File)

แฟมขอมลฐานสองหรอแฟมฐานสองคอชนดของขอมลทอยในรปของเลขฐานสองซงเปนรปแบบเฉพาะของคอมพวเตอร ในภาษาซแบงชนดของแฟมขอมลออกเปน 2 ชนด นนคอแฟมขอความ (Text File) และ แฟมฐานสอง (Binary File) ซงผ เขยนโปรแกรมจะเปนผ กาหนดชนดของแฟมขอมลทใช ซงจากหวขอทผานมาไดกลาวถงแฟมขอความและวธการใชงานตางๆ ในสวนนจะกลาวถงแฟมฐานสองโดยจะมรปแบบของการทางานคลายกนกบการทางานของแฟมทวไป ซงการประกาศตวแปรจะกาหนดใหเปนชนด FILE ในรปแบบของแฟมฐานสองโดยมรปแบบดงน

FILE *input, *output;

เปนการกาหนดใหตวแปร input และตวแปร output เปนตวชแฟมขอมล

การเปดไฟล มรปแบบดงน

FILE *ชอตวแปรทกาหนดขนเพอเปนตวชขอมลในแฟมขอมล;

ชอตวแปรตวชแฟมขอมล = FILE *fopen(“ชอแฟมขอมลทตองการเปดใชงาน”,“mode”);

Page 432: การเขียนโปรแกรมคอมพิวเตอร ์portal5.udru.ac.th/ebook/pdf/upload/17P88t2O788B98583682.pdfรูปภาพบางส่วนให

บทท 11 แฟมขอมล

417

fopen() คอฟงกชนทสงใหมการเปดไฟลขน เพอดาเนนการใดๆ ตามทระบไวในสวนของ mode ซงโหมดการทางานของเทกซไฟลแบงออกเปน 6 ชนด ดงตารางท 11.2

ตารางท 11.2 โหมดการทางานของแฟมขอความชนดแฟมฐานสอง

โหมด ความหมาย rb เปดแฟมฐานสองขนมาเพออานขอมลขางใน โดยถายงไมมแฟมฐานสอง

จะเกดขอผดพลาด (error) ขน

wb เปดแฟมฐานสองขนมาเพอเขยนขอมลลงไป

- ถามแฟมขอมลอยแลว แฟมขอมลนนจะถกลบแลวสรางขนใหม

- ถายงไมมแฟมขอมล จะสรางแฟมขอมลขนมาใหม

ab เปดแฟมฐานสองขนมาเพอเขยนขอมลตอทายขอมลเดม

- ถามแฟมขอมลอยแลว จะทาการกาหนดตาแหนงไปทตาแหนงสดทายของแฟมขอมล เพอเรมตนเขยนขอมลตอทายขอมลเดม

- ถายงไมมแฟมขอมล จะสรางแฟมขอมลขนมาใหม

r+b หรอ rb+ เปดแฟมฐานสองขนมาเพออานหรอเขยนขอมลทบแฟมขอมลเกา w+b หรอ wb+ เปดแฟมฐานสองขนมาเพออานหรอเขยนขอมลทบแฟมขอมลเกา หรอ

สรางแฟมขอมลใหมขนมาเพออานหรอเขยนขอมล a+b หรอ ab+ เปดแฟมฐานสองขนมาเพอเขยนขอมลตอทายขอมลเกา หรอสราง

แฟมขอมลใหมขนมาเพอเขยนขอมลฐานสองใหม

เชน

input = fopen(“data.txt”,“rb”);

เปนการเปดแฟมฐานสองชอ data.txt จากสารบบ (Directory) ปจจบนทใชงานอย เพอทาการอานขอมลฐานสอง โดยกาหนดใหตวแปร input เปนตวชแฟมขอมล เพอใชในการอางถงขอมลในแฟมขอมล output = fopen(“c:\\data.txt”,“wb”);

Page 433: การเขียนโปรแกรมคอมพิวเตอร ์portal5.udru.ac.th/ebook/pdf/upload/17P88t2O788B98583682.pdfรูปภาพบางส่วนให

บทท 11 แฟมขอมล

418

เปนการเปดแฟมฐานสองชอ data.txt จากสารบบ c:\\ เพอทาการเขยนขอมลลงในแฟมขอมล โดยกาหนดใหตวแปร output เปนตวชแฟมขอมล เพอใชในการอางถงขอมลในแฟมขอมล

การปดไฟล มรปแบบดงน

fclose() คอฟงกชนทสงใหมการปดแฟมฐานสอง เชนเดยวกนกบแฟมขอความ ซงจะตองทาการปดแฟมขอมลทกครงทดาเนนการกบแฟมขอมลเสรจเรยบรอยแลว

ตวอยางท 11.11 โปรแกรมแสดงการเปดปดแฟมฐานสอง

1 #include <stdio.h> 2 #include <stdlib.h> 3 void main(void) 4 { 5 FILE *Ptr; 6 Ptr = fopen("c:\\data.txt","wb"); 7 if(Ptr==NULL){ 8 printf("Cannot open file\n"); 9 exit(0); 10 } 11 fclose(Ptr); 12 }

อธบายโปรแกรม

บรรทดท 5 กาหนดตวแปร Ptr เปนตวชแฟมขอมล เพอใชเปนตวอางองแฟมขอมล

บรรทดท 6 ใชฟงกชน fopen() เปดแฟมฐานสองชอ data.txt เพอเขยนขอมล บรรทดท 7-10 ทาการตรวจสอบวาเปดแฟมฐานสองสาเรจหรอไม ถาไมสาเรจ (Ptr

= NULL) จะแสดงขอความ “Cannot open file” แลวออกจากโปรแกรม

บรรทดท 11 ใชฟงกชน fclose() ปดแฟมขอมล กลาวคอเปนการสงใหตวแปร Ptr

เลกการชไปทแฟมขอมล data.txt นนเอง (ในกรณทเปดไฟลสาเรจ)

fclose(ชอตวแปรตวชแฟมขอมล);

Page 434: การเขียนโปรแกรมคอมพิวเตอร ์portal5.udru.ac.th/ebook/pdf/upload/17P88t2O788B98583682.pdfรูปภาพบางส่วนให

บทท 11 แฟมขอมล

419

ในการทางานเกยวกบแฟมฐานสองจะมฟงกชนทสาคญทใชในการจดการกบแฟมฐานสองคอ ฟงกชน fread() และ fwrite() ซงเปนฟงกชนทใชอานและเขยนกบแฟมฐานสองโดยมรปแบบการใชงานของฟงกชนดงน

ในการใชฟงกชนนควรจะมการตรวจสอบการจบแฟมขอมลโดยฟงกชน feof() เพอตรวจสอบการจบแฟมขอมล

ตวอยางท 11.12 โปรแกรมแสดงการเขยนแฟมฐานสอง

1 #include <stdio.h> 2 #include <stdlib.h> 3 void main(void) 4 { 5 FILE *Ptr; 6 int i; 7 if((Ptr = fopen("data.txt","wb")) == NULL) 8 { 9 printf("Cannot Open File \n"); exit(0); 10 } 11 i = 100; 12 fwrite(&i,sizeof(int),1,Ptr); 13 fclose(Ptr);14 }

ผลลพธในสวนของแฟมขอมลใหม data.txt

หลงจากเขยนแฟมฐานสองเรยบรอยเมอทาการเปดไฟล data.txt จะปรากฏตวอกษร “d” ซงกคอ “64” ในเลขฐานสบหก “01100100” ในเลขฐานสอง และ “100” ในเลขฐานสบ

fread(ตาแหนงของหนวยความจาทตองการนาขอมลจากแฟมมาเกบไว,ขนาดของขอมล, จานวนขอมลทตองการอาน,ชอตวแปรตวชแฟมขอมล);

fwrite(ตาแหนงของหนวยความจาทตองการบนทกลงในแฟม,ขนาดของขอมล, จานวนขอมลทตองการเขยน,ชอตวแปรตวชแฟมขอมล);

Page 435: การเขียนโปรแกรมคอมพิวเตอร ์portal5.udru.ac.th/ebook/pdf/upload/17P88t2O788B98583682.pdfรูปภาพบางส่วนให

บทท 11 แฟมขอมล

420

อธบายโปรแกรม

บรรทดท 5 กาหนดตวแปร Ptr เปนตวชแฟมขอมล เพอใชเปนตวอางองแฟมขอมล

บรรทดท 6 ใชฟงกชน fopen() เปดแฟมฐานสองชอ data.txt เพอเขยนขอมล บรรทดท 7-10 ทาการตรวจสอบวาเปดแฟมฐานสองสาเรจหรอไม โดยจะทาการ

เปดแฟมขอมลเพอทาการเขยนขอมลจากแฟมในโหมด “wb” ถาไมสาเรจ (Ptr = NULL) จะแสดงขอความ “Cannot open file” แลวออกจากโปรแกรม

บรรทดท 11 กาหนดคาตวแปรจานวนเตม

บรรทดท 12 ใชฟงกชน fwrite() เขยนแฟมฐานสอง โดยระบขนาดของขอมลทตองการเขยนเปน sizeof(int) และระบจานวน 1 ครง

บรรทดท 13 ใชฟงกชน fclose() ปดแฟมขอมล กลาวคอเปนการสงใหตวแปร Ptr

เลกการชไปทแฟมขอมล data.txt นนเอง

ตวอยางท 11.13 โปรแกรมแสดงการอานแฟมฐานสองจากแฟม data.txt ของอยางกอนหนา

1 #include <stdio.h> 2 #include <stdlib.h> 3 void main(void) 4 { 5 FILE *Ptr; 6 int i; 7 if((Ptr = fopen("data.txt","rb")) == NULL) 8 { 9 printf("Cannot Open File \n"); exit(0); 10 } 11 fread(&i,sizeof(int),1,Ptr); 12 printf("Data is %i",i); 13 fclose(Ptr);

14 }

ผลลพธของโปรแกรม Data is 100

อธบายโปรแกรม

บรรทดท 5 กาหนดตวแปร Ptr เปนตวชแฟมขอมล เพอใชเปนตวอางองแฟมขอมล

Page 436: การเขียนโปรแกรมคอมพิวเตอร ์portal5.udru.ac.th/ebook/pdf/upload/17P88t2O788B98583682.pdfรูปภาพบางส่วนให

บทท 11 แฟมขอมล

421

บรรทดท 6 ใชฟงกชน fopen() เปดแฟมฐานสองชอ data.txt เพอเขยนขอมล บรรทดท 7-10 ทาการตรวจสอบวาเปดแฟมฐานสองสาเรจหรอไม โดยจะทาการ

เปดแฟมขอมลเพอทาการอานขอมลจากแฟมในโหมด “rb” ถาไมสาเรจ (Ptr = NULL) จะแสดงขอความ “Cannot open file” แลวออกจากโปรแกรม

บรรทดท 11 ใชฟงกชน fread() อานแฟมฐานสอง โดยระบขนาดของขอมลทตองการเขยนเปน sizeof(int) และระบจานวน 1 ครง

บรรทดท 12 แสดงผลลพธของขอมลททาการอานจากไฟล บรรทดท 13 ใชฟงกชน fclose() ปดแฟมขอมล กลาวคอเปนการสงใหตวแปร Ptr

เลกการชไปทแฟมขอมล data.txt นนเอง

11.5 การเขาถงขอมลแบบสม (Random Access)

การเขาถงขอมลแบบสมคอการเขาถงขอมลโดยตรงทาใหสามารถดาเนนการประมวลผลขอมลทตองการไดทนท ซงจากการใชงานแฟมขอมลทผานจะเปนการเขาถงแบบลาดบโดยจะอานขอมลขนมาทละลาดบจนกวาจะถงตาแหนงสดทายของขอมล ซงจะทาใหเสยเวลาในการดาเนนการ แตการเขาถงขอมลแบบสมสามารถเขาถงขอมลทตองการทนท ซงในการเขาถงขอมลแบบสมจะมการใชฟงกชนทสาคญคอ ฟงกชน rewind() ฟงกชน ftell() และ ฟงกชน fseek() เปนตน

ฟงกชน rewind()

ฟงกชน rewind() คอฟงกชนในการยายตาแหนงของตวช (Pointer) ไปยงตาแหนงเรมตนของขอมล ซงประโยชนของฟงกชนนเชนการนามาใชกบการเปดแฟมขอมลเกาเพออานหรอเขยนขอมลทบขอมลเดมหรอสรางแฟมขอมลใหม ซงเมอทาการเขยนขอมลเรยบรอยและถาตองการอานขอมลจากแฟมขอมลใหมจะไมสามารถอานขอมลไดเนองจากตวชจะชไปยงตาแหนงสดทายของแฟมขอมลดงนนจะตองใชฟงกชน rewind() เพอใหตวชชไปยงตาแหนงเรมตนของแฟมขอมลกอน จงจะสามารถอานขอมลได โดยฟงกชนมรปแบบการใชงานดงน

rewind(ตวแปรตวชทชไปยงแฟมขอมล);

Page 437: การเขียนโปรแกรมคอมพิวเตอร ์portal5.udru.ac.th/ebook/pdf/upload/17P88t2O788B98583682.pdfรูปภาพบางส่วนให

บทท 11 แฟมขอมล

422

เชน

FILE *Ptr;

rewind(Ptr);

abcdefghijklmnop

Ptr

abcdefghijklmnop

Ptr

rewind(Ptr)

รปท 11.3 แสดงตวอยางการใชฟงกชน rewind()

จากรปท 11.3 แสดงใหเหนวาเมอเขยนขอมลเสรจสนตาแหนงตวชจะชไปยงตาแหนงสดทายของแฟมขอมลนนแตเมอใชคาสง rewind(Ptr) แลวตาแหนงตวชจะชไปยงตาแหนงเรมตนของขอมลทชไปยงตว “a”

ตวอยางท 11.14 โปรแกรมแสดงการใชฟงกชน rewind() โดยจะสาเนาขอมลระหวางแฟมขอมล output.txt ไปยงแฟมขอมล output1.txt ซงจะทาการสาเนาในสวนของแฟมขอมล output1.txt ดวย

แฟมขอมลเกา output.txt ทมอยแลว

Page 438: การเขียนโปรแกรมคอมพิวเตอร ์portal5.udru.ac.th/ebook/pdf/upload/17P88t2O788B98583682.pdfรูปภาพบางส่วนให

บทท 11 แฟมขอมล

423

1 #include <stdio.h> 2 #include <stdlib.h> 3 #include <conio.h> 4 void main(void) 5 { 6 FILE *Ptr,*Ptr1; 7 char id[5],name[20]; 8 int midterm,final; 9 Ptr = fopen("output.txt","r"); 10 if(Ptr ==NULL){ 11 printf("Cannot open file\n"); 12 exit(0); 13 } 14 Ptr1 = fopen("output1.txt","a"); 15 if(Ptr1==NULL){ 16 printf("Cannot open file\n"); 17 exit(0); 18 } 19 fscanf(Ptr,"%s %s %d %d",id,name,&midterm,&final); 20 fprintf(Ptr1,"%s \t%s \t%d \t%d\n",id,name,midterm,final); 21 rewind(Ptr1); 22 fscanf(Ptr1,"%s %s %d %d",id,name,&midterm,&final); 23 fprintf(Ptr1,"%s \t%s \t%d \t%d\n",id,name,midterm,final); 24 printf("File copy complete\n"); 25 fclose(Ptr); 26 fclose(Ptr1);

27 }

ผลลพธของโปรแกรม File copy complete

ผลลพธในสวนของแฟมขอมลใหม output1.txt

อธบายโปรแกรม

บรรทดท 6 กาหนดตวแปร Ptr และ Ptr1 เปนตวชแฟมขอมล เพอใชเปนตวอางองแฟมขอมล

บรรทดท 7-8 กาหนดตวแปร id, และ name เปนตวแปรสายอกขระ และกาหนดตวแปร midterm และ final เปนตวแปรของเลขจานวนเตม

บรรทดท 9-13 ทาการตรวจสอบวาเปดแฟมขอมลสาเรจหรอไม โดยจะทาการเปดแฟมขอมลเพอทาการอานขอมลจากแฟมในโหมด “r” ถาไมสาเรจ

Page 439: การเขียนโปรแกรมคอมพิวเตอร ์portal5.udru.ac.th/ebook/pdf/upload/17P88t2O788B98583682.pdfรูปภาพบางส่วนให

บทท 11 แฟมขอมล

424

(Ptr = NULL) จะแสดงขอความ “Cannot open file” แลวออกจากโปรแกรม ถาเปดแฟมขอมลสาเรจใหไปทางานในบรรทดท 14

บรรทดท 14-18 ทาการตรวจสอบวาเปดแฟมขอมลสาเรจหรอไม โดยจะทาการเปดแฟมขอมลเพอทาการเขยนขอมลลงไปใหมจากแฟมในโหมด “a”

ถาไมสาเรจ (Ptr = NULL) จะแสดงขอความ “Cannot open file”

แลวออกจากโปรแกรม ถาเปดแฟมขอมลสาเรจใหไปทางานในบรรทดท 19

บรรทดท 19 อานขอมลจากแฟมขอมล output.txt ทตวช Ptr ชอย เพอไปเกบไวในตวแปร id ,name ,midterm และ final

บรรทดท 20 บนทกคาของขอมลลงแฟมขอมล output1.txt ทตวช Ptr1 ชอย ซงจะทาบนทกและทาใหคาตวช Ptr1 ชไปยงตาแหนงสดทายของขอมล

บรรทดท 21 ใชฟงกชน rewind() เพอใหตวช Ptr1 ชไปยงตาแหนงเรมตนของไฟล ถาไมมฟงกชนนในสวนถดไปจะไมสามารถอานไฟลไดเนองจากตาแหนงของตวชอยทตาแหนงสดทาย

บรรทดท 22 อานขอมลจากแฟมขอมล output1.txt (อานจากตวแฟมขอมลเดมซา) ทตวช Ptr1 ชอย เพอไปเกบไวในตวแปร id ,name ,midterm

และ final

บรรทดท 23 บนทกคาของขอมลลงแฟมขอมล output1.txt ทตวช Ptr1 ชอย ซงจะทาบนทกตอทายแฟมขอมลเดม

บรรทดท 25 ใชฟงกชน fclose() ปดแฟมขอมล กลาวคอเปนการสงใหตวแปร Ptr

เลกการชไปทแฟมขอมล output.txt

บรรทดท 26 ใชฟงกชน fclose() ปดแฟมขอมล กลาวคอเปนการสงใหตวแปร Ptr1 เลกการชไปทแฟมขอมล output1.txt

ฟงกชน ftell()

ฟงกชน ftell() คอฟงกชนในการบอกตาแหนงของตวช (Pointer) เพอใหทราบวาตาแหนงตวชอยตาแหนงใดเพอใชในการเขยนโปรแกรมในกรณทตองการรตาแหนงของตวชเปนตน

โดยฟงกชนมรปแบบการใชงานดงน

ตวแปรรบคาตาแหนงของตวช = ftell(ตวแปรตวชทชไปยงแฟมขอมล);

Page 440: การเขียนโปรแกรมคอมพิวเตอร ์portal5.udru.ac.th/ebook/pdf/upload/17P88t2O788B98583682.pdfรูปภาพบางส่วนให

บทท 11 แฟมขอมล

425

เชน

FILE *Ptr;

Position = ftell(Ptr);

abcdefghijklmnop

Ptr

abcdefghijklmnop

Ptr

Return คา 0

Return คา 12

abcdefghijklmnop

Ptr

Return คา 4

รปท 11.4 แสดงตวอยางการใชฟงกชน ftell()

จากรปท 11.4 แสดงใหเหนการคนคาตาแหนงตวชโดยใชฟงกชน ftell() ซงคาเรมตนแรกคอคา “0” จากนนเมอตวชดาเนนการตอและหยดทตว “e” และเมอใชฟงกชน ftell() กจะคนคา “4” สดทายตวชดาเนนการถงตว “m” และเมอใชฟงกชน ftell() กจะคนคา 12

ตวอยางท 11.15 โปรแกรมแสดงการใชฟงกชน ftell() โดยจะเขยนขอมลลงแฟมขอมล ทรบจากแผงแปนอกขระลงแฟมขอมล output.txt โดยจะทาการดตาแหนงของตวชตงแตกอนเขยนขอมลและหลงเขยนขอมล

1 #include <stdio.h> 2 #include <stdlib.h> 3 #include <conio.h> 4 void main(void) 5 { 6 FILE *Ptr; 7 int pos1,pos2,pos3; 8 char id[5],name[10]; 9 int midterm,final; 10 Ptr = fopen("output.txt","w"); 11 if(Ptr ==NULL){ 12 printf("Cannot open file\n"); 13 exit(0);

Page 441: การเขียนโปรแกรมคอมพิวเตอร ์portal5.udru.ac.th/ebook/pdf/upload/17P88t2O788B98583682.pdfรูปภาพบางส่วนให

บทท 11 แฟมขอมล

426

14 } 15 pos1 = ftell(Ptr); 16 printf("Input : id name midterm final\n"); 17 scanf("%s %s %d %d",id,name,&midterm,&final); 18 fprintf(Ptr,"%s \t%s \t%d \t%d\n",id,name,midterm,final); 19 pos2 = ftell(Ptr); 20 rewind(Ptr); 21 pos3 = ftell(Ptr); 22 printf("Position of pointer is%i %i %i\n",pos1,pos2,pos3); 23 fclose(Ptr);

26 }

ผลลพธของโปรแกรม Input : id name midterm final 001 Krit 60 30 Position of pointer is 0 19 0

ผลลพธในสวนของแฟมขอมลใหม output.txt

อธบายโปรแกรม

บรรทดท 6 กาหนดตวแปร Ptr เปนตวชแฟมขอมล เพอใชเปนตวอางองแฟมขอมล

บรรทดท 7-9 กาหนดตวแปร pos1, pos2 และ pos 3 เปนตวแปรของเลขจานวนเตม กาหนดตวแปร id, และ name เปนตวแปรสายอกขระ และกาหนดตวแปร midterm และ final เปนตวแปรของเลขจานวนเตม

บรรทดท 10-14 ทาการตรวจสอบวาเปดแฟมขอมลสาเรจหรอไม โดยจะทาการเปดแฟมขอมลเพอทาการเขยนขอมลในโหมด “w” ถาไมสาเรจ (Ptr =

NULL) จะแสดงขอความ “Cannot open file” แลวออกจากโปรแกรม

บรรทดท 15 ทาการบอกตาแหนงของตวชโดยใชฟงกชน ftell(Ptr) ซงตาแหนงแรกจะเปนตาแหนงท “0”

บรรทดท 16-17 ทาการแสดงรายการเพอดาเนนการปอนขอความตามทโปรแกรมกาหนดเชนปอนคา 001 Krit 60 40 เปนตน โดยคาแรกคอรหส คาทสองคอชอ คาทสามและสคอคะแนน ตามลาดบ

Page 442: การเขียนโปรแกรมคอมพิวเตอร ์portal5.udru.ac.th/ebook/pdf/upload/17P88t2O788B98583682.pdfรูปภาพบางส่วนให

บทท 11 แฟมขอมล

427

บรรทดท 18 บนทกคาของขอมลลงแฟมขอมล output1.txt ทตวช Ptr ชอย ซงจะทาบนทกและทาใหคาตวช Ptr ชไปยงตาแหนงสดทายของขอมล

บรรทดท 19 ทาการบอกตาแหนงของตวชโดยใชฟงกชน ftell(Ptr) ซงตาแหนงตวช จะเปลยนไปโดยจะเปนตาแหนงสดทาย ซงถาปอนตามตวอยางจะไดคาตาแหนงของตวชคอ "19”

บรรทดท 20 ใชฟงกชน rewind() เพอใหตวช Ptr ชไปยงตาแหนงเรมตนของไฟล บรรทดท 21 ทาการบอกตาแหนงของตวชโดยใชฟงกชน ftell(Ptr) ซงหลงจากทใช

ฟงกชน rewind() จะทาใหตาแหนงแรกจะเปนตาแหนงท “0”

บรรทดท 22 แสดงตาแหนงของขอมล ตงแตกอนเขยนขอความ หลงเขยนขอความ

บรรทดท 23 ใชฟงกชน fclose() ปดแฟมขอมล กลาวคอเปนการสงใหตวแปร Ptr

เลกการชไปทแฟมขอมล output.txt

ฟงกชน fseek()

ฟงกชน fseek() คอฟงกชนทตองการเขาถงขอมลโดยตรง ณ ตาแหนงทเจาะจงลงไป

ซงจะเปนการยายตาแหนงตวชไปยงตาแหนงทตองการภายในแฟมขอมล ฟงกชนจะคนคา “0”

ถาหากทางานไดสาเรจ โดยฟงกชนมรปแบบการใชงานดงน

ความเฉ (Offset) หรอออฟเซต ซงเปนคาทใชสาหรบการรวมกบตาแหนงเรมตนตามรปแบบทกาหนดเพอใหชไปยงตาแหนงของแฟมขอมลทตองการ โดยจะม 3 รปแบบ ทสามารถกาหนดไดคอ รปแบบท 1 คอตาแหนงเรมตนของแฟมขอมล (Beginning of File)

รปแบบท 2 คอตาแหนงปจจบน (Current Position) และรปแบบท 3 คอตาแหนงสดทายของแฟมขอมล (End of File) การกาหนดคารปแบบสามารถทาได 2 รปแบบคอกาหนดคาดวยชอแมโคร (Macro) หรอ คาคงท (Constant) ดงแสดงในตารางท 11.3

fseek(ตวแปรตวชทชไปยงแฟมขอมล,ความเฉ,รปแบบ);

Page 443: การเขียนโปรแกรมคอมพิวเตอร ์portal5.udru.ac.th/ebook/pdf/upload/17P88t2O788B98583682.pdfรูปภาพบางส่วนให

บทท 11 แฟมขอมล

428

ตารางท 11.3 รปแบบการกาหนดรปแบบของตาแหนงตวช

ชอแมโคร คาคงท ความหมาย SEEK_SET 0 ชทตาแหนงเรมตนของแฟมขอมล SEEK_CUR 1 ชทตาแหนงปจจบนของแฟมขอมล SEEK_END 2 ชทตาแหนงสดทายของแฟมขอมล

เชน

FILE *Ptr;

fseek(Ptr,25L,SEEK_SET); หรอ fseek(Ptr,25L,0);

หมายถงทาการเลอนตวชจากตาแหนงเรมตนของแฟมขอมลไปอก 25 ไบต ซงหมายความวาจะเลอนไปตาแหนงท 26 ของแฟมขอมล

ตวอยางท 11.17 โปรแกรมแสดงการใชฟงกชน fseek() โดยจะทาการอานขอมลจากแฟมขอมล output.txt และใหทาการเลอกตาแหนงทตองการจะช และใหแสดงผลคา ณ

ตาแหนงทช แฟมขอมลเกา output.txt ทมอยแลว

1 #include <stdio.h> 2 #include <stdlib.h> 3 #include <conio.h> 4 void main(void) 5 { 6 FILE *Ptr; 7 int pos,pos_next; 8 Ptr = fopen("output.txt","r"); 9 if(Ptr ==NULL){ 10 printf("Cannot open file\n"); 11 exit(0); 12 } 13 printf("Enter byte to seek :"); 14 scanf("%d",&pos); 15 fseek(Ptr,pos,0);

Page 444: การเขียนโปรแกรมคอมพิวเตอร ์portal5.udru.ac.th/ebook/pdf/upload/17P88t2O788B98583682.pdfรูปภาพบางส่วนให

บทท 11 แฟมขอมล

429

16 printf("Value at pos %d is %c \n",pos,getc(Ptr)); 17 pos_next = ftell(Ptr); 18 printf("Next position is %i",pos_next); 19 fclose(Ptr);

20 }

ผลลพธของโปรแกรม Enter byte to seek :10 Value at pos 10 is k Next position is 11

อธบายโปรแกรม

บรรทดท 6 กาหนดตวแปร Ptr เปนตวชแฟมขอมล เพอใชเปนตวอางองแฟมขอมล

บรรทดท 7 กาหนดตวแปร pos และ pos_next เปนตวแปรของเลขจานวนเตม

บรรทดท 8-12 ทาการตรวจสอบวาเปดแฟมขอมลสาเรจหรอไม โดยจะทาการเปดแฟมขอมลเพอทาการอานขอมลในโหมด “r” ถาไมสาเรจ (Ptr =

NULL) จะแสดงขอความ “Cannot open file” แลวออกจากโปรแกรม

บรรทดท 13-14 ทาการแสดงรายการเพอดาเนนการปอนขอความตามทโปรแกรมกาหนดเชนปอนคา 10 เปนตน ซงกคอตาแหนงทจะทาการบวกเพมของตาแหนงตวชจากจดเรมตน

บรรทดท 15-16 ทาการเขาถงตาแหนงของขอมลในรปแบบ SEEK_SET คอตงแตเรมตนของแฟมขอความ โดยจะทาการชไปอกตามคาทปอนเขามา เชนถาปอนคา 10 กจะทาการชไป 10 ตาแหนง ดงนนตวชจะชไปยงตวอกษรตว “k” ซงกจะแสดงผลลพธคอตวอกษร “k”

บรรทดท 17-18 ทาการบอกตาแหนงของตวชโดยใชฟงกชน ftell(Ptr) ซงกคอตาแหนงถดไปดงนนผลลพธคอตาแหนงท 11

บรรทดท 19 ใชฟงกชน fclose() ปดแฟมขอมล กลาวคอเปนการสงใหตวแปร Ptr

เลกการชไปทแฟมขอมล output.txt

Page 445: การเขียนโปรแกรมคอมพิวเตอร ์portal5.udru.ac.th/ebook/pdf/upload/17P88t2O788B98583682.pdfรูปภาพบางส่วนให

บทท 11 แฟมขอมล

430

บทสรป

ในบทนไดกลาวถงพนฐานแฟมขอมล การทางานเกยวกบแฟมขอมลขอความ ฟงกชนในการจดการแฟมขอมล การทางานเกยวกบแฟมฐานสอง และการเขาถงขอมลแบบสม ซงจะถกจดเกบในรปแบบของแฟมขอความทสามารถนากลบมาใชใหมได ทาใหสามารถบนทกสงตางๆ ทโปรแกรมไดจดทาขนมาหรอการประมวลผลตางๆ ไดอยางมประสทธภาพ แฟมขอมลคอขอมลทถกจดเกบในรปแบบของแฟมทสามารถจดเกบไวในทเกบขอมลแบบถาวรได ซงจะทาใหเราสามารถเรยกใชงานแฟมขอมลไดตลอดเวลาเนองจากขอมลไมสญหาย แฟมขอมลเปรยบเสมอนกบการรวมขอมลทมความสมพนธกนหรอทเกยวของกนมาเกบไวในแฟมเดยวกน ทาใหสะดวกในการเรยกใชงาน การทางานกบแฟมขอความนน โปรแกรมจะตองมตวแปรซงเปนตวชขอมลในแฟมขอมลหรอตวชแฟมขอมลซงการประกาศตวแปรจะกาหนดใหเปนชนด FILE จงจะสามารถดาเนนการกบแฟมขอความได ซงจะมขนตอนการทางานทเรมตนจากการเปดแฟมขอมล จากนนทาการบนทกขอมลลงแฟมขอมลหรออานแฟมขอมลจากแฟมขอมล และสดทายคอการปดแฟมขอมล ฟงกชนในการจดการแฟมขอมลจะมทงในรปแบบของตวอกขระและในรปแบบของขอความซงจะมฟงกชนใชทแตกตางกนทงในสวนของการรบขอมลและการแสดงผลขอมล ฟงกชนในการจดการแฟมขอมลในรปแบบตวอกขระจะเปนการประมวลผลทละ 1 ตวอกขระหรอ 1 ตวอกษร โดยสามารถใชฟงกชน putc(), fputc(),

getch(),และ fgetc() ในการจดการแฟมขอมลทละ 1 ตวอกขระ ฟงกชนในการจดการแฟมขอมลในรปแบบขอความจะเปนการประมวลผลทละ 1 สายอกขระหรอขอความ (String)

จานวนหลายตวอกขระ โดยสามารถใชฟงกชน fputs(), fgets(), fprint() และ fscanf() ในการจดการแฟมขอมล แฟมขอมลฐานสองหรอแฟมฐานสองคอชนดของขอมลทอยในรปของเลขฐานสองซงเปนรปแบบเฉพาะของคอมพวเตอร ซงในการเขยนโปรแกรมบางครงจาเปนทจะตองทางานรวมกบเลขฐานสอง ซงจะทาใหสามารถใชงานโดยสะดวก และสดทายการเขาถงขอมลแบบสมคอการเขาถงขอมลโดยตรงทาใหสามารถดาเนนการประมวลผลขอมลทตองการไดทนท โดยการเขาถงขอมลแบบสมสามารถเขาถงขอมลทตองการทนท ซงในการเขาถงขอมลแบบสมจะมการใชฟงกชนทสาคญคอ ฟงกชน rewind() ฟงกชน ftell() และ ฟงกชน fseek()

Page 446: การเขียนโปรแกรมคอมพิวเตอร ์portal5.udru.ac.th/ebook/pdf/upload/17P88t2O788B98583682.pdfรูปภาพบางส่วนให

บทท 11 แฟมขอมล

431

แบบฝกหดทบทวน

1. จงอธบายถงความหมายของแฟมขอมลพรอมทงยกตวอยางของแฟมขอมล 2. จงอธบายถงความหมายของโหมดในการทางานของแฟมขอความดงน

โหมด ความหมาย r

w

a

r+

w+

a+

3. จงอธบายถงความหมายของโหมดในการทางานของแฟมฐานสองดงน

โหมด ความหมาย rb

wb

ab

r+b หรอ rb+

w+b หรอ wb+

a+b หรอ ab+

4. จงอธบายวธการใชฟงกชน putc(), fputc(), getch(),และ fgetc() พรอมทงยกตวอยางประกอบการอธบาย

5. จงอธบายวธการใชฟงกชน fputs(), fgets(), fprint() และ fscanf()พรอมทงยกตวอยางประกอบการอธบาย

6. จงอธบายวธการใชฟงกชน rewind(), ftell() และ fseek()พรอมทงยกตวอยางประกอบการอธบาย

7. จงเขยนโปรแกรมบวกเลขจากแฟมขอมล data.txt โดยในแฟมขอมล โดยใหแสดงผลทหนาจอภาพ ซงขอมลจากแฟมจะมตวเลขดงน

1 2 3 4 5

6 7 8 9 10

11 12 13 14 15

Page 447: การเขียนโปรแกรมคอมพิวเตอร ์portal5.udru.ac.th/ebook/pdf/upload/17P88t2O788B98583682.pdfรูปภาพบางส่วนให

บทท 11 แฟมขอมล

432

8. จงเขยนโปรแกรมบวกเลขจากแฟมขอมล data.txt ในแตละแถว โดยใหเกบผลลพธตอทายแถวนน ซงขอมลจากแฟมจะมตวเลขดงน

1 2 3 4 5

2 3 4 5 6

3 4 5 6 7

โดยผลลพธทไดจะเปน

1 2 3 4 5 = 15

2 3 4 5 6 = 20

3 4 5 6 7 = 25

9. จงเขยนโปรแกรมทรบคาชอ ขอมลเงนเดอน จากแผงแปนอกขระ จานวน 3 คน แลวนามาหาคาภาษทจะตองเสย ลงแฟมขอมล โดยภาษจะกาหนดดงน

รายได < 10000 ไมตองเสยภาษ

รายได < 20000 เสยภาษ 10% ของรายได

รายได < 50000 เสยภาษ 20% ของรายได

รายได >=50000 เสยภาษ 30% ของรายได

10. จงเขยนโปรแกรมสลบคาตาแหนงของขอมลในแตละหลกจากแฟมขอมล data.txt โดยจะบนทกลงในแฟมขอมลเดม ซงขอมลจากแฟมจะมขอมลดงน

Krit 0001

Witchakorn 0002

Ahumporn 0003

Insol 0004

Wilaiporn 0005

โดยผลลพธทไดจะเปน

0001 Krit

0002 Witchakorn

0003 Ahumporn

0004 Insol

0005 Wilaiporn

Page 448: การเขียนโปรแกรมคอมพิวเตอร ์portal5.udru.ac.th/ebook/pdf/upload/17P88t2O788B98583682.pdfรูปภาพบางส่วนให

บทท 12 การประยกตภาษาซใชในงานดานสถตวจย

บทท 12

การประยกตภาษาซใชในงานดานสถตวจย

ในบทนจะกลาวถงการวดแนวโนมเขาสสวนกลาง (Measures of Central Tendency)

การวดการกระจายของขอมล (Measures of Dispersion of Variability) การคานวณสมการถดถอย (Regression Equation) และการคนหาขอมลและการจดเรยงขอมล (Searching and

Sorting) ซงจะเปนการเขยนโปรแกรมเพอประยกตใชงานในดานสถตเพอการวจยเพอใหนกศกษาสามารถนาไปประยกตใชงานไดอยางมประสทธภาพ วธการทางสถตเปนวธการหนงทมประสทธภาพและเหมาะสมสาหรบการประยกตใชในงานวจย เชนวธการทางสถตสามารถคานวณคาขอมลทกระจดกระจายมาจดเปนหมวดหมทเหมาะสม ทาใหสามารถนาเอาขอมลทเปนหมวดหมไปประยกตในงานวจย ดงนนเพอเปนพนฐานในการนาไปประยกตในงานวจยจาเปนจะตองมความรพนฐานทางดานสถตเพอนาไปสการประยกตใชงาน ดงนนในบทนจะเปนการเขยนโปรแกรมเพอคานวณทางสถตทนยมมการนาไปประยกตใชงาน

12.1 การวดแนวโนมเขาสสวนกลาง (Measures of Central Tendency)

การวดแนวโนมเขาสสวนกลางเปนการหาคากลางของขอมล หรอหาคาทเปนตวแทนของขอมล เพอใชอธบายลกษณะของขอมล โดยสถตทนยมใชวดแนวโนมเขาสสวนกลางคอตวกลางเลขคณต (Arithmetic Mean) มธยฐาน (Median) และฐานนยม (Mode)

12.1.1 ตวกลางเลขคณต (Arithmetic Mean)

ตวกลางเลขคณตคอคาเฉลยของกลมขอมล สญลกษณทใชสาหรบตวกลางเลขคณตคอ X โดยสามารถคานวณไดจากสมการท 12.1 ดงน

Page 449: การเขียนโปรแกรมคอมพิวเตอร ์portal5.udru.ac.th/ebook/pdf/upload/17P88t2O788B98583682.pdfรูปภาพบางส่วนให

บทท 12 การประยกตภาษาซใชในงานดานสถตวจย

434

N

XX

(12.1)

ทซง X คอคาของขอมลแตละตว N คอจานวนขอมล

ตวอยางท 12.1 โปรแกรมคานวณหาคากลางเลขคณตของขอมลคะแนนนกศกษาจานวน 5

คน

1 #include <stdio.h> 2 main() 3 { 4 float num_st[5]; 5 float sum = 0; 6 float mean; 7 int i; 8 int number_student = sizeof(num_st)/2; 9 for(i=0;i<number_student;i++) 10 { 11 printf("Data[%i] = ",i); 12 scanf("%f",&num_st[i]); 13 } 14 for(i=0;i<number_student;i++) 15 { 16 sum = sum + num_st[i]; 17 } 18 mean = sum/number_student; 19 printf("Mean = %f",mean);20 }

ผลลพธของโปรแกรม Data[0] = 10 Data[1] = 20 Data[2] = 30 Data[3] = 40 Data[4] = 50 Mean = 30.00

อธบายโปรแกรม

บรรทดท 4-7 กาหนดตวแปร num_st เปนตวแปรแถวลาดบเพอเกบขอมลคะแนน

กาหนดตวแปร sum และ mean เปนตวแปรแบบเลขทศนยม และ i เปนตวแปรเลขจานวนเตม

Page 450: การเขียนโปรแกรมคอมพิวเตอร ์portal5.udru.ac.th/ebook/pdf/upload/17P88t2O788B98583682.pdfรูปภาพบางส่วนให

บทท 12 การประยกตภาษาซใชในงานดานสถตวจย

435

บรรทดท 8 เปนการหาคาขนาดของแถวลาดบเพอใชในการบงบอกจานวนขอมลโดยถาเปนเลขทศนยมจะหารดวย 4 แตถาเปนเลขจานวนเตมจะหารดวย 2 ตามขนาดของชนดขอมล (แตถาเขยนโปรแกรมในโปรแกรม

Microsoft Visual Studio ถาเปนเลขจานวนเตมและเลขทศนยมจะตองหารดวย 4 ทงค เพราะในโปรแกรมจะมขนาดของขอมลเทากน)

บรรทดท 9-13 การรบคาขอมลเกบไวในแถวลาดบ num_st

บรรทดท 14-17 คานวณหาคาผลรวมของขอมล บรรทดท 18 คานวณหาคาเฉลยตามสมการในการหาคาเฉลยของขอมล บรรทดท 19 แสดงผลลพธของคาเฉลย

12.1.2 มธยฐาน (Median)

มธยฐานคอคาขอมลทอยระหวางกลางของขอมลหรอกงกลางของกลม สญลกษณทใชสาหรบมธยฐานคอ Med หรอ Mdn ซงเปนสถตทบงบอกสภาพโดยรวมของกลมนยมใชกบขอมลทมการกระจายตวเปนวงกวางเพราะถาใชคากลางเลขคณตจะทาใหเกดความคลาดเคลอนสง โดยสามารถคานวณคามธยฐานได 2 กรณ คอกรณทขอมลเปนเลขคคานวณจากสมการท 12.2

2

1NMed

(12.2)

ทซง N คอจานวนขอมล

ขอมลเปนเลขคคานวณจากสมการท 12.3

2

12

N2Data

2

N1Data

Med

(12.3)

ทซง N คอจานวนขอมล 1Data คอขอมลตวท 1 ทตาแหนง

2

N

2Data คอขอมลตวท 2 ทตาแหนง

12

N

Page 451: การเขียนโปรแกรมคอมพิวเตอร ์portal5.udru.ac.th/ebook/pdf/upload/17P88t2O788B98583682.pdfรูปภาพบางส่วนให

บทท 12 การประยกตภาษาซใชในงานดานสถตวจย

436

การคานวณหาคามธยฐานจะตองทาการเรยงลาดบขอมลกอน โดยจะเรยงจากนอยไปมาก ซงการเรยงขอมลมอยหลากหลายวธการดงเชนการเรยงลาดบแบบเลอก (Selection

Sort) การเรยงลาดบแบบแทรก (Insertion Sort) และการเรยงลาดบแบบฟอง (Bubble Sort)

เปนตน ซงตวอยางการเรยงลาดบจะกลาวถงในหวขอการคนหาขอมลและการจดเรยงขอมล (Searching and Sorting)

ตวอยางท 12.2 โปรแกรมคานวณหาคามธยฐานของขอมลคะแนนนกศกษาจานวน 5 คน

1 #include <stdio.h> 2 main() 3 { 4 float num_st[5]; 5 int i; 6 int Med; 7 int number_student = sizeof(num_st)/2; 8 for(i=0;i<number_student;i++) 9 { 10 printf("Data[%i] = ",i); 11 scanf("%f",&num_st[i]); 12 } 13 Med = (number_student + 1)/2; 14 printf("Med = %f",num_st[Med-1]);15 }

ผลลพธของโปรแกรม Data[0] = 1 Data[1] = 2 Data[2] = 3 Data[3] = 4 Data[4] = 5 Med = 3.00

อธบายโปรแกรม

บรรทดท 4-6 กาหนดตวแปร num_st เปนตวแปรแถวลาดบเพอเกบขอมลคะแนน

กาหนดตวแปร i และ Med เปนตวแปรเลขจานวนเตม

บรรทดท 7 เปนการหาคาขนาดของแถวลาดบเพอใชในการบงบอกจานวนขอมล บรรทดท 8-12 การรบคาขอมลเกบไวในแถวลาดบ num_st โดยคาทปอนเขามา

จะตองเปนคาทเรยงลาดบจากนอยไปมาก บรรทดท 13 คานวณหาตาแหนงทเปนคามธยฐานของขอมล บรรทดท 19 แสดงผลลพธของคามธยฐานโดยคาตาแหนงจะตองลบดวยหนง

เนองจากแถวลาดบเรมตนทศนย

Page 452: การเขียนโปรแกรมคอมพิวเตอร ์portal5.udru.ac.th/ebook/pdf/upload/17P88t2O788B98583682.pdfรูปภาพบางส่วนให

บทท 12 การประยกตภาษาซใชในงานดานสถตวจย

437

ตวอยางท 12.3 โปรแกรมคานวณหาคามธยฐานของขอมลคะแนนนกศกษาจานวน 6 คน

1 #include <stdio.h> 2 main() 3 { 4 float num_st[6]; 5 int i,Data1,Data2; 6 float Med; 7 int number_student = sizeof(num_st)/2; 8 for(i=0;i<number_student;i++) 9 { 10 printf("Data[%i] = ",i); 11 scanf("%f",&num_st[i]); 12 } 13 Data1 = (number_student + 1)/2; 14 Data2 = ((number_student + 1)/2)+1; 14 Med = (num_st[Data1-1] + num_st[Data2-1])/2; 14 printf("Med = %.2f",Med);15 }

ผลลพธของโปรแกรม Data[0] = 1 Data[1] = 2 Data[2] = 3 Data[3] = 4 Data[4] = 5 Data[5] = 6 Med = 3.50

อธบายโปรแกรม

บรรทดท 4-6 กาหนดตวแปร num_st เปนตวแปรแถวลาดบเพอเกบขอมลคะแนน

กาหนดตวแปร i, Data1 และ Data2 เปนตวแปรเลขจานวนเตม และกาหนดตวแปร Med เปนตวแปรเลขทศนยม

บรรทดท 7 เปนการหาคาขนาดของแถวลาดบเพอใชในการบงบอกจานวนขอมล บรรทดท 8-12 การรบคาขอมลเกบไวในแถวลาดบ num_st

บรรทดท 13-14 คานวณหาตาแหนงทเปนคามธยฐานของขอมล บรรทดท 15 คานวณหาคามธยฐานของขอมล บรรทดท 19 แสดงผลลพธของคามธยฐาน

Page 453: การเขียนโปรแกรมคอมพิวเตอร ์portal5.udru.ac.th/ebook/pdf/upload/17P88t2O788B98583682.pdfรูปภาพบางส่วนให

บทท 12 การประยกตภาษาซใชในงานดานสถตวจย

438

12.1.3 ฐานนยม (Mode)

ฐานนยมคอคาขอมลทมความถสงสดในชดขอมลเดยวกนหรอขอมลทมการซากนมากทสด ซงโดยทวไปฐานนยมมกนาไปใชกบขอมลเชงคณภาพ ลกษณะของฐานนยมถากลมของขอมลไมมการซากนของขอมลจะถอวากลมของขอมลนนไมมฐานนยม ถากลมของขอมลมการซากนของขอมลทเทากนจานวน 2 คา แสดงวากลมของขอมลนนมฐานนยมจานวน 2 คา ดงนนฐานนยมอาจจะมหรอไมมขนอยกบขอมล

ตวอยางท 12.4 โปรแกรมคานวณหาคาฐานนยมของขอมลคะแนนนกศกษาจานวน 10 คน

1 #include <stdio.h> 2 main() 3 { 4 int num_st[10]; 5 int frequency_num[10]; 6 int i,j,frequency,max; 7 int number_student = sizeof(num_st)/2; 8 for(i=0;i<number_student;i++) 9 { 10 printf("Data[%i] = ",i); 11 scanf("%i",&num_st[i]); 12 } 13 for(i=0;i<number_student;i++) 14 { 15 frequency = 1; 16 for(j=0;j<number_student;j++) 17 { 18 if ((num_st[i] == num_st[j])&&(i!=j)) 19 frequency = frequency + 1; 20 if ((num_st[i] == num_st[j])&&(i<j)) 21 frequency = 0; 22 } 23 frequency_num[i] = frequency; 24 } 25 max = frequency_num[0]; 26 for(i=1;i<number_student-1;i++) 27 { 28 if(max<frequency_num[i]) 29 max = frequency_num[i]; 30 } 31 if(max>1) 32 { 33 for(i=0;i<number_student;i++) 34 { 35 if(max==frequency_num[i]) 36 printf("Mode is %i\n",num_st[i]); 37 } 38 }else

Page 454: การเขียนโปรแกรมคอมพิวเตอร ์portal5.udru.ac.th/ebook/pdf/upload/17P88t2O788B98583682.pdfรูปภาพบางส่วนให

บทท 12 การประยกตภาษาซใชในงานดานสถตวจย

439

39 { 40 printf("No Mode"); 41 }

42 }

ผลลพธของโปรแกรม Data[0] = 1 Data[1] = 1 Data[2] = 2 Data[3] = 2 Data[4] = 2 Data[5] = 3 Data[6] = 4 Data[7] = 4 Data[8] = 4 Data[9] = 5 Mode is 2 Mode is 4

จากผลลพธของโปรแกรมแสดงใหเหนวาจะมฐานนยมอย 2 คา นนคอคา 2 และคา 4

อธบายโปรแกรม

บรรทดท 4-6 กาหนดตวแปร num_st และ frequency_num เปนตวแปรแถวลาดบเพอเกบขอมลคะแนน กาหนดตวแปร i, j, frequency และ max เปนตวแปรเลขจานวนเตม และกาหนดตวแปร Med เปนตวแปรเลขทศนยม

บรรทดท 7 เปนการหาคาขนาดของแถวลาดบเพอใชในการบงบอกจานวนขอมล บรรทดท 8-12 การรบคาขอมลเกบไวในแถวลาดบ num_st

บรรทดท 13-24 คานวณหาคาความถของขอมลของตวเลขทซากนโดยจะเกบผลการนบความถของขอมลไวทตวแปร frequency_num โดยตวทซากนจะปรบใหเปนศนยในกรณทในตาแหนงทคนหาไดมการคนหาแลวไดคาผลลพธทเหมอนกน เชนถาขอมลเปน 1 1 2 2 3 ตวแปร frequency_num กจะเกบ 0 2 0 2 1 เปนตน ซงจะเปนตวแสดงตาแหนงของคาความถทตองการ

บรรทดท 25 กาหนดคา max เทากบคาตาแหนงแรกของ frequency_num

บรรทดท 26-30 คานวณหาความถสงสดจาก frequency_num เชน เกบคา 0 2 0 2

1 แสดงวาคา max = 2

Page 455: การเขียนโปรแกรมคอมพิวเตอร ์portal5.udru.ac.th/ebook/pdf/upload/17P88t2O788B98583682.pdfรูปภาพบางส่วนให

บทท 12 การประยกตภาษาซใชในงานดานสถตวจย

440

บรรทดท 31-41 ทาการตรวจสอบคาฐานนยมจากขอมลวามขอมลทซากนมากกวาหนงคาหรอไมถามแสดงวามฐานนยมโดยใหแสดงผลลพธของฐานนยมโดยดจากตวแปร frequency_num ซงเปนตวแปรทบงบอกตาแหนงของฐานนยม

12.2 การวดการกระจายของขอมล (Measures of Dispersion of Variability)

การวดการกระจายของขอมลเปนการวดหาดชนทเหมาะสมเพออธบายลกษณะของขอมลวามลกษณะของขอมลเปนอยางไร ซงเปนการสรปลกษณะของขอมลวามลกษณะการกระจายตวของขอมลเปนอยางไร วธการวดการกระจายตวของขอมลทนยมใชกนดงเชน พสย (Range) พสยควอรไทลและสวนเบยงเบนควอรไทล (Quartile Range and Quartile

Deviation) และสวนเบยงเบนมาตรฐานและความแปรปรวน (Standard Deviation and

Variance)

12.2.1 พสย (Range)

พสยคอวธการวดการกระจายของขอมลโดยดจากคาขอมลทมากทสดและคาขอมลทนอยทสด โดยสามารถคานวณไดจากสมการท 12.4 ดงน

MINMAX XXR (12.4)

ทซง MAXX คอคาของขอมลทมากทสด

MINX คอคาของขอมลทนอยทสด

เชนถามคาขอมลคอ [1 2 3 4 5 6 7 8 9] ดงนน MAXX คอ 9 และ MINX คอ 1 ซงจากสมการจะสามารถคานวณ R = 9 -1 = 8 หมายความวาความแตกตางของขอมลหรอพสยมคาเทากบ 8

Page 456: การเขียนโปรแกรมคอมพิวเตอร ์portal5.udru.ac.th/ebook/pdf/upload/17P88t2O788B98583682.pdfรูปภาพบางส่วนให

บทท 12 การประยกตภาษาซใชในงานดานสถตวจย

441

ตวอยางท 12.5 โปรแกรมคานวณหาคาพสยของขอมลคะแนนนกศกษาจานวน 10 คน

1 #include <stdio.h> 2 main() 3 { 4 int num_st[10]; 5 int i,j,max,min,range; 6 int number_student = sizeof(num_st)/2; 7 for(i=0;i<number_student;i++) 8 { 9 printf("Data[%i] = ",i); 10 scanf("%i",&num_st[i]); 11 } 12 max = num_st[0]; 13 min = num_st[0]; 14 for(i=1;i<number_student;i++) 15 { 16 if(max<num_st[i]) 17 max = num_st[i]; 18 if(min>num_st[i]) 19 min = num_st[i]; 20 } 21 range = max-min; 22 printf("Range of data is %i",range);

23 }

ผลลพธของโปรแกรม Data[0] = 1 Data[1] = 2 Data[2] = 3 Data[3] = 4 Data[4] = 5 Data[5] = 6 Data[6] = 7 Data[7] = 8 Data[8] = 9 Data[9] = 10 Range of data is 9

อธบายโปรแกรม

บรรทดท 4-5 กาหนดตวแปร num_st เปนตวแปรแถวลาดบเพอเกบขอมลคะแนน

กาหนดตวแปร i, j, max, min และ range เปนตวแปรเลขจานวนเตม

บรรทดท 6 เปนการหาคาขนาดของแถวลาดบเพอใชในการบงบอกจานวนขอมล บรรทดท 7-11 การรบคาขอมลเกบไวในแถวลาดบ num_st

บรรทดท 14-20 คานวณหาสงสด (Max) และคานวณหาคาตาสด (Min)

บรรทดท 21 คานวณหาคาพสย บรรทดท 22 แสดงผลลพธของคาพสย

Page 457: การเขียนโปรแกรมคอมพิวเตอร ์portal5.udru.ac.th/ebook/pdf/upload/17P88t2O788B98583682.pdfรูปภาพบางส่วนให

บทท 12 การประยกตภาษาซใชในงานดานสถตวจย

442

12.2.2 พสยควอรไทลและสวนเบยงเบนควอรไทล (Quartile Range and Quartile

Deviation)

พสยควอรไทลเปนคาทใชวดการกระจายของขอมลรอบคามธยฐาน (Median) โดยสามารถหาไดจากการหาผลตางระหวางคาควอรไทลท 1 (Q1) และคาควอรไทลท 3 (Q3) โดยสามารถคานวณคาพสยควอรไทลไดจากสมการท 12.5 (ขอมลจะตองมการจดเรยงคาขอมลจากนอยไปมากกอนทจะคานวณ)

13 QQQR (12.5)

ทซง 3Q คอคาคะแนน ณ ตาแหนงควอรไทลท 3

1Q คอคาคะแนน ณ ตาแหนงควอรไทลท 1

สวนเบยงเบนควอรไทลเปนคาทใชวดการกระจายของขอมลรอบคามธยฐาน

(Median) ซงจะมคาเทากบครงหนงของผลตางระหวางคาควอรไทลท 1 (Q1) และคาควอรไทลท 3 (Q3) โดยสามารถคานวณคาสวนเบยงเบนควอรไทลไดจากสมการท 12.6 (ขอมลจะตองมการจดเรยงคาขอมลจากนอยไปมากกอนทจะคานวณ)

2

QQDQ 13 (12.6)

ทซง 3Q คอคาคะแนน ณ ตาแหนงควอรไทลท 3

1Q คอคาคะแนน ณ ตาแหนงควอรไทลท 1

สวนเบยงเบนควอรไทลถามคามากแสดงวาขอมลมการกระจายมากและถาสวนเบยงเบนควอรไทลมคานอยแสดงวาขอมลมการกระจายตวนอย ในการวดตาแหนงเปนการแปลงขอมลแตละชดใหอยในลกษณะทใกลเคยงกนมความเหมาะสมทจะนาไปใชงาน เพอประโยชนในการเปรยบเทยบปรมาณของขอมลระหวางขอมลคนละกลม ถาการวดตาแหนงแบงขอมลออกเปน 4 สวนเราเรยกวาควอรไทล ซงคอตาแหนงของคาคะแนนคาหนงทแสดงวามขอมลกสวนจาก 4 สวน ทมคานอยกวาคาน โดยสามารถคานวณคาตาแหนงควอรไทลไดจากสมการท 12.7

Page 458: การเขียนโปรแกรมคอมพิวเตอร ์portal5.udru.ac.th/ebook/pdf/upload/17P88t2O788B98583682.pdfรูปภาพบางส่วนให

บทท 12 การประยกตภาษาซใชในงานดานสถตวจย

443

4

XNR (12.7)

ทซง X คอตาแหนงควอรไทลทกาหนด (คา 1, 2, 3 และ 4)

N คอจานวนขอมลทงหมดในกลมขอมล

โดยคาทคานวณไดหากมทศนยมตงแต 0.5 ขนไปใหปดเศษขน แตถามทศนยมทนอยกวา 0.5 ใหปดเศษลงตวอยางเชนมขอมลอย 10 คา คอ [10 20 30 40 50 60 70 80 90 100]

คาตาแหนงควอรไทลท 1 (Q1) คอ 4/)10)(1(R = 2.5 ใหปดเศษขนกจะมคาเปน 3 แสดงวาคาตาแหนงควอรไทลท 1 อยตาแหนงท 3 คอคา 30 สวนคาตาแหนงควอรไทลท 3 (Q3) คอ

4/)10)(3(R = 7.5 ใหปดเศษขนกจะมคาเปน 8 แสดงวาคาตาแหนงควอรไทลท 3 อยตาแหนงท 8 คอคา 80 (ขอมลจะตองมการจดเรยงคาขอมลจากนอยไปมากกอนทจะคานวณถายงไมไดจดเรยงจะตองทาการจดเรยงขอมลกอนการคานวณ) ซงตวอยางการเรยงลาดบจะกลาวถงในหวขอการคนหาขอมลและการจดเรยงขอมล (Searching and Sorting)

ตวอยางท 12.6 โปรแกรมคานวณหาคาพสยควอรไทลและสวนเบยงเบนควอรไทลของขอมลจานวน 10 คา (โดยขอมลทปอนเปนขอมลทเรยงลาดบจากคานอยไปคามาก)

1 #include <stdio.h> 2 #include <math.h> 3 main() 4 { 5 float num_st[10]; 6 float X1,X3,C1,C3; 7 int Q1,Q3; 8 float QR,QD; 9 int i; 10 float number_student = sizeof(num_st)/4; 11 for(i=0;i<number_student;i++) 12 { 13 printf("Data[%i] = ",i); 14 scanf("%f",&num_st[i]); 15 } 16 X1 = ((1)* number_student)/4; 17 C1 = (int) ((1)* number_student)/4; 18 X3 = ((3)* number_student)/4; 19 C3 = (int) ((3)* number_student)/4; 20 if((X1-C1)>=0.5) 21 { 22 X1 = ceil(X1); 23 } 24 else 25 {

Page 459: การเขียนโปรแกรมคอมพิวเตอร ์portal5.udru.ac.th/ebook/pdf/upload/17P88t2O788B98583682.pdfรูปภาพบางส่วนให

บทท 12 การประยกตภาษาซใชในงานดานสถตวจย

444

26 X1 = floor(X1); 27 } 28 if((X3-C3)>=0.5) 29 { 30 X3 = ceil(X3); 31 } 32 else 33 { 34 X3 = floor(X3); 35 } 36 Q1 = (int) X1; 37 Q3 = (int) X3; 38 QR = num_st[Q3-1]-num_st[Q1-1]; 39 QD = (num_st[Q3-1]-num_st[Q1-1])/2; 40 printf("Quartile Range = %.2f\n",QR); 41 printf("Quaritile Deviation = %.2f\n",QD);

42 }

ผลลพธของโปรแกรม Data[0] = 25 Data[1] = 31 Data[2] = 39 Data[3] = 45 Data[4] = 52 Data[5] = 60 Data[6] = 68 Data[7] = 74 Data[8] = 77 Data[9] = 80 Quartile Range = 35.00 Quaritile Deviation = 17.50

อธบายโปรแกรม

บรรทดท 5-9 กาหนดตวแปร num_st เปนตวแปรแถวลาดบเพอเกบขอมลคะแนน

กาหนดตวแปร X1, X3, C1 และ C3, เปนตวแปรแบบเลขทศนยมเพอใชในการหาตาแหนงทมการปดเศษขนหรอลง กาหนดตวแปร QD และ QR เปนตวแปรแบบเลขทศนยมเพอใชในการคานวณหาคา เปนตวแปรแบบเลขทศนยมเพอใชในการ กาหนดตวแปร Q1 และ Q3 เปนตวแปรเลขจานวนเตมเพอใชในการบงบอกตาแหนงของแถวลาดบ และกาหนดตวแปร i เปนตวแปรเลขจานวนเตม

บรรทดท 10 เปนการหาคาขนาดของแถวลาดบเพอใชในการบงบอกจานวนขอมล บรรทดท 11-15 การรบคาขอมลเกบไวในแถวลาดบ num_st โดยขอมลทปอนเขา

จะตองเปนขอมลทมการเรยงลาดบจากนอยไปมาก

Page 460: การเขียนโปรแกรมคอมพิวเตอร ์portal5.udru.ac.th/ebook/pdf/upload/17P88t2O788B98583682.pdfรูปภาพบางส่วนให

บทท 12 การประยกตภาษาซใชในงานดานสถตวจย

445

บรรทดท 16-19 คานวณหาคาตาแหนงควอรไทลท 1 และควอรไทลท 3 ซงคาทไดจะเปนเลขทศนยมทยงมไดปดเศษ

บรรทดท 20-35 เปนการปดเศษขนและปดเศษลง ในกรณทมคาทศนยมเทากบ 0.5

หรอมากกวาใหปดเศษขน แตถานอยกวา 0.5 ใหปดเศษลง บรรทดท 36-37 แปลงขอมลตวเลขทอยในรปแบบของเลขทศนยมใหอยในรปแบบ

ของเลขจานวนเตมเพอใชเปนตวบงบอกตาแหนงขอมลในแถวลาดบ

บรรทดท 38-39 คานวณหาคาพสยควอรไทลและสวนเบยงเบนควอรไทลของขอมล บรรทดท 40-41 แสดงผลลพธของคาพสยควอรไทลและสวนเบยงเบนควอรไทลของ

ขอมล

12.2.3 สวนเบยงเบนมาตรฐานและความแปรปรวน (Standard Deviation and

Variance)

สวนเบยงเบนมาตรฐานคอการวดการกระจายของขอมลโดยเฉลยทขอมลแตละตวมสวนเบยงเบนจากตวกลางเลขคณต หรอกลาวไดวาเปนการวดการกระจายของคะแนนรอบๆ ตวกลางเลขคณต วธการนเปนวธการทเปนทนยมและแพรหลายในงานดานตางๆ เชนทางดานสถต ทางดานปญญาประดษฐ และทางดานการประมวลผลภาพเปนตน วธการคานวณสวนเบยงเบนกระทาไดโดยการหาผลตางระหวางขอมลแตละตวกบคากลางเลขคณต (Mean)

จากนนทาการหาคาเฉลยโดยการหารดวยจานวนขอมล ซงจากการหาผลตางในบางครงคาทไดอาจจะเปนคาลบทาใหเมอนาไปใชกจะทาใหไมสามารถคานวณไดถกตองดงนนจงไดมการคานวณโดยการยกกาลงสองของคาผลตางแลวทาการถอดรากทสอง กจะไดคาเบยงเบนมาตรฐานทตองการ โดยสามารถคานวณคาสวนเบยงเบนมาตรฐานไดจากสมการท 12.8

N

)X(XSD

2 หรอ

1N

)X(XSD

2

(12.8)

ทซง X คอคาขอมลแตละตว X คอคากลางเลขคณตหรอคาเฉลยของกลมขอมลนน

N คอจานวนขอมล จากสตรทงสองจะแตกตางในสวนของ N และ N-1 ซงจากเดมจะเปน N-1 เพราะเปนการประมาณคาความแปรปรวนของขอมลไดดเหมาะสาหรบขอมลขนาดเลกแตอยางไรกตามในปจจบนนยมใช N เนองจากขอมลทใชงานจรงในปจจบนจะเปนขอมลทมขนาดใหญ ซงกเปนการประมาณคาความแปรปรวนของขอมลทมประสทธภาพ

Page 461: การเขียนโปรแกรมคอมพิวเตอร ์portal5.udru.ac.th/ebook/pdf/upload/17P88t2O788B98583682.pdfรูปภาพบางส่วนให

บทท 12 การประยกตภาษาซใชในงานดานสถตวจย

446

ความแปรปรวนคอการวดการกระจายของขอมลโดยเฉลยทขอมลแตละตวมสวนเบยงเบนจากตวกลางเลขคณตเชนเดยวกนกบสวนเบยงเบนมาตรฐานซงกจะเปนวธการประมาณคาการกระจายของขอมลทมประสทธภาพอกวธการหนง ซงสญลกษณทใชแสดงเปนคาความแปรปรวนคอ โดยสามารถคานวณคาความแปรปรวนไดจากสมการท 12.9

2SDσ หรอ N

)X(X 2 (12.9)

ตวอยางท 12.7 โปรแกรมคานวณหาคาสวนเบยงเบนมาตรฐานและคาความแปรปรวนของขอมลจานวน 10 คา

1 #include <stdio.h> 2 #include <math.h> 3 main() 4 { 5 float num_st[10]; 6 float sum = 0; 7 float mean; 8 float SD_Total = 0; 9 float SD,Variance; 10 int i; 11 int number_student = sizeof(num_st)/2; 12 for(i=0;i<number_student;i++) 13 { 14 printf("Data[%i] = ",i); 15 scanf("%f",&num_st[i]); 16 } 17 for(i=0;i<number_student;i++) 18 { 19 sum = sum + num_st[i]; 20 } 21 mean = sum/number_student; 22 for(i=0;i<number_student;i++) 23 { 24 SD_Total = SD_Total + pow((num_st[i]-mean),2); 25 } 26 SD = sqrt(SD_Total/number_student); 27 Variance = pow(SD,2); 28 printf("Standard Deviation = %.2f\n",SD); 29 printf("Variance = %.2f\n",Variance);30 }

ผลลพธของโปรแกรม Data[0] = 1 Data[1] = 2 Data[2] = 3 Data[3] = 4 Data[4] = 5 Data[5] = 6

Page 462: การเขียนโปรแกรมคอมพิวเตอร ์portal5.udru.ac.th/ebook/pdf/upload/17P88t2O788B98583682.pdfรูปภาพบางส่วนให

บทท 12 การประยกตภาษาซใชในงานดานสถตวจย

447

Data[6] = 7 Data[7] = 8 Data[8] = 9 Data[9] = 10 Standard Deviation = 2.87 Variance = 8.25

อธบายโปรแกรม

บรรทดท 5-10 กาหนดตวแปร num_st เปนตวแปรแถวลาดบเพอเกบขอมลคะแนน

กาหนดตวแปร sum, mean, SD_Total, SD และ Variance เปนตวแปรแบบเลขทศนยม และ i เปนตวแปรเลขจานวนเตม

บรรทดท 11 เปนการหาคาขนาดของแถวลาดบเพอใชในการบงบอกจานวนขอมล บรรทดท 12-16 การรบคาขอมลเกบไวในแถวลาดบ num_st

บรรทดท 17-20 คานวณหาคาผลรวมของขอมล บรรทดท 21 คานวณหาคาเฉลยตามสมการในการหาคาเฉลยของขอมล บรรทดท 22-25 คานวณหาคาผลรวมของความแตกตางระหวางคาขอมลและ

คาเฉลย บรรทดท 26 คานวณหาคาสวนเบยงเบนมาตรฐาน

บรรทดท 27 คานวณหาคาความแปรปรวน

บรรทดท 28-29 แสดงผลลพธของคาเฉลย

12.3 การคานวณสมการถดถอย (Regression Equation)

การคานวณสมการถดถอยเปนเทคนคหนงทใชวเคราะหความสมพนธระหวางตวแปรโดยมจดมงหมายเพอการพยากรณ (Predict) คาของตวแปรทตองการ เมอทราบคาของตวแปรอกตวหนงหรออกหลายตว โดยตวแปรทเราตองการพยากรณเรยกวาตวแปรตามหรอตวแปรเกณฑ และตวแปรทใชเพอการพยากรณเรยกวาตวแปรอสระหรอตวแปรพยากรณซงอาจจะม 1 ตว หรอหลายตวแปรกได

Page 463: การเขียนโปรแกรมคอมพิวเตอร ์portal5.udru.ac.th/ebook/pdf/upload/17P88t2O788B98583682.pdfรูปภาพบางส่วนให

บทท 12 การประยกตภาษาซใชในงานดานสถตวจย

448

12.3.1 การคานวณสมการถดถอยโดยใชสมการเสนตรง การคานวณสมการถดถอยจะเปนการหาสมการถดถอยของเสนถดถอย (Regression

Line) ทซงคอเสนทแสดงความสมพนธระหวางตวแปร โดยจะมลกษณะของเสนหลากหลายรปแบบทใชในการพยากรณเชนสมการเสนตรง (Linear Regression) ซงในหวขอนจะเสนอในแบบสมการเสนตรงเพอใหนกศกษานาไปประยกตใชงานในการพยากรณตางๆ ไดโดยงาย วธการหนงทเหมาะสมในการหาเสนพยากรณหรอในการปรบเสนพยากรณคอวธกาลงสองนอยทสด (Least Square) ดงนนในการพยากรณโดยใชสมการถดถอยแบบเสนตรงสามารถคานวณไดจากสมการท 12.10

bXaY (12.10)

ทซง Y คอคาของตวแปรตาม ทไดจากสมการพยากรณเมอทราบคา X

a คอคาตดแกน Y (Y-Intercept)

b คอคาความชน (Slope) = คาสมประสทธถดถอย X คอคาตวแปรอสระหรอตวแปรพยากรณ

คาตดแกน y (a) และคาความชน (b) สามารถคานวณไดจากสมการท 12.11 และสมการท 12.12

n

X)b(Y

a

(12.11)

22 X)(Xn

Y)(X)(XYn

b (12.12)

ทซง X คอคาตวแปรอสระหรอตวแปรพยากรณ

Y คอคาตวแปรตาม

N คอจานวนคของขอมล(ตวแปรอสระและตวแปรตาม)

Page 464: การเขียนโปรแกรมคอมพิวเตอร ์portal5.udru.ac.th/ebook/pdf/upload/17P88t2O788B98583682.pdfรูปภาพบางส่วนให

บทท 12 การประยกตภาษาซใชในงานดานสถตวจย

449

ตวอยางท 12.8 จงคานวณการสรางสมการถดถอยแบบเสนตรงเพอใชในการพยากรณคาคะแนนการสอบจากคาสตปญญา (IQ) ดงขอมลดงตอไปน

ลาดบ คาสตปญญา คะแนนสอบ

1 118 66

2 99 50

3 118 73

4 121 69

5 123 72

6 98 54

7 131 74

8 121 70

9 108 65

10 111 62

11 118 65

12 112 63

13 113 67

14 111 59

15 106 60

16 102 59

17 113 70

18 101 57

จากตารางขอมลกาหนดใหคาสตปญญาคอตวแปรอสระ (X) และกาหนดใหคะแนนสอบคอตวแปรตาม (Y) ดงนนเราจะทาการพยากรณคะแนนการสอบโดยสมการถดถอยแบบเสนตรงจากการนาเอาขอมลทงสองชดมาคานวณหาคา a และคา b เพอนามาสรางสมการถดถอย โดยคานวณจากสมการ

n

X)b(Y

a

Page 465: การเขียนโปรแกรมคอมพิวเตอร ์portal5.udru.ac.th/ebook/pdf/upload/17P88t2O788B98583682.pdfรูปภาพบางส่วนให

บทท 12 การประยกตภาษาซใชในงานดานสถตวจย

450

22 X)(Xn

Y)(X)(XYn

b

ทาการคานวณหา XY , X , Y , 2

X ดงแสดงในตาราง ลาดบ X Y X

2 XY

1 118 66 13924 7788

2 99 50 9801 4950

3 118 73 13924 8614

4 121 69 14641 8349

5 123 72 15129 8856

6 98 54 9604 5292

7 131 74 17161 9694

8 121 70 14641 8470

9 108 65 11664 7020

10 111 62 12321 6882

11 118 65 13924 7670

12 112 63 12544 7056

13 113 67 12769 7571

14 111 59 12321 6549

15 106 60 11236 6360

16 102 59 10404 6018

17 113 70 12769 7910

18 101 57 10201 5757

รวม 2,024 1,155 228,978 130,806

จากนนนาไปแทนคาในสมการ

6708.0)024,2()978,228)(18(

)155,1)(2024()806,130)(18(

X)(Xn

Y)(X)(XYn

b2

22

Page 466: การเขียนโปรแกรมคอมพิวเตอร ์portal5.udru.ac.th/ebook/pdf/upload/17P88t2O788B98583682.pdfรูปภาพบางส่วนให

บทท 12 การประยกตภาษาซใชในงานดานสถตวจย

451

25.1118

)024,2)(6708.0(155,1

n

X)b(Y

a

ดงนนจะไดสมการถดถอยคอ X0.670811.25bXaY

จากสมการเราสามารถนาไปพยากรณคะแนนสอบได โดยเราจะตองทราบคาสตปญญาของคนทตองการพยากรณดงเชนเราทราบวานกเรยนคนทตองการพยากรณมคาสตปญญาเทากบ 100 จะมคาการพยากรณของคะแนนสอบคอ

58.55)1000.6708(11.25bXaY

แสดงวาคาพยากรณคาคะแนนสอบของนกเรยนคนนนคอ 55.58

ตวอยางท 12.9 โปรแกรมคานวณหาสมการพยากรณแบบเสนตรงโดยมตวแปรอสระ 1 ตว ตวแปรตาม 1 ตว โดยใหทาการรบตวแปรอสระและตวแปรตาม 18 คา และใหปอนคาอนพตตามตวอยางท 12.8

1 #include <stdio.h> 2 main() 3 { 4 float X[18],Y[18],XX[18],XY[18]; 5 float a,b; 6 int i; 7 float sumX = 0, sumY = 0; 8 float sumXX = 0, sumXY = 0; 9 float num = sizeof(X)/4; 10 for(i=0;i<num;i++) 11 { 12 printf("X[%i] Y[%i] = ",i,i); 13 scanf("%f %f",&X[i],&Y[i]); 14 } 15 for(i=0;i<num;i++) 16 { 17 XX[i] = X[i]*X[i]; 18 XY[i] = X[i]*Y[i]; 19 } 20 for(i=0;i<num;i++) 21 { 22 sumX = sumX + X[i]; 23 sumY = sumY + Y[i]; 24 sumXX = sumXX + XX[i]; 25 sumXY = sumXY + XY[i];

Page 467: การเขียนโปรแกรมคอมพิวเตอร ์portal5.udru.ac.th/ebook/pdf/upload/17P88t2O788B98583682.pdfรูปภาพบางส่วนให

บทท 12 การประยกตภาษาซใชในงานดานสถตวจย

452

26 } 27 b = ((num*sumXY)-(sumX*sumY))/((num*sumXX)-(sumX*sumX)); 28 a = (sumY-(b*sumX))/num; 29 printf("Regression Equation of Data is Y=%.2f+%.2fX",a,b); 30 }

ผลลพธของโปรแกรม X[0] Y[0] = 118 66 X[1] Y[1] = 99 50 X[2] Y[2] = 118 73 X[3] Y[3] = 121 69 X[4] Y[4] = 123 72 X[5] Y[5] = 98 54 X[6] Y[6] = 131 74 X[7] Y[7] = 121 70 X[8] Y[8] = 108 65 X[9] Y[9] = 111 62 X[10] Y[10] = 118 65 X[11] Y[11] = 112 63 X[12] Y[12] = 113 67 X[13] Y[13] = 111 59 X[14] Y[14] = 106 60 X[15] Y[15] = 102 59 X[16] Y[16] = 113 70 X[17] Y[17] = 101 57 Regression Equation of Data is Y = -11.26+0.67X

อธบายโปรแกรม

บรรทดท 4-8 กาหนดตวแปร X, Y, XX และ XY เปนตวแปรแถวลาดบโดยตวแปร X

สาหรบเกบคาตวแปรอสระและตวแปร Y เกบคาตวแปรตาม ตวแปร XX และ XY เกบคาการดาเนนการทางคณตศาสตร กาหนดตวแปร a

และ b เปนตวแปรแบบเลขทศนยมเพอใชเกบคาจากการคานวณหาคาจากพารามเตอรของสมการในการพยากรณ sumX, sumY,

sumXX และ sumYY เปนตวแปแบบเลขทศนยมเพอใชเกบคาผลรวมของคาตวแปร และกาหนดตวแปร i เปนตวแปรเลขจานวนเตม

บรรทดท 9 เปนการหาคาขนาดของแถวลาดบเพอใชในการบงบอกจานวนขอมล บรรทดท 10-14 การรบคาขอมลเกบไวในแถวลาดบ X และ Y โดยจะทาการรบคาท

ละคจนครบทงหมด

Page 468: การเขียนโปรแกรมคอมพิวเตอร ์portal5.udru.ac.th/ebook/pdf/upload/17P88t2O788B98583682.pdfรูปภาพบางส่วนให

บทท 12 การประยกตภาษาซใชในงานดานสถตวจย

453

บรรทดท 15-19 คานวณหาคาการยกกาลงสองของตวแปร X และการคณกนของตวแปร X และ Y แลวเกบคาลงในตวแปร XX และ XY ซงเปนตวแปรแถวลาดบ

บรรทดท 20-26 คานวณหาคาผลรวมของตวแปร X ผลรวมของตวแปร Y ผลรวมของการยกกาลงสองของตวแปร X และผลรวมของการคณกบระหวางตวแปร X และ Y

บรรทดท 27-28 คานวณหาคาตวแปร a และ ตวแปร b เพอใชเปนตวแปรในการพยากกรณ

บรรทดท 29 แสดงผลลพธของสมการณในการพยากรณทคานวณไดจากวธการทนาเสนอ

ตวอยางท 12.10 โปรแกรมคานวณการพยากรณแบบเสนตรงทไดจากตวอยางท 12.8 ดงสมการ X0.670811.25bXaY โดยใหปอนคาตวแปรอสระจานวน 1 ตวแปร เพอใชในการณพยากรณตวแปรตาม และกาหนดใหทาซาจานวน 5 ครง ในการพยากรณ

1 #include <stdio.h> 2 main() 3 { 4 float a,b; 5 int i; 6 float X,Y; 7 a = -11.25; 8 b = 0.6708; 9 for(i=0;i<5;i++) 10 { 11 printf("X[%i] = ",i+1); 12 scanf("%f",&X); 13 Y = a+(b*X); 14 printf("Prediction Results of Y[%i] = %.2f\n",i,Y); 15 }

16 }

ผลลพธของโปรแกรม X[1] = 100 Prediction Results of Y[0] = 55.83 X[2] = 90 Prediction Results of Y[1] = 49.12 X[3] = 80 Prediction Results of Y[2] = 42.41 X[4] = 70 Prediction Results of Y[3] = 35.71 X[5] = 60 Prediction Results of Y[4] = 29.00

Page 469: การเขียนโปรแกรมคอมพิวเตอร ์portal5.udru.ac.th/ebook/pdf/upload/17P88t2O788B98583682.pdfรูปภาพบางส่วนให

บทท 12 การประยกตภาษาซใชในงานดานสถตวจย

454

อธบายโปรแกรม

บรรทดท 4-6 กาหนดตวแปร a และ b เปนตวแปรแบบเลขทศนยมเพอใชในการเกบคาพารามเตอรสาหรบการพยากรณ กาหนดตวแปร X และ Y

เปนตวแปรแบบเลขทศนยมเพอใชในการเกบคาตวแปรอสระและตวแปรตามทคานวณได และกาหนดตวแปร i เปนตวแปรเลขจานวนเตม

บรรทดท 7-8 กาหนดคาพารามเตอรตามสมการทกาหนดเพอใชในการคานวณ

บรรทดท 9-15 ทาการวนซาจานวน 5 รอบ โดยจะทาการรบคาตวแปรอสระทละตวและทาการพยากรณตวแปรตามทละตว จนครบ 5 ครง ในบรรทดท

13 คอการพยาการณตวแปรตาม ซงเปนการพยากรณตามทโจทยตองการ และบรรทดท 14 ทาการแสดงผลของตวแปรอสระและตวแปรตามทเปนผลลพธทคานวณได

12.3.2 การวดประสทธภาพของการพยากรณ

หลงจากทไดสมการของการพยากรณไปแลว ขนตอนถดไปกคอการนาขอมลมาวเคราะหเพอจะทาการพยากรณตอไปโดยการตรวจสอบความแมนยาของการพยากรณ ในการพยากรณคอการคาดการถงสงในอนาคตทยงไมเกดขนดงนนจงมโอกาสทผดพลาด ดงนนสมการของการพยากรณทสรางขนมาจะมความถกตองมากนอยเพยงใดจะตองมการวดประสทธภาพของการพยากรณโดยดจากการพยากรณของขอมลในอดตททราบขอมลแลวจากสมการพยากรณทคานวณเพอเปรยบเทยบคาจรงกบคาทพยากรณ โดยการวดประสทธภาพการพยากรณสามารถกระทาไดหลายวธ ซงในสวนนผ เขยนตาราขอเสนอวธการทใชวดประสทธภาพของการพยากรณจากงานวจยของผ เขยนตารานนคอวธการวดประสทธภาพการพยากรณโดยใชคาเบยงเบนสมบรณเฉลย (Mean Absolute Deviation: MAD) คาความคลาดเคลอนกาลงสองเฉลย (Mean Square Error: MSE) คาเปอรเซนตความคลาดเคลอนเฉลย (Mean Percentage Error: MPE) และคาเปอรเซนตความคลาดเคลอนสมบรณเฉลย (Mean

Absolute Percentage Error: MAPE) โดยวธการวดประสทธภาพทงหมดนเปนวธการทเปนทนยมในงานวจยและใชกนอยางแพรหลายซงมความเหมาะสมในการวดประสทธภาพการพยากรณ

Page 470: การเขียนโปรแกรมคอมพิวเตอร ์portal5.udru.ac.th/ebook/pdf/upload/17P88t2O788B98583682.pdfรูปภาพบางส่วนให

บทท 12 การประยกตภาษาซใชในงานดานสถตวจย

455

1) คาเบยงเบนสมบรณเฉลย (Mean Absolute Deviation: MAD) เปนการวดความแมนยาทวดจากคาความคลาดเคลอนของการพยากรณ โดยไมคานงถงทศทางของความคลาดเคลอนโดยจะมหนวยวดเหมอนกบคาสงเกต โดยสามารถคานวณคาเบยงเบนสมบรณเฉลยจากสมการท 12.13

n

YY

MAD

n

1i

(12.13)

ทซง Y คอคาจากการพยากรณทไดจากสมการพยากรณ

Y คอคาขอมลจรงททราบคา n คอจานวนขอมลทงหมด (ในอดตทจะนามาใชในการหาประสทธภาพ)

2) คาความคลาดเคลอนกาลงสองเฉลย (Mean Square Error: MSE) เปนการวดความแมนยาจากคาเฉลยผลรวมกาลงสองของคาความคลาดเคลอนของการพยากรณ คาความคลาดเคลอนกาลงสองเฉลยจะไวตอความคลาดเคลอนทมขนาดใหญเพราะไดจากการนาเอาคาความคลาดเคลอนมายกกาลงสอง โดยสามารถคานวณคาความคลาดเคลอนกาลงสองเฉลยจากสมการท 12.14

n

)Y(Y

MSE

n

1i

2 (12.14)

ทซง Y คอคาจากการพยากรณทไดจากสมการพยากรณ

Y คอคาขอมลจรงททราบคา n คอจานวนขอมลทงหมด (ในอดตทจะนามาใชในการหาประสทธภาพ)

3) เปอรเซนตความคลาดเคลอนเฉลย (Mean Percentage Error: MPE) เปนการวดความแมนยาจากคาความคลาดเคลอนของการพยากรณเทยบกบคาขอมลจรงโดยใหคาผลลพธออกมาเปนเปอรเซนตความคลาดเคลอนเฉลย โดยสามารถคานวณเปอรเซนตความคลาดเคลอนเฉลยจากสมการท 12.15

n

100Y

YY

MPE

n

1i

(12.15)

Page 471: การเขียนโปรแกรมคอมพิวเตอร ์portal5.udru.ac.th/ebook/pdf/upload/17P88t2O788B98583682.pdfรูปภาพบางส่วนให

บทท 12 การประยกตภาษาซใชในงานดานสถตวจย

456

ทซง Y คอคาจากการพยากรณทไดจากสมการพยากรณ

Y คอคาขอมลจรงททราบคา n คอจานวนขอมลทงหมด (ในอดตทจะนามาใชในการหาประสทธภาพ)

4) เปอรเซนตความคลาดเคลอนสมบรณเฉลย (Mean Absolute Percentage Error: MAPE)

เปนการวดความแมนยาจากคาความคลาดเคลอนของการพยากรณเทยบกบคาขอมลจรง โดยจะทาใหคาความแตกตางเปนคาสมบรณทไมคดเครองหมายทาใหไมไดรบผลกระทบจากขนาดของตวเลข จงเหมาะทจะใชกบการเปรยบเทยบอนกรมเวลาหลายชดเมอใชวธการพยากรณเดยวกนหรอเปรยบเทยบวธการพยากรณหลายวธเมอใชอนกรมเวลาชดเดยวกน โดยสามารถคานวณเปอรเซนตความคลาดเคลอนสมบรณเฉลยจากสมการท 12.16

n

100Y

YY

APEM

n

1i

(12.16)

ทซง Y คอคาจากการพยากรณทไดจากสมการพยากรณ

Y คอคาขอมลจรงททราบคา n คอจานวนขอมลทงหมด (ในอดตทจะนามาใชในการหาประสทธภาพ)

Page 472: การเขียนโปรแกรมคอมพิวเตอร ์portal5.udru.ac.th/ebook/pdf/upload/17P88t2O788B98583682.pdfรูปภาพบางส่วนให

บทท 12 การประยกตภาษาซใชในงานดานสถตวจย

457

ตวอยางท 12.11 จงคานวณประสทธภาพของการพยากรณโดยใชคาเบยงเบนสมบรณเฉลย (Mean Absolute Deviation: MAD) คาความคลาดเคลอนกาลงสองเฉลย (Mean Square

Error: MSE) คาเปอรเซนตความคลาดเคลอนเฉลย (Mean Percentage Error: MPE) และคาเปอรเซนตความคลาดเคลอนสมบรณเฉลย (Mean Absolute Percentage Error: MAPE)

โดยมขอมลตางๆ ดงน

ลาดบ ขอมลจรง ขอมลพยากรณ

1 22 26

2 25 28

3 39 32

4 40 41

5 42 38

6 45 40

7 36 39

8 38 32

9 40 42

10 39 36

จากตารางขอมลกาหนดใหคาขอมลจรงคอตวแปร Y และคาขอมลพยากรณคอ Y

ดงนนเราจะทาการทดสอบประสทธภาพการพยากรณโดยคานวณคาเบยงเบนสมบรณเฉลย (MAD) คาความคลาดเคลอนกาลงสองเฉลย (MSE) คาเปอรเซนตความคลาดเคลอนเฉลย (MPE) และคาเปอรเซนตความคลาดเคลอนสมบรณเฉลย (MAPE) โดยคานวณจากสมการดงน

n

YY

MAD

n

1i

n

)Y(Y

MSE

n

1i

2

n

100Y

YY

MPE

n

1i

Page 473: การเขียนโปรแกรมคอมพิวเตอร ์portal5.udru.ac.th/ebook/pdf/upload/17P88t2O788B98583682.pdfรูปภาพบางส่วนให

บทท 12 การประยกตภาษาซใชในงานดานสถตวจย

458

n

100Y

YY

APEM

n

1i

ทาการคานวณหา MAPEMPE,MSE,MAD, ดงแสดงในตาราง

ลาดบ Y Y YY

YY 2)Y(Y 100YY

Y

100YY

Y

1 22 26 -4 4 16 -18.18 18.18

2 25 28 -3 3 9 -12.00 12.00

3 39 32 7 7 49 17.95 17.95

4 40 41 -1 1 1 -2.50 2.50

5 42 38 4 4 16 9.25 9.25

6 45 40 5 5 25 11.11 11.11

7 36 39 -3 3 9 -8.33 8.33

8 38 32 6 6 36 15.79 15.79

9 40 42 -2 2 4 -5.00 5.00

10 39 36 3 3 9 7.69 7.69

รวม 366 354 38 174 16.05 108.07

จากนนนาไปแทนคาในสมการ

8.310

38

n

YY

MAD

n

1i

4.1710

174

n

)Y(Y

MSE

n

1i

2

605.110

05.16

n

100Y

YY

MPE

n

1i

807.1010

07.108

n

100Y

YY

MAPE

n

1i

Page 474: การเขียนโปรแกรมคอมพิวเตอร ์portal5.udru.ac.th/ebook/pdf/upload/17P88t2O788B98583682.pdfรูปภาพบางส่วนให

บทท 12 การประยกตภาษาซใชในงานดานสถตวจย

459

ตวอยางท 12.12 โปรแกรมคานวณหาคาเบยงเบนสมบรณเฉลย (Mean Absolute

Deviation: MAD) โดยใหรบคาขอมลจรงและคาขอมลพยากรณจานวน 10 คา 1 #include <stdio.h> 2 #include <math.h> 3 main() 4 { 5 float X[10],Y[10]; 6 float MAD; 7 int i; 8 float sum = 0; 9 float num = sizeof(X)/4; 10 for(i=0;i<num;i++) 11 { 12 printf("Real[%i] Prediction[%i] = ",i,i); 13 scanf("%f %f",&X[i],&Y[i]); 14 } 15 for(i=0;i<num;i++) 16 { 17 sum = sum + fabs(X[i]-Y[i]); 18 } 19 MAD = sum /num; 20 printf("Mean Absolute Deviation is %.2f",MAD);

21 }

ผลลพธของโปรแกรม Real[0] Prediction[0] = 22 26 Real[1] Prediction[1] = 25 28 Real[2] Prediction[2] = 39 32 Real[3] Prediction[3] = 40 41 Real[4] Prediction[4] = 42 38 Real[5] Prediction[5] = 45 40 Real[6] Prediction[6] = 36 39 Real[7] Prediction[7] = 38 32 Real[8] Prediction[8] = 40 42 Real[9] Prediction[9] = 39 36 Mean Absolute Deviation is 3.80

อธบายโปรแกรม

บรรทดท 5-8 กาหนดตวแปร X และ Y เปนตวแปรแถวลาดบ โดยตวแปร X สาหรบเกบคาตวแปรคาขอมลจรงและตวแปร Y เกบคาตวขอมลพยากรณ

กาหนดตวแปร MAD เปนตวแปรแบบเลขทศนยมเพอใชเกบคาผลลพธทไดจากการคานวณ กาหนดตวแปร sum เปนตวแปรแบบเลขทศนยมเพอใชเกบคาผลรวมของคาตวแปร และกาหนดตวแปร i เปนตวแปรเลขจานวนเตม

บรรทดท 9 เปนการหาคาขนาดของแถวลาดบเพอใชในการบงบอกจานวนขอมล

Page 475: การเขียนโปรแกรมคอมพิวเตอร ์portal5.udru.ac.th/ebook/pdf/upload/17P88t2O788B98583682.pdfรูปภาพบางส่วนให

บทท 12 การประยกตภาษาซใชในงานดานสถตวจย

460

บรรทดท 10-14 การรบคาขอมลเกบไวในแถวลาดบ X และ Y โดยจะทาการรบคาทละคจนครบทงหมด

บรรทดท 15-18 คานวณหาคาผลรวมของคาสมบรณระหวางคาขอมลจรงและคาขอมลพยากรณ โดยใชฟงกชน fabs() ในการหาคาสมบรณของตวแปรเลขทศนยม

บรรทดท 19 คานวณหาคาเบยงเบนสมบรณเฉลย (MAD)

บรรทดท 20 แสดงผลลพธของคาเบยงเบนสมบรณเฉลย

ตวอยางท 12.13 โปรแกรมคานวณหาคาความคลาดเคลอนกาลงสองเฉลย (Mean Square

Error: MSE) โดยใหรบคาขอมลจรงและคาขอมลพยากรณจานวน 10 คา 1 #include <stdio.h> 2 #include <math.h> 3 main() 4 { 5 float X[10],Y[10]; 6 float MSE; 7 int i; 8 float sum = 0; 9 float num = sizeof(X)/4; 10 for(i=0;i<num;i++) 11 { 12 printf("Real[%i] Prediction[%i] = ",i,i); 13 scanf("%f %f",&X[i],&Y[i]); 14 } 15 for(i=0;i<num;i++) 16 { 17 sum = sum + pow(X[i]-Y[i],2); 18 } 19 MSE = sum /num; 20 printf("Mean Square Error is %.2f",MSE);

21 }

ผลลพธของโปรแกรม Real[0] Prediction[0] = 22 26 Real[1] Prediction[1] = 25 28 Real[2] Prediction[2] = 39 32 Real[3] Prediction[3] = 40 41 Real[4] Prediction[4] = 42 38 Real[5] Prediction[5] = 45 40 Real[6] Prediction[6] = 36 39 Real[7] Prediction[7] = 38 32 Real[8] Prediction[8] = 40 42 Real[9] Prediction[9] = 39 36 Mean Square Error is 17.40

Page 476: การเขียนโปรแกรมคอมพิวเตอร ์portal5.udru.ac.th/ebook/pdf/upload/17P88t2O788B98583682.pdfรูปภาพบางส่วนให

บทท 12 การประยกตภาษาซใชในงานดานสถตวจย

461

อธบายโปรแกรม

บรรทดท 5-8 กาหนดตวแปร X และ Y เปนตวแปรแถวลาดบ โดยตวแปร X สาหรบเกบคาตวแปรคาขอมลจรงและตวแปร Y เกบคาตวขอมลพยากรณ

กาหนดตวแปร MSE เปนตวแปรแบบเลขทศนยมเพอใชเกบคาผลลพธทไดจากการคานวณ กาหนดตวแปร sum เปนตวแปรแบบเลขทศนยมเพอใชเกบคาผลรวมของคาตวแปร และกาหนดตวแปร i เปนตวแปรเลขจานวนเตม

บรรทดท 9 เปนการหาคาขนาดของแถวลาดบเพอใชในการบงบอกจานวนขอมล บรรทดท 10-14 การรบคาขอมลเกบไวในแถวลาดบ X และ Y โดยจะทาการรบคาท

ละคจนครบทงหมด

บรรทดท 15-18 คานวณหาคาผลรวมของคาสมบรณระหวางคาขอมลจรงและคาขอมลพยากรณ โดยใชฟงกชน pow() ในการหาคาการยกกาลงสองของผลลบระหวางคาขอมลจรงและคาพยากรณ

บรรทดท 19 คานวณหาคาความคลาดเคลอนกาลงสองเฉลย (MSE)

บรรทดท 20 แสดงผลลพธของคาความคลาดเคลอนกาลงสองเฉลย

ตวอยางท 12.14 โปรแกรมคานวณหาคาเปอรเซนตความคลาดเคลอนเฉลย (Mean

Percentage Error: MPE) โดยใหรบคาขอมลจรงและคาขอมลพยากรณจานวน 10 คา

1 #include <stdio.h> 2 #include <math.h> 3 main() 4 { 5 float X[10],Y[10]; 6 float MPE; 7 int i; 8 float sum = 0; 9 float num = sizeof(X)/4; 10 for(i=0;i<num;i++) 11 { 12 printf("Real[%i] Prediction[%i] = ",i,i); 13 scanf("%f %f",&X[i],&Y[i]); 14 } 15 for(i=0;i<num;i++) 16 { 17 sum = sum + (((X[i]-Y[i])/X[i])*100); 18 } 19 MPE = sum /num; 20 printf("Mean Percentage Error is %.2f",MPE); 21 }

Page 477: การเขียนโปรแกรมคอมพิวเตอร ์portal5.udru.ac.th/ebook/pdf/upload/17P88t2O788B98583682.pdfรูปภาพบางส่วนให

บทท 12 การประยกตภาษาซใชในงานดานสถตวจย

462

ผลลพธของโปรแกรม Real[0] Prediction[0] = 22 26 Real[1] Prediction[1] = 25 28 Real[2] Prediction[2] = 39 32 Real[3] Prediction[3] = 40 41 Real[4] Prediction[4] = 42 38 Real[5] Prediction[5] = 45 40 Real[6] Prediction[6] = 36 39 Real[7] Prediction[7] = 38 32 Real[8] Prediction[8] = 40 42 Real[9] Prediction[9] = 39 36 Mean Percentage Error is 1.61

อธบายโปรแกรม

บรรทดท 5-8 กาหนดตวแปร X และ Y เปนตวแปรแถวลาดบ โดยตวแปร X สาหรบเกบคาตวแปรคาขอมลจรงและตวแปร Y เกบคาตวขอมลพยากรณ

กาหนดตวแปร MPE เปนตวแปรแบบเลขทศนยมเพอใชเกบคาผลลพธทไดจากการคานวณ กาหนดตวแปร sum เปนตวแปรแบบเลขทศนยมเพอใชเกบคาผลรวมของคาตวแปร และกาหนดตวแปร i เปนตวแปรเลขจานวนเตม

บรรทดท 9 เปนการหาคาขนาดของแถวลาดบเพอใชในการบงบอกจานวนขอมล บรรทดท 10-14 การรบคาขอมลเกบไวในแถวลาดบ X และ Y โดยจะทาการรบคาท

ละคจนครบทงหมด

บรรทดท 15-18 คานวณหาคาผลรวมของคาเปอรเซนตความคลาดเคลอน

บรรทดท 19 คานวณหาคาเปอรเซนตความคลาดเคลอนเฉลย (MPE)

บรรทดท 20 แสดงผลลพธของคาเปอรเซนตความคลาดเคลอนเฉลย

Page 478: การเขียนโปรแกรมคอมพิวเตอร ์portal5.udru.ac.th/ebook/pdf/upload/17P88t2O788B98583682.pdfรูปภาพบางส่วนให

บทท 12 การประยกตภาษาซใชในงานดานสถตวจย

463

ตวอยางท 12.15 โปรแกรมคานวณหาเปอรเซนตคาความคลาดเคลอนสมบรณเฉลย (Mean

Absolute Percentage Error: MAPE) โดยใหรบคาขอมลจรงและคาขอมลพยากรณจานวน

10 คา

1 #include <stdio.h> 2 #include <math.h> 3 main() 4 { 5 float X[10],Y[10]; 6 float MAPE; 7 int i; 8 float sum = 0; 9 float num = sizeof(X)/4; 10 for(i=0;i<num;i++) 11 { 12 printf("Real[%i] Prediction[%i] = ",i,i); 13 scanf("%f %f",&X[i],&Y[i]); 14 } 15 for(i=0;i<num;i++) 16 { 17 sum = sum + ((fabs(X[i]-Y[i])/X[i])*100); 18 } 19 MAPE = sum /num; 20 printf("Mean Absolute Percentage Error is %.2f",MAPE);21 }

ผลลพธของโปรแกรม Real[0] Prediction[0] = 22 26 Real[1] Prediction[1] = 25 28 Real[2] Prediction[2] = 39 32 Real[3] Prediction[3] = 40 41 Real[4] Prediction[4] = 42 38 Real[5] Prediction[5] = 45 40 Real[6] Prediction[6] = 36 39 Real[7] Prediction[7] = 38 32 Real[8] Prediction[8] = 40 42 Real[9] Prediction[9] = 39 36 Mean Absolute Percentage Error is 10.81

อธบายโปรแกรม

บรรทดท 5-8 กาหนดตวแปร X และ Y เปนตวแปรแถวลาดบ โดยตวแปร X สาหรบเกบคาตวแปรคาขอมลจรงและตวแปร Y เกบคาตวขอมลพยากรณ

กาหนดตวแปร MAPE เปนตวแปรแบบเลขทศนยมเพอใชเกบคาผลลพธทไดจากการคานวณ กาหนดตวแปร sum เปนตวแปรแบบ

Page 479: การเขียนโปรแกรมคอมพิวเตอร ์portal5.udru.ac.th/ebook/pdf/upload/17P88t2O788B98583682.pdfรูปภาพบางส่วนให

บทท 12 การประยกตภาษาซใชในงานดานสถตวจย

464

เลขทศนยมเพอใชเกบคาผลรวมของคาตวแปร และกาหนดตวแปร i เปนตวแปรเลขจานวนเตม

บรรทดท 9 เปนการหาคาขนาดของแถวลาดบเพอใชในการบงบอกจานวนขอมล บรรทดท 10-14 การรบคาขอมลเกบไวในแถวลาดบ X และ Y โดยจะทาการรบคาท

ละคจนครบทงหมด

บรรทดท 15-18 คานวณหาคาผลรวมของคาเปอรเซนตความคลาดเคลอนโดยใชฟงกชน fabs() ในการหาคาสมบรณของตวแปรเลขทศนยม

บรรทดท 19 คานวณหาคาความคลาดเคลอนสมบรณเฉลย (MAPE)

บรรทดท 20 แสดงผลลพธของคาความคลาดเคลอนสมบรณเฉลย

12.4 การคนหาขอมลและการจดเรยงขอมล (Searching and Sorting)

12.4.1 การคนหาขอมล การคนหาขอมลเปนกระบวนการทจาเปนในทางสถตเพอใชในการคนหาขอมลท

ตองการ ในชวตประจาวนของเราจะมความสมพนธกบการคนหาขอมล ซงการไดขอมลทรวดเรวยอมสงผลทาใหไดประสทธภาพทดตามไปดวย ตวอยางการคนหาขอมลเชน การคนหาขอมลทตองการ การคนหาขอมลในฐานขอมล การคนหาขอมลของเสนทางทสนทสดสาหรบการเดนทาง การคนหาขอมลของทางเดนของหนยนต การคนหาขอมลของการคนหาลกษณะของหลกการกลายพนธ และการคนหาขอมลของโรค นอกจากนในปจจบนยงไดนาความรทางดานสถตและระบบปญญาประดษฐ (Artificial Intelligence) มาชวยในการคนหา และการพยากรณเหตการณ (Forecasting) ทจะเกดขนในอนาคต การคนหาในหวขอนจะเปนการคนหาขอมลเบองตนเพอทจะนาไปพฒนาตอยอดใหมประสทธภาพยงขน ในหวขอนจะกลาวถง การคนหาขอมลแบบลาดบ (Sequential Search) และการคนหาขอมลแบบทวภาค

(Binary Search) ซงเปนวธการทเปนทนยมใชกนอยางแพรหลายและนาไปประยกตใชงาน

ขนตอนวธการคนหาขอมลแบบลาดบ (Sequential Search)

การคนหาขอมลแบบลาดบ จะเปนการคนหาขอมลตงแตตวแรก และทาการคนไปจนกวาจะพบขอมลตวทตองการคนหา หรอถาคนหาจนถงขอมลตวสดทายแลวยงไมพบขอมลทตองการคนหา แสดงวาไมมขอมลตวทตองการคนหา ซงเหมาะสมการคนหาขอมลทมจานวนไมมากนกและขอมลไมจาเปนตองผานการจดเรยงลาดบ วธคนหาขอมลแบบลาดบ

Page 480: การเขียนโปรแกรมคอมพิวเตอร ์portal5.udru.ac.th/ebook/pdf/upload/17P88t2O788B98583682.pdfรูปภาพบางส่วนให

บทท 12 การประยกตภาษาซใชในงานดานสถตวจย

465

เปนการคนหาในลกษณะเชงเสน เปนวธทงายทสดเพอแสดงใหเหนกระบวนการคนหาเพอนาไปประยกตใชงานตอไป ตวอยางการคนหาขอมลแบบลาดบดงเชนตองการคนหาขอมลทมคา 32 เรมแรกกจะดาเนนการหาคาโดยกาหนด index = 0 ณ ตาแหนง A[0] และดาเนนการหาคาตาแหนง A[1] ไปจนกวาจะเจอขอมลทตองการ ซงในตวอยางนขอมลทตองการคอตาแหนง A[4]

รปท 12.1 การคนหาขอมลแบบลาดบ

A[0] A[1] A[2] A[3] A[4] A[5] A[6]

7 8 9 10 32 8 92

A[0] A[1] A[2] A[3] A[4] A[5] A[6]

7 8 9 10 32 8 92

A[0] A[1] A[2] A[3] A[4] A[5] A[6]

7 8 9 10 32 8 92

A[0] A[1] A[2] A[3] A[4] A[5] A[6]

7 8 9 10 32 8 92

A[0] A[1] A[2] A[3] A[4] A[5] A[6]

7 8 9 10 32 8 92

index=0

index=1

index=2

index=4

index=3

Page 481: การเขียนโปรแกรมคอมพิวเตอร ์portal5.udru.ac.th/ebook/pdf/upload/17P88t2O788B98583682.pdfรูปภาพบางส่วนให

บทท 12 การประยกตภาษาซใชในงานดานสถตวจย

466

การคนหาขอมลแบบลาดบเปนการคนหาขอมลแบบลาดบโดยจะทาการคนหาขอมลจากตวแรกไปจนถงตวทเจอขอมล เทคนคนเปนขนตอนวธทไมซบซอนและกระทาไดโดยงายแตอยางไรกตามขอเสยของวธการนคอในกรณทขอมลทมปรมาณมากและขอมลทตองการอยตาแหนงทาย จะทาใหตองเสยเวลามากในการคนหามาก ดงนนประสทธภาพของขนตอนวธของการคนหาขอมลแบบลาดบในกรณทแยทสดคอ O(n) ซงคอสญกรณโอใหญ (Big-Oh

Notation) โดยสญกรณโอใหญเปนสญกรณคณตศาสตรทใชแสดงแนวโนมการเตบโตทางเวลา (Growth in Run Time) โดยบรรยายพฤตกรรมเชงเสนกากบของฟงกชน เพอใชอธบายประสทธภาพของขนตอนวธเชงเวลาทไดออกแบบไว สญลกษณของสญกรณโอใหญจะแทนดวยเครองหมาย O( )

ตวอยางท 12.16 โปรแกรมคนหาตาแหนงของขอมลทตองการคนหา โดยใหรบคาขอมลจานวน 10 คา และใหกาหนดคาทตองการคนหาโดยทาการระบตาแหนงทเจอขอมล โดยวธการคนหาขอมลแบบลาดบ

1 #include <stdio.h> 2 main() 3 { 4 int X[10]; 5 int i; 6 int Position = 0; 7 int search; 8 int num = sizeof(X)/2; 9 for(i=0;i<num;i++) 10 { 11 printf("Input[%i] = ",i); 12 scanf("%i",&X[i]); 13 } 14 printf("Number of Finding = "); 15 scanf("%i",&search); 16 for(i=0;i<num;i++) 17 { 18 if(X[i]==search) 19 { 20 Position = i; 21 printf("Position of Searching is %i",i); 22 break; 23 } 24 if(i>=num-1) 25 { 26 printf("Can not Find"); 27 } 28 }

29 }

Page 482: การเขียนโปรแกรมคอมพิวเตอร ์portal5.udru.ac.th/ebook/pdf/upload/17P88t2O788B98583682.pdfรูปภาพบางส่วนให

บทท 12 การประยกตภาษาซใชในงานดานสถตวจย

467

ผลลพธของโปรแกรม (รนครงท 1)

Input[0] = 10 Input[1] = 11 Input[2] = 13 Input[3] = 34 Input[4] = 56 Input[5] = 32 Input[6] = 14 Input[7] = 77 Input[8] = 88 Input[9] = 99 Number of Finding = 14 Position of Searching is 6

(รนครงท 2)

Input[0] = 1 Input[1] = 2 Input[2] = 3 Input[3] = 4 Input[4] = 5 Input[5] = 6 Input[6] = 7 Input[7] = 8 Input[8] = 9 Input[9] = 10 Number of Finding = 100 Can not Find

อธบายโปรแกรม

บรรทดท 4-7 กาหนดตวแปร X เปนตวแปรแถวลาดบ โดยตวแปร X สาหรบเกบคาตวแปรคาขอมล กาหนดตวแปร Position และ search เปนตวแปรแบบเลขจานวนเตม โดยตวแปร Position เพอใชเกบคาผลลพธตาแหนงของตวชทคนพบขอมล ตวแปร search เพอใชเกบคาทตองการคนหา และกาหนดตวแปร i เปนตวแปรเลขจานวนเตมเพอเปนตวชขอมลในการคนหาแบบลาดบ

บรรทดท 8 เปนการหาคาขนาดของแถวลาดบเพอใชในการบงบอกจานวนขอมล บรรทดท 9-13 การรบคาขอมลเกบไวในแถวลาดบ X จานวน 10 คาเพอเปนขอมล

สาหรบการคนหา บรรทดท 14-15 แสดงขอความและรบคาขอมลทตองการคนหา

Page 483: การเขียนโปรแกรมคอมพิวเตอร ์portal5.udru.ac.th/ebook/pdf/upload/17P88t2O788B98583682.pdfรูปภาพบางส่วนให

บทท 12 การประยกตภาษาซใชในงานดานสถตวจย

468

บรรทดท 16-28 คานวณหาคาตาแหนงของขอมล ถาเจอขอมลใหแสดงตาแหนงของขอมล ถาไมเจอขอมลใหแสดงขอความวาไมพบขอมล

ขนตอนวธการคนหาขอมลแบบทวภาค (Binary Search)

การคนหาขอมลแบบทวภาคเปนวธการทเพมประสทธภาพในการคนหาขอมลและมประสทธภาพมากกวาวธการคนหาขอมลแบบลาดบ โดยขอมลจะตองมการจดเรยงกอนทจะดาเนนการคนหา โดยมลาดบขนตอนวธการคนหาจะทาการตรวจสอบตาแหนงกงกลางของขอมลทนามาคนหาโดยคานวณจากตาแหนงขอมลแรกรวมกบตาแหนงขอมลสดทายแลวหารดวยสองจากนนนาขอมลตวทตองการคนหาไปเปรยบเทยบวาเทากบคาของตาแหนงกงกลางหรอไม ถาเทากนแสดงวาพบขอมลทตองการคนหาในตาแหนงกงกลาง และถาไมเทากนใหเปรยบเทยบวาคาทตองการคนหามคามากกวาคาในตาแหนงกงกลางหรอไม โดยถามากกวาใหคนหาขอมลทางดานขวาของตาแหนง แตถานอยกวาใหคนหาขอมลดานซายของตาแหนง ทาซาไปจนกวาจะเจอขอมล แตถาไมเจอแสดงวาไมมขอมลทตองการคนหา

ตวอยางท 12.17 จากขอมล [10, 12, 15, 20, 28, 30, 45, 60] จงคนหาขอมล 28 ดวยวธการคนหาขอมลแบบทวภาค

Search = 28

รอบท 1 mid = (first+last)/2 = (0+7)/2 = 3

data index 0 1 2 3 4 5 6 7

value 10 12 15 20 28 30 45 60

first mid last

Search > data[mid] เพราะฉะนน first=4 และ last=7

รอบท 2 mid = (first+last)/2 = (4+7)/2 = 5

data index 0 1 2 3 4 5 6 7

value 10 12 15 20 28 30 45 60

first mid last

Search < data[mid] เพราะฉะนน first=4 และ last=4

Page 484: การเขียนโปรแกรมคอมพิวเตอร ์portal5.udru.ac.th/ebook/pdf/upload/17P88t2O788B98583682.pdfรูปภาพบางส่วนให

บทท 12 การประยกตภาษาซใชในงานดานสถตวจย

469

รอบท 3 mid = (first+last)/2 = (4+4)/2 = 4

data index 0 1 2 3 4 5 6 7

value 10 12 15 20 28 30 45 60

first

last

mid

Search = data[mid] เพราะฉะนนพบขอมล 28 ตาแหนงหรอดรรชนท 4

ประสทธภาพการคนหาขอมลแบบทวภาคจะมประสทธภาพมากกวาวธการคนหาขอมลแบบลาดบซงเปรยบเสมอนการพบกระดาษทละครงไปจนกวาจะเจอสงทตองการ ดงนนประสทธภาพของขนตอนวธของการคนหาขอมลแบบทวภาคในกรณทแยทสดคอ O(log n)

ตวอยางท 12.18 โปรแกรมคนหาตาแหนงของขอมลทตองการคนหา โดยใหรบคาขอมลจานวน 10 คา และใหกาหนดคาทตองการคนหาโดยทาการระบตาแหนงทเจอขอมลโดยวธการคนหาขอมลแบบทวภาค

1 #include <stdio.h> 2 main() 3 { 4 int X[10]; 5 int i; 6 int first,last,mid; 7 int Position = 0; 8 int search; 9 int num = sizeof(X)/2; 10 for(i=0;i<num;i++) 11 { 12 printf("Input[%i] = ",i); 13 scanf("%i",&X[i]); 14 } 15 printf("Number = "); 16 scanf("%i",&search); 17 last = num-1; 18 first = 0; 19 i = 0; 20 while((i<num)||(first>=last)) 21 { 22 mid = (first + last)/2; 23 if(X[mid]==search) 24 { 25 Position = mid;

Page 485: การเขียนโปรแกรมคอมพิวเตอร ์portal5.udru.ac.th/ebook/pdf/upload/17P88t2O788B98583682.pdfรูปภาพบางส่วนให

บทท 12 การประยกตภาษาซใชในงานดานสถตวจย

470

26 printf("Position of Searching is %i",mid); 27 break; 28 }else if(search > X[mid]) 29 { 30 first = mid+1; 31 i = first; 32 }else if(search < X[mid]) 33 { 34 last = last-1; 35 i = last; 36 } 37 } 38 if(first>=last) 39 { 40 printf("Can not Find"); 41 }

42 }

ผลลพธของโปรแกรม (รนครงท 1)

Input[0] = 1 Input[1] = 2 Input[2] = 3 Input[3] = 4 Input[4] = 5 Input[5] = 6 Input[6] = 7 Input[7] = 8 Input[8] = 9 Input[9] = 10 Number = 9 Position of Searching is 8

(รนครงท 2)

Input[0] = 10 Input[1] = 20 Input[2] = 30 Input[3] = 40 Input[4] = 50 Input[5] = 60 Input[6] = 70 Input[7] = 80 Input[8] = 90 Input[9] = 100 Number = 20 Position of Searching is 1

Page 486: การเขียนโปรแกรมคอมพิวเตอร ์portal5.udru.ac.th/ebook/pdf/upload/17P88t2O788B98583682.pdfรูปภาพบางส่วนให

บทท 12 การประยกตภาษาซใชในงานดานสถตวจย

471

อธบายโปรแกรม

บรรทดท 4-8 กาหนดตวแปร X เปนตวแปรแถวลาดบ โดยตวแปร X สาหรบเกบคาตวแปรคาขอมล กาหนดตวแปร Position และ search เปนตวแปรแบบเลขจานวนเตม โดยตวแปร Position เพอใชเกบคาผลลพธตาแหนงของตวชทคนพบขอมล ตวแปร search เพอใชเกบคาทตองการคนหา กาหนดตดแปร first, mid, last เปนตวแปรแบบเลขจานวนเตม และกาหนดตวแปร i เปนตวแปรเลขจานวนเตมเพอเปนตวชขอมลในการคนหาแบบทวภาค

บรรทดท 9 เปนการหาคาขนาดของแถวลาดบเพอใชในการบงบอกจานวนขอมล บรรทดท 10-14 การรบคาขอมลเกบไวในแถวลาดบ X จานวน 10 คาเพอเปนขอมล

สาหรบการคนหา บรรทดท 15-16 แสดงขอความและรบคาขอมลทตองการคนหา บรรทดท 17-19 กาหนดคาเรมตนของตวแปรเพอเปนตาแหนงของขอมลทจะทาการ

เปรยบเทยบ

บรรทดท 20-37 คานวณหาคาตาแหนงของขอมล ถาเจอขอมลใหแสดงตาแหนงของขอมล ถาไมเจอขอมลใหแสดงขอความวาไมพบขอมล โดยใหทาซาไปจนกวา (i<num)หรอ(first>=last)วธการคนหาทวภาคจะทาการหาคากงกลางแลวนามาเปรยบเทยบดงแสดงในบรรทดท 22-36 โดยถาตาแหนงกงกลางคอขอมลทคนหาแสดงวาเจอขอมลทตองการ ถาคาทตองการคนหามากกวาคาตาแหนงกงกลาง ให first = mid+1;

และถาคาทตองการคนหานอยกวาคาตาแหนงกงกลางให last =

last-1; ใหทาซาจนกวาจะเจอขอมล โดยถาไมเจอแสดงวาไมพบขอมลจะแสดงคาวา “Can not Find” ทหนาจอภาพ

Page 487: การเขียนโปรแกรมคอมพิวเตอร ์portal5.udru.ac.th/ebook/pdf/upload/17P88t2O788B98583682.pdfรูปภาพบางส่วนให

บทท 12 การประยกตภาษาซใชในงานดานสถตวจย

472

12.4.2 การจดเรยงขอมล การเรยงลาดบขอมลเปนหวขอหนงทสาคญในดานสถตเนองจากในการดาเนนการ

ทางสถตบางอยางจาเปนทจะตองมการเรยงลาดบขอมลกอนทจะมการประมวลผลดานสถต

ดงเชนการหาคามธยฐาน การหาคาพสยควอรไทล และการหาคาสวนเบยงเบนควอรไทลเปนตน ในการเรยงลาดบขอมลเปนงานพนฐานทใชในโปรแกรมประยกตตางๆ ขนตอนวธทใชเพอการเรยงลาดบขอมลแตละวธมหลากหลายวธและมขอดขอเสยแตกตางกน ซงในบางครงกขนอยกบจานวน ชนดของขอมล การกาหนดคาตอนเรมตน ขนาด และคาของขอมลทจะทาการเรยงลาดบ ดงนนขนตอนวธในการจดเรยงขอมลจงเปนขนตอนทมความจาเปนในการพฒนาไปสการเขยนโปรแกรมเพอใหสามารถดาเนนการเขยนโปรแกรมไปในทศทางทตองการได ซงในหวขอการจดเรยงขอมลจะกลาวถงวธการจดเรยงทนยมใชกนอยางแพรหลายดงเชนวธการเรยงลาดบแบบเลอก (Selection Sort) การเรยงลาดบแบบแทรก (Insertion Sort) และการเรยงลาดบแบบฟอง (Bubble Sort) เพอเปนพนฐานการเขยนโปรแกรมในการจดเรยงขอมลอยางมประสทธภาพ

ขนตอนวธการจดเรยงขอมลแบบเลอก (Selection Sort)

ขนตอนวธการเรยงลาดบขอมลดวยวธการเรยงลาดบแบบเลอกเปนวธทงายและกเปนวธทใชงานมากทสด แตมขอเสยในกรณทมขอมลจานวนมาก แตถาขอมลทมนอยนบวาเปนวธการทเหมาะสมเนองจากไมซบซอนและสามารถเขยนโปรแกรมไดไมยาก การเรยงลาดบแบบเลอก สามารถแสดงขนตอนวธไดโดยกาหนดใหตาแหนงแรกของขอมล เปนตาแหนงทพจารณาจากนนคนหาขอมลตวทมคานอยทสดของขอมลทอยตาแหนงถดจากตาแหนงทพจารณาแลวทาการเปรยบเทยบวาขอมลททาการเปรยบเทยบมคานอยกวาขอมลตาแหนงทพจารณาหรอไม ถาใชใหสลบตาแหนงกน และใหตรวจสอบวามขอมลทอยถดจากตาแหนงทพจารณา และตองไมเปนขอมลตวสดทายของขอมลทนามาจดเรยงหรอไม ถามใหกาหนดตาแหนงของขอมลนนเปนตาแหนงทพจารณา แลวกลบไปคนหาตาแหนงทนอยทสด แตถาไมมแสดงวาการเรยงลาดบเสรจสมบรณ ดงเชนการเรยงลาดบขอมล [44 17 40 32 9 14] แสดงการเรยงลาดบดงน

Page 488: การเขียนโปรแกรมคอมพิวเตอร ์portal5.udru.ac.th/ebook/pdf/upload/17P88t2O788B98583682.pdfรูปภาพบางส่วนให

บทท 12 การประยกตภาษาซใชในงานดานสถตวจย

473

รอบท 0 44 17 40 32 9 14

รอบท 1 9 17 40 32 44 14

รอบท 2 9 14 40 32 44 17

รอบท 3 9 14 17 32 44 40

รอบท 4 9 14 17 32 44 40

รอบท 5 9 14 17 32 40 44

ประสทธภาพการเรยงลาดบแบบเลอกจะใชเวลาสวนใหญในการเปรยบเทยบขอมลทงหมดในแตละครงจนพบขอมลทตองการจงทาการสลบคา ดงนนเวลาสวนใหญจะเปนการเปรยบเทยบขอมล ดงนนประสทธภาพของขนตอนวธของการเรยงลาดบแบบเลอกในกรณทแยทสดคอ O(n

2)

ตวอยางท 12.19 โปรแกรมจดเรยงขอมล โดยใหรบคาขอมลจานวน 10 คา โดยวธการจดเรยงขอมลแบบเลอก

1 #include <stdio.h> 2 main() 3 { 4 int X[10]; 5 int i,j,temp; 6 int num = sizeof(X)/2; 7 for(i=0;i<num;i++) 8 { 9 printf("Input[%i] = ",i); 10 scanf("%i",&X[i]); 11 } 12 for(i=0;i<num;i++) 13 { 14 for(j=i+1;j<num;j++) 15 { 16 if(X[i]>X[j]) 17 {

Page 489: การเขียนโปรแกรมคอมพิวเตอร ์portal5.udru.ac.th/ebook/pdf/upload/17P88t2O788B98583682.pdfรูปภาพบางส่วนให

บทท 12 การประยกตภาษาซใชในงานดานสถตวจย

474

18 temp=X[i]; 19 X[i]=X[j]; 20 X[j]=temp; 21 } 22 } 23 } 24 printf("Selection Sort is: "); 25 for(i=0;i<num;i++) 26 { 27 printf(" %d",X[i]); 28 }

29 }

ผลลพธของโปรแกรม Input[0] = 1 Input[1] = 3 Input[2] = 5 Input[3] = 7 Input[4] = 9 Input[5] = 2 Input[6] = 4 Input[7] = 6 Input[8] = 8 Input[9] = 10 Selection Sort is: 1 2 3 4 5 6 7 8 9 10

อธบายโปรแกรม

บรรทดท 4-5 กาหนดตวแปร X เปนตวแปรแถวลาดบ โดยตวแปร X สาหรบเกบคาตวแปรคาขอมล กาหนดตวแปร i, j และ temp เปนตวแปรเลขจานวนเตม โดยตวแปร i และ j เปนตวกาหนดตาแหนงของขอมลทจะใชในวธการจดเรยงขอมล และตวแปร temp เพอเปนทเกบขอมลชวคราวในการสลบตาแหนงของขอมล

บรรทดท 6 เปนการหาคาขนาดของแถวลาดบเพอใชในการบงบอกจานวนขอมล บรรทดท 7-11 การรบคาขอมลเกบไวในแถวลาดบ X จานวน 10 คา เพอเปนคา

เรมตนสาหรบการจดเรยงขอมล บรรทดท 12-23 ทาการจดเรยงขอมลโดยจะดาเนนการดาเนนการเปรยบเทยบ

ตาแหนงถดไปเรอยๆ จนกวาจะถงตวสดทายของขอมล โดยทาการเปรยบเทยบคาทพจารณาและคาทเปรยบเทยบ ถาขอมลททาการเปรยบเทยบมคานอยกวาขอมลตาแหนงทพจารณาใหสลบตาแหนงกน และใหตรวจสอบวามขอมลทอยถดจากตาแหนงทพจารณา และตองไมเปนขอมลตวสดทายของขอมลทนามาจดเรยงหรอไม ถามให

Page 490: การเขียนโปรแกรมคอมพิวเตอร ์portal5.udru.ac.th/ebook/pdf/upload/17P88t2O788B98583682.pdfรูปภาพบางส่วนให

บทท 12 การประยกตภาษาซใชในงานดานสถตวจย

475

กาหนดตาแหนงของขอมลนนเปนตาแหนงทพจารณา แลวกลบไปคนหาตาแหนงทนอยทสด แตถาไมมแสดงวาการเรยงลาดบเสรจสมบรณ

บรรทดท 24-28 แสดงผลลพธของการจดเรยงขอมล

ขนตอนวธการจดเรยงขอมลแบบแทรก (Insertion Sort)

ขนตอนวธการเรยงลาดบขอมลดวยวธการเรยงลาดบแบบแทรกเปนอกวธการทไมซบซอนและเหมาะสาหรบการนาไปประยกตใชงานโดยมแนวความคดอยทการนาเอาขอมลใหมเพมเขาไปในชดขอมลทมการเรยงลาดบอยแลว โดยขอมลใหมทนาเขามาแทรกอยในตาแหนงทางขวาของขอมลชดเดม และยงคงทาใหขอมลทงหมดมการเรยงลาดบ โดยเรมตนจากการเรยงลาดบขอมล 2 ตว จากนนกกระทาการเพมขอมลเขามาพรอมทงทาการเปรยบเทยบ วธนเรมตนโดยการเรยงลาดบขอมล 2 ตวแรกของชดขอมล หลงจากนนเพมขอมลตวท 3 เขามาและทาการแทรกในตาแหนงทจดเรยง จากนนกจะกระทาไปจนกวาจะครบขอมลททาการจดเรยง ซงเปรยบเสมอนเทคนคทนาไปใชกบการเรยงไพ ดงเชนการเรยงลาดบขอมล [44 17 40 32 9 14] แสดงการเรยงลาดบดงน

รอบท 0 44 17 40 32 9 14

รอบท 1 17 44 40 32 9 14

รอบท 2 17 40 44 32 9 14

รอบท 3 17 32 40 44 9 14

รอบท 4 9 17 32 40 44 14

รอบท 5 9 14 17 32 40 44

Page 491: การเขียนโปรแกรมคอมพิวเตอร ์portal5.udru.ac.th/ebook/pdf/upload/17P88t2O788B98583682.pdfรูปภาพบางส่วนให

บทท 12 การประยกตภาษาซใชในงานดานสถตวจย

476

การเรยงลาดบแบบแทรกนเปนวธการทงายไมซบซอนแนวความคดอยทการนาเอาขอมลใหมเพมเขาไปในชดขอมลทมการเรยงลาดบอยแลว ดงนนประสทธภาพการเรยงลาดบแบบแทรกโดยทวไปจะคานวณจากจานวนครงของการเปรยบเทยบขอมลในลกษณะยอนกลบในแตละรอบของการเรยง ดงนนประสทธภาพของขนตอนวธของการเรยงลาดบแบบแทรกในกรณทแยทสดคอ O(n

2)

ตวอยางท 12.20 โปรแกรมจดเรยงขอมล โดยใหรบคาขอมลจานวน 10 คา โดยวธการจดเรยงขอมลแบบแทรก

1 #include <stdio.h> 2 main() 3 { 4 int X[10]; 5 int i,j,temp; 6 int num = sizeof(X)/2; 7 for(i=0;i<num;i++) 8 { 9 printf("Input[%i] = ",i); 10 scanf("%i",&X[i]); 11 } 12 for(i=1;i<num;i++) 13 { 14 temp=X[i]; 15 j=i-1; 16 while((temp<X[j])&&(j>=0)) 17 { 18 X[j+1]=X[j]; 19 j=j-1; 20 } 21 X[j+1]=temp; 22 } 23 printf("Insearch Sort is: "); 24 for(i=0;i<num;i++) 25 { 26 printf(" %d",X[i]); 27 }28 }

ผลลพธของโปรแกรม Input[0] = 2 Input[1] = 4 Input[2] = 6 Input[3] = 7 Input[4] = 9 Input[5] = 8 Input[6] = 1 Input[7] = 3 Input[8] = 5 Input[9] = 10 Insearch Sort is: 1 2 3 4 5 6 7 8 9 10

Page 492: การเขียนโปรแกรมคอมพิวเตอร ์portal5.udru.ac.th/ebook/pdf/upload/17P88t2O788B98583682.pdfรูปภาพบางส่วนให

บทท 12 การประยกตภาษาซใชในงานดานสถตวจย

477

อธบายโปรแกรม

บรรทดท 4-5 กาหนดตวแปร X เปนตวแปรแถวลาดบ โดยตวแปร X สาหรบเกบคาตวแปรคาขอมล กาหนดตวแปร i, j และ temp เปนตวแปรเลขจานวนเตม โดยตวแปร i และ j เปนตวกาหนดตาแหนงของขอมลทจะใชในวธการจดเรยงขอมล และตวแปร temp เพอเปนทเกบขอมลชวคราวในการสลบตาแหนงของขอมล

บรรทดท 6 เปนการหาคาขนาดของแถวลาดบเพอใชในการบงบอกจานวนขอมล บรรทดท 7-11 การรบคาขอมลเกบไวในแถวลาดบ X จานวน 10 คา เพอเปนคา

เรมตนสาหรบการจดเรยงขอมล บรรทดท 12-22 ทาการจดเรยงขอมลโดยวธการจดเรยงแบบแทรกโดยเรมจากขอมล

สองตวแรกทาการเปรยบเทยบจากนนกกระทาการเพมขอมลเขามาพรอมทงทาการเปรยบเทยบ ถาขอมลททาการเปรยบเทยบมคานอยกวาใหทาการแทรกขอมลโดยจะทาการจดเรยงขอมล จากนน

จากนนกจะกระทาไปจนกวาจะครบขอมลททาการจดเรยง บรรทดท 23-27 แสดงผลลพธของการจดเรยงขอมล

ขนตอนวธการจดเรยงขอมลแบบฟอง (Bubble Sort)

ขนตอนวธการเรยงลาดบขอมลดวยวธการเรยงลาดบแบบฟองเปนการเรยงลาดบขอมลทดจากคาทพจารณาและคาทเปรยบเทยบขางเคยง โดยคาทพจารณามคามากกวาคาเปรยบเทยบใหสลบตาแหนงกน และจะกระทาการเปรยบเทยบกบคาทเปรยบเทยบไปจนถงขอมลตาแหนงสดทาย กจะไดคาทมากทสดอยดานขวา (เปรยบเสมอนการลอยของฟองทจะลอยไปหลงสด) จากนนเมอเสรจกระบวนการนแลวกจะดาเนนการทาซาโดยดจากคาทพจารณาและคาทเปรยบเทยบไปจนกวาจะไดขอมลทมการจดเรยง ดงเชนการเรยงลาดบขอมล [44 17 40 32 9 14] แสดงการเรยงลาดบดงน

Page 493: การเขียนโปรแกรมคอมพิวเตอร ์portal5.udru.ac.th/ebook/pdf/upload/17P88t2O788B98583682.pdfรูปภาพบางส่วนให

บทท 12 การประยกตภาษาซใชในงานดานสถตวจย

478

รอบท 0 44 17 40 32 9 14

รอบท 1 17 40 32 9 14 44

รอบท 2 17 32 9 14 40 44

รอบท 3 17 9 14 32 40 44

รอบท 4 9 14 17 32 44 40

รอบท 5 9 14 17 32 40 44

การเรยงลาดบแบบฟองเปนการเปรยบเทยบคาสองคาทอยใกลกนตอเนองกนไปเรอยๆ และตดสนใจวาจะทาการสลบตาแหนงกนหรอไม ดงนนประสทธภาพการเรยงลาดบแบบฟองจะมลกษณะคลายกนกบวธการเรยงขอมลแบบเลอกดงนนประสทธภาพของขนตอนวธของการเรยงลาดบแบบฟองในกรณทแยทสดคอ O(n

2)

ตวอยางท 12.20 โปรแกรมจดเรยงขอมล โดยใหรบคาขอมลจานวน 10 คา โดยวธการจดเรยงขอมลแบบฟอง

1 #include <stdio.h> 2 main() 3 { 4 int X[10]; 5 int i,j,temp; 6 int num = sizeof(X)/4; 7 for(i=0;i<num;i++) 8 { 9 printf("Input[%i] = ",i); 10 scanf("%i",&X[i]); 11 } 12 for(i=num-2;i>=0;i--) 13 { 14 for(j=0;j<=i;j++) 15 { 16 if(X[j]>X[j+1])

Page 494: การเขียนโปรแกรมคอมพิวเตอร ์portal5.udru.ac.th/ebook/pdf/upload/17P88t2O788B98583682.pdfรูปภาพบางส่วนให

บทท 12 การประยกตภาษาซใชในงานดานสถตวจย

479

17 { 18 temp=X[j]; 19 X[j]=X[j+1]; 20 X[j+1]=temp; 21 } 22 } 23 } 24 printf("Buble Sort is: "); 25 for(i=0;i<num;i++) 26 { 27 printf(" %d",X[i]); 28 } 29 }

ผลลพธของโปรแกรม Input[0] = 2 Input[1] = 1 Input[2] = 4 Input[3] = 3 Input[4] = 6 Input[5] = 5 Input[6] = 8 Input[7] = 7 Input[8] = 9 Input[9] = 11 Buble Sort is: 1 2 3 4 5 6 7 8 9 11

อธบายโปรแกรม

บรรทดท 4-5 กาหนดตวแปร X เปนตวแปรแถวลาดบ โดยตวแปร X สาหรบเกบคาตวแปรคาขอมล กาหนดตวแปร i, j และ temp เปนตวแปรเลขจานวนเตม โดยตวแปร i และ j เปนตวกาหนดตาแหนงของขอมลทจะใชในวธการจดเรยงขอมล และตวแปร temp เพอเปนทเกบขอมลชวคราวในการสลบตาแหนงของขอมล

บรรทดท 6 เปนการหาคาขนาดของแถวลาดบเพอใชในการบงบอกจานวนขอมล บรรทดท 7-11 การรบคาขอมลเกบไวในแถวลาดบ X จานวน 10 คา เพอเปนคา

เรมตนสาหรบการจดเรยงขอมล

Page 495: การเขียนโปรแกรมคอมพิวเตอร ์portal5.udru.ac.th/ebook/pdf/upload/17P88t2O788B98583682.pdfรูปภาพบางส่วนให

บทท 12 การประยกตภาษาซใชในงานดานสถตวจย

480

บรรทดท 12-23 ทาการจดเรยงขอมลโดยวธการจดเรยงแบบฟอง โดยการเรยงลาดบจะมขอมลทดจากคาทพจารณาและคาทเปรยบเทยบขางเคยง โดยคาทพจารณามคามากกวาคาเปรยบเทยบใหสลบตาแหนงกน และจะกระทาการเปรยบเทยบกบคาทเปรยบเทยบไปจนถงขอมลตาแหนงสดทาย กจะไดคาทมากทสดอยดานขวา จากนนเมอเสรจกระบวนการนแลวกจะดาเนนการทาซาไปจนกวา i>=0 และ j<=i

ซงกจะเสรจสนการจดเรยงขอมลแบบฟอง บรรทดท 24-28 แสดงผลลพธของการจดเรยงขอมล

Page 496: การเขียนโปรแกรมคอมพิวเตอร ์portal5.udru.ac.th/ebook/pdf/upload/17P88t2O788B98583682.pdfรูปภาพบางส่วนให

บทท 12 การประยกตภาษาซใชในงานดานสถตวจย

481

บทสรป

ในบทนไดกลาวถงการวดแนวโนมเขาสสวนกลาง การวดการกระจายของขอมล การคานวณสมการถดถอย และการคนหาขอมลและการจดเรยงขอมล โดยการวดแนวโนมเขาสสวนกลางเปนวธการทใชในการบรรยายลกษณะของขอมลทรวบรวมมาได โดยใชตวเลขเพยงจานวนเดยวหรอคาเดยว แทนลกษณะของขอมลชดนน โดยสถตทนยมใชวดแนวโนมเขาสสวนกลางคอตวกลางเลขคณต มธยฐาน และฐานนยม การวดการกระจายของขอมล เปนสถตประเภทหนงทคานวณคาเพอใชอธบายลกษณะการกระจายของขอมล ซงเปนการสรปลกษณะของขอมลวามลกษณะการกระจายตวของขอมลเปนอยางไร วธการวดการกระจายตวของขอมลทนยมใชกนดงเชน พสย พสยควอรไทลและสวนเบยงเบนควอรไทล และสวนเบยงเบนมาตรฐานและความแปรปรวน การคานวณสมการถดถอยเปนเทคนคหนงทใชวเคราะหความสมพนธระหวางตวแปรโดยมจดมงหมายเพอการพยากรณ คาของตวแปรทตองการ เมอทราบคาของตวแปรอกตวหนงหรออกหลายตว เมอไดทาการพยากรณแลวสงทจาเปนในลาดบถดไปจากการพยากรณคอการวดประสทธภาพของการพยากรณซงจะมอยหลากหลายวธการดงเชนวธการวดประสทธภาพการพยากรณโดยใชคาเบยงเบนสมบรณเฉลย คาความคลาดเคลอนกาลงสองเฉลย คาเปอรเซนตความคลาดเคลอนเฉลย และคาเปอรเซนตความคลาดเคลอนสมบรณเฉลย ซงเปนเทคนคในการวดประสทธภาพในการพยากรณทใชเปนทนยมและใชกนอยางแพรหลายในงานวจยตางๆ สดทายคอการคนหาขอมลและการจดเรยงขอมลซงเปนสงจาเปนในทางสถตวจยทไดกลาวในบทน ซงในบางครงอาจจะมความจาเปนในการคนหาขอมลทสาคญจากกลมขอมลขนาดใหญเพอมาคานวณคาทางสถต หรอมการจดเรยงขอมลกอนทจะดาเนนการประมวลผลทางวธการทางสถตเปนตน ในการคนหาขอมลในบทนไดกลาวถงการเขยนโปรแกรมในการคนหาขอมลแบบลาดบ และการคนหาขอมลแบบทวภาค ซงเปนวธการทเปนทนยมใชกนอยางแพรหลายและการประประยกตใชงาน

สวนการจดเรยงขอมลไดกลาวถงการเขยนโปรแกรมในจดเรยงขอมลแบบเลอก การจดเรยงขอมลแบบแทรก และการจดเรยงขอมลแบบฟอง ซงเปนวธการจดเรยงขอมลทกระทาไดโดยงายและเหมาะสมกบการนาไปประยกตใชงาน

Page 497: การเขียนโปรแกรมคอมพิวเตอร ์portal5.udru.ac.th/ebook/pdf/upload/17P88t2O788B98583682.pdfรูปภาพบางส่วนให

บทท 12 การประยกตภาษาซใชในงานดานสถตวจย

482

แบบฝกหดทบทวน

1. จงอธบายการวดแนวโนมเขาสสวนกลางคออะไร และมประโยชนอยางไร พรอมทงยกตวอยางการนาไปใชงาน

2. จงอธบายการวดการกระจายของขอมลคออะไร และมประโยชนอยางไร พรอมทงยกตวอยางการนาไปใชงาน

3. จงอธบายการคานวณสมการถดถอยคออะไร และมประโยชนอยางไร พรอมทงยกตวอยางการนาไปใชงาน

4. จงเขยนโปรแกรมคานวณคาตวกลางเลขคณต (Arithmetic Mean) มธยฐาน (Median)

และฐานนยม (Mode) จากขอมลทงหมด 10 คา โดยคาอนพตทปอนเขาไปไมจาเปนตองเรยงลาดบคาขอมล

5. จงเขยนโปรแกรมคานวณคาพสย (Range) พสยควอรไทลและสวนเบยงเบนควอรไทล (Quartile Range and Quartile Deviation) และสวนเบยงเบนมาตรฐานและความแปรปรวน (Standard Deviation and Variance) จากจานวนขอมลทงหมด 10 คา โดยคาอนพตทปอนเขาไปไมจาเปนตองเรยงลาดบคาขอมล

6. จงอธบายคาการพยากรณโดยใชคาเบยงเบนสมบรณเฉลย (Mean Absolute Deviation:

MAD) คาความคลาดเคลอนกาลงสองเฉลย (Mean Square Error: MSE) คาเปอรเซนตความคลาดเคลอนเฉลย (Mean Percentage Error: MPE) และคาเปอรเซนตความคลาดเคลอนสมบรณเฉลย (Mean Absolute Percentage Error: MAPE) คออะไร และมประโยชนอยางไร พรอมทงยกตวอยางการนาไปใชงาน

7. จงเขยนโปแกรมเพอคานวณการสรางสมการถดถอยแบบเสนตรงเพอใชในการพยากรณ

โดยสามารถกาหนดคาจานวนอนพตทปอนเขาไป และเมอคานวณไดสมการถดถอยแลวใหคานวณหาคาประสทธภาพของการพยากรณโดยใชคาความคลาดเคลอนกาลงสองเฉลย (Mean Square Error: MSE) และคาเปอรเซนตความคลาดเคลอนสมบรณเฉลย (Mean Absolute Percentage Error: MAPE)

Page 498: การเขียนโปรแกรมคอมพิวเตอร ์portal5.udru.ac.th/ebook/pdf/upload/17P88t2O788B98583682.pdfรูปภาพบางส่วนให

บทท 12 การประยกตภาษาซใชในงานดานสถตวจย

483

8. ใหนกศกษาหาขอมลงานวจยในการพยากรณตางๆ จานวน 1 งานวจย เชนการพยากรณปรมาณนาฝน การพยากรณสนคา การพยากรณการซอขายตลาดหน และการพยากรณปรมาณการใชไฟฟาเปนตน โดยหาขอมลคาตวแปรอสระ (X) และตวแปรตาม (Y) เพอนาขอมลทไดมาสรางโปรแกรมพยากรณพรอมทงทดสอบประสทธภาพของการพยากรณโดยใชคาเบยงเบนสมบรณเฉลย (Mean Absolute Deviation: MAD) และคาเปอรเซนตความคลาดเคลอนเฉลย (Mean Percentage Error: MPE)

9. ใหนกศกษาคดกลมขอมลทจะทาการการพยากรณโดยวธการพยากรณจานวน 3 กลมขอมล และใหศกษาความเปนไปไดในการพยากรณวาจะมประสทธภาพมากนอยเพยงไร

10. จงเขยนโปรแกรมการเรยงลาดบแบบเลอก (Selection Sort) การเรยงลาดบแบบแทรก (Insertion Sort) และการเรยงลาดบแบบฟอง (Bubble Sort) โดยใหสามารถเลอกคาจานวนอนพตทตองการได และสามารถเลอกวธการทตองการเรยงลาดบ

Page 499: การเขียนโปรแกรมคอมพิวเตอร ์portal5.udru.ac.th/ebook/pdf/upload/17P88t2O788B98583682.pdfรูปภาพบางส่วนให

บทท 13 การประยกตภาษาซในงานวจยทางปญญาประดษฐในการสรางขอสอบอตโนมต

บทท 13

การประยกตภาษาซในงานวจยทางปญญาประดษฐในการสรางขอสอบอตโนมต

ในบทนจะกลาวถงทฤษฎการวเคราะหขอสอบ (Item Analysis) ทฤษฎขนตอนวธเชงพนธกรรม (Genetic Algorithm) และการเขยนโปรแกรมในการสรางขอสอบอตโนมตโดยขนตอนวธเชงพนธกรรม (Programming Language for Creating the Automatic

Examinations by Genetic Algorithm) โดยในบทนสวนแรกจะเรมตนศกษาทฤษฎการวเคราะหขอสอบและทฤษฎขนตอนวธเชงพนธกรรม จากนนในสวนถดไปจะเปนการนาเอาทฤษฎทไดศกษาไปเขยนโปรแกรมเพอจะนาไปสการเขยนโปรแกรมในการสรางขอสอบอตโนมต ซง เ ปนบทประยกตในการเ ขยนโปรแกรมภาษาซในงานทางเทคโนโลยปญญาประดษฐเพอเขยนโปรแกรมใหคอมพวเตอรสามารถทางานไดเองโดยอตโนมตเพอให

สามารถทางานไดแทนมนษยไดอยางมประสทธภาพ และเปนตวอยางทมการเขยนโปรแกรมทใชในงานวจยเพอใหนกศกษาสามารถเขาใจและนาไปประยกตตอไป

13.1 ทฤษฎการวเคราะหขอสอบ (Item Analysis)

การวเคราะหขอสอบหมายถงการแยกสงหรอเรองราวใดๆ ออกเปนสวนยอยเพอคนหาองคประกอบหรอคณลกษณะ หรอคณภาพของสวนยอยนน การวเคราะหขอสอบหมายถงการคนหาคณลกษณะ คณภาพ ของคาถามและตวเลอก ซงเปนสวนทประกอบกนขนมาเปนขอสอบ วาเปนอยางไร ดหรอไม งายหรอยาก เมอครสรางขอสอบขนมาใชสอบนกเรยนครงแรก แมจะไดยดหลกเกณฑวธการสรางขอสอบอยางดแลวกตาม กยงไมยอมรบวาขอสอบนนดโดยสมบรณเชน สรางขอสอบใหเทยงตรงตามเนอหา คาถามและตวเลอกถกตองตามคณลกษณะทกประการ จดวาเปนคณลกษณะทดของขอสอบเพยงบางสวนเทานน

คณลกษณะทดของขอสอบทเกยวของกบเรองการวเคราะหขอสอบ เชน ความยากงาย และ

Page 500: การเขียนโปรแกรมคอมพิวเตอร ์portal5.udru.ac.th/ebook/pdf/upload/17P88t2O788B98583682.pdfรูปภาพบางส่วนให

บทท 13 การประยกตภาษาซในงานวจยทางปญญาประดษฐในการสรางขอสอบอตโนมต

486

อานาจจาแนกของขอสอบ ดงนนการวเคราะหขอสอบจงเปนการตรวจสอบหาความยากงายของขอสอบ จะกลาวไมไดเลยวาขอสอบทสรางขนมานนยากงายพอเหมาะ หากยงไมไดวเคราะหขอสอบนน และเปนการตรวจหาอานาจจาแนกวาขอสอบนนแยกเดกออนเดกเกงไดจรงหรอไม โดยเฉพาะเดกทมความสามารถใกลเคยงกนหรอ แตกตางกนเพยงเลกนอยทถกทควรจะเปนคอขอสอบควรแยกหรอจาแนกวาใครเกงกวา ใครออนกวาได

การจะวเคราะหขอสอบพจารณาประเดนดงตอไปนคอ 1. ความยากงาย (Difficulty)

2. อานาจจาแนก (Discrimination)

3. ความเปนปรนย (Objectivity)

4. ความมประสทธภาพ (Efficiency)

5. ความยตธรรม (Fairness)

6. ความเทยงตรงของแบบทดสอบ (Validity)

7. ความเชอมน (Reliability)

โดยทวไปการวเคราะหขอสอบสามารถกระทาได 2 ประเภทคอ ประเภทท 1 คอการวเคราะหขอสอบแบบรายขอ ซงจะเปนการวเคราะหคาความยากงาย และคาอานาจจาแนก ประเภทท 2 คอการวเคราะหขอสอบทงฉบบซงจะวเคราะหความเทยงตรง และความเชอมนของขอสอบ ในสวนของตาราเลมนจะกลาวถงการวเคราะหขอสอบแบบรายขอเพอใชในงานวจยในการสรางขอสอบอตโนมตซงจะกลาวถงในหวขอในสวนของการเขยนโปรแกรมและสรางขอสอบอตโนมต

ประโยชนของการวเคราะหขอสอบมประโยชนเปนอยางมากเชน ทาใหรคณภาพของขอสอบวาขอสอบขอนนดหรอไม หรอมความยากงายเพยงใด สามารถแยกกลมคนเกงออกจากกลมคนไมเกงไดหรอไม ชวยใหครสรางขอสอบใหมไดดยงขน ชวยใหสามารถปรบปรงคณภาพขอสอบไดถกจดทาใหทราบประสทธภาพของตวเลอก เปนขอมลในการปรบปรงการเรยนการสอนเพราะการวเคราะหขอสอบชวยใหทราบจดบกพรองของการเรยนการสอน เปนจดเรมตนของการสรางขอสอบมาตรฐาน และเปนแนวทางสรางคลงขอสอบทมคณภาพในอนาคต

Page 501: การเขียนโปรแกรมคอมพิวเตอร ์portal5.udru.ac.th/ebook/pdf/upload/17P88t2O788B98583682.pdfรูปภาพบางส่วนให

บทท 13 การประยกตภาษาซในงานวจยทางปญญาประดษฐในการสรางขอสอบอตโนมต

487

13.1.1 ความยากงายของขอสอบ (Difficulty)

ความยากงายของขอสอบคอคาระดบความยากและความงายของขอสอบหรอสดสวนของจานวนผ ทตอบถกตอจานวนผตอบทงหมดเพอดความยากงายของขอสอบ การหาคาความยากงายของขอสอบมกจะหาความยากงายในการวดผลแบบองกลม โดยความยากงายของขอสอบวดผลแบบองกลมหรอการวดผลแบบองกลม ตองการวดตาแหนงความแตกตางทนกเรยนสมฤทธผลการเรยน คะแนนสอบจงควรกระจายกวาง ขอสอบทนกเรยนสวนมากตอบถก ซงถอเปนของายกไมควรใชสอบ และขอสอบทนกเรยนทกคนตอบผดซงเปนขอยาก 100

เปอรเซนต กไมควรใชสอบ ควรใชขอสอบทสามารถแยกความแตกตางของนกเรยนไดมากทสด และมจดประสงคตองการใหตาแหนงของนกเรยนมความเชอมนไดวา ใครเกงกวาใครอยางแทจรง คะแนนทนกเรยนสอบไดควรแตกตางกนมากทสด โดยมคะแนนเฉลยใกลๆ กบคะแนนกงกลางของคะแนนสอบทงหมด และมพสยของคะแนนทงหมด และมพสยของคะแนนจาก “ใกลศนย” ถง “ใกลคะแนนเตม” ตวอยาง คะแนนเตม 100 เราอยากจะใหคะแนนกระจายระหวาง 5 ถง 95 และมคะแนนถวเฉลยประมาณ 50 คะแนน ถวเฉลยสาหรบขอสอบแบบเลอกตอบควรอยกงกลางระหวางคะแนนทมโอกาสจะได (เปอรเซนตทจะตอบไดถก) กบคะแนนทมโอกาสจะไดสงสด (คะแนนเตมทงหมด) ดงนน คะแนนเฉลยอดมคตของขอสอบ 100 ขอ สาหรบขอสอบแบบตางๆ ควรเปนดงน

% ตอบถก คะแนนเฉลยอดมคต

ขอสอบ 2 ตวเลอก (แบบถก-ผด) 50 75

ขอสอบ 3 ตวเลอก 33 67

ขอสอบ 4 ตวเลอก 25 62

ขอสอบ 5 ตวเลอก 20 60

เพอจงใจในการสอบ ขอสอบ 2-3 ขอแรก ควรจะใหงายๆ นกเรยนสวนมากทาถก ในทานองเดยวกน ขอสอบกไมควรยากจนกระทงนกเรยนตอบผดกนหมด เพราะจะทาใหไมสามารถจาแนกไดใครเกงหรอออนกวากน แตขอสอบทสรางขนมาครงแรกเราไมทราบวามความยากงายเทาไร จงจาเปนตองหาความยากงายภายหลงจากทใชสอบนกเรยนแลว ขอสอบทจะหาความยากงายนน เปนขอสอบทใชเฉพาะการวดผลแบบองกลมเทานน การหาความยากงายของขอสอบ เปนการหารอยละของจานวนนกเรยนผตอบขอนนไดถก เชน

Page 502: การเขียนโปรแกรมคอมพิวเตอร ์portal5.udru.ac.th/ebook/pdf/upload/17P88t2O788B98583682.pdfรูปภาพบางส่วนให

บทท 13 การประยกตภาษาซในงานวจยทางปญญาประดษฐในการสรางขอสอบอตโนมต

488

นกเรยน 40 คน ตอบถก ขอท 1 จานวน 18 คน

นกเรยน 100 คน ตอบถก ขอท 1 จานวน 18

10040

= 45 คน

เรยกวา ขอท 1 มความยากงาย 45 %

ตามความหมายของความยากงายของขอสอบ อาจเขยนเปนสตรสาหรบหาความยากงายของขอสอบได (P) ดงสมการท 13.1

N

LHP

(13.1)

ทซง H คอจานวนคนทตอบขอสอบขอนนถกในกลมคนเกง (ตามสตรน คนเกงคอคนทไดคะแนนสงสด 25 % แรกของกลมผสอบทงหมด)

L คอจานวนคนทตอบขอสอบขอนนถกในกลมคนไมเกง (ตามสตรน คนไมเกงคอคนทไดคะแนนตาสด 25% ทายของกลมผสอบทงหมด) N คอจานวนคนทงสองกลมรวมกน

คาของความยากงายแทนดวย P ซงจะมคาอยระหวาง 0 – 1.00 โดยคาทไดจะอานความหมายไดดงน

คา P = 0 - 0.19 หมายความวา เปนขอสอบทยากมาก คา P = 0.20 - 0.39 หมายความวา เปนขอสอบทคอนขางยาก คา P = 0.40 - 0.60 หมายความวา เปนขอสอบทยากงายปานกลาง คา P = 0.61 - 0.80 หมายความวาเปนขอสอบทคอนขางงาย คา P = 0.81 - 1.00 หมายความวาเปนขอสอบทงายมาก

สาหรบความยากงายของตวเลอกอนๆ กสามารถหาได โดยใชสตรนเชนเดยวกนคอ เราหาวานกเรยนทงสองกลมเลอกตอบตวเลอกนนๆ รอยละเทาไร นนเอง ตามอดมคตของการทดสอบวดผลแบบองกลม ตองการใหคะแนนสอบของนกเรยนกระจายเปนลกษณะของโคงปรกต กลาวคอ คะแนนกงกลางของคะแนนเตมจะมคนไดมากทสด และจานวนคนทไดคะแนนถดตอๆ ไปทงสองขางของคะแนนกงกลางนนจะคอยๆ ลดลงเรอยๆ จนถงคะแนนปลายๆ ทงสองขาง มคนไดเพยงคนหรอสองคน แบบทดสอบทใชสอบนกเรยนและทาให

Page 503: การเขียนโปรแกรมคอมพิวเตอร ์portal5.udru.ac.th/ebook/pdf/upload/17P88t2O788B98583682.pdfรูปภาพบางส่วนให

บทท 13 การประยกตภาษาซในงานวจยทางปญญาประดษฐในการสรางขอสอบอตโนมต

489

คะแนนมลกษณะเปนโคงปรกตดงกลาวน จดเปนแบบทดสอบทมความยากงาย ปานกลางหรอพอด แตถาแบบทดสอบใดทมคนไดคะแนนสงๆ เปนสวนมากจดเปนแบบทดสอบทงาย ในทางตรงกนขาม ถาแบบทดสอบใดทไดคะแนนนอยเปนสวนมาก จดเปนขอสอบทยาก ตวอยางการหาคาความยากงาย แสดงดงน (ขอ ข เปนคาตอบทถกตอง)

ตวเลอก จานวนผ เลอกตอบ

ก ข ค ง ว รวมกลมสง 4 12 3 1 0

รวมกลมตา 3 6 7 4 0

รวมตอบทงสองกลมตวเลอก 7 18 10 5 0

ตวเลอก ก ข ค ง

4 + 3

40

12 + 6

40

3 + 7

40

1 + 4

40

= 0.17 = 0.45 = 0.22 = 0.12

ดงนนความยากงายเทากบ 0.45

ความยากงายของตวขอสอบทเปนอดมคตมคา 0.5 ถอวาเปนขอสอบทมความยากงาย ปานกลางพอดๆ หมายถงวา ขอสอบขอนนมนกเรยนตอบถกทงหมด 50% ทาผด 50%

เราถอเอาความยากงาย 0.5 เปนเกณฑของขอสอบทมความยากงายพอด ถาขอสอบขอใดทเขาใกล 1 แสดงวาเปนขอสอบทงาย และถาขอสอบขอใดทเขาใกล 0 แสดงวาเปนขอสอบทยาก ดงนนในการเลอกขอสอบทมคณภาพควรจะเลอกขอสอบทมคาความยากงายประมาณ

0.5

ขอสอบทมความยากงาย 0.5 พอดนนในความเปนจรงจะหาไดยากมากดงนนจงอาจจะมการขยายเกณฑออกไปเพอไดขอสอบทเหมาะสม แบบทดสอบฉบบหนงจานวน 100

ขอ เมอวเคราะหแลวจะมขอทมความยากงาย 0.5 สก 3-5 ขอ ซงกถอวานอยเกนไปทจะนาไปเปนขอสอบใหม ดงนนจงอาจจะมการขยายเกณฑออกไปใหกวางเปนประมาณ 0.3-0.7

เพอทจะม คาถามดมากขอขน

Page 504: การเขียนโปรแกรมคอมพิวเตอร ์portal5.udru.ac.th/ebook/pdf/upload/17P88t2O788B98583682.pdfรูปภาพบางส่วนให

บทท 13 การประยกตภาษาซในงานวจยทางปญญาประดษฐในการสรางขอสอบอตโนมต

490

13.1.2 อานาจจาแนก (Discrimination)

อานาจจาแนกหรอการจาแนกคอคาสถตทใชอธบายคณภาพของขอสอบ ขอสอบทดตองมอานาจจาแนกไดวาเดกคนใดเกง คนใดออนกวากน แมจะเกงหรอออนกวากนเพยงเลกนอย กสามารถจาแนกบอกไดโดยละเอยดและถกตอง ขอสอบทมคาอานาจจาแนกทดจะมคณสมบตสามารถจาแนกเดกเกงหรอเดกออนได เดกเกงจะตอบถก เดกออนจะตอบผด และเดกไมมโอกาสจะเดาคาตอบไดถกเลย การหาคาอานาจจาแนกของขอสอบ (r) สามารถทาไดโดยเอาจานวนผตอบถกกลมตาลบออกจากจานวนผตอบถกในกลมสง แลวหารดวยครงหนงของจานวนนกเรยนทงสองกลม หรอหารดวยจานวนนกเรยนกลมใดกลมหนงนนเอง ดงแสดงในสมการท 13.2

1n

LHr

(13.2)

ทซง H คอจานวนคนทตอบขอสอบขอนนถกในกลมสง (ตามสตรน คนในกลมสงคอคนทไดคะแนนสงสด 25 % แรกของกลมผสอบทงหมด)

L คอจานวนคนทตอบขอสอบขอนนถกในกลมตา (ตามสตรน คนในกลมตาคอคนทไดคะแนนตาสด 25% ทายของกลมผสอบทงหมด) 1n คอจานวนผ เขาสอบกลมสงหรอกลมตา

คาอานาจจาแนกทหาไดจากจานวนผตอบถกทงสองกลมน เปนอานาจจาแนกของขอนนๆ หากจะหาคาอานาจจาแนกของตวเลอกอนๆ กใชสตรเดยวกน ตวอยางการหาคาอานาจจาแนกแสดงตวอยางดงน โดยมจานวนผ เขาสอบกลมกลมละ 20 คน

ตวเลอก จานวนผ เลอกตอบ

ก ข ค ง ว รวมกลมสง 10 12 3 10 0

รวมกลมตา 2 6 7 5 0

Page 505: การเขียนโปรแกรมคอมพิวเตอร ์portal5.udru.ac.th/ebook/pdf/upload/17P88t2O788B98583682.pdfรูปภาพบางส่วนให

บทท 13 การประยกตภาษาซในงานวจยทางปญญาประดษฐในการสรางขอสอบอตโนมต

491

ตวอยางจากขอมล

อานาจจาแนก ขอ 1 (ตวเลอก ข) = = 0.30

ขอ 2 (ตวเลอก ง) = = = .25

ขอ 60 (ตวเลอก ก) = = = .40

พจารณากรณตอไปน ถามผตอบกลมละ 20 คน

สมมต 1. ถาขอใด กลมสงตอบถกหมดทกคน และกลมตาผดหมดทกคน ดงนน

อานาจจาแนก = = 1.00 = 1

2. ถาขอใด ทงกลมสงและกลมตา ตอบถกจานวนเทากน เชนตอบถก กลมละ 7 คนดงนน

อานาจจาแนก = = 0.00

3. ถาขอใด กลมสงตอบถกนอยกวากลมตา คาอานาจจาแนกจะเปนลบเชนกลมสงตอบถก 12 คน ดงนน

คาอานาจจาแนก = = -0.02

หากกรณทขอใดกลมสงตอบถกนอยลง แตกลมตากลบตอบถกมากขน คาอานาจจาแนกจะเปนลบมากขนจนกระทงถากลมสงตอบผดหมดกลมตาตอบถกหมด คาอานาจจาแนกจะเทากบ –1.00

จากทสมมต กรณท 1 อานาจจาแนกเทากบ 1.00 จดเปนขอสอบทมอานาจจาแนกทดทสดโดยสามารถจาแนกได 100 % วาเดกกลมสงเปนเดกเกงจรงและเดกกลมตาเปนเดกเปนเดกออนจรง กรณท 2 อานาจจาแนกเทากบ 0.00 จดเปนขอสอบทไมมอานาจจาแนกเลยเพราะทงสองกลมตอบถกเทากน ไมทราบวากลมใดเกงกวากนแน อาจจะเกงกไดหรอออนกได

12 - 6

20

10 - 5

20

10 - 2

20

20 - 0

20

7 - 7

20

8 - 12

20

Page 506: การเขียนโปรแกรมคอมพิวเตอร ์portal5.udru.ac.th/ebook/pdf/upload/17P88t2O788B98583682.pdfรูปภาพบางส่วนให

บทท 13 การประยกตภาษาซในงานวจยทางปญญาประดษฐในการสรางขอสอบอตโนมต

492

กลมท 3 อานาจจาแนกเปนคาลบ ถอวาไมดเปนอยางมากหรอกรณผดปกตวสยทกลมตาตอบถกมากกวากลมสง ในกรณอาจเกดขนในกรณท ขอสอบกากวม กาหนดคาตอบผด หรอพมพขอสอบผด

คาของอานาจจาแนกจะขนลงระหวาง 1.00 กบ –1.00 ไมมากไมนอยกวานไปอก ขอทมคาเปนบวกเทานนจงจะด กลาววานกวดผลไดตกลงตงเกณฑกนไววา ขอคาถามจะตองมคาอานาจจาแนกตงแต 0.2 ขนไป จงจะนยมยอมรบวาเปนขอด แตถาคาอานาจจาแนกเขาใกลคา1 จะเปนขอสอบทมคณภาพทดมาก แตอยางไรกตามในความเปนจรงจะไมมขอสอบขอไหนทเขาใกล 1 ทงหมด ดงนนนกวดผลจงมกใชขอสอบทมคาจาแนกมากกวา 0.2

13.1.3 ความเปนปรนย (Objectivity)

ความเปนปรนยในทนหมายถง ความชดเจน ความถกตอง และการเขาใจตรง โดยยดหลกความถกตองทางวชาการเปนเกณฑ มความหมายตรงกนขามกบความเปนอตนยซงยดถอความคดเหนความรสกและเหตผลของแตละบคคลเปนสาคญ เหตผลทบคคลหนงเหนวาถกตอง อาจจะไมถกตองในทศนะของอกบคคลหนงซงเหตผลของแตละคนตางกถกตอง แตในแงมมหรอสถานทตางกน ในการวดผลหรอสรางขอสอบเราจาเปนตองมหลกเกณฑทเปนทยอมรบสาหรบทกๆคนในการตดสนพจารณาวาสงใดผดหรอถก ดงนน ความชดเจนและถกตองตามหลกวชาหรอทเรยกวาความเปนปรนยของแบบทดสอบ จงเปนเรองสาคญประการหนง การพจารณาความเปนปรนยของแบบทดสอบมหลายประการ คณสมบตความเปนปรนยของแบบทดสอบทสาคญ ไดแกคณสมบต 3 ประการ ดงน

1. ชดแจงในความหมายของคาถาม ขอสอบทมความเปนปรนย ทกคนทอานขอสอบไมวาจะเปนผสอบหรอผตรวจขอสอบยอมจะเขาใจตรงกน ไมตความไปคนละแงแตกตางกน

2. ตรวจใหคะแนนไดตรงกน ความหมายของการตรวจใหคะแนน ในทนหมายถงการเฉลยขอสอบ ขอสอบทมความเปนปรนย ไมวาจะเปนผออกขอสอบหรอใครกตามสามารถตรวจสอบไดตรงกนหรอเฉลยไดตรงกน ขอสอบทผตรวจเฉลยไมตรงกน แสดงใหเหนถงความไมชดเจนในคาถามหรอคาตอบ

3. แปลความหมายของคะแนนไดตรงกน โดยทวไปขอสอบปรนยนนผตอบถกจะได 1

คะแนน ตอบผดจะได 0 คะแนน จานวนคะแนนทไดจะแทนจานวนขอทถก ทาใหสามารถแปลความหมายไดชดเจนวาใครเกงออนอยางไรตอบถกมากนอยตางกนเพยงไร

Page 507: การเขียนโปรแกรมคอมพิวเตอร ์portal5.udru.ac.th/ebook/pdf/upload/17P88t2O788B98583682.pdfรูปภาพบางส่วนให

บทท 13 การประยกตภาษาซในงานวจยทางปญญาประดษฐในการสรางขอสอบอตโนมต

493

13.1.4 ความมประสทธภาพ (Efficiency)

เครองมอวดผลทมประสทธภาพหมายถงเครองมอททาใหไดขอมลไดถกตอง เชอถอไดโดยลงทนนอยทสดไมวาจะเปนการลงทนในแงเวลา แรงงาน และทนทรพยรวมทงความสะดวกสบายคลองตวในการรวบรวมขอมล ขอสอบทมประสทธภาพสามารถใหคะแนนไดเทยงตรงและเชอถอมากทสดโดยใชเวลา แรงงาน และเงนนอยทสด แตประโยชนทไดจากการสอบคมคา ขอสอบทพมพผดตกหลนมาก จานวนหนาไมครบ รปแบบของขอสอบเรยงไมเปนระเบยบ ทาใหผสอบเกดความสบสน มผลตอคะแนนทไดจากการทาแบบทดสอบทงสน

การจดรปแบบของขอสอบปรนยแบบเลอกตอบเพอใหดงายมความเปนระเบยบเรยบรอย นยมพมพแบงครงหนากระดาษ

13.1.5 ความยตธรรม (Fairness)

ขอสอบทดตองไมเปดโอกาสใหเดกไดเปรยบเสยเปรยบกน เชน ขอสอบบางฉบบครไปเนนเรองใดเรองหนงซงไปตรงกบเรองทนกเรยนคนควาทารายงานในบางกลม ทาใหกลมนนไดเปรยบคนอนๆ ขอสอบบางขอใชคาถามทแนะนาคาตอบใหนกเรยนใชไหวพรบเดาได

13.1.6 ความเทยงตรงของขอสอบ (Validity)

เครองมอทมความเทยงตรงสงมากสามารถทาหนาทรวบรวมขอมลของสงทเราตองการวดไดโดยตรงตามจดมงหมายทตองการวด ความเทยงตรงม 4 ลกษณะ คอ

1. เทยงตรงตามเนอหา (Content Validity) หมายถงสามารถวดเนอหาสาระทตองการวดไดครบถวน ขอสอบทมความเทยงตรงตามเนอหาหมายถงขอสอบทสามารถวดเนอหาไดครบถวนตรงตามทกาหนดไวในหลกสตร หรอวดไดครบตามจดประสงคการเรยนรทกาหนดไว นอกจากวดเนอหาไดครบแลวยงวดไดตรงตามลกษณะธรรมชาตของเนอหาวชานนดวย เชน ไมถามดวยศพทภาษาองกฤษมากเกนไปในวชาสงคมศกษาจนกลายเปนวาผ ทตอบถกคอผ ทเกงภาษาองกฤษเทานน ผ ทตอบผดไมใชเพราะไมมความรในเนอหาวชานนแตเปนเพราะไมรความหมายของภาษาองกฤษในคาถามนนถามอะไร หรอในวชาเกษตรกเชนกนควรระวงไมถามเกยวกบสตรหรอสญลกษณทางเคมอยางละเอยดในคาถามเกยวกบเนอหาเรองป ยจนดเหมอนวาเปนการสอบวชาเคมไป เปนตน

2.เทยงตรงตามโครงสราง (Construct Validity) หมายถงเครองมอนนสามารถวดพฤตกรรม และสมรรถภาพดานตางๆไดตามจดมงหมายทกาหนดไว และเปนไปตามหลกการของทฤษฎนนๆ การสรางแบบทดสอบใหมความเทยงตรงตามโครงสราง ผสรางจะตองศกษา

Page 508: การเขียนโปรแกรมคอมพิวเตอร ์portal5.udru.ac.th/ebook/pdf/upload/17P88t2O788B98583682.pdfรูปภาพบางส่วนให

บทท 13 การประยกตภาษาซในงานวจยทางปญญาประดษฐในการสรางขอสอบอตโนมต

494

จดมงหมายของการเรยนการสอนของวชานนๆจากหลกสตรกอนวามพฤตกรรมใดบางทกาหนดไวในจดมงหมายนนๆแบบทดสอบตองวดจดมงหมายนนๆอยางครบถวน มใชถามแตความจาเปนสวนใหญ การศกษาองคประกอบของลกษณะบคคลดานอารมณ จตใจและทศนะคต เพอนามาเปนแนวทางในการสรางสถานการณ หรอขอคาถามเพอวดลกษณะเหลานนเปนวธการทจะทาใหเครองมอนนมความเทยงตรงตามโครงสราง

3.เทยงตรงตามสภาพ (Concurrent Validity) หมายถงลกษณะของเครองมอทสามารถวดไดโดยตรงตามสภาพความเปนจรงของผ ทถกวดในขณะนน เชนคนทสามารถทาโจทยเลขบวกลบมาตราเงนในหองเรยนไดด จะสามารถคดเงนทอนในการซอขายทตลาดไดเชนกน ความเทยงตรงตามสภาพนเราไมสามารถวดไดจรงโดยใชแบบทดสอบแตเราตองเอาคะแนนของเดกไปเปรยบเทยบสภาพจรงของเดกดวาสอดคลองกนหรอไม การทคนเกงคณตศาสตรในชวตจรงแตทาขอสอบคณตศาสตรไดคะแนนนอย ควรจะถอวาเปนความบกพรองของขอสอบทวดไดไมตรงกบลกษณะจรงของเขา

4.เทยงตรงตามพยากรณ (Predictive Validity) หมายถงเครองมอวดทสามารถใหขอมลไดสอดคลองกบผลการเรยนในภายหนา วธหาความเทยงตรงของแบบทดสอบชนดนทาไดโดยนาคะแนนทสอบไดไปหาความสมพนธกบคะแนนทไดในอนาคตวามความสอดคลองกนตรงกนนาเชอถอไดหรอไมเพยงใด การวดผลโดยใชขอสอบลกษณะความเทยงตรงตามเนอหาและความเทยงตรงตามโครงสรางมความสาคญมาก เพราะทาใหขอสอบนนวดเนอหาไดครบถวน และตรงตามจดมงหมายของการวด การสรางขอสอบใหมความเทยงตรงตามเนอหาและโครงสรางสามารถทาไดโดยสรางคาถามวดเนอหาและพฤตกรรมตามตารางจาแนกเนอหาและพฤตกรรม เราสามารถตรวจสอบความเทยงตรงของขอสอบทงสองประเภทนไดงายๆกอนจะมการสอบ โดยเพยงแตตรวจสอบดวาขอสอบนนถามเนอหาและพฤตกรรมตามทกาหนดไวในตารางจาแนกเนอหาและพฤตกรรม

13.1.7 ความเชอมน (Reliability)

เครองมอทเชอมนไดหมายถงเครองมอนนสามารถใหขอมลทคงทแนนอนไมเปลยนไปมา การวดครงแรกเปนอยางไร เมอวดซากครงกไดผลเหมอนเดมหรอการวดแตละครงจะใหผลสอดคลองตองกนเสมอ แบบทดสอบทเชอมนไดจะสามารถใหคะแนนไดคงทแนนอน

ปกตในการสอบแตละครงคะแนนทไดมกไมคงท แตถาอนดบทของผสอบยงคงทเหมอนเดมกยงถอวาขอสอบนนมความเชอมนสง เนองจากความเชอมนของขอสอบหมายถงความคงทของคะแนนทไดจากการสอบของคนกลมเดมหลายๆครง

Page 509: การเขียนโปรแกรมคอมพิวเตอร ์portal5.udru.ac.th/ebook/pdf/upload/17P88t2O788B98583682.pdfรูปภาพบางส่วนให

บทท 13 การประยกตภาษาซในงานวจยทางปญญาประดษฐในการสรางขอสอบอตโนมต

495

13.2 ขนตอนวธเชงพนธกรรม (Genetic Algorithm)

13.2.1 ขนตอนวธเชงพนธกรรมเบองตน

ขนตอนวธเชงพนธกรรมคอเทคนควธหนงทางปญญาประดษฐเพอใชในการหาผลลพธหรอคาตอบของปญหา ขนตอนวธเชงพนธกรรมเปนอกวธหนงทจาลองรปแบบวธการทางชววทยาในการใหกาเนดประชากรรนใหม หรอขยายเผาพนธในรนลก รนหลานตอไป ซงอาศยพนฐานความคดของววฒนาการทางธรรมชาตถายทอดลกษณะตางๆ ทางพนธกรรม

โดยปฏบตตามกระบวนการทางพนธศาสตร เพอจะใชในการหาคาตอบทดทสดหรอใกลเคยงทสดของปญหา ขนตอนวธเชงพนธกรรมเปนทฤษฎววฒนาการทางธรรมชาตในการกาเนดประชากร สงมชวตในรนๆ ตอไป โดยกระบวนการธรรมชาตทางชววทยาประกอบดวยการคดเลอกทางธรรมชาต คอสงมชวตใดแขงแรงกวายอมมโอกาสอยรอดไดมากกวา นนหมายถงการมโครโมโซมซงประกอบดวยสงทสบตอพนธกรรมหรอยน (Gene) ตางๆ ทมลกษณะทด นนจะมโอกาสอยรอดไดมากกวา โครโมโซมทสามารถอยรอดไดกจะถกถายทอดยนทมลกษณะทดเหลานนไปยงลกหลานไดมากกวาเชนกน โดยในการประยกตใชงานในดานตางๆ จะตองมการปรบปญหาตางๆ ใหอยในรปแบบของขนตอนวธเชงพนธกรรมใหเหมาะสมเพอทจะดาเนนการทางพนธศาสตรเพอหาคาตอบไดอยางมประสทธภาพ ดงแสดงในรปท 13.1

รปท 13.1 ปรบปญหาเขาสขนตอนวธเชงพนธกรรม

จากรปท 13.1 แสดงหลกการเบองตน โดยจะตองมการปรบปรงรปแบบของปญหา ซงเปนการปรบปญหาทจะดาเนนการแกไขใหอยในรปแบบทสามารถดาเนนการขนตอนวธได

ขนตอนวธเชงพนธกรรมเปนวธการคนหาคาตอบโดยอาศยวธการเลยนแบบการคดเลอกทางธรรมชาตและธรรมชาตทางพนธกรรม โดยการรวมกนหรอสลบเปลยนตวแปรตางๆ อนเปน

ปญหา

ปรบรปแบบของปญหา

ขนตอนวธเชงพนธกรรม

Page 510: การเขียนโปรแกรมคอมพิวเตอร ์portal5.udru.ac.th/ebook/pdf/upload/17P88t2O788B98583682.pdfรูปภาพบางส่วนให

บทท 13 การประยกตภาษาซในงานวจยทางปญญาประดษฐในการสรางขอสอบอตโนมต

496

องคประกอบโครงสรางของปญหาทใหคาตอบทตองการ โดยอาศยหลกการสม เพอปรบปรงความสามารถในการคนหาคาตอบทดยงขน การคนหาคาตอบจากรนหนงไปรนถดไปตามววฒนาการทางธรรมชาตนน คาตอบในรนใหมทเกดขนจากการสรางความสมพนธของโครงสรางตางๆ ทประกอบดวยคาตวแปรทเหมาะสมดในรนกอนๆ ดงนนจงทาใหได คาตอบทนาจะดขน จะเหนไดวาวธการพนฐานของ ขนตอนวธเชงพนธกรรมเปนแบบการสม แตมหลกการและประสทธภาพจากการคาดเดาคาตอบใหมจากสถตคาตอบเดมทด ขนตอนวธเชงพนธกรรมถอไดวาไดจดใหอยในกลมของการคานวณเชงววฒนาการ (Evolutionary

Computation) ปจจบนไดมการนาไปใชในเกอบทกสาขาวชาเ ชน การสอสารและโทรคมนาคม , ดานการแพทย , ดานการขนสง , ดานการประมวลผลภาพดจทล, ดานวทยาศาสตร และดานการเงนเปนตน ซงในปจจบน ขนตอนวธเชงพนธกรรมมการนาไปประยกตใชอยางตอเนองและวจยพฒนาแนวคดออกมาหลายรปแบบ ตามแนวคดของนกวจยแตละคนเพอพฒนาไปสการหาคาตอบทมประสทธภาพ

13.2.2 ฟงกชนเปาหมายกบฟงกชนความเหมาะสม (Object Function and Fitness

Function)

ฟงกชนเปาหมายและฟงกชนความเหมาะสมเปนสงสาคญเปนอยางยงในการคดเลอกคาตอบทด เปนการประเมนคาตอบของโครโมโซม โดยฟงกชนเปาหมายจะเปนการประเมนคาตอบของโครโมโซมโดยเทยบกบเปาหมายของระบบ หรอเปนคาตอบทใกลเคยงกบคาตอบทตองการหรอไมจากฟงกชนเปาหมาย (Object Function) ในแตละปญหาจะสามารถกาหนดฟงกชนเปาหมายไดตามรปแบบของปญหา สวนฟงกชนความเหมาะสมเปนการประเมนคาตอบในแตละโครโมโซมเพอทาการเปรยบเทยบกนเองในกลมประชากร เปรยบเสมอนคาความสามารถในการอยรอดของแตละโครโมโซมและเปนฟงกชนทกาหนดโอกาส หรอสดสวนทแตละโครโมโซมเหมาะสมจะถกคดเลอกไปใชมากนอยเพยงใด นนคอ ฟงกชนความเหมาะสมจะเปนฟงกชนทแสดงถงคาคาตอบทเกดขนจากชดตวแปรของปญหาในโครโมโซมนนวาดเพยงใด

13.2.3 รปแบบโครโมโซม

รปแบบโครโมโซมคอรปแบบของโครโมโซมในปญหาของคอมพวเตอร โดยจะมการปรบรปแบบของปญหาจรงเขาสรปแบบของโครโมโซมทจะนามาใชในการหาคาตอบทดทสดโดยคอมพวเตอรอยางไร ในการแกปญหาจะมองปญหาเทยบเทากบโครโมโซมชนดหนงซงจะ

Page 511: การเขียนโปรแกรมคอมพิวเตอร ์portal5.udru.ac.th/ebook/pdf/upload/17P88t2O788B98583682.pdfรูปภาพบางส่วนให

บทท 13 การประยกตภาษาซในงานวจยทางปญญาประดษฐในการสรางขอสอบอตโนมต

497

ประกอบดวยสงสบตอพนธกรรมหรอยน ลกษณะตางๆ ซงหมายถงขอมล เมอแปลความหมายแลวจะใหคาของคาตอบคาหนง ในขนตอนวธเชงพนธกรรมยนทอยในโครโมโซมเปนตวแสดงคาคาตอบคาตอบหนงของปญหา ทแปรผนไปตามการประยกตใชงาน ซงโดยทวไปยนหมายถงตวแปร พารามเตอร เงอนไข หรอ ขอกาหนด ตางๆ ทเปนองคประกอบของปญหา การกาหนดรปแบบของแตละโครโมโซมทาไดโดยการแปลงตวแปร พารามเตอร เงอนไข หรอขอกาหนดตางๆ ใหอยในรปลาดบของยนบนโครโมโซม

13.2.4 ขนตอนการทางานของวธเชงพนธกรรมพนฐาน

ขนตอนการทางานของวธเชงพนธกรรมหรอวฏจกรการทางานของขนตอนวธเชงพนธกรรม (Genetic Algorithm Cycle) คอกระบวนการทางานทวไปของขนตอนวธเชงพนธกรรม ซงโดยปกตขนตอนพนฐานจะม 4 ขนตอน คอ

ขนตอนท 1 สรางประชากรโครโมโซมรนเกา ตามรปแบบโครโมโซมทกาหนดไว โดยประชากรตนกาเนด (Initial Population) โดยการสม

ขนตอนท 2 วเคราะหคาความเหมาะสมของแตละโครโมโซม เนองจากระบบไมสามารถเขาใจคาของโครโมโซมในแตละตว ดงนนจงมการถอดรหสกอนเพอทจะนาไปประมวลผลตอไป

ขนตอนท 3 สรางชดโครโมโซมตนแบบหรอชดโครโมโซมพอแม (Mating pool) ทเปนตนแบบ ซงอาศยการจาลองการคดเลอกทางธรรมชาต โดยพจารณาถวงนาหนกจากคาความเหมาะสมของแตละโครโมโซม หากโครโมโซมใดมคาความเหมาะสมสงกจะมโอกาสถกคดเลอกเปนตนแบบสง

ขนตอนท 4 ดาเนนการทางพนธศาสตรโดยจบคโครโมโซมตนแบบเพอสรางประชากรในโครโมโซมรนใหม เปนกรรมวธเปลยนแปลงโครโมโซมดวยวธทางพนธกรรม เปนการสรางลกหลานทเกดจากการรวมของตนกาเนดพนธ หรอจากการแปรผนยนของตนกาเนด

เพอทเกดสายพนธใหม ซงตวดาเนนการทางพนธศาสตรประกอบดวย สลบสายพนธ โดยแลกเปลยนคายนบางสวนของโครโมโซมซงกนและกลายพนธโดยการสมเปลยนคายนบางยนของแตละโครโมโซม เปนตน

การคนหาคาตอบของขนตอนวธเชงพนธกรรม จะประมวลผลซาไปจนกวาจะไดรบคาตอบทพอใจตามเกณฑทตงไว หรอประมวลผลจนมฟงกชนเปาหมายทเหมาะสม หรอในระยะเวลาตามจานวนรนทดาเนนการตามตองการ ขนตอนการทางานของขนตอนวธเชงพนธกรรมพนฐานแสดงดงรปท 13.2

Page 512: การเขียนโปรแกรมคอมพิวเตอร ์portal5.udru.ac.th/ebook/pdf/upload/17P88t2O788B98583682.pdfรูปภาพบางส่วนให

บทท 13 การประยกตภาษาซในงานวจยทางปญญาประดษฐในการสรางขอสอบอตโนมต

498

เรมตน

หยด

Generation = 0

Max = จำนวนสงสดของ Generation

สรางประชากรเรมตน

วเคราะหคาความเหมาะสม(Fitness Function)Generation + 1

ตวเลอกสรางตนแบบ

ปฏบตการทางพนธศาสตร

ประชากรรนใหม

Gen > Max

ใช

ไมใช

รปท 13.2 วฏจกรขนตอนวธเชงพนธกรรมพนฐาน

Page 513: การเขียนโปรแกรมคอมพิวเตอร ์portal5.udru.ac.th/ebook/pdf/upload/17P88t2O788B98583682.pdfรูปภาพบางส่วนให

บทท 13 การประยกตภาษาซในงานวจยทางปญญาประดษฐในการสรางขอสอบอตโนมต

499

เพอใหเขาใจกระบวนการของขนตอนวธเชงพนธกรรมเบองตน จะกาหนดฟงกชนความเหมาะสม คอ F = X

2 โดยมปญหาคอการหาคาสงสดของฟงกชน y = x

2 ท x มคา

ระหวางจานวนเตม I[0,31] ซงคาตอบทดทสดคอคา x ทมคาความเหมาะสมสงสด โดยจะกาหนดรปแบบโครโมโซมเปนแบบทวภาค (Binary) คอ ประกอบดวย บตทมคาเปน 0 หรอ 1

ซงเปนคาในเลขฐานสอง และมความยาว (Chromosome Length: lchrom) ตามแตจะกาหนด ซงแสดงดวยสญลกษณไดดงน

B1 B2 B3 B4 B5

รปท 13.3 รปแบบของโครโมโซม

ตวอยาง: วธการเขารหสแบบทวภาคโดยแปลงคาพารามเตอร x ใหอยในรปทวภาค 5

บต (lchrom = 5 ) ดงนนโครโมโซมของปญหาจะมคาอยในชวง 00000 ถง 11111 ซงเมอถอดรหสเสรจสนจะทาให x มคาอยในชวง 0 ถง 31 ตามทตองการ

การสรางประชากรเรมตน (Initial Population)

การสรางประชากรเรมตน จากตวอยางทกาหนดคอการสมตวเลขจานวน 5 บต

จานวนเทากบจานวนโครโมโซมทตองการ โดยประชากรเรมตนจะเรมทรนท 0 (Generation 0)

เชนตองการสรางประชากรเรมตนจานวน 4 โครโมโซม ดงเชน

คอในสวนของรายละเอยดขนตอนการทางานของขนตอนวธเชงพนธกรรมแบบงายจะเปนขนตอนพนฐานเบองตนแบบงายประกอบดวย

ตวอยาง: ลาดบ โครโมโซม

1 0 1 1 1 0

2 1 1 0 0 1

3 0 1 0 0 0

4 1 0 0 1 1

ชดโครโมโซมรนนเปนชดโครโมโซมรนเรมตนทกาหนดโดยการสม ซงประกอบดวยจานวนโครโมโซมจานวน 4 โครโมโซม โดยแตละโครโมโซมประกอบดวย คาทวภาค

Page 514: การเขียนโปรแกรมคอมพิวเตอร ์portal5.udru.ac.th/ebook/pdf/upload/17P88t2O788B98583682.pdfรูปภาพบางส่วนให

บทท 13 การประยกตภาษาซในงานวจยทางปญญาประดษฐในการสรางขอสอบอตโนมต

500

การวเคราะหคาความเหมาะสม (Fitness Function)

การวเคราะหคาความเหมาะสม คอขนตอนการถอดรหสจากรปแบบโครโมโซมทกาหนดไว เพอคานวณคาความเหมาะสมตามฟงกชนความเหมาะสมของปญหา ในทน ฟงกชนความเหมาะสมคอ F = x

2 ดงนนการวเคราะหคาความเหมาะสมจงเปนการถอดรหส

เลขฐานสองของแตละโครโมโซมเปนคาตวแปร x และคานวณคาความเหมาะสมคอ คา x2 ซง

สามารถวเคราะหคาความเหมาะสมไดดงน

ตวอยาง : ลาดบ โครโมโซม x คาความเหมาะสม

1 0 1 1 1 0 14 196

2 1 1 0 0 1 25 625

3 0 1 0 0 0 8 64

4 1 0 0 1 1 19 361

ตวเลอกสรางตนแบบหรอการคดเลอก (Selection)

การคดเลอกคอการคดเลอกโครโมโซมพอแมเพอดาเนนการทางพนธศาสตร โดยจะพจารณาจากคาความเหมาะสม ถาโครโมโซมใดมคาความเหมาะสมมากกมโอกาสอยรอดสงตามไปดวย การคดเลอกเปนขนตอนทจาลองการคดเลอกทางธรรมชาตโดยคดเลอกชดโครโมโซมรนเกาใหเปนโครโมโซมตนแบบ เพอใชสรางโครโมโซมรนถดไป การคดเลอกของขนตอนวธเชงพนธกรรมแบบงาย จะใชคาความเหมาะสมเปนตวตดสนวาโครโมโซมใดจะมโอกาสถกเลอกเปนโครโมโซมสาหรบดาเนนการ โครโมโซมทมคาความเหมาะสมทดจะถกกาหนดนาหนกคาความนาจะเปนทจะถกเลอกแตละครงสง โดยจะนาคาความเหมาะสมของโครโมโซมแตละตวมาแทนสาหรบการคดเลอก ซงการคดเลอกกมอยหลายวธเชน วธวงลอเสยงทาย (Roulette Wheel Selection) การคดเลอกแบบสมอยางทวถง (Stochastic

Universal Sampling) การคดเลอกแบบแขงขน(Tournament Selection) การคดเลอกแบบแบงเปนสดสวน (Proportionate Selection) และการคดเลอกแบบจดอนดบ (Ranking

Selection) เปนตน ในเนอหาบทนจะกลาวถงการคดเลอกโดยใชวงลอเสยงทายเนองจากเปนวธทนยมใชกนอยางแพรหลาย โดยการสมในวงลอเสยงทาย (Roulette Wheel Selection) จะหมนสมเลอกไปจนกวาจะไดโครโมโซมพอแมตามจานวนทตองการ จากตวอยางนจะมการสมเลอกโครโมโซมพอแมจานวน 4 ครง

Page 515: การเขียนโปรแกรมคอมพิวเตอร ์portal5.udru.ac.th/ebook/pdf/upload/17P88t2O788B98583682.pdfรูปภาพบางส่วนให

บทท 13 การประยกตภาษาซในงานวจยทางปญญาประดษฐในการสรางขอสอบอตโนมต

501

ตารางท 13.1 ตวอยางของการหาคาของสมการ ลาดบโครโมโซม

โครโมโซม X คาความ

เหมาะสม

(F)

คาความเหมาะสมแบบสดสวนเพอใชในวงลอเสยง

ทาย

1

2

3

4

0 1 1 1 0

1 1 0 0 1

0 1 0 0 0

1 0 0 1 1

14

25

8

19

196

625

64

361

(196/1246)x100 = 15.73)

(625/1246)x100 = 50.16)

(64/1246)x100 = 5.13)

(361/1246)x100 = 28.97)

รวม 1246 1.000

ตวอยางของฟงกชนความเหมาะสมของแตละโครโมโซมของประชากรชดนแสดงใหเหนวาโครโมโซมท 2 มสดสวนในวงลอเสยงทายสงทสด และโครโมโซมตวท 3 มสดสวนในวงลอเสยงทายตาทสด ซงจะเหนวาโอกาสในการเลอกไดโครโมโซมท 2 มโอกาสเปนไปไดมากทสด เปรยบเสมอนโครโมโซมทแขงแรงโอกาสทจะอยรอดกจะสงตามไปดวย แตอยางไรกไมทงโครโมโซมทออนแอ เพราะในบางครงโครโมโซมทออนแอเมอดาเนนการทางพนธศาสตรไปแลวกอาจจะเปนโครโมโซมทแขงแรงได ตวอยางของวงลอเสยงทายดงแสดงในรปท 13.4

รปท 13.4 ตวอยางวงลอเสยงทาย

Page 516: การเขียนโปรแกรมคอมพิวเตอร ์portal5.udru.ac.th/ebook/pdf/upload/17P88t2O788B98583682.pdfรูปภาพบางส่วนให

บทท 13 การประยกตภาษาซในงานวจยทางปญญาประดษฐในการสรางขอสอบอตโนมต

502

ปฏบตการทางพนธศาสตร (Genetic Operation)

การดาเนนการทางพนธศาสตร เปนขนตอนทจาลองแบบธรรมชาตทางพนธกรรม ซงตวดาเนนการทางพนธศาสตรของขนตอนวธเชงพนธกรรมคอการสลบสายพนธและการกลายพนธหรอการกลายพนธซงมรายละเอยดดงน

สลบสายพนธ (Crossover)

เปนตวดาเนนการในการแลกเปลยนสวนของโครโมโซมพอ-แม ตามการกาหนดอตราความนาจะเปนของการสลบสายพนธ (Probability of Crossover: Pc) การกาหนดอตราความนาจะเปนของการสลบสายพนธ มหลากหลายวธเพอใหไดประสทธภาพสงสดดงเชนการกาหนดอตราความนาจะเปนของการสลบสายพนธขนมาเองซงโดยทวไปอตราความนาจะเปนของการสลบสายพนธจะอยในชวง 0.7-1 และเมอกาหนดอตราการสลบสายพนธแลวกจะใชการคานวณอยางงายเชนถาจานวนประชากรแตละรน (Population Size) คอ 30 และกาหนดให Pc = 0.6 แลวจานวนการสลบสายพนธเทากบ Pcx (Population Size / 2) = 0.6 x

(30 / 2) = 9 ครง ในการสรางชดโครโมโซมรนใหม จะทาการสลบสายพนธกนโดยการแลกเปลยนยน ซงการสลบสายพนธ กมหลายแบบ เชน การสลบสายพนธแบบจดเดยว (Single-Point Crossover) และการสลบสายพนธแบบหลายจด (Multiple-point Crossover)

เปนตน

คโครโมโซมพอ-แม

d1 d2 d3 dpos dpos + 1 dlchrom

m1 m2 m3 mpos mpos + 1 mlchrom

โครโมโซมลก d1 d2 d3 dpos mpos + 1 mlchrom

m1 m2 m3 mpos dpos + 1 dlchrom

( pos คอตาแหนงทสมได)

รปท 13.5 สลบสายพนธแบบ 1 จด

Page 517: การเขียนโปรแกรมคอมพิวเตอร ์portal5.udru.ac.th/ebook/pdf/upload/17P88t2O788B98583682.pdfรูปภาพบางส่วนให

บทท 13 การประยกตภาษาซในงานวจยทางปญญาประดษฐในการสรางขอสอบอตโนมต

503

คโครโมโซมพอ-แม

d1 d2 d3 dpos dpos + 1 dlchrom

m1 m2 m3 mpos mpos + 1 mlchrom

โครโมโซมลก d1 d2 d3 dpos mpos + 1 dlchrom

m1 m2 m3 mpos dpos + 1 mlchrom

( pos และ pos+1 คอตาแหนงทสมได)

รปท 13.6 สลบสายพนธแบบ 2 จด

กลายพนธ (Mutation)

เปนตวดาเนนการผาเหลาหรอกลายพนธตวหนงทอาจชวยใหโครโมโซมอาจจะมคาความเหมาะสมดขนหลงจากการสลบสายพนธ โดยกลบคาบตเปนคาใหมในตาแหนงบตทสมได ตามอตราความนาจะเปนของการกลายพนธในแตละบต (Probability of Mutation: Pm) ทกาหนด โดยทวไปกาหนดใหอยระหวาง 0.02 – 0.18 เชนถาจานวนประชากรแตละรนเทากบ

30 และแตละโครโมโซมประกอบดวย 5 บต โดยกาหนดให Pm = 0.02 แลวจานวนการกลายพนธในแตละรนเทากบ Pm x Population Size x lchrom = 0.02 x 30 x 5 = 3 บต จดประสงคของการกลายพนธเพอใหสามารถหลดพนออกจากคาตอบทเหมาะสมทสดในวงแคบ ตวอยางการกลายพนธของขนตอนวธเชงพนธกรรมแบบงายนนเปนการกลายพนธแบบทวภาค (Binary

Mutation) โดยกลบคาบต เชนจาก ‘0’ เปน ‘1’ หรอจาก ‘1’ เปน ‘0’ แสดงดงรปท 13.7

กอนกลายพนธ c1 c2 c3 cpos clchrom

หลงกลายพนธ c1 c2 c3 c’pos clchrom

(pos คอตาแหนงทสมได)

รปท 13.7 กลายพนธแบบทวภาค

Page 518: การเขียนโปรแกรมคอมพิวเตอร ์portal5.udru.ac.th/ebook/pdf/upload/17P88t2O788B98583682.pdfรูปภาพบางส่วนให

บทท 13 การประยกตภาษาซในงานวจยทางปญญาประดษฐในการสรางขอสอบอตโนมต

504

ประชากรรนใหม (New Population)

ประชากร รนใหม คอประชากรกลมใหม โดยอาจจะไ ดมากจากการแทนท

(Replacement) ซงการแทนทเปนขนตอนหลงจากทไดโครโมโซมททาการสลบสายพนธและกลายพนธ เรยกวาเปนโครโมโซมลกหลาน นาไปแทนทโครโมโซมในประชากรรนเกา เพอใหไดเปนโครโมโซมทดกวา ซงมหลายวธเชน

1. แทนทประชากรทงรน (Generation) เปนการนาโครโมโซมทไดใหมจากกระบวนการทางพนธศาสตรไปแทนโครโมโซมเดมทงหมดซงเปนวธทงาย แตขอเสยคอทาใหโครโมโซมทดในรนเดมถกแทนทไปดวย ซงอาจจะทาใหฟงกชนวตถประสงคมคาทอาจจะดหรอไมดสลบกนไปมาได เพราะรนใหมทงรนอาจจะไดคาทไมดกได แตการแทนทประชากรทงรนสามารถแกปญหาอยางงายโดยคดเลอกโครโมโซมทดทสดในรนเดม 2-3 ตว ออกมากอนทจะทาการแทนท เรยกวากลยทธคดเลอกหวกระท (Elitist Strategy) แตประชากรทเหลออาจถกหวกระทครอบงา คอโครโมโซมทดทสดในรนกอนจะถกเกบไวตลอดไป และไมทาใหเกดการเปลยนแปลงใดๆขน ทาใหระบบไมสามารถสรางววฒนาการ โครโมโซมใหมๆขนมาได ถงแมจะมผลกระทบทเกดขนดงกลาว แตโดยรวมแลวจะทาใหระบบดขนไปเรอย

2. แทนทประชากรบางสวน (Partial) เปนการนาโครโมโซมลกหลานไปแทนทเพยงบางสวน ดงนนจงมการคดเลอกโครโมโซมทจะถกแทนท ซงโดยปกตกจะพจารณาจากคาความเหมาะสมซงจะถกแทนทดวยโครโมโซมจานวน 1 หรอ 2 ตว โดยการแทนทอาจจะแทนทโครโมโซมทออนแอทสด หรอใชวธการสมเลอก เปนตน

13.3 การเขยนโปรแกรมการวเคราะหขอสอบ และการสรางขอสอบอตโนมตโดยขนตอนวธเชงพนธกรรม (Programming Language for Item

Analysis and Automatic Examinations by Genetic Algorithm)

13.3.1 การเขยนโปรแกรมในการวเคราะหขอสอบ

ในหวขอนจะเปนตวอยางของการเขยนโปรแกรมเพอทาการวเคราะหขอสอบ โดยจะทาการเขยนโปรแกรมในการวเคราะหขอสอบรายขอ ซงจะประกอบไปดวยการวเคราะหคาความยากงาย (P) และคาอานาจจาแนก (r)

Page 519: การเขียนโปรแกรมคอมพิวเตอร ์portal5.udru.ac.th/ebook/pdf/upload/17P88t2O788B98583682.pdfรูปภาพบางส่วนให

บทท 13 การประยกตภาษาซในงานวจยทางปญญาประดษฐในการสรางขอสอบอตโนมต

505

การหาคาความยากงาย (P) สามารถคานวณไดจาก

N

LHP

การหาคาอานาจจาแนก (r) สามารถคานวณไดจาก

1n

LHr

ทซง H คอจานวนคนทตอบขอสอบขอนนถกในกลมคนเกง (ตามสตรน คนเกงคอคนทไดคะแนนสงสด 25 % แรกของกลมผสอบทงหมด)

L คอจานวนคนทตอบขอสอบขอนนถกในกลมคนไมเกง (ตามสตรน คนไมเกงคอคนทไดคะแนนตาสด 25% ทายของกลมผสอบทงหมด) N คอจานวนคนทงสองกลมรวมกน

1n คอจานวนผ เขาสอบกลมสงหรอกลมตา

ตวอยางท 13.1 โปรแกรมคานวณหาคาอานาจจาแนกและคาความยากงาย โดยใหปอนคาจานวนขอสอบไดตามตองการ โดยสมมตรปแบบในการปอนคามรปแบบดงน

ขอท จานวนผตอบถก (กลมสง)

จานวนผตอบถก (กลมตา)

1 9 2

2 8 3

3 7 4

4 6 5

5 7 4

6 6 5

7 7 4

. . .

10 8 4

Page 520: การเขียนโปรแกรมคอมพิวเตอร ์portal5.udru.ac.th/ebook/pdf/upload/17P88t2O788B98583682.pdfรูปภาพบางส่วนให

บทท 13 การประยกตภาษาซในงานวจยทางปญญาประดษฐในการสรางขอสอบอตโนมต

506

1 #include <stdio.h> 2 #include <conio.h> 3 #include <math.h>

4 void main(void) 5 { 6 int n,i,b; 7 float x[50],y[50]; 8 float p[50],r[50]; 9 printf("Difficalty and Discrimenation \n"); 10 printf("------------------------------------\n"); 11 printf("Number of students = "); scanf("%d",&n); 12 printf("Number of Item = "); scanf("%d",&b); 13 printf("------------------------------------\n"); 14 printf("Hight Score Group \n"); 15 input(x,b); 16 printf("------------------------------------\n"); 17 printf("Low Score Group \n"); 18 input(y,b); 19 printf("------------------------------------\n"); 20 for(i=1;i<=b;i++) 21 { 22 p[i] = (x[i]+y[i])/n; 23 r[i] = (x[i]-y[i])/(n/2); 24 printf("Item[%d] Difficalty = %.2f

Discrimenation = %.2f\n",i,p[i],r[i]); 25 } 26 printf("------------------------------------\n"); 27 } 28 void input(float *a,int b) 29 { 30 int i; 31 printf("------------------------------------\n"); 32 for(i=1;i<=b;i++) 33 { 34 printf("Input Data[%d] = ",i);scanf("%f",&a[i]); 35 }

36 }

ผลลพธของโปรแกรม Difficalty and Discrimenation ------------------------------------ Number of students = 30 Number of Item = 8 ------------------------------------ Hight Score Group ------------------------------------ Input Data[1] = 9 Input Data[2] = 8 Input Data[3] = 7 Input Data[4] = 6 Input Data[5] = 7 Input Data[6] = 8 Input Data[7] = 9 Input Data[8] = 8

Page 521: การเขียนโปรแกรมคอมพิวเตอร ์portal5.udru.ac.th/ebook/pdf/upload/17P88t2O788B98583682.pdfรูปภาพบางส่วนให

บทท 13 การประยกตภาษาซในงานวจยทางปญญาประดษฐในการสรางขอสอบอตโนมต

507

------------------------------------ Low Score Group ------------------------------------ Input Data[1] = 1 Input Data[2] = 2 Input Data[3] = 3 Input Data[4] = 4 Input Data[5] = 5 Input Data[6] = 6 Input Data[7] = 7 Input Data[8] = 8 ------------------------------------ Item[1] Difficalty = 0.33 Discrimenation = 0.53 Item[2] Difficalty = 0.33 Discrimenation = 0.40 Item[3] Difficalty = 0.33 Discrimenation = 0.27 Item[4] Difficalty = 0.33 Discrimenation = 0.13 Item[5] Difficalty = 0.40 Discrimenation = 0.13 Item[6] Difficalty = 0.47 Discrimenation = 0.13 Item[7] Difficalty = 0.53 Discrimenation = 0.13 Item[8] Difficalty = 0.53 Discrimenation = 0.00 ------------------------------------

อธบายโปรแกรม

บรรทดท 6-8 กาหนดตวแปร n, i และ b เปนตวแปรแบบเลขจานวนเตม โดยตวแปร n สาหรบเกบคาจานวนของนกศกษา ตวแปร i สาหรบการทาซา ตวแปร b สาหรบเกบคาจานวนของขอสอบททาการวเคราะห

กาหนดตวแปร x, y, p, r โดยตวแปร x สาหรบเกบคาผตอบถกกลมสง ตวแปร y สาหรบเกบคาผตอบถกกลมตา ตวแปร p สาหรบเกบคาผลลพธของคาความยากงาย และตวแปร r สาหรบเกบคาผลลพธของคาอานาจจาแนก

บรรทดท 9-13 เปนการแสดงผลขอความและรบคาจานวนของนกศกษาพรอมทงจานวนของขอสอบทจะทาการวเคราะห

บรรทดท 14-19 เปนการแสดงผลขอความและใหสงคาไปยงฟงกชน input โดยการเรยกฟงกชนครงแรกจะสงจานวนผตอบถกในกลมสงและจานวนของขอสอบ ในครงทสองจะสงจานวนผตอบถกในกลมตาและจานวนของขอสอบ ซงจะเปนการรบคาเขามาเกบไวยงตวแปรแถวลาดบ x

และตวแปรแถวลาดบ y

Page 522: การเขียนโปรแกรมคอมพิวเตอร ์portal5.udru.ac.th/ebook/pdf/upload/17P88t2O788B98583682.pdfรูปภาพบางส่วนให

บทท 13 การประยกตภาษาซในงานวจยทางปญญาประดษฐในการสรางขอสอบอตโนมต

508

บรรทดท 20-25 คานวณหาคาความยากงายและคาอานาจจาแนกโดยจะเกบคาผลลพธไวทตวแปรแถวลาดบ p และตวแปรแถวลาดบ r และใหแสดงผลลพธของคาความยากงายและคาอานาจจาแนก

บรรทดท 28-36 ฟงกชนในการรบคาผ ทตอบถก หรอตอบผดในแตละขอ เพอนามาใชในการวเคราะหขอสอบ

13.3.2 การเขยนโปรแกรมในการสรางขอสอบอตโนมตโดยขนตอนวธเชงพนธกรรม

ในหวขอนจะเปนตวอยางของการเขยนโปรแกรมเพอทาการสรางขอสอบอตโนมตโดยขนตอนวธเชงพนธกรรมพนฐาน ซงอาจจะมการเปลยนแปลงกระบวนขนตอนบางอยางเพอใหมความเหมาะสมในการสรางขอสอบโดยอตโนมต โดยในการเขยนโปรแกรมจะทาเปนลาดบขนตอนดงน

ขนตอน 1 ทาการปรบปญหาใหอยในรปแบบของโครโมโซม

ทาการปรบปญหาใหอยในรปแบบของโครโมโซมในการตดสนใจคดเลอกขอสอบเพอสรางแบบทดสอบทมคณภาพใหเขากบขนตอนวธเชงพนธกรรม จากขอมลของขอสอบทงหมดจดใหอยรปแบบของโครโมโซม โดยแตละโครโมโซมจะประกอบดวยขอสอบจานวนหลายขอ (จานวนขอสอบทเราตองการ) ซงความยาวของโครโมโซมนนจะเทากบจานวนบททเราใชในวชาททดสอบ จะเกบไวในตวแปรแถวลาดบ 2 มต ชอ node_string[ ][ ] โดยจะมลกษณะในการกาหนดรปแบบของโครโมโซมทใชแทนปญหา ดงตวอยางการแทนรปแบบของปญหาแสดงในรปท 13.8

รปท 13.8 ปรบรปแบบของปญหาใหเขาสในรปแบบทเหมาะสม

Page 523: การเขียนโปรแกรมคอมพิวเตอร ์portal5.udru.ac.th/ebook/pdf/upload/17P88t2O788B98583682.pdfรูปภาพบางส่วนให

บทท 13 การประยกตภาษาซในงานวจยทางปญญาประดษฐในการสรางขอสอบอตโนมต

509

ในแตละโครโมโซมจะประกอบไปดวยสถานเชอมตอ (Node) จานวนหลายสถานเชอมตอเรยงกนเปนโครโมโซม โดยในแตละสถานเชอมตอประกอบไปดวย ตาแหนงของขอสอบ (ขอท), บททของขอสอบ คาความยากงาย, คาอานาจจาแนก และเครองหมาย ดงรปท 13.9

ตาแหนง (number)

บทท

(chapter)

คาความยากงาย (fitness1)

คาอานาจจาแนก (fitness2)

เครองหมาย (mark)

รปท 13.9 ขอมลแตละสถานเชอมตอ

โดยจะมการประกาศตวแปรเปนชนดขอมลแบบโครงสราง (Structure Data Type) ซงนนกคอการรวมกลมของตวแปรตางๆ จานวนหลายตวแปรเขาไวดวยกนภายใตชอเพยงชอเดยว ซงจะทาใหเราสามารถจดกลมของขอมลและการนาไปประยกตสามารถกระทาไดสะดวกยงขน

1 struct node 2 { 3 int number; 4 int chapter; 5 double fitness1; 6 double fitness2; 7 int mark; 8 }

อธบายโปรแกรม

บรรทดท 1 ประกาศชนดขอมลแบบโครงสรางโดยมกลมของขอมลของตวแปรทแสดงดงในรปท 13.9 เพอใชเปนแตละยนของโครโมโซมทจะนามาใชกบขนตอนวธเชงพนธกรรม

บรรทดท 3-7 เปนกลมของขอมลในแตละยนของโครโมโซม

Page 524: การเขียนโปรแกรมคอมพิวเตอร ์portal5.udru.ac.th/ebook/pdf/upload/17P88t2O788B98583682.pdfรูปภาพบางส่วนให

บทท 13 การประยกตภาษาซในงานวจยทางปญญาประดษฐในการสรางขอสอบอตโนมต

510

ขนตอนท 2 กาหนดฟงกชนเปาหมาย (Fitness Function)

กาหนดฟงกชนเปาหมายของขอสอบในแตละชดหรอในแตละโครโมโซม ซงเปรยบเสมอนคาความสามารถในการอยรอดของแตละโครโมโซม ฟงกชนเปาหมายจะหาจากคาความยากงายและคาอานาจจาแนก คาความยากงายทดทสดจะอยในชวง 0.5 และคาอานาจจาแนกทดทสดอยในชวง 1 ดงนนสมการจะมการปรบใหอยในรปแบบทเหมาะสม ซงจะถกปรบใหอยในชวง 0-1 โดย ถาเขาใกล 0 แสดงวาเปนขอสอบทไมด และถาเขาใกล 1

แสดงวาเปนขอสอบทดทสด โดยฟงกชนความเหมาะสมสามารถหาไดจากดงสมการดงน

แสดงถงการหาคาฟงกชนความเหมาะสมในแตละสถานเชอมตอ (Node)

5.02

2

1

5.0

1

5.02

2

1

5.0

)(

P

DP

P

DP

inodeFitness (13.3)

แสดงถงการหาคาฟงกชนความเหมาะสมในแตละชดขอสอบหรอแตละโครโมโซม

n

inodeFitness

ChromosomeFitness

n

i

0

)(

(13.4)

P คอ คาความยากงาย D คอ คาอานาจจาแนก n คอ จานวนสถานเชอตอ (Node) ในโครโมโซม

ขนตอนท 3 สรางโปรแกรมคอมพวเตอรตามขนตอนวธเชงพนธกรรม ดาเนนการเขยนโปรแกรมในการตดสนใจคดเลอกขอสอบทมคณภาพโดยขนตอน

วธเชงพนธกรรม ซงในทนจะดาเนนการเขยนโปรแกรมตามกระบวนการดงผงงานในรปท

13.10

Page 525: การเขียนโปรแกรมคอมพิวเตอร ์portal5.udru.ac.th/ebook/pdf/upload/17P88t2O788B98583682.pdfรูปภาพบางส่วนให

บทท 13 การประยกตภาษาซในงานวจยทางปญญาประดษฐในการสรางขอสอบอตโนมต

511

รปท 13.10 ผงงานหลกในการเขยนโปรแกรมโดยขนตอนวธเชงพนธกรรมพนฐาน

Page 526: การเขียนโปรแกรมคอมพิวเตอร ์portal5.udru.ac.th/ebook/pdf/upload/17P88t2O788B98583682.pdfรูปภาพบางส่วนให

บทท 13 การประยกตภาษาซในงานวจยทางปญญาประดษฐในการสรางขอสอบอตโนมต

512

ขนตอนท 3.1 สรางประชากรตนแบบจากฟงกชน select_chromosome()

สรางประชากรตนแบบโดยการสมจากแถวลาดบ 2 มต node_string[ ][ ] โดยจะสามารถเลอกจานวนขอไดตามตองการ ในการสรางประชากรตนแบบจะใชฟงกชน

select_chormosome() ในการสรางประชากรตนแบบ ซงผลลพธทไดจากประชากรตนแบบจะถกเกบไวในตวแปร chromosome[ ] [ ] โดยจะถกเกบไวจานวน 10 โครโมโซม (Population

Size = 10) ในทนจานวนขอสอบทเราตองการคอความยาวของโคโมโซม เชนเราตองการขอสอบ 10 ขอ จะทาการสมเปนลาดบบททคอ 1,2,3,4,5,1,2,3,4,5 ซงจะได 1 โครโมโซมทมจานวน 10 ขอ ในการเขยนโปรแกรมนเรากาหนดประชากรเรมตนคอ 10 ดงนนจะทาการสมขอสอบหรอโครโมโซมจานวน 10 ขอ โดยในแตละโครโมโซมจะประกอบดวยจานวนโครโมโซมละ 2 บท แสดงตวอยางดงรปท 13.11

รปท 13.11 แสดงรปตวอยางของการสรางประชากรตนแบบโดยการสม

1 void select_chromosome(int lp) 2 { 3 int last_position = lp; 4 int i = 0; 5 int check_last_position = 0; 6 int result,result_s; 7 int aa = 0; 8 int kk = 0; 9 for(i=0;i<popsize;i++) 10 { 11 while(check_last_position < last_position) 12 { 13 result = aa % max_chapter; 14 result_s= random_int(position_chapter_number[result]-1); 15 while(node_string[result][result_s].mark!=0) 16 { 17 result = aa % max_chapter; 18 result_s=random_int(position_chapter_number[result]-1); 19 } 20 chromosome[i][kk].index_class = result; 21 chromosome[i][kk].index_depth = result_s; 22 node_string[result][result_s].mark = 1; 23 check_last_position++;

Page 527: การเขียนโปรแกรมคอมพิวเตอร ์portal5.udru.ac.th/ebook/pdf/upload/17P88t2O788B98583682.pdfรูปภาพบางส่วนให

บทท 13 การประยกตภาษาซในงานวจยทางปญญาประดษฐในการสรางขอสอบอตโนมต

513

24 kk++; 25 aa++; 26 } 27 aa=0; 28 kk=0; 29 check_last_position = 0; 30 } 31 }

อธบายโปรแกรม

บรรทดท 1 ประกาศฟงกชน select_chromosome(int lp) ในการคดเลอกเพอนามาสรางเปนโครโมโซมตามจานวนขอสอบทตองการจะสราง โดยจะเปนฟงกชน ท รบคา จานวนของขอสอบเขามาเ พอทาการประมวลผลในฟงกชนเพอคดเลอกขอสอบตามจานวนขอสอบทรบเขามา โดยผลลพธจะเกบไวทตวแปรแถวลาดบ 2 มต

chromosome[ ] [ ] โดยจะทาการสมเลอกจนกวาจะไดจานวนประชากรตนแบบทกาหนดคอจานวน 10 โครโมโซม

บรรทดท 3-8 เปนการประกาศตวแปรเพอใชในการประมวลผลในฟงกชน ตวแปร last_position เกบคาจานวนขอสอบทตองการจากผ ใช ตวแปร i, check_last_position, result, result_s, aa และ kk เปนตวแปรสาหรบการทาซ าและเกบตาแหนง ทใ ชในตวแปรแถวลาดบ

chromosome

บรรทดท 11-30 เปนการทาซาเพอคดเลอกประชากรตนแบบทจะนามาดาเนนการทางพนธศาสตร โดยจะทาการสมการคดเลอกในแตละโครโมโซมตามจานวนขอสอบทตองการ และเมอไดในแตละโครโมโซมกจะกระทาซาไปจนกวาจะไดชดขอสอบหรอประชากรตนแบบทตองการคอ 10 โครโมโซม ในการสมจะมการตรวจสอบตาแหนง (Mark) ของขอสอบดวยเนองจากหากมขอสอบขอไหนถกเลอกไปแลวจะไมนามาเลอกซา ถาสมซาจะตองมการสมใหมจนกวาจะไดขอสอบทไมซากนในประชากรรนน สดทายผลลพธจะเกบไวทตวแปรแถวลาดบ

2 มต chromosome[ ][ ] โดยตวแปรแถวลาดบนจะประกอบดวยสมาชก 2 ตวคอ int index_class; และ int index_depth; ซงจะเกบตาแหนงแถวและตาแหนงหลกเพอทจะนาไปใชในการประมวลผลในโปรแกรม

Page 528: การเขียนโปรแกรมคอมพิวเตอร ์portal5.udru.ac.th/ebook/pdf/upload/17P88t2O788B98583682.pdfรูปภาพบางส่วนให

บทท 13 การประยกตภาษาซในงานวจยทางปญญาประดษฐในการสรางขอสอบอตโนมต

514

ขนตอนท 3.2 คานวณหาคาความเหมาะสมจากฟงกชน evaluate()

ในการคานวณคาฟงกชนความเหมาะสมจะใชฟงกชน evaluate() เปนฟงกชนทคานวณคาความเหมาะสมของชดขอสอบ โดยผลลพธจะเกบผลลพธของฟงกชนความเหมาะสมในแตละตวทตวแปร fitness[ ] ดงแสดงในฟงกชน evaluate()

1 void evaluate(int lp) 2 { 3 int last_position = lp; 4 int i,j; 5 int aa,bb; 6 double sum=0; 7 double total_sum = 0; 8 double p,d; 9 for(i=0;i<popsize;i++) 10 { 11 for(j=0;j < last_position;j++) 12 { 13 aa = chromosome[i][j].index_class; 14 bb = chromosome[i][j].index_depth; 15 p = node_string[aa][bb].fitness1; 16 d = node_string[aa][bb].fitness2; 17 if( p <= 0.5 ) 18 { 19 sum = ((p/0.5)+((d+1)/2))/2; 20 } 21 if( p > 0.5) 22 { 23 sum = (((1-p)/0.5)+((d+1)/2))/2; 24 } 25 total_sum = total_sum + sum; 26 } 27 fitness[i] = total_sum/(last_position); 28 total_sum = 0; 29 } 30 }

อธบายโปรแกรม

บรรทดท 1 ประกาศฟงกชน evaluate(int lp) ในการคานวณคาฟงกชนความเหมาะสม (Fitness Function) โดยจะเปนฟงกชนทรบคาจานวนของขอสอบเขามาเพอทาการประมวลผลในฟงกชนเพอหาคาฟงกชนความเหมาะสม ซงจะเกบคาผลลพธคาความเหมาะสมของแตละโครโมโซมทตวแปร fitness[ ]

Page 529: การเขียนโปรแกรมคอมพิวเตอร ์portal5.udru.ac.th/ebook/pdf/upload/17P88t2O788B98583682.pdfรูปภาพบางส่วนให

บทท 13 การประยกตภาษาซในงานวจยทางปญญาประดษฐในการสรางขอสอบอตโนมต

515

บรรทดท 3-8 เปนการประกาศตวแปรเพอใชในการประมวลผลในฟงกชน ตวแปร last_position เกบคาจานวนขอสอบทตองการจากผ ใช ตวแปร i,j,aa,bb เปนตวแปรสาหรบการทาซาและเกบตาแหนงทใชในตวแปรแถวลาดบ node_string ตวแปร sum และ total_sum เปนตวแปรสาหรบเกบคาผลรวมทคานวณได และสดทายตวแปร p และ d

คอตวแปรทใชเกบคาความยากงายและคาอานาจจาแนก บรรทดท 9-29 เปนการทาซาเพอคานวณหาคาฟงกชนความเหมาะสมของในแตละ

สถานเชอมตอหรอยน และในแตละชดขอสอบหรอโครโมโซมดงสมการในการหาคาความเหมาะสม โดยผลลพธของฟงกชนความเหมาะสมในแตละโครโมโซมจะถกเกบไวในตวแปร fitness[ ]

ขนตอนท 3.3 เกบคาโครโมโซมทดจากฟงกชน keep_best_chromosome()

ขนตอนการเกบคาโครโมโซมทดเปนการเกบคาโครโมโซมทดไวเพอใชแทนทโครโมโซมทแยทสดในรนถดไป ซงจะเปนการรกษาโครโมโซมทดไว เนองจากขนตอนวธเชงพนธกรรมหากไมมการเกบคาทดไวในบางครงอาจจะทาใหผลลพธในแตละรนกจะดบางและไมดบาง อาจจะไดผลลพธทดมาเรอยๆ แตพอมาถงจดหนงผลลพธอาจจะไดไมด แตถาหากมการเกบคาโครโมโซมทดไวจะเปนการการนตวาในแตละรนจะตองไดคาตอบทดขนเรอยๆ ซงเปนเทคนคหนงทชวยเพมประสทธภาพของขนตอนวธเชงพนธกรรมใหดยงขน ดงฟงกชน

keep_best_chromosome()

1 void keep_best_chromosome(int lp) 2 { 3 int last_position = lp; 4 int iii,jjj,aa,bb; 5 double max[keep_chromosome]; 6 double max_temp = 0; 7 double check_fitness[popsize]; 8 9 for(iii=0;iii<popsize;iii++) 10 { 11 check_fitness[iii] = fitness[iii]; 12 } 13 for(iii=0;iii<keep_chromosome;iii++) 14 { 15 max[iii] = 0; 16 } 17 for(iii=0;iii<keep_chromosome;iii++) 18 { 19 for(jjj=0;jjj<popsize;jjj++)

Page 530: การเขียนโปรแกรมคอมพิวเตอร ์portal5.udru.ac.th/ebook/pdf/upload/17P88t2O788B98583682.pdfรูปภาพบางส่วนให

บทท 13 การประยกตภาษาซในงานวจยทางปญญาประดษฐในการสรางขอสอบอตโนมต

516

20 { 21 max[iii] = check_fitness[jjj]; 22 if(max[iii] > max_temp) 23 { 24 max_temp = max[iii]; 25 position_max[iii] = jjj; 26 } 27 } 28 check_fitness[position_max[iii]] = 0; 29 max[iii] = 0; 30 max_temp = 0; 31 } 32 33 for(iii=0;iii<keep_chromosome;iii++) 34 { 35 for(jjj=0;jjj < last_position;jjj++) 36 { 37 aa = chromosome[position_max[iii]][jjj].index_class; 38 bb = chromosome[position_max[iii]][jjj].index_depth; 39 best_old_chromosome[iii][jjj].index_class = aa; 40 best_old_chromosome[iii][jjj].index_depth = bb; 41 } 42 aa=0; 43 bb=0; 44 } 45 46 47 for(iii=0;iii<keep_chromosome;iii++) 48 { 49 fitness_best_chromosome[iii]=fitness[position_max[iii]]; 50 } 51 }

อธบายโปรแกรม

บรรทดท 1 ประกาศฟงกชน keep_best_chromosome(int lp) ในการเกบโครโมโซมทดทสดตามจานวนทตองการ เชนอาจจะเกบ 1 ตว หรอ 2

ตว ซงขนอยกบการกาหนดคาของผ ใช ซงในโปรแกรมจะกาหนดใหเกบโครโมโซมทดทสดในแตละรนจานวน 1 ตว ซงจะเกบคาผลลพธของตาแหนง ท เ ปนโครโมโซมท ด ทสดในแตละ รนในตวแปร fitness_best_chromosome[ ] และเกบคาทดทสดในแตละรนไวทตวแปร best_old_chromosome[ ][ ]

บรรทดท 3-7 เปนการประกาศตวแปรเพอใชในการประมวลผลในฟงกชน ตวแปร last_position เกบคาจานวนขอสอบทตองการจากผ ใช ตวแปร iii,jjj,aa,bb เปนตวแปรสาหรบการทาซาและเกบตาแหนงทใชในตว

Page 531: การเขียนโปรแกรมคอมพิวเตอร ์portal5.udru.ac.th/ebook/pdf/upload/17P88t2O788B98583682.pdfรูปภาพบางส่วนให

บทท 13 การประยกตภาษาซในงานวจยทางปญญาประดษฐในการสรางขอสอบอตโนมต

517

แปรแถวลาดบ ตวแปร max[ ] และ max_temp เปนตวแปรสาหรบหาคาสงสด ตวแปร check_fitness[ ] เปนตวแปรทใชตรวจคาฟ ง ก ช น ค ว า ม เ ห ม า ะ ส ม ข อ ง แ ต ล ะ โ ค ร โ ม โ ซ ม ต ว แ ป ร keep_chromosome คอจานวนของโครโมโซมทตองการจดเกบซงจะประกาศเปนตวแปรแบบโกลบอลหรอครอบคลม ซงจะประกาศนอกฟงกชนน

บรรทดท 9-50 เปนการทาซาเพอคานวณหาคาทดทสดของโครโมโซมในแตละรนตามจานวนทตองการเกบคาทดทสด ซงในโปรแกรมจะกาหนดใหเกบ 1 โครโมโซมในแตละรนทดทสด เรมตนจะทาการหาตาแหนงของโครโมโซมทดทสดจากตวแปร fitness[ ] เพอใหทราบถงตาแหนงท ต อ ง ก า ร จ า ก น น ท า ก า ร เ ก บ ค า ท ด ท ส ด ไ ว ท ต ว แ ป ร fitness_best_chromosome[ ] และเกบโครโมโซมทดทสดไวทตวแปร best_old_chromosome[ ][ ]

ขนตอนท 3.4 ดาเนนการสลบสายพนธจากฟงกชน crossover()

ในขนตอนนจะทาการจะเปนการดาเนนในการแลกเปลยนบางสวนของโครโมโซมพอ-แม ตามการกาหนดอตราความนาจะเปนของการสลบสายพนธ (Probability of Crossover:

Pc) เพอสรางชดโครโมโซมรนใหมหรอโครโมโซมลก ในสวนของฟงกชนจะเปนสลบสายพนธแบบ 1 จด ดงแสดงในตวอยางในรปท 13.12

กอนการสลบสายพนธ

หลงการสลบสายพนธ

รปท 13.12 ตวอยางของการสลบสายพนธแบบ 1 จด

Page 532: การเขียนโปรแกรมคอมพิวเตอร ์portal5.udru.ac.th/ebook/pdf/upload/17P88t2O788B98583682.pdfรูปภาพบางส่วนให

บทท 13 การประยกตภาษาซในงานวจยทางปญญาประดษฐในการสรางขอสอบอตโนมต

518

ในการสลบสายพนธ จะเรมจากการสมโครโมโซมพอ-แมจากประชากรเรมตน

(chromosome[ ][ ]) ทมอยจานวน 10 โครโมโซม โดยจะทาการทาซาของการสมในโปรแกรมนจะดาเนนการสลบสายพนธจานวน 4 ครง จากนนกจะดาเนนการสมในแตละยน วาจะดาเนนการสลบสายพนธ ท ตาแหนงใด และเมอไดตาแหนงทตองการทงหมดแลวกจะดาเนนการสลบสายพนธดงฟงกชน crossover()

1 void crossover(int lp) 2 { 3 int last_position = lp; 4 int parent1,parent2; 5 int position_crossover; 6 int x,y,xx,yy; 7 int i =0; 8 int loop; 9 loop = m_population; 10 11 while(i <loop) 12 { 13 parent1 = random_int(m_population-1); 14 parent2 = random_int(m_population-1); 15 while(parent1==parent2) 16 { 17 parent1 = random_int(m_population-1); 18 parent2 = random_int(m_population-1); 19 } 20 21 position_crossover = random_int(last_position-1); 22 while(position_crossover == 0) 23 { 24 position_crossover = random_int(last_position-1); 25 } 26 27 while(position_crossover <= last_position) 28 { 29 x=chromosome[parent1][position_crossover].index_class; 30 y=chromosome[parent1][position_crossover].index_depth; 31 xx=chromosome[parent2][position_crossover].index_class; 32 yy=chromosome[parent2][position_crossover].index_depth; 33 if(position_crossover <= last_position) 34 { 35 chromosome[parent1][position_crossover].index_class=xx; 36 chromosome[parent1][position_crossover].index_depth=yy; 37 chromosome[parent2][position_crossover].index_class=x; 38 chromosome[parent2][position_crossover].index_depth=y; 39 position_crossover++; 40 } 41 } 42 i++; 43 } 44 }

Page 533: การเขียนโปรแกรมคอมพิวเตอร ์portal5.udru.ac.th/ebook/pdf/upload/17P88t2O788B98583682.pdfรูปภาพบางส่วนให

บทท 13 การประยกตภาษาซในงานวจยทางปญญาประดษฐในการสรางขอสอบอตโนมต

519

อธบายโปรแกรม

บรรทดท 1 ประกาศฟงกชน crossover(int lp) ในการสลบตาแหนงบางสวนของยนหรอขอสอบตามจานวนครงทกาหนดซงในโปรแกรมจะกาหนดจานวน 4 ครง โดยผลลพธทไดจะถกเกบไวทตวแปรแถวลาดบ 2 มต

chromosome[ ][ ]

บรรทดท 3-8 เปนการประกาศตวแปรเพอใชในการประมวลผลในฟงกชน ตวแปร last_position เกบคาจานวนขอสอบทตองการจากผ ใช ตวแปร parent1, parent2 และ position_crossover เกบตาแหนงโครโมโซมและเกบตาแหนงทจะทาการสลบสายพนธ ตวแปร x, y, xx และ yy

เปนตวแปรสาหรบการทาซาและเกบตาแหนงทใชในตวแปรแถวลาดบ ตวแปร loop คอตวแปรทเกบจานวนครงของการทาสลบสายพนธ ซงในโปรแกรมกาหนดไวเทากบ 4

บรรทดท 10-25 เปนการทาซาเพอหาตาแหนงของโครโมโซมพอ-แม และตาแหนงทจะดาเนนการสลบสายพนธ ตามจานวนทกาหนดไว

บรรทดท 26-43 เปนการทาซาเพอการดาเนนการทางพนธศาสตรในการสลบสายพนธ โดยจะเกบคาผลลพธไวทตวแปรแถวลาดบ 2 มต

chromosome[ ][ ]

ขนตอนท 3.5 ดาเนนการกลายพนธจากฟงกชน mutation()

ในขนตอนนจะทาการจะเปนการดาเนนในการกลายพนธ ห รอในทน คอการเปลยนแปลงขอสอบจากประชากรตนแบบโดยจะกลายพนธ นาขอสอบในสวนอนเขามาสประชากรตนแบบ ตามการกาหนดอตราความนาจะเปนของการกลายพนธ (Probability of

Mutation: Pm) โดยในโปรแกรมนในการกลายพนธนนตวทจะมาแทนจะตองอยในตาแหนงของบทเดยวกนจงจะสามารถทาการกลายพนธได ดงแสดงในตวอยางในรปท 13.13 ซงสมมตวาไดตาแหนงท 3 ทจะทาการกลายพนธ ซงตาแหนงท 3 ในทนคอบทท 3 ดงนนตาแหนงขอสอบทจะมาแทนจะตองอยในบทท 3 เทานน

Page 534: การเขียนโปรแกรมคอมพิวเตอร ์portal5.udru.ac.th/ebook/pdf/upload/17P88t2O788B98583682.pdfรูปภาพบางส่วนให

บทท 13 การประยกตภาษาซในงานวจยทางปญญาประดษฐในการสรางขอสอบอตโนมต

520

กอนการกลายพนธ

หลงการกลายพนธ

รปท 13.13 ตวอยางของการกลายพนธ

ในการกลายพนธจะเรมจากการสมโครโมโซมจากประชากรเรมตนทถกเกบขอมลทแถวลาดบ 2 มต (chromosome[ ][ ]) ทมอยจานวน 10 โครโมโซม โดยจะทาการทาซาของการสมในโปรแกรมนจะดาเนนการกลายพนธ จานวน 4 ครง จากนนกจะดาเนนการสมในแตละยน วาจะดาเนนการสลบสายพนธทตาแหนงใด และเมอไดตาแหนงทตองการทงหมดแลวกจะดาเนนการกลายพนธดงฟงกชน mutation()

1 void mutation(int lp) 2 { 3 int last_position = lp; 4 int x,y; int new_mutation; 5 int i = 0; 6 int chap; 7 int check_loop_exit = 0; 8 int number_mutation = m_population; 9 int position_mutation = 0; 10 int position_class_mutation = 0; 11 int position_depth_mutation = 0; 12 while(i<number_mutation) 13 { 14 position_class_mutation = random_int(m_population-1); 15 position_depth_mutation = random_int(last_position-1); 16 x = chromosome[position_class_mutation]

[position_depth_mutation].index_class; 17 y = chromosome[position_class_mutation]

[position_depth_mutation].index_depth; 18 chap = node_string[x][y].chapter; 19 if(chap>0) 20 { 21 new_mutation = random_int(position_chapter_number[chap-1]-

1); 22 while((node_string[chap-1]

[new_mutation].mark!=0)&&(check_loop_exit < 20)) 23 { 24 new_mutation = random_int(position_chapter_number[chap-1]-

1); 25 check_loop_exit++; 26 }

Page 535: การเขียนโปรแกรมคอมพิวเตอร ์portal5.udru.ac.th/ebook/pdf/upload/17P88t2O788B98583682.pdfรูปภาพบางส่วนให

บทท 13 การประยกตภาษาซในงานวจยทางปญญาประดษฐในการสรางขอสอบอตโนมต

521

27 if(node_string[chap-1][new_mutation].mark == 0) 28 { 29 node_string[x][y].mark = 0; 30 chromosome[position_class_mutation]

[position_depth_mutation].index_class = chap - 1; 31 chromosome[position_class_mutation]

[position_depth_mutation].index_depth = new_mutation; 32 i++; 33 node_string[chap-1][new_mutation].mark = 1; 34 } 35 } 36 }

อธบายโปรแกรม

บรรทดท 1 ประกาศฟงกชน mutation(int lp) เพอใชในการกลายพนธซงในทน คอการเปลยนบางสวนของโครโมโซมตามจานวนครงทกาหนด ซงในโปรแกรมจะกาหนดจานวน 4 ครง โดยผลลพธทไดจะถกเกบไวทตวแปรแถวลาดบ 2 มต chromosome[ ][ ]

บรรทดท 3-11 เปนการประกาศตวแปรเพอใชในการประมวลผลในฟงกชน ตวแปร last_position เกบคาจานวนขอสอบทตองการจากผใช ตวแปร i, x

และ y เปนตวแปรสาหรบการทาซาและเกบตาแหนงทใชในตวแปรแถวลาดบ ตวแปร chap เปนตวแปรสาหรบการเกบคาบทของขอสอบ ตวแปร new_mutation เปนตวแปรสาหรบการเกบคาตวทกลายพนธตวใหม ตวแปร check_loop_exit เปนตวแปรสาหรบการตรวจสอบการทาซา ตวแปร number_mutation เปนตวแปรทกาหนดจานวนครงของการกลายพนธซงในโปรแกรมจะกาหนดเทากบ 4 ตวแปร position_mutation, position_class_mutation,

และ position_depth_mutation เปนตวแปรสาหรบเกบตาแหนงของการกลายพนธเพอใชในการระบตาแหนงเพอทจะเปลยนแปลง

บรรทดท 12-35 เปนการทาซาเพอการดาเนนการทางพนธศาสตรในการกลายพนธ โดยจะเกบคาผลลพธไวทตวแปรแถวลาดบ 2 มต chromosome[ ][ ]

โดยในการกลายพนธจากโปรแกรมจะมการตรวจสอบตาแหนงของบททจะทาการกลายพนธเพอใหไดตาแหนงทถกตอง บรรทดท 14-17

เปนการสมตาแหนงทจะดาเนนการกลายพนธ บรรทดท 19-35 เปนการตรวจสอบเงอนไขของการกลายพนธและทาการกลายพนธเพอใหไดโครโมโซมทดขน

Page 536: การเขียนโปรแกรมคอมพิวเตอร ์portal5.udru.ac.th/ebook/pdf/upload/17P88t2O788B98583682.pdfรูปภาพบางส่วนให

บทท 13 การประยกตภาษาซในงานวจยทางปญญาประดษฐในการสรางขอสอบอตโนมต

522

ขนตอนท 3.6 คานวณหาคาความเหมาะสมจากฟงกชน evaluate()

ในการคานวณคาฟงกชนความเหมาะสมจะใชฟงกชน evaluate() เชนเดยวกนกบขนตอนท 3.2 เพอคานวณคาความเหมาะสมของชดขอสอบ โดยการคานวณในสวนนจะเปนการคานวณคาความเหมาะสมของประชากรทไดผานการดาเนนการทางพนธศาสตรเพอใหไดประชากรรนใหมหรอประชากรรนถดไป

ขนตอนท 3.7 ดาเนนการเกบแทนทโครโมโซมทแยทสด จากฟงกชน survive()

เปนกระบวนการในการตดสนใจคดเลอกโครโมโซมทดไว เนองจากในบางครงการคนหาคาตอบของขนตอนวธเชงพนธกรรมนนมโอกาสทจะสญเสยโครโมโซมในรนเกาทมคาความเหมาะสมทดไปได ซงจะทาใหไดคาตอบในรนถดไปนนดมากหรอนอยลง ดงนนจงมการปรบปรงใหควบคมการคนหาคาตอบ โดยรกษาโครโมโซมทดไวแลวจะชวยใหววฒนาการคาตอบในรนถดไปดขนเรอยๆ ดงนนในขนตอนนจะดาเนนการคดเลอกโครโมโซมในรนใหมหลงจากท มการดาเ นนทางพนธศาสตร โดยจะนาโครโมโซมท ด ทสดจากฟงกชน

keep_best_chromosome() มาแทนทโครโมโซมรนใหมทแยทสดในรนถดไปตามจานวนทตองการ ซงในโปรแกรมไดกาหนดไวท 1 ตว แสดงวาจะนาโครโมโซมตวเกาจากประชากรรนเกามาแทนทตวทแยทสดในประชากรรนใหม ซงจะเปนเทคนคทชวยเพมประสทธภาพในการหาคาตอบใหดยงขน

1 void survive(int lp) 2 { 3 int last_position = lp; 4 int i,j,ii; 5 int same_chromosome = 0; 6 double low[keep_chromosome]; 7 double low_temp = 1; 8 double check_fitness[popsize]; 9 int check_keep_chromosome = keep_chromosome; 10 int aaa,bbb; 11 for(i=0;i<m_population;i++) 12 { 13 check_fitness[i] = fitness[i]; 14 } 15 for(i=0;i<check_keep_chromosome;i++) 16 { 17 low[i] = 1; 18 } 19 for(i=0;i<check_keep_chromosome;i++) 20 { 21 for(j=0;j<m_population;j++) 22 { 23 low[i] = check_fitness[j];

Page 537: การเขียนโปรแกรมคอมพิวเตอร ์portal5.udru.ac.th/ebook/pdf/upload/17P88t2O788B98583682.pdfรูปภาพบางส่วนให

บทท 13 การประยกตภาษาซในงานวจยทางปญญาประดษฐในการสรางขอสอบอตโนมต

523

24 if(low[i] < low_temp) 25 { 26 low_temp = low[i]; 27 position_low[i] = j; 28 } 29 } 30 check_fitness[position_low[i]] = 1; 31 low[i] = 1; 32 low_temp = 1; 33 } 34 for(ii=0;ii<check_keep_chromosome;ii++) 35 { 36 for(j=0;j<m_population;j++) 37 { 38 if(fitness_best_chromosome[ii] == fitness[j]) 39 { 40 same_chromosome++; 41 } 42 } 43 if((same_chromosome == 0)&&(fitness_best_chromosome[ii]

> fitness[position_low[ii]])) 44 { 45 for(j=0;j<last_position;j++) 46 { 47 aaa = chromosome[position_low[ii]][j].index_class; 48 bbb = chromosome[position_low[ii]][j].index_depth; 49 node_string[aaa][bbb].mark = 0; 50 chromosome[position_low[ii]][j].index_class =

best_old_chromosome[ii][j].index_class; 51 chromosome[position_low[ii]][j].index_depth =

best_old_chromosome[ii][j].index_depth; 52 node_string[chromosome[position_low[ii]][j].index_class]

[chromosome[position_low[ii]][j].index_depth].mark = 1; 53 } 54 fitness[position_low[ii]] = fitness_best_chromosome[ii]; 55 } 56 same_chromosome = 0; 57 } 58 }

อธบายโปรแกรม

บรรทดท 1 ประกาศฟงกชน survive(int lp) ในการแทนทโครโมโซมรนใหมทแยทสดโดยโครโมโซมรนเกาทดทสดเพอรกษาโครโมโซมทดไวมใหสญหาย ทาใหไดคาตอบทดขนเรอยๆ ในแตละรน ซงในฟงกชนนจะกาหนดใหแทนทเพยง 1 ตว โดยโครโมโซมตวทดทสดของรนเกา 1

ตว จะแทนทโครโมโซมตวทแยทสดในรนใหม 1 ตว จากนนผลลพธจะถกเกบไวทตวแปรแถวลาดบ 2 มต chromosome[ ][ ] เชนเดม

Page 538: การเขียนโปรแกรมคอมพิวเตอร ์portal5.udru.ac.th/ebook/pdf/upload/17P88t2O788B98583682.pdfรูปภาพบางส่วนให

บทท 13 การประยกตภาษาซในงานวจยทางปญญาประดษฐในการสรางขอสอบอตโนมต

524

บรรทดท 3-10 เปนการประกาศตวแปรเพอใชในการประมวลผลในฟงกชน ตวแปร last_position เกบคาจานวนขอสอบทตองการจากผใช ตวแปร i, j, ii, aaa, และ bbb เปนตวแปรสาหรบการทาซาและเกบตาแหนงทใชในต ว แ ป ร แ ถ ว ล า ด บ ใ น ก า ร แ ท น ท โ ค ร โ ม โ ซ ม ต ว แ ป ร same_chromosome เปนตวแปรทใชตรวจสอบการซากนของโครโมโซม ตวแปร low และ low_temp เปนตวแปรทถกใชเกบคาตาแหนงของโครโมโซมทแยทสด ตวแปร check_fitness[ ] เปนตวแปรแถวลาดบ 1 มต ทใชตรวจสอบฟงกชนความเหมาะสม ตวแปร check_keep_chromosome เปนตวแปรทเกบคาจานวนครงของการแทนทเพอตรวจสอบดวาตองการแทนทกครง

บรรทดท 11-33 เปนการทาซาเพอหาตาแหนงของโครโมโซมทแยทสดของประชากรรนใหมตามจานวนทตองการแทนท ซงในโปรแกรมกาหนดใหการแทนทโครโมโซมจานวน 1 โครโมโซม ซงผลลพธจะถกเกบไวทตวแปรแถวลาดบ 1 มต position_low[ ] โดยจะเกบตาแหนงของโครโมโซมทแยทสด

บรรทดท 34-57 เปนการทาซาเพอการดาเนนการแทนทโครโมโซมตวทแยทสดในรนใหมโดยตวทดทสดในรนเกา ซงจะมการเปรยบเทยบการซากนของโครโมโซมเพอใหมความถกตองยงขน โดยผลลพธของโครโมโซมในประชากรรนใหมจะเกบคาผลลพธไวทตวแปรแถวลาดบ 2 มต

chromosome[ ][ ]

ขนตอนท 3.7 ตรวจสอบเงอนไขของการสรางประชากรรนใหม

คอขนตอนตรวจสอบการหยดการทาซาของขนตอนวธเชงพนธกรรม ซงอาจจะหยดจากการทไดคาตอบทดทสดแลว หรออาจจะหยดจากไดคาทเหมาะสมแลว หรออาจจะหยดจากการกาหนดจานวนการสรางประชากรรนใหม ซงในโปรแกรมนจะเปนการหยดจากการกาหนดจานวนการสรางประชากรนใหมจากผ ใช โดยสามารถกาหนดไดเทาไหรกไดเชน

กาหนด 1 ครง 100 ครง และ 1000 ครง เปนตน ในการตรวจสอบถายงไมหยดการสรางประชากรรนใหมกจะดาเนนการทาซาไปยงขนตอนท 3.3 จนกวาเงอนไขทไดจะไดตามทตองการ

Page 539: การเขียนโปรแกรมคอมพิวเตอร ์portal5.udru.ac.th/ebook/pdf/upload/17P88t2O788B98583682.pdfรูปภาพบางส่วนให

บทท 13 การประยกตภาษาซในงานวจยทางปญญาประดษฐในการสรางขอสอบอตโนมต

525

ขนตอนท 3.8 เลอกโครโมโซมทดทสดเปนคาตอบของปญหา ขนตอนนจะเปนการเลอกโครโมโซมทดทสดซงในทนคอชดขอสอบทดทสดจากประชากรรนสดทายจากแถวลาดบ chromosome[ ][ ] ทเกบตาแหนงของขอสอบ และ fitness[ ] ทเกบคาฟงกชนความเหมาะสมของขอสอบ โดยจะเรมจากการหาโครโมโซมหรอชดขอสอบทดทสดจากประชากรรนสดทาย จากนนจะทาการเกบคาชดขอสอบทดไวทตวแปรแถวลาดบ exam_best[ ], chapter_exam[ ], fitnessP[ ] และ fitnessR[ ] ซงเปนตวแปรสาหรบเกบคาทกอยางทงขอท บทท คาความยากงาย และคาอานาจจาแนก เพอนาไปใชงานตอไป

ดงแสดงในโปรแกรมดงน

1 void best_exam(int lp) 2 { 3 int last_position = lp; 4 int iii,jjj,aa,bb,j; 5 double max[keep_chromosome]; 6 double max_temp = 0; 7 double check_fitness[popsize]; 8 for(iii=0;iii<m_population;iii++) 9 { 10 check_fitness[iii] = fitness[iii]; 11 } 12 iii = 0; 13 max[iii] = 0; 14 for(jjj=0;jjj<m_population;jjj++) 15 { 16 max[iii] = check_fitness[jjj]; 17 if(max[iii] > max_temp) 18 { 19 max_temp = max[iii]; 20 position_max[iii] = jjj; 21 } 22 } 23 check_fitness[position_max[iii]] = 0; 24 max[iii] = 0; 25 max_temp = 0; 26 the_best_exam = position_max[0]; 27 iii = the_best_exam; 28 for(j=0;j < last_position;j++) 29 { 30 aa = chromosome[iii][j].index_class; 31 bb = chromosome[iii][j].index_depth; 32 exam_best[j] = node_string[aa][bb].number; 33 chapter_exam[j] = node_string[aa][bb].chapter; 34 fitnessP[j] = node_string[aa][bb].fitness1; 35 fitnessR[j] = node_string[aa][bb].fitness2; 36 } 37 }

Page 540: การเขียนโปรแกรมคอมพิวเตอร ์portal5.udru.ac.th/ebook/pdf/upload/17P88t2O788B98583682.pdfรูปภาพบางส่วนให

บทท 13 การประยกตภาษาซในงานวจยทางปญญาประดษฐในการสรางขอสอบอตโนมต

526

อธบายโปรแกรม

บรรทดท 1 ประกาศฟงกชน best_exam(int lp) ในการเลอกและจดเกบคาโครโมโซมทดทสดในประชากรรนสดทายเพอทจะนาไปเปนคาตอบในการสรางขอสอบอตโนมตโดยเทคโนโลยทางปญญาประดษฐทดทสด ผลลพธจะถกเกบไวทตวแปรแถวลาดบ 1 มต exam_best[ ],

chapter_exam[ ], fitnessP[ ] และ fitnessR[ ]

บรรทดท 3-7 เปนการประกาศตวแปรเพอใชในการประมวลผลในฟงกชน ตวแปร last_position เกบคาจานวนขอสอบทตองการจากผใช ตวแปร iii, jjj, aa, bb และ j เปนตวแปรสาหรบการทาซาและเกบตาแหนงทใชในตวแปรแถวลาดบในการแทนทโครโมโซม ตวแปร max และ max_temp เปนตวแปรทถกใชเกบคาตาแหนงของโครโมโซมทดทสด

ตวแปร check_fitness[ ] เปนตวแปรแถวลาดบ 1 มต ทใชตรวจสอบฟงกชนความเหมาะสม

บรรทดท 8-25 เปนการทาซาเพอหาตาแหนงของโครโมโซมทดทสดของประชากรรนสดทาย ซงผลลพธจะถกเกบไวทตวแปรแถวลาดบ 1 มต

position_max[ ] โดยจะเกบตาแหนงของโครโมโซมทดทสด

บรรทดท 26-36 เปนการทาซาเพอการดาเนนการเกบคาโครโมโซมหรอขอสอบทดทสด ซงจะเกบคาผลลพธไวทตวแปรแถวลาดบ exam_best[ ],

chapter_exam[ ], fitnessP[ ] และ fitnessR[ ] เพอใชเปนคาตอบของการคดเลอกขอสอบทดทสดโดยขนตอนวธเชงพนธกรรม

Page 541: การเขียนโปรแกรมคอมพิวเตอร ์portal5.udru.ac.th/ebook/pdf/upload/17P88t2O788B98583682.pdfรูปภาพบางส่วนให

บทท 13 การประยกตภาษาซในงานวจยทางปญญาประดษฐในการสรางขอสอบอตโนมต

527

ตวอยางท 13.2 โปรแกรมสรางขอสอบอตโนมตโดยขนตอนวธเชงพนธกรรม โดยสมมตมขอมลของขอสอบทจะดาเนนการสรางขอสอบคอ ขอท (ตาแหนง) บทท คาความยากงาย และคาอานาจจาแนก จานวน 200 ขอสอบ ทมการบอกคาความยากงายและคาอานาจจาแนก โดยใหทาการคดเลอกชดขอสอบทดทสดตามจานวนทตองการและแสดงผลของขอมลของแตละขอเพอแสดงใหเหนถงประสทธภาพในการสรางขอสอบ

ขอท บทท คาความยากงาย คาอานาจจาแนก 1

2

3

.

.

200

ตวอยางแฟมขอมล (File) text.txt ซงจะประกอบไปดวยขอสอบจานวน 200 ขอ เพอนามาใชทดสอบโปรแกรมทสรางจากขนตอนวธเชงพนธกรรม

Page 542: การเขียนโปรแกรมคอมพิวเตอร ์portal5.udru.ac.th/ebook/pdf/upload/17P88t2O788B98583682.pdfรูปภาพบางส่วนให

บทท 13 การประยกตภาษาซในงานวจยทางปญญาประดษฐในการสรางขอสอบอตโนมต

528

1 #include <string.h> 2 #include <stdio.h> 3 #include <stdlib.h> 4 #include <time.h> 5 #include <math.h> 6 #define popsize 10 7 #define Maxline 100 8 #define keep_chromosome 1 9 int position_max[keep_chromosome]; 10 int position_low[keep_chromosome]; 11 double fitness_best_chromosome[keep_chromosome]; 12 int max_chapter = 5; 13 int position_chapter_number[50]; 14 int m_population = 4; 15 double fitness[popsize]; 16 int exam_best[100]; 17 int chapter_exam[100]; 18 double fitnessP[300]; 19 double fitnessR[300]; 20 int the_best_exam; 21 22 struct node 23 { 24 int number; 25 int chapter; 26 double fitness1; 27 double fitness2; 28 int mark; 29 }; 30 node node_string[5][100]; 31 32 struct population 33 { 34 int index_class; 35 int index_depth; 36 }; 37 38 population chromosome[popsize][100]; 39 population best_old_chromosome[keep_chromosome][100]; 40 41 int random_int(int max); 42 float random_real(); 43 void show_result(int lp); 44 void read_file(); 45 void select_chromosome(int lp); 46 void evaluate(int lp); 47 void keep_best_chromosome(int lp); 48 void crossover(int lp); 49 void mutation(int lp); 50 void survive(int lp); 51 void best_exam(int lp); 52 53 int random_int(int max) // random int from 0 - max 54 {

Page 543: การเขียนโปรแกรมคอมพิวเตอร ์portal5.udru.ac.th/ebook/pdf/upload/17P88t2O788B98583682.pdfรูปภาพบางส่วนให

บทท 13 การประยกตภาษาซในงานวจยทางปญญาประดษฐในการสรางขอสอบอตโนมต

529

55 int result; 56 randomize(); 57 result = random(max+1); 58 return result; 59 } 60 61 float random_real() 62 { 63 float result; 64 randomize(); 65 result = float (rand()%100)/100; 66 return result; 67 } 68 69 void show_result(int lp) 70 { 71 int last_position = lp; 72 int ii; 73 printf("\n-------------------------The Best Item

----------------------------------\n"); 74 printf(" Item Chapter\tDifficulty

Discrimination\n"); 75 for(ii=0;ii<last_position;ii++) 76 { 77 printf("[%i] %i \t %i \t %.2f \t %.2f

\t\n",ii+1,exam_best[ii],chapter_exam[ii], fitnessP[ii],fitnessR[ii]);

78 } 79 printf("-----------------------------------

--------------------------------------\n"); 80 81 } 82 83 void read_file() 84 { 85 int result_position; 86 int ii; 87 FILE *Ptr; 88 int number,chapter; 89 float fitness1,fitness2; 90 max_chapter = 5; 91 Ptr = fopen("text.txt","r"); 92 if(Ptr==NULL){ 93 printf("Cannot open file\n"); 94 exit(0); 95 } 96 else{ 97 while(fscanf(Ptr,"%d %d %f

%f",&number,&chapter,&fitness1,&fitness2)!= EOF) 98 { 99 printf("%d \t%d \t%.2f\t%.2f\n",

number,chapter,fitness1,fitness2); 100 result_position = position_chapter_number[chapter-1]; 101 node_string[chapter-1][result_position].number = number; 102 node_string[chapter-1][result_position].chapter = chapter;

Page 544: การเขียนโปรแกรมคอมพิวเตอร ์portal5.udru.ac.th/ebook/pdf/upload/17P88t2O788B98583682.pdfรูปภาพบางส่วนให

บทท 13 การประยกตภาษาซในงานวจยทางปญญาประดษฐในการสรางขอสอบอตโนมต

530

103 node_string[chapter-1][result_position].fitness1 = fitness1; 104 node_string[chapter-1][result_position].fitness2 = fitness2; 105 node_string[chapter-1][result_position].mark = 0; 106 result_position++; 107 position_chapter_number[chapter - 1] = result_position; 108 } 109 fclose(Ptr); 110 } 111 } 112 113 void main(void) 114 { 115 int last_position; 116 int gen = 1; 117 int generation; 118 read_file(); 119 printf("\nNumber of Items = "); 120 scanf("%i",&last_position); 121 select_chromosome(last_position); 122 evaluate(last_position); 123 printf("Number of Generation = "); 124 scanf("%i",&generation); 125 do{ 126 keep_best_chromosome(last_position); 127 crossover(last_position); 128 mutation(last_position); 129 evaluate(last_position); 130 survive(last_position); 131 gen++; 132 }while(gen < generation); 133 best_exam(last_position); 134 show_result(last_position); 135 }

ผลลพธของโปรแกรม

(รนครงท 1)

1 1 0.30 -0.70 2 2 0.20 -0.80 3 3 0.30 -0.60 . . . . . . 198 3 0.80 0.80 199 4 0.90 1.00 200 5 1.00 0.50 Number of Items = 10 Number of Generation = 1 -------------------------The Best Item--------------------- Item Chapter Difficulty Discrimination [1] 121 1 0.10 0.80 [2] 107 2 0.70 0.20 [3] 158 3 0.80 -0.60

Page 545: การเขียนโปรแกรมคอมพิวเตอร ์portal5.udru.ac.th/ebook/pdf/upload/17P88t2O788B98583682.pdfรูปภาพบางส่วนให

บทท 13 การประยกตภาษาซในงานวจยทางปญญาประดษฐในการสรางขอสอบอตโนมต

531

[4] 144 4 0.40 1.00 [5] 140 5 1.00 0.20 [6] 186 1 0.60 0.60 [7] 187 2 0.70 0.80 [8] 98 3 0.80 0.80 [9] 19 4 0.90 0.40 [10] 95 5 0.50 0.20 -----------------------------------------------------------

(รนครงท 2) ในสวนนไมไดแสดงผลในสวนของขอมลเขา ซงจะเปนขอมลเดมเชนเดยวกนกบขอมลครงแรก Number of Items = 10 Number of Generation = 30 -------------------------The Best Item--------------------- Item Chapter Difficulty Discrimination [1] 111 1 0.10 1.00 [2] 42 2 0.20 0.60 [3] 198 3 0.80 0.80 [4] 144 4 0.40 1.00 [5] 75 5 0.50 0.60 [6] 156 1 0.60 -1.00 [7] 187 2 0.70 0.80 [8] 53 3 0.30 0.60 [9] 54 4 0.40 0.80 [10] 10 5 0.50 1.00 -----------------------------------------------------------

(รนครงท 3) ในสวนนไมไดแสดงผลในสวนของขอมลเขา ซงจะเปนขอมลเดมเชนเดยวกนกบขอมลครงแรก Number of Items = 10 Number of Generation = 100 -------------------------The Best Item--------------------- Item Chapter Difficulty Discrimination [1] 76 1 0.60 0.80 [2] 177 2 0.70 1.00 [3] 133 3 0.30 1.00 [4] 144 4 0.40 1.00 [5] 75 5 0.50 0.60 [6] 86 1 0.60 0.60 [7] 187 2 0.70 0.80 [8] 53 3 0.30 0.60 [9] 54 4 0.40 0.80 [10] 10 5 0.50 1.00 -----------------------------------------------------------

Page 546: การเขียนโปรแกรมคอมพิวเตอร ์portal5.udru.ac.th/ebook/pdf/upload/17P88t2O788B98583682.pdfรูปภาพบางส่วนให

บทท 13 การประยกตภาษาซในงานวจยทางปญญาประดษฐในการสรางขอสอบอตโนมต

532

(รนครงท 4) ในสวนนไมไดแสดงผลในสวนของขอมลเขา ซงจะเปนขอมลเดมเชนเดยวกนกบขอมลครงแรก Number of Items = 15 Number of Generation = 30 -------------------------The Best Item--------------------- Item Chapter Difficulty Discrimination [1] 186 1 0.60 0.60 [2] 77 2 0.70 1.00 [3] 28 3 0.80 0.00 [4] 54 4 0.40 0.80 [5] 10 5 0.50 1.00 [6] 176 1 0.60 0.80 [7] 147 2 0.70 -0.60 [8] 183 3 0.30 0.00 [9] 44 4 0.40 1.00 [10] 95 5 0.50 0.20 [11] 126 1 0.60 -0.40 [12] 32 2 0.20 0.80 [13] 8 3 0.80 0.40 [14] 64 4 0.40 0.60 [15] 55 5 0.50 1.00 -----------------------------------------------------------

หมายเหต ในสวนของฟงกชนทไมไดปรากฏในสวนนคอในสวนของฟงกชนในการดาเนนการทางพนธศาสตรของขนตอนวธเชงพนธกรรม ดงนนจะตองนาฟงกชนในหวขอกอนหนานมาใชในโปรแกรม จงจะทาใหโปรแกรมสมบรณ

อธบายโปรแกรม

บรรทดท 1-5 ประกาศไฟลสวนหว (Head File) ทใชในโปรแกรม

บรรทดท 6-8 กาหนดคาคงทใหกบโปรแกรม ตวแปร popsize คอตวแปรทกาหนดจานวนประชากรของขนตอนวธ ซงในทนกาหนดเทากบ 10 แสดงวาจะมจานวนประชากรในแตละรนเทากบ 10 โครโมโซม ตวแปร Maxline คอตวแปรเ กบความยาวสงสด ตวแปร keep_chromosome เปนตวแปรทกาหนดจานวนการเกบโครโมโซมทดทสดในแตละรนซงในทนกาหนดเทากบ 1 แสดงวามการกาหนดจานวนโครโมโซมทดทสดในแตละรนเทากบ 1 ซงในการเขยนโปรแกรมสามารถเปลยนแปลงไดตามความเหมาะสม หรอสามารถเปลยนแปลงเพอทดสอบประสทธภาพตางๆ ของโปรแกรม

บรรทดท 9-20 ประกาศตวแปรสวนกลาง (Global Variable) ทใชในทกฟงกชนของโปรแกรม

Page 547: การเขียนโปรแกรมคอมพิวเตอร ์portal5.udru.ac.th/ebook/pdf/upload/17P88t2O788B98583682.pdfรูปภาพบางส่วนให

บทท 13 การประยกตภาษาซในงานวจยทางปญญาประดษฐในการสรางขอสอบอตโนมต

533

บรรทดท 22-30 สรางตวแปร node เปนชนดขอมลแบบโครงสราง (Structure Data

Type) และประกาศตวแปร node_string[ ][ ] เปนตวแปรแถวลาดบ

2 มต ทเปนชนดขอมลแบบโครงสราง ซงประกอบไปดวย ตาแหนงของขอสอบ (ขอท), บททของขอสอบ คาความยากงาย, คาอานาจจาแนก และตาแหนงทใชในการเปรยบเทยบขอมลทนาไปใชและยงไมไดนาไปใช

บรรทดท 32-39 สรางตวแปร population เปนชนดขอมลแบบโครงสราง (Structure

Data Type) และประกาศตวแปร chromosome[ ][ ] และ best_old_chromosome[ ][ ] เปนตวแปรแถวลาดบ 2 มต ทเปนชนดขอมลแบบโครงสราง เพอใชเกบประชากรทใชในขนตอนวธเชงพนธกรรม

บรรทดท 41-51 เปนการประกาศตนแบบของฟงกชน (Function Prototype) ไวทสวนหวของโปรแกรม

บรรทดท 53-67 เปนฟงกชนในการสมตวเลขทงตวเลขจานวนเตมและจานวนเลขทศนยมเพอใชในขนตอนวธเชงพนธกรรม

บรรทดท 69-81 เปนฟงกชนในการแสดงผลลพธของโปรแกรมโดยจะแสดงโครโมโซมทดทสดหรอในทนคอขอสอบทดทสดตามจานวนขอสอบทเราตองการสราง โดยจะแสดงตาแหนงของขอสอบ (ขอท), บททของขอสอบ คาความยากงาย และคาอานาจจาแนก

บรรทดท 83-111เปนฟงกชนอานไฟล text.txt ทประกอบดวยตาแหนงของขอสอบ

(ขอท), บททของขอสอบ คาความยากงาย และคาอานาจจาแนก โดยจะเกบไวทตวแปรแถวลาดบ 2 มต node_string[ ][ ] เพอนาไปใชในขนตอนวธเชงพนธกรรมตอไป

บรรทดท 113-115 เปนฟงกชนหลกของโปรแกรม โดยในฟงกชนหลกจะดาเนนการเปนลาดบดงขนตอนวธเชงพนธกรรมทมการปรบปรงใหเหมาะสมในการคดเลอกขอสอบทมคณภาพโดยอตโนมต โดยจะทาซาหรอสรางประชากรรนใหมไปจนถงจานวนรอบทเรากาหนด ถาเกนจานวนรอบทกาหนดกจะแสดงผลลพธของคาตอบทดทสด ดงแสดงในผลลพธของโปรแกรม

Page 548: การเขียนโปรแกรมคอมพิวเตอร ์portal5.udru.ac.th/ebook/pdf/upload/17P88t2O788B98583682.pdfรูปภาพบางส่วนให

บทท 13 การประยกตภาษาซในงานวจยทางปญญาประดษฐในการสรางขอสอบอตโนมต

534

บทสรป

ในบทนไดกลาวถงทฤษฎการวเคราะหขอสอบ ทฤษฎขนตอนวธเชงพนธกรรม และการเขยนโปรแกรมในการสรางขอสอบอตโนมตโดยขนตอนวธเชงพนธกรรม ซงเปนบทประยกตการเขยนโปรแกรมภาษาซในงานวจยทางดานปญญาประดษฐ โดยประยกตเขากบงานทางดานการศกษาเพอพฒนาระบบการศกษาใหมประสทธภาพมากยงขน การวเคราะหขอสอบหมายถงการคนหาคณลกษณะ คณภาพ ของคาถามและตวเลอก ซงเปนสวนทประกอบกนขนมาเปนขอสอบ วาเปนอยางไร ดหรอไม งายหรอยาก คณลกษณะทดของขอสอบทเกยวของกบเรองการวเคราะหขอสอบ เชน คาความยากงาย และคาอานาจจาแนกของขอสอบ เปนตน โดยคาความยากงายของขอสอบคอคาระดบความยากและความงายของขอสอบหรอสดสวนของจานวนผ ทตอบถกตอจานวนผตอบทงหมดเพอดความยากงายของขอสอบ คาอานาจจาแนกของขอสอบคอคาสถตทใชอธบายคณภาพของขอสอบโดยขอสอบทดตองมอานาจจาแนกไดวาเดกคนใดเกง เดกคนใดออนกวากน ทฤษฎขนตอนวธเชงพนธกรรมคอเทคนควธหนงทางปญญาประดษฐเพอใชในการหาผลลพธหรอคาตอบของปญหาทเหมาะสม ซงจาลองรปแบบวธการทางชววทยาในการใหกาเนดประชากรรนใหม โดยอาศยพนฐานความคดของววฒนาการทางธรรมชาตถายทอดลกษณะตางๆ ทางพนธกรรม โดยปฏบตตามกระบวนการทางพนธศาสตรเพอจะใชในการหาคาตอบทดทสดหรอใกลเคยงทสดของปญหา ซงในปจจบนขนตอนวธเชงพนธกรรมไดมการนาไปใชในหลากหลายดานเพอหาคาตอบทดทสด และในทนกนาไปใชในการพฒนาทางการศกษาเพอคนหาขอสอบทดทสดแทนอาจารย โดยมประสทธภาพทดกวา สดทายการเขยนโปรแกรมในการสรางขอสอบอตโนมตโดยขนตอนวธเชงพนธกรรมคอการเขยนโปรแกรมโดยภาษาซเพอใชในงานวจยในการพฒนาระบบทสามารถสรางขอสอบไดโดยอตโนมต สามารถทางานแทนคนไดอยางมประสทธภาพ ซงในหวขอนจะแสดงการเขยนโปรแกรมทงในสวนของโปรแกรมในการวเคราะหขอสอบและโปรแกรมในการสรางขอสอบอตโนมต โดยในสวนของการสรางขอสอบจะอธบายเปนขนตอนตามกระบวนการของขนตอนวธเชงพนธกรรมทอาจจะมบางสวนทมการปรบปรงเพอใหมความเหมาะสมในการหาขอสอบทมประสทธภาพ ในบทนเปนบททมการประยกตใชกบงานวจยเพอใหนกศกษาสามารถนาไปเปนพนฐานในการเขยนโปรแกรมและการทาวจยตอไปในอนาคตไดอยางมประสทธภาพ โดยคาดหวงวาในสวนของโปรแกรมนจะเปนตนแบบในการเขยนโปรแกรมในภาษาระดบสงอนๆ ตอไปเพอพฒนาใหดยงขนตอไป

Page 549: การเขียนโปรแกรมคอมพิวเตอร ์portal5.udru.ac.th/ebook/pdf/upload/17P88t2O788B98583682.pdfรูปภาพบางส่วนให

บทท 13 การประยกตภาษาซในงานวจยทางปญญาประดษฐในการสรางขอสอบอตโนมต

535

แบบฝกหดทบทวน

1. คาความยากงายคออะไร จงอธบาย พรอมยกตวอยางในการคานวณใหชดเจน

2. คาอานาจจาแนกคออะไร จงอธบาย พรอมยกตวอยางในการคานวณใหชดเจน

3. เมอทาการคานวณคาความยากงายและคาอานาจจาแนกเสรจสนเราจะทราบไดอยางไรวาขอสอบขอไหนยาก ขอไหนงาย หรอมคาอานาจจาแนกเทาไหรจงจะดหรอไมด จงอธบายใหชดเจน

4. จงอธบายประโยชนของการวเคราะหขอสอบ จานวน 3 ขอ 5. ขนตอนวธเชงพนธกรรมคออะไรจงอธบาย 6. จงยกตวอยางของการนาเอาขนตอนวธเชงพนธกรรมไปใชจานวน 3 หวเรอง โดยใหอธบายใหชดเจนวานาไปใชอยางไร

7. ฟงกชนเปาหมายและฟงกชนความเหมาะสมคออะไรจงอธบาย พรอมทงอธบายถงความแตกตางของทงสองอยาง

8. จงเขยนโปรแกรมคานวณหาคาอานาจจาแนกและคาความยากงาย โดยใหอานคาจากแฟมขอมล (ใหสรางแฟมขอมล test.txt โดยมจานวนขอสอบ 100 ขอ) ในแฟมขอมลประกอบไปดวย ขอท จานวนผตอบถก(กลมสง) และจานวนผตอบถก(กลมตา) โดยขอมลจานวนผตอบถกใหนกศกษาสมมตตามความเหมาะสม

9. จงเขยนโปรแกรมในการคดเลอกโครโมโซมพอแมเพอดาเนนการทางพนธศาสตร โดยใช วธวงลอเสยงทาย (Roulette Wheel Selection) เลอกจานวน 4 ตว สมมตมจานวนโครโมโซมทงหมด 10 ตว และสมมตใหกาหนดคาฟงกชนความเหมาะสมตามตองการ โดยจะทาการรบคาฟงกชนความเหมาะสมจากการปอนขอมล ในสวนของการแสดงผลใหแสดงจานวนประชากรทงหมดจานวน 10 ตว พรอมแสดงคาฟงกชนความเหมาะสมในแตละโครโมโซม และแสดงผลลพธจากการเลอกประชากรจานวน 4 ตว พรอมแสดงคาฟงกชนความเหมาะสมในแตละโครโมโซม

10. จากโปรแกรมทไดศกษาในสวนของโปรแกรมในการสรางขอสอบโดยขนตอนวธเชงพนธกรรม จงปรบปรงโปรแกรมโดยการเปลยนแปลงประชากรตนแบบ (Population Size)

แลวใหสงเกตวาการเปลยนแปลงประชากรตนแบบ ทาใหเกดผลกระทบอะไรกบโปรแกรม

Page 550: การเขียนโปรแกรมคอมพิวเตอร ์portal5.udru.ac.th/ebook/pdf/upload/17P88t2O788B98583682.pdfรูปภาพบางส่วนให

บทท 13 การประยกตภาษาซในงานวจยทางปญญาประดษฐในการสรางขอสอบอตโนมต

536

11. จงเขยนโปรแกรมของขนตอนวธเชงพนธกรรมเพอหาคาทดทสดของเลขจานวน 10 บต

(ความยาวโครโมโซม) โดยกาหนดฟงกชนความเหมาะสมคอ F = x2 คาทดทสดคอ

12. จากโปรแกรมทไดศกษาในสวนของโปรแกรมในการสรางขอสอบโดยขนตอนวธเชงพนธกรรม จงทดสอบโปรแกรมโดยการลบกระบวนการรกษาโครโมโซมทดทสด

(keep_best_chromosome()) และการเกบแทนทโครโมโซมทแยทสด (survive()) แลวใหสงเกตผลลพธของโปรแกรมเปรยบเทยบกบโปรแกรมเดมวามผลอยางไร ดขนหรอแยลง และทาใหเกดผลกระทบอะไรกบโปรแกรม

13. จงเขยนโปรแกรมคดเลอกขอสอบทมคณภาพโดยอตโนมตโดยวธขนตอนวธเชงพนธกรรมจากขอมลของขอสอบจานวน 166 ขอ (ขอมลอยในภาคผนวก โดยใหเกบขอมลตามความเหมาะสมเชนอาจจะเกบขอมลลงแฟมขอมล) โดยสามารถเลอกจานวนขอสอบไดตามตองการ และใหแสดงผลลพธออกทางหนาจอภาพพรอมทงบนทกผลลพธเปนแฟมขอมลทพรอมจะนาไปใชงาน (ผลลพธในแฟมขอความแสดงตวอยางดงรป ซงจะมทงขอคาถาม

ขอเลอก และคาตอบแบบฝกหดทถกในแตละขอ)

Page 551: การเขียนโปรแกรมคอมพิวเตอร ์portal5.udru.ac.th/ebook/pdf/upload/17P88t2O788B98583682.pdfรูปภาพบางส่วนให

บรรณานกรม

ขนษฐา นาม, โครงสรางขอมลและอลกอรธม, นนทบร: ไอดซ อนโฟ ดสทรบวเตอร เซนเตอร จากด, 2548.

ไพศาล โมลสกลมงคล, ประสงค ประณตพลกรง, อนโชต วฒพรพงษ และ ศรายธ คลงทอง, สถาปตยกรรมคอมพวเตอร (Computer Architecture)., กรงเทพฯ, 2547.

ธรวฒน ประกอบผล, คมอการเขยนโปรแกรมภาษา PASCAL, กรงเทพฯ, 2550.

ธรวฒน ประกอบผล, คมอการเขยนโปรแกรมภาษา C, กรงเทพฯ, 2550. 2553.

บญเจรญ ศรเนาวกล และพพฒน ศภศรสนต, โครงสรางขอมลและอลกอรทม, กรงเทพฯ: บรษท สานกพมพทอป จากด, 2550.

วเชยร ศรพระจนทร, ภาษาโปรแกรมคอมพวเตอร., กรงเทพฯ, 2542

วไลพร กลตงวฒนา, โครงสรางขอมลและขนตอนวธ, 2554.

วจกษณ ศรสจจะเลศวาจา และดษฏ ประเสรฐฐตพงษ, การเขยนโปรแกรมภาษาซ, ภาควชาวทยาการคอมพวเตอร คณะวทยาศาสตร มหาวทยาลยเชยงใหม, 2545.

สานนท เจรญฉาย, โปรแกรม C คานวณสถต, โรงพมพจฬาลงกรราชวทยาลย, กรงเทพฯ, 2545.

อรพน ประวตบรสทธ, คมอเรยน ภาษาซ ฉบบปรบปรงใหม, โปรวชนจากด, 2552.

A. Drozdex, Data Structures and Algorithms in C++, PWS Publishing Company, 1996.

B.W. Kernighan and D.M. Ritchie, The C Programming Language, Second Edition,

Prentice Hall, United States of America, 1988.

K. Somkantha, The Development an Automatic Examination Items Generator System

by Genetic Algorithm, The 3rd International Conference on Education and

Information System Technologies and Applications: EISTA05, Orlando Florida,

USA, 2005.

P. Prinz and T. Crawford, C in A Nutshell: A Desktop Quick Reference, 2006.

R.L. Wood, Manufacturing Engineering Modular Series: C Programming for Scientists

& Engineers, Penton Press, 2002.

Page 552: การเขียนโปรแกรมคอมพิวเตอร ์portal5.udru.ac.th/ebook/pdf/upload/17P88t2O788B98583682.pdfรูปภาพบางส่วนให

538

S. Gough, Programming in C, Oxford University Computing Services, 1996.

S. Siamak Sarmady, Learn’em Programming Courses: Programming in C in 7 days,

2008.

D.E Goldberg, Genetic Algorithms in Search, Optimization, and Machine Learning,

Massachusetts : Addison-Wesley Publishing Company, Inc., 1989.

W. Stallings, Computer Organization and Architecture Designing for Performance:

Sixth Edition , Prentice Hall, 2003.

Z. Michalewicz, Genetic Algorithms + Data Structures = Evolution Program. London :

Springer, 1996.

Page 553: การเขียนโปรแกรมคอมพิวเตอร ์portal5.udru.ac.th/ebook/pdf/upload/17P88t2O788B98583682.pdfรูปภาพบางส่วนให

ภาคผนวก

Page 554: การเขียนโปรแกรมคอมพิวเตอร ์portal5.udru.ac.th/ebook/pdf/upload/17P88t2O788B98583682.pdfรูปภาพบางส่วนให

540

ภาคผนวก 

ตวอยางขอมลขอสอบจานวน 166 ขอ

Page 555: การเขียนโปรแกรมคอมพิวเตอร ์portal5.udru.ac.th/ebook/pdf/upload/17P88t2O788B98583682.pdfรูปภาพบางส่วนให

541

ภาคผนวก

ขอท บทท คาความยากงาย คาอานาจจาแนก ขอทถก

1=ก, 2=ข, 3=ค, 4=ง 1 1 0.9 0.9 2

2 2 0.45 -0.2 4

3 3 0.29 0.8 4

4 4 0.1 0.9 1

5 5 0.9 0.69 2

6 6 0.59 -0.1 2

7 1 0.45 0.55 1

8 2 0.65 -0.75 2

9 3 0.2 0.5 2

10 4 0.65 0.84 4

11 5 0.1 0.1 2

12 6 0.65 0.45 1

13 1 0.25 0.84 1

14 2 0.5 0.5 2

15 3 0.5 0.9 3

16 4 0.65 0.75 1

17 5 0.5 0.98 4

18 6 0.34 0.14 2

19 1 0.89 0.75 3

20 2 0.35 0.45 4

21 3 0.75 0.45 1

22 4 0.65 -0.5 3

23 5 0.11 0.5 2

24 6 0.66 -0.47 2

25 1 0.44 0.23 3

26 2 0.65 0.86 3

27 3 0.88 0.88 1

28 4 0.65 -0.1 4

Page 556: การเขียนโปรแกรมคอมพิวเตอร ์portal5.udru.ac.th/ebook/pdf/upload/17P88t2O788B98583682.pdfรูปภาพบางส่วนให

542

ภาคผนวก 

29 5 0.1 0.1 3

30 6 0.9 0.9 4

31 1 0.8 0.4 1

32 2 0.75 0.35 3

33 3 0.45 0.65 1

34 4 0.25 0.65 2

35 5 0.45 0.75 2

36 6 0.5 0.5 2

37 1 0.45 0.86 3

38 2 0.97 0.98 1

39 3 0.45 0.65 1

40 4 0.25 0.45 4

41 5 0.45 0.34 1

42 6 0.84 -0.29 2

43 1 0.54 0.34 3

44 2 0.75 0.84 2

45 3 0.84 0.84 4

46 4 0.78 -0.5 1

47 5 0.58 -0.2 4

48 6 0.45 0.56 1

49 1 0.65 0.78 3

50 2 0.57 0.96 1

51 3 0.75 0.8 2

52 4 0.75 0.45 3

53 5 0.84 0.89 3

54 6 0.45 0.78 2

55 1 0.23 0.75 4

56 2 0.88 0.29 3

57 3 0.25 0.65 3

58 4 0.84 0.54 2

Page 557: การเขียนโปรแกรมคอมพิวเตอร ์portal5.udru.ac.th/ebook/pdf/upload/17P88t2O788B98583682.pdfรูปภาพบางส่วนให

543

ภาคผนวก

59 5 0.25 0.68 3

60 6 0.8 0.45 1

61 1 0.65 0.34 4

62 2 0.97 0.55 2

63 3 0.46 0.75 2

64 4 0.55 -0.55 2

65 5 0.75 -0.57 4

66 6 0.84 -0.1 1

67 1 0.55 0.75 2

68 2 0.65 0.45 1

69 3 0.45 0.84 2

70 4 0.83 -0.78 2

71 5 0.45 -0.2 4

72 6 0.45 0.65 3

73 1 0.45 0.55 2

74 2 0.94 0.75 2

75 3 0.45 0.84 4

76 4 0.5 0.75 4

77 5 0.45 0.84 2

78 6 0.84 0.75 2

79 1 0.45 0.84 3

80 2 0.45 0.65 2

81 3 0.83 0.75 2

82 4 0.45 0.65 1

83 5 0.75 0.94 1

84 6 0.25 0.41 2

85 1 0.94 0.55 4

86 2 0.51 0.98 1

87 3 0.73 0.65 2

88 4 0.75 0.34 4

Page 558: การเขียนโปรแกรมคอมพิวเตอร ์portal5.udru.ac.th/ebook/pdf/upload/17P88t2O788B98583682.pdfรูปภาพบางส่วนให

544

ภาคผนวก 

89 5 0.34 0.25 1

90 6 0.68 0.44 3

91 1 0.34 0.55 1

92 2 0.34 -0.44 2

93 3 0.45 -0.23 1

94 4 0.54 -0.2 2

95 5 0.45 0.45 4

96 6 0.78 0.34 1

97 1 0.84 0.34 1

98 2 0.45 0.34 3

99 3 0.45 0.88 2

100 4 0.25 0.33 1

101 5 0.33 0.45 2

102 6 0.45 0.78 4

103 1 0.34 0.86 2

104 2 0.63 0.14 3

105 3 0.65 0.33 3

106 4 0.86 -0.45 2

107 5 0.75 0.65 2

108 6 0.77 0.89 1

109 1 0.14 0.45 2

110 2 0.55 0.55 1

111 3 0.9 0.9 4

112 4 0.1 0.1 2

113 5 0.5 0.5 2

114 6 0.65 0.45 3

115 1 0.86 0.97 2

116 2 0.86 0.66 4

117 3 0.55 0.45 2

118 4 0.55 0.55 4

Page 559: การเขียนโปรแกรมคอมพิวเตอร ์portal5.udru.ac.th/ebook/pdf/upload/17P88t2O788B98583682.pdfรูปภาพบางส่วนให

545

ภาคผนวก

119 5 0.45 0.65 2

120 6 0.5 0.98 2

121 1 1 1 3

122 2 0.5 0.65 4

123 3 0.78 0.97 1

124 4 0.1 0.2 2

125 5 0.25 -1 3

126 6 0.65 -0.2 1

127 1 0.34 0.65 3

128 2 0.34 0.44 3

129 3 0.33 0.78 4

130 4 0.88 0.65 3

131 5 0.22 0 1

132 6 0.45 0.33 4

133 1 0.25 0.32 3

134 2 0.34 0.22 2

135 3 0.22 0.44 4

136 4 0.97 0.45 2

137 5 0.65 0.77 2

138 6 0.45 0.84 2

139 1 0.45 -0.2 4

140 2 0.65 0.73 3

141 3 0.65 0.22 2

142 4 0.98 0.98 3

143 5 0 0 3

144 6 0.45 0.66 2

145 1 0.45 0.66 3

146 2 0.94 0.75 3

147 3 0.65 0.45 2

148 4 0.75 0.54 4

Page 560: การเขียนโปรแกรมคอมพิวเตอร ์portal5.udru.ac.th/ebook/pdf/upload/17P88t2O788B98583682.pdfรูปภาพบางส่วนให

546

ภาคผนวก 

149 5 0.65 0.75 3

150 6 0.65 0.25 1

151 1 0.25 -0.25 4

152 2 0.65 0.45 2

153 3 0.45 0.22 1

154 4 0.34 0.22 2

155 5 0.25 0.45 2

156 6 0.45 0.84 1

157 1 0.33 0.73 4

158 2 0.97 0.73 3

159 3 0 0.1 3

160 4 0.59 0.33 3

161 5 0.14 0.25 1

162 6 0.44 0.78 1

163 1 0.78 0.65 2

164 2 0.22 -0.54 1

165 3 0.97 -0.46 1

166 4 0.78 0.46 2

Page 561: การเขียนโปรแกรมคอมพิวเตอร ์portal5.udru.ac.th/ebook/pdf/upload/17P88t2O788B98583682.pdfรูปภาพบางส่วนให

547

ภาคผนวก

ตวอยางขอมลขอคาถามขอสอบจานวน 166 ขอ

Page 562: การเขียนโปรแกรมคอมพิวเตอร ์portal5.udru.ac.th/ebook/pdf/upload/17P88t2O788B98583682.pdfรูปภาพบางส่วนให

548

ภาคผนวก 

ขอท ขอคาถาม ก ข ค ง 1 การทางานของคอมพวเตอรมก

ขนตอน

3 ขนตอน 4 ขนตอน 5 ขนตอน 6 ขนตอน

2 ขอใดไมใชขนตอนการทางานของคอมพวเตอร

รบขอมล คานวณ พมพขอมล ยอ-ขยายขอมล

3 ถาขาดสวนใด คอมพวเตอรจะทางานไมได

หนวยรบขอมล หนวยประมวลผล

หนวยนาเสนอผลลพธ

ถกทกขอ

4 อปกรณใดอยในขนตอนของ output

จอภาพ สแกนเนอร แปนพมพ เมาส

5 ขนตอนใดทถอเปนหวใจของคอมพวเตอร

รบคาสง ประมวลผล เกบขอมล นาเสนอผลลพธ

6 สวนประกอบใดททาหนาทแปลงสญญาณคอมพวเตอรใหสงตามสายโทรศพทได

สแกนเนอร โมเดม เครองพมพ เมาส

7 จอภาพเรยกอกอยางหนงวาอยางไร

มอนเตอร ดสเพลย สกรน ถกทกขอ

8 สวนประกอบของคอมพวเตอรสวนใดจดเปนหวใจของเครอง

Monitor CPU Keyboard Mouse

9 หนาทของสแกนเนอรคออะไร แปลงขอมลจากคอมพวเตอรสงไปตามสายโทรศพท

นาขอมลประเภทรปภาพเขาไปในเครอง

แสดงผลขอมลออกมาทางกระดาษ

พมพคาสงหรอปอนขอมลเขาสคอมพวเตอร

10 สวนประกอบใดไมอยในตวเครองคอมพวเตอร

CPU Driver Sound Card Printer

11 ขอใดใหคาจากดความของฮารดแวรไดสมบรณทสด

หนวยรบขอมล ตวเครองและอปกรณรอบขาง

อปกรณทกชนดททาใหคอมพวเตอรทางานได

อปกรณทกชนดทอยในตวกลองของคอมพวเตอร

12

หนาทสาคญของหนวยประมวลผลกลางคออะไร

เปนหนวยควบคมการปฏบตงานหลกของเครอง

เปนหนวยแสดงผลขอมล

เปนหนวยนาเขาขอมล

เปนหนวยสงขอมลไปยงเครองคอมพวเตอรอน

Page 563: การเขียนโปรแกรมคอมพิวเตอร ์portal5.udru.ac.th/ebook/pdf/upload/17P88t2O788B98583682.pdfรูปภาพบางส่วนให

549

ภาคผนวก

13 ซอฟตแวรคออะไร โปรแกรมสงงานเครอง

อปกรณรอบขาง

ตวเครอง อปกรณนาเขาขอมล

14 ขอใดไมใชซอฟตแวรระบบปฏบตการ (Operating

System Software)

DOS Lotus Unix Window 98

15 ขอใดเปนซอฟตแวรประยกต

(Application Software)

Linux Unix Lotus OS/2

16 ขอดของเครองคอมพวเตอรทมตวเครองแบบแนวนอนคออะไร

ประหยดเนอท สะดวกในการเคลอนยาย

ตอพวงไดสะดวก

ราคาประหยด

17 ตวเครองแบบไดทไมคอยนยมกนมากนก

แบบแนวนอน แบบแนวตง แบบพกพา แบบรวมในชนเดยว

18 ขอจากดสาคญของเครองคอมพวเตอรแบบพกพาคออะไร

มขนาดใหญ

ไมเหมาะกบการพกพา

ราคาแพง ไมคอยมการรบประกนคณภาพจากผผลต

หาอะปกรณซอมแซมและดแลบารงรกษาไดยาก

19 ถานกเรยนจะใชคอมพวเตอรทบานควรเลอกแบบใดจงจะเหมาะสมทสด

แบบพกพา แบบตวเครองรวมในชนเดยว

แบบตวเครองแนวตง

แบบตวเครองแนวนอน

20 การเลอกซอคอมพวเตอรแบบตางๆ ควรคานงถงสงใดเปนสาคญ

ราคา คณภาพ ความคมคาในการใชงาน

ความเหมาะสมกบงานทจะใช

21 CPU ทาหนาทอะไร ประมวลผลขอมล

อานขอมลจากซดรอม

จาขอมลไวชวคราว

อานขอมลจากดสกเกต

22 อปกรณภายในคอมพวเตอรทกชนดตองวางอยบนอปกรณชนดหนง คออะไร

หนวยประมวลผลกลาง

ชองเสยบอปกรณเพมเตม

เมนบอรด ฮารดไดรฟ

23 ถาตองการจะนาเอาการดเสยงมาใสในเครองคอมพวเตอร จะตองเพมเขาในสวนใด

การดขยาย ชองเสยบอปกรณเพมเตม

ชองไดรฟ ชองซดรอมไดรฟ

24 40 X Speed CDROM หมายถงอะไร

ความกวางของซดรอมไดรฟ

ความเรวของซดรอมไดรฟ

ปรมาณความจของซดรอมไดรฟ

ขนาดและคณภาพของซดรอมไดรฟ

25 คยบอรดทาหนาทอะไร แสดงผลขอมล ประมวลผลขอมล

นาเขาขอมล เกบและสารองขอมล

Page 564: การเขียนโปรแกรมคอมพิวเตอร ์portal5.udru.ac.th/ebook/pdf/upload/17P88t2O788B98583682.pdfรูปภาพบางส่วนให

550

ภาคผนวก 

26 เพราะเหตใดคยบอรดจงมป มตวอกษรและคาสงตางๆ มากกวาเครองพมพดดทวไป

เพอใหมประสทธภาพมากขน

เพอใหสามารถใชงานไดยาวนานมากขน

เพอใชงานโปรแกรมบางอยางไดสะดวกขน

เพอใหสามารถปอนขอมลพเศษตางๆ ไดมากขน

27 ถาเราตองการเลอนเคอรเซอรไปทางขวา 1 ตวอกษรควรใชป มใดบนคยบอรด

Spacebar Alt Shift Tab

28 หนาทของกลมแปนพมพ F1-

F12 คออะไร เลอกคาสงพเศษ

ลบคา ใชแทนเลข 1-

10

ใชแทนคาสงพเศษตามทโปรแกรมกาหนด

29 ขอใดบอกลกษณะของเมาสไมถกตอง

เปนอปกรณนาเขาขอมล

ใชเลอกคาสงบนเมน

ใชเมาสป มขวาเปนหลก

ปรบเปลยนขนาดของหนาตาง

30 ขอใดไมใชลกษณะของการใชเมาส

คลก ดบเบลคลก ลากแลวปลอย จบแลววาง

31 ประโยชนของเมาสป มขวาคออะไร

เปดเมนยอย ขยายหนาตาง ยายไฟล ลบไฟล

32 ขอใดเปนการใชเมาสอยางผดวธ

มแผนรองเมาสเสมอ

ทาความสะอาดลกกลงบอยๆ

เปลยนเมาสบอยๆ

ซอเมาสทเหมาะสมมาใชงาน

33 จอภาพแบงออกเปนกประเภท 2 ประเภท 3 ประเภท 4 ประเภท 5 ประเภท

34 ความละเอยดของจอภาพมหนวยวดเปนอะไร

เมกะไบต พกเซล ฟอนต บตตอนาท

35 ดแรมคออะไร การดเสดงผลทมความเรวสง

การดแสดงผลทมความเรวตา

การดแสดงผลทมความจาถาวร

การดแสดงผลทมความจาชวคราว

36 วแรม เหมาะกบการใชงานอะไร แสดงผลขอมลธรรมดา

แสดงผลขอมลรปภาพกราฟก

แสดงผลขอมลดานมลตมเดย

แสดงผลขอมลดานเสยง

37 เครองพมพมหนาทอะไร นาเขาขอมล ประมวลผลขอมล

แสดงผลขอมล นาเขาและแสดงผลขอมล

38 การดวาเครองพมพมความเรวมากหรอนอย ดไดอยางไร

จานวนหนาตอนาท

จานวนหนาตอชวโมง

จานวนหนาตอวนาท

ขนาดของหนากระดาษทพมพ

Page 565: การเขียนโปรแกรมคอมพิวเตอร ์portal5.udru.ac.th/ebook/pdf/upload/17P88t2O788B98583682.pdfรูปภาพบางส่วนให

551

ภาคผนวก

39 เครองพมพชนดใดพมพขอมลไดสวยงามมากทสด

Laser Ink Jet Dot-Matrix Solid Ink

40 เครองพมพทนยมใชในวงการธรกจทวไป คออะไร

Ink Jet Solid Ink Dot-Matrix Laser

41 สแกนเนอร ทาหนาทอะไร นาเขาขอมล แสดงผลขอมล ประมวลผลขอมล

นาเขาและแสดงผลขอมล

42 สแกนเนอรแบบดงกระดาษมขอจากด คออะไร

สแกนไดนอย สแกนไดนอยและตองฉกกระดาษ

สแกนไดเฉพาะกระดาษ A4

สแกนไดคอนขางหยาบ

43 สแกนเนอรทเหมาะสมกบการทางานตามบาน ควรเปนแบบใด

100 dpi 200 dpi 300 dpi 400 dpi

44 สแกนเนอรชนดใดมคณภาพสงทสด

Sheet-Fed

Scanner

Flatbed

Scanner

Hand-Held

Scanner

ถกทกขอ

45 หนาทสาคญของโมเดม คออะไร เชอมตอคอมพวเตอรกบอนเทอรเนต

รบ-สงแฟกซ รบ-สงจดหมายอเลกทรอนกส

ถกทกขอ

46 โมเดมประเภทใดทสะดวกกบการใชงานตามบานทวไปมากทสด

โมเดมทตดตงภายใน

โมเดมทตดตงภายนอก

โมเดมแบบ 33

Kbps

โมเดมแบบ 56

Kbps

47 โมเดมมความเรวทเหมาะกบการใชงานอนเทอรเนตควรเปนเทาไร

24 Kbps 26 Kbps 33 Kbps 56 Kbps

48 ขอควรระมดระวงในการใชโมเดมคออะไร

การตอเชอมกบสายโทรศพท

การเลอกความเรวทเหมาะสม

อายการใชงาน ราคาของโมเดม

49 หนวยประมวลผลกลาง เรยกอกอยางหนงวาอะไร

หนวยความจาถาวร

หนวยความจาชวคราว

ไมโครโปรเซสเซอร

อเลกทรอนกสคอนดกเตอร

50 ความเรวของซพย เรยกวาอะไร บต ไบต เมกะเฮรตซ กโลเฮรตซ 51 หนวยประมวลผลกลางทา

หนาทอะไร จดจาขอมล ประมวลผล

ขอมล เกบขอมล สารองขอมล

52

ซพยเพนเทยม หมายถงอะไร ซพยยหอหนง ซพยทดทสด ซพยของบรษทอนเทล

ซพยชนดใหมลาสด

Page 566: การเขียนโปรแกรมคอมพิวเตอร ์portal5.udru.ac.th/ebook/pdf/upload/17P88t2O788B98583682.pdfรูปภาพบางส่วนให

552

ภาคผนวก 

53 หนวยบอกความเรวของซพย คออะไร

บต ไบต เมกะเฮรตซ กโลเฮรตซ

54 หนวยความจาแรม RAM

หมายถงอะไร หนวยความจาถาวร

หนวยความจาชวคราว

หนวยความจาขนาดใหญ

หนวยความจาขนาดเลก

55 หนวยความจาแรม RAM

ปจจบนนยมใชขนาดเทาใด

16 MB 32 MB 64 MB 128 MB ขนไป

56 หนวยความจา SDRAM เหมาะกบการใชงานมากในปจจบน

เพราะอะไร

ขนาดกะทดรด ขนาดหนวยความจาใหญมาก

ราคาถก ประสทธภาพด

ซอมแซมและบารงรกษางาย

57 หนวยความจา SIMM มประโยชนอยางไร

เกบขอมลสารอง

ใชตดตงหนวยความจาบนเมนบอรด

แผงอเลกทรอนกสสาหรบเพมหนวยความขา

อปกรณสาหรบใสในหนวยความจาเพอเพมประสทธภาพการทางานของ RAM

58 หนวยความจาแคช คออะไร หนวยความจาททาใหเครองจาขอมลไดมากขน

หนวยความจาททาใหเครองทางานเรวขน

เหนวยความจาแทนแรม

หนวยความจาถาวรของคอมพวเตอร

59 บสของคอมพวเตอรทาหนาทอะไร

เปนหนวยแสดงผลขอมล

เปนตวประมวลผลขอมล

เปนทางวงของขอมล

เปนหนวยความจาของขอมล

60 บต หมายถงอะไร ขนาดของบส จานวนของบส ความเรวของบส

ชอเรยกอยางหนงของบส

61 หนวยวดความเรวของบส เรยกวาอะไร

ไบต บต กโลเฮรตซ เมกะไบต

62 หนาทหลกของหนวยเกบขอมลรอง คออะไร

สารองไฟลไวใชในกรณฉกเฉน

เกบขอมลทไมไดใชงานขณะนนไว

เกบขอมลทมปรมาณมากๆ ไวใชยามจาเปน

เกบขอมลทประมวลผลเสรจแลว

63 หนวยเกบขอมลสารองแบงออกเปนกประเภทหลกๆ

2 ประเภท 3 ประเภท 4 ประเภท 5 ประเภท

Page 567: การเขียนโปรแกรมคอมพิวเตอร ์portal5.udru.ac.th/ebook/pdf/upload/17P88t2O788B98583682.pdfรูปภาพบางส่วนให

553

ภาคผนวก

64 ถาตองการเกบขอมลทสะดวกในการเคลอนยาย ขอมลไมมากนก นยมเกบในหนวยขอมลประเภทใด

ฮารดดสก ฟลอปปดสก ซดรอม ดวดรอม

65 ฮารดดสกทนยมใชควรมหนวยความจาอยางนอยเทาใด

500 MB ขนไป 1 GB ขนไป 3 GB ขนไป 4 GB ขนไป

66 ดวด ตางจากซดรอมอยางไร เกบขอมลไดมากกวา

เกบขอมลไดนานกวา

เกบขอมลไดละเอยดกวา

เกบขอมลไดทงภาพ เสยงและตวหนงสอ

67 ขอใดใหความหมายของระบบปฏบตการไดถกตองทสด

ใชสาหรบเครองพซ

เปนโปรแกรมควบคมการทางานอปกรณตางๆ ของคอมพวเตอร

เปนโปรแกรมชวยงานดานการพมพและทากราฟฟก

เปนโปรแกรมทบรษทไมโครซอฟตผลตขน เพอใชกบเครองคอมพวเตอรพซ

68 ถาเปรยบเทยบกบรางกายของคน ระบบปฏบตการเปรยบไดกบอวยวะสวนใด

สมอง ปอด หวใจ ดวงตา

69 ระบบปฏบตการทไดรบความนยมสงสดของผ ใชคอมพวเตอรทวโลกในปจจบน คออะไร

MS-/DOS MS-Windows Mac OS Unix

70 ถาระบบปฏบตการผดปกตจะเกดอะไรขนกบเครองคอมพวเตอร

เครองเสย เครองหยดทางานชวคราว

เปดเครองไมได เครองแฮงคบอยๆ

71 การทางานแบบเครอขายขนาดใหญนยมใชระบบปฏบตการแบบใด

DOS Windows Mac OS Unix

72

เครอขายคอมพวเตอร หมายถงอะไร

ศนยรวมคอมพวเตอรจานวนมาก

การตอเชอมคอมพวเตอรเขากบเครองพมพ

การตอเชอมคอมพวเตอรตงแต 2 เครองเขาดวยกน

การสงขอมลจากคอมพวเตอรผานสายโทรศพท

Page 568: การเขียนโปรแกรมคอมพิวเตอร ์portal5.udru.ac.th/ebook/pdf/upload/17P88t2O788B98583682.pdfรูปภาพบางส่วนให

554

ภาคผนวก 

73 ระบบเครอขายคอมพวเตอรคลายกบกระบวนการของระบบใด

อวยวะของรางกาย

การบรหารงานในองคกร

การเกดหมนเวยนของวฎจกรนา

การเกดนาขน-

นาลง

74 อปกรณสาคญทใชในการตอเชอมคอมพวเตอรเปนระบบเครอขายคออะไร

สายเคเบล สายโทรศพท สญญาณไมโครเวฟ

สญญาณดาวเทยม

75 ขอใดไมใชองคประกอบของการสงขอมลในเครอขายคอมพวเตอร

ผสง ผ รบ ตวกลาง ผใชคอมพวเตอร

76 ขอใดบอกความหมายของเครอขายคอมพวเตอรไมถกตอง

คอมพวเตอร 2

เครองขนไป

ตอเชอมโดยใชตวกลาง

ตอเชอมดวยระบบโทรคมนาคม

ใชไดเฉพาะบรเวณใกลๆ เทานน

77 ระบบเครอขายมประโยชนในการทางานแบบกลมรวมงาน

หมายความวาอยางไร

ทกคนทางานอยางเดยวกนจนเสรจ

ทกคนทางานแตละงานจนเสรจแลวนามารวมกน

แตละคนแบงงานกนทาแลวนามารวมกน

แยกงานออกเปนสวนๆ แลวนามารวมกนทาในระบบเครอขายคอมพวเตอร

78 การเชอมตอระบบเครอขายคอมพวเตอร ทาใหเกดการประหยดได เพราะอะไร

คอมพวเตอรเครองเดยวทางานไดหลายอยาง

อปกรณตอเชอมตวเดยวใชงานรวมกนไดทงระบบ

ซออปกรณราคาไมแพงกสามารถใชงานไดอยางมประสทธภาพ

อปกรณชดเดยว ถาชารดสามารถเปลยนได โดยไมตองซอมทงระบบ

79 ขอใดไมใชประโยชนของเครอขายคอมพวเตอร

รบ-สงอเมล เกบขอมลสวนกลาง

ชวยในการรกษาขอมลจานวนมาก

ชวยการทางานแบบรวมกลม

80 การรบ-สงอเมลจดเปนประโยชนของระบบเครอขายหรอไม เพราะเหตใด

เปน เพราะมการเชอมคอมพวเตอรหลายๆ เครองเขาดวยกน

เปน เพราะมศนยบรการอนเทอรเนตในการประสานงานการสงอเมล

ไมเปน เพราะไมไดใชอปกรณคอมพวเตอรรวมกน

ไมเปน เพราะไมมการทางานแบบกลมรวมงาน

81 เครอขายคอมพวเตอรแบงออกเปนกประเภท

2 ประเภท 3 ประเภท 4 ประเภท 5 ประเภท

Page 569: การเขียนโปรแกรมคอมพิวเตอร ์portal5.udru.ac.th/ebook/pdf/upload/17P88t2O788B98583682.pdfรูปภาพบางส่วนให

555

ภาคผนวก

82 เครอขายภายในเมองหรอจงหวดใกลเคยง เรยกวาอะไร

LAN WAN MAN SAN

83 หนาทของสวตชงโหนด คออะไร จดตอททาหนาทสงขอมล

จดตอททาหนาทประมวลขอมล

จดตอททาหนาทเกบขอมล

จดตอททาหนาทรบขอมล

84 ขอใดเปนสวนประกอบของเครอขายสวนยอยของผใช

เราเตอร โฮสตคอมพวเตอร

เครองพมพ ตวกระจายขอมล

85 หลกการสาคญของเครอขายยอยสวนของการสอสาร คออะไร

การสงขอมลแบจดตอจด

การสงขอมลแบบแพรกระจายขอมล

การสงขอมลผานเราเตอร

ถกทกขอ

86 ลกษณะการทางานของกาแพงไฟ (Firewall) เปนอยางไร

ใชปองกนขอมลอยางมนคง

ใชปองกนขอมลแบบงายๆ

ใชปองกนขอมลทไมสาคญ

ใชปองกนเฉพาะขอมลของการทหารเทานน

87 โดยปกตการปองกนขอมลพนฐานจะใชการปองกนแบบใด

กาแพงไฟ บญชสมาชกและรหสผาน

การใชรหสลบ การใชการดหมายเลข

88 การเลอกรหสผานโดยปกตมขอควรระวงอยางไร

ไมใชชอสามญทวไป

ไมใชชอทยากเกนไป

ใชสญลกษณพเศษ

ถกทกขอ

89 ประโยชนของการใสรหสผาน

คออะไร ปองกนคนอนเขามาใชขอมล

ปองกนคนอนมาใชเครองคอมพวเตอรของเรา

ปองกนระบบเครอขายไมใหถกกอกวน

เตอนภย เมอมบคคลทไมพงปรารถนาเขามาสเครอขายของเรา

90 ถาไมมการปองกนรกษาความปลอดภยในระบบเครอขายจะเกดผลเสยมากทสดในดานใด

ขอมลถกลบได ขอมลถกลกลอบขโมยไปได

ขอมลอาจถกไวรสหรอถกทาลายได

คนอนทราบความลบของหนวยงานของเราได

91

ขอใดใหความหมายของอนเทอรเนตไดถกตองทสด

เครอขายคอมพวเตอร

ไซเบอรเสปซ กลมของคอมพวเตอร

การสงขอมลจากคอมพวเตอรเครองหนงไปยงอกเครองหนง

Page 570: การเขียนโปรแกรมคอมพิวเตอร ์portal5.udru.ac.th/ebook/pdf/upload/17P88t2O788B98583682.pdfรูปภาพบางส่วนให

556

ภาคผนวก 

92 อนเทอรเนตเรยกอกอยางหนงวาอะไร

เนตเวรก ไซเบอรเสปซ คอมมวนเคชน เนตเวรกซสเตม

93 อนเทอรเนตเกดขนทประเทศใด สหรฐอเมรกา องกฤษ รสเซย ออสเตรเลย 94 จดเรมแรกของอนเทอรเนต

จากดอยในผใชกลมใด

นกธรกจ การทหาร การบนเทง การศกษา

95 อนเทอรเนตในประเทศไทยเรมไดรบความนยมเมอใด

พ.ศ. 2530 พ.ศ. 2531 พ.ศ. 2532 พ.ศ. 2535

96 การใชอนเทอรเนตในการสงจดหมายขอความ เรยกวาอะไร

อเมล การสบคนขอมล

การโอนถายขอมล

การแลกเปลยนขาวสาร

97 บรการดาน E-Commerce

หมายถง การทาธรกจบนอนเทอรเนต

การสงขาวสารบนอนเทอรเนต

การพดคยหรอสนทนา

การสงจดหมายอเลกทรอนกส

98 ถาตองการสนทนากบเพอนทางอนเทอรเนต ควรใชบรการสวนใดของระบบอนเทอรเนต

E-Mail Telnet Chat & Talk Gopher

99 บรการ FTP หมายถงอะไร การสงจดหมายอเลกทรอนกส

การคนหาและเรยกขอมลจากแหลงตางๆ มาใช

การทาธรกจบนอนเทอรเนต

การแลกเปลยนขาวสารและความคดเหนกน

100 บรการอนเทอรเนตทผใชนยมมากทสด คออะไร

อเมล เอนเทอรเทน นวสกรป อคอมเมรซ

101 "แพกเกต" หมายถงอะไร กลองใสขอมล ชดของขอมล หนวยรบขอมล สญญาณรบ-สงขอมล

102 คอมพวเตอรทสามารถใชตดตออนเทอรเนตได คอรนอะไร

IBM PC รน

486

IBM PC รน

Pentium

Macintosh ถกทกขอ

103 ศนยบรการอนเทอรเนตในประเทศไทยเปนความรวมมอระหวางเอกชนกบหนวยงานใดของรฐ

องคการโทรศพท

การสอสารแหงประเทศไทย

ศนยคอมพวเตอรและอเลกทรอนกสแหงประเทศไทย

กระทรวงคมนาคม

104 stou.ac.th คาวา "ac" หมายถง อะไร

ตวยอประเทศ ตวยอหนวยงานตนสงกด

ตวยอของประเภทขององคกร

ชอของผใหบรการอนเทอรเนต

Page 571: การเขียนโปรแกรมคอมพิวเตอร ์portal5.udru.ac.th/ebook/pdf/upload/17P88t2O788B98583682.pdfรูปภาพบางส่วนให

557

ภาคผนวก

105 กระทรวงการตางประเทศของไทย ม DNS วาอยางไร

mfa.or.th mfa.ac.th mfa.go.th mfa.co.th

106 ขอใดอธบายความหมายของเวลดไวดเวบไดถกตองทสด

การบรการขอมลดวยขอความภาพ

เสยง ผานคอมพวเตอร

การบรการขอมลทเชอมตอดวยไฮเปอรลงกโดยมโฮสตททาหนาทบรการขอมล

การบรการขอมลผานเวบเซรฟเวอร

การบรการขอมลผานโฮสตโดยใชคานาหนาวา www

107 เวบเพจ (Web Page)

เปรยบเทยบไดกบอะไร ปกหนงสอ หนาแตละหนา

ของหนงสอ กระดานไวทบอรด

โตะเขยนหนงสอ

108 หนาแรกของเวบเพจ เรยกวาอะไร

Home Page Web Site Home Site Http

109 ในแตละโฮมเพจมกจะประกอบดวยอะไรเปนหลก

ขอความ รปภาพ สญลกษณพเศษ

ไฟลเสยง

110 เวบเซรฟเวอร เปรยบไดกบอะไร สถานโทรทศน สถานขนสงรถเมล

สถานอนามย สถานวทยกระจายเสยง

111 เวบเบราเซอรทไดรบความนยมมากในปจจบนคออะไร

Netscape IE (Internet

Explorer)

pantip.com ขอ ก และ ข ถก

112 การตอเชอมกบอนเทอรเนต

เอกซพลอเรอร ขนตอนแรกตองทาอยางไร

คลกทไอคอน

My Computer

ดบเบลคลกทไอคอน

Connect to

the Internet

คลกเมาสป มขวาบรเวณพนทวางๆ

คลดทโฟลเดอร Controlpanel

113 ป ม Back ในอนเทอรเนต เอกซพลอเรอร หมายถงอะไร

การเลอนเวบเพจ

การยอนกลบไปยงเวบเพจกอนหนา

การคนหาเวบเพจ

การไปยงเวบเพจหนาถดไปทเคยดมาแลว

114 คาสงAddress ในอนเทอรเนต

เอกซพลอเรอร ตรบงกบคาสงใดของเนตสเคป

Bookmark Forward Location Security

115 ป ม Home มความสาคญกบเวบเบราเซอรอยางไร

ทาใหทางานไดเรวขน

เปนหนาตางแรกทจะพบเมอเปดเวบเบราเซอร

ชวยในการคนกาขอมลหรอเวบไซตตางๆ

เปนคาสงทชวยประสานงานการตดตอกบเวบไซตอนๆ

Page 572: การเขียนโปรแกรมคอมพิวเตอร ์portal5.udru.ac.th/ebook/pdf/upload/17P88t2O788B98583682.pdfรูปภาพบางส่วนให

558

ภาคผนวก 

116 Search Site มความสาคญอยางไร

ชวยในการคนหาเวบไซต

ชวยในการหาทอยของคาสาคญตางๆ

ชวยประสานงานการลงกขอมล

ถกทกขอ

117 การคนหาเวบไซต ทาไดกวธ 2 วธ 3 วธ 4 วธ 5 วธ 118 ขอใดไมใช Search Site yahoo infoseek lycos disney

119 จดเดนของการคนหาดวย Yahoo คออะไร

สามารถดราคาหนได

ใชคยเวรดนารอง

มคณสมบตทเรยกวา Cool

เนนขอมลบรษทตางๆ ในสหรฐอเมรกา

120 การคนหาแบบอตโนมต ตางจากการคนหาธรรมดาอยางไร

ตองพมพคยเวรด

พมพคยเวรดตามหลงคาวา go

พมพคยเวรด

แลวคลก Search

พมพยอารแอลทตองการแลวคลก Search

121 ถาตองการเกบเวบไซตทนาสนใจไวใชงานครงตอไปอยางรวดเรว จะปฏบตอยางไร

เกบเวบไซตไวใน History

เกบเวบไซตไวใน Search

เกบเวบไซตไวใน Favorites

เกบเวบไซตไวใน Refresh

122 ถาตองการชมรายการโทรทศนผานอนเทอรเนตตองปฏบตอยางไร

เรยกผานเบราเซอร

เรยนผาน

Search Site

เรยกผาน

windowsmedi

a.com

ถกทกขอ

123 การปรบภาษาใหเปนภาษาไทยใชคาสงใด

Encoding Go to Favorites Refresh

124 ถาตองการเขาไปยงเวบไซตของกระทรวงศกษาธการจะใชรปแบบคาสงอยางไร

www.mai.go.t

h

www.moc.go.t

h

www.mua.go.

th

www.cat.co.th

125 ถาเราตองการทราบวาในประเทศไทยมเวบไซตอยมากนอยเทาใด เราจะคนหาขอมลไดจากทใดจงจะเหมาะสม

Yahoo Hansa.com Internet

Thailand

Infoseek

126 ขอใดใหความหมายของอเมลไดถกตอง

การสงจดหมายผานเครอขายคอมพวเตอร

การสงจดหมายผานสายโทรศพท

การสงจดหมายดวยสอทมความเรวสง

การสงจดหมายโดยไมตองใชกระดาษ

127

จดเดนททาใหอเมลไดรบความนยมมากคออะไร

ประหยด ปลอดภย รวดเรว สะดวก

Page 573: การเขียนโปรแกรมคอมพิวเตอร ์portal5.udru.ac.th/ebook/pdf/upload/17P88t2O788B98583682.pdfรูปภาพบางส่วนให

559

ภาคผนวก

128 กระบวนการทางานของอเมลขอใดถกตอง

ผสงถงผ รบ ผสงผานตวกลางถงผ รบ

ผสงผานตวกลางและศนยบรการถงผ รบ

ผสงผานศนยบรการ ตวกลาง ศนยบรการ ถงผ รบ

129 ขอควรระวงในการของอเมล แอดเดรสคออะไร

ชอไมควรซากบคนอน

รหสผานตองจาใหด

ผใหบรการทดแลอยางด

ถกทกขอ

130 โปรแกรมอเมลคออะไร โปรแกรมสาหรบรบอเมล

โปรแกรมสารหบสงอเมล

โปรแกรมตวกลางรบ-สงอเมล

โปรแกรมสาหรบกรองขอความอเมล

131 โปรแกรม Outlook Express มหนาทสาคญอยางไร

รบ-สงอเมล เกบไฟลสาหรบสงพรอมกบอเมล

ตรวจสอบความถกตองของขอความอเมล

ใชสาหรบพมพอเมลออกทางเครองพมพ

132 ขอใดไมใชสวนประกอบในการเขยนอเมล

To: Cc: Subject Undo

133 คาสง Attach มประโยชนอยางไร

บบอดไฟล ขยายไฟล แนบไฟลไปกบอเมล

ตรวจรบอเมลเขา-ออก

134 Address Book มหนาทอะไร แนบไฟลไปกบอเมล

บนทกทอยอเมลทเราใชบอยๆ

เปลยนโฟลเดอรใหม

สารองอเมลทลบไปแลวไว

135 มารยาททดในการสงอเมลคออะไร

เขยนชอ-ทอยผ รบใหชดเจน

ใสหวขอเรองทกครง

ตอบกลบอยางรวดเรว

ถกทกขอ

136 ขอใดอธบายความหมายของคาวานวสกรปไดดทสด

การเสนอความคดเหนผานอนเทอรเนต

การนาเสนอขอคดเหนของตนเองเผยแพรใหคนอนไดทราบทางอนเทอรเนต

การสงขาวสารผานเครอขายอนเทอรเนตไปยงผ อน

การเขยนขอความบนคอมพวเตอรแลวสงขอความนนไปยงผ รบ

137

ประโยชนของนวสกรปทสาคญทสด คออะไร

สงขาวสารถงกนไดทวโลก

แสดงความคดเหนถงกนไดทวโลก

การซอขายสนคาบนอนเทอรเนต

การสนทนากนเปนกลมๆ มากกวา 15,000 กลม

Page 574: การเขียนโปรแกรมคอมพิวเตอร ์portal5.udru.ac.th/ebook/pdf/upload/17P88t2O788B98583682.pdfรูปภาพบางส่วนให

560

ภาคผนวก 

138 ถาตองการสนทนาเกยวกบการสงยานอวกาศไปดาวองคาร เราตองเลอกกลมขาวใด

biz sci soc misc

139 การสมครเปนสมาชกกลมขาวนนมขนตอนการปฏบตหลายขนตอน ยกเวน ขอใด

คลกเลอกคาสง Subscribe to

Newsgroups

คลกเลอกรายการกลมขาว แลวคลกป ม Subscribe

คลกเลอกกลมขาวหลายๆ กลมตามตองการ

คลกป ม Send

เมอตองการสงชอของเราไปยงกลมขาว

140 กลมขาว rec เปนการแสดงความคดเหนเกยวกบขอใด

กลมวทยาศาสตร

กลมสงคมศาสตร

กลมสนทนาการ

กลมสพเพเหระ

141 ขอใดไมใชมารยาททดในการใชนวสกรป

ใชภาษาสภาพ บนทกรายชอสมาชกทกคนไว

สงขอความใหตรงกลมขาว

ตรวจสอบความเหมาะสมกอนสง

142 ขอใดไมใชบรการของ pantip.com

Caf? Techxchange Icq E-card

143 ถามสมาชกใหมเขารวมวงสนทนาใน pantip.com จะสงเกตไดอยางไร

มขอความวา Log in อยหลงขอความ

มขอความวา Log out อยหลงขอความ

มขอความวา Logged on

อยหลงขอความ

มขอความวา Logged off อยหลงขอความ

144 จดเดนททาให pantip.com

ไดรบความนยมคออะไร ใชงานงาย มหวขอสนทนา

หลากหลาย สามารถปรบแตงหนาจอไดสวยงาม

ผสนทนารกษามารยาทในการสนทนาด

145 การสนทนาใน sanook.com

คลกในหวขออะไร Chat Room กระดานขาว หองสนทนา ทนมเพอน

146 ขอแตกตางระหวาง sanook.com กบ Chat Room

อนๆ คออะไร

ใชงานงายกวา ใช Java

Applet

ใชสนทนาไดครบทกหวขอ

ใชรหสผานทปองกนความเสยหายไดด

147 ขอเดนของการสนทนาแบบไอซควคออะไร

การสนทนาพรอมกนไดหลายๆ คน

เลอกสนทนาเฉพาะคนได

สนทนาแบบกระซบโดยไมใหคนอนทราบได

สนทนาไดรวดเรวและสอสารไดทวโลก

148 การคนหาหมายเลขไอซควมขอควรระวงอยางไร

ควรใชชอจรง-นามสกลจรง

ควรกาหนดอเมลแอดเดรสใหชดเจน

ควรกาหนดทงชอเลนและชอจรง

ถกทกขอ

Page 575: การเขียนโปรแกรมคอมพิวเตอร ์portal5.udru.ac.th/ebook/pdf/upload/17P88t2O788B98583682.pdfรูปภาพบางส่วนให

561

ภาคผนวก

149 ขอใดเปนโปรแกรมประเภท IRC Go!Zilla CuteFTP PIRCH Teleport Pro

150 การสนทนาดวย PIRCH

ขอความทอยใน <……...>

หมายถงอะไร

ชอผสนทนา ชอบคคลทเราสนทนาดวย

ขอความทกาลงสนทนากน

บอกเวลาในการสนทนา

151 ขอใดเปน Web Chat ยอดนยมของชาวไทย

www.deja.co

m

www.wbs.co

m

www.chattppi

a.com

www.pantip.c

om

152 เอฟทพ คออะไร การดาวนโหลดไฟล

โปรแกรมสาหรบดาวนโหลดไฟล

โปรแกรมสาหรบแกไขปรบปรงไฟล

ศนยรวมโปรแกรมทอนญาตใหใชโดยไมมลขสทธ

153 เอฟทพแบงออกเปน 2 ชนด คอ ไพรเวทและสาธารณะ

สาธารณะและเฉพาะบคคล

ภายในองคกรและภายนอกองคกร

จากดจานวนผใชและไมจากดจานวนผใช

154 ไฟลบนโฮสตแบงออกเปนกประเภท

2 ประเภท 3 ประเภท 4 ประเภท 5 ประเภท

155 แชรแวรมลกษณะสาคญคออะไร

เปนไฟลทแจกฟร

เปนไฟลใหทดลองใช

เปนไฟลซอขาย เปนไฟลเผยแพรแกสาธารณะ

156 โปรแกรมทนยมดาวนโหลดมากทสดคอโปรแกรมประเภทใด

ฟรแวร แชรแวร คอมเมอรเชยลแวร

ถกทกขอ

157 ขอเดนของโปรแกรม GetRight

คออะไร ตงเวลาดาวนโหลดได

ดาวนโหลดไฟลขนาดใหญไดอยางรวดเรว

เชอมตอใหถาสายหลดขณะดาวนโหลด

ถกทกขอ

158 จดออนของโปรแกรม Teleport

Pro คออะไร ใชงานแบบออฟไลนไมได

ตองซอลขสทธกอนใช

ใหทดลองใชกอน แตตองซอไมแจกฟร

ดาวนโหลดไฟลขนาดใหญไดชามาก

159

โปรแกรม Go!Zilla มขอเดนทสดคออะไร

มลกเลนในการใชงานมาก

สามารถดาวนโหลดพรอมกนทละหลายๆ ไฟลได

เปนโปรแกรมแจกฟร

ใชงานงาย มลกเลนตางๆ ใหเลอกใชจานวนมาก

Page 576: การเขียนโปรแกรมคอมพิวเตอร ์portal5.udru.ac.th/ebook/pdf/upload/17P88t2O788B98583682.pdfรูปภาพบางส่วนให

562

ภาคผนวก 

160

ขอควรระวงในการใชโปรแกรม

WS-FTP คออะไร การดาวนโหลดไฟลหลายๆ ไฟลพรอมกน

การเปลยนนามสกลไฟลขณะถายโอน

การคลกแลวลาก

การลบไฟลแบบตอเนอง

161 คณสมบตททาใหโปรแกรม

Cute FTP ไดรบความนยมคออะไร

สามารถดาวนโหลดไฟลแบบตอเนองได

หยดการดาวนโหลดโดยไมเสยการตดตออนเทอรเนต

จดลาดบการถายโอนขอมลตามลาดบทเลอกไว

สามารถสรางเวบมเรอรของเวบไซตทงหมด

162 การถายโอนขอมลแบงออกเปนกสวน

2 สวน 3 สวน 4 สวน 5 สวน

163 การดาวนโหลดขอมลควรเลอกเวลาใดจงเหมาะสม

กลางวน กลางคน ตอนเชา ตามความสามารถ

164 การตรวจสอบโปรแกรมกอนดาวนโหลดมวตถประสงคเพออะไร

ปองกนการดาวนโหลดผดพลาด

ตรวจสอบประเภทของไฟลโดยละเอยด

ปองการการดาวนโหลดซาซอน

สามารถเพมความเรวในการดาวนโหลดได

165 การบบอดไฟลและขยายไฟลมผลตอการดาวนโหลดอยางไร

ทาใหดาวนโหลดไดชาหรอเรวขน

ทาใหการตอสายอนเทอรเนตหลดบอยๆ

ทาใหชมสายมจานวนผใชเพมมากขน

ทาใหไฟลทไดรบการดาวนโหลดบกพรองได

166 การคนหาไฟลในเอฟทพไซตทไดรบความนยมคอเวบไซตใด

yahoo.com download.co

m

pantip.com hansa.com

Page 577: การเขียนโปรแกรมคอมพิวเตอร ์portal5.udru.ac.th/ebook/pdf/upload/17P88t2O788B98583682.pdfรูปภาพบางส่วนให

ดรรชน

Page 578: การเขียนโปรแกรมคอมพิวเตอร ์portal5.udru.ac.th/ebook/pdf/upload/17P88t2O788B98583682.pdfรูปภาพบางส่วนให

564

ดรรชน

A

Application Software, 22

Arithmetic and Logic Unit, 12

Arithmetic Assignment Operator, 135

Arithmetic Operators, 130

Array of String, 258

Array Structure, 225

Assembler, 26

Assembly Language Program, 25

Assignment Operator, 156

Automatic Size of Array, 250

Automatic Variable, 102

B

Basic Input Output System, 12

Binary, 130

Binary File, 394, 416

Binary Search, 468

Bitwise Operators, 151

Bubble Sort, 477

Page 579: การเขียนโปรแกรมคอมพิวเตอร ์portal5.udru.ac.th/ebook/pdf/upload/17P88t2O788B98583682.pdfรูปภาพบางส่วนให

565

C

Character, 82, 93

Character Constant, 106

Comment, 78

Compile, 70

Compiler, 21, 26

Computer Language, 24

Concurrent Validity, 494

Condition Operators, 159

Condition Statement, 173

Constant, 80, 105

Construct Validity, 493

Content Validity, 493

Crossover, 502, 517

D

Data Operation, 32

Declarations of Pointer, 357

Defined constant, 109

Design Phase, 37

Difficulty, 487

Discrimination, 490

Double Precision Floating Point, 82

Page 580: การเขียนโปรแกรมคอมพิวเตอร ์portal5.udru.ac.th/ebook/pdf/upload/17P88t2O788B98583682.pdfรูปภาพบางส่วนให

566

E

Efficiency, 493

Electronic Data Processing Manager, 17

Elitist Strategy, 504

Escape Sequence, 83

Evolutionary Computation, 496

Execute Instruction, 28

Explicit Type Conversion, 144

Expression, 130

External Variable, 92

F

Fairness, 493

File, 393

Fitness Function, 496, 500, 510

Floating Point, 81, 96

Floating Point Arithmetic Operator, 134

Floating Point Constant, 106

Flowchart Analysis, 42

Flowchart Symbol, 38

Function, 75

Function Interface, 268

Page 581: การเขียนโปรแกรมคอมพิวเตอร ์portal5.udru.ac.th/ebook/pdf/upload/17P88t2O788B98583682.pdfรูปภาพบางส่วนให

567

G

Gene, 495

General Purpose Computer, 3

Genetic Algorithm, 495, 497

Genetic Operation, 502

Global Variable, 100, 298

H

Handheld Computer, 8

Hardware, 15

High Level Language, 24

I

Implementation Phase, 37

Implicit Type Conversion, 142

Increment and Decrement Operator, 137

Initial Population, 497, 499

Initialization of Pointer, 365

Insertion Sort, 475

Instruction Address Calculation, 31

Instruction Fetch, 28, 31

Instruction Operation Decoding, 31

Integer Arithmetic Operator, 133

Integer Constant, 105

Page 582: การเขียนโปรแกรมคอมพิวเตอร ์portal5.udru.ac.th/ebook/pdf/upload/17P88t2O788B98583682.pdfรูปภาพบางส่วนให

568

Integer, 80, 94

Integration Phase, 37

Item Analysis, 485

Iteration Control, 56

J

Jump Control, 62

Jump Statement, 213

L

Least Square, 448

Linear Regression, 448

Literal Constant, 109

Local Variable, 100, 300

Logical Operators, 145

Long Double Precision Floating Point, 82

Long Integer, 81, 94

Low Level Language, 24

M

Machine language, 24

Mainframe Computer, 4

Maintenance Phase, 37

Mating pool, 497

Mean Absolute Deviation, 454, 455

Mean Absolute Percentage Error, 454, 456

Page 583: การเขียนโปรแกรมคอมพิวเตอร ์portal5.udru.ac.th/ebook/pdf/upload/17P88t2O788B98583682.pdfรูปภาพบางส่วนให

569

Mean Percentage Error, 454, 455

Mean Square Error, 454, 455

Measures of Central Tendency, 433

Median, 435

Memory Constant, 110

Microcomputer, 6

Microprocessor, 6

Minicomputer, 5

Mode, 438

Multi Tasking, 4

Multi User, 4

Mutation, 502, 519

N

Notebook, 7

O

Object Function, 496

Objectivity, 492

One-Dimensional Array, 227

Operand, 130

Operand Address Calculation, 32

Operand Store, 32

Operating System, 20

Operation Fetch, 32

Operator, 17, 129

Overflow, 87,93, 95

Page 584: การเขียนโปรแกรมคอมพิวเตอร ์portal5.udru.ac.th/ebook/pdf/upload/17P88t2O788B98583682.pdfรูปภาพบางส่วนให

570

P

Package Software, 23

Planning Phase, 37

Pointer and Array, 374

Pointer of Pointer, 369

Precedence, 159

Predictive Validity, 494

Preprocessing Directives, 74

Program Statement, 76

Programmer, 17

Pseudo Code, 40

Q

Quartile Deviation, 442

Quartile Range, 442

R

Random Access Memory, 13

Random Access, 421

Range, 440

Read Only Memory, 12

Register Variable, 302

Register Variable, 92

Regression Equation, 447

Regression Line, 448

Relational Operators, 148

Page 585: การเขียนโปรแกรมคอมพิวเตอร ์portal5.udru.ac.th/ebook/pdf/upload/17P88t2O788B98583682.pdfรูปภาพบางส่วนให

571

Reliability, 494

Repetition Statement, 196

Requirement Phase, 36

Retirement, 37

S

Searching, 464

Selection Control, 50

Selection Sort, 472

Sequential Control, 47

Sequential Search, 464

Sequential Statement, 172

Short Integer, 94

Single-Board Computers, 9

Software, 15, 18

Sorting, 464, 472

Special Purpose Computer, 3

Specification Phase, 36

Standard Deviation, 445

Standard Library Functions, 269

State Diagram, 31

Static Variable, 103

Static Variable, 301

String, 84, 107

Structure, 307

Supercomputer, 3

Page 586: การเขียนโปรแกรมคอมพิวเตอร ์portal5.udru.ac.th/ebook/pdf/upload/17P88t2O788B98583682.pdfรูปภาพบางส่วนให

572

Symbol, 84

Symbol of Pointer, 354

System Analysis, 17

System Programmer, 17

System Software, 19

System Utilities, 22

T

Tablet Computer, 7

Ternary, 130

Testing and Debugging, 46

Text File, 394, 395

Three-Dimension Array, 245

Two-Dimensional Array, 236

U

Unary, 130

Underflow, 87, 93, 95

Unions, 330

Unsigned Integer, 81

Unsigned Long Integer, 81

User, 17

User-Defined Functions, 281

Page 587: การเขียนโปรแกรมคอมพิวเตอร ์portal5.udru.ac.th/ebook/pdf/upload/17P88t2O788B98583682.pdfรูปภาพบางส่วนให

573

V

Variables, 85, 97

Variable Declaration, 75, 85

Variable Declaration of Functions, 298

Variance, 445

void, 93

W

Waterfall Model, 35

Page 588: การเขียนโปรแกรมคอมพิวเตอร ์portal5.udru.ac.th/ebook/pdf/upload/17P88t2O788B98583682.pdfรูปภาพบางส่วนให