Jumat, 26 Maret 2010

tips berhenti merokok

Astaga!HidupGaya - Merokok jelas tak baik bagi kesehatan maupun lingkungan sekitar. Bagi Anda yang terdorong untuk berhenti merokok, mungkin merasa agak sulit karena rokok sudah menjadi bagian dari hidup Anda. Tapi bukan mustahil kog kalau Anda mau berusaha untuk berhenti merokok. Coba ikuti kiat-kiat berikut ini..

1. Yakinkan diri bahwa berhenti merokok sama sekali tidak sia-sia. Pikirkan kualitas hidup yang lebih baik jika bebas dari asap rokok dan cepat mati jika terus merokok.

2. Rencanakan sebuah tanggal sebagai hari-H berhenti merokok. Sebelum sampai pada tanggal itu, singkirkan asbak, korek api, dan hal-hal yang bisa memicu Anda kembali merokok. Baru setelah tiba pada tanggal itu, berhentilah merokok sama sekali.

3. Rencanakan kegiatan untuk tanggal itu. Misalnya pergi ke tempat-tempat yang terdapat "no smoking area", atau pergi berolahraga.

4. Buatlah daftar orang-orang yang mendukung usaha Anda berhenti merokok, dan mintalah dukungan moril dari mereka.

5. Untuk mengatasi gejala putus zat, santaplah makanan rendah kalori dan banyak minum air.

6. Lawanlah godaan untuk merokok, meski hanya satu hisapan saja. Satu hisapan akan mudah diikuti dengan hisapan-hisapan lain, dan upaya keras Anda akan jadi sia-sia.

7. Kalau Anda hampir menyerah, tundalah sepuluh menit lagi. Hasrat yang kuat itu akan padam. Kalau masih ingin merokok, tariklah napas dalam-dalam melalui mulut, lalu keluarkan secara perlahan dengan menyempitkan bibir Anda. Ulangi 5-10 kali.

Kamis, 25 Maret 2010

karakter manusia

Tiap manusia memiliki karakter yang berbeda-beda, ada yang rajin ada yang malas, ada yang baik hati ada yang jahat, ada yang terbuka namun tak sedikit yang misterius. Pada artikel sebelumnya telah dibahas karakter seseorang berdasar tanggal lahirnya, namun kali ini kita akan mencoba mengupas karakter seseorang menurut bulan kelahirannya.


JANUARY

* Ambisius dan serius
* Suka mengajar dan diajar
* Selalu mencari cacat dan kelemahan orang lain.
* Suka mengkritik
* Pekerja keras dan produktif
* Pandai, rapi dan terorganisir
* Sensitif dan memiliki pemikiran yang dalam
* Tahu cara membahagiakan orang lain
* Pendiam, kecuali pada saat tegang atau 'tersulut'
* Cenderung menutup diri
* Sangat perhatian kepada hal kecil
* Cenderung tidak mudah sakit, tapi lemah terhadap dingin
* Romantis, tapi susah mengungkapkan cinta
* Menyukai anak
* Orang rumahan
* Setia
* Butuh meningkatkan kemampuan sosial
* Mudah cemburu

FEBRUARI

* Pemikirannya abstrak
* Menyukai realitas dan abstrak
* Cerdas dan pandai
* Perwatakan berubah-ubah
* Temperamental
* Pendiam, pemalu, dan sederhana
* Rendah diri
* Setia dan jujur
* Bertekad kuat dalam mencapaui tujuan
* Mencintai kebebasan
* Memberontak jika dihambat
* Menyukai agresifitas
* Terlalu sensitif dan mudah sakit hati
* Gampang marah
* Tidak menyukai hal-hal yang kurang perlu.
* Sangat suka berteman, tapi jarang memperlihatkannya
* Sangat berani, tapi keras kepala
* Ambisius
* Ingin mewujudkan impian dan harapan
* Tajam
* Menyukai hiburan dan waktu santai
* Boros
* Belajar menunjukkan perasaan

MARET

* Berkepribadian menarik
* Pengasih
* Pemalu dan tertutup
* Penuh rahasia
* Jujur, pemurah dan simpatik
* Menyukai ketenangan dan kedamaian
* Sensitif akan kebutuhan orang lain
* Suka melayani orang lain
* Tidak mudah marah
* Dapat dipercaya
* Sangat berterima kasih dan selalu membalas
* Pengamat dan penilai yang baik
* Penuh dendam
* Menyukai bermimpi dan berfantasi
* Suka bertualang
* Suka diperhatikan
* Menyukai dekorasi rumah
* Berbakat musik
* Menyukai hal-hal khusus
* Gampang berubah mood

karakter zodiak

arakter maupun sifat manusia itu berbeda-beda. Ada banyak hal yang membedakannya salah satunya adalah berdasarkan ramalan bintang zodiak. Seperti kita tahu zodiak bintang dibagi menjadi 12. Maka dalam hal ini karakter setiap manusia dibagi menjadi 12 juga.Selain itu…

Anda boleh saja percaya boleh saja tidak dengan karakter berdasarkan zodiak atau ramalan bintang ini. Namanya juga ramalan. Tapi jika kamu percaya silahkan simak paragaf selanjutnya :D

Sebelumnya!

Setahuku antara sifat wanita maupun pria menurut zodiak bisa dikatakan sama saja. Mungkin mempunyai sedikit perbedaan tapi selebihnya sama saja. Ini bisa dilihat dari beberapa tulisan tentang ramalan bintang zodiak yang sebelumnya.

Berikut adalah daftar dari zodiak bintang yang pernah ditulis di blog ini. Semuanya sudah ditulis secara lengkap baik untuk karakter bahkan sampai dalam permasalahan cinta :

1. Ramalan Bintang Taurus. Memiliki kesabaran yang tinggi dan mudah jatuh cinta
2. Ramalan Bintang Aries. Karakternya selalu menjadi nomer satu dan tidak suka diremehkan.
3. Ramalan Bintang Gemini. berfikir ,bergerak dan berbicara secara cepat,
4. Ramalan Bintang Cancer. memiliki sfat yang mudah tersinggung dan perasa.
5. Ramalan Bintang Leo . Ambisius dan selalu bersemangat.
6. Ramalan Bintang Virgo. Pikiran kritis dan logis. Dan selalu mencari kesempurnaan.
7. Ramalan Bintang Libra. sifatnya baik hati, halus, mudah bergaul, diplomatis dan kooperatif
8. Ramalan Bintang Scorpio. Memiliki gairah yang sangat besar.
9. Ramalan Bintang Sagitarius . Memiliki Jiwa yang humoris
10. Ramalan Bintang Capricorn. Memiliki jiwa kuat dan tidak pernah menyerah
11. Ramalan Bintang Aquarius . memiliki perasaan sosial yang tinggi
12. Ramalan Bintang Pisces. Mempunyai karakter yang perasa dan sulit ditebak

Ya itulah 12 sifat dan karakter berdasarkan zodiak. Entah apakah ramalan bintang diatas benar atau salah. Tapi yang pasti manusia ditakdirkan untuk memiliki kemampuan merubah apa yang terjadi dalam dirinya sendiri.

Senin, 22 Maret 2010

contoh penerapan stack dalam Penyimpanan Barang Dalam Gudang.

contoh penerapan stack dalam Penyimpanan Barang Dalam Gudang.

