Selasa, 01 Desember 2009

STRUKTUR DATA HIRARKIS : TREE
Tree merupakan salah satu struktur data yang paling penting, karena
banyak aplikasi menggunakan informasi dan data yang secara alami
memiliki struktur hirarkis berguna dalam membantu memecahkan
banyak masalah algoritmis.
Aplikasi pohon biner :
a. sebagai representasi ekspressi matematika
b. aplikasi pohon biner dalam Huffman Coding.
Cara Penggambaran Tree :
• Notasi Kurung
• Diagram Venn
• Notasi Tingkat
• Notasi Garis
1
Heap Tree dan Kegunaannya dalam Heap Sort
Efendy Chalikdjen1, Hermanto Ong2, Satria Putra Sajuthi3
Laboratorium Ilmu dan Rekayasa Komputasi
Departemen Teknik Informatika, Institut Teknologi Bandung
Jl. Ganesha 10, Bandung
E-mail : if13068@students.if.itb.ac.id1, if13069@students.if.itb.ac.id2,
if13099@students.if.itb.ac.id3
Abstrak
Mahasiswa Teknik Informatika dan orang-orang lain yang berkecimpung dalam bidang pemrograman
(programming) sering sekali menghadapi masalah pengurutan dalam membangun sebuah program aplikasi.
Misalnya saja dalam membangun sebuah aplikasi pengolah data mahasiswa, programmer akan dihadapkan pada
masalah pengurutan data mahasiswa berdasarkan atribut tertentu, seperti nama, NIM, nilai, dan sebagainya. Di
dalam bidang Teknik Informatika sendiri terdapat banyak sekali jenis-jenis algoritma pengurutan yang dapat
digunakan untuk memecahkan masalah pengurutan tersebut, di antaranya adalah bubble sort, merge sort, insertion
sort, quick sort, dan selection sort, serta masih banyak lagi jenis algoritma pengurutan lainnya. Oleh karena itu,
teknik dan kejelian untuk memilih algoritma pengurutan yang tepat dan sesuai dengan permasalahan pengurutan
yang dihadapi sangat diperlukan karena masing-masing algoritma pengurutan tersebut memiliki karakteristik yang
berbeda-beda. Penulis memilih untuk mengangkat tema Heap Sort dalam makalah ini sebab heap sort merupakan
salah satu algoritma pengurutan yang memiliki kompleksitas waktu asimptotik terbaik. Selain itu juga, heap sort
menerapkan teknik yang unik di dalam memecahkan masalah pengurutan, yaitu dengan menggunakan heap tree.
Pada makalah ini akan dibahas dan dianalisis heap tree dan kegunaanya dalam heap sort, serta contoh sederhana
mengenai cara penerapan algoritma pengurutan heap sort dalam memecahkan suatu masalah pengurutan.
Kata kunci: algoritma pengurutan, mangkus, kompleksitas waktu asimptotik, heap sort, heap tree.
1. Pendahuluan
Untuk memecahkan masalah pengurutan dalam
membangun suatu program aplikasi, dibutuhkan
algoritma pengurutan. Di dalam bidang Teknik
Informatika terdapat banyak sekali jenis-jenis
algoritma pengurutan yang dapat digunakan untuk
memecahkan masalah pengurutan. Oleh karena itu,
teknik untuk memilih algoritma pengurutan yang
tepat, sesuai dengan kebutuhan, dan mangkus sangat
diperlukan karena masing-masing algoritma
pengurutan memiliki karakteristik yang berbedabeda.
Heap sort merupakan salah satu contoh
algoritma pengurutan yang memiliki kompleksitas
waktu asimptotik terbaik serta menerapkan teknik
yang unik/khas di dalam memecahkan masalah
pengurutan, yaitu dengan menggunakan heap tree.
2. Heap Tree dan Priority Queue
2.1 Pengertian Heap Tree
Secara umum, pengertian dari heap adalah bagian
dari memori yang terorganisasi untuk dapat
melayani alokasi memori secara dinamis [2].
Suatu heap tree adalah Complete Binary Tree (CBT)
di mana harga-harga key pada node-nodenya
sedemikian rupa sehingga haga-harga key pada
node-node anaknya tidak ada yang lebih besar dari
harga key pada node orang tuanya [2].
Pengertian "lebih besar" di atas tidak mutlak, untuk
beberapa kasus maka dapat diganti sesuai dengan
permasalahan yang dihadapi.
2.2 Implementasi Priority Queue
Berdasarkan pengertian di atas maka heap tree
bermanfaat untuk mengimplementasikan priority
queue. Priority queue merupakan struktur data yang
sifatnya sangat mirip dengan antrian, yaitu
penghapusan/pengurangan anggota selalu dilakukan
pada anggota antrian yang terdepan dan penambahan
anggota selalu dilakukan dari belakang antrian
berdasarkan prioritas anggota tersebut (anggota yang
memiliki prioritas lebih besar selalu berada di depan
anggota yang memiliki prioritas lebih rendah).
2
Sebagai suatu priority queue, heap tree memerlukan
beberapa metoda sebagai berikut: [2]
a. Metoda untuk menginisialisasi suatu CBT
(Complete Binary Tree) a secara umum
menjadi heap tree.
b. Metoda untuk mengambil data paling besar,
yaitu root dari heap tree.
c. Metoda untuk menambahkan satu key baru ke
dalam heap tree.
d. Metoda untuk menyusun ulang menjadi heap
tree kembali setelah dilakukan metoda b atau c
Kriteria yang penting untuk dipenuhi adalah bahwa
setiap metoda di atas beroperasi pada tree yang
selalu berbentuk CBT (Complete Binary Tree)
karena struktur level lebih rendahnya tetap
merupakan suatu array[2].
3. Algoritma Pengurutan(Sorting Algorithm)
Heap Sort
Contoh penggunaan heap tree dalam priority queue
dapat kita lihat pada algoritma pengurutan heap sort.
Algoritma pengurutan ini mengurutkan isi suatu
array masukan dengan memandang array yang
dimasukkan sebagai suatu Complete Binary Tree
(CBT). Dengan metoda a maka Complete Binary
Tree (CBT) ini dapat dikonversi menjadi suatu heap
tree. Setelah Complete Binary Tree (CBT) berubah
menjadi suatu priority queue, maka dengan
mengambil data root satu demi satu dan disertai
dengan metoda d, key-key dari data root yang kita
ambil secara berturutan itu akan terurut dengan
output hasil pengurutan akan dituliskan dalam array
hasil dari arah kanan ke kiri.
Untuk optimasi memori, kita dapat menggunakan
hanya satu array saja. Yaitu dengan cara
memodifikasi metoda b untuk menukar isi root
dengan elemen terakhir dalam heap tree. Jika
memori tidak menjadi masalah maka dapat tetap
menggunakan 2 array yaitu array masukan dan array
hasil.
Algoritma utama heap sort:[2]
heapify()
for i ← 0 to n-1 do
remove()
reheapify()
endfor
3.1 Algoritma Metoda Heapify
Ide pertama yang harus kita pikirkan untuk
melakukan operasi heapify adalah dari bagian mana
kita harus memulai. Bila kita mencoba dari heapify
dari root maka akan terjadi operasi runut-naik seperti
algoritma bubble sort yang akan menyebabkan
kompleksitas waktu yang ada akan berlipat ganda.
Setelah diuji, dengan berbagai hasil maka ide yang
efisien adalah membentuk heap tree - heap tree
mulai dari subtree-subtree yang paling bawah. Jika
subtree-subtree suatu node sudah membentuk heap
maka tree dari node tersebut mudah dijadikan heap
tree dengan mengalirkannya ke bawah.
Jadi, algoritma utama heapify adalah melakukan
iterasi mulai dari internal node paling kanan-bawah
(atau berindeks array paling besar) hingga root,
kemudian ke arah kiri dan naik ke level di atasnya,
dan seterusnya hingga mencapai root (sebagai array
[0..N-1] ). Oleh karena itu, iterasi dilakukan mulai
dari j = N/2 dan berkurang satu-satu hingga
mencapai j = 0.
Pada internal node tersebut, pemeriksaan hanya
dilakukan pada node anaknya langsung (tidak pada
level-level lain di bawahnya). Di samping itu, pada
saat iterasi berada di level yang lebih tinggi, subtreesubtreenya
selalu sudah membentuk heap. Jadi,
kemungkinan yang paling buruk adalah
restrukturisasi hanya akan mengalirkan node
tersebut ke arah bawah. Dengan demikian, algoritma
metoda heapify ini melakukan sebanyak N/2 kali
iterasi, dan pada setiap interasi paling buruk akan
melakukan pertukaran sebanyak log2 (N) kali.
3.2 Algoritma Metoda Remove
Algoritma metoda remove hanya menukarkan
elemen array pertama dengan elemen array terakhir
yang terdapat di dalam heap tree. Secara logika,
node yang berada paling kanan-bawah dipindahkan
ke root untuk menggantikan node root yang akan
diambil.
3.3 Algoritma Metoda Reheapify
Algoritma metoda reheapify melakukan
restrukturisasi dari atas ke bawah seperti halnya
iterasi terakhir dari algoritma metoda heapify.
Perbedaan antara metoda heapify dengan metoda
reheapify terletak pada iterasi yang dilakukan oleh
kedua algoritma tersebut. Algoritma metoda
reheapify hanya melakukan iterasi terakhir dari
algoritma metoda heapify. Hal ini disebabkan baik
subtree kiri maupun subtree kanannya sudah
merupakan heap, sehingga tidak perlu dilakukan
iterasi yang lengkap seperti algoritma metoda
heapify. Dan setelah reheapify maka node yang
akan diiterasikan berikutnya akan berkurang satu.
4. Penerapan Algoritma Pengurutan Heap
Sort
Salah satu contoh penerapan algoritma pengurutan
(sorting algorithm) heap sort adalah sebagai berikut:
Misalkan terdapat suatu array bilangan bulat yang
terdiri dari sepuluh buah anggota dengan nilai data
3
11, 9, 8, 27, 16, 25, 12, 13, 34, dan 43. Kita akan
mengurutkan data diatas dengan menggunakan
heapsort.
Pertama-tama, array di atas dapat dipandang sebagai
suatu Complete Binary Tree (CBT) sebagai berikut:
Selanjutnya algoritma metoda heapify dilakukan
dengan iterasi dari subtree node ke-4, ke-3, dan
seterusnya berturut-turut hingga mencapai root
(akar). Iterasi dilakukan mulai dari node ke-4 karena
N/2 dalam contoh di atas adalah 5. Dan elemen
kelima dari array memiliki nilai indeks 4 sebab
indeks array biasanya diawali dari 0.
Penerapan algoritma metoda heapify terhadap
Complete Binary Tree (CBT) pada contoh di atas
menghasilkan operasi-operasi pertukaran sebagai
berikut:
1. Subtree node ke-4: pertukaran 16 dengan 43
2. Subtree node ke-3: pertukaran 27 dengan 34
3. Subtree node ke-2: pertukaran 8 dengan 25
4. Subtree node ke-1: pertukaran 9 dengan 43, lalu
pertukaran 9 dengan 16
5. Subtree node ke-0: pertukaran 11 dengan 43, lalu
pertukaran 11 dengan 34, serta akhirnya
pertukaran 11 dengan 27
Perubahan-perubahan (pertukaran) tersebut dapat
digambarkan sebagai berikut:
Semua perubahan di atas terjadi dalam array yang
bersangkutan, sehingga pada akhirnya diperoleh tree
terakhir yang merupakan heap tree.
Sementara itu, dalam iterasi yang
melakukan/menerapkan algoritma metoda remove( )
dan algoritma metoda reheapify() akan terjadi
pemrosesan berikut:
1. Setelah 43 di-remove dan 9 menggantikan posisi
yang ditinggalkan oleh 43, maka terjadi
reheapify: penukaran 9 dengan 34, 9 dengan 27,
dan 9 dengan 13.
menjadi
dan data yang telah terurut adalah 43.
2. Setelah 34 di-remove dan 11 menggantikan
posisi yang ditinggalkan oleh 34, maka terjadi
reheapify: penukaran 11 dengan 27, dan 11
dengan 16.
4
menjadi
dan data yang telah terurut adalah 34, 43.
3. Setelah 27 di-remove dan 9 menggantikan posisi
yang ditinggalkan oleh 27, maka terjadi
reheapify: penukaran 9 dengan 25, dan 9 dengan
12.
menjadi
dan data yang telah terurut adalah 27, 34, 43.
4. Demikian seterusnya dilakukan algoritma
metoda remove dan algoritma metoda reheapify
hingga tidak ada lagi node yang tersisa. Dan
pada akhirnya akan didapatkan hasil data yang
telah terurut adalah 8, 9, 11, 12, 13, 16, 25, 27,
34, 43.
5. Representasi Alokasi Dinamis Algoritma
Pengurutan Heap Sort
Karakteristik dari algoritma pengurutan heap sort
adalah bahwa dalam implementasinya heap sort
menggunakan heap tree agar dapat diselesaikan
secara heapsort. Oleh karena itu, untuk
mengimplementasikan algoritma pengurutan heap
sort dalam suatu program aplikasi, dibutuhkan
adanya alokasi dinamis dengan menggunakan
struktur data tree (pohon).
Prinsip-prinsip dasar mengenai struktur data tree
yang digunakan untuk merealisasikan heap tree
adalah sebagai berikut:
a. Node-node saling berhubungan dengan
menggunakan pointer. Pada struktur data tree ini
digunakan minimal dua buah pointer pada setiap
node, masing-masing untuk menunjuk ke cabang
kiri dan cabang kanan dari tree tersebut.
Misalnya dalam bahasa C, struktur data tree
dideklarasikan sebagai berikut:
class BinaryTreeNode {
KeyType Key;
InfoType Info;
BinaryTreeNode Left, Right;
}
b. Left dan Right berharga NULL apabila tidak ada
lagi cabang pada arah yang bersangkutan.
c. Struktur dari binary tree, termasuk hubunganhubungan
antar-node, secara eksplisit
direpresentasikan oleh Left dan Right. Apabila
diperlukan penelusuran naik (backtrack), maka
hal tersebut dapat dilakukan dengan penelusuran
ulang dari root, penggunaan algoritma-algoritma
yang bersifat rekursif, atau penggunaan stack.
d. Alternatif lain adalah dengan menambahkan
adanya pointer ke parent. Namun hal ini akan
mengakibatkan bertambahnya jumlah tahapan
pada proses-proses penambahan/penghapusan
node.
6. Kesimpulan
Algoritma pengurutan heap sort dapat digunakan
untuk menyelesaikan masalah-masalah pengurutan
dalam membangun suatu program aplikasi dengan
mangkus.
Algoritma pengurutan heap sort dapat dikategorikan
ke dalam algoritma divide and conquer dengan
pendekatan pengurutan sulit membagi, mudah
menggabung (hard split/easy join) seperti halnya
algoritma pengurutan quick sort dan selection sort.
Hal ini disebabkan pembagian dilakukan dengan
terlebih dahulu menerapkan algoritma metoda
heapify sebagai inisialisasi awal untuk
mentransformasi suatu Complete Binary Tree (CBT)
menjadi heap tree dan pada setiap tahapan
diterapkan algoritma metoda reheapify untuk
menyusun ulang heap tree. Pembagiannya sendiri
dilakukan dengan menerapkan metoda remove yang
akan membagi data yang akan diurutkan menjadi
dua bagian, masing-masing berukuran sebanyak satu
dan sebanyak jumlah node di dalam heap tree
dikurangi dengan satu. Sementara itu, proses
penggabungannya sangat mudah sebab pada setiap
tahapan, data terbesar dari tahap tersebut
digabungkan dengan cara disisipkan di depan data
terbesar yang diperoleh dari tahap sebelumnya.
Keunggulan algoritma pengurutan heap sort terletak
pada kompleksitas waktu asimptotiknya yang sangat
baik. Untuk melakukan algoritma metoda heapify
dilakukan iterasi mulai dari elemen ke-N/2 sampai
dengan elemen ke-1, dan pada setiap iterasi paling
banyak akan dilakukan operasi pertukaran sebanyak
log2 (N) kali. Oleh karena itu, kompleksitas waktu
asimptotik algoritma metoda heapify adalah T(N) =
N/2 * log2 (N) = O (N log2 (N)). Sementara itu,
5
algoritma metoda remove hanya melakukan
pertukaran elemen pertama dengan elemen terakhir
dalam heap tree sehingga kompleksitas waktu
asimptotiknya adalah T(N) = O (a), a adalah
konstanta. Sedangkan algoritma metoda reheapify
hanya melakukan restrukturisasi ulang elemen root
untuk membentuk heap tree setelah dilakukan
algoritma metoda remove. Dengan demikian,
kompleksitas waktu asimptotik algoritma metoda
reheapify setara dengan T(N) = O (log2 (N)). Pada
algoritma pengurutan (sorting algorithm) heap sort,
algoritma metoda heapify dilakukan hanya satu kali
sebagai inisialisasi sebelum iterasi, dan algoritma
metoda remove dan reheapify dilakukan sebanyak
jumlah iterasi, yaitu N. Jadi, kompleksitas waktu
asimptotik algoritma pengurutan (sorting algorithm)
heap sort adalah T(N) = (N/2 * log2 (N)) + (N * (a +
log2 (N))) = N/2 log2 (N) + Na + N log2 (N) = 3N/2
log2 (N) + Na = bN log2 (N) + Na = O (N log2 (N)).
Karakteristik (ciri khas) dari algoritma pengurutan
(sorting algorithm) heap sort terletak pada
penggunaan heap tree sebagai sarana untuk
menyelesaikan / memecahkan permasalahan
pengurutan. Hal ini menjadi salah satu faktor yang
membuat algoritma pengurutan (sorting algorithm)
heap sort menjadi unik (khas), menarik, dan
berbeda apabila dibandingkan dengan algoritmaalgoritma
pengurutan (sorting algorithm) lainnya.
Daftar Pustaka
1. http://www.cse.iitk.ac.in/users/dsrkg/cs210/applets
/sortingII/heapSort/heap.html. Diakses tanggal 17
Mei 2005 pukul 16.30 WIB.
2. http://www.cs.ui.ac.id/kuliah/IKI10100/1998/
handout/handout15.html. Diakses tanggal
17Mei 2005 pukul 17.00 WIB.

