วันศุกร์ที่ 2 มกราคม พ.ศ. 2558

คําสั่ง while

4. คําสั่ง while

        คําสั่ง while เปนคําสั่งวนซํ้า มักใชในกรณีที่ตองทํางานซํ้ากันหลาย ๆ ครั้ง โดยไมทราบจํานวนรอบ
ของการทําซํ้าที่แนนอน ตัวอยางเชน
        ตองการรับขอมูลเลขจํานวนเต็มบวกจากผูใชจํานวนหนึ่งเพื่อนํามาหาคาเฉลี่ยของตัวเลขที่ปอนเขามาทั้งหมด
        การทํางานดังกลาวจะตองมีการทํางานวนซํ้าเพื่อรับขอมูลและหาผลรวมของขอมูลที่รับเขามานั้น ในกรณีเชนนี้ผูที่ใชงานโปรแกรมซึ่งปอนจํานวนขอมูลเขาสูระบบอาจจะปอนขอมูลในจํ านวนที่ไมเทากัน หากตองการเขียนโปรแกรมเพื่อใหทํางานกับผูใชคนใด ๆ มักจะใชคํ าสั่ง while เขามาชวยในการเขียนโปรแกรม ในกรณีตัวอยางเราทราบวาขอมูลที่รับเขามาตองเปนขอมูลจํานวนเต็มบวกเทานั้นจึงจะนํามาหาคาเฉลี่ย ซึ่งผูเขียนโปรแกรมสามารถตั้งเงื่อนไขวา หากมีการปอนขอมูลเปนเลขจํานวนเต็มลบใหแสดงวาผูใชตองการหยุดการปอนขอมูลนั้น การทํางานของคําสั่ง while

ตัวอยาง  รับขอมูลจํานวนเต็มจากผูใช จนกวาผูใชจะปอนเลข -9999 ใหหาวามีเลขจํานวน
เต็มลบ (ไมรวม –9999) อยูกี่จํานวน และมีเลขจํานวนเต็มบวก (รวมทั้งเลขศูนย) อยูกี่จํานวน

          #include <stdio.h>

   
           void main( ) {
                   int countPlus, countMinus, num;
                   countPlus = countMinus = 0;
                   printf(“Enter number (-9999 for end) : “);
                   scanf(“%d”, &num);
                  while (num != -9999) {
                         if (num < 0)
                              countMinus++;
                        else
                              countPlus++;
                       printf(“Enter number (-9999 for end) : “);
                       scanf(“%d”, &num);
                  }
                printf(“Number less than zero = %d, more than or equal to zero = %d”,
                                                                                                     countMinus, countPlus);
            }

              ในกรณีของการใชคําสั่งวนซํ้ าตาง ๆ สิ่งที่ตองระวังคือการนํ าเอาเลขจํ านวนจริงมาเปนคาควบคุมการวนซํ้า พิจารณาจากตัวอยาง เนื่องจากเรารูวา 1/3 + 1/3 + 1/3 มีคาเทากับ 1 เราจึงจะใชวิธีการดังกลาวมาเปนตัวควบคุมการทํ างานวนซํ้ า เชน57

                   float x, y;
                  x = 1.0f;
                  y = 1/3;
                 while (x != y) {
                           printf(“\n55555”);
                           y += 1/3;
                   }

                หากทดลองเรียกใชโปรแกรมดังกลาว จะเกิดการพิมพคา 55555 ไปเรื่อย ๆ ทํ าใหเกิดสิ่งที่เรียกวา การวนซํ้าแบบอนันต หรือการวนซํ้ าแบบไมรูจบ ทั้งนี้เกิดจากการหาของภาษาซี 1 และ 3 เปนจํ านวนเต็ม เมื่อนํามาหารจะไดคาเทากับ 0 สามารถทดลองงาย ๆ ดวยคํ าสั่งเงื่อนไข
                     x = 1.0f;
                     y = (1/3) + (1/3) + (1/3);
                     if (x == y)
                           printf(“Equal”);
                    else
                           printf(“Not equal”);
             
               คําตอบที่ไดคือ Not equal เพราะฉะนั้นหากใชเลขจํานวนจริงและการคํานวณเปนเปนสิ่งควบคุม การวนซํ้าหรือนําไปเปรียบเทียบเงื่อนไขจะตองระมัดระวังในการเขียนโปรแกรม

ไม่มีความคิดเห็น:

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