36
แบบฝึกทักษะ วิชาการเขียนโปรแกรมภาษา 56 บทที 8 โปรแกรมแบบวนซํ้า (Loop) นอกจากโปรแกรมแบบทางเลือกที่นักเรียนได้เรียนมาแล้วนั ้นซึ ่งถือว่าเป็นหัวใจสําคัญของการเขียนโปรแกรม แก้ปัญหาต่างๆ หัวใจของการเขียนโปรแกรมอีกรูปแบบหนึ ่งที่มีความสําคัญไม่ยิ่งหย่อนไปกว่ากัน นั่นก็คือโปรแกรม แบบวนซํ (Loop) หรือโปรแกรมแบบทําซํ การทํางานแบบวนซํ าก็คือการที่โปรแกรมสามารถทําตามคําสั่งใดๆ ได้มากกว่า 1 ครั ้ง สมมติว่าเราต ้องการ แสดงคําว่า “Hello” จํานวน 3 ครั ้ง การเขียนโปรแกรมรูปแบบเดิมที่เราได้เรียนมาแล้วจะได้รหัสคําสั่งดังนี Console.WriteLine("Hello"); Console.WriteLine("Hello"); Console.WriteLine("Hello"); จะเห็นว่าเราต้องเขียนคําสั่งแบบเดียวกันถึง 3 บรรทัดจึงจะได้ผลลัพธ์ตามที่เราต้องการ ที่นี ้นักเรียนลองคิด ต่อไปอีกว่า ถ้าหากว่าเราต้องการแสดงคํานี ้จํานวน 1,000,000 ครั ้ง เราจะต ้องเขียนรหัสคําสั่งอีกกี่บรรทัด... ถูกต้องแล้ว ครับ นั่นคือเราจะต้องเขียนรหัสคําสั ่งอีก 1,000,000 บรรทัด ถ้าเป็นแบบนี ้การเขียนโปรแกรมก็คงจะยุ่งยากน่าดู จากปัญหาดังกล่าวผู้พัฒนาโปรแกรมภาษาทุกภาษาจึงได้พัฒนาโปรแกรมแบบวนซํ ามาเพื่อให้การเขียน โปรแกรมมีความกระชับ สั ้น และมีประสิทธิภาพ การเขียนโปรแกรมเพื ่อแสดงคําว่า “Hello” จะกี่ล้านครั ้งก็ไม่ใช่ ปัญหาอีกต่อไป นักเรียนลองดูรหัสคําสั ่งสําหรับการแสดงคําว่า “Hello” จํานวน 3 บรรทัด ดังต่อไปนี for (int i = 1; i <= 3; i++) { Console.WriteLine("Hello"); } และรหัสคําสั ่งสําหรับการแสดงผลคําว่า “Hello” จํานวน 1,000,000 บรรทัด for (int i = 1; i <= 1000000; i++) { Console.WriteLine("Hello"); } จะเห็นว่าความยาวของรหัสคําสั ่งยังเท่าเดิม นี ่แหละคือประโยชน์ของโปรแกรมแบบวนซํ คําสั ่งโปรแกรมแบบวนซํ้า โปรแกรมภาษา C# ได้เตรียมคําสั ่งที่ใช้ในการเขียนโปรแกรมแบบวนซํ าไว้หลายคําสั ่งด้วยกัน เพื่อให้ผู้เขียน โปรแกรมสามารถนําไปใช้แก้ปัญหาที่เหมือนหรือแตกต่างกัน ขึ ้นอยู ่กับผู้เขียนโปรแกรมจะเลือกใช้ ได้แก่ (1) คําสั ่ง for (2) คําสั ่ง while (3) คําสั ่ง do while และ (4) คําสั ่ง foreach

โปรแกรมแบบวนซํ้า (Loop)computer.bps.in.th/suteerat/images/cSharp2.pdf · 2013-12-17 · แบบฝึกทักษะ วิชาการเขียนโปรแกรมภาษา

  • Upload
    others

  • View
    2

  • Download
    0

Embed Size (px)

Citation preview

Page 1: โปรแกรมแบบวนซํ้า (Loop)computer.bps.in.th/suteerat/images/cSharp2.pdf · 2013-12-17 · แบบฝึกทักษะ วิชาการเขียนโปรแกรมภาษา

แบบฝกทกษะ วชาการเขยนโปรแกรมภาษา

56

บทท 8

โปรแกรมแบบวนซา (Loop)

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

แกปญหาตางๆ หวใจของการเขยนโปรแกรมอกรปแบบหนงทมความสาคญไมยงหยอนไปกวากน นนกคอโปรแกรม

แบบวนซ า (Loop) หรอโปรแกรมแบบทาซ า

การทางานแบบวนซ ากคอการทโปรแกรมสามารถทาตามคาสงใดๆ ไดมากกวา 1 ครง สมมตวาเราตองการ

แสดงคาวา “Hello” จานวน 3 ครง การเขยนโปรแกรมรปแบบเดมทเราไดเรยนมาแลวจะไดรหสคาสงดงน

Console.WriteLine("Hello"); Console.WriteLine("Hello"); Console.WriteLine("Hello");

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

ตอไปอกวา ถาหากวาเราตองการแสดงคานจานวน 1,000,000 ครง เราจะตองเขยนรหสคาสงอกกบรรทด... ถกตองแลว

ครบ นนคอเราจะตองเขยนรหสคาสงอก 1,000,000 บรรทด ถาเปนแบบนการเขยนโปรแกรมกคงจะยงยากนาด

จากปญหาดงกลาวผพฒนาโปรแกรมภาษาทกภาษาจงไดพฒนาโปรแกรมแบบวนซ ามาเพอใหการเขยน

โปรแกรมมความกระชบ สน และมประสทธภาพ การเขยนโปรแกรมเพอแสดงคาวา “Hello” จะกลานครงกไมใช

ปญหาอกตอไป นกเรยนลองดรหสคาสงสาหรบการแสดงคาวา “Hello” จานวน 3 บรรทด ดงตอไปน

for (int i = 1; i <= 3; i++) { Console.WriteLine("Hello"); }

และรหสคาสงสาหรบการแสดงผลคาวา “Hello” จานวน 1,000,000 บรรทด

for (int i = 1; i <= 1000000; i++) { Console.WriteLine("Hello"); }

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

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

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

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

for (2) คาสง while (3) คาสง do while และ (4) คาสง foreach

Page 2: โปรแกรมแบบวนซํ้า (Loop)computer.bps.in.th/suteerat/images/cSharp2.pdf · 2013-12-17 · แบบฝึกทักษะ วิชาการเขียนโปรแกรมภาษา

แบบฝกทกษะ วชาการเขยนโปรแกรมภาษา

57

1. คาสง for

นกเรยนดตวอยางรหสคาสงตอไปน ซงเปนคาสงสาหรบการแสดงตวเลข 1-3 โดยใชคาสง for