Tree

Kumpulan node yang saling terhubung satu sama lain dalam suatu kesatuan yang membentuk layakya struktur sebuah pohon.
Struktur pohon adalah suatu cara merepresentasikan suatu struktur hirarki (one-to-many) secara grafis yang mirip sebuah pohon, walaupun pohon tersebut hanya tampak sebagai kumpulan node-node dari atas ke bawah.
Suatu struktur data yang tidak linier yang menggambarkan hubungan yang hirarkis (one-to-many) dan tidak linier antara elemen-elemennya.
Tree Statik : isi node-nodenya tetap karena bentuk pohonnya sudah ditentukan.
Tree Dinamik : isi nodenya berubah-ubah karena proses penambahan (insert) dan penghapusan (delete)
node root
Node root dalam sebuah tree adalah suatu node yang memiliki hiarki tertinggi dan dapat juga memiliki node-node anak. Semua node dapat ditelusuri dari node root tersebut.
Node root adalah node khusus yang tercipta pertama kalinya.
Node-node lain di bawah node root saling terhubung satu sama lain dan disebut subtree

Contoh penggunaan struktur pohon :
Silsilah keluarga
Parse Tree (pada compiler)
Struktur File
Pertandingan

Tree dapat dibuat dengan menggunakan linked list secara rekursif.
Linked list yang digunakan adalah double linked list non circular
Data yang pertama kali masuk akan menjadi node root.
Data yang lebih kecil dari data node root akan masuk dan menempati node kiri dari node root, sedangkan jika lebih besar dari data node root, akan masuk dan menempati node di sebelah kanan node root.

oprasi pada tree
Create: membentuk sebuah tree baru yang kosong.
pohon = NULL;
Clear: menghapus semua elemen tree.
pohon = NULL;
Empty: mengetahui apakah tree kosong atau tidak
int isEmpty(Tree *pohon){
if(pohon == NULL) return 1;
else return 0;
}
Insert: menambah node ke dalam Tree secara rekursif. Jika data yang akan dimasukkan lebih besar daripada elemen root, maka akan diletakkan di node sebelah kanan, sebaliknya jika lebih kecil maka akan diletakkan di node sebelah kiri. Untuk data pertama akan menjadi elemen root.
Find: mencari node di dalam Tree secara rekursif sampai node tersebut ditemukan dengan menggunakan variable bantuan ketemu. Syaratnya adalah tree tidak boleh kosong.
Traverse: yaitu operasi kunjungan terhadap node-node dalam pohon dimana masing-masing node akan dikunjungi sekali.
Count: menghitung jumlah node dalam Tree
Height : mengetahui kedalaman sebuah Tree
Find Min dan Find Max : mencari nilai terkecil dan terbesar pada Tree
Child : mengetahui anak dari sebuah node (jika punya)
PreOrder: cetak node yang dikunjungi, kunjungi left, kunjungi right
InOrder: kunjungi left, cetak node yang dikunjungi, kunjungi right
PostOrder: kunjungi left, kunjungi right, cetak node yang dikunjungi

