Kamis, 31 Maret 2011

Queue (antrian)

QUEUE (ANTRIAN)

Queue atau antrian sebenarnya juga merupakan suatu list. Salah satu sifat yang membedakan queue dengan stack adalah bahwa pada queue penambahan elemen dilakukan pada salah satu ujung (ujung depan) dan pengambilan dilakukan pada ujung yang lain (ujung belakang) . Dengan demikian queue menggunakan prinsip FIFO (First In First Out), yaitu elemen yang pertama masuk akan pertama kali pula dikeluarkan.
Seperti pada stack, operasi-operasi dasar pada queue adalah operasi penambahan elemen ( sebut "ADDQ") dan operasi pengambilan elemen (sebut DELQ). Di bawah ini diberikan contoh pemakaian operasi PUSH dan POP dan isi stack untuk setiap selesai eksekusi satu operasi.
(Untuk mempermudah penulisan, di bawah ini isi queue tidak dituliskan secara bertumpuk, tetapi dengan kesepakatan:
  • elemen paling kanan adalah elemen yang ada pada ujung belakang (yang terakhir kali masuk)
  • queue yang dipakai bernama Q
  • ADDQ(Q,B) berarti memasukkan elemen B ke dalam queue Q
  • DELQ(B,Q) berarti mengambil elemen dari queue Q dan menaruhnya ke dalam variabel B

Operasi yang dilakukan Isi Queue Keterangan
Kondisi Awal kosong -
ADDQ('A',Q) A -
ADDQ('B',Q) AB -
ADDQ('C',Q) ABC -
DELQ(Data,Q) BC Variabel Data berisi 'A'
ADDQ('D',Q) BCD -
DELQ(Data,Q) CD Data berisi 'B'
POP(Data,S) D Data berisi 'C'


IMPLEMENTASI QUEUE DALAM BAHASA PASCAL

Implementasi dalam bahasa Pascal dapat dilakukan dengan memanfaatkan struktur data record dan array. Array dipergunakan untuk menyimpan elemen-elemen yang dimasukkan. Selain itu diperlukan pula suatu variabel untuk mencatat banyaknya elemen yang ada di dalam array. Pada implementasi di bawah ini:
  • konstanta maxelm menyatakan banyaknya elemen maksimum yang dapat ditampung oleh queue
  • typeelemen adalah tipe data yang akan disimpan di dalam queue(bisa integer, word, real, boolean, char , string atau lainya)
  • banyak adalah field yang menyatakan banyaknya elemen dalam queue saat itu
  • queue diimplementasikan sebagai array linier dengan memandang bahwa elemen terdepan selalu berada pada sel pertama (implementasi fisik), sehingga bila terjadi pengambilan satu elemen maka semua elemen di belakang elemen terambil (bila ada) harus digeser ke depan satu langkah
Deklarasi tipe untuk antrian (queue):
type antrian= record
   banyak :0..maxelm;
   elemen : array[1..maxelm] of typeelemen;
end;

Selain prosedur untuk ADDQ dan DELQ, kita dapat pula menambahkan sejumlah fungsi untuk membantu penanganan kesalahan diantaranya adalah fungsi PENUHQ (untuk mengecek apakah antrian penuh) fungsi KOSONGQ (untuk mengecek apakah antrian kosong) dan fungsi SIZEQ (untuk mengetahui banyaknya elemen di dalam queue). Masing-masing sub program di atas dapat disajikan pseudocode-nya sebagai berikut:

Procedure Inisialisasi(var q : antrian);
begin
  Q. banyak ¬ 0
end;
Function PENUHQ(q : antrian): boolean;
begin
 Jika Q.banyak = maxelm maka PENUHQ ¬ true
 else PENUHQ¬false
end;
Function KOSONGQ(q : antrian):boolean;
begin
 If Q.banyak = 0 then KOSONGQ ¬ true
 else KOSONGQ ¬ false
end;
Procedure ADDQ(data : tipeelemen; var q : antrian);
begin
 If not PENUHQ(Q) then
 begin
  1. Q.banyak¬ Q.banyak+1
  2. Q.elemen[Q.banyak] ¬ data
 end
 else
   Tampilkan pesan kesalahan "Antrian Penuh"
end;
Procedure DELQ(var q : antrian; var data : typeelemen);
begin
 If not KOSONGS(Q) then
 begin
  1. data ¬Q.elemen[1]
  2. for i:= 2 to Q.banyak
    Q.elemen[i-1] ¬ Q.elemen[i]
  3. Q.banyak ¬ Q.banyak- 1
 end
 else
   Tampilkan pesan kesalahan "Antrian kosong"
End;

Dengan melihat implementasi di atas kita dapat merasakan adanya ketidakefisienan, yaitu bahwa untuk mengambil satu elemen dari queue kita harus menggeser sisa elemen yang sebenarnya tidak menjadi perhatian kita. Untuk data yang sedikit mungkin ini tidak terasa, tetapi untuk data yang banyak maka ketidakefisienan ini akan tampak jelas. Untuk mengatasi permasalahan di atas kita dapat menggunakan implementasi queue berputar, yaitu dengan membiarkan sel tetap kosong bila elemen pada sel tersebut baru saja diambil. Bagaimanakah implementasi queue berputar? Perhatikan implementasi di bawah ini.

type antrian_putar= record
   depan,belakang,banyak :0..maxelm;
   elemen : array[1..maxelm] of typeelemen;
end;

Field depan dan belakang masing-masing adalah untuk mencatat lokasi elemen terdepan (yang akan diambil berikutnya) dan lokasi elemen paling belakang (elemen terakhir kali masuk)

Procedure ADDQ(data : tipeelemen; var q : antrian_putar);
begin
 If not PENUHQ(Q) then
 begin
  1. Q.belakang ¬ (Q.belakang mod maxelm)+1
  2. Q.elemen[Q.belakang] ¬ data
 end
 else
   Tampilkan pesan kesalahan "Antrian Penuh"
end;
Procedure DELQ(var q : antrian_putar; var data : typeelemen);
begin
 If not KOSONGS(Q) then
 begin
  1. data ¬ Q.elemen[Q.depan]
  2. Q.banyak ¬ Q.banyak- 1
  3. Q.depan ¬ (Q.depan mod maxelm)+1
 end
 else
   Tampilkan pesan kesalahan "Antrian kosong"
End;

Minggu, 13 Maret 2011

Stack

 STACK


Dalam ilmu komputer, stack atau tumpukan merupakan sebuah koleksi objek yang menggunakan prinsip LIFO (Last In First Out), yaitu data yang terakhr kali dimasukkan akan pertama kali keluar dari stack tersebut. Stack dapat diimplementasikan sebagai representasi berkait atau kontigu (dengan tabel fix). Ciri Stack :
  • Elemen TOP (puncak) diketahui
  • penisipan dan penghapusan elemen selalu dilakukan di TOP
  • LIFO
Pemanfaatan Stack :
  • Perhitungan ekspresi aritmatika (posfix)
  • algoritma backtraking (runut balik)
  • algoritma rekursif
Operasi Stack yang biasanya :
  1. Push (input E : typeelmt, input/output data : stack): menambahkan sebuah elemen ke stack
  2. Pop (input/output data : stack, output E : typeelmt ) : menghapus sebuah elemen stack
  3. IsEmpty ()
  4. IsFull ()
  5. dan beberapas selektor yang lain
Dalam ilmu komputer, stack atau tumpukan merupakan sebuah koleksi objek yang menggunakan prinsip LIFO (Last In First Out), yaitu data yang terakhr kali dimasukkan akan pertama kali keluar dari stack tersebut. Stack dapat diimplementasikan sebagai representasi berkait atau kontigu (dengan tabel fix). Ciri Stack :
  • Elemen TOP (puncak) diketahui
  • penisipan dan penghapusan elemen selalu dilakukan di TOP
  • LIFO
Pemanfaatan Stack :
  • Perhitungan ekspresi aritmatika (posfix)
  • algoritma backtraking (runut balik)
  • algoritma rekursif
Operasi Stack yang biasanya :
  1. Push (input E : typeelmt, input/output data : stack): menambahkan sebuah elemen ke stack
  2. Pop (input/output data : stack, output E : typeelmt ) : menghapus sebuah elemen stack
  3. IsEmpty ()
  4. IsFull ()
  5. dan beberapas selektor yang lain

Dalam ilmu komputer, stack atau tumpukan merupakan sebuah koleksi objek yang menggunakan prinsip LIFO (Last In First Out), yaitu data yang terakhr kali dimasukkan akan pertama kali keluar dari stack tersebut. Stack dapat diimplementasikan sebagai representasi berkait atau kontigu (dengan tabel fix). Ciri Stack :
  • Elemen TOP (puncak) diketahui
  • penisipan dan penghapusan elemen selalu dilakukan di TOP
  • LIFO
Pemanfaatan Stack :
  • Perhitungan ekspresi aritmatika (posfix)
  • algoritma backtraking (runut balik)
  • algoritma rekursif
Operasi Stack yang biasanya :
  1. Push (input E : typeelmt, input/output data : stack): menambahkan sebuah elemen ke stack
  2. Pop (input/output data : stack, output E : typeelmt ) : menghapus sebuah elemen stack
  3. IsEmpty ()
  4. IsFull ()
  5. dan beberapas selektor yang lain

OPERASI PADA STACK


2 operasi dasar yang bisa dilaksanakan
pada sebuah stack, yaitu:
žOperasi Push (menyisipkan data)‏
  memasukkan data ke dalam stack
žOperasi Pop (menghapus data)‏
  menghapus elemen yang terletak pada posisi paling atas dari sebuah

 CONTOH PEMANFAATAN STACK
žNotasi Infix Prefix
žNotasi Infix Postfix
Pemanfaatan stack antara lain untuk menulis ungkapan dengan menggunakan notasi tertentu.
Contoh :
( A + B ) * ( C – D )‏
Tanda kurung selalu digunakan dalam penulisan ungkapan numeris untuk mengelompokkan bagian mana yang akan dikerjakan terlebih dahulu.
Dari contoh ( A + B ) akan dikerjakan terlebih dahulu, kemudian baru ( C – D ) dan terakhir hasilnya akan dikalikan.
A + B * C – D
B * C akan dikerjakan terlebih dahulu, hasil yang didapat akan berbeda dengan hasil notasi dengan tanda kurung.
 

Selamat Jalan Mama


“ SELAMAT JALAN MAMA “



Waktumu Telah Tiba
Meski sulit Untuk Percaya
Ingin Kutumpahkan Rasa
Mengapa Harus Kau Yang Tiada

Karena Kau Begitu Muda
Karena Jiwamu Penuh Rasa Cinta
Tapi Aku Mengerti
Hanya Tuhan Empunya Misteri

Wahai Mamaku . . .
Tiada Kata Lagi Sanggup Terucap
Hanya Sisa Air Mata
Mengantar Kepergianmu

Biarlah Do’a Kami Menyertaimu Selalu
Agar Kau Mendapat Tempat Disisi-Nya
Dalam Tidurmu Yang Abadi

Selamat Jalan Mama . . .

Kami Di Sini yang Selalu Menyayangimu . . .

Rabu, 23 Februari 2011

A R R A Y dan RECORD

ARRAY:


Sebuah array dapat dikatakan sebagai suatu himpunan terurut dengan elemen-elemen homogen. Terurut, dimaksudkan bahwa elemen pertama, elemen kedua, dst masing-masing dapat diidentifikasi. Sedangkan homogen berarti masing-masing elemen tersebut mempunyai tipe data yang sama.

    Array dapat dikelompokkan atas 2 bagian, yaitu :
      1. Array satu dimensi.
      2. Array multi dimensi.

Sifat Array:
 
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
Contoh. const N=10;
type
A= array [1..N] of integer;


ARRAY SATU DIMENSI
      Bentuk array yang paling sederhana adalah array satu dimensi. Array jenis ini dapat dianggap sebagai sebuah vektor. Suatu array A berdimensi satu dengan N buah elemen, secara fisik dapat digambarkan sebagai berikut :

A(1)
A(2)
.....
A(I)
.....
A(n)

Indeks dari elemen suatu array menyatakan posisinya dalam urutan secara umum suatu array A berdimensi satu dengan elemen berjenis data T yang mempunyai indeks dari L s/d U dituliskan sbb:

            A(L:U) = {A(I)}
           
            Untuk I = L, L+1, L+2, ................., U-1, U,
            dimana masing-masing  A(I) berjenis data T.

L disebut sebagai batas bawah dari indeks A dan U sebagai batas atas dari A.
Jumlah elemen dalam suatu array disebut sebagai range.
Range dari array A(L:U) adalah U - L + 1.
Range dari array B(1:N) adalah N - l + 1= N.






ARRAY MULTI DIMENSI
      Array dua dimensi adalah salah satu contoh dari array jenis multi dimensi (dimensi banyak). Array ini elemen-elemennya merupakan array pula. Bentuk yang dianggap dapat mewakili array dua dimensi ini adalah matriks.  Suatu array B yang terdiri atas M elemen dimana masing-masing elemennya berupa array dengan N elemen, dapat digambarkan sebagai suatu tabel MxN, dengan bentuk sbb:   


1
2
3
...
J
...
N
1







2







3







...







I







...







M









Array ini dituliskan :             B(1:M,1:N) = {B(I,J)},
                                                Untuk  I = 1,2,...,M
                                                            J = 1,2,...,N
Jumlah elemen (range) dari array B ini adalah M x N.

Secara umum, array 2 dimensi B dengan batas bawah indeks pertama L1, batas atas indeks pertama U1, batas bawah indeks kedua L2 batas atas indeks kedua U2, dituliskan:

            B(L1 : U1, L2 : U2) = {B(I,J)}
            Untuk L1 < I < U1 dan L2 < J < U2

Jumlah elemen baris dari array B adalah : ( U2 - L2 + 1 )
Jumlah elemen kolom dari array B adalah : ( U1 - L1 + 1)
Jumlah total elemen array B adalah : (U2 - L2 + 1 )(U1 - L1 + 1)

RECORD

   Record adalah himpunan dari elemen-elemen yang heterogen.
      Heterogen adalah elemen-elemennya dapat mempunyai tipe data yang berbeda.

      ELEMENTARY ITEM adalah suatu field yang tidak mempunyai subfield.

      GROUP ITEM adalah suatu field yang mempunyai subfield.

      TUPEL adalah gabungan atribut yang menjadi suatu informasi dari proses basis                              data.

      Contoh RECORD :

      PEGAWAI
Job Tittle
Emp. No
Pay Rate
Name
Telp. No
Analys
00012724
1.000.000
Bob Geldof
7801725
Programmer
00023451
   800.000
Ceu Rika
7521475
( String(20) )
( String(8) )
( Real(9,2) )
( String(25) )
( String(7) )

      Record-record yang tipenya sama : FILE.
      Untuk menyatakan suatu data dalam record yang mempunyai identifikasi yang khusus, maka harus punya 1 field khusus yang disebut KEY (kunci field).

  DEKLARASI RECORD DALAM BAHASA PEMROGRAMAN

  PROGRAM DALAM COBOL
      DATA DIVISION.
      01  PEGAWAI.
            02  JOB_TITTLE       PIC X(20).
            02  EMP_NO             PIC X(8).
            02  PAY_RATE         PIC 9(2) V 9(2).
            02  NAME                              PIC X(25).
            02  TELP_NO                        PIC X(7).

  PROGRAM DALAM PASCAL
      Type
            Pegawai = Record;
                                    Job_Tittle : String[20];
                                    Emp_No  : String[8];
                                    Pay_Rate : Real;
                                    Name       : String[25];
                                    Telp_No   : String[7];
                             End;