jam

Rabu, 22 Oktober 2008

Anggota Tim Penanggung Jawab



I Komang Widarta Kusuma

(0715323010)

Gede Nurjaya

(0715323011)

Kade Musgita Yasa

(0715323021)

Pendahuluan

Pascal dikembangkan dari bahasa ALGOL, yang merupaka bahasa pemrograman komputasi 
scientific. ALGOL memiliki beberapa kelemahan seperti pada tipe data pointer, karakter, dan 
sulitnya mengimplementasikan bahasa tersebut ke dalam compiler menyebabkan ALGOL tidak 
berkembang dan sedikit demi sedikit ditinggalkan. 

Pada akhirnya, tahun 1971, salah seorang pengembang ALGOL telah berhasil mengembangkan bahasa pemrograman baru yang diberinama PASCAL, yang mengadopsi nama ilmuwan Perancis pada abad ke 17 Blaise Pascal. Kelebihan dari bahasa PASCAL adalah merupakan bahasa pemrograman yang terstruktur,bahasa pemrograman tingkat tinggi (high level language), serta mudah bagi programmer untuk menentukan tipe data yang diinginkan. Di awal tahun 1980 an, PASCAL telah menjadi bahasa pemrograman standard di berbagaiuniversitas. Terdapat dua peristiwa yang menyebabkan PASCAL menjadi sangat populer padasaat itu yaitu digunakannya PASCAL sebagai bahasa untuk membuat aplikasi/software guna keperluan ujian di beberapa sekolah, serta dirilisnya Turbo Pascal Compiler oleh perusahaan Borland International untuk komputer IBM. Sampai saat ini, Turbo Pascal sudah mencapai rilis 7.0 bahkan sudah ada yang berjalan di platform Windows (Turbo Pascal for Windows). Terdapat pula varian dari Turbo Pascal yang lebih bersifat open source yaitu Free Pascal. Namun, pada saat ini. PASCAL sudah mulai banyak ditinggalkan. Kebanyakan para programmer saat ini lebih memilih bahasa C/C++ dan Java karena lebih mendukung untuk pemrograman berorientasi obyek. Meskipun demikian, bukan berarti PASCAL juga harus ditinggalkan pada saat ini. PASCAL masih layak dipelajari, khususnya bagi mereka yang baru belajar bahasa pemrograman karena perintah-perintahnya menggunakan bahasa tingkat tinggi (mirip bahasa manusia - Inggris) sehingga mudah dipahami. Selain itu, dengan belajar PASCAL akan diperoleh modal untuk dapatmenguasai pemrograman visual DELPHI. Karena pada prinsipnya, DELPHI merupakan PASCAL yang dikombinasikan dengan efek visual.

Konsep Dasar Pemrograman Pascal

1.1 Perkembangan Pascal  

  Pascal adalah bahasa pemrograman yang pertama kali di buat oleh Profesor Niklaus Wirth, seorang anggota International Federation of Information Processing (IFIP) pada tahun 1971. Dengan mengambil nama dari matematikawan Perancis, Blaise Pascal, yang pertama kali menciptakan mesin penghitung, Profesor Niklaus Wirth membuat bahasa Pascal ini sebagai alat bantu untuk mengajarkan konsep pemrograman komputer kepada mahasiswanya. Selain itu, Profesor Niklaus Wirth membuat Pascal juga untuk melengkapi kekurangan-kekurangan bahasa pemrograman yang ada pada saat itu.  
1.2 Struktur Program Pascal  
  Struktur dari suatu program pascal terdiri dari sebuah judul program dan suatu blok program atau badan program. Blok program dibagi lagi menjadi dua bagian, yaitu : bagian deklarasi dan bagian pernyataan. Secara ringkas, struktur suatu program pascal dapat terdiri dari :  
  1. Judul program  
  2. Blok program  
  a. Bagian deklarasi  
  - deklarasi label  
  - deklarasi konstanta  
  - deklarasi tipe  
  - deklarasi variable  
  - deklarasi prosedur  
  - deklarasi fungsi  
  b. Bagian pernyataan  
Program pascal yang paling sederhana adalah program yang hanya terdiri dari sebuah bagian pernyataan saja.  
  Begin  
  End.  
Bentuk umum dari bagian pernyataan adalah :  
  Begin  
  Statement;  

  End .  
   
Contoh :  
  Begin  
  Writeln ( ‘Saya pascal’ );  
  Writeln ( ‘--------------‘ )  
  End .  
Outputnya : Saya pascal  

---------------  
  Program pascal tidak mengenal aturan penulisan di kolom tertentu, jadi boleh ditulis mulai kolom berapapun. Penulisan statement-statement pada contoh program yang menjorok masuk beberapa kolom tidak mempunyai pengaruh diproses, hanya dimaksudkan supaya mempermudah pembacaan program, sehingga akan lebih terlihat bagian-bagiannya, dan baik untuk dokumentasi.  

Judul program sifatnya optional dan tidak signifikan didalam program. Jika ditulis dapat digunakan untuk memberi nama program dan daftar dari parameter tentang komunikasi program dengan lingkungannya yang sifatnya sebagai dokumentasi saja. Judul program bila ditulis harus terletak pada awal dari program dan diakhiri dengan titik koma.  
Contoh :  
Program contoh ;  
  Begin  
  Writeln ( ‘Gunadarma’ );  

  Writeln( ‘---------------‘ ); 

End .  
1.3 Deklarasi  
Bagian deklarasi digunakan bila didalam program menggunakan pengenal (identifier) yang dapat berupa label, konstanta, tipe, variable, prosedur dan fungsi.  
1.3.1 Deklarasi Konstanta  

Definisi konstanta diawali dengan kata cadangan Const diikuti oleh kumpulan identifier yang diberi suatu nilai konstanta. Data konstanta nilainya sudah ditentukan dan pasti, tidak dapat dirubah didalam program.  
Contoh :  
Program contoh_konstanta;  
  Const  
  Potongan = 0.2 ;  
  Gaji = 25000 ;  
  Namaperusahaan = ‘PT ABC’ ;  
Begin  
  Writeln ( ‘Potongan =’, Potongan ) ;  
  Writeln ( ‘Gaji =’, Gaji ) ;  
  Writeln ( ‘Nama =’, Namaperusahaan) ;  

End .  
1.3.2 Deklarasi Variabel  
Variabel adalah identifier yang berisi data yang dapat diubah-ubah nilainya didalam program. Menggunakan kata cadangan Var sebagai judul didalam bagian deklarasi variable dan diikuti oleh satu atau lebih identifier yang dipisahkan koma, diikuti dengan titik dua dan tipe dari datanya diakhiri dengan titik koma.  
Contoh :  
Var  
  Total, Gaji, Tunjangan : real ;  
  Jumlahanak : integer ;  
  Keterangan : string [25] ;  
Begin  
  Gaji : = 500000 ;  
  Jumlahanak : = 3 ;  
  Tunjangan : = 0.25 * Gaji + Jumlahanak * 30000 ;  
  Total : = Gaji + Tunjangan ;  
  Keterangan : = ‘Karyawan Teladan’ ;  
  Writeln ( ‘ Gaji bulanan = Rp. ‘ , Gaji ) ;  
  Writeln ( ‘ Tunjangan = Rp. ‘ , Tunjangan ) ;  
  Writeln ( ‘ Total gaji = Rp. ‘ , Total ) ;  
  Writeln ( ‘ Keterangan = Rp. ‘ , Keterangan ) ;  

End .  
1.3.3 Deklarasi Tipe  
Pascal menyediakan beberapa macam tipe data, yaitu :  
1. tipe data sederhana, terdiri dari :  
a. tipe data standar : integer, real, char, string, Boolean.  
Konsep dasar pemrograman pascal  
Algoritma & Pemrogram 2A  
b. Tipe data didefinisikan pemakai : enumerated atau scalar, subrange  
2. Tipe data terstruktur : array, record, file, set  
3. Tipe data penunjuk  
Contoh :  
Type  
  Pecahan = real ;  
  Bulat = integer ;  
  Huruf = string [25] ;  
Begin  
  ……..  
  ……..  
  ……..  

End .  
1.3.4 Deklarasi Label  
Jika program menggunakan statement Goto untuk meloncat ke suatu statement yang tertentu, maka dibutuhkan suatu label pada statement yang dituju dan label tersebut harus di deklarasikan terlebih dahulu pada bagian deklarasi. Menggunakan kata cadangan Label diikuti oleh kumpulan identifier label dengan dipisahkan oleh koma dan diakhiri dengan titik koma.  
Contoh :  
Label  
  100, selesai ;  
Begin  
  Writeln ( ‘Bahasa’ ) ;  
  Goto 100 ;  
  Writeln ( ‘Cobol’ ) ;  
  100 :  
  Writeln ( ‘Pascal’ ) ;  
  Goto selesai ;  
  Writeln ( ‘Fortran’ ) ;  
  Selesai :  

End . 

Output : Bahasa Pascal  
1.3.5 Deklarasi Prosedur  
Prosedur merupakan bagian yang terpisah dari program dan dapat diaktifkan dimanapun didalam program. Prosedur dibuat sendiri bilamana program akan dibagi-bagi menjadi beberapa blok-blok modul. Prosedur dibuat didalam program dengan cara mendeklarasikannya dibagian deklarasi prosedur. Menggunakan kata cadangan Procedure.  

Contoh :  
Procedure tambah ( x, y : integer ; var hasil : integer ) ;  
Begin  
  Hasil : = x + y ;  

End ;  

Output : 

{program utama}  
var  
  z : integer ;  
Begin  
  Tambah ( 2, 3, z ) ;  
  Writeln ( ‘ 2 + 3 = ‘, z );  

End . 

2 + 3 = 5  
1.3.6 Deklarasi Fungsi  
Fungsi juga merupakan bagian program yang terpisah mirip dengan prosedur, tetapi ada beberapa perbedaannya. Kata cadangan yang digunakan Function.  
Contoh :  
Function Tambah ( x, y : integer ) : integer ;  
Begin  
  Tambah : = x + y ;  
End ;  
{program utama}  
Begin  
Writeln ( ‘ 2 + 3 = ‘ , Tambah ( 2, 3)) ;  

End . 


1.4 Unit  
Suatu unit adalah kumpulan dari konstanta, tipe-tipe data, variable, prosedur dan fungsi-fungsi. Tiap-tiap unit tampak seperti suatu program Pascal yang terpisah. Unit standar sudah merupakan kode mesin (sudah dikompilasi), bukan kode sumber Pascal lagi dan sudah diletakkan di memori pada waktu menggunakan pascal. Untuk menggunakan suatu unit, harus diletakkan suatu anak kalimat Uses diawal blok program, diikuti oleh daftar nama unit yang digunakan.  
1.4.1 Unit System  
Sebenarnya adalah pustaka dari runtime Turbo Pascal yang mendukung semua proses yang dibutuhkan pada waktu runtime. Unit system berisi semua prosedur dan fungsi standar turbo pascal. Unit system ini akan secara otomatis digunakan didalam program, sehingga boleh tidak disebutkan didalam anak kalimat Uses.  

1.4.2 Unit Crt  
Digunakan untuk memanipulasi layer teks ( windowing, peletakkan cursor dilayar, color untuk teks, kode extanded keyboard dan lainnya). Unit standar crt hanya dapat digunakan oleh program yang digunakan dikomputer IBM PC, IBM AT, IBM PS/2 atau yang kompatibel dengannya.  
Contoh :  
Uses crt ;  
Begin  
  Clrscr ;  
  Writeln ( ‘Hallo’ ) ;  
  Writeln ( ‘-------‘ ) ;  

End . 

Prosedur standar yang menggunakan unit crt adalah :  
AssignCrt  
HighVideo  
Sound  
ClrEol  
InsLine  
TextBackground  
ClrScr  
LowVideo  
TextColor  
Delay  
NormVideo  
TextMode  
DelLine  
NoSound  
Window  
GotoXY  
Fungsi standar yang menggunakan unit Crt adalah :  
KeyPressed  
ReadKey  
WhereX  

WhereY  
1.4.3 Unit Printer  
Merupakan unit yang sangat kecil dirancang untuk penggunaan printer didalam program.  
Contoh :  
  Uses printer ;  
Begin  
  Writeln ( Lst, ‘Hallo’ ) ;  
  Writeln ( Lst, ‘-------‘ ) ;  

End .  
1.4.4 Unit Dos  
Digunakan bila akan menggunakan prosedur-prosedur dan fungsi-fungsi standar yang berhubungan dengan DOS call, semacam DetTime, SetTime, DiskSize, DiskFree dan lainnya.  
Contoh :  
Uses Dos ;  
Begin  
  Writeln ( DiskFree(0), ‘ byte sisa isi disk ‘ ) ;  

End .  
1.4.5 Unit Graph  
menyediakan suatu kumpulan rutin grafik yang canggih, sehingga dapat memanfaatkannya untuk keperluan-keperluan pembuatan grafik.  
contoh :  
Uses graph ;  
Var  
  DriveGrafik, ModeGrafik : integer ;  
  I, x, y : integer ;  
Begin  
  DriveGrafik : = detect ;  
  …….  
  …….  

End . 

1.5 Kelebiham pemrograman pascal 

 Kelebihan dari bahasa pemrograman Pascal adalah:  
Tipe Data Standar, tipe-tipe data standar yang telah tersedia pada kebanyakan bahasa pemrograman. Pascal memiliki tipe data standar: boolean, integer, real, char, string,  
User defined Data Types, programmer dapat membuat tipe data lain yang diturunkan dari tipe data standar.  
Strongly-typed, programmer harus menentukan tipe data dari suatu variabel, dan variabel tersebut tidak dapat dipergunakan untuk menyimpan tipe data selain dari format yang ditentukan.  
Terstruktur, memiliki sintaks yang memungkinkan penulisan program dipecah menjadi fungsi-fungsi kecil (procedure dan function) yang dapat dipergunakan berulang-ulang.  
Sederhana dan Ekspresif, memiliki struktur yang sederhana dan sangat mendekati bahasa manusia (bahasa Inggris) sehingga mudah dipelajari dan dipahami.  