insret
void tambah(Tree **root,int databaru){
if((*root) == NULL){
Tree *baru;
baru = new Tree;
baru->data = databaru;
baru->left = NULL;
baru->right = NULL;
(*root) = baru;
(*root)->left = NULL;
(*root)->right = NULL;
}
else if(databaru < (*root)->data)
tambah(&(*root)->left,databaru);
else if(databaru > (*root)->data)
tambah(&(*root)->right,databaru);
else if(databaru == (*root)->data)
printf("Data sudah ada!");
search
Tree *cari(Tree *root,int data){
if(root==NULL) return NULL;
else if(data < root->data) return (cari(root->left,data));
else if(data > root->data) return (cari(root->right,data));
else if(data == root->data) return root;
}



Pencarian dilakukan secara rekursif, dimulai dari node root, jika data yang dicari lebih kecil daripada data node root, maka pencarian dilakukan di sub node sebelah kiri, sedangkan jika data yang dicari lebih besar daripada data node root, maka pencarian dilakukan di sub node sebelah kanan, jika data yang dicari sama dengan data suatu node berarti kembalikan node tersebut dan berarti data ditemukan.

jml nood
int count(Tree *root)
{
if (root == NULL) return 0;
return count(root->left) + count(root->right) + 1;
}

Penghitungan jumlah node dalam tree dilakukan dengan cara mengunjungi setiap node, dimulai dari root ke subtree kiri, kemudian ke subtree kanan dan masing-masing node dicatat jumlahnya, dan terakhir jumlah node yang ada di subtree kiri dijumlahkan dengan jumlah node yang ada di subtree kanan ditambah 1 yaitu node root.

int height(Tree *root)
{
if (root == NULL) return -1;
int u = height(root->left), v = height(root->right);
if (u > v) return u+1;
else return v+1;
}

Penghitungan kedalaman dihitung dari setelah root, yang dimulai dari subtree bagian kiri kemudian ke subtree bagian kanan. Untuk masing-masing kedalaman kiri dan kanan akan dibandingkan, jika ternyata subtree kiri lebih dalam, maka yang dipakai adalah jumlah kedalaman subtree kiri, demikian sebaliknya. Hal ini didasarkan pada prinsip binary tree, dimana tree-nya selalu memiliki maksimal 2 node anak.

Tree *FindMin(Tree *root)
{
if(root == NULL)
return NULL;
else
if(root->left == NULL)
return root;
else
return FindMin(root->left);
}

Penggunaan:
Tree *t = FindMin(pohon);

mencari daun
void leaf(Tree *root){
if(root == NULL) printf("kosong!");
if(root->left!=NULL) leaf(root->left);
if(root->right!=NULL) leaf(root->right);
if(root->right == NULL && root->left == NULL) printf("%d ",root->data);
}
tutorialpemrograman.wordpress.com - 2009 2
Tree merupakan salah satu bentuk struktur data bukan linier yang menggambarkan bentuk hierarki antara elemen-elemen. Tree biasanya terdiri dari root (akar) dan node-node (simpul-simpul) yang berada di bawah root. Struktur seperti tree sangat banyak sekali dgunakan dalam dunia nyata, misalnya: struktur organisasi suatu perusahaan, pengaturan filesystem, daftar isi sebuah buku, dan masih banyak lagi.
Degree (derajat) adalah jumlah edge yang keluar dan masuk dari sebuah node. Contoh : node E memiliki in degree 1 dan out degree 2 Root (akar) adalah node yang memiliki derajat keluar >=0 dan derajat masuk = 0. Contoh : node A adalah root Subtree / child adalah bagian salah satu node dibawah root sampai ke bawah. Contoh : tree C adalah right subtree dari A dan tree B merupakan left subtree dari A node G dan F merupakan child dari node C node F merupakan parent dari node J dan K Ancestor adalah Node yang berada di atas node lain. Contoh : node B adalah ancestor dari node E Descendant adalah node yang berada di bawah node lain.
Contoh : node E adalah descendant dari node A.
A
B
C
D
G
E
F
H
I
J
K
root
Level 0
Level 1
Level 2
Level 3
leftChild
rightChild
leftChild
leftChild
leftChild
leftChild
rightChild
rightChild
rightChild
rightChild
Struktur Data Tree/Pohon dalam Bahasa Java
tutorialpemrograman.wordpress.com - 2009 3
Leaf (daun) adalah semua node yang derajat masuknya 1 dan derajat keluarnya 0. Contoh : node D, H, I, J, K, dan G adalah leaf Sibling adalah node yang mempunyai level yang sama dan parent yang sama. Contoh : node D adalah sibling dari node A Height (ketinggian) adalah level tertinggi dari tree ditambah 1. Contoh : height dari tree A adalah 3 + 1 = 4 Weight (bobot) adalah jumlah leaf(daun) pada tree. Contoh : weight dari tree A adalah 6 BINARY TREE Sebuah tree dengan syarat bahwa tiap node hanya boleh memiliki maksimal 2 subtree yang disebut sebagai subpohon kiri(left subtree) dan subpohon kanan (right subtree) dan kedua subtree tersebut harus terpisah, atau dengan kata lain tiap node dalam binary tree hanya boleh memiliki paling banyak 2 child. Binary tree terdiri dari : 1. Full Binary Tree : semua node (kecuali leaf pasti memiliki 2 anak dan tiap subtree memiliki panjang path yang sama)
2. Complete Binary Tree : mirip dengan full binary tree, tetapi tiap subtree boleh memiliki panjang path yang berbeda dan tiap node (kecuali leaf memiliki 2 anak)
3. Skewed Binary Tree : binary tree yang semua nodenya (kecuali leaf) hanya memiliki satu anak
BINARY SEARCH TREE Binary tree dengan sifat bahwa nilai dari semua left child harus lebih kecil daripada nilai dari right child dan parentnya.

contoh progrm tree
/**
* Program membuat binary tree yang memiliki 2 anak dimana insertion
* dilakukan secara terurut, dimana data yang lebih kecil diletakkan di kiri
* dan yang lebih besar diletakkan di kanan.
* @author : Jeffrey Hermanto Halimsetiawan
* Selasa, 1 April 2008
**/
import java.util.*;
class Node{
int data;
Node left;
Node right;
Node(int x){
this.data = x;
}
}
public class BinTree{
private Node root;
/**
* Mengecek apakah tree masih kosong
**/
private boolean isEmpty(){
return (root == null);
}
/**
* Memasukkan suatu nilai ke dalam tree.
* Jika nilai tersebut lebih kecil dari nilai node, maka bergerak ke kiri terus
* hingga menjadi child, begitu juga sebaliknya.
**/
public void insert(int input){
Node temp = new Node(input);
if (isEmpty())
root = temp;
else {
Node cursor = root,
parent = null;
while (cursor != null){
parent = cursor;
if (input < cursor.data)
cursor = cursor.left;
else
cursor = cursor.right;
}
/**
* Menambahkan Node baru pada kiri/kanan Node parent bergantung
* pada nilai input dan nilai yang disimpan Node parent
**/
if (input < parent.data){
parent.left = temp;
return;
}
else {
parent.right = temp;
return;
}
}
}
/**
* Mencari suatu nilai dalam tree berdasarkan prinsip :
* Selama belum menemukan nilai yang sama,
* Jika nilai yang dicari lebih kecil dari nilai yang disimpan dalam Node
* maka bergerak ke left Child begitu juga sebaliknya.
**/
public Node find(int key){
Node cursor = root;
while (cursor != null){
if (cursor.data == key)
return cursor;
else if (key < cursor.data)
cursor = cursor.left;
else
cursor = cursor.right;
}
return null;
}
public boolean delete(int key){
Node cursor = root,
parent = null;
boolean found = false,
isLeftChild = true; //menandai apakah Node yang dihapus merupakan left child
if (!isEmpty()){
while (cursor != null){
parent = cursor;
if (key == cursor.data){
found = true;
break;
}
else if (key < cursor.data){
isLeftChild = true;
cursor = cursor.left;
}
else {
isLeftChild = false;
cursor = cursor.right;
}
}
if (!found)
return false;
else {
/**
* Untuk menghapus leaf (tidak punya child)
**/
if (cursor.left == null && cursor.right == null){
if (cursor == root)
root = null;
else if (isLeftChild)
parent.left = null;
else
parent.right = null;
}
/**
* Jika node yang akan dihapus hanya memiliki salah satu subtree
* maka tinggal memindahkan subtree menggantikan node yang dihapus
**/
else if (cursor.left == null){
if (cursor == root)
root = cursor.right;
else if (isLeftChild)
parent.left = cursor.right;
else
parent.right = cursor.right;
}
else if (cursor.right == null){
if (cursor == root)
root = cursor.left;
else if (isLeftChild)
parent.left = cursor.left;
else
parent.right = cursor.left;
}
/**
* Jika node yang akan dihapus memiliki 2 child, maka cari successornya
* dengan fungsi getSuccessor kemudian hubungkan subtree bagian kanan
* dari node yang dihapus dengan successor
**/
else {
Node successor = getSuccessor(cursor);
if (cursor == root)
root = successor;
else if (isLeftChild)
parent.left = successor;
else
parent.right = successor;
//menyambung successor dengan cursor.right
successor.right = cursor.right;
}
}
}
return true;
}
/**
* Mencari nilai terbesar yang mendekati nilai yang disimpan Node
* yang dihapus, Ilustrasi :
*
* 65
* 59 72
* 32 64
* 62
* misal : nilai yang dihapus 65, maka nilai terbesar yang mendekati adalah 64.
* maka ambil 64 sebagai successor, kemudian gabungkan
* 59
* 32 63
* Kemudian satukan keduanya :
* 64
* 59
* 32 63
* Jadilah urutan tree yang masih memenuhi syarat Binary Search Tree
**/
private Node getSuccessor(Node localNode){
Node parent = null,
successor = localNode,
cursor = localNode.left;
while (cursor != null){
parent = successor;
successor = cursor;
cursor = cursor.right;
}
if (successor != localNode.left){
parent.right = successor.left;
successor.left = localNode.left;
}
return successor;
}
/**
* Method traverse untuk mengelilingi Node-Node dalam tree
**/
public void traverse(int tipe){
switch (tipe){
case 1:
System.out.print("\nPreorder traversal:\n");
preOrder(root);
break;
case 2:
System.out.print("\nInorder traversal:\n");
inOrder(root);
break;
case 3:
System.out.print("\nPostorder traversal:\n");
postOrder(root);
break;
}
System.out.println('\n');
}
private void preOrder(Node localRoot){
if (localRoot == null) return;
System.out.print(localRoot.data+" ");
preOrder(localRoot.left);
preOrder(localRoot.right);
}
private void inOrder(Node localRoot){
if (localRoot == null) return;
inOrder(localRoot.left);
System.out.print(localRoot.data+" ");
inOrder(localRoot.right);
}
private void postOrder(Node localRoot){
if (localRoot == null) return;
postOrder(localRoot.left);
postOrder(localRoot.right);
System.out.print(localRoot.data+" ");
}
}

tree

Simpul (node)

Sebuah Simpul dapat mengandung sebuah nilai atau suatu kondisi atau menggambarkan sebuah struktur data terpisah atau sebuah bagian pohon itu sendiri. Setiap simpul dalam sebuah pohon memiliki nol atau lebih simpul anak (child nodes), yang berada dibawahnya dalam pohon (menurut perjanjian, pohon berkembang ke bawah, tidak seperti yang dilakukannya di alam). Sebuah simpul yang memiliki anak dinamakan simpul ayah (parent node) atau simpul leluhur (ancestor node) atau superior. Sebuah simpul paling banyak memiliki satu ayah. Tinggi dari pohon adalah panjang maksimal jalan ke sebuah daun dari simpul tersebut. Tinggi dari akar adalah tinggi dari pohon. Kedalaman dari sebuah simpul adalah panjang jalan ke akarnya dari simpul tersebut.

Akar (Root nodes)

Simpul yang paling atas dalam pohon adalah akar (root node). Menjadi simpul teratas, simpul akar tidak akan memiliki orang tua. Ini merupakan simpul dimana biasanya merupakan tempat untuk memulai operasi dalam pohon (walaupun beberapa algoritma dimulai dengan daun dan berakhir pada akar). Semua simpul yang lain dapat dicapai dari akar dengan menelusuri pinggiran atau pranala. (Dalam definisi resmi, setiap jalan adalah khas). Dalam diagram, ini secara khusus digambar paling atas. Di beberapa pohon, seperti heap, akar memiliki sifat khusus. Setiap simpul dalam sebuah pohon dapat dilihat sebagai akar dari sub pohon yang berakar pada simpul tersebut.

Daun (Leaf nodes)


Semua simpul yang berada pada tingkat terendah dari pohon dinamakan daun (leaf node). Sejak mereka terletak pada tingkat paling bawah, mereka tidak memiliki anak satupun. Seringkali, daun merupakan simpul terjauh dari akar. Dalam teori grafik, sebuah daun adalah sebuah sudut dengan tingkat 1 selain akar (kecuali jika pohonnya hanya memiliki satu sudut; maka akarnya adalah daunnya juga). Setiap pohon memiliki setidaknya satu daun.

Dalam pohon berdasarkan genetic programming sebuah daun (juga dibilang terminal) adalah bagian terluar dari sebuah program pohon. Jika dibandingkan dengan fungsinya atau simpul dalam, daun tidak memiliki argumen. Di banyak kasus dalam daun-GP input ke programnya.

Simpul dalam (Internal nodes)

Sebuah simpul dalam adalah semua simpul dari pohon yang memiliki anak dan bukan merupakan daun. Beberapa pohon hanya menyimpan data didalam simpul dalam, meskipun ini mempengaruhi dinamika penyimpanan data dalam pohon. Sebegai contoh, dengan daun yang kosong, seseorang dapat menyimpan sebuah pohon kosong dengan satu daun. Bagaimanapun juga dengan daun yang dapat menyimpan data, tidak dimungkinkan untuk menyimpan pohon kosong kecuali jika seseorang memberikan beberapa jenis penanda data di daun yang menandakan bahwa daun tersebut seharusnya kosong (dengan demikian pohon itu seharusnya kosong juga).

Sebaliknya, beberapa pohon hanya menyimpan data dalam daun, dan menggunakan simpul dalam untuk menampung metadata yang lain, seperti jarak nilai dalam sub pohon yang berakar pada simpul tersebut. Jenis pohon ini berguna untuk jarak yang meragukan.

Sub pohon (Subtrees)

Sebuah sub pohon adalah suatu bagian dari pohon struktur data yang dapat dilihat sebagai sebuah pohon lain yang berdiri sendiri. Simpul apapun dalam pohon P, bersama dengan seluruh simpul dibawahnya, membentuk sebuah sub pohon dari P. Sub pohon yang terhubung dengan akar merupakan keseluruhan pohon tersebut. Sub pohon yang terhubung dengan simpul lain manapun dinamakan sub pohon asli (proper subtree).

Penyusunan pohon

Terdapat dua jenis pohon. Sebuah pohon tidak terurut (unordered tree) adalah sebuah pohon dalam arti struktural semata-mata, yang dapat dikatakan memberikan sebuah simpul yang tidak memiliki susunan untuk anak dari simpul tersebut. Sebuah pohon dengan suatu susunan ditentukan, sebagai contoh dengan mengisi bilangan asli berbeda ke setiap anak dari simpul tersebut, dinamakan sebuah pohon terurut (ordered tree), dan struktur data yang dibangun didalamnya dinamakan pohon terurut struktur data (ordered tree data structures). Sejauh ini pohon terurut merupakan bentuk umum dari pohon struktur data. Pohon biner terurut merupakan suatu jenis dari pohon terurut.

Hutan

Sebuah hutan adalah sebuah himpunan yang terdiri dari pohon terurut. Lintasan inorder, preorder, dan postorder didefinisikan secara rekursif untuk hutan.
inorder
lewati inorder hutan yang dibentuk oleh sub pohon yang pertama dalam hutan, jika ada
kunjungi akar dari pohon pertama.
lewati inorder hutan yang dibentuk oleh sisa pohon dalam hutan, jika ada.
preorder
kunjungi akar dari pohon pertama.
lewati preorder hutan yang dibentuk oleh sub pohon yang pertama dalam hutan, jika ada
lewati preorder hutan yang dibentuk oleh sisa pohon dalam hutan, jika ada.
postorder
lewati postorder hutan yang dibentuk oleh sub pohon yang pertama dalam hutan, jika ada
lewati postorder hutan yang dibentuk oleh sisa pohon dalam hutan, jika ada.
kunjungi akar dari pohon pertama.
[sunting]
Penggambaran pohon

Ada banyak cara untuk menggambarkan pohon; pada umumnya penggambaran mewakili simpul sebagai rekor yang dialokasikan pada heap (bedakan dengan heap struktur data) yang mengacu pada anaknya, ayahnya, atau keduanya, atau seperti data materi dalam array, dengan hubungan diantaranya ditentukan oleh posisi mereka dalam array (contoh binary heap)
[sunting]
Pohon sebagai grafik

Dalam teori grafik, sebuah pohon adalah sebuah grafik asiklis yang terhubung. Pohon yang berakar merupakan sebuah grafik dengan sudut tunggal diluar sebagai akar. Dalam kasus ini, dua sudut apapun yang terhubung dengan sebuah sisi mewarisi hubungan orang tua dan anak. Sebuah grafik asiklis dengan bermacam-macam komponen yang terhubung atau himpunan dari pohon-pohon yang berakar kadang-kadang dipanggil hutan

Metode traversal

Melangkah melalui materi dari pohon, dengan arti dari hubungan antara orang tua dan anak, dinamakan menelusuri pohon, dan tindakannya adalah sebuah jalan dari pohon. Seringkali, sebuah operasi mungkin dapat dilakukan sebagai penunjuk ysng mengacu pada simpul khusus. Sebuah penelusuran dimana setiap simpul ayah dikunjungi sebelum anaknya dinamakan pre-order walk; sebuah penelusuran dimana anaknya dikunjungi sebelum ayahnya masing-masing dinamakan post-order walk.

Operasi umum
Menghitung seluruh materi (item)
Pencarian untuk sebuah materi
Menambahkan sebuah materi pada sebuah posisi tertentu dalam pohon
Menghapus sebuah materi
Mengeluarkan seluruh bagian dari sebuah pohon pruning
Menambahkan seluruh bagian ke sebuah pohon grafting
Menemukan akar untuk simpul apapun

Penggunaan umum
Memanipulasi data secara hierarki
Membuat informasi mudah untuk dicari
Memanipulasi data sorted lists

program larik

program contoh_larik¬;
uses wincrt;
const max=100;
type larikint = array [1..max] of integer;
var
a : larikint; i : integer;
n : integer; u : real;
akh : char; id : integer;
x : integer; idx : integer;
procedure bacalarik (var a: larikint; n : integer);
var
i : integer;
begin
for i := 1 to n do
begin
write ('masukan nilai a[',i,'] : '); readln (a[i]);
end;
end;
procedure cetaklarik (a : larikint; n : integer);
var
i : integer;
begin
for i := 1 to n do
writeln ('a[',i,'] = ',a[i]);
end;
procedure hitungratata (a : larikint; n : integer; var u : real);
var
i : integer;
jumlah : real;
begin
i := 1;
jumlah := 0;
for i := 1 to n do
jumlah := jumlah + a[i];
u := jumlah/n;
end;
procedure carimaks (a : larikint; n: integer; var id : integer);
var
i : integer;
begin
id := 1;
for i := 2 to n do
if (a[i]) > (a[id]) then
id := i ;
end;
procedure carimin (a : larikint; n : integer; var id : integer);
var
i : integer;
begin
id := 1;
for i := 2 to n do
if (a[i]) < (a[id]) then id := i; end; procedure caritemp (a : larikint; n : integer; x : integer; var idx : integer); var i : integer; begin i := 1; while (i < n ) and (a[i] <> x) do
i := i + 1 ;

if a[i] = x then
idx := i
end;
{program utama}
begin
clrscr;
repeat;
writeln ('CONTOH PROGRAM LARIK (ARRAY)');
writeln (‘created by: andre septian’);
writeln;
begin
writeln (' baca jumlah data (n) ; '); readln (n);
writeln;
writeln ('baca larik');
bacalarik (a,n);
writeln;
writeln ('cetak data');
cetaklarik (a,n);
writeln;
hitungratata (a,n,u);
writeln;
writeln('rata- rata data = ', u:10:6);
carimaks (a,n,id);
writeln;
writeln ('Nilai terbesar : ',a[id]);
x := a[id];
caritemp (a,n,x,idx);
writeln ('bertempat pada larik ke : ',idx);
carimin (a,n,id);
writeln;
writeln ('Nilai terkecil adalah : ',a[id]);
x := a[id];
caritemp (a,n,x,idx);
writeln ('bertempat pada larik ke: ',idx);
end;
writeln;
writeln;
writeln (' ulangi program [y/t] : '); read (akh);
until (akh = 't') ;
end.







Tugas Struktur Data II
20/10/09

Dibuat oleh : Andre Septian
NPM : 08-14-1-0090
Jurusan :Teknik Informatika A

stack bahasa pascal

Program Tumpukan



uses wincrt;

const MaxElemen=5;

type Tumpukan =record

isi:array[1..MaxElemen] of integer;

atas: 0..MaxElemen

end;

type isi=array[0..maxelemen] of integer;

const isilama1:isi=(3,7,2,6,4,8);

isibaru1:isi=(4,8,3,6,5,1);

var

Nilailama,Nilaibaru:isi;

T:tumpukan;

{———————————————————————}

Procedure Ganti_NilaiStack(T:tumpukan;Nilailama,Nilaibaru:isi);

var

penuh,habis: boolean;

x,i:integer;

{———————————————————————}

procedure push( var T:tumpukan; var penuh:boolean;x:integer);

begin

if T.atas = maxElemen then penuh:=true

else

begin

penuh :=false;

T.isi[T.atas]:=x;

T.atas:=T.atas+1;

end;

end;

{———————————————————————}

procedure pop(var T:tumpukan;var habis:boolean; var x:integer);

begin

if T.atas =0 then habis:=true

else

begin

habis:=false;

T.atas:=T.atas-1;

x:=T.isi[T.atas];

end;

end;

{———————————————————————}

begin

clrscr;

write(‘Nilai Lama Sebelum Masuk Tumpukan : ‘);

for i:=0 to maxelemen do

write(isilama1[i]);

writeln;

write(‘Nilai Baru Sebelum Masuk Tumpukan : ‘);

for i:=0 to maxelemen do

write(isibaru1[i]);

writeln;

penuh:=false;

while penuh=false do

begin

push(T,penuh,Nilailama[T.atas]);

end;

write(‘Isi Tumpukan Lama : ‘);

while T.atas<>0 do

begin

pop(T,habis,x);

write(x);

end;

writeln;penuh:=false;

while penuh=false do

begin

push(T,penuh,Nilaibaru[T.atas]);

end;

write(‘Isi Tumpukan Baru : ‘);

while T.atas<>0 do

begin

pop(T,habis,x);

write(x);

end;

end;

{———————————————————————}

begin

Nilailama:=isilama1;Nilaibaru:=isibaru1;

Ganti_NilaiStack(T,Nilailama,Nilaibaru);

readkey;

end.

antrian dalam bahasa c

Queue (antrian)
May 9, 2007 at 5:19 am | In Informatic |


Merupakan kumpulan data yang penambahan elemennya hanya bisa dilakukan pada sisi belakang dan penghapusannya hanya bisa dilakukan pada sisi depan. Konsep utamanya berkebalikan dari stack (tumpukan), yaitu First In First Out. Contoh : orang antri beli tiket ke kebun binatang, Mahasiswa antri bayar KRS. Implementasi antrian menggunakan dua pointer, yaitu pointer yang menunjukkan elemen terdepan dan elemen terakhir

Operasi antrian

1. Menambah elemen baru pada bagian belakang antrian

2. Menghapus elemen baru pada bagian depan antrian

3. Melakukan pengecekan apakah antrian kosong. tidak mungkin menghapus antrian yang sudah kosong.

CONTOH PROGRAM USING C++ :

unit antrih.h


# include

# include

# include

# define alamat Elemen*


// inisialisasi type data dan variable serta fungsi yang dibutuhkan

typedef char tInfo;

typedef struct Elemen

{

tInfo Info;

alamat Berikut;

}tElemen;


typedef struct tagAntrian

{

alamat kepala;

alamat ekor;

} Antrian;


void inisialisasi(Antrian* Q);

void enQueue(Antrian* Q, tInfo info);

void deQueue(Antrian* Q, tInfo* Info);

int queueKosong (Antrian Q);


//insisialisasi antrian

void inisialisasi(Antrian* Q)

{

Q->kepala = NULL; //kepala antrian bernilai null;

Q->ekor = NULL; //ekor antrian bernilai null;

}


// Operasi enqueue

void enQueue(Antrian* Q, tInfo info)

{

alamat P; // tipe data P adalah alamat

P = new Elemen; //(alamat) malloc(sizeof(alamat));


if (queueKosong(*Q))

{

P->Info = info; //elemen Info berisi info

P->Berikut = NULL; //elemen Berikut bernilai null

Q->ekor = P; // ekor antrian berisi P

Q->kepala = Q->ekor; // kepala antrian berisi ekor antrian

}


else

{

P->Info = info;

P->Berikut = NULL;

Q->ekor->Berikut = P; //ekor antrian berikut bernilai P

Q->ekor = P; //ekor antrian berisi P

}

}


// Operasi dequeue

void deQueue(Antrian* Q, tInfo* Info)

{

alamat P;

P = Q->kepala;

*Info = P->Info;


if ((Q->kepala) == (Q->ekor))

{

Q->kepala = NULL;

Q->ekor = NULL;

}


else

{

Q->kepala = Q->kepala->Berikut;

// kepala antrian berisi kepala antrian berikutnya

}

free(P);


cout<

# include

# include

# define alamat Elemen*

# include


//untuk menampilkan antrian

void tampilQueue(Antrian Q)

{

alamat P = Q.kepala;

cout << “Isi queue : “; while ((P!=NULL)) { cout << P->Info << ” - “; P = P->Berikut;

}

cout << “\n”; } // untuk mencetak menu void cetakMenu(){ cout << “***CONTOH ANTRIAN***”; cout << “\n 1. Tambah elemen\n”; cout << “ 2. Hapus elemen\n”; cout << “ 3. Cetak antrian\n”; cout << “ 4. Selesai\n\n”; } // Program utama int main() { Antrian Q; int selesai; int pilMenu; tInfo elm; inisialisasi(&Q); selesai = 0; do { clrscr; cetakMenu(); cout << “Menu yg dipilih : “; cin >> pilMenu;


switch(pilMenu) {

case 1 : cout << “\nMasukkan elemen yg ditambahkan : “; cin >> elm;

enQueue(&Q,elm);

break;

case 2 : if (queueKosong(Q))

{

cout << “\nAntrian kosong, tidak bisa dihapus\n”;

}

else

{

deQueue(&Q, &elm);

cout << “\nElemen yang dihapus : ” << elm << “\n”;

}

break;

case 3 : tampilQueue(Q);

break;

default : selesai = 1;

}

}

while ( !selesai );

return 1;

}

