วันศุกร์ที่ 1 พฤษภาคม พ.ศ. 2558

เงื่อนไขในภาษา C Condition in C

•ในการเขียนโปรแกรมนั้น มักจะต้องมีการเปรียบเทียบอยู่ตลอดเวลา ถ้าเราต้องการให้โปรแกรมทำงานตามข้อกำหนดที่เราต้องการ เราต้องใช้การเปรียบเทียบและเอาผลที่ได้จากการเปรียบเทียบมาควบคุมการทำงานของโปรแกรมต่อไป

           ยกตัวอย่างในเรื่องการเปรียบเทียบสมมติว่าเราเขียนโปรแกรมขึ้นเพื่อมาตรวจสอบรหัสผ่าน เมื่อโปรแกรมถามหารหัสผ่านแล้ว ผู้ใช้ก็จะต้องพิมพ์รหัสผ่านเข้าไป จากนั้นโปรแกรมจะนำค่าที่ได้ไปเปรียบเทียบกับค่าที่ถูกกำหนดเอาไว้ ถ้าตรงกันผู้ใช้งานทำรายการได้ แต่ถ้าไม่ได้ก็จะฟ้องออกมาว่ารหัสผิดพลาด คล้ายๆ ตึก ATM

เครื่องหมายในการเปรียบเทียบ

•จะใช้เมื่อเราต้องการให้มีการเปรียบค่า 2 ค่าว่าเท่ากัน มากกว่า หรือน้อยกว่าหรือไม่โดยอาจจะเปรียบเทียบระหว่างตัวแปรกับค่าตัวเลข หรือระหว่างตัวแปรกับตัวแปรก็ได้ เพื่อให้โปรแกรมดำเนินการตามที่เรากำหนดไว้ ซึ่งมีเครื่องหมายที่ใช้ในการเปรียบเทียบดังนี้ 
   
>มากกว่า                      <น้อยกว่า
>=มากกว่าหรือเท่ากัน  <=น้อยกว่าหรือเท่ากัน
!=ไม่เท่ากัน                  ==เท่ากัน

•เมื่อเราทำการเปรียบเทียบค่าใดๆ แล้วผลลัพธ์ที่เป็นไปได้จะมีอยู่ด้วยกัน 2 ค่า คือ จริง (TRUE) กับ เท็จ (FALSE)

5 > 3 เป็น จริง

9 < 11 เป็น จริง

5 >= 5 เป็น จริง

4 <= 3 เป็น เท็จ


คำสั่ง if

•คำสั่งตรวจสอบเงื่อนไขในภาษา C คำสั่งแรกที่เราจะเรียนรู้กันคือ if แปลว่า ถ้า ซึ่งมีหน้าที่ตามชื่อของมันเลย นั่นคือ เราจะใช้ if เพื่อตรวจสอบผลของการเปรียบเทียบว่าเป็น “จริง” หรือ “เท็จ”

รูปแบบ if (การเปรียบเทียบ) เช่น

1 #include “stdio.h”

2 void main()

3 {

4 int age;

5 printf(“How old are you “);

6 scanf(“%d”,&age);

7 if (age >= 60)

8 printf(“You are old\n”);

9 printf(“Good Bye”);

10 }

Flowchart of if statement



•การเปรียบเทียบตัวแปรแบบ char
          นอกจากตัวเลข จะสามารถเปรียบเทียบได้แล้ว ยังสามารถใช้ตัวอักษร เช่น ‘a’,’b’,’m’ ในการเปรียบเทียบกันได้เช่น โปรแกรมถามเพศ โดยให้ผู้ป้อนค่าใช้ตอบ m (male) หรือ f (female) ที่จำเป็นต้องมีการรับค่าตัวอักษร 1 ตัว เราจะเขียนได้ดังนี้

1 #include “stdio.h”

2 void main()

