คำสั่งควบคุม ภาษาซี 5

ภาษา c

สวัสดีครับทุกท่านบทความนี้ยังอยู่ในเรื่อง คำสั่งควบคุมภาษาซี เช่นเดิมนะครับ ซึ่งเป็นบทความที่ต่อจากบทความ คำสั่งควบคุม ภาษาซี 4 นะครับในบทนี้จะกล่าวถึงการใช้ คำสั่งทำซ้ำ(Iteration Statement) หรือที่รู้จักกันในชืื่อ วนลูป(loop) นะครับซึ่งคำสั่งการทำซ้ำในภาษาซี นั้น จะมีอยู่ 3 ประเภทเรามาดู ประเภทที่ 1 ก่อน คือ  คำสั่งทำซ้ำ for ( for- loop)

คำสั่งทำซ้ำ for

     

   for(กำหนดค่าเริ่มต้นให้กับตัวแปร ; เงื่อนไขที่ต้องการตรวจสอบ ; ปรับค่าของตัวแปร){
           คำสั่งที่ 1;
      }
      คำสั่งที่ 2;

รูปแบบ
     

คำสั่งนี้ประกอบด้วย 3 ส่วนคือ
1.ส่วนกำหนดค่าเริ่มต้นให้กับตัวแปร ส่วนนี้เป็นการกำหนดค่าเริ่มต้นให้กับตัวแปรที่ต้องการใช้งานใน ลูป โดยปกติเราจะใช้ตัวแปรนี้เป็นตัวควบคุมลูป
2.ส่วนเงื่อนไขที่ต้องการตรวจสอบ เป็นนิพจน์ตรรกะที่ใช้เป็นเงื่อนไขในการทำงานของลูปโดยหากเงื่อนไขนี้เป็นจริงก็ยังคงทำงานในลูปต่อไป แต่หากเงื่อนไขเป็นเท็จจะออกจากการทำงานของลูปไปทำคำสั่งที่อยู่นอกลูปต่อไป
3.ส่วนปรับค่าของตัวแปร เป็นส่วนที่ใช้ปรับค่าของตัวแปรที่ใช้ในลูป

การทำงานของ for นั้น จะเริ่มจากส่วนแรกคือกำหนดค่าเริ่มต้นให้กับตัวแปรก่อน จากนั้นจะไปตรวจสอบเงื่อนไขในส่วนที่ 2 ว่าเป็นจริงหรือไม่ ถ้าเป็นจริงก็จะเข้าสู่การทำงานของลูป (ถ้าเป็นเท็จจะไม่เข้าสู่ลูป แต่จะไปทำคำสั่งต่อไปที่อยู่ถัดจากลูปเลย) และเมื่อทำงานตามคำสั่งทั้งหมดที่อยู่ภายในลูปแล้วก็จะเข้าไปทำงานในส่วนที่3 ของคำสั่ง for เพื่อปรับค่าของตัวแปร และทำการตรวจสอบเงื่อนไขใหม่อีกครั้ง ซึ่งท่าเงื่อนไขเป็นจริงก็ยังคงอยู่ใน ลูปต่อไป และจะทำอย่างนี้เรื่อยๆจนกระทั่งผลการตรวจสอบเงื่อนไขเป็นเท็จจึงค่อยออกจาก ลูปไปทำคำสั่งที่อยู่นอกลูปต่อไป

เรามาดูแผนผังความคิดแสดงการทำงานของคำสั่ง for กันครับ

ภาษา c

โฟลวชาร์ตแสดงการทำงานของ for

เรามาดูตัวอย่างโปรแกรมแสดงการทำงาน ของ for กันหน่อยนะครับ
1:   #include<stdio.h>
2:   #include<conio.h>
4:    
5:    
5:      main(){
6:        int i,j ;
7:        clrscr();
8:        for(i=1,j=1;i<=10;i++) {
9:           if(i==4) {
10:                 j++;
11:                 continue;
12:                 printf("this is round %d\n",i);
13:          }
14:         else {
15:               printf("This is round %d\n",j);
16:               j++;
17:         }
18:          if(i==5) break;
19:         }
20:          printf("Loop perform % d round \n",i);
21:          getch();
22:          }

 
ผลลัพธ์โปรแกรม
 
     This is round 1
     This is round 2
     This is round 3
     This is round 5
     Loop perform 5 rounds

อธิบายโปรแกรม บรรทัดที่ 2 ได้ทำการ include ไฟล์ conio.h ซึ่งเป็นเฮดเดอร์ไฟล์ของภาษาซีเข้ามาในโปรแกรมเนื่องจากในบรรทัดที่ 7 มีการเรียกใช้ฟังก์ชั่น clrscr() เพื่อเคลียร์หน้าจอ(Clear screen)ให้ว่าง และ บรรทัดที่ 21 มีการเรียกใช้ฟังก์ชั่น getch() ซึ่งทั้งสองฟังก์ชั่นมีการประกาศอยู่ในเฮดเดอร์ไฟล์ conio.h จึงจำเป็นต้องรวม       เฮดเดอร์ไฟล์นี้เข้ามาในโปรแกรม

