191
สถาบันสงเสริมการสอนวิทยาศาสตรและเทคโนโลยี 1 คูมืออบรมการเขียนโปรแกรมดวยภาษา C#

คู มืออบรมการเข ียนโปรแกรมด วยภาษา C#weerayuth.in.th/docFiles/cs0.4.pdfแนะนําภาษา C# 1. จุดประสงค

  • Upload
    others

  • View
    5

  • Download
    0

Embed Size (px)

Citation preview

Page 1: คู มืออบรมการเข ียนโปรแกรมด วยภาษา C#weerayuth.in.th/docFiles/cs0.4.pdfแนะนําภาษา C# 1. จุดประสงค

สถาบนสงเสรมการสอนวทยาศาสตรและเทคโนโลย 1

คมออบรมการเขยนโปรแกรมดวยภาษา C#

Page 2: คู มืออบรมการเข ียนโปรแกรมด วยภาษา C#weerayuth.in.th/docFiles/cs0.4.pdfแนะนําภาษา C# 1. จุดประสงค

สถาบนสงเสรมการสอนวทยาศาสตรและเทคโนโลย 2

คานา

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

ปงบประมาณ ๒๕๕๒ ไดดาเนนโครงการจดการแขงขนคอมพวเตอรโอลมปกระหวางประเทศ ครงท ๒๓ ป พ .ศ .๒๕๕๔ โดยไดดาเนนกจกรรมตางๆ เพอรองรบการเปนเจาภาพจดการแขงขนฯ โดยเฉพาะอยางยงการพฒนาศกยภาพของครและนกเรยนทางดานคอมพวเตอร และการเขยนโปรแกรม สาขาคอมพวเตอร จงไดรวมกบคณาจารยจากมหาวทยาลยตางๆ จดใหมการอบรมครหลกสตรการโปรแกรมภาษาซชารปขน เพอพฒนาคณภาพการเรยนการสอนดานการเขยนโปรแกรมในโรงเรยน โดยไดจดทาเอกสารสาหรบการอบรมครหลกสตรการเขยนโปรแกรมภาษาซชารปใหกบครในโรงเรยนทสนใจไดเพมพนทกษะ และนาความรไปประยกตในการจดการเรยนการสอนวชาการโปรแกรมตอไป

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

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

สาขาคอมพวเตอร สถาบนสงเสรมการสอนวทยาศาสตรและเทคโนโลย

๒๐ เมษายน ๒๕๕๒

Page 3: คู มืออบรมการเข ียนโปรแกรมด วยภาษา C#weerayuth.in.th/docFiles/cs0.4.pdfแนะนําภาษา C# 1. จุดประสงค

สถาบนสงเสรมการสอนวทยาศาสตรและเทคโนโลย 3

สารบญ คานา................................................................................................................................................................2

สารบญ ............................................................................................................................................................3

กจกรรมท 1 แนะนาภาษา C#..........................................................................................................................6

ใบงานท 1.1 รจกกบภาษา C# ...................................................................................................................8

ใบงานท 1.2 นพจนทางคณตศาสตรและคาสงในการแสดงผล...............................................................12

ใบความรท 1.1 การสรางแอพลเคชนดวย MS Visual C# .......................................................................14

ใบความรท 1.2 ภาษา C# และเครองมอพฒนาโปรแกรม........................................................................16

ใบความรท 1.3 โครงสรางโปรแกรมภาษา C# และขอมลพนฐานและตวดาเนนการ ............................18

ใบความรท 1.4 การขอความชวยเหลอ ....................................................................................................29

กจกรรมท 2 ฟงกชนทางคณตศาสตรและการตดตอกบผใช .........................................................................32

ใบงานท 2.1 ฟงกชนทางคณตศาสตร .....................................................................................................34

ใบงานท 2.2 แกสมการกาลงสอง ............................................................................................................36

ใบงานท 2.3 คณสมบตของวงกลม ........................................................................................................37

ใบความรท 2.1 ฟงกชนทางคณตศาสตร .................................................................................................38

ใบความรท 2.2 คาสงสาหรบรบขอมลจากผใช.......................................................................................39

กจกรรมท 3 คาสงแบบมเงอนไข ..................................................................................................................41

ใบงานท 3.1 การตรวจสอบคาความจรง..................................................................................................44

ใบงานท 3.2 ระบบจตภาค.......................................................................................................................45

ใบงานท 3.3 ดชนมวลกาย ......................................................................................................................47

ใบงานท 3.4 สงหนงสอ ..........................................................................................................................49

ใบงานท 3.5 เครองคดเลขรนใหม ...........................................................................................................51

ใบความรท 3.1 นพจนทางตรรกศาสตร ..................................................................................................52

ใบความรท 3.2 โครงสราง if และ if...else ..............................................................................................53

ใบความรท 3.3 โครงสราง if หลายชน ...................................................................................................57

ใบความรท 3.4 โครงสราง switch...case.................................................................................................59

กจกรรมท 4 คาสงวนซา ................................................................................................................................63

ใบงานท 4.1 ผลรวมตวเลข......................................................................................................................66

ใบงานท 4.2 สถตคะแนนสอบ................................................................................................................67

ใบงานท 4.3 ลาดบตวเลข........................................................................................................................70

ใบงานท 4.4 จานวนเฉพาะ......................................................................................................................71

Page 4: คู มืออบรมการเข ียนโปรแกรมด วยภาษา C#weerayuth.in.th/docFiles/cs0.4.pdfแนะนําภาษา C# 1. จุดประสงค

สถาบนสงเสรมการสอนวทยาศาสตรและเทคโนโลย 4

ใบงานท 4.5 กลมดาวสามเหลยม ............................................................................................................73

ใบความรท 4.1 โครงสราง while ลป ......................................................................................................74

ใบความรท 4.2 โครงสราง do...while ลป ...............................................................................................77

ใบความรท 4.3 โครงสราง for ลป ..........................................................................................................78

กจกรรมท 5 เมทอดเบองตน..........................................................................................................................81

ใบงานท 5.1 แกไขเมทอดพมพดาว.........................................................................................................84

ใบงานท 5.2 ทดลองสงคาไปยงเมทอด ...................................................................................................85

ใบงานท 5.3 ทดลองวาดแผนภาพ ...........................................................................................................86

ใบงานท 5.4 คานวนพนทวงกลม ............................................................................................................87

ใบงานท 5.5 อนกรมฮาโมนค ................................................................................................................88

ใบงานท 5.6 วาดกราฟของฟงกชนอยางงาย ๆ.......................................................................................89

ใบความรท 5.1 การประกาศและเรยกใชเมทอด......................................................................................91

ใบความรท 5.2 การสงคาไปยงเมทอด ....................................................................................................95

ใบความรท 5.3 เมทอดแบบคนคา ...........................................................................................................96

กจกรรมท 6 อาเรย.........................................................................................................................................99

ใบงานท 6.1 สรางอาเรยของคะแนน.....................................................................................................101

ใบงานท 6.2 หาคาเฉลยของคะแนน......................................................................................................102

ใบงานท 6.3 รบสงอาเรยไปยงเมทอด ..................................................................................................103

ใบงานท 6.4 วเคราะหอกขระ................................................................................................................105

ใบงานท 6.5 ถอดรหสลบจราชน ..........................................................................................................106

ใบงานท 6.6 แผนภมแทง ......................................................................................................................108

ใบความรท 6.1 ชนดขอมลแบบอาเรย...................................................................................................110

ใบความรท 6.2 การหาขนาดของอารเรย ...............................................................................................114

ใบความรท 6.3 คาสง foreach ...............................................................................................................115

ใบความรท 6.4 การสงอาเรยไปยงเมทอด .............................................................................................116

ใบความรท 6.5 การการอางถงสตรงในรปแบบอาเรย...........................................................................117

กจกรรมท 7 อาเรยหลายมต.........................................................................................................................118

ใบงานท 7.1 แสดงคาในแมตรกซ .........................................................................................................120

ใบงานท 7.2 กาหนดคาใหแมตรกซ .....................................................................................................121

ใบงานท 7.3 แมตรกซทรานสโพส .......................................................................................................123

ใบงานท 7.4 ดเทอรมแนนทของแมตรกซ.............................................................................................125

ใบงานท 7.5 การคณแมตรกซ ..............................................................................................................126

Page 5: คู มืออบรมการเข ียนโปรแกรมด วยภาษา C#weerayuth.in.th/docFiles/cs0.4.pdfแนะนําภาษา C# 1. จุดประสงค

สถาบนสงเสรมการสอนวทยาศาสตรและเทคโนโลย 5

ใบความรท 7.1 อารเรยสองมต..............................................................................................................128

ใบความรท 7.2 การหาขนาดของอาเรย .................................................................................................131

แบบฝกหดเพมเตมเรองอาเรยสองมต .........................................................................................................132

กจกรรมท 8 การพฒนาโปรแกรมตดตอกบผใชแบบกราฟก ......................................................................133

ใบงานท 8.1 ออกแบบโปรแกรมเครองคดเลข ....................................................................................135

ใบงานท 8.2 โปรแกรมเครองคดเลขอยางงาย .....................................................................................136

ใบความรท 8.1 การโปรแกรมเชงวตถ ..................................................................................................138

ใบความรท 8.2 การสรางโปรเจกตแบบ Windows................................................................................145

กจกรรมท 9 พฒนาโครงงาน ......................................................................................................................159

ใบงานท 9.1 พฒนาโครงงานแบบ Windows Application...................................................................161

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

การใชงานโปรแกรม Microsoft Visual C# 2008 Express...........................................................................164

กจกรรมท 10 การจดกลมขอมลดวยโครงสราง...........................................................................................177

ใบงานท 10.1 รจกกบขอมลแบบโครงสราง .........................................................................................179

ใบงานท 10.2 เวกเตอร ..........................................................................................................................181

ใบงานท 10.3 ฐานขอมลนกเรยน..........................................................................................................184

ใบความรท 10.1 ชนดขอมลแบบโครงสราง .........................................................................................186

ใบความรท 10.2 การใชงานโครงสรางรวมกบอาเรย ............................................................................189

คณะผพฒนาเอกสาร การโปรแกรมภาษาซชารป.......................................................................................191

Page 6: คู มืออบรมการเข ียนโปรแกรมด วยภาษา C#weerayuth.in.th/docFiles/cs0.4.pdfแนะนําภาษา C# 1. จุดประสงค

สถาบนสงเสรมการสอนวทยาศาสตรและเทคโนโลย 6

กจกรรมท 1 แนะนาภาษา C#

1. จดประสงค ใหผเรยนสามารถ 1.1 สรางโปรเจกตแบบ Console Application ดวย MS Visual C# 1.2 ตงชอตวระบไดตามกฎเกณฑการตงชอ 1.3 เขยนคาสงในภาษา C# เพอแสดงผลขอมล

2. แนวคด

ในสภาพแวดลอมของ MS Visual C# การพฒนาแอพลเคชนขนมาหนงชนเรยกวาการสรางโซลชน )solution) ซงประกอบไปดวยโปรเจกต (project) ตงแตหนงหรอมากกวา โดยแตละโปรเจกตเปนชนสวนของซอฟตแวรทอาจเปนสวนของโปรแกรมหลก หรอสวนไลบราร (library) ทถกเรยกใชโดยโปรเจกต อน ๆ

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

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

3. สออปกรณ

3.1 ใบงาน ใบงานท เรอง เวลา (นาท)

1.1 รจกกบภาษา C# 25 1.2 นพจนทางคณตศาสตรและคาสงในการแสดงผล 30

3.2 ใบความร - ใบความรท 1.1 เรองสรางแอพพลเคชนดวย MS Visual C#

Page 7: คู มืออบรมการเข ียนโปรแกรมด วยภาษา C#weerayuth.in.th/docFiles/cs0.4.pdfแนะนําภาษา C# 1. จุดประสงค

สถาบนสงเสรมการสอนวทยาศาสตรและเทคโนโลย 7

- ใบความรท 1.2 เรองภาษา C# และเครองมอพฒนาโปรแกรม - ใบความรท 1.3 เรองโครงสรางของโปรแกรมภาษา C# และขอมลพนฐานและตวดาเนนการ - ใบความรท 1.4 เรองการขอความชวยเหลอ

