Anda di halaman 1dari 19

BAB 12

VARIABEL BERINDEKS (ARRAY) DAN REKAMAN (RECORD)

A. PENDAHULUAN

Variable dengan tipe data tunggal (skalar) hanya dapat digunakan untuk

menyimpan sebuah nilai saja sehingga untuk menyimpan beberapa nilai sekaligus

dalam suatu variable dibutuhkan suatu variable khusus yang disebut dengan

variable array atau variable berindeks.

Variable berindeks atau array adalah variable yang mempunyai tipe data

sejenis, misalnya numeric atau string. Yang mampu menampung banyak nilai, dan

didefinisikan dengan sebuah nama variable berindeks.

Dari penjelasan di atas, sebuah larik (array) dapat diilustrasikan sebagai berikut :

1 2 3 4 ….. i ….. n
X

X adalah data bertipe larik dengan komponen sebanyak n.

Berdasarkan jumlah dimensi indeks dalam sebuah variable array, dikenal

adanya array dimensi satu dan array dimensi banyak.

Beberapa hal penting yang harus diperhatikan bila ingin memasukkan deretan

data ke dalam variable array adalah :

a. Tipe data yang akan disimpan ke dalam variable array harus diketahui

sebab variable array numeric hanya dapat menerima data numeric dan

variable array string hanya dapat menerima data string.

b. Banyaknya data harus lebih kecil atau sama dengan jumlah subskrip

(indeks) dari array tersebut.

201
c. Untuk memasukkan deretan data dalam suatu variable indeks dapat

digunakan instruksi perulangan.

d. Banyaknya indeks yang ditentukan menunjukkan banyaknya ruang

memori yang dialokasikan. Oleh karena itu dalam menentukan banyaknya

indeks sebaiknya disesuaikan dengan banyaknya data sehingga tidak

memboroskan pengalokasian ruang memori.

Secara garis besar array dibagi menjadi dua kelompok besar, yaitu : linier

array / linier list (array berdimensi tunggal) dan multidimension array (array

berdimensi banyak). Sedangkan Tipe data Rekaman (Record) merupakan

perluasan dari tipe data Array, yaitu karena pada array masing-masing

komponennya harus menggunakan tipe data yang sama, maka pada record hal itu

tidak berlaku lagi. Artinya diperbolehkan untuk menggunakan tipe data yang

berbeda pada masing-masing komponen (field) dari record tersebut.

B. SASARAN UMUM DAN SASARAN KHUSUS

SASARAN UMUM

Setelah mempelajari bab ini, mahasiswa diharapkan dapat memahami

prinsip-prinsip variable berindeks (array) dan rekaman (record).

SASARAN KHUSUS

Setelah mempelajari bab ini, mahasiswa diharapkan memiliki kompetensi :

a. Menjelaskan prinsip kerja array berdimensi tunggal.

b. Menjelaskan prinsip kerja array berdimensi banyak.

c. Menuliskan program dengan menggunakan array berdimensi tunggal.

202
d. Menuliskan program dengan menggunakan array berdimensi banyak.

e. Menjelaskan prinsip kerja Record.

f. Menuliskan program dengan menggunakan Record.

C. URAIAN MATERI

MENDEKLARASIKAN ARRAY DIMENSI TUNGGAL

Ada 2 cara untuk mendeklarasikan larik / array yaitu :

1. Sebagai tipe data baru

Type Larik=Array[1..n] of datatype ;


Var x : larik ;

2. Langsung sebagai variabel

Var x : Array[1..n] of datatype ;

MENGAKSES DATA LARIK

Cara mengakses data larik adalah dengan menunjukkan :

Nama_Larik[no.indeks] ;

Misal : x[1]  berarti kita mengakses data larik x pada no.indeks ke-1.

Contoh array berdimensi satu :

Uses crt;
Var
a : array [1..3] of string;
i : integer;
Begin
clrscr;
writeln(‘Masukkan 3 nama mahasiswa : ‘);
for i := 1 to 3 do
begin
write(‘Nama mahasiswa ke-‘,i,’ : ’); readln(a[i]);

203
end;
writeln(‘Nama 3 mahasiswa yang telah Anda masukkan: ‘);
for i := 1 to 3 do
begin
writeln(‘Nama mahasiswa ke-‘,i,’ : ‘,a[i]);
end;
End.

