pascal for windows by apasiboy

VIEWS: 340 PAGES: 96

									Topik Pembahasan :
1.1 Sejarah Pemrograman Pascal
1.2 Struktur Bahasa Pemrograman Pascal
1.3 Identifier
1.4 Variabel dan Konstanta
1.5 Pemrograman Pascal
1.6 Tipe Data

Tujuan :
Memahami struktur dan aturan bahasa pemrograman
pascal




                                                  1
1.1 Sejarah Bahasa Pemrograman Pascal
   Pascal adalah bahasa tingkat tinggi (high level language) yang orientasinya
pada segala tujuan, dirancang oleh Profesor Niklaus Wirth dari Technical
University of Zurich, Switzerland. Nama Pascal diambil sebagai penghargaan
terhadap Blaise Pascal, ahli matematik dan filosofer terkenal abad 17 dari
Perancis. Profesor Niklaus Wirth memperkenalkan kompiler bahasa Pascal
pertama kali untuk komputer CDC 6000 (Control Data Corporation) yang
dipublikasikan pada tahun 1971 dengan tujuan membantu mengajar program
komputer secara sistematis, khususnya untuk memperkenalkan pemrograman
terstruktur.
   Dalam waktu singkat, Pascal telah menjadi bahasa yang populer di
kalangan pelajar universitas dan merupakan bahasa yang diajarkan di beberapa
perguruan tinggi. Beberapa profesional komputer juga mulai beralih ke bahasa
Pascal. Kenyataannya, Pascal merupakan bahasa yang paling cepat populer
dibandingkan dengan bahasa-bahasa komputer tingkat tinggi yang lainnya.
   Standar Pascal adalah bahasa Pascal yang didefinisikan oleh K.Jensen dan
Niklaus Wirth. Penerapan nyata dari standar Pascal banyak yang berbeda
dengan seperti apa yang telah didefinisikan oleh K. Jensen dan Niklaus Wirth.
Standar Pascal di Eropa didefinisiakn oelh ISO (International Standards
Organization) dan di Amerika oleh kerjasama antara ANSI (American National
Standar Institute) dengan IEEE (Intitute of Electrical and Electronic Engineer).
   Beberapa versi dari Pascal yang telah beredar di pasaran, di antaranya
UCSD pascal (University of California at San Diego Pascal), MS-Pascal
(Microsoft Pascal), Apple Pascal, Turbo Pascal dan lain sebagainya. Sampai saat
ini untuk komputer-komputer mikro dan personal, Turbo Pascal merupakan
versi bahasa Pascal yang paling populer dan banyak digunakan. Kompiler
Turbo Pascal banyak digemari, karena terutama bersifat interaktif, seperti
interpreter saja layaknya. Selain itu Turbo Pascal mengikuti definisi dari
standar Pascal seperti yang didefinisikan oleh K. Jensen dan Niklaus Wirth di


                                                                                   2
Pascal User Manual dan Report. Turbo PASCAL adalah copyright dari Borland
Inc. dan dapat digunakan pada sistem operasi PC-DOS, MS-DOS, CPM-86 dan
CP/M-80.
    Kepopuleran PASCAL berkembang seiring dengan perkembangan PC.
Terdapat beberapa Co mpiler PASCAL, salah satunya adalah TURBO PASCAL
yang dikeluarkan oleh Borland International. TURBO PASCAL 7.0 dirilis pada
tahun 1992 yang mempunyai :
1. Kompiler (untuk mengkompilasi program menjadi suatu objek yang
   dipahami oleh komputer
2. Debugger (untuk membantu mencari kesalahan program)
3. Linker (untuk menggabungkan file objek dan file pustakadan membentuk
   File Executable)
4. Editor (untuk menulis program sumber/ source code)


1.2 Struktur Bahasa Pemrograman Pascal
   Bahasa pemrograman pascal memiliki susunan program sebagai berikut :


    Susunan Minimum :

    Begin
       Statement;
    End.

    Susunan Lengkap :
    Program               …    (Nama/Judul Program);               Judul
    Uses                  …    (Nama Unit);
    Label                 …    (Label);
    Const                 …    (Konstanta);
    Type                  …    (Type);                             Deklarasi
    Var                   …    (Variabel);
    Procedure             …    (Prosedur);
    Function              …    (Fungsi);
    Begin
         Statement;                                                Tubuh
    End.




                                                                           3
Teks Pascal setidaknya memiliki bagian Judul Program, bagian Deklarasi, dan
Bagian Program Utama yang berupa perintah-perintah. Sedangkan untuk
bagian deklarasi menyesuaikan dengan isi dari program itu sendiri. Contoh
program PASCAL:


                      Contoh Program 1.1 :
   Program LuasPersegi01;
   Uses Wincrt;
   Var
         Sisi, Luas: integer;
   BEGIN
         Sisi := 10;
         Luas := sisi*sisi;
         Write (’Luas Persegi : ’,Luas);
   END.


Pada contoh program di atas, nilai sisi tidak bisa diinput dengan sembarang
angka. Hal ini karena nilai sisi telah didefinisikan terlebih dahulu yaitu sisi=10.
Agar nilai sisi bisa diinputkan dengan sembarang angka maka program di atas
diubah menjadi :
                       Contoh Program 1.2 :
   Program LuasPersegi02;
   Uses Wincrt;
   Var
         Sisi, Luas: integer;
   BEGIN
         write(’Inputkan Sisi Persegi = ’);
         Readln(sisi);
         Luas := sisi*sisi;
         Write (’Luas Persegi : ’,Luas);
   END.


Pada contoh program di atas, sisi dapat diinput sembarang angka sesuai
dengan keinginan user/operator. Kata perintah readln berfungsi untuk
menangkap angka yang diinput user untuk ditampung dalam variable sisi
sebelum proses dilanjutkan.




                                                                                 4
1.3 Identifier
    Identifier adalah nama yang digunakan dalam pemrograman pascal.
Identifier juga dikenal dengan istilah pengenal. Identifier digunakan untuk
nama program, sub program (procedure dan function), variable, konstanta,
type dan label. Aturan penamaan identifier adalah sebagai berikut :
1. Nama identifier harus diawali dengan huruf alphabet (a—z atau A—Z).
2. Karakter berikutnya boleh angka numeric (0—9).
3. Nama identifier tidak boleh mengandung spasi, tanda pemisah yang boleh
    digunakan adalah underscore/garis bawah (_).
4. Panjang nama karakter identifier umumnya antara 32-63 karakter
5. Tidak boleh menggunakan karakter istimewa seperti : + – * / | \ = < > [ ] . ,
    ; : ( ) ^ @ { } $ # ~ ! % & ` ‖ ‗ dan ?
6. Bukan kata perintah dalam bahasa pemrograman pascal


1.3.1 Identifier Umum
    Merupakan       identifier    yang    didefinisikan   sendiri   oleh   pemrogram.
Pemrogram mempunyai kebebasan untuk menentukan nama identifiernya,
dengan syarat nama tersebut tidak sama dengan identifier standar dan reserved
word. Hal ini untuk mencegah kesalahan yang bisa timbul akibat tumpang
tindih identifier dalam program.


1.3.2 Identifier Standar
    Merupakan identifier yang didefinisikan oleh pembuat kompiler Pascal.
Biasanya pembuat kompiler menyediakan suatu library yang sudah ada
didalam kompiler. Library berisi berbagai procedure, fungsi atau unit yang
sudah siap pakai. Misalnya Turbo Pascal Windows 1.5 memiliki suatu unit
untuk memproses output yaitu wincrt, gotoxy, yang dengan mudah bisa
dipakai oleh programmer di dalam menuliskan kode-kode programnya.
Dinamakan Identifier Standar karena suatu kompiler tidak harus memilikinya,
masing-masing kompiler dimungkinkan mempunyai identifier yang berbeda


                                                                                    5
untuk suatu tugas yang hampir sama. Misalnya Turbo Pascal versi DOS
menggunakan crt untuk melakukan fungsi yang sama dengan wincrt (TPW
1.5). Beberapa Identifier Standar yang dimiliki oleh kompiler-kompiler Pascal
antara lain:
Abs, arctan, Boolean, char, cos, dispose, eof, eoln, exp, false, input, integer, ln
maxint, new, odd, ord, output, pack, page, pred, read, readln, real, reset,
rewrite, round, sin, sqr, sqrt, succ, text, true, trunc, write, writeln


1.3.3 Reserved Word
   Yaitu identifier yang sudah didefinisikan dan digunakan oleh bahasa
PASCAL sendiri (Kita tidak bisa menamai identifier kita dengan ini). Contoh
identifier reserved word adalah :
and array begin case const div do downto else end file for forward function
goto if in label mod nil not of or packed procedure program record repeat set
then to type until var while with


1.4 Variabel dan Konstanta
1.4.1 Variabel
    Variabel adalah identifier      berisi data yang dapat berubah-ubah dalam
program. Variabel dapat digunakan dalam program jika telah didefinisikan
terlebih dahulu. Cara mendefinisikan variabel adalah sebagai berikut :
a. Memberikan nama variabelnya dengan menyebutkan kata perintah Var
    terlebih dahulu.
b. Menentukan tipe data dari variable tersebut.


Contoh pendefinisian variabel :
Var angka:integer;
Atau
Var
    Angka:integer;




                                                                                 6
Penulisan variabel di atas terserah dengan pemrogram, gaya penulisan pertama
atau kedua semuanya benar.


1.4.2 Konstanta
   Konstanta adalah identifier berisi data yang nilainya tidak berubah dalam
program. Konstanta dapat digunakan dalam program jika telah didefinisikan
terlebih dahulu. Cara mendefinisikan konstanta adalah sebagai berikut :
c. Memberikan nama konstantanya dengan menyebutkan kata perintah Const
   terlebih dahulu.
d. Menentukan nilai konstanta tersebut.


Contoh pendefinisian Konstanta:
Const phi=3.14;
Atau
Const
   Phi=3.14;

Penulisan konstanta di atas terserah dengan pemrogram, gaya penulisan
pertama atau kedua semuanya benar.


1.5 Pemrograman Pascal
1.5.1 Aturan Program Pascal
   Pemrograman pascal merupakan pemrograman terstruktur yang memiliki
beberapa aturan antara lain :
a. Akhir sebuah program Pascal ditandai dengan tanda baca titik (.) setelah

   END yang paling akhir.

b. Tanda titik koma (;) merupakan pemisah antar instruksi satu dengan

   lainnya.

c. Beberapa statement boleh ditulis menjadi satu baris dipisahkan dengan

   tanda baca titk koma (;)

d. Bersifat non case sensitive atau tidak membedakan huruf besar dan huruf

   kecil dalam hal penulisan perintah.


                                                                          7
e. Baris komentar diletakkan diantara tanda (* *) atau diantara tanda { }


                            Contoh Program 1.3 :
  {------------ Menulis Program Pascal ------------}
  {Program ini adalah contoh program pascal sederhana}
  {Oleh : }
  {NIM : 080101001}
  {Nama : Abram}

   Program LuasSegitiga;
   Uses Wincrt;
   BEGIN
      Writeln(’hello’);
      Write(’Program Pascal Pertamaku’);
   END.



1.5.2 Perintah Dasar Program Pascal
a. Write dan Writeln
   Untuk menampilkan hasil ke layar, anda dapat menggunakan perintah
   write atau writeln. Antara write dan write terdapat sedikit perbedaan.
   Perbedaanya adalah, write akan menampilkan hasil ke layar tanpa disertai
   ganti baris sehingga tampilan berikutnya akan terletak pada baris yang
   sama. Sedangkan writeln, akan menampilkan hasil ke layar dengan disertai
   pergantian baris sehingga tampilan berikutnya akan terletak pada baris
   berikutnya.


   Bentuk Umum
     Write(<variabel|string|numerik>);
     Writeln(<variabel|string|numerik>);


                      Contoh Program 1.4 :
   Program ContohWrite01;
   Uses Wincrt;
   BEGIN
      Writeln(’Selamat !!!’);
      Write(085850410900);
      Write(’ Anda Beruntung ’);
      Write(’+++++++++++++++++’);
   END.


                                                                            8
    Jika anda ingin menampilkan string (berupa kalimat, kata, karakter
   ataupun simbol) tertentu, maka harus diikuti dengan tanda kutip tunggal
   (‗) dan diakhiri dengan tanda kutip tunggal juga. Namun, jika anda ingin
   menampilkan isi variabel, konstanta ataupun data numerik maka anda
   tidak perlu menuliskannya dengan tanda kutip tunggal pada awal ataupun
   akhir.


                       Contoh Program 1.5 :
   Program ContohWrite02;
   Uses Wincrt;
   Const phi=3.14;
   Var jari:integer;
        Luas:real;
   BEGIN
      Jari:=10;
      Luas:=phi*jari*jari;
      Writeln(Jari)
      Write(Luas:5:3);
   END.



b. Read dan Readln
   Read dan readln memiliki fungsi yang sama yaitu meminta inputan dari
   keyboard. Pada kebanyakan buku ada yang menuliskan bahwa read dan
   readln berbeda namun perbedaan read dan readln sangatlah tipis.
   Perbedaanya adalah jika anda menggunakan readln maka setelah anda
   memasukkan data kemudian menekan tombol enter akan disertai dengan
   pergantian baris sedangkan read tidak. Akan tetapi, penulis telah mencoba
   hal   tersebut   dan   hasilnya   ternyata   sama,   kedua-duanya     disertai
   perpindahan baris.


1.6 Tipe Data
   Secara sederhana tipe data dapat didefinisikan dengan istilah tempat untuk
menentukan pemberian nilai terhadap suatu variabel sesuai atau tidak dengan
nilai yang diberikan oleh user. Dalam versi lain tipe data juga diartikan sebagai


                                                                               9
batasan terhadap fungsi tanda pengenal terhadap semua nilai yang diterima.
logika yang dapat kita berikan adalah ketika kita menempatkan tanda pengenal
harga hanya mengenal angka, maka ketika kita memberikan nilai berupa string
maka secara otomatis data tersebut akan ditolak karena nilai tersebut tidak
dikenali oleh tipe data yang diberikan. Jadi, ada beberapa hal yang harus
diperhatikan dalam memilih atau menentukan tipe data yaitu :
c. Jenis data yang diolah (angka, huruf, desimal, bilangan bulat atau
   kombinasi angka dan huruf).
d. Jangkauan/range nilai dari tipe data yang dipilih.


1.6.1 Tipe Data Sederhana
   Merupakan tipe data dasar yang sering dipakai oleh program, meliputi:

integer (bilangan bulat), real (bilangan pecahan), char (alphanumerik dan

tanda baca), dan boolean (logika). Untuk data integer dan real masing-masing

terbagi menjadi beberapa kategori

a. Bilangan Integer

   merupakan tipe data berupa bilangan bulat, terbagi atas beberapa kategori

   seperti terlihat dalam tabel 1. tabel 1 menunjukkan jenis data, ukuran dalam

   memori dan rentang nilainya. Berikut ini adalah rentang nilai tipe data

   integer :
                            Tabel 1.1 Tipe Data Integer

              Tipe Data             Ukuran Tempat                  Rentang Nilai
    Byte                  1 byte                          0 s/d +255
    Shortint              1 byte                          -28 s/d +127
    Integer               2 bytes                         -32768 s/d 32767
    Word                  2 bytes                         0 s/d 65535
    Longint               4 bytes                         2147483648 s/d 2147483647




                                                                                      10
  Tipe data integer adalah tipe data yang digunakan untuk bilangan bulat,

  baik bulat positif maupun bulat negatif. Tipe data ini tidak bisa digunakan

  jika data anda menghasilkan bilangan desimal.


                      Contoh Program 1.6 :
  Program LuasSegitiga;
  Uses Wincrt;
  Var
        Alas, Tinggi,Luas: integer;
  BEGIN
        write(’Inputkan Alas Segi Tiga     = ’);
        Readln(Alas);
        write(’Inputkan Tinggi Segi Tiga = ’);
        Readln(Tinggi);
        Luas := 0.5*Alas*Tinggi;
        Write (’Luas Segi Tiga : ’,Luas);
  END.


  Pada contoh program di atas terdapat kesalahan dalam pemberian tipe data
  variabel Luas. Luas menghasilkan angka desimal karena perhitungannya
  melibatkan angka desimal. Jadi, tipe data untuk variabel luas tidak boleh
  tipe data integer.


b. Bilangan Real

  Bilangan real atau nyata merupakan jenis bilangan pecahan, dapat

  dituliskan secara biasa atau model scientific . Contoh bilangan real: 34.265 -

  3.55 0.0 35.997E+11, dimana E merupakan simbol perpangkatan 10. Jadi

  452.13 mempunyai nilai sama dengan 4.5213e2. Penggolongan tipe data

  bilangan real adalah sebagai berikut :




                                                                             11
                              Tabel 1.2 Tipe Data Real

            Tipe Data               Ukuran Tempat                  Rentang Nilai
   real                   6 bytes                        2.9 x 10-39 s/d 1.7 x1038
   single                 4 bytes                        1.5 x 1045 s/d 3.4 x 1038
   double                 8 bytes                        5.0 x 10-324 s/d 1.7 x 10308
   Extended               10 bytes                       3.4 x 10-4932 s/d 1.1 x 104932
   comp                   8 bytes                        -9.2x 1018 s/d 9.2x 1018


   Tipe data bilangan real adalah tipe data yang digunakan untuk bilangan
   desimal. Jangkauan nilainya juga sangat besar sehingga pada saat
   menggunakan tipe data ini kita harus membuat format tampilannya.


                      Contoh Program 1.7:
  Program LuasSegitiga;
  Uses Wincrt;
  Var
        Alas, Tinggi: integer;
        Luas        : Real;
  BEGIN
        write(’Inputkan Alas Segi Tiga    = ’);
        Readln(Alas);
        write(’Inputkan Tinggi Segi Tiga = ’);
        Readln(Tinggi);
        Luas := 0.5*Alas*Tinggi;
        Write (’Luas Segi Tiga : ’,Luas:4:2);
  END.


   Kode program Luas:4:2 adalah cara menformat tampilan tipe data real. Hasil
   dari luas akan ditampilkan dengan 2 angka dibelakang koma.


e. Char

   Tipe data ini menyimpan karakter yang diketikkan dari keyboard, memiliki

   266 macam yang terdapat dalam tabel ASCII (American Standard Code for

   Information Interchange). Contoh: 'a' 'B' '+', dsb. Yang perlu diingat bahwa

   dalam menuliskannya harus dengan memakai tanda kutip tunggal. Jenis




                                                                                          12
  data ini memerlukan alokasi memori sebesar 1(satu) byte untuk masing-

  masing data.


                          Contoh Program 1.8 :
  Program Jawaban;
  Uses Wincrt;
  Var
        Jawab : Char;
  BEGIN
        write(’Inputkan Jawaban Anda [Y/T] = ’);
        Readln(jawab);
        If upcase(jawab)=’Y’ then write (’Ya’)
        Else if upcase(jawab)=’T’ then write(’Tidak’)
        Else write(’Jawaban Salah’);
  END.

  Fungsi Upcase berguna untuk mengubah semua karakter yang diinput user
  diubah dalam huruf kapital.


f. Tipe Data Boolean

  Merupakan tipe data logika, yang berisi dua kemungkinan nilai: TRUE

  (benar) atau FALSE (salah). Turbo Pascal for Windows memiliki tiga macam

  jenis ini yaitu: Boolean, WordBool, dan LongBool. Tipe boolean memakai

  memori paling kecil, sedangkan WordBool dan LongBool dipakai untuk

  menulis program yang sesuai dengan lingkungan Windows.


                      Contoh Program 1.9 :
  Program display_bool;
  uses wincrt;
  BEGIN
        writeln(ord(true));
        writeln(ord(false));
  END.




                                                                       13
1.6.2 Tipe Data Terstruktur
   Tipe ini terdiri atas : array, record, set, dan file. String adalah tipe data jenis

array, tetapi karena string memiliki kekhasan tersendiri sebagai array dari

karakter maka penulis perlu memberikan penjelasan tersendiri.

a. String

   Merupakan suatu data yang menyimpan array (larik), sebagai contoh

   'ABCDEF' merupakan sebuah konstanta string yang berisikan 6 byte

   karakter. Ukuran Tempat untuk tipe data ini adalah 2 s/d 256 byte, dengan

   jumlah elemen 1 s/d 255. String dideklarasikan dengan string [konstanta]

   atau string. Bila ukuran string tidak didefinisikan maka akan banyak

   memakan ruang, karena ukuran string menyesuaikan dengan defaultnya.

   Misalkan

   var kata: string [20]; atau var kata: string; karena string merupakan array

   dari karakter. Maka kata[1] merupakan karakter pertama dari string,

   kemudian kata[2], merupakan elemen kedua, dst.

   Routines pada Pascal untuk manipulasi string :

      1) Length : menghasilkan panjang string.

                      Syntax : length(s)

                      Contoh : n:=length(s);

                      Misal s:='pemrograman'; n akan sama dengan 11.

      2) Copy       : mengkopi suatu ekstrak karakter dari sebuah string.

                       Syntax : copy(s,dari,banyaknya)

                      Contoh : st:=copy(s,5,3); mengekstrak 3 karakter dari s,

                      dimulai dari karakter kelima.

                      Misal s:='Who are you ?'; st adalah 'are'.

                      catatan: bila indek lebih bear dari panjang string maka

                      hasilnya akan kosong:

                      Contoh : st:=copy(s,15,4); { kosong} jika banyaknya string


                                                                                   14
              yang akan diekstrak lebih besar dari s, maka hasilnya

              adalah bagian yang tersisa dari string.

              Contoh : st:=copy(s,9,10); st hasilnya adalah 'you ?'

