พื้นฐานปาสคาลพื้นฐาน rapidqเว็บภาษาไทยเว็บภาษาอังกฤษ

ตัวแปรชนิด Array


ตัวแปรทั่วๆ ไปเช่น ตัวแปร string ตัวแปร integer
เราจะประกาศตัวแปรทีละอัน หรือเราอาจจะประกาศทีละหลายๆ อันก็ได้ ดังนี้

var
        numA, numB, numC , mynum : byte ;
        myStr1 : string ;
        myStr2, myStr3 : string ;

แต่มีวิธีการประกาศตัวแปรทีละหลายๆ ตัวได้สะดวกและรวดเร็วกว่า
โดยการประกาศตัวแปรในรูปแบบ Array ( อะเรย์ ) ดังนี้

var
       num : array[1..20] of byte ;
       mynum : array['a'..'z'] of integer ;
       myStr : array[0..9] of string ;

จากด้านบนนี้เป็นการประกาศตัวแปรในรูปแบบแถวลำดับ ดังต่อไปนี้
ดังต่อไปนี้
num[1],num[2],num[3],num[4],num[5],num[6],num[7],num[8],
num[9],num[10],num[11],num[12],num[13],num[14],num[15],
num[16],num[17],num[18],num[19],num[20] เป็นตัวแปรชนิด byte
 
เห็นได้ว่า เพียงการเขียนสั้นๆ เราสามารถประกาศตัวแปรได้ถึง 20 ตัว
โครงสร้างการประกาศตัวแปรชนิด array เป็นดังนี้
ชื่อตัวแปร : array[จุดเริ่ม..จุดสิ้นสุด] of ชนิดของตัวแปร ;

ตอนนี้ ให้ดูที่วงเล็บแบบเหลี่ยม [ ]
ซึ่ง เป็นส่วนที่เรากำหนด จำนวนของตัวแปร

num : array[1..20] of byte;

การประกาศตัวแปรอะเรย์ ด้านบนนี้ มีจุดเริ่มคือ 1 จุดสิ้นสุด คือ 20
สรุปก็คือ เป็นการสร้างตัวแปรชนิด byte มา 20 ตัว
โดยมีชื่อของแต่ละตัวเป็น num[1] ไปจนถึง num[20]

mynum : array['a'..'z'] of integer;

การประกาศตัวแปรอะเรย์ ด้านบนนี้ มีจุดเริ่มคือ a จุดสิ้นสุด คือ z
สรุปก็คือ เป็นการสร้างตัวแปรชนิด integer มา 26 ตัว
โดยมีชื่อของแต่ละตัวเป็น mynum['a'] ไปจนถึง mynum['z']

myStr : array[0..9] of string;

การประกาศตัวแปรอะเรย์ ด้านบนนี้ มีจุดเริ่มคือ 0 จุดสิ้นสุด คือ 9
สรุปก็คือ เป็นการสร้างตัวแปรชนิด string มา 10 ตัว
โดยมีชื่อของแต่ละตัวเป็น myStr[0] ไปจนถึง myStr[9]

ยังมีการประกาศตัวแปรอะเรย์ที่วิจิตรพิศดาร กว่านี้
แต่ไม่ขอพูดในตอนนี้ ค่อยๆ ไปทีละขั้นดีกว่า

วิธีการใช้งานตัวแปร array

ตัวแปรชนิด array ก็มีวิธีการใช้ เหมือนๆ กับ
ตัวแปรทั่วๆ ไป คือสามารถกำหนดค่า รับค่าจาก keyboard
และสามารถแสดงผลออกทาง จอมอนิเตอร์ได้
และถ้าเป็นตัวแปร จำพวกตัวเลข ก็สามารถนำไปบวกลบคูณหารได้


uses
       crt ;
var
       myStr : array[1..3] of string ;
       myNum : array[1..3] of integer ;
       myAvr : real ;
begin
       clrscr;
       write( 'Insert Name of student = ' ); readln( myStr[1] );
       write( 'Insert score = ');                   readln( myNum[1] );
       write( 'Insert Name of student = ' ); readln( myStr[2] );
       write( 'Insert score = ');                   readln( myNum[2] );
       write( 'Insert Name of student = ' ); readln( myStr[3] );
       write( 'Insert score = ');                   readln( myNum[3] );

       writeln( myStr[1], ' get ',myNum[1] );
       writeln( myStr[2], ' get ',myNum[2] );
       writeln( myStr[3], ' get ',myNum[3] );

       myAvr := ( myNum[1]+myNum[2]+myNum[3] )/3;
       write( 'Average = ', myAvr:5:2 );

       readln;
end.
โปรแกรมนี้จะรอรับค่าโดยแสดง
ตัวอักษรดังนี้ 3 ครั้ง

Insert Name of student =
Insert score =

จากนั้น โปรแกรมจะแสดงผลทางหน้าจอ
เป็นชื่อและคะแนนของแต่ละคน

ท้ายสุดก็จะแสดงค่าเฉลี่ย ดังนี้

Average = ค่าเฉลี่ย

สรุปง่ายๆ ก็คือว่า ตัวแปร array มีประโยชน์
ในด้านความรวดเร็วในการประกาศตัวแปรจำนวนมากๆ
ส่วนวิธีใช้ ก็เหมือนกับตัวแปรธรรมดา เปี้ยบเลย



คำสั่งวนซ้ำ ชนิดที่ 2 FOR TO DO