Bentuk penyimpanan barang ke gudang ada bermacam-macam cara,
salah satunya adalah dengan penerapan stack. Pada bentuk ini barang akan
disimpan pada pelat-pelat yang disusun dalam sebuah rak. Penyusunan pelat ini
biasanya menggunakan alat bantu kendaraan forklift, karena biasanya untuk
masing-masing pelat cukup berat untuk diangkat dengan tenaga manusia. Bila
barang yang disimpan adalah barang yang ringan, terkadang penyusunan cukup
menggunakan tenaga manusia, dengan menggunakan tangga dan sejenisnya.
Peletakan barang pada pelat tentu saja berdasarkan pada prioritas-
prioritas tertentu, misalnya jarak dengan pintu gudang, luas paling efektif,
pengelompokan berdasarkan jenis barang, dan lain-lain. Prioritas terakhir, yaitu
berdasarkan jenis barang ini yang sering digunakan dalam penyimpanan barang,
karena cukup mudah dalam pengimplementasiannya, cukup mengefektifkan luas
dari barang-barang yang jenisnya sama. Hal ini jauh lebih mudah dibanding jika
harus mencari luas efektif dari berbagai jenis barang. Prioritas yang cukup sulit
implementasinya adalah prioritas luas efektif dengan jenis barang yang banyak,
proses ini perlu perhitungan yang cukup akurat dan membutuhkan waktu lama
untuk merencanakan penataan barang yang paling baik.
Dalam sistem penyimpanan barang ke gudang secara manual (tanpa
bantuan komputer), maka proses penyimpanan ini membutuhkan tenaga ahli yang
mampu mengatur posisi barang dari bermacam-macam ukuran. Proses ini lebih
sulit jika dikerjakan oleh lebih dari 1 orang, karena setiap orang tentu punya
pertimbangan sendiri dalam penentuan posisi barang. Tetapi proses ini juga cukup
sulit untuk diselesaikan seorang diri, apalagi untuk gudang yang cukup besar
dengan jenis barang yang banyak.
Proses penyimpanan barang ini akan menjadi jauh lebih mudah jika
terdapat alat bantu bagi para ahli untuk pengaturan posisi barang. Dengan adanya
alat bantu ini, bukan berarti meniadakan fungsi dari tenaga ahli.


Metode Algoritma Genetika
Algoritma Genetika adalah suatu teknik pencarian solusi yang diilhami
oleh prinsip-prinsip biologi yang ada di alam, seperti evolusi, seleksi alam, dan
kombinasi genetika. Algoritma Genetika ini memiliki konsep komputasi yang
cukup sederhana, tetapi kemampuannya untuk mengatasi masalah sangat baik
(powerful). Algoritma Genetika yang banyak dikenal dalam dunia komputer
sebagai GA (Genetic Algorithm) ini, dipakai untuk menyelesaikan kasus-kasus
yang mempunyai banyak solusi, di mana tidak ada kepastian solusi mana yang
terbaik, atau seandainya ada kepastian solusi terbaik, akan membutuhkan waktu
yang sangat lama dalam penyelesaiannya. Inti dari Algoritma Genetika adalah
mencari solusi terbaik (survival of the fittest) dari begitu banyak solusi yang ada,
yang dilakukan secara bertahap. Setiap solusi pada GA ini diwakili oleh satu
individu atau satu kromosom. Kromosom-kromosom ini terkumpul dalam
populasi, dan suatu populasi nantinya akan melahirkan populasi yang baru (variasi
yang lain) sampai dengan sejumlah generasi yang ditentukan, untuk mencapai
solusi terbaik. Contoh-contoh kasus yang dapat diselesaikan menggunakan GA:
pencarian rute terpendek (travelling salesman problem), pengisian container,
penentuan posisi toko yang paling menguntungkan, penentuan kerja dalam sebuah
tim, dan masih banyak lagi kasus yang lain. Dalam kasus-kasus ini, banyaknya
solusi bisa mencapai ribuan bahkan jutaan alternatif solusi.

Kamis, 18 Maret 2010

Suku Ya̧nomamö

Suku Ya̧nomamö atau Yanomamɨ adalah sekelompok suku asli yang menempati wilayah hutan hujan Amerika Selatan. Mereka tinggal di wilayah hutan hujan Amazon, diantara perbatasan Brazil dan Venezuela. Karena wilayah tempat tinggal mereka sangat terpencil dan tak terjangkau, mereka sedikit diketahui oleh dunia luar sampai awal permulaan abad lalu. Kehidupan suku Yanomamö telah menjadi salah satu kelompok masyarakat yang paling banyak dipelajari oleh ilmu pengetahuan modern. Kata Ya̧nomamö berarti manusia dalam bahasa Yanomamo.

Audt

Seiring dengan berkembangnya kompleksitas bisnis dan semakin terbukanya peluang usaha dan investasi menyebabkan risiko terjadinya kecurangan pada perusahaan semakin tinggi. Mengacu ke berbagai kasus baik di dalam maupun di luar negeri menunjukkan bahwa kecurangan dapat terjadi di mana saja dan termasuk yang cukup besar ada di sektor usaha. Kasus yang terjadi pada PT Sarijaya Securitas di sektor swasta dan juga di BUMN seperti PLN, Jamsostek. Berbagai Perusahaan Swasta, ketika terungkap ada kasus Tindak Pidana Korupsi, ternyata juga terlibat. Hal menunjukkan bahwa dampak kecurangan ini sangat mungkin sekali membawa pihak-pihak yang terkait, mulai dari pegawai, pejabat teras dan direksi bahkan Dewan Komisaris juga pemilik ternyata rentan terhadap konsekwensi hukum.

Upaya-upaya yang dilakukan oleh pemilik perusahaan, pengelola perusahaan dan pegawai yang bekerja untuk meningkatkan kinerja tidak akan pernah tercapai jika dalam perusahaan masih bercokol tindakan-tindakan kecurangan. Dalam rangka memberikan suatu efek jera, memperkecil kerugian akibat kecurangan dan memperbaiki sistem pengendalian maka jika ada indikasi kuat terjadi suatu kecurangan, perusahaan diharapkan mengambil action yang tepat dengan melakukan audit investigatif. Dengan audit investigatif, perusahaan yang memiliki risiko kerugian keuangan karena tindakan kecurangan yang terjadi dapat mengungkapkan siapa pihak yang melakukan kecurangan tersebut yang selanjutnya akan dimintai pertanggungjawabannya untuk mengganti kerugian perusahaan. Selanjutnya agar memiliki dampak efek jera maka perlu diambil tindakan baik administratif maupun hukum terhadap pelaku kecurangan. Terkait dengan tindaklanjut secara hukum atas kecurangan yang ditemukan, maka perusahaan harus memiliki pertimbangan yang menyeluruh mencakup aspek keuangan perusahaan dan aspek legal terkait dengan regulasi terhadap karyawan maupun terhadap perusahaan. Dengan demikian, efektifitas pengungkapan kecurangan yang terjadi pada perusahaan akan memberikan nilai tambah terutama untuk recovery kerugian yang terjadi, penyempurnaan sistem pengendalian dan menjadikan pelaku potensial lainnya urung melakukan kecurangan. Pada gilirannya, tindakan ini akan memberikan dampak positif bagi nilai perusahaan karena akan memungkinkan perusahaan untuk memperbaiki management dengan peningkatan kinerja perusahaan baik dari aspek ekonomisnya pengadaan, effisiennya proses bisnis dan efektifitasnya program kerja perusahaan

hemt pangkal kaya

Hemat Pangkal Kaya Rajin Pangkal Pandai
Kata Mutiara Kata Bijak March 14th, 2010