Hasil Run/Eksekusi:

Masukan 3 nama mahasiswa :


Nama mahasiswa ke-1 : Dewi
Nama mahasiswa ke-2 : Paul
Nama mahasiswa ke-3 : James
Nama 3 mahasiswa yang telah Anda masukkan :
Nama mahasiswa ke-1 : Dewi
Nama mahasiswa ke-2 : Paul
Nama mahasiswa ke-3 : James

KEUNTUNGAN

Menggunakan data larik adalah bahwa kita tidak akan kehilangan nilai

dari suatu data.

Contoh :

Program Rata_rata;
Uses crt;
type
larik = array[1..10] of integer;
var
x : larik;
Tot, i, n : integer;
mean : real;

Begin
clrscr;
write('Masukkan jumlah data : '); readln(n);
writeln;
Tot := 0;
for i:= 1 to n do
begin
write('Masukkan Data ke-',i,' ', 'Anda : '); readln(x[i]);
Tot:= Tot + x[i];
end;
writeln;

204
mean:= Tot/n;
write('Dan hasil perhitungan meannya : ');
writeln(mean:8:2);
readln;
end.

Hasil Run Program :

Masukkan jumlah data : 5


Masukkan Data ke-1 Anda : 1
Masukkan Data ke-2 Anda : 2
Masukkan Data ke-3 Anda : 3
Masukkan Data ke-4 Anda : 4
Masukkan Data ke-5 Anda : 5
Dan hasil perhitungan meannya : 3.00

KELEMAHAN

Saat ditentukan suatu variable bertipe data array maka ia akan langsung

mengambil tempat pada memory penyimpanannya sesuai dengan tipe data yang

digunakan pada array, baik nantinya semua komponen pada array itu digunakan

ataupun tidak.

Dalam pemrograman kadang kita menghadapi masalah saat kita akan

mendeklarasikan suatu matriks dengan adanya tipe data array maka masalah itu

dapat diselesaikan, yaitu dengan menggunakan array dengan dimensi dua atau

lebih yang kemudian dikenal dengan array dimensi banyak.

Array dua dimensi dapat digambarkan sebagai memiliki baris dan kolom.

Array tiga dimensi mungkin dapat digambarkan memiliki baris, kolom dan

halaman. Begitulah seterusnya.

Namun perlu diingat bahwa baris, kolom dan halaman itu hanya

merupakan sutu bentuk gambaran untuk memperjelas konsep multidimensi. Tidak

205
semua array multidimensi dapat digambarkan seperti diatas, bahkan dapat bersifat

abstrak.

Dalam penyimpanan secara fisik pada memori, array multidimensi tetap

disimpan seolah-olah sebagai array satu dimensi, namun setiap alamat memiliki

pemetaan terhadap dimensi yang sesungguhnya. Misalnya :

1 2 3
1 A B C
2 D E F

Array dua dimensi dengan dua baris dan tiga kolom

A B C D E F

Pemetaan fisik row by row dalam memori terhadap array dua dimensi
diatas.

A D B E C F

Pemetaan fisik row by row dalam memori terhadap array dua dimensi
diatas.

MENDEKLARASIKAN ARRAY MULTIDIMENSI

Dalam penyelesaian beberapa masalah seperti perhitungan matriks,

penentuan koordinat kartesius, penentuan koordinat vector tiga dimensi, dan

sebagainya, array berdimensi satu kurang memadai. Maka diperlukan array

multidimensi. Berikut contoh deklarasi array multidimensi :

206
Type
Nama_Array = Array[tipe-indeks1,tipe-indeks2,..., tipe-indeks ke n] of tipe data ;

Untuk menentukan dimensi array, perhatikan contoh berikut :

a. Matriks

Matriks adalah suatu kumpulan bilangan yang disusun dalam bentuk baris dan

kolom sehingga berbentuk persegi panjang. Untuk mendefinisikan dimensi dari

suatu matriks maka harus memperhatikan jumlah baris dan kolom yang

merupakan ordo dari matriks tersebut. Misalnya :

 Untuk matriks ordo 2X3


Matriks = Array[1..2, 1..3] of integer ;

 Untuk matriks ordo 5X2


