410 likes | 537 Vues
คำสั่งแบบเลือกทำ. Selection Statement. เครื่องหมายในการเปรียบเทียบเงื่อนไข. ลักษณะการเปรียบเทียบ. ต้องมีข้อมูล 2 ตัวเปรียบเทียบ ผลจากเปรียบเทียบจะได้ค่า จริง (True) หรือ เท็จ (False) เท่านั้น. การเปรียบเทียบที่เงื่อนไขมากกว่า 1 เงื่อนไข. มีตัวเชื่อมเงื่อนไข คือ AND OR NOT
E N D
คำสั่งแบบเลือกทำ Selection Statement
เครื่องหมายในการเปรียบเทียบเงื่อนไขเครื่องหมายในการเปรียบเทียบเงื่อนไข
ลักษณะการเปรียบเทียบ • ต้องมีข้อมูล 2 ตัวเปรียบเทียบ • ผลจากเปรียบเทียบจะได้ค่า จริง(True)หรือ เท็จ(False) เท่านั้น
การเปรียบเทียบที่เงื่อนไขมากกว่า 1 เงื่อนไข • มีตัวเชื่อมเงื่อนไข คือ AND OR NOT • เช่น (A = B) OR (A = 20) • AND และ OR จะวางไว้ระหว่างเงื่อนไขที่ 1 และเงื่อนไขที่ 2 • เงื่อนไขต้องอยู่ในวงเล็บเสมอ
การเปรียบเทียบที่เงื่อนไขมากกว่า 1 เงื่อนไข • การใช้ NOT ปฏิเสธเงื่อนไข • ให้ผลตรงข้ามกับเงื่อนไข
การเปรียบเทียบที่เงื่อนไขมากกว่า 1 เงื่อนไข • ผลการเปรียบเทียบโดยใช้ AND และ OR เชื่อม
คำสั่งเกี่ยวกับการเลือกทำคำสั่งเกี่ยวกับการเลือกทำ รูปประโยคที่ใช้ในการตรวจสอบเงื่อนไขในภาษาปาสคาล มี 3 รูปแบบคือ • คำสั่ง IF • คำสั่ง IF - ELSE • คำสั่ง CASE
คำสั่ง IF – THEN • IF – THEN เป็นคำสั่งที่ใช้เพื่อการตัดสินใจเลือกทำงานอย่างใดอย่างหนึ่ง โดยอาศัยการทดสอบเงื่อนไขบางประการก่อน • ถ้าเงื่อนไขที่ตรวจสอบให้ผลลัพธ์เป็นจริง จึงทำคำสั่งที่กำหนด และไปทำงานที่คำสั่งอื่นต่อไป
คำสั่ง IF – THEN • รูปแบบคำสั่ง IF <นิพจน์เงื่อนไข> THEN คำสั่งการทำงานเมื่อเงื่อนเป็นจริง ; IF <นิพจน์เงื่อนไข> THEN BEGIN คำสั่งการทำงานเมื่อเงื่อนเป็นจริง1; คำสั่งการทำงานเมื่อเงื่อนเป็นจริง2; คำสั่งการทำงานเมื่อเงื่อนเป็นจริงn; END;
คำสั่ง IF – THEN • ตัวอย่าง 1 IF A > 20 THEN WriteLn(‘A is Big’) ; • ตัวอย่าง 2 IF (A > 20) THEN BEGIN WriteLn(‘A is Bigger than 20’); WriteLn(’20 is Less then A’); END;
ตัวอย่างการใช้ IF (1) • เขียนโปรแกรมรับอายุ ถ้าอายุมากกว่า 60 แสดงข้อความ You are Old!!! • รูปแบบ Input your age = <รอรับค่าใส่ตัวแปร age> You areOld!! <ในกรณีอายุมากกว่า 60แต่ถ้าอายุไม่เกิน 60 ไม่ต้องแสดงข้อความใดๆทั้งสิ้น> *****************************************************
Program If1; Uses wincrt; VAR Age : Integer; BEGIN Write(‘Input your age = ’); ReadLn(age); IF age > 60 THEN Write(‘You are Old!!!’); WriteLn(‘******************************************’) END. เงื่อนไข งานที่ต้องทำเมื่อเงื่อนไขเป็นจริง
ตัวอย่างการใช้ IF (2) • รับค่า รหัสผ่านจากผู้ใช้ ถ้ารหัสผ่านที่ป้อนมีค่า GoodLuck ให้แสดงข้อว่า Welcome Manager และข้อความ Exit Password System • รูปแบบ Input Password => <รอรับค่าใส่ตัวแปร pwd> Welcome Manager Exit Password System ในกรณีที่ป้อนรหัสผ่านถูกต้อง
Program If2; Uses wincrt; Var pwd : String[20]; BEGIN write(‘Input Password => ’); readLn(pwd); IF (pwd=‘GoodLuck’) THEN Begin writeLn(‘Welcome Manager’); writeLn(‘Exit Password System’); End; END.
ตัวอย่างการใช้ IF (3) • บริษัทแห่งหนึ่งต้องการเพิ่มเงินเดือนให้พนักงานที่มีเงินเดือนต่ำกว่า 5000 อีกคนละ 10% และให้พนักงานทุกคนได้รับโบนัสคนละ 3 เท่าของเงินเดือน • รูปแบบผลลัพธ์ Input Salary => <รอรับค่าเงินเดือน> Your salary = <แสดงค่าเงินเดือน> Your bonus = <แสดงค่าโบนัส>
Program If3; Uses wincrt; Var salary , bonus :Real; BEGIN write(‘Input salary => ’); readLn(salary); IF (salary < 5000) THEN salary := salary * (10 / 100) ; bonus := salary * 3 ; writeLn(‘Your salary = ’ , salary:5:2); writeLn(‘Your bonus = ’ , bonus:5:2); END.
คำสั่ง IF – THEN– ELSE • IF – THEN – ELSE เป็นคำสั่งที่ใช้เพื่อการตัดสินใจเลือกทำงานอย่างใดอย่างหนึ่ง โดยอาศัยการทดสอบเงื่อนไขบางประการก่อน • ถ้าเงื่อนไขที่ตรวจสอบให้ผลลัพธ์เป็นจริง จึงทำคำสั่งที่กำหนด และไปทำงานที่คำสั่งอื่นต่อไป • ถ้าเงื่อนไขที่ตรวจสอบให้ผลลัพธ์เป็นเท็จ จึงทำคำสั่งอีกแบบที่กำหนด และไปทำงานที่คำสั่งอื่นต่อไป
คำสั่ง IF – THEN– ELSE • รูปแบบคำสั่ง IF <นิพจน์เงื่อนไข> THEN คำสั่งการทำงานเมื่อเงื่อนเป็นจริง ELSE คำสั่งการทำงานเมื่อเงื่อนไขเป็นเท็จ;
คำสั่ง IF – THEN– ELSE • รูปแบบคำสั่ง IF <นิพจน์เงื่อนไข> THEN BEGIN คำสั่งการทำงานเมื่อเงื่อนเป็นจริง 1; คำสั่งการทำงานเมื่อเงื่อนเป็นจริง 2; คำสั่งการทำงานเมื่อเงื่อนเป็นจริง n; END ELSE BEGIN คำสั่งการทำงานเมื่อเงื่อนเป็นเท็จ 1; คำสั่งการทำงานเมื่อเงื่อนเป็นเท็จ 2; คำสั่งการทำงานเมื่อเงื่อนเป็นเท็จ n; END;
ตัวอย่างการใช้ IF - ELSE(1) • เขียนโปรแกรมรับอายุ ถ้าอายุมากกว่า 60 แสดงข้อความ You are Old!!! แต่ถ้าน้อยกว่าหรือเท่ากับ 60 แสดงข้อความ You are Young!!! • รูปแบบ Input you age = <รอรับค่าใส่ตัวแปร age> You areOld!! <ในกรณีอายุมากกว่า 60แต่ถ้าอายุไม่เกิน 60> You are Young!!!
Program If_Else1; Uses wincrt; VAR Age : Real; BEGIN Write(‘Input your age = ’); ReadLn(age); IF age > 60 THEN Write(‘You are Old!!!’) ELSE Write(‘You are Young!!!’); END. งานที่ต้องทำเมื่อเงื่อนไขเป็นจริง เงื่อนไข งานที่ต้องทำเมื่อเงื่อนไขเป็นเท็จ
ตัวอย่างการใช้ IF - ELSE(2) • เขียนโปรแกรมคำนวณคะแนนรวมจากการรับค่าคะแนนรายภาคและคะแนนปลายภาค เพื่อพิจารณาว่าสอบผ่านหรือสอบตก โดยแสดงผลการสอบ ถ้าคะแนนรวมต่ำกว่า 60 คะแนน ถือว่าสอบตก • รูปแบบ Input midterm score => <รอรับค่าคะแนนกลางภาค> Input final score => <รอรับค่าคะแนนปลายภาค> You Pass!! <ในกรณีสอบได้มากกว่า 60คะแนน> You Fail!!!<ในกรณีสอบไม่ถึง 60คะแนน>
Program If_Else2; Uses wincrt; Var mid_sc , final_sc , total_sc :Integer; BEGIN write(‘Input midterm score => ’); readLn(mid_sc); write(‘Input final score => ’); readLn(final_sc); total_sc := mid_sc + final_sc ; IF (total_sc >= 60) THEN writeLn(‘Your Pass!!!) ELSE writeLn(‘Your Fail!!!); END.
ตัวอย่างการใช้ IF - ELSE(3) • เขียนโปรแกรมคำนวณภาษีเงินได้(Tax) ของพนักงานบริษัท โดยพิจารณาจากเงินเดือน(Income) ที่ได้รับ หากได้รับเงินเดือนเดือนละ 20000 บาทขึ้นไปให้คิดภาษี 15% แต่ถ้าได้รับเงินเดือนต่ำกว่า 20000 จะคิดภาษี 5% • รูปแบบผลลัพธ์ Input your income => <รอรับค่าเงินเดือน> ************************************************* Income tax is <แสดงค่าภาษีที่คำนวณได้>
Program If_Else3; Uses wincrt; Var income , tax :Real; BEGIN write(‘Input your income => ’); readLn(income); IF (income >= 20000) THEN tax := income * (15 / 100) ELSE tax := income * (5 / 100); writeLn(‘********************************************’); writeLn(‘Income tax = ’ , tax:5:2); END.
คำสั่ง IF แบบซ้อนกัน(Nested IF) • เป็นคำสั่งที่ใช้เพื่อการตัดสินใจเมื่อมีเงื่อนไขหลายเงื่อนไข • รูปแบบ IF <นิพจน์เงื่อนไข1> THEN คำสั่งการทำงานเมื่อเงื่อน1เป็นจริง ELSE IF <นิพจน์เงื่อนไข2>THEN คำสั่งการทำงานเมื่อเงื่อน2เป็นจริง ELSE IF<นิพจน์เงื่อนไข3>THEN คำสั่งการทำงานเมื่อเงื่อน3เป็นจริง ELSE IF<นิพจน์เงื่อนไขn>THEN คำสั่งการทำงานเมื่อเงื่อนnเป็นจริง ELSE คำสั่งเมื่อไม่มีเงื่อนไขใดเป็นจริงเลย ;
ตัวอย่างการใช้ IF ซ้อน(1) • เขียนโปรแกรมรับชั้นปีของนักศึกษา แล้วตรวจสอบว่าเป็นชั้นปีอะไร มีเงื่อนไขดังนี้ • ถ้าเป็นเลข 1 ให้แสดง Freshman • ถ้าเป็นเลข 2 ให้แสดง Sophomore • ถ้าเป็นเลข 3 ให้แสดง Junior • ถ้าเป็นเลข 4 ให้แสดง Senior
Program If_Nest1; Uses wincrt; Var year : Integer; status : string ; BEGIN write(‘Input your year class => ’); readLn(year); IF year = 1 THEN status := ‘Freshman’ ELSE IF year = 2 THEN status := ‘Sophomore’ ELSE IF year = 3 THEN status := ‘Junior’ ELSE IF year = 4 THEN status := ‘Senior’ ; writeLn(‘You are ’ , status); END.
ตัวอย่างการใช้ IF ซ้อน(2) • เขียนโปรแกรมตัดเกรดวิชาคอมพิวเตอร์และการเขียนโปรแกรม โดยรับคะแนนกลางภาคและคะแนนปลายภาคโดยมีคะแนนรวมเต็ม 100 คะแนน มีเงื่อนไขในการคิดเกรดดังนี้ • ถ้าได้คะแนน 80 คะแนนขึ้นไป ได้เกรด A • ถ้าได้คะแนน 70-79 คะแนน ได้เกรด B • ถ้าได้คะแนน 60-69 คะแนน ได้เกรด C • ถ้าได้คะแนน 50-59 คะแนน ได้เกรด D • ถ้าได้คะแนนต่ำกว่า 50 คะแนน ได้เกรด F • แสดงผลเกรด
Program IF_nest2; Uses wincrt; Var Mid_sc , Final_sc , Total_sc : integer; grade : char; BEGIN write('Input midterm score => '); ReadLn(Mid_sc); write('Input final score => '); ReadLn(Final_sc); Total_sc := Mid_sc + Final_sc; IF Total_sc >= 80 THEN Grade := 'A' ELSE IF Total_sc >=70 THEN Grade := 'B' ELSE IF Total_sc >=60 THEN Grade := 'C' ELSE IF Total_sc >=50 THEN Grade := 'D' ELSE IF Total_sc >=0 THEN Grade := 'F' ; WriteLn('You have total score = ' ,Total_sc); WriteLn('Your grade is ' , Grade) ; END.
ตัวอย่างการใช้ IF ซ้อน(3) • จงเขียนโปรแกรมคำนวณภาษีเงินได้ของพนักงานบริษัท โดยมีอัตราภาษีดังนี้ • แสดงภาษีที่ต้องชำระ
Program IF_nest3; Uses wincrt; Var income , tax_rate , tax : Real; BEGIN write('Input annual income => '); ReadLn(income); IF income <= 100000 THEN tax_rate := 0 ELSE IF income <= 500000 THEN tax_rate := 10 /100 ELSE IF income <= 1000000 THEN tax_rate := 20 /100 ELSE IF income <= 4000000 THEN tax_rate := 30 /100 ELSE tax_rate := 40 / 100; tax := income * tax_rate ; WriteLn('**************************************************************'); WriteLn(‘Annual income = ' , income:5:2) ; WriteLn(‘Tax rate = ’,tax_rate:3:2) WriteLn(‘Income tax = ' , tax:5:2) ; END.
ตัวอย่างการใช้ IF ซ้อน(4) • จงเขียนโปรแกรมคำนวณหาค่าดัชนีมวลร่างกาย(Body Mass Index) โดยมีสูตรคำนวณดังนี้ BMI = น้ำหนัก(kg) / ส่วนสูง(m)2 • เปรียบเทียบดังนี้ • ถ้า BMI < 18 แสดงข้อความว่า You are thin • ถ้า 18<= BMI < 23 แสดงข้อความ Perfect Body • ถ้า 23 <=BMI < 25 แสดงข้อความ You look fat • ถ้า BMI >=25 แสดงข้อความ Hello Piggy!! และ Let’s Exercise
Program If_nest4; Uses wincrt; Var H : Real; W : Real; BMI : Real; Begin write('Input your wieght(kg) => '); readLn(W); write('Input your height(m) => ') ; readLn(H); BMI := W/(H*H); writeLn('Your BMI = ' , BMI:3:2); If BMI < 18 Then writeLn('You are thin') ElseIf (BMI >= 18) AND (BMI < 23) Then writeLn('Perfect Body') Else If (BMI >= 23) AND (BMI < 25) Then writeLn('You look fat') Else Begin writeLn('Hello Piggy!!!!'); writeLn('Let''s exercise!!!'); End; End.
คำสั่ง CASE • รูปแบบ CASEตัวแปร(นิพจน์) OF ค่าที่เปรียบเทียบ1 : งานกรณี 1 ; ค่าที่เปรียบเทียบ2 : งานกรณี 2 ; ค่าที่เปรียบเทียบ n : งานกรณี n; ELSE งานในกรณีที่ไม่เข้าเงื่อนไขใด ๆ เลย ; END;{จบประโยค Case}
คำสั่ง CASE • นิพจน์หลัง CASE จะต้องเป็นชนิด จำนวนเต็ม อักขระ บูลีน พิสัยย่อย หรือข้อมูลแจงนับ ห้ามเป็น จำนวนจริงหรือสตริง • ค่าที่เปรียบเทียบ 1 ถึง ค่าที่เปรียบเทียบ n จะเป็นค่าคงที่ใด ๆ ก็ได้ แต่ต้องเป็นชนิดเดียวกับนิพจน์หลัง CASE อาจเขียนเป็นค่าเดียวโดด ๆ หรือ เขียนมากกว่าหนึ่งค่าก็ได้ • การทำงานจะคล้าย IF แบบซ้อน
คำสั่ง CASE • ค่าที่เปรียบเทียบเป็นได้เฉพาะค่าคงที่ CASE Num OF 10 : Write(‘I am TEN’); 15 , 20 : Write(‘I am 15 or 20’); 30..40 : Write(‘I Between 30 AND 40’); END; • ค่าที่นำมาเปรียบเทียบทั้งหมด ต้องเป็นชนิดเดียวกับ Num • ในกรณีนี้ Num เป็นชนิดจำนวนเต็มได้อย่างเดียว
ตัวอย่างการใช้ CASE(1) • ให้รับค่าวันจากผู้ใช้ แล้วแสดงข้อความ ดังเงื่อนไขต่อไปนี้ • ถ้า วัน มีค่า 2,3,4,5,6 แสดงข้อความ I must go to work • ถ้าวันมีค่า 7 แสดงข้อความ Let’s shopping • ถ้าวันมีค่า 1 แสดงข้อความ I want to stay at home • ถ้าวันมีค่าเป็นอย่างอื่นๆ แสดงข้อความ Invalid day!!
Program case1; uses wincrt; Var day : char; Begin write('Input day number=> '); ReadLn(day); CASE day OF '2','3','4','5' , ‘6' : writeLn('I must go to work'); ‘7' : WriteLn('Let''s shopping') ; ‘1' : writeLn('I want to stay at home '); ELSE writeLn('Invalid day number'); END; End.
ตัวอย่างการใช้ CASE(2) • จงเขียนโปรแกรมตัดเกรดวิชาคอมพิวเตอร์และการเขียนโปรแกรม โดยการรับคะแนนกลางภาคและคะแนนปลายภาคจากผู้ใช้ โดยมีคะแนนรวมเต็ม 100 คะแนน มีเงื่อนไขในการคิดเกรดดังนี้ - ถ้าได้คะแนน 80 คะแนนขึ้นไป ได้เกรด A - ถ้าได้คะแนน 70-79 คะแนน ได้เกรด B - ถ้าได้คะแนน 60-69 คะแนน ได้เกรด C - ถ้าได้คะแนน 50-59 คะแนน ได้เกรด D - ถ้าได้คะแนนต่ำกว่า 50 คะแนน ได้เกรด F • แสดงเกรดที่ได้รับ