การเขียนโปรแกรมแบบวนซ้ำ (Loo

Download Report

Transcript การเขียนโปรแกรมแบบวนซ้ำ (Loo

อ.นนทชัย กันเพ็ชร
การเขียนโปรแกรมแบบวนซ ้า (Loop)
 เนื้อหาสาระ
 การวนรอบและทาซ้าด้วยคาสัง่ For
 Loop while
 Loop do …..while
 ทำไมถึงต้องมีกำรทำซำ้
 คำสังที
่ ่ใช้ในกำรทำซำ้
 กำรทำซำ้ หมำยถึง กำรสังให้
่ โปรแกรมทำงำนอย่ำงใดอย่ำงหนึ่ งวนไปวนมำ
จนกระทังครบตำมจ
่
ำนวนที่ต้องกำรหรือตรงตำมเงื่อนไขที่เรำกำหนดเอำไว้
 กำรทำซำ้ เกิดขึน
้ บ่อยๆ ในชีวิตประจำวัน เช่น กำรวนรับรหัสผ่ำน จนกว่ำจะใส่
รหัสผ่ำนถูกต้อง หรือไม่เกิน 3 ครัง้ , กำรวนรับรหัสบัตรเติมเงินของบริกำร
โทรศัพท์ ไม่เกิน 3 ครัง้ จนกว่ำจะใส่รหัสบัตรเติมเงินถูกต้อง เป็ นต้น
 โดยปกติแล้วโปรแกรมคอมพิวเตอร์จะมีลกั ษณะการทางานแบบตามลาดับจากบนลง
ล่าง โดยทางานตัง้ แต่ statement แรกลงไปจนถึง statement สุดท้าย แต่ใน
ภาษาคอมพิวเตอร์ใหม่ ๆ คือตัง้ แต่ภาษาในยุคที่ 3 เป็ นต้นมา จะมีคาสังเพื
่ อ่ ให้
คอมพิวเตอร์วนกลับไปทาคาสังเดิ
่ มซ้า ๆ กันได้ โดยมีการตรวจสอบเงือ่ นไขว่า
จะทาซ้าหรือไม่ สาหรับภาษาซีมคี าสังท
่ าซ้าอยู่ 3 คาสัง่ คือ
 คำสัง่ for
 คำสัง่ while
 คำสัง่ do – while
 ซึง่ รูปแบบคาสังและลั
่
กษณะการใช้งานของแต่ละคาสังก็
่ แตกต่างกัน ผูเ้ ขียนโปรแกรม
จะต้องเลือกให้เหมาะสมกับลักษณะงานทีเ่ ขียน
ตัวอย่างผังงานแบบวนรอบการทางาน
เริม
่ ต้น
 แสดงการโยนเหรียญ 3 ครัง้ ถ้าออก
หัว ผูโ้ ยนจะได้เงิน 10 บาท ถ้าออก
ก้อย ผูโ้ ยนจะเสียเงิน 10 บาท
โยนเหรียญ
ก้อย
ี เงิน 10 บาท
เสย
ย ัง
ห ัว
ผลการโยน
ได้เงิน 10 บาท
ครบ 3 ครงั้
หรือย ัง?
ครบ
หยุด
คำสั่ง for
 คาสัง่ for นิยมใช้กบั การทาซ้าทีร่ จู้ านวนรอบของการทาซ้าว่าต้องการทาซ้ากีร่ อบ คือ
ตัง้ แต่คา่ อะไร ถึง ค่าอะไร โดยมีรปู แบบคาสังดั
่ งนี้
 รูปแบบคาสัง่ for
ผังงานคาสัง่ for
คาสัง่ for ประกอบด้ วยตัวตรวจสอบเงื่อนไข 3 ส่วน
 คาสัง่ for ประกอบด้วยตัวตรวจสอบเงือ่ นไข 3 ส่วน โดยแต่ละส่วนจะคันด้
่ วย
เครือ่ งหมาย ; (Semicolon)
1 ส่วนกาหนดค่าเริม่ ต้นให้กบั ตัวแปรส่วนนี้จะเป็ นการกาหนดค่าเริม่ ต้นให้กบั ตัวแปรที่
ต้องการใช้งานในลูป (Loop) โดยปกติเราจะใช้ตวั แปรนี้เป็ นตัวควบคุมลูป เพื่อบอกให้
ทราบว่า ลูป จะทาซ้าตัง้ แต่คา่ ของตัวแปรนี้เป็ นค่าอะไร
2 ส่วนเงือ่ นไขทีต่ อ้ งการตรวจสอบ เป็ นนิพจน์ตรรกะทีใ่ ช้เป็ นเงือ่ นไขในการทาซ้าของลูป
โดยหากเงือ่ นไขนี้เป็ นจริงก็ยงั คงทางานในลูปต่อไป แต่ถา้ หากเงือ่ นไขนี้เป็ นเท็จ ก็จะออก
จากการทางานของลูป ไปทาคาสังที
่ อ่ ยูน่ อกลูปต่อไป
3 ส่วนของการปรับค่าของตัวแปร เป็ นส่วนทีป่ รับเปลีย่ นค่าของตัวแปรทีใ่ ช้ในลูป โดยอาจจะ
เป็ นการเพิม่ ค่า หรือลดค่าของตัวแปรก็ได้ ซึง่ ส่วนนี้จะเป็ นส่วนทีส่ าคัญมาก กล่าวคือ การ
เพิม่ หรือลดค่าของตัวแปรต้องส่งผลให้เงือ่ นไขทีท่ าการตรวจสอบในส่วนที่ 2 มีโอกาสเป็ น
เท็จด้วย ไม่เช่นนัน้ อาจออกจากการทางานของลูปไม่ได้ หรือเรียกว่าเป็ นการทางานของ
ลูปทีไ่ ม่รจู้ บ (Infinite loop)
Ex โปรแกรม
for1.cpp
#include<stdio.h>
เริ่มต้นให้ count=0
#include<conio.h>
main()
ทำในขณะที่ count<10
{
เพิม่ ค่ำ count ทีละ 1
int count;
count=count+1
printf(“Begin\n”);
for(count=0;count<10;count++)
printf(“Hello\n”);
printf(“End\n”);
}
[email protected]
สงวนลิขสิ ทธิ์ (c) 2547 มหาวิทยาลัยราชภัฏสงขลา
9
ตัวอย่ ำง
พิมพ์หรื อแสดงข้ อความ The C compiler จานวน 10 บรรทัด
 ผังงานแสดงการแก้ปญั หาโจทย์
#include <stdio.h>
#include <conio.h>
main()
เริม่ ของฟงั ก์ชนั main
{
int i;
for (i=1;i<=10;i++)
{
printf("The C compiler\n");
}
getch();
}
// ประกาศตัวแปร i เป็ นชนิด จานวนเต็ม
// ทาซ้าเมื่อค่า i = 1 จนกระทัง่ i<=10 เป็ นจริง
// เริม่ ของคาสัง่ for
// แสดงข้อความ The C compiler บนจอภาพแล้วขึน้ บรรทัดใหม่
// จบ ของคาสัง่ for
คาสัง่
 ให้นกั ศึกษาเขียนโปรแกรมเพือ่ แสดงตังเลข 1ถึง 10 ออกทางหน้าจอ
เริม่
i=1
i<=10
yes
i++
no
จบ
i
ผลที่ได้ จากการ Run
กำรทำซำ้ ด้ วยคำสั่ง while
 การทาซ้าด้วยคาสัง่ while เป็ นคาสังท
่ าซ้าแบบหนึ่งในภาษาซี ที่
นิยมใช้ในกรณีทใ่ี ช้ตรวจสอบเงื่อนไขว่ำเป็ นจริงก็จะทำซำ้ แต่ถา้
เงื่อนไขเป็ นเท็จก็จะหลุดออกจำกำรทำซำ้ ซึง่ เงือ่ นไขทีต่ รวจสอบนี้
อาจจะใช้ในกรณีทร่ี จู้ านวนรอบแน่นอนเช่น ตัง้ แต่ a=1 ถึง a=10
หรือไม่รจู้ านวนรอบแน่นอน เช่นทาซ้าในขณะทีต่ วั แปร ans = 'y'
ลักษณะเด่นอย่างหนึ่งของคาสัง่ while คือ จะตรวจสอบเงือ่ นไข
ก่อนว่าเป็ นจริงหรือเท็จ ซึง่ ในการตรวจสอบครัง้ แรก ถ้าเงื่อนไข
ตรวจสอบเป็ นเท็จ ก็จะไม่เข้าไปทาในวนรอบของการทาซ้าเลยก็ได้
แต่ในทานองเดียวกัน ถ้าตัวตรวจสอบเงือ่ นไขเป็ นจริงตลอด ก็จะทาซ้า
ไปไม่สน้ิ สุดก็ได้ ซึง่ ผูเ้ ขียนโปรแกรมจะต้องระมัดระวัง จะต้องเขียน
โปรแกรมให้มโี อกาสออกจากการวนรอบทาซ้าให้ได้
รูปแบบการใช้ ฟังก์ชนั
ผังงานแสดงทิศทางการใช้ คาสัง่ while
 ถ้าเงือ่ นไขตรวจสอบเป็ นเท็จก็จะออกจากการวนรอบทาซ้า แต่ถา้ เป็ นจริง ก็จะเข้าไป
ทาซ้าในวงรอบ คือคาสังทุ
่ กคาสังที
่ อ่ ยูใ่ นเครือ่ งหมาย { และ } แล้วกลับไปตรวจสอบ
เงือ่ นไขทีค่ าสัง่ while อีกครัง้
จงเขียนโปรแกรมเพื่อแสดงข้ อความ I like C
language. จานวน 10 บรรทัด
ผลRUN
ตัวอย่ าง
จงเขียนโปรแกรมเพื่อแสดงตัวอักขระตั้งแต่ 'A' ถึง 'Z'
ผังงานแสดงการแก้ปัญหาโจทย์
 ผังแสดงกำรทำงำน
CODE
1
2
3
4
5
6
7
8
9
10
11
12
Source code
คำอธิ บำยโปรแกรม
#include <stdio.h>
#include <conio.h>
main()
{
char ch='A';
while (ch<='Z')
{
printf("%c\t",ch);
ch++;
}
getch();
}
// เริม่ block ของฟงั ก์ชนั main
// ประกาศตัวแปร ch เป็ นชนิด char
// ทาซ้าในขณะที่ ch น้อยกว่าหรือเท่ากับ 'Z'
// เริม่ block ของคาสัง่ while
// แสดงตัวอักขระทีเ่ ก็บอยูใ่ นตัวแปร ch ซึง่ จะเป็ นตัง้ แต่ 'A' - 'Z'
// เพิม่ ค่าของตัวแปร ch ขึน้ อีก1 คือจาก 'A' เป็ น 'B'
// จบ block ของคาสัง่ while
// รอการกดแป้นใด ๆ
// จบ
ผลRUN
จงเขียนโปรแกรมเพื่อหาผลรวมของเลขที่ป้อนเข้ ามา
จากแป้นพิมพ์ จนกว่าจะป้อนเลข 0
 ผังงานแสดงการแก้ปัญหาโจทย์
CODE
Source code
#include <stdio.h>
#include <conio.h>
int main()
{
float num,sum;
while (num!=0)
{
printf("Enter a number : ");
scanf("%f",&num);
sum=sum+num;
printf("\n");
}
printf("The summary = %.2f : ",sum);
getch();
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16 }
คำอธิ บำยโปรแกรม
// เริม่ block ของฟงั ก์ชนั main
// ประกาศตัวแปร num,sum เป็ นชนิด float
// ทาซ้าในขณะที่ num ไม่เท่ากับ 0 (ไม่รจู้ านวนรอบที่
แน่นอน)
// เริม่ block ของคาสัง่ while
// แสดงข้อความ Enter a number
// รอรับค่าจากแป้นพิมพ์ไปเก็บทีต่ วั แปร num
// เพิม่ ค่า sum เท่ากับ sum+num
// ขึน้ บรรทัดใหม่
// จบ block ของคาสัง่ whileแสดงค่าของผลรวม sum
// รอการกดแป้นใด ๆ
// จบ block ของฟงั ก์ชนั main
ผลRUN
กำรทำซำ้ ด้ วยคำสั่ง do - while
 คาสัง่ do -while เป็ นอีกรูปแบบหนึ่งของคาสังที
่ ใ่ ช้ควบคุมโปรแกรม โดยให้
โปรแกรมจะตรวจสอบเงือ่ นไข หลังจากมีการเข้าไปทาในวงรอบ ของการทาซ้าแล้ว
อย่างน้อย 1 รอบ ถ้ำเงื่อนไขเป็ นจริงก็จะโปรแกรมซำ้ อีกต่อไป จนกระทัง่
เงื่อนไขที่เปรียบเทียบนัน้ เป็ นเท็จ จึงหยุดกำรทำซำ้ โดยมีรปู แบบดังนี้
ผังการทางาน
จงเขียนโปรแกรมเพื่อแสดงข้อความ C language is very
easy. จานวน 10 บรรทัด โดยใช้คาสัง่ do - while
ผังงานแสดงการแก้ปัญหาโจทย์
1
2
3
4
5
6
7
8
9
10
11
12
13
จากผังงานนามาเขียนเป็ นโค้ดได้ดงั นี้
Source code
คำอธิ บำยโปรแกรม
#include <stdio.h>
#include <conio.h>
int main()
{
int i;
do
{
printf("C language is very
easy.\n");
i++;
} while (i<=10);
getch();
// ฟั งก์ชนั main
// เริ่ มต้น block ของ main
// ประกำศตัวแปร i เป็ นชนิ ดจำนวนเต็ม
// เริ่ มคำสั ่ง do
// เริ่ มต้น block ของ do
// แสดงข้อควำม "C language is very easy."
// เพิ่ มค่ำ i ขึน้ อีก 1
// ในขณะที่ a น้ อยกว่ำหรือเท่ำกับ 10
// รอกดแป้ นใด ๆ
}
สรุป
 สิง่ หนึ่งทีค่ อมพิวเตอร์ทางานได้ดกี ว่ามนุ ษย์คอื การทาบางอย่าง ๆ ทีเ่ รียกว่า Loop
การทาซ้านัน้ จะต้องมีตวั แปรเพือ่ ใช้เป็ นตัวควบคุมว่า Loop นัน้ ซ้ากีค่ รัง้ และจะ
หยุดทาซ้าเมือ่ ใด สาหรับภาษาซีจะมีคาสังส
่ าหรับ Loop อยู่ 3 ประเภท
 Loop For
 Loop while
 Loop do while