Matriks = Array[1..5, 1..2] of integer ;

Contoh array berdimensi dua :

Program Baca_tulis_matriks ;
uses crt;
Var m,n,i,j : integer;
x: Array[1..100,1..100] of integer;
begin
clrscr;
write('Baca ukuran baris Matriks :',' ');readln(m);
write('Baca ukuran kolom matriks :',' ');readln(n);
writeln('Matriks anda berukuran',' ',m,'x',n,' ');
for i:=1 to m do
for j:=1 to n do
begin
write('Baca nilai :',' ');readln(x[i,j]);
end;
writeln;
writeln('Matriksnya :',' ');
for i:=1 to m do
begin
for j:=1 to n do
write(x[i,j]:3); writeln;
end;

207
writeln;writeln('Matriks tranposenya :',' ');
for j:= 1 to n do
begin
for i:=1 to m do
write(x[i,j]:3);writeln;
end;writeln;
writeln('Matriks anda berukuran',' ',n,'x',m,' ');
readln;
end.

Hasil Run Program :

Baca ukuran baris Matriks : 2


Baca ukuran kolom matriks : 2
Matriks anda berukuran 2x2
Baca nilai : 1
Baca nilai : 2
Baca nilai : 3
Baca nilai : 4
Matriksnya :
1 2
3 4
Matriks tranposenya :
1 3
2 4
Matriks anda berukuran 2x2

b. Koordinat Kartesius

System koordinat kartesius adalah suatu system penggunaan titik pada

suatu bidang di mana setiap titik pada suatu bidang didefinisikan dengan

sepasang bilangan real. Untuk menentukan letak suatu titik, system kartesius

menggunakan dua buah garis yang disebut dengan sumbu. Sumbu pertama

adalah sumbu datar yang biasanya disebut dengan sumbu X. Sumbu kedua

adalah sumbu vertical yang disebut dengan sumbu Y.

Untuk menentukan panjangnya sumbu X dan Y, pada Turno Pascal

digunakan variable array dimensi dua. Contoh :

Koordinat kartesius dengan panjang X maksimum adalah 100 satuan, dan


Y maksimum adalah 50 satuan :

208
Var
koordinat : array[1..100,1..50] of integer;

c. Vector Tiga Dimensi

Vector tiga dimensi disebut juga dengan istilah vector ruang. Untuk

menentukan letak suatu titik digunakan system koordinat tiga buah sumbu yang

saling tegak lurus. Ketiga buah sumbu tersebut dinyatakan dengan nama sumbu x,

y, dan z.

Untuk menentukan panjang sumbu x, y, dan z, pada Turbo Pascal digunakan

array berdimensi tiga. Contoh untuk mendefinisikan sebuah koordinat untuk

vector ruang dengan panjang sumbu x = 20, sumbu y = 20 dan sumbu z = 20,

didefinisikan sebagai berikut :

Var
Vektor3D : array[1..20,1..20,1..20] of integer;

Catatan :

Tipe data Larik (Array) juga berisi tentang kumpulan record, yang biasa

disebut sebagai array of record. Dapat digunakan untuk menyimpan database

dalam Pascal.

209
TIPE DATA REKAMAN (RECORD).

Tipe data ini merupakan perluasan dari tipe data Array, yaitu karena pada

array masing-masing komponennya harus menggunakan tipe data yang sama,

maka pada record hal itu tidak berlaku lagi. Artinya diperbolehkan untuk

menggunakan tipe data yang berbeda pada masing-masing komponen (field) dari

record tersebut.

Dengan tipe data ini kita dapat mengumpulkan beberapa item data yang

masing-masing dapat mempunyai tipe data berbeda-beda. Masing-masing data

disebut field. Deklarasi tipe ini diawali kata record dan dikuti oleh suatu daftar

field dan diakhiri dengan kata cadangan end.

Pendeklarasian record :

Type
Nama_record = record
Field1: tipe data1 ;
Field2: tipe data2 ;
…………………
…………………
Fieldn: tipe datan ;
End ;

Contoh :
Type Barang = record
Nama : string[20] ;
Jenis : string [20]
Jumlah : integer ;
End ;

MEMASUKKAN DATA KE DALAM RECORD