stack dalam bahasa c

stack (tumpukan)
May 9, 2007 at 5:06 am | In Informatic |


Definisi stack sebenernya sangat sederhana. Yaitu data yang diletakkan diatas data lainnya. Dalam stack kita bisa menambah,menyisipkan dan menghapus data. Contoh stack dalam kehidupan sehari-hari bisa kita lihat dalam tumpukan piring. Konsep utama stack ini adalah Last In First Out.

Satu hal yang perlu diingat adalah bahwa didalam suatu tumpukan dapat menambah (menyisipkan) data dan mengambil (menghapus) data lewat ujung yang sama yang disebut sebagai ujung atas tumpukan.

Secara sederhana sebuah tumpuykan bisa digambarkan seperti tersaji pada gambar 6.1. Dari gambar tersebut dapat dikatakan bahwa kotak B berada di atas kotak A dan ada di bawah kotak C. Gambar ini hanya menunjukkan bahwa dalam tumpukan hanya dapat menambah atau mengambil sebuah kotak melalui satu ujung, yaitu ujung bagian atas. Dapat dikihat pula bahwa tumpukan merupakan kumpulan data yang sifatnya dinamis, artinya dapat menambah dan mengambil data dari kumpulan data tersebut.






F

E

D

C

B


Gambar 6.1. Tumpukan terdiri 6 kotak

Penyajian stack bisa menggunakan array, namun kurang tepat. Array bisa digunakan kalau elemen stack tidak melebihi batas maksimum. Tipe yang bisa digunakan adalah record. Manipulasi dengan menggunakan record mempunyai dua medan, yaitu medan penyimpanan elemen tumpukan dan medan pencatat posisi ujung atas tumpukan.

3.2.1.a Operasi stack

Dalam Stack terdapat dua operasi, yaitu :
Menyisipkan data (PUSH)

Menambahkan / menyisipkan data ke dalam stack. Kita tidak bisa menambahkan data pada tumpukan yang sudah penuh (overflow).

Algoritma :



if t.atas = maxelemen

cout << ”sudah penuh ”; else { // naikkan posisi tumpukan // tambah isi tumpukan } 2. Menghapus data (POP) Menghapus elemen yang ada di posisi paling atas. Menghapus posisi juga akan menghapus elemen. Kita tidak mungkin menghapus elemen ketika tumpukan sudah kosong. (t.atas = 0) Algoritma : if t.atas = 0 cout << ”tumpukan kosong ”; else { // kurangi t.atas; } contoh program using C++: unit tumpukan.h # include

# include

# include

# define alamat Elemen*


// inisialisasi data dan fungsi yang dibutuhkan

typedef char tInfo;

typedef struct Elemen

{

tInfo Info;

alamat Berikut;

}tElemen;


typedef struct tTumpukan

{

alamat atas;

} Tumpukan;


void inisialisasi(Tumpukan* T);

void Push(Tumpukan* T, tInfo info);

void Pop(Tumpukan* T, tInfo* Info);

int tumpukanKosong (Tumpukan T);


//insisialisasi tumpukan

void inisialisasi(Tumpukan* T)

{

T->atas = NULL;

T->bawah = NULL;


}


//Operasi Push

void Push(Tumpukan* T, tInfo info)

{

alamat P;

P = new Elemen;//(alamat) malloc(sizeof(alamat));


P->Info = info;


if (tumpukanKosong(*T))

{

P->Info = info;

P->Berikut=NULL;

T->atas =P;

}

else

{

P->Info = info;

P->Berikut = T->atas;

T->atas =P;

}



}


// Operasi Pop

void Pop(Tumpukan* T, tInfo* Info)

{

alamat P;

P = T->atas;

*Info = P->Info;


T->atas = T->atas->Berikut;


free(P);

}



// inisialisasi tumpukan kosong

int tumpukanKosong(Tumpukan Q){

return ((Q.atas==NULL));

}


unit tumpukan.cpp


# include

# include

# include

# define alamat Elemen*

# include


// untuk menampilkan atau mencetak tumpukan

void tampilTumpukan(Tumpukan T)

{

alamat P = T.atas;

cout << “Isi stack : “; while ((P!=NULL)) { cout << P->Info << ” - “; P = P->Berikut;

}

cout << “\n”; } // untuk mencetak menu utama void cetakMenu(){ cout << “***CONTOH TUMPUKAN***“; cout << “\n 1. Tambah elemen\n”; cout << “ 2. Hapus elemen\n”; cout << “ 3. Cetak tumpukan\n”; cout << “ 4. Selesai\n\n”; } // program utama int main() { Tumpukan T; int selesai; int pilMenu; tInfo elm; inisialisasi(&T); selesai = 0; do { clrscr; cetakMenu(); cout << “Menu yg dipilih : “; cin >> pilMenu;


switch(pilMenu) {

case 1 : cout << “\nMasukkan elemen yg ditambahkan : “; cin >> elm;

Push(&T,elm);

break;

case 2 : if (tumpukanKosong(T))

{

cout << “\nTumpukan kosong kosong, tidak bisa dihapus\n”;

}

else

{

Pop(&T, &elm);

cout << “\nElemen yang dihapus : ” << elm << “\n”;

}

break;

case 3 : tampilTumpukan(T);

break;

default : selesai = 1;

}

}

while ( !selesai );

return 1;}

Senin, 30 November 2009

etika profesi