Bahasa PASCAL juga merupakan bahasa yang digunakan sebagai standar bahasa pemrograman bagi tim nasional Olimpiade Komputer Indonesia (TOKI). Selain itu, Bahasa PASCAL masih digunakan dalam IOI (International Olympiad in Informatics).

Tipe-tipe Data dalam Pascal

Secara umum, tipe data dalam pemrograman Pascal adalah:

• Tipe data sederhana
• Tipe data standard (standard data type)
contoh dari tipe data standard terdiri dari Integer, Real, Boolean, Char, dan String

• Tipe data didefinisikan pemakai (user defined data type)
Contoh : subrange dan enumerasi
• Tipe data terstruktur
Contoh : Array, record, set, file
• Tipe data penunjuk
Contoh : Pointer

Tipe data berfungsi membatasi jangkauan data yang akan dilaksanakan.

                     TIPE DATA SEDERHANA
Tipe Data Standard
1. Integer

          Tipe integer adalah tipe data yang nilainya bulat. Ada 5 macam tpe integer, yaitu:



Contoh deklarasi:
    Var A, B, C : Integer;
            D, E, F : Longint;
Operator-operator yang berlaku pada tipe data integer, yaitu :
Operator arithmatik : +, - , *, /, div, mod
Operator logic : <, = , > , <= , >= , <>

2. Real
         Real merupakan tipe bilangan pecahan. Bilangan real bisa dinyatakan dalam bentuk

eksponensial. Ada 5 macam tipe real, yaitu:

Contoh deklarasi:

Var    A, B, C : Real;
          D, E, F : Double;

Operasi – operasi yang bisa dikerjakan oleh tipe data real adalah:
• Operasi biner, seperti penjumlahan (+), pengurangan (-), perkalian (*), dan
pembagian (/)
• Operasi uner. Contoh: -4.25, +1.25
– Boolean
Boolean adalah tipe data yang hanya mempunyai dua kemungkinan, yaitu true dan
false. Biasanya tipe data ini digunakan untuk perbandingan.

Var A, B, C : Boolean;
Operator NOT, OR, AND, dan XOR dapat dibentuk secara bersamaan menjadi
sebuah ungkapan Boolean yang rumit.
Misal:
Var A,B,C: Boolean;
Begin
      C := false; B := true;
     A := (Not(C) AND Not (B)) XOR (C);
     Write(A); readln;
End.

Menurut anda, berapakah nilai A?


3. Char
Char adalah semua tombol yang terdapat pada keyboard atau lebih lengkapnya semua karakter yang terdapat pada kode ASCII.
Catatan : Apabila char ingin dijadikan sebagai konstanta maka karakter yang dimasukkan harus diapit dengan tanda kutip satu. Dan apabila karakter itu berupa tanda kutip satu maka harus diapit dengan dua tanda kutip satu Beberapa fungsi untuk memanipulasi tipe daa char:
3.1 Ord(x) dengan x adalah data bertipe char. Fungsi ini digunakan untuk memperoleh nilai urutan dalam kode ASCII yang digunakan untuk melambangkan karakter tersebut. Contoh: Ord('C') adalah 67.
3.2 Char(x) dengan x adalah data bertipe byte. Fungsi ini adalah kebalikan dari fungsi Ord. Nilai yang diperoleh merupakan karakter ASCII yang dinyatakan dengan urutan ke x. Contoh: Char(67) adalah 'C'.
3.3 Pred(x) dengan x adalah data bertipe char. Fungsi ini digunakan untuk mengetahui karakter yang mendahului x. Contoh: Pred('h') adalah 'g'.
3.4 Succ(x) dengan x adalah data bertipe char. Fungsi ini digunakan untuk mengetahui karakter sesudah x. Contoh: Succ('h') adalah 'i'. Jika x tidak mempunyai penerus, maka nilai fungsi ini tidak terdefinisikan.
3.5 Upcase(x) dengan x adalah data bertipe char. Jika x merupakan huruf kecil maka akan dikembalikan huruf kapitalnya. Contoh: upcase('a') adalah 'A'.
4. String
String adalah data yang berisi sederet karakter yang terletak diantara tanda kutip satu. Jika karakter kutip merupakan bagian dari konstanta string, maka ditulis dengan menggunakan dua buah tanda kutip satu berurutan. Nilai data string akan
menempati memori sebesar maksimla jumlah karakter yang dapa ditampung ditambah denga 1 byte (index ke-0) untuk menyimpan panjang string yang sebenarnya. Jika panjang string tidak ditulis, maka panjang string dianggap 255 karakter. Panjang string yang diijinkan antara 1 sampai 255. Bentuk umum dari deklarasi tipe string adalah:
Var pengenal : string[panjang];

dimana
pengenal : nama variable

panjang : bilangan bulat yang menunjukkan banyaknya karakter (1 – 255). Untuk tipe data string, operator yang berlaku adalah operator penggabungan (+). Tipe data didefinisikan pemakai (user-defined data type)

5 . Subrange
Tipe data subrange adalah suatu range yang menunjukkan nilai terkecil dan nilai terbesar yang dapat dipergunakan. Deklarasi tipe data subrange mempunyai bentuk: 
Type pengenal = konstanta1 .. konstanta2;
dimana:
pengenal : nama tipe data yang dideklarasikan
konstanta1 : batas bawah nilai data
konstanta2 : batas atas nilai data
Kedua konstanta di dalam subrange harus bertipe ordinal yang sama, di mana nilai konstanta pertama lebih kecil atau sama dengan nilai konstanta kedua. Tipe data real tidak dapat digunakan sebagai nilai subrange, karena buka tipe ordinal. Contoh:
Type tanggal = 1 .. 31;
bulan = 1 .. 12;
7. Enumerated
Tipe data enumerated (skalar) menunjukkan kumpulan dari nilai yang urutannya
sudah pasti. Nilai dari tipe yang dideklarasikan ini akan diwakili dengan pengenal – pengenal (identifiers) yang akan menjadi nilai suatu konstanta. Contoh:
Type bahasa = (delphi, java, c, pascal, basic);
bulan = (maret, april, mei, juni, juli);
Tipe data bulan mempunya 5 elemen dari maret sampai juli. Dari urutannya, maret adalah identifier berupa konstanta bernilai 0 dan juli bernilai 4. Yang perlu diperhatikan dengan tipe data skalar ini adalah tipe data ini sudah berbeda dengan tipe standar yang ada dan pascal tidak mengijinkan operasi dengan tipe data yamg berbeda.

Derajat Operator
Anda sudah mengenal beberapa tipe data di dalam Pascal dan operatornya. Di dalam Pascal, operator – operator tersebut memiliki derajat atau tingakatan. Adapun kegunaan dari derajat ini adalah Pascal dapat menentukan operator mana yang akan di jalankan terlebih dahulu.
Misal: x := 4 + 5 * 3
Menurut anda, berapakah nilai dari x? 
Apakah 27 (hasil dari 9 * 3) atau 19 (hasil dari 4 +15)
Berikut ini urutan operator berdasarkan derajatnya:
@, not, *, /, div, mod, as, and, shl, shr, +, -, or, xor, :=, <>, <, >, <=, >=, in
Berdasarkan dari urutan operator di atas, maka nilai x pada x := 4 + 5 * 3 adalah 19,
karena operator * lebih dulu dikerjakan daripada operator +.
Akan tetapi, jika kita ingin agar operator + dikerjakan terlebih dahulu, kita bisa
meletakkan operasi penjumlahan tersebut di dalam kurung, musalnya: x := (4 + 5) * 3. Di
sini nilai x itu adalah 27, karena di dalam Pascal operasi yang di dalam kurung akan

dilakukan terlebih dahulu, tidak dipengaruhi oleh derajat operator.


                        INPUT OUTPUT DI DALAM PASCAL


Write dan Writeln
Perintah ini digunakan untuk mencetak kata-kata atau variable ke layer kompuer. Sebagai contoh untuk mencetak kata ‘Sedang Belajar Pascal’, perintah yang diberikan
adalah:
            Write(‘Sedang Belajar Pascal’);
atau
             Writeln(‘Sedang Belajar Pascal’);
Jika menggunakan write, setelah mencetak kata – kata atau variable, kursor akan diletakkan di samping hasil cetakan. Jka menggunakan perintah writeln, setelah
 mencetak kata – kata atau variable, kursor akan dipindahkan ke bawah satu baris dengan posisi horizontal pada awal baris. Untuk mencetak suatu variable, tidak perlu tanda petik satu. Contoh:

Var A : integer;
Begin
     A:= 9;
     Writeln(A);
End.
Dengan menggunakan write atau writeln, kita bisa menampilkan kata – kata dan variable
dengan tanda koma (,) sebagai pemisah antara variable dan kata - kata, Contoh:

Var A : integer;
Begin
           A:= 9;
           Writeln(‘Nilai A adalah ’, A);

End.


Terkadang kita menemukan prosedur write atau writeln yang ditulis seperti ini, writeln(‘Asyik’: 10) _ Jika ditulis seperti ini, maka akan menghasilkan space yang disediakan untuk menuliskan kata asyik di layar monitor adalah 10 karakter, mulai dari kiri ke kanan. Coba tuliskan program berikut ini:

begin
            write(‘Sehat’: 10); write(‘Senang’: 10);
             readln;
end.

Perhatikan apa yang terjadi pada penggalan program di atas! Selain itu, dengan menggunakan write atau writeln, kita dapat mengatur berapa banyak angka di belakang koma yang akan ditampilkan di layar monitor jika kita ingin menampikan bilangan real, caranya adalah dengan menuliskan seperti program di bawah ini
Begin
             Write(1/3: 5 : 2); write(2/3: 5: 2);
              Readln;
End.

Read dan Readln
Read atau readln digunakan untuk menerima masukan dari user untuk disimpan ke dalam suatu variable. Contoh:


Var A: Integer;
Begin
        Write(‘Masukkan nilai A: ’);readln(A);
        Writeln(‘Nilai yang anda masukkan adalah: ’, A);

End.


Catatan:
Terkadang kita menggunakan fungsi readln pada satu baris sebelum kata end.. Hal ini dimaksudkan agar suatu program tidak akan langsung terminate (berhenti) tanpa menunggu suatu masukan dari user. Adapun masukan tersebut berupa penekanan tombol enter pada keyboard.

Komentar
Komentar adalah bagian dari program yang tidak akan diproses oleh compiler (Free Pascal). Komentar hanya digunakan untuk dokumentasi saja. Cara pemberian komentar adalah dengan menambahkan // untuk 1 baris atau {…} untuk lebih dari 1 baris. Contoh pemberian komentar:

Program Komentar;

Begin
  //Ini Adalah Komentar
(Pernyataan – pernyataan ini
Tidak kan Diproses}
End.

Unit
Di dalam Pascal, ada bagian yang disebut sebagai unit. Unit ini menyimpan fungsi dan prosedur standard yang sudah didefinisikan oleh pembuat compiler. Beberapa unit standard yang ada dalam Pascal adalah Crt, System, Graph, Dos, Printer, dan Overlay. Cara penggunaan unit adalah dengan menambahkan statemen:

Uses nama_unit;
pada bagian Deklarasi.
Misal:
Uses Crt;
Beberapa fungsi dan prosedur yang ada dalam unit Crt:
Clrscr
Clrscr adalah suatu prosedur untuk membersihkan layer. Contoh:
Uses crt;
Begin
Writeln(‘Layar Sudah Bersih’);
Readln;
End.

Readkey
Readkey adalah fungsi masukan yang hanya akan mengambil satu karakter masukan. Jenis variable yang dapat diinput oleh readkey pun hanya jenis variable karakter.
Contoh:
Uses crt;
Var A : Char;
 Begin
         Write(‘Tekan karakter apa saja di dalam keyboard’);
         A := Readkey;
        Writeln(‘Karakter yang barusan anda tekan adalah: ’, A);
        Readln;

End.


TextBackground
TextBackground merupakan prosedur untuk mengganti warna background tulitan yang

ditampilhan di layer dengan warna yang kita inginkan. Perintah yang digunakan adalah: Textbackground(warna); Warna merupakan variable yang bias diganti dengan nama warna atau nilai warna tersebut:


 

Contoh:
Uses Crt;
Begin
        Textbackground(Red);
         Writeln(‘Laboratorium Komputasi FMIPA UGM’);
         Readln;

End.


Textcolor
Textcolor merupakan prosedur yang digunakan untuk mewarnai tulisan. Perintahnya
adalah:
Textcolor(warna);
Cara pengisian warna sama dengan Textbackground.

Contoh:


Uses crt;
Begin
       Textbackground(Red);
       Textcolor(Blue);
       Writeln(‘Laboratorium Komputasi FMIPA UGM’);
        Readln;

End.


Beberapa fungsi dan prosedur untuk operasi Aritmatika:
Sqr(Value) _ fungsi ini digunakan untuk menghasilkan nilai perpangkatan
Sqrt(Value) _ fungsi ini digunakan untuk menghasilkan nilai akar pangkat dua
Abs(Value) _ untuk menghasilkan nilai mutlak
Ln(Value) _ untuk mencari nilai logaritma natural
Exp(Value) _ untuk mencari nilai eksponennya
Trunc(Value) _ untuk memotong nilai real ke suatu nilai integer
Round(Value) _ untuk membulatkan nilai real ke nilai integer yang terdekat
STRUKTUR PERCABANGAN
Struktur percabangan atau sering disebut dengan struktur kontrol ini memungkinkan
programmer untuk membuat program yang dapat memilih satu langkah di antara

sejumlah langkah untuk dikerjakan.


