การเขียนโปรแกรมภาษา PASCAL

            
               

          ข้อความสั่งทั้งสองแบบข้างล่างนี้ ให้ผลลัพธ์ชนิดเดียวกัน   
          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