Hemat Pangkal Kaya Rajin Pangkal Pandai. Yes, inilah kata bijak yang semua kita sudah faham betul maksudnya, namun tidak sangat banyak diantara kita yang benar-benar hemat dan benar-benar rajin. Dengan demikian lebih banyak pula kita yang belum kaya dan belum pandai pada bidang yang sebenarnya kita ingin. Selain itu yang perlu diingat adalah bahwa Hemat itu baru pangkalnya saja untuk kaya, dan Rajin itu pun baru pangkalnya saja agar pandai. Kita perlu berhemat dan rajin dalam arti yang lebih luas. Yuk kita kerjakan!, hehe..

Tips Praktis Lolos Seleksi Masuk Kerja di Bank

Tips untuk lolos seleksi masuk kerja di Bank, tahap demi tahap :
Tips Praktis Lolos Seleksi Masuk Kerja di Bank

1. Tes TOEFL. Test Of English As A Foreign Language (TOEFL) dipergunakan untuk mengetahui kemampuan Bahasa Inggris dari calon pegawai. Tes ini dibagi menjadi listening, structure dan reading. Untuk lolos tes ini Anda minimal harus mendapatkan total skor 500. Tes model ini dipergunakan oleh Bank Mandiri pada seleksi Officer Development Program (ODP). Tips : Anda dapat meningkatkan kemampuan untuk menghadapai TOEFL dengan mengikuti TOEFL short course, misalnya di lembaga Englih First (EF), Real English atau lembaga bahasa inggris lainnya. Belajar TOEFL secara mandiri juga bia dilakukan dengan membeli buku TOEFL Barron’s, karena di dalam buku tersebut terdapat materi-materi penguasaan TOEFL secara cepat dan mudah, serta dilengkapi dengan tes soalnya dan kunci jawabannya. Yang terakhir adalah menguji kemampuan/skor anda dalam hal TOEFL dengan mengambil tryout di lembaga-lembaga bahasa inggris swasta/universitas.
2. Tes Bahasa Inggris. Tes Bahasa Inggris relatif lebih mudah dibandingkan dengan tes TOEFL. Hal ini disebabkan karena Bank hanya bermaksud mengetahui kemampuan dasar bahasa inggris calon pegawai (Pasive-English). Materi Soalnya pun relatif lebih mudah karena hanya structure dan reading. Tes model ini dipergunakan oleh Bank Niaga dalam penyaringan seleksi Program Pendidikan Eksekutif (PPE). Tips : Anda cukup me-refresh pelajaran SMU/Kuliah tentang structure dan tense
3. Tes TPA. Tes Potesi Akademik (TPA) dilakukan Bank untuk mengetahui sejauh mana calon karyawannya dalam penguasaan matematika, verbal maupun logika. Materi matematika diantaranya terdiri atas penguasaan deret hitung/ukur untuk mengetahui ketelitian/analisa calon pegawai, soal cerita untuk mengetahui kemampuan pemahaman analitik terhadap suatu permasalahan dan crempling (penjumlahan urutan angka secara menurun) untuk mengetahui ketahanan konsentrasi calon pegawai. Semua Bank cenderung menggunakan tes model ini. Tips : Dengan banyak berlatih melalui buku-buku TPA yang banyak dijual di toko-toko buku, Anda dapat dengan mudah lolos dari tahap ini. Khusus untuk tes crempling, gunakan pulpen ata pensil biasa, jangan menggunakan pensil mekanik, karena ketika ujung pensil mekanik habis, anda membutuhkan sedikit waktu untuk memencetnya keluar. Padahal waktu dalam hitungan detik sangat berarti dalam tes model ini.link
4. Tes Psikologi. Tes psikologi dilakukan Bank untuk melihat sejauh mana kepribadian dari calon pegawai. Dalam tes ini tidak ada istilah benar/salah, yang ada hanyalah kesesuaian terhadap kebutuhan/posisi spesifikasi jabatan yang ditawarkan. Seorang calon pegawai dengan pribadi kreatifitas sangat tinggi atau suka akan tantangan, terkadang justru kalah bersaing dalam seleksi masuk Bank, dibandingkan calon pegawai berkreatifias sedang namun berintegritas tinggi (jujur). Karena secara umum, Bank membutuhkan pegawai dengan spesifikasi : jujur, disiplin, cerdas, kreatifitas sedang, namun luwes. Hampir semua Bank menggunakan tes model ini. Tips : Anda harus jujur menjadi diri anda sendiri, sehingga kelak kalaupun diterima, anda akan nyaman bekerja sebagai pegawai Bank
5. Tes Diskusi. Tes Diskusi atau sering disebut Focus Group Discussion ini, dipergunakan Bank untuk mengetahui sejauh mana kemampuan calon pegawai dalam hal kecepatan memahami masalah, kepemimpinan, teamwork dan sportifitas. Calon pegawai dikelompokan dalam kelompok-kelompok kecil yang terdiri atas 4-8 orang, yang akan diuji kemampuan berdiskusi dalam menyelesaikan suatu masalah. Tes model ini dipergunakan diantaranya di Bank Mandiri, Bank Central Asia (BCA), Bank Niaga dan Bank Danamon. Tips : anda tidak perlu mendominasi diskusi atau menang berdebat dalam mempertahankan argumen anda. Yang harus anda lakukan adalah memberikan kontribusi positif terhadap jalannya diskusi, misalnya dengan memberikan argumen yang menarik atau menjadi moderator diskusi. Utarakan argumen anda secara santun dan tidak emosional
6. Tes Wawancara. Tes wawancara dipergunakan untuk mengenal perilaku ataupun sikap calon pegawai dalam menghadapi masalah/pertanyaan yang diajukan jajaran manajemen/direksi. Semua Bank menggunakan tes model ini. Tips : Anda hanya perlu berpakaian sopan, rapi, wangi namun tidak berlebihan, dan menjawab setiap pertanyaan dengan santun, lugas dan berkesan tangkas. Ada baiknya Anda juga menyiapkan jawaban-jawaban dalam bahasa inggris, minimal ketika memeperkenalkan diri anda
7. Tes Kesehatan. Tes Kesehatan dipergunakan untuk mengetahui kebugaran calon pegawai terhadap penyakit maupun narkoba. Tes ini terdiri atas tes darah, tes tekanan darah, tes buta warna dan tes urine. Semua Bank menggunakan tes model ini. Tips : Persiapkan fisik anda mulai seminggu sebelumnya, melalui olah raga, jauhi makan berkolesterol dan cukup istirahat. Bagi anda yang merokok ada baiknya anda menguranginya walau untuk sementara waktu

Rabu, 17 Maret 2010

contoh penerepan quee (antrian) dalam taman hiburan

Daerah antrian terorganisir biasanya ditemukan di taman hiburan. The rides have a fixed number of guests that can be served at any given time, so there has to be some control over additional guests who are waiting. Wahana memiliki jumlah tetap tamu yang dapat disajikan pada waktu tertentu, sehingga harus ada tambahan beberapa kontrol atas tamu yang sedang menunggu. This led to the development of formalized queue areas—areas in which the lines of people waiting to board the rides are organized by railings, and may be given shelter from the elements with a roof over their heads, inside a climate-controlled building or with fans and misting devices. Hal ini menyebabkan perkembangan antrian resmi daerah-daerah di mana garis orang menunggu untuk naik wahana yang diselenggarakan oleh pagar, dan boleh diberikan perlindungan dari unsur-unsur dengan atap di atas kepala mereka, di dalam gedung yang dikendalikan iklim atau dengan penggemar dan perangkat gerimis.

