You are on page 1of 31

ບົດທີ 5 ALGORITHM ກວດສອບເງື່ ອນໄຂ

ເພື່ ອກຳນົດທາງປະຕິບັດ
ເນື້ອໃນຫຍໍ້
 ລັ ກ ສ ະ ນ ະ ປ ະ ໂ ຫ ຍ ກ ກ ວ ດ ສ ອ ບ ເ ງື່ ອ ນໄ ຂ

 ກ າ ນ ກ ວ ດ ສ ອ ບ ເ ງື່ ອ ນໄ ຂ ຊ ະ ນິ ດ ສ ອ ງ ທ າ ງ ເ ລື ອ ກ

 ເ ຄື່ ອ ງ ໝ າ ຍ ປ ຽ ບ ທ ຽ ບ ຄ ວ າ ມ ສຳ ພັ ນ

 ຮູ ບ ແ ບ ບ ໄ ວ ຍ າ ກ ອ ນ

 ກໍ ລ ະ ນີ ສຶ ກ ສ າ A l g o r i t h m ກ ວ ດ ສ ອ ບ ເ ງື່ ອ ນໄ ຂ ສ ອ ງ
ທ າ ງ ເ ລື ອ ກ

 ກ າ ນ ກ ວ ດ ສ ອ ບ ເ ງື່ ອ ນໄ ຂ ແ ບ ບ ມີ ທ າ ງ ເ ລື ອ ກ ຫຼ າ ຍ ທ າ ງ

 ກໍ ລ ະ ນີ ຕົ ວ ຢ່ າ ງ A l g o r i t h m ກ ວ ດ ສ ອ ບ ເ ງື່ ອ ນໄ ຂ ຫຼ າ ຍ
ທ າ ງ ເ ລື ອ ກ ກໍ ລ ະ ນີ ສຶ ກ ສ າ A l g o r i t h m ກ ວ ດ ສ ອ ບ
ເ ງື່ ອ ນໄ ຂ ສ ອ ງ ທ າ ງ ເ ລື ອ ກ
2
ລັກສະນະປະໂຫຍກກວດສອບເງື່ອນໄຂ

 ປະໂຫຍກຄວບຄຸມແບບຕາມລໍາດັບ (ກ່ າວໃນບົດທີ 4)


 ປະໂຫຍກກະໂດດຂ້າມແບບບໍ່ ມີເງື່ອນໄຂ ເປັນການໃຊ້
ປະໂຫຍກ goto/label ໄປຫາຈຸດຕ່ າງໆທີ່ ຕ້ອງການ (ບໍ່
ແນະນຳໃຫ້ໃຊ້)
 ປະໂຫຍກກວດກວດສອບເງື່ອນໄຂເພື່ ອຫາທາງເລືອກ
 ກວດສອບເງື່ອນໄຂທີ່ ມີສອງທາງເລືອກ ມີ 2
ປະເພດ
 ກວດສອບເງື່ອນໄຂທີ່ ມີຫຼາຍທາງເລືອກ
 ປະໂຫຍກຄວບຄຸມການເຮັດວຽກຊໍ້າເກົ່ າ

3
ການກວດສອບເງື່ ອນໄຂຊະນິດ
ສອງທາງເລືອກ
 ມີຄ ວ າ ມ ເ ປັ ນໄ ປໄ ດ້ 2 ກໍ ລ ະ ນີຄື: ເ ປັ ນ ຈິງ
ຫຼືບໍ່ ເ ປັ ນ ຈິງ ( T R U E O R F A L S E ) ,
(YES OR NO)
 ທ າ ງ ເ ລືອ ກ ທີ່ ກ ວ ດ ສ ອ ບໄ ດ້ຈ ະ ເ ປັ ນ ທ າ ງ
ເ ລືອ ກ ທີ່ ໄ ປ ເ ຮັດ ກີດ ຈ ະ ກຳ ຕໍ່ ໄ ປ
 ມີ 2 ລັກ ສ ະ ນ ະ
 ມີກິດ ຈ ະ ກຳ ທ າ ງ ດ ຽ ວ
 ມີກິດ ຈ ະ ກຳ ທັງ 2 ທ າ ງ

4
ການກວດສອບເງື່ ອນໄຂຊະນິດສອງທາງເລືອກ

