ข้อความสั่งทั้งสองแบบข้างล่างนี้ ให้ผลลัพธ์ชนิดเดียวกัน
repeat repeat
ข้อความสั่ง begin
ข้อความสั่ง ข้อความสั่ง
until เงื่อนไขออกจากวนซ้ำ ข้อความสั่ง
end
until เงื่อนไขออกจากวนซ้ำ
ตัวอย่าง 4-4 โปรแกรมแสดงการใช้ ข้อความสั่ง repeat เพื่อควบคุมโปรแกรม โดยโปรแกรมนี้ คำนวณหาจำนวนหลักของเลขจำนวนเต็ม
Program Countdigits (input, output);
(*counts digits by repeated division*)
VAR inputnumber, numberofdigits : integer;
begin
numberofdigits := 0;
writeln ('Please enter an integer.');
readln (Inputnumber);
write (Inputnumber );
repeat
Inputnumber := Inputnumber div 10;
Numberofdigits := Numberofdigits + 1
until Inputnumber = 0;
writeln (' has ', Numberofdigits : 1, 'digits.')
end. (*countdigits*)
ผลลัพธ์
please enter an integer.
-3825
-3825 has 4 digits
โปรแกรม countdigits แสดงการทำงานของข้อความสั่ง repeat วิธีนี้ทำโดยนับจำนวนหลักของตัวเลขที่มีข้อความสั่ง repeat หยุดทำงานเมื่อตัวเลยขที่อ่านเข้ามามีค่าเป็นศูนย์
ในบางครั้งไม่สามารถนับจำนวนข้อมูลนำเข้าได้ จึงใช้สัญลักษณ์พิเศษ (sentinal) หรือ ตัวเลขที่เป็นดรรชนี บอกการสิ้นสุดของข้อมูล เทคนิคนี้นิยมใช้กับโปรแกรมที่มีข้อมูลนำเข้าเป็นจำนวนหน้า และไม่สามารถนับจำนวนข้อมูลได้
ตัวอย่าง 4-5 โปรแกรมคำนวณค่าเฉลี่ยของเลขทศนิยมบวก โดยโปรแกรมอ่านข้อมูลที่เป็นเลขจำนวนเต็มบวก จนกระทั่งอ่านพบเลขลบ ซึ่งเป็นตัวเลขบอกการสิ้นสุดของข้อมูลนำเข้า
Program Average (Input , Output);
(*Averages a series of numbers. -1 marks the end of data *)
const Sentinel = -1;
var value, total, Average : real;
Counter : integer;
begin
Total : = 0
Counter : = 0 ; (*Initialization*)
Average : = 0 ;
read (value) ;
if (value = Sentinel)
then writeln ('there is no data to average!')
else begin
repeat
Total : = Total + value ;
Counter : = Counter + 1;
read (Value) ;
Until Value = Sentinel ;
Average : = Total/Counter;
writeln ('The Average of :',counter :1,' values
is :', Average : 10)
end else
end. (*Average*)
ข้อมูลนำเข้า
23.9 85.68 227E02 0.00863 75
93.44 71 14.7E-03 66 -1
ข้อมูลส่งออก
The average of 9 values is 2.5683E+03
การทำงานของข้อความสั่ง repeat คล้ายกับ ข้อความสั่ง while แต่ในการวนซ้ำนั้น การปฏิบัติงานในข้อความสั่ง repeat เกิดขึ้นอย่างน้อย 1 ครั้ง ในขณะที่ข้อความสั่ง ใน while อาจจะไม่ได้ปฏิบัติงาน เนื่องจากเงื่อนไขใน while ไม่เป็นจริง นอกจากนี้การวนซ้ำ ใน repeat จบลงเมื่อเงื่อนไขในการออก (exit condition) เป็นจริง ขณะที่เมื่อเงื่อนไขในการเข้า (enter condition) เป็นจริง ทำให้คำสั่ง while มีการวนซ้ำ
4.3.3 ข้อความสั่ง WHILE (While Statement)
เป็นข้อความสั่งให้วนซ้ำโดยมีการทดสอบเงื่อนไขก่อนที่จะเริ่มดำเนินงานตามข้อความสั่ง ในวนซ้ำ ถ้าเงื่อนไขไม่เป็นจริงจะไม่มีการดำเนินงานใดๆ เลย ในวนซ้ำและโปรแกรมจะข้ามไปทำงานที่ข้อความสั่งถัดไป
ในส่วนแรกของข้อความสั่ง while ประกอบด้วยนิพจน์ทางตรรกวิทยา ซึ่งนิพจน์นี้เป็นตัวพิจารณาว่าการวนซ้ำนี้มีการทำงานหรือจะเกิดการวนซ้ำ นิพจน์ทางตรรกวิทยานี้ เรียกว่า เงื่อนไขเข้า (entry condition) เงื่อนไขนี้ทำหน้าที่เหมือนข้อความสั่ง if ซึ่งนิพจน์ทางตรรกวิทยานี้ต้องเป็นจริงจึงทำให้วนซ้ำเกิดขึ้นได้ เมื่อวนซ้ำมีการดำเนินงานจบลง มีการประเมินค่าทางตรรกวิทยา ถ้าค่าที่ได้เป็นจริง มีการดำเนินของวนซ้ำอีกครั้ง ถ้าค่าที่ได้ไม่เป็นจริง โปรแกรมหยุด วนซ้ำ แล้วไปทำตามข้อความสั่ง ที่ถัดจากข้อความสั่ง while ต่อไป
รูปแบบ : while นิพจน์ทางตรรกวิทยา (*entry condition*)
do
การทำงาน
ตัวอย่าง 4-6 โปรแกรมแสดงการใช้ข้อความสั่ง while
Program LongDivision (input, output) ;
(* simulate div and mod for batch input *)
Var
dividend, divisor, wholes, remainder : integer;
Begin
wholes := 0;
readln (dividend, divisor);
write ('The integer quotient of ',dividend:4);
write ('and', divisor :2, 'is');
remainder := dividend;
while (remainder - divisor) = 0
do begin
remainder := remainder - divisor ;
wholes := wholes + 1
end;(*while*)
writeln (wholes:2 ,'with remainder', remainder:2)
End.(*Longdivision*)
ข้อมูลนำเข้า
22 5
ข้อมูลส่งออก
The integer quotient of 22 and 5 is 4, with remainder 2
String
TOP |