etika profesi
Etika Profesi |download.doc| Sumber:
http://www.consal.org.sg/webupload/forums/attachments/2270.doc
http://students.ukdw.ac.id/~22981938/jurnal11.html
Popon Sjarif Arifin : ETIKA PROFESI sebagai PENGAJAR , Suatu pemikiran ke arah pengembangan profesionalisme
staf pengajar (dosen) seni rupa. Pengertian Profesionalisme, Profesional dan Profesi Profesionalisme
adalah suatu paham yang mencitakan dilakukannya kegiatan-kegiatan kerja tertentu dalam masyarakat, berbekalkan
keahlian yang tinggi dan berdasarkan rasa keterpanggilan -- serta ikrar (fateri/profiteri) untuk menerima panggilan
tersebut -- untuk dengan semangat pengabdian selalu siap memberikan pertolongan kepada sesama yang tengah
dirundung kesulitan ditengah gelapnya kehidupan (Wignjosoebroto, 1999).
Dengan demikian seorang profesional jelas harus memiliki profesi tertentu yang diperoleh melalui sebuah proses
pendidikan maupun pelatihan yang khusus, dan disamping itu pula ada unsur semangat pengabdian (panggilan profesi)
didalam melaksanakan suatu kegiatan kerja. Hal ini perlu ditekankan benar untuk mem bedakannya dengan kerja biasa
(occupation) yang semata bertujuan untuk mencari nafkah dan/ atau kekayaan materiil-duniawi Dua pendekatan untuk
mejelaskan pengertian profesi: 1. Pendekatan berdasarkan Definisi
Profesi merupakan kelompok lapangan kerja yang khusus melaksanakan kegiatan yang memerlukan ketrampilan dan
keahlian tinggi guna memenuhi kebutuhan yang rumit dari manusia, di dalamnya pemakaian dengan cara yang benar
akan ketrampilan dan keahlian tinggi, hanya dapat dicapai dengan dimilikinya penguasaan pengetahuan dengan ruang
lingkup yang luas, mencakup sifat manusia, kecenderungan sejarah dan lingkungan hidupnya; serta adanya disiplin
etika yang dikembangkan dan diterapkan oleh kelompok anggota yang menyandang profesi tersebut. 2. Pendekatan
Berdasarkan Ciri
Definisi di atas secara tersirat mensyaratkan pengetahuan formal menunjukkan adanya hubungan antara profesi
dengan dunia pendidikan tinggi. Lembaga pendidikan tinggi ini merupakan lembaga yang mengembangkan dan
meneruskan pengetahuan profesional.
Karena pandangan lain menganggap bahwa hingga sekarang tidak ada definisi yang yang memuaskan tentang profesi
yang diperoleh dari buku maka digunakan pendekatan lain dengan menggunakan ciri profesi. Secara umum ada 3 ciri
yang disetujui oleh banyak penulis sebagai ciri sebuah profesi. Adapun ciri itu ialah:
- Sebuah profesi mensyaratkan pelatihan ekstensif sebelum memasuki sebuah profesi. Pelatihan ini dimulai sesudah
seseorang memperoleh gelar sarjana. Sebagai contoh mereka yang telah lulus sarjana baru mengikuti pendidikan
profesi seperti dokter, dokter gigi, psikologi, apoteker, farmasi, arsitektut untuk Indonesia. Di berbagai negara,
pengacara diwajibkan menempuh ujian profesi sebelum memasuki profesi.
- Pelatihan tersebut meliputi komponen intelektual yang signifikan. Pelatihan tukang batu, tukang cukur, pengrajin
meliputi ketrampilan fisik. Pelatihan akuntan, engineer, dokter meliputi komponen intelektual dan ketrampilan. Walaupun
pada pelatihan dokter atau dokter gigi mencakup ketrampilan fisik tetap saja komponen intelektual yang dominan.
Komponen intelektual merupakan karakteristik profesional yang bertugas utama memberikan nasehat dan bantuan
menyangkut bidang keahliannya yang rata-rata tidak diketahui atau dipahami orang awam. Jadi memberikan konsultasi
bukannya memberikan barang merupakan ciri profesi.
- Tenaga yang terlatih mampu memberikan jasa yang penting kepada masyarakat. Dengan kata lain profesi
berorientasi memberikan jasa untuk kepentingan umum daripada kepentingan sendiri. Dokter, pengacara, guru,
pustakawan, engineer, arsitek memberikan jasa yang penting agar masyarakat dapat berfungsi; hal tersebut tidak dapat
dilakukan oleh seorang pakar permainan caturmisalnya. Bertambahnya jumlah profesi dan profesional pada abad 20
terjadi karena ciri tersebut. Untuk dapat berfungsi maka masyarakat modern yang secara teknologis kompleks
memerlukan aplikasi yang lebih besar akan pengetahuan khusus daripada masyarakat sederhana yang hidup pada
abad-abad lampau. Produksi dan distribusi enersi memerlukan aktivitas oleh banyak engineers. Berjalannya pasar
uang dan modal memerlukan tenaga akuntan, analis sekuritas, pengacara, konsultan bisnis dan keuangan. Singkatnya
profesi memberikan jasa penting yang memerlukan pelatihan intelektual yang ekstensif.
Di samping ketiga syarat itu ciri profesi berikutnya. Ketiga ciri tambahan tersebut tidak berlaku bagi semua profesi.
Adapun ketiga ciri tambahan tersebut ialah:
- Adanya proses lisensi atau sertifikat. Ciri ini lazim pada banyak profesi namun tidak selalu perlu untuk status
profesional. Dokter diwajibkan memiliki sertifikat praktek sebelum diizinkan berpraktek. Namun pemberian lisensi atau
sertifikat tidak selalu menjadikan sebuah pekerjaan menjadi profesi. Untuk mengemudi motor atau mobil semuanya
harus memiliki lisensi, dikenal dengan nama surat izin mengemudi. Namun memiliki SIM tidak berarti menjadikan
pemiliknya seorang pengemudi profesional. Banyak profesi tidak mengharuskan adanya lisensi resmi. Dosen di
perguruan tinggi tidak diwajibkan memiliki lisensi atau akta namun mereka diwajibkan memiliki syarat pendidikan,
misalnya sedikit-dikitnya bergelar magister atau yang lebih tinggi. Banyak akuntan bukanlah Certified Public Accountant
dan ilmuwan komputer tidak memiliki lisensi atau sertifikat.
- Adanya organisasi. Hampir semua profesi memiliki organisasi yang mengklaim mewakili anggotanya. Ada kalanya
organisasi tidak selalu terbuka bagi anggota sebuah profesi dan seringkali ada organisasi tandingan. Organisasi profesi
bertujuan memajukan profesi serta meningkatkan kesejahteraan anggotanya. Peningkatan kesejahteraan anggotanya
akan berarti organisasi profesi terlibat dalam mengamankan kepentingan ekonomis anggotanya. Sungguhpun demikian
organisasi profesi semacam itu biasanya berbeda dengan serikat kerja yang sepenuhnya mencurahkan perhatiannya
pada kepentingan ekonomi anggotanya. Maka hadirin tidak akan menjumpai organisasi pekerja tekstil atau bengkel
yang berdemo menuntut disain mobil yang lebih aman atau konstruksi pabrik yang terdisain dengan baik.
- Otonomi dalam pekerjaannya. Profesi memiliki otonomi atas penyediaan jasanya. Di berbagai profesi, seseorang
:: erwadi online ::
http://erwadi.polinpdg.ac.id Powered by Joomla! Generated: 28 November, 2006, 03:44
harus memiliki sertifikat yang sah sebelum mulai bekerja. Mencoba bekerja tanpa profesional atau menjadi profesional
bagi diri sendiri dapat menyebabkan ketidakberhasilan. Bila pembaca mencoba menjadi dokter untuk diri sendiri maka
hal tersebut tidak sepenuhnya akan berhasil karena tidak dapat menggunakan dan mengakses obat-obatan dan
teknologi yang paling berguna. Banyak obat hanya dapat diperoleh melalui resep dokter. sepuluh ciri lain suatu profesi
(Nana 1997) :
- Memiliki fungsi dan signifikasi sosial
- Memiliki keahlian/keterampilan tertentu
- Keahlian/keterampilan diperoleh dengan menggunakan teori dan metode ilmiah
- Didasarkan atas disiplin ilmu yang jelas
- Diperoleh dengan pendidikan dalam masa tertentu yang cukup lama
- Aplikasi dan sosialisasi nilai- nilai profesional
- Memiliki kode etik
- Kebebasan untuk memberikan judgement dalam memecahkan masalah dalam lingkup kerjanya
- Memiliki tanggung jawab profesional dan otonomi
- Ada pengakuan dari masyarakat dan imbalan atas layanan profesinya. Tiga Watak Profesional
Lebih lanjut Wignjosoebroto [1999] menjabarkan profesionalisme dalam tiga watak kerja yang merupakan persyaratan
dari setiap kegiatan pemberian "jasa profesi" (dan bukan okupasi) ialah
- bahwa kerja seorang profesional itu beritikad untuk merealisasikan kebajikan demi tegaknya kehormatan profesi yang
digeluti, dan oleh karenanya tidak terlalu mementingkan atau mengharapkan imbalan upah materiil;
- bahwa kerja seorang profesional itu harus dilandasi oleh kemahiran teknis yang berkualitas tinggi yang dicapai
melalui proses pendidikan dan/atau pelatihan yang panjang, ekslusif dan berat;
- bahwa kerja seorang profesional -- diukur dengan kualitas teknis dan kualitas moral -- harus menundukkan diri pada
sebuah mekanisme kontrol berupa kode etik yang dikembangkan dan disepakati bersama didalam sebuah organisasi
profesi. Ketiga watak kerja tersebut mencoba menempatkan kaum profesional (kelompok sosial berkeahlian) untuk
tetap mempertahankan idealisme yang menyatakan bahwa keahlian profesi yang dikuasai bukanlah komoditas yang
hendak diperjual-belikan sekedar untuk memperoleh nafkah, melainkan suatu kebajikan yang hendak diabdikan demi
kesejahteraan umat manusia.
Kalau didalam peng-amal-an profesi yang diberikan ternyata ada semacam imbalan (honorarium) yang diterimakan,
maka hal itu semata hanya sekedar "tanda kehormatan" (honour) demi tegaknya kehormatan profesi, yang jelas akan
berbeda nilainya dengan pemberian upah yang hanya pantas diterimakan bagi para pekerja upahan saja.
Siapakah atau kelompok sosial berkeahlian yang manakah yang bisa diklasifikasikan sebagai kaum profesional yang
seharusnya memiliki kesadaran akan nilai-nilai kehormatan profesi dan statusnya yang sangat elitis itu? Apakah dalam
hal ini profesi keinsinyuran bisa juga diklasifikasikan sebagai bagian dari kelompok ini? Jawaban terhadap kedua
pertanyaan ini bisa mudah-sederhana, tetapi juga bisa sulit untuk dijawab. Terlebih-lebih bila dikaitkan dengan berbagai
macam persoalan, praktek nyata, maupun penyimpangan yang banyak kita jumpai didalam aplikasi pengamalan profesi
di lapangan yang jauh dari idealisme pengabdian dan tegak nya kehormatan diri (profesi). Pada awal pertumbuhan
"paham" profesionalisme, para dokter dan guru -- khususnya mereka yang banyak bergelut dalam ruang lingkup
kegiatan yang lazim dikerjakan oleh kaum padri maupun juru dakhwah agama -- dengan jelas serta tanpa ragu
memproklamirkan diri masuk kedalam golongan kaum profesional. Kaum profesional (dokter, guru dan kemudian diikuti
dengan banyak profesi lainnya) terus berupaya menjejaskan nilai-nilai kebajikan yang mereka junjung tinggi dan
direalisasikan melalui keahlian serta kepakaran yang dikembangkan dengan berdasarkan wawasan keunggulan.
Sementara itu pula, kaum profesional secara sadar mencoba menghimpun dirinya dalam sebuah organisasi profesi
(yang cenderung dirancang secara eksklusif) yang memiliki visi dan misi untuk menjaga tegaknya kehormatan profesi,
mengontrol praktek-praktek pengamalan dan pengembangan kualitas keahlian/ kepakaran, serta menjaga dipatuhinya
kode etik profesi yang telah disepakati bersama. Etika
Etika disebut juga filsafat moral adalah cabang filsafat yang berbicara tentang praxis (tindakan) manusia. Etika tidak
mempersoalkan keadaan manusia, melainkan mempersoalkan bagaimana manusia harus bertindak. Tindakan manusia
ini ditentukan oleh bermacam-macam norma.
Norma ini masih dibagi lagi menjadi norma hukum, norma moral, noprma agama dan norma sopan santun. Norma
hukum berasal dari hukum dan perundang-undangan,norma agama berasal dari agama sedangkan norma moral
berasal dari suara batin. Norma sopan santun berasal dari kehidupan sehari-hari sedangkan norma moral berasal dari
etika. Etika dan etiket
Etika berarti moral sedangkan etiket berarti sopan santun. Dalam bahasa Inggeris dikenal sebagai ethics dan etiquette.
Antara etika dengan etiket terdapat persamaan yaitu:
(a) etika dan etiket menyangkut perilaku manusia. Istilah tersebut dipakai mengenai manusia tidak mengenai binatang
karena binatang tidak mengenal etika maupun etiket.
(b) Kedua-duanya mengatur perilaku manusia secara normatif artinya memberi norma bagi perilaku manusia dan
dengan demikian menyatakan apa yag harus dilakukan dan apa yang tidak boleh dilkukan. Justru karena sifatnya
normatif maka kedua istilah tersebut sering dicampuradukkan.
Adapun perbedaan antara etika dengan etiket ialah:
(a) etiket menyangkut cara melakukan perbuatan manusia. Etiket menunjukkan cara
yang tepat artinya cara yang diharapkan serta ditentukan dalam sebuah kalangan tertentu. Misalnya dalam makan,
etiketnya ialah orang tua didahulukan mengambil nasi, kalau sudah selesai tidak boleh mencuci tangan terlebih dahulu.
Di Indonesia menyerahkan sesuatu harus dengan tangan kanan. Bila dilanggar dianggap melanggar etiket. Etika tidak
terbatas pada cara melakukan sebuah perbuatan, etika memberi norma tentang perbuatan itu sendiri. Etika
:: erwadi online ::
http://erwadi.polinpdg.ac.id Powered by Joomla! Generated: 28 November, 2006, 03:44
menyangkut masalah apakah sebuah perbuatan boleh dilakukan atau tidak boleh dilakukan.
(b) Etiket hanya berlaku untuk pergaulan. Bila tidak ada orang lain atau tidak ada saksi mata, maka etiket tidak berlaku.
Misalnya etiket tentang cara makan. Makan sambil menaruh kaki di atas meja dianggap melanggar etiket dila dilakukan
bersama-sama orang lain. Bila dilakukan sendiri maka hal tersebut tidak melanggar etiket. Etika selalu berlaku
walaupun tidak ada orang lain. Barang yang dipinjam harus dikembalikan walaupun pemiliknya sudah lupa.
(c) Etiket bersifat relatif. Yang dianggap tidak sopan dalam sebuah kebudayaan, dapat saja dianggap sopan dalam
kebudayaan lain. Contohnya makan dengan tangan, bersenggak sesudah makan. Etika jauh lebih absolut. Perintah
seperti “jangan berbohong”, “jangan mencuri” merupakan prinsip etika yang tidak dapat
ditawar-tawar.
(d) Etiket hanya memadang manusia dari segi lahirian saja sedangkan etika memandang manusia dari segi dalam.
Penipu misalnya tutur katanya lembut, memegang etiket namun menipu. Orang dapat memegang etiket namun munafik
sebaliknya seseorang yang berpegang pada etika tidak mungkin munafik karena seandainya dia munafik maka dia tidak
bersikap etis. Orang yang bersikap etis adalah orang yang sungguh-sungguh baik.
Etika dan ajaran moral
Etika perlu dibedakan dari moral. Ajaran moral memuat pandangan tentang nilai dan norma moral yang terdapat pada
sekelompok manusia. Ajaran moral mengajarkan bagaimana orang harus hidup. Ajaran moral merupakan rumusan
sistematik terhadap anggapan tentang apa yang bernilai serta kewajiban manusia.
Etika merupakan ilmu tentang norma, nilai dan ajaran moral. Etika merupakan filsafat yang merefleksikan ajaran moral.
Pemikiran filsafat mempunyai 5 ciri khas yaitu bersifat rasional, kritis, mendasar, sistematik dan normatif (tidak sekadar
melaporkan pandangan moral melainkan menyelidiki bagaimana pandangan moral yang sebenarnya).
Fungsi etika
Etika tidak langsung membuat manusia menjadi lebih baik, itu ajaran moral, melainkan etika merupakan sarana untuk
memperoleh orientasi kritis berhadapan dengan pelbagai moralitas yang membingungkan. Etika ingin menampilkan
ketrampilan intelektual yaitu ketrampilan untuk berargumentasi secara rasional dan kritis.
Orientasi etis ini diperlukan dalam mengabil sikap yang wajar dalam suasana pluralisme. Pluralisme moral diperlukan
karena:
(a) pandangan moral yang berbeda-beda karena adanya perbedaan suku, daerah budaya dan agama yang hidup
berdampingan;
(b) modernisasi membawa perubahan besar dalam struktur dan nilai kebutuhan masyarakat yang akibatnya menantang
pandangan moral tradisional;
(c) berbagai ideologi menawarkan diri sebagai penuntun kehidupan, masing-masing dengan ajarannya sendiri tentang
bagaimana manusia harus hidup.
Etika secara umum dapat dibagi menjadi etika umum yang berisi prinsip serta moral dasar dan etika khusus atau etika
terapan yang berlaku khusus. Etika khusus ini masih dibagi lagi menjadi etika individual dan etika sosial. Etika sosial
dibagi menjadi:
(1) Sikap terhadap sesama;
(2) Etika keluarga
(3) Etika profesi misalnya etika untuk pustakawan, arsiparis, dokumentalis, pialang informasi
(4) Etika politik
(5) Etika lingkungan hidup
serta
(6) Kritik ideologi Etika adalah filsafat atau pemikiran kritis rasional tentang ajaran moral sedangka moral adalah ajaran
baik buruk yang diterima umum mengenai perbuatan, sikap, kewajiban dsb. Etika selalu dikaitkan dengan moral serta
harus dipahami perbedaan antara etika dengan moralitas.
Moralitas
Ajaran moral memuat pandangan tentang nilai dan norma moral yang terdapat di antara sekelompok manusia. Adapun
nilai moral adalah kebaikan manusia sebagai manusia. Norma moral adalah tentang bagaimana manusia harus hidup
supaya menjadi baik sebagai manusia. Ada perbedaan antara kebaikan moral dan kebaikan pada umumnya. Kebaikan
moral merupakan kebaikan manusia sebagai manusia sedangkan kebaikan pada umumnya merupakan kebaikan
manusia dilihat dari satu segi saja, misalnya sebagai suami atau isteri, sebagai pustakawan.
Moral berkaitan dengan moralitas. Moralitas adala sopan santun, segala sesuatu yang berhubungan dengan etiket atau
sopan santun. Moralitas dapat berasal dari sumber tradisi atau adat, agama atau sebuah ideologi atau gabungan dari
beberapa sumber. Etika dan moralitas
Etika bukan sumber tambahan moralitas melainkan merupakan filsafat yang mereflesikan ajaran moral. Pemikiran
filsafat mempunyai lima ciri khas yaitu rasional, kritis, mendasar, sistematik dan normatif. Rasional berarti mendasarkan
diri pada rasio atau nalar, pada argumentasi yang bersedia untuk dipersoalkan tanpa perkecualian. Kritis berarti filsafat
ingin mengerti sebuah masalah sampai ke akar-akarnya, tidak puas dengan pengertian dangkal. Sistematis artinya
membahas langkah demi langkah. Normatif menyelidiki bagaimana pandangan moral yang seharusnya. Etika dan
agama
Etika tidak dapat menggantikan agama. Orang yang percaya menemukan orientasi dasar kehidupan dalam agamanya.
Agama merupakan hal yang tepat untuk memberikan orientasi moral. Pemeluk agama menemukan orientasi dasar
kehidupan dalam agamanya. Akan tetapi agama itu memerlukan ketrampilan etika agar dapat memberikan orientasi,
:: erwadi online ::
http://erwadi.polinpdg.ac.id Powered by Joomla! Generated: 28 November, 2006, 03:44
bukan sekadar indoktrinasi. Hal ini disebabkan empat alasan sebagai berikut:
(1) Orang agama mengharapkan agar ajaran agamanya rasional. Ia tidak puas mendengar bahwa Tuhan
memerintahkan sesuatu, tetapu ia juga ingin mengertimengapa Tuhan memerintahkannya. Etika dapat membantu
menggali rasionalitas agama.
(2) Seringkali ajaran moral yang termuat dalam wahyu mengizinkan interpretasi yang saling berbeda dan bahkan
bertentangan.
(3) Karena perkembangan ilmu pengetahuan, teknologi dan masyarakat maka agama menghadapi masalah moral yang
secara langsung tidak disinggung-singgung dalam wahyu. Misalnya bayi tabung, reproduksi manusia dengan gen yang
sama.
(4) Adanya perbedaan antara etika dan ajaran moral. Etika mendasarkan diri pada argumentasi rasional semata-mata
sedangkan agama pada wahyunya sendiri. Oleh karena
(5) itu ajaran agama hanya terbuka pada mereka yang mengakuinya sedangkan etika terbuka bagi setiap orang dari
semua agama dan pandangan dunia. Istilah berkaitan
Kata etika sering dirancukan dengan istilah etiket, etis, ethos, iktikad dan kode etik atau kode etika. Etika adalah ilmu
yang mempelajari apa yang baik dan buruk. Etiket adalah ajaran sopan santun yang berlaku bila manusia bergaul atau
berkelompok dengan manusia lain. Etiket tidak berlaku bila seorang manusia hidup sendiri misalnya hidup di sebuah
pulau terpencil atau di tengah hutan. Etis artinya sesuai dengan ajaran moral, misalnya tidak etis menanyakan usia
pada seorang wanita. Ethos artinya sikap dasar seseorang dalam bidang tertentu. Maka ada ungkapa ethos kerja
artinya sikap dasar seseorang dalam pekerjaannya, misalnya ethos kerja yang tinggi artinya dia menaruh sikap dasar
yang tinggi terhadap pekerjaannya. Kode atika atau kode etik artinya daftar kewajiban dalam menjalankan tugas sebuah
profesi yang disusun oleh anggota profesi dan mengikat anggota dalam menjalankan tugasnya.
Etika terbagi atas 2 bidang besar yaitu etika umum dan etika khusus. Etika umum masih dibagi lagi menjadi prinsip dan
moral dasar etika umum. Adapun etika khusus merupakan terapan etika, dibagi lagi menjadi etika individual dan etika
sosial. Etika sosial yang hanya berlaku bagi kelompok profesi tertentu disebut kode etika atau kode etik.
Kode etik Kode etik adalah sistem norma, nilai dan aturan profesional tertulis yang secara tegas menyatakan apa yang
benar dan baik dan apa yang tidak benar dan tidak baik bagi profesional. Kode etik menyatakan perbuatan apa yang
benar atau salah, perbuatan apa yang harus dilakukan dan apa yang harus dihindari.
Tujuan kode etik agar profesional memberikan jasa sebaik-baiknya kepada pemakai atau nasabahnya. Adanya kode
etik akan melindungi perbuatan yang tidak profesional.
Ketaatan tenaga profesional terhadap kode etik merupakan ketaatan naluriah yang telah bersatu dengan pikiran, jiwa
dan perilaku tenaga profesional. Jadi ketaatan itu terbentuk dari masing-masing orang bukan karena paksaan. Dengan
demikian tenaga profesional merasa bila dia melanggar kode etiknya sendiri maka profesinya akan rusak dan yang rugi
adalah dia sendiri.
Kode etik bukan merupakan kode yang kaku karena akibat perkembangan zaman maka kode etik mungkin menjadi
usang atau sudah tidak sesuai dengan tuntutan zaman. Misalnya kode etik tentang euthanasia (mati atas kehendak
sendiri), dahulu belum tercantum dalam kode etik kedokteran kini sudah dicantumkan.
Kode etik disusun oleh organisasi profesi sehingga masing-masing profesi memiliki kode etik tersendiri. Misalnya kode
etik dokter, guru, pustakawan, pengacara, Pelanggaran kde etik tidak diadili oleh pengadilan karena melanggar kode
etik tidak selalu berarti melanggar hukum. Sebagai contoh untuk Ikatan Dokter Indonesia terdapat Kode Etik
Kedokteran. Bila seorang dokter dianggap melanggar kode etik tersebut, maka dia akan diperiksa oleh Majelis Kode
Etik Kedokteran Indonesia, bukannya oleh pengadilan.
Sifat kode etik profesional
Kode etik adalah pernyataan cita-cita dan peraturan pelaksanaan pekerjaan (yang membedakannya dari murni pribadi)
yang merupakan panduan yang dilaksanakan oleh anggota kelompok. Kode etik yang hidup dapat dikatakan sebagai
ciri utama keberadaan sebuah profesi.
Sifat dan orientasi kode etik hendaknya singkat; sederhana, jelas dan konsisten; masuk akal, dapat diterima, praktis
dan dapat dilaksanakan; komprehensif dan lengkap; dan positif dalam formulasinya. Orientasi kode etik hendaknya
ditujukan kepada rekan, profesi, badan, nasabah/pemakai, negara dan masyarakat. Kode etik diciptakan untuk manfaat
masyarakat dan bersifat di atas sifat ketamakan penghasilan, kekuasaan dan status. Etika yang berhubungan dengan
nasabah hendaknya jelas menyatakan kesetiaan pada badan yang mempekerjakan profesional.
Kode etik digawai sebagai bimbingan praktisi. Namun demikian hendaknya diungkapkan sedemikian rupa sehingga
publik dapat memahami isi kode etik tersebut. Dengan demikian masyarakat memahami fungsi kemasyarakatan dari
profesi tersebut. Juga sifat utama profesi perlu disusun terlebih dahulu sebelum membuat kode etik. Kode etik
hendaknya cocok untuk kerja keras
Sebuah kode etik menunjukkan penerimaan profesi atas tanggung jawab dan kepercayaan masyarakat yang telah
memberikannya.
:: erwadi online ::
http://erwadi.polinpdg.ac.id Powered by Joomla! Generated: 28 November, 2006, 03:44