5
ເຄື່ ອງໝາຍປຽບທຽບຄວາມສຳພັນ
 ເຄື່ ອງໝາຍປຽບທຽບຄວາມສຳພັນພາຍໃນສຳນວນເງື່ ອນໄຂ
ເຄື່ ອງໝາຍ ຄວາມໝາຍ
 ໃນ ພ າ ສ າ C ຖ້າ ຜົນ ຂ ອ ງ ກ າ ນ ປ ຽ ບ ທ ຽ ບ
== ເທົ່ າກັບ
ເ ປັ ນ ຈິງ ຈ ະ ມີຄ່ າ ເ ປັ ນ 1 ແ ລ ະ ຖ້າ ຜົນ
!= ບໍ່ ເທົ່ າກັບ
ຂ ອ ງ ກ າ ນ ປ ຽ ບ ທ ຽ ບ ບໍ່ ເ ປັ ນ ຈິງ ຈ ະ ມີຄ່ າ
> ຫຼາຍກ່ ວາ
ເ ປັ ນ 0
>= ຫຼາຍກ່ ວາຫຼືເທົ່ າກັບ  ກ າ ນ ປ ຽ ບ ທ ຽ ບ ຂໍ້ມູ ນ ທີ່ ເ ປັ ນ ຕົວ ອັກ ສ ອ ນ
< ໜ້ອຍກ່ ວາ
ຈ ະ ໃ ຊ່ ລ ະ ຫັດ ແ ອັດ ສ ະ ກີ
<= ໜ້ອຍກວ່ າຫຼືເທົ່ າກັບ ເຄື່ ອງໝາຍ ຄວາມໝາຍ

 ເຄື່ ອ ງ ໝາ ຍ ປ ຽ ບ ທຽ ບ ຕັກກະສ າ ດ ! Not


 ໃ ຊ້ປ ຽ ບ ທ ຽ ບ ເ ງື່ ອ ນໄ ຂ ຫຼ າ ຍ ກ ວ່ າ && And
2 ເ ງື່ ອ ນໄ ຂ || Or 6
ເຄື່ ອງໝາຍປຽບທຽບຄວາມສຳພັນ
 ລຳກັບການປະມວນຜົນໃນຄຳສັ່ ງເງື່ ອນໄຂ
ຮູ ບແບບໄວຍາກອນ

8
ຮູ ບແບບໄວຍາກອນ

9
ຮູ ບແບບໄວຍາກອນ

10
ກໍລ ະ ນີສຶກ ສ າ A LG OR ITH M ກ ວ ດສ ອ ບ ເງື່ ອ ນໄຂ ສ ອ ງ ທ າ ງ ເລືອ ກ

 ຕົວຢ່ າງ 1: ກໍລະນີທີ່ ມີກິດຈະກໍາໃນທາງເລືອກແບບທາງດຽວ


 ບັນຫາ: ຈົ່ ງຊອກຫາຜົນຫານໂດຍໃສ່ ສອງຈຳນວນຜ່ ານທາງແປນພິມໃຫ້ ຕົວທໍາອິດ
ເປັນຕົວຕັ້ງ ແລະ ຕົວທີ່ ສອງເປັນຕົວຫານຊຶ່ ງບໍ່ ໃຫ້ເທົ່ າກັບສູນ ຖ້າ ປ້ອນຕົວຫານເທົ່ າ
ສູນໃຫ້ໂປຣແກຣມສິ້ນສຸດການເຮັດວຽກ ແຕ່ ຖ້າຕ່ າງສູນ ໃຫ້ປະຕິບັດການຫານ ແລະ
ສະແດງຜົນອອກທາງໜ້າຈໍ
 ວິເຄາະບັນຫາ:
 ປ້ອນສອງຕົວເລກຜ່ ານທາງແປ້ນພິມ ໂດຍສາມາດເປັນເລກທົດສະນິຍົມ
 ກວດສອບຕົວເລກຕົວທີສອງກ່ ອນວ່ າເປັນ 0 ຫຼື ບໍ່ ຖ້າເປັນ 0 ໃຫ້ສິ້ນສຸດໂປຣ