Dalam Pascal disediakan 2 buah struktur kontrol seleksi, yaitu:
a. Struktur IF……THEN…..
Merupakan struktur kontrol di mana suatu aksi dilaksanakan berdasarkan kondisi
logikanya (benar atau salah). Struktur if .. then … sendiri memiliki 4 jenis, yaitu:
• Bentuk 1
if (kondisi) then aksi;

{Jika kondisi benar maka aksi akan dilaksanakan dan sebaliknya }


• Bentuk 2
if (kondisi) then aksi1 else aksi2 ;
{Jika kodisi benar maka aksi1 diaksanakan, jika kondisi salah maka aksi2

akan dilaksanakan}


• Bentuk 3
if (kondisi1) then aksi1 else
if (kondisi2) then aksi2 else
……………………..
if (kondisi-n) then aksi-n ;
{Jika kondisi1 benar maka aksi1 dilaksanakan tanpa membaca kondisi2 dan
seterusnya. Jika kondisi1 salah maka aksi2 dilaksanakan tanpa membaca

aksi3 dan selanjutnya. Demikian seterusnya}


• Bentuk 4
if (kondisi1) then aksi1 ;
if (kondisi2) then aksi2 ;
……………………….
if (kondisi-n) then aksi-n ;
{Masing-masing kondisi akan dibaca dan aksi akan tetap dilaksanakan. Jadi

masing-masing struktur terpisah satu dengan yang lain}


Contoh program 1:
Program menghitung akar kwadrat
uses crt;
var A,B,C:integer;
         x1,x2,D:real;