sistem basis data

1
KONSEP DASAR
Materi ke-01
TinO DwiantOrO
tino@dwiantoro.com | kelana2010@yahoo.com
http://www.dwiantoro.com
Pokok Bahasan
Yang akan dibahas pada modul ini adalah :
 Definisi Sistem Basis Data (Database)
 Komponen Dasar dari Sistem Database
 Data pada Database dan Hubungannya
 Keuntungan Pemakaian Sistem
Database
 Kerugian Pemakaian Sistem Database
DEFINISI SISTEM BASIS DATA (DATABASE)
SISTEM DATABASE adalah Suatu system penyusunan dan
pengelolaan record-record dengan menggunakan komputer,
dengan tujuan untuk menyimpan atau merekam serta
memelihara data operasional lengkap sebuah
organisasi/perusahaan, sehingga mampu menyediakan
informasi yang optimal yang diperlukan pemakai untuk
kepentingan proses pengambilan keputusan.
DATABASE Suatu susunan/kumpulan data operasional
lengkap dari suatu organisasi/perusahaan yang
diorganisir/dikelola dan simpan secara terintegrasi dengan
menggunakan metode tertentu, dengan menggunakan
komputer, sehingga mampu menyediakan informasi yang
optimal diperlukan pemakainya.
KOMPONEN DASAR DARI SISTEM DATABASE
Terdapat 4 komponen pokok dari system database :
1. DATA, dengan ciri-ciri :
– Data disimpan secara terintegrasi (integrated)
– Data dapat dipakai secara bersama-sama (shared)
– Terintegrated yaitu Database merupakan kumpulan
dari berbagai macam file dari aplikasi-aplikasi yang
berbeda yang disusun dengan cara menghilangkan
bagian-bagian yang rangkap (redundant).
– Shared yaitu Masing-masing bagian dari database
dapat diakses oleh pemakai dalam waktu yang
bersamaan, untuk aplikasi yang berbeda.
2. HARDWARE (perangkat keras)
Terdiri dari semua peralatan perangkat keras
komputer yang digunakan untuk pengelolaan system
database berupa :
– Peralatan untuk penyimpanan, disk, drum, dll
– Peralatan input dan output
– Peralatan komunikasi data, dll
3. SOFTWARE (perangkat lunak)
Berfungsi sebagai perantara (interface) antara
pemakai dengan data phisik pada database, dapat
berupa :
– Database Management System (DBMS)
– Program-program aplikasi & prosedur-prosedur
4. USER (Pemakai)
Terbagi menjadi 3 klasifikasi :
– Database Administrator (DBA), orang/team yang
bertugas mengelola system database secara
keseluruhan
– Programmer, orang/team membuat program
aplikasi yang mengakses database dengan
menggunakan bahasa pemprograman
– End user, orang yang mengakases database
melalui terminal dengan menggunakan query
language atau program aplikasi yang dibuat oleh
programmer
2
DATA PADA DATABASE DAN HUBUNGANNYA
Ada 3 jenis data pada system database, yaitu:
•Data operasional dari suatu organisasi, berupa data
yang disimpan didalam database
•Data masukan (input data), data dari luar sistem yang
dimasukan melalui peralatan input (keyboard) yang
dapat merubah data operasional
•Data keluaran (output data), berupa laporan melalui
peralatan output (screen, printer) sebagai hasil dari
dalam system yang mengakses data operasional
KEUNTUNGAN PEMAKAIAN SISTEM DATABASE
1. Terkontrolnya kerangkapan dan inkonsistensi data
2. Terpeliharanya keselarasan data
3. Data dapat dipakai secara bersama-sama
4. Memudahkan penerapan standarisasi
5. Memudahkan penerapan batasan-batasan
pengamanan.
6. Terpeliharanya intergritas data
7. Terpeliharanya keseimbangan atas perbedaan
kebutuhan data dari setiap aplikasi
8. Program / data independent
KERUGIAN PEMAKAIAN SISTEMDATABASE
1. Mahal dalam implementasinya
2. Rumit / komplek
3. Penanganan proses recorvery & backup sulit
4. kerusakan pada system basis data dapat
mempengaruhi departemen yang terkait
5. dan lain –lain.
ISTILAH-ISTILAH YG DIPERGUNAKAN DALAM SISTEM
BASIS DATA
a. Enterprise, suatu bentuk organisasi
Contoh : data sekolah  data mhs
Rumah sakit  pasien
b. Entitas, suatu obyek yang dapat dibedakan dengan objek
lainnya
Contoh :
Bidang administrasi siswa  entitas mahasiswa, buku,
pembayaran
Bidang kesehatan  entitas pasien, dokter,
obat
c. Atribute/field, setiap entitas mempunyai atribut atau suatu
sebutan untuk mewakili suatu entitas.
Contoh :
Entity siswa  field Nim, nama_siswa,alamat
Entity nasabah  field Kode_nasabah,nama_nsh
d. Data value (nilai atau isi data), data actual atau informasi
yang disimpan pada tiap data elemen atau attribute. Isi
dari atribut disebut nilai data.
Contoh : Atribut nama karyawan  Sutrisno, budiman,
e. Record/tuple, kumpulan elemen-elemen yang saling
berkaitan menginformasikan tentang suatu entity secara
lengkap.
Contoh : satu record mewakili satu data/informasi -- >
nim, nm_mhs, alamat.
f. File, kumpulan record-record sejenis yang mempunyai
panjang elemen sama,attribute yang sama, namun
berbeda-beda data valuaenya
g. Kunci elemen data, tanda pengenal yang secara unik
mengindentifikasikan entitas dari suatu kumpulan entitas
h. Database Management System (DBMS), kumpulan file
yang saling berkaitan bersama dengan program untuk
pengelolaannya.
3
Materi Selanjutnya
Sistem Basis Data

1
SISTEM BASIS DATA
Materi ke-02
TinO DwiantOrO
tino@dwiantoro.com | kelana2010@yahoo.com
http://www.dwiantoro.com
Pokok Bahasan
Yang akan dibahas pada modul ini adalah :
 Apa yang dimaksud dengan Sistem Basis
Data dan komponen-komponennya.
 Abstraksi data yang menunjukkan
bagaimana para pemakai (user)
“melihat” data.
 Bahasa basis data yang menjadi media
bagi pemakai (user) dalam berinteraksi
dengan basis data.
 DBMS.
DEFINISI SISTEMBASIS DATA
SISTEM DATABASE adalah suatu sistem
penyusunan dan pengelolaan record-record
dengan menggunakan komputer, dengan
tujuan untuk menyimpan atau merekam serta
memelihara data operasional lengkap sebuah
organisasi/perusahaan, sehingga mampu
menyediakan informasi yang optimal yang
diperlukan pemakai untuk kepentingan proses
pengambilan keputusan.
2.1 KOMPONEN SISTEM BASIS DATA
Lebih lanjut lagi, dalam sebuah sistem basis data, secara
lengkap akan terdapat komponen-komponen utama sbb:
1. Perangkat Keras (Hardware)
2. Sistem Operasi (Operating System)
3. Basis Data (Database)
4. Sistem (Aplikasi/Perangkat Lunak) Pengelola Bisnis
Data (DBMS)
5. Pemakai (User)
6. Aplikasi (perangkat lunak) lain (bersifat opsional)
2.2 ABSTRAKSI DATA
Abstraksi data merupakan tingkatan/level dalam
bagaimana melihat data dalam sebuah sistem basis data.
Ada 3 level abstraksi data :
Level Fisik (Physical Level) –Internal Level
Level Logik/Konseptual (Conceptual Level)
Level Penampakan (View Level) –External Level
 Physical Level –Internal Level
merupakan level terendah, yang menunjukkan
bagaimana sesungguhnya suatu data disimpan. Pada
level ini, pemakai melihat data sebagai gabungan dari
struktur dan datanya sendiri.
 Conceptual Level
Menggambarkan data apa yang sebenarnya disimpan
dalam basis data dan hubungannya dengan data yang
lain.
 View Level –External Level
Merupakan level tertinggi, hanya menunjukkan
sebagaian dari basis data sesuai dengan kebutuhan
user, bagi user yang menggunakan terasa sebagai satu
kesatuan data yang kompak.
2
2.3 BAHASA BASIS DATA
Sebuah bahasa basis data (database languange) biasanya
dapat dipilah ke dalam 2 bentuk, yaitu :
 Data Definition Language (DDL), dan
 Data Manipulation Languange (DML).
2.3.1 DATA DEFINITION LANGUAGE (DDL)
Dengan bahasa inilah kita dapat membuat tabel baru,
membuat indexs, mengubah tabel, menentukan struktur
penyimpanan tabel, dll. Hasil dari kompilasi perintah
DDL adalah kumpulan tabel yang disimpan dalam file
khusus yang disebut Kamus Data (Data Dictionary)
 Kamus Data merupakan suatu metadata (superdata)
yaitu data yang mendeskripsikan data sesuangguhnya.
Kamus Data ini selalu diakses dalam suatu operasi basis
data sebelum file data yang sesungguhnya diakses.
2.3.2 DATA MANIPULATION LANGUANGE (DML)
Berguna untuk melakukan manipulasi dan pengambilan
data pada suatu basis data. Manipulasi data dapat
berupa :
 Penyisipan/penambahan data baru, penghapusan
data dan pengubahan data.
DML merupakan bahasa yang bertujuan memudahkan
pemakai untuk mengakses data sebagaimana
direpresentasikan oleh model data
Ada 2 Jenis DML, yaitu :
 Prosedural, yang mensyaratkan agar pemakai
menentukan, data apa yang diinginkan serta
bagaimana cara mendapatkannya.
Contoh: dBaseIII, FoxBase
 Non-Prosedural, yang membuat pemakai
dapat menentukan data apa yang diinginkan
tanpa menyebutkan bagaimana cara
mendapatkannya.
Contoh : SQL
2.4 DBMS (Database Management System)
 DBMS adalah perangkat lunak yang menangani semua
pengaksesan database. Mempunyai fasilitas membaut,
mengakses, memanipulasi dan memelihara basis data.
 FUNGSI DBMS
1. Data Definition, DBMS harus dapat mengolah
pendefinisian data
2. Data Manipulation, DBMS harus dapat menangani
permintaan dari pemakai untuk mengakses data
3. Data Security & Integrity, DBMS harus dapat
memeriksa security dan integrity data yang
didefinisikan oleh DBA
4. Data Recovery & Concurency, DBMS harus
dapat menangani kegagalan–kegagalan
pengaksesan database yang dapat disebabkan
oleh sesalahan sistem, kerusakan disk, dsb.
5. Data Dictionary, DBMS harus menyediakan data
dictionary.
6. Performance, DBMS harus menangani unjuk kerja
dari semua fungsi seefisien mungkin.
3
Komponen DBMS
Sebuah DBMS (Database Management System) umumnya
memiliki sejumlah komponen fungsional (modul) seperti :
 File Manager, yang mengelola ruang dalam disk dan
struktur data yang dipakai untuk merepresentasikan
informasi yang tersimpan dalam disk.
 Database Manager, yang menyediakan interface
antara data low-level yang ada di basis data dengan
program aplikasi dan query yang diberikan ke sistem.
 Query Processor, yang menterjemahkan perintahperintah
dalam query language ke perintah low-level
yang dapat dimengerti oleh database manager.
 DML Precompiler, yang mengkonversi perintah DML
yang ditambahkan dalam sebuah program aplikasi ke
pemangin prosedur normal dalam bahasa induk.
 DDL Compiler, yang mengkonversi perintah-perintah
DDL ke dalam sekumpulan tabel yang mengandung
metadata. Tabel-tabel ini kemudian disimpan dalam
kamus data.
MODEL DATA
Materi Selanjutnya

1
MODEL DATA
Materi ke-03
TinO DwiantOrO
tino@dwiantoro.com | kelana2010@yahoo.com
http://www.dwiantoro.com
Pokok Bahasan
Yang akan dibahas pada modul ini adalah :
 MODEL DATA BERBASIS OBJEK
(Object Based Logical Model)
 RECORD BASED DATA MODEL
(Record-Based Logical Models)
PENGANTARMODEL DATA
 Definisi Model Data
Sekumpulan perangkat konseptual untuk
menggambarkan data, hubungan data, semantik
(makna) data dan batasan data.
 disebut juga model data logic
 Dalam perancangan basis data, model data secara
umum dapat dibagi menjadi beberapa kelompok, yaitu:
1. Model data berbasis objek
2. Model data berbasis record
3. Model data fisik
4. Model data konseptual
1. MODEL DATA BERBASIS OBJEK
(Object Based Logical Model)
 Model data berbasis objek menggunakan konsep