ແກຣມ ຖ້າບໍ່ ເປັນ 0 ໃຫ້ປະຕິບັດການຫານ ແລະ ສະແດງຜົນໄດ້ຮັບ
 ຜົນໄດ້ຮັບແມ່ ນສະແດງອອກທາງຈໍພາບ
11
ກໍລະນີສຶກສາALGORITHMກວດສອບເງື່ອນໄຂ
ສອງທາງເລືອກ
 ຕົວຢ່ າງ: ກໍລະນີທີ່ ມີກິດຈະກໍາໃນທາງເລືອກແບບທາງດຽວ

12
ກໍລະນີສຶກສາALGORITHMກວດສອບເງື່ອນໄຂສອງທາງເລືອກ
 ຕົວ ຢ່ າ ງ 2 : ກໍ ລ ະ ນີທີ່ ມີກິດ ຈ ະ ກໍ າໃ ນ ທ າ ງ ເ ລືອ ກ ແ ບ ບ ຄູ່
 ບັນ ຫ າ : ໃ ຫ້ຂ ຽ ນໂ ປ ຣ ແ ກ ຣ ມ ຮັບ ຂໍ້ມູ ນ ຕົວ ເ ລ ກ ຈ າ ກ ຜູ້ໃ ຊ້ຜ່ າ ນ ທ າ ງ ແ ປ້ ນ ພິມ ຊຶ່ ງ ເ ປັ ນ
ເ ລ ກ ທົດ ສ ະ ນິຍົມ ສ ອ ງ ຈຳ ນ ວ ນ ແ ລ້ວໃ ຫ້ປ ຽ ບ ທ ຽ ບ ເ ລ ກ ທັງ ສ ອ ງ ຕົວ ເ ພື່ ອ ຊ ອ ກ ຫ າ ຄ່ າ
ຕົວໃ ຫ ຍ່ ກ່ ວ າ ແ ລ້ວ ເ ອົາ ມ າ ສ ະ ແ ດ ງ ຜົນ ເ ທິງ ຈໍ ພ າ ບ
 ວິເ ຄ າ ະ ບັນ ຫ າ :
 ປ້ ອ ນ ຕົວ ເ ລ ກ ສ ອ ງ ຈຳ ນ ວ ນ ຜ່ າ ນ ທ າ ງ ແ ປ້ ນ ພິມ ໂ ດ ຍ ກຳ ໜົດ ເ ປັ ນ ເ ລ ກ ທົດ ສ ະ ນິຍົມ
ໃ ຫ້ ຕັ້ງ ຊື່ ເ ປັ ນ ຄ່ າ A ແ ລ ະ B
 ກ ວ ດ ສ ອ ບ ຕົວ ເ ລ ກ ທີ່ ໜຶ່ ງ ກັບ ຕົວ ເ ລ ກ ທີ່ ສ ອ ງ ເ ພື່ ອ ຊ ອ ກ ຫ າ ຄ່ າ ທີ່ ໃ ຫ ຍ່ ກ່ ວ າ
 ສ ະ ແ ດ ງ ຜົນໄ ດ້ຮັບ ອ ອ ກ ທ າ ງ ຈໍ ພ າ ບ
13
ກໍລະນີສຶກສາALGORITHMກວດສອບເງື່ອນໄຂສອງທາງເລືອກ

 ຕົວ ຢ່ າ ງ 2 : ກໍ ລ ະ ນີທີ່ ມີກິດ ຈ ະ ກໍ າໃ ນ ທ າ ງ ເ ລືອ ກ ແ ບ ບ ຄູ່

14
ກໍລະນີສຶກສາALGORITHMກວດສອບເງື່ອນໄຂສອງທາງເລືອກ

 ຕົວ ຢ່ າ ງ 2 : ກໍ ລ ະ ນີທີ່ ມີກິດ ຈ ະ ກໍ າໃ ນ ທ າ ງ ເ ລືອ ກ ແ ບ ບ ຄູ່

15
ກໍລະນີສຶກສາALGORITHMກວດສອບເງື່ອນໄຂສອງທາງເລືອກ
 ຕົວ ຢ່ າ ງ 3 : ກໍ ລ ະ ນີທີ່ ມີກິດ ຈ ະ ກໍ າໃ ນ ທ າ ງ ເ ລືອ ກ ແ ບ ບ ຄູ່ ທີ່ ຊັບ ຊ້ອ ນ
 ບັນ ຫ າ : ໃ ຫ້ຂ ຽ ນໂ ປ ຣ ແ ກ ຣ ມ ຮັບ ຂໍ້ມູ ນ ຈ າ ກ ຜູ້ໃ ຊ້ຜ່ າ ນ ທ າ ງ ແ ປ້ ນ ພິມ 3 ຈຳ ນ ວ ນ ບໍ່
