ARRAY
Larik / array
adalah tipe terstruktur yang terdiri dari sejumlah komponen-komponen yang
mempunyai tipe yang sama.
1.1 Deklarasi Array
Array yang akan dipergunakan harus di deklarasikan terlebih dahulu. Deklarasi dari Array diawali dengan kata cadangan Array diikuti oleh tipe index yang diletakkan diantara tanda “ [ ] ” diikuti lagi oleh kata cadangan of dan tipe arraynya.
Array dapat bertipe sederhana byte, word, integer, real, boolean, char, string dan tipe scalar atau subrange.
Contoh:
Var
X : array [ 1..100 ] of integer ;
Larik X dideklarasikan sebagai larik tipe integer dengan jumlah elemen maksimum 100 elemen, dimana nilai elemen larik ini harus berisi nilai integer.
Misalkan :
X [1] : = 18 ;
X [2] : = 5 ;
Bila nilai elemen ke-1 dari larik X akan ditampilkan, dapat dipergunakan perintah :
Writeln ( x[1] ) ;
1.2 Deklarasi Tipe Index Subrange Integer
Tipe index subrange integer sebagai berikut :
Var NilaiHuruf : array [1..5] of char ;
Nilai [1..5] inilah yang dimaksud dengan index subrange integer.
Index dari larik diatas dapat dideklarasikan terlebih dahulu di bagian deklarasi tipe :
Type
Jangkauan = 1..5 ; {tipe subrange integer}
Var
NilaiHuruf : array [Jangkauan] of char ;
Begin
…
…
end.
1.3 Deklarasi Tipe Index Subrange Byte
Kalau index dari larik tidak sampai dengan 255, maka index dari larik ini dapat dideklarasikan dengan tipe byte.
Var
X : array [0..255] of real ;
Karen anilai 0 sampai 255 merupakan nilai subrange byte, maka deklarasi ini dapat ditulis :
Var
X : array [byte] of real ;
1.4 Deklarasi Tipe Index Subrange Word
Jika jangkauan index dari 0 sampai 65525, maka index dari larik dapat dideklarasikan dengan tipe word.
Var
X : array [byte] of word ;
1.5 Deklarasi Tipe Index Subrange Boolean
Index larik yang bertipe Boolean, hanya mempunyai maksimum 2 buah elemen saja.
Type
Keterangan = string [11] ;
Var
X : array [Boolean] of keterangan ;
1.6 Deklarasi Tipe Index Subrange Char
Tipe char adalah tipe subrange yang mempunyai nilai sebanyak 256 buah ( 0 – 255 )sesuai dengan urutan kode ASCII.
Var
X : array [char] of integer ;
1.7 Deklarasi Tipe Index Skalar
Index dari larik dapat berupa tipe scalar atau enumerated.
Contoh program:
Var
Jumlah : array [(Jan, Peb, Mar)] of integer ;
Begin
Jumlah[Jan] : = 125 ;
Jumlah{Peb] : = 75 ;
Jumlah[Mar] : = 18 ;
Writeln ( ‘Jumlah untuk bulan maret = ‘, Jumlah{Mar});
End.
Output program :
Jumlah untuk bulan Maret = 18
Contoh diatas dapat ditulis :
Type
Bulan = (Jan, Peb, Mar) ;
Var
Jumlah : array [Bulan] of integer ;
1.8 Deklarasi konstanta Larik
Larik tidak hanya dapat berupa suatu variable yang dideklarasikan di bagian deklarasi variable, tetapi juga dapat berupa suatu konstanta yang dideklarasikan dibagian deklarasi konstanta.
Contoh program :
Const
X : array [1..5] of integer = (6, 25, 375, 5, 2) ;
Var
I : word ;
Begin
For I : = 1 to 5 do
Writeln ( ‘Nilai konstanta larik ke ‘, I, ‘=’, X[I] ) ;
End.
Output program :
Nilai Konstanta larik ke 1 = 6
Nilai Konstanta larik ke 2 = 25
Nilai Konstanta larik ke 3 = 375
Nilai Konstanta larik ke 4 = 5
Nilai Konstanta larik ke 5 = 2
1.9 String Sebagai Larik Tipe Char
String dapat dianggap sebagai suatu larik tipe char dengan index dari 0 sampai dengan panjang dari string yang di definisikan.
Contoh program :
Var
I : word ;
Nama : string [255] ;
Begin
Write ( ‘Nama Anda ?’ ) ; readln ( Nama ) ;
Writeln ;
Writeln ( ‘Nama Anda kalau dibaca terbalik adalah : ‘ ) ;
For I : = ord (Nama [0] ) down to 1 do
Write (Nama [I] ) ;
End.
Output program :
Nama Anda ? Dita
Nama Anda kalau dibaca terbalik adalah :
atid
1.10 Larik Dimensi Banyak
Larik dapat juga berdimensi lebih dari satu yang disebut dengan larik dimensi banyak, yang dapat berdimensi dua, dimensi tiga dan seterusnya.
Larik dimensi 2 mewakili suatu bentuk table atau matrik, yaitu index yang pertama dapat menunjukkan baris dan index kedua dapat menunjukkan kolom dari table atau metric.
Bentuk Umum :
Nama_larik = array [tipe index1] of array [tipe index2] of tipe larik
Atau
Nama_larik = array [tipe index1, tipe index2] of tipe larik
Contoh program :
Var
Tabel : array [1..3, 1..2] of byte ;
I, J : byte ;
Begin
Tabel[1,1] : = 5 ;
Tabel[1,2] : = 25 ;
Tabel[2,1] : = 200 ;
Tabel[2,2] : = 22 ;
Tabel[3,1] : = 75 ;
Tabel[3,2] : = 50 ;
For I : = 1 to 3 do
Begin
For J : = 1 to 2 do
Write ( table [I,J] : 10 ) ;
Writeln ;
End ;
End.
Output program :
5 25
200 22
75 50
1.11 Parameter Larik
Larik dapat digunakan sebagai parameter yang dikirimkan baik secara nilai atau secara acuan ke prosedur atau ke fungsi. Prosedur yang menggunakan parameter berupa larik harus dideklarasikan didalam judul prosedur yang menyebutkan parameternya bertipe larik.
Contoh program :
Type
Larik = array [1..50, 1..50] of real ;
Var
I, J, K : byte ;
Procedure inverse (Var X : Larik ; N : byte ) ;
….
….
Begin
….
…
end.
1.1 Deklarasi Array
Array yang akan dipergunakan harus di deklarasikan terlebih dahulu. Deklarasi dari Array diawali dengan kata cadangan Array diikuti oleh tipe index yang diletakkan diantara tanda “ [ ] ” diikuti lagi oleh kata cadangan of dan tipe arraynya.
Array dapat bertipe sederhana byte, word, integer, real, boolean, char, string dan tipe scalar atau subrange.
Contoh:
Var
X : array [ 1..100 ] of integer ;
Larik X dideklarasikan sebagai larik tipe integer dengan jumlah elemen maksimum 100 elemen, dimana nilai elemen larik ini harus berisi nilai integer.
Misalkan :
X [1] : = 18 ;
X [2] : = 5 ;
Bila nilai elemen ke-1 dari larik X akan ditampilkan, dapat dipergunakan perintah :
Writeln ( x[1] ) ;
1.2 Deklarasi Tipe Index Subrange Integer
Tipe index subrange integer sebagai berikut :
Var NilaiHuruf : array [1..5] of char ;
Nilai [1..5] inilah yang dimaksud dengan index subrange integer.
Index dari larik diatas dapat dideklarasikan terlebih dahulu di bagian deklarasi tipe :
Type
Jangkauan = 1..5 ; {tipe subrange integer}
Var
NilaiHuruf : array [Jangkauan] of char ;
Begin
…
…
end.
1.3 Deklarasi Tipe Index Subrange Byte
Kalau index dari larik tidak sampai dengan 255, maka index dari larik ini dapat dideklarasikan dengan tipe byte.
Var
X : array [0..255] of real ;
Karen anilai 0 sampai 255 merupakan nilai subrange byte, maka deklarasi ini dapat ditulis :
Var
X : array [byte] of real ;
1.4 Deklarasi Tipe Index Subrange Word
Jika jangkauan index dari 0 sampai 65525, maka index dari larik dapat dideklarasikan dengan tipe word.
Var
X : array [byte] of word ;
1.5 Deklarasi Tipe Index Subrange Boolean
Index larik yang bertipe Boolean, hanya mempunyai maksimum 2 buah elemen saja.
Type
Keterangan = string [11] ;
Var
X : array [Boolean] of keterangan ;
1.6 Deklarasi Tipe Index Subrange Char
Tipe char adalah tipe subrange yang mempunyai nilai sebanyak 256 buah ( 0 – 255 )sesuai dengan urutan kode ASCII.
Var
X : array [char] of integer ;
1.7 Deklarasi Tipe Index Skalar
Index dari larik dapat berupa tipe scalar atau enumerated.
Contoh program:
Var
Jumlah : array [(Jan, Peb, Mar)] of integer ;
Begin
Jumlah[Jan] : = 125 ;
Jumlah{Peb] : = 75 ;
Jumlah[Mar] : = 18 ;
Writeln ( ‘Jumlah untuk bulan maret = ‘, Jumlah{Mar});
End.
Output program :
Jumlah untuk bulan Maret = 18
Contoh diatas dapat ditulis :
Type
Bulan = (Jan, Peb, Mar) ;
Var
Jumlah : array [Bulan] of integer ;
1.8 Deklarasi konstanta Larik
Larik tidak hanya dapat berupa suatu variable yang dideklarasikan di bagian deklarasi variable, tetapi juga dapat berupa suatu konstanta yang dideklarasikan dibagian deklarasi konstanta.
Contoh program :
Const
X : array [1..5] of integer = (6, 25, 375, 5, 2) ;
Var
I : word ;
Begin
For I : = 1 to 5 do
Writeln ( ‘Nilai konstanta larik ke ‘, I, ‘=’, X[I] ) ;
End.
Output program :
Nilai Konstanta larik ke 1 = 6
Nilai Konstanta larik ke 2 = 25
Nilai Konstanta larik ke 3 = 375
Nilai Konstanta larik ke 4 = 5
Nilai Konstanta larik ke 5 = 2
1.9 String Sebagai Larik Tipe Char
String dapat dianggap sebagai suatu larik tipe char dengan index dari 0 sampai dengan panjang dari string yang di definisikan.
Contoh program :
Var
I : word ;
Nama : string [255] ;
Begin
Write ( ‘Nama Anda ?’ ) ; readln ( Nama ) ;
Writeln ;
Writeln ( ‘Nama Anda kalau dibaca terbalik adalah : ‘ ) ;
For I : = ord (Nama [0] ) down to 1 do
Write (Nama [I] ) ;
End.
Output program :
Nama Anda ? Dita
Nama Anda kalau dibaca terbalik adalah :
atid
1.10 Larik Dimensi Banyak
Larik dapat juga berdimensi lebih dari satu yang disebut dengan larik dimensi banyak, yang dapat berdimensi dua, dimensi tiga dan seterusnya.
Larik dimensi 2 mewakili suatu bentuk table atau matrik, yaitu index yang pertama dapat menunjukkan baris dan index kedua dapat menunjukkan kolom dari table atau metric.
Bentuk Umum :
Nama_larik = array [tipe index1] of array [tipe index2] of tipe larik
Atau
Nama_larik = array [tipe index1, tipe index2] of tipe larik
Contoh program :
Var
Tabel : array [1..3, 1..2] of byte ;
I, J : byte ;
Begin
Tabel[1,1] : = 5 ;
Tabel[1,2] : = 25 ;
Tabel[2,1] : = 200 ;
Tabel[2,2] : = 22 ;
Tabel[3,1] : = 75 ;
Tabel[3,2] : = 50 ;
For I : = 1 to 3 do
Begin
For J : = 1 to 2 do
Write ( table [I,J] : 10 ) ;
Writeln ;
End ;
End.
Output program :
5 25
200 22
75 50
1.11 Parameter Larik
Larik dapat digunakan sebagai parameter yang dikirimkan baik secara nilai atau secara acuan ke prosedur atau ke fungsi. Prosedur yang menggunakan parameter berupa larik harus dideklarasikan didalam judul prosedur yang menyebutkan parameternya bertipe larik.
Contoh program :
Type
Larik = array [1..50, 1..50] of real ;
Var
I, J, K : byte ;
Procedure inverse (Var X : Larik ; N : byte ) ;
….
….
Begin
….
…
end.
PROCEDURE
Prosedur adalah suatu program terpisah dalam blok
sendiri yang berfungsi sebagai subprogram (program bagian).
Diawali dengan kata cadangan “Procedure” didalam
bagian deklarasi prosedur. Prosedur banyak digunakan pada program yang
terstruktur karena :
·
Merupakan penerapan konsep
program modular, yaitu memecah-mecah program yang rumit menjadi program-program
bagian yang lebih sederhana dalam bentuk prosedur-prosedur.
·
Untuk hal-hal yang sering
dilakukan berulang-ulang, cukup dituliskan sekali saja dalam prosedur dan dapat
dipanggil atau dipergunakan sewaktu-waktu bila diperlukan.
Bentuk Umum :
PROGRAM judul_program ;
PROCEDURE judul_prosedur ;
Begin
Statement prosedur ;
…
…
…
End ;
Begin
Statement program utama ;
…
…
…
end.
1.1 Parameter Dalam Prosedur
Nilai didalam modul program Pascal sifatnya adalah
local, artinya hanya dapat digunakan pada modul atau unit program yang
bersangkutan saja, tidak dapat digunakan pada modul atau unit program yang
lainnya.
Contoh program :
Procedure Tanya_hitung ;
Var
X, Y : real ;
Begin
Write (‘Nilai X =’) ;
Readln (X) ;
Y : = X * X ;
End ;
Begin
Tanya_hitung ;
Writeln (‘Nilai Y =’, Y : 6 : 2 ) ;
End.
Keterangan contoh program :
Bila program dikompilasi, akan di deteksi kesalahan
oleh compiler, karena variable Y yang sifatnya local di procedure Tanya_hitung
digunakan pada program utama.
Agar nilai-nilai variable dapat digunakan di modul
lainnya yang membutuhkan, maka dapat dilakukan dengan beberapa cara, yaitu :
- Dibuat bersifat global.
Harus di deklarasikan diatas modul yang akan
menggunakannya.
Contoh :
Procedure kesatu ;
Begin
…
End ;
Var
A, B : word ;
Procedure kedua ;
Begin
…
End ;
Procedure ketiga ;
Begin
…
End ;
Begin { program utama }
…
End.
Keterangan contoh :
Variabel A dan B dapat digunakan untuk modul Procedure
kedua dan ketiga serta modul/program utama, tetapi tidak bersifat global untuk
procedure kesatu.
- Dikirimkan sebagai
parameter ke modul yang membutuhkannya.
Parameter yang dikirmkan dari modul utama ke modul
prosedur disebut dengan parameter nyata (actual parameter) dan parameter yang
ada dan dituliskan pada judul prosedur disebut dengan parameter formal (formal
parameter). Proses pengiriman data lewat parameter nyata ke parameter formal
disebut dengan parameter passing. Parameter nyata dan parameter formal harus
dengan tipe yang sama. Didalam
pascal, parameter dapat dikirimkan secara nilai (by value) atau secara acuan
(by reference).
- Dikirimkan sebagai parameter ke modul yang
membutuhkannya. Parameter yang dikirmkan dari modul utama ke modul prosedur
disebut dengan parameter nyata (actual parameter) dan parameter yang ada dan
dituliskan pada judul prosedur disebut dengan parameter formal (formal
parameter). Proses pengiriman data lewat parameter nyata ke parameter formal
disebut dengan parameter passing. Parameter nyata dan parameter formal harus
dengan tipe yang sama. Didalam pascal, parameter
dapat dikirimkan secara nilai (by value) atau secara acuan (by reference).
1.1.1 Pengiriman Parameter Secara Nilai
Bila parameter dikirimkan secara nilai nilai,
parameter formal di prosedur akan berisi nilai yang dikirmkan yang kemudian
bersifat local di prosedur. Bila nilai parameter formal di prosedur berubah, tidak
akan mempengaruhi nilai parameter nyata ( nilai parameter nyata tetap, tidak
berubah). Pengiriman secara nilai ini merupakan pengiriman searah, yaitu dari
parameter nyata ke parameter formal, yang tidak dikirimkan balik dari parameter
formal ke parameter nyata.
Parameter – parameter yang digunakan dengan
pengiriman secara nilai ini disebut dengan parameter nilai ( value parameter ).
Contoh program :
Procedure Hitung(A, B : integer ) ;
Var
C : integer ;
Begin
C : = A + B ;
Writeln (‘Nilai C =’, C ) ;
End ;
Var
X, Y : integer ;
Begin
Write ( ‘Nilai X =’ ) ; readln ( X ) ;
Write ( ‘Nilai Y =’ ) ; readln ( Y ) ;
Hitung ( X, Y ) ;
End.
Output program :
Nilai X = 2
Nilai Y = 3
Nilai C = 5
Penjelasan program :
- prosedur dimulai dengan
deklarasi prosedur dengan judul prosedur hitung. Variable A dan B adalah
parameter formal dan integer adalah tipe parameternya.
- Variable local yang
hanya dipergunakan di prosedur dan tidak termasuk parameter formal (parameter
nilai), harus didefinisikan sendiri, yaitu : variable C
- Hubungan antara
parameter formal di prosedur dengan parameter nyata di modul utama adalah :
nilai parameter nyata X dan Y di modul utama dikirimkan ke parameter formal A
dan B di prosedur. Dengan demikian nilai parameter A dan B diprosedur akan
berisi nilai yang sama dengan parameter X dan Y di modul utama.
1.1.2 Pengiriman Parameter Secara
Acuan
Bila pengiriman parameter secara acuan, maka
perubahan-perubahan yang terjadi pada nilai parameter formal di prosedur akan
mempengaruhi nilai parameter nyata. Parameter-parameter ini disebut dengan
variable parameter serta dideklarasikan di deklarasi prosedur dengan
menggunakan kata cadangan Var, sebagai berikut :
PROCEDURE hitung (VAR A, B, C : integer ) ;
Contoh program :
Procedure Hitung ( var A, B, C : integer ) ;
Begin
C : = A + B ;
End ;
Var
X, Y, Z : integer ;
Begin
X : = 2 ; Y : = 3 ;
Hitung ( X, Y, Z ) ;
Writeln (‘ X = ‘, X , ‘ Y = ‘ , Y, ‘ Z = ‘ , Z ) ;
End.
Output program :
X = 2 Y = 3 Z = 5
Penjelasan program :
- pengiriman parameter
secara acuan merupakan pengiriman dua arah, bolak-balik, sehingga perubahan
nilai di parameter formal akan mempengaruhi nilai parameter nyata juga. Pada
contoh, nilai parameter nyata Z akan mengikuti perubahan nilai dari parameter
formal C.
1.1.3 Pengiriman Parameter
Sebagian Secara Nilai, Sebagian Acuan
Pengiriman parameter dapat dicampur sebagian
secara nilai dan sebagian secara acuan dalam suatu prosedur. Parameter yang
hanya dibutuhkan pada prosedur saja dapat dikirimkan secara nilai dan yang ingin
dikirimkan balik dapat dilakukan secara acuan, sebagai berikut :
PROCEDURE Hitung ( A, B : integer ; Var C :
integer ) ;
Contoh program :
Procedure Hitung ( A, B : integer ; Var C ;
integer ) ;
Begin
C : = A + B ;
End ;
Var
X, Y, Z : integer ;
Begin
X : = 2 ; Y : = 3 ;
Hitung ( X, Y, Z ) ;
Writeln ( ‘ X = ‘, X , ‘ Y = ‘, Y , ‘ Z = ‘, Z ) ;
End.
Output program :
X = 2 Y = 3 Z = 5
1.2 Prosedur Memanggil Prosedur Yang Lain
Prosedur dapat memanggil prosedur yang lainnya.
Contoh program :
Procedure Pro1 ( X1 : integer ) ;
Begin
Writeln ( ‘Nilai X = ‘, X1, ‘ada di prosedur Pro1’ ) ;
End ;
Procedure Pro2 (X2 : integer ) ;
Begin
Writeln ( ‘Nilai X = ‘, X2, ‘ada diprosedur Pro2’ ) ;
Pro1 (X2) ;
End ;
Var
X : integer ;
Begin
X : = 5 ;
Pro2 ( X ) ;
End.
Output program :
Nilai X = 5 ada diprosedur Pro2
Nilai X = 5 ada diprosedur Pro1
1.3 Prosedur Tersarang
Adalah prosedur yang berada didalam prosedur yang
lainnya.
Bentuk Umum :
Program
Procedure
Procedure
Begin
…
…
…
End ;
Begin
…
…
…
End ;
Begin
…
…
…
end .
1.4 Prosedur Memanggil Dirinya Sendiri
Merupakan prosedur yang memanggil atau menggunakan
prosedur itu juga. Proses dari suatu program bagian yang memanggil dirinya
sendiri dikenal dengan istilah recursion. Tidak semua bahasa menyediakan
kemampuan untuk melakukan proses recursion, tetapi pascal dapat. Walaupun
proses ini merupakan algoritma yang baik, tetapi membutuhkan banyak memori,
karena setiap kali program bagian dipanggil oleh dirinya sendiri, sejumlah
ruang memori tambahan dibutuhkannya.
Contoh program :
Var
I : integer ;
Procedure Rekursi ;
Begin
Writeln ( ‘Hallo saya Pascal ‘ ) ;
I : = I + 1 ;
If I < 10 Then
Rekursi ;
End ;
Begin
I : = 1 ;
Rekursi ;
End.
1.5 Acuan Forward
Digunakan untuk mendeklarasikan dimuka judul
prosedur terpisah dari bloknya. Judul prosedur yang berisi parameter terpisah
ini merupakan judul yang semestinya dan di deklarasikan dengan menambahkan kata
cadangan “ Forward ”. Blok prosedur ini letaknya terpisah dari judulnya, juga
diawali dengan judul prosedur, tetapi hanya mencantumkan judul atau nama
prosedurnya saja, tanpa mencantumkan parameter formalnya.
Contoh program :
Procedure Pro1 (Var I : integer ) ; Forward ;
Procedure Pro2 (Var I : integer ) ;
Begin
Writeln ( ‘ Prosedur PRO’, I ) ;
End ;
Procedure Pro1 ;
Begin
Writeln ( ‘Prosedur PRO’, I ) ;
End ;
Var
I : integer ;
Begin
I : = 1 ;
Pro1 ( I ) ;
I : = 2 ;
Pro2 ( I ) ;
End.
Output :
Prosedur PRO1
Prosedur PRO2
1.6 Prosedur Standar
1.6.1 Prosedur Standar Exit
Digunakan untuk keluar dari suatu blok. Bila
diletakkan pada program bagian, prosedur standar exit akan menyebabkan proses
di program bagian berhenti dan proses kembali ke blok program yang
memanggilnya. Bila berada di program utama, menyebabkan proses program
berhenti.
1.6.2 Prosedur Standar Halt
Digunakan untuk menghentikan proses program baik
di program bagian maupun program utama.
1.6.3 Prosedur Standar Move
Bentuk umum :
Move ( var source, dest; count : word )
Digunakan untuk menyalinkan suatu blok sebanyak
count byte memori dari blok dimulai byte pertama source dan disalinkan ke byte
pertama dest.
Contoh program :
Var
Sumber, Tujuan : string [5] ;
Sejumlah : word ;
Begin
Sumber : = ‘ABCDE’ ;
Tujuan : = ‘FGHIJ’ ;
Sejumlah : = 4 ;
Move (Sumber, Tujuan, Sejumlah ) ;
Writeln (Sumber : 7, Tujuan : 7 ) ;
End.
Output program :
ABCDE ABCIJ
1.6.4 Prosedur Standar FillChar
Digunakan untuk mengisi sejumlah byte nilai ke
dalam suatu variable, sbb :
FillChar ( x ; count : word ; ch )
X adalah variable yang dapat bertipe apapun yang akan
diisi dengan nilai tipe ordinal ch sebanyak count byte.
Pascal menyediakan tipe data terstruktur yang disebut record. Dengan tipe data record, dapat dikumpulkan beberapa item data yang masing-masing mempunyai tipe data berbeda-beda. Masing – masing item data disebut field. Record terdiri dari kumpulan field yang dapat berbeda tipe.
Deklarasi Record :
Tipe record : record
Daftar field
---
---
---
End;
Contoh :
Type
Lgn = record ;
Kode : integer ;
Nama : string[35] ;
Alamat : string[45] ;
Piutang : real ;
End ;
Var
Langganan : Lgn;
Menggunakan Tipe Data Record
Tipe-tipe komponen field dari record dapat dipergunakan dengan cara menuliskan :
Pengenal-record.pengenal-field[.pengenal-field]
Contoh :
Langganan.Nama := ‘ Udin Jabrig ‘ ;
Statemen WithPenulisan pengenal-field seperti contoh diatas dapat ditulis lebih singkat, sehingga penulisannya menjadi :
Nama := ‘ Udin Jabrig ‘ ;
Ini dapat dilakukan dengan menggunakan statemen with yang menyebutkan pengenal-recordnya, sehingga penggunaan field-field selanjutnya sudah tidak perlu menyebutkan pengenal recordnya kembali.
Contoh :
Tipe Data Record Dengan Field Tipe Record
Tipe data record dapat juga mempunyai field berupa tipe data record yang lainnya. Misalkan seperti item-item ini :
1. Nama pegawai
2. Tanggal masuk
a. hari
b. bulan
c. tahun
3. Alamat pegawai
a. Jalan
b. Kota
Contoh :
Record Bervariasi
Dapat dibuat suatu record yang mempunyai field yang tidak pasti atau bervariasi (variant record). Dalam variant record, dapat mengandung suatu field yang bervariasi tergantung dari suatu kondisi. Bila didalam suatu variant record terdapat field yang tetap, maka field yang bervariasi letaknya harus setelah field yang tetap.
Contoh :
Penjelasan contoh :
Field yang bervariasi dalam record tergantung dari suatu kondisi Case. Tipe field tag yang dipergunakan adalah suatu tipe data scalar Tipebacaan yang mempunyai2 nilai konstanta, yaitu : Bukuteks dan Majalah. Bila pengenal tipe bernilai Majalah, maka field variant yang akan digunakan adalam nomor. Bila pengenal tipe bernilai Bukuteks, maka field variant yang akan digunakan adalah Pengarang dan Edisi. Jadi field yang digunakan akan bervariasi tergantung dari suatu kondisi.
SORTING
LANJUTAN RECORD
5. Sorting Beberapa metode sorting mengurutkan data yang dikenal antara lain adalah:
1. Bubble Sort (sederhana tetapi lambat)
2. Quick Sort (cepat tetapi rumit)
3. Shell Sort (agak cepat dan tidak terlalu rumit)
5.1. Bubble Sort
Teknik ini menyusun data yang diinginkan secara berurutan dengan membandingkan elemen data yang ada, misalkan kita akan meyusun data secara (ascending) cacah naik. Maka lagoritma utamanya adalah seperti ini.
SYNTAX
for i:=1 to Jumlah_data-1 do
for j:=i+1 to Jumlah_data do
if Data[i]>Data[j] then
begin
t:=Data[i];
Data[i]:=Data[j];
Data[j]:=t;
end;
Contoh.
Misal kita punya data : 5 3 8 4 1 7 6 2 , dalam program
program mengurutkandata;
uses WinCrt;
type urutkan=array [1..8] of integer;
var i,j,t:integer;
anu:urutkan;
begin
anu[1]:=5; anu[2]:= 3;
anu[3]:= 8; anu[4]:= 4;
anu[5]:= 1; anu[6]:= 7 ;
anu[7]:=6 ; anu[8]:=2 ;
for i:=1 to 7 to
begin
for j:=i+1 to 8 to
begin
if anu[i]>anu[j] then
begin
t:=anu[i];
anu[i]:=anu[j];
anu[j]:=t;
end;
end;
end;
for i:=1 to 8 do
write (anu[i], ' ')
end.
5.2. Shell sort
Prinsipnya hampir sama dengan bubble sort tetapi dioptmisisasi sehingga lebih cepat. Ditemukan oleh Donald Shell. prinsipnya adalah membandingkan data dengan jarak tertentu dalam array.
SYNTAX
for jarak:= (Jumlah_data div 2) down to 1 do
for i:=1 to Jumlah_data-jarak do
if Data[i]>Data[i+jarak] then
begin
t:=Data[i];
Data[i]:=Data[i+jarak];
Data[i+jarak]:=t;
end;
Misalkan kita punya 8 data. Langkah pertama adalah membandingkan data pertama dengan ke lima, dsb. Jarak antara data adalah (8 div 2 :=4).
Langkah iterasi:
pertama, jarak adalah 4.
5 3 8 4 1 7 6 2
ke-1 perbandingan : ^ ^ (salah urutan, tukar)
1 3 8 4 5 7 6 2
ke-2 perbandingan : ^ ^ ( urutan benar, no tukar)
ke-3 perbandingan : ^ ^ (salah urutan, tukar)
1 3 6 4 5 7 8 2
ke-4 perbandingan : ^ ^ (salah urutan, tukar)
1 3 6 2 5 7 8 4 ----> Jarak 3.
ke-5 perbandingan : ^ ^ ( urutan benar, no tukar)
ke-6 perbandingan : ^ ^ ( urutan benar, no tukar)
ke-7 perbandingan : ^ ^ ( urutan benar, no tukar)
ke-8 perbandingan : ^ ^ ( urutan benar, no tukar)
ke-9 perbandingan : ^ ^ (salah urutan, tukar)
1 3 6 2 4 7 8 5 ----> Jarak 2.
ke-10 perbandingan :^ ^ ( urutan benar, no tukar)
ke-11 perbandingan : ^ ^ (salah urutan, tukar)
1 2 6 3 4 7 8 5
ke-12 perbandingan : ^ ^ (salah urutan, tukar)
1 2 4 3 6 7 8 5
ke-13 perbandingan : ^ ^ ( urutan benar, no tukar)
ke-14 perbandingan : ^ ^ ( urutan benar, no tukar)
ke-15 perbandingan : ^ ^ (salah urutan, tukar)
1 2 4 3 6 5 8 7 ----> Jarak 1.
ke-16 perbandingan :^ ^ ( urutan benar, no tukar)
ke-17 perbandingan : ^ ^ ( urutan benar, no tukar)
ke-18 perbandingan : ^ ^ (salah urutan, tukar)
1 2 3 4 6 5 8 7
ke-19 perbandingan : ^ ^ ( urutan benar, no tukar)
ke-20 perbandingan : ^ ^ (salah urutan, tukar)
1 2 3 4 5 6 8 7
ke-21 perbandingan : ^ ^ ( urutan benar, no tukar)
ke-22 perbandingan : ^ ^ (salah urutan, tukar)
1 2 3 4 5 6 7 8
5.3. quick sort
diketemukan oleh E. Hoare. Dengan menggunakan metode rekursi samapi habis. Prinsipnya membagi data menjadi dua bagian yang sama (kiri dan kanan). Dimana data tengah menjadi pivot (pusat operasi). Kumpulkan data dengan nilai lebih kecil dari pivot disebelah kiri pivot, dan di kanan untuk yang lebih besar. Dimungkinkan bagian kiri dan kanan pivot tidak sama besarnya. Untuk itu tiap bagin di bagi menjadi dua lagi dan mempuyi pivot yang baru. Contoh misal kita mempunyai data array integer.
procedure qsort(bawah, atas : integer)
var kiri, kanan, pivot : integer;
begin
pivot:=Data[(bawah+atas) div 2];
kiri:=bawah;
kanan:=atas;
while kiri<=kanan do
begin
while Data[kiri] < pivot do kiri:=kiri+1; { memisahkan ke kiri }
while Data[kanan]>pivot do kanan:=kanan-1;{Memisahkan ke kanan}
if kiri<=kanan then { chek perubahan }
begin
swap Data[kiri] with Data[kanan];
kiri:=kiri+1;
kanan:=kanan-1;
end;
end;
if kanan>bawah then qsort(bawah,kanan);{ urutkan bagian KIRI }
if atas>kiri then qsort(kiri ,atas);{ urutkan bagian KANAN}
end;
Pemangilan dalam program utama : qsort(1,NumberOfData);
Fungsi Matematik Standar dalam PASCAL
Beberapa fungsi matematik standar yang disediakan oleh PASCAL:
Nama Fungsi
|
Deskripsi
|
Tipe Argumen
|
Tipe Hasil Operasi
|
abs
|
absolute value
|
real/integer
|
real/integer
|
arctan
|
arctan (radian)
|
Real/integer
|
real
|
cos
|
cosine (radian)
|
real/integer
|
real
|
sin
|
sin (radian)
|
real/integer
|
real
|
exp
|
fungsi Perpangkatan e
|
real/integer
|
real
|
ln
|
ln
|
real/integer
|
real
|
round
|
Pembulatan terdekat
|
real
|
integer
|
sqr
|
kuadrat
|
real/integer
|
real/integer
|
sqrt
|
Akar kuadrat
|
real/integer
|
real
|
trunc
|
Pembulatan ke bawah
|
real/integer
|
integer
|
Contoh :
Abs(-11) (hasil: 11)
Round(10.6) (hasil: 11)
Trunc(10.6) (hasil: 10)
Sqrt(4) (hasil: 2)
Sqr(4) (hasil: 16)
Untuk fungsi trigonometri:
x = sin phi menjadi x:=sin (3.1416);
1. Statemen-statemen yang digunakan
untuk input/output.
# ReadKey [fungsi].
Untuk pembacaan sebuah
karakter dari keyboard. Tipe data yang dihasilkan adalah char.
Sintaks: ReadKey;
2. Statemen yang digunakan untuk
memanipulasi string.
# ConCat[fungsi].
Untuk menggabungkan 2
atau beberapa variabel string.
Sintaks: ConCat (s1
[,s2,...,sn]: String) : String;
contoh:
ConCat ('ABC','DEF') { ABCDEF }
# Copy [fungsi].
Mengambil satu atau beberapa karakter dari sebuah string.
Sintaks: Copy (S,Index,Count)
: String;
Keterangan :
S = sebuah string (string).
Index = posisi awal kita akan mengambil beberapa
karakter (integer)
Count = banyaknya karakter yang akan diambil
(integer).
# Length [fungsi].
Memberikan nilai panjang dari suatu string (jumlah karakter dalam string).
Sintaks: Length (S);
Keterangan : S = string
Length(S) menghasilkan nilai integer.
# Pos [fungsi].
Mencari posisi sebuah bagian string (substring) didalam sebuah string.
Sintaks: Pos (Substr,S); {menghasilkan nilai Byte}
Keterangan : Substr = substring yang akan dicari posisinya di dalam sebuah
string S.
Bila bernilai 0 berarti nilai string yang dicari
tidak ada.
# UpCase [fungsi].
Memberikan huruf kapital dari argumen.
Sintaks: UpCase (S);
Keterangan :
S = variabel bertipe karakter.
Contoh :
Program Man_String;
Uses Crt;
Var s : String;
1 : Integer;
h : String;
Const a='Dinda';
b='Bayi ';
c='Sehatku';
Begin
ClrScr;
s:= ConCat (a,b,c);
Writeln (s);
Insert (' & ',s,6);
Writeln(s);
Delete (s,7,7);
Writeln (s);
h:=Copy (s,1,5);
Writeln (h);
l:= Length(s);
Writeln ('Panjangnya
string S : ',l);
Writeln ('Posisi
"Sehat" pada nilai S : ',POS('Sehat',s));
END.
Hasilnya adalah :
DindaBayiSehatku
Dinda & Bayi
Sehatku
Dinda Sehatku
Dinda
Panjangnya string S : 16
Posisi "Sehat" pada nilai S : 7
3.
Statemen-statemen untuk perhitungan aritmatik.
# Abs [fungsi].
Memberikan nilai mutlak dari suatu argumen.
Sintaks: ABS(x);
# ArcTan[fungsi].
Memberikan nilai dari fungsi arctangent dari perhitungan goniometri.
Sintaks: ArcTan (x);
dimana x dapat bertipe real atau integer dan akan
menghasilkan nilai bertipe real.
# Cos [fungsi].
Memberikan nilai dari fungsi Cosinus.
Sintaks: Cos (x);
# Exp [fungsi].
Menghitung nilai pangkat dari bilangan e (bilangan alam), yaitu sebesar x.
Sintaks: Exp (x);
x dapat bertipe real atau integer dan akan
menghasilkan nilai bertipe real.
# Frac [fungsi].
Untuk mendapatkan nilai pecahan dari suatu bilangan.
Sintaks: Frac (x);
Tipe dari x sama seperti yang diatas.
# Int [fungsi].
Memberikan nilai integer (bilangan bulat) dari suatu variabel dengan
membuang bilangan di belakang koma.
Sintaks: Int (X);
# Ln [fungsi].
Digunakan untuk menghitung nilai logaritma alam (natural logarithm) dari
nilai x.
Sintaks: Ln (x);
# Sin [fungsi].
Memberikan nilai dari fungsi Sinus.
Sintaks: Sin (x);
# Sqr [fungsi].
Digunakan untuk menghitung nilai pangkat kuadrat dari suatu bilangan.
Sintaks: Sqr (x);
Tipe dari x bisa berupa real maupun integer. Dan hasilnya akan sama dengan
tipe dari x.
# Sqrt (fungsi).
Digunakan untuk menghitung nilai akar dari suatu bilangan.
Sintaks: Sqrt (x);
Contoh :
Program Aritmatik;
Uses Crt;
Var x : Real;
Begin
Clrscr;
Write('Masukkan nilai dari X = ');
Readln (x);
If x <0>
Writeln('Nilai X =
',x:5:2);
Writeln ('Nilai eksponentialnya = ',EXP(x):9:3);
Writeln ('Nilai logaritma alamnya = ',LN(x):9:3);
Writeln ('Nilai integernya = ',INT(x):5:2);
Writeln ('Nilai fraksionalnya = ',FRAC(x):5:2);
Writeln ('Nilai X dipangkatkan = ',SQRT(x):9:3);
Writeln ('Nilai X diakarkan = ',SQRT(x):9:3);
Write('Nilai X jika dimasukkan dalam ');
Writeln('fungsi Sin,Cos,Tangen: ');
Writeln('- Sinus = ',Sin(x):9:3);
Writeln('- Cosinus =
',Cos(x):9:3);
Writeln('- Tangen = ',ArcTan(x):9:3);
End.
Hasilnya :
masukkan nilai dari X = -2.5
Nilai X = 2.50
Nilai eksponensialnya = 12,182
Nilai logarima alamnya = 0,196
Nilai integernya = 2.00
Nilai fraksionalnya = 0.50
Nilai X dipangkatkan = 6.250
Nilai X diakarkan = 1.581
Nilai X jika dimasukkan dalam fungsi Sin,Cos,Tangen:
- Sinus = 0.598
- Cosinus = -0.801
- Tangen = 1.190
4.
Statemen-statemen untuk transfer nilai dari suatu variabel.
# Chr [fungsi].
Merubah nilai dari byte ke bentuk karakter yang sesuai dengan
kode ASCII.
Sintaks: Chr (x);
Keterangan : x bertipe
byte
contoh : Writeln (Chr
(61));
hasilnya
: a
# Ord [fungsi].
Merubah nilai suatu variabel dari bentuk karakter ke bentuk longint.
Sintaks: Ord (x);
Keteranagn : x bertipe char
contoh : Writeln(Ord
('B'));
hasilnya
: 42
# Round [fungsi].
Membulatkan data tipe
real ke data tipe longint.
Sintaks: Round (x);
Keterangan : Jika nilai pecahan <>
Jika nilai pecahan > 0,5 maka dibulatkan
keatas.
contoh : Writeln('10/3
dibulatkan = ',Round(10/3));
hasilnya
: 10/3 dibulatkan = 3
# TRUNC [fungsi].
Membulatkan kebawah
data tipe real ke data tipe longint.
Sintaks: Trunc (x);
contoh :
Writeln('20/3
dibulatkan kebawah = ',Trunc (20/3));
hasilnya
: 20/3 dibulatkan kebawah = 6
5.
Statemen-statemen untuk memanipulasi data.
# Pred [fungsi].
Memberikan nilai sebelum nilai argumen dalam urutannya dalam
ASCII.
Sintaks: Pred (x);
# Succ [fungsi].
Memberikan nilai sesudah nilai argumen dalam urutannya dalam ASCII.
Sintaks: Succ (x);
# Inc[fungsi].
Menambah (increments) nilai suatu variabel.
Sintaks: Inc (x,i); {i >= 1}
# Dec [fungsi].
Mengurangi (decrements) nilai suatu variabel.
Sintaks: DEC(x,i); {i >=1}
Contoh :
Progam Man_Data;
Uses Crt;
Type
hari = (hr0,hr1,hr2,hr3,hr4,hr5,hr6,hr7)
Var
urutanhr : hari;
Const
namahr : Array [hr1..hr7] of String [6]= ('Senin','Selasa','Rabu','Kamis',
'Jumat','Sabtu','Minggu');
Begin
Writeln('Daftar Nama Hari);
urutanhr := hr0;
While Urutanhr <>
Begin
urutanhr := Succ(urutanhr);
Write('hari ke ',Ord(Urutanhr):2,' adalah ');
Writeln(namahr[urutanhr]);
End;
End.
Hasilnya adalah :
Daftar Nama Hari
hari ke 1 adalah Senin
hari ke 2 adalah Selasa
hari ke 3 adalah Rabu
hari ke 4 adalah Kamis
hari ke 5 adalah Jumat
hari ke 6 adalah Sabtu
hari ke 7 adalah Minggu
Tidak ada komentar:
Posting Komentar