entitas, atribut dan hubungan antar entitas.
 Terdiri dari :
1. Entity Relationship Model
2. Binary Model
3. Semantik Data Model
4. Infological Model
1.1 Entity Relationship Model (ER-Model)
 Model untuk menjelaskan hubungan antar data dalam
basis data berdasarkan suatu persepsi bahwa real word
terdiri dari objek-objek (entity) dasar yang mempunyai
hubungan atau relasi antara objek-objek tersebut.
 E-R MODEL berisi ketentuan/aturan khusus yang
harus dipenuhi oleh isi database. Aturan terpenting
adalah MAPPING CARDINSLITIES, yang menentukan
jumlah entity yang dpt dikaitkan dengan entity lainnya
melalui relationship-set.
Simbol yang Digunakan:
Persegi panjang
menunjukkan objek dasar/
himpunan entitas
Lingkaran/elips, menyatakan atribut
(yg berfungsi sebagai key beri
garis bawah)
Belah ketupat (diamon),
menyatakan himpunan relasi
Garis, menghubungkan antar
objek dalam diagram E-R
2
Contoh Diagram ER-Model
No.Rek. Customer Bank Tabungan Saldo
Nama
Alamat
Atribut lain No.Rek. Atribut lain
1.2 Semantic Model
 Hampir sama dengan Entity Relationship model dimana
relasi antara objek dasar tidak dinyatakan dengan
simbol tetapi menggunakan kata-kata (Semantic).
Sebagai contoh, dengan masih menggunakan relasi
pada Bank X sebagaimana contoh sebelumnya, dalam
semantic model adalah seperti terlihat pada gambar di
atas.
 Tanda-tanda yang menggunakan dalam semantic
model adalah sebagai berikut :
Menunjukkan arahnya Menunjukkan atribut
Contoh Diagram Sematic Model
No.Rek. Saldo
Amir
Alamat No.Rek.
Tabungan Customer
Bank
mempunyai adalah
melayani adalah nasabah
2. RECORD BASED DATAMODEL
(Record-Based Logical Models)
 Model ini berdasarkan pada record untuk menjelaskan
kepada user tentang hubungan logic antar data dalam
basis data.
 PERBEDAAN DENGAN OBJECT BASED DATA
MODEL
Pada record based data model disamping digunakan
untuk menguraikan struktur logika keseluruhan dari
suatu database, juga digunakan untuk menguraikan
implementasi dari system database (higher level
description of implementation)
 Model Logik Data Berdasarkan Record (Record-Based
Logical Models), terdiri dari :
1. Model Relational (Relational Model)
2. Model Hirarkis (Hierarchical Model)
3. Model Jaringan (Network Model)
 DUNIA NYATA (Real Word)
Real Word adalah keseluruhan data yang belum
terstruktur yang secara nyata ada/terkait dalam sebuah
lingkup topik yang ditinjau.
2.1 Model Relational
 Dimana data serta hubungan antar data
direpresentasikan oleh sejumlah table, dan masingmasing
table terdiri dari beberapa kolom yang namanya
unique. Model ini berdasarkan notasi teori himpunan
(set theory), yaitu relation.
 Contoh :
data base penjual barang terdiri dari 3 tabel :
- Supllier
- Path (Suku_cadang)
- Delivery (pengiriman)
3
MEDAN
SURABAYA
BANDUNG
MEDAN
03
03
02
01
PT. A
PT. B
PT. C
CV. D
S01
S02
S03
S04
No_supl Nama_pen Status Kota
JAKARTA
JAKARTA
SURABAYA
MEDAN
JAKARTA
10
8
45
6
2
BESI
BESI
ALUMUNIUM
KARET
ALUMUNIUM
BAUT-3 cm
MUR - 3 cm
BAUT -10 cm
PACKING
RING-MM
P01
P02
P03
P04
P05
No_Part Nama_Part Bahan_Baku Berat Kota
SUPPLIER
PART/SUKU CADANG
200
300
250
300
400
400
300
P01
P02
P04
P01
P02
P03
P04
S01
S01
S01
S02
S02
S03
S04
No_Supl No_Part JML
DELIVERY
Ilustrasi Tabel 2.2 Model Hirarki
 Dimana data serta hubungan antar data
direpresentasikan dengan record dan link (pointer),
dimana record-record tersebut disusun dalam bentuk
tree (pohon), dan masing-masing node pada tree
tersebut merupakan record/grup data elemen.
A
B C D
E F G H I
DNAME DNUMBER MGRNAME MGRSTARDATE
DEPARTEMEN
NAME SSN BDATE ADRESS
EMPLOYE
PNUMM PNAME PLOCATION
PROJECT
DEPNAME SEX BRITHDATE
PROJECT
NAME SSN
SUVERVISE
NAME SSN HOURS
WORKER
2.3 Model Jaringan
 Mirip dengan hirarkical model, dimana data dan
hubungan antar data direpresentasikan dengan record
dan links. Perbedaannya terletak pada susunan record
dan linknya yaitu network model menyusun recordrecord
dalam bentuk graph.
R1
R3 R4
R5
R2
No_Supl Nama-Supl Status Kota
JML
No_Part Nama_Part Bahan_Baku Kota
Pointer link
Pointer link
Record Supplier
Record Part
3. Physical Data Model
 Digunakan untuk menguraikan data pada internal level
Beberapa model yang umum digunakan :
 Unifying model
 Frame memory
4
ENTITY RELATIONSHIP
Materi Selanjutnya

1
ENTITY
RELATIONSHIP
Materi ke-04
TinO DwiantOrO
tino@dwiantoro.com | kelana2010@yahoo.com
http://www.dwiantoro.com
Pokok Bahasan
Yang akan dibahas pada modul ini adalah :
 Pengantar
 Kardinalitas Pemetaan
 Diagaram Entity-Relationship (E-R
Diagram)
 Tahapan Pembuatan Diagram E-R
 Diagram E-R dengan Kamus Data
 Varian Entitas
1. Pendahuluan
 Entity relationship adalah jaringan yang menggunakan
susunan data yang disimpan dari sistem secara abstrak.
Entity-relationship dari model terdiri dari unsur-unsur entity
dan relationship antara entity-entitiy tersebut.
KOMPONEN ENTITY RELATIONSHIP
1. Entitas, suatu kumpulan object atau sesuatu yang dapat
dibedakan atau dapat diidentifikasikan secara unik.
Kumpulan entitas yang sejenis disebut entity set.
2. Relationship, hubungan yang terjadi antara satu entitas
atau lebih.
3. Atribut, kumpulan elemen data yang membentuk suatu
entitas.
2. KARDINALITAS PEMETAAN
Mapping Cardinality
 Kardinalitas Pemetaan menunjukkan jumlah entitas
yang dapat dihubungkan ke satu entitas lain dengan
satu relationship.
 Jenis-jenis Kardinalitas Pemetaan:
1. Hubungan satu ke satu (one to one)
2. Hubungan satu ke banyak (one to many)
3. Hubungan banyak ke satu (many to one)
4. Hubungan banyak ke banyak (many to many)
3. DIAGRAMENTITY-RELATIONSHIP (DIAGRAME-R)
 Notasi-notasi simbolik di dalam diagram E-R yang
dapat digunakan adalah:
 Persegi panjang, menunjukkan objek dasar/himpunan
entitas
 Lingkaran/elips, menyatakan atribut (atribut yg berfungsi
sebagai key digarisbawahi)
 Belah ketupat (diamon), menyatakan Himpunan Relasi
 Garis, sebagai penghubung antara Himpunan Relasi
dengan Himpunan Entitas dan Himpunan Entitas
dengan Atributnya.
4. TAHAPAN PEMBUATAN DIAGRAM E-R
 Ada 2 kelompok pentahapan yang biasa ditempuh, yaitu:
1. Tahap pembuatan Diagram E-R awal (preliminary
design).
2. Tahap otimasi Diagram E-R (final design)
 Tahap pertama adalah untuk mendapatkan rancangan basis
data minimal yang dapat mengakomodasi kebutuhan
penyimpanan data terhadap sistem yang sedang ditinjau.
 Tahap kedua, memperhatikan aspek-aspek efisiensi,
performansi dan fleksibilitas.
2
4.1 Pembuatan Diagram E-R Awal
 Langkah-langkah teknis untuk membuat Diagram E-R Awal
adalah:
1. Mengidentifikasi dan menetapkan seluruh himpunan
entitas yang akan terlibat.
2. Menentukan atribut-atribut key dari masing-masing
himpunan entitas.
3. Mengidentifikasi dan menetapkan seluruh himpunan
relasi diantara himpunan entitas-himpunan entitas yang
ada beserta foreign-key-nya.
4. Menentukan derajat/kardinalitas relasi untuk setiap
himpunan.
5. Melengkapi himpunan entitas dan himpunan relasi
dengan atribut-atribut deskriptif (non-key).
Studi Kasus
 Dalam lingkup sistem perkuliahan sesungguhnya (real
word) ada banyak sekali entitas yang bisa kita libatkan
seperti Mahasiswa, Kuliah, Pratikum, Dosen, Asisten,
Ruang, Jurusan, Literarur dan lain-lain.
 Buatlah Diagram E-R untuk sistem perkuliahan
tersebut.
 Langkah ke-1, Identifikasi dan menetapkan seluruh
himpunan entitas yang akan terlibat.
 Langkah ke-2, Menentukan atribut-atribut key dari
masing-masing himpunan entitas
Mahasiswa Kuliah Dosen
Mahasiswa Kuliah Dosen
nim Kode_kul Nama_dos
 Langkah ke-3, Mengidentifikasi dan menetapkan
seluruh himpunan relasi di antara himpunan entitashimpunan
entitas yang ada beserta foreign-key-nya
Mahasiswa Kuliah Dosen
Kode_kul
nim
Nama_dos
mepelajari
nim
Kode_kul
mengajar
Kode_kul
Nama_dos
 Langkah ke-4, Menentukan derajat/kardinalitas relasi
untuk setiap himpunan relasi.
Mahasiswa Kuliah Dosen
Kode_kul
nim
Nama_dos
mepelajari
nim
Kode_kul
mengajar
Kode_kul
Nama_dos
N N N 1
 Langkah ke-5, Melengkapi himpunan entitas dan
himpunan relasi dengan atribut-atribut deskriptif (nonkey)
Mahasiswa Kuliah Dosen
Kode_kul
nim
Nama_dos
mepelajari
nim
Kode_kul
mengajar
Kode_kul
Nama_dos
N N N 1
Alamat-mhs Tgl_lahir
Indeks_nil
sks
semester
waktu
tempat
Alamat_dos
3
5. DIAGRAM E-R DENGAN KAMUS DATA
 Objektif utama dari pembautan Diagram E-R adalah
untuk menunjukkan objek-objek (himpunan entitas) apa
saja yang ingin dilibatkan dalam sebuah basis data dan
bagaimana hubungan yang terjadi di antara objek-objek
tersebut.
 Pada sebuah sistem yang ruang lingkupnya lebar dan
kompleks, penggambaran atribut-atribut dalam sebuah
diagram E-R sering kali malah mengganggu objektif
yang ingin dicapai tersebut.
 Pemisahan atribut-atribut dari Diagram E-R dapat
dinyatakan dalam sebuah Kamus Data
 Kamus Data berisikan daftar atribut yang diapit kurung
kurawal ( { dan } ).
 Atribut yang berfungsi sebagai key dibedakan dengan
yang non-key dengan mengarisbawahi atribut tersebut.
Kamus Data:
 Mahasiswa = { nim, nama_mhs, alamat_mhs, tgl_lahir }
 Kuliah = { kode_kul, nama_kul, sks, semester }
 Dosen = { nama_dos, alamat_dos }
 Mempelajari = { nim, kode_kul, indeks_nil }
 Mengajar = { kode_kul, nama_dos, waktu, tempat }
Mahasiswa mepelajari Kuliah mengajar Dosen
N N N 1
6. VARIAN ENTITAS
 Terdapat 2 (dua) varian yang menyatakan himpunan entitas,
yaitu:
1. Himpunan Entitas Kuat/Bebas (Strong Entity Sets).
Himpunan entitas ini tidak memiliki ketergantungan
dengan himpunan entitas lainnya atau berdiri sendiri 
digambarkan dengan empat persegi panjang.
2. Himpunan Entitas Lemah (Weak Entity Set).
Berisi entitas-entias yang kemunculannya tergantung
pada eksistensinya dalam sebuah relasi terhadap
entitas kuas (strong entity). Bisanya tidak memiliki
atribut sebagai key  digambarkan dengan empat
persegi panjang bertumpuk.
Contoh:
 Pada studi kasus sebelumya, himpunan entitas Mahasiswa, Dosen dan
Kuliah digolongkan sebagai entitas kuat, yang masing-masing berdiri
sendiri.
1104 Onit … …
1103 Rina … …
1102 Shinta … …
1101 Glady … …
Nim Nama_mhs … …
Amien Depok
Jusuf Bogor
Yamin Depok
Abdul Jakarta
Nama_ortu Alamat_ortu
Menari
Musik
Membaca
Berenang
Melukis
Sepak bola
Hobby
Mahasiswa
nim memiliki
1
N
Nama_mhs
Alamat_mhs
Tgl_lahir
menyenangi
Orang Tua
Hobbi
Nama_ortu
Alamat_ortu
hobbi
nim hobbi
nim Nama_ortu
1
1
DATABASE TERDISTRIBUSI
Materi Selanjutnya