ເ ທົ່ າ ກັນ ແ ລ້ວໃ ຫ້ປ ຽ ບ ທ ຽ ບ ຫ າ ຈຳ ນ ວ ນ ທີ່ ມີຄ່ າ ໃ ຫ ຍ່ ກ່ ວ າ ແ ລ້ວ ເ ອົາ ມ າ ສ ະ ແ ດ ງ ຜົນ
ເ ທິງ ຈໍ ພ າ ບ
 ວິເ ຄ າ ະ ບັນ ຫ າ :
 ປ້ ອ ນ ຕົວ ເ ລ ກ ສ າ ມ ຈຳ ນ ວ ນ ຜ່ າ ນ ທ າ ງ ແ ປ້ ນ ພິມ
 ກ ວ ດ ສ ອ ບ ໂ ດ ຍ ປ ຽ ບ ທ ຽ ບ ຕົວ ເ ລ ກ ເ ທື່ ອ ລ ະ ຄູ່ ຊຶ່ ງ ເ ລີ່ ມ ຈ າ ກ ຈຳ ນ ວ ນ ທີໜຶ່ ງ ປ ຽ ບ ທ ຽ ບ
ກັບ ຈຳ ນ ວ ນ ທີສ ອ ງ ແ ລ້ວ ເ ອົາ ຕົວ ທີ່ ມີຄ່ າ ຫຼ າ ຍ ກ່ ວ າ ໄ ປ ປ ຽ ບ ທ ຽ ບ ກັບ ຈຳ ນ ວ ນ ທີສ າ ມ
 ສ ະ ແ ດ ງ ຜົນໄ ດ້ຮັບ ອ ອ ກ ທ າ ງ ຈໍ ພ າ ບ
16
ກໍລະນີສຶກສາALGORITHMກວດສອບເງື່ອນໄຂສອງທາງເລືອກ

17
ກໍລະນີສຶກສາALGORITHMກວດສອບເງື່ອນໄຂສອງທາງເລືອກ

 ຕົວ ຢ່ າ ງ 3 : ກໍ ລ ະ ນີທີ່ ມີກິດ ຈ ະ ກໍ າໃ ນ ທ າ ງ ເ ລືອ ກ ແ ບ ບ ຄູ່ ທີ່ ຊັບ ຊ້ອ ນ


//Example 3
#include <stdio.h>
void main() {
int A, B, C;
printf(“Input three number: ”);
scanf(“%d%d%d”, &A, &B, &C);
if (A>B)
if (A>C) printf(“%d is biggest\n”, A);
else printf(“%d is biggest\n”, C);
else
if (B>C) printf(“%d is biggest\n”, B);
else printf(“%d is biggest\n”, C);
}

18
ກໍລະນີສຶກສາALGORITHMກວດສອບເງື່ອນໄຂສອງທາງເລືອກ
 ຕົວ ຢ່ າ ງ 4 : ກ ວ ດ ສ ອ ບ ທ າ ງ ເ ລືອ ກ ສ ອ ງ ທ າ ງ ທີ່ ຊ້ອ ນ ກັນ ຫຼ າ ຍ ຊັ້ນ
 ບັ ນ ຫ າ : ໃ ຫ້ຂ ຽ ນ ໂ ປ ຣ ແ ກ ຣ ມ ຈັດ ເ ກ ຣ ດ ໂ ດ ຍ ປ້ ອ ນ ຄ ະ ແ ນ ນ ທ າ ງ ແ ປ້ ນ ພິ ມ ທີ່ ມີ ຫຼັ ກ ກ າ ນ ໃ ນ ກ າ ນ ຕັ ດ