3.3 อนๆ - เครองคอมพวเตอรเทากบจานวนกลม - โปรแกรมวชวลซชารป เอกเพรส (MS Visual C# Express)

4. วธดาเนนการ 4.1 การจดเตรยม

4.1.1 แบงผเรยนเปนกลม กลมละ 2 คน 4.1.2 เตรยมใบงานท 1.1 - 1.2 ตามจานวนกลมและใบความรท 1.1 - 1.3 ตามจานวนผเรยน

4.2 ขนตอนการดาเนนการ 4.2.1 ผสอนกลาวถงภาษา C# และโปรแกรม MS Visual C# 4.2.2 ผเรยนแตละคนศกษาใบความรท 1.1 เรองสรางแอพพลเคชนดวย MS Visual C# ใบความร

ท 1.2 เรองภาษา C# และเครองมอพฒนาโปรแกรม ใบความรท 1.3 เรองโครงสรางของโปรแกรมภาษา C# และขอมลพนฐานและตวดาเนนการ และใบความรท 1.4 เรองการขอความชวยเหลอ

4.2.3 ผเรยนทาใบงานท 1.1 เรองรจกกบภาษา C# จากนนผสอนสมผเรยนออกมานาเสนอ 4.2.4 ผเรยนทาใบงานท 1.2 เรองนพจนทางคณตศาสตรและคาสงในการแสดงผล จากนนผสอน

สมผเรยนออกมานาเสนอ 4.2.5 ผเรยนและผสอนรวมกนอภปรายและสรปเกยวกบ การใชงานโปรแกรม MS Visual C#

เบองตน โครงสรางของภาษา C# ขอมลพนฐานและตวดาเนนการ

5. การวดและประเมนผล 5.1 ตรวจคาตอบจากใบงาน

6. แหลงความรเพมเตม

6.1 http://msdn.microsoft.com/th-th/vcsharp/default(en-us).aspx 7. ขอเสนอแนะ 7.1 ผเรยนสามารถศกษาวธการใชงานโปรแกรม MS Visual C# Express ไดจากภาคผนวก

Page 8: คู มืออบรมการเข ียนโปรแกรมด วยภาษา C#weerayuth.in.th/docFiles/cs0.4.pdfแนะนําภาษา C# 1. จุดประสงค

สถาบนสงเสรมการสอนวทยาศาสตรและเทคโนโลย 8

ใบงานท 1.1 รจกกบภาษา C#

ใหผเรยนศกษาใบความรท 1.1 ใบความรท 1.2 และใบความรท 1.3 และปฏบตตามขนตอนในใบความร แลวตอบคาถามตอไปน 1. เปดโปรแกรม MS Visual C# และสรางโปรเจกต เขยนโปรแกรม ดงน

1.4 สรางโปรเจกตแบบ Console Application และตงชอวา First 1.5 ลบโคดท MS Visual C# เตรยมไวใหออกทงหมด และพมพโคดตอไปนลงไป

namespace First { class First { static void Main() { System.Console.WriteLine("Hello teacher!"); System.Console.ReadLine(); } } }

1.6 ทดลองรนโปรแกรม เขยนผลลพธทไดลงในชองวางดานลาง

1.7 นาบรรทดทมคาสง System.Console.ReadLine() ; ออกจากโปรแกรม ทดลองรนโปรแกรมอกครงหนง สงเกตผลลพธทได และผเรยนคดวาคาสง ReadLine ทาหนาทอะไร

รายชอสมาชกในกลมท…………………. 1. ………………………………………………… 2. …………………………………………………. 3. ………………………………………………… 4. ………………………………………………….

Page 9: คู มืออบรมการเข ียนโปรแกรมด วยภาษา C#weerayuth.in.th/docFiles/cs0.4.pdfแนะนําภาษา C# 1. จุดประสงค

สถาบนสงเสรมการสอนวทยาศาสตรและเทคโนโลย 9

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

2. เขยนโปรแกรมทมองคประกอบตามทระบ

2.1 สรางโปรเจกตใหมชอ Second และสรางโปรแกรมภาษา C# ใหมองคประกอบดงน o โปรแกรมอยในเนมสเปสชอ MyNameSpace o โปรแกรมหลกอยในคลาสชอ MyClass o เมอรนโปรแกรมจะพมพขอความตอไปน และหยดรอใหผใชเคาะแปน Enter กอนปด

หนาจอ Console Live as if you were to die tomorrow. Learn as if you were to live forever. -Mahatma Gandhi

2.2 ทดสอบความถกตอง และกรอกโปรแกรมทไดลงในชองวาง

Page 10: คู มืออบรมการเข ียนโปรแกรมด วยภาษา C#weerayuth.in.th/docFiles/cs0.4.pdfแนะนําภาษา C# 1. จุดประสงค

สถาบนสงเสรมการสอนวทยาศาสตรและเทคโนโลย 10

3. การใชงานตวแปรและคาคงท

3.1 พจารณาชอตวระบ (ทจะนามาใชประกาศเปนชอตวแปร คาคงท คลาส หรอเนมสเปส) ตอไปนวาถกตองตามกฎเกณฑการตงชอหรอไม พรอมทงอธบายเหตผลหากชอนนถกตงไมถกกฎเกณฑ

ชอตวระบ ใชไดหรอไม เหตผล XXX ได - $$$ ไมได ประกอบดวยอกขระพเศษ _Y string i_j Student ID HelloWorld! first-time null 123Class Section3 w*h do 3.2 เขยนคาสงประกาศตวแปรชอ x ทมชนดขอมลเปน float โดยไมมการกาหนดคาเรมตน

3.3 เขยนคาสงประกาศตวแปรชอ myName ทมชนดขอมลเปน string โดยไมมการกาหนดคาเรมตน

3.4 เขยนคาสงเพอประกาศคาคงทชอ PI ทมชนดขอมลเปน double เพอใชแทนคา 3.1415926535

3.5 เขยนคาสงภาษา C# เพอประกาศตวแปรหรอคาคงทตามทกาหนดให โดยเลอกใชชนดของขอมลทเหมาะสม

• คาคงทชอ MY_AGE เพอใชแทนอายปจจบนของทานเอง

Page 11: คู มืออบรมการเข ียนโปรแกรมด วยภาษา C#weerayuth.in.th/docFiles/cs0.4.pdfแนะนําภาษา C# 1. จุดประสงค

สถาบนสงเสรมการสอนวทยาศาสตรและเทคโนโลย 11

• ตวแปรชอ income เพอใชเกบเงนเดอนของพอลลา

• ตวแปรชอ temp_c เพอเกบคาอณหภมบรเวณขวโลกเหนอเปนองศาเซลเซยส

• ตวแปรชอ temp_k เพอเกบคาอณหภมใจกลางดวงอาทตยเปนเคลวน

• คาคงทชอ NAME เพอใชแทนชอเตมของทานเอง

3.6 โปรแกรมดานลางถกเขยนขนมาเพอคานวณหาพนทของวงกลมทมรศม 12.5 หนวย using System; class CircleArea { static void Main() { const double PI = 3.1415926535; radius = 12.5; area = PI * radius * radius; Console.WriteLine("Circle area = {0}", area); } }

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

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

Page 12: คู มืออบรมการเข ียนโปรแกรมด วยภาษา C#weerayuth.in.th/docFiles/cs0.4.pdfแนะนําภาษา C# 1. จุดประสงค

สถาบนสงเสรมการสอนวทยาศาสตรและเทคโนโลย 12

ใบงานท 1.2 นพจนทางคณตศาสตรและคาสงในการแสดงผล

1. การสรางนพจนทางคณตศาสตรจากนพจนทมอย 1.1 เปดโปรแกรม MS Visual C# และสรางโปรเจกตชอ Expression พมพโคดตอไปนลงไป

1: using System; 2: class Test 3: { 4: static void Main() 5: { 6: double x = 4.0, y = 2.0; 7: int a = 10, b = 4; 8: Console.WriteLine(________); 9: Console.ReadLine(); 10: } 11: }

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

x+a a/b a/x y/x (a+b)/b%a 9.0/5.0*(a-x) x+y-x*y 57%50/25

1.2 จากการทดลองขางตน ทงทคา a/b และ a/x คอการนา 10 ไปหารดวย 4 เหมอนกน เหตใดผลลพธท

ไดจงตางกน ผเรยนคดวาในภาษา C# มการตความนพจนทงคแตกตางกนอยางไร

รายชอสมาชกในกลมท…………………. 1. ………………………………………………… 2. …………………………………………………. 3. ………………………………………………… 4. ………………………………………………….

Page 13: คู มืออบรมการเข ียนโปรแกรมด วยภาษา C#weerayuth.in.th/docFiles/cs0.4.pdfแนะนําภาษา C# 1. จุดประสงค

สถาบนสงเสรมการสอนวทยาศาสตรและเทคโนโลย 13

2. ศกษาการใชงานคาสงเกยวกบการแสดงผล พจารณาโปรแกรมทไมสมบรณตอไปน

using System; class SayHi { static void Main() { string yourName = ___(a)___; uint yourAge = ___(b)___; Console.WriteLine("Hello {1}. You are {0} years old.", ___(c)___, ___(d)___); } }

เตมสวนทเวนไวจาก (a) ถง (d) เพอใหโปรแกรมกลาวคาทกทายทานแสดงอายของทาน เชน หากทานชอ Arthur และมอาย 18 ป ผลลพธของโปรแกรมควรจะเปน

Hello Arthur. You are 18 years old.

จากนนลอกสงทเตมในชองวางลงในตาราง

ชองวาง สงทเตมลงไป __(a)__

__(b)__

__(c)__

__(d)__

Page 14: คู มืออบรมการเข ียนโปรแกรมด วยภาษา C#weerayuth.in.th/docFiles/cs0.4.pdfแนะนําภาษา C# 1. จุดประสงค

สถาบนสงเสรมการสอนวทยาศาสตรและเทคโนโลย 14

ใบความรท 1.1 การสรางแอพลเคชนดวย MS Visual C#

ในสภาพแวดลอมของ MS Visual C# การพฒนาแอพลเคชนขนมาหนงชนเรยกวาการสรางโซลชน (solution) ซงประกอบไปดวยโปรเจกต (project) ตงแตหนงหรอมากกวา โดยแตละโปรเจกตเปนชนสวนของซอฟตแวรทอาจเปนสวนของโปรแกรมหลก หรอสวนไลบราร (library) ทถกเรยกใชโดยโปรเจกตอนๆ ดงนนแอพลเคชนแตละตวจะประกอบไปดวยโปรเจกตอยางนอยหนงโปรเจกตเสมอ ใบความรนจะอธบายถงกระบวนการสรางโปรเจกตใน MS Visual C# สาหรบพฒนาแอพลเคชนแบบคอนโซล โดยมขนตอนตอไปน

1. เลอกรายการเมน New Project จากเมน File ดงแสดงในรปท 1.1

2. ในไดอะลอกซ New Project เลอกชนดของโปรเจกตเปน Console Application และตงชอใหกบ โปรเจกตในกลองขอความดานลาง ดงแสดงตวอยางในรปท 1.2 จากนนกดปม OK

3. โปรเจกตใหมจะถกสรางขนมาพรอมทงไฟลชอ Program.cs ซงมโปรแกรมภาษา C# มาใหบางสวนเพอใหงายตอการเรมตน ดงแสดงในรปท 1.3 ในทนเราอาจลบโปรแกรมทใหมาทงหมด ทงไปแลวเรมเขยนโปรแกรมของเราเองกได เมอตองการทดสอบการทางานของโปรแกรมใหคลก ทปม Run ( ) เพอสงให MS Visual C# คอมไพลโปรแกรมและใหโปรแกรมเรมทางาน

รปท 1.1 รายการเมนสาหรบสรางโปรเจกตใหม

Page 15: คู มืออบรมการเข ียนโปรแกรมด วยภาษา C#weerayuth.in.th/docFiles/cs0.4.pdfแนะนําภาษา C# 1. จุดประสงค

สถาบนสงเสรมการสอนวทยาศาสตรและเทคโนโลย 15

รปท 1.2 ไดอะลอกซในสรางโปรเจกตใหมและการตงคาสาหรบคอนโซลแอพลเคชน

รปท 1.3 หนาจอโดยรวมของ MS Visual C# หลงกระบวนการสรางโปรเจกต

เลอก Console Application

ตงชอแอพลเคชน

พนทการเขยนโปรแกรม

คลกปม Run เพอ ทดสอบโปรแกรม

Page 16: คู มืออบรมการเข ียนโปรแกรมด วยภาษา C#weerayuth.in.th/docFiles/cs0.4.pdfแนะนําภาษา C# 1. จุดประสงค

สถาบนสงเสรมการสอนวทยาศาสตรและเทคโนโลย 16

ใบความรท 1.2 ภาษา C# และเครองมอพฒนาโปรแกรม

ภาษา C# เปนภาษาโปรแกรมเชงวตถ (object-oriented programming language) ทถกพฒนาขนมาโดยบรษทไมโครซอฟต การพฒนาโปรแกรมคอมพวเตอรดวยภาษา C# นนจะประกอบดวยขนตอนดงน

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

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

• นาขนตอนวธทออกแบบไวมาสรางเปนไฟลโปรแกรมรหสตนฉบบ (source code) ทถกตอง ตามโครงสรางและไวยกรณของตวภาษา C# ทงนไฟลรหสตนฉบบตองมนามสกล .cs เสมอ เชน prog1.cs

• แปลงรหสตนฉบบใหอยในรปรหสภาษาเครองทคอมพวเตอรเขาใจและทางานตามคาสงได ขนตอนนตองใชโปรแกรมทเรยกวา คอมไพเลอร (compiler) ไฟลรหสภาษาเครองทถกสรางขนจากคอมไพเลอรจะมนามสกล .exe ซงยอมาจาก executable หมายถงไฟลทถกเรยกทางานได

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

ขนตอนการพฒนาโปรแกรมดงกลาวนนอกจากจะสามารถจะใชกบภาษา C# แลวยงสามารถนาไปประยกตใชกบภาษาอน ๆ ไดดวย

เครองมอสาหรบพฒนาโปรแกรมดวย C# ขนตอนในการพฒนาโปรแกรมทกลาวไปแลวในขางตนอาจดซบซอนสาหรบผทยงไมม

ประสบการณ อยางไรกตาม ในปจจบนไดมซอฟตแวรสาหรบชวยพฒนาโปรแกรมภาษา C# อยมากมาย ใหเลอกใชซงเพมความสะดวกและลดขอผดพลาดลงไดเปนอยางมาก ซอฟตแวรหลายตวถกแจกจาย ใหนาไปใชงานไดโดยไมตองเสยคาใชจาย หนงในซอฟตแวรเหลานนคอ Microsoft Visual C# 2008 Express Edition (ในทนขอเรยกยอ ๆ วา MS Visual C#)

MS Visual C# มคณสมบตคราว ๆ ดงตอไปน

• สราง/แกไข/บนทก โปรแกรมทเขยนดวยภาษา C# ได

Page 17: คู มืออบรมการเข ียนโปรแกรมด วยภาษา C#weerayuth.in.th/docFiles/cs0.4.pdfแนะนําภาษา C# 1. จุดประสงค

สถาบนสงเสรมการสอนวทยาศาสตรและเทคโนโลย 17

• คอมไพลและทดสอบโปรแกรมทเขยนขนไดทนท

• เพมความงายในการเขยนโปรแกรมดวยคณสมบตการเตมเตมคาสง (Code Completion)

• สนบสนนการพฒนาโปรแกรมทงประเภททตดตอกบผใชผานคอนโซล (Console Application) ซงรบขอมลผานแปนพมพและแสดงผลขอมลในรปตวอกษรเพยงอยางเดยว ดงตวอยางในรปท 1.4 และประเภททใชคณสมบตของวนโดวสเตมรปแบบ (Windows Application) ซงอนญาตใหผใชงานควบคมโปรแกรมโดยใชเมาสและแสดงผลในแบบกราฟกได ดงตวอยางในรปท 1.5

รปท 1.4 ตวอยางคอนโซลแอพลเคชน (Console Application)

รปท 1.5 ตวอยางวนโดวสแอพลเคชน (Windows Application)

Page 18: คู มืออบรมการเข ียนโปรแกรมด วยภาษา C#weerayuth.in.th/docFiles/cs0.4.pdfแนะนําภาษา C# 1. จุดประสงค

สถาบนสงเสรมการสอนวทยาศาสตรและเทคโนโลย 18

ใบความรท 1.3 โครงสรางโปรแกรมภาษา C# และขอมลพนฐานและตวดาเนนการ

การโปรแกรมภาษา C# ขนพนฐานทมเฉพาะสวนของโปรแกรมหลกและไมมโปรแกรมยอย (subroutine) จะมสวนประกอบดงน namespace ___(A)___ { class ___(B)___ { static void Main() { ___(C)___ } } }

ตามโครงสรางขางตน ณ ตาแหนง (A), (B), and (C) มความหมายดงตอไปน

• ตาแหนง (A) ระบชอของเนมสเปซ (namespace) ซงใชในการกาหนดขอบเขตใหกบคลาสตาง ๆ รวมถงใชในการจดโครงสรางของโปรแกรมขนาดใหญใหเปนสดสวนอกดวย โดยเฉพาะอยางยงในการพฒนาแอพลเคชนทซบซอนโดยผพฒนาหลายคน การกาหนดเนมสเปซของตนเองสามารถปองกนปญหาการตงชอคลาสหรอคาคงทอน ๆ ซากนได สวนไลบรารของภาษา C# ทมใหเราเรยกใชงานได กถกเตรยมเอาไวในเนมสเปซชอตาง ๆ เชนเดยวกน

• ตาแหนง (B) ระบชอของคลาส (class) • ตาแหนง (C) เปนพนทสาหรบคาสงตาง ๆ ทผเขยนโปรแกรมตองการใหคอมพวเตอรปฏบตตาม

นอกจากนโปรแกรมทไมซบซอนมากยงสามารถละสวนทระบเนมสเปซทงไปได คลาสทถกสรางขนมาโดยไมอยในขอบเขตของเนมสเปซใดจะถอวาอยในเนมสเปซกลาง (global namespace) class ___(B)___ { static void Main() { ___(C)___ } }

Page 19: คู มืออบรมการเข ียนโปรแกรมด วยภาษา C#weerayuth.in.th/docFiles/cs0.4.pdfแนะนําภาษา C# 1. จุดประสงค

สถาบนสงเสรมการสอนวทยาศาสตรและเทคโนโลย 19

โปรแกรมภาษา C# ซงแสดงขอความ Hello World! ออกทางจอภาพ จากนนรอจนกวาผใชจะกด Enter และจบการทางาน โปรแกรมนอยในเนมสเปซชอ HelloApp และคลาสชอ HelloClass namespace HelloApp { class HelloClass { static void Main() { System.Console.WriteLine("Hello World!"); System.Console.ReadLine(); } } }

โปรแกรมภาษา C# ซงใหผลลพธเชนเดยวกบโปรแกรมขางตน แตเขยนโดยไมระบเนมสเปซ class HelloClass { static void Main() { System.Console.WriteLine("Hello World!"); System.Console.ReadLine(); } }

กฎการตงชอตวระบในภาษา C# โปรแกรมภาษา C# ทนาไปใชงานจรงมกจะมการใชงานตวระบ (identifier) อยทวไปภายใน

โปรแกรม เชนชอของเนมสเปซและคลาสทไดกลาวไปขางตน ภาษา C# ไดจากดกฎเกณฑการตงชอใหตวระบเอาไวดงตอไปน

• ชอตวระบตองประกอบดวยตวอกษรภาษาองกฤษ (A-Z,a-z) ตวเลข (0-9) หรอเครองหมายขดเสนใต (_) เทานน

• ตวอกษรตวแรกของชอตองเปนตวอกษรภาษาองกฤษ หรอตวขดเสนใต • ชอตวระบจะมความยาวไดไมเกน 63 ตวอกษร • ชอตวระบตองไมซากบคาสงวน (reserved word) เชน class, namespace, int, void,

static

Page 20: คู มืออบรมการเข ียนโปรแกรมด วยภาษา C#weerayuth.in.th/docFiles/cs0.4.pdfแนะนําภาษา C# 1. จุดประสงค

สถาบนสงเสรมการสอนวทยาศาสตรและเทคโนโลย 20

ชนดขอมล (Data Types) ใน C# C# กาหนดชนดของขอมลไวหลากหลายชนดเพอรองรบการจดเกบขอมลหลาย ๆ ประเภท

ตารางท 1 แสดงชนดขอมลหลก ๆ ทพบบอยในโปรแกรมทวไป

ตารางท 1 ชนดขอมลหลก ๆ ของภาษา C#

ชนดขอมล คาอธบาย char อกขระเดยว เชน a bool คาความจรง เปนไปไดสองคาคอ true หรอ false byte จานวนเตมไมมเครองหมาย ตงแต 0 ถง 255 int จานวนเตมมเครองหมาย ตงแต - 2,147,483,648 ถง 2,147,483,647 uint จานวนเตมไมมเครองหมาย ตงแต 0 ถง 4,294,967,295 long จานวนเตมมเครองหมาย ตงแต - 9,223,372,036,854,775,808 ถง 9,223,372,036,854,775,807 ulong จานวนเตมไมมเครองหมาย ตงแต 0 and 18,446,744,073,709,551,615 float จานวนจรง (มทศนยมได) เชน 3.14159 double จานวนจรงทเกบความละเอยดมากเปนสองเทา string ขอความ (สายอกขระ) เชน Hello

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

ถกเปลยนแปลงไดตลอดเวลาทโปรแกรมกาลงทางานอย ในภาษา C# ตวแปรทกตวตองถกประกาศ กอนทจะถกนามาใชงาน โดยมการระบชนดขอมลทจะใชกบตวแปรนน ๆ ไวดวยตามรปแบบดงน DataType variableName;

ในทน variableName คอชอของตวแปร และ DataType คอชอของชนดขอมลทตวแปรนเกบคาได (ตามตวอยางในตารางท 1)

นอกจากการประกาศตวแปรตามแบบขางตนแลว เรายงสามารถกาหนดคาเรมตนใหกบตวแปรนน ๆ ไดอกดวย โดยมรปแบบดงน DataType variableName = initialValue;

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

Page 21: คู มืออบรมการเข ียนโปรแกรมด วยภาษา C#weerayuth.in.th/docFiles/cs0.4.pdfแนะนําภาษา C# 1. จุดประสงค

สถาบนสงเสรมการสอนวทยาศาสตรและเทคโนโลย 21

คาสงดานลางประกาศตวแปรชอ distance ทมชนดขอมลเปน uint และไมมการกาหนดคาเรมตน uint distance;

คาสงดานลางประกาศตวแปรชอ salary ทมชนดขอมลเปน long และคาเรมตนเปน 30000 long salary = 30000;

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

จากตวแปรกคอคาของมนไมสามารถเปลยนแปลงไดอกหลงจากการประกาศ

ในภาษา C# คาคงทตองถกประกาศโดยระบชนดขอมลและคาตงตนกอนถกนามาใชงานเสมอ การประกาศคาคงทจะคลายคลงกบการประกาศตวแปร แตกตางกนตรงทตองมการระบดวยคยเวรด const ดงแสดง const DataType constantName = value;

ในทน constantName คอชอของคาคงท สวน DataType คอชอชนดขอมลทคาคงทนใชอางถง และ value ระบคาทคาคงทนถกใชเปนตวแทน

คาสงดานลางประกาศคาคงทชอ myconst โดยมชนดขอมลเปนแบบ double และใชแทนคา 2.71828 const double myconst = 2.71828;

การใชงานคาคงทมประโยชนมากในกรณทเราตองอางองถงคาใด ๆ ซากนอยบอยครงภายในโปรแกรม ดงเชนตวอยางตอไปน

โปรแกรมดานลางเปนโปรแกรมททาใหคอมพวเตอรกลาวคาทกทายทว ๆ ไปสองบรรทดกบผใช ซงสมมตวาชอ Harry จะเหนวาหากเราตองการเปลยนชอผใชเปนชออนนนกสามารถทาไดงาย ๆ โดยแกไขบรรทด ท 5 ใหคาคงทแทนดวยคาอนเทานน 1: using System; 2: 3: class Intro { 4: static void Main() { 5: const string MY_NAME = "Harry"; 6: 7: Console.WriteLine("Hello {0}, how are you?", MY_NAME); 8: Console.WriteLine("And how can I help you, {0}?", 9: MY_NAME); 10: Console.ReadLine(); 11: } 12: }

Page 22: คู มืออบรมการเข ียนโปรแกรมด วยภาษา C#weerayuth.in.th/docFiles/cs0.4.pdfแนะนําภาษา C# 1. จุดประสงค

สถาบนสงเสรมการสอนวทยาศาสตรและเทคโนโลย 22

ตวแปร)รวมถงคาคงท ( ทมชนดขอมลแบบเดยวกนสามารถถกประกาศรวมกนภายในคาสงเดยวกนไดโดยคนดวยเครองหมายคอมมา const int FreezingPoint = 32; int x, y; int wd = 5, ht = 8; const double PI = 3.1424; char ch = 'A'; string mynote = "Hello, Kitty"; int j = 5;

นพจนทางคณตศาสตร (Arithmetic Expressions) นพจน (expression) ภายในโปรแกรมภาษา C# หมายถงสวนของโปรแกรมทสามารถถกตความ

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

• ตวเลขโดด เชน 3000, 1.414

• ขอความ เชน "Hello, World"

• คาความจรง ไดแก true และ false

• ตวแปรหรอคาคงทเดยว ๆ ทผานการกาหนดคาใหแลว เชน myName, salary

ในทนจะเนนการศกษาเกยวกบนพจนทใหคาเปนตวเลข เรยกวา นพจนทางคณตศาสตร (arithmetic expression) โดยเราสามารถผสมนพจนตาง ๆ ใหเปนนพจนทซบซอนขนโดยอาศยตวดาเนนการ ทางคณตศาสตรทมใหในภาษา C# ดงตารางท 2

ตารางท 2 ตวดาเนนการทางคณตศาสตร

ตวดาเนนการ สญลกษณ จานวนนพจนทนามาผสม ตวอยาง คาของนพจนเมอ x = 20

บวก (add) + 2 x+4 24

ลบ (subtract) - 2 32-x 12

คณ (multiply) * 2 x*2 40

หาร (divide) / 2 x/2 10

หารเอาเศษ (modulo)

% 2 x%6 2

Page 23: คู มืออบรมการเข ียนโปรแกรมด วยภาษา C#weerayuth.in.th/docFiles/cs0.4.pdfแนะนําภาษา C# 1. จุดประสงค

สถาบนสงเสรมการสอนวทยาศาสตรและเทคโนโลย 23

ตวดาเนนการ สญลกษณ จานวนนพจนทนามาผสม ตวอยาง คาของนพจนเมอ x = 20

กลบเครองหมาย (negate)

- 1 -x -20

จดกลม ( ) N/A (x+2)*3 66

หากนพจนทสรางขนมาใหมประกอบดวยตวดาเนนการมากกวาหนงตว C# จะคานวณคาเรยงตามลาดบกอนหลงดงน

• ( )

• *, / และ % • + และ - • หากตวดาเนนการมลาดบเทาเทยมกน คานวณจากซายไปขวา

คาสงทใชในการแสดงผล คาสงหลกทใชในการแสดงขอความออกทางจอภาพไดแกคาสง Write และ WriteLine

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

การเรยกใชงานคาสง Write และ WriteLine โดยระบเนมสเปสเตมรปแบบ class Hello { static void Main() { System.Console.Write("Hello, "); System.Console.WriteLine("everybody"); } }

สงเกตวาการเรยกใชคาสง Write และ WriteLine นนตองระบถงคลาส Console ซงเปนคลาสทนยามคาสงนเอาไว และเนองจากคลาส Console เปนคลาสทอยในเนมสเปส System จงตองระบชอเนมสเปสไวดวยตามตวอยาง อยางไรกตามเราสามารถทาโปรแกรมใหสนลงไดโดยใชคาสง using ซงเปนการสงใหคอมไพเลอรคนหาคลาสทเรยกใชงานในเนมสเปสทระบ ดงตวอยางตอไปน

การเรยกใชงานคาสง Write และ WriteLine โดยใชคาสง using using System;

Page 24: คู มืออบรมการเข ียนโปรแกรมด วยภาษา C#weerayuth.in.th/docFiles/cs0.4.pdfแนะนําภาษา C# 1. จุดประสงค

สถาบนสงเสรมการสอนวทยาศาสตรและเทคโนโลย 24

class Hello { static void Main() { Console.Write("Hello, "); Console.WriteLine("everybody"); } }

คาสง Write และ WriteLine นนยงสามารถเรยกใชงานในรปแบบทซบซอนกวานอกมาก ดงแสดงในตวอยางตอไปน

การเรยกใชงานคาสง Write และ WriteLine โดยใชสตรงกาหนดรปแบบ (formatting string) using System; class Hello { static void Main() { int width = 80, height = 30; Console.WriteLine("Area of {0}x{1} rectangle = {2}", width, height, width*height); } }

จะเหนวาสตรงทเปนพารามเตอรตวแรกของคาสง WriteLine นนเปนสตรงทใชสาหรบกาหนดรปแบบในการแสดงผลของนพจนทตามมาอกสามตว สญลกษณ {0} {1} และ {2} คอตาแหนงท C# จะนาคาของนพจน width, height และ width*height มาแทนท

Page 25: คู มืออบรมการเข ียนโปรแกรมด วยภาษา C#weerayuth.in.th/docFiles/cs0.4.pdfแนะนําภาษา C# 1. จุดประสงค

สถาบนสงเสรมการสอนวทยาศาสตรและเทคโนโลย 25

ความรเพมเตม สตรงกาหนดรปแบบ (Formatting String)

การแสดงผลลพธทางจอภาพดวยคาสง Write หรอ WriteLine ทมพารามเตอรมากกวา

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

“{index [,alignment] [:formatSpecifier]}”

จากนนตามดวยลาดบของอารกวเมนต เชน Console.WriteLine(" Two sample integers are {0} and {1}. ", 3, 9)

จะแสดงผลลพธเปน “Two sample integers are 3 and 9”

โดยท index เปนจานวนเตมเรมตนทศนยใชสาหรบระบอารกวเมนตทตองการจะจดรปแบบ เชน ถา index มคาเปน 0 จะหมายถงคาของอารกวเมนตตวแรกจะถกแสดงในตาแหนงท index ปรากฏอย และถา index มคาเปน 1 จะหมายถงคาของอารกวเมนตตวทสองจะถกแสดงในตาแหนงท index ปรากฏอยเปนตน สวน alignment เปนจานวนเตมทใชสาหรบระบความกวางหรอจานวนตวอกษรทจะแสดงผลพรอมกบจดการแสดงผลแบบชดซายหรอชดขวา ถา alignment มคาเปนลบจะจดชดซายและถา alignment มคาเปนบวกจะจดชดขวา และตวสดทาย formatSpecifier คอตวกาหนดรปแบบ (format specifier) ใชสาหรบกาหนดรปแบบการแสดงผลของนพจน เชนแสดงผลลพธของนพจนในรปแบบทศนยมเปนตน สวนเครองหมาย [ ] หมายถงจะมหรอไมมสวนนกได ตวกาหนดรปแบบพนฐานสาหรบตวเลขทสาคญแสดงในตารางตอไปน

ถกนาไปแสดงผล

Page 26: คู มืออบรมการเข ียนโปรแกรมด วยภาษา C#weerayuth.in.th/docFiles/cs0.4.pdfแนะนําภาษา C# 1. จุดประสงค

สถาบนสงเสรมการสอนวทยาศาสตรและเทคโนโลย 26

อกขระกาหนดรปแบบ (Format Character)

ความหมาย

E หรอ e Exponential (แสดงผลในรปแบบตวเลขทางวทยาศาสตร) F หรอ f Fixed-point (แสดงผลในรปแบบทศนยม)

G หรอ g General (แสดงผลในรปแบบทวไป เชนตวเลขจะถกแสดงผลในรปแบบสนทสด)

N หรอ n Number (แสดงผลในรปแบบตวเลขเหมอนกบ Fixed-point แตจะใสเครองหมาย comma คนทก ๆ 3 หลก)

P หรอ p Percentage (ตวเลขจะถกเปลยนอยในรปแบบของเปอรเซนต)

X หรอ x Hexadecimal (แสดงผลในรปแบบของเลขฐานสบหก)

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

ผลลพธจากการรนโปรแกรม

using System; class MainClass {

public static void Main(string[] args) { Console.WriteLine("x = {0} y = {1}",123,456); Console.WriteLine("123456789"); Console.WriteLine("{0,9}", 123); Console.WriteLine("123456789"); Console.WriteLine("{0,-9}", 123); Console.WriteLine("123456789123456789"); Console.WriteLine("{0,-9}{0,9}", 123,456); } }

Page 27: คู มืออบรมการเข ียนโปรแกรมด วยภาษา C#weerayuth.in.th/docFiles/cs0.4.pdfแนะนําภาษา C# 1. จุดประสงค

สถาบนสงเสรมการสอนวทยาศาสตรและเทคโนโลย 27

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

ผลลพธจากการรนโปรแกรม

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

using System; class MainClass {

public static void Main(string[] args) { int n = 123456789; Console.WriteLine("{0:E}", n); Console.WriteLine("{0:F}", n); Console.WriteLine("{0:G}", n); Console.WriteLine("{0:N}", n); Console.WriteLine("{0:P}", n); Console.WriteLine("{0:X}", n); } }

using System; class MainClass {

public static void Main(string[] args) { int n = 123456789; Console.WriteLine("{0,20:E}", n); Console.WriteLine("{0,20:F}", n); Console.WriteLine("{0,20:G}", n); Console.WriteLine("{0,20:N}", n); Console.WriteLine("{0,20:P}", n); Console.WriteLine("{0,20:X}", n); } }

Page 28: คู มืออบรมการเข ียนโปรแกรมด วยภาษา C#weerayuth.in.th/docFiles/cs0.4.pdfแนะนําภาษา C# 1. จุดประสงค

สถาบนสงเสรมการสอนวทยาศาสตรและเทคโนโลย 28

จากโปรแกรมจะกาหนดใหแสดงผลกวาง 20 ตว ผลลพธจากการรนโปรแกรมจะเปนดงน

นอกจากนเรายงสามารถระบจานวนของตวเลขหลงจดทศนยมทตองการแสดงออกทางจอภาพได

โดยใสตวเลขจานวนเตมหลงตวกาหนดรปแบบ เชน Console.WriteLine("{0:F2}", 123.4500); ตวเลข 2 หลงตวอกษร F หมายถงใหแสดงผลตวเลข 123.4500 เปนทศนยมสองตาแหนงนนคอ 123.45

Page 29: คู มืออบรมการเข ียนโปรแกรมด วยภาษา C#weerayuth.in.th/docFiles/cs0.4.pdfแนะนําภาษา C# 1. จุดประสงค

สถาบนสงเสรมการสอนวทยาศาสตรและเทคโนโลย 29

ใบความรท 1.4 การขอความชวยเหลอ

โปรแกรม MS Visual C# 2008 Express (รวมถงโปรแกรมอน ๆ ในชด MS Visual Studio 2008 Express) มการเชอมตอกบระบบไลบรารของ Microsoft Developer Network (MSDN Library) ซงรวบรวมเอกสารเชงเทคนคสาหรบการพฒนาซอฟตแวรบนไมโครซอฟตวนโดวสไวโดยละเอยด หาก MSDN Library ไดถกตดตงไวพรอมกบการตดตง MS Visual C# ผพฒนาโปรแกรมกสามารถเรยก MSDN Library จากเมน Help เพอเปดเอกสารเพออานรายละเอยดคณสมบตและการใชงานคลาสตาง ๆ ทถกเตรยมไวใน .NET Framework ได รปท 1.6 แสดงการเรยกใชงาน MSDN Library จากหนาจอหลกของ MS Visual C# ซงจะไดหนาจอคลายคลงกบรปท 1.7

รปท 1.6 การเรยกใชงาน MSDN Library จากหนาจอหลกของ MS Visual C#

Page 30: คู มืออบรมการเข ียนโปรแกรมด วยภาษา C#weerayuth.in.th/docFiles/cs0.4.pdfแนะนําภาษา C# 1. จุดประสงค

สถาบนสงเสรมการสอนวทยาศาสตรและเทคโนโลย 30

การคนเอกสารจาก MSDN Library นนสามารถทาไดหลายรปแบบ ผพฒนาโปรแกรมอาจเลอกหวขอจากสารบญทางดานซายมอ หรอปอนคาคนในกลอง Search เพอคนหาหวขอทเกยวของ รปท 1.8 แสดงผลลพธจากการคนหาดวยคาคน Math

รปท 1.7 หนาจอของ MSDN Library ในสวนของการคนหา

รปท 1.8 ผลลพธจากการปอนคาคน Math

Page 31: คู มืออบรมการเข ียนโปรแกรมด วยภาษา C#weerayuth.in.th/docFiles/cs0.4.pdfแนะนําภาษา C# 1. จุดประสงค

สถาบนสงเสรมการสอนวทยาศาสตรและเทคโนโลย 31

นอกจากการเขาส MSDN Library ผานทางเมน Help แลว ผพฒนาโปรแกรมยงสามารถคนหารายละเอยดของชอเนมสเปส คลาส คยเวรด หรอเมทอดทตองการไดจากพนทการเขยนโปรแกรมโดยตรง โดยเลอนเคอรเซอรมาวางไวในคาทตองการสบคน แลวกดปม F1 ดงแสดงตวอยางในรปท 1.9 ซงจะไดผลลพธเปนรายการของคลาสทอยในเนมสเปส System ดงรปท 1.10

รปท 1.9 การขอความชวยเหลอโดยใชปม F1

รปท 1.10 รายชอคลาสในเนมสเปซ System หลงใชคาสงคนหาผาน MSDN Library

เลอนเคอรเซอรไวบนคาทตองการคนหา แลวกดปม F1

Page 32: คู มืออบรมการเข ียนโปรแกรมด วยภาษา C#weerayuth.in.th/docFiles/cs0.4.pdfแนะนําภาษา C# 1. จุดประสงค

สถาบนสงเสรมการสอนวทยาศาสตรและเทคโนโลย 32

กจกรรมท 2 ฟงกชนทางคณตศาสตรและการตดตอกบผใช

1. จดประสงค ใหผเรยนสามารถ 1.1 เขยนโปรแกรมเพอตรวจสอบคาของนพจนของซชารป 1.2 แปลงสตรทางคณตศาสตรใหเปนนพจนของซชารป 1.3 เขยนโปรแกรมรบขอมล คานวณ และแสดงผลลพธ

2. แนวคด

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

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

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

3. สออปกรณ

3.1 ใบงาน ใบงานท เรอง เวลา (นาท)

2.1 ฟงกชนทางคณตศาสตร 20 2.2 แกสมการกาลงสอง 20 2.3 คณสมบตของวงกลม 20

Page 33: คู มืออบรมการเข ียนโปรแกรมด วยภาษา C#weerayuth.in.th/docFiles/cs0.4.pdfแนะนําภาษา C# 1. จุดประสงค

สถาบนสงเสรมการสอนวทยาศาสตรและเทคโนโลย 33

3.2 ใบความร - ใบความรท 2.1 เรองฟงกชนทางคณตศาสตร - ใบความรท 2.2 เรองคาสงสาหรบรบขอมลเขา

3.3 อนๆ - เครองคอมพวเตอรเทากบจานวนกลม - โปรแกรมวชวลซชารป เอกเพรส

4. วธดาเนนการ

4.1 การจดเตรยม 4.1.1 แบงผเรยนเปนกลม กลมละ 2 คน 4.1.2 เตรยมใบงานท 2.1 - 2.3 ตามจานวนกลมและใบความรท 2.1 - 2.2 ตามจานวนผเรยน

4.2 ขนตอนการดาเนนการ 4.2.1 ผสอนกลาวถง Class Math ทมเมทอด และคาคงททางคณตศาสตร 4.2.2 ผเรยนแตละคนศกษาใบความรท 2.1 เรองฟงกชนทางคณตศาสตร และใบความรท 2.2

เรองคาสงสาหรบรบขอมลเขา 4.2.3 ผเรยนทาใบงานท 2.1 เรองฟงกชนทางคณตศาสตร จากนนผสอนสมผเรยนออกมานาเสนอ 4.2.4 ผเรยนทาใบงานท 2.2 เรองแกสมการกาลงสอง จากนนผสอนสมผเรยนออกมานาเสนอ 4.2.5 ผเรยนทาใบงานท 2.3 เรองคณสมบตของวงกลม จากนนผสอนสมผเรยนออกมานาเสนอ 4.2.6 ผเรยนและผสอนรวมกนอภปรายและสรปเกยวกบการแปลงสตรทางคณตศาสตรใหเปน

นพจนของซชารป และการเขยนคาสงรบขอมล การคานวณ การแสดงผลขอมล

5. การวดและประเมนผล 5.1 ตรวจคาตอบจากใบงาน

6. แหลงความรเพมเตม

6.1 http://msdn.microsoft.com/th-th/vcsharp/default(en-us).aspx 7. ขอเสนอแนะ 7.1 ผสอนอาจฝกทกษะของผเรยนโดยเพมเตมโจทยทใชสตรตางๆ ในการคานวณ

Page 34: คู มืออบรมการเข ียนโปรแกรมด วยภาษา C#weerayuth.in.th/docFiles/cs0.4.pdfแนะนําภาษา C# 1. จุดประสงค

สถาบนสงเสรมการสอนวทยาศาสตรและเทคโนโลย 34

ใบงานท 2.1 ฟงกชนทางคณตศาสตร

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

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

Math.Abs(-1) |-1| 1 Math.Sqrt(5) Math.Abs(9.5) Math.Pow(5,2) Math.Pow(2,-1) Math.Pow(5,0.5) Math.Pow(Math.Sqrt(2),8) Math.Log(10) Math.Sin(Math.PI/6) Math.Log10(100) 2. แปลงสตรคณตศาสตรในชองดานซายใหเปนนพจนของ C# ทสอดคลองกน และตอบในชองดานขวา

สตรคณตศาสตร นพจนในภาษา C# xy+z Math.Pow(x,y) + z

cos 2π + ln x

|x| + |y| 222 zyx ++

sin2x + cos2x 5 ba + ex ln y

รายชอสมาชกในกลมท…………………. 1. ………………………………………………… 2. …………………………………………………. 3. ………………………………………………… 4. ………………………………………………….

Page 35: คู มืออบรมการเข ียนโปรแกรมด วยภาษา C#weerayuth.in.th/docFiles/cs0.4.pdfแนะนําภาษา C# 1. จุดประสงค

สถาบนสงเสรมการสอนวทยาศาสตรและเทคโนโลย 35

3. ดดแปลงโปรแกรมในตวอยางท 2.2 เพออานเวคเตอรแบบสามมต (x,y,z) จากผใชแทนทจะเปนเพยงเวคเตอรสองมต โดยมผลการทางานตามตวอยาง

Enter x: 1.5 Enter y: 7 Enter z: 12.25 Size of the vector (1.5,7,12.25) is 14.19.

จากนนกรอกโปรแกรมลงในชองวาง

Page 36: คู มืออบรมการเข ียนโปรแกรมด วยภาษา C#weerayuth.in.th/docFiles/cs0.4.pdfแนะนําภาษา C# 1. จุดประสงค

สถาบนสงเสรมการสอนวทยาศาสตรและเทคโนโลย 36

ใบงานท 2.2 แกสมการกาลงสอง

สมการกาลงสอง (Quadratic equation) เปนสมการทสามารถจดใหอยในรป

ax2 + bx + c = 0

โดยรากของสมการสามารถคานวณไดจากสตรดงน

aacbbx

242 −±−

=

จงเขยนโปรแกรมเพอแกสมการกาลงสอง โดยโปรแกรมจะรบคาสมประสทธ a, b และ c จากผใช และคานวณหาราก x โดยใชสตรขางตน ทงนใหรายงานคาของ x ทงสองคาเสมอ แมวาทงคจะมคาเทากนกตาม Enter a: 2 Enter b: 3 Enter c: -20 x = 2.5, -4

คดลอกโปรแกรมลงในชองวาง

รายชอสมาชกในกลมท…………………. 1. ………………………………………………… 2. …………………………………………………. 3. ………………………………………………… 4. ………………………………………………….

Page 37: คู มืออบรมการเข ียนโปรแกรมด วยภาษา C#weerayuth.in.th/docFiles/cs0.4.pdfแนะนําภาษา C# 1. จุดประสงค

สถาบนสงเสรมการสอนวทยาศาสตรและเทคโนโลย 37

ใบงานท 2.3 คณสมบตของวงกลม

เปนททราบกนดวาวงกลมทมรศม r จะมพนทเทากบ πr2 และเสนรอบวงมความยาวเทากบ 2πr

จงเขยนโปรแกรมเพออานคาความยาวเสนรอบวงของวงกลมวงหนง จากนนคานวณและแสดงรศม

และพนทของวงกลมนออกทางหนาจอโดยใหมทศนยมสองตาแหนง Enter the circumference: 25.13274 The radius of the circle is 4.00 The area of the circle is 50.27

คดลอกโปรแกรมลงในชองวาง

r

รายชอสมาชกในกลมท…………………. 1. ………………………………………………… 2. …………………………………………………. 3. ………………………………………………… 4. ………………………………………………….

Page 38: คู มืออบรมการเข ียนโปรแกรมด วยภาษา C#weerayuth.in.th/docFiles/cs0.4.pdfแนะนําภาษา C# 1. จุดประสงค

สถาบนสงเสรมการสอนวทยาศาสตรและเทคโนโลย 38

ใบความรท 2.1 ฟงกชนทางคณตศาสตร

นอกเหนอจากตวดาเนนการทางคณตศาสตร (+ - * / ฯลฯ) ภาษา C# ไดเตรยมคลาส Math ทรวบรวมเมทอด1 และคาคงททางคณตศาสตรทสาคญเอาไวใชงาน ตารางดานลางแสดงตวอยางของฟงกชนและคาคงททเราสามารถเรยกใชงานไดผานคลาส Math คลาสนถกจดไวภายใตเนมสเปส System เชนเดยวกนกบคลาส Console

เมทอด คาทคานวณ Math.Abs(x) คาสมบรณของ x (|x|) Math.Ceiling(x) จานวนเตมทนอยทสดทมากกวาหรอเทากบ x Math.Floor(x) จานวนเตมทมากทสดทนอยกวาหรอเทากบ x Math.Log(x) ลอการธมฐานธรรมชาตของ x Math.Log10(x) ลอการธมฐานสบของ x Math.Round(x) จานวนเตมทใกลกบคา x มากทสด Math.Pow(x,y) x ยกกาลง y (xy) Math.Sqrt(x) รากทสองของ x ( x ) Math.Max(x) คาทมากกวาระหวาง x และ y Math.Min(x) คาทนอยกวาระหวาง x และ y Math.Sin(x) คาไซนของ x (x มหนวยเปนเรเดยน)} Math.Cos(x) คาโคไซนของ x (x มหนวยเปนเรเดยน)}

คาคงท ความหมาย Math.PI คาคงท π ซงมคาประมาณ 3.14159265358979323846 Math.E คาคงท e ซงมคาประมาณ 2.7182818284590452354

1 เมทอดในภาษาเชงวตถหมายถงฟงกชนหรอโปรแกรมยอยทผกตดอยกบคลาสหรอวตถหนง ๆ

Page 39: คู มืออบรมการเข ียนโปรแกรมด วยภาษา C#weerayuth.in.th/docFiles/cs0.4.pdfแนะนําภาษา C# 1. จุดประสงค

สถาบนสงเสรมการสอนวทยาศาสตรและเทคโนโลย 39

ใบความรท 2.2 คาสงสาหรบรบขอมลจากผใช

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

ตวอยางท 2.1 โปรแกรมดานลางจะถามชอจากผใช และกลาวคาทกทายตามชอนน ๆ using System; class SayHello { static void Main() { string name; Console.Write("What is your name? "); name = Console.ReadLine(); Console.WriteLine("Hello {0}, how are you?", name); Console.ReadLine(); } }

นอกจากการรบขอมลแบบขอความแลวโปรแกรมสวนใหญยงตองการรบขอมลทเปนตวเลขเพอนามาคานวณอกดวย อยางไรกตาม ภาษา C# ไมมคาสงทรบขอมลชนดตวเลขโดยตรง แตไดเตรยมเมทอด Parse สาหรบแตละชนดขอมลแบบตวเลขเพอแปลงขอมลชนดขอความใหเปนชนดตวเลขได การใชงานเมทอด Parse เปนดงน <numeric_datatype>.Parse(<string_expression>)

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

Page 40: คู มืออบรมการเข ียนโปรแกรมด วยภาษา C#weerayuth.in.th/docFiles/cs0.4.pdfแนะนําภาษา C# 1. จุดประสงค

สถาบนสงเสรมการสอนวทยาศาสตรและเทคโนโลย 40

ตวอยางท 2.2 เขยนโปรแกรมเพออานเวคเตอรแบบสองมต (x,y) จากผใชแลวคานวณขนาดของเวคเตอรและแสดงผลลพธออกทางหนาจอโดยมทศนยมสองตาแหนง (ใชตวกาหนดรปแบบ {2:f2} แทนทจะเปน {2} เพยงอยางเดยว) using System; class Vector2D { static void Main() { double x, y, size; Console.Write("Enter x: "); x = double.Parse(Console.ReadLine()); Console.Write("Enter y: "); y = double.Parse(Console.ReadLine()); size = Math.Sqrt(x*x + y*y); Console.WriteLine("Size of the vector ({0},{1}) is {2:f2}.", x, y, size); Console.ReadLine(); } }

Page 41: คู มืออบรมการเข ียนโปรแกรมด วยภาษา C#weerayuth.in.th/docFiles/cs0.4.pdfแนะนําภาษา C# 1. จุดประสงค

สถาบนสงเสรมการสอนวทยาศาสตรและเทคโนโลย 41

กจกรรมท 3 คาสงแบบมเงอนไข

1. จดประสงค ใหผเรยนสามารถ 1.1 เขยนโปรแกรมคาสงแบบมเงอนไขโดยใชนพจนทางตรรกศาสตร 1.2 เขยนโปรแกรมโครงสราง if และ if…else 1.3 เขยนโปรแกรมโครงสราง if หลายชน 1.4 เขยนโปรแกรมโครงสราง switch...case

2. แนวคด

โปรแกรมสวนใหญมกประกอบไปดวยชดคาสงทถกเรยกทางานกตอเมอเงอนไข (condition) หนง ๆ เปนจรงหรอเทจเทานน ในภาษา C# มโครงสรางคาสงทรองรบการกาหนดเงอนไขใหกบการทางานของโปรแกรม ซงไดแกโครงสราง if โครงสราง if..else และโครงสราง switch..case การกาหนดคาจรงเทจใหกบเงอนไขทใชในโครงสรางเหลานอาศยนพจนทางตรรกศาสตร (boolean expressions) ซงเปนนพจนทถกตความเปนคาความจรงและใหคาทเปนไปไดเพยงสองคาคอ true (จรง) และ false (เทจ) นพจนทางตรรกศาสตรมบทบาทอยางมากในการกาหนดเงอนไขใหกบคาสงแบบมเงอนไข

โครงสราง if เปนโครงสรางทใชควบคมการทางานของคาสงอน ๆ ภายใตเงอนไข (condition) ทกาหนด การใชงานนนมสองรปแบบคราว ๆ ไดแก โครงสราง if ทคาสง statement จะถกเรยกทางานกตอเมอนพจนทางตรรกศาสตรทกาหนดเปน condition มคาเปนจรง และ โครงสราง if...else ทคาสง statement1 จะถกเรยกทางานเมอนพจนในตาแหนง condition มคาเปนจรง หากนพจนดงกลาวมคาเปนเทจ คาสง statement2 จะถกเรยกทางานแทน

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

ภาษา C# ไดเตรยมโครงสราง switch...case เพอใชในการจดการเงอนไขหลายเงอนไขโดยเฉพาะ โดยทาไดเหมอนโครงสราง if แบบหลายชน โดยการตรวจสอบคาของ expression และโปรแกรมจะกระโดดไปทางาน ณ คาสง case ทระบคาของ constant-expression ไวตรงกบคาของ expression ทประเมนได คาสงตาง ๆ ทอยถดจากคาสง case นน ๆ จะถกเรยกใชงานตามลาดบไปเรอย ๆ จนกวาโปรแกรมจะพบคาสง break ซงมผลทาใหโปรแกรมหยดการทางาน

Page 42: คู มืออบรมการเข ียนโปรแกรมด วยภาษา C#weerayuth.in.th/docFiles/cs0.4.pdfแนะนําภาษา C# 1. จุดประสงค

สถาบนสงเสรมการสอนวทยาศาสตรและเทคโนโลย 42

3. สออปกรณ

3.1 ใบงาน ใบงานท เรอง เวลา (นาท)

3.1 การตรวจสอบคาความจรง 10 3.2 ระบบจตภาค 15 3.3 ดชนมวลกาย 15 3.4 สงหนงสอ 30 3.5 เครองคดเลขรนใหม 30

3.2 ใบความร - ใบความรท 3.1 เรองนพจนทางตรรกศาสตร - ใบความรท 3.2 เรองโครงสราง if และ if...else - ใบความรท 3.3 เรองโครงสราง if หลายชน - ใบความรท 3.4 เรองโครงสราง switch...case

3.3 อนๆ - เครองคอมพวเตอรเทากบจานวนกลม - โปรแกรมวชวลซชารป เอกเพรส

4. วธดาเนนการ

4.1 การจดเตรยม 4.1.1 แบงผเรยนเปนกลม กลมละ 2 คน 4.1.2 เตรยมใบงานท 3.1 - 3.5 ตามจานวนกลมและใบความรท 3.1 – 3.3 ตามจานวนผเรยน

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

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

4.2.3 ผเรยนศกษาใบความรท 3.1 เรองนพจนทางตรรกศาสตร จากนนใหผเรยนแตละกลมชวยกนทาใบงานท 3.1 เรองการตรวจสอบคาความจรง ซงใหอธบายเงอนไขทจะทาใหนพจนทางตรรกศาสตรในแตละขอมคาเปนจรง

Page 43: คู มืออบรมการเข ียนโปรแกรมด วยภาษา C#weerayuth.in.th/docFiles/cs0.4.pdfแนะนําภาษา C# 1. จุดประสงค

สถาบนสงเสรมการสอนวทยาศาสตรและเทคโนโลย 43

4.2.4 ผเรยนศกษาใบความรท 3.2 เรองโครงสราง if และ if...else และทาใบงานท 3.2 เรองระบบจตภาค โดยใหเตมนพจนทางตรรกศาสตรในคาสงเงอนไขเพอใหโปรแกรมทางานไดตามทกาหนด

