ในบทนี้ นักเรียนจะได้เรียนรู้เกี่ยวกับคำสั่ง do-while loop ในภาษา C ซึ่งเป็นคำสั่งวนซ้ำสำหรับควบคุมเพื่อให้โปรแกรมทำงานซ้ำภายใต้เงื่อนไขที่กำหนด นี่เป็นเนื้อหาในบทนี้
- การใช้งานคำสั่ง do-while loop
- ตัวอย่างการรับค่าด้วยคำสั่ง do-while loop
- ตัวอย่างโปรแกรมทายตัวเลข
การใช้งานคำสั่ง do-while loop #
คำสั่ง do-while loop เป็นคำสั่งวนซ้ำที่ใช้สำหรับควบคุมเพื่อให้โปรแกรมทำงานซ้ำภายใต้เงื่อนไขที่กำหนด และสิ่งหนึ่งที่มันแตกต่างไปจากคำสั่ง while loop ก็คือ โปรแกรมจะทำงานในลูปอย่างน้อยก่อนหนึ่งรอบเสมอ นี่เป็นรูปแบบการใช้งานคำสั่ง do-while loop ในภาษา C
do {
// statements
} while (condition);
ในการใช้งานเริ่มต้นด้วยคำสั่ง do
ตามด้วยบล็อคของวงเล็บ {}
ซึ่งจะประกอบไปด้วยคำสั่งที่ต้องการให้โปรแกรมทำงานในขณะที่เงื่อนไขเป็นจริง และ condition
เป็นการกำหนดเงื่อนไขสำหรับคำสั่ง do-while เพื่อทำงาน
จะเห็นว่าเงื่อนไขกำหนดและถูกตรวจสอบในตอนท้ายของลูป นั่นหมายความว่าในการใช้งานคำสั่ง do-while loop โปรแกรมจะทำงานในลูปก่อนอย่างน้อยหนึ่งรอบเสมอ
โดยปกติแล้วคำสั่ง do-while loop สามารถใช้ทดแทนคำสั่ง while loop ได้ ในตัวอย่างนี้ เป็นการเขียนโปรแกรมสำหรับนับตัวเลขจาก 1-10 ด้วยคำสั่ง do-while loop ในภาษา C ซึ่งมันเป็นโปรแกรมอย่างง่ายสำหรับแสดงการทำงานของลูป
#include <stdio.h>
int main()
{
int n = 1;
do {
printf("%d\n", n);
n++;
} while (n <= 10);
return 0;
}
นี่เป็นผลลัพธ์การทำงานของโปรแกรม
1
2
3
4
5
6
7
8
9
10
เริ่มต้นเราได้ประกาศตัวแปร n
ที่มีค่าเป็น 1
จากนั้นโปรแกรมทำงานในลูปแต่ละรอบโดยแสดงค่าในตัวแปรออกทางหน้าจอ หลังจากจบลูปในแต่ละรอบเงื่อนไข n <= 10
จะถูกตรวจสอบ ถ้าหากเป็นจริงมันจะทำงานในรอบถัดไป หรือจบการทำงานของลูปหากเงื่อนไขไม่เป็นจริง
และในโปรแกรมเดียวกันนี้ เราสามารถนำมาเขียนใหม่ด้วยคำสั่ง while loop ได้ดังนี้ ซึ่งทั้งสองให้ผลลัพธ์การทำงานที่เหมือนกัน และเราทำเช่นนี้ก็เพื่อต้องการเปรียบเทียบให้นักเรียนเห็นถึงการใช้งานคำสั่งทั้งสองว่ามันสามารถใช้ทดแทนกันได้ นี่เป็นตัวอย่างของโปรแกรม
#include <stdio.h>
int main()
{
int n = 1;
while (n <= 10) {
printf("%d\n", n);
n++;
}
return 0;
}
นี่เป็นผลลัพธ์การทำงานของโปรแกรม ซึ่งให้ผลลัพธ์เหมือนกับตัวอย่างก่อนหน้า
1
2
3
4
5
6
7
8
9
10
ในตัวอย่างนี้ แม้ว่าโปรแกรมที่เขียนด้วยคำสั่ง while loop จะสามารถทำงานได้เหมือนกับการใช้งานคำสั่ง do-while loop ทุกอย่าง แต่นี่จะเปลี่ยนไปเมื่อการตรวจสอบเงื่อนไขในครั้งแรกไม่เป็นจริง ซึ่งเมื่อมันเกิดขึ้น คำสั่ง do-while จะยังคงทำในลูปก่อนหนึ่งรอบเสมอ ในขณะที่คำสั่ง while loop จะไม่ทำงานในลูปเลย
ในตัวอย่างนี้ เป็นการใช้งานลูปทั้งสองโดยการกำหนดเงื่อนไขให้เป็นเท็จตั้งแต่การตรวจสอบเงื้่อนไขในครั้งแรก
#include <stdio.h>
int main()
{
printf("do-while loop\n");
int n = 0;
do {
printf("%d\n", n);
n--;
} while (n > 0);
printf("\nwhile loop\n");
int m = 0;
while (m > 0) {
printf("%d\n", m);
m--;
}
return 0;
}
นี่เป็นผลลัพธ์การทำงานของโปรแกรม
do-while loop
0
while loop
จะเห็นว่าในการตรวจสอบเงื่อนไขครั้งแรกของลูปทั้งสองนั้นไม่เป็นจริง แต่ในลูปของคำสั่ง do-while จะยังคงทำงานในรอบแรกก่อนเสมอ นั่นเป็นเพราะว่าเงื่อนไขของคำสั่ง do-while ลูปถูกตรวจสอบในตอนท้าย ในขณะที่คำสั่ง while loop จะไม่ทำในลูปเพราะเงื่อนไขตรวจสอบก่อนทำงานในรอบแรกนั่นเอง
และนี่เป็นสิ่งที่แตกต่างกันระหว่างการใช้งานลูปทั้งสอง และในบางครั้งนักเรียนอาจต้องเลือกลูปที่เหมาะสมกับงานที่ทำ แต่อย่างไรก็ตาม ทั้งสองลูปนั้นสามารถใช้ทดแทนกันได้ทุกกรณี แต่ในการแก้ไขปัญหาบางอย่างการใช้งานคำสั่ง do-while loop อาจทำให้การเขียนโปรแกรมง่ายและสะดวกกว่า มาดูกันในตัวอย่างต่อไป
ตัวอย่างการรับค่าด้วยคำสั่ง do-while loop #
มาดูตัวอย่างการเปรียบเทียบความแตกต่างของการใช้งานคำสั่ง do-while loop และคำสั่ง while loop เพิ่มเติม ในตัวอย่างนี้ เรามาเขียนโปรแกรมสำหรับหาผลรวมของตัวเลขทั้งหมดที่รับมาจากทางคีย์บอร์ดโดยการใช้งานลูปทั้งสอง นี่เป็นตัวอย่างของโปรแกรมแรกที่เขียนด้วยคำสั่ง do-while loop
#include <stdio.h>
int main()
{
int sum = 0;
int n;
do {
printf("Enter number or 0 to exit: ");
scanf("%d", &n);
sum += n;
} while (n != 0);
printf("Sum of all entered numbers is: %d\n", sum);
return 0;
}
นี่เป็นผลลัพธ์การทำงานของโปรแกรม
Enter number or 0 to exit: 2
Enter number or 0 to exit: 4
Enter number or 0 to exit: 7
Enter number or 0 to exit: -1
Enter number or 0 to exit: 8
Enter number or 0 to exit: 0
Sum of all entered numbers is: 20
นี่เป็นโปรแกรมสำหรับหาผลรวมจากตัวเลขทั้งหมดที่กรอกเข้ามาจากทางคีย์บอร์ด โดยใช้คำสั่ง do-while loop ในการวนรับค่า และในขณะที่ตัวเลขที่กรอกเข้ามาไม่เท่ากับ 0
โปรแกรมจะทำงานในลูปเพื่อรับค่าและหาผลรวมของตัวเลขที่กรอกเข้ามาเรื่อยๆ อย่างไม่มีที่สิ้นสุด
while (n != 0);
เพื่อจบการทำงานของลูป เราเพียงแค่ต้องกรอก 0
เพื่อให้เงื่อนไขของคำสั่ง do-while loop เป็นเท็จ และโปรแกรมจะแสดงผลรวมของตัวเลขทั้งหมดที่กรอกเข้ามาออกทางหน้าจอ
ในตัวอย่างนี้แสดงให้เห็นว่าค่าที่รับเข้ามานั้นใช้เป็นเงื่อนไขในการทำงานของลูปซึ่งไม่สามารถทราบล่วงหน้าได้ว่ามันจะเป็นเท็จตอนไหน ดังนั้นเราสามารถใช้คำสั่ง do-while loop เพื่อให้รับค่าก่อนหนึ่งครั้งก่อนที่จะมีการตรวจสอบเงื่อนไขได้
เพื่อให้นักเรียนเห็นวัตถุประสงค์การใช้งานของคำสั่ง do-while loop อย่างชัดเจน เราจะเปรียบเทียบการทำงานนี้ด้วยโค้ดที่เขียนด้วยการใช้คำสั่ง while loop และนี่เป็นโปรแกรมเดียวกันที่เขียนโดยใช้คำสั่ง while loop แทน
#include <stdio.h>
int main()
{
int sum = 0;
int n;
printf("Enter number or 0 to exit: ");
scanf("%d", &n);
sum += n;
while (n != 0) {
printf("Enter number or 0 to exit: ");
scanf("%d", &n);
sum += n;
}
printf("Sum of all entered numbers is: %d\n", sum);
return 0;
}
นี่เป็นผลลัพธ์การทำงานของโปรแกรม เราได้กรอกชุดของตัวเลขที่แตกต่างกันออกไป
Enter number or 0 to exit: 10
Enter number or 0 to exit: 2
Enter number or 0 to exit: 3
Enter number or 0 to exit: 0
Sum of all entered numbers is: 15
เช่นเดียวกับตัวอย่างก่อนหน้า โปรแกรมจะถามให้กรอกตัวเลขเพื่อนำมาหาผลรวม จนกว่าจะกรอก 0
เพื่อจบการทำงานของลูป จะเห็นว่าในการใช้งานคำสั่ง while loop เงื่อนไขจะต้องได้รับการตรวจสอบก่อนที่โปรแกรมจะสามารถทำงานในลูปในรอบแรกก่อน
printf("Enter number or 0 to exit: ");
scanf("%d", &n);
sum += n;
นั่นจึงทำให้เราต้องรับค่าให้กับตัวแปร n
ก่อนที่จะนำมาตรวจสอบเงื่อนไขในครั้งแรก เราจำเป็นต้องทำเช่นนี้เนื่องจากไม่เราสามารถไว้วางใจค่าในตัวแปร n
ได้ เพราะในภาษา C นั้นถ้าเราประกาศตัวแปรและไม่ได้กำหนดค่า มันสามารถมีค่าเป็นอะไรก็ได้รวมทั้ง 0
และเมื่อนี่เกิดขึ้น โปรแกรมจะไม่ได้ทำงานในลูป
แต่การใช้วิธีนี้ จะเห็นว่าโค้ดนอกลูปและในลูปนั้นซ้ำกันและนี่ถือว่าเป็นการเขียนโปรแกรมที่ซ้ำซ้อนและอาจมากเกินความจำเป็น เพื่อตัดส่วนที่ซ้ำกันนี้ออกไปเราสามารถใช้คำสั่ง do-while loop แทนคำสั่ง while loop ได้เหมือนกับที่เราทำในตัวอย่างแรก
ตัวอย่างโปรแกรมทายตัวเลข #
สำหรับตัวอย่างสุดท้ายของการใช้งานคำสั่ง do-while loop ในภาษา C เราจะมาเขียนเกมทายตัวเลข โดยโปรแกรมจะสุ่มตัวเลขที่มีค่าระหว่าง 1-10 และถามให้นักเรียนทายตัวเลขที่สุ่มมาได้จนกว่าจะถุูกต้อง นี่เป็นโค้ดของโปรแกรม
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
int main()
{
srand(time(NULL));
int secret = rand() % 10 + 1;
int n;
int count = 0;
do {
printf("Enter number to guess: ");
scanf("%d", &n);
count++;
} while (n != secret);
printf("Congrats! you have guessed it!\n");
printf("The secret number is %d\n", secret);
printf("Number of guesses: %d\n", count);
return 0;
}
นี่เป็นผลลัพธ์การทำงานของโปรแกรม
Enter number to guess: 3
Enter number to guess: 8
Enter number to guess: 5
Enter number to guess: 1
Congrats! you have guessed it!
The secret number is 1
Number of guesses: 4
เนื่องจากมันเป็นเกมที่สนุกมาก เรารันและเล่นมันอีกรอบ
Enter number to guess: 10
Enter number to guess: 1
Enter number to guess: 5
Enter number to guess: 3
Enter number to guess: 4
Enter number to guess: 6
Enter number to guess: 8
Congrats! you have guessed it!
The secret number is 8
Number of guesses: 7
ในการเล่นรอบที่สองนั้นค่อนข้างโชคไม่ดี เนื่องจากเราต้องใช้จำนวนของการสุ่มทั้งหมด 7 ครั้ง เพราะเซ็ตของตัวเลขที่เป็นไปได้ที่จะทายถูกต้องอยู่ระหว่าง 1-10 ดังนั้นถ้าหากนักเรียนโชคร้ายที่สุดก็จะใช้การสุ่มเพียง 10 ครั้งเท่านั้น ต่อไปเป็นการอธิบายว่าแต่ละส่วนของโปรแกรมทำงานอย่างไร
srand(time(NULL));
เพื่อทำให้การสุ่มตัวเลขแตกต่างกันออกไปในการรันโปรแกรมแต่ละครั้ง เรากำหนด Random seed ด้วยฟังก์ชัน srand()
โดยใช้เวลาที่รับมาจากฟังก์ชัน time()
เป็น Random seed สำหรับการสุ่มตัวเลขในแต่ละครั้ง
int secret = rand() % 10 + 1;
ในภาษา C เราสามารถใช้ฟังก์ชัน rand()
เพื่อสุ่มตัวเลขได้ ฟังก์ชันนี้ส่งค่ากลับเป็นตัวเลขที่สุ่มได้เป็นจำนวนเต็ม และเรานำมันมาหารเอาเศษด้วย 10 และบวก 1 เข้าไปเพื่อสุ่มตัวเลขที่มีค่าระหว่าง 1-10 เพื่อนำมาใช้ในเกมของเรา
int n;
int count = 0;
จากนั้นเป็นการเริ่มต้นการทำงานของลูป โดยประกาศตัวแปร n
เพื่อใช้สำหรับเก็บตัวเลขสำหรับการทาย และตัวแปร count
ใช้สำหรับนับว่าผู้เล่นได้ทำการทายไปกี่ครั้งแล้ว หรือมันคือจำนวนรอบที่ลูปทำงานนั่นเอง
do {
printf("Enter number to guess: ");
scanf("%d", &n);
count++;
} while (n != secret);
โปรแกรมจะทำงานในลูปและถามให้นักเรียนกรอกตัวเลขเพื่อทายจนกว่าจะถูกต้อง เมื่อค่าที่กรอกเข้ามานั้นถูกต้องจะทำให้เงื่อนไข n != secret
ไม่เป็นจริงและลูปจบการทำงาน ซึ่งหมายความว่านักเรียนทายถูกต้องแล้ว และสรุปผลการเล่นเกมของผู้เล่นในตอนท้าย
ในบทนี้ นักเรียนได้เรียนรู้การใช้งานคำสั่ง do-while loop ในภาษา C เราได้พูดถึงข้อแตกต่างสำหรับการใช้งานระหว่างคำสั่ง do-while loop และ while loop และเพื่อให้นักเรียนสามารถเลือกใช้งานลูปที่เหมาะสมในโปรแกรมของนักเรียนได้