วันพุธที่ 10 สิงหาคม พ.ศ. 2554

การนำข้อมูลออก(Write, WriteLn Statement)

หลักการนำข้อมูลออกของคอมพิวเตอร์
                ในการประมวลผลข้อมูลของคอมพิวเตอร์ จะมีการนำข้อมูลเข้าไปในหน่วยความจำก่อน ต่อจากนั้นจะมีการเคลื่อนย้ายข้อมูลเข้าและออกระหว่างหน่วยความจำกับหน่วยประมวลผลกลาง (CPU) เพื่อทำการประมวลผลตามคำสั่งจากโปรแกรม ข้อมูลและผลลัพธ์ที่ได้จะคงถูกเก็บอยู่ในหน่วยความจำเช่นเดิม ข้อมูลเหล่านี้จะหายไปเมื่อคอมพิวเตอร์หยุดทำงาน หรือเมื่อมีโปรแกรมอื่นเข้ามาแทน ตามปกติโปรแกรมส่วนใหญ่มักจะมีการสั่งให้นำข้อมูลออกจากหน่วยความจำเสมอ ซึ่งอาจจะเพื่อแสดงที่จอภาพ พิมพ์ที่เครื่องพิมพ์ บันทึกไว้ในดิสก์ ส่งเสียงที่ลำโพง เป็นต้น
                ในภาษาปาสคาล มีวิธีนำข้อมูลออกจากหน่วยความจำโดยใช้คำสั่ง Write หรือ WirteLn (Wirte-Line)
รูปแบบของ Write และ WriteLn
กล่องข้อความ: Write(OUTPUT, item1, item2,…..,itemN)
WriteLn(OUTPUT, item1, item2,…..,itemN)


                คำสั่ง Write และ WirteLn มีรูปแบบดังนี้

                จากรูปแบบข้างต้นมีความหมายดังต่อไปนี้
1.              OUTPUT หมายถึง ตัวแปรที่เป็นชื่อของอุปกรณ์เอาต์พุตของคอมพิวเตอร์ซึ่งอาจจะเป็นจอภาพ เครื่องพิมพ์ พล็อตเตอร์ ดิสก์ ลำโพง หรืออื่น ๆ ถ้าส่วนนี้ไม่ระบุตัวแปรเอาไว้ แสดงว่าให้แสดงที่จอภาพ
2.              Item1, …… , itemN คือข้อมูลต่าง ๆ ที่นำออกตั้งแต่รายการที่ 1 ถึงรายการที่ N แต่ละรายการจะคั่นด้วยเครื่องหมาย , ข้อมูลแต่ละรายการจะถูกนำออกเรียงตามลำดับจากรายการแรกถึงรายการสุดท้าย ถ้าเป็นการแสดงที่จอภาพ รายการข้อมูลจะเรียงอยู่ในแถวเดียวกัน
3.              ข้อมูลแต่ละรายการ (item) อาจจะมีคุณสมบัติดังต่อไปนี้
8 เป็นสตริง (string) คือข้อมูลที่อยู่ในเครื่องหมาย '   ' เช่น 'HI'  '4+5 = '
8 เป็นตัวแปร เช่น CarnName TotalAmount Done
8 เป็นการคำนวณ เช่น 4 + 5 (ซึ่งจะได้ผลลัพธ์เป็น 9) Value1 + Value2 (จะได้ผลลัพธ์เท่ากับผลบวกของค่าที่อยู่ใน Value1 และ Value2 )
4.              สำหรับที่จอภาพ WriteLn เมื่อแสดงข้อมูลที่มีใน (  ) หมดแล้ว เคอร์เซอร์จะเลื่อนลงมาอยู่ที่คอลัมน์ที่ 1 ของแถวล่างที่อยู่ถัดลงมา ส่วน Write เคอร์เซอร์จะอยู่ตอนท้ายของแถวเดิม
ตัวอย่างที่ 1  คำสั่ง Write (' 4 + 5 = ', 4 +5 )
                                            การแสดงผลที่จอภาพ 4 + 5 = 9 o (ตำแหน่งเคอร์เซอร์)
      ตัวอย่างที่ 2  คำสั่ง WriteLn (' 4 + 5 = ', 4 +5 )
                                 การแสดงผลที่จอภาพ 4 + 5 = 9
                         o (ตำแหน่งเคอร์เซอร์)
5.              สำหรับ WriteLn ที่ไม่มี (  ) ต่อท้าย หมายถึง การเลื่อนเคอร์เซอร์ลงมาอยู่ที่คอลัมน์ที่ 1 ของล่างที่อยู่ถัดลงมา โดยไม่มีการแสดงข้อใด ๆ
ตัวอย่างที่ 3  คำสั่ง WriteLn
                                            การแสดงผลที่จอภาพ
                                                                                                o (ตำแหน่งเคอร์เซอร์)

การกำหนดตำแหน่งแสดงข้อมูลที่จอภาพ

                จากโปรแกรมที่ผ่านมาจะเห็นได้ว่า คอมพิวเตอร์จะแสดงข้อมูลเริ่มจากทางด้านซ้ายสุดของจอภาพและเรียงลำดับไปทางขวาเสมอ ในกรณีที่เราต้องการจัดตำแหน่งแสดงข้อมูลให้แตกต่าง ไปจากนี้สามารถทำได้ โดยปาสคาลกำหนดรูปแบบไว้ดังนี้