begin
     clrscr;
         write('Baca koofisien:');readln(A,B,C);writeln;
         writeln(A,'x*x + (',B,') x +',C);
                if A=0 then writeln('Bukan persamaan kwadrat') else
                       begin
                            D:=(B*B) - (4*A*C);
                            writeln('Determinannya :',D:2:2);readln;
                                 if D>0 then
                                      begin
                                          writeln('Persamaan kwadrat mempunyai 2 akar yang berbeda');
                                          x1:= (-B + sqrt(D))/(2*A);
                                          x2:= (-B - sqrt(D))/(2*A);
                                          writeln('Akar-akarnya adalah:',x1:2:2,'dan',x2:2:2);

                                       end

                                        else

                                 if D=0 then
                                       begin
                                             writeln('Persamaan kwadrat mempunyai akar yang sama'
                                             x1:= -B/(2*A);
                                             x2:= -B/(2*A);
                                             writeln('Akar-akanya adalah:',x1:2:2);

                                        end

                                          else

                        writeln('Tidak memiliki akar riil');
               end;
    readln;

end.


Contoh Program 2:
Program Konversi nilai
Uses Crt;
var Nilai : Byte;
begin
   clrscr;
        write('Baca nilai :');readln(Nilai);

              if nilai>=80 then

                 write('Nilai = A')

             else

              if nilai>=65 then

                   write('Nilai = B')

                else

               if nilai>=41 then

                     write('Nilai = C')

                 else

               if nilai>=26 then

                      write('Nilai = D')

                   else

                        write('Nilai = E');
     readln;

end.


Catatan:
Jika anda menggunakan else, perlu diinga bahwa satu baris sebelum else
tidak diperkenankan mengandung tanda ;
b. Struktur CASE…OF…
Merupakan peluasan dari struktur IF. Karena kalau dalam struktur IF hanya
disediakan dua pilihan (berdasarkan kondisi logikanya) maka dalam struktur
Case ..of dimungkinkan untuk memilih satu pilihan di antara banyak pilihan yang
ada. Bentuk umumnya :
Case var_pilih of
Pilih1 : aksi1 ;
Pilih2 : aksi2 ;
……………. ;
pilih-n : aksi-n ;
end;
atau
Case var_pilih of
pilih1 : aksi1 ;
pilih2 : aksi2 ;
……………. ;
pilih-n : aksi n;
else aksi-n+1
end;
Catatan :
Ekspresi yang digunakan dalam statemen Case adalah yang mempunyai tipe
ordinal yaitu dengan batas antara (-32768 s/d 32767). Sehingga tipe lain seperti

integer yang bertipe longint, tipe string atau real tidak boleh digunakan.


Contoh program 3:
Program Konversi nilai 2
Uses Crt;
Var Nilai : integer;
 begin
   Clrscr;
          write('Baca nilai =');readln(Nilai);
              Case Nilai of
                   0..25 : writeln('Nilainya = E');
                   26..39 : writeln('Nilainya = D');
                   40..64 : writeln('Nilainya = C');
                    65..79 : writeln('Nilainya = B');
                    80..100: writeln('Nilainya = A');
               else
                      writeln('Tidak ada nilai yang dimaksud');

               end;

             readln;

 end.


Catatan : Program ini akan memberikan nilai yang sama persis dengan yang menggunakan struktur IF.

Percabangan

Salah satu dari tiga konstruksi fundamental adalah percabangan/branching. Dalam pascal, percabagan menggunakan syntax if then else dan case of.

Syntax:

IF kondisi THEN
BEGIN
  ...
END;

Dengan ELSE:

IF kondisi [and] kondisi [or] kondisi THEN
BEGIN
  ...
END {memang tanpa titik koma di sini; sebelum ELSE tidak perlu titik koma!!!}
ELSE
BEGIN
  ...
END;

Apabila kondisi terpenuhi, maka program akan menjalankan b\perintah yang ada setelah THEN. Tapi jika kondisi tidaki terpenuhi, maka program akan menjalankan program setelah ELSE.

Contoh penggunaan:

Var i: integer;
Begin
  Write('Masukkan bilangan antara 1-100: '); readln(i);
  If i<=50 then
  Write('bilangan kecil')
  Else
  Write('bilangan besar');
End.

Penggunaan CASE … OF:
Penggunaan Case OF ini lkebih berguna jika kondisi yang dibandingkan berupa range. Lihat contoh berikut:

CASE nilai OF
  80..100 : grade:='A';
  70..79 : grade:='B';
  55..69 : grade:='C';
  45-54 : grade:='D';
  ELSE grade:='E';
END;

perulangan (looping)

Selain percabangan, konstruksi fundamental pemrograman yang lainnya adalah looping atau perulangan. DI Pascal ada 3 macam looping. Kita akan pelajari satu per satu:

1. For … to … do

Syntax:

FOR variable := nilai_awal TO nilai_akhir DO

BEGIN

  …apa_yang_diulang….

END;
  

Contoh penggunaan:

FOR i:=1 TO 5 DO

BEGIN

  Writeln(i);
END;
  

Program di atas akan menuliskan angka 1 sampai 5 ke bawah di layar. 

Jika ingin melakukan perhitungan mundur dari 5 ke 1, gunakan perintah DOWNTO sebagai pengganti TO (FOR i:=5 DOWNTO 1 DO). 


BONUS!!! Untuk variabel yang bertipe char, bisa juga menggunakan FOR dengan cara berikut:

FOR c:='A' TO 'Z' DO write(c,' ');

Atau boleh juga menulisnya dengan

FOR c:='Z' DOWNTO 'a' DO write(c,' ');

Atau untuk tipe boolean, bisa juga seperti ini:

FOR b:=false TO true DO writeln(b);
  

Bagaimana? Keren kan?
  

2. While … do

Syntax:

WHILE kondisi DO

BEGIN

  …apa_yang_dilakukan…

END;
  

Bedanya dengan FOR ... DO, adalah pada WHILE ... DO, sebelum memulai masuk ke blok begin end, ada kondisi yang harus dicek. Jika terpenuhi baru masuk ke blok BEGIN END dan terus-menerus diulang hingga kondisi tidak tercapai. Jadi bisa saja yang di dalam blok BEGIN END tidak dijalankan sama sekali.

Contoh penggunaan:


i:=1;

WHILE i<6>5;
  

Nah, itu semua adalah dasar dari pemrograman Pascal. Untuk lebih lanjut akan dibahas pada waktu berikutnya (semoga saya sempat membuat tutorial berikutnya). Berikut ini saya berikan bonus program BINTANG BERGERAK MEMANTUL-MANTUL DI LAYAR.

 

 

PROGRAM BintangMantulMantulSampaiDitekanEscape;
USES crt;
CONST
  lebar=80;
  tinggi=25;
  xawal=1;
  yawal=1;
VAR
  x,y : byte;
  dx,dy : shortint;
  c : char;
BEGIN
  {inisialisasi awal}
  x:=xawal;
  y:=yawal;
  dx:=1;
  dy:=1;
  c:=#0;
  REPEAT
  clrscr; {bersihkan layar}
  gotoxy(x,y);
  write('*'); {mencetak bintang pada posisi X,Y}
  x:=x+dx; {ubah koordinat x}
  y:=y+dy; {ubah koordinat y}
  {cek, jika sudah sampai di batas layar,
  maka ubah dx & dy untukk ganti arah}
  IF (X>=lebar) OR (X<=1) THEN dx:=-dx;   IF (Y>=tinggi) OR (Y<=1) THEN dy:=-dy;   {jika ada penekanan tombol, maka tombol tersebut dideteksi}   IF keypressed THEN c:=readkey;   delay(100); {menunda selama 100ms}   UNTIL c=#27;

END.

LOOP FOR
// file: contohfor.pas
program contohfor;
uses crt;
var
i,j :integer;
fac :integer;
begin
clrscr; fac:=1;
write('Masukkan bil yang akan dicari nilaifaKtorialnya: ');
readln(i);
for j:=i downto 1 do
fac:=fac*j;
writeln('Nilai ',i,' faktorial= ', fac);
readln;
end.
LOOP WHILE
// file: contohwhile.pas
program contohwhile;
uses crt;
var
i,j :integer;
fac :integer;
begin
clrscr; fac:=1;
write('Masukkan bil yang akan dicari nilai faktorialnya: ');
readln(i);
j:=i; // initial value
(* Nilai kondisi pada while harus true untuk bisa mengulang
statement dibawahnya *)
while (j>=1) do
begin
fac:=fac*j;
j:=j-1;
end;
writeln('Nilai ',i,' faktorial= ', fac);
readln;
end.
// file: whileascontrol.pas
program whileascontrol;
uses crt;
var
i,j :integer;
fac :integer;
ans :char;
begin
ans:='Y';
while ((ans='Y') or (ans='y')) do
begin
clrscr;
fac:=1;
write('Masukkan bil. faktorialnya: ');
readln(i);
j:=i;
while (j>=1) do
begin
fac:=fac*j;
PASCAL – Loop 9
j:=j-1;
end;
writeln('Nilai ',i,' faktorial= ', fac);
writeln();
writeln();
write('Ulangi Program ini (Y/T)?');
readln(ans);
end;
end.
LOOP REPEAT
// file: contohrepeat.pas
program contohrepeat;
uses crt;
var
i,j :integer;
fac :integer;
begin
fac:=1;
write('Masukkan bil yang akan dicari nilai factorialnya: ');
readln(i);
j:=i; // initial value
repeat
fac:=fac*j;
j:=j-1;
until (j<=1); (* Nilai kondisi setelah until harus true agar looping berhenti *) writeln('Nilai ',i,' faktorial= ', fac); readln; end. // file: repeatascontrol.pas program repeatascontrol; uses crt; var i,j :integer; fac :integer; begin clrscr; fac:=1; //Masukkan harus lebih dari 0 repeat clrscr; write('Masukkan bil. faktorialnya: '); readln(i); until (i>0);
j:=i;
repeat
fac:=fac*j;
j:=j-1;
until (j<=1); writeln('Nilai ',i,' faktorial= ', fac); readln; end. Ubah file whileascontrol.pas dalam bentuk perulangan repeat..until!

Procedure dan Function

Procedure dan Function adalah suatu program terpisah dalam blok sendiri yang berfungsi sebagai sub-program (modul program) yang merupakan sebuah program kecil untuk memproses sebagian dari pekerjaan program utama.  
􀁮 PROCEDURE  
Prosedur diawali dengan kata cadangan Procedure di dalam bagian deklarasi prosedur. Prosedur dipanggil dan digunakan di dalam blok program yang lainnya dengan menyebutkan judul prosedurnya.  
Prosedur banyak digunakan pada program yang terstruktur, karena :  
1. Merupakan penerapan konsep program modular, yaitu memecah-mecah program yang rumit menjadi program-program bagian yang lebih sederhana dalam bentuk prosedur-prosedur.  
2. Untuk hal-hal yang sering dilakukan berulang-ulang, cukup dituliskan sekali saja dalam prosedur dan dapat dipanggil atau dipergunakan sewaktu-waktu bila diperlukan.  

Sebagaimana halnya sebuah program, suatu procedure juga memiliki header dan block. Perbedaan bentuknya dengan program hanyalah pada bagian header-nya saja.  

Bentuk Umum header suatu procedure adalah : 

PROCEDURE nama; Atau 

PROCEDURE nama (formal parameter : jenis);  
Jika kita menggunakan procedure dalam suatu program, maka procedure tersebut harus dituliskan pada bagian deklarasi.  
Contoh : Misal akan dibuat suatu procedure untuk menentukan bilangan bulat terbesar diantara tiga bilangan bulat, maka procedure tersebut adalah sebagai berikut :  
PROCEDURE maksimum;  
VAR max : integer;  
BEGIN  
  IF a > b THEN max := a ELSE max := b;  
  IF c > max THEN max := c;  
WRITELN(max);  

END.

  
Selanjutnya, di dalam suatu program, procedure ini dapat digunakan dengan bentuk penulisan sebagai berikut :  
PROGRAM contoh_1; HEADER program utama  
VAR a,b,c : integer;  
 PROCEDURE maksimum;  
  VAR max : integer;  
BEGIN  
  IF a>b THEN max := a ELSE max := b; deklarasi program  
  IF c>max THEN max := c; utama  
  WRITELN(max);  
END;  
BEGIN  
  READLN(a,b,c);  
  Maksimum statement program utama  

END.

  
Contoh 2 :  
PROGRAM CONTOH_2;  
VAR p,l,t,vol,panj : real;  
PROCEDURE kotak;  
VAR v,pl : real;  
BEGIN  
  v := p * l * t ;  
  pl := p + 2.0 * t;  
  writeln(v,pl);  
END;  
BEGIN  
  writeln(‘panjang’ : 10,’lebar’ : 10,’tinggi’ : 10);  
  readln(p,l,t);  
  kotak;  

END.

  
JANGKAUAN IDENTIFIER  
Identifier yang dideklarasikan dalam suatu blok program hanya berlaku pada blok dimana identifier tersebut didefinisikan.  
Contoh :  
1. PROGRAM p;  
VAR x : real;  
PROCEDURE pl;  
VAR y : integer;  
begin  
………………..; daerah berlakunya y daerah  
………………..; berlakunya x  
end;  
begin  
………………..;  
………………..;  
end.  
y → variabel global  
2. Program P ;  
Var x,y : real; y (real) berlaku disemua blok …………… program P, kecuali di P1  
…………… x (real) berlaku disemua  
blok P, kecuali di P2  
Procedure Pl ;  
Var y : integer; hanya berlaku di P1 saja (lokal)  
……………..  
Begin  
………  
………  
End;  
Procedure P2;  
Var x : char; hanya berlaku di P2 saja (lokal)  
……………  
Begin  
………..  
………..  
End;  
Begin  
………….  
x := ……. x dan y yang dimaksud adalah x dan y real  
y := ……. (variabel global)  
…………  
End.  
Halaman : 3Pemrograman PASCAL : Procedure & Function  
PROCEDURE DENGAN PARAMETER  
Nilai di dalam suatu modul program Pascal sifatnya adalah lokal, artinya hanya dapat digunakan pada modul atau unit program yang bersangkutan saja, tidak dapat digunakan pada modul atau unit program yang lainnya.  
Contoh :  
Prosedur Tanya_hitung;  
Var X,Y :real;  
Begin  
  Write (‘Nilai X ?’);  
  Readln(X);  
  Y:=X*X;  
  Writeln(‘Nilai Y = ‘,Y:6:2);  
End;  
Begin  
  Tanya_Hitung;  

End.

  
Hasilnya :  
Nilai X ? 5  
Nilai Y = 25.00  
Keterangan :  

Variabel X dan Y sifatnya adalah lokal untuk prosedur Tanya_hitung, artinya hanya dapat digunakan pada modul itu saja, Pada modul yang lain tidak dapat digunakan, contoh : 


Prosedur 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.

  
Hasilnya :  
Error 31: Unknown identifier  

Supaya nilai variabel dapat digunakan di modul lainnya, maka dapat dilakukan dengan cara :  
1. Dibuat bersifat global  
Harus dideklarasikan di atas modul yang menggunakannya.  
Procedure kesatu;  
Begin  
…….  
……..  
End; (*akhir dari procedure kesatu……*)  
Var  
A,B : word;  
Procedure kedua;  
Begin  
……..  
……..  
End; (*akhir dari procedure kedua*)  
Procedure ketiga;  
Begin  
……..  
……..  
End; (*akhir dari procedure ketiga*)  
Begin  
……..  
……..  
End. (*akhir dari modul utama*)  
Pada contoh diatas, variabel A dab B bersifat global untuk prosedur kedua, ketiga dan utama, tetapi tidak bersifat global untuk prosedur kesatu, sehingga prosedur kesatu tidak dapat menggunakan variabel-variabel tersebut.  
Halaman : 5Pemrograman PASCAL : Procedure & Function  
Var  
A,B : real;  
Procedure kesatu;  
Begin  
…….  
……..  
End; (*akhir dari procedure kesatu……*)  
Procedure kedua;  
Begin  
……..  
……..  
End; (*akhir dari procedure kedua*)  
Procedure ketiga;  
Begin  
……..  
……..  
End; (*akhir dari procedure ketiga*)  
Begin  
……..  
……..  
End. (*akhir dari modul utama*)  
Pada contoh ini, variabel A dan B bersifat global untuk semua modul.  
2. Dikirimkan sebagai parameter ke modul yang membutuhkannya.  
Parameter yang dikirim dari modul utama ke modul prosedur disebut actual parameter, dan parameter yang ada dan dituliskan pada judul prosedur disebut formal parameter.  
2.1 Pengiriman parameter secara nilai  
Parameter yang dikirimkan secara nilai, maka parameter formal yang ada di prosedur akan berisi nilai yang dikirimkan yang kemudian bersifat lokal di prosedur.  
Perhatikan procedure berikut :  
Procedure konversi;  
begin  
f := (5/9) * c + 32; f dan c variabel global, c sebagai input dan  
Halaman : 6Pemrograman PASCAL : Procedure & Function  
writeln(c,f); f sebagai output.  
end;  
Procedure di atas dapat dipanggil dengan variabel yang berbeda, tetapi penulisannya harus diubah dengan menggunakan parameter sbb:  
Procedure konversi (var f : real; c : real);  
Begin  
F := (5/9) * c + 32; disebut formal parameter  
Writeln(c,f);  
End;  
Selanjutnya procedure di atas dapat dipanggil dengan parameter lain, misalnya :  
konversi (x,y) ;  
actual parameter  
x dan y disebut sebagai actual parameter.  
Pada eksekusinya x akan menggantikan c dan y akan menggantikan f.  
x dan y ini dapat berupa :  
- konstanta  
- variabel  
- procedure, atau  
- fungsi  

Contoh :  
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.

  
Hasilnya :  
Nilai X ? 2  
Nilai Y ? 3  
Nilai C = 5  

2.2 Pengiriman parameter secara acuan  
Bila pengiriman parameter secara acuan (by reference), maka perubahan-perubahan yang terjadi pada nilai parameter formal di prosedur akan mempengaruhi nilai actual parameter .  
Procedure hitung(Var A,B,C : integer);  
Menunjukkan pengiriman parameter secara acuan.  
Contoh :  
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.

  
Hasilnya :  
X = 2 Y = 3 Z = 5  
Acuan Forward  
Digunakan untuk mendeklarasikan dimuka judul prosedur terpisah dari bloknya.  
Contoh :  

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.

  
Hasilnya :  
prosedur pro1  
prosedur pro2  
Prosedur Standar  
Prosedur yang disediakan oleh Turbo Pascal :  
1. Prosedur standar EXIT  
Digunakan untuk keluar dari suatu blok.  
2. Prosedur standar HALT  
Digunakan untuk menghentikan proses program baik di program bagian maupun di program utama.  
3. Prosedur standar MOVE  
Bentuk umum : MOVE (Var source,dest; count : word);  
Digunakan untuk menyalin suatu blok sebanyak count byte memori dari blok dimulai byte pertama source dan disalinkan ke byte pertama dest.  
4. Prosedur standar FILLCHAR  
Digunakan untuk mengisi sejumlah byte nilai ke dalam suatu variabel, sebagai berikut  
FillChar(x;count :word;ch);  
X adalah variabel yang dapat bertipe apapun yang akan diisi dengan nilai tipe ordinal Ch sebanyak count byte.  

􀁯 FUNCTION  
Blok fungsi hampir sama dengan blok prosedur, hanya fungsi harus dideklarasikan dengan tipenya atau jenis hasilnya. Tipe deklarasi ini menunjukkan tipe hasil dari fungsi.  
Pada bahasa Pascal dikenal beberapa fungsi, misalkan : abs, pred, sqrt, sqr, succ dan sebagainya.  
Fungsi-fungsi tersebut biasanya dikenal dengan Built in Function. Sedangkan function yang akan bicarakan disini adalah fungsi yang kita buat sendiri.  
Berbeda dengan procedure, function merupakan modul program yang menghasilkan suatu kuantitas.  
Hal ini dapat dilihat dari bentuk header-nya yang menyebutkan jenis data dari kuantitas yang dihasilkan.  
Secara umum bentuk header suatu function adalah :  
FUNCTION nama : jenis hasil;  
Atau FUNCTION nama (formal parameter : jenis ) : jenis_hasil;  
Contoh :  
1. Akan dibuat suatu fungsi dengan nama MAX yang dapat menentukan integer terbesar di antara dua integer.  
Function MAX (x,y : integer) : integer;  
Begin  
If x < ab =" POWER" ba =" POWER" s =" POWER" 3 =" 5" faktorial =" ‘,faktorial(N):9:0);" 1   =" 4" 1   =" 24">1  
Function fibonacci ( n : integer ) : integer;  
Begin  
If n = 0 then fibonacci := 0  
Else  
If n := 1 then fibonacci := 1  
Else fibonacci := fibonacci (n-1) + fibonacci (n-2);  
End;  
3. Procedure reverse ( num : integer );  
Begin  
If num < 10 then write(num)  
Else begin  
Write(num mod 10);  
Reverse(num div 10);  
End;  
End;  

Fungsi Standar  
1. Fungsi standar arutmatika  
• Fungsi standar ABS  
Bentuk umum : ABS(x);  
Digunakan untuk memutlakkan suatu nilai yang ditunjukkan oleh argumen x.  
Contoh :  
Begin  
X:=-2.3;  
Write(‘Nilai X = ‘,X,’ Nilai mutlaknya = ‘,Abs(X):3:1);  
End.  
• Fungsi standar EXP  
Bentuk Umum : EXP(x:):real;  
Digunakan untuk menghitung nilai pangkat dari bilangan e yaitu sebesar ex. Hasilnya berupa nilai real.  


• Fungsi standar LN  
Bentuk umum : LN(x):real;  
Digunakan untuk menghitung nilai logaritma alam (natural logarithm) dari nilai x. Hasilnya berupa nilai real.  

• Fungsi standar INT  
Bentuk umum : INT(x:real):real;  
Digunakan untuk menghasilkan nilai integer dari x. hasil dari fungsi adalah tipe real dengan nilai yang berupa pembulatan ke bawah (nilai pecahan dibuang) dari nilai x.  
Contoh :  
Begin  
X:=9.99;  
Write(‘Nilai yang akan dibulatkan = ‘,X);  
Writeln(‘Nilai pembulatannya = ‘,Int(X):3:2);  
End.  

Hasil :  
Nilai yang akan dibulatkan = 9.99  
Nilai pembulatannya = 9.00  
• Fungsi standar FRAC  
Bentuk umum : FRAC(x:):real;  
Digunakan untuk mendapatkan nilai pecahan dari argumen x. Argumen x dapat bernilai real maupun integer dan hasil dari fungsi adalah real.  
Contoh :  
Begin  
X:=9.99;  
Write(‘Nilai X = ‘,X,’ Nilai pecahannya = ‘,Frac(X):4:3);  
End.  
Hasilnya : Nilai X = 9.99 Nilai pecahannya = 0.990  

• Fungsi standar SQR  
Bentuk umum : SQR(x);  
Digunakan untuk menghitung nilai pangkat kuadrat dari argumen x.  
Contoh :  
Begin  
X :=2;  
Write(‘Nilai X = ‘,X,’ Nilai kuadratnya = ‘,sqr(x));  
End.  
Hasilnya : Nilai X = 2 Nilai kuadratnya = 4  

• Fungsi standar SQRT  
Bentuk umum : SQRT(x) : real;  
Digunakan untuk menghitung nilai akar dari argumen x, hasilnya berupa real.  


• Fungsi standar PI, SIN, COS, ARCTAN  

1. Fungsi Standar Transfer  
Digunakan untuk merubah suatu nilai ke bentuk nilai lain.  
• Fungsi standar CHR  
Bentuk umum : CHR(x:byte):char;  
Digunakan untuk merubah nilai dari byte x ke bentuk karakter yang sesuai dengan kode ASCII.  
Contoh :  
X := 66;  
Write(‘Nilai X = ‘,x,’ Nilai karakternya = ‘,CHR(X));  
Hasilnya : Nilai X = 66 Nilai karakternya = B  

• Fungsi standar ORD  
Bentuk umum : ORD(x):longint;  
Digunakan untuk merubah nilai x ke bentuk nilai longint yang sesuai dengan kode ASCII, merupakan kebalikan dari fungsi CHR.  

• Fungsi standar ROUND  
Bentuk umum : ROUND(x:real):longint;  
Digunakan untuk membulatkan nilai dari real x ke nilai longint yang terdekat. Bila nilai pecahan sama dengan atau lebih besar dari 0.5 akan dibulatkan ke atas, sedang kalau lebih kecil dari 0.5 akan dibulatkan ke bawah.  
Contoh :  
Write(’10 dibagi 3 hasil pembulatan terdekat ‘,Round(10/3));  
Writeln(’20 dibagi 3 hasil pembulatan terdekat adalah ‘,Round(20/3);  
Hasilnya :  
10 dibagi 3 hasil pembulatan terdekat adalah 3  
20 dibagi 3 hasil pembulatan terdekat adalah 7  

• Fungsi standar TRUNC  
Bentuk umum : TRUNC(x:real):longint;  
Digunakan untuk membulatkan nilai dari real x ke nilai longint terkecil. Atau dengan kata lain membulatkan ke bawah.  
Contoh :  
Write(’10 dibagi 3 hasil pembulatan terdekat ‘,Trunc(10/3));  
Writeln(’20 dibagi 3 hasil pembulatan terdekat adalah ‘,Trunc(20/3);  
Hasilnya :  
10 dibagi 3 hasil pembulatan terdekat adalah 3  
20 dibagi 3 hasil pembulatan terdekat adalah 6  


1. Fungsi Standar Lainnya  
Fungsi standar yang tidak termasuk dalam kelompok pembagian di atas :  
• Fungsi standar Hi, Lo, Swap  
• Fungsi standar Random  
Bentuk umum : Random [(range :word)];  
Digunakan untuk menghasilkan angka random berkisar dari nilai lebih besar atau sama dengan nol dan lebih kecil dari satu. Bila range tidak disebutkan, hasil dari fungsi ini adalah real, bila range disebutkan, hasilnya adalah word.  
• Fungsi standar SizeOf  
Bentuk umum : SizeOf(x):word;  
Digunakan untuk menunjukkan besarnya byte yang digunakan oleh suatu variabel x, hasilnya berupa nilai word.  
• Fungsi standar UPCASE  
Bentuk umum : UpCase(Ch:char):char;  
Digunakan untuk merubah argumen suatu karakter yang ditunjukkan oleh Ch menjadi bentuk karakter huruf besar (upper case).

Array

Array adalah tipe data terstruktur yang terdiri dari sejumlah komponen-komponen yang mempunyai tipe sama. Komponen-komponen tersebut disebut sebagai komponen type, larik mempunyai jumlah komponen yang jumlahnya tetap. Banyaknya komponen dalam larik ditunjukkan oleh suatu index, dimana tiap komponen di array dapat diakses dengan menunjukkan nilai indexnya atau subskript. Array dapat bertipe data sederhana seperti byte, word, integer, real, bolean, char, string dan tipe data scalar atau subrange. Tipe larik mengartikan isi dari larik atau komponen- komponenya mempunyai nilai dengan tipe data tersebut. 
Contoh: 
Var 
jumhitung : array[1..50] of Integer; 
Pada contoh Array dengan nama jumhitung telah dideklarasikan dengan tipe integer, dengan jumlah elemen maksimum 50 elemen, nilai dari elemen array tersebut diatas harus bertipe integer. 

Contoh Program : 
Program Contoh_Array_Input; 
Uses Crt; 
Var 
Bilangan : array[1..50] of Integer; 
Begin 
ClrScr; 
Bilangan[1]:=3; 
Bilangan[2]:=29; 
Bilangan[3]:=30; 
Bilangan[4]:=31; 
Bilangan[5]:=23; 
Writeln('nilai varibel bilangan ke 3 =',Bilangan[3]); 
Readln; 
End. 
Array juga dapat dideklarasikan bersama dengan tipe yang beragam seperti contoh dibawah ini : 
Program Contoh_Deklarasi_Array_Beragam; 
Uses Crt; 
Var 
NPM : array[1..20] of string[10]; 
Nama : array[1..20] of string[25]; 
Nilai : array[1..20] of real; 
Umur : array[1..20] of byte; 
banyak,i : integer; 
Begin 
ClrScr; 
Write('Isi berapa data array yang diperlukan :');Readln(banyak); 
For i := 1 to banyak Do 
Begin 
Write('NPM =');Readln(NPM[i]); 
Write('Nama =');readln(Nama[i]); 
Write('Nilai=');readln(Nilai[i]); 
Write('Umur =');readln(Umur[i]); 
End; 
{cetak varibel array} 
Writeln('NPM NAMA NILAI UMUR '); 
For i:= 1 to banyak Do 
Begin 
Writeln(Npm[i]:10,Nama[i]:25,Nilai[i]:3:2,' ',Umur[i]:3); 
End; 
Readln; 
End. 

Untuk deklarasi array dapat digunakan beberapa cara seperti berikut ini : 
Type 
Angka = String[20]; 
Var 
Nama : Array [1..50] of Angka; 
Begin 
End. 

Deklarasi tipe indeks subrange integer Indeks pada array dapat tipe skalar atau subrange, tetapi tidak bisa real. 
Contoh: 
Var 
Nilai : Array[1..10] of Integer; 
pada contoh ini array nilai mempunyai 10 buah elemen yaitu dari 1 sampai 10. Array tersebut dapat dideklarasikan dengan type seperti berikut ini : 

Type 
Skala = 1..10; 
Var 
Nilai : Array [skala] of Integer; 
atau : 
Type 
Skala = 1..10; 
Y = Array[skala] of Integer; 
Var 
Nilai : Y; 
atau : 
Type 
Y = Array[1..10] of Integer; 
Var 
Nilai : Y; 
atau : 
Const 
Atas =1; 
Bawah = 5; 
type 
Y = Array[Atas..Bawah] of Integer; 
Var 
Nilai : Y; 
I. Deklarasi Type Indeks Skalar 
Indeks dari larik dapat berupa tipe skalar. 
Contoh. : 
Program Deklarasi_Indeks_Array_Skalar; 
Uses Crt; 
Var 
Jum : Array[(jan,feb,mar,apr,mei)] of Integer; 
Begin 
Jum[jan]:=25; 
Jum[feb]:=45; 
Jum[mar]:=21; 
Jum[apr]:=23; 
Jum[mei]:=50; 
Writeln('Jumlah nilai bulan maret =',Jum[mar]); 
Readln; 
End. 
dapat juga ditulis : 
type 
Bln = (jan,feb,mar,apr,mei); 
Var 
Jum : Array[bln] of Integer; 
atau : 
type 
Bln =(jan,feb,mar,apr,mei); 
Var 
Jum : Array[jan..mei] of Integer;

II. Deklarasi Konstanta Array 
Array tidak hanya dapat berupa suatu varibel yang dideklarasikan di bagian deklarasi variabel, tetapi dapat juga berupa konstanta (const). 
Contoh Program : 
Program Contoh_Deklarasi_Array_Konstan; 
Uses Crt; 
Const 
Tetap : Array[1..4] of Integer=(7,10,21,20); 
Var 
i : Integer; 
Begin 
For i:= 1 to 4 Do 
Writeln('Nilai Konstan array ke ',i:2,' =',Tetap[i]); 
Readln; 
End. 
konstanta array dapat juga berupa ketetapan dalam bentuk karakter seperti berikut. 
Contoh Program : 
Program Contoh_Konstan_Array_Char_; 
Uses Crt; 
Const 
Huruf : Array[0..5] of Char=('A','B','C','D','E','F'); 
Var 
i : Integer; 
Begin 
For i:= 0 to 5 Do 
Writeln('Nilai konstan array ke',i:2,' = ',Huruf[i]); 
Readln; 
End. 
Konstanta array dapat juga berupa string seperti berikut ini. 
Contoh Program : 
Program Constanta_Array_String; 
Uses Crt; 
Type 
A = Array [1..5] of String; 
Const 
Nama : A = ('basic','pascal','cobol','paradox','dbase'); 
Var 
i : Integer; 
Begin 
For i:= 1 to 5 Do 
Writeln('Nilai Array ke-',i:2,'= ',Nama[i]); 
readln; 
end. 

Dalam pascal string merupakan array dari elemen- elemen karakter seperti berikut : 
Contoh Program : 
Program String_Adalah_Array_Tipe_Char; 
Uses Crt; 
Var 
Nama : string; 
i : Integer; 
Begin 
Nama:='Turbo Pascal'; 
For i:= 1 to Length(nama) Do 
Writeln('Elemen ',i,' dari ',Nama,'= ',Nama[i]); 
Readln; 
End. 

contoh program bilangan prima dengan menggunakan bantuan array. 
Contoh program : 
Program Mencari_Bilangan_Prima_Dengan_Array; 
Uses Crt; 
Var 
Prima : Array[1..100] of Integer; 
i,j : Integer; 
bil : Integer; 
Begin 
ClrScr; 
For i := 2 to 100 Do 
Begin 
Prima[i]:=i; 
For j:= 2 to i-1 Do 
Begin 
bil := (i mod j); {* i dibagi j dicek apakah 0*} 
If bil = 0 then Prima[i]:=0; {*jika habis dibagi,berarti bkn prima*} 
End; 
If Prima[i]<> 0 Then Write(Prima[i],' '); {*cetak array yg prima*} 
End; 
Readln; 
End. 

Contoh pengurutan data dengan metode buble sort, yaitu dengan cara penukaran, dapat dilihat pada contoh dibawah ini : 
Contoh Program : 
Program Penggunaan_Array_Untuk_Sortir_Buble_Sort; 
Uses Crt; 
Var 
nil1 : Array[1..100] of Integer; 
n,i,j,dum : Integer; 
Begin 
ClrScr; 
Write('mau isi berapa data acak (integer) ='); readln(n); 
For i := 1 to n Do 
Begin 
Write('Data Ke ',i,':');Readln(nil1[i]); 
End; 
{* penyapuan proses} 
for i:= 1 to n-1 do 
begin 
for j:= i to n do 
begin 
if nil1[j]begin 
dum:=nil1[j]; 
nil1[j]:=nil1[i]; 
nil1[i]:=dum; 
end; 
end; 
end; 
writeln; 
writeln('Hasil Sortir'); 
for i := 1 to n do 
write(nil1[i]:3); 
readln; 
end. 


III. Array Dua Dimensi 
Di dalam pascal Array dapat berdimensi lebih dari satu yang disebut dengan array dimensi banyak (Multidimensional array), disini akan dibahas array 2 dimensi saja. Array 2 dimensi dapat mewakili suatu bentuk tabel atau matrik, yaitu indeks pertama menunjukkan baris dan indeks ke dua menunjukkan kolom dari tabel atau matrik. 
Untuk mengetahui cara mendeklarasikan dari penggunaan aray dua dimensi dapat dilihat pada listing program dibawah ini . 

Contoh Program: 
Program Deklarasi_Array_Dua_Dimensi; 
Uses Crt;
Var Tabel : Array[1..3,1..2] of Integer;
i,j : Integer;
Begin 
ClrScr; 
Tabel[1,1]:=1; 
Tabel[1,2]:=2; 
Tabel[2,1]:=3; 
Tabel[2,2]:=4; 
Tabel[3,1]:=5; 
Tabel[3,2]:=6; 
For I := 1 to 3 Do Begin For J:= 1 to 2 Do Begin Writeln('Elemen ',i,',',j,'= ',tabel[i,j]); 
End; 
End; 
Readln; 
End. 


IV. Alternatif Deklarasi Array Dua Dimensi. 
Ada beberapa cara dalam mendeklarasikan array dua dimensi, beberapa cara tersebut dapat dilihat dibawah ini : 
Contoh : 
Var 
Tabel : Array[1..3] of Array[1..2] of Byte; 
atau : 
Type 
Matrik = Array[1..3,1..2] of Byte; 
Var 
Tabel : Matrik; 
atau : 
Type 
Baris = 1..3; 
Kolom = 1..2; 
Matrik = Array[Baris,Kolom] of Byte; 
Var 
Tabel : Matrik; 
atau : 
Type 
Baris = 1..3; 
Kolom=1..2; 
Matrik= Array[Baris] of Array[Kolom] of Byte; 
Var 
Tabel : Matrik; 
Dibawah ini akan diberikan listing program penggunaan array dua dimensi dalam aplikasi penjumlahan matrik : 
Contoh Prorgam: 
Program Penjumlahan_Matrik; 
Uses Crt; 
Var 
Matrik1,Matrik2, Hasil : Array[1..3,1..2] of Integer; 
i,j : Integer; 
Begin 
ClrScr; 
{ input matrik ke satu } 
Writeln(' Elemen matrik satu'); 
For i := 1 to 3 Do 
Begin 
For j := 1 to 2 Do 
Begin 
Write('Elemen baris -',i,' Kolom -',j,'= '); 
Readln(matrik1[i,j]); 
End; 
End; 
{input matrik ke dua} 
Writeln('input elemen matrik dua'); 
For i:= 1 to 3 Do 
Begin 
For j:= 1 to 2 Do 
Begin 
Write('Elemen baris -',i,' kolom -',j,'= '); 
Readln(matrik2[i,j]); 
End; 
End; 
{proses penjumlahan tiap elemen} 
For i := 1 to 3 Do 
Begin 
For j:= 1 to 2 Do 
Begin 
Hasil[i,j]:=Matrik1[i,j]+Matrik2[i,j]; 
End; 
End; 
{proses cetak hasil} 
For i:= 1 to 3 Do 
Begin 
For j:= 1 to 2 Do 
Begin 
Write(Hasil[i,j]:6); 
End; 
Writeln; 
End; 
Readln; 
End. 


V. Array Sebagai Parameter 
Array dapat digunakan sebagai parameter yang dikirimkan baik secara nilai (by value) atau secara acuan (by reference) ke procedure atau ke function. Procedure yang menggunakan parameter berupa array harus dideklarasikan di dalam judul procedure yang menyebutkan parameternya bertipe array. 

Contoh Program : 
Program Contoh_Pengiriman_Parameter_Array_Di_Procedure; 
Uses Crt; 
Const 
Garis ='---------------------------------------------------'; 
Type 
nama = Array[1..10] of String[15]; 
Bulat = Array[1..10] of Integer; 
Huruf = Array[1..10] of Char; 
Var 
i,Banyak : Integer; 
Procedure Proses(Nama:Untai;Nilai:Bulat); 
Var 
Ket : String; 
Abjad : Char; 
Begin 
Writeln(Garis); 
Writeln('Nama Nilai Abjad Keterangan'); 
Writeln(Garis); 
For i := 1 to Banyak Do 
Begin 
If Nilai[i] > 90 Then 
Begin 
Abjad:='A'; 
Ket :='Istimewa'; 
End; 
If (Nilai[i]<90)>70) Then 
Begin 
Abjad:='B'; 
Ket :='Memuaskan'; 
End; 
If (Nilai[i]<70)>60) Then 
Begin 
Abjad:='C'; 
Ket :='Cukup'; 
End; 
If (Nilai[i]<60)>45) Then 
Begin 
Abjad:='D'; 
Ket :='Kurang'; 
End; 
If Nilai[i]< data ="');Readln(Banyak);" nama ="');readln(Nama[i]);" nilai ="');readln(Nilai[i]);" mahasiswa ="’" data =" ‘);readln(JumDat);" mahasiswa ="’,nama);" nilai =" ‘," rata =" ‘," mahasiswa ="’" data =" ‘);readln(JumDat);" mahasiswa ="’,nama);" nilai =" ‘," rata =" ‘," ask="’Y')or(ask="’y')">=15 then
Begin
harkot[j]:=jumbel[j]*harsat[j];
pot[j]:=0.1*harkot[j];
harsih[j]:=jumbel[j]*harsat[j]-pot[j];
End
Else if jumbel[j]>=30 then
Begin
harkot[j]:=jumbel[j]*harsat[j];
pot[j]:=0.2*harkot[j];
harsih[j]:=jumbel[j]*harsat[j]-pot[j];
End
Else
Begin
harkot[j]:=jumbel[j]*harsat[j];
pot[j]:=0*harkot[j];
harsih[j]:=jumbel[j]*harsat[j]-pot[j];
End;
End;
clrscr;
Gotoxy(1,1);Writeln(’===========================================================================’);
Gotoxy(2,2);Writeln(’No’);
Gotoxy(7,2);Writeln(’Merk’);
Gotoxy(16,2);Writeln(’Ukuran’);
Gotoxy(24,2);Writeln(’Jumlah’);
Gotoxy(32,2);Writeln(’Harga’);
Gotoxy(55,2);Writeln(’Potongan’);
Gotoxy(70,2);Writeln(’Total’);
Gotoxy(1,3);Writeln(’Urut’);
Gotoxy(7,3);Writeln(’Susu’);
Gotoxy(16,3);Writeln(’Kaleng’);
Gotoxy(25,3);Writeln(’Beli’);
Gotoxy(32,3);Writeln(’Satuan’);
Gotoxy(70,3);Writeln(’Bayar’);
Gotoxy(1,4);Writeln(’===========================================================================’);
For j:=1 to i do
Begin
Gotoxy(1,j+4);Writeln(j);
Gotoxy(7,j+4);Writeln(merk[j]);
Gotoxy(18,j+4);Writeln(ukuran[j]);
Gotoxy(26,j+4);Writeln(jumbel[j]);
Gotoxy(32,j+4);Writeln(’Rp’,harsat[j]);
Gotoxy(55,j+4);Writeln(’Rp ‘,pot[j]:0:2);
Gotoxy(67,j+4);Writeln(’Rp ‘,harsih[j]:5:2);
End;
Writeln(’===========================================================================’);
Readln;
End.