3) Pos      : menghasilkan posisi dari suatu substring dari suatu string.

              Syntax : Pos(substr,s)

              Contoh : n:=pos('are','Who are you ?'); { n:=5; }

              Jika substring tidak ditemukan, maka hasilnya 0.

4) Val      : mengkonversi string ke numerik.

              Syntax : val(strvar,numvar,errorcode)

5) strvar   : adalah variabel string yang akan dikonversi, numvar

              variabel numerik ( bisa integer atau real, dan errorcode

              adalah variabel integer yang menyimpan error code (kode

              kesalahan). Jika errorcode adalah 0, konversi berhasil.

              Sebaliknya, hal ini akan menunjukan posisi dimana pada

              strvar yang menyebabkan kegagalan.

6) Str      : mengkonversi numerik ke string.

              Syntax : str(numvar,strvar)

7) Concat : Menggabungkan dua atau lebih string.

              Syntax : concat(s1,s2,...,sn)

8) Insert   : Menyisipkan suatu string ke dalam string yang lain.

              Syntax : insert(asal,target,indek)

9) Delete   : menghapus n karakter dari string s berawal dari indek i.

              Syntax : delete(s,i,n);

10) Fillchar : mengisi string s dengan karakter c sampai s sama dengan

              n-1 panjang karakternya.

              Syntax : fillchar(s,n,c); Hati-hati : s[0] akan tertumpuki,

              jangan lupa menambahkan s[0]:=chr(n-1); untuk

              menormalkannnya.

                                                                            15
b. Subrange

   Adalah suatu range yang menunjukkan nilai terkecil dan nilai terbesar yang

   akan digunakan. Deklarasi subrannge berbetuk Type

c. Enumerated

   Atau tipe data skalar menunjukkan kumpulan dari nilai yang urutannya

   sudah pasti. Nilai dari tipe yang dideklarasikan ini akan diwakili dengan

   pengenal-pengenal yang akan menjadi suatu nilai konstanta.

d. Tipe File

   File atau berkas adalah kumpulan sejumlah komponen yang bertipe data

   sama,   jumlahnya    tidak   tertentu   dan   biasanya   tersimpan   dalam

   penyimpanan luar.

e. Tipe Pointer

   Pointer merupakan variabel khusus yang berisi suatu address (alamat) di

   lokasi lain didalam memory. Suatu variabel yang points(menunjuk) ke

   sesuatu sehingga disebut pointer.




                                                                           16
Topik Pembahasan :
2.1. Array
2.1.1. Array Satu Dimensi
2.1.2. Array Dua Dimensi
2.1.3. Array Tiga Dimensi
2.1.4. Array Multidimensi
2.2. Operasi Set
2.2.1. Deklarasi Set
2.2.2. Operasi-Operasi Dalam Set

Tujuan :
Mempelajari tentang tipe data array mulai satu dimensi
hingga banyak dimensi dan operasi-operasi yang dapat
dilakukan dalam set




                                                   17
2.1. Array
   Array adalah suatu tipe data terstruktur yang terdapat dalam memori yang
terdiri dari sejumlah elemen (tempat) dan mempunyai tipe data yang sama dan
gabungan dari beberapa variabel sejenis serta memiliki jumlah komponen yang
jumlahnya tetap.    Elemen elemen array tersusun secara sequential dalam
memori komputer. Array dapat berupa satu dimensi, dua dimensi, tiga dimensi
ataupun banyak dimensi.
   Array merupakan struktur data yang statis, yaitu jumlah elemen yang ada
harus ditentukan terlebih dahulu dan tak bisa di ubah saat program berjalan.
Untuk menyatakan array dalam PASCAL kita harus terlebih dahulu
mendefinisikan jumlah elemen array dan juga mendefinisikan tipe data dari
elemen array.
   Jika anda seorang pemrogram pemula, mungkin saja timbul pertanyaan :