4.2.5 ผเรยนและผสอนรวมกนเฉลยใบงานท 3.1 และ 3.2 พรอมตรวจใหคะแนน 4.2.6 ผเรยนแตละกลมศกษาใบความรท 3.3 เรองโครงสราง if หลายชน จากนนใหทาใบงานท

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

4.2.7 ผเรยนแตละกลมศกษาใบความรท 3.4 เรองโครงสราง switch...case และชวยกนทาใบงานท 3.5 เรองเครองคดเลขรนใหม โดยใหฝกเขยนโปรแกรมโดยแกไขโปรแกรมเครองคดเลขจากตวอยางท 3.6 เพอใหโปรแกรมรองรบตวดาเนนการเพมอกสามตวคอ *, / ,และ ^ ผสอนตรวจสอบการฝกเขยนโปรแกรมจากหนาจอคอมพวเตอรของแตละกลม พรอมใหคะแนน และคาแนะนา

4.2.8 ผสอนสมกลมผเรยนมานาเสนอวธคด ออกแบบโปรแกรม พรอมอภปรายถงขอดขอเสยของผลทได

5. การวดและประเมนผล

5.1 ตรวจคาตอบจากใบงาน 6. แหลงความรเพมเตม

6.1 http://msdn.microsoft.com/th-th/vcsharp/default(en-us).aspx 7. ขอเสนอแนะ -

Page 44: คู มืออบรมการเข ียนโปรแกรมด วยภาษา C#weerayuth.in.th/docFiles/cs0.4.pdfแนะนําภาษา C# 1. จุดประสงค

สถาบนสงเสรมการสอนวทยาศาสตรและเทคโนโลย 44

ใบงานท 3.1 การตรวจสอบคาความจรง

ใหผเรยนศกษาใบความรท 3.1 แลวตอบคาถามตอไปน

กาหนดให x, y และ z เปนตวแปรชนด int,

c เปนชนด char

และ s เปนชนด string

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

นพจน เงอนไขททาใหนพจนนเปนจรง x > 2 x มคามากกวา 2 x%2 == 0 x เปนจานวนค (x%5 == 0) (x%y == 0) ((x%y == 0) && (z%y == 0)) ch == 'a' ((c >= 'a') && (c <= 'z')) ((c >= 'A') && (c <= 'Z')) ((c >= '0') && (c <= '9')) c เปนอกขระระหวาง '0' ถง '9' (s != "Hello") !(s != "Arthur")

รายชอสมาชกในกลมท…………………. 1. ………………………………………………… 2. …………………………………………………. 3. ………………………………………………… 4. ………………………………………………….

Page 45: คู มืออบรมการเข ียนโปรแกรมด วยภาษา C#weerayuth.in.th/docFiles/cs0.4.pdfแนะนําภาษา C# 1. จุดประสงค

สถาบนสงเสรมการสอนวทยาศาสตรและเทคโนโลย 45

ใบงานท 3.2 ระบบจตภาค

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

โปรแกรม (ทยงไมสมบรณ) ดานลางจะรบขอมลเปนตวเลขจานวนจรงสองคาเพอระบพกด (x,y)

และรายงานวาพกดนตกอยในจตภาค (quadrant) ใด หากพกดทปอนเขามาตกอยบนแกน x หรอแกน y โปรแกรมจะแสดงขอความ I don't know. using System; class Quadrant { static void Main() { Console.Write("Enter X: "); int x = int.Parse(Console.ReadLine()); Console.Write("Enter Y: "); int y = int.Parse(Console.ReadLine()); if (___(a)___) Console.WriteLine("({0},{1}) is in Q1.", x, y); if (___(b)___) Console.WriteLine("({0},{1}) is in Q2.", x, y); if (___(c)___) Console.WriteLine("({0},{1}) is in Q3.", x, y); if (___(d)___) Console.WriteLine("({0},{1}) is in Q4.", x, y); if (___(e)___) Console.WriteLine("I don't know."); } }

Q4

Q2

Q3

Q1 X

Y

รายชอสมาชกในกลมท…………………. 1. ………………………………………………… 2. …………………………………………………. 3. ………………………………………………… 4. ………………………………………………….

Page 46: คู มืออบรมการเข ียนโปรแกรมด วยภาษา C#weerayuth.in.th/docFiles/cs0.4.pdfแนะนําภาษา C# 1. จุดประสงค

สถาบนสงเสรมการสอนวทยาศาสตรและเทคโนโลย 46

ตวอยางผลการทางาน Please input X: -50 Please input Y: 10 (-50, 10) is in Q2.

Please input X: 0 Please input Y: 50 I don't know.

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

ชองวาง นพจนทางตรรกศาสตร __(a)__ __(b)__ __(c)__ __(d)__ __(e)__

Page 47: คู มืออบรมการเข ียนโปรแกรมด วยภาษา C#weerayuth.in.th/docFiles/cs0.4.pdfแนะนําภาษา C# 1. จุดประสงค

สถาบนสงเสรมการสอนวทยาศาสตรและเทคโนโลย 47

ใบงานท 3.3 ดชนมวลกาย

ใหผเรยนศกษาใบความรท 3.3 แลวเขยนโปรแกรมจากโจทยทกาหนดใหตอไปน ดชนมวลกาย (BMI : Body mass index) เปนคาดชนทคานวณความสมดลของนาหนกและสวนสงเพอ

นามาเปนตวชวดระดบความอวนผอมของมนษย โดยคานวณจากการนานาหนก (กโลกรม) มาหารดวยกาลงสองของสวนสง (เมตร)

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

คาดชนมวลกาย การประเมนคา นอยกวา 18.5 นาหนกตากวาเกณฑ (Underweight) ตงแต 18.5 แตนอยกวา 25 ปกต (Normal) ตงแต 25 แตนอยกวา 30 นาหนกมากกวาเกณฑ (Overweight) ตงแต 30 ขนไป โรคอวน (Obese)

เตมคาตอบทถกตองลงในชองวางทเวนไว เพอใหโปรแกรมทางานไดอยางสมบรณ using System; class BMICalc { static void Main() { Console.Write("Enter your weight (in kg): "); double w = double.Parse(Console.ReadLine()); Console.Write("Enter your height (in m): "); double h = double.Parse(Console.ReadLine()); double bmi = w/(h*h); Console.WriteLine("Your BMI is {0:f2}.", bmi); if (___(a)___) Console.WriteLine("You are underweight."); else if (___(b)___) Console.WriteLine("You are normal."); else if (___(c)___) Console.WriteLine("You are overweight."); else Console.WriteLine("You are obese."); } }

รายชอสมาชกในกลมท…………………. 1. ………………………………………………… 2. …………………………………………………. 3. ………………………………………………… 4. ………………………………………………….

Page 48: คู มืออบรมการเข ียนโปรแกรมด วยภาษา C#weerayuth.in.th/docFiles/cs0.4.pdfแนะนําภาษา C# 1. จุดประสงค

สถาบนสงเสรมการสอนวทยาศาสตรและเทคโนโลย 48

ตวอยางผลการทางาน Enter your weight: 65 Enter your height: 1.75 Your BMI is 21.22. You are normal.

Enter your weight: 100 Enter your height: 1.60 Your BMI is 39.06. You are obese.

ชองวาง คาตอบ

__(a)__ __(b)__ __(c)__

Page 49: คู มืออบรมการเข ียนโปรแกรมด วยภาษา C#weerayuth.in.th/docFiles/cs0.4.pdfแนะนําภาษา C# 1. จุดประสงค

สถาบนสงเสรมการสอนวทยาศาสตรและเทคโนโลย 49

ใบงานท 3.4 สงหนงสอ

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

ประเภทบรการ นาหนก อตราคาสง (บาท/กรม) ธรรมดา (Regular) 2000 กรมแรก 0.25 ธรรมดา (Regular) สวนทเกน 2000 กรม 0.35 ดวน (Express) ใชอตราเดยวกบบรการแบบธรรมดา แตเพมคาธรรมเนยมอก 50 บาท

สมมตวาลกคาสงหนงสอทมนาหนก 4.5 กก. และเลอกบรการการสงแบบธรรมดาเราสามารถคานวณคาสงไดดงน

คาสง = (2000 กรม × 0.25 บาท/กรม) + (2500 กรม × 0.35 บาท/กรม) = 500 บาท + 875 บาท = 1375 บาท

ตวอยางผลการทางาน Choose service (R-Regular, X-Express): R Enter the package's weight (kilograms): 4.5 Your shipping cost is 1375.00 baht.

Choose service (R-Regular, X-Express): Y Invalid service!!

รายชอสมาชกในกลมท…………………. 1. ………………………………………………… 2. …………………………………………………. 3. ………………………………………………… 4. ………………………………………………….

Page 50: คู มืออบรมการเข ียนโปรแกรมด วยภาษา C#weerayuth.in.th/docFiles/cs0.4.pdfแนะนําภาษา C# 1. จุดประสงค

สถาบนสงเสรมการสอนวทยาศาสตรและเทคโนโลย 50

จากนนคดลอกโปรแกรมลงในชองวาง

Page 51: คู มืออบรมการเข ียนโปรแกรมด วยภาษา C#weerayuth.in.th/docFiles/cs0.4.pdfแนะนําภาษา C# 1. จุดประสงค

สถาบนสงเสรมการสอนวทยาศาสตรและเทคโนโลย 51

ใบงานท 3.5 เครองคดเลขรนใหม

1. การเตรยมตว ใหผเรยนศกษาใบความรท 3.4 แลวเขยนโปรแกรมจากโจทยทกาหนดใหตอไปน แกไขโปรแกรมเครองคดเลขจากตวอยางท 3.6 เพอใหโปรแกรมรองรบตวดาเนนการเพมอกสามตวคอ *, /, และ ^ ซงคานวณการคณ (x × y) การหาร (x ÷ y) และยกกาลง (xy) ตามลาดบ ดงตวอยางผลลพธ Enter the first number: 5.2 Enter the second number: 3 Enter the operator: ^ 5.2^3 = 140.608

Enter the first number: 1 Enter the second number: 2 Enter the operator: @ Invalid operator!

จากนนคดลอกโปรแกรมลงในชองวาง

รายชอสมาชกในกลมท…………………. 1. ………………………………………………… 2. …………………………………………………. 3. ………………………………………………… 4. ………………………………………………….

Page 52: คู มืออบรมการเข ียนโปรแกรมด วยภาษา C#weerayuth.in.th/docFiles/cs0.4.pdfแนะนําภาษา C# 1. จุดประสงค

สถาบนสงเสรมการสอนวทยาศาสตรและเทคโนโลย 52

ใบความรท 3.1 นพจนทางตรรกศาสตร

นพจนทางตรรกศาสตร (boolean expressions) เปนนพจนทถกตความเปนคาความจรง ซงใหคาทเปนไปไดเพยงสองคาคอ true (จรง) และ false (เทจ) นพจนทางตรรกศาสตรมบทบาทอยางมากในการกาหนดเงอนไขใหกบคาสงแบบมเงอนไข ซงภาษา C# อนญาตใหเราสรางนพจนเหลานไดจากการผสมนพจนทางคณตศาสตร (หรอแมแตนพจนแบบอกขระและนพจนแบบขอความ) เขาดวยกนโดยอาศยตวดาเนนการเปรยบเทยบดงน

การเปรยบเทยบ สญลกษณใน C# ตวอยาง ชนดขอมลทใชได ความหมาย

= == x == y ตวเลขทกชนด, char, string x เทากบ y

≠ != x != y ตวเลขทกชนด, char, string x ไมเทากบ y

< < x < y ตวเลขทกชนด, char x นอยกวา y

≤ <= x <= y ตวเลขทกชนด, char x นอยกวาหรอเทากบ y

> > x > y ตวเลขทกชนด, char x มากกวา y

≥ >= x >= y ตวเลขทกชนด, char x มากกวาหรอเทากบ y

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

• && เชอมนพจนทางตรรกศาสตรสองนพจนเขาดวยกนโดยใชตรรกแบบ "และ" (AND) ตวอยางเชน (x>1) && (x<10) จะใหคาจรงเมอตวแปร x มคาอยระหวาง 1 ถง 10

• || เชอมนพจนทางตรรกศาสตรสองนพจนเขาดวยกนโดยใชตรรกแบบ "หรอ" (OR) ตวอยางเชน (x<1) || (x>10) จะใหคาจรงเมอตวแปร x มคานอยกวา 1 หรอมากกวา 10

• ! กลบคาความจรงของนพจนทางตรรกศาสตร ตวอยางเชน !(x==1) จะเปนจรงเมอตวแปร x มคาไมเทากบ 1

Page 53: คู มืออบรมการเข ียนโปรแกรมด วยภาษา C#weerayuth.in.th/docFiles/cs0.4.pdfแนะนําภาษา C# 1. จุดประสงค

สถาบนสงเสรมการสอนวทยาศาสตรและเทคโนโลย 53

ใบความรท 3.2 โครงสราง if และ if...else

โครงสราง if เปนโครงสรางทใชควบคมการทางานของคาสงอน ๆ ภายใตเงอนไข (condition) ทกาหนด การใชงานนนมสองรปแบบคราว ๆ ไดแก

• รปแบบท 1: โครงสราง if จากการใชงานดานลาง คาสง statement จะถกเรยกทางานกตอเมอนพจนทางตรรกศาสตรทกาหนดเปน condition มคาเปนจรง if (condition) statement; // executed if the condition is true