Untuk memberikan nilai dari masing-masing field maka kita harus

menuliskan

Nama_record.field := (nilainya);

210
Misalkan : dari contoh diatas kita akan mengisikan nama barang dengan Piring,

jenis barang yaitu barang pecah belah dan jumlah barang 3 lusin maka kita harus

menuliskan pada program utama

Barang.Nama := ‘Piring’ ;
Barang.Jenis := ‘Pecah belah’ ;
Barang.Jumlah:= 36 ;

Nilai-nilai dari field ini akan disimpan dalam record. Untuk melihat apakah benar

data yang dimasukkan telah tersimpan dalah ecord maka pada var kita

deklarasikan suatu variable misal :

X : array[1..n] of Nama_record ; dari soal di atas yaitu


X : array[1..n] of Barang ;

Maka apabila nanti kita lakukan pemanggilan dengan mengetikkan

Write(X[i].nama);

data dari field yang tersimpan dalam record tersebut akan ditampilkan.

Adapula beberapa bentuk lain cara pemasukkan data record, diantara :

1. Tiap-tiap komponen field dari record dapat dipergunakan dengan cara

menuliskan:

Pengenal_record.pengenal_field

Contoh:

langganan.Nama := ‘Kurniawan’;
readln(langganan.Kode);
writeln(langganan.Nama);
writeln(langganan.Kode);

2. Dengan menggunakan statemen with

211
Kita dapat langsung menuliskan pengenal field tanpa perlu menyertakan

pengenal record-nya. Ini dapat dilakukan dengan menggunakan statemen with

yang menyebutkan pengenal record.

Contoh:

with langganan do
begin
Nama := ‘Kurniawan’;
readln(Kode);
end;
with langganan do
begin
writeln(Nama);
writeln(Kode);
end;

Tipe data record dapat juga mempunyai field berupa tipe data record yang lainnya.

Contoh:

Type
tgl = record
hari : 1..31;
bulan : 1..12;
tahun : word;
End;
almt = record
jalan : string[35];
kota : string[25];
End;
pegawai = record
nama : string[40];
tglmasuk : tgl;
alamat : almt;
end;
Var
Datapegawai : pegawai;

212
Contoh Program menggunakan Record :

Type
Datamhs = record
Nomor : integer;
Nim : string[20];
Ip : real;
end;
var
jumlahmhs,i,j : byte;
mahasiswa : array [1..50] of datamhs;
Begin
write(‘Jumlah mahasiswa ? ‘); readln(jumlahmhs);
for i:=1 to jumlahmhs do
begin
with mahasiswa[i] do
begin
write(‘Nomor mahasiswa’,i,’ ? ‘); readln(nomor);
write(‘Nama mahasiswa’,i,’ ? ‘); readln(nama);
write(‘Ip mahasiswa’,i,’ ? ‘); readln(ip);
end;
end;
write(‘Data mahasiswa keberapa yang Anda ingin lihat ? ‘); readln(i);
with mahasiswa[i] do
begin
writeln(nomor);
writeln(nama);
writeln(ip);
end;
End.

Hasil run/eksekusi :
Jumlah mahasiswa ? 3
Nomor mahasiswa 1 ? 2341
Nama mahasiswa 1 ? Dewi
Ip mahasiswa 1 ? 2.45
Nomor mahasiswa 2 ? 2345
Nama mahasiswa 2 ? Paul
Ip mahasiswa 2 ? 3.1
Nomor mahasiswa 3 ? 2456
Nama mahasiswa 3 ? James
Ip mahasiswa 3 ? 2.76
Data mahasiswa keberapa yang Anda ingin lihat ? 2
2345
Paul
3.1

213
Contoh Program Database menggunakan Record secara Modular :

PROGRAM DATABASE;
Uses crt;
TYPE mahasiswa=record
nama: array[1..20] of string;
nim: array[1..20] of string;
alamat: array[1..20] of string;
ipk: array[1..20] of real;
end;

VAR data1: mahasiswa;

PROCEDURE data(var mhs:mahasiswa; mhs1:mahasiswi);