กล่องข้อความ: Write(item : ค่าความยาวของ item, item2,…..,itemN)
WriteLn(item : ค่าความยาวของ item, item2,…..,itemN)


                ข้อมูลที่ไม่มีทศนิยม มีรูปแบบดังนี้

ตัวอย่าง WriteLn ('Pascal' : 20);
                สตริง Pascal ถูกกำหนดให้มีความยาว 20 ตัวอักษร ซึ่งจำนวนที่แท้จริงคือ 6 ตัวอักษร ดั้งนั้นคอมพิวเตอร์จะเติมเครื่องหมายวรรคเข้าข้างหน้าคำ Pascal อีก 14 ตัวเพื่อให้ครบ 20 ตัวอักษร แล้วแสดงข้อมูลโดยกำหนดตำแหน่งต่าง ๆ ดังนี้
                                อักษร    l               อยู่ตำแหน่ง          20           นับจากทางซ้ายของจอภาพ
                                           a              อยู่ตำแหน่ง          19           นับจากทางซ้ายของจอภาพ
                                           c              อยู่ตำแหน่ง          18           นับจากทางซ้ายของจอภาพ
                                           P              อยู่ตำแหน่ง          15           นับจากทางซ้ายของจอภาพ


                ข้อมูลที่มีทศนิยม มีรูปแบบดังนี้
ตัวอย่าง WriteLn(123.456789 :9:2);
                ในที่นี้กำหนดให้ 123.456789 มีความยาวเป็น 9 ตัวอักษร (รวมจุดทศนิยม 1 อักษรด้วย) และกำหนดให้มีเลขหลังจุดทศนิยม 2 ตำแหน่ง
                คอมพิวเตอร์ จะแสดงที่จอภาพดังนี้ 123.46
                โดย       เลข         6      อยู่ที่ตำแหน่ง             9       นับจากทางซ้าย
                           เลข         4      อยู่ที่ตำแหน่ง             8       นับจากทางซ้าย
         เลข         1      อยู่ที่ตำแหน่ง             4       นับจากทางซ้าย
               จุดทศนิยม     อยู่ที่ตำแหน่ง             7       นับจากทางซ้าย

การคำนวณเลขคณิต (Arithmatic Expression)
                การคำนวณค่าทางเลขคณิต ปาสคาลมีการกระทำหรือโอเปอเรชัน (operation) รวม 6 รายการ แต่ละรายการมีเครื่องหมายหรือโอเปอเรเตอร์ (operator) ดังตารางต่อไปนี้
โอเปอเรชัน
โอเปอเรเตอร์
ตัวอย่าง
บวก
+
Year + 1
ลบ
-
Year - 1
คูณ
*
Price * Quantity
หาร อินทีเจอร์
DIV
8 DIV 3 {  ได้ค่าเป็น 2    }
หาร
/
8/3       { ได้ค่าเป็น 2.666}
modulue
MOD
17 MOD 12 { ได้ค่าเป็น 5}

ลำดับการคำนวณ (Precedence)
                ในกรณีที่การคำนวณประกอบด้วยโอเปอรเรเตอร์หลายตัว จะมีลำดับการคำนวณดังนี้
1.              การคำนวณที่อยู่ในเครื่องหมายวงเล็บ ( ) จะมีการกระทำเป็นลำดับแรก
2.              เครื่องหมาย * / DIV MOD มีลำดับการคำนวณก่อน + และ -
3.              การคำนวณทีมีเครื่องหมายที่มีลำดับเท่ากันอยู่ด้วยกันจะมีการคำนวณจากทางซ้ายไปทางขวาตามลำดับ

ตัวอย่าง แสดงผลของการคำนวณจากโจทย์ 5*10+2*5 เมื่อกำหนดการคำนวณให้มีลำดับแตกต่างกัน

Program Calc;
Begin
            WriteLn( '5*10+2*5        = ', 5*10+2*5);
            WriteLn( '5*(10+2)*5     = ', 5*(10+2)*5);
            WriteLn( '(5*10)+(2*5) = ', (5*10)+(2*5));
            WriteLn( '((5*10)+2)*5 = ', ((5*10)+2)*5);
            WriteLn( '5*(10+(2*5)) = ', 5*(10+(2*5)));
End.


                ซึ่งจะได้ผลลัพธ์ดังนี้
                5*10+2*5                             =              60
                         5*(10+2)*5                           =              300
                (5*10)+(2*5)                        =              60
                          ((5*10)+2)*5                       =              260
                5*(10+(2*5))                        =              100

การแสดงค่าจากตัวแปร

                ตัวแปรเป็นชื่อของหน่วยความจำที่ใช้สำหรับเก็บข้อมูล
ตัวอย่าง สมมติมีการตั้งชื่อดังนี้
                VAR      Inches    :               Real;
                              Weight  :               Integer;

                สามารถสร้างเป็นภาพความคิดได้ดังนี้
                หน่วยความจำชื่อ Inches มีขนาด 6 ไบต์
                         ใช้สำหรับเก็บข้อมูลชนิดตัวเลขที่มีทศนิยม
                หน่วยความจำชื่อ Weight มีขนาด 2 ไบต์
                         ใช้สำหรับเก็บข้อมูลชนิดตัวเลขที่ไม่มีทศนิยม