3 {

4 char gender;

5 gender = ‘m’;

6 if (gender = = ‘m’)

7 printf(“Male”);

8 }

          นอกจากจะเปรียบเทียบความเท่ากันแล้ว เรายังสามารถเปรียบเทียบความมากกว่าหรือน้อยกว่าของตัวอักษรได้ด้วย ความมาก / น้อยของตัวอักษรจะขึ้นอยู่กับค่า ASCII ของตัวอักาษร โดยตัวอักษร a – z จะมีค่า ASCII เรียงตามลำดับจากน้อยไปหามาก นั่นคือ ‘aง มีค่าน้อยกว่า ‘b’ และ ‘b’ มีค่าน้อยกว่า ‘c’ ส่วนตัวอักษรพิมพ์ใหญ่จะมีค่า ASCII น้อยกว่าอักษรตัวพิมพ์เล็กเสมอ ไม่ว่าจะเป็นตัวอักษรใดก็ตาม เช่น ‘Z’ มีค่าน้อยกว่า ‘a’ โดยที ‘A’ – ‘Z’ มีค่าตั้งแต่ 65 -90 แต่ ‘a’ – ‘z’ มีค่าตั้งแต่ 97 - 122


#include “stdio.h”
void main()

                 {

                         char ch1 ='g';

                         char ch2 = 'k';

                         printf("ch1 = %d\n",ch1);

                         printf("ch2 = %d\n",ch2);

                                        if (ch2 > ch1 )

                             printf("ch2 is more than ch1\n ");

                   }

จุดน่าสังเกตในการใช้ if

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

• if ( age >= 60)

printf(“You are old\n”);

prtintf(“Good bye”);

*ageเท่ากับ 70การเปรียบเทียบเป็นจริงแต่ถ้าage เท่ากับ 34การเปรียบเทียบเป็นเท็จ

โจทย์

•ให้นิสิตเขียนโปรแกรมสอบถามผู้ใช้ว่ามีพี่ชาย หรือน้องชาย หรือไม่ ถ้ามีให้ถามอายุของพี่ชาย หรือน้องชาย ด้วย

1. วิเคราะห์ปัญหา
กำหนดชนิดข้อมูลเป็นแบบ char และตัวแปรชื่อ brother
กำหนดตัวกำหนดชนิดข้อมูลเป็นแบบ int และแปรชื่อ age
 

2. ปัญหา 
           if (brother = = ‘y’) ถ้าเป็นจริงให้ใส่อายุ



Code Ex.



#include “studio.h”
void main()
{
                 char brother;
                 int age;
                 pritnf (“Do you have brother?:”); 
                 scanf (“%c”, & brother);
                 if (brother == ‘y’) ;
                {
                         printf(“How old is he? :”);
                         scanf(“%d”, age);
                         printf(“He is %d years old.\n”,age);

                }
                printf(“Good bye”);
}


if และ else

          •If เป็นคำสั่งที่ใช้ในการตรวจจับผลเปรียบเทียบที่เป็นจริง แต่ สำหรับผลการเปรียบที่เป็นเท็จ เราจะใช้ else ในการตรวจสอบ หรือถ้าแบบเข้าใจได้คือ else จะทำตรงกันข้ามกับ if
    


         • ถ้าต้องการให้ผู้ใช้โปรแกรมของเรากรอก อายุ โดยอายุที่กรอกต้องมากกว่าหรือเท่ากัน 60 ปี ถ้าไม่ถึงให้แสดงว่ายังไม่แก่

         1. วิเคราะห์โจทย์
         กำหนดชนิดตัวแปรเป็น และตั้งชื่อตัวแปรว่า age
         2. ใช้ if และใช้ else ถ้าอายุยังไม่ถึง 60 ปี



Code Ex.

#include “stdio.h
Void main()
{
               int age;
               printf(“How old are you?:”);
               scanf(“%d”,&age);
               if(age >= 60)
              {
                         printf(“You are old\n”);
              }                                            
              else 
              {
                         printf(“You are young\n”);
              }
              printf(“Good Bye”);
return 0;
}
   
}