―mengapa harus menggunakan array?‖. Sekarang coba bayangkan jika anda
harus menginputkan nilai sebanyak seratus atau bahkan seribu untuk jenis data
yang sama. Tentu saja kita harus mendefinisikan variabel sebanyak seratus atau
seribu buah. Tetapi dengan array kita cukup mendefinisikan 1 variabel karena
data yang diolah nilainya sama. Untuk lebih jelasnya perhatikan contoh
program berikut ini :


                       Contoh Program 2.1:
   Program Metode_Konvensional;
   Uses Wincrt;
   Var
       a1,a2,a3,a4,a5,a6,a7,a8,a9,a10 : integer;
   begin
       {Proses Pemasukan Bilangan}
       Write(‘Angka ke 1 : ’);readln (a1);
       Write(‘Angka ke 2 : ’);readln (a2);
       Write(‘Angka ke 3 : ’);readln (a3);
       Write(‘Angka ke 4 : ’);readln (a4);
       Write(‘Angka ke 5 : ’);readln (a5);
       Write(‘Angka ke 6 : ’);readln (a6);
       Write(‘Angka ke 7 : ’);readln (a7);
       Write(‘Angka ke 8 : ’);readln (a8);
       Write(‘Angka ke 9 : ’);readln (a9);


                                                                           18
      Write(‘Angka ke 10 : ’);readln (a10);
      {Proses pencetakan bilangan}
      Clrscr;
      Writeln(‘angka ke 2 :’,a1);
      Writeln(‘angka ke 3 :’,a2);
      Writeln(‘angka ke 4 :’,a3);
      Writeln(‘angka ke 4 :’,a4);
      Writeln(‘angka ke 5 :’,a5);
      Writeln(‘angka ke 6 :’,a6);
      Writeln(‘angka ke 7 :’,a7);
      Writeln(‘angka ke 8 :’,a8);
      Writeln(‘angka ke 9 :’,a9);
      Writeln(‘angka ke 10 :’,a10);
   end.


    Mungkin metode diatas masih bisa diterima karena jumlah data hanya 10
buah tetapi jika seratus buah, akan lebih mudah jika kita menggunakan tipe
data array. Kode program diatas, apabila diubah dengan menggunakan tipe
data array akan terlihat sebagai berikut :


                       Contoh Program 2.2:
Program Contoh_Array;
Uses crt;
var
   a:array[1..10] of integer;
   i:integer;
Begin
     clrscr;
     {Menginput Data}
     for i:=1 to 10 do
     begin
           write('Angka ke ',i,' : ');
           readln(a[i]);
     end;
     {Mencetak Data}
     for i:=1 to 10 do writeln('angka ke ',i,' : ',a[i]);
end.



   Berdasarkan penggalan program di atas dapat dilihat bahwa betapa
merepotkan bila kita harus menampung data yang sama dengan jumlah yang
sangat banyak. Bisa dibayangkan berapa variabel yang harus kita definisikan



                                                                        19
untuk menampung data tersebut jika data lebih dari 100. Itulah alasan mengapa
kita menggunakan array.


2.1.1. Array Satu Dimensi
   Array satu dimensi tidak lain adalah kumpulan elemen-elemen yang
identik, yang tersusun dalam satu baris. Elemen tersebut memiliki tipe data
yang sama, tetapi isi dari elemen tersebut boleh berbeda. Array satu dimensi
dalam matematika disebut sebagai vektor. Untuk lebih jelasnya perhatikan
gambar berikut :


  23      43       12      78     90      56      45      76      88      67
   1       2       3        4      5       6      7       8       9       10


                    Gambar 2.1 Konsep Array Satu Dimensi


Secara logika pendefinisian array di atas merupakan sekumpulan kotak,
dimana tiap kotak mempunyai nilai indeks integer 1, 2, 3, ...,9, 10 tiap elemen
array ditandai dengan:
A[1],   A[2],   A[3],    A[4],   A[5],   A[6],   A[7],   A[8],   A[9],   A[10]
A menunjukkan nama dari array.


Bentuk Umum :
     Type
          <NamaArray>=array[IndexArray] of TipeData;
Contoh :
     Type
          Gaji=array[1..10] of longint;
          Logika=array[boolean] of integer;
     Var
          GajiPegawai:gaji;
          Logikaku:logika;


Pendeklarasian array diawali dengan kata baku type dan diikuti dengan nama
array dan tanda sama dengan (=), lalu kata baku array beserta range indeks dan


                                                                               20
diakhiri dengan kata baku of beserta tipe datanya. Selain pendefinisian dengan
type, array juga dapat didefinisikan dengan variabel biasa dengan kata var.


Contoh :
     Var
               Gaji:array[1..10] of longint;
               Logika:array[boolean] of integer;


Anda juga dapat mendeklarasikan sebuah tipe data baru yang terdiri dari
elemen yang anda sebutkan satu persatu untuk kemudian dipakai sebagai
index array. Tipe data tersebut disebut tipe data enumerasi.

Contoh :
     Type
               Hari=(Senin, Selasa,Rabu,Kamis,Jumat,Sabtu,Minggu)
               PendapatanHarian=array[hari] of real;
      Var
               Penghasilan:PendapatanHarian;

Anda juga dapat menggunakan konstanta untuk kemudian dipakai dalam
index array.
Contoh :
     Const
               Awal=1;
               Akhir=100;
      Var
               Jumlah:array[awal..akhir] of integer;


                      Contoh Program 2.3:
   Program ArraySatu;
   uses wincrt;
   Var
       i,n:integer;
       Data:array[1..100] of integer;
   BEGIN
       Write(‘Input Banyak Data = ‘);
       Readln(n);
       {Input Data}
       For i:=1 to n do begin
          Write(‘Input Data Ke ‘,i);
          Readln(data[i]);
       End;
       {Cetak Data}


                                                                              21
        For i:=1 to n do begin
           Writeln(i:3,’ ‘,data[i]:4);
        End;
   END.



   Pada program di atas kode data:array[1..100] of integer, memiliki arti
pemesanan array sebanyak 100 dengan tipe data integer. Data dengan tipe
integer dimasukkan satu persatu kemudian baru dapat ditampilkan secara
bersama-sama di monitor.
   Array satu dimensi juga kita jumpai pada tipe data string. Tipe data string
merupakan contoh dari array satu dimensi. Selain pendefinisian array yang
telah penulis sebutkan, array juga dapat didefinisikan nilainya secara langsung
hanya saja nilainya konstan. Perlu diingat juga bahwa untuk array yang bersifat
konstan, jumlah array yang dipesan harus sama dengan jumlah elemen array
yang didefinisikan.
   Perhatikan contoh program berikut :
                       Contoh Program 2.4:
   Program Array_Konstan;
   Uses Wincrt;
   Const
       Huruf:array[1..5] of char =(‘A’,’B’,’C’,’D’,’E’);
   Var
       i:integer;
   Begin
       Clrscr;
       For i:=1 to 5 do writeln(huruf[i]);
       Readln;
   End.



Dalam contoh program di atas, elemen array hanya terdiri dari lima huruf yaitu
A, B, C, D dan E. elemen tersebut tidak dapat diganti karena array didefinisikan
secara konstan.




                                                                             22
Selain angka, data yang kita masukkan juga dapat berupa kata atau kalimat.
Perhatikan contoh program berikut :
                       Contoh Program 2.5:
  Program ArrayDataRerata;
  uses Wincrt;
  var
      Nama:array[1..100] of String;
      Nilai:array[1..100] of integer;
      n,i,total:integer;
      rata:real;
  begin
      write('Jumlah komponen nilai [max 100] : ');
      readln(n);
      total:=0;
      {menginput data dan mengitung total nilai}
      for i:= 1 to n do begin
          writeln('Data ke ',i,' = ');
          write(‘Nama : ‘);readln(nama[i]);
          Write(‘Nilai : ‘);readln(nilai[i]);
          total:=total+Nilai[i];
       end;
  {mengitung Nilai Rata}
       rata:= total/n;
       clrscr;
  {Mencetak nilai yang di inputkan dan juga nilai rata-
  rata}
  for i:= 1 to n do
       writeln(i,’   ‘,nama[1],’      ‘,nilai[i]);
  Write(‘Nilai Rata-rata = ‘,rata:4:2);
  end.



2.1.2. Array Dua Dimensi
   Array dua dimensi dalam bahasa matematis sering dikenal dengan nama
matrik. Array dua dimensi merupakan perluasan dari array satu dimensi. Jika
pada array satu dimensi hanya terdiri dari satu baris dengan beberapa kolom,
maka pada array dua dimensi, terdiri dari beberapa baris dan beberapa kolom.
Array dua dimensi digambarkan sebagai berikut :




                                                                         23
                        [1]   [2]   [3]   [4]   [5]   [6]   [7]

                  [1]    4    5     6     8     9     2     4

                  [2]    6    8     9     4     3     5     7

                  [3]    3    5     6     8     3     3     2

                  [4]    3    6     8     9     0     8     5

                  [5]    8    4     4     6     2     1     3



                   Gambar 2.2 Konsep Array Dua Dimensi


Bentuk Umum :
      Type
            <NamaArray>=array[IndexArray1, IndexArray2] of TipeData;
Contoh :
      Type
            matrik=array[1..3,1..2] of longint;
            Logika=array[1..5,boolean] of integer;
      Var
            matriku:matrik;
            Logikaku:logika;
Contoh :
      Type
            Baris=1..3;
            Kolom=1..4;
            Ordo=array[baris,kolom] of byte;
      Var
            Matrik:Ordo;

Contoh :
      Var matrik : array[1..3,1..2] of longint;




   Array dua dimensi juga dapat dianggap sebagai array di dalam array
sehingga array dua dimensi dapat didefinisikan sebagai berikut :


Contoh :
      Var matrik : array[1..3]of array [1..2] of longint;




                                                                       24
   Perhatikan contoh program berikut ini :
                       Contoh Program 2.6 :
   Program ArrayDuaDimensi1;
   uses Wincrt;
   Type
       ordo=array[1..3,1..2] of byte;
   var
     matrik:ordo;
     b,k:byte;
   Begin
   {Input Data Matrik}
       for b:=1 to 3 do begin
          For k:= 1 to 2 do begin
             Write('Isi Baris ',b,' kolom ',k,' = ');
             Readln(matrik[b,k]);
          End;
       End;
   (Cetak Data Matrik}
       for b:=1 to 3 do begin
          For k:=1 to 2 do begin
             Write(matrik[b,k],' ');
          End;
          Writeln;
       End;
   End.


Kode program, di atas akan menghasilkan matrik dengan ordo 3 x 2. Berikut ini
adalah hasil dari kode program di atas :
Isi Baris 1 Kolom 1 = 1
Isi Baris 1 Kolom 2 = 2
Isi Baris 2 Kolom 1 = 3
Isi Baris 2 Kolom 2 = 4
Isi Baris 3 Kolom 1 = 5
Isi Baris 3 Kolom 2 = 6
1 2
3 4
5 6




                                                                          25
 Kode program berikut adalah contoh kode program untuk operasi matrik.
                        Contoh Program 2.7 :
Program ArrayDuaDimensi2;
uses wincrt;
Var
   matrik1,matrik2:array[1..2,1..2] of byte;
   hkurang,htambah:array[1..2,1..2] of integer;
   b,k:byte;
procedure inputmatrik;
begin
     writeln('Input Isi Matrik 1 ');
     for b:= 1 to 2 do begin
          for k:= 1 to 2 do begin
               write('Isi Matrik Baris ',b,' Kolom ',k,' = ');
               readln(matrik1[b,k]);
          end;
     end;
     writeln('Input Isi Matrik 2 ');
     for b:= 1 to 2 do begin
          for k:= 1 to 2 do begin
               write('Isi Matrik Baris ',b,' Kolom ',k,' = ');
               readln(matrik2[b,k]);
          end;
     end;
end;
procedure tambahmatrik;
begin
     for b:= 1 to 2 do begin
          for k:= 1 to 2 do begin
               htambah[b,k]:=matrik1[b,k]+matrik2[b,k];
          end;
     end;
end;
procedure kurangmatrik;
begin
     for b:= 1 to 2 do begin
          for k:= 1 to 2 do begin
               hkurang[b,k]:=matrik1[b,k]-matrik2[b,k];
          end;
     end;
end;
procedure CetakMatrik;
begin
     clrscr;
     writeln('Isi Matrik 1 ');
     for b:= 1 to 2 do begin
          for k:= 1 to 2 do begin
               write(matrik1[b,k]:4);


                                                                         26
        end;
        writeln;
    end;
    write('tekan enter untuk melihat isi matrik 2');
    readln;
    writeln;
    writeln('Isi Matrik 2 ');
    for b:= 1 to 2 do begin
         for k:= 1 to 2 do begin
              write(matrik2[b,k]:4);
         end;
         writeln;
    end;
    write('tekan enter untuk melihat hasil penjumlahan');
    readln;
    writeln;
    writeln('Hasil Penjumlahan ');
    for b:= 1 to 2 do begin
         for k:= 1 to 2 do begin
              write(htambah[b,k]:4);
         end;
         writeln;
    end;
    write('tekan enter untuk melihat hasil pengurangan');
    readln;
    writeln;
    writeln('Hasil pengurangan ');
    for b:= 1 to 2 do begin
         for k:= 1 to 2 do begin
              write(hkurang[b,k]:4);
         end;
         writeln;
    end;
    writeln;
    write('tekan enter untuk keluar');
    readln;
end;
{Program Utama}
begin
     inputmatrik;
     tambahmatrik;
     kurangmatrik;
     cetakmatrik;
End.




                                                            27
2.1.3. Array Tiga Dimensi
   Array tiga dimensi dapat dikatakan sebagai sebuah bangun ruang. Array
tiga dimensi dapat digambarkan sebagai berikut :




                   Gambar 2.3 Konsep Array Tiga Dimensi


