Make your own free website on Tripod.com
 

 

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

            
               

สายอักขระ คือ แถวลำดับอัดแน่น (packed array) ของตัวอักขระ เช่น 'PASCAL'    'COMPUTER'
รูปแบบ  การกำหนดสายอักขระมีดังนี้
          type
             string = packed array (.1..15.) of char;   
ลักษณะพิเศษของสายอักขระมีดังนี้คือ
          1. สามารถใช้ ตัวดำเนินการแสดงความสัมพันธ์ ในการเปรียบเทียบการเรียงตามลำดับ  ตัวอักษร (alphabetical order) ของสายอักขระ 2 ชนิด
          2. สามารถเขียนผลลัพธ์ของสายอักขระได้ครั้งละทั้งสาย ซึ่งในกรณีของตัวอักขระ สามารถเขียน  ผลลัพธ์ครั้งละ 1 ตัวอักษรเท่านั้น
          3. สามารถกำหนดข้อความ หรือวลี ให้กับสายอักขระโดยใช้ข้อความสั่งกำหนดค่า 
*หมายเหตุ  กรณีของเทอร์โบ ปาสกาล (turbo Pascal)  ใช้สายอักขระเป็นคำสงวนโดยไม่    ต้องกำหนดชนิด สามารถอ้างและนำไปใช้ในโปรแกรมได้
 
ตัวอย่าง 5-9 การกำหนดค่าของวลีให้กับตัวแปรชนิดแถวลำดับอัดแน่น
CONST
     THISBOOK ='PASCAL    ';
     MAXTITLELENGTH = 10;
TYPE
     NAMES = PACKED ARRAY (.1..13.) OF CHAR;
VAR
     TITLE : PACKED ARRAY (.1..MAXTITLELENGTH.) OF CHAR;
     AUTHOR1, AUTHOR2 : NAMES;
การกำหนดค่าให้ตัวแปรแถวลำดับอัดแน่น
     TITLE :=  THISBOOK ;
     AUTHOR1 := 'NIKLAUS WIRTH';
     AUTHOR2 := 'DIJKSTRA     ';   
สำหรับการกำหนดค่า  ให้ตัวแปรสายอักขระนั้น สายอักขระที่นำมาใช้ต้องมีขนาด เท่ากับขนาดของตัวแปร เช่น กรณีของการกำหนดค่าสายอักขระ  10 ตัวอักษร ให้กับ TITLE ซึ่งเป็นตัวแปรมี ความจุ ขนาด 10  ตัวอักษร  ทั้ง  TITLE  และ  THISBOOK  เป็นสายอักขระที่มีขนาดเท่ากันคือ   10  ตัวอักขระ
การแสดงการเก็บตัวอักขระในสตริง AUTHOR1 และ AUTHOR2
          1    2    3    4    5    6    7    8    9    10   11   12   13
AUTHOR1   N    I    K    L    A    U    S    b    W     I    R    T    H
 
AUTHOR2   D    I    J    K    S    T    R    A    b     b    b    b    b
 
AUTHOR2 มีการกำหนดชื่อที่มีขนาดน้อยกว่า 13 ตัวอักษร ดังนั้นจึงมีการเติมช่องว่าง      (b=ช่องว่าง)  เพื่อให้  AUTHOR2  มีขนาดเท่ากับ 13 ตัวอักษร หลักการเติมช่องว่างให้กับตัวแปรนั้น ทำโดย กำหนดให้ตัวอักษรในสายอักขระ ชิดคอลัมน์ซ้ายสุด แล้วเติมช่องว่างในคอลัมน์ที่เหลือจนสายอักขระ มีขนาดตามต้องการ
 
การอ่านตัวอักขระเก็บไว้ในสายอักขระ   
ในปาสกาลมาตราฐานการอ่านสายอักขระครั้งละ 1 อักขระ  ทำโดยการทดสอบว่าตัว อักขระที่อ่านเป็นจุดสิ้นสุดบรรทัด (EOLN)  หรือไม่  นอกจากนี้มีการทดสอบว่าสายอักขระที่จะบรรจุตัว อักษรนั้นเต็มหรือไม่  ถ้าสายอักขระเต็มหรือพบจุดสิ้นสุดบรรทัดจะเลิกอ่านข้อมูล   
ตัวอย่าง 5-10  การอ่านสายอักขระ
Program Readstring;
VAR charcount , linelength : integer;
     somearary : packed array [ 1..80] of char;
     ch  : char;   