Var i,n,no:integer;
pilih,tekan:char;
Begin
write('Masukan jumlah mahasiswa : ');readln(n);
writeln;
for i:= 1 to n do
begin
writeln('Masukan data mahasiswa ke - ',i);
writeln;
write('Nama Mahasiswa : ');readln(mhs.nama[i]);
write('No. Mahasiswa : ');readln(mhs.nim[i]);
write('Alamat Mahasiswa : ');readln(mhs.alamat[i]);
write('IPK : ');readln(mhs.ipk[i]);
writeln;
end;
writeln;
writeln('DATA MAHASISWA');
writeln;
writeln('===================================================');
writeln('|','No':5,'Nama':20,'NIM':10,'Alamat':20,'IPK':10,'|':2);
writeln('===================================================');
for i:=1 to n do
writeln('|',i:5,mhs.nama[i]:20,mhs.nim[i]:10,mhs.alamat[i]:20,mhs.ipk[i]:10:2, '|':2);
writeln('===================================================');
writeln;
write('Ingin mencari data tertentu (y/n) ? ');readln(pilih);
writeln;
case pilih of
'y': begin
tekan:='Y';
while upcase(tekan)='Y' do
begin
clrscr;
writeln;

214
writeln('MENU PILIHAN');
writeln;
writeln('[1] NAMA');
writeln('[2] NIM');
writeln('[3] ALAMAT');
writeln('[4] IPK');
writeln;
write('Pilihan anda : ');readln(no);
case no of
1: begin
write('Masukan Nama Mahasiswa : ');readln(mhs1.nama);
writeln;
writeln('=================================================');
writeln('|','Nama':20,'NIM':10,'Alamat':20,'IPK':10,'|':2);
writeln('=================================================');
for i:=1 to n do
if (mhs1.nama) = (mhs.nama[i]) then
begin
writeln('|',mhs1.nama:20,mhs.nim[i]:10,mhs.alamat[i]:20,mhs.ipk[i]:10:2, '|':2);
end;
writeln('=================================================');
writeln;
end;
2: begin
write('Masukan No. Mahasiswa : ');readln(mhs1.nim);
writeln;
writeln('=================================================');
writeln('|','Nama':20,'NIM':10,'Alamat':20,'IPK':10,'|':2);
writeln('=================================================');
for i:=1 to n do
if (mhs1.nim) = (mhs.nim[i]) then
begin
writeln('|',mhs.nama[i]:20,mhs1.nim:10,mhs.alamat[i]:20,mhs.ipk[i]:10 :2,'|':2);
end;
writeln('================================================');
writeln;
end;
3: begin
write('Masukan Alamat Mahasiswa : ');readln(mhs1.alamat);
writeln;
writeln('================================================');
writeln('|','Nama':20,'NIM':10,'Alamat':20,'IPK':10,'|':2);
writeln('================================================');
for i:=1 to n do
if (mhs1.alamat) = (mhs.alamat[i]) then
begin
writeln('|',mhs.nama[i]:20,mhs.nim[i]:10,mhs1.alamat:20,mhs.ipk[i]:10 :2,'|':2);
end;

215
writeln('================================================');
writeln;
end;
4: begin
write('Masukan IPK : ');readln(mhs1.ipk);
writeln;
writeln('=================================================');
writeln('|','Nama':20,'NIM':10,'Alamat':20,'IPK':10,'|':2);
writeln('=================================================');
for i:=1 to n do
if (mhs1.ipk) = (mhs.ipk[i]) then
begin
writeln('|',mhs.nama[i]:20,mhs.nim[i]:10,mhs.alamat[i]:20,mhs1.ipk: 10:2,'|':2);
end;
writeln('=================================================');
writeln;
end;
end;
write('Ingin mencari data lagi (y/n) ? ');readln(tekan);
writeln;
end;end;end;end;
{=================PROGRAM UTAMA======================}
BEGIN
clrscr;
data(data1,data2);
readln;
end.

Hasil Run Program :

Masukan jumlah mahasiswa : 4


Masukan data mahasiswa ke - 1
Nama Mahasiswa : Tumpal PS
No. Mahasiswa : 8051
Alamat Mahasiswa : KalBar
IPK : 3.5
Masukan data mahasiswa ke - 2
Nama Mahasiswa : Sri Sunarwati
No. Mahasiswa : 8244
Alamat Mahasiswa : Klaten
IPK : 3.4
Masukan data mahasiswa ke - 3
Nama Mahasiswa : Putu Eka A
No. Mahasiswa : 8239
Alamat Mahasiswa : Bali
IPK : 3.3
Masukan data mahasiswa ke - 4
Nama Mahasiswa : Timotius N