Bentuk Umum :
Type
   <NamaArray>=array[IndexArray1,IndexArray2,IndexArray3] of TipeData;
Contoh :
      Type
            matrik=array[1..3,1..2,1..2] of longint;
      Var
            matriku:matrik;
Contoh :
      Type
            Baris=1..3;
            Kolom=1..4;
            Dimensi=1..2;
            Ordo=array[baris,kolom,dimensi] of byte;
      Var
            Matrik:Ordo;

Contoh :
      Var matrik : array[1..3,1..2,1..2] of longint;




                                                                     28
Cara pendeklarasian array tiga dimensi tidak jauh berbeda dengan yang lain,
hanya penambahan indeks array saja menjadi tiga buah.


2.1.4. Array Multidimensi
   Sebenarnya array multidimensi tidak terlalu sering dipakai seperi array
yang lain. Akan tetapi, bukan berarti pascal tidak memperbolehkan anda untuk
menggunakannya. Array multidimensi tidak jauh berbeda dengan array yang
telah di bahas sebelumnya.

Bentuk Umum :
Type
<NamaArray>=array[IndexArray1,IndexArray2,...,IndexArrayN]of TipeData;



   Pascal tidak menentukan maksimal banyaknya dimensi dalam sebuah
array. Namun, pascal membatasi besarnya memori yang dapat dipakai untuk
array yang didefinisikan tersebut. Besarnya memori maksimal yang dapat
dipakai untuk tiap array yang didefinisikan tidak boleh melebihi atau sama
dengan 64 KB (KiloByte), setara dengan 64 x 1024 byte=65536 byte.
   Bagaimana cara mengetahui besarnya memori yang dibutuhkan oleh array
yang telah kita definisikan ? Ikuti langkah berikut :
1. Anda harus mengetahui besar memori tipe data yang dipakai dalam array
   tersebut. (Lihat Bab I Bagian Tipe Data).
2. Contoh perhitungannya adalah sebagai berikut :
   Misalkan terdapat array :
   Var
       Arr : array [1..200] of byte;
   Maka besar memori yang dibutuhkan untuk array tersebut adalah 2000 x 2
   byte = 4000 byte dan masih lebih kecil dari memori maksimal.
   Contoh array yang melebihi batas maksimal adalah sebagai berikut :
   Var arr1:array[1..256] of string;




                                                                         29
   Besar memori yang dibutuhkan oleh array tersebut adalah 256 x 256 byte =
   65536 byte (sama dengan batas maksimal array , sehingga tidak boleh)
   Var arr2 : array[1..606,0..2,boolean,-1..2] of real;
   Besar memori yang dibutuhkan oleh array tersebut adalah 606x3x2x4x6byte
   =87624 (melebihi batas memori maksimal sehingga tidak boleh)


2.2. Operasi Set


2.2.1. Deklarasi Set
2.2.2. Operasi-Operasi Dalam Set


Latihan
1. Menggunakan Array 1 dimensi buatlah program dengan ketentuan:
       Input---     Nilai PPN, Nilai PPA, Nilai Logika, Nilai Agama
       Output-      Total Nilai
       Ket: Nama Array = nilai
            Nama variabel = n
            Jumlah Range = 5


2. Untuk soal no.1 tambahkan proses untuk mendapatkan kelulusan jika
nilai logika > 7 dan proses untuk mendapatkan grade ( A jika total >34, B jika
total > 28, C jika total > 24 dan D jika total <=24 ).




                                     MODUL 3
4. Array Multidimensi
Dalam array multidimensi terdiri atas baris (row) dan kolom (column). Index

                                                                              30
pertama adalah baris dan yang kedua adalah kolom .
SYNTAX
Type nama_array =ARRAY[bawah..atas, bawah..atas] of tipe_data;
var variabel_array : nama_array;


atau dengan menggunakan statemen var :
SYNTAX var variabel_array : ARRAY[bawah..atas, bawah..atas] of tipe_data;
Pernyataan berikut membentuk suatu array integer dengan nama bilangan , 10
x 10 elemen (100).
type matriks = ARRAY [1..10, 1..10] of integer;
var AKU: matriks;


untuk memasukkan tiap elemen maka, diperlukan suatu procedure dengan
mempergunakan struktur pengulangan for ...do tersarangseperti berikut:
procedure ISI_MATRIK(AKU:matriks; m,n:integer);
var
i,j: integer; {faktor pengulang}
begin
for i:=1 to m do
begin
for j:=1 to n do
begin
read(A[i,j]);
end;
readln ;{ini memungkinkan kita menulis tiap baris elemen}
end;
untuk menampilkan tiap elemen maka, digunakan struktur pengulangan for
...do tersarang seperti berikut
procedure TULIS_MATRIK(AKU:matriks; m,n:integer);
var i,j: integer; {faktor pengulang}


                                                                            31
begin
for i:=1 to m do
begin
for j:=1 to n do
begin
write(A[i,j]:6);
end;
writeln ; {ini memungkinkan kita menulis elemen dalam baris dan kolom }
end;
end;
5. Operasi pada Array
Sifat masing-masing elemen array mengikuti jenis data yang dimilikinya, untuk
array dengan tipe bilangan integer atau real kita bisa melakukan berbagai
standar operasi aritmatika seperti penjumlahan, perkalian, pengurangan, dsb.
Yang perlu di garis bawahi, bahwa sifat dari array dimanfaatkan untuk operasi
matrik.


a. Mencari Harga Tertentu pada Array
Mencari suatu elemen data di dalam suatu data merupakan suatu kejadian
yang sering kita alami, contoh: mencari nama mahasiswa dari daftar presensi.
Pencarian beruntun (sequence), merupakan suatu teknik untuk mencari suatu
elemen dalam suatu sistim yang lebih besar.
Contoh.
Misal array A[8], dengan elemen sbb:
A
60 12 76 23 11 42 18 42
Untuk mencari apakah bilangan x=11 ada didalam tabel maka dilakukan
pemeriksaan terhadap :
60 12 76 23 11




                                                                               32
Sehingga ditemukan x pada elemen ke-5, dalam bahasa PASCAL
diterjemahkan seperti berikut:
type PITA = ARRAY [1..8] of integer;
var AKU: PITA;
procedure CARI_MATRIK(AKU: PITA);
var
i: integer; {faktor pengulang}
begin
for i:=1 to 8 do
begin
if AKU[i]:= 11 then
writeln(‗ terdapat bilangan 11 dalam pita ini ‗);
else
writeln(‗ tidak ada bilangan 11, pencarian berhenti ‗);
end;
end;
b. Mencari Harga Maksimum pada Array
Misal array di atas kita cari harga yang tertinggi, maka kita perlu menentukan
nilai tertinggi dahulu sebelum melakukan pencarian ; diawali dengan nilai
maksimum=0
procedure CARI_MAKSIMUM(AKU: PITA);
var
i: integer; {faktor pengulang}
MAKS : integer;
begin
MAKS := AKU[1];
for i:=1 to 8 do
begin
if AKU[i]> MAKS then
MAKS:= AKU[i];


                                                                             33
End;
Writeln(‗NILAI MAKSIMUM = ‘,MAKS);
end;
b. Mencari Harga Minimum pada Array
Misal array di atas kita cari harga yang terendah, maka kita perlu menentukan
nilai terendah dahulu sebelum melakukan pencarian ; diawali dengan nilai
maksimum=3200
procedure CARI_MINIMUM(AKU: PITA);
var
i: integer; {faktor pengulang}
MIN : integer;
begin
MIN := 3200;
for i:=1 to 8 do
begin
if AKU[i]< MIN then
MIN:= AKU[i];
end;
writeln(‗NILAI MINIMUM = ‘,MIN);
end;
c. Matrik
Sebagai perwujudan dari array dua dimensi, operasi aritmatika seperti
penjumlahan, perkalian, dan pengurangan bisa dilakukan.
Contoh.
- Mendefinisikan Elemen
Program OPERASI_MATRIK;
uses wincrt;
type
matrik=array[1..100,1..100] of real;
var


                                                                            34
m,n, p, q: integer; {dimensi dari matrik}
A,B,C: matrik; {matrik A, B sebagai input, C sebagai hasil}


- Membaca Elemen Matrik
procedure bacamatrik(var A:matrik; m,n:integer);
var
i,j: integer; {faktor pengulang}
begin {read}
for i:=1 to m do
begin {do}
for j:=1 to n do
read(A[i,j]);
readln;
end; {do}
end; {read}
- Menampilkan Elemen Matrik
procedure tulismatrik(A:matrik; m,n:integer);
var
i,j: integer; {faktor pengulang}
begin {write}
for i:=1 to m do
begin {tiap baris}
writeln;
for j:=1 to n do
write(A[i,j]:6:2);
end; {tiap baris}
writeln;
end; {write}
- Penjumlahkan Matrik




                                                              35
procedure check_matrik(A,B,C:matrik; m,n,p,q:integer);
var i,j :integer;
begin
if (m=p) and (n=q) then
begin
for i:=1 to m do
begin
for j:=1 to n do
begin
C[m,n]=A[m,n]+B[m,n])
end;
end;
end
else
writeln('DIMENSI MATRIK TIDAK COCOK')
end;
- Pengurangan Matrik
procedure check_matrik(A,B,C:matrik; m,n,p,q:integer);
var i,j :integer;
begin
if (m=p) and (n=q) then
begin
for i:=1 to m do
begin
for j:=1 to n do
begin
C[m,n]=A[m,n]- C[m,n])
end;
end;
end


                                                         36
else
writeln('DIMENSI MATRIK TIDAK COCOK')
end;


-. Perkalian Matrik
procedure perkalian_matrik(A,B,C:matrik; m,n,p,q:integer);
var i,j, k :integer;
C1: matrik;
begin
if (n=p) then
begin
for i:=1 to m do
begin
for j:=1 to p do
begin {inner product}
C1[i,j]:=0;
for k:=1 to n do
C1[i,j]:=C1[i,j]+A[i,k]*B[k,j];
end; {inner product}
end;
n:=q;
for i:=1 to m do
for j:=1 to n do
C[i,j]:=C1[i,j];
end
else
writeln('DIMENSI MATRIK TIDAK COCOK')
end;
- Transpose Matrik




                                                             37
procedure Transpose(A,B:matrik; m,n,p,q:integer);
var i,j:integer;
begin
for i:=1 to n do
begin
for j:=1 to m do
begin
B[m,n]=A[n,m]
end;
end;
end;
-. Mencari Elemen yang Kosong pada Matrik
procedure CHECK_ZERO_ELEMEN(A,matrik; m,n:integer);
var i,j:integer;
begin
for i:=1 to m do
begin
for j:=1 to n do
begin
if B[m,n]= 0 then
writeln (‗terdapat elemen yang kosong‘)
else
writeln (‗tidak terdapat elemen yang kosong‘)
end;
end;
end;




Latihan.
1.


                                                      38
N1             N2            N3         Total




Buat program Array 2 dimensi untuk memasukkan data nilai matakuliah tiap
mahasiswa.
Kolom- N1, N2, N3, Total
Baris--- Yani, Riski, Eko


2.
     Belajar         Renang            Sepak bola     Musik




Baris--senin, selasa, rabu, kamis, jum’at, sabtu
- Buat program Array 2 dimensi untuk memasukkan jumlah anak yang ikut
kegiatan tertentu.
- Outputkan dalam bentuk matrik 2 dimensi.




                                                                     39
40
                                        MODUL 4
                               RECORD (REKAMAN)
Sebuah record rekaman disusun oleh beberapa field. Tiap field berisi data dari
tipe dasar / bentukan tertentu. Record mempunyai kelebihan untuk
menyimpan suatu sekumpulan elemen data yang berbeda-beda tipenya (di
banding array). Contoh , sebuah record dengan empat buah field.


       Field 1                Field 2             Field 3           Field 4
Cara pendeklarasian dari record adalah sbb:
• Mendefinisikan tipe dari record (jumlah field, jenis tipe data yang dipakai),
• Mendefinisikan variabel untuk dilakukan operasi.
SYNTAX
type
nama_record = record
identifier_1 : tipe_data_1;
:
:
identifier_n : tipe_data_n;
end;
var variabel : nama_record;
Contoh.
type
Data_mahasiswa = record
Nama : string;
Usia : integer;
Kota : String;
Kodepos : integer;
end;
Var
x: Data_mahasiswa;


                                                                                  41
1. Pengaksesan Elemen Record
Nama variable disertai nama field.
x.Nama
x.Usia
x.Kota
x.Kodepos
Contoh.
program RECORD_INTRO;
type tanggal = record
bulan, hari, tahun : integer;
end;
var waktu : tanggal;
begin
waktu.hari :=25;
waktu.bulan:=09;
waktu.tahun:= 1983;
writeln('hari ini adalah ',waktu.hari,':',waktu.bulan,':', waktu.tahun)
end.
2. Pengunaan With … do
Pernyataan with untuk lebih menyederhanakan pengaksesan field-field pada
record. Pemrograman dapat mengakses field cukup dengan menyebutkan
nama field-nya saja. Misalkan pernyataan :
x.Nama
x.Usia
x.Kota
x.Kodepos
menjadi
with x do
Begin
Nama


                                                                           42
