ตัวแปรชนิด 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
ทั้งที่เป็นภาษาไทยและภาษาอังกฤษ ลองไปหาอ่านดูก่อนได้ครับ
|