Modul-5 : Database Terdistribusi
TinO DwiantOrO
tino@dwiantoro.com | kelana2010@yahoo.com
http://www.dwiantoro.com
DATABASE
TERDISTRIBUSI
MMaatteerrii kkee--0055
Modul-5 : Database Terdistribusi
Pokok Bahasan
Yang akan dibahas pada modul ini adalah :
􀂉 Database Terdistribusi
􀂉 Fragmentasi Data
Modul-5 : Database Terdistribusi
DATABASE TERDISTRIBUSI
􀂉 Dalam sebuah database terdistribusi, database
disimpan pada beberapa komputer.
􀂉 Komputer- komputer dalam sebuah sistem
terdistribusi berhubungan satu sama lain
melalui bermacam- macam media komunikasi
seperti high speed buses atau telepon line.
Modul-5 : Database Terdistribusi
BENTUK-BENTUK TOPOLOGI DISTRIBUSI
DATA:
􀂉 Fully Connected Network
􀂉 Partialy Conneted Network
􀂉 Tree Strutured Network
􀂉 Ring Network
􀂉 Star Network
Modul-5 : Database Terdistribusi
Fully Connected Network
A B
D C
E F
Modul-5 : Database Terdistribusi
Partialy Conneted Network
B
F E D
C
A
Modul-5 : Database Terdistribusi
Tree Strutured Network
B
D F G
C
A
E
Modul-5 : Database Terdistribusi
Ring Network
C D
A
E
B
F
Modul-5 : Database Terdistribusi
Star Network
B
E
A
D
C
Modul-5 : Database Terdistribusi
KEUNTUNGAN DATABASE TERDISTRIBUSI
􀂉 Pengawasan distribusi dan pengambilan data
􀂉 Reability dan availability
􀂉 Kecepatan pemrosesan query
􀂉 Otonomi lokal
􀂉 Efisien dan fleksibel
Modul-5 : Database Terdistribusi
KERUGIAN DATABASE TERDISTRIBUSI
􀂉 Harga software mahal
􀂉 Kemungkinan kesalahan besar
􀂉 Biaya pemrosesan tinggi
Modul-5 : Database Terdistribusi
FRAGMENTASI DATA
􀂉 Adalah Relasi yang dipartisikan ke dalam beberapa
bagian, setiap bagian disimpan pada lokasi yang
berbeda.
􀂉 Fragnebtasi data adalah memisahkan relasi ke dalam
beberapa fragment.
􀂉 Beberapa peraturan yang harus didefinisikan ketika
mendefinisikan fragment :
􀂾 Kondisi lengkap
􀂾 Kondisi penyusunan kembali
􀂾 Kondisi disjoin.
Modul-5 : Database Terdistribusi
TIGA JENIS FRAGMENTASI :
1. Fragmentasi horisontal
2. Fragementasi vertikal
3. Fragmentasi campuran
􀂉 Cara yang sederhana untuk membangun fragmentasi
campuran sbb :
a. Menggunakan fragmentasi horisontal pada
fragmentasi vertikal
b. Menggunakan fragmentasi vertical pada fragmentasi
horisontal
Modul-5 : Database Terdistribusi
CONTOH KASUS JENIS-JENIS FRAGMENTASI
Relasi UJIAN (NIM,Nama_Mhs,Kode_MK,Mt_Kuliah,
Nil_Akhir,Grade)
Sistem Basis Data
Peranc. Sistem
Sistem Basis Data
Sistem Basis Data
Visual Basic
Visual Basic
Peranc. Sistem
Mt_Kuliah
78
60
40
90
70
40
80
Nil_Akhir
BCDABDA
101
102
101
101
103
103
102
Fathi
Farah
Sarah
Salsabila
Azizah
Farhan
Faiz
123
124
125
126
127
128
129
NIM Nama_Mhs Kode_MK Grade
Modul-5 : Database Terdistribusi
Fragmentasi Horizontal
􀂉 Pemecahan relasi berdasarkan tuplenya.
􀂉 Fragmentasi horizontal berikan tuple-tuple yang
dipartisikan dari sebuah relasi global ke dalam sejumlah
subset r1, r2, … , rn.
􀂉 Tiap-tiap subset berisikan tuple dari r.
􀂉 Setiap tuple dari r harus memiliki satu fragment
sehingga relasi asli dapat disusun kembali.
Modul-5 : Database Terdistribusi
terbagi menjadi 3 fragment yang berbeda
Sistem Basis Data
Sistem Basis Data
Sistem Basis Data
Mt_Kuliah
78
40
90
Nil_Akhir
BDA
101
101
101
Fathi
Sarah
Salsabila
123
125
126
NIM Nama_Mhs Kode_MK Grade
Peranc. Sistem
Peranc. Sistem
Mt_Kuliah
60
80
Nil_Akhir
CA
102
102
Farah
Faiz
124
129
NIM Nama_Mhs Kode_MK Grade
2. Relasi Mt_Kuliah=“Peranc. Sistem”
3. Relasi Mt_Kuliah=“Visual Basic”
Visual Basic
Visual Basic
Mt_Kuliah
70
40
Nil_Akhir
BD
103
103
Azizah
Farhan
127
128
NIM Nama_Mhs Kode_MK Grade
1. Relasi Mt_Kuliah=“Sistem Basis Data”
Modul-5 : Database Terdistribusi
Fragementasi Vertikal
􀂉 Pemecahan relasi berdasarkan dekomposisinya.
􀂉 Fragmentasi vertical disempurnakan dengan
menambahkan sebuah atribut yang disebut tuple
identifier (tuple-id) ke dalam skema r.
􀂉 Tuple-id adalah adalah sebuah alamat logic dari sebuah
tuple.
􀂉 Setiap tuple di dalam r harus memiliki sebuah alamat
yang unik, yaitu atribut tuple-id sebagai kunci
penambahan skema.
􀂉 Tuple-id akan direplikasi ke dalam seluruh fragmentasi
untuk menyusun kembali relasi global.
Modul-5 : Database Terdistribusi
BCDABDA
Grade
Sistem Basis Data
Peranc. Sistem
Sistem Basis Data
Sistem Basis Data
Visual Basic
Visual Basic
Peranc. Sistem
Mt_Kuliah
78
60
40
90
70
40
80
Nil_Akhir
1234567
101
102
101
101
103
103
102
Fathi
Farah
Sarah
Salsabila
Azizah
Farhan
Faiz
123
124
125
126
127
128
129
NIM Nama_Mhs Kode_MK Tuple_ID
Relasi UJIAN setelah ditambahkan Tuple-id
BCDABDA
Grade
Sistem Basis Data
Peranc. Sistem
Sistem Basis Data
Sistem Basis Data
Visual Basic
Visual Basic
Peranc. Sistem
Mt_Kuliah
78
60
40
90
70
40
80
Nil_Akhir
1234567
Fathi
Farah
Sarah
Salsabila
Azizah
Farhan
Faiz
123
124
125
126
127
128
129
NIM Nama_Mhs Tuple_ID
Relasi 1 = NIM, Nama_Mhs, Mt,Kuliah, Nil_Akhir, Grade, Tuple_ID
Modul-5 : Database Terdistribusi
BCDABDA
Grade
78
60
40
90
70
40
80
Nil_Akhir
1234567
101
102
101
101
103
103
102
123
124
125
126
127
128
129
NIM Kode_MK Tuple_ID
Relasi 2 = NIM,Kode_MK,Nil_Akhir,Grade,Tuple_ID
Modul-5 : Database Terdistribusi
Fragmentasi Campuran
􀂉 Relasi r (global) dibagi-bagi ke dalam sejumlah relasi
fragment r1, r2, …, rn.
􀂉 Tiap-tiap fragmentasi diperoleh sebagai hasil dari
skema fragmentasi hirizontal maupun fragmentasi
vertical di relasi r atau dari sebuah fragmentasi r yang
diperoleh sebelumnya.
􀂉 Membangun fragmentasi campuran :
􀂾 Menggunakan fragmentasi horizontal di
fragmentasi vertical.
􀂾 Menggunakan fragmentasi vertical di fragmentasi
horizontal.
Modul-5 : Database Terdistribusi
Dengan mengambil hasil fragmentasi secara vertical, sbb:
BCDABDA
Grade
Sistem Basis Data
Peranc. Sistem
Sistem Basis Data
Sistem Basis Data
Visual Basic
Visual Basic
Peranc. Sistem
Mt_Kuliah
78
60
40
90
70
40
80
Nil_Akhir
1234567
Fathi
Farah
Sarah
Salsabila
Azizah
Farhan
Faiz
123
124
125
126
127
128
129
NIM Nama_Mhs Tuple_ID
Relasi 1 = NIM, Nama_Mhs, Mt,Kuliah, Nil_Akhir, Grade,
Tuple_ID
Kemudian hasil relasi_1 ini di fragmentasikan dengan
skema horizontal, sbb.
Modul-5 : Database Terdistribusi
BDA
Grade
Sistem Basis Data
Sistem Basis Data
Sistem Basis Data
Mt_Kuliah
78
40
90
Nil_Akhir
134
Fathi
Sarah
Salsabila
123
125
126
NIM Nama_Mhs Tuple_ID
CA
Grade
Peranc. Sistem
Peranc. Sistem
Mt_Kuliah
60
80
Nil_Akhir
27
Farah
Faiz
124
129
NIM Nama_Mhs Tuple_ID
BD
Grade
Visual Basic
Visual Basic
Mt_Kuliah
70
40
Nil_Akhir
56
Azizah
Farhan
127
128
NIM Nama_Mhs Tuple_ID
Relasi_1a
Relasi_1b
Relasi_1c
Modul-5 : Database Terdistribusi
Bahasa Query Formal
Materi Selanjutnya

QUERY LANGUAGE
BAHASA QUERY FORMAL
MMaatteerrii kkee--0066
TinO DwiantOrO
tino@dwiantoro.com | kelana2010@yahoo.com
http://www.dwiantoro.com
Pokok Bahasan
Yang akan dibahas pada modul ini adalah :
PENDAHULUAN
􀂉 Query Language adalah suatu bahasa yang
menyediakan fasilitas bagi user untuk mengakses
informasi dari basis data.
􀂉 Pada umumnya level bahasa ini lebih tinggi dari bahasa
pemrograman standar.
􀂉 Dibagi dalam 2 (dua) katagori, yaitu:
􀂾 Bahasa Query Prosedural, dan
􀂾 Bahasa Query Non-Prosedural
􀂉 Bahasa Query Prosedural
User menginstruksikan ke sistem agar membentuk
serangkaian operasi dalam basis data untuk
mengeluarkan hasil yang diinginkan.
Yang termasuk dalam bahasa ini adalah: Aljabar
Relational (relational algebra).
􀂉 Bahasa Query Non-Prosedural
User mendeskripsikan informasi yang diinginkan tanpa
memberikan prosedur detail untuk menghasilkan
informasi tersebut.
Yang termasuk dalam bahasa ini adalah: Kalkulus
Relational Tuple (tuple relational calculus).
1. ALJABAR RELATIONAL
􀂉 Adalah kumpulan operasi terhadap relasi, dimana
setiap operasi menggunakan satu atau lebih relasi
untuk menghasilkan satu relasi yang baru.
􀂉 Operasi-operasi dasar dalam aljabar relational,
adalah: select, project, union, set difference,
cartesian product, dan rename.
􀂉 Operasi lainnya antara lain: set intersection,
natural join, division dan assignment.
1.1. Operasi-operasi Dasar
􀂉 Operasi-operasi select, project dan rename
disebut operasi unary, karena operasi-operasi
tersebut hanya memerlukan satu relasi.
􀂉 Operasi-operasi union, set difference dan
cartesian product memerlukan sepasang relasi,
disebut operasi binary.
Cikarang 217 Nirmala 750
Tangerang 222 Oki 700
Depok 201 Teguh 900
Bekasi 305 Woro 350
Depok 102 Dwishinta 400
Bogor 215 Glady Putra 700
Jakarta 101 Rina 500
Nama-cabang no_nasabah Nama-nasabah jumlah
DEPOSITOR
Jakarta 14 Ninik 1500
Bogor 93 Ari 500
Bekasi 11 Woro 900
Yogyakarta 29 Teguh 1200
Cikarang 10 Nino 2200
Depok 25 Dani 2500
Jakarta 18 Rina 2000
Purworejo 16 Indra 1300
Depok 15 Dwishinta 1500
Tangerang 23 Glady Putra 2000
Jakarta 17 Edith 1000
Nama-cabang No-pinjaman Nama-customer jumlah
BORROWER
a. Operasi Select ( σ = sigma )
Operasi Select menyeleksi tuple-tuple pada sebuah relation
yaitu tuple-tuple yang memenuhi syarat yang sudah ditentukan
sebelumnya.
Contoh: diketahui relasi Hutang
adalah:
Bogor L-16 1300
Bekasi L-11 900
Tangerang L-93 500
Jakarta L-14 1500
Bogor L-15 1500
Depok L-23 2000
Jakarta L-17 1000
Nomor- Jumlah
Pinjaman
Nama-
Cabang
Bogor L-16 1300
Bogor L-15 1500
Nomor- Jumlah
Nama-Cabang Pinjaman
Jika untuk menyeleksi tuple-tuple
dari relasi Hutang dimana nama
cabangnya adalah “Bogor”, ditulis :
σ nama-cabang = “Bogor” (Hutang)
Maka hasil query adalah:
b. Operasi Project ( π = phi )
Operator projection beroperasi pada sebuah relation, yaitu
membentuk relation baru dengan mengcopy atribute-atribute
dan domain-domain dari relation tersebut berdasarkan argumenargumen
pada operator tsb.
Contoh : untuk menampilkan seluruh nomor-hutang dan jumlah
tanpa nama-cabang, dituliskan :
π nomor-hutang, jumlah (hutang)
c. Komposisi Operasi-operasi relasional
􀂉 Berikut contoh query yang lebih kompleks : “ Temukan
kastemer-kastemer yang mendepositkan uangnya di
cabang Jakarta“. Maka query-nya ditulis :
πnama-nasabah(σ nama-cabang=”Jakarta”(deposit))
􀂉 perhatikan bahwa sebagai argumen dari operasi project
adalah sebuah ekspresi untuk suatu relasi. Oleh
karenanya, operasi-operasi aljabar relasional dapat
digabung dengan suatu ekspresi aljabar relasional.
d. Operasi Union
􀂉 Operasi union dalam aljabar relasional sama halnya dengan
operasi union pada aritmatika.
􀂉 Misal user menginginkan nama-nama semua nasabah bank
yang memiliki sebuah account atau sebuah loan atau
keduanya. Perhatikan bahwa relasi customer tidak
mengandung informasi tersebut. Untuk menjawab query ini
diperlukan informasi dari relasi Depositor dan relasi
Borrower. Dengan operasi union informasi yang diinginkan
dapat diperoleh dengan menulis query sebagai berikut :
πnama-nasabah(borrower) U πnama-nasabah(depositor)
Lindsay A-222
Jones A-217
Johnson A-201
Tumer A-305
Hayes A-102
Smith A-215
Johnson A-101
Customer-name Account-number
DEPOSITOR
Adams L-16
Williams L-18
Smith L-11
Curry L-93
Jackson L-14
Hayes L-15
Smith L-23
Jones L-17
Customer-name Loan-number
πnama-nasabah(borrower) Uπnama-nasabah(depositor)
Hasil dari query berikut ini adalah :
BORROWER e. Operasi Pengurangan (Set Defference)
􀂉 Disimbulkoan dengan tanda “ – “.
􀂉 Operasi ini akan menemukan tuple-tuple yang berada
pada satu relasi tetapi tidak berada pada relasi yang
lainnya.
􀂉 Contoh, untuk menemukan semua nasabah bank yang
mempunyai account tetapi tidak mempunyai loan,
ditulis:
πnama-nasabah(depositor) - πnama-nasabah(borrower)
f. Operasi Cartesian-Product
􀂉 Operasi Cartesian-product disimbolkan dengan “ X “.
􀂉 Operasi Cartesian-product akan dihasilkan informasi
yang merupakan kombinasi dari dua relasi.
􀂉 Jika kita memiliki relasi r1(R1) dan r2(R2), maka r1 x r2
adalah relasi yang skemanya merupakan gabungan
dari R1 (atribut-atribut relasi r1) dan R2 (atribut-atribut
relasi r2).
􀂉 Contoh : Jika diinginkan nama-nama dari semua
nasabah yang mempunyai pinjaman (loan) di bank
cabang Bogor, maka query-nya ditulis
σnama-cabang = “Bogor” (borrower x loan)
g. Operasi Rename
􀂉 Dilambangkan dengan simbol rho (ρ).
􀂉 Sintaks penulisan rename : ρx(E)
􀂉 Operasi rename mengeluarkan hasil ekspresi E dengan
nama x.
􀂉 Contoh :
πaccount.balance(σaccount.balance Rangkuman Definisi Aljabar Relasional
􀂉 Jika E1 dan E2 adalah ekspresi aljabar-relasional,
maka berikut ini adalah semua ekspresi aljabarrelasional
:
􀂾 E1 U E2
􀂾 E1 – E2
􀂾 E1 x E2
􀂾 σp(E1), dimana p adalah sebuah predikat untuk
atribut-atribut dalam E1.
􀂾 πs(E1), dimana s adalah daftar yang terdiri dari
beberapa atribut dalam E1.
􀂾 ρx(E1), dimana x adalah nama baru untuk hasil E1
Kalkulus Relasional Tuple
(Tuple Relational Calculus)
tidak dibahas
Bahan untuk mempelajari silahkan
download di website
Materi Selanjutnya