Usia
Kota
Kodepos
end
Contoh.
program RECORD_INTRO;
type tanggal = record
bulan, hari, tahun : integer;
end;
var waktu : tanggal;
begin {program utama}
with waktu do {mulai with}
begin
hari :=25;
bulan:=09;
tahun:=1983;
writeln('hari ini adalah ',hari,':',bulan,':', tahun)
end {akhir with}
end.
3. Array dari Record
Suatu array dapat juga berisi record contoh suatu deklarasi record tanggal.
type tanggal = record
bulan, hari, tahun : integer;
end;
var waktu : tanggal;
kemudian kita membentuk suatu array dari record ini, namakan birthdays.
var birthdays : array[1..10] of tanggal;
pernyataan ini akan membentuk suatu array dengan 10 elemen. Dimana tiap
elemen adalah sebuah record tanggal, yaitu, terdiri atas bulan, hari, tahun
dengan tipe data Integer.


                                                                              43
Digambarkan seperti berikut:




Contoh Pemberian nilai awal dari masing-masing elemen birthdays:
Birthdays[1].hari :=25;
Birthdays[1].bulan:=09;
Birthdays[1].tahun:=1983;
4. Record di dalam Record
Record bisa berisi record lain sebagai field. Seperti contoh record tanggal dan
jam dikombinasikan menjadi sebuah record saat ini,
type tanggal = record
bulan, hari, tahun : integer;
end;
type waktu =record
jam, menit, detik : integer;
end;
type waktu_ini =record
tanggal_ini : tanggal;
waktu_ini : waktu
end;
Kemudian kita perlu membuat variabel kerja
var saat_ini : waktu_ini;
pemberian nilai akan terjadi seperti di bawah ini:



                                                                                  44
saat_ini.tanggal.bulan:= 11;
saat_ini.tanggal.hari:= 2;
saat_ini.tanggal.tahun:= 1985;
saat_ini.waktu.jam:= 3;
saat_ini.waktu.menit:= 3;
saat_ini.waktu.detik:= 33;


Latihan.
1.




Nama Record--- Barang
Nama Field----- Kd_barang, Nama, Harga, Jumlah


Buat program untuk input dan output dengan menggunakan metode
mengakses record no.1 ( nama variabel disertai nama field ).


2. Dengan gambar yang sama, buat program untuk input dan output dengan
menggunakan metode mengakses record no.2 ( menggunakan with .. do ).


3.
       1                     2                 3




                                                                       45
Nama array--- Mahasiswa
Nama Record- Mhs
Nama variable-- M
Nama Field-- NIM, Nama, Alamat


Buat program untuk input dan output dengan menggunakan metode
mengakses record dalam Array 1 Dimensi. ( Gunakan perulangan dan with..do
).


4.
             1                       2                       3




Nama array--- Nilai
Nama Record-Data_nilai
Nama variable-- N
Nama Field-- N1, N2, N3
Ordo---------- 3x3


Buat program untuk input dan output dengan menggunakan metode
mengakses record dalam Array 2 Dimensi. ( Gunakan perulangan dan with..do
).



                                                                      46
47
                                 MODUL 5
                            STACK ( Tumpukan )


- Adalah tumpulan data yang seolah-olah ada data di atas data lain.
- Suatu metode untuk Input dan hapus di dalam memori komputer.


Konsep utama dalam STACK adalah LIFO ( Last In First Out ).
Contoh:

                                     K
                            M        e
      5   Guntur            a        l
                            s        u
      4   Aditya            u        a
                            k        r
      3   Tyas
      2   Hendra
      1   Dyah


Data nomor 1 datang/masuk duluan, data nomor 5 yang paling atas yang
keluar terlebih dahulu.


Algoritma:
   1. Input/tambah data
             Jika ada input maka no stack/no tumpukan yang semula 0 akan
              tambah 1 demi 1 sampai maksimal tumpukan.


   2. Pengambilan data
             Jika ada pengambilan data maka data dipindahkan di variabel
              lain contohnya temp. Dan posisi tumpukannya yang semula
              maksimal akan berkurang 1 demi 1 sampai posisi 0 kembali.




                                                                          48
1. Deklarasi STACK


  Type
           Const
           Max = 5;
           Nama record = Record
                     Data : type data;
                     Top       : byte;
           End;
           Nama_array = ARRAY [1..max] of Nama record;
  Var
           STACK : nama Array;


           1                     2       3          4

    Data       Top

    Dyah        1




  Nama Array----- Barang
  Nama Record--- Coba
  Nama Variabel-- Stack


  Contoh Deklarasi dari gambar diatas:


  Type
           Coba = record
           Data :string;
           Top       : byte;
           End;


                                                         49
  Barang = ARRAY [1..4] of coba;
  Var
         Stack:barang;


2. Operasi pada STACK
     CREATE
      Membuat stack baru yang masih kosong.


      Procedure create;
      Begin
         Stack.top:=0;
      End;


     FULL
      Untuk memeriksa apakah stack sudah penuh atau belum.


      Fuction full:bolean;
      Begin
         Stack.top:=max;
      End;


     PUSH
      Menambah sebuah elemen ( data ) kedalam stack
      Syarat: tidak bisa dilakukan jika stack sudah penuh.


      Procedure push ( input:string );
      Begin
         If not full then
         Begin
                 Stack.top:=stack.top;


                                                             50
               Stack.data:=input;
       End;
    End;


   EMPTY
    Fuction empty: bolean;
    Begin
       Empty:=false;
       If top:=0 then empty:=true;
    End;


   POP
    Mengambil elemen teratas dari stack.
    Syarat: Stack tidak boleh kosong.


    Procedure Pop ( elemen:string );
    Begin
       If not empty then
       Begin
       Elemen:=stack.data;
       Stack.top:=top – 1;
       End;
    End;




                                           51
Contoh:
        1                 2              3             4




Uses wincrt;
Type
kelas = ARRAY[1..4] of string;
Var
        Stack: kelas;
        top:byte;
        Elemen: string;
        I : integer;
Begin
top:=0;
For i:=1 to 4 do
Begin
        Writeln('masukkan nama ke', ' ',i,' ','='); readln(stack[i]);
      top:=top+1;
End;
writeln('posisi tumpukan=',top);
Writeln('pengambilan data');
For i:=1 to 4 do
Begin
        Elemen:=stack[i];
        top:=top - 1;
End;
writeln;


                                                                        52
Writeln('data elemen sekarang=',elemen);
writeln('posisi tumpukan=',top);
Readln;
End.


Latihan.
1.

       Aditya




stack=0                            Temp


Buat program untuk menambah dan mengambil data dari stack.


                    3                  2              1
2.
           gauthama                putra          aditya




                1                  2              3

           Gauthama                putra              aditya



                                           temp
Buat program untuk menambah dan mengambil data kemudian diletakkan
pada array yang bernama temp.




                                                                     53
                                  MODUL 6
                            QUEUE ( ANTRIAN )


- Kumpulan data dimana data masuk dan keluar pada ujung yang berbeda.
- Konsep utama FIFO ( Fisrt In First Out ).


Contoh:
                   1               2              3

                 Aditya            putra        Gauthama




Data nomor 1 datang/masuk dan keluar duluan.


Algoritma:
   1. Input/tambah data
             Jika ada input maka no antrian yang semula 0 akan tambah 1
              demi 1 sampai maksimal antrian.


   2. Hapus/Pengambilan data
             Jika ada pengambilan data maka data dipindahkan di variabel
              lain contohnya temp, antrian ke-dua akan maju ke antrian
              pertama dan seterusnya. Dan jumlah antrian yang semula
              maksimal akan berkurang 1 demi 1 sampai antrian 0 kembali.




                                                                           54
3. Deklarasi Queue
   Type
           Const
           Max = 5;
           Nama record = Record
                     Data : type data;
                     Top       : byte;
           End;
           Nama_array = ARRAY [1..max] of Nama record;
   Var
           Antri : nama Array;


           1                     2        3         4

    Data       Top

    Dyah        1




   Nama Array----- Barang
   Nama Record--- Coba
   Nama Variabel-- Antri


   Contoh Deklarasi dari gambar diatas:
   Type
           Coba = record
           Data :string;
           Top       : byte;
           End;
   Barang = ARRAY [1..4] of coba;
   Var     Antri:barang;


                                                         55
4. Operasi pada queue
      CREATE
       Membuat antrian baru yang masih kosong.


       Procedure create;
       Begin
          antri.top:=0;
       End;


      FULL
       Untuk memeriksa apakah antrian sudah penih..


       Fuction full:bolean;
       Begin
          antri.top:=max;
       End;


      PUSH
       Menambah sebuah elemen ( data ) kedalam antrian.
       Syarat: tidak bisa dilakukan jika antrian sudah penuh.


       Procedure push ( input:string );
       Begin
          If not full then
          Begin
                  antri.top:=antri.top;
                  antri.data:=input;
          End;
       End;




                                                                56
         EMPTY
          Fuction empty: bolean;
          Begin
             Empty:=false;
             If top:=0 then empty:=true;
          End;


         POP
          Mengambil 1 elemen dari sebuah antrian.
          Syarat: antrian tidak boleh kosong.


          Procedure Pop ( elemen:string );
          Begin
             If not empty then
             Begin
             Elemen:=antri.data;
             antri.top:=top – 1;
             End;
          End;




Contoh:
                      1            2             3


                 Aditya        putra            gauthama




                                                           57
Program antrian_1;
Uses wincrt;
Type
        Data= array [1..3] of string;
Var
        D: data;
        I, antri: integer;
        Temp: string;
Begin
Antri:=0;
{untuk input}
For I:=1 to 3 do
Begin
Writeln(‘masukkan nama ke‘,‘ ‘,i);
Readln(d[i]);
Antri:=antri+1;
End;
{untuk Output}
For I:=1 to 3 do
Begin
Temp:=d[i];
Antri:=antri-1;
End;
{lihat output di var temp setelah pengambilan }
Writeln(‘hasil var temp=‘,temp);
Readln;
End.




                                                  58
                                     MODUL 7
                                     POINTER

Variabel Pointer

      Pada materi sebelumnya telah dijelaskan mengenai variabel bertipe
array, suatu tipe data yang bersifat statis (ukuran dan urutannya sudah pasti).
Selain itu ruang memori yang dipakai olehnya tidak dapat dihapus bila
variabel bertipe array tersebut sudah tidak digunakan lagi pada saat program
dijalankan. Untuk memecahkan masalah diatas, kita dapat menggunakan
variabel pointer. Tipe data pointer bersifat dinamis, variabel akan dialokasikan
hanya pada saat dibutuhkan dan sesudah tidak dibutuhkan dapat dialokasikan
kembali.


Array vs Pointer
Berikut tabel di bawah ini diberikan perbedaan antara variabel bertipe array
dengan varibel bertipe pointer.
    Kriteria             Array                        Pointer
    Sifat                Statis                       Dinamis
    Ukuran               Pasti                        Sesuai kebutuhan
    Alokasi variabel     Saat program dijalankan Dapat diatur sesuai
                         sampai selesai               kebutuhuan


Deklarasi Variabel Pointer
Bentuk umum :
      Var <namavar> : <^tipedata>
Contoh :
      Var
            Jumlahdata       : ^integer;
            Namasiswa        :^string[25];
       Nilaisiswa :^real;


                                                                             59
Pendeklarasian variabel pointer tidak jauh berbeda dengan pendeklarasian
variabel biasa, hanya perlu ditambahan simbol topi (^) sebelum tipe datanya.
Simbol topi tersebut menandahkan bahwa variabel tersebut menunjuk ke lokasi
tertentu pada memori.
       Anda juga dapat membuat variabel pointer bertipe record yang anda
definisikan sendiri. Pendeklarasiannya adalah seperti berikut ini.
Bentuk umum :
       Tipe
              <namapointer> = <^namarecord>;
              <namarecord> = record
                              <item1>:<tipedata1>;
                               <item2>:<tipedata2>;
                                       …
                                       <itemN>:<tipedataN>;
                                     end;
       Var
              <namavar>:<namapointer>;
contoh :
Type
       PointMhs = ^RecMhs;
       RecMhs = record
                     Nama : string[25];
                     NIM : string[10];
                     Alm   : string[30];
                     IPK   : real;
                    End;
var
       datamahasiswa : pointMhs;




                                                                         60
Varibel Biasa vs Variabel Pointer
Variabel Pointer adalah suatu variabel yang menunjuk ke alamat memori yang
digunakan untuk menampung data yang akan diproses, seperti digambarkan
dibawah ini:
                                                            memori


                                       P             0100    Aku
          FFFF menunjukkan
          lokasi memori                              0200
          paling akhir dalam
          heksadesimal                               0300
                                                     …
                                                     FFFF


      P adalah variabel pointer yang menunjuk ke alamat memori 100 yang
berisi data bertipe string ―Aku‖. Apabila anda ingin menambah data dengan
menggunakan variabel yang berbeda, maka anda dapat mendeklarasikan
variabel pointer baru misalnya Q dan R dst sehingga tampak sbb :
                           memori
      P            0100    Aku
      Q            0200    Belajar
      R            0300    Pointer

                   …
                   FFFF




                                                                       61
       Untuk membedakan antara variabel pointer dengan variabel biasa,