ลูปชนิดแรกที่ผมได้กล่าวถึงคือ loop REPEAT UNTIL
ลูป REPEAT UNTIL เป็นลูปที่ทำการวนซ้ำ จนกระทั่งเงื่อนไข
เป็นจริง จึงออกนอก loop

ส่วน loop FOR TO DO เป็น loop ที่ทำงานตามคำสั่ง
จนกว่าจะครบจำนวนที่เราตั้งไว้

โครงสร้างของ loop FOR TO DO
for ตัวแปร:=จุดเริ่มต้น to จุดสิ้นสุด do

สังเกตว่า เราต้องกำหนด ตัวแปร ขึ้นมาก่อน
-ตัวแปรอันนี้ ต้องเป็นตัวแปร ordinal typpe
คือชนิดของตัวแปรที่มีการจัดลำดับก่อนหลัง
เช่น
shortint (-128..127)
integer (-32768..32767)
byte (0..255)
word (0..65535)
ยังมีชนิดของตัวแปรที่เป็น ordinal type อีก หลายชนิด
เช่น char, boolean แต่ไม่ค่อยนิยมนำมาใช้กับ FOR loop

ส่วน ตัวแปรจำพวก real, single, double จะไม่สามารถ
ใช้เพื่อสั่งให้ FOR loop วนซ้ำได้ครับ

มาดูตัวอย่างนี้ดีกว่าครับ

uses
       crt ;
var
       i : byte;
begin
       clrscr ;

       for i:=1 to 5 do
       writeln ( ' this is loop ', i );

       readln;
end.
จะเป็นดังนี้
this is loop 1
this is loop 2
this is loop 3
this is loop 4
this is loop 5

เราจะเริ่มต้นที่ 0 ก็ได้ครับ เพราะขอบเขตของ ตัวแปร ชนิด byte
คือ 0..255 หากเราไม่กำหนด มากหรือน้อยกว่านี้ โปรแกรมก็จะทำงานเป็นปกติ

uses
       crt ;
var
       i : byte;
begin
       clrscr ;

       for i:=0 to 4 do
       writeln ( ' this is loop ', i+1 );

       readln;
end.
จะเป็นดังนี้
this is loop 1
this is loop 2
this is loop 3
this is loop 4
this is loop 5

ตัวอย่างนี้จะเป็นการกำหนดจุดเริ่มต้นตามที่เราต้องการ

uses
       crt ;
var
       i , myi : byte;
begin
       clrscr ;

       write(' please insert Begin-Number = ');
       readln( myi );

       for i:=myi to 10 do
       writeln( ' this is loop ', (i - myi) +1 );

       readln;
end.
ได้ผลดังนี้
please insert Begin-Number =

สมมุติผมป้อนค่า 9 จะได้ผลว่า
this is loop 1
this is loop 2

ตัวอย่างนี้จะเป็นการกำหนดจุดสิ้นสุดที่เราต้องการ

uses
       crt ;
var
       i , myi : byte;
begin
       clrscr ;

       write( ' please insert End-Number = ' );
       readln( myi );

       for i:=1 to myi do
       writeln('this is loop ', i );

       readln;
end.
ได้ผลดังนี้
please insert End-Number =

สมมุติผมป้อนค่า 9 จะได้ผลว่า
this is loop 1
this is loop 2
this is loop 3
this is loop 4
this is loop 5
this is loop 6
this is loop 7
this is loop 8
this is loop 9

การวนซ้ำคำสั่ง หลายคำสั่ง โดย FOR loop

ตามปกติ เราสามารถใช้ FOR loop กับคำสั่งเพียงคำสั่งเดียวเท่านั้น
โปรดดูตัวอย่างนี้ครับ

uses
       crt ;
var
       i : byte;
begin
 clrscr ;
       for i:=1 to 3 do
       writeln( 'panda' );
       writeln( 'hippo' );

       readln;
end.
จะได้ผลดังนี้
panda
panda
panda
hippo

จะสังเกตเห็นว่า คำสั่งแรก
เท่านั้น ที่ถูกนำไปวนซ้ำ


การที่เราจะวนซ้ำ คำสั่งหลายคำสั่ง ด้วย FOR loop
เราจะต้อง กั้นหน้า-หลังด้วย begin และ end;

uses
       crt ;
var
       i : byte;
begin
 clrscr ;
       for i:=1 to 3 do
       begin
         writeln( 'panda' );
         writeln( 'hippo' );
       end;

       readln;
end.
จะได้ผลดังนี้
panda
hippo
panda
hippo
panda
hippo


FOR DOWNTO DO

ลูปนี้ก็เป็นลูปประเภทเดียวกับ for to do นั่นเอง
แต่จะทำงานโดยการกำหนดจำนวนเริ่มต้นเป็นค่ามาก
จำนวนสิ้นสุด เป็นค่าน้อย

uses
       crt ;
var
       i : byte;
begin
 clrscr ;
        for i:=10 downto 1 do
       writeln( i );

       readln;
end.
ได้ผลดังนี้
10
9
8
7
6
5
4
3
2
1

สำหรับเรื่อง array และการนำมาใช้กับ loop จะมีต่อในบทหน้าครับ

ตอนนี้ยังทำไม่เสร็จ อย่างไรก็ตามลองดูที่เว็บไทยทางด้านบนจะมีลิงค์เว็บที่สอนการเขียน pascal
ทั้งที่เป็นภาษาไทยและภาษาอังกฤษ ลองไปหาอ่านดูก่อนได้ครับ
best view with ie 5.0++, screen 600x800