หน่วยที่ 5 โปรแกรมแบบวนรอบทำซ้ำ

หน่วยที่ 5 โปรแกรมแบบวนรอบทำซ้ำ   (เอกสารประกอบการสอน

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

          สรุปการวนรอบซ้ำเป็นการสั่งให้วนรอบทำงานซ้ำคำสั่งเดิม โดยมีการกำหนดเงื่อนไขเพื่อให้โปรแกรมวนรอบทำงาน ดังนั้นการวนซ้ำในทางภาษาคอมพิวเตอร์ คือ การทำคำสั่งหรือชุดคำสั่งนั้นซ้ำกันหลายๆครั้ง

          ในภาษา C มีการใช้คำสั่งการวนรอบ หรือ การวนลูป (Loop)  ด้วย while, do-while และ for

  • while คือ วนรอบหากเงื่อนไขเป็นจริง (ตรวจสอบก่อนทำตามคำสั่ง - เช็คก่อนทำ)
  • do-while คือ รอบแรกจะทำก่อนเสมอแล้วจึงวนรอบหากเงื่อนไขเป็นจริง (ทำตามคำสั่งก่อนจึงตรวจสอบ - ทำก่อนเช็ค)
  • for คือ กำหนดจำนวนรอบที่แน่นอนได้ (การเลือกใช้คำสั่ง for เมื่อทราบจำนวนการวนรอบที่แน่นอน)

หมายเหตุ ข้อสังเกตของ while และ do - while นิยมใช้กับการทำงานที่เราไม่รู้จำนวนครั้งที่แน่นอน การวนรอบซ้ำ (loop) รับค่าจนกว่าจะได้ค่าที่ต้องการ วนรอบซ้ำ (loop) คำนวณค่าจนกว่าผลลัพธ์มีค่าเท่ากับศูนย์ คำสั่งที่อยู่ในการวนรอบ (loop) ต้องส่งผลให้เงื่อนไขที่ตรวจสอบมีโอกาสเป็นเท็จจึงจะสามารถออกจากการวนรอบ (loop) ได้ และคำสั่งที่อยู่ในการวนรอบ (loop) ต้องส่งผลกระทบต่อตัวแปรหรือค่าที่นำมาเป็นเงื่อนไขในการออกจากการวนรอบ (loop)


คำสั่ง while วนรอบหากเงื่อนไขเป็นจริง

          คำสั่ง while เป็นคำสั่งสำหรับการควบคุมทิศทางแบบวนรอบ โดยจะเริ่มต้นทำงานจากการตรวจสอบเงื่อนไข (condition)  (เงื่อนไข condition : หมายถึงเงื่อนไขที่ต้องการให้คอมพิวเตอร์ตัดสินใจ) ถ้าเป็นจริงจะทำงานตามคำสั่งของ while  เมื่อเสร็จแล้วก็จะวนกลับไปตรวจสอบเงื่อนไขใหม่ เป็นเช่นนี้ไปเรื่อยๆ จนกว่าเงื่อนไขจะไม่เป็นจริงจึงจะหลุดออกจากการทำงาน      

          รูปแบบคำสั่ง * ตรวจสอบเงื่อนไขให้เป็นจริงก่อนแล้วจึงทำ

          while( เงื่อนไข )

          {

          คำสั่ง 1 ;

          คำสั่ง 2 ;

          คำสั่งเพิ่มค่าหรือลดค่า ;

          }

          ตัวอย่างโปรแกรม วนรอบแสดงตัวอักษรจากแป้นพิมพ์ออกจอภาพ

          #include <stdio.h>

          void main()
            {       char  ch;
                     ch = getch( );
                     while(ch  != 'q')
                      {
                        printf("\n%c", ch);
                        ch = getch( );
                      }
            }

          ตัวอย่างโปรแกรม แสดงตัวเลขค่ารับเข้าระหว่าง 100 ถึง 1

#include<stdio.h>
int main(void)
{
system("cls");
int  num;
int  lineCount;
          printf("Enter an integer between 1 and 100:");
          scanf("%d",&num);
                    if(num>100)
                              num=100;
                    lineCount= 0;
          while(num>0)
          {
                    if(lineCount<10)
                              lineCount++;
                    else
                    {
                              printf("\n");
                              lineCount=1;
                    }
          
          printf("%4d",num--);

          }
getch();
return 0;
}

 


คำสั่ง do-while วนรอบหากเงื่อนไขเป็นจริง รอบแรกจะทำเสมอ

          คำสั่งวนรอบแบบ do - while จะทำงานตามคำสั่งของ do ก่อนหนึ่งรอบแล้วจึงเริ่มตรวจสอบเงื่อนไขที่ while เป็นครั้งแรกโดยถ้าเงื่อนไขเป็นจริงจะวนกลับไปทำงานอีกครั้ง แล้วกลับมาตรวจสอบเงื่อนไขใหม่ เป็นอย่างนี้ไปจนกว่าผลการตรวจสอบเงื่อนไขจะออกมาเป็นเท็จ ก็จะออกจาก loop ของ do-while

         สรุปคำสั่ง do -while เป็นอีกรูปแบบหนึ่งของคำสั่งที่ใช้ควบคุมโปรแกรม โดยให้โปรแกรมจะตรวจสอบเงื่อนไข หลังจากมีการเข้าไปทำในวงรอบ ของการทำซ้ำแล้วอย่างน้อย 1 รอบ ถ้าเงื่อนไขเป็นจริงก็จะโปรแกรมซ้ำอีกต่อไป จนกระทั่งเงื่อนไขที่เปรียบเทียบนั้นเป็นเท็จ จึงหยุดการทำซ้ำ 

          รูปแบบคำสั่ง * ทำก่อนแล้วจึงตรวจสอบเงื่อนไขเพื่อวนรอบกลับไปทำซ้ำ การใช้งาน ดังนี้

                    do
                    {
                      คำสั่งที่ 1;

                      คำสั่งที่ 2;      

                      คำสั่งเพิ่มค่าหรือลดค่า ;

                    }while (เงื่อนไข);
                     

          ตัวอย่างโปรแกรม ดังนี้ 

          #include <stdio.h>
          main()
          {
            int i;
            i=1;
                    do
                    {
                              printf("i = %d\n",i);
                              i++; //i=i+1
                    } while (i<=10);
            getch();
          }

          ตัวอย่างโปรแกรม วนรอบแสดงตัวอักษรจากแป้นพิมพ์ออกจอภาพ

          #include <stdio.h>

          void main()
            {     char  est;
                  do {
                       est = getch();
                       printf("\n%c", est);
                        }
                       while((est != 'a') && (est != 'b'));
            }

          // หมายเหตุ ตามแนวคิดทฤษฎี De Morgan's laws นั้น NOT (a  OR  b) เป็นเหมือนกับ NOT  a  AND  NOT  b.


คำสั่ง for  กำหนดจำนวนรอบที่แน่นอนได้

          คำสั่ง for เป็นคำสั่งที่ใช้สำหรับการควบคุมทิศทางของโปรแกรมให้ทำงานแบบวนรอบเช่นเดียวกับคำสั่ง while และ do-while

           สรุปการทำซ้ำแบบ for หรือ ลูป for จะเป็นการทำให้โปรแกรมทำซ้ำจนกว่าค่าตัวแปรจะครบตามที่ตั้งไว้ เริ่มแรกโปรแกรมจะกำหนดค่าเริ่มต้นให้กับตัวแปรเริ่มต้น (initialization) จากนั้นทำ คำสั่ง (statement)
          แต่คำสั่ง for มีรูปแบบการเรียกใช้งานที่แตกต่างไปจากคำสั่งอื่น 

รูปแบบ *เงื่อนไขที่ใช้ในการควบคุมการวนรอบ โดยถ้าเงื่อนไขเป็นจริงจะทำในการวนรอบ (loop) แต่ถ้าเงื่อนไขไม่จริงจะออกจากการวนรอบ (loop) ทันที

for (กำหนดค่าเริ่มต้นของตัวแปร ; กำหนดเงื่อนไข ; การเปลี่ยนค่าของตัวแปร)
   {
    คำสั่ง หรือ ชุดคำสั่งเมื่อเงื่อนไขเป็นจริง;
   }

ตัวอย่างอธิบาย เช่น for(a=0;a<5;a++) จะอธิบายได้ คือ

for (เริ่มต้นของตัวแปร a มีค่า =0 ; เงื่อนไข ถ้า a มีค่าน้อยกว่า 5 ; ค่าของ a จะเพิ่มที่ละ 1)

ดังนั้น ถ้า a มีค่าน้อยกว่า 5 เป็นจริง (ใช่) จะทำในการวนรอบ

และ ถ้า a มีค่าน้อยกว่า 5 เป็นเท็จ (ไม่ใช่) ออกจากการวนรอบ

ตัวอย่างโปรแกรม เรียงตัวอักษร a ถึงอักษร z ออกมาแสดงทางหน้าจอ

#include <stdio.h>
void main()
{
    char kchar ;
    for (kchar='a'; kchar<='z'; kchar++)
    printf("%c_", kchar);
}

ตัวอย่างโปรแกรม เพิ่มค่าจากตัวเลข 0 ที่ละ 2 จนถึง 100

#include<stdio.h>
main()
{
    int x,y;
    for (x=0,y=0; x+y<=100; x++,y++)
     printf("X+Y = %d\n", x+y);
}

ตัวอย่างโปรแกรม เรียงตัวเลขจากศูนย์ถึงตัวเลขที่รับเข้ามา

#include<stdio.h>
int main(void)
{
          int i;
          int limit;
          system("cls");
          printf("\nPlease enter the limit:");
          scanf("%d",&limit);
                    for (i=1;i<=limit;i++)
                              printf("\t%d\n",i);
          getch();
          return 0;
}

กฎของคำสั่ง for

กฎในการใช้คำสั่ง for มีดังนี้

  • ค่าที่เพิ่มขึ้นในแต่ละรอบของตัวแปรควบคุมนั้นจะเป็นเท่าไรก็ได้ เช่น for (x=0;x<=100;x=x+5)
  • ค่าที่เพิ่มขึ้นของตัวแปรควบคุมถูกกำหนดให้ลดลงได้
  • ตัวแปรควบคุมอาจเป็นชนิดตัวอักษรได้ (character) เช่น for (ch=‘a’; ch<=‘z’ ; ch++)
  • ตัวแปรควบคุมสามารถมีได้มากกว่า 1 ตัวแปร
  • ถ้าไม่มีส่วนของการเปลี่ยนค่าของตัวแปร ให้เพิ่มการเพิ่มค่าหรือลดค่าลงไปในการวนรอบเพื่อสร้างเงื่อนไขการออกจากการวนรอบ (loop)
  • ถ้ามีการละเลย (กำหนดค่าเริ่มต้นของตัวแปร ; กำหนดเงื่อนไข ; การเปลี่ยนค่าของตัวแปร) จะเป็นการสั่งให้ทำงานในวงจร for โดยไม่รู้จบก็ทำได้โดยใช้คำสั่ง break เข้ามาช่วย  เช่น for (;;) {  printf(“This loop will run forever \n”);  break;  }
  • คำสั่ง for สามารถมีคำสั่ง for ซ้อนอยู่ภายใต้ได้