ตัวอย่างที่  โปรแกรมแสดงการสร้าง กำหนดค่า และแสดงค่าจากตัวแปรชนิดอินทรีเจอร์ซึ่งใช้สำหรับเก็บค่าตัวเลขที่ไม่มีทศนิยม

Program ExInte;
Var
            A, B, C : Integer;
Begin
            A := 15; B := 10; C:=    20;
            WriteLn( A*B+C );
            WriteLn( A*(B+C) );
            WriteLn( (A*B)+C );
End.




การรับข้อมูลเข้า (Read, ReadLn Statement)

หลักการรับข้อมูล

                เพื่อให้โปรแกรมใช้งานได้อย่างกว้างขวางและสะดวกในโปรแกรมส่วนใหญ่จึงไม่กำหนดค่าของ ตัวแปรไว้ในโปรแกรม แต่จะใช้วิธีการรับค่าเข้าไปตอนโปรแกรมทำงาน
                คอมพิวเตอร์จะรับข้อมูลเข้ามาในหน่วยความจำโดยผ่านทางอุปกรณ์อินพุต (Input devices) เช่น คีย์บอร์ด (keyboard) ดิสก์ไดร์ฟ (disk drive) เมาส์ (mouse) ซึ่งปาสคาลจะรับข้อมูลด้วยคำสั่ง Read และ ReadLn (Read-Line)

รูปแบบของ Read และ ReadLn
กล่องข้อความ: Read(INPUT, Var1, Var2,…..,VarN)
ReadLn(INPUT, Var1, Var2,…..,VarN)


                คำสั่ง Read และ ReadLn มีรูปแบบดังนี้
                จากรูปแบบข้างต้นมีความหมายดังต่อไปนี้
1.              Input หมายถึง ตัวแปรที่เป็นชื่ออุปกรณ์อินพุตของคอมพิวเตอร์ ซึ่งอาจจะเป็นคีย์บอร์ด ดิสก์ เมาส์ หรืออื่น ๆ ถ้าส่วนนี้ไม่ระบุตัวแปรเอาไว้ แสดงว่าว่างให้รับข้อมูลจากคีย์บอร์ด
2.              Var1,…VarN คือตัวแปรสำหรับเก็บข้อมูลแต่ละรายการที่รับเข้ามา ตั้งแต่รายการที่ 1 ถึงรายการที่ N แต่ละรายการจะคั่นด้วยเครื่องหมาย , เวลาป้อนข้อมูลจะต้องคั่นแต่ละรายการด้วยเครื่องหมายวรรค หรือกดคีย์ Enter ข้อมูลที่รับเข้ามาจะถูกนำไปเก็บในตัวแปรแต่ละตัวเรียงตามลำดับจากซ้ายไปขวา
3.              ตัวแปรแต่ละตัวจะรับข้อมูลได้เฉพาะที่เป็นชนิดเดียวกันถ้าป้อนข้อมูลผิดชนิดเช่น
Var         Year  : integer;
ถ้าเราป้อนข้อมูลเป็น 12.50 จะเกิดความผิดพลาดประเภท Run time Error ขึ้นซึ่งจะมีผลให้โปรแกรมหยุดการทำงานทันที
                4.    สำหรับจอภาพ ReadLn เมื่อรับข้อมูลครบตามจำนวนตัวแปรที่มีใน (  ) แล้วเคอร์เซอร์จะเลื่อนลงมาอยู่ที่ที่คอลัมน์ที่ 1 ของแถวล่างที่อยู่ถัดลงมา ส่วน Read เคอร์เซอร์จะอยู่ตอนท้ายของแถวเดิม
ตัวอย่างที่ 1   คำสั่ง Read(Name,Age)
ป้อนข้อมูล Bamrung 50 กดคีย์ Enter
แสดงที่จอ Bamrung 50  o  (ตำแหน่งเคอร์เซอร์)
ตัวอย่างที่ 2 คำสั่ง ReadLn(Name,Age)
               ป้อนข้อมูล Bamrung 50 กดคีย์ Enter
               แสดงที่จอ Bamrung 50   
o (ตำแหน่งเคอร์เซอร์)
5.  สำหรับ ReadLn ที่ไม่มี (  ) ต่อท้าย หมายถึงการหยุดรอรับการกดคีย์ Enter เมื่อคีย์ Enter ถูกกด โปรแกรมจะทำตามคำสั่งที่อยู่ต่อมา
ตัวอย่าง     คำสั่ง Write ('Press Enter'); ReadLn;
               แสดงที่จอ Press Enter o
               กดคีย์ Enter
               แสดงที่จอ   o (ตำแหน่งเคอร์เซอร์)
คำสั่งตามตัวอย่างนี้    นิยมใช้ในกรณีที่ต้องการให้โปรแกรมหยุดการทำงานชั่วคราว และเมื่อกดแป้น Enter โปรแกรมจะทำงานต่อไป