เนองจากโครงสรางขางตนอนญาตใหเรากาหนดเงอนไขใหกบคาสงเพยงคาสงเดยวเทานน อยางไรกตาม หากมคาสงมากกวาหนงภายใตเงอนไขเดยวกน คาสงเหลานสามารถถกจดกลมใหเปนเสมอนคาสงเดยวไดโดยการครอบคาสงทงหมดดวยวงเลบปกกา ({...}) if (condition) { statement1; // executed if the condition is true statement2; // executed if the condition is true statement3; // executed if the condition is true : }

• รปแบบท 2: โครงสราง if...else

คาสง statement1 จะถกเรยกทางานเมอนพจนในตาแหนง condition มคาเปนจรง หากนพจนดงกลาวมคาเปนเทจ คาสง statement2 จะถกเรยกทางานแทน if (condition) statement1; //executed if the condition is true else statement2; //executed if the condition is false

และเชนเคย เราสามารถใชงานโครงสราง if...else รวมกบวงเลบปกกาหากมคาสงทตองการใหทางานภายใตเงอนไขมากกวาหนง if (condition) { statementT1; //executed if the condition is true statementT2; //executed if the condition is true } else { statementF1; //executed if the condition is false statementF2; //executed if the condition is false }

Page 54: คู มืออบรมการเข ียนโปรแกรมด วยภาษา C#weerayuth.in.th/docFiles/cs0.4.pdfแนะนําภาษา C# 1. จุดประสงค

สถาบนสงเสรมการสอนวทยาศาสตรและเทคโนโลย 54

ตวอยางท 3.1 รหสจาลอง (pseudo-code) ดานลางอธบายขนตอนวธสาหรบใหโปรแกรมพมพคาวา Passed หากคะแนนของนกเรยนมคามากกวาหรอเทากบ 60 ไมเชนนนใหพมพคาวา Failed if student's score is greater than or equal to 60 Print "Passed" otherwise Print "Failed"

เราสามารถนารหสจาลองขางตนมาเขยนเปนโปรแกรมภาษา C# ไดดงน (แสดงเพยงสวนสาคญเทานน) if (score >= 60) Console.WriteLine("Passed"); else Console.WriteLine("Failed");

เนองจากคยเวรด else เปนตวกาหนดใหการพมพคาวา Failed ทางานเมอเงอนไข score >= 60 เปนเทจ ดงนนหากเราแทนท else ดวยคาสง if และใชเงอนไขทตรงขามกนคอ score < 60 โปรแกรมกจะมการทางานเหมอนกบโปรแกรมขางบนทกประการ if (score >= 60) Console.WriteLine("Passed"); if (score < 60) Console.WriteLine("Failed");

ตวอยางท 3.2 โปรแกรมตอไปนจะรอรบตวเลขจากผใชและใหคาตอบวาตวเลขนน ๆ เปนเลขค (even) หรอเลขค (odd)

• ใชรปแบบ if using System; class OddOrEven { static void Main() { int N; Console.Write("Please input N: "); N = int.Parse(Console.ReadLine()); if (N%2 == 0) Console.WriteLine("{0} is even", N); //true if (N%2 != 0) Console.WriteLine("{0} is odd", N); //true } }

Page 55: คู มืออบรมการเข ียนโปรแกรมด วยภาษา C#weerayuth.in.th/docFiles/cs0.4.pdfแนะนําภาษา C# 1. จุดประสงค

สถาบนสงเสรมการสอนวทยาศาสตรและเทคโนโลย 55

• ใชรปแบบ if...else using System; class OddOrEven { static void Main() { int N; Console.Write("Please input N: "); N = int.Parse(Console.ReadLine()); if (N%2 == 0) Console.WriteLine("{0} is even", N); //true else Console.WriteLine("{0} is odd", N); //false } }

ตวอยางท 3.3 บรษทโทรศพทมอถอแหงหนงเสนอโปรโมชนใหกบลกคาโดยมการคานวณคาธรรมเนยมการใชงานดงน

• สองนาทแรก คดนาทละหาบาท • นาทถดมาคดนาทละสองบาท

โปรแกรมดานลางจะรบคาจานวนนาทจากผใช และคานวณคาธรรมเนยมการใชงาน นอกจากนภายในโปรแกรมยงมคอมเมนตกากบเอาไวหลายจดเพออธบายการทางานของโปรแกรมในสวนตาง ๆ using System; class Cellphone { static void Main() { // Step 1: Take the number of minutes input Console.Write("Enter the number of minutes: "); int minutes = int.Parse(Console.ReadLine()); // Step 2: Split the number of minutes into two parts, // the first two and the remaining int first, remaining; if (minutes > 2) { // Step 2.1: If the call takes more than two minutes, // then the first two minutes is used entirely and the // remaining is minutes subtracted by two first = 2; remaining = minutes - 2; } else { // Step 2.2: If the call takes less than 2 minutes, // these minutes are considered part of the first two first = minutes; remaining = 0; } // Step 3: Compute the fee based on the number of minutes // during the first two minutes, and the number of minutes // after the first two minutes int fee = (first*5) + (remaining*2); Console.WriteLine("The air time fee is {0} baht.", fee); } }

Page 56: คู มืออบรมการเข ียนโปรแกรมด วยภาษา C#weerayuth.in.th/docFiles/cs0.4.pdfแนะนําภาษา C# 1. จุดประสงค

สถาบนสงเสรมการสอนวทยาศาสตรและเทคโนโลย 56

ตวอยางผลการทางาน Enter the number of minutes: 1 The air time fee is 5 baht.

Enter the number of minutes: 5 The air time fee is 16 baht.

Page 57: คู มืออบรมการเข ียนโปรแกรมด วยภาษา C#weerayuth.in.th/docFiles/cs0.4.pdfแนะนําภาษา C# 1. จุดประสงค

สถาบนสงเสรมการสอนวทยาศาสตรและเทคโนโลย 57

ใบความรท 3.3 โครงสราง if หลายชน

ในบางโปรแกรม เราจาเปนตองเขยนโครงสราง if (หรอ if...else) ซอนไวภายใตโครงสรางของคาสง if อกอนหนง โดยเฉพาะอยางยงโปรแกรมทตองตรวจสอบเงอนไขมากกวาสองเงอนไข ซงมรปแบบการใชงานโดยทวไปดงน if (condition1) statement1; else if (condition2) statement2; else if (condition3) statement3; : else statementN;

จากรปแบบดานบน statement1 จะถกเรยกทางานเมอเงอนไข condition1 เปนจรง ลองพจารณา statement2 จะเหนวามนถกควบคมดวยเงอนไข condition2 และยงอยภายใต else ของโครงสราง if อนบนสด จงทาให statement2 นถกเรยกทางานเมอเงอนไข condition2 เปนจรงและเงอนไข condition1 เปนเทจเทานน ในทานองเดยวกน คาสง condition3 จะถกเรยกทางานเมอเงอนไข condition1 และ condition2 ทงคเปนเทจ และเงอนไข condition3 เปนจรงเทานน และสดทายคอ statementN ซงจะถกเรยกทางานเมอเงอนไขทงหมดขางตนเปนเทจ

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

ไดคะแนนนอยกวา 50 F ไดคะแนนตงแต 50 แตนอยกวา 60 D ไดคะแนนตงแต 60 แตนอยกวา 70 C ไดคะแนนตงแต 70 แตนอยกวา 80 B ไดคะแนนตงแต 80 ขนไป A

Page 58: คู มืออบรมการเข ียนโปรแกรมด วยภาษา C#weerayuth.in.th/docFiles/cs0.4.pdfแนะนําภาษา C# 1. จุดประสงค

สถาบนสงเสรมการสอนวทยาศาสตรและเทคโนโลย 58

เราสามารถเขยนโปรแกรมเพอทางานดงกลาวโดยใชโครงสราง if หลายชนดงน if (point < 50) Console.WriteLine("Grade F"); else if (point < 60) Console.WriteLine("Grade D"); else if (point < 70) Console.WriteLine("Grade C"); else if (point < 80) Console.WriteLine("Grade B"); else Console.WriteLine("Grade A");

Page 59: คู มืออบรมการเข ียนโปรแกรมด วยภาษา C#weerayuth.in.th/docFiles/cs0.4.pdfแนะนําภาษา C# 1. จุดประสงค

สถาบนสงเสรมการสอนวทยาศาสตรและเทคโนโลย 59

ใบความรท 3.4 โครงสราง switch...case

ถงแมวาการจดการเงอนไขหลาย ๆ เงอนไขในคราวเดยวกนจะสามารถทาไดโดยอาศยโครงสราง if แบบหลายชน ภาษา C# ยงไดเตรยมโครงสราง switch...case เพอใชในการจดการเงอนไขหลายเงอนไขโดยเฉพาะ การใชงานโครงสราง switch...case อยในรปแบบดงน switch (expression) { case constant-expression-1: statements; break; case constant-expression-2: statements; break; case constant-expression-3: statements; break; : default: statements; break; }

ภาษา C# ยอมใหนพจนทใชในตาแหนง expression เปนนพจนแบบจานวนเตม (integer) แบบอกขระ (char) หรอแบบขอความ (string) เทานน หลงจากทคาของ expression ถกตรวจสอบ โปรแกรมจะกระโดดไปทางาน ณ คาสง case ทระบคาของ constant-expression ไวตรงกบคาของ expression ทประเมนได คาสงตาง ๆ ทอยถดจากคาสง case นน ๆ จะถกเรยกใชงานตามลาดบไปเรอย ๆ จนกวาโปรแกรมจะพบคาสง break ซงมผลทาใหโปรแกรมหยดการทางานภายในโครงสราง switch...case นนและกระโดดไปยงคาสงทตอไปนอกโครงสราง หากไมพบ constant-expression ใดทมคาตรงกบ expression โปรแกรมจะกระโดดไปยงจดทมการระบดวยคาสง default

Page 60: คู มืออบรมการเข ียนโปรแกรมด วยภาษา C#weerayuth.in.th/docFiles/cs0.4.pdfแนะนําภาษา C# 1. จุดประสงค

สถาบนสงเสรมการสอนวทยาศาสตรและเทคโนโลย 60

ตวอยางท 3.5 โปรแกรมตอไปนแสดงแตมคะแนนตามระดบคะแนน (A,B,C,D,F) ทปอนโดยผใช ระดบคะแนน (grade) แตมระดบคะแนน (grade point)

A 4.0 B 3.0 C 2.0 D 1.0 F 0.0

using System; class GradePoint { static void Main() { string grade; Console.Write("Please input your grade: "); grade = Console.ReadLine(); switch (grade) { case "A" : Console.WriteLine("Your point is 4.0."); break; case "a" : Console.WriteLine("Your point is 4.0."); break; case "B" : Console.WriteLine("Your point is 3.0."); break; case "b" : Console.WriteLine("Your point is 3.0."); break; case "C" : Console.WriteLine("Your point is 2.0."); break; case "c" : Console.WriteLine("Your point is 2.0."); break; case "D" : Console.WriteLine("Your point is 1.0."); break; case "d" : Console.WriteLine("Your point is 1.0."); break; case "F" : Console.WriteLine("Your point is 0.0."); break; case "f" : Console.WriteLine("Your point is 0.0."); break; default: Console.WriteLine("Invalid input!!"); break; } } }

ตวอยางผลการทางาน Please input your grade: A Your point is 4.0.

Please input your grade: B Your point is 3.0.

Please input your grade: e Invalid input!!

Page 61: คู มืออบรมการเข ียนโปรแกรมด วยภาษา C#weerayuth.in.th/docFiles/cs0.4.pdfแนะนําภาษา C# 1. จุดประสงค

สถาบนสงเสรมการสอนวทยาศาสตรและเทคโนโลย 61

แมวาโปรแกรมขางตนจะทางานไดอยางถกตอง โปรแกรมดงกลาวยงคอนขางยาวอกทงโปรแกรมยงมคาสงทถกใชซา ๆ กนอยหลายแหงเนองจากการปอนระดบคะแนนดวยตวอกษรตวใหญและตวเลกจะใหผลเหมอนกน ภาษา C# อนญาตใหคาสง case หลาย ๆ คาสงควบคมชดคาสงรวมกนไดดงตวอยาง using System; class GradePoint { static void Main() { string grade; Console.Write("Please input your grade: "); grade = Console.ReadLine(); switch (grade) { case "A" : case "a" : Console.WriteLine("Your point is 4.0."); break; case "B" : case "b" : Console.WriteLine("Your point is 3.0."); break; case "C" : case "c" : Console.WriteLine("Your point is 2.0."); break; case "D" : case "d" : Console.WriteLine("Your point is 1.0."); break; case "F" : case "f" : Console.WriteLine("Your point is 0.0."); break; default: Console.WriteLine("Invalid input!!"); break; } } }

โปรแกรมนยงสามารถทาใหสนลงไดอกโดยการใชตวแปรเสรมอกตวเพอเกบแตมระดบคะแนน แลวจงนาคาของตวแปรพมพออกทางหนาจอโดยใชคาสง Console.WriteLine ในคราวเดยวกอนจบโปรแกรม ดงแสดง using System; class GradePoint { static void Main() { string grade; double point = -1; Console.Write("Please input your grade: "); grade = Console.ReadLine(); switch (grade) { case "A" : case "a" : point = 4.0; break; case "B" : case "b" : point = 3.0; break; case "C" : case "c" : point = 2.0; break; case "D" : case "d" : point = 1.0; break; case "F" : case "f" : point = 0.0; break; default: Console.WriteLine("Invalid input!!"); break; } if (point >= 0) Console.WriteLine("Your point is {0:f1}.", point); } }

Page 62: คู มืออบรมการเข ียนโปรแกรมด วยภาษา C#weerayuth.in.th/docFiles/cs0.4.pdfแนะนําภาษา C# 1. จุดประสงค

สถาบนสงเสรมการสอนวทยาศาสตรและเทคโนโลย 62

ตวอยางท 3.6 โปรแกรมตอไปนเปนโปรแกรมเครองคดเลขอยางงาย เมอเรมทางานโปรแกรมจะใหผใชปอนคาตวเลขจานวนจรงสองคา พรอมระบตวดาเนนการทางคณตศาสตรทตองการโดยเปนไดเพยง + หรอ - จากนนโปรแกรมจะแสดงผลลพธจากการคานวณ หากผใชปอนตวดาเนนการอนนอกเหนอจาก + หรอ - โปรแกรมจะรายงานความผดพลาด 1: using System; 2: class Calculator { 3: static void Main() { 4: double n1, n2, ans = 0; 5: char op; 6: Console.Write("Enter the first number: "); 7: n1 = double.Parse(Console.ReadLine()); 8: Console.Write("Enter the second number: "); 9: n2 = double.Parse(Console.ReadLine()); 10: Console.Write("Enter the operator: "); 11: op = char.Parse(Console.ReadLine()); 12: switch(op) { 13: case '+': ans = n1+n2; break; 14: case '-': ans = n1-n2; break; 15: default: op = ' '; break; 16: } 17: if (op == ' ') 18: Console.WriteLine("Invalid operator!"); 19: else 20: Console.WriteLine("{0}{1}{2} = {3}", n1, op, n2, ans); 21: } 22: }

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

ตวอยางผลการทางาน Enter the first number: 8 Enter the second number: 10 Enter the operator: + 8+10 = 18

Page 63: คู มืออบรมการเข ียนโปรแกรมด วยภาษา C#weerayuth.in.th/docFiles/cs0.4.pdfแนะนําภาษา C# 1. จุดประสงค

สถาบนสงเสรมการสอนวทยาศาสตรและเทคโนโลย 63

กจกรรมท 4 คาสงวนซา

1. จดประสงค ใหผเรยนสามารถ 1.1 อธบายโครงสรางของการเขยนโปรแกรมแบบวนซา 1.2 เขยนโปรแกรมคาสงวนซาโครงสรางแบบ while 1.3 เขยนโปรแกรมคาสงวนซาโครงสรางแบบ do..while 1.4 เขยนโปรแกรมคาสงวนซาโครงสรางแบบ for

2. แนวคด

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

โครงสราง while ลปเปนโครงสรางแบบงายทสดทสามารถนามาใชเขยนโปรแกรมเพอวนทาคาสง) หรอกลมของคาสง (ซาหลาย ๆ รอบ

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

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

Page 64: คู มืออบรมการเข ียนโปรแกรมด วยภาษา C#weerayuth.in.th/docFiles/cs0.4.pdfแนะนําภาษา C# 1. จุดประสงค

สถาบนสงเสรมการสอนวทยาศาสตรและเทคโนโลย 64

3. สออปกรณ 3.1 ใบงาน

ใบงานท เรอง เวลา (นาท) 4.1 ผลรวมตวเลข 20 4.2 สถตคะแนนสอบ 30 4.3 ลาดบตวเลข 20 4.4 จานวนเฉพาะ 20 4.5 กลมดาวสามเหลยม 20

3.2 ใบความร - ใบความรท 4 .1 เรองโครงสราง While ลป - ใบความรท 4.2 เรองโครงสราง do…while ลป - ใบความรท 4.3 เรองโครงสราง for ลป

3.3 อนๆ - เครองคอมพวเตอรเทากบจานวนกลม - โปรแกรมวชวลซชารป เอกเพรส

4. วธดาเนนการ

4.1 การจดเตรยม 4.1.1 แบงผเรยนเปนกลม กลมละ 2 คน 4.1.2 เตรยมใบงานท 4.1 - 4.5 ตามจานวนกลมและใบความรท 4.1 – 4.3 ตามจานวนผเรยน

4.2 ขนตอนการดาเนนการ 4.2.1 ผสอนกลาวถงการเขยนโปรแกรมโครงสราง While, do…while และ for 4.2.2 ผเรยนแตละคนศกษาใบความรท 4.1 เรองโครงสราง While ลป และทาใบงานท 4.1 เรอง

ผลรวมตวเลข 4.2.3 ผสอนสมผเรยนออกมานาเสนอคาตอบในใบงานท 4.1 4.2.4 ผเรยนแตละกลมศกษาใบความรท 4.2 เรองโครงสราง do…while ลป และทาใบงานท 4.2

เรองสถตคะแนนสอบ จากนนผสอนสมกลมผเรยนออกมานาเสนอ 4.2.5 ผเรยนแตละคนทาศกษาใบความรท 4.3 เรองโครงสราง for ลป และทาใบงานท 4.3 เรอง

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

ลกษณะงาน หรอสถานการณใดบาง เพอการเลอกใชคาสงทเหมาะสมกบงาน

Page 65: คู มืออบรมการเข ียนโปรแกรมด วยภาษา C#weerayuth.in.th/docFiles/cs0.4.pdfแนะนําภาษา C# 1. จุดประสงค

สถาบนสงเสรมการสอนวทยาศาสตรและเทคโนโลย 65

4.2.7 ผเรยนแตละกลมทาใบงานท 4.4 เรองจานวนเฉพาะ จากนนผสอนสมกลมผเรยนออกมานาเสนอ

4.2.8 ผเรยนแตละกลมทาใบงานท 4.5 เรองกลมดาวสามเหลยม จากนนผสอนสมผเรยนออกมานาเสนอ

4.2.9 ผเรยนและผสอนรวมกนอภปรายและสรปเกยวกบโครงสราง While, do…while และ for

5. การวดและประเมนผล 5.1 ตรวจคาตอบจากใบงาน

6. แหลงความรเพมเตม

6.1 http://msdn.microsoft.com/th-th/vcsharp/default(en-us).aspx 7. ขอเสนอแนะ

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

Page 66: คู มืออบรมการเข ียนโปรแกรมด วยภาษา C#weerayuth.in.th/docFiles/cs0.4.pdfแนะนําภาษา C# 1. จุดประสงค

สถาบนสงเสรมการสอนวทยาศาสตรและเทคโนโลย 66

ใบงานท 4.1 ผลรวมตวเลข

ใหผเรยนศกษาใบความรท 4.1 แลวเขยนโปรแกรมจากโจทยทกาหนดใหตอไปน โปรแกรมดานลางดดแปลงมาจากโปรแกรมในตวอยางท 4.3 โดยนอกจากจะรบตวเลขจากผใชไปเรอย ๆ แลว โปรแกรมยงคานวณผลรวมของตวเลขทงหมด (ยกเวนเลขตดลบตวสดทายทผใช ปอนเพอระบจดสนสดของขอมล) จงทาโปรแกรมใหสมบรณโดยเตมคาสงทเหมาะสมลงในชองวาง using System; class While5 { static void Main() { int N = 0, sum; ___(a)___; while (N >= 0) { //Exit while loop when N is negative Console.Write("Please input N: "); N = int.Parse(Console.ReadLine()); ____________(b)____________; } ____________(c)____________; Console.WriteLine("Bye Bye!!!"); } }

ตวอยางผลการทางาน Please input N: 3 Please input N: 2 Please input N: 599 Please input N: 0 Please input N: -5 Sum = 604 Bye Bye!!!

ชองวาง คาตอบ

__(a)__ __(b)__ __(c)__

รายชอสมาชกในกลมท…………………. 1. ………………………………………………… 2. …………………………………………………. 3. ………………………………………………… 4. ………………………………………………….

Page 67: คู มืออบรมการเข ียนโปรแกรมด วยภาษา C#weerayuth.in.th/docFiles/cs0.4.pdfแนะนําภาษา C# 1. จุดประสงค

สถาบนสงเสรมการสอนวทยาศาสตรและเทคโนโลย 67

ใบงานท 4.2 สถตคะแนนสอบ

ใหผเรยนศกษาใบความรท 4.1 และใบความรท 4.2 แลวเขยนโปรแกรมจากโจทยทกาหนดใหตอไปน

1. ประมวลผลสถตเบองตน งานของทานคอเขยนโปรแกรมเพอชวยคณครผสอนภาษา C# คานวณคะแนนเฉลยของนกเรยนในหอง

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

ตวอยางผลการทางาน Enter a score, or -1 to quit: 76 Enter a score, or -1 to quit: 56.7 Enter a score, or -1 to quit: 87.4 Enter a score, or -1 to quit: 53.5 Enter a score, or -1 to quit: 90.8 Enter a score, or -1 to quit: 99 Enter a score, or -1 to quit: -1 Number of students is 6 Average score is 77.23

คดลอกโปรแกรมลงในชองวาง

รายชอสมาชกในกลมท…………………. 1. ………………………………………………… 2. …………………………………………………. 3. ………………………………………………… 4. ………………………………………………….

Page 68: คู มืออบรมการเข ียนโปรแกรมด วยภาษา C#weerayuth.in.th/docFiles/cs0.4.pdfแนะนําภาษา C# 1. จุดประสงค

สถาบนสงเสรมการสอนวทยาศาสตรและเทคโนโลย 68

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

ตวอยางผลการทางาน Enter a score, or -1 to quit: 76 Enter a score, or -1 to quit: 56.7 Enter a score, or -1 to quit: 87.4 Enter a score, or -1 to quit: 53.5 Enter a score, or -1 to quit: 90.8 Enter a score, or -1 to quit: 99 Enter a score, or -1 to quit: -1 Number of students is 6 Average score is 77.23 Min score is 53.50 Max score is 99.00

Page 69: คู มืออบรมการเข ียนโปรแกรมด วยภาษา C#weerayuth.in.th/docFiles/cs0.4.pdfแนะนําภาษา C# 1. จุดประสงค

สถาบนสงเสรมการสอนวทยาศาสตรและเทคโนโลย 69

คดลอกโปรแกรมลงในชองวาง

Page 70: คู มืออบรมการเข ียนโปรแกรมด วยภาษา C#weerayuth.in.th/docFiles/cs0.4.pdfแนะนําภาษา C# 1. จุดประสงค

สถาบนสงเสรมการสอนวทยาศาสตรและเทคโนโลย 70

ใบงานท 4.3 ลาดบตวเลข

ใหผเรยนศกษาใบความรท 4.3 แลวตอบคาถามตอไปน 1. เตมเตมโปรแกรมตอไปนเพอใหโปรแกรมพมพตวเลข 0, -1, -2, ..., -56 บนจอภาพ (แสดงตวเลข

บรรทดละตว) class ForEx { static void Main() { int k; for ( __(a)__ ; __(b)__ ; __(c)__ ) { ____(d)____; } } }

เขยนสวนทเตมเตมลงในตารางดานลาง ชองวาง คาตอบ

__(a)__ __(b)__ __(c)__ __(d)__ 2. จากขอ 1 โปรแกรมในตาแหนง (a),...,(d) ควรเปลยนเปนเชนไรเพอใหโปรแกรมแสดงคา 7, 14,

21,...,70 บนจอภาพ ชองวาง คาตอบ

__(a)__ __(b)__ __(c)__ __(d)__

รายชอสมาชกในกลมท…………………. 1. ………………………………………………… 2. …………………………………………………. 3. ………………………………………………… 4. ………………………………………………….

Page 71: คู มืออบรมการเข ียนโปรแกรมด วยภาษา C#weerayuth.in.th/docFiles/cs0.4.pdfแนะนําภาษา C# 1. จุดประสงค

สถาบนสงเสรมการสอนวทยาศาสตรและเทคโนโลย 71

ใบงานท 4.4 จานวนเฉพาะ

จากโจทยตอไปน จานวนเฉพาะ (prime number หรอเรยกสน ๆ วา prime) เปนจานวนเตมบวกซงมตวหารเพยงสองตวคอ

1 และตวมนเอง ตวอยางเชน 7 เปนจานวนเฉพาะเนองจากเลขทหารมนลงตวมเพยง 1 และ 7 สวน 10 ไมใชจานวนเฉพาะเพราะมตวหารถงสตวคอ 1, 2, 5 และ 10 จะเหนวาจากนยามของจานวนเฉพาะจะไดวา 1 ไมใชจานวนเฉพาะเนองจากมตวหารเพยงตวเดยวคอ 1

เขยนโปรแกรมเพอรบจานวนเตมบวก N และตรวจสอบวา N เปนจานวนเฉพาะหรอไม

ตวอยางผลการทางาน Enter N: 10 10 is not a prime

Enter N: 19 19 is a prime

Enter N: 1 1 is not a prime

รายชอสมาชกในกลมท…………………. 1. ………………………………………………… 2. …………………………………………………. 3. ………………………………………………… 4. ………………………………………………….

Page 72: คู มืออบรมการเข ียนโปรแกรมด วยภาษา C#weerayuth.in.th/docFiles/cs0.4.pdfแนะนําภาษา C# 1. จุดประสงค

สถาบนสงเสรมการสอนวทยาศาสตรและเทคโนโลย 72

Page 73: คู มืออบรมการเข ียนโปรแกรมด วยภาษา C#weerayuth.in.th/docFiles/cs0.4.pdfแนะนําภาษา C# 1. จุดประสงค

สถาบนสงเสรมการสอนวทยาศาสตรและเทคโนโลย 73

ใบงานท 4.5 กลมดาวสามเหลยม

เขยนโปรแกรมเพอวาดรปสามเหลยมดวยเครองหมายดอกจน (*) ทมขนาดตามทผใชกาหนด

ตวอยางผลการทางาน Enter triangle size: 2 * **

Enter triangle size: 5 * ** *** **** *****

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

รายชอสมาชกในกลมท…………………. 1. ………………………………………………… 2. …………………………………………………. 3. ………………………………………………… 4. ………………………………………………….

Page 74: คู มืออบรมการเข ียนโปรแกรมด วยภาษา C#weerayuth.in.th/docFiles/cs0.4.pdfแนะนําภาษา C# 1. จุดประสงค

สถาบนสงเสรมการสอนวทยาศาสตรและเทคโนโลย 74

ใบความรท 4.1 โครงสราง while ลป

โครงสราง while ลปเปนโครงสรางแบบงายทสดทสามารถนามาใชเขยนโปรแกรมเพอวนทาคาสง (หรอกลมของคาสง) ซาหลาย ๆ รอบ รปแบบ การใชงาน while ลปเปนดงน while (condition) statement;

เชนเดยวกบโครงสราง if เราสามารถกาหนดการวนซาใหกบกลมของคาสงไดโดยใชวงเลบปกกา ({...}) while (condition) { statement1; statement2; : statementN; }

ตวอยางท 4.1 จงเขยนโปรแกรมเพอพมพคาตงแต 1 ถง N โดยรบคา N จากผใช 1: using System; 2: class OneToN { 3: static void Main() { 4: int i, N; 5: Console.Write("Enter N: "); 6: N = int.Parse(Console.ReadLine()); 7: i = 1; // initialize variable i to 1 8: while (i <= N) { 9: Console.WriteLine(i); 10: i++; 11: } 12: } 13: }

ตวอยางผลการทางาน Please input N: 5 1 2 3 4 5

ลองมาพจารณาการทางานของโปรแกรมทละขนตอน เมอโปรแกรมเรมทางาน ผใชจะปอนตวเลขเพอใชเปนคาของ N ณ บรรทดท 6 และโปรแกรมจะกาหนดใหคา 1 เปนคาเรมตนของ i ทบรรทดถดมา จากนนโครงสราง while จะมผลทาใหโปรแกรมทาคาสงทบรรทดท 9 และ 10 จนกระทงนพจน i <=

Page 75: คู มืออบรมการเข ียนโปรแกรมด วยภาษา C#weerayuth.in.th/docFiles/cs0.4.pdfแนะนําภาษา C# 1. จุดประสงค

สถาบนสงเสรมการสอนวทยาศาสตรและเทคโนโลย 75

N มคาเปนเทจ ในการวนซาแตละครงโปรแกรมจะพมพคา i และเพมคา i ขนทละหนง ผลการทางานของโปรแกรมจงเปนการพมพตวเลขตงแต 1 (ซงเปนคาเรมตนของ i) จนถงคาของ N (ซงเปนคาสดทายของ i ทยงทาใหนพจน i <= N เปนจรง)

ตวอยางท 4.2 เราสามารถเขยนโปรแกรมเพอคานวณหาผลรวมทงแต 1 ถง N ใด ๆ โดยแกไขโปรแกรมในตวอยางท 4.1 เพยงเลกนอยเทานนดงตอไปน using System; class Summing { static void Main() { int N, i, sum; Console.Write("Please input N: "); N = int.Parse(Console.ReadLine()); i = 1; sum = 0; while (i <= N) { sum = sum + i; i++; } Console.WriteLine("Sum from 1 to {0} = {1} ", N, sum); } }

ตวอยางผลการทางาน Please input N: 4 1 2 3 4 Sum from 1 to 4 = 10

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

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

Page 76: คู มืออบรมการเข ียนโปรแกรมด วยภาษา C#weerayuth.in.th/docFiles/cs0.4.pdfแนะนําภาษา C# 1. จุดประสงค

สถาบนสงเสรมการสอนวทยาศาสตรและเทคโนโลย 76

ตวอยางท 4.3 จงเขยนโปรแกรมเพอวนรบตวเลขจากผใชจนกวาผใชจะปอนคาตดลบจงจบการทางาน using System; class While4 { static void Main() { int N = 0; while (N >= 0) { // stop when N is negative Console.Write("Please input N: "); N = int.Parse(Console.ReadLine()); } Console.WriteLine("Bye Bye!!!"); } }

ตวอยางผลการทางาน Please input N: 3 Please input N: 2 Please input N: 3000 Please input N: 9999 Please input N: -50 Bye Bye!!!

Page 77: คู มืออบรมการเข ียนโปรแกรมด วยภาษา C#weerayuth.in.th/docFiles/cs0.4.pdfแนะนําภาษา C# 1. จุดประสงค

สถาบนสงเสรมการสอนวทยาศาสตรและเทคโนโลย 77

ใบความรท 4.2 โครงสราง do...while ลป

โครงสรางแบบ do..while เปนอกโครงสรางหนงทนามาใชเขยนโปรแกรมเพอทางานวนซาไดและมการทางานคลายคลงกบโครงสรางแบบ while มาก สงทแตกตางกนกคอ do..while จะตรวจสอบเงอนไขหลงจากทาคาสงภายในลปไปแลวหนงครง และจะวนซาไปเรอย ๆ จนกระทงเงอนไขทระบมคาเปนเทจ ดงนนโครงสรางแบบ do..while จงทาคาสงในลปอยางนอย หนงครง แมวาเงอนไขจะเปนเทจตงแตแรกกตาม รปแบบการใชงาน โครงสราง do..while เปนดงน do statement; while (condition);

และเชนเคย วงเลบปกกาถกนามาใชเพอรวมหลาย ๆ คาสงใหเสมอนเปนหนงเอาไวภายในลปได do { statement1; statement2; : statementN; } while (condition);

ตวอยางท 4.4 โปรแกรมดานลางมการใชงานโครงสราง do..while แตใหผลการทางานเหมอนกนโปรแกรมในตวอยางท 4.3 ทกประการ using System; class DoWhile1 { static void Main() { int N = 0; do { Console.Write("Please input N: "); N = int.Parse(Console.ReadLine()); } while (N >= 0); Console.WriteLine("Bye Bye!!!"); } }

Page 78: คู มืออบรมการเข ียนโปรแกรมด วยภาษา C#weerayuth.in.th/docFiles/cs0.4.pdfแนะนําภาษา C# 1. จุดประสงค

สถาบนสงเสรมการสอนวทยาศาสตรและเทคโนโลย 78

ใบความรท 4.3 โครงสราง for ลป

ในใบความรกอนหนานเราไดเหนโครงสรางของโปรแกรมแบบวนซาทใชคาสง while และ do..while เมอพจารณาการใชคาสงเหลานในการเขยนลปแบบวนนบ (counting loop) เราจะพบวาโครงสรางของลปมกจะมสวนประกอบเหลานเสมอ

• สวนกาหนดคาเรมตนใหตวนบ – เปนคาสงใหคาเรมตนกบตวแปรทนามาใชเปนตวนบ คาสงนมกถกเขยนไวทนทกอนทโปรแกรมจะเขาทางานในโครงสราง while หรอ do..while

• สวนคาสงทถกทาซา – สวนหลกของลปทประกอบดวยคาสงทถกเรยกทางานในแตละรอบการวนซา

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

ตวอยางโปรแกรมตอไปนแสดงใหเหนสวนประกอบตาง ๆ ทงสสวน (แตละสวนกากบไวดวยคอมเมนตทายบรรทด) using System; class CountDown { static void Main() { int i; i = 10; // (1) สวนกาหนดคาเรมตนใหตวนบ while (i >= 0) { // (3) สวนเงอนไข Console.WriteLine(i); // (2) สวนคาสงทถกทาซา i--; // (4) สวนปรบคาตวนบ } } }

เนองจากลปแบบวนนบมการใชงานบอยครงในโปรแกรมทว ๆ ไป ภาษา C# (รวมถงภาษาโปรแกรมอน ๆ ดวย) จงไดเตรยมโครงสรางพเศษเพอใชจดการลปประเภทนไดโดยสะดวกยงขน โครงสรางนคอโครงสราง for ซงมรปแบบการใชงานดงน for (init_stmt; condition; update_stmt) { statement1; statement2; : statementN; }

Page 79: คู มืออบรมการเข ียนโปรแกรมด วยภาษา C#weerayuth.in.th/docFiles/cs0.4.pdfแนะนําภาษา C# 1. จุดประสงค

สถาบนสงเสรมการสอนวทยาศาสตรและเทคโนโลย 79

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

ตวอยางท 4.5 โปรแกรมตอไปนจะแสดงตวเลข 1,2,3,...,20 บนหนาจอ using System; class Counting { static void Main() { int i; for (i = 1; i <= 20; i++) Console.WriteLine(i); } }

Page 80: คู มืออบรมการเข ียนโปรแกรมด วยภาษา C#weerayuth.in.th/docFiles/cs0.4.pdfแนะนําภาษา C# 1. จุดประสงค

สถาบนสงเสรมการสอนวทยาศาสตรและเทคโนโลย 80

ตวอยางท 4.6 โปรแกรมตอไปนรบตวเลขอนพท N จากผใชและแสดงตวเลขทงหมดทเปนตวประกอบของ N (นาไปหาร N แลวลงตว) using System; class Divisors { static void Main() { int i, N; Console.Write("Enter N: "); N = int.Parse(Console.ReadLine()); for (i = 1; i <= N; i++) { if (N%i == 0) Console.WriteLine(i); } } }

ตวอยางผลการทางาน Enter N: 100 1 2 4 5 10 20 25 50 100

Page 81: คู มืออบรมการเข ียนโปรแกรมด วยภาษา C#weerayuth.in.th/docFiles/cs0.4.pdfแนะนําภาษา C# 1. จุดประสงค

สถาบนสงเสรมการสอนวทยาศาสตรและเทคโนโลย 81

กจกรรมท 5 เมทอดเบองตน

1. จดประสงค ใหผเรยนสามารถ 1.1 เขยนโปรแกรมโดยการประกาศและสรางเมทอด 1.2 อธบายวธการสงคาไปยงเมทอด 1.3 สรางเมทอดแบบคนคา

2. แนวคด

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

เราสามารถแบงชนดของเมทอดเปนสองประเภทคราว ๆ ไดแก เมทอดแบบไมคนคา (non-value returning methods) และเมทอดแบบคนคา (value-returning methods)

การสงคาไปยงเมทอดสามารถทาไดโดย สรางเมทอดทมการรบคาจากผเรยกเพอกาหนดพฤตกรรมการทางานของเมทอดนน ๆ คาทถกสงไปนเรยกวา อารกวเมนต (argument) สวนเมทอดทถกเรยกจะรบคาเหลานผานมาทางพารามเตอร (parameter)

3. สออปกรณ

3.1 ใบงาน ใบงานท เรอง เวลา (นาท)

5.1 แกไขเมทอดพมพดาว 20 5.2 ทดลองสงคาไปยงเมทอด 20 5.3 ทดลองวาดแผนภาพ 20 5.4 คานวนพนทวงกลม 20 5.5 อนกรมฮาโมนค 30 5.6 วาดกราฟของฟงกชนอยางงาย ๆ 30

Page 82: คู มืออบรมการเข ียนโปรแกรมด วยภาษา C#weerayuth.in.th/docFiles/cs0.4.pdfแนะนําภาษา C# 1. จุดประสงค

สถาบนสงเสรมการสอนวทยาศาสตรและเทคโนโลย 82

3.2 ใบความร - ใบความรท 5 .1 เรองการประกาศและเรยกใชเมทอด - ใบความรท 5.2 เรองการสงคาไปยงเมทอด - ใบความรท 5.3 เรองเมทอดแบบคนคา

3.3 อนๆ - เครองคอมพวเตอรเทากบจานวนกลม - โปรแกรมวชวลซชารป เอกเพรส

4. วธดาเนนการ

4.1 การจดเตรยม 4.1.1 แบงผเรยนเปนกลม กลมละ 2 คน 4.1.2 เตรยมใบงานท 5.1 – 5.6 ตามจานวนกลมและใบความรท 5.1 – 5.3 ตามจานวนผเรยน

4.2 ขนตอนการดาเนนการ 4.2.1 ผสอนกลาวถงการเขยนโปรแกรมดวยการประกาศและเรยกใชเมทอด 4.2.2 ผเรยนแตละกลมศกษาใบความรท 5.1 เรองการประกาศและเรยกใชเมทอด และทาใบงานท

5.1 เรองแกไขเมทอดพมพดาว 4.2.3 ผสอนสมผเรยนออกมานาเสนอคาตอบในใบงานท 5.1 4.2.4 ผเรยนแตละกลมศกษาใบความรท 5.2 เรองการสงคาไปยงเมทอด จากนนทาใบงานท 5.2

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

4.2.5 ผเรยนแตละคนศกษาใบความรท 5.3 เรองเมทอดแบบคนคา แลวทาใบงานท 5.4 เรองคานวนพนทวงกลม และใบงานท 5.5 เรองอนกรมฮาโมนค จากนนใหผเรยนตรวจสอบคาตอบกบเพอนในกลม

4.2.6 ผเรยนแตละกลมทาใบงานท 5.6 เรองวาดกราฟของฟงกชนอยางงาย ๆ จากนนผสอนสมกลมผเรยนออกมานาเสนอ

4.2.7 ผเรยนและผสอนรวมกนอภปรายและสรปเกยวกบการสรางและใชงานเมทอดแบบตางๆ

5. การวดและประเมนผล 5.1 ตรวจคาตอบจากใบงาน

6. แหลงความรเพมเตม

6.1 http://msdn.microsoft.com/th-th/vcsharp/default(en-us).aspx

Page 83: คู มืออบรมการเข ียนโปรแกรมด วยภาษา C#weerayuth.in.th/docFiles/cs0.4.pdfแนะนําภาษา C# 1. จุดประสงค

สถาบนสงเสรมการสอนวทยาศาสตรและเทคโนโลย 83

7. ขอเสนอแนะ -

Page 84: คู มืออบรมการเข ียนโปรแกรมด วยภาษา C#weerayuth.in.th/docFiles/cs0.4.pdfแนะนําภาษา C# 1. จุดประสงค

สถาบนสงเสรมการสอนวทยาศาสตรและเทคโนโลย 84

ใบงานท 5.1 แกไขเมทอดพมพดาว

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

1.1 ทดลองสรางเมทอดอกอนหนงชอ PrintLongerLine ซงมการทางานคลายกบเมทอด PrintLine แตพมพดาวออกมา 20 ดวงแทนทจะเปน 10 จากนนเขยนเฉพาะการประกาศเมทอด PrintLongerLine ลงในชองวาง

1.2 หลงจากสรางเมทอด PrintLongerLine สาเรจแลว แกไขเมทอด Main เพอใหโปรแกรมพมพดาว 10 ดวงเปนจานวน 3 แถว และ 20 ดวงเปนจานวน 3 แถว ดงแสดง

********** ********** ********** ******************** ******************** ********************

1.3 จากนนเขยนคาสงทใชภายในเมทอด Main ลงในชองวาง

รายชอสมาชกในกลมท…………………. 1. ………………………………………………… 2. …………………………………………………. 3. ………………………………………………… 4. ………………………………………………….

Page 85: คู มืออบรมการเข ียนโปรแกรมด วยภาษา C#weerayuth.in.th/docFiles/cs0.4.pdfแนะนําภาษา C# 1. จุดประสงค

สถาบนสงเสรมการสอนวทยาศาสตรและเทคโนโลย 85

ใบงานท 5.2 ทดลองสงคาไปยงเมทอด

ใหผเรยนศกษาใบความรท 5.1 และใบความรท 5.2 จากนนสรางโปรเจกตและเขยนโปรแกรมตามโจทยทกาหนดใหตอไปน

1. ทดลองพมพและรนโปรแกรมในตวอยางท 5.2

1.1 โปรแกรมแสดงผลลพธอยางไร

1.2 ดดแปลงเมทอด Main เพอใหโปรแกรมแสดงอกขระ 'x' 10 ตวในบรรทดแรก อกขระ '*' 20 ตวในบรรทดถดมา และอกขระ 'v' 30 ตวในบรรทดสดทาย จากนนคดลอกเฉพาะคาสงทใชภายในเมทอด Main ลงในชองวาง

ตวอยางผลการทางาน xxxxxxxxxx ******************** vvvvvvvvvvvvvvvvvvvvvvvvvvvvvv

รายชอสมาชกในกลมท…………………. 1. ………………………………………………… 2. …………………………………………………. 3. ………………………………………………… 4. ………………………………………………….

Page 86: คู มืออบรมการเข ียนโปรแกรมด วยภาษา C#weerayuth.in.th/docFiles/cs0.4.pdfแนะนําภาษา C# 1. จุดประสงค

สถาบนสงเสรมการสอนวทยาศาสตรและเทคโนโลย 86

ใบงานท 5.3 ทดลองวาดแผนภาพ

ใหผเรยนศกษาใบความรท 5.1 และใบความรท 5.2 จากนนสรางโปรเจกตและเขยนโปรแกรมตามโจทยทกาหนดใหตอไปน

เราจะทดลองสรางเมทอดชอ PlotChar เพอนาไปใชในโจทยฝกโปรแกรมในตอนทาย เมทอดนรบพารามเตอรสองตว คอ c เปนชนด char และ dist เปนชนด int ซงคลายคลงกบเมทอด PrintCharLine ทผานมา แตเมทอด PlotChar จะพมพชองวางเปนจานวน dist-1 ตวอกษร และพมพอกขระในพารามเตอร c ปดทายเพยงตวเดยวพรอมทงขนบรรทดใหม ใหเตมคาสงลงในบรรทดวางทเวนไวในบรรทดท 4--7 ของโปรแกรมตอไปน เพอใหโปรแกรมแสดงผลตามผลลพธทแสดงไวดานลาง และหามแกไขสวนของเมทอด Main โดยเดดขาด 1: using System; 2: class Stars { 3: static void PlotChar(char c, int dist) { 4: ________________________________________________________ 5: ________________________________________________________ 6: ________________________________________________________ 7: ________________________________________________________ 8: } 9: 10: static void Main() { 11: PlotChar('x', 1); 12: PlotChar('-', 2); 13: PlotChar('+', 3); 14: PlotChar('o', 6); 15: } 16: }

ตวอยางผลการทางาน x - + o

รายชอสมาชกในกลมท…………………. 1. ………………………………………………… 2. …………………………………………………. 3. ………………………………………………… 4. ………………………………………………….

Page 87: คู มืออบรมการเข ียนโปรแกรมด วยภาษา C#weerayuth.in.th/docFiles/cs0.4.pdfแนะนําภาษา C# 1. จุดประสงค

สถาบนสงเสรมการสอนวทยาศาสตรและเทคโนโลย 87

ใบงานท 5.4 คานวนพนทวงกลม

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

วงกลมแทนทจะเปนสามเหลยมโดยรบคารศมของวงกลมจากผใช แตโปรแกรมยงขาดสวนสาคญทเวนวางเอาไวคอการประกาศเมทอด CircleArea ทจะคานวณคาพนทจากรศม using System; class Circle { _____(a)_____ static void Main() { Console.Write("Enter radius: "); double radius = double.Parse(Console.ReadLine()); Console.WriteLine("The area of the circle is {0:f2}.", CircleArea(radius)); } }

ตวอยางผลการทางาน Enter radius: 32 The area of the circle is 3216.99.

เขยนโปรแกรมเพมเตมใหสมบรณและคดลอกสวนของโปรแกรมทเปนการประกาศเมทอด CircleArea ในตาแหนง (a) ลงในชองวางดานลาง

รายชอสมาชกในกลมท…………………. 1. ………………………………………………… 2. …………………………………………………. 3. ………………………………………………… 4. ………………………………………………….

Page 88: คู มืออบรมการเข ียนโปรแกรมด วยภาษา C#weerayuth.in.th/docFiles/cs0.4.pdfแนะนําภาษา C# 1. จุดประสงค

สถาบนสงเสรมการสอนวทยาศาสตรและเทคโนโลย 88

ใบงานท 5.5 อนกรมฮาโมนค

ใหผเรยนศกษาใบความรท 5.3 จากนนสรางโปรเจกตและเขยนโปรแกรมตามโจทยทกาหนดใหตอไปน ใหดดแปลงโปรแกมในตวอยางท 5.4 ในสวนของการประกาศเมทอด f เพอหาผลรวม n พจนแรก

ของอนกรมฮาโมนค ดงนน f(n) จงมนยามดงน

∑=

=n

i inf

1

1)(

จากนนลอกเมทอด f ลงในชองวาง

ตวอยางผลการทางาน n | f(n) ---+------ 1 | 1.000 2 | 1.500 3 | 1.833 4 | 2.083 5 | 2.283 6 | 2.450 7 | 2.593 8 | 2.718 9 | 2.829 10 | 2.929 11 | 3.020 12 | 3.103 13 | 3.180 14 | 3.252 15 | 3.318

รายชอสมาชกในกลมท…………………. 1. ………………………………………………… 2. …………………………………………………. 3. ………………………………………………… 4. ………………………………………………….

Page 89: คู มืออบรมการเข ียนโปรแกรมด วยภาษา C#weerayuth.in.th/docFiles/cs0.4.pdfแนะนําภาษา C# 1. จุดประสงค

สถาบนสงเสรมการสอนวทยาศาสตรและเทคโนโลย 89

ใบงานท 5.6 วาดกราฟของฟงกชนอยางงาย ๆ

จงเขยนโปรแกรมเพอวาดกราฟอยางงายของฟงกชน

⎟⎠⎞

⎜⎝⎛+=πxxf sin1020)(

โดยท x มคาตงแต 0 ถง 20 และฟงกชน sin(x) ใหคาซายนของมม x เรเดยน โปรแกรมทสมบรณควรแสดงผลลพธดงน x| --+---------------------------------------> f(x) 0| * 1| * 2| * 3| * 4| * 5| * 6| * 7| * 8| * 9| * 10| * 11| * 12| * 13| * 14| * 15| * 16| * 17| * 18| * 19| * 20| *

รายชอสมาชกในกลมท…………………. 1. ………………………………………………… 2. …………………………………………………. 3. ………………………………………………… 4. ………………………………………………….

Page 90: คู มืออบรมการเข ียนโปรแกรมด วยภาษา C#weerayuth.in.th/docFiles/cs0.4.pdfแนะนําภาษา C# 1. จุดประสงค

สถาบนสงเสรมการสอนวทยาศาสตรและเทคโนโลย 90

ขอมลเพมเตม

• เมทอด Math.Sin ในภาษา C# รบคามมในหนวยเรเดยนอยแลว • เราสามารถปดคาทศนยมใหเปนจานวนเตมไดโดยใชเมทอด Math.Round อยางไรกตาม คาท

ไดจากเมทอดนจะยงคงเปนชนด double หากจะนาไปใชในรปนพจนชนด int จะตองมการทา type casting โดยการใส (int) ไวดานหนา เชน int a = (int) Math.Round(10.3293);

คดลอกโปรแกรมลงในชองวาง

Page 91: คู มืออบรมการเข ียนโปรแกรมด วยภาษา C#weerayuth.in.th/docFiles/cs0.4.pdfแนะนําภาษา C# 1. จุดประสงค

สถาบนสงเสรมการสอนวทยาศาสตรและเทคโนโลย 91

ใบความรท 5.1 การประกาศและเรยกใชเมทอด

ทผานมาเราไดเขยนโปรแกรมโดยใสคาสงทงหมดไวในสวนทเรยกวาเมทอด Main อยางไรกตามการเขยนโปรแกรมในลกษณะนจะเหมาะสาหรบโปรแกรมสน ๆ ทใชแกปญหางาย ๆ เทานน แตสาหรบปญหาทมขนาดใหญและมความซบซอนมากขนการเขยนโปรแกรมแบบนนอกจากจะทาใหโปรแกรมดเทอะทะไมเปนระเบยบแลวยงทาใหเกดความผดพลาดภายในโปรแกรมไดงายขนอกดวย ดงนนนกเขยนโปรแกรมทมประสบการณจงมกออกแบบโปรแกรมโดยการแบงปญหาทตองการแกออกเปนงานยอย ๆ หลาย ๆ งาน จากนนจงเขยนโปรแกรมเปนสวน ๆ เพอจดการงานยอยในแตละงาน เราเรยกสวนของโปรแกรมเพอจดการงานยอยหนง ๆ วา ซบรทน (subroutine) นอกจากนยงมคาอกหลายคาทใหความหมายในทานองเดยวกน เชน โปรแกรมยอย (subprogram) และฟงกชน (function) สาหรบภาษาทสนบสนนการเขยนโปรแกรมเชงวตถเชนภาษา C# นนสวนของโปรแกรมดงกลาวจะถกเรยกวา เมทอด (method)

การเขยนโปรแกรมเปนสวน ๆ โดยใชเมทอดมขอดหลายประการ อาทเชน:

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

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

เราไดรจกวธการและไดเรยกใชเมทอดมาแลวกอนหนานหลายครงเชนการใชงานเมทอด Console.WriteLine และ Math.Sqrt เมทอดเหลานเปนเมทอดทถกสรางมาใหพรอมกบตวภาษา C# ซงเราสามารถเรยกใชงานไดทนท แตในปฏบตการครงนเราจะไดรจกวธการสรางเมทอดของเราขนมาเอง

1. การประกาศเมทอด ในความเปนจรงเราเคยไดสรางเมทอดขนมาเองมากอนหนานแลว ยงไปกวานนเราไดสรางเมทอด

ลกษณะนเสมอในทก ๆ โปรแกรมภาษา C# ทเราเขยน เมทอดดงกลาวกคอเมทอด Main ทใชสาหรบระบจดตงตนของโปรแกรมนนเอง ลองพจารณาโครงสรางของโปรแกรมภาษา C# ทเราคนเคยมากอนแลวดงน

Page 92: คู มืออบรมการเข ียนโปรแกรมด วยภาษา C#weerayuth.in.th/docFiles/cs0.4.pdfแนะนําภาษา C# 1. จุดประสงค

สถาบนสงเสรมการสอนวทยาศาสตรและเทคโนโลย 92

namespace (มหรอไมมกได)

class เมทอด Main statement; ...

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

namespace (มหรอไมมกได) class เมทอด Main statement; ...

เมทอด MyMethod_1 statement; ...

เมทอด MyMethod_2 statement; ...

... เมทอด MyMethod_N statement; ...

สงเกตวาเมทอดแตละอนตองถกประกาศอยภายนอกเมทอดอน ๆ แตอยภายในคลาสเสมอ

น อ ก จ า ก น น เมทอด Main ไมจาเปนตองถกประกาศเปนเมทอดแรกของโปรแกรม การประกาศเมทอดจะมรปแบบดงน

Page 93: คู มืออบรมการเข ียนโปรแกรมด วยภาษา C#weerayuth.in.th/docFiles/cs0.4.pdfแนะนําภาษา C# 1. จุดประสงค

สถาบนสงเสรมการสอนวทยาศาสตรและเทคโนโลย 93

static return_type method_name(parameter_list) { statement1; statement2; : }

จะเหนวาเมทอด Main ทเราใชกนมาตงแตแรกกมการเขยนอยในรปแบบขางตนเชนเดยวกน เราสามารถแบงชนดของเมทอดเปนสองประเภทคราว ๆ ไดแก เมทอดแบบไมคนคา (non-value returning methods) และเมทอดแบบคนคา (value-returning methods)

2. เมทอดแบบไมคนคา เมทอดแบบไมคนคา (บางครงเรยกวา subroutine หรอ procedure) เปนเมทอดทเขยนขนมาเพอ

ปฏบตงานบางอยางและจบงานนนในตวมนเองโดยไมสงคาคนกลบไปยงผเรยก การประกาศเมทอดประเภทนตองมการใชคยเวรด void ในตาแหนง return_type และการเรยกใชเมทอดประเภทนจะปรากฏอยในโปรแกรมเสมอนคาสงหนงคาสง

ตวอยางท 5.1 โปรแกรมตอไปนประกาศเมทอดชอ PrintLine เพอทาหนาทพมพดาว (*) 10 ดวงออกทางหนาจอ จากนนภายในเมทอด Main จะเรยกใชเมทอด PrintLine สองครง ดงนนผลลพธของโปรแกรมจะปรากฏเปนดาวสองแถว แถวละ 10 ดวง 1: using System; 2: class MyClass { 3: static void PrintLine() { 4: for (int i = 0; i < 10; i++) 5: Console.Write('*'); 6: Console.WriteLine(); 7: } 8: 9: static void Main() { 10: MyClass.PrintLine(); 11: MyClass.PrintLine(); 12: } 13: }

จากการเรยกใชงานเมทอดในบรรทดท 10--11 จะเหนวาการใชงานเมทอดนจะอยในรปClassName.MethodName โดย ClassName ในทนคอ MyClass ซงเปนชอคลาสทเราใชในโปรแกรมน (บรรทดท 2) และเปนคลาสทเมทอด PrintLine ถกนยามไว ดงนนการใชงานเมทอดทสรางขนมาเองจงเปนลกษณะเดยวกนกบการใชงานเมทอดทภาษา C# เตรยมไวใหแลว เชน Console.WriteLine ซง WriteLine คอชอเมทอดและ Console คอชอคลาสนนเอง

Page 94: คู มืออบรมการเข ียนโปรแกรมด วยภาษา C#weerayuth.in.th/docFiles/cs0.4.pdfแนะนําภาษา C# 1. จุดประสงค

สถาบนสงเสรมการสอนวทยาศาสตรและเทคโนโลย 94

อยางไรกตามหากการเรยกใชงานเมทอดอยภายในคลาสเดยวกนกบคลาสทเมทอดนน ๆ ถกประกาศไว ภาษา C# อนญาตใหเราละสวนของชอคลาสออกไปได ดงนนเมทอด Main ในตวอยางขางตนจงเขยนใหสนลงไดดงน static void Main() { PrintLine(); PrintLine(); }

Page 95: คู มืออบรมการเข ียนโปรแกรมด วยภาษา C#weerayuth.in.th/docFiles/cs0.4.pdfแนะนําภาษา C# 1. จุดประสงค

สถาบนสงเสรมการสอนวทยาศาสตรและเทคโนโลย 95

ใบความรท 5.2 การสงคาไปยงเมทอด

เราสามารถสรางเมทอดทมการรบคาจากผเรยกเพอกาหนดพฤตกรรมการทางานของเมทอดนน ๆ คาทถกสงไปนเรยกวา อารกวเมนต (argument) สวนเมทอดทถกเรยกจะรบคาเหลานผานมาทางพารามเตอร (parameter) ซงถกนยามไวในสวน parameter_list ของการประกาศเมทอด (ลองยอนกลบไปดรปแบบการประกาศเมทอดขางตน) เมทอดแตละอนสามารถถกประกาศใหมพารามเตอรไดตงแตศนยตวหรอมากกวา โดยพารามเตอรแตละตวจะตองมรปแบบขอมลกากบไวเสมอ และอารกวเมนตทใชในขณะเรยกใชงานเมทอดจะตองมรปแบบขอมลทตรงกน

ตวอยางท 5.2 เมทอด PrintCharLine ดานลางนดดแปลงมาจากเมทอด PrintLine เมทอดใหมนกาหนดใหมพารามเตอรสองตว คอ c เปนชนด char และ len เปนชนด int โดยทพารามเตอร c ใชสาหรบระบอกขระทจะพมพออกทางจอภาพ ) ไมไดพมพเพยงแคดาวอกตอไป (และ len ใชระบจานวนอกขระทตองการพมพในหนงบรรทด 1: using System; 2: class ParamNoRet { 3: static void PrintCharLine(char c, int len) { 4: for (int i = 0; i < len; i++) 5: Console.Write(c); 6: Console.WriteLine(); 7: } 8: 9: static void Main() { 10: PrintCharLine(’o’, 10); 11: PrintCharLine(’x’, 20); 12: } 13: }

จากโปรแกรมขางตน การเรยกใชเมทอด PrintCharLine ครงแรกภายในเมทอด Main ในบรรทดท 10 มอารกวเมนตเปน 'o' และ 10 ซงเมทอด PrintCharLine จะรบคาอารกวเมนตนเขามาอยในพารามเตอร c และ len ตามลาดบ ดงนนจะเหนวาบรรทดท 4 และ 5 จะมผลทาใหโปรแกรมพมพอกขระ o ออกทางหนาจอเปนจานวน 10 ตว ในทานองเดยวกน การเรยกใชเมทอด PrintCharLine ในบรรทดท 11 จะมผลทาใหโปรแกรมพมพอกขระ x ออกทางหนาจอเปนจานวน 20 ตว

Page 96: คู มืออบรมการเข ียนโปรแกรมด วยภาษา C#weerayuth.in.th/docFiles/cs0.4.pdfแนะนําภาษา C# 1. จุดประสงค

สถาบนสงเสรมการสอนวทยาศาสตรและเทคโนโลย 96

ใบความรท 5.3 เมทอดแบบคนคา

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

การสรางเมทอดแบบคนคาขนมาเองนนตองระบชนดของขอมลทเมทอดจะสงกลบเอาไวในสวนทเปนreturn_type ของการประกาศเมทอดนน ๆ แทนทจะใชคยเวรด void เหมอนทเคยใชกบเมทอดแบบไมคนคา และภายในตวเมทอดเองจะตองมการใชคาสง return เพอใหเมทอดสนสดการทางานทนทและสงคากลบไปยงผเรยก รปแบบการใชงานคาสง return เปนดงน return expression;

โดยแทนท expression ดวยนพจนทจะถกประเมนเปนคาทตองการสงกลบ

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

อกกรณหนงทเมทอดแบบคนคาถกนามาใชมากคอการนยามฟงกชน (function) ทางคณตศาสตรขนมาเองเพอชดเชยจากสวนทขาดไปในคลาส Math อกทงยงใชในการสรางฟงกชนเพอคานวณทซบซอนเพอซอนความซบซอนนนไมใหปรากฏในสวนของโปรแกรมหลกดงเชนตวอยางตอไปน

Page 97: คู มืออบรมการเข ียนโปรแกรมด วยภาษา C#weerayuth.in.th/docFiles/cs0.4.pdfแนะนําภาษา C# 1. จุดประสงค

สถาบนสงเสรมการสอนวทยาศาสตรและเทคโนโลย 97

ตวอยางท 5.3 โปรแกรมตอไปนนยามเมทอดชอ TriangleArea ขนมาเพอคานวณพนทของสามเหลยมโดยรบพารามเตอรเปนความสงและความกวางของสามเหลยม สวนภายในเมทอด Main จะเปนเพยงการถามคาความสงและความกวางจากผใชแลวสงคาใหกบ TriangleArea เพอคานวณพนท 1: using System; 2: class Triangle { 3: static double TriangleArea(double w, double h) { 4: double area = w*h/2.0; 5: return area; 6: } 7: 8: static void Main() { 9: Console.Write("Enter width: "); 10: double width = double.Parse(Console.ReadLine()); 11: Console.Write("Enter height: "); 12: double height = double.Parse(Console.ReadLine()); 13: Console.WriteLine("The area of the triangle is {0:f2}.", 14: TriangleArea(width, height)); 15: } 16: }

สงเกตวาเนองจากเมทอด TriangleArea ถกประกาศใหคนคาเปนชนด double ในบรรทดท 3ดงนนการเรยกใชเมทอดนจงอยในรปของนพจนแบบ double ทาใหสามารถใชงานรวมกบเมทอด Console.WriteLine ในบรรทดท 13-14 ไดทนท

ตวอยางท 5.4 ตวอยางนแสดงการนยามฟงกชน

∑=

=n

i

inf1

)(

ใหอยในรปของเมทอดทถกเรยกใชจากเมทอด Main เพอแสดงตารางคาของ )(nf สาหรบแตละคาของ n ตงแต 1 ถง 15 1: using System; 2: class Function { 3: static double f(int n) { 4: double sum = 0.0; 5: for (int i = 1; i <= n; i++) 6: sum += Math.Sqrt(i); 7: 8: return sum; 9: } 10: 11: static void Main() { 12: Console.WriteLine(" n | f(n)"); 13: Console.WriteLine("---+------"); 14: for (int n = 1; n <= 15; n++) { 15: Console.WriteLine("{0,2} | {1:f3}", n, f(n)); 16: } 17: } 18: }

Page 98: คู มืออบรมการเข ียนโปรแกรมด วยภาษา C#weerayuth.in.th/docFiles/cs0.4.pdfแนะนําภาษา C# 1. จุดประสงค

สถาบนสงเสรมการสอนวทยาศาสตรและเทคโนโลย 98

ตวอยางผลการทางาน n | f(n) ---+------ 1 | 1.000 2 | 2.414 3 | 4.146 4 | 6.146 5 | 8.382 6 | 10.832 7 | 13.478 8 | 16.306 9 | 19.306 10 | 22.468 11 | 25.785 12 | 29.249 13 | 32.855 14 | 36.596 15 | 40.469

หมายเหต: สญลกษณ {0,2} ทใชในคาสง Console.WriteLine ในบรรทดท 15 คอการกาหนดใหผลลพธในการพมพคาในนพจนแรก (ซงกคอคาในตวแปร n) มความยาวอยางนอยสองอกขระ เชน หาก n มคาเทากบ 3 ผลลพธทพมพออกทางหนาจอคอ ' 3' คอมชองวางนาหนาหนงชอง (ไมรวมเครองหมาย ') ทาใหผลลพธโดยรวมมความยาวสองอกขระ แตถา n มคาเทากบ 15 โปรแกรมจะแสดงผลลพธ '15' โดยไมมชองวางเนองจาก 15 มความยาวสองอกขระอยแลว เหตผลทตองทาแบบนเพอใหเสนตารางในผลลพธดสวยงาม ไมเหลอมซอนกน

Page 99: คู มืออบรมการเข ียนโปรแกรมด วยภาษา C#weerayuth.in.th/docFiles/cs0.4.pdfแนะนําภาษา C# 1. จุดประสงค

สถาบนสงเสรมการสอนวทยาศาสตรและเทคโนโลย 99

กจกรรมท 6 อาเรย

1. จดประสงค ใหผเรยนสามารถ 1.1 สรางอาเรยหนงมต 1.2 อางถงขอมลในอาเรย 1.3 เขาถงขอมลในอาเรยโดยใชคาสง foreach 1.4 สงอาเรยไปยงเมทอด 2. แนวคด

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

การเขาถงสมาชกของอาเรยแตละตว ทาไดโดยการกาหนดดชนซงเปนจานวนเตมทเขยนอยภายในวงเลบกามป “[ ]” ตามหลงชออาเรย เชน x[0] และ y[0] เปนตน สมาชกของอาเรยจะมดชน(index) หรอตาแหนงของสมาชกแรกเปนศนย (0) และตวตอไปจะเพมขนทละ 1 ตามลาดบจนถงตวสดทายตวท n จะมดชนเปน n-1

3. สอและอปกรณ

3.1 ใบงาน ใบงานท เรอง เวลา (นาท)

6.1 สรางอาเรยของคะแนน 10 6.2 หาคาเฉลยของคะแนน 5 6.3 รบสงอาเรยไปยงเมทอด 10 6.4 วเคราะหอกขระ 10 6.5 ถอดรหสลบจารชน 20 6.6 แผนภมแทง 20

3.2 ใบความร - ใบความรท 6.1 เรองชนดขอมลแบบอาเรย - ใบความรท 6.2 เรองการหาขนาดของอารเรย - ใบความรท 6.3 เรองคาสง foreach

Page 100: คู มืออบรมการเข ียนโปรแกรมด วยภาษา C#weerayuth.in.th/docFiles/cs0.4.pdfแนะนําภาษา C# 1. จุดประสงค

สถาบนสงเสรมการสอนวทยาศาสตรและเทคโนโลย 100

- ใบความรท 6.4 เรองการสงอาเรยไปยงเมทอด - ใบความรท 6.5 เรองการการอางถงสตรงในรปแบบอาเรย

3.3 อนๆ

4. วธดาเนนกจกรรม 4.1 การจดเตรยม

4.1.1 แบงผเรยนออกเปนกลม กลมละ 2 คน 4.1.2 เตรยมใบงานท 6.1 – 6.6 ตามจานวนกลมและใบความรท 6.1 – 6.5 ตามจานวนผเรยน

4.2 ขนตอนการดาเนนการ 4.2.1 ผสอนกลาวถงขอมลเบองตนเกยวกบอาเรย 4.2.2 ผเรยนศกษาใบความรท 6.1 เรองชนดขอมลแบบอาเรย แลวทาใบงานท 6.1 เรองสรางอา

เรยของคะแนน 4.2.3 ผเรยนศกษาใบความรท 6.2 เรองการหาขนาดของอารเรย แลวทาใบงานท 6.2 เรองหา

คาเฉลยของคะแนน 4.2.4 ผเรยนศกษาใบความรท 6.3 เรองคาสง foreach และใบความรท 6.4 เรองการสงอาเรยไปยง

เมทอด แลวทาใบงานท 6.3 เรองรบสงอาเรยไปยงเมทอด 4.2.5 ผเรยนศกษาใบความรท 6.5 เรองการการอางถงสตรงในรปแบบอาเรย แลวทาใบงานท 6.4

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

5. การวดและประเมนผล 5.1 ตรวจคาตอบจากใบงาน

6. แหลงความรเพมเตม 6.1 http://msdn.microsoft.com/th-th/vcsharp/default(en-us).aspx

7. ขอเสนอแนะ -

Page 101: คู มืออบรมการเข ียนโปรแกรมด วยภาษา C#weerayuth.in.th/docFiles/cs0.4.pdfแนะนําภาษา C# 1. จุดประสงค

สถาบนสงเสรมการสอนวทยาศาสตรและเทคโนโลย 101

ใบงานท 6.1 สรางอาเรยของคะแนน

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

สาหรบเกบขอมลแบบ double จานวน 6 จานวน โดยขอมลในอาเรยมคาเปน 78.0, 51.2, 25.1, 62.6, 27.6 และ 18.0 ตามลาดบ จากนนใหสรางโปรเจกตและเขยนโปรแกรมคานวณผลรวมของคาเหลานและแสดงผลลพธออกทางจอภาพดวยทศนยม 2 ตาแหนง

using System; class ScoreSum { static void Main() { double[] stdScores = ____________________________________________________; double sum = 0.0; for (int i=0; i<6; i++) { ___________________________; } Console.WriteLine("Sum = {0:f2}", sum); } }

ทดลองรนโปรแกรมและกรอกผลลพธของโปรแกรมลงในชองวาง

รายชอสมาชกในกลมท…………………. 1. ………………………………………………… 2. …………………………………………………. 3. ………………………………………………… 4. ………………………………………………….

Page 102: คู มืออบรมการเข ียนโปรแกรมด วยภาษา C#weerayuth.in.th/docFiles/cs0.4.pdfแนะนําภาษา C# 1. จุดประสงค

สถาบนสงเสรมการสอนวทยาศาสตรและเทคโนโลย 102

ใบงานท 6.2 หาคาเฉลยของคะแนน

1. ใหผเรยนศกษาใบความรท 6.2 เรองการหาขนาดของอาเรย

2. สรางโปรเจกตและเขยนโปรแกรมโดยดดแปลงโปรแกรมจากใบความรท 6.2 เพอใหโปรแกรมคานวณคาเฉลยของคะแนน โดยใหใชคณสมบต Length ภายในตวโปรแกรมแทนทจะใชคา 6 โดยตรง คดลอกโปรแกรมและผลลพธของโปรแกรมลงในชองวาง

โปรแกรมทดดแปลงแลว

ผลลพธของโปรแกรม

รายชอสมาชกในกลมท…………………. 1. ………………………………………………… 2. …………………………………………………. 3. ………………………………………………… 4. ………………………………………………….

Page 103: คู มืออบรมการเข ียนโปรแกรมด วยภาษา C#weerayuth.in.th/docFiles/cs0.4.pdfแนะนําภาษา C# 1. จุดประสงค

สถาบนสงเสรมการสอนวทยาศาสตรและเทคโนโลย 103

ใบงานท 6.3 รบสงอาเรยไปยงเมทอด

ใหผเรยนศกษาใบความรท 6.3ใบความรท 6.4 และใบความรท 6.4 จากนนใหสรางโปรเจกตและเขยนโปรแกรมจากโจทยทกาหนดใหตอไปน

ดดแปลงโปรแกรมจากตวอยางท 6.7 จากใบความรท 6.4 เพอรบขอมลจากผใชเกบไวในอาเรยแทนการกาหนดคาเรมตนไวกอน และเพมเมทอดชอ ArrayAverage เพอคานวณหาคาเฉลยของคาในอาเรยของขอมลชนด double ใหเตมคาสงลงในบรรทดทเวนไวเพอใหโปรแกรมทางานไดอยางถกตองโดยใชพนทไมเกนสองบรรทด (คาแนะนา: พยายามใชประโยชนจากเมทอด ArraySum ทมใหอยแลว) using System; class ArrayTest { static double ArraySum(double[] data) { double sum = 0; foreach (double x in data) sum += x; return sum; } static double ArrayAverage(double[] data) { ____________________________________________________________ ____________________________________________________________ } static void Main() { double[] myData; int n; Console.Write("Enter number of items: "); n = int.Parse(Console.ReadLine()); myData = new double[n]; for (int i = 0; i < n; i++) { Console.Write("Enter item#{0}: ", i+1); myData[i] = double.Parse(Console.ReadLine()); } Console.WriteLine("Average = {0:f2}", ArrayAverage(myData)); } }

รายชอสมาชกในกลมท…………………. 1. ………………………………………………… 2. …………………………………………………. 3. ………………………………………………… 4. ………………………………………………….

Page 104: คู มืออบรมการเข ียนโปรแกรมด วยภาษา C#weerayuth.in.th/docFiles/cs0.4.pdfแนะนําภาษา C# 1. จุดประสงค

สถาบนสงเสรมการสอนวทยาศาสตรและเทคโนโลย 104

ตวอยางผลการทางาน Enter number of items: 4 Enter item#1: 10.5 Enter item#2: 67 Enter item#3: 3 Enter item#4: 0.6 Average = 20.28

Page 105: คู มืออบรมการเข ียนโปรแกรมด วยภาษา C#weerayuth.in.th/docFiles/cs0.4.pdfแนะนําภาษา C# 1. จุดประสงค

สถาบนสงเสรมการสอนวทยาศาสตรและเทคโนโลย 105

ใบงานท 6.4 วเคราะหอกขระ

ใหผเรยนศกษาใบความรท 6.5 จากนนสรางโปรเจกตและเขยนโปรแกรมตอไปนใหสมบรณ จงเขยนโปรแกรมเพอใหโปรแกรมสามารถรบขอความจากผใชและรายงานจานวนอกขระทเปนตวเลข ('0'.. '9') จานวนอกขระภาษาองกฤษตวใหญ ('A'..'Z') และจานวนอกขระภาษาองกฤษตวเลก ('a'..'z') using System; class CountAll { static void Main() { Console.Write("Enter a string: "); string s = Console.ReadLine(); int cntDigit = 0, cntUpper = ______, cntLower = ______; foreach (char c in s) { if (c >= '0' && __________) cntDigit++; if (_____________ && c <= 'Z') cntUpper++; if (_______________________________) _________________________; } Console.WriteLine("There are {0} digits.", cntDigit); Console.WriteLine("There are {0} uppercase letters.", cntUpper); Console.WriteLine("There are {0} lowercase letters.", cntLower); } }

ตวอยางผลการทางาน Enter a string: Welcome KU-66 There are 2 digits. There are 3 uppercase letters. There are 6 lowercase letters.

รายชอสมาชกในกลมท…………………. 1. ………………………………………………… 2. …………………………………………………. 3. ………………………………………………… 4. ………………………………………………….

Page 106: คู มืออบรมการเข ียนโปรแกรมด วยภาษา C#weerayuth.in.th/docFiles/cs0.4.pdfแนะนําภาษา C# 1. จุดประสงค

สถาบนสงเสรมการสอนวทยาศาสตรและเทคโนโลย 106

ใบงานท 6.5 ถอดรหสลบจารชน

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

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

• ตวหนงสอถกพมพจากขวาไปซาย แทนทจะเปนซายไปขวาเหมอนปกต • อกขระ 'R' ถกแทนดวยอกขระ 'E' ในการเขารหส • อกขระ 'W' ถกแทนดวยอกขระ 'R' ในการเขารหส • อกขระ 'E' ถกแทนดวยอกขระ 'W' ในการเขารหส • อกขระอน ๆ รวมถงตวเลขและสญลกษณตาง ๆ ไมมการเปลยนแปลงใด ๆ

เมอไดขอมลสาคญเหลานมาแลว ทานจงตดสนใจเขยนโปรแกรมภาษา C# ขนมาเพอเพมความรวดเรวในการถอดรหส โปรแกรมนจะรบขอความทถกเขารหสเอาไวและรายงานผลลพธออกมาเปนขอความทถกถอดรหสแลว ดงตวอยาง Enter text: SNOPAWR WEOM DWWN NEED MORE WEAPONS

รายชอสมาชกในกลมท…………………. 1. ………………………………………………… 2. …………………………………………………. 3. ………………………………………………… 4. ………………………………………………….

Page 107: คู มืออบรมการเข ียนโปรแกรมด วยภาษา C#weerayuth.in.th/docFiles/cs0.4.pdfแนะนําภาษา C# 1. จุดประสงค

สถาบนสงเสรมการสอนวทยาศาสตรและเทคโนโลย 107

จากนนลองใชโปรแกรมทเขยนขนมาถอดรหสขอความตอไปน LUFITUAWB SI WFIL

ถอดรหสไดเปน GNIMMAEGOEP WVOL I

ถอดรหสไดเปน UOY HTIR WB WCEOF WHT YAM

ถอดรหสไดเปน

Page 108: คู มืออบรมการเข ียนโปรแกรมด วยภาษา C#weerayuth.in.th/docFiles/cs0.4.pdfแนะนําภาษา C# 1. จุดประสงค

สถาบนสงเสรมการสอนวทยาศาสตรและเทคโนโลย 108

ใบงานท 6.6 แผนภมแทง

ใหเขยนโปรแกรมเพอแกปญหาตามสถานการณตอไปน

คณครทานหนงตองการเปรยบเทยบคะแนนสอบของนกเรยนในหองเรยน แตการพจารณาจากคะแนนทเปนตวเลขในตารางนนเปนการยากทจะแยกแยะคนทไดคะแนนสงตาออกจากกน เพอชวยเหลอคณครทานน ทานไดเสนอตวเขยนโปรแกรมสาหรบประมวลผลคะแนนใหอยในรปแผนภมแทง โดยโปรแกรมจะรบคาจานวนนกเรยนและคะแนนของนกเรยนแตละคนจากผใช และนาคะแนนแตละคนมาวาดกราฟแทงตามแนวขวางทมความยาวเทากบคะแนนทได ดงตวอยาง How many students? 6 Student#1 score: 25 Student#2 score: 39 Student#3 score: 48 Student#4 score: 12 Student#5 score: 20 Student#6 score: 30 ID| Score --+------------------------------------------------ 1|*************************(25) 2|***************************************(39) 3|************************************************(48) 4|************(12) 5|********************(20) 6|******************************(30)

รายชอสมาชกในกลมท…………………. 1. ………………………………………………… 2. …………………………………………………. 3. ………………………………………………… 4. ………………………………………………….

Page 109: คู มืออบรมการเข ียนโปรแกรมด วยภาษา C#weerayuth.in.th/docFiles/cs0.4.pdfแนะนําภาษา C# 1. จุดประสงค

สถาบนสงเสรมการสอนวทยาศาสตรและเทคโนโลย 109

Page 110: คู มืออบรมการเข ียนโปรแกรมด วยภาษา C#weerayuth.in.th/docFiles/cs0.4.pdfแนะนําภาษา C# 1. จุดประสงค

สถาบนสงเสรมการสอนวทยาศาสตรและเทคโนโลย 110

ใบความรท 6.1 ชนดขอมลแบบอาเรย

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

1. การประกาศตวแปรแบบอาเรย ดงเชนตวแปรทว ๆ ไป ตวแปรแบบอาเรยจะตองมการประกาศลวงหนากอนการใชงาน โดยม

รปแบบดงตอไปน DataType[] ArrayName;

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

ตวอยางท 6.1 สวนของโปรแกรมตอไปนเปนการประกาศตวแปรแบบอาเรยสามตวคอ score, grade และ Name เพอเกบขอมลประเภทจานวนเตม อกขระ และสตรง ตามลาดบ ใหพจารณาการประกาศตวแปรแบบอาเรยเหลานเทยบกบการประกาศตวแปรตามปกตในตอนทายโดยดความหมายจากคอมเมนตททายแตละบรรทด int[] score; // score refers to an array of integers char[] grade; // grade refers to an array of characters string[] name; // Name refers to an array of strings

Page 111: คู มืออบรมการเข ียนโปรแกรมด วยภาษา C#weerayuth.in.th/docFiles/cs0.4.pdfแนะนําภาษา C# 1. จุดประสงค

สถาบนสงเสรมการสอนวทยาศาสตรและเทคโนโลย 111

int s; // s refers to an integer char c; // c refers to a character string n; // n refers to a string

2. การสรางอาเรย ตวแปรแบบอาเรยทถกประกาศขนมาตามรปแบบขางตนนนสามารถนาไปใชเพยงแคอางถงอาเรย

ชนดนนๆเทานน อยางไรกตาม ณ ขณะนเรายงไมมอาเรยทแทจรงทจะอางถง ดงนนขนตอนตอไปจะเปนการสงใหคอมพวเตอรสรางอาเรยขนมาไวในหนวยความจาของเครอง โดยคาสงทเราจะใชในกระบวนการนคอคาสง new ซงมรปแบบการใชงานดงน new DataType[num_elements]

ในทน DataType คอชนดขอมล และ num_elements คอนพจนแบบจานวนเตมแสดงขนาดของอาเรยทเราตองการสราง การใชงานคาสง new ในรปแบบขางตนนนอยในรปของนพจนทใหคาอางองไปยงอาเรยทเพงถกสรางขนมา ดงนนโดยสวนใหญแลวเราจะนยมนาคาอางองนไปใหกบตวแปรแบบอาเรยทเราไดประกาศไวลวงหนาแลว เพอความสะดวกในการอางองถงอาเรยตวนในภายหลง ดงนนคาสง new จงมกพบในรป ArrayName = new DataType[num_elements];

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

ตวอยางท 6.2 การประกาศตวแปรแบบอาเรยและการสรางอาเรย • สรางอาเรยสาหรบเกบจานวนเตม 5 ตว โดยอางองผานตวแปรแบบอาเรยชอ scores

int[] scores; scores = new int[5];

ตามทไดกลาวไวแลวขางตน เราสามารถรวมเอาการประกาศตวแปรแบบอาเรยและการสรางอาเรยไวในคาสงเดยวกนดงน int[] scores = new int[5];

• สรางอาเรยสาหรบเกบชอนกเรยน 10 คน อางองผานตวแปรแบบอาเรยชอ names string[] names; names = new string[10];

หรอ string[] names = new string[10];

Page 112: คู มืออบรมการเข ียนโปรแกรมด วยภาษา C#weerayuth.in.th/docFiles/cs0.4.pdfแนะนําภาษา C# 1. จุดประสงค

สถาบนสงเสรมการสอนวทยาศาสตรและเทคโนโลย 112

นอกจากนอาเรยทสรางขนมาใหมยงสามารถกาหนดคาเรมตนใหกบขอมลในอาเรยไดอกดวยโดยอาศยคาสงในรปแบบตอไปน ArrayName = new DataType[num_elements] { value0, value1,..., valueN-1};

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

หากมการกาหนดคาเรมตนใหกบขอมลในอาเรยแลว ภาษา C# ยอมใหเราละการระบขนาดของอาเรยทเราสรางขนมาได เนองจากขนาดของอาเรยถกกาหนดไวโดยจานวนคาเรมตนทใสไวภายในวงเลบปกกาอยแลว ดงนนเราจงสามารถใชรปแบบคาสงดงนได ArrayName = new DataType[] {value0, value1, ..., valueN-1};

สงเกตวาเราไดละสวนทเปน num_elements ไว ยงไปกวานนคาสงขางตนยงสามารถเขยนใหสนลงไดอกโดยละคาสง new ไว จงเหลอแคเพยง DataType[] ArrayName = {value0, value1, ..., valueN-1};

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

ตวอยางท 6.3 สรางอาเรยชอ scores เพอเกบจานวนเตม 5 จานวนโดยมคาเรมตนเทากบ 10, 50, 10, 55 และ 60 ตามลาดบ int[] scores = new int[5] {10, 50, 10, 55, 60};

หรอ int[] scores = new int[] {10, 50, 10, 55, 60};

หรอ int[] scores = {10, 50, 10, 55, 60};

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

ของขอมลนน ๆ โดยคาดชนสาหรบขอมลตวแรกสดในอาเรยถกาหนดใหเปนดชนหมายเลข 0 ถดมาเปนหมายเลข 1 เรอยไป ดงนนสาหรบอาเรยทมความยาว N แลว คาของดชนทใชงานไดจงเรมตงแต 0 ถง N-1 ในภาษา C# ขอมล ณ ตาแหนง idx ภายในอาเรยชอ ArrayName จะถกอางถงในรปแบบ ArrayName[idx]

Page 113: คู มืออบรมการเข ียนโปรแกรมด วยภาษา C#weerayuth.in.th/docFiles/cs0.4.pdfแนะนําภาษา C# 1. จุดประสงค

สถาบนสงเสรมการสอนวทยาศาสตรและเทคโนโลย 113

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

ตวอยางท 6.4 พจารณาอาเรย scores ซงประกอบดวยจานวนเตม 5 จานวน • กาหนดคา 52 ใหกบขอมลตวแรกของอาเรย

scores[0] = 52;

• นาขอมลในตาแหนงทายสดของอาเรยมาแสดงผลบนหนาจอ Console.WriteLine(scores[4]);

• กาหนดใหคาทกคาในอาเรยมคาเทากบ 3 for (int i = 0; i < 5; i++) scores[i] = 3;

• คานวณผลรวมของคาทงหมดภายในอาเรย int sum = 0; for (int i = 0; i < 5; i++) sum = sum + scores[i];

• นาคาทงหมดในอาเรยมาแสดงผลบนหนาจอ for (int i = 0; i < 5; i++) Console.WriteLine("Student {0}: {1}", i+1, scores[i]);

Page 114: คู มืออบรมการเข ียนโปรแกรมด วยภาษา C#weerayuth.in.th/docFiles/cs0.4.pdfแนะนําภาษา C# 1. จุดประสงค

สถาบนสงเสรมการสอนวทยาศาสตรและเทคโนโลย 114

ใบความรท 6.2 การหาขนาดของอารเรย

บอยครงทเราอาจตองเปลยนแปลงขนาดของอาเรยภายในโปรแกรมทเราไดเขยนขนมาเรยบรอยแลวหากเราตองการเพมเตมความสามารถของโปรแกรมใหประมวลผลขอมลมากขน หรอดวยสาเหตอนใดกตาม หากเราลองพจารณาโปรแกรมในใบงานท 6.1 จะเหนวาการดดแปลงโปรแกรมใหทางานกบอาเรยทมขนาดตางไปจากเดมนน เราไมสามารถทาเพยงแคเปลยนคาสงในการสรางอาเรยเทานน เรายงตองเปลยนเงอนไขในโครงสราง for เพอใหการวนซามจานวนรอบทสอดคลองกบจานวนขอมลในอาเรยอกดวย แมจะเปนการงายทจะดดแปลงโปรแกรมในลกษณะดงกลาว ความผดพลาดสามารถเกดขนไดงายในโปรแกรมทยาวและซบซอนมากยงขนโดยเฉพาะอยางยงโปรแกรมทมการใชงานอาเรยมากกวาหนง และการใชงานอาเรยรวมกบเมทอดทเขยนขนมาเพอประมวลผลอาเรยทมขนาดใดๆ ปญหาเหลานสามารถแกไดโดยใชคาสงอานคาคณสมบต (property) ของอาเรยทมใหอยแลวในภาษา C# โดยคณสมบตดงกลาวมชอวา Length ซงมรปแบบการใชงานในรปของนพจนดงน ArrayName.Length

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

ตวอยางท 6.5 โปรแกรมดานลางคานวณนาหนกเฉลยของประชากรตวอยางจานวน 5 คน โดยคานาหนกถกเกบไวในอาเรย weights using System; class AverageWeight { static void Main() { double[] weights = {65.5, 44.8, 70.0, 54.2, 77.6}; double sum = 0.0; for (int i = 0; i < weights.Length; i++) sum += weights[i]; Console.WriteLine("Average weight is {0:f2}", sum/weights.Length); } }

Page 115: คู มืออบรมการเข ียนโปรแกรมด วยภาษา C#weerayuth.in.th/docFiles/cs0.4.pdfแนะนําภาษา C# 1. จุดประสงค

สถาบนสงเสรมการสอนวทยาศาสตรและเทคโนโลย 115

ใบความรท 6.3 คาสง foreach

ภาษา C# ไดเตรยมโครงสราง foreach สาหรบการเขยนโปรแกรมแบบวนซาเพอความสะดวกในการเขาถงขอมลในอาเรย การใชงานมรปแบบดงน foreach (DataType var in ArrayName) statement;

โดย DataType คอชนดขอมลภายในอาเรย var คอชอตวแปรสาหรบเกบคาทละคาจากอาเรยในการวนซาแตละรอบ และ ArrayName คออาเรยทจะนาคาภายในมาใชงาน ดงนนคาสง statement จงถกกระทาเปนจานวนครงเทากบจานวนขอมลในอาเรย

เชนเดยวกบโครงสรางอนๆ ทไดศกษาไปกอนหนานแลว คาสงทถกวนซาจะมไดเพยงคาสงเดยว การใชงานมากกวาหนงคาสงตองรวมคาสงทงหมดไวภายในวงเลบปกกา foreach (DataType var in ArrayName) { statement1; statement2; : statementN; }

ตวอยางท 6.6 โปรแกรมดานลางถกดดแปลงจากโปรแกรมในตวอยางท 6.5 โดยมการใชงานโครงสราง foreach แทนทจะเปนโครงสราง for ตามปกต ใหสงเกตความแตกตางทบรรทดท 6 และ 7 1: using System; 2: class AverageWeight { 3: static void Main() { 4: double[] weights = {65.5, 44.8, 70.0, 54.2, 77.6}; 5: double sum = 0.0; 6: foreach (double x in weights) 7: sum += x; 8: Console.WriteLine("Average weight is {0:f2}", 9: sum/weights.Length); 10: } 11: }

Page 116: คู มืออบรมการเข ียนโปรแกรมด วยภาษา C#weerayuth.in.th/docFiles/cs0.4.pdfแนะนําภาษา C# 1. จุดประสงค

สถาบนสงเสรมการสอนวทยาศาสตรและเทคโนโลย 116

ใบความรท 6.4 การสงอาเรยไปยงเมทอด

เราไดทราบจากกจกรรมทผานมาแลววาเมทอดสามารถรบคาจากผเรยกผานทางพารามเตอรของเมทอดนน ๆ นอกจากการสงคาในรปขอมลพนฐาน (เชน int, double, string) แลว ภาษา C# อนญาตใหเมทอดรบพารามเตอรในรปของอาเรยไดอกดวย ซงทาไดงายๆ เพยงแคระบใหพารามเตอรทรบเขามามชนดขอมลเปนแบบอาเรยเทานนลองพจารณาตวอยาง

ตวอยางท 6.7 โปรแกรมดานลางประกาศเมทอดชอ ArraySum ซงรบพารามเตอรหนงตวเปนอาเรยของ double จากนนจงคานวณผลรวมของคาทงหมดในอาเรยและสงคาผลรวมกลบไปยงผเรยก สงเกตการระบชนดของพารามเตอรเปน double[] ในบรรทดท 3 และการใชงานโครงสราง foreach ซงทาใหเมทอดนประมวลผลอาเรยไดทกขนาด 1: using System; 2: class ArrayTest { 3: static double ArraySum(double[] data) { 4: double sum = 0.0; 5: foreach (double x in data) 6: sum += x; 7: return sum; 8: } 9: 10: static void Main() { 11: double[] myData = {1.0, 2.4, 3.6, 4.8}; 12: Console.WriteLine("Sum = {0}", ArraySum(myData)); 13: } 14: }

Page 117: คู มืออบรมการเข ียนโปรแกรมด วยภาษา C#weerayuth.in.th/docFiles/cs0.4.pdfแนะนําภาษา C# 1. จุดประสงค

สถาบนสงเสรมการสอนวทยาศาสตรและเทคโนโลย 117

ใบความรท 6.5 การการอางถงสตรงในรปแบบอาเรย

ภาษา C# อนญาตใหเราประมวลผลขอมลชนดขอความหรอสตรง (string) เสมอนวาขอมลนนเปนอาเรยของอกขระโดยใชตวดาเนนการตางๆ ทใชกบอาเรยไดทนท เชนตวดาเนนการ [] โครงสราง foreach และคณสมบต Length โดยมขอจากดตรงทเราทาไดเพยงอานคาอกขระ ณ ตาแหนงตางๆ ของขอความไดเทานน แตไมสามารถเปลยนแปลงสวนหนงสวนใดของขอความนนๆ ได

ตวอยางท 6.8 ตวอยางตอไปนรบขอความจากผใชและรายงานจานวนตวอกขระ 'E' ภายในขอความนนๆ using System; class CountE { static void Main() { Console.Write("Enter a string: "); string s = Console.ReadLine(); int count = 0; for (int i = 0; i < s.Length; i++) { if (s[i] == 'E') count++; } Console.WriteLine("There are {0} E's in the string", count); } }

ตวอยางผลการทางาน Enter a string: HELLO EVERYONE There are 4 E's in the string

ตวอยางท 6.9 โปรแกรมตอไปนใหผลการทางานเหมอนโปรแกรมในตวอยางทแลวทกประการ แตมการใชงานโครงสราง foreach แทนการใชโครงสราง for using System; class CountE { static void Main() { Console.Write("Enter a string: "); string s = Console.ReadLine(); int count = 0; foreach (char c in s) { if (c == 'E') count++; } Console.WriteLine("There are {0} E's in the string", count); } }

Page 118: คู มืออบรมการเข ียนโปรแกรมด วยภาษา C#weerayuth.in.th/docFiles/cs0.4.pdfแนะนําภาษา C# 1. จุดประสงค

สถาบนสงเสรมการสอนวทยาศาสตรและเทคโนโลย 118

กจกรรมท 7 อาเรยหลายมต

1. จดประสงค ใหผเรยนสามารถ 1.1 ประกาศตวแปรอาเรยสองมต 1.2 เรยกใชตวแปรอาเรยสองมต 1.3 ใชเมทอดเพอหาขนาดของอาเรย 2. แนวคด

อาเรยทมโครงสรางแบบหลายมต (multi-dimensional array) โดยจานวนมตมไดตงแตสองมต สามมต หรอมากกวา เพอการจดการขอมลทซบซอนมากขน อยางไรกตามอาเรยแบบสองมตนนจดวาเพยงพอแลวสาหรบงานสวนใหญ ในกรณน อาเรยจะถกมองอยในรปของตารางทแตละชองสามารถเกบขอมลโดด ๆ ไดแทนทจะอยในรปแถวเรยงหนง การประกาศตวแปรอาเรย เราสามารถกาหนดคาเรมตนใหกบขอมลแตละชองพรอมกบการสรางอาเรยไดทนทโดยระบคาไวภายในเครองหมายปกกา

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

การหาขนาดของอาเรยในแตละมต (ดงเชนการประมวลผลแมตรกซ (ภาษา C# มเมทอดชอ GetLength เพอตรวจสอบขนาดอาเรยทมตตาง ๆ ซงมการใชงานในรปของนพจนแบบจานวนเตม

3. สออปกรณ

3.1 ใบงาน ใบงานท เรอง เวลา (นาท)

7.1 แสดงคาในแมตรกซ 20 7.2 กาหนดคาใหแมตรกซ 20 7.3 แมตรกซทรานสโพส 20 7.4 ดเทอรมแนนทของแมตรกซ 30 7.5 การคณแมตรกซ 30

3.2 ใบความร

Page 119: คู มืออบรมการเข ียนโปรแกรมด วยภาษา C#weerayuth.in.th/docFiles/cs0.4.pdfแนะนําภาษา C# 1. จุดประสงค

สถาบนสงเสรมการสอนวทยาศาสตรและเทคโนโลย 119

- ใบความรท 7 .1 เรองอาเรยสองมต - ใบความรท 7.2 เรองการหาขนาดของอาเรย

3.3 อนๆ - เครองคอมพวเตอรเทากบจานวนกลม - โปรแกรมวชวลซชารป เอกเพรส

4. วธดาเนนการ

4.1 การจดเตรยม 4.1.1 แบงผเรยนเปนกลม กลมละ 2 คน 4.1.2 เตรยมใบงานท 7.1 – 7.5 ตามจานวนกลมและใบความรท 7.1 – 7.2 ตามจานวนผเรยน

4.2 ขนตอนการดาเนนการ 4.2.1 ผสอนกลาวถงลกษณะของอาเรยสองมต 4.2.2 ผเรยนแตละกลมศกษาใบความรท 7.1 เรองอาเรยสองมต และใบความรท 7.2 เรองการหา

ขนาดของอาเรย จากนนทาใบงานท 7.1 เรองแสดงคาในแมตรกซ ใบงานท 7.2 เรอง กาหนดคาใหแมตรกซ และใบงานท 7.3 เรองแมตรกซทรานสโพส

4.2.3 ผสอนสมผเรยนออกมานาเสนอคาตอบในใบงานท 7.1-7.3 4.2.4 ถามเวลาเหลอใหผเรยนทาใบงานท 7.4 เรองดเทอรมแนนทของแมตรกซ และใบงานท 7.5

การคณแมตรกซ หรอทานอกเวลาเสรม 4.2.5 ผเรยนและผสอนรวมกนอภปรายและสรปเกยวกบการใชงานอาเรยสองมต

5. การวดและประเมนผล 5.1 ตรวจคาตอบจากใบงาน

6. แหลงความรเพมเตม

6.1 http://msdn.microsoft.com/th-th/vcsharp/default(en-us).aspx 7. ขอเสนอแนะ

-

Page 120: คู มืออบรมการเข ียนโปรแกรมด วยภาษา C#weerayuth.in.th/docFiles/cs0.4.pdfแนะนําภาษา C# 1. จุดประสงค

สถาบนสงเสรมการสอนวทยาศาสตรและเทคโนโลย 120

ใบงานท 7.1 แสดงคาในแมตรกซ

ใหผเรยนศกษาใบความรท 7.1 และใบความรท 7.2 จากนนสรางโปรเจกตและเขยนโปรแกรมจากโจทยทกาหนดใหตอไปน เราจะเขยนเมทอดชอ ShowMatrix เพอแสดงขอมลภายในแมตรกซออกทางหนาจอ โดยตวเมทอดจะรบแมตรกซมาในรปของพารามเตอรแบบอาเรยสองมต จงเตมสวนทขาดไปของเมทอดเพอใหโปรแกรมทางานไดอยางสมบรณตามตวอยางผลลพธ using System; class Matrix { static void ShowMatrix(int[,] m) { for (int i = 0; i < ___________________; i++) { for (int j = 0; j < ___________________; j++) { Console.Write("{0,4}", _________________); } Console.WriteLine(); } } static void Main() { int[,] A = { { 5, 3, 8}, { 2, 6, 10}, { 1, 8, 25}, {12, 3, 30} }; ShowMatrix(A); } }

ตวอยางผลการทางาน 5 3 8 2 6 10 1 8 25 12 3 30

รายชอสมาชกในกลมท…………………. 1. ………………………………………………… 2. …………………………………………………. 3. ………………………………………………… 4. ………………………………………………….

Page 121: คู มืออบรมการเข ียนโปรแกรมด วยภาษา C#weerayuth.in.th/docFiles/cs0.4.pdfแนะนําภาษา C# 1. จุดประสงค

สถาบนสงเสรมการสอนวทยาศาสตรและเทคโนโลย 121

ใบงานท 7.2 กาหนดคาใหแมตรกซ

ใหผเรยนศกษาใบความรท 7.2 จากนนสรางโปรเจกตและเขยนโปรแกรมจากโจทยทกาหนดใหตอไปน โปรแกรมดานลางจะถามขนาดของแมตรกซจากผใชและเรยกเมทอดชอ ReadMatrix เพอสรางแมตรกซตามขนาดทกาหนดและอานขอมลของแมตรกซมาทละคาจากผใช จากนนจงเรยกเมทอด ShowMatrix จากใบงานท 7.1 เพอแสดงแมตรกซออกทางหนาจอ using System; class Matrix { // คดลอกเมทอด ShowMatrix จากแบบฝกหดทแลว // มาปะในตาแหนงน static int[,] ReadMatrix(int nrows, int ncols) { int[,] m = new int[_______,_______]; for (int i = 0; i < nrows; i++) { for (int j = 0; j < ncols; j++) { Console.Write("Enter element[{0},{1}]: ", i+1, j+1); _______________ = int.Parse(Console.ReadLine()); } } return m; } static void Main() { int num_rows, num_cols; int[,] A; Console.Write("How many rows? "); num_rows = int.Parse(Console.ReadLine()); Console.Write("How many columns? "); num_cols = int.Parse(Console.ReadLine()); A = ReadMatrix(num_rows, num_cols); Console.WriteLine("Matrix A is"); ShowMatrix(A); } }

รายชอสมาชกในกลมท…………………. 1. ………………………………………………… 2. …………………………………………………. 3. ………………………………………………… 4. ………………………………………………….

Page 122: คู มืออบรมการเข ียนโปรแกรมด วยภาษา C#weerayuth.in.th/docFiles/cs0.4.pdfแนะนําภาษา C# 1. จุดประสงค

สถาบนสงเสรมการสอนวทยาศาสตรและเทคโนโลย 122

ตวอยางผลการทางาน How many rows? 2 How many columns? 3 Enter element[1,1]: 9 Enter element[1,2]: 8 Enter element[1,3]: 7 Enter element[2,1]: 6 Enter element[2,2]: 5 Enter element[2,3]: 4 Matrix A is 9 8 7 6 5 4

Page 123: คู มืออบรมการเข ียนโปรแกรมด วยภาษา C#weerayuth.in.th/docFiles/cs0.4.pdfแนะนําภาษา C# 1. จุดประสงค

สถาบนสงเสรมการสอนวทยาศาสตรและเทคโนโลย 123

ใบงานท 7.3 แมตรกซทรานสโพส

ใหผเรยนศกษาใบความรท 7.2 จากนนสรางโปรเจกตและเขยนโปรแกรมจากโจทยทกาหนดใหตอไปน เพมเมทอดชอ TransposeMatrix ลงในโปรแกรมจากแบบฝกหดทแลว เพอคานวณทรานสโพส แมตรกซ (การสลบเปลยนแถวและคอลมน) จากแมตรกซทรบเขามา ตวเมทอดจะรบแมตรกซในรปพารามเตอรแบบอาเรยสองมตและสงคากลบเปนอาเรยตวใหมทเกบคาแมตรกซทถกทรานสโพสแลว using System; class Matrix { // คดลอกเมทอด ShowMatrix และ ReadMatrix // จากแบบฝกหดทแลวมาปะในตาแหนงน static int[,] TransposeMatrix(int[,] m) { int[,] mt = new int[____________________,____________________]; for (int i = 0; i < m.GetLength(0); i++) for (int j = 0; j < m.GetLength(1); j++) ______________________________________________________; return mt; } static void Main() { int num_rows, num_cols; int[,] A, At; Console.Write("How many rows? "); num_rows = int.Parse(Console.ReadLine()); Console.Write("How many columns? "); num_cols = int.Parse(Console.ReadLine()); A = ReadMatrix(num_rows, num_cols); Console.WriteLine("Matrix A is"); ShowMatrix(A); Console.WriteLine("Transpose of Matrix A is"); At = TransposeMatrix(A); ShowMatrix(At); } }

รายชอสมาชกในกลมท…………………. 1. ………………………………………………… 2. …………………………………………………. 3. ………………………………………………… 4. ………………………………………………….

Page 124: คู มืออบรมการเข ียนโปรแกรมด วยภาษา C#weerayuth.in.th/docFiles/cs0.4.pdfแนะนําภาษา C# 1. จุดประสงค

สถาบนสงเสรมการสอนวทยาศาสตรและเทคโนโลย 124

ตวอยางผลการทางาน How many rows? 2 How many columns? 3 Enter element[1,1]: 1 Enter element[1,2]: 2 Enter element[1,3]: 3 Enter element[2,1]: 4 Enter element[2,2]: 5 Enter element[2,3]: 6 Matrix A is 1 2 3 4 5 6 Transpose of Matrix A is 1 4 2 5 3 6

Page 125: คู มืออบรมการเข ียนโปรแกรมด วยภาษา C#weerayuth.in.th/docFiles/cs0.4.pdfแนะนําภาษา C# 1. จุดประสงค

สถาบนสงเสรมการสอนวทยาศาสตรและเทคโนโลย 125

ใบงานท 7.4 ดเทอรมแนนทของแมตรกซ

ดเทอรมแนนท (determinant) ของแมตรกซขนาด 2×2 ซงมสตรการคานวณดงน det(A) = (a11a22 – a12a21)

จงเขยนโปรแกรมเพอนาเขาขอมลแมตรกซขนาด 2×2 จากผใช คานวณดเทอรมแนนทและแสดงผลลพท

ตวอยางผลการทางาน Enter matrix A Enter element[1,1]: 1 Enter element[1,2]: 2 Enter element[2,1]: 3 Enter element[2,2]: 4 The determenant of A is -2

จากนนคดลอกโปรแกรมลงในชองวาง โดยไมตองลอกเมทอด ShowMatrix และ/หรอ ReadMatrix หากนามาใชโดยไมมการเปลยนแปลง

รายชอสมาชกในกลมท…………………. 1. ………………………………………………… 2. …………………………………………………. 3. ………………………………………………… 4. ………………………………………………….

Page 126: คู มืออบรมการเข ียนโปรแกรมด วยภาษา C#weerayuth.in.th/docFiles/cs0.4.pdfแนะนําภาษา C# 1. จุดประสงค

สถาบนสงเสรมการสอนวทยาศาสตรและเทคโนโลย 126

ใบงานท 7.5 การคณแมตรกซ

ผลลพธของการคณแมตรกซ nmA × และ pnB × เขาดวยกนจะไดผลลพธเปนแมตรกซ pmC × ซงสมาชกแตละตวจะมคาตามสตร

∑=

=n

kkjikij baC

1

จงเขยนโปรแกรมเพอคณแมตรกซขนาด 2×2 และแสดงผลลพธออกทางหนาจอ

ตวอยางผลการทางาน Enter matrix A Enter element[1,1]: 1 Enter element[1,2]: 2 Enter element[2,1]: 3 Enter element[2,2]: 4 Enter matrix B Enter element[1,1]: 5 Enter element[1,2]: 6 Enter element[2,1]: 7 Enter element[2,2]: 8 Matrix A*B is 19 22 43 50

รายชอสมาชกในกลมท…………………. 1. ………………………………………………… 2. …………………………………………………. 3. ………………………………………………… 4. ………………………………………………….

Page 127: คู มืออบรมการเข ียนโปรแกรมด วยภาษา C#weerayuth.in.th/docFiles/cs0.4.pdfแนะนําภาษา C# 1. จุดประสงค

สถาบนสงเสรมการสอนวทยาศาสตรและเทคโนโลย 127

จากนนคดลอกโปรแกรมลงในชองวาง โดยไมตองลอกเมทอด ShowMatrix และ/หรอ ReadMatrix หากนามาใชโดยไมมการเปลยนแปลง

Page 128: คู มืออบรมการเข ียนโปรแกรมด วยภาษา C#weerayuth.in.th/docFiles/cs0.4.pdfแนะนําภาษา C# 1. จุดประสงค

สถาบนสงเสรมการสอนวทยาศาสตรและเทคโนโลย 128

ใบความรท 7.1 อารเรยสองมต

การใชงานอาเรยทผานมานนจากดอยเพยงโครงสรางแบบมตเดยวเทานนซงอาเรยในรปแบบนจะมการเกบขอมลแบบแถวเรยงหนงและมการเขาถงขอมลผานดชนซงประกอบดวยตวเลขเพยงตวเดยว อาเรยแบบนใชงานไดดอยแลวในสถานการณทว ๆ ไป แตกยงมงานอกหลายประเภททตองการการจดการขอมลทซบซอนมากกวานนซงตองอาศยโครงสรางขอมลทซบซอนมากยงขนไปดวย เพอการนภาษา C# จงอนญาตใหเราสรางและใชงานอาเรยทมโครงสรางแบบหลายมต (multi-dimensional array) ไดโดยจานวนมตมไดตงแตสองมต สามมต หรอมากกวา อยางไรกตามอาเรยแบบสองมตนนจดวาเพยงพอแลวสาหรบงานสวนใหญ ในกรณน อาเรยจะถกมองอยในรปของตารางทแตละชองสามารถเกบขอมลโดด ๆ ไดแทนทจะอยในรปแถวเรยงหนงเหมอนทผานมาลองเปรยบเทยบอาเรยสองชนดดงแสดงในภาพ

รปทางซายมอเปนตวอยางของอาเรยหนงมตดงนนขอมลภายในอาเรยจงถกอางองโดยใชดชนท

ประกอบดวยตวเลขเพยงตวเดยวเพอบงบอกตาแหนงของขอมล ตวอยางเชนชองขอมลทมดชนเทากบ 2 มการเกบคา 57 เอาไว สวนรปทางขวามอแสดงตวอยางของอาเรยแบบสองมตซงตองใชจานวนเตมสองคาในการระบดชน เชนชองเกบขอมลทตาแหนง (1,3) มการเกบคา 10 สวนชองขอมลทดชน (2,4) มการเกบคา 21

1. การประกาศและสรางอาเรยสองมต ตวแปรแบบอาเรยสองมตมการประกาศตามรปแบบดานลาง DataType [,] ArrayName;

โดยท ArrayName คอชอของตวแปรแบบอาเรย และ DataType คอชนดขอมลในแตละชองของอาเรย

เชนเดยวกบการใชงานอาเรยแบบหนงมต ตวแปรแบบอาเรยสองมตนนยงไมพรอมทจะถกใชงานจนกวาจะมการสรางอาเรยจรง ๆ ขนมาใหตวแปรนนอางองถง การสรางอาเรยทาไดโดยการใชตวดาเนนการ new ดงน new DataType[nrows,ncols]

Page 129: คู มืออบรมการเข ียนโปรแกรมด วยภาษา C#weerayuth.in.th/docFiles/cs0.4.pdfแนะนําภาษา C# 1. จุดประสงค

สถาบนสงเสรมการสอนวทยาศาสตรและเทคโนโลย 129

การใชงานตวดาเนนการ new ขางตนจะสรางอาเรยสองมตสาหรบขอมลชนด DataType ทมจานวน nrows แถวและ ncols คอลมน เนองจากการใชตวดาเนนการ new ในรปแบบขางตนนนจะอยในรปของนพจน สวนใหญจงตองมการนาตวแปรแบบอาเรยทประกาศไวกอนแลวมารบคาเพอใชอางองคาในอาเรยตอไปภายหลง ดงแสดงในตวอยางตอไปน

ตวอยางท 7.1 ประกาศตวแปรแบบอาเรยชอ students เพอใชอางองถงอาเรยสองมตทเกบรายชอของนกเรยนตามทนง (แถว,คอลมน) ภายในชนเรยน โดยใหอาเรยมขนาด 5 แถวและ 3 คอลมน string[,] students; students = new string[5,3];

หรอ string[,] students = new string[5,3];

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

ภายในเครองหมายปกกาเชนเดยวกบอาเรยหนงมต อยางไรกตาม เนองจากมตทเพมขน การกาหนดคาเรมตนจงมโครงสรางทซบซอนขนโดยประกอบดวยเครองหมายปกกาหลายชนดงแสดง ArrayName = new DataType[nrows,ncols] { { value(0,0), value(0,1), ..., value(0,ncols-1) }, { value(1,0), value(1,1), ..., value(1,ncols-1) }, : : : { value(nrows-1,0), value(nrows-1,1), ..., value(nrows-1,ncols-1) } };

เนองจากขนาดของอาเรยสามารถละไดหากมการกาหนดคาเรมตน ดงนนรปแบบดานลางจงใหผลลพธเชนเดยวกน ArrayName = new DataType[,] { { value(0,0), value(0,1), ..., value(0,ncols-1) }, { value(1,0), value(1,1), ..., value(1,ncols-1) }, : : : { value(nrows-1,0), value(nrows-1,1), ..., value(nrows-1,ncols-1) } };

และเชนเดยวกบอาเรยหนงมต ตวดาเนนการ new สามารถละไดโดยมขอจากดวาเราตองสรางอาเรยและประกาศตวแปรแบบอาเรยภายในคาสงเดยวกน DataType[,] ArrayName = { { value(0,0), value (0,1), ..., value(0,ncols-1) }, { value(1,0), value (1,1), ..., value(1,ncols-1) }, : : : { value(nrows-1,0), value(nrows-1,1), ..., value(nrows-1,ncols-1) } };

Page 130: คู มืออบรมการเข ียนโปรแกรมด วยภาษา C#weerayuth.in.th/docFiles/cs0.4.pdfแนะนําภาษา C# 1. จุดประสงค

สถาบนสงเสรมการสอนวทยาศาสตรและเทคโนโลย 130

ตวอยางท 7.2 สรางอาเรยสองมตและอางองผานตวแปรชอ A เพอเกบคาของแมตรกซขนาด 4×3 ทมสมาชกดงน

int[,] A = { { 5, 3, 8}, { 2, 6, 10}, { 1, 8, 25}, {12, 3, 30} }

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

ดชนของคอลมนเพอบงบอกตาแหนงทแนนอนของชองเกบขอมลภายในอาเรย เชนเดยวกบอาเรยมตเดยว ดชนของแถวและคอลมนนจะเรมตนทคา 0 และสนสดทจานวนแถวลบหนงและจานวนคอลมนลบหนงตามลาดบ เชนการอางถงขอมลทมดชนแถวเปน ri และดชนคอลมนเปน ci ในอาเรยชอ ArrayName จะเปนดงน ArrayName[ri,ci]

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

ตวอยางท 7.3 พจารณาแมตรกซ A จากตวอยางท 7.2 • แสดงคาสมาชกของแมตรกซ A[3,2] (หรอ 2,3a นนเอง(

Console.WriteLine(A[2,1]);

หมายเหต: สงเกตวาในโปรแกรมมการเรยกใช A[2,1] แทนทจะเปน A[3,2] เนองจากวาการระบตาแหนงในอาเรยสาหรบภาษา C# นนเรมตนทดชน 0 ในขณะทการระบตาแหนงในแมตรกซทางคณตศาสตรเรมตนท 1

• กาหนดคา 33 ใหกบสมาชก 3,4a A[3,2] = 33;

Page 131: คู มืออบรมการเข ียนโปรแกรมด วยภาษา C#weerayuth.in.th/docFiles/cs0.4.pdfแนะนําภาษา C# 1. จุดประสงค

สถาบนสงเสรมการสอนวทยาศาสตรและเทคโนโลย 131

ใบความรท 7.2 การหาขนาดของอาเรย

เราไดเรยนรจากปฏบตการครงกอนไปแลววาเราสามารถหาขนาดของอาเรยหนงมตใด ๆ ไดโดยใชคณสมบต Length ซงเปนคณสมบตทนามาใชไดกบอาเรยหลายมตไดเชนกน อยางไรกตาม การเขยนโปรแกรมสาหรบงานบางอยางจาเปนตองการทราบสดสวนของอาเรยในแตละมต (ดงเชนการประมวลผลแมตรกซ) ดงนนภาษา C# จงเตรยมเมทอดชอ GetLength เพอตรวจสอบขนาดอาเรยทมตตาง ๆ ซงมการใชงานในรปของนพจนแบบจานวนเตมดงน ArrayName.GetLength(dim_idx)

โดยท dim_idx แสดงหมายเลขมตทเราตองการทราบขนาด สาหรบอาเรยแบบสองมตนนมตหมายเลข 0 หมายถงแถว และมตหมายเลข 1 หมายถงคอลมน ดงนนนพจนสาหรบตรวจสอบจานวนแถวของอาเรยสองมตจงเขยนไดเปน ArrayName.GetLength(0)

และนพจนสาหรบตรวจสอบจานวนคอลมนของอาเรยจงเปน ArrayName.GetLength(1)

ตวอยางท 7.4 พจารณาแมตรกซ A จากตวอยางท 7.2 • ทาใหทกคาในคอลมนแรกของแมตรกซ A มคาเทากบ 1

for (int i = 0; i < A.GetLength(0); i++) A[i,0] = 1;

• ทาใหทกคาในแถวทสองของแมตรกซ A มคาเทากบ 5 for (int i = 0; i < A.GetLength(1); i++) A[1,i] = 5;

• ทาใหแมตรกซ A กลายเปนแมตรกซศนย for (int i = 0; i < A.GetLength(0); i++) for (int j = 0; i < A.GetLength(1); j++) A[i,j] = 0;

Page 132: คู มืออบรมการเข ียนโปรแกรมด วยภาษา C#weerayuth.in.th/docFiles/cs0.4.pdfแนะนําภาษา C# 1. จุดประสงค

สถาบนสงเสรมการสอนวทยาศาสตรและเทคโนโลย 132

แบบฝกหดเพมเตมเรองอาเรยสองมต

1. เขยนโปรแกรมบวกแมตรกซ 2 แมตรกซ ดงน

1 2 3 5 6 4

5 6 7 + 1 3 2

3 4 1 4 1 3

ตองการผลลพธ ดงน

6 8 7

6 9 9

7 5 4 2. เขยนโปรแกรมโดยใชอาเรยสองมตเกบขอมล เพอแสดงภาพดงน

3. เขยนโปรแกรมโดยใชขอมลจากตวแปรอาเรยในขอ 1 และใหแสดงภาพดงน

Page 133: คู มืออบรมการเข ียนโปรแกรมด วยภาษา C#weerayuth.in.th/docFiles/cs0.4.pdfแนะนําภาษา C# 1. จุดประสงค

สถาบนสงเสรมการสอนวทยาศาสตรและเทคโนโลย 133

กจกรรมท 8 การพฒนาโปรแกรมตดตอกบผใชแบบกราฟก

1. จดประสงค ใหผเรยนสามารถ 1.1 อธบายหลกการเขยนโปรแกรมเชงวตถ 1.2 สรางโปรเจกตแบบ Windows Application ดวย MS Visual C#

2. แนวคด

หลกการของการคดเชงวตถเปนการมองการพฒนาระบบเหมอนกบการมองโลกแหงความเปนจรง คอมองสงตาง ๆ เปนวตถหรอออบเจกต (object) ซงแตละออบเจกตจะมคณสมบตและการทางานเฉพาะตวทสามารถตรวจสอบและสงงานใหออบเจกตนน ๆ มพฤตกรรมตามทตองการได

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

3. สออปกรณ

3.1 ใบงาน ใบงานท เรอง เวลา (นาท)

8.1 ออกแบบโปรแกรมเครองคดเลข 30 8.2 โปรแกรมเครองคดเลขอยางงาย 30

3.2 ใบความร - ใบความรท 8 .1 เรองหลกการโปรแกรมเชงวตถ - ใบความรท 8.2 เรองการสรางโปรเจกตแบบ Windows

3.3 อนๆ - เครองคอมพวเตอรเทากบจานวนกลม - โปรแกรมวชวลซชารป เอกเพรส

Page 134: คู มืออบรมการเข ียนโปรแกรมด วยภาษา C#weerayuth.in.th/docFiles/cs0.4.pdfแนะนําภาษา C# 1. จุดประสงค

สถาบนสงเสรมการสอนวทยาศาสตรและเทคโนโลย 134

4. วธดาเนนการ 4.1 การจดเตรยม

4.1.1 แบงผเรยนเปนกลม กลมละ 2 คน 4.1.2 เตรยมใบงานท 8.1 – 8.2 ตามจานวนกลมและใบความรท 8.1 – 8.2 ตามจานวนผเรยน

4.2 ขนตอนการดาเนนการ 4.2.1 ผสอนกลาวถงการโปรแกรมเชงวตถ 4.2.2 ผเรยนแตละกลมศกษาใบความรท 8.1 เรองหลกการโปรแกรมเชงวตถ และทาใบงานท 8.1

เรองออกแบบโปรแกรมเครองคดเลข 4.2.3 ผสอนสมผเรยนออกมานาเสนอคาตอบในใบงานท 8.1 4.2.4 ผเรยนแตละกลมศกษาใบความรท 8.2 เรองการสรางโปรเจกตแบบ Windows และทาใบ

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

โปรเจกตแบบ Windows

5. การวดและประเมนผล 5.1 ตรวจคาตอบจากใบงาน

6. แหลงความรเพมเตม

6.1 http://msdn.microsoft.com/th-th/vcsharp/default(en-us).aspx

7. ขอเสนอแนะ -

Page 135: คู มืออบรมการเข ียนโปรแกรมด วยภาษา C#weerayuth.in.th/docFiles/cs0.4.pdfแนะนําภาษา C# 1. จุดประสงค

สถาบนสงเสรมการสอนวทยาศาสตรและเทคโนโลย 135

ใบงานท 8.1 ออกแบบโปรแกรมเครองคดเลข

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

รายชอสมาชกในกลมท…………………. 1. ………………………………………………… 2. …………………………………………………. 3. ………………………………………………… 4. ………………………………………………….

Page 136: คู มืออบรมการเข ียนโปรแกรมด วยภาษา C#weerayuth.in.th/docFiles/cs0.4.pdfแนะนําภาษา C# 1. จุดประสงค

สถาบนสงเสรมการสอนวทยาศาสตรและเทคโนโลย 136

ใบงานท 8.2 โปรแกรมเครองคดเลขอยางงาย

ใหผเรยนศกษาใบความรท 8.2 และปฏบตตามขนตอนในใบความร จากนนใหเขยนโปรแกรมตามทโจทยกาหนดใหตอไปน

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

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

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

1. ใหสรางฟอรมของโปรแกรม โดยประกอบดวย 1.1 ชองรบขอมลสามชอง 1.2 ปมกดหนงชอง และเปลยนชอปมเปน ADD

2. ในการเขยนคาสงโปรแกรมใหดบเบลคลกทปมแลวเขยนโปรแกรมดงตอไปน

รายชอสมาชกในกลมท…………………. 1. ………………………………………………… 2. …………………………………………………. 3. ………………………………………………… 4. ………………………………………………….

Page 137: คู มืออบรมการเข ียนโปรแกรมด วยภาษา C#weerayuth.in.th/docFiles/cs0.4.pdfแนะนําภาษา C# 1. จุดประสงค

สถาบนสงเสรมการสอนวทยาศาสตรและเทคโนโลย 137

จากโปรแกรมจะมการประกาศตวแปรอะไรบาง

1………………………เปนตวแปรชนด …………………………….. 2………………………เปนตวแปรชนด …………………………….. 3………………………เปนตวแปรชนด …………………………….. 4………………………เปนตวแปรชนด …………………………….. ใชเมทอด Parse เพอ……………………………………………………

โปรแกรมมขนตอนการทางานโดย……………………………………………................................... ………………………………………………………………………………………………………. ……………………………………………………………………………………………………….

private void button1_Click(object sender, EventArgs e) { int x,y,z; string output; x = int.Parse(textBox1.Text); y = int.Parse(textBox2.Text); z = x + y; output = " " + z; textBox3.Text = output; }

Page 138: คู มืออบรมการเข ียนโปรแกรมด วยภาษา C#weerayuth.in.th/docFiles/cs0.4.pdfแนะนําภาษา C# 1. จุดประสงค

สถาบนสงเสรมการสอนวทยาศาสตรและเทคโนโลย 138

ใบความรท 8.1 การโปรแกรมเชงวตถ

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

ในการพฒนาระบบงานขนมาสกระบบงานหนง ถามองแบบกวาง ๆ เราจะสามารถแบงการพฒนาออกไดใน 2 ลกษณะ คอ การพฒนาดวยทมงานเปนกลมเลก ๆ ในลกษณะทเรยกวา “in-house development” ซงการพฒนาจะไมมรปแบบทแนนอนตายตว ขนอยกบโปรแกรมเมอรแตละคน การพฒนาอกลกษณะหนงคอการพฒนาในลกษณะทเปน “industry development” หรอการพฒนาในระดบอตสาหกรรม คอ การพฒนาระบบทมการสรางกรอบและมาตรฐานการทางานเพอใหผพฒนายดถอและพฒนาระบบไปในแนวทางเดยวกน ซงการพฒนาในลกษณะ in-house นนมกจะเปนแอพพลเคชนทไมคอยมความยดหยนในการทจะนาไปเปลยนแปลงแกไขในอนาคต เพราะการพฒนาในลกษณะนคอนขางไมมทศทางการทางานทแนนอน การพฒนาในปจจบนจงมงไปทการสรางมาตรฐานของการพฒนาระบบ ซงแมจะยงไมมมาตรฐานใดเปนหนงเดยวกนทงหมด แตแนวทางกเรมชดเจนขนเรอย ๆ วานกพฒนาระบบจะยดอะไรเปนมาตรฐานได

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

Page 139: คู มืออบรมการเข ียนโปรแกรมด วยภาษา C#weerayuth.in.th/docFiles/cs0.4.pdfแนะนําภาษา C# 1. จุดประสงค

สถาบนสงเสรมการสอนวทยาศาสตรและเทคโนโลย 139

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

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

กลวธพฒนาแอพพลเคชนมอยมากมาย ในทนจะพจารณาเพยง 2 วธทเปนทนยมเทานน ไดแก 1. วธการเชงฟงกชน (Function) 2. วธการเชงวตถ (Object oriented)

วธการเชงฟงกชน วธการนบางครงเรยกวา Algorithmic decomposition ซงถอกาเนดจากงานอตสาหกรรม

โดยมหลกการวาใหมองปญหาในรปของกระบวนการทางาน จากนนใหแตกกระบวนการทางานดงกลาวออกเปนสวนยอย ๆ เรยกวา “ฟงกชน” แลวจงนาฟงกชนทงหลายมาเชอมโยงการทางานเขาดวยกนในภายหลง

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

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

วตถหรอออปเจกต ซงออปเจกตตาง ๆ จะมความเปนอสระไมขนตอกน แตมการทางานรวมกน ตวอยางภาษาคอมพวเตอรทใชวธการเชงวตถ ไดแก ภาษาจาวา ภาษา C++ ,ภาษา C# , ภาษา SmallTalk เปนตน

Page 140: คู มืออบรมการเข ียนโปรแกรมด วยภาษา C#weerayuth.in.th/docFiles/cs0.4.pdfแนะนําภาษา C# 1. จุดประสงค

สถาบนสงเสรมการสอนวทยาศาสตรและเทคโนโลย 140

ตารางเปรยบเทยบวธการเชงฟงกชนกบวธการเชงวตถ

วธการเชงฟงกชน วธการเชงวตถ ลกษณะทวไป นาปญหามาแตกเปนสวนยอย ๆ ใน

รปของกระบวนการทางาน มองสงตาง ๆ ในระบบเปนออบเจกต ซงมความเปนอสระตอกน แตทางานรวมกน

ลกษณะการจาแนกงาน แตกกระบวนการทางานเปนหนวย ยอย ๆ เรยกวา “ฟงกชน”

จาแนกออบเจกตแลวแบงกลมของออบเจกตตามคณลกษณะของแตละออปเจกต

ความขนตอกน ฟงกชนการทางานตาง ๆ จะมลกษณะการทางานขนตรงตอกน มการสงพารามเตอรจากฟงกชนหนงไปยงอกฟงกชนหนง

แตละออบเจกตมความเปนอสระ ไมขนตอกน และตดตอกนโดย การสงเมสเสจ (message) ถงกน

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

เรมตนดวยการกาหนดคณสมบตและพฤตกรรมใหออบเจกตตาง ๆ จากนนสรางความสมพนธระหวางออบเจกตวาจะทางานรวมกนไดอยางไร

วธการพฒนาแอพพลเคชน (Paradigms)

วธการเชงฟงกชน (Functional)

วธการเชงวตถ (Object Oriented)

ภาษา Pascal ภาษา C ภาษา Java ภาษา C++ ภาษา C#

Page 141: คู มืออบรมการเข ียนโปรแกรมด วยภาษา C#weerayuth.in.th/docFiles/cs0.4.pdfแนะนําภาษา C# 1. จุดประสงค

สถาบนสงเสรมการสอนวทยาศาสตรและเทคโนโลย 141

8.2 ลกษณะของออบเจกต ออบเจกตคอสงใด ๆ ทเราสนใจ อาจจะเปนสงทจบตองได เชน สนคา ลกคา หรออาจจะเปนสงท

จบตองไมได เชน ฝายตาง ๆ ในบรษท เปนตน โดยทออบเจกตตาง ๆ จะสามารถตดตอสอสารกนไดดวยการสงเมสเสจ (message) ถงกน ดงรปท 8.1

รปท 8.1 การตดตอสอสารกนระหวางออบเจกต ออบเจกต 1 ออบเจกต ไมวาจะเปนออบเจกตแบบใดกตามลวนมลกษณะ 3 ประการดงตอไปน

1. State 2. Behavior 3. Identify

State คอสถานะของความเปนออบเจกตหนง ๆ ซงจะมคณสมบตเฉพาะบางประการททาใหเรา

ทราบวาออบเจกตนนคออะไร โดยคณสมบตของออบเจกตจะขนอยกบมมมองของแตละคน ยกตวอยางเชน คอน จะมคณสมบตคอมหวเปนโลหะแขงและดามจบเปนไม ในทนหวและดามจบคอคณสมบตหรอสถานะ (Stage) ของคอน ซงสถานะของออบเจกตสามารถเปลยนแปลงไปจากเดมไดเมอมเงอนไขบางประการ อาท เมอเวลาผานไปหวและดานของคอนอาจสกกรอนหรอผพง เปนตน Behavior คอพฤตกรรมของออบเจกต ซงอาจจะเปนการสงเมสเสจไปยงอกออบเจกตหนง เปนการสงเมสเสจตอบกลบ หรอเปนการกระทาบางอยางเพอใหสถานะ (State) เปลยนไปจากเดม เชน เราอาจจะเอาคอนไปตอกตะป ซงในทนตวเราเปนผสงเมสเสจไปยงคอน เปนตน Identity คอคณลกษณะบางอยางททาใหออบเจกตแตละออบเจกตแตกตางกน ทาใหเรารวาเปนคนละออบเจกตกน เชน ถงจะมดนสอชนดเดยวกนหลายอนในทหนง ๆ เรากสามารถแยกออกวาดนสออนไหนคอดนสอของเรา โดยอาจจะดจากตาหนหรอตาแหนงทเราวางดนสอเอาไวประจา เปนตน 8.3 สรางแบบแปลนใหออบเจกตดวยคลาส

วธการเชงวตถจะมกลไกอยางหนงคอ “คลาส” (class) โดยคลาสถอเปนนามธรรม (Abstract) โดยไมสามารถนาคลาสไปดาเนนการใด ๆ ได คลาสนนเปนการจดกลมใหแกออบเจกตตาง ๆ ทมคณสมบตหรอพฤตกรรมบางอยางเหมอนกน เมอเวลาทเราจะใชงาน เราจะไมใชงานคลาสตรง ๆ แตเราจะสรางสงท

ออบเจกต 1 ออบเจกต 2 สงเมสเสจ

Page 142: คู มืออบรมการเข ียนโปรแกรมด วยภาษา C#weerayuth.in.th/docFiles/cs0.4.pdfแนะนําภาษา C# 1. จุดประสงค

สถาบนสงเสรมการสอนวทยาศาสตรและเทคโนโลย 142

เรยกวา “อนสแตนซ” (instance) หรอออบเจกตของคลาสขนมาใชงานแทน กลไกดงกลาวทาใหเราสามารถใชเพยงคลาส ๆ เดยว แตสรางอนสแตนซของคลาสไปทางานไดหลายอนสแตนซ ซงอนสแตนซของคลาสกคอออบเจกตนงเอง เราจงกลาววาออบเจกตหนง ๆ เปนอนสแตนซของคลาสหนง เปรยบเทยบงาย ๆ เสมอนวาเรามแปลนบานอยแปลนหนง เรากสามารถนาแปลนบานนไปสรางบานไดอกหลาย ๆ หลงตามความตองการของเรา

รปท 8.2 แสดงตวอยางการสรางออบเจกตจากคลาส ตวอยางการกาหนดคลาสใหแกออบเจกต

คลาส ออบเจกต บคลากร นางสาว สนทรน วงศศรกล ปฏกรยาทางเคม เหลกขนสนม แมนา เจาพระยา เครองเขยน ดนสอ 2B กฬา บาสเกตบอล

คลาสบคคล นายไก

นางดาว

นายมตร

คลาสวงกลม

วงกลม A รศม 5 หนวย แสดงผล

วงกลม B รศม 10 หนวย ยงไมแสดงผล

Page 143: คู มืออบรมการเข ียนโปรแกรมด วยภาษา C#weerayuth.in.th/docFiles/cs0.4.pdfแนะนําภาษา C# 1. จุดประสงค

สถาบนสงเสรมการสอนวทยาศาสตรและเทคโนโลย 143

คลาสหนงคลาสสามารถมอนสแตนซหรอออบเจกตไดหลายตว โดยทออบเจกตแตละตวสามารถมลกษณะแตกตางกนไดตามทกลาวมาแลวในหวขอทผานมา ตวอยางเชนถาหากสรางคลาสวงกลมขนมา คลาสนสามารถนาไปสรางวงกลมไดหลาย ๆ วง หรอมออบเจกตหลาย ๆ ตวได ซงกคอออบเจกตแตละออปเจกตมาจากคลาสเดยวกนกคอคลาสวงกลมนนเองโดยทวงกลมแตละวงจะมรศมทแตกตางกนได มเสนผานศนยกลางทแตกตางกนได ในการพฒนาโปรแกรมผพฒนาตวแปรภาษาสามารถรวบรวมคณสมบตและฟงกชนตาง ๆ ของสงทคลาย ๆ กนมารวมเปนคลาสได ตวอยางเชน ถาหากตองการสรางวงกลมลกษณะตาง ๆ เชน มขนาดตางกน มจดศนยกลางตาแหนงทตาง ๆ กน สามารถนามารวมกนเปนคลาสเพอนาไปสรางวงกลมแบบตาง ๆ ได จากตวอยางเปนการสรางคลาสวงกลมและมการสรางออบเจกตเปนวงกลมขนมาอกสองวงคอวงกลม A และวงกลม B โดยวงกลมทงสองวงจะมคณสมบตทตางกน และใหวงกลม A แสดงผล สวนวงกลม B ไมแสดงผล ถาหากสรางคลาสขนมาแลวและมการสรางออบเจกตสาหรบคลาสนนขนมา จะตองมการระบวาจะใหคณสมบตในออบเจกตนนมลกษณะอยางไร ในการเขยนโปรแกรมดวยภาษา C# การระบหรออางถงคณสมบตตาง ๆ หรอเมทอด ตาง ๆ ของออบเจกจะใชเครองหมายจด (.) โดยเรมตนดวยชอคลาสตามดวยเครองหมายจดจากนนตามดวยเมทอด หรอคณสมบตของออบเจกตทเกดจากคลาสนน รปแบบ ชอคลาส . ชอเมทอด [.ชอเมทอด .]

Circle รศม (r) จดศนยกลาง (x,y) แสดงผล (T,F)

A r = 20 (x,y) = (5,5) แสดงผล (T)

B r = 15 (x,y) = (2,3) แสดงผล (F)

Page 144: คู มืออบรมการเข ียนโปรแกรมด วยภาษา C#weerayuth.in.th/docFiles/cs0.4.pdfแนะนําภาษา C# 1. จุดประสงค

สถาบนสงเสรมการสอนวทยาศาสตรและเทคโนโลย 144

นอกจากนในการพฒนาโปรแกรมยงสรางสามารถสรางคลาสขนมาหนงคลาสแลวในคลาสนนมคลาสยอย ๆ ประกอบอยไดอกดวยการระบเขาไปยงคลาสยอย ๆ และเมทอด ในคลาสยอย ๆ กใชเครองหมายจดเชนกน ในการเขยนโปรแกรมดวยภาษา C# จะมการสรางคลาสชอ Console ขนมา โดยคลาสนจะรวมคลาสและเมทอด ตาง ๆ ทเกยวของกบการตดตอกบอนพตเอาตพตของระบบคอมพวเตอรเอาไว ถาหากผเขยนโปรแกรมตองการแสดงขอมลออกทางจอภาพจะใชเมทอด WriteLine() และถาหากตองการรบขอมลจากคยบอรตจะใชเมทอด ReadLine() ในการเขยนโปรแกรมเพอแสดงขอมลและรบขอมลจะเขยนรหสโปรแกรมไดดงน System.Console.WriteLine(“Hello World! “); System.Console.ReadLine();

ดงนนในการเขยนโปรแกรมภาษา C# การนาออบเจกตมาใชและเรยกใชเมทอด ตาง ๆ จะตองใชเครองหมายจด(.) ในการระบไปยงคลาสหรอเมทอด ยอย ๆ ทประกอบอยในคลาสนน

ชอเมทอด

เนมสเปส คลาสยอย

Page 145: คู มืออบรมการเข ียนโปรแกรมด วยภาษา C#weerayuth.in.th/docFiles/cs0.4.pdfแนะนําภาษา C# 1. จุดประสงค

สถาบนสงเสรมการสอนวทยาศาสตรและเทคโนโลย 145

ใบความรท 8.2 การสรางโปรเจกตแบบ Windows

ภาษา C# เปนภาษาโปรแกรมเชงวตถ (Object-Oriented Programming Language) ทถกพฒนาขนมาโดยบรษทไมโครซอฟต ในการเขยนโปรแกรมจะตองสรางโปรแกรมตนฉบบมากอนโดยมไฟลทนามสกลเปน .cs เชน prog.cs จากนนจะตองแปลภาษาโดยใช คอมไพเลอร (compiler) ใหเปนไฟลทนามสกลเปน .exe หรอ executable

สาหรบเครองมอทใชในการเขยนโปรแกรมในหวขอนจะใชโปรแกรม MS Visual Studio 2008 ซงเปนชดโปรแกรมทเกบเครองมอในการพฒนาไวมากมาย แตในทนจะใช MS Visual C# ในการเขยนโปรแกรม โดยการสรางโปรเจกตแบบ Windows ทาไดตามขนตอนตอไปน 1. เมอเปดโปรแกรม Microsoft Visual C# 2008 ใหเลอก Create Project.. ดงรปท 8.3

รปท 8.3 การเลอก Create Project..

หรอเลอกจากเมน File > New Project… ดงรปท 8.4

Page 146: คู มืออบรมการเข ียนโปรแกรมด วยภาษา C#weerayuth.in.th/docFiles/cs0.4.pdfแนะนําภาษา C# 1. จุดประสงค

สถาบนสงเสรมการสอนวทยาศาสตรและเทคโนโลย 146

รปท 8.4 เมน File > New Project…

2. จะปรากฏหนาตาง New Project ใหเลอก Windows Forms Application -> ตงชอ ในชอง Name -> คลกปม OK ดงรปท 8.5

รปท 8.5 หนาตาง New Project

Page 147: คู มืออบรมการเข ียนโปรแกรมด วยภาษา C#weerayuth.in.th/docFiles/cs0.4.pdfแนะนําภาษา C# 1. จุดประสงค

สถาบนสงเสรมการสอนวทยาศาสตรและเทคโนโลย 147

3. จะปรากฏแถบ Form1.cs[Design] สาหรบพฒนาโปรแกรมแบบ Windows Form ดงรปท 8.6

รปท 8.6 แถบ Form1.cs[Design]

4. การบนทกโปรเจกต

4.1 คลกทสญรป Save All ดงรปท 8.7

รปท 8.7 สญรป Save All

Page 148: คู มืออบรมการเข ียนโปรแกรมด วยภาษา C#weerayuth.in.th/docFiles/cs0.4.pdfแนะนําภาษา C# 1. จุดประสงค

สถาบนสงเสรมการสอนวทยาศาสตรและเทคโนโลย 148

4.2 จะปรากฎกรอบโตตอบ Save Project ใหกาหนดชอในชอง Name ในชอง Location ใหเลอกโฟลเดอรทจะเกบโปรเจกต โดยคลกเลอกท Browse.. เลอก Create directory for solution เลอก Save

รปท 8.8 กรอบโตตอบ Save Project

องคประกอบสภาพแวดลอมของการพฒนาโปรแกรมแบบ Windows 1. หนาตาง Design เมอเรมสรางโปรเจกตโปรแกรมจะแสดงหนาตางดงตอไปน

รปท 8.9 หนาตาง Design

Forms Designer Forms Designer toolbar

Solution Explorer Output window

Page 149: คู มืออบรมการเข ียนโปรแกรมด วยภาษา C#weerayuth.in.th/docFiles/cs0.4.pdfแนะนําภาษา C# 1. จุดประสงค

สถาบนสงเสรมการสอนวทยาศาสตรและเทคโนโลย 149

2. กลองเครองมอ (Toolbox) ใหดาเนนการเพอแสดงรายการเครองมอดงน คลกทแถบ Toolbox จะทาใหแถบ Toolbox ขยายออกมา

คลกท Auto Hide เพอใหแสดงกลองเครองมอตลอดเวลา

รปท 8.10 การแสดงรายการกลองเครองมอ

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

กรอบของหนาตาง แตละดานดงตวอยาง

รปท 8.11 การปรบขนาดของหนาตาง

Page 150: คู มืออบรมการเข ียนโปรแกรมด วยภาษา C#weerayuth.in.th/docFiles/cs0.4.pdfแนะนําภาษา C# 1. จุดประสงค

สถาบนสงเสรมการสอนวทยาศาสตรและเทคโนโลย 150

รปท 8.12 ตวอยางการปรบขนาดหนาตางในแนวตง

3. การเลอกเครองมอจาก Toolbox

3.1 การดบเบลคลก เชน เมอดบเบลคลกทเครองมอ Button ดงหมายเลข จะปรากฎเครองมอนนบน Form1 อยทมมบนดานซาย ดงหมายเลข ดงรปท 8.13

รปท 8.13 การเลอกเครองมอโดยการดบเบลคลก

Page 151: คู มืออบรมการเข ียนโปรแกรมด วยภาษา C#weerayuth.in.th/docFiles/cs0.4.pdfแนะนําภาษา C# 1. จุดประสงค

สถาบนสงเสรมการสอนวทยาศาสตรและเทคโนโลย 151

3.2 การลาก-วาง การลากทาไดโดยนาเมาสไปลากเครองมอทตองการจาก Toolbox มาวางในตาแหนงทตองการ ดงรปท 8.14

รปท 8.14 การเลอกเครองมอโดยการลาก-วาง

4. การเขยนคาสง

การขยนคาสงในโปรแกรมแบบ Visual Programming จะเปนการเขยนโปรแกรมเพอตอบสนองการทางานตามเหตการณ เชน การคลกเมาส มขนตอนดงน 4.1 ดบเบลคลกทเครองมอทตองการสงงาน ทไดออกแบบไวบนฟอรม ดงตวอยางคอปม button1

รปท 8.15 การดบเบลคลกทเครองมอทตองการเขยนโปรแกรมสงงาน

ลากปมมาวางในตาแหนงทตองการ

Page 152: คู มืออบรมการเข ียนโปรแกรมด วยภาษา C#weerayuth.in.th/docFiles/cs0.4.pdfแนะนําภาษา C# 1. จุดประสงค

สถาบนสงเสรมการสอนวทยาศาสตรและเทคโนโลย 152

4.2 จะปรากฎหนาตาง Form1.cs พรอมกบคาสงตงตน ดงหมายเลข และเคอรเซอรจะปรากฎอยตรงเมทอดทสมพนธกบเครองมอ ดงหมายเลข ดงรปท 8.16

รปท 8.16 หนาตาง Form1.cs ทมโคดโปรแกรม

สมมตวาตองการเขยนโปรแกรมทสงใหเมอคลกปม button1 แลวจะทาการปดโปรแกรม ใหเขยนคาสง Close(); ในเมทอด button1_Click() ดงรปท 8.17

รปท 8.17 การเขยนคาสง

Page 153: คู มืออบรมการเข ียนโปรแกรมด วยภาษา C#weerayuth.in.th/docFiles/cs0.4.pdfแนะนําภาษา C# 1. จุดประสงค

สถาบนสงเสรมการสอนวทยาศาสตรและเทคโนโลย 153

เมอเขยนคาสงเสรจแลว ถาตองการกลบไปยงหนาออกแบบ สามารถทาไดโดยคลกทแถบ Form1.cs[Design] ดงรปท 8.18

รปท 8.18 แถบ Form1.cs[Design] 5. การรนโปรแกรม

5.1 คลกปม Start Debugging หรอกดคย F5 ดงรปท 8.19

รปท 8.19 ปม Start Debugging

Page 154: คู มืออบรมการเข ียนโปรแกรมด วยภาษา C#weerayuth.in.th/docFiles/cs0.4.pdfแนะนําภาษา C# 1. จุดประสงค

สถาบนสงเสรมการสอนวทยาศาสตรและเทคโนโลย 154

5.2 จะปรากฎโปรแกรมทสรางขนดงรปท 8.20

รปท 8.20 โปรแกรมทสรางขน

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

1. เลอกเครองมอ เชน button2 มาวางบนฟอรมดงรปท 8.21

รปท 8.21 การเพมปม

Page 155: คู มืออบรมการเข ียนโปรแกรมด วยภาษา C#weerayuth.in.th/docFiles/cs0.4.pdfแนะนําภาษา C# 1. จุดประสงค

สถาบนสงเสรมการสอนวทยาศาสตรและเทคโนโลย 155

2. กาหนดใหแสดงหนาตาง Properties ดงน 2.1 คลกทเมน View -> Properties Window ดงรปท 8.22

รปท 8.22 เมน View -> Properties Window

2.2 จะปรากฎสวน Properties ดงรปท 8.23

รปท 8.23 สวน Properties

Page 156: คู มืออบรมการเข ียนโปรแกรมด วยภาษา C#weerayuth.in.th/docFiles/cs0.4.pdfแนะนําภาษา C# 1. จุดประสงค

สถาบนสงเสรมการสอนวทยาศาสตรและเทคโนโลย 156

2.3 การเปลยน Properties ขององคประกอบตางๆ ในแถบ Design ของโปรแกรม ทาไดดงน เลอกวตถนน เชน เลอก ปม button1 โดยทสวน Properties จะเชอมโยงกบวตถนน เลอก Properties ทตองการไขแลวเปลยนแปลงตามทตองการ เชน เปลยน Text Properties ใหมคาเปน OK

จะปรากฎปมทมขอความ OK

รปท 8.24 การเปลยน Properties ของปม

Page 157: คู มืออบรมการเข ียนโปรแกรมด วยภาษา C#weerayuth.in.th/docFiles/cs0.4.pdfแนะนําภาษา C# 1. จุดประสงค

สถาบนสงเสรมการสอนวทยาศาสตรและเทคโนโลย 157

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

Hello My First Windows Program ดงรปท 8.25 รปท 8.25 ตวอยางโปรแกรม ขนตอนการสรางมดงน 1. คลกเลอกท button2 แลวเปลยน Properties ของ button2 ในสวน Text ใหเปน Show Message ดงรปท

8.26 2. ขอความท button2 จะเปลยนเปน Show Message

รปท 8.26 การเปลยน Properties ของ button2

Page 158: คู มืออบรมการเข ียนโปรแกรมด วยภาษา C#weerayuth.in.th/docFiles/cs0.4.pdfแนะนําภาษา C# 1. จุดประสงค

สถาบนสงเสรมการสอนวทยาศาสตรและเทคโนโลย 158

3. ดบเบลคลกทปม Show Message จะปรากฎหนาตาง Program.cs ขนมา และเคอรเซอรจะปรากฎตรงเมทอดทของปมทถกดบเบลคลก ในทนคอ button2_click() เขยนคาสงดงรปท 8.27

รปท 8.27 การเขยนคาสงทปม Show Message 4. กลบไปทหนาจอออกแบบ Form1.cs[Design]

4.1 บนทกโปรแกรม 4.2 สงรนโปรแกรมจะปรากฎโปรแกรมทประกอบไปดวยปม 2 ปม และเมอคลกทปม Show Message

จะปรากฎ Message Box ทแสดงขอความวา Hello My First Windows Program ดงรปท 8.28

รปท 8.28 โปรแกรมแสดง Message Box

Page 159: คู มืออบรมการเข ียนโปรแกรมด วยภาษา C#weerayuth.in.th/docFiles/cs0.4.pdfแนะนําภาษา C# 1. จุดประสงค

สถาบนสงเสรมการสอนวทยาศาสตรและเทคโนโลย 159

กจกรรมท 9 พฒนาโครงงาน

1. จดประสงค ใหผเรยนสามารถ พฒนาโครงงานแบบ Windows Application ดวย MS Visual C#

2. แนวคด ภาษาซชารปสามารถพฒนาเปนแอพลเคชนเพอใชในการทางานไดหลายดาน โดยโปรแกรม MS Visual C# สนบสนนการพฒนาโปรแกรมประเภททใชคณสมบตของวนโดวสเตมรปแบบ (Windows Application) ซงผพฒนาสามารถเขยนโปรแกรมในรปแบบกราฟก เพอสรางงานเชน โปรแกรมเกม โปรแกรมวาดภาพ โปรแกรมการคานวณ ไดงายและสะดวกตอการใชงาน

3. สออปกรณ

3.1 ใบงาน ใบงานท เรอง เวลา (นาท)

9.1 พฒนาโครงงานแบบ Windows Application 360

3.2 ใบความร -

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

4. วธดาเนนการ

4.1 การจดเตรยม 4.1.1 แบงผเรยนเปนกลม กลมละ 4 คน 4.1.2 เตรยมใบงานท 9.1 และแบบประเมนโครงงานตามจานวนกลม

4.2 ขนตอนการดาเนนการ

Page 160: คู มืออบรมการเข ียนโปรแกรมด วยภาษา C#weerayuth.in.th/docFiles/cs0.4.pdfแนะนําภาษา C# 1. จุดประสงค

สถาบนสงเสรมการสอนวทยาศาสตรและเทคโนโลย 160

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

4.2.2 ผเรยนแตละกลมลงมอพฒนาโครงงานตามความเหนของกลม และเขยนรายละเอยดลงใบใบงานท 9.1

4.2.3 ผเรยนออกมานาเสนอโครงงานทกกลม (อาจใชการจดแสดงนทรรศการโครงงาน) 4.2.4 ผเรยนประเมนผลงานของกลมอนโดยใชแบบประเมนโครงงาน 4.2.5 ผสอนรวมคะแนน ใหรางวลแกกลมทมคะแนนมากทสด 3 กลม 4.2.6 ผเรยนและผสอนรวมกนอภปรายและสรป

5. การวดและประเมนผล 5.1 แบบประเมนโครงงาน

6. แหลงความรเพมเตม

6.1 http://msdn.microsoft.com/th-th/vcsharp/default(en-us).aspx

7. ขอเสนอแนะ -

Page 161: คู มืออบรมการเข ียนโปรแกรมด วยภาษา C#weerayuth.in.th/docFiles/cs0.4.pdfแนะนําภาษา C# 1. จุดประสงค

สถาบนสงเสรมการสอนวทยาศาสตรและเทคโนโลย 161

ใบงานท 9.1 พฒนาโครงงานแบบ Windows Application

ใหผเรยนพฒนาโครงงานทสรางดวยโปรแกรม MS Visual C# ตามความเหนของกลมและเขยนอธบายรายละเอยดของโครงงานดงตอไปน

ชอโครงงาน ………………………………………………………………….. ประเภทของโครงงาน …………………………………………………………

วตถประสงค …………………………………………………………………………………………………….. …………………………………………………………………………………………………….. ……………………………………………………………………………………………………..

ลกษณะการทางานของโปรแกรม …………………………………………………………………………………………………….. …………………………………………………………………………………………………….. …………………………………………………………………………………………………….. …………………………………………………………………………………………………….. …………………………………………………………………………………………………….. …………………………………………………………………………………………………….. …………………………………………………………………………………………………….. …………………………………………………………………………………………………….. ……………………………………………………………………………………………………..

รายชอสมาชกในกลมท…………………. 1. ………………………………………………… 2. …………………………………………………. 3. ………………………………………………… 4. ………………………………………………….

Page 162: คู มืออบรมการเข ียนโปรแกรมด วยภาษา C#weerayuth.in.th/docFiles/cs0.4.pdfแนะนําภาษา C# 1. จุดประสงค

สถาบนสงเสรมการสอนวทยาศาสตรและเทคโนโลย 162

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

ลาดบ ชอกลม

• คว

ามคด

รเรมส

รางสร

รค

• คว

ามสว

ยงามแ

ละคว

ามงาย

ตอ

ารใชงานขอ

งโปรแก

รม

• คว

ามซบ

ซอนท

างเทค

นค

• คว

ามถก

ตองใน

การทางาน

• คณ

ภาพข

องงานในภ

าพรวม

คะแนนรวม

1 2 3 4 5 6 7 8 9

10 ระดบการใหคะแนน

ดมาก ด ปานกลาง สมควรปรบปรง สมควรปรบปรงอยางมาก ไมผาน ระดบ A B C D E F

คะแนน 5 4 3 2 1 0

Page 163: คู มืออบรมการเข ียนโปรแกรมด วยภาษา C#weerayuth.in.th/docFiles/cs0.4.pdfแนะนําภาษา C# 1. จุดประสงค

สถาบนสงเสรมการสอนวทยาศาสตรและเทคโนโลย 163

ภาคผนวก

Page 164: คู มืออบรมการเข ียนโปรแกรมด วยภาษา C#weerayuth.in.th/docFiles/cs0.4.pdfแนะนําภาษา C# 1. จุดประสงค

สถาบนสงเสรมการสอนวทยาศาสตรและเทคโนโลย 164

การใชงานโปรแกรม Microsoft Visual C# 2008 Express

Microsoft Visual C# 2008 Express Edition เปนโปรแกรมทอยในชดโปรแกรมของ MS Visual Studio 2008 ซงเปนชดโปรแกรมทเกบเครองมอในการพฒนาไวมากมาย การเรยกใชงานโปรแกรมทาไดตามขนตอนตอไปน

1. คลก Start -> Programs -> Microsoft Visual C# 2008 Express Edition

รปท 1 การเรยกใชงานโปรแกรม

2. จะปรากฎหนาตาง Microsoft Visual C# 2008 Express Edition ดงรปท 2

รปท 2 หนาตาง Microsoft Visual C# 2008 Express Edition

Page 165: คู มืออบรมการเข ียนโปรแกรมด วยภาษา C#weerayuth.in.th/docFiles/cs0.4.pdfแนะนําภาษา C# 1. จุดประสงค

สถาบนสงเสรมการสอนวทยาศาสตรและเทคโนโลย 165

สวนประกอบของ Microsoft Visual C# 2008 Express Edition มดงน 2.1 แถบชอ(Title Bar) เปนสวนทแสดงชอของหนาตางททางานอยเชนชอโปรเจกต 2.2 แถบเมน( Menu Bar) เปนแถบแสดงรายการคาสงของโปรแกรม เชนเมน File , Edit , View

เปนตน 2.3 แถบเครองมอ(Tool Bar) เปนแถบรวมสญรป(Icon) ทใชแทนรายการคาสงของโปรแกรม 2.4 หนาตาง Solution Explorer เปนหนาตางแสดงรายการของไฟลและองคประกอบตางๆ ท

รวมกนเปนโปรเจกต 2.5 กลองเครองมอ(Tool Box) เปนสวนทเกบเครองมอทใชสรางโปรเจกต สวนกลองเครองมอนจะ

เปลยนแปลงไปตามประเภทของโปรเจกตทผเขยนโปรแกรมเลอก 2.6 หนาตาง Start Page เปนหนาตางหลก และเปนหนาตางแรกทเกดขนเมอเปดโปรแกรม

Microsoft Visual C# 2008 Express Edition ขนมา โดยภายในจะมหนาตางยอยอนๆ 2.7 หนาตาง Recent Project เปนหนาตางยอยภายในหนาตาง Start Page เปนสวนทใชสรางโปร

เจกตใหม หรอเปดโปรเจกตเกาขนมาทางาน 2.8 หนาตาง Getting Started เปนสวนทใชเรยนรเกยวกบการพฒนาซอฟตแวรโดย Microsoft

Visual C# 2.9 หนาตาง Gets New from Microsoft เปนสวนทใชดาวนโหลดเครองมอใหม ๆ จาก

ไมโครซอฟต การเรมสรางโปรเจกตใหม แบบ Console Application

Console Application เปนการเขยนโปรแกรมทเหมาะสาหรบผทเรมตนศกษาการพฒนาโปรแกรม สามารถสรางไดดงน

1. ในสวน Recent Project ท Create คลกเลอก Project ดงรปท 3

รปท 3 การสรางชนงานใหม

Page 166: คู มืออบรมการเข ียนโปรแกรมด วยภาษา C#weerayuth.in.th/docFiles/cs0.4.pdfแนะนําภาษา C# 1. จุดประสงค

สถาบนสงเสรมการสอนวทยาศาสตรและเทคโนโลย 166

2. จะปรากฎกรอบโตตอบ New Project ดงรปท 4 ใหดาเนนการดงน เลอก สญรป Console Application ตงชอในชอง Name คลก OK

รปท 4 กรอบโตตอบ New Project

3. โปรแกรมจะสรางหนาตาง Program.cs พรอมใหพฒนาโปรแกรมตอไป มรายละเอยดทควรรดงน 3.1 หนาตาง ทเปนสวนเขยนโปรแกรมหรอ Editor จะมชอตามชอไฟล คอ Program.cs ซงเปน

สวนทใชเขยนคาสงตาง ๆ ในภาษา C# 3.2 แถบเครองมอเพมเตม 3.3 หนาตาง Solution Explorer ซงใชแสดงรายการองคประกอบของโปรเจกต

Page 167: คู มืออบรมการเข ียนโปรแกรมด วยภาษา C#weerayuth.in.th/docFiles/cs0.4.pdfแนะนําภาษา C# 1. จุดประสงค

สถาบนสงเสรมการสอนวทยาศาสตรและเทคโนโลย 167

รปท 5 รายละอยดหนาตาง Program.cs

4. การกาหนดใหแสดงเลขบรรทดของคาสง ทาไดดงน 4.1 คลกทเมน Tool > Options

รปท 6 การกาหนดใหแสดงเลขบรรทด

Page 168: คู มืออบรมการเข ียนโปรแกรมด วยภาษา C#weerayuth.in.th/docFiles/cs0.4.pdfแนะนําภาษา C# 1. จุดประสงค

สถาบนสงเสรมการสอนวทยาศาสตรและเทคโนโลย 168

4.2 จะปรากฎกรอบโตตอบ Options ดงรปท 7

รปท 7 กรอบโตตอบ Options

4.3 ใหเลอก Show all settings

รปท 8 การเลอก Show all settings

Page 169: คู มืออบรมการเข ียนโปรแกรมด วยภาษา C#weerayuth.in.th/docFiles/cs0.4.pdfแนะนําภาษา C# 1. จุดประสงค

สถาบนสงเสรมการสอนวทยาศาสตรและเทคโนโลย 169

4.4 เลอก Text Editor -> C# -> General ดงหมายเลข จากนนท Display คลกเลอก Line number ดงหมายเลข แลวคลก OK ดงหมายเลข

รปท 9 การเลอก Line numbers

4.5 หนาตาง Editor จะแสดงเลขบรรทดดงรปท 10

รปท 10 เลขบรรทด

Page 170: คู มืออบรมการเข ียนโปรแกรมด วยภาษา C#weerayuth.in.th/docFiles/cs0.4.pdfแนะนําภาษา C# 1. จุดประสงค

สถาบนสงเสรมการสอนวทยาศาสตรและเทคโนโลย 170

5. การบนทกโปรเจกต การสรางโปรเจกตโดย MS Visual C# จะมไฟลเปนองคประกอบของโปรแกรมหลาย

ไฟล ผเขยนโปรแกรมควรสรางโฟลเดอรแยกแตละโปรเจกตออกจากกน และควรบนทกตงแตเรมสรางโปรเจกตใหมในทนท ดงน 5.1 คลกท สญรป Save All 5.2 จะปรากฎกลองโตตอบ Save Project 5.3 เลอกโฟลเดอรเพอเกบโปรเจกตในชอง Location โดยคลกทปม Browse…

รปท 11 การบนทกโปรเจกต

5.4 จะปรากฎกรอบโตตอบ Project Location ใหเลอกโฟลเดอรทตองการ แลวคลกปม OK ดงรปท 12

รปท 12 กรอบโตตอบ Project Location

Page 171: คู มืออบรมการเข ียนโปรแกรมด วยภาษา C#weerayuth.in.th/docFiles/cs0.4.pdfแนะนําภาษา C# 1. จุดประสงค

สถาบนสงเสรมการสอนวทยาศาสตรและเทคโนโลย 171

5.5 ในกรอบโตตอบ Save Project ในชอง Location จะแสดงชอโฟลเดอร ใหตงชอโปรเจกต แลวบนทกดงรปท 13

ตงชอในชอง Name ตามตองการ คลกเลอก Create directory for solution คลก Save

รปท 13 การบนทกโปรเจกต

5.6 จะไดโปรเจกตทมชอตามทไดตงชอดงตวอยาง

รปท 14 โปรเจกต consolePrj1

Page 172: คู มืออบรมการเข ียนโปรแกรมด วยภาษา C#weerayuth.in.th/docFiles/cs0.4.pdfแนะนําภาษา C# 1. จุดประสงค

สถาบนสงเสรมการสอนวทยาศาสตรและเทคโนโลย 172

6. รายการไฟลและโฟลเดอรทเกดจากการบนทกโปรเจกต 6.1 โฟลเดอรทใชบนทกโปรเจกต 6.2 โฟลเดอรโปรเจกตทบนทกไว 6.3 รายการทรพยากรทเกดขนภายในโปรเจกต 6.4 รายการไฟลทอยภายในโฟลเดอร Debug

รปท 15 รายการไฟลและโฟลเดอรทเกดจากการบนทกโปรเจกต

7. การเรมเขยนคาสงในหนาตาง Editor

การสรางโปรเจกตโดย MS Visual C# จะตองเขยนคาสงในไฟล .cs ซงโดย Default จะมชอวา Program.cs โดยองคประกอบของโปรแกรมภาษา C# มดงน

สวน using เปนสวนทใชเรยก namespace ทรวม class ตางๆ จากภายนอกมาใช สวน namespace เปนโครงสรางบลอกของโปรเจกตทประกอบดวย class ตางๆ ทผเขยนโปรกรมสรางขน รวมทง class Program ทโปรแกรมสรางให

สวน class Program เปนคลาสทโปรแกรมสรางใหโดยอตโนมต ซงสามารถเปลยนชอไดตามตองการ ใน namespace หนงๆ สามารถสราง class ไดหลาย class และแตละคลาส สามารถสรางเมทอดไดหลาย ๆ เมทอด โดยมเมทอดหลกคอ Main

สวนเมทอด Main เปนเมทอดหลกของโปรแกรม ซงเปนสวนเรมทางานของโปรแกรม ทพฒนาขน ในโปรแกรมหนงๆ จะมเมทอด Main ไดเพยงเมทอดเดยว ไมวาจะมกคลาสกตาม

Page 173: คู มืออบรมการเข ียนโปรแกรมด วยภาษา C#weerayuth.in.th/docFiles/cs0.4.pdfแนะนําภาษา C# 1. จุดประสงค

สถาบนสงเสรมการสอนวทยาศาสตรและเทคโนโลย 173

รปท 16 คาสงในหนาตาง Editor

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

รปท 17 ตวอยางโปรแกรมภาษาซชารป

เมอพมพคาสงทโปรแกรมรจกจะมกลองรายการใหใชงาน

Page 174: คู มืออบรมการเข ียนโปรแกรมด วยภาษา C#weerayuth.in.th/docFiles/cs0.4.pdfแนะนําภาษา C# 1. จุดประสงค

สถาบนสงเสรมการสอนวทยาศาสตรและเทคโนโลย 174

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

ทสญรป Start Debugging หรอกดคย F5 ดงรปท 18

รปท 18 การรนโปรแกรม

จะปรากฎผลลพธดงรปท 19

รปท 19 ผลลพธการรนโปรแกรม

Page 175: คู มืออบรมการเข ียนโปรแกรมด วยภาษา C#weerayuth.in.th/docFiles/cs0.4.pdfแนะนําภาษา C# 1. จุดประสงค

สถาบนสงเสรมการสอนวทยาศาสตรและเทคโนโลย 175

9. รายการไฟลทเกดขนจากการรนโปรแกรม

ในการรนโปรแกรมนน MS Visual C# จะทาการคอมไพล แลวสรางไฟล .exe ใหกอน ดงรปท 20

รปท 20 ไฟล .exe ทเกดขนจากการรนโปรแกรม

10. การเตรยมเครองมอ เพอชวยพฒนาโปรแกรม เชนการแสดงรายการการผดพลาดของการเขยนคาสง

ตวอยางการแสดงหนาตาง Error List มขนตอนดงน 10.1 คลกทเมน view -> Error List

รปท 21 เมน view -> Error List

Page 176: คู มืออบรมการเข ียนโปรแกรมด วยภาษา C#weerayuth.in.th/docFiles/cs0.4.pdfแนะนําภาษา C# 1. จุดประสงค

สถาบนสงเสรมการสอนวทยาศาสตรและเทคโนโลย 176

10.2 จะปรากฎหนาตาง Error List ดงรปท 22

รปท 22 หนาตาง Error List

ตวอยางการแสดงขอความเมอโปรแกรมผดพลาดในขณะทกาลงคยโปรแกรม

รปท 23 ตวอยางการแสดงขอความเมอโปรแกรมผดพลาด

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

Page 177: คู มืออบรมการเข ียนโปรแกรมด วยภาษา C#weerayuth.in.th/docFiles/cs0.4.pdfแนะนําภาษา C# 1. จุดประสงค

สถาบนสงเสรมการสอนวทยาศาสตรและเทคโนโลย 177

กจกรรมท 10 การจดกลมขอมลดวยโครงสราง

1. จดประสงค ใหผเรยนสามารถ 1.1. อธบายขอมลแบบโครงสราง 1.2. สรางเมทอดสาหรบคานวณเวกเตอร 1.3. เขยนโปรแกรมโดยใชงานโครงสรางรวมกบอาเรย

2. แนวคด ภาษา C# รวมถงภาษาโปรแกรมอกหลายภาษารองรบการใชงานโครงสราง (structure) ทอนญาตใหเรานาขอมลยอยตาง ๆ ทอาจประกอบดวยขอมลตางชนดกนมารวมไวเปนกลมเดยวกน โดยทการอางถงกจะกระทาผานตวแปรตวเดยวกนทงหมด การทาเชนนนอกจากจะทาใหโปรแกรมดเปนระเบยบขนแลว การใชโครงสรางยงมประโยชนอยางมากในการรวมขอมลเปนกลมเพอสงไปประมวลผลในเมทอดอน ๆ ผานทางพารามเตอรเพยงตวเดยว

3. สออปกรณ

3.1 ใบงาน ใบงานท เรอง เวลา (นาท)

10.1 รจกกบขอมลแบบโครงสราง 30 10.2 เวกเตอร 30 10.3 ฐานขอมลนกเรยน 60

3.2 ใบความร - ใบความรท 10.1 เรองชนดขอมลแบบโครงสราง - ใบความรท 10.2 เรองการใชงานโครงสรางรวมกบอาเรย

3.3 อนๆ - เครองคอมพวเตอรเทากบจานวนกลม - โปรแกรมวชวลซชารป เอกเพรส

4. วธดาเนนการ

4.1 การจดเตรยม

Page 178: คู มืออบรมการเข ียนโปรแกรมด วยภาษา C#weerayuth.in.th/docFiles/cs0.4.pdfแนะนําภาษา C# 1. จุดประสงค

สถาบนสงเสรมการสอนวทยาศาสตรและเทคโนโลย 178

4.1.1 แบงผเรยนเปนกลม กลมละ 2 คน 4.1.2 เตรยมใบงานท 10.1-10.3 ตามจานวนกลม และใบความรท 10.1-10.2 ตามจานวนผเรยน

4.2 ขนตอนการดาเนนการ 4.2.1 ผสอนกลาวถงเรองการจดกลมขอมลแบบโครงสราง 4.2.2 ผเรยนแตละกลมศกษาใบความรท 10.1 เรองชนดขอมลแบบโครงสราง จากนนทาใบงานท

10.1 เรองรจกกบขอมลแบบโครงสราง และใบงานท 10.2 เรองเวกเตอร 4.2.3 ผสอนสมผเรยนออกมานาเสนอคาตอบในใบงานท 10.1 และ 10.2 4.2.4 ผเรยนแตละกลมศกษาใบความรท 10.2 เรองการใชงานโครงสรางรวมกบอาเรย จากนนทา

ใบงานท 10.3 เรองฐานขอมลนกเรยน 4.2.5 ผเรยนและผสอนรวมกนอภปรายและสรป

5. การวดและประเมนผล 5.1 แบบประเมนโครงงาน

6. แหลงความรเพมเตม

6.1 http://msdn.microsoft.com/th-th/vcsharp/default(en-us).aspx

7. ขอเสนอแนะ -

Page 179: คู มืออบรมการเข ียนโปรแกรมด วยภาษา C#weerayuth.in.th/docFiles/cs0.4.pdfแนะนําภาษา C# 1. จุดประสงค

สถาบนสงเสรมการสอนวทยาศาสตรและเทคโนโลย 179

ใบงานท 10.1 รจกกบขอมลแบบโครงสราง

ใหผเรยนศกษาใบความรท 10.1 แลวตอบคาถามตอไปน

1. เรยนรการใชงานขอมลโครงสราง 1.1 นยามโครงสรางชอ VehicleInfo สาหรบเกบขอมลรถยนตแตละคน ซงประกอบดวยสมาชก

ดงน o ยหอรถ เปนขอมลชนดขอความ อางถงโดยใชชอ make o ทะเบยนรถ เปนขอมลชนดขอความ อางถงโดยใชชอ plate o สรถ เปนขอมลชนดขอความ อางถงโดยใชชอ color o ปทผลต เปนขอมลชนดตวเลขจานวนเตม อางถงโดยใชชอ year

struct ______________________ { _________________________________________; _________________________________________; _________________________________________; _________________________________________; }

1.2 เราจะนยามเมทอดขนมาสองเมทอดเพอจดการขอมลเกยวกบเวกเตอรและนาไปใชตอไดในใบงานหลง ๆ เมทอดแรกคอ ReadVector ซงรบขอมลเวกเตอรสามมตจากผใชและสงคาคนกลบมาในรปโครงสราง Vector อกเมทอดหนงคอ PrintVector ใชสาหรบแสดงผลขอมลในโครงสราง Vector ออกทางหนาจอ จงเตมคาสงลงในชองวางเพอใหโปรแกรมทางานไดตรงกบตวอยางผลลพธทกาหนดให using System; class VectorEx { struct Vector { public double x,y,z; } static Vector ReadVector() { Vector v; Console.Write("X element: "); __________ = double.Parse(Console.ReadLine()); Console.Write("Y element: ");

รายชอสมาชกในกลมท…………………. 1. ………………………………………………… 2. …………………………………………………. 3. ………………………………………………… 4. ………………………………………………….

Page 180: คู มืออบรมการเข ียนโปรแกรมด วยภาษา C#weerayuth.in.th/docFiles/cs0.4.pdfแนะนําภาษา C# 1. จุดประสงค

สถาบนสงเสรมการสอนวทยาศาสตรและเทคโนโลย 180

_____________________________________________________; _____________________________________________________; _____________________________________________________; ______________________________; } static void PrintVector(Vector v) { Console.Write("({0},{1},{2})", ________, ________, ________); } static void Main() { Console.WriteLine("Enter a vector"); Vector a = ReadVector(); Console.Write("You justed enter a vector "); PrintVector(a); Console.WriteLine(); } }

ตวอยางผลการทางาน Enter a vector X element: 6 Y element: 13 Z element: 1 You just entered a vector (6,13,1)

Page 181: คู มืออบรมการเข ียนโปรแกรมด วยภาษา C#weerayuth.in.th/docFiles/cs0.4.pdfแนะนําภาษา C# 1. จุดประสงค

สถาบนสงเสรมการสอนวทยาศาสตรและเทคโนโลย 181

ใบงานท 10.2 เวกเตอร

ใหผเรยนศกษาใบความรท 10.1 แลวตอบคาถามตอไปน

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

จงเตมคาสงลงในชองวางเพอใหโปรแกรมทางานไดตรงกบตวอยางผลลพธทกาหนดให using System; class VectorEx { struct Vector { public double x,y,z; } static Vector ReadVector() { Vector v; Console.Write("X element: "); __________ = double.Parse(Console.ReadLine()); Console.Write("Y element: "); _____________________________________________________; _____________________________________________________; _____________________________________________________; ______________________________; } static void PrintVector(Vector v) { Console.Write("({0},{1},{2})", ________, ________, ________); } static void Main() { Console.WriteLine("Enter a vector"); Vector a = ReadVector(); Console.Write("You justed enter a vector "); PrintVector(a); Console.WriteLine(); } }

รายชอสมาชกในกลมท…………………. 1. ………………………………………………… 2. …………………………………………………. 3. ………………………………………………… 4. ………………………………………………….

Page 182: คู มืออบรมการเข ียนโปรแกรมด วยภาษา C#weerayuth.in.th/docFiles/cs0.4.pdfแนะนําภาษา C# 1. จุดประสงค

สถาบนสงเสรมการสอนวทยาศาสตรและเทคโนโลย 182

ตวอยางผลการทางาน Enter a vector X element: 6 Y element: 13 Z element: 1 You just entered a vector (6,13,1)

2. สรางเมทอดสาหรบคานวณขนาดของเวกเตอร ให v = (vx,vy,vz) เปนเวกเตอรในปรภมสามมต ขนาดของเวกเตอร v เขยนแทนดวย |v| สามารถคานวณไดจากสตร

222zyx vvv ++=v

โปรแกรมดานลางมการนยามเมทอดชอ VectorSize ขนมาเพอคานวณขนาดของเวกเตอร โปรแกรมนอาศยเมทอด ReadVector และ PrintVector จากแบบฝกหดทแลวเพอรบขอมลเวกเตอรจากผใชและแสดงผลขอมลในเวกเตอร (เมทอดเหลานรวมถงการนยามโครงสราง Vector ถกละไวเพอสงวนพนท) จงเตมคาสงทเหมาะสมลงในชองวางเพอใหการนยามเมทอด VectorSize เสรจสมบรณ using System; class VectorEx { // คดลอกนยามโครงสราง Vector มาปะในตาแหนงน // คดลอกเมทอด PrintVector และ ReadVector // จากแบบฝกหดทแลวมาปะในตาแหนงน static double VectorSize(Vector v) { return __________________________________________________; } static void Main() { Console.WriteLine("Enter a vector"); Vector v = ReadVector(); Console.Write("The size of the vector "); PrintVector(v); Console.WriteLine(" is {0}", VectorSize(v)); } }

ตวอยางผลการทางาน Enter a vector X element: 3 Y element: 7 Z element: -2 The size of the vector (3,7,-2) is 7.87400787401181

Page 183: คู มืออบรมการเข ียนโปรแกรมด วยภาษา C#weerayuth.in.th/docFiles/cs0.4.pdfแนะนําภาษา C# 1. จุดประสงค

สถาบนสงเสรมการสอนวทยาศาสตรและเทคโนโลย 183

3. สรางเมทอดเพอคานวณผลคณจดของเวกเตอรสองตว สาหรบเวกเตอร u = (ux,uy,uz) และเวกเตอร v = (vx,vy,vz) ใด ๆ ผลคณจด (dot product) ของเวกเตอร u และ vมสญลกษณเปน u⋅v ใหผลลพธเปนปรมาณสเกลารทมคาตามสตร

u⋅v = uxvx+ uyvy+ uzvz

จงทาโปรแกรมตอไปนใหสมบรณเพอใหโปรแกรมรบเวกเตอรสองจานวนจากผใช และแสดงผลคณจดทเกดจากเวกเตอรทงค using System; class VectorEx { // คดลอกนยามโครงสราง Vector มาปะในตาแหนงน // คดลอกเมทอด ReadVector จากแบบฝกหดทแลวมาปะในตาแหนงน static double DotVectors(Vector u, Vector v) { _______________________________________________; } static void Main() { Console.WriteLine("Enter vector u"); Vector u = ReadVector(); ___________________________________________; ___________________________________________; Console.WriteLine("u * v = {0}", DotVectors(u,v)); } }

ตวอยางผลการทางาน Enter vector u X element: -1.2 Y element: 3 Z element: 0.5 Enter vector v X element: 4 Y element: 2 Z element: 1.8 u * v = 2.1

Page 184: คู มืออบรมการเข ียนโปรแกรมด วยภาษา C#weerayuth.in.th/docFiles/cs0.4.pdfแนะนําภาษา C# 1. จุดประสงค

สถาบนสงเสรมการสอนวทยาศาสตรและเทคโนโลย 184

ใบงานท 10.3 ฐานขอมลนกเรยน

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

• รหสประจาตว มคาไดตงแต 1 ถง 999 • ชอ-นามสกล • เกรดเฉลยสะสม

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

ตวอยางผลการทางาน How many students? 3 Enter student#1's information ID: 234 Name: Arthur GPA: 4.00 Enter student#2's information ID: 876 Name: Paula GPA: 3.99 Enter student#3's information ID: 379 Name: Ariya GPA: 1.50 Enter ID to search (-1 to quit): 379 Name: Ariya GPA: 1.50 Enter ID to search (-1 to quit): 111 Enter ID to search (-1 to quit): 234 Name: Arthur GPA: 4.00

รายชอสมาชกในกลมท…………………. 1. ………………………………………………… 2. …………………………………………………. 3. ………………………………………………… 4. ………………………………………………….

Page 185: คู มืออบรมการเข ียนโปรแกรมด วยภาษา C#weerayuth.in.th/docFiles/cs0.4.pdfแนะนําภาษา C# 1. จุดประสงค

สถาบนสงเสรมการสอนวทยาศาสตรและเทคโนโลย 185

Enter ID to search (-1 to quit): -1

คดลอกโปรแกรมลงในชองวาง

Page 186: คู มืออบรมการเข ียนโปรแกรมด วยภาษา C#weerayuth.in.th/docFiles/cs0.4.pdfแนะนําภาษา C# 1. จุดประสงค

สถาบนสงเสรมการสอนวทยาศาสตรและเทคโนโลย 186

ใบความรท 10.1 ชนดขอมลแบบโครงสราง

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

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

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

ตางจากอาเรยทขอมลซงถกนามารวมกนจะตองเปนขอมลชนดเดยวกนเทานน จงเปนสงจาเปนทเราตองนยามโครงสรางขอมลทชดเจนขนมาเสยกอนวากลมขอมลจะประกอบดวย สมาชก (member) ทมแบบขอมลชนดใดบาง และสมาชกแตละตวจะถกอางถงอยางไร การนยามโครงสรางในภาษา C# นนอาศยคยเวรด struct (มาจากคาวา structure) ซงมรปแบบดงน struct StructName { public DataType1 var1; public DataType2 var2; : public DataTypeN varN; }

รปแบบขางตนเปนการนยามโครงสรางชอ StructName ซงประกอบดวยสมาชก N ตว สมาชกจานวนแรกมชนดขอมลเปน DataType1 และถกอางองผานชอ var1 สมาชกตวถดมามชนดขอมลเปน DataType2 และถกอางองผานชอ var2 เชนนเรอยไป สาหรบคยเวรด public ทปรากฏหนาการนยามสมาชกแตละตวเปนการกาหนดระดบการปกปองขอมล (protection level) ซงเราจะยงไมสนใจในทน

Page 187: คู มืออบรมการเข ียนโปรแกรมด วยภาษา C#weerayuth.in.th/docFiles/cs0.4.pdfแนะนําภาษา C# 1. จุดประสงค

สถาบนสงเสรมการสอนวทยาศาสตรและเทคโนโลย 187

การนยามโครงสรางตองปรากฏอยภายในคลาส แตอยภายนอกเมทอดใด ๆ เสมอ

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

• รหสประจาตว เปนขอมลชนดตวเลขจานวนเตม อางถงโดยใชชอ id • ชอนกเรยน เปนขอมลชนดขอความ อางถงโดยใชชอ name • คะแนนนกเรยน เปนขอมลชนด double อางถงโดยใชชอ score

struct StdInfo { public int id; public string name; public double score; }

ตามทกลาวไวขางตน การนยามโครงสรางภายในโปรแกรมจะตอง อยภายในคลาสแตอยนอกเมทอดเสมอ ตวอยางเชน class MyClass { struct StdInfo { public int id; public string name; public double score; } static void Main() { : } }

2. การประกาศและการใชงานตวแปรชนดโครงสราง การใชคยเวรด struct ขางตนนนเปนเพยงการนยามโครงสรางขนมาเทานน ยงมไดมผลทาให

โปรแกรมสรางเนอทสาหรบเกบขอมลขนมาภายในหนวยความจาแตอยางใด การนาโครงสรางมาใชเกบขอมลจรง ๆ จะตองมการประกาศตวแปรทระบชนดขอมลเปนชอของโครงสรางนน ๆ เสยกอน ดงรปแบบตอไปน StructName structVar;

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

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

Page 188: คู มืออบรมการเข ียนโปรแกรมด วยภาษา C#weerayuth.in.th/docFiles/cs0.4.pdfแนะนําภาษา C# 1. จุดประสงค

สถาบนสงเสรมการสอนวทยาศาสตรและเทคโนโลย 188

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

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

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

ตวอยางท 10.2 โปรแกรมดานลางนยามโครงสรางชอ Vector เพอใชแทนขอมลแบบเวกเตอรในปรภมสามมต ภายในโครงสรางประกอบดวยสมาชกชอ x y และ z ทมชนดขอมลแบบ double ใชสาหรบเกบคาในแตละแกนของเวกเตอร ภายในโปรแกรมหลกจะมการสรางตวแปรแบบ Vector ขนมาหนงตวและกาหนดใหมคาเปน (3,4,5) จากนนจงนาคาเหลานมาแสดงผลบนหนาจอในรปเวกเตอร 1: using System; 2: class VectorEx { 3: struct Vector { 4: public double x; 5: public double y; 6: public double z; 7: } 8: 9: static void Main() { 10: Vector v1; 11: v1.x = 3; v1.y = 4; v1.z = 5; 12: Console.WriteLine("Vector v1 = ({0},{1},{2})", 13: v1.x, v1.y, v1.z); 14: } 15: }

สงเกตวาในการนยามโครงสราง Vector นนมสมาชกทมชนดของขอมลเปน double เหมอนกนหมด ในกรณนภาษา C# อนญาตใหเราประกาศสมาชกไวภายใตคาสงเดยวกนได ดงนนโปรแกรมในชวงบรรทดท 3-7 จงเขยนใหสนลงไดเปน struct Vector { public double x,y,z; }

Page 189: คู มืออบรมการเข ียนโปรแกรมด วยภาษา C#weerayuth.in.th/docFiles/cs0.4.pdfแนะนําภาษา C# 1. จุดประสงค

สถาบนสงเสรมการสอนวทยาศาสตรและเทคโนโลย 189

ใบความรท 10.2 การใชงานโครงสรางรวมกบอาเรย

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

ตามทไดกลาวมาแลววาโครงสรางทถกนยามไวเรยบรอยแลวสามารถถกนามาใชเสมอนกบเปนชนดขอมลชนดหนงไดทนท ดงนนการประกาศตวแปรแบบอาเรยของโครงสรางจงมรปแบบเหมอนกบการประกาศอาเรยทว ๆ ไป เพยงแตระบชนดขอมลใหตรงกบชอโครงสรางนน ๆ เทานน ตวอยางเชนหากเราตองการประกาศตวแปรชอ students เพอเปนอาเรยหนงมตของโครงสราง StdInfo ทนยามไวในตวอยางท 10.1 เราจะใชคาสงดงน StdInfo[] students;

อยาลมวาอาเรยจรง ๆ ยงไมถกสรางจนกวาจะใชคาสง new ตวอยางเชน students = new StdInfo[30];

จะเปนการสรางอาเรยทบรรจขอมลชนด StdInfo ได 30 ชอง อางองผานตวแปรชอ students

การเขาถงขอมลในอาเรยของโครงสรางจะมรปแบบเหมอนการเขาถง% ขอมลในอาเรยของขอมลพนฐานทว ๆ ไปโดยระบตาแหนงในอาเรยดวยดชน ตางกนตรงทรปแบบการใชงานนจะไมเปนเสมอนตวแปรทเกบคาโดด ๆ อกตอไป แตเปนเสมอนตวแปรแบบโครงสรางนน ๆ เชน students[5]

จะทางานเสมอนตวแปรแบบโครงสรางทเกบขอมลของนกเรยน ณ ดชน 5 (นกเรยนคนท 6 ในอาเรย) ดงนนการเขาถงขอมลภายในโครงสรางจงทาไดโดยการระบชอสมาชกของโครงสรางตอทายรปแบบขางตนเทานน เชนชอของนกเรยนคนนจะถกอางองผาน students[5].name

Page 190: คู มืออบรมการเข ียนโปรแกรมด วยภาษา C#weerayuth.in.th/docFiles/cs0.4.pdfแนะนําภาษา C# 1. จุดประสงค

สถาบนสงเสรมการสอนวทยาศาสตรและเทคโนโลย 190

ซงหากพจารณาจากโครงสราง StdInfo แลว students[5].name จะเปรยบเสมอนตวแปรแบบขอความตวหนงทจะถกนาไปกาหนดคาใหกได หรอนาไปใชในรปนพจนกได เชน students[5].name = "Arthur"; Console.WriteLine("The student's name is {0}", students[5].name);

Page 191: คู มืออบรมการเข ียนโปรแกรมด วยภาษา C#weerayuth.in.th/docFiles/cs0.4.pdfแนะนําภาษา C# 1. จุดประสงค

สถาบนสงเสรมการสอนวทยาศาสตรและเทคโนโลย 191

คณะผพฒนาเอกสาร การโปรแกรมภาษาซชารป

คณะผพฒนาเอกสารฝกอบรมคร 1. ดร.ชยพร ใจแกว มหาวทยาลยเกษตรศาสตร กรงเทพฯ 2. ดร.ฐตวรรณ ศรนาค มหาวทยาลยเกษตรศาสตร กรงเทพฯ 3. รศ.ธรวฒน ประกอบผล สถาบนเทคโนโลยพระจอมเกลาฯ ลาดกระบง กรงเทพฯ 4. อาจารยสายชล ใจเยน สถาบนเทคโนโลยพระจอมเกลาฯ ลาดกระบง กรงเทพฯ 5. นายชยการ ครรตน สาธตจฬาลงกรณมหาวทยาลย ฝายมธยม กรงเทพฯ 6. นายนพนธ ศภศร สสวท. กรงเทพฯ 7. นางสาวจนดาพร หมวกหมนไวย สสวท. กรงเทพฯ 8. นางสาวทศนย กรองทอง สสวท. กรงเทพฯ 9. นางสาวพรพมล ตงชยสน สสวท. กรงเทพฯ 10. นางสาวจระพร สงขเวทย สสวท. กรงเทพฯ 11. นายนรมษ เพยรประเสรฐ สสวท. กรงเทพฯ 12. นายพนมยงค แกวประชม สสวท. กรงเทพฯ