perhatikan contoh berikut :

                                     FirstName       LastName
   Variabel Biasa              [1]
                                         arma               dyah
 Var
                               [2] FirstName         LastName
 FirstName, LastName :
 String;                                  arma              dyah
 begin
 [1]
     FirstName:=’arma’;
                               [3] FirstName         LastName
     LastName:=’dyah’;
 [2]
     FirstName:=LastName;
 [3]
     LastName:=’dyah’;                   dyah               arma
      Writeln(FirstName);
       Writeln(LastName);
 End.


 Variabel Pointer                   FirstName    LastName          Pointer lastname menunjuk
                                                                   ke alamat memory tertentu
                                                                   dan mengisi nya dengan
 Var                                                               ‘dyah’
  FirstName, LastName :       [1]      arma         dyah
 ^String;                                                          Pointer FirstName menunjuk
                                FirstName        LastName          ke lokasi memory yang
 begin                                                             dituujuk oleh Lastname
 [1]
     FirstName^:=’arma’;
     LastName^:=’dyah’;
 [2]
     FirstName^:=LastName;    [2]      arma         dyah           Lokasi memori yang
 [3]                                                               ditunjuk oleh Lastname
     LastName^:=’dyah’;                                            diisi dengan ‘arma’
      Writeln(FirstName^);          FirstName    LastName
       Writeln(LastName^);
 End.                         [3]
                                        arma        dyah




                                                                                            62
Single Linked List
      Apabila setiap kali anda ingin menambahkan data selalu dengan
menggunakan variabel pointer yang baru, anda akan membutuhkan banyak
sekali variabel pointer(penunjuk).
      Oleh karena itu ada baiknya jika anda hanya menggunakan satu variabel
pointer saja untuk menyimpan banyak data dengan metode yang kita sebut
Linked List. Jika diterjemahkan, maka berarti suatu daftar isi yang saling
berhubungan. Untuk lebih jelasnya perhatikan gambar di bawah ini :


                     memori
P            0100    Aku

             0200    Belajar
                     Pointer
             0300
             …                           Nill
             FFFF


      Pada gambar diatas tampak bahwa sebuah data terletak pada sebuah
lokasi memory area. Tempat yang disediakan pada suatu area memory tertentu
untuk menyimpan data dikenal dengan sebutan node/simpul. Pada setiap node
memiliki pointer(penunjuk) yang menunjuk ke simpul berikutnya sehingga
terbentuk suatu untaian dan dengan demikian hanya diperlukan sebuah
variabel pointer. Susunan berupa untaian semacam ini disebut Single Linked
List. (ket: Nill tak memiliki nilai apapun. Biasanya linked list pada titik
akhirnya akan menunjuk ke Nill).
      Dalam pembuatan single linked list dapat menggunakan 2 metode :
      LIFO (Last In First Out), aplikasi       : Stack(Tumpukan).
      FIFO (First In First Out), aplikasi      : Queue(Antrian).




                                                                        63
LIFO (Last In First Out)
LIFO adalah suatu metode pembuatan linked list, dimana data yang masuk
paling akhir adalah data yang keluar paling awal. Hal ini dapat dianalogikan
(dalam kehidupan sehari-hari) pada saat anda menumpuk barang, seperti
digambarkan di bawah ini :
                               COMPO                    COMPO
                                                                (Setelah
                                                                ditumpuk)
(keadaan mula-mula                        VCD
                       TV
                                                          VCD     COMPO
adalah kosong)
                                             TV            TV      VCD

                                                                    TV




Pembuatan sebuah simpul dalam suatu linked list seperti digambarkan diatas
disebut dengan istilah INSERT. Jika linked list dibuat dengan metode LIFO,
maka terjadi penambahan/insert simpul di belakang.


PROSEDURE INSERT
Istilah insert berarti menambahkan sebuah simpul baru ke dalam suatu linked
list. Berikut di bawah ini adalah penggalan listing prosecure insert untuk LIFO
berserta contoh dan penjelasan cara kerjanya.
                    Type
                     Point = ^RecPoint;
                     Recpoint = Record
                                   Isi    : TipeData;
                                   Next : Point;
                                End;
                    Var
                     Head, Tail, Now : Point;




                                                                            64
Penggalan deklarasi tipe data dan variabel di atas ini akan dipakai pada
penjelasan procedure-procedure selanjutnya.




      Procedure INSERT(elemen:TipeData);
      Var Now : Point;
      Begin
       New(Now);
       Now^.Isi:=elemen;
       If Head=Nil then
             Now^.Next:=Nil;
       Else
             Now^.Next:=Head;
       Head:=Now;
      End;




               Penggalan procedure INSERT untuk LIFO

                                                 Head:=Nil

                                                 Head


                                                  Nil

                             (ket : head mula-mula selalu dideklarasikan
sebagai nil)



 Insert (TV)           New(Now);
                       Now^.Isi:=TV;

                           Now

                                       TV




                         Head=Nil then
                               Now^.Next:=Nil;
                         Head:=Now;
                                                                      65
                        Now          Head




                   New(Now);
Insert (VCD        Now^.Isi:=VCD;
                        Now


                                 VCD




                              Head<> Nil then
                                    Now^.Next:=Head;
                              Head:=Now;

                 Now          Head

                 VCD           TV           Nil




Insert (COMPO)         Head <> nil then
                              Now^.Next:=Head;
                       Head:=Now;
   Now            Head




   Compo          VCD               TV            Nil




                                                        66
                                   MODUL 8
                           FIFO (First In First Out)


      FIFO adalah suatu metoda pembuatan Linked List dimana data yang
masuk paling awal adalah data yang keluar paling awal juga. Hal ini dapat
dianalogikan (dalam kehidupan sehari-hari) misalkan saat sekelompok orang
yang datang (ENQUEUE) mengantri hendak membeli tiket di loket.
Jika Linked List dibuat dengan metode FIFO, maka terjadi penambahan/Insert
simpul di depan.


PROCEDURE INSERT
              Procedure INSERT(elemen:TipeData);
              Var Now:Point;
                     Begin
                        New(Now);
                        If head = nil then
                              Head:=now
                        else
                              Tail^.next:=now;
                        Tail:=Now;
                         Tail^.next:=nil;
                          Now^.isi:=elemen;
              End;


                                                                Head
            Penggalan procedure INSERT untuk FIFO

                            Head:=Nil;                              Nil

            {head mula-mula selalu diidentifikasikan sebagai nil}



                                                                          67
Insert (35)    New(Now);
               Head=Nil then
                      Head:=Now;
               Tail:=Now;


              Now Head Tail




               Tail^.next:=nil;
               Now^.isi:=35;


                     Now
              Head         Tail
                     35            Nil




                                         68
Insert (5)      New(Now);
                Head<>nil then
                      Tail^.next:=now;


                                           Now


             Head Tail

                   35

              Tail:=Now;
              Tail^.next:=nil;


             Head Tail               Now

                   35                              Nil



                Now^.isi=5;




              35                 5           Nil

             Head           Now Tail




                                                         69
    Insert (9)

   Head                         Now Tail


   35                5               9            Nil




     Insert (1)


    Head                                         Now Tail


     35                  5               9          1        Nil




Procedure dan Function Linked List Lainnya
       Selain procedure insert di atas, pada linked list juhga terdapat procedure
serta function lainnya.
       Di bawah ini diberikan procedure-procedure serta function umum
dalam aplikasi Linked List.
 Create : Membuat sebuah linked list yang baru dan masih kososng. (ket:
             procedure ini wajib dilakukan sebelum menggunakan linked list)

                  Procedure Create;
                         Begin
                                 Head:=nil;
                                 Tail:=nil;
                         End;

                         Head Tail

                             Nil



 Empty : Function untuk menentukan apakah linked list kosong atau tidak.

                 Function Empty : Boolean;
                 Begin
                        If head = nil then
                                Empty:= true
                        else                                                  70
                                empty:= false;
                 end;
 Find First : Mencari elemen pertama dari linked list

              Procedure Find_First;
                     Begin
                             Now:= head;
   Find_First        End;

    Head      Now                                       Tail

      35               5               9                  1    Nil



 Find Next : Mencari elemen sesudah elemen yang ditunjuk now.

                Procedure Find_Next;
                       Begin
                               If Now^.next <> nil then
                                  Now:= Now^.next;
                       End;


      Head           Now                                Tail


      35               5               9                  1    Nil

                     (ket: gambar lanjutan dari sebelumnya)
 Retrieve : Mengambil elemen yang ditunjuk oleh now. Elemen tersebut lalu
             ditampung pada suatu variabel (di bawah dicontohkan variabel r).

                Procedure Retrieve(var r: TipeData );
                Begin
                       R:= Now^.isi;
                End;



 Update : Mengubah elemen yang ditunjuk oleh now dengan isi dari suatu
             variabel (di bawah dicontohkan variabel u).

                Procedure Update(u: TipeData );
                Begin
                        Now^.isi:=u;
                End;                                                       71
 Update(7)

    Head           Now                          Tail

     35             7              9               1             Nil


 Delete Now : Menghapus elemen yang ditunjuk oleh now. Jika yang
             dihapus adalah elemen pertama dari linked list(head), maka head
             akan berpindah ke elemen berikut.

                 Procedure DeleteNow;
                 Var x : point;
                         Begin
                                If now<>head then
                                  Begin
                                    x:=head;
                                    while x^.next<>now do
                                        x:=x^.next;
                                    x^.next:=now^.next;
                                   end
                                else head:= head^.next;
                                        dispose(Now);
                                Now:= head;
                         End;




   DeleteNow                                   Now<>head then
                                                Begin
                                                      x:=head;

  Head x            Now                         Tail

     35             7              9               1             Nil


                                        x^.next=now then
                                         x^.next:=now^.next;
                                        dispose(now);
                                        now:=head;




     35             7              9               1             Nil     72
  Head x       Now                             Tail




 Delete Head : Menghapus elemen yang ditunjuj head. Head berpindah ke
             elemen sesudahnya.

               Procedure DeleteHead;
                 Begin
                       If head<>nil then
                         Begin
                           Now:=head;
                           Head:=Head^.next;
                           Dispose(Now);
                           Now:=Head;
                       End;
                 End;




      DeleteHead                 If head<>nil then
                                          Begin
                                           Now:=head;
                                           Head:=Head^.next;


Now     Head                        Tail

      35               9               1              Nil

                                      Dispose(Now);
                                      Now:=Head;



                     Head Now           Tail

        35                 9               1           Nil



                                                                    73
 Clear : Untuk menghapus linked list yang sudah ada.wajib dilakukan bila
      ingin mengakhiri program yang menggunakan linked list. Jika tidak
      data-data yang dialokasikan ke memori pada program sebelumnya akan
      tetap tertinggal di dalam memori.



               Procedure Clear;
               Begin
                While head <> nil do
                  Begin
                   Now:=head;
                   Head:=head^.next;
                   Dispose(Now);
                  End;
               End;




Latihan Soal beserta jawaban (Listing Program) dan penjelasan
Buatlah sebuah program untuk mendeteksi password/ kata sandi. Gunakan
metode single linked list. Jika passwordnya benar, program akan selesai, jika
salah maka user akan diminta memasukkan password kembali. (passw.pas)

                              Enter Your Password:

Jawaban :
Uses crt;
Type
 Point = ^Rec;
 Rec = record
           Isi : char;
           Next : point;
          End;
Const
 Password = ‗pascal‘; {password yang harus dimasukkan}
Var
 i                     : byte;


                                                                          74
 Tekan                      : char;
 Passwd             : Boolean;
 Head, Tail, Now    : Point;


Procedure Create;
Begin
        Head:=nil;
        Tail:=nil;
End;
Procedure Push(isi:char);
Var Now:point;
Begin
        New(now);            {membuat simpul baru}
        If Head=Nil then {mendeteksi simpul awal}
        Begin
         Head:=Now;
         Tail:=Head;
        end else
        begin {menyambung simpul yang baru pada simpul yang sudah ada}
         Tail^.next:=Now;
         Tail:=Tail^.Next;
         end;
        Now^.isi:=isi; {mengisi simpul yang baru}
        Now^.next:=Nil;
end;
Function Check:Boolean; {function untuk mencheck input}
Var Temp : string[15];
Begin
Temp:=‘ ‗; Now:=Head;
While Now <> nil do
        Begin
         Temp:=temp + Now^.isi;
         Now:=Now^.next;
        End;
If temp <> Password then check:=False;
End;
Procedure BuatBingkai(x1,y1,x2,y2:byte); {tampilan aplikasi}
Var i : byte;
Begin
 GotoXY (x1,y1); write(‗ ‘); GotoXY (x2,y1); write (‗ ‗);
 GotoXY (x1,y2); write(‗ ‘); GotoXY (x2,y2); write (‗ ‘);
 For i := x1+1 to x2-1 do
   Begin
        GotoXY (i,y1); write (‗-‗);

                                                                         75
       GotoXY (i,y2); write (‗-‘);
  End;
 For i := y1+1 to y2-1 do
  Begin
       GotoXY(x1, i); write(‗ ‗);
       GotoXY(x2, i); write (‗ ‗);
  End;
End;

Procedure Pop; {procedure penghapus simpul}
Begin
 Now:=head;
 head:=head^.next;
 While Now <> nil do
  Begin
       Dispose(Now);
       Now:=head;
       Head:=head^.next;
  End;
End;
Begin {program utama}
Repeat
 Create; I:=0;
 Repeat
       Tekan:=ReadKey;
       Write(Tekan);
       If Tekan <>#13 then Push(Tekan); inc(i);
  Until (Tekan= #13) or (I=10); {enter ditekan atau panjang = 10}
 Passwd:=check; Pop;
 Until Passwd;
End.




                                                                    76
                                   MODUL 9
                                    TREE

Tree
        Merupakan salah satu bentuk struktur data tidak linear yang
menggambarkan hubungan yang bersifat hirarkis (hubungan one to many)
antara elemen-elemen. Tree bisa didefinisikan sebagai kumpulan simpul/node
dengan satu elemen khusus yang disebut Root dan node lainnya terbagi
menjadi himpunan-himpunan yang saling tak berhubungan satu sama lainnya
(disebut subtree). Untuk jelasnya, di bawah akan diuraikan istilah-istilah umum
dalam tree :
   a) Prodecessor : node yang berada diatas node tertentu.
   b) Successor      : node yang berada di bawah node tertentu.
   c) Ancestor       : seluruh node yang terletak sebelum node tertentu dan
        terletak pada jalur yang sama.
   d) Descendant : seluruh node yang terletak sesudah node tertentu dan
        terletak pada jalur yang sama.
   e) Parent                : predecssor satu level di atas suatu node.
   f) Child          : successor satu level di bawah suatu node.
   g) Sibling        : node-node yang memiliki parent yang sama dengan suatu
        node.
   h) Subtree        : bagian dari tree yang berupa suatu node beserta
        descendantnya dan memiliki semua karakteristik dari tree tersebut.
   i)   Size         : banyaknya node dalam suatu tree.



                                                                             77
   j)     Height                  : banyaknya tingkatan/level dalam suatu tree.
   k) Root                 : satu-satunya node khusus dalam tree yang tak punya
         predecssor.
   l) Leaf                 : node-node dalam tree yang tak memiliki seccessor.
   m) Degree               : banyaknya child yang dimiliki suatu node.
   Contoh :

                              A
 Subtr             B                      C
 ee
             D         E              F           G

        Ascestor (F)   = C,A
        Descendant (C) = F,G
        Parent (D)     =B
        Child (A)      = B,C
        Sibling (F)    =G
        Size           =7
        Height         =3
        Root           =A
        Leaf           = D,E,F,G
        Degree (C)     =2