for (int i = 1; i <= 3; i++) { Console.WriteLine(i); //คาสงในบลอกของ for } Console.ReadKey(); Output: 1 2 3

คาอธบาย:

for (int i = 1; i <= 3; i++)

คาสง for ประกอบไปดวย 3 นพจนทวางไวในวงเลบ ดงน

พจนท 1 (int i = 1) เปนการประกาศตวแปรเพอกาหนดคาเรมตนของการนบจานวนรอบในทนเรมนบจาก 1

พจนท 2 (i <= 3) เปนเงอนไขของการวนซ า ตราบใดทเงอนไขยงเปนจรงอยโปรแกรมจะทางานตามคาสง ท

อยในบลอกของ for ไปเรอยๆ (ถาคาของ i ยงไมมากกวา 3) ในทนมเพยง 1 คาสงคอ Console.WriteLine(i);

พจนท 3 (i++ หมายถง i=i+1) เปนการเพมหรอลดคาของตวแปรทใชในการวน ในทนเปนการเพมคาทละ 1

ตอการวนซ า 1 รอบ

Console.WriteLine(i); //คาสงในบลอกของ for

คาสงนเปนการแสดงคาของตวแปร i ใน 1 รอบจะแสดงคา i 1 ครง แตเนองจากคาของ i มการเพมขนทละ 1

ดงนนจงเปนการแสดงตวเลข 1-3 นนเอง

หมายเหต:

การเพมคาของ i ไมจาเปนตองเพมทละ 1 เสมอไป อาจเพมทละสองกได โดยใชนพจน i=i+2 หรอ i+=2

แทน i++ ตวอยางเชน เราตองการแสดงเลข 1-10 แตแสดงเฉพาะเลขค เราสามารถเขยนโปรแกรมไดดงน

for (int i = 2; i <= 10; i=i+2) { Console.WriteLine(i); } Console.ReadKey(); Output: 2 4 6 8 10

Page 3: โปรแกรมแบบวนซํ้า (Loop)computer.bps.in.th/suteerat/images/cSharp2.pdf · 2013-12-17 · แบบฝึกทักษะ วิชาการเขียนโปรแกรมภาษา

แบบฝกทกษะ วชาการเขยนโปรแกรมภาษา

58

แนวทางการประยกตใชคาสง for

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

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

for เพราะจะทาใหโปรแกรมสนและกระชบทสด

การใชคาสง for แกปญหาเรองจานวนเฉพาะ

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

ของจานวนเฉพาะวา จานวนเฉพาะ (prime number) คอ จานวนธรรมชาตทมตวหารทเปนบวกอย 2 ตว คอ 1 กบตวมน

เอง สาหรบเลข 1 ไมถอวาเปนจานวนเฉพาะตามนยาม สาหรบจานวนธรรมชาตหมายถงจานวนเตมบวกหรอจานวน

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

วธคดกอนการเขยนโปรแกรม

1.จานวนเฉพาะไมมจานวนนบใดหารมนลงตวยกเวน 1 และตวมนเองเทานน ดงนนถาจะตรวจสอบวา N เปน

จานวนเฉพาะหรอไม ตองนาตวเลขตงแต 2 ขนไป จนถงตวท N-1 ไปหาร ถาไมมตวใดหาร N ไดลงตวเลย แสดงวา N

เปนจานวนเฉพาะ

2.กาหนดตวแปรชอ PrimeNumber เปนชนด bool ขนมา 1 ตวเพอเกบคา true ในกรณทเปนจานวนเฉพาะ

หรอ false ในกรณทไมใชจานวนเฉพาะ

3.กาหนดตวแปรขนมา 1 ตว ชอ N เปนชนด int ใชแทนตวเลขทตองการหาวาเปนจานวนเฉพาะหรอไม

4.ใชคาสง for วนซ าโดยใหตวแปร i มคาเปน 2,3,4,…,ไปจนถงตวท N-1 ไปหาร N เพอตรวจสอบวาหารลงตว

หรอไม

5.ในขณะทวนซ า ใชเงอนไข if (N % i = = 0) ตรวจสอบวาหารลงตวหรอไม ถารอบใดพบวามการหารลงตว

แสดงวา N ไมใชจานวนเฉพาะ ใหแปร PrimeNumber = false แลวกระโดดออกจากการวนซ าทนท โดยไมจาเปนตอง

วนซ าไปจนถงตวหารท N -1 ตามทกาหนดไว

6.เมอออกจากการวนซ าแลวตรวจสอบวา PrimeNumber = true หรอไม ถาใชแสดงขอความวาเปนจานวน

เฉพาะ ถาไมใชกแสดงขอความวาไมใชจานวนเฉพาะ

7.นาวธคดไปเขยนผงงานไดดงหนาตอไป

Page 4: โปรแกรมแบบวนซํ้า (Loop)computer.bps.in.th/suteerat/images/cSharp2.pdf · 2013-12-17 · แบบฝึกทักษะ วิชาการเขียนโปรแกรมภาษา

แบบฝกทกษะ วชาการเขยนโปรแกรมภาษา

59

นาผงงานไปเขยนโปรแกรม ไดดงน

ตวอยางท 1

โปรแกรมตรวจสอบจานวนเฉพาะ

bool PrimeNumber = true; Console.Write("Enter a number:"); int N = int.Parse(Console.ReadLine()); for (int i = 2; i < N; i++) { if (N % i == 0) { PrimeNumber = false; break; //กระโดดออกไปทางานหลงคาสง for } } if (PrimeNumber==true) Console.WriteLine("Number {0} is prime number.", N); else Console.WriteLine("Number {0} is not prime number.", N); Console.ReadKey();

start

bool PrimeNumber=true

int N

i < N

N % i == 0

PrimeNumber = false

PrimeNumber=true

N เปนจานวนเฉพาะ

N ไมเปนจานวนเฉพาะ

เพมคา i อก 1

end

yes

no

yes

no

yes

no

Page 5: โปรแกรมแบบวนซํ้า (Loop)computer.bps.in.th/suteerat/images/cSharp2.pdf · 2013-12-17 · แบบฝึกทักษะ วิชาการเขียนโปรแกรมภาษา

แบบฝกทกษะ วชาการเขยนโปรแกรมภาษา

60

Output: Enter a number: 38701 Number 38701 is not prime number.

Enter a number: 56711 Number 56711 is prime number.

ขอควรร: 1.คาสง break เปนคาสงททาใหออกจากการวนซ าทนท ดงนนคาสงทอยถดจากคาสง break จะไมถกกระทา

2.คาสง continue เปนคาสงททาใหขนไปวนซ ารอบถดไปทนท ดงนนคาสงทอยถดจากคาสง continue จะ

ไมถกกระทา

ตวอยางโปรแกรมวนซาทเรยกใชคาสง continue

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

คาสงใหม แตผลลพธยงคงเหมอนเดม ดงน

โปรแกรมเดม โปรแกรมใหม

for (int i = 2; i <= 10; i=i+2) { Console.WriteLine(i); } Console.ReadKey(); Output: 2 4 6 8 10

คาอธบาย: สาหรบโปรแกรมใหมนน ทกครงท i/2 ไมลงตว หมายถงเปนเลขค จะทาใหเงอนไข if (i%2 != 0) เปนจรง ก

จะไปทาตามคาสง continue ซงกจะสงใหโปรแกรมกระโดดขนไปวนรอบตอไปทนท ทาใหคาสงทอยตอจากคาสง

continue คอคาสง Console.WriteLine(i); กจะไมถกกระทา เลขคจงไมถกแสดงออกมา

for (int i = 1; i <= 10; i++) { if (i%2 != 0) continue ; //ขนไปเชครอบถดไปเลย Console.WriteLine(i); } Console.ReadKey();

นกเรยน: แหม..! คาสง for น เยยมไปเลยนะคะคณคร

หนอยากเขยนโปรแกรมแลวละ..

คร : ดคาสงวนซ าตวอนๆ กอนดไหม...

Page 6: โปรแกรมแบบวนซํ้า (Loop)computer.bps.in.th/suteerat/images/cSharp2.pdf · 2013-12-17 · แบบฝึกทักษะ วิชาการเขียนโปรแกรมภาษา

แบบฝกทกษะ วชาการเขยนโปรแกรมภาษา

61

ตวอยางการเขยนโปรแกรมแกโจทยปญหา

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

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

กาหนดใหผงรงหนงเรมตนดวยนางพญาหนงตว และผงงานอกหนงตว ดงนนเมอส นปแรก (นบเปนปทหนง)ผงรงนจะมนางพญาจานวนหนงตว, ผงงาน (ทเกดจากนางพญา) จานวนหนงตว, ผงทหารและผงงาน อยางละหนงตว (ทเกดจากผงงานในรนกอน ซงเมอใหกาเนดลกผงแลวตายไป) รวมเปนผงในรงทงส น 4 ตว และโดยวธการเดยวกนในปทสองผงรงนจะประกอบดวยนางพญาจานวนหนงตว ผงทหารจานวนสองตว และผงงานจานวนสตว รวมเปนผงในรงทงส น 7 ตว

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

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

1. จานวนปทตองการคานวณมคาไดตงแต 1 ถง 24 จานวน 2. คาตวเลขของปในขอ 1. เปนตวเลขทไมซากน และมคาไดตงแต 1 ถง 24 3. รหส ปดทายขอมล (sentinel) มคาเปน -1 เสมอใชแสดงวาขอมลทตองทาการประมวลผลหมดแลว ใหเลกทางาน

และไมตองประมวลผลคาน 4. ขอมลแตละจานวนแยกจากกนดวยเครองหมายเวนวรรคจานวน 1 วรรค

ขอมลสงออก

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

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

ตวอยางขอมลนาเขา ตวอยางขอมลสงออก

1 3

2 4 7 12

(โจทยปรบปรงมาจาก ww.programming.in.th)

จากโจทยปญหาทนามาดงกลาว จดทาขนเพอใหเขยนโปรแกรมดวยโปรแกรมภาษา C++ ดงนนครจะนาโจทย

มาประยกตใชในโปรแกรมภาษา C# แตกอนอนนกเรยนศกษาวธคดของคร กอนเขยนโปรแกรม ดงตอไปน

แบบฝกทกษะท 8.1 เรอง คาสงวนซา for

Page 7: โปรแกรมแบบวนซํ้า (Loop)computer.bps.in.th/suteerat/images/cSharp2.pdf · 2013-12-17 · แบบฝึกทักษะ วิชาการเขียนโปรแกรมภาษา

แบบฝกทกษะ วชาการเขยนโปรแกรมภาษา

62

วธคด

ขนท 1. เขยนเปนแผนภาพแสดงความสมพนธของจานวนผงแตละป

คาเรมตน ปท 1 ปท2 ปท 3

นางพญา งาน งาน งาน

ทหาร ทหาร งาน

นางพญา งาน งาน ทหาร นางพญา งาน นางพญา งาน งาน งาน งาน ทหาร ทหาร

ทหาร งาน งาน งาน ทหาร

ขนท 2. ดอตราการเพมแตละปเพอกาหนดสมการการเพมของผงแตละตว

ปท 1 เพม ปท 2 เพม ปท 3 สมการทได

นางพญา (bee1) 1 0 1 0 1 bee1=1

งาน (bee2) 2 2 4 3 7 bee2=bee2+YearNumber

ทหาร (bee3) 1 1 2 2 4 bee3=bee3+(YearNuber-1) //bee1=ผงนางพญา, bee2=ผงงาน, bee3=ผงทหาร int bee1 = 1, bee2 = 2, bee3 = 1; //กาหนดคาเรมตนจากปท 1 Console.Write("Enter year that you want to know: "); int YearAll = int.Parse(Console.ReadLine()); for (int YearNumber = 2; YearNumber <= YearAll; YearNumber++) //เรมหาปท 2 ขนไป { // bee1 = 1; ไมตองคานวณเพราะไมวาปใดจะมคาเทากบ 1 เสมอ bee2 = bee2+YearNumber; bee3 = bee3+(YearNumber-1); } Console.WriteLine("Bee2={0} Bee all={1}", bee2, (bee1 + bee2 + bee3) ); Console.ReadKey(); Output: Enter year that you want to know: 2 Bee2=4 Bee all=7

Enter year that you want to know: 3 Bee2=7 Bee all=12

Page 8: โปรแกรมแบบวนซํ้า (Loop)computer.bps.in.th/suteerat/images/cSharp2.pdf · 2013-12-17 · แบบฝึกทักษะ วิชาการเขียนโปรแกรมภาษา

แบบฝกทกษะ วชาการเขยนโปรแกรมภาษา

63

คาชแจง: ใหนกเรยนเลอกทาโจทยขอใดขอหนงตอไปนเพยง 1 ขอเทานน

1.ใหนกเรยนเขยนโปรแกรมแสดงสตรคณโดยรบขอมลแมทตองการ และใหแสดงการคณตงแต 1 ถง 12 (7 คะแนน)

ตวอยาง: Input: N = 2 Output: 2 x 1 = 2 2 x 2 = 4 … 2 x 12 = 24

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

นบจานวนเฉพาะทมอยในชวงทงหมด (10 คะแนน)

ตวอยาง: Input: N1 = 1 Output: 2 N2 = 10 3 5 7 Counter = 4

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

โดยรบขอมลเงนตน อตราดอกเบยรอยละตอป และปทตองการทราบจานวนเงน (10 คะแนน)

ตวอยาง: Input: Enter the capital : 1000 Output: Amount = 1210.00 Enter the interest rate : 10 Enter sum of the year: 2

นกเรยนเลอกทาขอท.........วธคดกอนเขยนโปรแกรมมดงน

.............................................................................................................................................................................

.............................................................................................................................................................................

.............................................................................................................................................................................

.............................................................................................................................................................................

.............................................................................................................................................................................

.............................................................................................................................................................................

.............................................................................................................................................................................

.............................................................................................................................................................................

.............................................................................................................................................................................

.............................................................................................................................................................................

.............................................................................................................................................................................

.............................................................................................................................................................................

.............................................................................................................................................................................

.............................................................................................................................................................................

Page 9: โปรแกรมแบบวนซํ้า (Loop)computer.bps.in.th/suteerat/images/cSharp2.pdf · 2013-12-17 · แบบฝึกทักษะ วิชาการเขียนโปรแกรมภาษา

แบบฝกทกษะ วชาการเขยนโปรแกรมภาษา

64

รหสคาสงของโปรแกรมทนกเรยนเลอกทา มดงน

.............................................................................................................................................................................

.............................................................................................................................................................................

.............................................................................................................................................................................

.............................................................................................................................................................................

.............................................................................................................................................................................

.............................................................................................................................................................................

.............................................................................................................................................................................

.............................................................................................................................................................................

.............................................................................................................................................................................

.............................................................................................................................................................................

.............................................................................................................................................................................

.............................................................................................................................................................................

.............................................................................................................................................................................

.............................................................................................................................................................................

.............................................................................................................................................................................

.............................................................................................................................................................................

.............................................................................................................................................................................

.............................................................................................................................................................................

.............................................................................................................................................................................

.............................................................................................................................................................................

.............................................................................................................................................................................

.............................................................................................................................................................................

.............................................................................................................................................................................

.............................................................................................................................................................................

.............................................................................................................................................................................

.............................................................................................................................................................................

.............................................................................................................................................................................

.............................................................................................................................................................................

.............................................................................................................................................................................

Page 10: โปรแกรมแบบวนซํ้า (Loop)computer.bps.in.th/suteerat/images/cSharp2.pdf · 2013-12-17 · แบบฝึกทักษะ วิชาการเขียนโปรแกรมภาษา

แบบฝกทกษะ วชาการเขยนโปรแกรมภาษา

65

2. คาสง while

หลกการทางานของคาสง while คลายกบคาสง for แตแตกตางกนตรงในวงเลบของ while มเพยงนพจนเดยวท

เปนเงอนไขของการวนซ าเทานน นกเรยนดตวอยางรหสคาสงตอไปน ซงเปนคาสงสาหรบการแสดงตวเลข 1-3

int i = 1; เปรยบเทยบกบคาสง for

while (i<= 3) { Console.WriteLine(i); i++; } Console.ReadKey(); Output: 1 2 3

คาอธบาย:

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

แลวจะวนขนไปตรวจสอบเงอนไขใหม ทาอยางนไปเรอยๆ จนกวาเงอนไขจะเปนเทจ (เมอ i =4) จงจะจบการวนซ า

แนวทางการประยกตใชคาสง while

ในใบความรท 7 ทผานมาเราไดออกแบบผงงานการหาคาเฉลยของผลการเรยน เราจะนาผงงานนนมาเขยนเปน

โปแกรมโดยใชคาสง while ไดดงน

ตวอยางท 2

โปรแกรมหาผลการเรยนเฉลย

double sum1 = 0, sum2 = 0; byte i = 1;

Console.Write("How many your subjects? "); byte number = byte.Parse(Console.ReadLine());

while (i <= number) { Console.Write("No.{0} unit:", i); double unit = double.Parse(Console.ReadLine()); Console.Write(" grade:", i); double grade = double.Parse(Console.ReadLine());

sum1=sum1+(unit*grade); sum2 = sum2 + unit; i++; } double average = sum1 / sum2; Console.WriteLine("Average = {0:F2}", average); Console.ReadKey();

for (int i = 1; i <= 3; i++) { Console.WriteLine(i); } Console.ReadKey();

Page 11: โปรแกรมแบบวนซํ้า (Loop)computer.bps.in.th/suteerat/images/cSharp2.pdf · 2013-12-17 · แบบฝึกทักษะ วิชาการเขียนโปรแกรมภาษา

แบบฝกทกษะ วชาการเขยนโปรแกรมภาษา

66

Output: How many your subjects? 3 No. 1 unit : 1 grade : 4 No.2 unit : 1.5 grade : 3.5 No.3 unit : 1 grade : 3.5 Average = 3.64

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

ความสามารถของคาสง while อกรปแบบหนงทสามารถนามาประยกตใชไดกคอ การสงใหโปรแกรมวนซ าแบบไมร

จบโดยใชเงอนไขแบบ while (true) จะใหโปรแกรมจะหลดออกจากการทาซ าตองใชคาสง break เทานน

ตวอยางโปรแกรม เกมทายตวเลข ตอไปน ซงโปรแกรมจะสมตวเลขทอยระหวาง 1-100 มา 1 ตว แลวใหผเลน

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

ทดลองเลนเกมกบเพอน)

ตวอยางท 3

โปรแกรมเกมทายตวเลข

Random ran = new Random(); int number = ran.Next(1, 100); //สมตวเลขทอยในชวง 1-100 while (true) { Console.Write("Please enter a number :"); int YourNumber = int.Parse(Console.ReadLine()); if (YourNumber == number) { Console.WriteLine("Correct, you are win."); break; } else if (YourNumber > number) Console.WriteLine("Wrong! It's more."); else Console.WriteLine("Wrong! It's less."); } Console.ReadKey();

Output: Please enter a number :39 Wrong! It's less. Please enter a number :60 Wrong! It's less. Please enter a number :90 Wrong! It's more.. Please enter a number :80 Wrong! It's more.. Please enter a number :75 Wrong! It's more.. Please enter a number :70 Wrong! It's less. Please enter a number :73 Wrong! It's more.. Please enter a number :72 Correct, you are win.

Page 12: โปรแกรมแบบวนซํ้า (Loop)computer.bps.in.th/suteerat/images/cSharp2.pdf · 2013-12-17 · แบบฝึกทักษะ วิชาการเขียนโปรแกรมภาษา

แบบฝกทกษะ วชาการเขยนโปรแกรมภาษา

67

ใหนกเรยนเลอกทาโจทยขอใดขอหนงตอไปนเพยง 1 ขอเทานน

1.ใหนกเรยนเขยนโปรแกรมเกมทายลกเตาโดยรบขอมลตวเลขระหวาง 1-6 แลวแสดงผลการสมตวเลขของลกเตา

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

เลนเกมใหมไดเรอยๆ จนกวาจะปอนตวเลขเปน 0 จงจะจบโปรแกรม (5 คะแนน)

ตวอยาง: Input: You choose number= 3 Output: You wrong guess. Number of dice is 2

Input: You choose number= 5 Output: You correct guess. Number of dice is 5

2.ใหนกเรยนเขยนโปรแกรมวนซ ารบขอมลปเรมตน และรายไดประจาปยอนหลง 10 ป แลวรายงานขอมลปทมรายได

เพมจากปกอนหนามากทสดและปทมรายไดลดลงจากปกอนหนามากทสด (7 คะแนน)

ตวอยาง: Input: Start year=2001 Output: Up yaer 2003 Year 2001=25090000 Down year 2008 Year 2002=23000000 Year 2003=25507000 … Year 2010=21090000

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

พบคนทมสวนสงอยระหวาง 175-185 และมผลตางระหวางสวนสงและนาหนกเทากบ 100 พอด คนนนจะไดรบการ

คดเลอก ใหจบการวนซ าและรายงานผลดงนคอ แสดงเลขลาดบ ของคนทไดรบการคดเลอก คนทอวนทสด และคนท

ผอมทสด (10 คะแนน)

ตวอยาง: Input: No.1 Weight=62 Output: Great man is number 8 Height=170 Fat man is number 5 No.2 Weight=70 Thin man is number 1 Height=164 … No.8 Weight=78 Height=178

นกเรยนเลอกทาขอท.........วธคดกอนเขยนโปรแกรมมดงน

.............................................................................................................................................................................

.............................................................................................................................................................................

.............................................................................................................................................................................

.............................................................................................................................................................................

.............................................................................................................................................................................

.............................................................................................................................................................................

แบบฝกทกษะท 8.2 เรอง คาสงวนซา while

Page 13: โปรแกรมแบบวนซํ้า (Loop)computer.bps.in.th/suteerat/images/cSharp2.pdf · 2013-12-17 · แบบฝึกทักษะ วิชาการเขียนโปรแกรมภาษา

แบบฝกทกษะ วชาการเขยนโปรแกรมภาษา

68

รหสคาสงของโปรแกรมทนกเรยนเลอกทา มดงน

.............................................................................................................................................................................

.............................................................................................................................................................................

.............................................................................................................................................................................

.............................................................................................................................................................................

.............................................................................................................................................................................

.............................................................................................................................................................................

.............................................................................................................................................................................

.............................................................................................................................................................................

.............................................................................................................................................................................

.............................................................................................................................................................................

.............................................................................................................................................................................

.............................................................................................................................................................................

.............................................................................................................................................................................

.............................................................................................................................................................................

.............................................................................................................................................................................

.............................................................................................................................................................................

.............................................................................................................................................................................

.............................................................................................................................................................................

.............................................................................................................................................................................

.............................................................................................................................................................................

.............................................................................................................................................................................

.............................................................................................................................................................................

.............................................................................................................................................................................

.............................................................................................................................................................................

.............................................................................................................................................................................

.............................................................................................................................................................................

.............................................................................................................................................................................

.............................................................................................................................................................................

.............................................................................................................................................................................

.............................................................................................................................................................................

Page 14: โปรแกรมแบบวนซํ้า (Loop)computer.bps.in.th/suteerat/images/cSharp2.pdf · 2013-12-17 · แบบฝึกทักษะ วิชาการเขียนโปรแกรมภาษา

แบบฝกทกษะ วชาการเขยนโปรแกรมภาษา

69

3. คาสง do while

หลกการทางานของคาสง do while แตกตางจากคาสง for และคาสง while ตรงทคาสง do while จะมการทา

คาสงทอยในบลอกของ do while กอน 1 รอบ แลวจงตรวจสอบเงอนไข และกจะวนทาซ าไปเรอยๆ ตราบใดทเงอนไข

ยงเปนจรงอย แตเมอใดทเงอนไขเปนเทจกจะหลดออกจากการทาซ าทนทเหมอนคาสง for และ while นกเรยนด

ตวอยางรหสคาสงตอไปน ซงเปนคาสงสาหรบการแสดงตวเลข 1-3

เปรยบเทยบคาสง while เปรยบเทยบคาสง for

int i = 1; do { Console.WriteLine(i); i++; } while (i <= 3); Console.ReadKey(); Output: 1 2 3

แนวทางประยกตใชคาสง do while

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

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

ตามลาดบ แตถาเราปอนตวเลขเปน 0 (ไมนา 0 ไปเปรยบเทยบ) จะจบการทาซ าทนทพรอมแสดงคา max และ min

ตวอยางท 4

โปรแกรมหาคาสงสดตาสด

int num, max = 0, min = 1000000;

do { Console.Write("Please enter a number:"); num = int.Parse(Console.ReadLine());

if (num > max && num != 0) max = num;

if (num < min && num != 0) min = num;

} while (num != 0);

Console.WriteLine("Max = {0}", max); Console.WriteLine("Min = {0}", min); Console.ReadKey();

for (int i = 1; i <= 3; i++) { Console.WriteLine(i); } Console.ReadKey();

int i = 1; while (i<= 3) { Console.WriteLine(i); i++; }

Output: Please enter a number:4 Please enter a number:8 Please enter a number:1 Please enter a number:9 Please enter a number:3 Please enter a number:0 Max = 9 Min = 1

Page 15: โปรแกรมแบบวนซํ้า (Loop)computer.bps.in.th/suteerat/images/cSharp2.pdf · 2013-12-17 · แบบฝึกทักษะ วิชาการเขียนโปรแกรมภาษา

แบบฝกทกษะ วชาการเขยนโปรแกรมภาษา

70

ใหนกเรยนเลอกทาโจทยขอใดขอหนงตอไปนเพยง 1 ขอเทานน

1.ใหนกเรยนเขยนโปรแกรมวนซ ารบขอมลตวเลขไปเรอยๆ จนกวาจะรบขอมลเปนเลขรหสปดทายคอ -1 ใหจบการวน

ซ าและแสดงคาเฉลยของตวเลขทงหมด ทงนไมนบรวมเลขรหสปดทาย -1 (5 คะแนน)

ตวอยาง: Input: Number=6 Output: Average=9.67 Number=8 Number=15 Number=-1

2.ใหนกเรยนเขยนโปรแกรมหาผลบวกตงแต N1 ถง N2 โดยใชคาสง if กาหนดทางเลอก 3 ทางดงน (7 คะแนน)

1. บวกทงหมด 2. บวกเฉพาะเลขคเทานน 3. บวกเฉพาะเลขคเทานน

ตวอยาง: Input: Choice = 3 Output: sum = 9 N1=1 N2=5

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

Thai, Math และ Science แตละวชาจะมคะแนนเตม 100 คะแนน ขณะรบขอมลคะแนน ถาพบวาวชาใดมคะแนนไมถง

50 คะแนน ไมตองรบคะแนนวชาทเหลอใหแสดงผลลพธวา “Sorry! <รหส> you don’t pass.” แลวออกจากการวนซ า

แตถาไดคะแนนเกน 50 คะแนนทกวชา ใหแสดงผลลพธวา “Excellent! <รหส> you pass.” พรอมแสดงชอวชาและ

คะแนนของวชาทสอบไดคะแนนสงสด (10 คะแนน)

ตวอยาง: Input: Enter student ID: 12002 Output: Sorry! 12002 You don’t pass. The score of Thai:45

Input: Enter student ID: 12042 Output: Excellent! 12042 you pass. The score of Thai: 78 Top score is Math to 91. The score of Math: 91 The score of Science: 65

นกเรยนเลอกทาขอท.........วธคดกอนเขยนโปรแกรมมดงน

.............................................................................................................................................................................

.............................................................................................................................................................................

.............................................................................................................................................................................

.............................................................................................................................................................................

.............................................................................................................................................................................

.............................................................................................................................................................................

.............................................................................................................................................................................

แบบฝกทกษะท 8.3 เรอง คาสงวนซา do while

Page 16: โปรแกรมแบบวนซํ้า (Loop)computer.bps.in.th/suteerat/images/cSharp2.pdf · 2013-12-17 · แบบฝึกทักษะ วิชาการเขียนโปรแกรมภาษา

แบบฝกทกษะ วชาการเขยนโปรแกรมภาษา

71

รหสคาสงของโปรแกรมทนกเรยนเลอกทา มดงน

.............................................................................................................................................................................

.............................................................................................................................................................................

.............................................................................................................................................................................

.............................................................................................................................................................................

.............................................................................................................................................................................

.............................................................................................................................................................................

.............................................................................................................................................................................

.............................................................................................................................................................................

.............................................................................................................................................................................

.............................................................................................................................................................................

.............................................................................................................................................................................

.............................................................................................................................................................................

.............................................................................................................................................................................

.............................................................................................................................................................................

.............................................................................................................................................................................

.............................................................................................................................................................................

.............................................................................................................................................................................

.............................................................................................................................................................................

.............................................................................................................................................................................

.............................................................................................................................................................................

.............................................................................................................................................................................

.............................................................................................................................................................................

.............................................................................................................................................................................

.............................................................................................................................................................................

.............................................................................................................................................................................

.............................................................................................................................................................................

.............................................................................................................................................................................

.............................................................................................................................................................................

.............................................................................................................................................................................

Page 17: โปรแกรมแบบวนซํ้า (Loop)computer.bps.in.th/suteerat/images/cSharp2.pdf · 2013-12-17 · แบบฝึกทักษะ วิชาการเขียนโปรแกรมภาษา

แบบฝกทกษะ วชาการเขยนโปรแกรมภาษา

72

4. คาสง foreach

หลกการทางานของคาสง foreach แตกตางจากคาสงวนซ าทงสามตวทกลาวมา กลาวคอคาสง foreach เปน

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

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

ตวอยางตอไปนจะใหโปรแกรมแสดงสมาชกทงหมดทอยในตวแปรชด numbers

int[] numbers = {0, 1, 2, 3}; foreach (int element in numbers) { System.Console.WriteLine(element); } Console.ReadKey();

Output: 0 1 2 3

จากนนเราลองเพมสมาชกลงไปโดยทเราไมตองเปลยนคาสงของ foreach เลยโปรแกรมกยงสามารถแสดง

สมาชกทมอยไดท งหมด

int[] numbers = {0, 1, 2, 3, 5, 8, 13}; foreach (int element in numbers) { System.Console.WriteLine(element); } Console.ReadKey();

Output: 0 1 2 3 5 8 13

Page 18: โปรแกรมแบบวนซํ้า (Loop)computer.bps.in.th/suteerat/images/cSharp2.pdf · 2013-12-17 · แบบฝึกทักษะ วิชาการเขียนโปรแกรมภาษา

แบบฝกทกษะ วชาการเขยนโปรแกรมภาษา

73

การนาคาสง foreach มาแกโจทยปญหา

โปรแกรมตอไปนเปนการใชคาสง foreach ในการแสดงชอไฟลในโฟลเดอร ซงเราสามารถกาหนดโฟลเดอร

หรอชนดของไฟลทเราตองการแสดงได ดงตวอยางตอไปน

ตวอยางท 5

โปรแกรมแสดงชอไฟลในโฟลเดอร

using System; using System.IO; //เราตองเพม namespace นจงจะใชงานเกยวกบไฟลได

namespace ConsoleApplication1 { class Program { static void Main(string[] args) { string[] filePaths = Directory.GetFiles(@"c:\Temp\"); foreach (string FilesName in filePaths) { System.Console.WriteLine(FilesName); } Console.ReadKey(); } } }

Output: c:\Temp\debug.txt c:\temp\nuw file Icon.jpg c:\temp\Penguins.docx c:\temp\the Miz.docx

ถาตองการเลอกแสดงเฉพาะชนดไฟลทตองการ ใหเปลยนอารกวเมนทของเมธอด GetFiles() ดงน

string[] filePaths = Directory.GetFiles(@"c:\Temp\","*.jpg"); Output: c:\temp\nuw file Icon.jpg

Page 19: โปรแกรมแบบวนซํ้า (Loop)computer.bps.in.th/suteerat/images/cSharp2.pdf · 2013-12-17 · แบบฝึกทักษะ วิชาการเขียนโปรแกรมภาษา

แบบฝกทกษะ วชาการเขยนโปรแกรมภาษา

74

ตวอยางท 6

โปรแกรมนบจานวนตวอกขระ

โจทย: จงเขยนโปรแกรมเพอรบขอความและรายงาน จานวนอกขระทเปนตวเลข (0-9) จานวนอกขระภาษาองกฤษ

พมพใหญ (A-Z) จานวนอกขระภาษาองกฤษพมพเลก (a-z) และจานวนอกขระทเหลออนๆ (ไมรวมชองวาง)

Console.Write("Enter a string:"); string str = Console.ReadLine(); int cntDigit = 0, cntUpper = 0, cntLower = 0, cntOther = 0; foreach (char chr in str) { if (chr >= '0' && chr <= '9') cntDigit++; else if (chr >= 'A' && chr <= 'Z') cntUpper++; else if (chr >= 'a' && chr <= 'z') cntLower++; else if (chr !=' ') cntOther++; } Console.WriteLine("There are {0} digits.", cntDigit); Console.WriteLine("There are {0} uppercase.", cntUpper); Console.WriteLine("There are {0} lowercase.", cntLower); Console.WriteLine("There are {0} other characters.", cntOther); Console.ReadKey(); Output: Enter a string: Suteerat Thipaksorn Tel. 083-797-5558 There are 10 digits. There are 3 uppercase. There are 18 lowercase. There are 3 other characters.

Page 20: โปรแกรมแบบวนซํ้า (Loop)computer.bps.in.th/suteerat/images/cSharp2.pdf · 2013-12-17 · แบบฝึกทักษะ วิชาการเขียนโปรแกรมภาษา

แบบฝกทกษะ วชาการเขยนโปรแกรมภาษา

75

ใหนกเรยนเลอกทาโจทยขอใดขอหนงตอไปนเพยง 1 ขอเทานน

1.จงเขยนโปรแกรมเพอรบขอความ แลวเปลยนอกขระภาษาองกฤษพมพใหญ (A-Z) ใหเปนตวพมพเลก และเปลยน

ตวพมพเลก (a-z) ใหเปนตวพมพใหญ ตวอกขระทเหลออนๆ ใหคงเดม เกบไวในตวแปรตวใหมชนดสตรง แลวรายงาน

ผลลพธทได (10 คะแนน)

คาแนะนาเพมเตม:

1.ตวแปรใหมชนดสตรง การประกาศตองกาหนดคาเปน null ไวกอน (string NewStr=null;)

2.เมธอดทตองนามาใชในโปรแกรมไดแก

ToString() ใชแปลงจาก char เปน string

ToUpper() ใชแปลงจากตวพมพเลกใหเปนตวพมพใหญ

ToLower() ใชแปลงจากตวพมพใหญใหเปนตวพมพเลก

3.ใชโอเปอเรเตอร += ในการเพมตวอกขระเขาไปในตวแปรสตรงใหม

ตวอยาง: Input: Please enter a string: WxyKm01mk Output: New string is wXYkM01MK

2.ตารวจสบทราบมาวา พวกมจฉาชพกลมหนงใชรหสลบในการสอสารกน โดยตารวจสบทราบมาวาพวกนจะมวธการ

เขยนรหสลบทไมเหมอนขอความทวไปดงน (10 คะแนน)

1.ตวหนงสอถกพมพจาขวาไปซาย แทนทจะเปนซายไปขวาเหมอนปกต

2.อกขระ ‘R’ ถกแทนดวยอกขระ ‘E’ ในการเขารหส

3.อกขระ ‘W’ ถกแทนดวยอกขระ ‘R’ ในการเขารหส

4.อกขระ ‘E’ ถกแทนดวยอกขระ ‘W’ ในการเขารหส

5.อกขระอนๆ รวมถงตวเลขและสญลกษณตางๆ ไมมการเปลยนแปลงใดๆ

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

ตวอยาง: Input: Enter a word: SNOPAWR WEOM DWWN

Output: NEED MORE WEAPONS

แบบฝกทกษะท 8.4 เรอง คาสงวนซา foreach

Page 21: โปรแกรมแบบวนซํ้า (Loop)computer.bps.in.th/suteerat/images/cSharp2.pdf · 2013-12-17 · แบบฝึกทักษะ วิชาการเขียนโปรแกรมภาษา

แบบฝกทกษะ วชาการเขยนโปรแกรมภาษา

76

นกเรยนเลอกทาขอท.........วธคดกอนเขยนโปรแกรมมดงน

.............................................................................................................................................................................

.............................................................................................................................................................................

.............................................................................................................................................................................

.............................................................................................................................................................................

.............................................................................................................................................................................

.............................................................................................................................................................................

.............................................................................................................................................................................

.............................................................................................................................................................................

.............................................................................................................................................................................

.............................................................................................................................................................................

รหสคาสงของโปรแกรมทนกเรยนเลอกทา มดงน

.............................................................................................................................................................................

.............................................................................................................................................................................

.............................................................................................................................................................................

.............................................................................................................................................................................

.............................................................................................................................................................................

.............................................................................................................................................................................

.............................................................................................................................................................................

.............................................................................................................................................................................

.............................................................................................................................................................................

.............................................................................................................................................................................

.............................................................................................................................................................................

.............................................................................................................................................................................

.............................................................................................................................................................................

.............................................................................................................................................................................

.............................................................................................................................................................................

.............................................................................................................................................................................

.............................................................................................................................................................................

.............................................................................................................................................................................

Page 22: โปรแกรมแบบวนซํ้า (Loop)computer.bps.in.th/suteerat/images/cSharp2.pdf · 2013-12-17 · แบบฝึกทักษะ วิชาการเขียนโปรแกรมภาษา

แบบฝกทกษะ วชาการเขยนโปรแกรมภาษา

77

การใชคาสงวนซาแบบซบซอน

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

แกปญหาได นอกจากนนเรายงสามารถนาคาสงวนซ าทง 4 คาสงไดแก for, while, do while และ foreach มาใชรวมกน

ไดอกดวย

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

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

แฟกทอเรยลไดอก จนกวาจะปอนเลข 0 หรอจานวนเตมลบ จงจะจบการทางานของโปรแกรม

(ฟนความจาดานแฟกทอเรยล เชน 5! = 5 x 4 x 3 x 2 x 1=120)

ตวอยางท 7

โปรแกรมหาคาแฟกทอเรยล

while (true) { Console.Write("Enter a number for process to factorial:"); int Number = int.Parse(Console.ReadLine()); if (Number <= 0) break; double factorial=Number; for (int i = Number-1; i >= 1; i--) { factorial = factorial * i; } Console.WriteLine("{0}! = {1} ",Number, factorial); } Console.WriteLine("Thank you."); Console.ReadKey();

Output: Enter a number for process to factorial: 5 5! = 120

Enter a number for process to factorial: 10 10! = 3628800

Enter a number for process to factorial: 0 Thank you.

Page 23: โปรแกรมแบบวนซํ้า (Loop)computer.bps.in.th/suteerat/images/cSharp2.pdf · 2013-12-17 · แบบฝึกทักษะ วิชาการเขียนโปรแกรมภาษา

แบบฝกทกษะ วชาการเขยนโปรแกรมภาษา

78

การใชคาสงวนซาแสดงรปรางแบบตางๆ

เราสามารถใชคาสงวนซ าเขยนโปรแกรมแสดงภาพเปนรปรางตางๆ เชน ตวอยางตอไปน เปนการแสดงรป

สามเหลยม โดยในแนวแกน X จะคอยๆ ลดจานวนเครองหมาย * ลงบรรทดละ 1

ตวอยางท 8

โปรแกรมแสดงรปภาพสามเหลยม

int column = 10; for (int y = 1; y <= 10; y++) { for (int x = 1; x <= column; x++) { Console.Write("*"); } Console.WriteLine(); column --; } Console.ReadKey();

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

สรางรปภเขา 1 ลก และภเขา 2 รป นกเรยนดตวอยางตอไปน

ตวอยางท 9

โปรแกรมแสดงรปภเขา 1 ลก

int column1 = 1, column2 = 9; for (int y = 1; y <= 10; y++) { for (int space = 1; space <= column2; space++) { Console.Write(" "); } column2--; for (int x = 1; x <= column1; x++) { Console.Write("*"); } Console.WriteLine(); column1 += 2; } Console.ReadKey();

Output: * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *

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

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

Output: * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *

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

Page 24: โปรแกรมแบบวนซํ้า (Loop)computer.bps.in.th/suteerat/images/cSharp2.pdf · 2013-12-17 · แบบฝึกทักษะ วิชาการเขียนโปรแกรมภาษา

แบบฝกทกษะ วชาการเขยนโปรแกรมภาษา

79

ตวอยางท 10

โปรแกรมแสดงรปภเขา 2 ลก

int column1 = 1, column2 = 9, column3 = 18; for (int y = 1; y <= 10; y++) { for (int space = 1; space <= column2; space++) { Console.Write(" "); } column2--;

for (int x = 1; x <= column1; x++) { Console.Write("*"); }

for (int space = 1; space <= column3; space++) { Console.Write(" "); } column3 -= 2;

for (int x = 1; x <= column1; x++) { Console.Write("*"); }

Console.WriteLine(); column1 += 2; } Console.ReadKey();

Output: * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *

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

Page 25: โปรแกรมแบบวนซํ้า (Loop)computer.bps.in.th/suteerat/images/cSharp2.pdf · 2013-12-17 · แบบฝึกทักษะ วิชาการเขียนโปรแกรมภาษา

แบบฝกทกษะ วชาการเขยนโปรแกรมภาษา

80

ใหนกเรยนเลอกทาโจทยขอใดขอหนงตอไปนเพยง 1 ขอเทานน

1.จงเขยนโปรแกรมแสดงรปภาพโดยใชคาสงวนซ า โดยใหรปภาพมลกษณะดงน (7 คะแนน)

Output: * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *

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

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

2.จงเขยนโปรแกรมแสดงรปภาพโดยใชคาสงวนซ า โดยใหรปภาพมลกษณะดงน (10 คะแนน)

Output: * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *

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

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

แบบฝกทกษะท 8.5 เรอง คาสงวนซาแบบซบซอน

Page 26: โปรแกรมแบบวนซํ้า (Loop)computer.bps.in.th/suteerat/images/cSharp2.pdf · 2013-12-17 · แบบฝึกทักษะ วิชาการเขียนโปรแกรมภาษา

แบบฝกทกษะ วชาการเขยนโปรแกรมภาษา

81

นกเรยนเลอกทาขอท...................รหสคาสงของโปรแกรมทนกเรยนเลอกทา มดงน

.............................................................................................................................................................................

.............................................................................................................................................................................

.............................................................................................................................................................................

.............................................................................................................................................................................

.............................................................................................................................................................................

.............................................................................................................................................................................

.............................................................................................................................................................................

.............................................................................................................................................................................

.............................................................................................................................................................................

.............................................................................................................................................................................

.............................................................................................................................................................................

.............................................................................................................................................................................

.............................................................................................................................................................................

.............................................................................................................................................................................

.............................................................................................................................................................................

.............................................................................................................................................................................

.............................................................................................................................................................................

.............................................................................................................................................................................

.............................................................................................................................................................................

.............................................................................................................................................................................

.............................................................................................................................................................................

.............................................................................................................................................................................

.............................................................................................................................................................................

.............................................................................................................................................................................

.............................................................................................................................................................................

.............................................................................................................................................................................

.............................................................................................................................................................................

.............................................................................................................................................................................

.............................................................................................................................................................................

Page 27: โปรแกรมแบบวนซํ้า (Loop)computer.bps.in.th/suteerat/images/cSharp2.pdf · 2013-12-17 · แบบฝึกทักษะ วิชาการเขียนโปรแกรมภาษา

แบบฝกทกษะ วชาการเขยนโปรแกรมภาษา

82

บทท 9

ตวแปรชดหรอตวแปรอารเรย (Array)

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

A=1;

B=4;

A=A+B; // A=5

นนคอ คาของตวแปร A ไมสามารถจดเกบไดทง 1 และ 5 หมายความวา เมอตวแปร A มคาเปลยนไปเปน 5 คา

ของ A เดมทเปน 1 จะถกแทนทดวย 5 นนเอง

ปญหานทาใหเราจะตองประกาศตวแปรหลายรอยตวถาตองการจดเกบขอมลหลายรอยคา การประกาศตวแปร

มากมายขนาดนคงจะเปนปญหาไมนอยในการเขยนโปรแกรม ดงนนวธแกปญหานกคอการทาใหตวแปรเปนตวแปร

ชด หรอเรยกวาตวแปรอารเรย (Array) ซงมขอดคอ ตวแปรเพยงตวเดยว สามารถจดเกบขอมลไดหลายรอยหลายพนคา

เลยทเดยว ดตวอยางตอไปน

int[] n1 = new int[4] {2, 4, 6, 8}; int[] n2 = new int[] {2, 4, 6, 8}; int[] n3 = {2, 4, 6, 8};

ตวแปรทงสามตวลวนแตเปนตวแปรชนด int ทงสามตวมวธการประกาศตวแปรทแตกตางกน แตทงสามตว

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

ตวไดดงตอไปน

int[] n1 = new int[4] { 2, 4, 6, 8 }; int[] n2 = new int[] { 2, 4, 6, 8 }; int[] n3 = { 2, 4, 6, 8 }; Console.WriteLine("Value of n1"); foreach (int i in n1) { Console.WriteLine(i); } Console.WriteLine("Value of n2"); foreach (int i in n2) { Console.WriteLine(i); } Console.WriteLine("Value of n3"); foreach (int i in n3) { Console.WriteLine(i); } Console.ReadKey();

Output: Value of n1 2 4 6 8 Value of n2 2 4 6 8 Value of n3 2 4 6 8

Page 28: โปรแกรมแบบวนซํ้า (Loop)computer.bps.in.th/suteerat/images/cSharp2.pdf · 2013-12-17 · แบบฝึกทักษะ วิชาการเขียนโปรแกรมภาษา

แบบฝกทกษะ วชาการเขยนโปรแกรมภาษา

83

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

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

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

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

string[] s1 = new string[100]; for (int i = 0; i < 100; i++) { s1[i] = "Pointer " + i; } foreach (string s in s1) { Console.WriteLine(s); } Console.ReadKey();

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

เราประกาศตวแปรอารเรยชอ S1 ใหเปนชนดสตรง มสมาชก 100 ตว สมาชกลาดบแรกของอารเรยกาหนดใหเปนลาดบ

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

จงตองเรมจากลาดบท 0 คอใหคาสงวนซ า for (int i = 0; i < 100; i++) หมายถงการวนซ าจาก 0-99 นนเอง จากนน

เราใชความสามารถของคาสงวนซ า foreach แสดงสมาชกทงหมดออกมาใหเหน ดงผลลพธทแสดงไวในกรอบ

หมายเหต: การประกาศตวแปรอารเรยแบบไมกาหนดคา ประกาศไดแบบเดยวคอแบบในตวอยางทผานมา

เมอตวแปรอารเรยมลาดบหรอตวช (Pointer) ประจาตว ดงนนการทางานกบตวแปรอารเรยเราจงสามารถ

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

int[] n1 = new int[4] { 2, 4, 6, 8 }; int A = 10; Console.WriteLine("Result={0}",A+n1[3]); Console.ReadKey(); Output: Result=18

เราใหตวแปร A ซงมคาเทากบ 10 บวกกบตวแปรอารเรย n1 ตวชท 3 เมอเราเรมนบจาก 0 ไปจนถง 3 คาของตว

แปร n1[3] จงไดแก 8 นนเอง เมอนามาบวกกบ 10 ผลลพธทไดจงเทากบ 18

การกาหนดตวชตวแปรอารเรยนนจะตองกาหนดใหอยในขอบเขตของสมาชก จากตวอยางถาเราชไปท n1[4]

โปรแกรมจะแจงขอผดพลาดทนท ดวยขอความวา “Index was outside the bounds of the array.” เพราะสมาชกของ n1

มสมาชกตงแตลาดบท 0-3 เทานน ตวชลาดบท 4 จงเปนลาดบทอยนอกขอบเขตของอารเรยนนเอง

ตวแปรอารเรยทเราไดทราบมาขางตนเราเรยกวา ตวแปรอารเรย 1 มต ซงอารเรย 2 มตเราจะไมกลาวถง

Output: Pointer 0 Pointer 1 Pointer 2 … … … Pointer 99

Page 29: โปรแกรมแบบวนซํ้า (Loop)computer.bps.in.th/suteerat/images/cSharp2.pdf · 2013-12-17 · แบบฝึกทักษะ วิชาการเขียนโปรแกรมภาษา

แบบฝกทกษะ วชาการเขยนโปรแกรมภาษา

84

แนวทางการประยกตใชตวแปรอารเรย

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

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

โปรแกรมสลบคาตวแปรเสยกอน ดงตวอยางตอไปน

ตวอยางท 1

int A = 5, B = 7, C;

โปรแกรมสลบคาตวแปร

C = A; A = B; B = C; Console.WriteLine("A={0} B={1}", A, B); Console.ReadKey(); Output: A=7 B=5

การสลบคาตวแปร เราไมสามารถสลบการโดยตรงได เพราะถาให

A=B; // A=7

B=A; // B=7

คาของตวแปร A และ B กจะเทากน ดงนนจงตองใชตวแปร C มาเกบคาของตวแปร A เอาไวกอน (C=A) เมอ

ให A=B แลว จงให B=C ทจดเกบคาของ A ไวกอนแลวนนเอง

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

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

นอยไปมาก โดยไมตองแสดงเลข 0

ตวอยางท 2

โปรแกรมเรยงลาดบตวเลขจากนอยไปมาก

int[] num = new int[100]; // ประกาศตวแปรแบบอารเรย (aray) 100 ตว int i=0; // ขนท 1 วนซารบคาตวเลขไปเรอยๆ จนกวาจะปอนเลข 0 ใหจบการวนซา while (true) { Console.Write("Enter a number:"); num[i] = int.Parse(Console.ReadLine()); if (num[i] == 0) break; i++; } (โปรแกรมมตอหนาถดไป)

Page 30: โปรแกรมแบบวนซํ้า (Loop)computer.bps.in.th/suteerat/images/cSharp2.pdf · 2013-12-17 · แบบฝึกทักษะ วิชาการเขียนโปรแกรมภาษา

แบบฝกทกษะ วชาการเขยนโปรแกรมภาษา

85

// ขนท 2 นาตวเลขทรบไดมาดาเนนการจดเรยง ดวยการวนซา 2 ชน int xNum; for (int j = 0; j <= i; j++) { for (int k = 0; k <= j; k++) { if (num[k] > num[j]) { xNum = num[j]; num[j] = num[k]; num[k] = xNum; } } } // ขนท 3 วนซาแสดงตวเลขทเรยงเรยบรอยแลว เรมตงแตลาดบท 1 เพราะลาดบท 0 คาเปน 0 for (int j = 1; j <= i; j++) // j วนจาก 1 ถง i { Console.WriteLine(num[j]); } Console.ReadKey(); Output: Enter a number:5 Enter a number:9 Enter a number:1 Enter a number:8 Enter a number:0 1 5 8 9

จะเหนวาการจดเรยงตวเลขจากตวอยางขางตนมความซบซอนมาก ภาษาซชารปจงไดจดเตรยมคลาสอารเรย

สาหรบการจดเรยง โดยเราจะเปลยนคาสงในขนท 2 ใหมดงน

// ขนท 2 นาตวเลขทรบไดมาดาเนนการจดเรยง ดวยคลาส Array Array.Sort(num); //หลงจากจดเรยงแลว สามารถปรบใหเปนเรยงลาดบอารเรยจากมากไปนอยได ดงน Array.Reverse(X);

Page 31: โปรแกรมแบบวนซํ้า (Loop)computer.bps.in.th/suteerat/images/cSharp2.pdf · 2013-12-17 · แบบฝึกทักษะ วิชาการเขียนโปรแกรมภาษา

แบบฝกทกษะ วชาการเขยนโปรแกรมภาษา

86

จดการขอมลในอารเรยงายๆ ดวยอารเรยลสต (Array List)

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

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

อารเรย ดงนนภาษา C# จงไดออกแบบตวแปรอารเรยอกรปแบบหนงเรยกวา อารเรยลสต (Array List) โดยกอนทเราจะ

สามารถใชอารเรยลสตไดนนเราจะตองเรยกใชเนมสเปซ System.Collections เสยกอน

ตวอยางท 1

การประกาศตวแปรและการเพมสมาชกในอารเรยลสต

using System; using System.Collections; //ตองใชเนมสเปซนจงจะใชอารเรยลสตได class Program { static void Main(string[] args) { ArrayList list = new ArrayList(); list.Add(3); list.Add(5); list.Add(8);

foreach (int i in list) { Console.WriteLine(i); } Console.ReadKey(); } } Output: 3 5 8

ตวอยางท 2

ArrayList slist = new ArrayList();

การแทรกและการลบสมาชกในอารเรยลสต

slist.Add("Dog"); slist.Add("Cat"); slist.Add("Ant"); slist.RemoveAt(1); // ลบสมาชกในลาดบท 1 คงเหลอ [Dog,Ant] slist.Insert(0, "Monkey"); // แทรกสมาชกใหมในลาดบท 0 " [Monkey,Dog,Ant] slist.RemoveRange(0, 2); // ลบสมาชกตงแตลาดบท 0 มา 2 ตว " [Ant] foreach (string value in slist) { Console.WriteLine(value); } Console.ReadKey();

Page 32: โปรแกรมแบบวนซํ้า (Loop)computer.bps.in.th/suteerat/images/cSharp2.pdf · 2013-12-17 · แบบฝึกทักษะ วิชาการเขียนโปรแกรมภาษา

แบบฝกทกษะ วชาการเขยนโปรแกรมภาษา

87

ตวอยางท 3

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

ArrayList list = new ArrayList(); list.Add("fish"); list.Add("amphibian"); list.Add("bird"); list.Add("plant"); ArrayList range = list.GetRange(2, 2); // ดงเรมจากลาดบท 2 มา 2 ลาดบ foreach (string value in range) { Console.WriteLine(value); } Console.ReadKey(); Output: bird plant

ตวอยางท 3

ArrayList list = new ArrayList();

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

list.Add(6); list.Add(3); list.Add(8); list.Add(2); list.Sort(); foreach (int value in list) { Console.WriteLine(value); } Console.WriteLine("Index of 6 is {0}",list.BinarySearch(6)); Console.ReadKey(); Output: 2 3 6 8 Index of 6 is 2

Page 33: โปรแกรมแบบวนซํ้า (Loop)computer.bps.in.th/suteerat/images/cSharp2.pdf · 2013-12-17 · แบบฝึกทักษะ วิชาการเขียนโปรแกรมภาษา

แบบฝกทกษะ วชาการเขยนโปรแกรมภาษา

88

การใช อารเรยลสตมาแกปญหาโปรแกรมทซบซอน

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

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

ตวอยางท 4

โปรแกรมจดเรยงลาดบตวเลข

//โปรแกรมใหมท ArrayList // อยาลมเรยกใช using System.Collections; ArrayList NumList=new ArrayList(); while (true) { Console.Write("Enter a number: "); int number = int.Parse(Console.ReadLine()); if (number == 0) break; NumList.Add(number); } NumList.Sort(); foreach (int n in NumList) { Console.WriteLine(n); } Console.ReadKey();

Output: Enter a number:5 Enter a number:9 Enter a number:1 Enter a number:8 Enter a number:0 1 5 8 9

นกเรยนจะเหนวาโปรแกรมแบบใหมสามารถเขยน

โปรแกรมไดงายกวามาก

//โปรแกรมเกาทใช Array int[] num = new int[100]; int i=0; while (true) { Console.Write("Enter a number:"); num[i] =int.Parse(Console.ReadLine()); if (num[i] == 0) break; i++; } int xNum; for (int j = 0; j <= i; j++) { for (int k = 0; k <= j; k++) { if (num[k] > num[j]) { xNum = num[j]; num[j] = num[k]; num[k] = xNum; } } } for (int j = 1; j <= i; j++) // j วนจาก 1 ถง i { Console.WriteLine(num[j]); } Console.ReadKey(); Output: Enter a number:5 Enter a number:9 Enter a number:1 Enter a number:8 Enter a number:0 1 5 8 9

Page 34: โปรแกรมแบบวนซํ้า (Loop)computer.bps.in.th/suteerat/images/cSharp2.pdf · 2013-12-17 · แบบฝึกทักษะ วิชาการเขียนโปรแกรมภาษา

แบบฝกทกษะ วชาการเขยนโปรแกรมภาษา

89

บทท 10

การสรางเมธอด (ฟงกชน)

โปรแกรมภาษา C# ไดเตรยมเมธอดไวใหผเขยนโปรแกรมเรยกมาใชไดอยางมากมายแตถงกระนนกยงไมอาจ

ตอบสนองความตองการของโปรแกรมเมอรไดทงหมด โปรแกรม C# จงไดเปดโอกาสใหโปรแกรมเมอรสามารถสราง

เมธอดขนมาใชงานไดดวยตนเอง นกเรยนดตวอยางโปรแกรมตอไปน

using System; class Program { //เมธอดหลกท C# สรางใหเราอตโนมต static void Main(string[] args) { String name = "Suteerat Thipaksorn"; MyMethod(name); Console.ReadKey(); }

//เมธอดทเราสรางขนเอง static void MyMethod(string name) { Console.WriteLine("Hello! "+name); } }

Output: Hello! Suteerat Thipaksorn

คาอธบาย:

โปรแกรมขางตนเปนโปรแกรมทมการสรางเมธอดชอ MyMethod(string name) สงทอยในวงเลบของ

เมธอดนเรยกวา พารามเตอร การประกาศตวแปรและชนดขอมลของพารามเตอรใชหลกเดยวกนกบการประกาศตวแปร

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

ของขอมลตองเปนชนดเดยวกนเทานน (ในตวอยางเปนสตรงเหมอนกน)

การเรยกใชเมธอดนนเราจะเรยกใช ณ จดใดกได หมายความวาจะเรยกใชจากเมธอดหลก หรอเมธอดยอยทเรา

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

ใหตรงพารามเตอรของเมธอดทเรยกใช MyMethod(name)

หมายเหต เมธอดอาจจะไมมพารามเตอรกได ถาเมธอดไมมพารามเตอรการเรยกใชกจะไมระบอากวเมนต เชน

เมธอด Console.Readkey() เปนเมธอดทไมมพารามเตอร

อากวเมนท (arguments)

พารามเตอร (parameters)

จดเรยกใชเมธอด

Page 35: โปรแกรมแบบวนซํ้า (Loop)computer.bps.in.th/suteerat/images/cSharp2.pdf · 2013-12-17 · แบบฝึกทักษะ วิชาการเขียนโปรแกรมภาษา

แบบฝกทกษะ วชาการเขยนโปรแกรมภาษา

90

เมธอดทไมมการสงคากลบ

การจดทาเมธอดจากตวอยางทผานมา ไดแกเมธอด static void MyMethod(string name) จดวาเปนเมธอด

ทไมมการสงคากลบ ใหสงเกตทสวนประกาศเมธอดจะมคาวา void (หมายถง ไมมผล หรอวางเปลา) ปรากฏอย การท

เมธอดไมสงคา (ขอมล) กลบแสดงวามการดาเนนการอยางใดอยางหนงสาเรจภายในเมธอดนนๆ เลย จากตวอยาง

ขางตนเปนการสงใหแสดงคาวา “Hello!” บวกดวยตวแปร name ทรบคาเขามาจากจดเรยกใชนนเอง

เมธอดทมการสงคากลบ

นกเรยนดตวอยางโปรแกรมเมธอดทมการสงคากลบดงตอไปน

static void Main(string[] args) { while (true) { Console.Clear(); Console.WriteLine(" Menu "); Console.WriteLine("-----------------------------------------"); Console.WriteLine(" For addition (+) press 1"); Console.WriteLine(" For subtract (-) press 2"); Console.WriteLine(" For multiply (*) press 3"); Console.WriteLine(" For division (/) press 4"); Console.WriteLine(" For exit press other key."); Console.WriteLine("-----------------------------------------"); Console.Write("Please choose a choice to continue :"); string choice = Console.ReadLine(); if (choice != "1" && choice != "2" && choice != "3" && choice != "4") break; Console.Write("Enter first number:"); Double num1 = double.Parse(Console.ReadLine()); Console.Write("Enter last number:"); double num2 = double.Parse(Console.ReadLine()); double result = Calculation(choice, num1, num2); Console.WriteLine("Rusult = {0:#,#.##}", result); Console.ReadKey(); } } // เมธอดทเราสรางขนเอง static double Calculation(string _choice, double _num1, double _num2) { if (_choice == "1") return _num1 + _num2; else if (_choice == "2") return _num1 - _num2; else if (_choice == "3") return _num1 * _num2; else return _num1 / _num2; }

จดเรยกใชเมธอด

Page 36: โปรแกรมแบบวนซํ้า (Loop)computer.bps.in.th/suteerat/images/cSharp2.pdf · 2013-12-17 · แบบฝึกทักษะ วิชาการเขียนโปรแกรมภาษา

แบบฝกทกษะ วชาการเขยนโปรแกรมภาษา

91

คาอธบาย:

while (true)

เปนคาสงวนซ าแบบไมรจบ

Console.Clear();

เปนคาสงลางจอภาพ

double result = Calculation(choice, num1, num2); //เรยกใชเมธอด

เปนคาสงเรยกใชเมธอดชอ Calculation โดยสงอากวเมนตเขาไป 3 ตว คอ choice, num1 และ num2 และรบ

คาทถกสงกลบมาจากเมธอดไวทตวแปร result

static double Calculation(string _choice, double _num1, double _num2) { if (_choice == "1") return _num1 + _num2; else if (_choice == "2") return _num1 - _num2; else if (_choice == "3") return _num1 * _num2; else return _num1 / _num2; }

เปนเมธอดทเราสรางขน เปนชนด double มพารามเตอร 3 ตว ไดแก _choice, num1 และ num2 ซงจะมจานวน

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

ของพารามเตอรไมเหมอนกบชอของอากวเมนททเรารบเขามากได

เมอประมวลผลแลวกจะมการสงคากลบโดยใชคาสง return คาทคานวณไดกจะถกสงกลบไปยงเมธอดเมนใน

จดทเรยกใชเพอนาไปดาเนนการอยางอนตอไป

เมธอดทมการสงคากลบจะตองประกาศชนดของเมธอดเปนชนดขอมลใดกได เชน int double string เปนตน

แตถาไมมการสงคากลบใหประกาศเปนชนด void แทน

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

สองคาสงอยางชดเจน ดงน

จดเรยกใช double result = Calculation(choice, num1, num2);

การประกาศเมธอด static double Calculation(string _choice, double _num1, double _num2)