Begin
      charcount : = 0;  linelengtn :=80;
          While not Eoln do
           Begin
               charcount : = charcount+1;
               read (ch);
               If charcount < = linelength
                    then somearray [charcount] : ch;
          end  (* while not Eoln *)
          FOR   I : = charcount + 1 to linelength do
                somearray : ='';
 
end.   
โปรแกรมนี้เป็นการอ่านข้อมูลนำเข้าครั้งละ 1 ตัวอักษร  เก็บไว้ในสายอักขระ  โดยมี การนับจำนวนตัวอักษรที่อ่านและเก็บอักษรนั้นในสายอักขระชื่อ  somearray  กรณีที่ข้อมูลนำเข้ามีขนาด เล็กกว่า  linelength  โปรแกรมจะเติมช่องว่างทางขวาจน  somearray  มีขนาดเท่ากับ linelength   
การใช้เครื่องหมายแสดงความสัมพันธ์กับสายอักขระ   
ในภาษาปาสกาล สามารถใช้เครื่องหมายแสดงความสัมพันธ์ เช่น '=', '<>', '<',   '<=', '>=', และ '>' ในการเปรียบเทียบระหว่างตัวแปรสายอักขระ 2 ตัว   
          ให้   NAME  มีค่าภายใน คือ  'WIRTH'
          ดังนั้น  นิพจน์  ที่จะให้มีเปรียบเทียบมีดังนี้
          NAME  =  'WIRTH      '
          NAME  >  'WILKES     '
          NAME  <  'WULF       '
          NAME  <> 'DIJKSTRA   '
          NAME  >= 'DAHL       '
          NAME  <= 'WIRTH      '
การเปรียบเทียบทั้ง 6 อย่างนี้ให้ผลเป็น จริง ทั้งสิ้น   
ตัวอย่างที่ 5-11  การเขียนข้อมูลส่งออกของแถวลำดับอัดแน่น
     type
          Day = (Monday, Tuesday, Wednesday, Thursday, Friday Saturday,
                 Sunday);
           String = packed array [1..9] of char;
           Words = array [Day] of String;
  var
          Today : Day;
           DayWords : Words;
มีการกำหนดค่าเริ่มต้นของข้อมูลภายในแถวลำดับ ดังนี้
     Initialize the array
     DayWords[Monday]: = 'Monday';
     DayWords[Tuesday]: = 'Tuesday';
     DayWords[Wednesday]: = 'Wednesday';
     DayWords[Thursday]: = 'Thursday';
     DayWords[Friday]: = 'Friday';
     DayWords[Saturday]: = 'Saturday';
     DayWords[Sunday]: = 'Saturday';
     Demonstrate how it works
     for Today: = Monday to Sunday
     do writeln ('Today is ', DayWords[Today]);
ข้อมูลส่งออกมี ดังนี้
     Today is Monday
     Today is Tuesday
     Today is Wednesday
     Today is Thursday
     Today is Friday
     Today is Saturday
     Today is Sunday   
ในปาสกาลสายอักขระ  คือตัวแปรชนิดโครงสร้าง  ดังนั้นการใช้ข้อความสั่ง WRITE หรือ  WRITELN  ใช้ได้กับสายอักขระทั้งสาย  โดยระบุชื่อสายอักขระตามหลังข้อความสั่งดังกล่าว   
ตัวอย่าง 5-12  การเขียนและอ่านสายอักขระทั้งสาย
Program  Sawasdee (input , output);
Var   name : packed array[1..80] of char;
begin.
     writeln  ('Please Print your Name.');
      Readln (Name);
      writeln('Sawasdee' , Name);   
end.   
เมื่อสั่งให้โปรแกรมทำงานแล้วได้ผลดังนี้
     คอมพิวเตอร์ : Please Print your Name.
     ผู้ใช้  : Ann
     คอมพิวเตอร์ : Sawasdee Ann

TOP