Type Data Terstruktur
Type Data Terstruktur di dalam bahasa Pascal terdiri dari :- Array
- Record
- Set
- File
- Larik : deretan data yang punya type data sejenis.
Misalnya : Daftar Nomor Telpon, Tabel Pajak dll.
- Tiap rinci data disebut komponen/Elemen Larik.
- Tiap larik bisa dioperasikan menggunakan pemilih elemen larik yang disebut INDEX atau Subskrib. Dan Index ini diletakkan dalam tanda ‘[ ]’, sesudah nama larik.
Deklarasi ARRAY
Deklarasi perubah selalu diawali dengan kata VAR Dalam deklarasi perubah biasa, kita hanya perlu menentukan type data perubah tersebut misalnya: real, integer, boolean atau char, sedangkan pada deklarasi larik (array), kita perlu mendefinisikan type larik, juga harus menentukan banyaknya index yang akan mengisi larik tersebut.
Format :
VAR nama : ARRAY [index] OF type
Keterangan :
Nama : nama larik yang dideklarasikan;
Index : batasan index (cacah elemen);
Type : tipe data dari larik;
Larik dapat bertipe data sederhana byte, word, integer, real, boolean, char atau string dan tipe data skalar atau subrange.
Index dari larik menunjukkan maksimum banyaknya elemen-elemen dari larik. Index larik ini dapat berupa tipe subrange atau skalar apapun (integer, byte, word, char ) kecuali tipe real.
Suatu larik tidak hanya dapat berupa suatu variabel yang dideklarasikan di bagian variabel, tetapi juga dapat berupa uatu konstanta yang dideklarasikan di bagian deklarasi konstanta.
Type Data Record (Rekaman)
Seperti halnya array(larik), record juga punya elemen, di sini elemennya disebut "Field". Tiap elemen bisa punya type data yang berbeda. Banyaknya field dapat bervariasi atau bisa juga tetap.
Record yang punya field yang bervariasi disebut ‘Variant Record’.
Deklarasi type data Record dapat ditetapkan di bagian deklarasi var atau Type.
Format :
TYPE pengenal = RECORD
Field1 : type1;
Field2 : type2;
:
fieldn : typen;
END;
Membaca dan menulis field
Dapat dilaksanakan pada seluruh record atau sebagian record.
Format :
Nama_record.Nama_field
Tanda titik harus ditulis
Notasi ini disebut Penandaan field (‘field designator’).
Berbeda dengan statement pemberian (assigment), maka untuk membaca dan menulis record selalu dialakukan menurut Field yang ada, tidak dilakukan secara keseluruhan record.
Contoh : Read(Tanggal.Tgl);
Read(Tanggal.bulan);
Read(Tanggal.tahun);
- Statement WITH
Digunakan untuk mengurangi penulisan yang berulang-ulang untuk nama recordnya. Maka dengan menggunakan statement WITH hanya cukup sekali saja menyebutkan nama recordnya.
Format :
WITH nama_record DO
{langsung dimasukkan/dicetak fieldnya}
Record Varian
Dengan menggunakan ‘varian record’ kita bisa membuat rekaman menjadi lebih komplex (varian), tergantung dari kondisi.
Format :
TYPE pengenal = RECORD
Field1 : tipe1;
Field2 : tipe2;
:
fieldn : tipen;
CASE pengenal_kasus : type_kasus OF
Label1 : (field_a : tipe_a; Field_b : tipe_b;
:
field_x : tipe_x);
Label2 : (field_t : tipe_t; Field_s : tipe_s;
:
field_v : tipe_v);
:
END;
Field dalam bagian variant sering disebut ‘tag field’ misalnya : fielda,fieldb,…..fieldx. Untuk tag field di atas yang diawali dengan ‘CASE’ mempunyai aturan sebagai berikut :
- Nilai dari tag field diantara Case dan Of menentukan struktur yang akan digunakan untuk keseluruhan record (rekaman). Tag field punya 2 komponen, yaitu pengenal field yang menyimpan nilai ‘tag field’ dan type data yang menunjukkan semua kemungkinan nilai ‘tag field’. Untuk rekaman Gaji di atas, maka tag fieldnya bisa berupa :
- Semua kemungkinan nilai tag digunakan sebagai label dalam bagian statement Case. Jika terdapat beberapa label, maka dipisahkan dengan koma, Struktur record (rekaman) yang akan dipilih tergantung dari nilai tag.
- Tiap structure varian ditulis dalam tanda kurung. Di dalam tanda kurung digunakan aturan yang sama seperti halnya dibagian tetap. Juga dimungkinkan adanya "bagian varian dalam bagian varian" (nested variant).
- Satu statement End menutup bagian tetap dan bagian varian dari definisi record.
Case stat_peg : status of
: :
tag field type tag
Misalnya : untuk rekaman Gaji, jika statement yang akan diekskusi : Gaji.Stat_Peg := J; (* lihat contoh di bawah ini *).
Maka bagian variant dari rekaman yang akan terbentuk berupa upah perjam, jumlah jam kerja dan lembur.
- Contoh
- Ketikkan program berikut, dan simpan dengan nama CONTOH81.PAS
- Ketikkan program berikut, dan simpan dengan nama CONTOH82.PAS
- Ketikkan program berikut, dan simpan dengan nama CONTOH83.PAS
Program Contoh1;
Uses crt;
Var
Bil : Array[1...10] of real;
Jum, rata : real;
I,N : integer;
Begin
Clrscr;
I:=0; jum:=0;
Write(‘Jumlah data : ‘); readln(N);
While I<=N Do
Begin
I:=I+1;
Write(‘Bilangan ke-‘,I,’);readln(bil[I]);
Jum:=jum+bil[I];
End;
Rata:=jum/N;
Writeln(‘Total data : ‘,jum:6:2);
Writeln(‘Rata-rata : ‘,rata:6:2);
Readln;
End;
Program Contoh_Arr;
uses crt;var a,b:array[1..6,1..6] of integer;
x,y,BAR,COL,PER,b2,c2,b1,c1,URUT,HASIL:integer;
ISI:BOOLEAN;s1,s2 : string;
begin
s1:=' ---- Program Perkalian Matrik ---- ';
s2:='Ulangi!,Kolom Matrik 1 harus sama dengan baris Matrik 2';
WINDOW(1,1,80,25);textbackground(0);clrscr;
WINDOW(10,4,70,5);textbackground(1);clrscr;
WINDOW(5,2,75,4);textbackground(3);clrscr;
GOTOXY((70-length(s1)) div 2,2);textcolor(1);writeln(s1);
WINDOW(5,8,75,16);textbackground(4);
ISI:=FALSE;
WHILE ISI=FALSE DO
BEGIN
textcolor(15);
CLRSCR;
GOTOXY((70-17) div 2,2);WRITE('Baris Matrik 1 : ');READLN(B1);
GOTOXY((70-17) div 2,3);WRITE('Kolom Matrik 1 : ');REAzDLN(C1);
GOTOXY((70-17) div 2,4);WRITE('Baris Matrik 2 : ');READLN(B2);
GOTOXY((70-17) div 2,5);WRITE('Kolom Matrik 2 : ');READLN(C2);
IF C1<>B2 THEN
BEGIN
GOTOXY((70-length(s2)) div 2,7);WRITE(s2);
GOTOXY((70-length('Tekan ENTER !')) div 2,8);
textcolor(3+blink);WRITE('Tekan ENTER !');READLN
END
ELSE
ISI:=TRUE;
END;
WINDOW(1,8,80,25);textbackground(2);CLRSCR;
gotoxy(3,2);WRITE('Pengisian Matrik I (',B1,'x',C1,')');
WRITELN(' '); gotoxy(30,2);write('Matrik Hasil Perkalian');
gotoxy(38,3);write(b1,' x ',c2);
GOTOXY(55,2);WRITE('Pengisian Matrik II(',B2,'x',C2,')'); WRITELN(' ');URUT:=3;
window(3,12,25,24);textbackground(4);clrscr;
window(28,12,52,24);textbackground(1);clrscr;
window(55,12,78,24);textbackground(4);clrscr;
window(1,1,80,25);
FOR BAR:=1 TO B1 DO
BEGIN
FOR COL:=1 TO C1 DO
BEGIN
gotoxy(col*3+2,bar*2+11);READLN(A[BAR,COL]);
END;
END;
FOR BAR:=1 TO B2 DO
BEGIN
FOR COL:=1 TO C2 DO
BEGIN
gotoxy(col*3+54,bar*2+11);READLN(B[BAR,COL]);
END;
END;
FOR BAR:=1 TO B1 DO
BEGIN
FOR COL:=1 TO C2 DO
BEGIN
HASIL:=0;
FOR PER:=1 TO C1 DO
BEGIN
HASIL:=HASIL+A[BAR,PER]*B[PER,COL];
END;
for x:=1 to hasil do
begin
textbackground(1);textcolor(15);
gotoxy(col*3+27,bar*2+11);WRITE(x);delay(100);
textbackground(4);textcolor(13+blink);
for y:=1 to c1 do
begin
gotoxy(y*3+2,bar*2+11);write(a[bar,y]);
end;
for y:=1 to b2 do
begin
gotoxy(col*3+54,y*2+11);write(b[y,col]);
end;
end;
textbackground(4);textcolor(15);
for y:=1 to c1 do
begin
gotoxy(y*3+2,bar*2+11);write(a[bar,y]);
end;
for y:=1 to b2 do
begin
gotoxy(col*3+54,y*2+11);write(b[y,col]);
end;
END;
END;
READLN;
END.
Program Contoh3; {Program input data pada record}
Uses crt;
Type
Barang = record
Kode : string;
Nb : string;
Jumlah : integer;
Harsat : longint;
End;
Var Brg : Array [word] of barang;
Lagi : char;
I : integer;
Begin
Clrscr;
I:=0;
Repeat
Inc(I)
Write(‘Kode Barang :’); readln(brg[I].kode);
Write(‘Nama Barang :’); readln(brg[I].Nb);
Write(‘Jumlah Barang :’); readln(brg[I].Jumlah);
Write(‘Harga satuan :’); readln(brg[I].Harsat);
Write(‘Ada lagi : ‘); readln(lagi);
Until lagi<>’Y’ or lagi<>’y’
End.
No comments:
Post a Comment