Contoh Array Toko serba ada
uses crt;
var
np:string[20];
jd,i:byte;
nb:array[1..50]of string;
jb,ttl,hrg:array[1..50]of real;
tot:real;
lagi:char;
label awal,akhir;
begin
awal:
clrscr;
writeln(’TOKO “SERBA ADA”‘);
writeln(’————————-’);
write(’masukan nama pembeli :’);readln(np);
write(’masukan jumlah data :’);readln(jd);
for i:=1 to jd do
begin
writeln(’data ke- ‘,i);
write(’nama barang :’);readln(nb[i]);
write(’jumlah beli :’);readln(jb[i]);
write(’harga :’);readln(hrg[i]);
end;
clrscr;
writeln(’ TOKO “SERBA ADA”‘);
writeln(’ TABEL PENJUALAN BARANG’);
writeln(’———————————————————–’);
writeln(’No. Nama pembeli Nama barang
Jumlah harga total ‘);
writeln(’———————————————————–’);
tot:=0;
for i:=1 to jd do
begin
ttl[i]:=hrg[i]*jb[i];
tot:=tot+ttl[i];
end;
for i:=1 to jd do
begin
writeln(i:1,np:10,nb[i]:13,jb[i]:12:0,hrg[i]:8:0,ttl[i]:10:0);
end;
writeln(’————————————————————-’);
writeln(’total bayar= ‘,tot:3:0);
writeln(’————————————————————-’);
write(’Mau input data
lagi[Y/T]=’);readln(lagi);
if (lagi=’Y') or (lagi=’y') then
goto awal
else
goto akhir;
akhir:
readln;
end.