216
No. Mahasiswa : 8299
Alamat Mahasiswa : Tegal
IPK : 3.5
DATA MAHASISWA
=============================================
| No Nama NIM Alamat IPK |
=============================================
| 1 Tumpal PS 8051 KalBar 3.50 |
| 2 Sri Sunarwati 8244 Klaten 3.40 |
| 3 Putu Eka A 8239 Bali 3.30 |
| 4 Timotius N 8299 Tegal 3.50 |
=============================================

Ingin mencari data tertentu (y/n) ? y

MENU PILIHAN

[1] NAMA
[2] NIM
[3] ALAMAT
[4] IPK

Pilihan anda : 1
Masukan Nama Mahasiswa : Tumpal PS
==========================================
| Nama NIM Alamat IPK |
==========================================
| Tumpal PS 8051 KalBar 3.50 |
==========================================
Ingin mencari data lagi (y/n) ? y
MENU PILIHAN
[1] NAMA
[2] NIM
[3] ALAMAT
[4] IPK
Pilihan anda : 2
Masukan No. Mahasiswa : 8299
=========================================
| Nama NIM Alamat IPK |
=========================================
| Timotius N 8299 Tegal 3.50 |
=========================================
Ingin mencari data lagi (y/n) ? y

MENU PILIHAN
[1] NAMA
[2] NIM

217
[3] ALAMAT
[4] IPK
Pilihan anda : 3
Masukan Alamat Mahasiswa : Bali
=========================================
| Nama NIM Alamat IPK |
=========================================
| Putu Eka A 8239 Bali 3.30 |
=========================================
Ingin mencari data lagi (y/n) ? y
MENU PILIHAN
[1] NAMA
[2] NIM
[3] ALAMAT
[4] IPK
Pilihan anda : 4
Masukan IPK : 3.4

=========================================
| Nama NIM Alamat IPK |
=========================================
| Sri Sunarwati 8244 Klaten 3.40 |
=========================================

TES MANDIRI

1. Buatlah program untuk menentukan nilai modus (angka yang sering muncul)

dari sederetan angka random!

2. Buatlah program untuk mengurutkan sederatan angka random!

3. Buatlah program untuk menentukan nilai median (angka tengah) dari

sederetan angka random!

4. Buatlah program untuk menghitung penjumlahan dua buah matriks!

5. Buatlah program untuk menghitung pengurangan dua buah matriks!

6. Buatlah program untuk menghitung perkalian dua buah matriks!

7. Buatlah program untuk menemukan data NAMA SESEORANG pada sebuah

array NAMA ORANG!

218
8. Buatlah program untuk mencari nilai Standar Deviasi, dengan rumus :

 (dt[i]rata)
2

SD  i 1

n 1

Keterangan :

SD = Standar Deviasi

dt[i] = data ke-i

n = Jumlah data

rata = nilai rata-rata (mean)

9. Buatlah program menggunakan array of record untuk mendata data akademik

mahasiswa yang meliputi: NAMA, NIM, ALAMAT, NILAI TUGAS, NILAI

TENGAH SEMESTER, NILAI AKHIR SEMESTER. Kemudian hitunglah

total nilai akhir mahasiswa pada setiap semester. Beserta tampilkan nilai rata-

rata kelas pada setiap matakuliah yang diambil. Buatlah dalam bentuk subrutin

dan ditampilkan dalam bentuk table!

DAFTAR PUSTAKA

Budi Sutedjo, Michael A.N. 2000., Algoritma dan Teknik Pemrograman. Andi.
Yogyakarta.

Jogiyanto H. 2004. Bahasa Turbo Pascal, Teori dan Aplikasi Program Komputer.
Jilid 1. Andi. Yogyakarta.

Saara Baase. 1993. ., Computer Algoritms Introduction to Design and Analysis.


Addison Wesley. USA.

Seri Diktat Kuliah. 1988., Algoritma dan Pemrograman. Gunadharma. Jakarta.

219

Anda mungkin juga menyukai