การเปรียบเทียบพร้อมๆ กัน


       •ในการเขียนโปรแกรมที่ซับซ้อนมากขึ้น บางครั้งเราต้องการการตรวจสอบค่าตัวแปรหลายๆ ตัวพร้อมกัน และต้องทำคำสั่งใดคำสั่งหนึ่งหรือชุดคำสั่ง เมื่อผลการเปรียบเทียบเป็นจริงทุกค่าเท่านั้น เช่น ใช้ if ตรวจสอบว่าค่าตัวแปร a กับ b นั้นมากกว่า 0 ทั้งคู่หรือไม่ ซึ่งเขียนโปรแกรมได้ดังนี้โดยใช้ if

int a= 20;

int b = 6;

if (a > 0)

{

           if (b > 0)

          {

                      printf(“Yes !! a > 0 and b > 0”);
          }

}

         •จากโค้ดโปรแกรมข้างต้น จะสังเกตได้ว่ามีการใช้ if ซ้อน 2 ครั้ง ซึ่งโปรแกรมใช้บรรทัดมากขึ้นและดูซับซ้อนยิ่งขึ้นด้วย ในภาษา C มีวิธีการที่จะช่วยลดความยุ่งยากในการเปรียบเทียบพร้อมๆ กันลักษณะนี้ โดยใช้เครื่องหมายทาง ตรรกะ หรือ Logical Operator มาช่วย

เครื่องหมายทางตรรกะมีอยู่ 2 แบบดังนี้

&& เครื่องหมาย “และ” (AND)

|| เครื่องหมาย “หรือ” (OR)





&& (AND)


int a = 20;

Int b = 6;

            if((a>0) && (b > 0))
           {

                      printf(“Yes!! OK.”);
           }
int a = 20;
int b = 6;
int c = 8;
if ((a > 0) && (b > 0) && (C > 5))
{
             printf(“Yes!! OK.”);
}


หรือ (OR)

int a = 20;
int b = 6;
int c = 8;
if ((a < 0) || (b < 0) || (C > 5))
{
             printf(“Yes!! OK.”);
}

คำสั่ง if และ else if

          จากตัวอย่างที่ผ่านมา เราได้ศึกษาถึงการตรวจสอบเงื่อนไขโดยใช้ if และ else ซึ่งจะใช้ในกรณีที่มีแค่เงื่อนไขเดียว เช่น

If (a == 0)
          printf(“OK”);
Else
          printf(“Not Ok”);

           •ถ้าเราต้องการเปรียบเทียบตัวแปร a กับค่าอื่นๆ เช่น a == 20, 
a == 30, a == 40 สามารถทำได้โดยใส่ if ไปเรื่อยๆ เพื่อเปรียบเทียบค่าที่ต้องการ คือถ้าเงื่อนไขแรกเป็นจริงก็ทำคำสั่งในส่วนของเงื่อนไขแรกเลย แต่ถ้าเป็นเท็จก็จะไปตรวจสอบเงื่อนไขที่สอง แต่ถ้าเป็นเท็จก็ตรวจเงื่อนไขที่สามต่อไป และเป็นอย่างนี้ไปเรื่อยๆ ซึ่งมีลักษณะการเขียนแบบนี้

If (a == 20)
          printf(“ a is 20”);
else if (a == 30)
          printf(“a is 30”);
else if (a == 40)
          pritnf(“a is 40”);
else
          printf(“a is over”);


คำสั่ง switch…case

         •การใช้คำสั่ง switch case จะคล้ายกับคำสั่ง if else if แต่จะง่ายกว่าและดูเข้าใจได้ง่ายกว่า คำสั่ง switch ใช้ได้ดีกับการตรวจของค่าตัวแปรนั้นดังเช่น

             switch (ค่าตัวแปร)
{
             case ค่าที่ 1 : สิ่งที่ต้องการให้ทำ
             case ค่าที่ 2 : สิ่งที่ต้องการให้ทำ
             case ค่าที่ 3 : สิ่งที่ต้องการให้ทำ
             …
             default : สิ่งที่ต้องการให้ทำ ถ้าอยู่นอกเหนือจากข้างบน
}




การทำซ้ำ (Iteration)

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