Contoh Array Bengkel

program bengkel;
uses crt;
var
i,b:byte;
nm,nmoli,jnsmbl:array [1..50]of string;
hrg,bonus,hrgsev,hrgoli,tot:array [1..50]of
real;
totb:real;
begin
clrscr;
writeln(’BENGKEL MAJU MUNDUR’);
writeln(’========================’);
write(’Masukan data: ‘);readln(b);
for i:=1 to b do
begin
writeln(’data ke- ‘,i);
writeln;
write(’nama pengunjung :’);readln(nm[i]);
write(’jenis kendaraan [1. mobil| 2.
motor]:’);readln(jnsmbl[i]);
write(’jenis oli [ 1. castrol| 2. pelumas
pertamina]:’);readln(nmoli[i]);
end;
writeln;
writeln(’ PROGRAM SERVIC BENGKEL
MAJU MUNDUR’);
writeln(’======================================================================’);
writeln(’NO NAMA PENGUNJUNG JENIS
KENDARAAN JENIS OLI TOTAL ‘);
writeln;
totb:=0;
for i:=1 to b do
begin
if jnsmbl[i]=’1′ then
hrgsev[i]:=30000
else
hrgsev[i]:=20000;
if nmoli[i]=’2′ then
hrgoli[i]:= 20000
else
hrgoli[i]:=30000;
tot[i]:=hrgsev[i]+hrgoli[i];
totb:=totb+tot[i];
end;
for i:=1 to b do
begin
writeln(i:1,nm[i]:9,hrgsev[i]:14:0,hrgoli[i]:18:0,tot[i]:19:0);
end;
writeln(’=================================================================’);
writeln(’total bayar
:’,totb:2:0);
readln;
end.


Contoh Array Kereta

