Make your own free website on Tripod.com

บทที่ 4
การใช้ข้อมูลชนิด ARRAY



     ข้อมูลที่เป็นหมวดหมู่ เช่น เงินเดือนพนักงาน คะแนน หรือ เกรด นักศึกษาแต่ละคนในแต่ละห้อง ในแต่ละชั้นเรียน ถ้าตั้งชื่อข้อมูลเหล่านี้โดยแยกเป็นตัวแปรเดียวอาจจะต้องใช้ตัวแปรจำนวนมาก ทำให้เกิดความยุ่งยากสับสนในการตั้งชื่อตัวแปร และไม่สะดวกในการเขียนโปรแกรม เราจะแก้ไขโดยการใช้ชื่อตัวแปรเพียงชื่อเดียว แล้วตามด้วยลำดับของตัวแปรในรูปของตัวเลข เรียกตัวแปรชนิดนี้ว่า ARRAY เช่น เงินเดือนพนักงานจำนวน 100 คน ของบริษัทแห่งหนึ่ง

SALARY[1], SALARY[2],… SALARY[100]

ข้อมูลชนิด ARRAY นี้เราอาจกำหนดเป็น 1 มิติ, 2 มิติ หรือหลาย ๆ มิติก็ได้

ARRAY 1มิติ (ONE DIMENSION ARRAY)
     เมื่อต้องบการใช้ต้องประกาศชื่อตัวแปรชนิด ARRAY เสียก่อน

VAR NAME:ARRAY[1..20] OF STRING;

ถ้ากำหนดเช่นนี้หน่วยความจำจะถูกจองเนื้อที่ไว้สำหรับตัวแปร NAME[1],…,NAME[20]
หรือ CONST I = 20

VAR X : ARRAY[1..I] OF INTEGER;

ARRAY 2 มิติ (TWO DIMENSION ARRAY)


เช่น VAR HOUR : ARRAY[1..50,1..7] OF INTEGER;

จำนวนตัวแปรมีทั้งหมดเท่ากับ 350 คือ
HOUR[1,1],HOUR[1,2],…,HOUR[1,7],HOUR[2,1],HOUR[2,2],…HOUR[50,7]
โดยเลขตัวแรกแทนจำนวนลูกจ้าง 50 คน ส่วนเลขตัวที่ 2 แทนวันทั้ง 7 วัน

ARRAY 3,4 หรือ 5 มิติ ก็สามารถประกาศตั้งชื่อตัวแปรได้ โดยการเพิ่มตัวเลข ลำดับและช่วงเข้าไป เช่น กำหนดชั่วโมงการทำงานของลูกจ้าง 50 คน ในแต่ละวันสำหรับแต่ละสัปดาห์ของปี

VAR HOUR : ARRAY[1..50,1..7,1..52] OF INTEGER;

เช่น HOUR[10,3,18] หมายถึง จำนวนชั่วโมงการทำงานของลูกจ้างคนที่ 10 ในวันที่ 3 ของสัปดาห์ที่ 18 ของปี เป็นต้น

ตัวอย่าง

จงเขียนโปรแกรมคิดค่าชั่วโมงการทำงานของลูกจ้าง 10 คน

PROGRAM EXAM9;
VAR I,J,TOTAL:INTEGER;
HOUR:ARRAY[1..10,1..7] OF INTEGER;
BEGIN
WRITELN(‘ENTER HOUR’);
FOR I:=1 TO 10 DO
FOR J:=1 TO 7 DO
READ(HOUR[I,J];
WRITELN;
WRITELN(‘WORKER’,’HOUR’:12);
WRITELN;
FOR I:=1 TO 10 DO
BEGIN
TOTAL:=0;
FOR J:=1 TO 7 DO
TOTAL :=TOTAL+HOUR[I,J];
WRITELN(I:6,TOTAL:6);
END;
END.

ผลลัพธ์

ENTER HOUR
8 8 8 8 8 8 8
8 6 4 7 8 8 7
8 8 7 5 6 8 6
8 7 6 4 8 8 8
8 8 8 8 8 8 7
8 8 7 7 7 8 8
8 8 7 6 8 7 8
8 7 8 6 8 8 7
8 8 8 7 8 7 7
8 7 8 6 7 8 7
WORKER HOUR
1 56
2 48
3 48
4 49
.
.
.
10 51

ตัวอย่าง

จงเขียนโปรแกรมหาผลรวมของเงินเดือนและภาษีของพนักงานจำนวน 10 คน

PROGRAM EXAM10;
USES CRT;
VAR I : INTEGER;
TOTAL,SALARY,TAX:ARRAY[1..10] OF INTEGER;
NAME:ARRAY[1..10] OF STRING;
BEGIN
FOR I:=1 TO 10 DO
BEGIN
WRITE(‘ENTER YOUR NAME:’);
READLN(NAME[I]);
WRITE(‘ENTER YOUR SALARY:’);
READLN(SALARY[I]);
WRITE(‘ENTER YOUR TAX:’);
READLN(TAX[I]);
TOTAL[I]:=SALARY[I]+TAX[I];
END;
CLRSCR;
WRITELN;
WRITELN(‘NAME SALARY TAX TOTAL’);
FOR I:=1 TO 10 DO
BEGIN
WRITELN(NAME[I]:10,SALARY[I]:10,TAX[I]:10,TOTAL[I]:10);
END;
END.

ผลการ RUN

ENTER YOUR NAME : DANG
ENTER YOUR SALARY : 8000
ENTER YOUR TAX : 100

จะต้องใส่ข้อมูลไปเรื่อง ๆ จนกว่าจะครบ 10

ผลลัพธ์

NAME SALARY TAX TOTAL
DANG 8000 100 8100
KAEW 9000 200 9200
.
.
.
.
.
DUMRONG 12000 280 12280

สรุป
     ตัวแปร ARRAY จะต้องประกาศตั้งชื่อตัวแปรขึ้นในโปรแกรมก่อน เหมือนกับตัวแปรอื่น ๆ โดยค่าลำดับต้องเป็นจำนวนเต็ม การอ่านข้อมูลเข้าสู่ตัวแปร ARRAY นั้น โดยการใช้คำสั่ง READ คู่กับการวนซ้ำ โดยใช้คำสั่ง FOR ซึ่งอาจใช้ loop เดียวหรือ loop ซ้อน loop ก็ได้ ขึ้นอยู่กับแบบของ ARRAY


แบบฝึกหัด
เรื่อง
การใช้ข้อมูลชนิด ARRAY


1. จงเขียนโปรแกรมพิมพ์ MATRIX 5x5 โดยมีข้อมูลดังนี้
2. จงเขียนโปรแกรมอ่านข้อมูล รหัส, ชื่อ, คะแนน test, คะแนน Midterm, คะแนน Final ของนักศึกษาจำนวน 15 คน และหาผลรวมของคะแนนทั้ง 3 ของนักศึกษาแต่ละคน
3. จงเขียนโปรแกรมอ่านข้อมูล รหัส, ชื่อ, ชั่วโมงการทำงานต่อวัน, อัตราค่าแรงงานต่อชั่วโมงของพนักงานจำนวน 15 คน และคำนวณหาเงินที่ได้รับต่อคน

ตัวอย่าง output

CODE      NAME      HOURS      RATE      EARNING
*******       *******       *********        ******       ***********
 2314      JIRAPA          9              120            1080
 2416       WIPA            8              150            1200
.
.
.