In some amusement parks - Disney Parks being a prime example - queue areas can be elaborately decorated, with holding areas fostering anticipation , thus shortening the perceived wait for people in the queue by giving them something interesting to look at as they wait, or the perception that they have arrived at the threshold of the attraction. Dalam beberapa taman hiburan - Taman Disney menjadi contoh utama - daerah dapat antrian panjang lebar dihiasi, dengan mendorong daerah memegang antisipasi, dengan demikian memperpendek menunggu yang dirasakan orang-orang dalam antrian dengan memberi mereka sesuatu yang menarik untuk melihat ketika mereka menunggu, atau persepsi bahwa mereka telah tiba di ambang dari atraksi.

Queues are generally found at transportation terminals where security screenings are conducted. Antrian adalah transportasi umumnya ditemukan di terminal di mana keamanan dilakukan pemutaran.

Large stores and supermarkets may have dozens of separate queues, but this can cause frustration, as different lines tend to be handled at different speeds; some people are served quickly, while others may wait for longer periods of time. Toko-toko dan pasar swalayan besar mungkin telah puluhan antrian yang terpisah, tetapi hal ini dapat menyebabkan frustrasi, seperti baris yang berbeda cenderung ditangani dengan kecepatan yang berbeda; beberapa orang dilayani dengan cepat, sementara yang lain dapat menunggu untuk waktu yang cukup lama. Sometimes two people who are together split up and each waits in a different line; once it is determined which line is faster, the one in the slower line joins the other. Kadang-kadang dua orang yang bersama-sama berpisah dan masing-masing menunggu di baris yang berbeda; setelah ditentukan garis yang lebih cepat, yang satu di baris lambat bergabung dengan yang lain. Another arrangement is for everyone to wait in a single line [ citation needed ] ; a person leaves the line each time a service point opens up. Pengaturan lain adalah untuk semua orang untuk menunggu dalam satu baris [rujukan?]; Seseorang meninggalkan baris setiap kali membuka titik layanan. This is a common setup in banks . Ini adalah konfigurasi umum di bank.
[ edit ] Virtual queue [Sunting] Virtual antrian

Physical queueing is sometimes replaced by virtual queueing. Queueing fisik kadang-kadang digantikan oleh virtual queueing. In a waiting room there may be a system whereby the queuer asks and remembers where his place is in the queue, or reports to a desk and signs in, or takes a ticket with a number from a machine. Dalam sebuah ruang tunggu mungkin ada sebuah sistem dimana queuer bertanya dan ingat di mana tempatnya berada dalam antrian, atau laporan ke sebuah meja dan tanda-tanda, atau mengambil tiket dengan nomor dari sebuah mesin. These queues typically are found at doctors ' offices, hospitals , town halls , social security offices, labor exchanges , the Department of Motor Vehicles , the Department of Immigration , free internet access in the state or council libraries, banks or post offices . Antrian ini biasanya dapat ditemukan di dokter kantor, rumah sakit, balai kota, jaminan sosial kantor, bursa tenaga kerja, maka Departemen Kendaraan Bermotor, di Departemen Imigrasi, bebas akses internet di negara atau dewan perpustakaan, bank atau kantor pos. Especially in the United Kingdom , tickets are taken to form a virtual queue at delicatessens and children's shoe shops. Khususnya di Inggris Raya, tiket diambil untuk membentuk antrian di delicatessens virtual dan toko-toko sepatu anak-anak. In some countries such as Sweden , virtual queues are also common in shops and railway stations . Di beberapa negara seperti Swedia, virtual antrian juga umum di toko-toko dan stasiun kereta api. A display sometimes shows the number that was last called for service. Sebuah layar kadang-kadang menunjukkan nomor yang terakhir dipanggil untuk melayani.

Restaurants have come to employ virtual queueing techniques with the availability of application-specific pagers, which alert those waiting that they should report to the host to be seated. Restoran telah datang untuk menggunakan teknik queueing virtual dengan ketersediaan aplikasi-pager tertentu, yang mengingatkan mereka bahwa mereka harus menunggu laporan kepada tuan rumah untuk duduk. Another option used at restaurants is to assign customers a confirmed return time, basically a reservation issued on arrival. Pilihan lain yang digunakan di restoran pelanggan adalah untuk menetapkan waktu yang dikonfirmasi kembali, pada dasarnya pemesanan dikeluarkan pada saat kedatangan.
[ edit ] Mobile queue [Sunting] Handphone antrian

All of the above methods, however, suffer from the same drawback: the person arrives at the location only to find out that they need to wait. Semua metode di atas, bagaimanapun, menderita kekurangan yang sama: orang yang tiba di lokasi hanya untuk mengetahui bahwa mereka harus menunggu. Recently, queues at DMVs [ 3 ] , colleges, restaurants [ 4 ] , healthcare institutions [ 5 ] , government offices [ 6 ] and elsewhere have begun to be replaced by mobile queues or queue-ahead, whereby the person queueing uses his/her phone, the WWW, a kiosk or another method to enter a virtual queue, optionally prior to arrival, is free to roam during the wait, and then gets paged at his/her mobile phone when his/her turn approaches. Baru-baru ini, antrian di DMVs [3], perguruan tinggi, restoran [4], lembaga-lembaga kesehatan [5], kantor pemerintah [6] dan di tempat lain sudah mulai diganti dengan mobile-antrian atau antrian depan, dimana antrian orang menggunakan nya / dia telepon, WWW, kios, atau metode lain untuk memasukkan virtual antrian, opsional sebelum kedatangan, bebas berkeliaran selama menunggu, dan kemudian mendapat paged di / telepon genggam ketika / gilirannya pendekatan. This has the advantage of allowing users to find out the wait forecast and get in the queue before arriving, roaming freely and then timing their arrival to the availability of service. Hal ini memiliki keuntungan yang memungkinkan pengguna untuk mengetahui dan mendapatkan perkiraan menunggu dalam antrian sebelum tiba, berkeliaran dengan bebas dan kemudian waktu kedatangan mereka dengan ketersediaan layanan. This has been shown to extend the patience of those in the queue and reduce no-shows [ 7 ] . Hal ini telah ditunjukkan untuk memperpanjang kesabaran orang-orang dalam antrian dan tidak mengurangi-menunjukkan [7]. Mobile queueing is more environmentally friendly than application-specific pagers, which require special-purpose batteries and hardware, and healthier from a public health perspective, as there is no shared device changing hands. Handphone queueing yang lebih ramah lingkungan dibandingkan dengan aplikasi-pager tertentu, yang membutuhkan tujuan khusus baterai dan perangkat keras, dan lebih sehat dari perspektif kesehatan masyarakat, karena tidak ada perangkat bersama berpindah tangan.
[ edit ] Queue ethics [Sunting] Antrian etika

Kamis, 11 Maret 2010

Quee (Antrian)