ເ ກ ຣ ດ ດັ່ ງ ນີ້
 ຄ ະ ແ ນ ນ ແ ຕ່ 9 0 ຫ າ 1 0 0 ໄ ດ້ເ ກ ຣ ດ A
 ຄ ະ ແ ນ ນ ແ ຕ່ 7 0 ຫ າ 8 9 , 9 9 ໄ ດ້ເ ກ ຣ ດ B
 ຄ ະ ແ ນ ນ ແ ຕ່ 6 0 ຫ າ 6 9 , 9 9 ໄ ດ້ເ ກ ຣ ດ C
 ຄ ະ ແ ນ ນ ແ ຕ່ 5 0 ຫ າ 5 9 , 9 9 ໄ ດ້ເ ກ ຣ ດ D
 ຄ ະ ແ ນ ນ ຕໍ່ າ ກ່ ວ າ ນັ້ນ ໄ ດ້ເ ກ ຣ ດ F
 ວິ ເ ຄ າ ະ ບັ ນ ຫ າ :
 ປ້ ອ ນ ຄ ະ ແ ນ ນ ຂ ອ ງ ນັ ກ ຮ ຽ ນ ແ ຕ່ ລ ະ ຄົ ນ ຜ່ າ ນ ທ າ ງ ແ ປ້ ນ ພິ ມ
 ຕັ ດ ເ ກ ຣ ດ ຂ ອ ງ ແ ຕ່ ລ ະ ຄົ ນໂ ດ ຍ ປ ຽ ບ ທ ຽ ບ ໃ ສ່ ຫຼັ ກ ກ າ ນໃ ນ ລ ະ ດັ ບ ຕ່ າ ງ ໆ
 ສ ະ ແ ດ ງ ຜົ ນໄ ດ້ຮັ ບ ອ ອ ກ ທ າ ງ ຈໍ ພ າ ບ
19
ກໍລະນີສຶກສາALGORITHMກວດສອບເງື່ອນໄຂສອງທາງເລືອກ

20
ກໍລະນີສຶກສາALGORITHMກວດສອບເງື່ອນໄຂສອງທາງເລືອກ

 ຕົວ ຢ່ າ ງ 4 : ກ ວ ດ ສ ອ ບ ທ າ ງ ເ ລືອ ກ ສ ອ ງ ທ າ ງ ທີ່ ຊ້ອ ນ ກັນ ຫຼ າ ຍ ຊັ້ນ


//Example 4
#include <stdio.h>
void main() {
int Sc;
printf(“Input Score: ”);
scanf(“%d”, &Sc);
if (Sc>=90) printf(“Score = %d Grade is A\n”, Sc);
else if (Sc>=70) printf(“Score = %d Grade is B\n”, Sc);
else if (Sc>=60) printf(“Score = %d Grade is C\n”, Sc);
else if (Sc>=50) printf(“Score = %d Grade is D\n”, Sc);
else printf(“Score = %d Grade is F\n”, Sc);
}

21
ການກວດສອບເງື່ອນໄຂແບບມີທາງເລືອກ
ຫຼາຍທາງ
• ມີ 2 ວິທີການ
ກວດສອບເງື່ອນໄຂຫຼາຍຊັ້ນ ໂດຍໃຊ້ if ... else if
ເລືອກເປັນກໍລະນີ (switch case)
ການໃຊ້ if ... else if ຫຼາຍໆຊັ້ນຈະເຮັດໃຫ້ການ
ຂຽນໂປຣແກຣມບໍ່ ສະດວກ ແລະ ຍັງເຮັດໃຫ້
ການປະມວນຜົນຂອງໂປຣແກຣມຊ້າລົງເລື້ອຍໆ
Switch() ຖືກສ້າງຂື້ນມາເພື່ ອແກ້ໄຂບັນຫາຂອງ
if ... else if

22
ການກວດສອບເງື່ອນໄຂແບບມີທາງເລືອກຫຼາຍທາງ

23
ການກວດສອບເງື່ອນໄຂແບບມີທາງເລືອກຫຼາຍທາງ

24
ການກວດສອບເງື່ອນໄຂແບບມີທາງເລືອກຫຼາຍທາງ

25
ການກວດສອບເງື່ອນໄຂແບບມີທາງເລືອກຫຼາຍທາງ

26
ການກວດສອບເງື່ອນໄຂແບບມີທາງເລືອກຫຼາຍທາງ