uses crt;
var
jp,i:byte;
np,nk:array[1..50]of string;
fsl:array[1..50]of char;
jml,hrg,ttl:array[1..50]of real;
tot:real;
lagi:char;
label awal,akhir;
begin
awal:
clrscr;
writeln(’STASIUN “HARUS BERHENTI” ‘);
writeln(’================================’);
write(’masukan jumlah pemesan :’);readln(jp);
for i:=1 to jp do
begin
writeln(’Data ke- ‘,i);
write(’Nama pemesan :’);readln(np[i]);
write(’Nama kereta :’);readln(nk[i]);
writeln(’fasilitas [ 1.VVIP 3.BISNIS ');
write(' 2.VIP 4.EKONOMI ]
=’);readln(fsl[i]);
write(’jumlah pesan :’);readln(jml[i]);
end;
writeln(’ STASIUN “HARUS BERHENTI” ‘);
writeln(’ PROGRAM PENJUALAN TIKET KERETA API’);
writeln(’————————————————————————-’);
writeln(’NO. Nama Pemesan Nama Kereta Fasilitas Jumlah Pesan harga total’);
tot:=0;
for i:=1 to jp do
begin
if fsl[i]=’1′ then
hrg[i]:=200000
else
if fsl[i]=’2′ then
hrg[i]:=180000
else
if fsl[i]=’3′ then
hrg[i]:=140000
else
hrg[i]:=80000;
ttl[i]:=hrg[i]*jml[i];
tot:=tot+ttl[i];
end;
for i:=1 to jp do
begin
writeln(i:1,np[i]:10,nk[i]:12,fsl[i]:15,jml[i]:14:0,hrg[i]:12:0,ttl[i]:10:0);
end;
writeln(’————————————————————————–’);
writeln(’total pembayaran
=’,tot:9:0);
writeln(’————————————————————————–’);
write(’Mau input data lagi[Y/T]=’);readln(lagi);
if (lagi=’Y') or (lagi=’y') then
goto awal
else
goto akhir;
akhir:
readln;
end.

Selamat MencoBa Semoga Berhasil 

Record

Record dapat dikatakan sebagai suatu kumpulan data item yang masing-masing mempunyai jenis data berbeda.Data item yang merupakan elemen record biasanya disebut dengan FIELD.CARA MENDEKLARASIKAN RECORDBentuk umum deklarasi suatu variabel berjenis record adalah sbb :TYPE identifier = RECORDNama_field_1 : jenis;Nama_field_2 : jenis;……………………..……………………..nama_field_n : jenis;END;Contoh :1. VAR nilai : RECORDNilai_1 : integer;Nilai_2 : integer;END;2. TYPE date = RECORDTanggal : 1..31;Bulan : 1…12;Tahun : 1900..2000;END;VAR event1,event2 : ARRAY [1..10] OF date;3. TYPE account = RECORDcust_no : integer;cust_type : char;cust_balance : real;END;VAR customer : account;Halaman : 1Pemrograman PASCAL : Record & SetMEMPROSES VARIABEL BERJENIS RECORDPerhatikan deklarasi variabel berikut :TYPE nilai : RECORDNilai1 : real;Nilai2 : real;END;VAR x,y : nilai;Untuk memproses variabel x dan / atau y dilakukan dengan cara menyebutkan field designatornya, yg terdiri dari atas :Nama_record.nama_fieldPada deklarasi diatas yang dimaksud dengan field designator-nya adalah :x.nilai1x.nilai2y.nilai1y.nilai2Jadi jika ingin membaca variabel x atau y atau keduanya, maka bentuk statement-nya adalah :READ (x.nilai1, x.nilai2, y.nilai1, y.nilai2);Selanjutnya, misal ingin dibuat program sederhana untuk menjumlahkan dua bilangan kompleks a dan b yang hasilnya disimpan di c.Secara aljabar penjumlahan dua bilangan kompleks adalah sebagai berikut :a = x1 + iy1b = x2 + iy2 +c = (x1 + x2 ) + I(y1 + y2)Maka bentuk garis besar programnya adalah sebagai berikut :Program contoh ;Type bk = recordBag_nyata : integer;Bag_imajiner : integer;End;Var a,b,c : bk;BeginRead (a.bag_nyata, a.bag_imajiner, b.bag_nyata, b.bag_imajiner);c.bag_nyata := a.bag_nyata + b.bag_imajiner;c.bag_imajiner := a.bag_imajiner + b.bag_imajiner;writeln(c.bag_nyata,’ +’,’i’,c.bag_imajiner);End.STATEMENT “WITH”Selain cara yang telah disebutkan diatas, untuk memproses suatu record dapat digunakan statement WITH.Dengan statement ini penulisannya akan lebih sederhana.Halaman : 2Pemrograman PASCAL : Record & SetBentuk Umum penulisan statement WITH ini adalah :WITH nama_record DO statementPerhatikan deklarasi dibawah ini :TYPE x = RECORDNo : integer;Kode : char;Juml : integer;Harga : real;END;VAR p,q : x;Untuk membaca variabel p dan q di atas dengan memanfaatkan statement WITH bentuknya menjadi :WITH p,q DO read (no, kode, juml, harga);Bandingkan jika digunakan cara sebelumnya :Read(p.no, p.kode, p.juml,p.harga,q.no,q.kode,q.juml,q.harga);CONTOH :Pernyataan seperti :Data.npm :=‘22297566’Data.Nama:=‘Abdul Kadir’Data.Fakultas:=‘Teknik’Dapat diganti dengan :WITH Data DoBeginnpm :=‘22297566’Nama:=‘Abdul Kadir’Fakultas:=‘Teknik’end;Apabila di dalam pernyataan WITH terdapat lebih dari satu record, haruslah pada kedua record tersebut tidak ada field dengan nama yang sama. Sebagai contoh :TypeBarangX=RECORDBatu:integer;Kayu:real;END;BarangY=RECORDHalaman : 3Pemrograman PASCAL : Record & SetBatu:string[10];Kayu:char;END;Varbrg_X:barangX;brg_Y:barangY;Karena kedua variabel record brg_X dan brg_Y memiliki nama field yang sama, Jika misalnya kemudian dikenakan pernyataan :WITH brg_X, brg_Y DoBeginwriteln(batu);writeln(kayu);End;dapat menyebabkan hasil tidak seperti yang diharapkan.Record yang BervariasiYaitu suatu record dengan field yang bisa berubah pada saat program berjalan. Hal yang perlu diperhatikan adalah bahwa beberapa field yang berada dalam record tidak pernah muncul dalam serempak, hanya akan ada satu field yang terpakai dalam satu saat.Record varian akan memberikan fasilitas untuk menentukan field yang diperlukan pada saat program berjalan (RUN-TIME), berdasarkan keperluannya.Bentuk umum Record Varian :TYPE namarecord = RECORDNama_field_1 : jenis;Nama_field_2 : jenis;……………………..nama_field_n : jenis;Case Tagfield:jenis Ofnama_tagfield : (Nama_field:jenis);nama_tagfield : (Nama_field_1, Nama_field_2:jenis);……………………..nama_tagfield : (Nama_field_n:jenis);END;Contoh :Type status=(T,P,J);gaji=RECORDnapeg :string[25];nopeg :string[10];bagian :string[15];CASE stat :status OFT:(gaji:integer);P:(gajiperjam,jmlmax:integer);J:(upahperjam,lembur:integer);end;Halaman : 4Pemrograman PASCAL : Record & SetArray tipe recordtype barang=RECORDnamabrg:string[20];jmlbrg:byte;hargabrg:real;total:real;end;var jual:array [1..10] of barangi,j:integer;tot1:real;BeginI:=1;write(‘Nama barang :’);readln(jual[i].nmbrg);Repeatwrite(‘Jumlah barang :’);readln(jual[i].jmlbrg);write(‘Harga barang :’);readln(jual[i].hrgbrg);jual[i].total:=jual[i].jmlbrg* jual[i]. jual[i].hrg.brg;inc (I);write(‘Nama barang :’);readln(jual[i].nmbrg);until (jual[i].nmbrg=‘0’) or (I=11);dec(i);clrscr;writeln (‘------------------------------------------------------------’);writeln (‘No nama barang jumlah harga total’);writeln (‘------------------------------------------------------------’);for j:=1 to I dobegingotoxy(1,j+3);write (j);gotoxy(5,j+3);write(jual[i].nmbrg);gotoxy(26,j+3);write(jual[i].jmlbrg:10);gotoxy(37,j+3);write(jual[i].hrgbrg:10:2);gotoxy(48,j+3);write(jual[i].total:10:2);tot1:=tot1 + jual[j].total ;end;writeln (‘------------------------------------------------------------’);writeln(‘ Total :’,tot1:10:2’);writeln (‘------------------------------------------------------------’);end.Array dalam recordType barang= RECORDnmbrg:string[20];jmlbrg:array[1..3]of byte;hrgbrg:real;total:real;end;var jual:barang;tbarang, i:integer;Beginclrscr;write(‘Nama Barang :’);readln(jual.nmbrg);for i:=1to 3 dobeginwrite(‘Jumlah barang ’,I,’ : ’);readln(jual.jmlbrg[i]);tbarang:=tbarang+jual.jmlbrg[i];end; Halaman : 5Pemrograman PASCAL : Record & Setwrite(‘Harga barang :’);readln(jual.hrgbrg);jual.total:=tbarang*jual.hrgbrg;writeln(‘Total Harga Barang = ‘, jual.total:10:2);end.Coba lihat sendiri perbedaan antara array tipe record dan array dalam record dari dua contoh program di atas !SET (HIMPUNAN)Set adalah kumpulan dari nilai-nilai yang memiliki kesamaan sifat, yaitu tipe data yang sama dan urutan penulisannya tidak diperhatikan. Setiap obyek dalam himpunan disebut dengan anggota atau elemen himpunan. Contoh :1. Huruf vokal dalam alfabet2. kendaraan bermotor3. binatang menyusui4. bilangan genap 1 sampai 1005. dan sebagainyaSet termasuk ke dalam tipe data terstruktur, terdiri dari sejumlah elemen yang bertipe sama dan harus bertipe data ordinal yang memiliki nilai terletak antara 0 sampai 255.Berbeda dengan tipe data array, tipe data SET tidak mengenal elemen pertama, elemen kedua dan seterusnya. Pada tipe data SET tidak terdapat elemen yang bernilai sama.Mendeklarasikan SET (Himpunan)Dapat dideklarasikan dalam deklarasi tipe data :Type variabel_set = SET OF tipe_data;Dapat pula dideklarasikan dalam deklarasi var data :Var variabel_set = SET OF tipe_data;Contoh :Typekata = set of char; {tipe dasar}huruf besar =‘A’..’Z’; {subrange}Perintah = set of hurufbesar ;Hari = (senin,selasa,rabu,kamis,jumat,sabtu,minggu); {enumerasi}Hari2 = set of Hari;Pilihan = set of 1..7 {subrange dalam bentuk bilangan}; Halaman : 6Pemrograman PASCAL : Record & SetVarhurufkecil : set of ‘a’..’z’;kapital : hurufbesar;hariseminggu : hari2;Kalimat : kata;Dalam keadaan awal, suatu variabel yang bertipe data SET belum terisi. Variabel tersebut merupakan suatu variabel kosong, dinyatakan dengan tanda [ ].Contoh program memberikan nilai untuk tipe data SET :Program SET1;typeHari = (senin,selasa,rabu,kamis,jumat,sabtu,minggu); {enumerasi}Hari2 = set of Hari;varhariseminggu:hari2;beginhariseminggu:=[selasa, kamis,sabtu];end.Operasi SET (Himpunan)1. Operasi PenjumlahanDisebut juga operasi penggabungan (UNION), Operatornya (+).Contoh :A:= [‘B’,’F’,’J’,’L’];A:= A + [‘a’,’B’,’b’,’c’,’d’,’e’,’f’,’j’,’k’,’l’];maka nilai A sekarang adalah [‘B’,’F’,’J’,’L’,‘a’,’b’,’c’,’d’,’e’,’f’,’j’,’k’,’l’]2. Operasi PenguranganDisebut juga operasi selisih SET, operatornya (-).Misal :SET1 - SET2, menghasilkan elemen yang merupakan anggota SET1 yang bukan anggota SET2.Contoh :A:=[1,2,3,4,5];B:=[4,5,6,7];W:=A-B;Maka nilai W adalah [1,2,3]2. Operasi PerkalianDisebut juga operasi Intersection (irisan), operatornya (*).Misal :SET1 - SET2, menghasilkan elemen yang merupakan anggota SET1 dan sekaligus merupakan anggota SET2.Contoh :1. A:=[1,2,3,4,5];2. D:=[1,2,3,4,5];Halaman : 7Pemrograman PASCAL : Record & SetB:=[1,3,5,6,7];C:=A*B;Maka nilai C adalah [1,3,5]E:=[6,7,8,9,10];F:=A*B;Maka nilai F adalah [ ]Perbandingan dalam SET (Himpunan)OPERATORNAMA OPERATORKETERANGAN=Sama denganBernilai TRUE, bila kumpulan anggota variabel SET mempunyai anggota yang sama.< >Tidak samaBernilai TRUE, bila kumpulan anggota variabel SET mempunyai anggota yang tidak sama.< =Anggota dariBernilai TRUE, bila semua elemen dari himpunan 1 terdapat pada himpunan 2.> =Mempunyai anggotaBernilai TRUE, bila semua elemen dari himpunan 2 terdapat pada himpunan 1.INTerdapat di dalamBernilai TRUE, bila elemen merupakan anggota himpunan.Contoh :1. [3,4,5]=[4,5,3] hasil TRUE2. [c,d]=[d,g,c] hasil FALSE3. [2,4]< >[2,3] hasil TRUE4. f in [‘a’..’z’] hasil TRUE5. [2,1] < = [1,2,3] hasil TRUE6. [5,6,7] > = [7,6] hasil TRUE7. 3 in [4,5,3,2] hasil TRUE8. [2,1] > = [1,2] hasil TRUEContoh Program perbandingan SET :Program Set1;Uses crt;Type kbil=set of byte;var kbil1,kabil2:kabil;a,b:byte;beginclrscr;write(‘Tentukan batas bawah :’);readln(a); {Input Himpunan Pertama}write(‘Tentukan batas Atas :’);readln(b);Kbil1:=[a..b];write(‘Tentukan batas bawah :’);readln(a); {Input Himpunan Kedua}write(‘Tentukan batas Atas :’);readln(b);Kbil2:=[a..b];if kbil1= kbil2 then writeln(‘Himpunan 1 sama dengan Himpunan 2’);if kbil1 < > kbil2 then writeln(‘Himpunan 1 tidak sama dengan Himpunan 2’);if kbil1< = kbil2 then writeln(‘Himpunan 1 anggota dari Himpunan 2’);if kbil1> = kbil2 then writeln(‘Himpunan 1 mempunyai anggota Himpunan 2’);end.Contoh Program operator IN :Program set2;uses crt;type karakter= set of char;var kapital : karakter;hidup : karakter;jumlahh,jumlahk : integer;kalimat : string; Halaman : 8Pemrograman PASCAL : Record & Seti:integer;beginclrscr;kapital:=[‘A’..’Z’];hidup:=[‘A’,’E’,’I’,’O’,’U’,’a’,’e’,’i’,’o’,’u’];jumlahh:=0;jumlahk:=0;writeln(‘Masukkan suatu kalimat :’);readlne (kalimat);for I:=1 to length(kalimat) dobeginif kalimat[i] in kapital then inc(jumlahk);if kalimat[i] in hidup then inc(jumlahh);end;writeln(‘Jumlah kapital =‘,jumlahk);writeln(‘Jumlah huruf hidup =‘,jumlahh);end.Aplikasi Penggunaan SET dalam Program :Program bacakarakter;uses crt;type karakter=set of char;var pilihan:char;function bacakar(pesan:string;pilihansah:karakter):char;var ch:char;beginwrite(pesan);repeatch:=upcase(readkey);until(ch in pilihansah);writeln(ch);bacakar:=ch;end;{Program utama}Beginclrscr;repeatPilihan:=bacakar(‘Anda :(T)ulis Halo, (B)el,(S)elesai’,[‘T’,’B’,’S’]);Case pilihan of‘T’:writeln(‘Hallo...’);‘B’:writeln(‘bel’+ #7);‘S’:writeln(‘Terimakasih’);end;Until pilihan =‘S’;end.

array dan record

Pernahkah kamu membayangkan bila kita mau membuat program toko buah-buahan. Jika ada 3 jenis buah-buahan (melon, duku dan mangga) berarti kita harus mempunyai tiga variabel untuk masing-masing jenis buah. Tetapi betapa sulitnya jika toko itu punya 10 atau 20 jenis yang berbeda. Solusinya adalah gunakan array. Array itu adalah tipe data terstuktur yang berguna untuk menyimpan sejumlah data yang bertipe sama. Bagaimana cara kerjanya? yaitu dengan menggunakan index (semacam penanda). Perhatikan contoh: 
 1: Program Tutorial5_Array;
 2: var buah: array [1..3] of string;
 3: i: integer;
 4: Begin
 5: For i:=1 to 3 do
 6: begin
 7: write('Masukkan buah-buahan ke ',i , ' : ');
 8: readln(buah[i]);
 9: end;
10: writeln;
11: writeln('Isi buah-buahan yang dimasukkan tadi
adalah : ');
12: For i:= 1 to 3 do
13: writeln('buah ke', i ,' : ', buah[i]);
14: End.Lihat pada baris ke-8. Dengan hanya menggunakan satu nama variabel yaitu buah, kita bisa menyimpan 3 nilai yang berbeda. Misalkan yang kita masukkan adalah melon, duku dan mangga. maka buah[1] bernilai melon, buah[2] bernilai duku dan buah[3] bernilai mangga. Untuk mencetak isi variabel yang sudah disimpan di array tadi caranya bisa dilihat di baris ke 13. Bagaimana, gampangkan? setelah mengetahui cara menggunakan array, sekarang kita belajar menggunakan record. Tidak seperti array, record adalah jenis tipe data terstruktur yang berisi beberapa data, yang masing-masing dapat berlainan tipe. Perhatikan contoh: 

 1: Program Tutorial5_Record;
 2: type buah = record
 3: nama: string;
 4: harga: longint;
 5: end;
 6: var data:buah;
 7: Begin
 8: write('nama buah: ');readln(data.nama);
 9: write('harga buah: ');readln(data.harga);
10: write('ditampilkan');
11: write('nama');readln(data.nama);
12: writeln('harga');readln(data.harga);
13: End.Apa yang bisa kamu ambil kesimpulan dari program di atas? Bingung? Jadi gini, dengan menggunakan record (di sini bernama buah) kita bisa membuat tipe data yang berisi beberapa data yang berlainan tipe (nama dengan jenis string, dan harga dengan jenis long integer) yang ini disebut field. Perhatikan baris ke 6, di situ dideklarasikan bahwa variabel data bertipe buah. Otomatis yang dimiliki buah (nama dan harga) dimiliki juga oleh data. Setelah itu lihat baris ke 8 dan 9. Nama buah disimpan dalam field nama dan harga buah disimpan di dalam field harga. Untuk bisa menyimpan data di field, urutannya harus variabel.field (contohnya di sini data.nama atau data.harga). Begitu juga bila kita ingin menampilkan isi field tersebut.

Tipe data seperti ini sangat berguna Apalagi jika digabungkan dengan array.

tumpukan dan antrian

Pengertian Linked list :
• sekumpulan elemen bertipe sama, yang mempunyai keterurutan tertentu, yang setiap elemennya terdiri dari dua bagian
• struktur berupa rangkaian elemen saling berkait dimana setiap elemen dihubungkan elemen lain melalui pointer. Pointer adalah alamat elemen. Penggunaan pointer untuk mengacu elemen berakibat elemen-elemen bersebelahan secara logik walau tidak bersebelahan secara fisik di memori.

Bentuk Umum :

Infotype ->sebuah tipe terdefinisi yang menyimpan informasi sebuah elemen list

Next       ->address dari elemen berikutnya (suksesor)

Jika L adalah list, dan P adalah address, maka alamat elemen pertama list L dapat diacu dengan notasi :

First (L)
Sebelum digunakan harus dideklarasikan terlebih dahulu :

# define first (L) (L)
Elemen yang diacu oleh P dapat dikonsultasi informasinya dengan notasi :

Info (P) deklarasi define info (P) (P)-> info

Next (P) deklarasi define Next(P) (P)->Next

Beberapa Definisi :
1. List l adalah list kosong, jika First(L) = Nil
2. Elemen terakhir dikenali, dengan salah satu cara adalah karena
Next(Last) = Nil
Nil adalah pengganti Null, perubahan ini dituliskan dengan #define Nil Null




Pada gambar di atas tampak bahwa sebuah data terletak pada sebuah lokasi memori area. Tempat yang disediakan pada satu area memori tertentu untuk menyimpan data dikenal dengan sebutan node atau simpul. Setiap node memiliki pointer yang menunjuk ke simpul berikutnya sehingga terbentuk satu untaian, dengan demikian hanya diperlukan sebuah variabel pointer. Susunan berupa untaian semacam ini disebut Single Linked List (NULL memilik nilai khusus yang artinya tidak menunjuk ke mana-mana. Biasanya Linked List pada titik akhirnya akan menunjuk ke NULL).
Pembuatan Single Linked List dapat menggunakan 2 metode:
• LIFO (Last In First Out), aplikasinya : Stack (Tumpukan)
• FIFO (First In First Out), aplikasinya : Queue (Antrean)
Double Linked List
Salah satu kelemahan single linked list adalah pointer (penunjuk) hanya dapat bergerak satu arah saja, maju/mundur, atau kanan/kiri sehingga pencarian data pada single linked list hanya dapat bergerak dalam satu arah saja. Untuk mengatasi kelemahan tersebut, dapat menggunakan metode double linked list. Linked list ini dikenal dengan nama Linked list berpointer Ganda atau Double Linked List.

Circular Double Linked List
Merupakan double linked list yang simpul terakhirnya menunjuk ke simpul terakhirnya menunjuk ke simpul awalnya menunjuk ke simpul akhir sehingga membentuk suatu lingkaran.
Operasi-Operasi yang ada pada Linked List
• Insert
Istilah Insert berarti menambahkan sebuah simpul baru ke dalam suatu linked list.
• IsEmpty
Fungsi ini menentukan apakah linked list kosong atau tidak.
• Find First
Fungsi ini mencari elemen pertama dari linked list
• Find Next
Fungsi ini mencari elemen sesudah elemen yang ditunjuk now
• Retrieve
Fungsi ini mengambil elemen yang ditunjuk oleh now. Elemen tersebut lalu dikembalikan oleh fungsi.
• Update
Fungsi ini mengubah elemen yang ditunjuk oleh now dengan isi dari sesuatu
• Delete Now
Fungsi ini menghapus elemen yang ditunjuk oleh now. Jika yang dihapus adalah elemen pertama dari linked list (head), head akan berpindah ke elemen berikut.
• Delete Head
Fungsi ini menghapus elemen yang ditunjuk head. Head berpindah ke elemen sesudahnya.
• Clear
Fungsi ini menghapus linked list yang sudah ada. Fungsi ini wajib dilakukan bila anda ingin mengakhiri program yang menggunakan linked list. Jika anda melakukannya, data-data yang dialokasikan ke memori pada program sebelumnya akan tetap tertinggal di dalam memori.

A. STACK DENGAN SINGLE LINKED LIST
Selain implementasi stack dengan array seperti telah dijelaskan sebelumnya, stack daat diimplementasikan dengan single linked list. Keunggulannya dibandingkan array adalah penggunaan alokasi memori yang dinamis sehingga menghindari pemborosan memori.
Misalnya pada stack dengan array disediakan tempat untuk stack berisi 150 elemen, sementara ketika dipakai oleh user stack hanya diisi 50 elemen, maka telah terjadi pemborosan memori untuk sisa 100 elemen, yang tak terpakai. Dengan penggunaan linked list maka tempat yang disediakan akan sesuai dengan banyaknya elemen yang mengisi stack.
Dalam stack dengan linked list tidak ada istilah full, sebab biasanya program tidak menentukan jumlah elemen stack yang mungkin ada (kecuali jika sudah dibatasi oleh pembuatnya). Namun demikian sebenarnya stack ini pun memiliki batas kapasitas, yakni dibatasi oleh jumlah memori yang tersedia.

Operasi-operasi untuk Stack dengan Linked List
• IsEmpty
Fungsi memeriksa apakah stack yang adamasih kosong.
• Push
Fungsi memasukkan elemen baru ke dalam stack. Push di sini mirip dengan insert dalam single linked list biasa.
• Pop
Fungsi ini mengeluarkan elemen teratas dari stack.
• Clear
Fungsi ini akan menghapus stack yang ada.


B. QUEUE DENGAN DOUBLE LINKED LIST
Selain menggunakan array, queue juga dapat dibuat dengan linked list. Metode linked list yang digunakan adalah double linked list.

Operasi-operasi Queue dengan Double Linked List
• IsEmpty
Fungsi IsEmpty berguna untuk mengecek apakah queue masih kosong atau sudah berisi data. Hal ini dilakukan dengan mengecek apakah head masih menunjukkan pada Null atau tidak. Jika benar berarti queue masih kosong.
• IsFull
Fungsi IsFull berguna untuk mengecek apakah queue sudah penuh atau masih bisa menampung data dengan cara mengecek apakah Jumlah Queue sudah sama dengan MAX_QUEUE atau belum. Jika benar maka queue sudah penuh.
• EnQueue
Fungsi EnQueue berguna untuk memasukkan sebuah elemen ke dalam queue (head dan tail mula-mula meunjukkan ke NULL).
• DeQueue
Procedure DeQueue berguna untuk mengambil sebuah elemen dari queue. Hal ini dilakukan dengan cara menghapus satu simpul yang terletak paling depan (head).









II. STACK DAN QUEUE DENGAN ARRAY

A. STACK DENGAN MENGGUNAKAN ARRAY
Pengertian Stack
• Stack atau tumpukan adalah suatu stuktur data yang penting dalam pemrograman
• Bersifat LIFO (Last In First Out)
• Benda yang terakhir masuk ke dalam stack akan menjadi benda pertama yang dikeluarkan dari stack

• Contohnya, karena kita menumpuk Compo di posisi terakhir, maka Compo akan menjadi elemen teratas dalam tumpukan. Sebaliknya, karena kita menumpuk Televisi pada saat pertama kali, maka elemen Televisi menjadi elemen terbawah dari tumpukan. Dan jika kita mengambil elemen dari tumpukan, maka secara otomatis akan terambil elemen teratas, yaitu Compo juga.



Operasi-operasi/fungsi Stack
• Push : digunakan untuk menambah item pada stack pada tumpukan paling atas
• Pop : digunakan untuk mengambil item pada stack pada tumpukan paling atas
• Clear : digunakan untuk mengosongkan stack
• IsEmpty : fungsi yang digunakan untuk mengecek apakah stack sudah kosong
• IsFull : fungsi yang digunakan untuk mengecek apakah stack sudah penuh
Stack with Array of Struct
• Definisikan Stack dengan menggunakan struct
• Definisikan MAX_STACK untuk maksimum isi stack
• Buatlah variabel array data sebagai implementasi stack secara nyata
• Deklarasikan operasi-operasi/function di atas dan buat implemetasinya

Deklarasi MAX_STACK
#define MAX_STACK 10 //hati-hati mulai dari 0 jadi 0-9

Deklarasi STACK dengan struct dan array data
typedef struct STACK{
int top;
char data[10][10]; //misalkan : data adalah array of string
//berjumlah 10 data, masing-masing string
//menampung maksimal 10 karakter
};

Deklarasi/buat variabel dari struct
STACK tumpuk;

Inisialisasi Stack
• Pada mulanya isi top dengan -1, karena array dalam C dimulai dari 0, yang berarti stack adalah KOSONG!
• Top adalah suatu variabel penanda dalam STACK yang menunjukkan elemen teratas Stack sekarang. Top Of Stack akan selalu bergerak hingga mencapai MAX of STACK sehingga menyebabkan stack PENUH!

• Ilustrasi stack pada saat inisialisasi:


Fungsi IsFull
• Untuk memeriksa apakah stack sudah penuh?
• Dengan cara memeriksa top of stack, jika sudah sama dengan
MAX_STACK-1 maka full, jika belum (masih lebih kecil dari MAX_STACK-1) maka belum full
• Ilustrasi:

Fungsi IsEmpty
• Untuk memeriksa apakah stack masih kosong?
• Dengan cara memeriksa top of stack, jika masih -1 maka berarti stack masih kosong!
• Program:


Fungsi Push
• Untuk memasukkan elemen ke stack, selalu menjadi elemen teratas stack
• Tambah satu (increment) nilai top of stack terlebih dahulu setiap kali ada penambahan elemen stack, asalkan stack masih belum penuh, kemudian isikan nilai baru ke stack berdasarkan indeks top of stack setelah ditambah satu (diincrement)
• Ilustrasinya:




Fungsi Pop

• Untuk mengambil elemen teratas dari stack.
• Ambil dahulu nilai elemen teratas stack dengan mengakses top of stack, tampilkan nilai yang akan diambil terlebih dahulu, baru didecrement nilai top of stack sehingga jumlah elemen stack berkurang

• Ilustrasinya:



Programnya:

Fungsi Print
• Untuk menampilkan semua elemen-elemen stack
• Dengan cara looping semua nilai array secara terbalik, karena kita harusmengakses dari indeks array tertinggi terlebih dahulu baru ke indeks yang kecil!


Program:













B. QUEUE DENGAN MENGGUNAKAN ARRAY

• Queue = Antrian
• Elemen yang pertama kali masuk ke antrian akan keluar pertama kalinya



• DEQUEUE adalah mengeluarkan satu elemen dari suatu Antrian
• Antrian dapat dibuat dengan menggunakan: Liniear Array dan Circular
Array

QUEUE DENGAN LINIEAR ARRAY
• Terdapat satu buah pintu masuk di suatu ujung dan satu buah pintu keluar
di ujung satunya
• Sehingga membutuhkan variabel Head dan Tail



DEKLARASI QUEUE



OPERASI-OPERASI PADA QUEUE

- Create()
o Untuk menciptakan dan menginisialisasi Queue
o Dengan cara membuat Head dan Tail = -1





- IsEmpty()
o Untuk memeriksa apakah Antrian sudah penuh atau belum
o Dengan cara memeriksa nilai Tail, jika Tail = -1 maka empty
o Kita tidak memeriksa Head, karena Head adalah tanda untuk kepala
antrian (elemen pertama dalam antrian) yang tidak akan berubahubah
o Pergerakan pada Antrian terjadi dengan penambahan elemen
Antrian kebelakang, yaitu menggunakan nilai Tail




- IsFull()
o Untuk mengecek apakah Antrian sudah penuh atau belum
o Dengan cara mengecek nilai Tail, jika Tail >= MAX-1 (karena MAX-1
adalah batas elemen array pada C) berarti sudah penuh


- Enqueue(data)
o Untuk menambahkan elemen ke dalam Antrian, penambahan
elemen selalu ditambahkan di elemen paling belakang
o Penambahan elemen selalu menggerakan variabel Tail dengan cara
increment counter Tail




- Dequeue()
o Digunakan untuk menghapus elemen terdepan/pertama dari Antrian
o Dengan cara mengurangi counter Tail dan menggeser semua
elemen antrian kedepan.
o Penggeseran dilakukan dengan menggunakan looping



- Clear()
o Untuk menghapus elemen-elemen Antrian dengan cara membuat
Tail dan Head = -1
o Penghapusan elemen-elemen Antrian sebenarnya tidak menghapus
arraynya, namun hanya mengeset indeks pengaksesan-nya ke nilai
-1 sehingga elemen-elemen Antrian tidak lagi terbaca



- Tampil()
o Untuk menampilkan nilai-nilai elemen Antrian
o Menggunakan looping dari head s/d tail












PEMBAHASAN
Perbandingan Antara
Stack-Queue Dengan Linked List Vs Stack-Queue Dengan Array

A. Stack Dengan Linked List VS Stack Dengan Array
Berikut ini adalah perbandingan algoritma pada operasi-operasi dasar dari Stack Dengan Linked List dan Stack Dengan Array, dengan menggunakan bahasa pemrograman Pascal

Stack Dengan Linked List Stack Dengan Array
operasi : create()
procedure create;
begin
top := nil ;
end; procedure create;
begin
top := 0;
end;
operasi : empty()
function empty : boolean;
begin
empty := false ;
if top = nil then empty := true ;
end; function empty : boolean;
begin
empty := false ;
if top = 0 then empty := true ;
end;
operasi : full()
tidak ada istilah full pada stack.
program tidak menentukan jumlah elemen stack yang mungkin ada. kecuali dibatasi oleh pembuat program dan jumlah memory yang tersedia. tempat akan sesuai dengan banyaknya elemen yang mengisi stack. function full : boolean;
begin
full := false ;
if top = max then full := true ;
end;
operasi : push()
procedure push (elemen : typedata) ;
var now:point ;
begin
now(now) ;
now^.isi := elemen ;
if empty then
now^.next := nil ;
else
now^.next := top ;
top := now ;
end; procedure push (elemen : typedata) ;
begin
if not full then
begin
top := top + 1 ;
stack [top] := elemen ;
end;
end;
operasi : pop()
procedure pop (var elemen : typedata) ;
var now:point ;
begin
if not empty then
begin
elemen := now^.isi ;
now := top ;
top := top^.next ;
dispose(now) ;
end;
end; procedure pop (elemen : typedata) ;
begin
if not empty then
begin
elemen := stack [top] ;
top := top – 1 ;
end;
end;
operasi : clear
procedure clear ;
var trash : typedata ;
begin
while not empty do pop(trash) ;
end; procedure clear ;
begin
top := 0 ;
end;

PEMBAHASAN
Dari perbandingan diatas, dapat dilihat pada linked list tidak dikenal istilah full. Hal ini berkaitan dengan penggunaan alokasi memori pada linked list yang lebih dinamis jika dibandingkan dengan array, sehingga pemborosan memory dapat dihindari. Program tidak menentukan jumlah elemen stack yang mungkin ada. Kecuali dibatasi oleh pembuat program dan jumlah memory yang tersedia. Tempat akan sesuai dengan banyaknya elemen yang mengisi stack.


B. Queue Dengan Linked List VS Queue Dengan Array

Implementasi queue menggunakan array
• Implementasi sederhana
• Ukuran memori harus ditentukan ketika sebuah objek queue dideklarasikan
• Pemborosan tempat (memori) ketika menggunakan jumlah data yang lebih sedikit dari alokasi memori
• Tidak dapat menambahkan data melebihi maksimal ukuran array yang telah dideklarasikan
Implementasi queue menggunakan linked list
• Pengalokasian memori dinamis
• Menggunaka 2 buah pionter, qFront dan qRear, untuk menandai posisi depan dan belakang dari queue


Perbandingan implementasi queue, array VS linked list (contoh 1)
• Memory requirements
– Array-based implementation
• Diasumsikan ukuran queue 100 (string @80bytes)
• Diasumsikan index membutuhkan 2 bytes
• Total memory: (80 bytes x 101 slots) + (2 bytes x 2 indexes) = 8084 bytes
– Linked-list-based implementation
• Diasumsikan pointers membutuhkan 4 bytes
• Total memory per node: 80 bytes + 4 bytes = 84 bytes

Gambar :




Perbandingan implementasi queue, array VS linked list (contoh 2)
• Memory requirements
– Array-based implementation
• Diasumsikan ukuran queue 100 (string @2bytes)
• Diasumsikan index membutuhkan 2 bytes
• Total memory: (2 bytes x 101 slots) + (2 bytes x 2 indexes) = 206 bytes
– Linked-list-based implementation
• Diasumsikan pointers membutuhkan 4 bytes
• Total memory per node: 2 bytes + 4 bytes = 6 bytes

Gambar :






KESIMPULAN

Perbandingan Antara Stack-Queue Dengan Linked List Vs Stack-Queue Dengan Array
• Untuk stack dan queue yang berukuran besar, terutama jumlah maksimal data tidak diketahui, lebih baik menggunakan linked list.
• Untuk perangkat yang memiliki memori terbatas, seperti small handheld devices, linked list memiliki performa yang lebih bagus.