QUEUE
(ANTRIAN)
eue (antrian) adalah barisan elemen yang apabila elemen ditambah maka
ahannya berada di posisi belakang (rear) dan jika dilakukan pengambilan elemen
n di elemen paling depan (front). Oleh karena itu, queue bersifat FIFO (first in
.
ntoh : epan=1 Belakang=4
5 6 7 9
erasi-operasi dasar dari sebuah queue adalah :
nqueue : proses penambahan elemen di posisi belakang
Dequeue : proses pengambilan elemen di posisi depan
lain operasi dasar di atas, ada pula operasi-operasi lain yang dapat dilakukan
sebuah queue yaitu :
Operasi pemeriksaan queue kosong (fungsi kosong)
Operasi pemeriksaan queue penuh (fungsi penuh).
Operasi inisialisasi queue (fungsi inisialisasi) Adapun presentasi queue dapat dilakukan dengan 2 car
Dengan menggunakan array statis
Operasi-operasi yang dapat dilakukan dalam queue yan
array statis adalah :
1.1. Pendeklarasian sebuah queue
Setiap queue memiliki elemen-elemen (field) b
belakang, elemen antrian, dan maksimal elemennya.
Adapun pendeklarasian queue dalam bahasa C adala
#define maks 5
struct TQueue{
int depan,belakang;
int maks_queue;
int antrian[maks];
};
TQueue Q,Queue,Q2;//deklarasi variable ber

1.2. Inisialisasi Queue
Inisialisasi queue adalah proses pemberian nilai
belakang dari queue dan juga pemberian nilai
menunjukan banyaknya maksimal data dalam queue
Karena dalam bahasa C elemen sebuah array dim
inisialisasi nilai depan dan belakang bukan 0 tetapi
penambahan elemen (enqueue) akan bernilai 0 se
disimpan dalam elemen antrian pada posisi 0.

Implementasi fungsi inisialisasi queue dalam bahasa
void inisialisasi(TQueue *Q)
{
Q->maks_queue=maks;
Q->depan=-1;
Q->belakang=-1;
}

Cara pemanggilannya adalah :
Inisialisasi(&Q);
1.3. Fungsi Kosong
Fungsi kosong digunakan untuk memeriksa apakan keadaa
memiliki elemen. Fungsi kosong didapatkan dengan memeriksa
dari queue. Jika field belakang bernilai 0 maka berarti queue k
tidak 0 maka berarti queue mempunyai elemen.
Implementasi dalam bahasa C agak berbeda karena elemen array
sehingga pemeriksaan nilai belakang dilakukan dengan mem
dengan nilai -1. Jika nilai belakang bernilai -1 maka queue koson
lebih dari -1 berarti queue tidak kosong (false). Sehingga impleme
bahasa C adalah :
int kosong(TQueue Q)
{
if (Q.belakang==-1)
return 1;
else
return 0;
}
Cara pemanggilannya adalah :
if(kosong(Q))// jika queue Q kosong
……

1.4. Fungsi Penuh
Fungsi penuh berguna untuk memeriksa apakah suatu queue telah
ini diperlukan ketika proses enqueue. Fungsi ini akan bernilai b
field belakang sama dengan nilai maks_queue jika tidak sama
queue belum penuh.
Dalam bahasa C perbandingan yang dilakukan adalah bukan deng
tetapi dengan nilai maks_queue-1 karena elemen array dalam ba
dari posisi 0. Implementasi dalam bahasa C adalah :
int penuh(TQueue Q)
{
if(Q.belakang==Q.maks_queue-1)
return 1;
else
return 0;
}
Cara pemanggilannya adalah :
If(!penuh(Q)) //if queue Q tidak(!) penuh 1.5. Operasi Enqueue
Proses enqueue adalah proses untuk penambahan di posi
Penambahan ini dilakukan jika kondisi queue tidak penuh. Jika ke
kosong, maka field depan dan belakang bernilai 1 tetapi jika sudah
elemen maka yang nilai belakang harus bertambah 1. Kemudia
disimpan di array pada posisi belakang.
Implementasi dalam C harus melakukan penyesuaian karena ele
dimulai dari 0 sehingga ketika queue masih kosong pemberian nil
belakang adalah 0 bukan 1. Untuk lebih jelasnya perhatikan potonga
bawah ini :
void enqueue(TQueue *Q, int data)
{
if(!penuh(*Q))
{
if(empty(*Q)
{
Q->depan=0;
Q->belakang=0;
}
else
Q->belakang++;

Q->antrian[Q->belakang]=data;
}
else
printf("Queue Telah Penuh\n");
}
Cara penggunaannya :
int data=7
enqueue(&Q,data);
1.6. Operasi Dequeue
Operasi dequeue adalah proses pengambilan elemen queue. Tentunya elemen
yang diambil selalu dari elemen pertama (1). Setelah elemen pertama diambil,
maka akan diperlukan proses pergeseran elemen data setelah elemen data yang
diambil (dari posisi ke-2 sampai posisi paling belakang), dan kemudian posisi
belakang akan dikurangi 1 karena ada data yang diambil.
Implementasi dalam bahasa C dilakukan dengan pengambilan elemen pada
posisi 0, sehingga fungsi dequeue-nya menjadi :
int dequeue(TQueue *Q)
{
int data,i;
if(!kosong(*Q))
{
data=Q->antrian[Q->depan];
for(i=0;i<=Q->belakang-1;i++)
Q->antrian[i]=Q->antrian[i+1];
Q->belakang--;
return data;
}
else
{
printf("Queue Kosong.\n");
return 0;
}
}
Cara penggunaan fungsi tersebut adalah :
int data;
data=dequeue(&Q); //ambil data dari dequeue pada queue Q
printf(“%d”,data);
2. Dengan menggunakan linked list.
Proses penyimpanan elemen queue dalam linked list mirip dengan operasi pada single
linked list yang menggunakan penyimpanan tambah akhir dan hapus awal.
Contoh :
DepanBelakang
45915NULL

Operasi-operasi yang dapat dilakukan dalam queue yang menggunakan representasi
linked list adalah :
2.1. Pendeklarasian sebuah queue
Setiap queue memiliki elemen-elemen (field) berupa posisi depan, posisi
belakang, elemen antrian, dan posisi penunjuk ke elemen berikutnya. Berikut ini
adalah pendeklarasian queue yang disimpan dalam bentuk linked list.
typedef struct TQueue *PQueue;
typedef struct TQueue{
int data;
PQueue berikutnya;
};
PQueue depan,belakang; //depan dan belakang queue adalah pointer

2.2. Inisialisasi Queue
Proses inisialisasi queue yang disimpan dalam bentuk linked list adalah dengan
memberikan nilai NULL ke pointer depan dan belakang yang menandakan
bahwa pointer depan dan belakang belum menunjuk ke 1 elemen apapun.
Implementasi dalam bahasa C adalah :
void inisialisasi(PQueue *depan, PQueue *belakang)
{
*depan=NULL;
*belakang=NULL;
}
Cara penggunaannya adalah :
Inisialisasi(&depan,&belakang);
2.3. Fungsi Kosong
Fungsi ini berguna untuk memeriksa apakah suatu
Fungsi ini berguna ketika proses dequeue yaitu
diambil, maka harus diperiksa dulu apakah memili
akan mempunyai nilai benar jika depan atau belaka
Implementasinya dalam bahasa C adalah :
int kosong(PQueue depan)
{
if(depan==NULL)
return 1;
else
return 0;
}
Cara penggunaannya adalah :
If(kosong(awal))
……..

2.4. Fungsi Penuh
Fungsi ini berguna untuk memeriksa apakah m
menyimpan data elemen queue. Oleh karena itu la
dengan membuat suatu elemen baru di memori
tersebut berhasil berarti memori belum penuh dan
gagal dibuat berarti memori sudah penuh. Jangan l
baru yang tadi dibuat agar kondisi memori kembal
penambahan elemen baru.
Implementasinya dalah bahasa C adalah :
int penuh()
{
PQueue baru;
baru=(PQueue)malloc(sizeof(TQueue));
if(baru!=NULL)
{
free(baru);
return 0;
}
else
return 1;
}
Cara penggunaannya adalah :
If(!penuh()) // jika memori penuh
……..
2.5. Operasi Enqueue
Proses enqueue dalam queue linked list adalah dengan menambahkan elemen
baru ke posisi paling belakang (sambungkan field berikutnya dari field belakang
ke posisi pointer baru). Setelah itu, pointer penunjuk belakang harus berpindah
ke posisi baru tersebut. Proses ini seperti proses penambahan di belakang pada
single linked list.
Implementasinya dalam bahasa C adalah :
void enqueue(PQueue *depan, PQueue *belakang, int data)
{
PQueue baru;
if(!penuh())
{
baru=(PQueue)malloc(sizeof(baru));
baru->data=data;
baru->berikutnya=NULL;
if(kosong(*depan))
{
*depan=baru;
*belakang=baru;
}
else
{
(*belakang)->berikutnya=baru;
*belakang=baru;
}
}
else
printf("Memori Kosong\n");
}

Cara penggunaannya adalah :
Enqueue(&depan,&belakang,5);//memasukan angka 5 ke posisi akhir
2.5. Operasi Enqueue
Proses enqueue dalam queue linked list adalah dengan menambahkan elemen
baru ke posisi paling belakang (sambungkan field berikutnya dari field belakang
ke posisi pointer baru). Setelah itu, pointer penunjuk belakang harus berpindah
ke posisi baru tersebut. Proses ini seperti proses penambahan di belakang pada
single linked list.
Implementasinya dalam bahasa C adalah :
void enqueue(PQueue *depan, PQueue *belakang, int data)
{
PQueue baru;
if(!penuh())
{
baru=(PQueue)malloc(sizeof(baru));
baru->data=data;
baru->berikutnya=NULL;
if(kosong(*depan))
{
*depan=baru;
*belakang=baru;
}
else
{
(*belakang)->berikutnya=baru;
*belakang=baru;
}
}
else
printf("Memori Kosong\n");
}

Cara penggunaannya adalah :
Enqueue(&depan,&belakang,5);//memasukan angka 5 ke posisi akhir
QUEUE DENGAN CIRCULAR ARRAY

Jika kita menggunakan array untuk queue seperti di atas, maka ketika ada proses
pengambilan (dequeue) ada proses pergeseran data. Proses pergeseran data ini pasti
memerlukan waktu apalagi jika elemen queue-nya banyak. Oleh karena itu solusi agar
proses pergeseran dihilangkan adalah dengan metode circular array.
Queue dengan circular array dapat dibayangkan sebagai berikut :

Depan=1 Belakang=4
5 6 7 9
Atau agar lebih jelas, array di atas dapat dibayangkan ke dalam bentuk seperti
lingkaran di bawah ini.
1
5
5
4962
7
3
depan = 1
belakang = 4

Aturan-aturan dalam queue yang menggunakan circular array adalah :
1. Proses penghapusan dilakukan dengan cara nilai depan (front) ditambah 1 :
depan=depan + 1.
2. Proses penambahan elemen sama dengan linear array yaitu nilai belakang ditambah 1 :
belakang=belakang + 1.
3. Jika depan = maks dan ada elemen yang akan dihapus, maka nilai depan = 1.
4. Jika belakang = maks dan depan tidak 1 maka jika ada elemen yang akan
ditambahkan, nilai belakang=1
5. Jika hanya tinggal 1 elemen di queue (depan = belakang), dan akan dihapus maka
depan diisi 0 dan belakang diisi dengan 0 (queue kosong). Contoh :
Untuk mempermudah, elemen dari queue bertipe karakter.
No Operasi Status Queue
1 2 3 4 5
1. Inisialisasi Depan = 0

Belakang = 0
2. Enqueue A, B, E Depan = 1
A B C
Belakang = 3
3. Dequeue menghasilkan Depan = 2
B C
nilai A Belakang = 3
4. Enqueue D, E Depan = 2
B C D E
Belakang = 5
5. Dequeue 2 kali Depan = 4
D E
menghasilkan B, dan C Belakang = 5
6. Enqueue F Depan = 4
F D E
Belakang = 1
7. Enqueue G, H Depan = 4
F G H D E
Belakang =3
8. Dequeue menghasilkan Depan = 5
F G H E
D Belakang=4
9. Dequeue menghasilkan Depan = 1
F G H
E Belakang = 3
10. Dequeue 2 kali Depan = 3
H
menghasilkan F dan G Belakang = 3
11. Dequeue menghasilkan Depan = 0

H Belakang = 0

1515151515
AEEEF
24B24B24DB24D24D
CCC
333333

erasi 1 Operasi 2 Operasi 3 Operasi 4 Operasi 5 Operas

151515151 FEFF
G24G24G24242
HHHH
33333

erasi 7 Operasi 8 Operasi 9 Operasi 10 Operasi 11 Operasi-operasi yang dapat terjadi dalam queue yang menggunakan circular array
ah :
Pendeklarasian Queue
Setiap queue memiliki elemen-elemen (field) berupa posisi depan, posisi belakang,
elemen antrian, dan maksimal elemennya.
Adapun pendeklarasian queue dalam bahasa C adalah :
#define maks 5
struct TQueue{
int depan,belakang;
int maks_queue;
int antrian[maks];
};
TQueue Q,Queue,Q2;//deklarasi variable bertipe TQueue
Inisialisasi Queue
nisialisasi queue adalah proses pemberian nilai 0 untuk field depan dan belakang dari
queue dan juga pemberian nilai maks ke maks_queue yang menunjukan banyaknya
maksimal data dalam queue.
Karena dalam bahasa C elemen sebuah array dimulai dengan 0 maka proses
nisialisasi nilai depan dan belakang bukan 0 tetapi -1 sehingga ketika ada proses
penambahan elemen (enqueue) akan bernilai 0 sehingga elemen tersebut akan
disimpan dalam elemen antrian pada posisi 0.
mplementasi fungsi inisialisasi queue dalam bahasa C adalah
void inisialisasi(TQueue *Q)
{
Q->maks_queue=maks;
Q->depan=-1;
Q->belakang=-1;
}
Cara pemanggilannya adalah :
Inisialisasi(&Q); 3. Fungsi Kosong
Suatu queue yang menggunakan circular array dapat dikatakan kosong jika nilai y
menunjuk posisi depan atau belakang mempunyai nilai 0.
Implementasi dalam bahasa C, perbandingan posisi depan atau belakang dilaku
bukan dengan angka 0 tetapi angka -1 karena angka 0 menunjukan elemen pert
dari array. Sehingga source code fungsi pemeriksaan apakah queue kosong adalah
int kosong(TQueue Q)
{
if (Q.belakang==-1)
return 1;
else
return 0;
}
Cara pemanggilannya :
If(kosong(Q)) // jika Queue Q kosong
......

4. Fungsi Penuh
Suatu queue akan disebut penuh jika terjadi 2 hal yaitu jika nilai depan mempun
nilai 1 dan posisi belakang sama dengan maks_queue atau jika posisi depan s
dengan posisi belakang +1. Jika salah satu dari 2 hal tersebut terjadi maka fu
penuh mempunyai nilai true dan jika tidak terjadi 2 hal tersebut maka fungsi bern
false.
Implementasi dalam bahasa C agar beda karena posisi awal array bukan 1 tapi 0
posisi terakhir data adalah maks_queue-1 bukan maks_queue. Sehingga fungsi
akan seperti di bawah ini :
int penuh(TQueue Q)
{
if(
((Q.depan==0)&&(Q.belakang==Q.maks_queue-1))
||
((Q.depan==Q.belakang+1))
)
return 1;
else
return 0;
}
Cara pemanggilannya adalah :
If(!penuh(Q)) // jika queue Q tidak (!) penuh 5. Operasi Enqueue
Proses enqueue data hanya bisa dilakukan jika queue tidak kosong. Ada beb
yang harus diperhatikan ketika akan melakukan enqueue pada circul
diantaranya adalah : Kondisi ketika queue masih kosong. Jika ini terjadi, maka posisi d
belakang bernilai 0. Ketika ketika nilai belakang sama dengan maks_queue, maka posisi
adalah 0. Ini terjadi ketika posisi depan lebih besar dari 0 (pe
dequeue). Ketika nilai belakang masih lebih kecil dari maks_queue ma
belakang ditambah 1 : belakang=belakang+1;
Dari ketentuan-ketentuan di atas dapat diimplementasikan dalam bahasa
mengganti beberapa hal yaitu posisi perbandingan/pengisian dengan nilai
dengan perbandingan/pengisian dengan nilai -1 dan perbandingan den
maks_queue diganti dengan maks_queue-1. Itu disebabkan karena dalam
array dimulai dari 0. Dengan hal tersebut implementasi operasi Enqueue-n
sebagai berikut :
void enqueue(TQueue *Q, int data)
{
if(!penuh(*Q))
{
if(Q->depan==-1)
{
Q->depan=0;
Q->belakang=0;
}
else
if(Q->belakang==Q->maks_queue-1)
Q->belakang=0;
else
Q->belakang++;

Q->antrian[Q->belakang]=data;
}
else
printf("Queue Telah Penuh\n");
}
Cara penggunaannya adalah :
Enqueue(&Q,5);//menambahkan elemen 5 ke dalam queue Q 6. Operasi Dequeue
Proses dequeue hanya bisa dilakukan jika queue dalam keadaan tidak ko
beberapa kondisi yang harus diperhatikan ketika dequeue elemen queue yai Kondisi ketika posisi depan sama dengan posisi belakang (qu
memiliki 1 elemen) maka nilai depan dan belakang diisi dengan
kosong). Jika posisi depan sama dengan posisi maks_queue maka po
berpindah ke 1. Selain itu, posisi depan ditambah dengan 1 : depan=depan+1
Ketika kita mengimplementasikannya dalam bahasa C, maka ada beberap
harus diganti adalah semua pengisian/perbandingan dengan angka 1 digant
(karena elemen array dalam bahasa C adalah 0), serta k
perbandingan/pengisian dengan nilai 0 diganti dengan -1 dan perbandingan
dengan nilai maks_queue diganti dengan maks_queue-1. Impelementasi
bahasa C adalah :
int dequeue(TQueue *Q)
{
int data,i;
if(!kosong(*Q))
{
data=Q->antrian[Q->depan];
if(Q->depan==Q->belakang)//jika hanya 1 elemen
{
Q->depan=-1;
Q->belakang=-1;
}
else
if(Q->depan==Q->maks_queue-1)
Q->depan=0;
else
Q->depan++;
return data;
}
else
{
printf("Queue Kosong.\n");
return 0;
}
}
Cara pemanggilannya adalah :
int data;
data=dequeue(&Q); //ambil data dari dequeue pada queue Q

Selasa, 02 Maret 2010

Stack

STACK


* DEFINISI STACK
Stack adalah suatu bentuk khusus dari linear list di mana operasi penyisipan dan penghapusan atas elemen-elemennya hanya dapat dilakukan pada satu sisi saja yang disebut sebagai “TOP”.
Misal diberikan Stack S sebagai berikut :

S = [ S1, S2, .........., ST ] * maka TOP(S) = ST.

Untuk menunjukkan jumlah elemen suatu stack digunakan notasi NOEL. Dari stack di atas, maka NOEL(S) = T. Selanjutnya, jika diberikan sebuah stack S = [A,B,C,D], maka stack S ini dapat digambarkan sebagai berikut :







* OPERASI DASAR PADA STACK
Ada empat operasi dasar yang didefinisikan pada stack, yaitu :
1. CREATE(stack)
2. ISEMPTY(stack)
3. PUSH(elemen,stack)
4. POP(stack)


* CREATE
Operator ini berfungsi untuk membuat sebuah stack kosong dan didefinisikan bahwa :

NOEL(CREATE(S)) = 0 dan TOP(CREATE(S)) = null



* ISEMPTY
Operator ini berfungsi untuk menentukan apakah suatu stack adalah stack kosong. Operasinya akan bernilai boolean, dengan definisi sebagai berikut :
ISEMPTY(S) = true, jika S adalah stack kosong
= false, jika S bukan stack kosong
atau
ISEMPTY(S) = true, jika NOEL(S) = 0
= false, jika NOEL(S) * 0

Catatan : ISEMPTY(CREATE(S)) = true.



* PUSH
Operator ini berfungsi untuk menambahkan satu elemen ke dalam stack. Notasi yang digunakan adalah :

PUSH(E,S)

Artinya : menambahkan elemen E ke dalam stack S.

Elemen yang baru masuk ini akan menempati posisi TOP.
Jadi : TOP(PUSH(E,S)) = E.
Akibat dari operasi ini jumlah elemen dalam stack akan bertambah, artinya NOEL(S) menjadi lebih besar atau stack menjadi tidak kosong (ISEMPTY(PUSH(E,S)) = false).



* POP
Operator ini berfungsi untuk mengeluarkan satu elemen dari dalam stack. Notasinya :
POP(S)

Elemen yang keluar dari dalam stack adalah elemen yang berada pada posisi TOP. Akibat dari operasi ini jumlah elemen stack akan berkurang atau NOEL(S) berkurang dan elemen pada posisi TOP akan berubah. Operator POP ini tidak dapat digunakan pada stack kosong, artinya :

POP(CREATE(S)) = error condition

Catatan : TOP(PUSH(E,S)) = E


* DEKLARASI STACK PADA BAHASA PEMROGRAMAN
Dalam bahasa pemrograman, untuk menempatkan stack biasanya digunakan sebuah array. Tetapi perlu diingat di sini bahwa stack dan array adalah dua hal yang berbeda. Misalkan suatu variabel S adalah sebuah stack dengan 100 elemen. Diasumsikan elemen S adalah integer dan jumlah elemennya maksimum adalah 100 elemen. Untuk mendeklarasikan stack dengan menggunakan array, harus dideklarasikan pula variabel lain yaitu TOP_PTR yang merupakan indeks dari array. Variabel TOP_PTR ini digunakan untuk menyatakan elemen yang berada pada posisi TOP dalam stack tersebut. Selanjutnya gabungan kedua variabel ini diberi nama STACK_STRUCT. Kemudian didefinisikan bahwa :

NOEL(S) = TOP_PTR
ISEMPTY(S) = TRUE, jika TOP_PTR = 0 dan
FALSE, jika TOP_PTR > 0.

Maka bentuk deklarasinya dalam PASCAL adalah :

TYPE Stack_Struct = Record
Stack : array[1..100] of integer;
TopPtr : integer;
End;
VAR S : Stack_Struct;

Selanjutnya, untuk keperluan operasi PUSH dan POP harus dibuat suatu prosedur tersendiri, yaitu :




PROCEDURE PUSH(Eon : integer);
Begin
If (S.TopPtr < NoelMax) Then Begin
S.TopPtr := S.TopPtr + 1;
S.Stack [S.TopPtr] := Eon
End
Else Overflow_Condition
End;

PROCEDURE POP(Eoff : integer);
Begin
If (S.TopPtr > 0) Then Begin
Eoff := S.Stack[S.TopPtr];
S.TopPtr := S.TopPtr - 1
End
Else Underflow_Condition
End;

Catatan :
Overflow adalah suatu keadaan di mana kita melakukan operasi PUSH terhadap stack dalam keadaan penuh. Underflow adalah keadaan di mana kita melakukan operasi POP terhadap stack kosong. Eon adalah elemen yang akan dimasukkan ke dalam stack dan Eoff adalah elemen yang akan dikeluarkan dari dalam stack.


* PENGGUNAAN/APLIKASI STACK
Logika stack digunakan untuk menyelesaikan berbagai macam masalah. Antara lain digunakan pada compiler, operating system dan dalam program-program aplikasi. Berikut ini tiga buah contoh aplikasi stack, yaitu :

* MATCHING PARENTHESES
Proses ini dilakukan compiler untuk memeriksa kelengkapan tanda kurung yang terdapat pada suatu ekspresi aritmetik. Sedangkan stack di sini digunakan sebagai tempat prosesnya. Algoritma yang digunakan adalah :

1. Elemen-elemen suatu ekspresi aritmetik (string) di-Scan dari kiri ke kanan.
2. Jika ditemukan simbol "(" atau "Left parenthesis", maka simbol tersebut di-push ke dalam stack.
3. Jika ditemukan simbol ")" atau "Right parenthesis", maka isi stack diperiksa.
* Jika stack kosong * terjadi kesalahan.
berarti : ada simbol ")", tetapi tidak ada simbol "(" yang seharusnya mendahului.
* Jika stack tidak kosong * artinya ada pasangannya dan langsung di-POP keluar stack.

Misalkan NEXT CHAR adalah suatu karakter terakhir dalam suatu string. Berikut ini bentuk flowchart (logika proses) yang digunakan pada proses matching ini :




* NOTASI POSTFIX
Bentuk aplikasi stack yang lain adalah mengubah suatu ekspresi aritmatik (string) ke dalam notasi postfix. Notasi postfix ini digunakan oleh compiler untuk menyatakan suatu ekspresi aritmatik dalam bahasa tingkat tinggi (high level language). Stack digunakan oleh compiler untuk mentransformasikan ekspresi aritmatik menjadi suatu ekspresi dalam bentuk/notasi postfix.

Contoh :
Misal diberikan ekspresi aritmatik : A + B ;
Maka bentuknya dalam notasi postfix menjadi : AB+
Urutan (prioritas) dari operator adalah :
1. Perpangkatan (^)
2. Perkalian (*) atau Pembagian (/)
3. Penjumlahan (+) atau Pengurangan (-)


Aturan yang digunakan dalam proses transformasi tersebut adalah :
1. Ekspresi aritmatik yang diberikan di- "Scan" dari kiri ke kanan.
2. Bila simbol yang di-scan adalah "(", maka simbol tersebut di push ke dalam stack.
3. Bila simbol yang di-scan adalah ")", maka seluruh isi stack di pop keluar mulai dari simbol "(" yang pertama ditemukan dalam stack.
4. Bila simbol adalah operator, maka dilakukan perbandingan dulu dengan simbol (operator) yang berada pada posisi top dalam stack.
a. Jika derajatnya setara atau lebih rendah dari simbol yang berada pada posisi top, maka top stack di-pop keluar sebagai output dan simbol yang baru di-push ke dalam stack.
b. Jika derajatnya lebih tinggi dari simbol yang berada pada posisi top, maka simbol (operator) yang di-scan tersebut di-push ke dalam stack.
5. Bila simbol yang di-scan adalah operand, maka simbol tersebut langsung sebagai output.
6. Bila simbol adalah ";" maka seluruh isi stack di-pop sebagai output.

Contoh :
Misal diberikan sebuah ekspresi aritmatik dengan bentuk sbb:

( (A + B) * C / D + E ^ F ) / G ;

Selanjutnya akan dicari bentuk ekspresi diatas dalam notasi postfix.
Proses yang dilakukan dapat digambarkan dalam tabel berikut :

Urutan
Proses 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
Simbol
Yang di
Scan

(

(

A

+

B

)

*

C

/

D

+

E

^

F

)

/

G

;
Top ( ( ( + + ( * * / / + + ^ ^ / /
( ( ( ( ( ( ( ( ( ( + +
( ( ( (
Output A B + C * D / E F ^+ G /


Jadi ekspresi aritmatik : ( ( A + B ) * C / D + E^F ) / G ;
dalam notasi postfix menjadi : AB+D*C/EF^+G/

* PROSES REKURSIF

Stack juga dapat digunakan untuk menelurusuri suatu program atau procedure yang rekursif.

Berikut ini sebuah contoh yang menyelesaikannya menggunakan proses rekursif.

Persoalan :
Agar diperoleh uang sebanyak 1.000.000 rupiah pada 25 tahun yang akan datang, berapakah banyak uang yang harus didepositokan saat ini. dianggap bahwa tingkat bunga tidak berubah selama 25 yahun yaitu sebesar 8% per_tahun.

Penyelesaian :
Untuk menyelesaikan masalah ini akan digunakan logika stack yatiu :
- pada tahun ke-25 jumlah uang = Rp. 1.000.000,-
- pada tahun ke-24 jumlah uang = Rp. 1.000.000 / (1 + 0.8)
- pada tahun ke-23 jumlah uang =
.
dst

Berikut ini sebuh program PASCAL yang mengandung suatu procedure rekursif untuk menghitung jumlah uang diinginkan.

PROGRAM DEPOSITO ;
CONST Goal = 1000000;
Rate = 0.08;
VAR Ju : Real;
Thn: Integer;

PROCEDURE Hitung (VAR Thn : Integer);
BEGIN
IF (Thn > 0) THEN
BEGIN
Ju := Ju/(1.0 + Rate);
Thn := Thn - 1;
Hitung(Thn);
END;
END;
BEGIN
Thn := 25;
Ju := Goal;
HITUNG(Thn);
WRITE(Ju);
END.
Pemanggilan pertama procedure HITUNG dimana nilai Thn =25



Pemanggilan kedua procedure HITUNG dimana nilai Thn = 24



Pemanggilan ketiga procedure HITUNG, dimana nilai Thn = 23



Setelah 25 kali pemanggilan procedure HITUNG keadaan stack adalah :




* MAPPING KE STORAGE DARI STACK
Bentuk mapping ke storage dari stack yang paling sederhana adalah dengan menggunakan pendekatan array satu dimensi. Hal ini karena sarana yang digunakan untuk menyatakan suatu stack adalah array.
Jika diberikan stack S dengan m elemen maka bentuk mappingnya seperti mapping array satu dimensi dengan m elemen.



Selanjutnya jika terdapat dua stack S1 dan S2 masing-masing dengan jumlah maksimum elemennya adalah M dan N, maka kedua stack ini dialokasikan dalam dengan bentuk sbb:



Konsep mapping seperti diatas dianggap tidak efisien, terutama jika S1 dan S2 tidak penuh pada saat yang bersamaan.

Cara dianggap lebih baik adalah :
Jika diketahui bahwa jumlah elemen S1 dan S2 tidak melebihi jumlah tertentu, misal N.

NOEL(S1) + NOEL(S2) <= N







Maka bentuk mapping yang digunakan adalah :












Blogspot Template by Isnaini Dot Com. Powered by Blogger and Supported by ArchitecturesDesign.Com Beautiful Architecture Homes