27
ຕົວຢ່ າງALGORITHM ກວດສອບເງື່ ອນໄຂຫຼາຍທາງເລືອກ
 ຕົ ວ ຢ່ າ ງ 1 : ກ ວ ດ ສ ອ ບ ທ າ ງ ເ ລື ອ ກ ຊ ອ ກ ຫ າ ທ າ ງ ເ ລື່ ອ ທີ່ ມີຫຼ າ ຍ ທ າ ງ
 ບັ ນ ຫ າ : ໃ ຫ້ຂ ຽ ນໂ ປ ຣ ແ ກ ຣ ມ ຈັດ ເ ກ ຣ ດ ໂ ດ ຍ ປ້ ອ ນ ຄ ະ ແ ນ ນ ທ າ ງ ແ ປ້ ນ ພິ ມ ທີ່ ຫຼັກ ກ າ ນໃ ນ ກ າ ນ ຕັ ດ
ເ ກ ຣ ດ ດັ່ ງ ນີ້
 ຄ ະ ແ ນ ນ ແ ຕ່ 9 0 ຫ າ 1 0 0 ໄ ດ້ເ ກ ຣ ດ A
 ຄ ະ ແ ນ ນ ແ ຕ່ 7 0 ຂື້ນ ໄ ປ ໄ ດ້ເ ກ ຣ ດ B
 ຄ ະ ແ ນ ນ ແ ຕ່ 6 0 ຂື້ນ ໄ ປ ໄ ດ້ເ ກ ຣ ດ C
 ຄ ະ ແ ນ ນ ແ ຕ່ 5 0 ຂື້ນ ໄ ປ ໄ ດ້ເ ກ ຣ ດ D
 ຄ ະ ແ ນ ນ ຕໍ່ າ ກ່ ວ າ ນັ້ນ ໄ ດ້ເ ກ ຣ ດ F
 ວິ ເ ຄ າ ະ ບັ ນ ຫ າ :
 ປ້ ອ ນ ຄ ະ ແ ນ ນ ຂ ອ ງ ນັກ ຮ ຽ ນ ແ ຕ່ ລ ະ ຄົ ນ ຜ່ າ ນ ທ າ ງ ແ ປ້ ນ ພິ ມ
 ຕັ ດ ເ ກ ຣ ດ ຂ ອ ງ ແ ຕ່ ລ ະ ຄົ ນໂ ດ ຍ ປ ຽ ບ ທ ຽ ບ ໃ ສ່ ຫຼັກ ກ າ ນໃ ນ ລ ະ ດັ ບ ຕ່ າ ງ ໆ
 ສ ະ ແ ດ ງ ຜົ ນໄ ດ້ຮັ ບ ອ ອ ກ ທ າ ງ ຈໍ ພ າ ບ
29
ຕົວຢ່ າງALGORITHMກວດສອບເງື່ ອນໄຂຫຼາຍທາງເລືອກ
 ຕົວຢ່ າງ 1: ກວດສອບທາງເລືອກຊອກຫາທາງເລືອກທີ່ ມີຫຼາຍທາງ
//Example 1 switch…case for grading program
#include <stdio.h>
#include <conio.h>
void main() {
int Sc, choice;
printf(“\n”);
printf(“Menu Selection\n”);
printf(“1. Score is 90-100\n”);
printf(“2. Score is 70-89\n”);
printf(“3. Score is 60-69\n”);
printf(“4. Score is 50-59\n”);
printf(“5. Score less than 50\n”);
printf(“\n”);
30
ຕົວຢ່ າງALGORITHMກວດສອບເງື່ ອນໄຂຫຼາຍທາງເລືອກ
 ຕົວຢ່ າງ 1: ກວດສອບທາງເລືອກຊອກຫາທາງເລືອກທີ່ ມີຫຼາຍທາງ
printf(“\n”);
printf(“Select your choice: ”);
scanf(“%d”, &choice);
printf(“Input score: ”);
scanf(“%d”, &Sc);
switch(choice) {
case 1: printf(“Score = %d Grade is A\n”, Sc); break;
case 2: printf(“Score = %d Grade is B\n”, Sc); break;
case 3: printf(“Score = %d Grade is C\n”, Sc); break;
case 4: printf(“Score = %d Grade is D\n”, Sc); break;
case 5: printf(“Score = %d Grade is F\n”, Sc); break;
}
}
31

You might also like