•ตัวอย่างที 1 การกดเงินจากตู้ ATM ท่านจะต้องกดรหัสผ่าน ถ้ากดผิด 3 ครั้งบัตรก็จะโดนยึด ลักษณะแบบนี้คือการทำซ้ำของโปรแกรม โดยผู้เขียนโปรแกรมควบคุมการทำงานตู้ ATM จะต้องเขียนให้ทำซ้ำจำนวน 3 ครั้ง ถ้าป้อนรหัสผิดครบ 3 ครั้งจะไม่คืนบัตร
•ตัวอย่างที่ 2 การอ่านข้อมูลจากไฟล์ เราจะต้องเขียนโปรแกรมให้อ่านมาทีละชุดและทำอย่างนี้เรื่อยๆ จนกระทั่งสิ้นสุดไฟล์นั้นตัวอย่าง ถ้าเราต้องการเขียนชื่อ นามสกุลตัวเอง 1000 ครั้ง ถ้าเราไม่รู้จักการทำซ้ำเราต้องเขียนโค้ดแบบนี้

void main()
{
               printf(“Krissana Imsawas\n”); // ครั้งที่ 1
               printf(“Krissana Imsawas\n”); // ครั้งที่ 2
               printf(“Krissana Imsawas\n”); // ครั้งที่ 3
               
               
               printf(“Krissana Imsawas\n”); // ครั้งที่ 99
               printf(“Krissana Imsawas\n”); // ครั้งที่ 1000
}

•การทำซ้ำมีอยู่ด้วยกัน 2 ลักษณะ คือ
         –แบบมีจำนวนรอบแน่นอน เช่น กรณีที่ต้องแสดงชื่อตัวเอง 1000 ครั้งบนจอภาพ การทำซ้ำแบบนี้จะใช้ for
         –แบบเงื่อนไขเป็นตัวตัดสินว่าจะทำซ้ำต่อไปหรือไม่ ใช้ในกรณีที่ต้องการให้โปรแกรมทำซ้ำไปเรื่อยๆ ตราบใดที่เงื่อนไขที่กำหนดยังคงเป็นจริง เช่น ให้โปรแกรมคำนวณไปเรื่อยๆ ถ้าผลคำนวณยังคงเป็นบวก แต่ถ้าเป็น 0 หรือ ติดลบเมื่อไหร่ก็ให้จบโปรแกรมทันที อาจจะใช้การทำซ้ำทั้ง 2 คำสั่ง คือ do…while และ while

คำสั่ง for

     คำสั่ง forนี้ใช้ในกรณีเราต้องการทำซ้ำโดยทราบจำนวนครั้งที่แน่นอน เช่น ถ้าต้องการทำซ้ำ 20 ครั้ง , 30 ครั้ง , 40 ครั้ง เรามักจะใช้ for 
        •การใช้ for เราต้องกำหนดจำนวนครั้งลงไปว่าจะวนกี่ครั้งซึ่งในการวนด้วยคำสั่ง for นี้จะต้องสร้างตัวแปรขึ้นมาเพื่อทำหน้าที่เป็น “ตัวนับ” (Counter) ซึ่งโดยส่วนมากจะใช้รูปแบบเลขจำนวนเต็ม integer เพราะจะเป็นตัวที่คอยบอกว่าตอนนี้ครบตามจำนวนแล้วหรือยัง ถ้ายังก็วนต่อไปเรื่อยๆ


for (กำหนดค่าเริ่มต้นให้กับตัวนับ;
             เปรียบเทียบตัวนับครบจำนวนครั้งที่ต้องการหรือยัง; 
             เพิ่มค่า / ลดค่าตัวนับ)
{
คำสั่งหรือกลุ่มคำสั่งที่ต้องการให้ทำซ้ำ
}
เช่น
for (count = 0; count < 10; count ++)
{
                ….
}


คำสั่ง for

#include “stdio.h” 
void main()

{
        int count;
        printf(“Begin\n”);
        for (count = 0; count < 10; count++)
        printf(“Hello %d\n”,count);
        printf(“End\n”);
}


คำสั่ง for

#include "stdio.h"
void main()

{
         int mother = 2;
         int count;
         printf("Begin\n");
         for(count = 1;count <= 12; count++)
           {

                     printf("%d x %d = %d\n",mother, count, mother *count);
           }

           printf("End\n");

}

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

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