Beberapa jenis Tree yang memiliki sifat khusus :
   1) Binary Tree
         Binary Tree adalah tree dengan syarat bahwa tiap node hanya boleh
         memiliki maksimal dua subtree dan kedua subtree tersebut harus
         terpisah. Sesuai dengan definisi tersebut, maka tiap node dalam binary
         tree hanya boleh memiliki paling banyak dua child.




                                                      ROOT
                                              A
                                                              Right Child of
 Left Child of A                                              A
                                  B                   C
                                                                  Right Child of
 Left Child of B                                                  C
                             D            E       F       G                        78


                       H          I                           J
                                    LEAF




Jenis-jenis Binary Tree :
   a) Full Binary Tree
       Binary Tree yang tiap nodenya (kecuali leaf) memiliki dua child dan tiap
       subtree harus mempunyai panjang path yang sama.




   b) Complete Binary Tree
       Mirip dengan Full Binary Tree, namun tiap subtree boleh memiliki
       panjang path yang berbeda. Node kecuali leaf memiliki 0 atau 2 child.




   c) Skewed Binary Tree


                                                                               79
      akni Binary Tree yang semua nodenya (kecuali leaf) hanya memiliki satu
      child.


                                   atau




      Implementasi Binary Tree
      Binary      Tree    dapat     diimplemntasikan       dalam     Pascal    dengan
      menggunakan double Linked List. Untuk nodenya, bisa dideklarasikan
      sbb :
      Type Tree        = ^node;
               Node    = record
                           Isi       : TipeData;
                           Left,Right : Tree;
                         end;
      Contoh ilustrasi Tree yang disusun dengan double linked list :


                                  Root
                  LC                             RC

              LCLC          RCL                          RCR
                            C                            C
                            (Ket: LC=Left Child; RC=Right Child)
Operasi-operasi pada Binary Tree :
 Create        : Membentuk binary tree baru yang masih kosong.
 Clear         : Mengosongkan binary tree yang sudah ada.
 Empty         : Function untuk memeriksa apakah binary tree masih kosong.
 Insert        : Memasukkan sebuah node ke dalam tree. Ada tiga pilihan
                insert: sebagai root, left child, atau right child. Khusus insert
                sebagai root, tree harus dalam keadaan kosong.


                                                                                    80
 Find          : Mencari root, parent, left child, atau right child dari suatu node.
                (Tree tak boleh kosong)
 Update        : Mengubah isi dari node yang ditunjuk oleh pointer current.
                (Tree tidak boleh kosong)
 Retrieve : Mengetahui isi dari node yang ditunjuk pointer current. (Tree
                tidak boleh kosong)
 DeleteSub : Menghapus sebuah subtree (node beserta seluruh
                descendantnya) yang ditunjuk current. Tree tak boleh kosong.
                Setelah itu pointer current akan berpindah ke parent dari node
                yang dihapus.
 Characteristic : Mengetahui karakteristik dari suatu tree, yakni : size, height,
                serta average lengthnya. Tree tidak boleh kosong. (Average
                Length =
                [jumlahNodeLvl1*1+jmlNodeLvl2*2+…+jmlNodeLvln*n]/Size)
 Traverse : Mengunjungi seluruh node-node pada tree, masing-masing
                sekali. Hasilnya adalah urutan informasi secara linier yang
                tersimpan dalam tree. Ada tiga cara traverse : Pre Order, In
                Order, dan Post Order.




Langkah-Langkahnya Traverse :
 PreOrder : Cetak isi node yang dikunjungi, kunjungi Left Child, kunjungi
                Right Child.
 InOrder       : Kunjungi Left Child, Cetak isi node yang dikunjungi, kunjungi
                Right Child.
 PostOrder : Kunjungi Left Child, Kunjungi Right Child, cetak isi node yang
                dikunjungi.


Untuk lebih jelasnya perhatikan contoh operasi-operasi pada Binary Tree
berikut ini :


                                                                                   81
Insert (Root,66)


            65                  Memasukkan sebuah node ke dalam Tree yang masih
                                kosong (Sebagai Tree)

Insert (RightChild,5)


       65
                                Menambahkan sebuah node sebagai right child dari Root.
                      5


Insert (LeftChild,44)


       65
                                Menambahkan sebuah node sebagai left child dari node
                      5         yang sebelunya di-insert.


        44

Find (Root)
Insert (LeftChild,31)


                 65                      Memindahkan pointer ke Root kemudian
                                         menambhakan sebuah node sebagai left child dari
                                 5       root.
  31

                  44



Insert (LeftChild,7)

                          65              Menambhakan sebuah node sebagai left child
                                          dari node yang sebelumnya di-insert.
                                     5
Find (Root)
        31
Find (RightChild)
                   44
Insert (RightChild,12)
    7


                          65

                                     5                                                 82
        31

                           44             12
   7
                                        Memindahkan pointer ke Root, kemudian
                                        pindahkan lagi pointer ke right child dari
                                        Root, kemudian masukkan sebuah node
                                        sebagai right child dari node yang sedang
                                        ditunjuk oleh pointer.




   2) Binary search Tree
   Adalah Binary Tree dengan sifat bahwa semua left child harus lebih kecil
   daripada right child dan parentnya. Juga semua right child harus lebih besar
   dari left child serta parentnya. Binary seach tree dibuat untuk mengatasi
   kelemahan pada binary tree biasa, yaitu kesulitan dalam searching /
   pencarian node tertentu dalam binary tree. Contoh binary search tree umum
   :


                                  18

                                                23
                        10


                5            14            21           33



        3           7              17                          40

Pada dasarnya operasi dalam binary search tree sama dengan Binary tree biasa,
kecuali pada operasi insert, update, dan delete.
1. Insert : Pada Binary Search Tree, insert dilakukan setelah ditemukan lokasi
            yang tepat. (Lokasi tidak ditentukan oleh user sendiri).

  Insert (12)

                Memasukkan sebuah node yang berisi angka 12. Karena tree
       12       masih kosong, maka secara otomatis node tersebut menjadi root.




                                                                               83
Insert (15)


  12                 Karena 15 lebih besar dari 12, maka sesuai dengan
                     peraturan harus berada disebelah kanan parent (right
           15        child)




Insert (13)


  12                 Karena 13 lebih besar dari 12, maka sesuai dengan
                     peraturan harus berada di sebelah kanan parent (12), lalu
                     bandingkan lagi dengan 15. karena lebih kecil maka 13
           15
                     menempati left child dari 15.

  13




Insert (9)


        12           Proses yang sama seperti sebelumnya berlaku untuk
                     selanjutnya.
 9              15


        13


Insert (5)                        Insert (11)

                12
                                                     12
       9             15
                                            9              15

12              13
                                     12         11        13



                                                                           84
  Insert (20)

                        12

              9                       15


    12             11             13          20



2. Update          : Seperti pada Binary Tree biasa, namun disini uapte akan
              berpengaruh pada posisi node tersebut selanjutnya. Bila setelah
              diupdate mengakibatkan tree tersebut bukan Binary Search Tree lagi,
              maka harus dilakukan perubahan pada tree dengan melakukan
              perubahan pada tree dengan melakukan rotasi supaya tetap menjadi
              Binary Search Tree.
3. Delete : Seperti halnya update, delete dalam Binary Search Tree juga turut
              mempengaruhi struktur dari tree tersebut.

  Delete (5)                     (Keadaan awal merupakan lanjutan gambar sebelumnya)


                       12                          Karena node yang berisi 5 adalah leaf, maka
                                                   ia dapat langsung dihapus.
          9                       15


                  11             13         20


    Delete (20)

                                           Karena node yang berisi 20 adalah leaf, maka ia
                  12
                                           dapat langsung dihapus.

      9                      15


          11                13




   Delete (13)
                                                                                           85
          12
                    Pada operasi di samping, delete dilakukan terhadap
9              15   Node dengan 2 child. Maka untuk menggantikannya,
                    diambil node paling kiri dari Right SubTree yaitu 13.

     11



Delete (13)

                    Pada operasi di samping, delete dilakukan terhadap
          12        node dengan 1 child. Maka child tersebut (11) akan
                    menggantikan posisi dari node yang didelete (9).
11             15



Delete (15)

          12

11




                                                                      86
                                  MODUL 10
                                    SORT


Definisi Sort
     Sort adalah proses pengurutan data yang sebelumnya disusun secara acak
     sehingga menjadi tersusun secara teratur menurut suatu aturan tertentu.
     Pada umumnya terdapat 2 jenis pengurutan :
      Ascending (Naik)
      Descending (Turun)
     Contoh :
     Data Acak             : 5 6 8 1 3 25 10
     Terurut Ascending     : 1 3 5 6 8 10 25
     Terurut Descending    : 25 10 8 6 5 3 1
        Untuk melakukan proses pengurutan tersebut dapat digunakan berbagai
     macam cara / metoda. Beberapa metoda diantaranya :
     a) Buble / Exchange Sort
     b) Selection Sort
     c) Insertion Sort
     d) Quick Sort


   Bubble / Exchange Sort
       Memindahkan elemen yang sekanag dengan elemen yang berikutnya,
   jika elemen sekarang > elemen berikutnya, maka tukar
   Proses :
   Langkah 1 :
 22 10 15 3 8 2            Pengecekan dapat dimulai dari data paling awal
                           atau paling akhir. Pada contoh di samping ini
 22 10 15 3 2        8     pengecekan di mulai dari data yang paling akhir.
                           Data paling akhir dibandingkan dengan data di
 22 10 15 2       3 8
                           depannya, jika ternyata lebih kecil maka tukar. Dan
 22 10 2 15 3 8            pengecekan yang sama dilakukan terhadap data
                           yang selanjutnya sampai dengan data yang paling
 22 2 10 15 3 8            awal.

     22 10 15
 2 Langkah 2 :       3    8

 2    22   10   15   3    8

 2    22   10   15   3    8                                                    87
 2    22   10   3    15   8

 2    22   3    10 15     8
                                Kembalinya data paling akhir dibandingkan
                                dengan data didepannya jika ternyata lebih kecil
                                maka tukar, tetapi kali ini pengecekan tidak
                                dilakukan sampai dengan data paling awal yaitu
                                2 karena data tersebut pasti merupakan data
                                terkecil (didapatkan dari hasil pengurutan pada
                                langkah 1).


    Langkah 3 :                              Langkah 4 :
2    3   22    10    15    8     2   3   8   22   10   15

2    3   22    10    8     15    2   3   8   22   10   15

2    3   22    8     10    15    2   3   8   10   22   15

2 Proses pengecekan pada langkaj 3 dst. Sama dengan langkah sebelumnya.
   3 8     22 10 15
  Langkah 5 :                 Terurut :