ตัวอย่างคำสั่ง Read และ ReadLn
กล่องข้อความ:      Program HiName;
     Var 
 	         Name : String[50];
     Begin
               	Write('Input your Name ');
               	ReadLn(Name); 
              	WriteLn('Hi',Name');
     End.


ตัวอย่าง โปรแกรม แสดงการรับข้อมูลสตริงที่เป็นชื่อคน  เมื่อป้อนข้อมูลแล้วคอมพิวเตอร์จะแสดงข้อความ Hi (ชื่อ)
โปรแกรมแสดงผลดังนี้
Input your Name
                พิมพ์ชื่อ CHAIYA  กดคีย์ Enter
                ที่หน่วยความจำ Name มีข้อมูลดังนี้     Name
                 CHAIYA 
ที่จอภาพจะเป็นดังนี้
                Hi CHAIYA

ลูปแบบ Repeat

การทำซ้ำ

สมมติว่าต้องการใช้คอมพิวเตอร์แสดงข้อความต่อไปนี้

I am a MEDIA INTELLIGENCE TECHNOLOGY .
I am a MEDIA INTELLIGENCE TECHNOLOGY .
I am a MEDIA INTELLIGENCE TECHNOLOGY .
I am a MEDIA INTELLIGENCE TECHNOLOGY .
I am a MEDIA INTELLIGENCE TECHNOLOGY .

                นักเรียนมีวิธีการเขียนโปรแกรมได้ 2 วิธีคือ
                1. เขียนทุกคำสั่ง ดังนี้
                   WriteLn(‘I am a MEDIA INTELLIGENCE TECHNOLOGY . ’);
WriteLn(‘I am a MEDIA INTELLIGENCE TECHNOLOGY . ’);
WriteLn(‘I am a MEDIA INTELLIGENCE TECHNOLOGY . ’);
WriteLn(‘I am a MEDIA INTELLIGENCE TECHNOLOGY . ’);
WriteLn(‘I am a MEDIA INTELLIGENCE TECHNOLOGY . ’);
                วิธีการนี้อาจจะไม่สะดวกถ้าคำสั่งมีจำนวนมาก ๆ
                2. โปรแกรมคอมพิวเตอร์มีวิธีการเฉพาะสำหรับดำเนินการกับงานที่ต้องทำซ้ำ ๆ เรียกว่าการทำงานในลักษณะลูป (Loop) ในภาษาปาสคาลมีอยู่ 3 แบบ คือ Repeat While และ For
                หลักการทำงานของโปรแกรมในลักษณะลูปก็คือ โปรแกรมจะทำงานตามคำสั่งในคำสั่งชุดเดิมซ้ำ ๆ กัน จนกระทั่งสอดคล้องกับเงื่อนไขที่เป็นจริง (True) หรือเท็จ (False) แล้วแต่กรณีของลูปแต่ละแบบ
                ค่าของเงื่อนไขที่เป็นจริงหรือเท็จนี้ได้มาจากการกระทำ 2 ประเภท คือ การเปรียบเทียบ (Relational expression) และการหาค่าบูลีน (Boolean expression)
การเปรียบเทียบ
                การเปรียบเทียบ หรือรีเลชันนอลเอกซ์เพรสชัน หมายถึง การหาคำตอบว่าเมื่อนำค่าที่อยู่ทางด้านซ้ายและทางขวาของโอเปอเรเตอร์เปรียบเทียบ มาเปรียบเทียบกันแล้วจะได้ผลเป็นจริงหรือเท็จ
                การเปรียบเทียบมี 6 กรณี แต่ละกรณีจะได้ผลเป็นจริงหรือเท็จ อย่างใดอย่างหนึ่งเพียงอย่างเดียว ดังตาราง
โอเปอเรชั่น
โอเปอเรเตอร์
ชนิดของข้อมูลที่ใช้ได้ (Y)
เท่ากับ
=
ซิมเปิล
สตริง
เซต
พอยน์เตอร์
เรคอร์ด
ไม่เท่ากับ
< >
Y
Y
Y
Y
Y
น้อยกว่า
< 
Y
Y



มากกว่า
> 
Y
Y



น้อยกว่าหรือเท่ากับ
<=
Y
Y



มากกว่าหรือเท่ากับ
>=
Y
Y



ตารางแสดงการเปรียบเทียบของโอเปอเรเตอร์แบบต่าง ๆ

ตัวอย่าง

                ถ้า A มีค่าเป็น 5 B มีค่าเป็น 5 และ C มีค่าเป็น 4
                A  =  B   Ture                                        A <>  B                  False
                A  <  B   False                                       A   >  B                  False
                A  >  C   Ture                                        C <=  A                  Ture
                C >= B   False

การหาค่าบูลีน

                การหาค่าบูลีนหรือบูลีนเอ็กเพรสชัน เป็นการหาผลลัพธ์จากบูลีนโอเปอเรเตอร์ตามหลักของคณิตศาสตร์บูลีน บูลีนโอเปอเรเตอร์มีหลายตัว แต่นำมาใช้บ่อย ๆ ในการเขียนโปรแกรมมี 4 ตัว ได้แก่ NOT AND OR และ XOR ผลลัพธ์ที่ได้จากการหาค่าบูลีนก็คือ true หรือ false อย่างใดอย่างหนึ่ง
ตัวอย่าง เมื่อกำหนดให้ a และ b เป็น true และ false ในกรณีต่าง ๆ ที่เป็นไปได้ ค่าบูลีนที่ได้จากโอเปอเรเตอร์ NOT AND OR และ XOR จะเป็นดังตาราง


A
b
NOT a
a AND b
a OR b
a XOR b
true
true
false
true
true
false
true
false
false
false
true
true
false
true
true
false
true
true
false
false
true
false
false
false

ลักษณะลูปแบบ Repeat
            ลูปแบบ repeat จะทำงานตามคำสั่งจำนวนหนึ่งไปจนกระทั่งเงื่อนไขเป็นจริงแล้วจึงเลิกทำ แต่ถ้าเงื่อนไขเป็นเท็จจะทำงานตามคำสั่งจำนวนนั้นซ้ำอีก โดยแสดงลักษณะดังภาพ
          Repeat
               คำสั่ง;
              
                   ...
         
         คำสั่ง;
              
                                   เท็จ
        เงื่อนไขเป็น

                                     จริง
                                                                         จบ



รูปแบบของ Repeat
            คำสั่ง Repeat มีรูปแบบดังนี้
Repeat
                          คำสั่ง ;
                                ...
                        คำสั่ง ;
                Until เงื่อนไขเป็นจริง


ตัวอย่างโปรแกรมลูปแบบ Repeat
ตัวอย่าง โปรแกรมใช้แสดงตัวเลขตั้งแต่ 1 ถึง โดยวิธีให้โปรแกรมทำงานซ้ำที่ คำสั่งชุดเดิมแบบ Repeat

Program ExRepeat;
Var      Counter : Integer;
Begin
     WriteLn('Repeat Counter ');
     Counter := 1; {กำหนดค่าเริ่มต้นเป็น1}
     Repeat
          WriteLn(Counter);
          Counter := Counter+1;{เพิ่มค่า Counter ขึ้นอีก 1}
     Until Counter > 9; {เลิกทำเมื่อ Counter มากกว่า 9}
     ReadLn
End.















ผลที่ได้คือ
     Repeat Counter
     1
     2
     3
     4
     5
     6
     7
     8
     9
ลูปแบบ Repeat ซ้อนกัน (Nested Repeat)
คำสั่งที่ทำงานเป็นลูปอาจจะต้องนำมาซ้อนกันเพื่อให้สามารถทำงานที่มีลักษณะเป็นลูปซ้อนกันได้ Repeat ที่เป็นลูปซ้อนกันได้ Repeat ที่เป็นลูปซ้อนกันมีโครงสร้างดังนี้
     Repeat
            คำสั่ง;
                ....
                Repeat
             คำสั่ง;
                ....
                Until เงื่อนไขเป็นจริง
            คำสั่ง;
                ....
     Until เงื่อนไขเป็นจริง
ตัวอย่างที่ 1 ในโปรแกรมที่ต้องการแสดงผลในลักษณะตาราง อาจจะต้องใช้คำสั่ง Repeat ซ้อนกัน เช่นโปรแกรมแสดงตารางสูตรคูณ ซึ่งต้องการให้แสดงผลเป็นตารางดังนี้
                2 x 1 = 2                3 x 1 = 3     ...       9 x 1 = 9
                2 x 2 = 4                3 x 2 = 6     ...       9 x 2 = 18
                                ....                                                 ...
                2 x 10 = 20           3 x 10 = 30   ...                     9 x 10 = 90         
โปรแกรมแสดงตารางสูตรคูณดังกล่าวข้างต้น มีตัวอย่างดังโปรแกรมที่ 8

Program NeatedRepeat;
Const   MaxColumn = 9;
               MaxRow    = 10;
Var      Row, Column : integer;
Begin
     Row := 1;
     Repeat
          Column := 2;
          Repeat
               Write(Column, 'x',Row:2,'=',Column * Row:2,' ');
               Column := Column + 1;
          Until Column := MaxColumn;
          WriteLn;
          Row := Row +1;
     Until Roe > MaxRow;
     ReadLn;
End.















ลูปแบบ WHILE
ลักษณะลูปแบบ While
ลูปแบบ While จะเริ่มด้วยการตรวจสอบเงื่อนไขก่อน ถ้าเงื่อนไขเป็นจริงจะทำงานตามคำสั่งจำนวนหนึ่งไปจนกระทั่งเงื่อนไขเป็นเท็จแล้วจึงเลิกทำ 

รูปแบบของ While
                คำสั่ง While มีรูปแบบดังนี้
                [1]
                                While เงื่อนไขเป็นจริง Do คำสั่ง
                [2]
                                While เงื่อนไขเป็นจริง Do
                                Begin
                                คำสั่ง;
                                .....
                                คำสั่ง;
                                End.
                รูปแบบในข้อ [1] เป็นรูปแบบที่มีคำสั่งเดียว ส่วนรูปแบบในข้อ [2] เป็นรูปแบบผสม คำสั่งที่อยู่ระหว่าง Begin และ End จะทำงานด้วยกัน
ตัวอย่างโปรแกรมลูปแบบ While
ตัวอย่าง  การแสดงข้อความ  I am a MEDIA INTELLIGENCE ซ้ำกันหลายครั้ง โดยโปรแกรมที่มีการทำงานเป็นลูปแบบ While แสดงในโปรแกรม



ลูปแบบ While ซ้อนกัน (Nested While)
คำสั่งที่ทำงานเป็นลูปอาจจะต้องนำมาซ้อนกันเพื่อให้สามารถทำงานที่มีลักษณะเป็นลูปซ้อนกันได้  While ที่เป็นลูปซ้อนกันมีโครงสร้างดังนี้

                While เงื่อนไขเป็นจริง Do
                Begin
                            คำสั่ง;
                                While เงื่อนไขเป็นจริง DO
                                Begin
                                คำสั่ง;
                                End;
                                คำสั่ง;
                End;
โดยในส่วนคำสั่งอาจจะเป็นคำสั่งเดียว หรือคำสั่งผสมก็ได้
ตัวอย่าง ในโปรแกรมที่ต้องการแสดงผลในลักษณะตาราง อาจจะต้องใช้คำสั่ง While ซ้อนกัน เช่น โปรแกรมแสดงสูตรคูณ ซึ่งต้องการให้แสดงผลเป็นตารางดังนี้
2 x 2 = 2                3 x 1 = 3                ...             9 x 1 = 9
                2 x 2 = 4                3 x 2 = 6                ...             9 x 2 = 18
                      ...                                                ...
                2 x 10 = 20           3 x 10 = 30           ...             9 x 10 = 90
โปรแกรมแสดงตารางสูตรคูณดังกล่าวนี้ มีตัวอย่างดังโปรแกรม

Program ExWhile2;
     CONST     MaxColumn = 9;
                        MaxRow       = 10;
     Var             Row,Column : Integer;
     Begin
          Row := 1;
          While Row <= MaxRow Do
          Begin
               Column := 2;
               While Column <= MaxColumn DO
               Begin
                    While(Column, 'x',Row:2 '=' Column*row:2,'');
                    Column := Column +1;
               End;
               WriteLn;
               Row := Row + 1;
          End;
          ReadLn;
          End.



ลูปแบบ FOR
ลักษณะลูปแบบ For
ลูปแบบ For จะควบคุมการทำงานของคำสั่งให้ครบตามจำนวนที่กำหนดแล้วจึงเลิกทำ แสดงลักษณะได้ดังต่อไปนี้





            For จากค่าเริ่มต้น จนถึงค่าสุดท้าย ให้ทำคำสั่ง

            คำสั่งจะเป็นคำสั่งเดียวหรือผสมคำสั่งก็ได้

รูปแบบของ For
            คำสั่ง For มีรูปแบบดังนี้
            [1]
            For ตัวแปร := ค่าเริ่มต้น To ค่าสุดท้าย Do คำสั่ง
            [2]
            For ตัวแปร := ค่าเริ่มต้น Downto ค่าสุดท้าย Do คำสั่ง
            รูปแบบในข้อ [1] และข้อ [2] ต่างกันที่  To และ  Downto จำนวนครั้งของการทำงานขึ้นอยู่กับ  ตัวแปร (ซึ่งมีชื่อว่าตัวแปรควบคุม Control variable) ถ้าเลือกใช้  To ค่าของตัวแปรจะเพิ่มขึ้นจากค่าเริ่มต้นครั้งละ 1 ถ้าเลือกใช้  Downto  ค่าของตัวแปรจะลดลงจากค่าเริ่มต้นครั้งละ 1 หลังจากทำงานตามคำสั่งแล้ว
            ในกรณี For....To ถ้าค่าเริ่มต้นมีค่ามากกว่าค่าสุดท้าย เครื่องจะไม่ทำงานตามคำสั่ง  ส่วนในกรณี For....Downto ถ้าค่าเริ่มต้นมีค่าน้อยกว่าค่าสุดท้ายเครื่องจะไม่ทำงานตามคำสั่งเช่นกัน
            คำสั่งจะเป็นคำสั่งเดียวหรือผสมคำสั่งก็ได้
ตัวอย่างโปรแกรมลูปแบบ For
ตัวอย่าง โปรแกรมใช้แสดงตัวเลขตั้งแต่ 1 ถึง 9 โดยวิธีให้โปรแกรมทำงานซ้ำ คำสั่งเดิมแบบ For....To

Program ForCoun;
Var  Counter : Integer;
Begin
            WriteLn('For Counter');
            For Counter := 1 To 9 Do
            WriteLn(Counter); {คำสั่งเดี่ยว}
            ReadLn
End.











ผลที่ได้คือ
            For Counter
            1
            2   
            3
            4
            5
            6
            7
            8
            9


ลูปแบบ For ซ้อนกัน (Nested For)
            คำสั่งที่ทำงานเป็นลูปอาจจะต้องนำมาซ้อนกันเพื่อให้สามารถทำงานที่มีลักษณะเป็นลูปซ้อนกันได้ For ที่เป็นลูปซ้อนกันมีโครงสร้างดังนี้
                        For จากค่าเริ่มต้นจนถึงค่าสุดท้ายให้ทำคำสั่ง
                        For จากค่าเริ่มต้นจนถึงค่าสุดท้ายให้ทำคำสั่ง
            โดยคำสั่งอาจจะเป็นคำสั่งเดียวหรือผสมคำสั่งก็ได้
ตัวอย่าง โปรแกรมที่ต้องการแสดงผลในลักษณะตาราง อาจจะต้องใช้คำสั่ง For ซ้อนกัน เช่น โปรแกรมแสดงสูตรคูณซึ่งต้องการให้แสดงผลเป็นตารางดังนี้
2 x 2 = 2           3 x 1 = 3           ...         9 x 1 = 9
            2 x 2 = 4           3 x 2 = 6           ...         9 x 2 = 18
                  ...                                                ...
            2 x 10 = 20        3 x 10 = 30        ...         9 x 10 = 90

Program ExFor;
CONST          MaxColumn = 9;
            MazRow          = 10;
Var      Row,Column : Integer;
Begin
            For Row := 1 TO MaxRow Do
            Begin
            For Column :=2 To MaxColumn Do
            Write(Column,'x',Row:2,'=',Column*Row:2,'  ');
            WriteLn;
            End;
            ReadLn;
End

โปรแกรมแสดงตารางสูตรคูณดังกล่าวนี้ มีตัวอย่างดังโปรแกรม


ข้อสังเกตสำหรับ While, Repeat, และ For
            5.1 While ควรใช้ในกรณีที่จะต้องมีการตรวจสอบเงื่อนไข ก่อนการทำซ้ำอย่างน้อย 1 ครั้ง
            5.2 Repeat  ควรใช้ในกรณีที่จะต้องมีการทำงานด้วยคำสั่งในลูปอย่างน้อย 1 ครั้ง  ก่อนการตรวจสอบเงื่อนไข
            5.3 For ควรใช้ในกรณีที่เราทราบหรือโปรแกรมสามารถคำนวณจำนวนครั้งที่ต้องทำล่วงหน้าก่อนได้


การเลือกทำแบบ IF
การเลือกทำ
การเลือกทำหมายถึงการกำหนดให้โปรแกรมทำงานอย่างหนึ่งเมื่อเงื่อนไขเป็นจริงและทำงานอีกอย่างหนึ่งเมื่อ  เงื่อนไขเป็นเท็จ ตัวอย่างการเลือกทำที่อาจพบได้บ่อย เช่น การเตือนให้เลือกบันทึกข้อมูลไว้ในดิสก์ คือ
SAVE (Y/N)
ถ้าเราเลือก Y ข้อมูลจะถูกบันทึกเข้าในดิสก์
ถ้าเราเลือก N จะไม่มีการบันทึกข้อมูล
การให้เลือกว่าจะใช้โปรแกรมนั้นต่อหรือไม่ คือ
CONTINUE (Y/N)
ถ้าเราเลือก Y โปรแกรมจะทำงานต่อไป
ถ้าเราเลือก N โปรแกรมหยุดทำงาน
ลักษณะการเลือกทำแบบ IF
การเลือกทำรูปแบบ IF มีลักษณะดังรูปที่ 1






 

ภาพแสดงรูปแบบการเลือกทำแบบ IF

กล่องข้อความ: IF เงื่อนไขเป็นจริง	THEN	คำสั่ง 1
			ELSE	(เงื่อนไขเป็นเท็จ) คำสั่ง 2


รูปแบบของการเลือกทำแบบ IF เป็นดังนี้
คอมพิวเตอร์จะเลือกทำงานตามเงื่อนไข โดยใช้เงื่อนไขเป็นจริงจะทำงานตามคำสั่ง 1 (ที่อยู่ต่อจาก THEN) แต่ถ้าเงื่อนไขเป็นเท็จ จะทำงานตามคำสั่ง 2 (ที่อยู่ต่อจาก ELSE)
ELSE และ คำสั่ง 2 จะมีหรือไม่มีก็ได้
ตัวอย่างการเลือกทำแบบ IF
ตัวอย่าง โปรแกรมรับอายุเข้าไปเปรียบเทียบ ถ้าอายุมากกว่า 55 คอมพิวเตอร์จะแสดงข้อความ คุณเป็นคนสูงอายุและถ้าอายุตั้งแต่ 55 ลงมาคอมพิวเตอร์จะแสดงข้อความคุณเป็นวัยรุ่น


PROGRAM YoungOld;
VAR
     Age : Real;
BEGIN
     Write( ‘Your Age = ‘);
     ReadLn(Age);
     IF  Age  >  55     THEN    WriteLn( ‘You are Old’)
                                ELSE     WriteLn( ‘You are Young’);
     ReadLn
END.
การเลือกทำแบบ IF ซ้อนกัน (Nested IF)
            การเลือกทำแบบ IF ในบางโปรแกรมจะต้องทำซ้ำกัน ลักษณะโครงสร้างของการเลือกทำแบบ IF ซ้อนกันเป็นดังนี

IF เงื่อนไขเป็นจริง THEN คำสั่ง
                IF เงื่อนไขเป็นจริง THEN คำสั่ง



            จำนวนครั้งของการเลือกทำซ้ำมีได้มากเท่าที่ต้องการ สำหรับ ELSE จะมีหรือไม่ก็ได้
ตัวอย่าง การหาปี ค.. ใดที่เดือนกุมภาพันธ์มี 29 วัน มีหลักการดังนี้
                        ถ้า ปี มากกว่า 0
                        ถ้า ปี หารด้วย 100 ลงตัว
                        และหารด้วย 400 ลงตัว นั้น กุมภาพันธ์มี 29 วัน
            มิฉะนั้น ต้องหารด้วย 4 ลงตัว กุมภาพันธ์ จะต้องมี 29 วัน
โปรแกรม จะรับข้อมูลปี ค.. จากคีย์บอร์ดเข้าไป แล้วตรวจดูว่าเป็นปีที่เดือนกุมภาพันธ์มี 29 วัน (leap year) หรือไม่ และแสดงผลการตรวจสอบที่จอภาพ
Program LeapYearOrNot;
VAR
   LeapYear : Boolean;
   Year     : integer;
Begin
     WriteLn('Leap Year or Not ?');
     REPEAT
           WriteLn;
           Write('Enter Year (0=End)');
           ReadLn(Year);
           IF Year > 0 THEN
           Begin
                IF Year MOD 100 = 0
                   THEN LeapYear := (Year MOD 400)=0
                   ELSE LeapYear := (Year MOD 4)=0;
                IF LeapYear
                   THEN WriteLn(Year,' is a Leap year')
                   ELSE WriteLn(Year,' is not a Leap year');
           END
     UNTIL Year=0
END.
การเลือกทำแบบ CASE

ทางเลือกที่มีจำนวนมาก

ในกรณีที่การเลือกทำมีรายการให้เลือกมากไป การเลือกทำแบบ IF ก็อาจจะมีผลให้โปรแกรมมีความยาวเกินความจำเป็น และทำให้อ่านเข้าใจยาก
ลักษณะของการเลือกทำแบบ CASE
การเลือกทำแบบ CASE มีลักษณะดังต่อไปนี้
CASE  ตัวแปร  มีค่า
     เท่ากับ ค่าคงที่                              :  ทำ คำสั่ง ก.
     เท่ากับ ค่าคงที่ 1 หรือค่าคงที่ 2          :  ทำ คำสั่ง ข.
     อยู่ในช่วงของ คำสั่ง A ถึงค่าคงที่ N   :  ทำ คำสั่ง ค.
     ELSE                                                        ทำ คำสั่ง ง.
END
รูปแบบของการเลือกทำแบบ CASE
การเลือกทำแบบ CASE มีรูปแบบดังต่อไปนี้
CASE  ค่าของตัวแปร OF
     ค่าคงที่ [, ค่าคงที่]  :  คำสั่ง
     ค่าคงที่ .. ค่าคงที่   คำสั่ง
     ELSE
END
ค่าของค่าคงที่จะต้องเป็นข้อมูลชนิดเดียวกันกับตัวแปร สำหรับ [, ค่าคงที่] ค่าคงที่.. ค่าคงที่ และ ELSE จะมีหรือไม่มีก็ได้ ส่วนคำสั่งจะเป็นคำสั่งเดียวหรือผสมคำสั่งก็ได้
            คอมพิวเตอร์จะทำงานตามเงื่อนไขที่สอดคล้องกันระหว่างตัวแปรกับค่าคงที่ โดยถ้าค่าของตัวแปรเท่ากับค่าคงที่ค่าใดแล้ว โปรแกรมจะทำงานตามคำสั่งทีอยู่ต่อจากเครื่องหมาย  แต่ถ้าไม่มีเงื่อนไขที่สอดคล้องกัน โปรแกรมจะทำงานตามคำสั่งที่อยู่ต่อจาก ELSE
ตัวอย่างโปรแกรมปรับปรุงจากโปรแกรมเดิม โดยเปลี่ยนการเลือกทำจาก IF เป็น CASE แต่การทำงานของโปรแกรมยังคงเหมือนเดิม คือ แสดงอักษรย่อของสีให้เลือก เมื่อเลือกอักษรตัวหนึ่งแล้ว โปรแกรมจะแสดงชื่อเต็มของสีนั้นที่จอภาพ ขอให้สังเกตการใช้ CASE ซึ่งทำให้โปรแกรมสั้นลง และอ่านเข้าใจง่ายขึ้น


PROGRAM CaseColor;
VAR
            Choice                :   Char;
            UserQuits           :   Boolean;
BEGIN
WriteLn( 'What is Color ? ');
UserQuits := False;
REPEAT
     Write( 'Select B G O P R Y or Q.uit ');
     ReadLn( Choice );
     CASE Choice OF
            'B', 'b' : WriteLn( 'B is Blue'); { B หรือ b }
            'G', 'g' : WriteLn( 'G is Green');
            'O', 'o' : WriteLn( 'O is Orange');
            'P', 'p' : WriteLn( 'P is Purple');
            'R', 'r' : WriteLn( 'R is Red');
            'Y', 'y' : WriteLn( 'Y is Yellow');
            'Q', 'q' : UserQuits := True;
            ELSE WriteLn( 'Error : Try again ')
     End
UNTIL UserQuits
END.

การเลือกทำแบบ CASE ซ้อนกัน
ในบางกรณีการเลือกทำแบบ CASE จะต้องใช้ซ้อนกัน ซึ่งมีโครงสร้างดังนี้
CASE ค่าของ ตัวแปร OF { CASE 1 }
     ค่าคงที่ : CASE ค่าของตัวแปร OF { CASE 2 }
                                     ค่าคงที่  : คำสั่ง

                                     ELSE  คำสั่ง
                            END  { CASE 2 }
     ค่าคงที่ : คำสั่ง
     ELSE            คำสั่ง
END  { CASE 1 }


ไม่มีความคิดเห็น:

แสดงความคิดเห็น