จากผลลัพธ์โปรแกรม เราจะเห็นว่าการทำงานรอบที่ 4 นั้นไม่ได้แสดง”this is round 4” ออกมาทางจอภาพวซึ่งเป็นผลมาจากคำสั่ง continue ในบรรทัดที่ 11 คือถ้าพบคำสั่ง continue โปรแกรมจะไม่ทำงานต่อจนจบ แต่จะวนกลับขึ้นไปทำงานในรอบการทำงานใหม่ทันที และ เรายังเห็นอีกอย่างหนึ่งว่ามันทำงานแค่ 5 รอบเท่านั้นทั้งที่กำหนดไว้ว่า 10 รอบ(คือให้ทำตั้งแต่ i=1 และหยุดทำเมื่อ i มากกว่า 10 โดยเพิ่มค่า i ขึ้นรอบละ 1)ที่เป็นเช่นนี้เพราะ คำสั่ง break ในบรรทัดที่ 18 นั้นเองโดยในบรรทัดนี้คือ ในรอบการทำงานรอบที่ 5 เมื่อพบคำสั่ง break โปรแกรมจะออกจากรูปทันที

บรรทัดที่ 21 ทำการใส่ฟังก์ชั่น getch();ไวในโปรแกรม เนื่องจากต้องการให้โปรแกรมหยุดรอ การกด คียใดๆก่อนที่จะจบการทำงานของโปรแกรมเพื่อให้เราได้เห็ฯผลลัพธ์ที่แสดงบนหน้าจอ

เรามาดูอีกตัวอย่างนะครับ เป็น ตัวอย่างสุดฮิต โปรแกรมสูตรคูณแม่ 5 ง่ายดี

1:   #include<stdio.h>
2:   #include<conio.h>
4:    
5:    
5:      main(){
6:        int i ;
7:        clrscr();
8:        for(i=1 ;i<=12;i++) {
9:          
10:            printf("\t 5*%d \t = \t %d\n",i,5*i);
11:              
12:               }
13:         getch();
14:         }

 
ผลลัพธ์โปรแกรม
 
     5 * 1   = 5
     5 * 2   = 10
     5 * 3   = 15
     5 * 4   = 20
     5 * 5   = 25
     5 * 6   = 30
     5 * 7   = 35
     5 * 8   = 40
     5 * 9   = 45
     5 * 10 = 50
     5 * 11 = 55
     5 * 12 = 60

เราก็พอจะรู้จักกับ คำสั่งทำซ้ำ for กันพอประมาณแล้วนะครับ คราวนี้เรามาศึกษาการใช้ คำสั่งทำซ้ำ for อีกรูปแบบ ที่เรียกกันว่า nested for หรือ คำสั่งทำซ้ำ for ซ้อน for

คำสั่งทำซ้ำ for ซ้อน for(nested for) เป็นการนำคำสั่งทำซ้ำ for หลายๆชุดมาทำงานซ้อนกัน ซึ่งการกระทำจะเริ่มจากลูป for นอก แล้วไปสู่การทำงานของลูป for ใน แล้วลูป for ในจะทำงานให้เสร็จสมบูรณ์ก่อนแล้วจึงกลับออกไปทำ ลูป for นอกอีกครั้ง ซึ่งจะทำงานอย่างนี้ไปเรื่อยๆจนกว่าเงื่อนไขของลูป นอกจะเป็น เท็จ

เรามาดูตัวอย่างโปรแกรมการทำงานของ nested for กันดีกว่าครับ

1:   #include<stdio.h>
2:   #include<conio.h>
3:    
4:    
5:      main(){
6:        int i,j ;
7:        clrscr();
8:         for(i=1;i<=2;i++) {
9:           printf("i = %d\n",i);
10:             for(j=1;j<=i;j++) {
11:                printf(" j = %d\n",j);
12:              } 
13:          printf("\n");
14:            }
15:              getch();
16:           }

 
ผลลัพธ์โปรแกรม
 
     i = 1
     j = 1
    
     i = 2
     j = 1
     j = 2

อธิบายโปรแกรม  จากผลลัพธ์จะเห็นได้ว่าการทำงานในแต่ละรอบของลูป for ชั้นนอกนั้นจะต้องเข้ามาทำงานในลูป for ชั้นในให้เสร็จเรียบร้อยเสียก่อน จึงจะกลับไปทำงานในลูปนอกในครั้งต่อไป หากสังเกตุผลลัพธ์โปรแกรมนี้ดีๆ ก็จะเห็นได้ว่าแต่ละครั้งจะมีการพิมค่า i (ลูปนอก) จะมีการพิมพ์ค่าของ j ตั้งแต่ต้นจนจบลูป (ลูปใน) แทรกอยู่ด้วย

ลองเอาโจทย์เล็กน้อยๆจากผู้เขียนไปลองทำดูนะครับ โจทย์มีอยู่ว่า

จงลองเขียนโปรแกรมที่ใช้หาตัวเลขในช่วง 1 ถึง 100 ที่เป็นจำนวนเฉพาะ (prime number)โดยใช้ nested for นะครับ โดยจะต้องแสดงตัวเลข บรรทัดละ 5 ตัวเท่านั้น

เฉลย

สุดท้ายนี้หวังว่าบทความนี้จะช่วยให้ทุกท่านมีความเข้าใจเกียวกับ for loop หรือ คำสั่งทำซ้ำ for และ nested for ไม่มากก็น้อยนะครับ ผมก็ขอจบบทความนี้ไว้เพียงแค่นี้ ไว้มาต่อ กันที่บทความ คำสั่งควบคุม ภาษาซี 6 นะครับ จะกล่าวเกียวกับเรื่อง คำสั่งทำซ้ำ while หรือ while loop นะครับ

0 ความคิดเห็น:

แสดงความคิดเห็น