Upload
others
View
5
Download
0
Embed Size (px)
Citation preview
สถาบนสงเสรมการสอนวทยาศาสตรและเทคโนโลย 1
คมออบรมการเขยนโปรแกรมดวยภาษา C#
สถาบนสงเสรมการสอนวทยาศาสตรและเทคโนโลย 2
คานา
สถาบนสงเสรมการสอนวทยาศาสตรและเทคโนโลย (สสวท.) ไดตระหนกถงความสาคญในการพฒนาครมาโดยตลอด โดยมการจดประชมปฏบตการอบรมครและจดกจกรรมตางๆ ซงชวยใหครนาความรและประสบการณทไดรบไปปรบปรงและพฒนาการจดการเรยนการสอนใหเขากบสภาพของทองถนตามความเหมาะสม
ปงบประมาณ ๒๕๕๒ ไดดาเนนโครงการจดการแขงขนคอมพวเตอรโอลมปกระหวางประเทศ ครงท ๒๓ ป พ .ศ .๒๕๕๔ โดยไดดาเนนกจกรรมตางๆ เพอรองรบการเปนเจาภาพจดการแขงขนฯ โดยเฉพาะอยางยงการพฒนาศกยภาพของครและนกเรยนทางดานคอมพวเตอร และการเขยนโปรแกรม สาขาคอมพวเตอร จงไดรวมกบคณาจารยจากมหาวทยาลยตางๆ จดใหมการอบรมครหลกสตรการโปรแกรมภาษาซชารปขน เพอพฒนาคณภาพการเรยนการสอนดานการเขยนโปรแกรมในโรงเรยน โดยไดจดทาเอกสารสาหรบการอบรมครหลกสตรการเขยนโปรแกรมภาษาซชารปใหกบครในโรงเรยนทสนใจไดเพมพนทกษะ และนาความรไปประยกตในการจดการเรยนการสอนวชาการโปรแกรมตอไป
การจดทาเอกสารไดรบความรวมมออยางดยงจากผทรงคณวฒและนกวชาการจากหนวยงานตางๆ ของรฐ วทยากรแกนนาคอมพวเตอร และผสอนวชาเทคโนโลยสารสนเทศ ระดบมธยมศกษา รวมทงนกวชาการสาขาคอมพวเตอร สสวท. จงขอขอบคณไว ณ ทน
สสวท. หวงเปนอยางยงวาเอกสารฉบบนจะเปนประโยชนแกสถานศกษาและผเกยวของทกฝายทจะชวยพฒนาการจดการเรยนการสอนดานการโปรแกรมใหมประสทธภาพ หากมขอเสนอแนะใดทจะทาใหเอกสารนสมบรณยงขน โปรดแจง สาขาคอมพวเตอร สสวท. ทราบดวยจกขอบพระคณยง
สาขาคอมพวเตอร สถาบนสงเสรมการสอนวทยาศาสตรและเทคโนโลย
๒๐ เมษายน ๒๕๕๒
สถาบนสงเสรมการสอนวทยาศาสตรและเทคโนโลย 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
สถาบนสงเสรมการสอนวทยาศาสตรและเทคโนโลย 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
สถาบนสงเสรมการสอนวทยาศาสตรและเทคโนโลย 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
สถาบนสงเสรมการสอนวทยาศาสตรและเทคโนโลย 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#
สถาบนสงเสรมการสอนวทยาศาสตรและเทคโนโลย 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 ไดจากภาคผนวก
สถาบนสงเสรมการสอนวทยาศาสตรและเทคโนโลย 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. ………………………………………………….
สถาบนสงเสรมการสอนวทยาศาสตรและเทคโนโลย 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 ทดสอบความถกตอง และกรอกโปรแกรมทไดลงในชองวาง
สถาบนสงเสรมการสอนวทยาศาสตรและเทคโนโลย 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 เพอใชแทนอายปจจบนของทานเอง
สถาบนสงเสรมการสอนวทยาศาสตรและเทคโนโลย 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 แกไขโปรแกรมใหคอมไพลไดโดยไมมขอผดพลาด ทดสอบความถกตอง แสดงโปรแกรมทแกไขแลวลงในชองดานลาง
สถาบนสงเสรมการสอนวทยาศาสตรและเทคโนโลย 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. ………………………………………………….
สถาบนสงเสรมการสอนวทยาศาสตรและเทคโนโลย 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)__
สถาบนสงเสรมการสอนวทยาศาสตรและเทคโนโลย 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 รายการเมนสาหรบสรางโปรเจกตใหม
สถาบนสงเสรมการสอนวทยาศาสตรและเทคโนโลย 15
รปท 1.2 ไดอะลอกซในสรางโปรเจกตใหมและการตงคาสาหรบคอนโซลแอพลเคชน
รปท 1.3 หนาจอโดยรวมของ MS Visual C# หลงกระบวนการสรางโปรเจกต
เลอก Console Application
ตงชอแอพลเคชน
พนทการเขยนโปรแกรม
คลกปม Run เพอ ทดสอบโปรแกรม
สถาบนสงเสรมการสอนวทยาศาสตรและเทคโนโลย 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# ได
สถาบนสงเสรมการสอนวทยาศาสตรและเทคโนโลย 17
• คอมไพลและทดสอบโปรแกรมทเขยนขนไดทนท
• เพมความงายในการเขยนโปรแกรมดวยคณสมบตการเตมเตมคาสง (Code Completion)
• สนบสนนการพฒนาโปรแกรมทงประเภททตดตอกบผใชผานคอนโซล (Console Application) ซงรบขอมลผานแปนพมพและแสดงผลขอมลในรปตวอกษรเพยงอยางเดยว ดงตวอยางในรปท 1.4 และประเภททใชคณสมบตของวนโดวสเตมรปแบบ (Windows Application) ซงอนญาตใหผใชงานควบคมโปรแกรมโดยใชเมาสและแสดงผลในแบบกราฟกได ดงตวอยางในรปท 1.5
รปท 1.4 ตวอยางคอนโซลแอพลเคชน (Console Application)
รปท 1.5 ตวอยางวนโดวสแอพลเคชน (Windows Application)
สถาบนสงเสรมการสอนวทยาศาสตรและเทคโนโลย 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)___ } }
สถาบนสงเสรมการสอนวทยาศาสตรและเทคโนโลย 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
สถาบนสงเสรมการสอนวทยาศาสตรและเทคโนโลย 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
สถาบนสงเสรมการสอนวทยาศาสตรและเทคโนโลย 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: }
สถาบนสงเสรมการสอนวทยาศาสตรและเทคโนโลย 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
สถาบนสงเสรมการสอนวทยาศาสตรและเทคโนโลย 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;
สถาบนสงเสรมการสอนวทยาศาสตรและเทคโนโลย 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 มาแทนท
สถาบนสงเสรมการสอนวทยาศาสตรและเทคโนโลย 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) ใชสาหรบกาหนดรปแบบการแสดงผลของนพจน เชนแสดงผลลพธของนพจนในรปแบบทศนยมเปนตน สวนเครองหมาย [ ] หมายถงจะมหรอไมมสวนนกได ตวกาหนดรปแบบพนฐานสาหรบตวเลขทสาคญแสดงในตารางตอไปน
ถกนาไปแสดงผล
สถาบนสงเสรมการสอนวทยาศาสตรและเทคโนโลย 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); } }
สถาบนสงเสรมการสอนวทยาศาสตรและเทคโนโลย 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); } }
สถาบนสงเสรมการสอนวทยาศาสตรและเทคโนโลย 28
จากโปรแกรมจะกาหนดใหแสดงผลกวาง 20 ตว ผลลพธจากการรนโปรแกรมจะเปนดงน
นอกจากนเรายงสามารถระบจานวนของตวเลขหลงจดทศนยมทตองการแสดงออกทางจอภาพได
โดยใสตวเลขจานวนเตมหลงตวกาหนดรปแบบ เชน Console.WriteLine("{0:F2}", 123.4500); ตวเลข 2 หลงตวอกษร F หมายถงใหแสดงผลตวเลข 123.4500 เปนทศนยมสองตาแหนงนนคอ 123.45
สถาบนสงเสรมการสอนวทยาศาสตรและเทคโนโลย 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#
สถาบนสงเสรมการสอนวทยาศาสตรและเทคโนโลย 30
การคนเอกสารจาก MSDN Library นนสามารถทาไดหลายรปแบบ ผพฒนาโปรแกรมอาจเลอกหวขอจากสารบญทางดานซายมอ หรอปอนคาคนในกลอง Search เพอคนหาหวขอทเกยวของ รปท 1.8 แสดงผลลพธจากการคนหาดวยคาคน Math
รปท 1.7 หนาจอของ MSDN Library ในสวนของการคนหา
รปท 1.8 ผลลพธจากการปอนคาคน Math
สถาบนสงเสรมการสอนวทยาศาสตรและเทคโนโลย 31
นอกจากการเขาส MSDN Library ผานทางเมน Help แลว ผพฒนาโปรแกรมยงสามารถคนหารายละเอยดของชอเนมสเปส คลาส คยเวรด หรอเมทอดทตองการไดจากพนทการเขยนโปรแกรมโดยตรง โดยเลอนเคอรเซอรมาวางไวในคาทตองการสบคน แลวกดปม F1 ดงแสดงตวอยางในรปท 1.9 ซงจะไดผลลพธเปนรายการของคลาสทอยในเนมสเปส System ดงรปท 1.10
รปท 1.9 การขอความชวยเหลอโดยใชปม F1
รปท 1.10 รายชอคลาสในเนมสเปซ System หลงใชคาสงคนหาผาน MSDN Library
เลอนเคอรเซอรไวบนคาทตองการคนหา แลวกดปม F1
สถาบนสงเสรมการสอนวทยาศาสตรและเทคโนโลย 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
สถาบนสงเสรมการสอนวทยาศาสตรและเทคโนโลย 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 ผสอนอาจฝกทกษะของผเรยนโดยเพมเตมโจทยทใชสตรตางๆ ในการคานวณ
สถาบนสงเสรมการสอนวทยาศาสตรและเทคโนโลย 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. ………………………………………………….
สถาบนสงเสรมการสอนวทยาศาสตรและเทคโนโลย 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.
จากนนกรอกโปรแกรมลงในชองวาง
สถาบนสงเสรมการสอนวทยาศาสตรและเทคโนโลย 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. ………………………………………………….
สถาบนสงเสรมการสอนวทยาศาสตรและเทคโนโลย 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. ………………………………………………….
สถาบนสงเสรมการสอนวทยาศาสตรและเทคโนโลย 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 เมทอดในภาษาเชงวตถหมายถงฟงกชนหรอโปรแกรมยอยทผกตดอยกบคลาสหรอวตถหนง ๆ
สถาบนสงเสรมการสอนวทยาศาสตรและเทคโนโลย 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 อาจนาไปกาหนดใหตวแปรโดยตรงหรอนาไปผสมกบนพจนอน ๆ เพอสรางเปนนพจนใหมกได
สถาบนสงเสรมการสอนวทยาศาสตรและเทคโนโลย 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(); } }
สถาบนสงเสรมการสอนวทยาศาสตรและเทคโนโลย 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 ซงมผลทาใหโปรแกรมหยดการทางาน
สถาบนสงเสรมการสอนวทยาศาสตรและเทคโนโลย 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 เรองการตรวจสอบคาความจรง ซงใหอธบายเงอนไขทจะทาใหนพจนทางตรรกศาสตรในแตละขอมคาเปนจรง
สถาบนสงเสรมการสอนวทยาศาสตรและเทคโนโลย 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. ขอเสนอแนะ -
สถาบนสงเสรมการสอนวทยาศาสตรและเทคโนโลย 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. ………………………………………………….
สถาบนสงเสรมการสอนวทยาศาสตรและเทคโนโลย 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. ………………………………………………….
สถาบนสงเสรมการสอนวทยาศาสตรและเทคโนโลย 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)__
สถาบนสงเสรมการสอนวทยาศาสตรและเทคโนโลย 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. ………………………………………………….
สถาบนสงเสรมการสอนวทยาศาสตรและเทคโนโลย 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)__
สถาบนสงเสรมการสอนวทยาศาสตรและเทคโนโลย 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. ………………………………………………….
สถาบนสงเสรมการสอนวทยาศาสตรและเทคโนโลย 50
จากนนคดลอกโปรแกรมลงในชองวาง
สถาบนสงเสรมการสอนวทยาศาสตรและเทคโนโลย 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. ………………………………………………….
สถาบนสงเสรมการสอนวทยาศาสตรและเทคโนโลย 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
สถาบนสงเสรมการสอนวทยาศาสตรและเทคโนโลย 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 }
สถาบนสงเสรมการสอนวทยาศาสตรและเทคโนโลย 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 } }
สถาบนสงเสรมการสอนวทยาศาสตรและเทคโนโลย 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); } }
สถาบนสงเสรมการสอนวทยาศาสตรและเทคโนโลย 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.
สถาบนสงเสรมการสอนวทยาศาสตรและเทคโนโลย 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
สถาบนสงเสรมการสอนวทยาศาสตรและเทคโนโลย 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");
สถาบนสงเสรมการสอนวทยาศาสตรและเทคโนโลย 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
สถาบนสงเสรมการสอนวทยาศาสตรและเทคโนโลย 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!!
สถาบนสงเสรมการสอนวทยาศาสตรและเทคโนโลย 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); } }
สถาบนสงเสรมการสอนวทยาศาสตรและเทคโนโลย 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
สถาบนสงเสรมการสอนวทยาศาสตรและเทคโนโลย 63
กจกรรมท 4 คาสงวนซา
1. จดประสงค ใหผเรยนสามารถ 1.1 อธบายโครงสรางของการเขยนโปรแกรมแบบวนซา 1.2 เขยนโปรแกรมคาสงวนซาโครงสรางแบบ while 1.3 เขยนโปรแกรมคาสงวนซาโครงสรางแบบ do..while 1.4 เขยนโปรแกรมคาสงวนซาโครงสรางแบบ for
2. แนวคด
การเขยนโปรแกรมเพอใหคอมพวเตอรประมวลผลขอมลแบบเดยวกนหลาย ๆ รอบ โดยเขยนคาสงซา ๆ กนในโปรแกรมทาใหโปรแกรมมขนาดใหญ ขาดความยดหยนและผดพลาดไดงาย จงจาเปนตองอาศยการเขยนโปรแกรมทมโครงสรางแบบวนซา ซงจะชวยใหการเขยนคาสงสนลง คาสงในการเขยนโปรแกรมแบบวนซามหลายคาสง แตละคาสงจะมความเหมาะสมกบลกษณะงานหรอสถานการณทแตกตางกน
โครงสราง while ลปเปนโครงสรางแบบงายทสดทสามารถนามาใชเขยนโปรแกรมเพอวนทาคาสง) หรอกลมของคาสง (ซาหลาย ๆ รอบ
โครงสรางแบบ do..while เปนอกโครงสรางหนงทนามาใชเขยนโปรแกรมเพอทางานวนซาไดและมการทางานคลายคลงกบโครงสรางแบบ while มาก สงทแตกตางกนกคอ do..while จะตรวจสอบเงอนไขหลงจากทาคาสงภายในลปไปแลวหนงครง และจะวนซาไปเรอย ๆ จนกระทงเงอนไขทระบมคาเปนเทจ
เนองจากลปแบบวนนบมการใชงานบอยครงในโปรแกรมทว ๆ ไป ภาษา C# (รวมถงภาษาโปรแกรมอน ๆ ดวย (จงไดเตรยมโครงสรางพเศษเพอใชจดการลปประเภทนไดโดยสะดวกยงขน โครงสรางนคอโครงสราง for โดยเงอนไขของลปจะถกตรวจสอบกอนทคาสงวนซาคาสงแรกจะถกเรยกใช
สถาบนสงเสรมการสอนวทยาศาสตรและเทคโนโลย 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 ผเรยนและผสอนรวมกนอภปราย ซกถามเกยวกบคาสงวนซาแตละแบบวาเหมาะสมกบ
ลกษณะงาน หรอสถานการณใดบาง เพอการเลอกใชคาสงทเหมาะสมกบงาน
สถาบนสงเสรมการสอนวทยาศาสตรและเทคโนโลย 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 ผสอนอาจหาใบงาน หรอโจทยสถานการณตางๆ เพมเตม เพอใหผเรยนทดลองเขยนโปรแกรมโดยใช คาสงวนซา
สถาบนสงเสรมการสอนวทยาศาสตรและเทคโนโลย 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. ………………………………………………….
สถาบนสงเสรมการสอนวทยาศาสตรและเทคโนโลย 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. ………………………………………………….
สถาบนสงเสรมการสอนวทยาศาสตรและเทคโนโลย 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
สถาบนสงเสรมการสอนวทยาศาสตรและเทคโนโลย 69
คดลอกโปรแกรมลงในชองวาง
สถาบนสงเสรมการสอนวทยาศาสตรและเทคโนโลย 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. ………………………………………………….
สถาบนสงเสรมการสอนวทยาศาสตรและเทคโนโลย 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. ………………………………………………….
สถาบนสงเสรมการสอนวทยาศาสตรและเทคโนโลย 72
สถาบนสงเสรมการสอนวทยาศาสตรและเทคโนโลย 73
ใบงานท 4.5 กลมดาวสามเหลยม
เขยนโปรแกรมเพอวาดรปสามเหลยมดวยเครองหมายดอกจน (*) ทมขนาดตามทผใชกาหนด
ตวอยางผลการทางาน Enter triangle size: 2 * **
Enter triangle size: 5 * ** *** **** *****
แนวทาง:ใหพจารณาวาสามเหลยมแตละขนาดกนเนอทกบรรทดและแตละบรรทดประกอบดวยชองวางตนบรรทดกชอง และดาวกดวง)
รายชอสมาชกในกลมท…………………. 1. ………………………………………………… 2. …………………………………………………. 3. ………………………………………………… 4. ………………………………………………….
สถาบนสงเสรมการสอนวทยาศาสตรและเทคโนโลย 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 <=
สถาบนสงเสรมการสอนวทยาศาสตรและเทคโนโลย 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)
สถาบนสงเสรมการสอนวทยาศาสตรและเทคโนโลย 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!!!
สถาบนสงเสรมการสอนวทยาศาสตรและเทคโนโลย 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!!!"); } }
สถาบนสงเสรมการสอนวทยาศาสตรและเทคโนโลย 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; }
สถาบนสงเสรมการสอนวทยาศาสตรและเทคโนโลย 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); } }
สถาบนสงเสรมการสอนวทยาศาสตรและเทคโนโลย 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
สถาบนสงเสรมการสอนวทยาศาสตรและเทคโนโลย 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
สถาบนสงเสรมการสอนวทยาศาสตรและเทคโนโลย 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
สถาบนสงเสรมการสอนวทยาศาสตรและเทคโนโลย 83
7. ขอเสนอแนะ -
สถาบนสงเสรมการสอนวทยาศาสตรและเทคโนโลย 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. ………………………………………………….
สถาบนสงเสรมการสอนวทยาศาสตรและเทคโนโลย 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. ………………………………………………….
สถาบนสงเสรมการสอนวทยาศาสตรและเทคโนโลย 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. ………………………………………………….
สถาบนสงเสรมการสอนวทยาศาสตรและเทคโนโลย 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. ………………………………………………….
สถาบนสงเสรมการสอนวทยาศาสตรและเทคโนโลย 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. ………………………………………………….
สถาบนสงเสรมการสอนวทยาศาสตรและเทคโนโลย 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. ………………………………………………….
สถาบนสงเสรมการสอนวทยาศาสตรและเทคโนโลย 90
ขอมลเพมเตม
• เมทอด Math.Sin ในภาษา C# รบคามมในหนวยเรเดยนอยแลว • เราสามารถปดคาทศนยมใหเปนจานวนเตมไดโดยใชเมทอด Math.Round อยางไรกตาม คาท
ไดจากเมทอดนจะยงคงเปนชนด double หากจะนาไปใชในรปนพจนชนด int จะตองมการทา type casting โดยการใส (int) ไวดานหนา เชน int a = (int) Math.Round(10.3293);
คดลอกโปรแกรมลงในชองวาง
สถาบนสงเสรมการสอนวทยาศาสตรและเทคโนโลย 91
ใบความรท 5.1 การประกาศและเรยกใชเมทอด
ทผานมาเราไดเขยนโปรแกรมโดยใสคาสงทงหมดไวในสวนทเรยกวาเมทอด Main อยางไรกตามการเขยนโปรแกรมในลกษณะนจะเหมาะสาหรบโปรแกรมสน ๆ ทใชแกปญหางาย ๆ เทานน แตสาหรบปญหาทมขนาดใหญและมความซบซอนมากขนการเขยนโปรแกรมแบบนนอกจากจะทาใหโปรแกรมดเทอะทะไมเปนระเบยบแลวยงทาใหเกดความผดพลาดภายในโปรแกรมไดงายขนอกดวย ดงนนนกเขยนโปรแกรมทมประสบการณจงมกออกแบบโปรแกรมโดยการแบงปญหาทตองการแกออกเปนงานยอย ๆ หลาย ๆ งาน จากนนจงเขยนโปรแกรมเปนสวน ๆ เพอจดการงานยอยในแตละงาน เราเรยกสวนของโปรแกรมเพอจดการงานยอยหนง ๆ วา ซบรทน (subroutine) นอกจากนยงมคาอกหลายคาทใหความหมายในทานองเดยวกน เชน โปรแกรมยอย (subprogram) และฟงกชน (function) สาหรบภาษาทสนบสนนการเขยนโปรแกรมเชงวตถเชนภาษา C# นนสวนของโปรแกรมดงกลาวจะถกเรยกวา เมทอด (method)
การเขยนโปรแกรมเปนสวน ๆ โดยใชเมทอดมขอดหลายประการ อาทเชน:
• เปนการมองงานทซบซอนเปนงานยอย ๆ ทเลกลงและเขยนโปรแกรมแกปญหาไดงายขน • ชวยลดการเขยนโคดทซาซอน เชนงานทคลายคลงกนทตองถกทาบอยครง • ชวยซอนรายละเอยดของโปรแกรมไวทสวนอน แทนทจะใสทงหมดไวท Main • ทาใหโปรแกรมดมระเบยบและงายตอการเขาใจ • รวมการคานวณทางคณตศาสตรทซบซอนไวเปนฟงกชนใหมใหเรยกใชไดโดยงาย • เพมความสะดวกในการดแลและแกไขโปรแกรมในภายหลง และลดความเสยงในการเขยน
โปรแกรมผดพลาด • เพมความสะดวกในการนาโคดทเขยนไวแลวไปใชในโปรแกรมอน ๆ
เราไดรจกวธการและไดเรยกใชเมทอดมาแลวกอนหนานหลายครงเชนการใชงานเมทอด Console.WriteLine และ Math.Sqrt เมทอดเหลานเปนเมทอดทถกสรางมาใหพรอมกบตวภาษา C# ซงเราสามารถเรยกใชงานไดทนท แตในปฏบตการครงนเราจะไดรจกวธการสรางเมทอดของเราขนมาเอง
1. การประกาศเมทอด ในความเปนจรงเราเคยไดสรางเมทอดขนมาเองมากอนหนานแลว ยงไปกวานนเราไดสรางเมทอด
ลกษณะนเสมอในทก ๆ โปรแกรมภาษา C# ทเราเขยน เมทอดดงกลาวกคอเมทอด Main ทใชสาหรบระบจดตงตนของโปรแกรมนนเอง ลองพจารณาโครงสรางของโปรแกรมภาษา C# ทเราคนเคยมากอนแลวดงน
สถาบนสงเสรมการสอนวทยาศาสตรและเทคโนโลย 92
namespace (มหรอไมมกได)
class เมทอด Main statement; ...
โครงสรางโปรแกรมดานบนเปนโครงสรางอยางงายทเราไดใชกนมาตงแตแรกซงประกอบดวยเมทอด Main เพยงเมทอดเดยว หากเราเขยนโปรแกรมทประกอบดวยเมทอดอน ๆ นอกเหนอจาก Main โครงสรางของโปรแกรมจะมลกษณะดงน
namespace (มหรอไมมกได) class เมทอด Main statement; ...
เมทอด MyMethod_1 statement; ...
เมทอด MyMethod_2 statement; ...
... เมทอด MyMethod_N statement; ...
สงเกตวาเมทอดแตละอนตองถกประกาศอยภายนอกเมทอดอน ๆ แตอยภายในคลาสเสมอ
น อ ก จ า ก น น เมทอด Main ไมจาเปนตองถกประกาศเปนเมทอดแรกของโปรแกรม การประกาศเมทอดจะมรปแบบดงน
สถาบนสงเสรมการสอนวทยาศาสตรและเทคโนโลย 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 คอชอคลาสนนเอง
สถาบนสงเสรมการสอนวทยาศาสตรและเทคโนโลย 94
อยางไรกตามหากการเรยกใชงานเมทอดอยภายในคลาสเดยวกนกบคลาสทเมทอดนน ๆ ถกประกาศไว ภาษา C# อนญาตใหเราละสวนของชอคลาสออกไปได ดงนนเมทอด Main ในตวอยางขางตนจงเขยนใหสนลงไดดงน static void Main() { PrintLine(); PrintLine(); }
สถาบนสงเสรมการสอนวทยาศาสตรและเทคโนโลย 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 ตว
สถาบนสงเสรมการสอนวทยาศาสตรและเทคโนโลย 96
ใบความรท 5.3 เมทอดแบบคนคา
เมทอดแบบคนคาเปนเมทอดทสงผลลพธกลบไปใหยงผเรยกหลงจากการทางานในเมทอดเสรจสนลงตวอยางทเราคนเคยดอยแลวคอเมทอด Console.ReadLine ซงทาหนาทรอรบขอมลจากผใชและคนคาทผใชปอนในรปของขอความเพอใหโปรแกรมนาไปใชตอไป หรอเมทอด int.Parse ทมการรบคาพารามเตอรในรปขอความและคนคากลบออกมาเปนตวเลขทสามารถนาไปใชในการคานวณตอไปไดดงนนโดยทวไปแลวเมทอดประเภทนจะปรากฏอยในโปรแกรมในรปของนพจนชนดตาง ๆ ขนอยกบชนดของขอมลทเมทอดนน ๆ คนกลบมาให อยางไรกตามเราสามารถเรยกใชเมทอดเหลานเปนคาสงโดด ๆ ไดเชนเดยวกบเมทอดทไมคนคาหากเราไมตองการนาคาทคนกลบมาไปประมวลผลใด ๆ
การสรางเมทอดแบบคนคาขนมาเองนนตองระบชนดของขอมลทเมทอดจะสงกลบเอาไวในสวนทเปนreturn_type ของการประกาศเมทอดนน ๆ แทนทจะใชคยเวรด void เหมอนทเคยใชกบเมทอดแบบไมคนคา และภายในตวเมทอดเองจะตองมการใชคาสง return เพอใหเมทอดสนสดการทางานทนทและสงคากลบไปยงผเรยก รปแบบการใชงานคาสง return เปนดงน return expression;
โดยแทนท expression ดวยนพจนทจะถกประเมนเปนคาทตองการสงกลบ
เมทอดแบบคนคานยมใชในกรณทตองการแจงใหผเรยกใชงานเมทอดทราบถงสถานะการทางานในเมทอดเองวาทางานไดเสรจสมบรณหรอผดพลาดอยางไรโดยรายงานอยในรปของคาความจรง true หรอ false หรอหากความผดพลาดสามารถเกดขนไดในหลายกรณแลวเมทอดนน ๆ สามารถรายงานความผดพลาดกลบไปไดในรปของรหสความผดพลาดทกาหนดขนมาเอง (เชน คา 0 หมายถงทางานถกตองสมบรณ 1 หมายถงผใชปอนขอมลผด หรอ 2 หมายถงผใชยกเลกการทางาน เปนตน)
อกกรณหนงทเมทอดแบบคนคาถกนามาใชมากคอการนยามฟงกชน (function) ทางคณตศาสตรขนมาเองเพอชดเชยจากสวนทขาดไปในคลาส Math อกทงยงใชในการสรางฟงกชนเพอคานวณทซบซอนเพอซอนความซบซอนนนไมใหปรากฏในสวนของโปรแกรมหลกดงเชนตวอยางตอไปน
สถาบนสงเสรมการสอนวทยาศาสตรและเทคโนโลย 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: }
สถาบนสงเสรมการสอนวทยาศาสตรและเทคโนโลย 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 มความยาวสองอกขระอยแลว เหตผลทตองทาแบบนเพอใหเสนตารางในผลลพธดสวยงาม ไมเหลอมซอนกน
สถาบนสงเสรมการสอนวทยาศาสตรและเทคโนโลย 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
สถาบนสงเสรมการสอนวทยาศาสตรและเทคโนโลย 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. ขอเสนอแนะ -
สถาบนสงเสรมการสอนวทยาศาสตรและเทคโนโลย 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. ………………………………………………….
สถาบนสงเสรมการสอนวทยาศาสตรและเทคโนโลย 102
ใบงานท 6.2 หาคาเฉลยของคะแนน
1. ใหผเรยนศกษาใบความรท 6.2 เรองการหาขนาดของอาเรย
2. สรางโปรเจกตและเขยนโปรแกรมโดยดดแปลงโปรแกรมจากใบความรท 6.2 เพอใหโปรแกรมคานวณคาเฉลยของคะแนน โดยใหใชคณสมบต Length ภายในตวโปรแกรมแทนทจะใชคา 6 โดยตรง คดลอกโปรแกรมและผลลพธของโปรแกรมลงในชองวาง
โปรแกรมทดดแปลงแลว
ผลลพธของโปรแกรม
รายชอสมาชกในกลมท…………………. 1. ………………………………………………… 2. …………………………………………………. 3. ………………………………………………… 4. ………………………………………………….
สถาบนสงเสรมการสอนวทยาศาสตรและเทคโนโลย 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. ………………………………………………….
สถาบนสงเสรมการสอนวทยาศาสตรและเทคโนโลย 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
สถาบนสงเสรมการสอนวทยาศาสตรและเทคโนโลย 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. ………………………………………………….
สถาบนสงเสรมการสอนวทยาศาสตรและเทคโนโลย 106
ใบงานท 6.5 ถอดรหสลบจารชน
ใหเขยนโปรแกรมเพอแกปญหาตามสถานการณตอไปน ทานไดรบการตดตอจากสานกงานตารวจสากลเพอลวงขอมลจากจดหมายอเลกทรอนคสทใช
ตดตอกนระหวางผกอการรายขามชาต (เรองราวในโจทยเปนเรองทแตงขนโดยไมเกยวของกบบคคล สถานท หรอเหตการณทมอยจรง) อยางไรกตามขอความทดกจบมาไดนนถกเขารหสเอาไวทาใหไมสามารถอานเขาใจไดโดยงาย หลงจากการลองผดลองถกนานนบปและการเสยงชวตนบครงไมถวนเพอแฝงตวเขาไปในกลมผกอการรายในทสดทานกไดลวงความลบเรองกรรมวธการเขารหสซงเปนไปตามกฏเกณฑอนแสนซบซอนดงน
• ตวหนงสอถกพมพจากขวาไปซาย แทนทจะเปนซายไปขวาเหมอนปกต • อกขระ 'R' ถกแทนดวยอกขระ 'E' ในการเขารหส • อกขระ 'W' ถกแทนดวยอกขระ 'R' ในการเขารหส • อกขระ 'E' ถกแทนดวยอกขระ 'W' ในการเขารหส • อกขระอน ๆ รวมถงตวเลขและสญลกษณตาง ๆ ไมมการเปลยนแปลงใด ๆ
เมอไดขอมลสาคญเหลานมาแลว ทานจงตดสนใจเขยนโปรแกรมภาษา C# ขนมาเพอเพมความรวดเรวในการถอดรหส โปรแกรมนจะรบขอความทถกเขารหสเอาไวและรายงานผลลพธออกมาเปนขอความทถกถอดรหสแลว ดงตวอยาง Enter text: SNOPAWR WEOM DWWN NEED MORE WEAPONS
รายชอสมาชกในกลมท…………………. 1. ………………………………………………… 2. …………………………………………………. 3. ………………………………………………… 4. ………………………………………………….
สถาบนสงเสรมการสอนวทยาศาสตรและเทคโนโลย 107
จากนนลองใชโปรแกรมทเขยนขนมาถอดรหสขอความตอไปน LUFITUAWB SI WFIL
ถอดรหสไดเปน GNIMMAEGOEP WVOL I
ถอดรหสไดเปน UOY HTIR WB WCEOF WHT YAM
ถอดรหสไดเปน
สถาบนสงเสรมการสอนวทยาศาสตรและเทคโนโลย 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. ………………………………………………….
สถาบนสงเสรมการสอนวทยาศาสตรและเทคโนโลย 109
สถาบนสงเสรมการสอนวทยาศาสตรและเทคโนโลย 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
สถาบนสงเสรมการสอนวทยาศาสตรและเทคโนโลย 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];
สถาบนสงเสรมการสอนวทยาศาสตรและเทคโนโลย 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]
สถาบนสงเสรมการสอนวทยาศาสตรและเทคโนโลย 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]);
สถาบนสงเสรมการสอนวทยาศาสตรและเทคโนโลย 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); } }
สถาบนสงเสรมการสอนวทยาศาสตรและเทคโนโลย 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: }
สถาบนสงเสรมการสอนวทยาศาสตรและเทคโนโลย 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: }
สถาบนสงเสรมการสอนวทยาศาสตรและเทคโนโลย 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); } }
สถาบนสงเสรมการสอนวทยาศาสตรและเทคโนโลย 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 ใบความร
สถาบนสงเสรมการสอนวทยาศาสตรและเทคโนโลย 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. ขอเสนอแนะ
-
สถาบนสงเสรมการสอนวทยาศาสตรและเทคโนโลย 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. ………………………………………………….
สถาบนสงเสรมการสอนวทยาศาสตรและเทคโนโลย 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. ………………………………………………….
สถาบนสงเสรมการสอนวทยาศาสตรและเทคโนโลย 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
สถาบนสงเสรมการสอนวทยาศาสตรและเทคโนโลย 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. ………………………………………………….
สถาบนสงเสรมการสอนวทยาศาสตรและเทคโนโลย 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
สถาบนสงเสรมการสอนวทยาศาสตรและเทคโนโลย 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. ………………………………………………….
สถาบนสงเสรมการสอนวทยาศาสตรและเทคโนโลย 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. ………………………………………………….
สถาบนสงเสรมการสอนวทยาศาสตรและเทคโนโลย 127
จากนนคดลอกโปรแกรมลงในชองวาง โดยไมตองลอกเมทอด ShowMatrix และ/หรอ ReadMatrix หากนามาใชโดยไมมการเปลยนแปลง
สถาบนสงเสรมการสอนวทยาศาสตรและเทคโนโลย 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]
สถาบนสงเสรมการสอนวทยาศาสตรและเทคโนโลย 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) } };
สถาบนสงเสรมการสอนวทยาศาสตรและเทคโนโลย 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;
สถาบนสงเสรมการสอนวทยาศาสตรและเทคโนโลย 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;
สถาบนสงเสรมการสอนวทยาศาสตรและเทคโนโลย 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 และใหแสดงภาพดงน
สถาบนสงเสรมการสอนวทยาศาสตรและเทคโนโลย 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 อนๆ - เครองคอมพวเตอรเทากบจานวนกลม - โปรแกรมวชวลซชารป เอกเพรส
สถาบนสงเสรมการสอนวทยาศาสตรและเทคโนโลย 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. ขอเสนอแนะ -
สถาบนสงเสรมการสอนวทยาศาสตรและเทคโนโลย 135
ใบงานท 8.1 ออกแบบโปรแกรมเครองคดเลข
ใหผเรยนศกษาใบความรท 8.1 แลวออกแบบโปรแกรมสรางเครองคดเลขตามหลกของการออกแบบ โปรแกรมเชงวตถ
รายชอสมาชกในกลมท…………………. 1. ………………………………………………… 2. …………………………………………………. 3. ………………………………………………… 4. ………………………………………………….
สถาบนสงเสรมการสอนวทยาศาสตรและเทคโนโลย 136
ใบงานท 8.2 โปรแกรมเครองคดเลขอยางงาย
ใหผเรยนศกษาใบความรท 8.2 และปฏบตตามขนตอนในใบความร จากนนใหเขยนโปรแกรมตามทโจทยกาหนดใหตอไปน
สาหรบโปรแกรมตอไปจะเปนการสรางเครองคดเลขอยางงาย โดยใหปอนตวเลขเขาไปในชองรบ
ขอความทงสองชอง เมอกดปม ADD โปรแกรมจะนาตวเลขทงสองมาบวกกนแลวแสดงผลทางชองแสดงขอความทสาม
ในการพมพขอความเขาไปในชองรบขอมลนน สงทพมพเขาไปโปรแกรมจะเกบเปนขอมลแบบสตรง ถงแมวาจะพมพตวเลขเขาไปโปรแกรมกจะเกบในลกษณะของสตรง ซงไมสามารถนาไปประมวลผลได ถาหากตองการนาสตรงทเปนตวเลขมาคานวณจะตองแปลงขอความสตรงนนใหเปนตวเลขเสยกอน ใหผเรยนสรางโปรแกรมเครองคดเลขอยางงายดงน
1. ใหสรางฟอรมของโปรแกรม โดยประกอบดวย 1.1 ชองรบขอมลสามชอง 1.2 ปมกดหนงชอง และเปลยนชอปมเปน ADD
2. ในการเขยนคาสงโปรแกรมใหดบเบลคลกทปมแลวเขยนโปรแกรมดงตอไปน
รายชอสมาชกในกลมท…………………. 1. ………………………………………………… 2. …………………………………………………. 3. ………………………………………………… 4. ………………………………………………….
สถาบนสงเสรมการสอนวทยาศาสตรและเทคโนโลย 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; }
สถาบนสงเสรมการสอนวทยาศาสตรและเทคโนโลย 138
ใบความรท 8.1 การโปรแกรมเชงวตถ
แนวคดของการโปรแกรมเชงวตถหรอ OOP (Object-Oriented Programming) เปนพนฐานแนวคดทสาคญของนกพฒนาโปรแกรมยคใหม เนองจากแนวคดการเขยนโปรแกรมแบบเดม ๆ นนจะเรมใชไมได หรอไมคอยมประสทธภาพมากนกกบงานทมขนาดใหญ และมความซบซอนมาก ๆ อยางปจจบน หลกการของการคดเชงวตถเปนการมองการพฒนาระบบเหมอนกบการมองโลกแหงความเปนจรง คอมองสงตาง ๆ เปนวตถหรอออบเจกต ซงแตละออบเจกตจะมคณสมบตและการทางานเฉพาะตว บางออบเจกตสามารถมความสมพนธกบออบเจคอน ๆ ไดอก และถาหากหลาย ๆ ออบเจกตมคณลกษณะบางประการคลาย ๆ กน เรากจะนากลมออบเจกตเหลานนมารวมใหอยในกลมเดยวกน ตวอยางเชนถาหากมวงกลมหลาย ๆ วง แตละวงอาจมรศมและจดศนยกลางทตางกน เราสามารถมองรวมกนวาเปนคลาสวงกลมเพยงคลาสเดยว สวนวงกลมแตละวงจะเปนออบเจคของคลาสวงกลมนนโดยทออบเจคแตละออบเจคจะมคณสมบตตางกนนนเอง ในใบความรนจะแนะนาความรพนฐานและแนวคดเชงวตถท เปนมาตรฐานของการพฒนาระบบงานทใชกนอยในปจจบน ลกษณะของซอฟตแวรทยอมรบวามประสทธภาพจงมกมความซบซอนคอนขางมากและสามารถปรบปรงหรอนากลบมาใชใหมได ความซบซอนดงกลาวจะอยในระดบทนอยคนนกทจะสามารถเขาใจแอพพลเคชนทงหมดไดโดยอาศยคนเพยงคนเดยว ดงนนแอพพลเคชนจงมกถกพฒนากนเปนทมเพอทจะไดมการแบงงานกน
ในการพฒนาระบบงานขนมาสกระบบงานหนง ถามองแบบกวาง ๆ เราจะสามารถแบงการพฒนาออกไดใน 2 ลกษณะ คอ การพฒนาดวยทมงานเปนกลมเลก ๆ ในลกษณะทเรยกวา “in-house development” ซงการพฒนาจะไมมรปแบบทแนนอนตายตว ขนอยกบโปรแกรมเมอรแตละคน การพฒนาอกลกษณะหนงคอการพฒนาในลกษณะทเปน “industry development” หรอการพฒนาในระดบอตสาหกรรม คอ การพฒนาระบบทมการสรางกรอบและมาตรฐานการทางานเพอใหผพฒนายดถอและพฒนาระบบไปในแนวทางเดยวกน ซงการพฒนาในลกษณะ in-house นนมกจะเปนแอพพลเคชนทไมคอยมความยดหยนในการทจะนาไปเปลยนแปลงแกไขในอนาคต เพราะการพฒนาในลกษณะนคอนขางไมมทศทางการทางานทแนนอน การพฒนาในปจจบนจงมงไปทการสรางมาตรฐานของการพฒนาระบบ ซงแมจะยงไมมมาตรฐานใดเปนหนงเดยวกนทงหมด แตแนวทางกเรมชดเจนขนเรอย ๆ วานกพฒนาระบบจะยดอะไรเปนมาตรฐานได
ในปจจบนการพฒนาแอพพลเคชนหรอซอฟตแวรตาง ๆ ทใชกนในองคกรตาง ๆ มกจะไมไดมผพฒนาเพยงคนคนเดยว เนองจากระบบงานจะมขนาดใหญขน ตองการความเรงดวน ระบบมความ
สถาบนสงเสรมการสอนวทยาศาสตรและเทคโนโลย 139
สลบซบซอน และตองใชเครองมอตาง ๆ ชวยในการพฒนางาน ดงนนจะตองมการทางานเปนทม และทมงานอาจตองเปนทมงานขนาดใหญททางานในระบบเดยวกน แตมการแบงงานออกเปนสวน ๆ มการทางานบนเครอขายคอมพวเตอร และตองตามใหทนกบเทคโนโลยทมการเปลยนแปลงอยางรวดเรว
ดงทกลาวมาแลววาเราไมอาจหลกเลยงความซบซอนได แตเราสามารถจดการกบความซบซอนได ซงวธการจดการกบความซบซอนของระบบกมววฒนาการและมการคดคนวธการใหม ๆ ขนมาเรอย ๆ 8.1 กลวธในการพฒนาแอพพลเคชน
กลวธพฒนาแอพพลเคชนมอยมากมาย ในทนจะพจารณาเพยง 2 วธทเปนทนยมเทานน ไดแก 1. วธการเชงฟงกชน (Function) 2. วธการเชงวตถ (Object oriented)
วธการเชงฟงกชน วธการนบางครงเรยกวา Algorithmic decomposition ซงถอกาเนดจากงานอตสาหกรรม
โดยมหลกการวาใหมองปญหาในรปของกระบวนการทางาน จากนนใหแตกกระบวนการทางานดงกลาวออกเปนสวนยอย ๆ เรยกวา “ฟงกชน” แลวจงนาฟงกชนทงหลายมาเชอมโยงการทางานเขาดวยกนในภายหลง
วธการเชงฟงกชนนบวาเปนวธการทไดรบความนยมมาเปนระยะเวลานานมาก จนกระทงปจจบนงานบางอยางกยงใชวธการนอย ตวอยางภาษาคอมพวเตอรทใชวธการเชงฟงกชน ไดแก ภาษาปาสคาล ภาษาซ เปนตน
วธการเชงวตถ เปนการคดและสรางระบบงานในลกษณะโลกของความเปนจรง โดยมองสงตาง ๆ เปน
วตถหรอออปเจกต ซงออปเจกตตาง ๆ จะมความเปนอสระไมขนตอกน แตมการทางานรวมกน ตวอยางภาษาคอมพวเตอรทใชวธการเชงวตถ ไดแก ภาษาจาวา ภาษา C++ ,ภาษา C# , ภาษา SmallTalk เปนตน
สถาบนสงเสรมการสอนวทยาศาสตรและเทคโนโลย 140
ตารางเปรยบเทยบวธการเชงฟงกชนกบวธการเชงวตถ
วธการเชงฟงกชน วธการเชงวตถ ลกษณะทวไป นาปญหามาแตกเปนสวนยอย ๆ ใน
รปของกระบวนการทางาน มองสงตาง ๆ ในระบบเปนออบเจกต ซงมความเปนอสระตอกน แตทางานรวมกน
ลกษณะการจาแนกงาน แตกกระบวนการทางานเปนหนวย ยอย ๆ เรยกวา “ฟงกชน”
จาแนกออบเจกตแลวแบงกลมของออบเจกตตามคณลกษณะของแตละออปเจกต
ความขนตอกน ฟงกชนการทางานตาง ๆ จะมลกษณะการทางานขนตรงตอกน มการสงพารามเตอรจากฟงกชนหนงไปยงอกฟงกชนหนง
แตละออบเจกตมความเปนอสระ ไมขนตอกน และตดตอกนโดย การสงเมสเสจ (message) ถงกน
ขนตอนการทางาน เรมตนทการกาหนดโครงสรางและประเภทของขอมล จากนนกาหนดฟงกชนการทางานกบโครงสรางของขอมลดงกลาว
เรมตนดวยการกาหนดคณสมบตและพฤตกรรมใหออบเจกตตาง ๆ จากนนสรางความสมพนธระหวางออบเจกตวาจะทางานรวมกนไดอยางไร
วธการพฒนาแอพพลเคชน (Paradigms)
วธการเชงฟงกชน (Functional)
วธการเชงวตถ (Object Oriented)
ภาษา Pascal ภาษา C ภาษา Java ภาษา C++ ภาษา C#
สถาบนสงเสรมการสอนวทยาศาสตรและเทคโนโลย 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 สงเมสเสจ
สถาบนสงเสรมการสอนวทยาศาสตรและเทคโนโลย 142
เรยกวา “อนสแตนซ” (instance) หรอออบเจกตของคลาสขนมาใชงานแทน กลไกดงกลาวทาใหเราสามารถใชเพยงคลาส ๆ เดยว แตสรางอนสแตนซของคลาสไปทางานไดหลายอนสแตนซ ซงอนสแตนซของคลาสกคอออบเจกตนงเอง เราจงกลาววาออบเจกตหนง ๆ เปนอนสแตนซของคลาสหนง เปรยบเทยบงาย ๆ เสมอนวาเรามแปลนบานอยแปลนหนง เรากสามารถนาแปลนบานนไปสรางบานไดอกหลาย ๆ หลงตามความตองการของเรา
รปท 8.2 แสดงตวอยางการสรางออบเจกตจากคลาส ตวอยางการกาหนดคลาสใหแกออบเจกต
คลาส ออบเจกต บคลากร นางสาว สนทรน วงศศรกล ปฏกรยาทางเคม เหลกขนสนม แมนา เจาพระยา เครองเขยน ดนสอ 2B กฬา บาสเกตบอล
คลาสบคคล นายไก
นางดาว
นายมตร
คลาสวงกลม
วงกลม A รศม 5 หนวย แสดงผล
วงกลม B รศม 10 หนวย ยงไมแสดงผล
สถาบนสงเสรมการสอนวทยาศาสตรและเทคโนโลย 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)
สถาบนสงเสรมการสอนวทยาศาสตรและเทคโนโลย 144
นอกจากนในการพฒนาโปรแกรมยงสรางสามารถสรางคลาสขนมาหนงคลาสแลวในคลาสนนมคลาสยอย ๆ ประกอบอยไดอกดวยการระบเขาไปยงคลาสยอย ๆ และเมทอด ในคลาสยอย ๆ กใชเครองหมายจดเชนกน ในการเขยนโปรแกรมดวยภาษา C# จะมการสรางคลาสชอ Console ขนมา โดยคลาสนจะรวมคลาสและเมทอด ตาง ๆ ทเกยวของกบการตดตอกบอนพตเอาตพตของระบบคอมพวเตอรเอาไว ถาหากผเขยนโปรแกรมตองการแสดงขอมลออกทางจอภาพจะใชเมทอด WriteLine() และถาหากตองการรบขอมลจากคยบอรตจะใชเมทอด ReadLine() ในการเขยนโปรแกรมเพอแสดงขอมลและรบขอมลจะเขยนรหสโปรแกรมไดดงน System.Console.WriteLine(“Hello World! “); System.Console.ReadLine();
ดงนนในการเขยนโปรแกรมภาษา C# การนาออบเจกตมาใชและเรยกใชเมทอด ตาง ๆ จะตองใชเครองหมายจด(.) ในการระบไปยงคลาสหรอเมทอด ยอย ๆ ทประกอบอยในคลาสนน
ชอเมทอด
เนมสเปส คลาสยอย
สถาบนสงเสรมการสอนวทยาศาสตรและเทคโนโลย 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
สถาบนสงเสรมการสอนวทยาศาสตรและเทคโนโลย 146
รปท 8.4 เมน File > New Project…
2. จะปรากฏหนาตาง New Project ใหเลอก Windows Forms Application -> ตงชอ ในชอง Name -> คลกปม OK ดงรปท 8.5
รปท 8.5 หนาตาง New Project
สถาบนสงเสรมการสอนวทยาศาสตรและเทคโนโลย 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
สถาบนสงเสรมการสอนวทยาศาสตรและเทคโนโลย 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
สถาบนสงเสรมการสอนวทยาศาสตรและเทคโนโลย 149
2. กลองเครองมอ (Toolbox) ใหดาเนนการเพอแสดงรายการเครองมอดงน คลกทแถบ Toolbox จะทาใหแถบ Toolbox ขยายออกมา
คลกท Auto Hide เพอใหแสดงกลองเครองมอตลอดเวลา
รปท 8.10 การแสดงรายการกลองเครองมอ
การปรบขนาดของหนาตาง ๆ เพอความสะดวกในการใชงาน ทาไดโดยการใชเมาสลากจากเสน
กรอบของหนาตาง แตละดานดงตวอยาง
รปท 8.11 การปรบขนาดของหนาตาง
สถาบนสงเสรมการสอนวทยาศาสตรและเทคโนโลย 150
รปท 8.12 ตวอยางการปรบขนาดหนาตางในแนวตง
3. การเลอกเครองมอจาก Toolbox
3.1 การดบเบลคลก เชน เมอดบเบลคลกทเครองมอ Button ดงหมายเลข จะปรากฎเครองมอนนบน Form1 อยทมมบนดานซาย ดงหมายเลข ดงรปท 8.13
รปท 8.13 การเลอกเครองมอโดยการดบเบลคลก
สถาบนสงเสรมการสอนวทยาศาสตรและเทคโนโลย 151
3.2 การลาก-วาง การลากทาไดโดยนาเมาสไปลากเครองมอทตองการจาก Toolbox มาวางในตาแหนงทตองการ ดงรปท 8.14
รปท 8.14 การเลอกเครองมอโดยการลาก-วาง
4. การเขยนคาสง
การขยนคาสงในโปรแกรมแบบ Visual Programming จะเปนการเขยนโปรแกรมเพอตอบสนองการทางานตามเหตการณ เชน การคลกเมาส มขนตอนดงน 4.1 ดบเบลคลกทเครองมอทตองการสงงาน ทไดออกแบบไวบนฟอรม ดงตวอยางคอปม button1
รปท 8.15 การดบเบลคลกทเครองมอทตองการเขยนโปรแกรมสงงาน
ลากปมมาวางในตาแหนงทตองการ
สถาบนสงเสรมการสอนวทยาศาสตรและเทคโนโลย 152
4.2 จะปรากฎหนาตาง Form1.cs พรอมกบคาสงตงตน ดงหมายเลข และเคอรเซอรจะปรากฎอยตรงเมทอดทสมพนธกบเครองมอ ดงหมายเลข ดงรปท 8.16
รปท 8.16 หนาตาง Form1.cs ทมโคดโปรแกรม
สมมตวาตองการเขยนโปรแกรมทสงใหเมอคลกปม button1 แลวจะทาการปดโปรแกรม ใหเขยนคาสง Close(); ในเมทอด button1_Click() ดงรปท 8.17
รปท 8.17 การเขยนคาสง
สถาบนสงเสรมการสอนวทยาศาสตรและเทคโนโลย 153
เมอเขยนคาสงเสรจแลว ถาตองการกลบไปยงหนาออกแบบ สามารถทาไดโดยคลกทแถบ Form1.cs[Design] ดงรปท 8.18
รปท 8.18 แถบ Form1.cs[Design] 5. การรนโปรแกรม
5.1 คลกปม Start Debugging หรอกดคย F5 ดงรปท 8.19
รปท 8.19 ปม Start Debugging
สถาบนสงเสรมการสอนวทยาศาสตรและเทคโนโลย 154
5.2 จะปรากฎโปรแกรมทสรางขนดงรปท 8.20
รปท 8.20 โปรแกรมทสรางขน
การออกแบบหนาจอโดยการปรบเปลยน Properties เพอการแสดงผลทเหมาะสม เราสามารถกาหนดคา Properties ใหกบเครองมอตางๆ ได ดงเชนตวอยางดงน
1. เลอกเครองมอ เชน button2 มาวางบนฟอรมดงรปท 8.21
รปท 8.21 การเพมปม
สถาบนสงเสรมการสอนวทยาศาสตรและเทคโนโลย 155
2. กาหนดใหแสดงหนาตาง Properties ดงน 2.1 คลกทเมน View -> Properties Window ดงรปท 8.22
รปท 8.22 เมน View -> Properties Window
2.2 จะปรากฎสวน Properties ดงรปท 8.23
รปท 8.23 สวน Properties
สถาบนสงเสรมการสอนวทยาศาสตรและเทคโนโลย 156
2.3 การเปลยน Properties ขององคประกอบตางๆ ในแถบ Design ของโปรแกรม ทาไดดงน เลอกวตถนน เชน เลอก ปม button1 โดยทสวน Properties จะเชอมโยงกบวตถนน เลอก Properties ทตองการไขแลวเปลยนแปลงตามทตองการ เชน เปลยน Text Properties ใหมคาเปน OK
จะปรากฎปมทมขอความ OK
รปท 8.24 การเปลยน Properties ของปม
สถาบนสงเสรมการสอนวทยาศาสตรและเทคโนโลย 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
สถาบนสงเสรมการสอนวทยาศาสตรและเทคโนโลย 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
สถาบนสงเสรมการสอนวทยาศาสตรและเทคโนโลย 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 ขนตอนการดาเนนการ
สถาบนสงเสรมการสอนวทยาศาสตรและเทคโนโลย 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. ขอเสนอแนะ -
สถาบนสงเสรมการสอนวทยาศาสตรและเทคโนโลย 161
ใบงานท 9.1 พฒนาโครงงานแบบ Windows Application
ใหผเรยนพฒนาโครงงานทสรางดวยโปรแกรม MS Visual C# ตามความเหนของกลมและเขยนอธบายรายละเอยดของโครงงานดงตอไปน
ชอโครงงาน ………………………………………………………………….. ประเภทของโครงงาน …………………………………………………………
วตถประสงค …………………………………………………………………………………………………….. …………………………………………………………………………………………………….. ……………………………………………………………………………………………………..
ลกษณะการทางานของโปรแกรม …………………………………………………………………………………………………….. …………………………………………………………………………………………………….. …………………………………………………………………………………………………….. …………………………………………………………………………………………………….. …………………………………………………………………………………………………….. …………………………………………………………………………………………………….. …………………………………………………………………………………………………….. …………………………………………………………………………………………………….. ……………………………………………………………………………………………………..
รายชอสมาชกในกลมท…………………. 1. ………………………………………………… 2. …………………………………………………. 3. ………………………………………………… 4. ………………………………………………….
สถาบนสงเสรมการสอนวทยาศาสตรและเทคโนโลย 162
แบบประเมนโครงงาน กลมท......................... คาชแจง ใหแตละกลมใหคะแนนผลงานของกลมอนตามหวขอดงตอไปน โดยใหคะแนนตามระดบดานลาง หวขอสาหรบการประเมน ก. ความคดรเรมสรางสรรค/ความใหมของงาน ข .ความสวยงามและความงายตอการใชงานของโปรแกรม ค. ความซบซอนทางเทคนค ง. ความถกตองในการทางาน จ. คณภาพของงานในภาพรวม
ลาดบ ชอกลม
• คว
ามคด
รเรมส
รางสร
รค
• คว
ามสว
ยงามแ
ละคว
ามงาย
ตอ
ก
ารใชงานขอ
งโปรแก
รม
• คว
ามซบ
ซอนท
างเทค
นค
• คว
ามถก
ตองใน
การทางาน
• คณ
ภาพข
องงานในภ
าพรวม
คะแนนรวม
1 2 3 4 5 6 7 8 9
10 ระดบการใหคะแนน
ดมาก ด ปานกลาง สมควรปรบปรง สมควรปรบปรงอยางมาก ไมผาน ระดบ A B C D E F
คะแนน 5 4 3 2 1 0
สถาบนสงเสรมการสอนวทยาศาสตรและเทคโนโลย 163
ภาคผนวก
สถาบนสงเสรมการสอนวทยาศาสตรและเทคโนโลย 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
สถาบนสงเสรมการสอนวทยาศาสตรและเทคโนโลย 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 การสรางชนงานใหม
สถาบนสงเสรมการสอนวทยาศาสตรและเทคโนโลย 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 ซงใชแสดงรายการองคประกอบของโปรเจกต
สถาบนสงเสรมการสอนวทยาศาสตรและเทคโนโลย 167
รปท 5 รายละอยดหนาตาง Program.cs
4. การกาหนดใหแสดงเลขบรรทดของคาสง ทาไดดงน 4.1 คลกทเมน Tool > Options
รปท 6 การกาหนดใหแสดงเลขบรรทด
สถาบนสงเสรมการสอนวทยาศาสตรและเทคโนโลย 168
4.2 จะปรากฎกรอบโตตอบ Options ดงรปท 7
รปท 7 กรอบโตตอบ Options
4.3 ใหเลอก Show all settings
รปท 8 การเลอก Show all settings
สถาบนสงเสรมการสอนวทยาศาสตรและเทคโนโลย 169
4.4 เลอก Text Editor -> C# -> General ดงหมายเลข จากนนท Display คลกเลอก Line number ดงหมายเลข แลวคลก OK ดงหมายเลข
รปท 9 การเลอก Line numbers
4.5 หนาตาง Editor จะแสดงเลขบรรทดดงรปท 10
รปท 10 เลขบรรทด
สถาบนสงเสรมการสอนวทยาศาสตรและเทคโนโลย 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
สถาบนสงเสรมการสอนวทยาศาสตรและเทคโนโลย 171
5.5 ในกรอบโตตอบ Save Project ในชอง Location จะแสดงชอโฟลเดอร ใหตงชอโปรเจกต แลวบนทกดงรปท 13
ตงชอในชอง Name ตามตองการ คลกเลอก Create directory for solution คลก Save
รปท 13 การบนทกโปรเจกต
5.6 จะไดโปรเจกตทมชอตามทไดตงชอดงตวอยาง
รปท 14 โปรเจกต consolePrj1
สถาบนสงเสรมการสอนวทยาศาสตรและเทคโนโลย 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 ไดเพยงเมทอดเดยว ไมวาจะมกคลาสกตาม
สถาบนสงเสรมการสอนวทยาศาสตรและเทคโนโลย 173
รปท 16 คาสงในหนาตาง Editor
ตวอยางโปรแกรมทแสดงขอความบนหนาจอ
รปท 17 ตวอยางโปรแกรมภาษาซชารป
เมอพมพคาสงทโปรแกรมรจกจะมกลองรายการใหใชงาน
สถาบนสงเสรมการสอนวทยาศาสตรและเทคโนโลย 174
8. การรนโปรแกรม เมอเขยนโปรแกรมเสรจแลว ใหบนทกโปรแกรม และเรมตนรนโปรแกรม โดยการคลก
ทสญรป Start Debugging หรอกดคย F5 ดงรปท 18
รปท 18 การรนโปรแกรม
จะปรากฎผลลพธดงรปท 19
รปท 19 ผลลพธการรนโปรแกรม
สถาบนสงเสรมการสอนวทยาศาสตรและเทคโนโลย 175
9. รายการไฟลทเกดขนจากการรนโปรแกรม
ในการรนโปรแกรมนน MS Visual C# จะทาการคอมไพล แลวสรางไฟล .exe ใหกอน ดงรปท 20
รปท 20 ไฟล .exe ทเกดขนจากการรนโปรแกรม
10. การเตรยมเครองมอ เพอชวยพฒนาโปรแกรม เชนการแสดงรายการการผดพลาดของการเขยนคาสง
ตวอยางการแสดงหนาตาง Error List มขนตอนดงน 10.1 คลกทเมน view -> Error List
รปท 21 เมน view -> Error List
สถาบนสงเสรมการสอนวทยาศาสตรและเทคโนโลย 176
10.2 จะปรากฎหนาตาง Error List ดงรปท 22
รปท 22 หนาตาง Error List
ตวอยางการแสดงขอความเมอโปรแกรมผดพลาดในขณะทกาลงคยโปรแกรม
รปท 23 ตวอยางการแสดงขอความเมอโปรแกรมผดพลาด
เมอพมพคาสงแลวทงชวงไวนาน โดยไมใส ; ปดทายเพอแสดงการจบคาสง โปรแกรมจะเตอนดงตวอยาง
สถาบนสงเสรมการสอนวทยาศาสตรและเทคโนโลย 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 การจดเตรยม
สถาบนสงเสรมการสอนวทยาศาสตรและเทคโนโลย 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. ขอเสนอแนะ -
สถาบนสงเสรมการสอนวทยาศาสตรและเทคโนโลย 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. ………………………………………………….
สถาบนสงเสรมการสอนวทยาศาสตรและเทคโนโลย 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)
สถาบนสงเสรมการสอนวทยาศาสตรและเทคโนโลย 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. ………………………………………………….
สถาบนสงเสรมการสอนวทยาศาสตรและเทคโนโลย 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
สถาบนสงเสรมการสอนวทยาศาสตรและเทคโนโลย 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
สถาบนสงเสรมการสอนวทยาศาสตรและเทคโนโลย 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. ………………………………………………….
สถาบนสงเสรมการสอนวทยาศาสตรและเทคโนโลย 185
Enter ID to search (-1 to quit): -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) ซงเราจะยงไมสนใจในทน
สถาบนสงเสรมการสอนวทยาศาสตรและเทคโนโลย 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 จงเปรยบเสมอนการสรางชนดขอมลชนดใหมขนมานนเอง ซงกหมายความวานอกเหนอจากการประกาศตวแปรแลว เรายงสามารถนาชอโครงสรางไปใชในสวนอนของ
สถาบนสงเสรมการสอนวทยาศาสตรและเทคโนโลย 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; }
สถาบนสงเสรมการสอนวทยาศาสตรและเทคโนโลย 189
ใบความรท 10.2 การใชงานโครงสรางรวมกบอาเรย
ทผานมาเราไดเรยนรการประกาศตวแปรแบบโครงสรางสาหรบสงของหรอวตถเพยงชนเดยว เชน นกเรยนหนงคนหรอเวกเตอรหนงเวกเตอร ในบางครงเราจาเปนตองประมวลผลขอมลเกยวกบวตถตาง ๆ เหลานมากกวาหนงชน ดงเชนตวอยางงานดานระเบยนนกเรยนทไดกลาวมาในตอนตนทโปรแกรมตองสามารถประมวลผลขอมลนกเรยนซากนหลาย ๆ คนได โดยทขอมลของนกเรยนแตละคนแมจะแตกตางกนแตกมโครงสรางขอมลทเหมอนกน ดงนนอาเรยของโครงสรางจงมความเหมาะสมทสดสาหรบการจดการขอมลลกษณะน
ตามทไดกลาวมาแลววาโครงสรางทถกนยามไวเรยบรอยแลวสามารถถกนามาใชเสมอนกบเปนชนดขอมลชนดหนงไดทนท ดงนนการประกาศตวแปรแบบอาเรยของโครงสรางจงมรปแบบเหมอนกบการประกาศอาเรยทว ๆ ไป เพยงแตระบชนดขอมลใหตรงกบชอโครงสรางนน ๆ เทานน ตวอยางเชนหากเราตองการประกาศตวแปรชอ students เพอเปนอาเรยหนงมตของโครงสราง StdInfo ทนยามไวในตวอยางท 10.1 เราจะใชคาสงดงน StdInfo[] students;
อยาลมวาอาเรยจรง ๆ ยงไมถกสรางจนกวาจะใชคาสง new ตวอยางเชน students = new StdInfo[30];
จะเปนการสรางอาเรยทบรรจขอมลชนด StdInfo ได 30 ชอง อางองผานตวแปรชอ students
การเขาถงขอมลในอาเรยของโครงสรางจะมรปแบบเหมอนการเขาถง% ขอมลในอาเรยของขอมลพนฐานทว ๆ ไปโดยระบตาแหนงในอาเรยดวยดชน ตางกนตรงทรปแบบการใชงานนจะไมเปนเสมอนตวแปรทเกบคาโดด ๆ อกตอไป แตเปนเสมอนตวแปรแบบโครงสรางนน ๆ เชน students[5]
จะทางานเสมอนตวแปรแบบโครงสรางทเกบขอมลของนกเรยน ณ ดชน 5 (นกเรยนคนท 6 ในอาเรย) ดงนนการเขาถงขอมลภายในโครงสรางจงทาไดโดยการระบชอสมาชกของโครงสรางตอทายรปแบบขางตนเทานน เชนชอของนกเรยนคนนจะถกอางองผาน students[5].name
สถาบนสงเสรมการสอนวทยาศาสตรและเทคโนโลย 190
ซงหากพจารณาจากโครงสราง StdInfo แลว students[5].name จะเปรยบเสมอนตวแปรแบบขอความตวหนงทจะถกนาไปกาหนดคาใหกได หรอนาไปใชในรปนพจนกได เชน students[5].name = "Arthur"; Console.WriteLine("The student's name is {0}", students[5].name);
สถาบนสงเสรมการสอนวทยาศาสตรและเทคโนโลย 191
คณะผพฒนาเอกสาร การโปรแกรมภาษาซชารป
คณะผพฒนาเอกสารฝกอบรมคร 1. ดร.ชยพร ใจแกว มหาวทยาลยเกษตรศาสตร กรงเทพฯ 2. ดร.ฐตวรรณ ศรนาค มหาวทยาลยเกษตรศาสตร กรงเทพฯ 3. รศ.ธรวฒน ประกอบผล สถาบนเทคโนโลยพระจอมเกลาฯ ลาดกระบง กรงเทพฯ 4. อาจารยสายชล ใจเยน สถาบนเทคโนโลยพระจอมเกลาฯ ลาดกระบง กรงเทพฯ 5. นายชยการ ครรตน สาธตจฬาลงกรณมหาวทยาลย ฝายมธยม กรงเทพฯ 6. นายนพนธ ศภศร สสวท. กรงเทพฯ 7. นางสาวจนดาพร หมวกหมนไวย สสวท. กรงเทพฯ 8. นางสาวทศนย กรองทอง สสวท. กรงเทพฯ 9. นางสาวพรพมล ตงชยสน สสวท. กรงเทพฯ 10. นางสาวจระพร สงขเวทย สสวท. กรงเทพฯ 11. นายนรมษ เพยรประเสรฐ สสวท. กรงเทพฯ 12. นายพนมยงค แกวประชม สสวท. กรงเทพฯ