2    3   8    10    22    15
                              2 3 8 10 15
2    3 8 10 15 22
    Proses di atas adalah pengurutan data dengan metoda bubble ascending.
    Untuk yang descending adalah kebalikan dari proses diatas.
    Berikut penggalan listing program Procedure TukarData dan Procedure
    Bubble Sort.
    Procedure TukarData
    Procedure TukarData(var a,b : word);
    Var c : word;
       Begin
        c:=a;
        a:=b;
        b:=c;
       end;

    Procedure Bubble Sort Ascending
    Procedure Asc_Bubble(var data:array; jmldata:integer);
    Var i,j : integer;
       Begin
        For i:= 2 to jmldata do
          For j:= jmldata downto I do
                 If data[j] < data[j-1] then
                  Tukardata (data[j], data[j-1]);
       end;




                                                                             88
  Untuk pengurutan secara descending anda hanya perlu menggantikan baris
  ke-6 dengan berikut ini :
                            If data[j] > data[j-1] then

  Selection Sort
     Membandingkan elemen yang sekarang dengan elemen yang berikutnya
  sampai dengan elemen yang terakhir. Jika ditemukan elemen lain yang lebih
  kecil dari elemen sekarang maka dicatat posisinya dan kemudian ditukar.
  Dan begitu seterusnya.
  Proses :
  Langkah 1:                                Langkah 2 :
i=1 2 3 4 5 6                         i=1 2 3 4 5 6
  22 10 15 3 8 2                        2 10 15 3 8 22

pembanding       Posisi               pembanding       Posisi
22 > 10          2                    10 < 15          2
10 < 15          2                    10 > 3           4
10 > 3           4                    3 <8             4
3 <8             4                    3 < 22           4
3 >2             6
Posisi data ke-1(22) = 6              Posisi data ke-2(10) = 4
Tukar data ke-1 dengan data ke-6      Tukar data ke-2 dengan data ke-4

        2 10    15 3 8 22                     2 3 15 10 8 22
  Langkah 3 :                                      Langkah 4 :
i=1 2 3 4 5 6                        i=1 2 3 4 5 6
  2 3 15 10 8 22                        2 3 8 10 15 22
                                     pembanding Posisi
pembanding      Posisi               10 < 15    4
15 > 10         4                    10 < 22    4
10 < 8          4
8 > 22          5                    Posisi data ke-4 tetap
                                     Pada posisinya = 4 (tidak berubah)
Posisi data ke-3(15) = 5
Tukar data ke-2 dengan data ke-5           2 3 8 10 15 22
  Langkah 5 :                                      Terurut :
    2 3 8 10 15 22
i=1 2 3 4 5 6                         2   3   8   10    15      22
  2 3 8 10 15 22

pembanding       Posisi
15 < 20          5
posisi data ke-5 tetap
pada posisinya = 5 (tidak berubah)
  Proses pengurutan di atas adalah dengan metoda selection Ascending.
  Untuk descending hanyalah kebalikan dari proses di atas. Berikut
  penggalan listing program Procedure Selection Sort secara ascending

  Procedure Selection Sort Ascending
  Procedure Asc_Selection;


                                                                          89
    Var min, pos : byte;
    Begin
       For i:= 1 to max-1 do
     Begin
         Pos:=i;
              For j:= i+1 to max do
                If data[j] < data[pos] then pos:=j;
              If i <> pos then tukardata(data[i],data[pos]);
          end;
    end;

    untuk pngurutan secara desending, anda hanya perlu mengganti baris ke-8
    sbb :
                          if data[pos] < data[j] then pos:=j;
    Insertion Sort
        Pengurutan dilakukan dengan cara membandingkan data ke-I (dimana I
    dimulai dari data ke-2 sampai dengan data terakhir) dengan data
    berikutnya. Jika ditemukan data yang lebih kecil maka data tersebut
    disisipkan ke depan sesuai posisi yang seharusnya.
    Proses :
    Langkah 1:                                   Langkah 2 :
i= 1 2 3 4 5 6                               i= 1 2 3 4 5 6
   22 10 15 3 8 2                               10 22 15 3 8 2

temp       cek              geser            temp        cek               geser
10        temp<22     data ke-1 posisi 2    15         temp<22      data ke-2 posisi 3
                                                        temp>10
temp menempati posisi ke-1.
                                             temp menempati posisi ke-2.
    22 15 :
10Langkah 33 8 2                                         Langkah 4:
                                             10 = 15 222 3 3 4 85 2
                                              i 1                  6
i= 1 2 3 4 5 6
   22 10 15 3 8 2                                22 10 15 3          8    2

temp       cek             geser              temp         cek                geser
                                               8         temp < 22       data ke-4posisi 5
3         temp < 22    data ke-3 posisi 4
                                                         temp < 15       data ke-3posisi 4
          temp < 15    data ke-2 posisi 3               temp < 10       data ke-2posisi 3
          temp < 10    data ke-1posisi 2                temp > 3

temp menempati posisi ke-1.                   temp menempati posisi ke-2.
    Langkah 5 :                                              Langkah 6 :
3    10   15 22 8 2                           3 8 10 15 22 2
i= 1 2 3 4 5 6                                      2    3    8   10      15    22
   22 10 15 3 8 2

temp cek               geser
 8     temp < 22 data ke-5posisi 6
   Procedure<Insertion Sort Ascending
       temp 15 data ke-4posisi 5
   Procedure<Asc_Insert;
       temp 10 data ke-3posisi 4
       temp > 8    data ke-2posisi 3
       temp > 3    data ke-1posisi 2
                                                                                              90
temp menempati posisi ke-1.
Var i , j , temp : byte;
Begin
 For i := 2 to max do
   Begin
    Temp :=data[i];
     j := i-1;
     while (data[j] > temp) and (j>0) do
        begin
              data[j+1] := data[j];
              dec(j);
        end;
     data[j+1]:=temp;
   end;
end;

Untuk pengurutan secara descending anda tinggal mengganti baris ke 8
dengan baris berikut ini :
                       While(data[j]<temp)and(j>0)do


QUICK SORT
    Membandingkan suatu elemen (disebut pivot) dengan elemen yang lain
dan menyusunnya sedemikian rupa sehingga elemen- elemen lain yang
lebih kecil daripada pivot tersebut terletak di sebelah kirinya dan elemen-
elemen lain yang lebih besar daripada pivot tersebut terletak di sebelah
kanannya. Sehingga dengan demikian telah terbntuk dua sublist, yang
terletak di sebelah kiri dan kanan dari pivot. Lalu pada sublist kiri dan
sublist kanan kita anggap sebuah list baru dan kita kerjakan proses yang
sama seperti sebelumnya. Demikian seterusnya sampai tidak terdapat
sublist lagi. Sehingga didalamnya telah terjadi proses Rekursif.

Proses :
Bilangan yang di dalam kurung merupakan pivot
Persegi panjang yang digambarkan dengan garis terputus-putus
menunjukkan sublist.
i bergerak dari sudut kiri ke kanan sampai mendapatkan nilai yang >=
pivot.
j bergerak dari sudut kanan ke kiri sampai menemukan nilai yang < pivot.

Langkah 1 :
Index = 1       2     3       4    5       6
                                           j


           22   10    15       3   8       2
       i
                                                                        91
 i berhenti pada index ke-1 karena langsung mendapatkan nilai yang > dari
pivot (15).
j Berhenti pada index ke-6 karena juga langsung mendapatkan nilai yang <
dari pivot.
Karena i < j maka data yang ditunjuk olh I ditukar dengan data yang
ditunjuk oleh j sehingga menjadi :
                            2 10 15 3 8 22
Langkah 2 :
Index = 1         2            3                    4            5        6
                                                                          j


        2         10               15               3            8        22
                          i
i berhenti pada index ke-3 (pivot) karena tidak menemukan bilangan yang
> dari pivot.
j berhenti pada index k-5 menunjuk pada nilai yang < dari pivot.
Karena i < j maka data yang ditunjuk oleh i (pivot) ditukar dengan data
yang ditunjuk oleh j sehingga menjadi :
                            2 10 8 3 15 22

Langkah 3 :

  Index = 1            2            3               4                5        6

                                                    j

       2              10            8                   3        15           22

Proses yang samai seperti sebelumnya dilakukan terhadap 2 buah sublist
yang baru (ditandai dengan persegi panjang dengan garis terputus-putus).
                       2       3       8       10           15       22

Atau dapat juga digambarkan dalam bentuk tree seperti di bawah ini
dengan pivot yang ditandai dengan huruf tebal. Kemudian setelah terurut
dibaca inorder.

                       22      10          15           3            8    2
                  10       3       8       2            15               22

              2            3           10       8

                                    8          10



                                                                                   92
Procedure Quisort dengan nilai paling kiri sebagai pembanding (pivot).
Procedure Asc_Quick(L,R : Integer);
Var i, j:integer;
Begin
  If L<R then
    Begin
   i := L; j := R+1;
     repeat
      repeat inc(i) until data[i] >= data[1];
      repeat dec(j) until data[j] <= data[1];
           if i < j then tukardata (data[i], data[j]);
     until i > j;
   tukardata (data[1], data[j]);
   Asc_Quick(L,j-1);
   Asc_Quick(j+1,R);
     End;
End;

Untuk pengurutan secara descending anda tinggal mengganti tanda
aritmatik pada baris k 8 dan 9 sehingga menjadi seperti baris berikut :
     repeat inc(i) until data[i] >= data[l];
     repeat dec(j) until data[j] <= data[l];

Procedure Quick Sort dengan nilai tengah sebagai pembanding (pivot).
 Procedure Asc_Quick(L,R : Integer);
Var
 mid, i, j : integer;
 begin
  i:= L; j:=R mid := data[(L+R) div 2];
  repeat
    while data[i] < mid do inc(i);
    while data[j] > mid do dec(j);
    if i < j then
       begin
             change(data[i],data[j]);
             inc(i); dec(j);
       end;
   until i > j;
   if L < j then Asc_Quick(L , j);
   if i > R then Asc_Quick(i , R);
end;

Untuk pengurutan secara descending, anda hanya perlu mengganti baris
ke-6 & 7 sbb :


                                                                         93
                           while data[j] < mid do inc(j);
                           while data[k] > mid do dec(k);


Latihan Soal beserta jawaban (Listing program) dan penjelasan.
Anda diminta membuat sbuah program sorting dengan metode bubl sort.
Mintalah user untuk memasukkan 10 angka. Lalu tampilkan angka-angka
trsebut setelah disort baik secara ascending maupun descendeing
Layar 1 :
Masukkan 10 data
==========
Data ke-1 = 5            Data ke-6 = 45
Data ke-2 = 2            Data ke-7 = 8
Data ke-3 = 67           Data ke-8 = 23
Data ke-4 = 43           Data ke-9 = 39
Data ke-5 = 90           Data ke-10 = 7

{ket : tampilan ketika mengiput 10 angka}

Layar 2 :
5 2 67 43 90 45 8 23 39 7
Data yang telah diurutkan :
**************
Ascending       : 2 5 7 8 23 39 43 45 67 90
Descending      : 90 67 45 43 39 23 8 7 5 2

{ket : tampilan setelah dilakukan bubble sort}



jawaban :
uses crt;
const      max = 10;
Type       arr = array[1..max] of byte;
Var i     : byte;
    Data : arr;

Procedure Input;
begin
   Clrscr;
   Writeln (‗Masukkan 10 data‘);
   Writeln (‗= = = = = = = = = =‘);
   For i := 1 to max do {input 10 data}
      begin
     write(‗Data ke-‗, i ,‘=‘); readln(data[i]);


                                                                94
  end;
  Clrscr;
  For i := 1 to max do
          Write(data[i],‘ ‗);
  Writeln;
  Writeln (‗ * * * * * * * * * * * * * * *);
  Writeln (‗Data yang telah diurutkan :‘);
end;

Procedure Change (var a,b :byte); {procedure untuk menukar data}
Var c : byte;
Begin
   c := a; a := b; b := c;
end;

Procedure Asc_Buble; {pengurutan secara ascending}
Var p,q : byte;
    flaq : boolean;
 begin
   flaq:=false;
   p:=2;
   while (p<max) and (not flaq) do
      begin
       flaq:=true;
   for q := max downto p do
   if data[q] < data[q-1] then
      begin
            change (data[q], data[q-1]);
            flaq:=false;
              end;
           inc(i);
      end;
   write(‗Ascending :‘);
 end;

Procedure Desc_Buble; {pengurutan secara descending}
Var p, q : byte;
    Flaq : boolean;
 Begin
     flaq:=false;
     p:=2;
     while (p<max) and (not flaq) do
          begin
       flaq:=true;
   for q := max downto p do

                                                                   95
  if data[q] < data[q-1] then
     begin
           change (data[q], data[q-1]);
           flaq:=false;
             end;
          inc(i);
     end;
  write(‗Descending :‘);
 end;

Procedure Output;
Begin
   For i := 1 to max do
           Write(data[i],‘‘);
   Writeln;
end;
Begin {program utama}
   Input;
   Asc_buble; output;
   Desc_buble; output;
   Readkey;
end.




                                          96

								
To top