Selasa, 18 November 2008

Struktur Data: Queue

Queue (Antrian) adalah Suatu kumpulan data dimana penambahan elemen hanya bisa dilakukan pada suatu ujung (rear) dan pengambilan elemen dilakukan lewat ujung yang lain (front).
Tumpukan menggunakan metode yang disebut FIFO (First In First Out) yaitu Masuk pertama keluar pertama.

Pendeklarasian Antrian

Const MaxElemen = 100;
Type Antri = array[1.. MaxElemen] of char;
Var Antrian : Antri;
Depan, Belakang: Integer;

Operasi Penambahan Elemen

Procedure TAMBAH(var Q: Antri; X: char);
Begin
If Belakang := Max_Elemen then
Belakang := 1
Else
Belakang := Belakang + 1;
If Depan = Belakang then
Writeln(’ANTRIAN PENUH’)
Else
Q[Belakang];
end;

Operasi Penghapusan Elemen

Sebelumnya buat Fungsi untuk mencek apakah antrian dalam keadaan kosong atau terisi

Procedure KOSONG(Q : Antri): Boolean;
Begin
Kosong := (Depan = Belakang)
End;

Procedure HAPUS(Var Q:Antri): char;
Begin
If KOSONG(Q) then
Writeln (‘ANTRIAN KOSONG’)
Else
Begin
HAPUS := Q(Depan);
If Depan := Max_Elemen then
Depan := 1
Else
Depan := Depan + 1;
End;
End;

Contoh Pemakaian Program Antrian

program ILUSTRASI_ANTRIAN;
uses wincrt;
const Max_Elemen = 10;
Type Antri = Array[1..Max_Elemen] of char;
var Antrian : Antri;
Depan, Belakang, Pilih : integer;
Elemen : char;

procedure KOTAK;
var I : integer;
begin
gotoxy(20,15);
for i := 1 to Max_Elemen*4 + 1 do write ('');
gotoxy(20,16);
for i := 1 to max_elemen do write('');

for i := 1 to max_elemen*4 + 1 do
write(' ');
gotoxy(8,16); write('<----KELUAR');
gotoxy(22+Max_Elemen*4+1,16);
writeln('<----MASUK');
end;

procedure LETAKKAN(X:char; R:integer);
begin
gotoxy(18+4*R,16);
write(X);
end;

function KOSONG(Q:Antri):Boolean;
begin
Kosong := (Depan=Belakang);
end;

procedure TAMBAH(var antrian:antri; x:char);
begin
if belakang = max_elemen then belakang := 1
else belakang := belakang + 1;

if not(KOSONG(Antrian)) then
begin
Antrian[Belakang]:=X;
LETAKKAN(X,Belakang)
end
else
begin
gotoxy(40,9);
write('ANTRIAN SUDAH PENUH');
repeat
until keypressed;

gotoxy(40,9);
write(' ':30);
Belakang:= Belakang-1;
if belakang = 0 then
belakang:= max_elemen;
end;
end;

function HAPUS(var antrian:antri): char;
begin
if depan = max_elemen then
depan := 1
else
begin
depan:=depan+1;
HAPUS:=antrian[depan];
end;
end;

{PROGRAM UTAMA}
begin
clrscr;
KOTAK;
depan:=0; belakang:=0;
repeat
for pilih := 5 to 9 do
begin
gotoxy(40,pilih);
write(' ':39);
end;
gotoxy(1,1);
writeln('DAFTAR MENU ANTRIAN: ');
writeln('-------------------- ');
writeln;
writeln('1. Menambah Elemen Baru');
writeln('2. Menghapus Elemen');
writeln('3. S E L E S A I');
writeln;
writeln;
writeln('PILIH SALAH SATU');
repeat
gotoxy(22,9);writeln(' ');
gotoxy(22,9);readln(pilih);
until (pilih >= 1) and (pilih <= 3);
case pilih of
1 : begin
gotoxy(40,5);
writeln('MENAMBAH ELEMEN');
gotoxy(40,6);
writeln('---------------');
gotoxy(40,8);
write('ISIKAN ELEMENNYA: ');
readln(Elemen);
TAMBAH(Antrian,Elemen);
end;

2 : Begin
if not (KOSONG(antrian)) then
begin
Elemen:=HAPUS(antrian);
LETAKKAN(' ',Depan)
end
else
begin
gotoxy(30,9);
writeln('ANTRIAN KOSONG');
elemen:=readkey;
gotoxy(30,9); write(' ':30);
end
end
end
until pilih =3
end.

Struktur Data: Stack

Stack (Tumpukan) adalah Suatu kumpulan data yang seolah-olah ada data yang diletakkan di atas data yang lain.
Suatu hal yang perlu kita ingat adalah bahwa kita bisa menambah data (PUSH)dan mengambil data (POP) melalui ujung yang sama, yang disebut sebagai ujung atas tumpukan (Top of Stack).
Tumpukan menggunakan metode yang disebut LIFO (Last In First Out) yaitu Masuk terakhir keluar pertama.

Pendeklarasian Tumpukan

Const MaxElemen = 225;
Type Tumpukan = record
Isi: array[1.. MaxElemen] of integer;
Atas: 0.. MaxElemen;
End;
Var T: Tumpukan;

Operasi PUSH

Procedure PUSH(var T: Tumpukan; X: integer);
Begin
T.Atas:= T.Atas+1;
T.Isi[T.Atas]:=X;
end;

prosedure di atas tampaknya sudah mencukupi, tapi jika T.Atas sama dengan MaxElemen dan kita akan mem-push lagi, maka akan terjadi overflow, sehingga prosedur di atas perlu diubah menjadi:

Procedure PUSH(var T: Tumpukan; X: integer);
Begin
If T.Atas = MaxElemen then
Writeln(’TUMPUKAN SUDAH PENUH’);
Else
begin
T.Atas:= T.Atas+1;
T.Isi[T.Atas]:=X;
End;
end;

Operasi POP

Procedure POP(Var T: Tumpukan);
Begin
T.Atas := T.Atas-1
End;

Timbul pertanyaan seandainya tumpukan sudah kosong, lalu apa yang akan di-pop?, dengan demikian procedure di atas perlu di tambah testing untuk men-cek kosong tidaknya suatu tumpukan.

Procedure POP(Var T: Tumpukan);
Begin
If T.Atas = 0 then
Writeln (’TUMPUKAN SUDAH KOSONG’)
Else
T.Atas := T.Atas-1
End;

Contoh Pemakaian Program Tumpukan

Program Balik_Kalimat;
uses wincrt;
const Elemen = 255; {batas maximum karakter}
type S255 = string[Elemen];
Tumpukan = record
Isi : S255;
Atas: 0..Elemen
end;

var T : Tumpukan; {nama tumpukan}
I : integer; {pencacah}
Kalimat :S255; {kalimat yang dibalik}

procedure awalan (var T:Tumpukan);
{prosedur inisialisasi tumpukan}
Begin
T.Atas:=0
end;

procedure PUSH(var T:Tumpukan; X:Char);
{prosedur untuk memasukkan elemen ke dalam tumpukan}
begin
T.Atas:=T.Atas+1;
T.Isi[T.Atas]:=X
end;

function POP(var T:Tumpukan):char;
{fungsi untuk mengambil elemen dari tumpukan}
begin
POP:=T.Isi[T.Atas];
T.Atas:=T.Atas-1
end;
{program utama}
begin
clrscr;
awalan(T);
write('ISIKAN SEMBARANG KALIMAT: ');
readln(kalimat);
clrscr;
writeln('KALIMAT ASLI: ',kalimat);
writeln;
writeln('SETELAH DIBALIK: ');
for i := 1 to length(kalimat) do
PUSH(T,Kalimat[I]);
for i := 1 to length(kalimat) do
write(POP(T));
end.

Jumat, 07 November 2008

OOP: Konsep Inheritance dan Polimorphism

Nama :Vidila Rosalina
NIM :332 208 594


OOP (Object Oriented Programming) merupakan terobosan baru dalam pemrograman setelah pemrograman prosedural. Selain memiliki class dan object, terdapat dua konsep utama yang ada di OOP yaitu: Inheritance (suatu kelas berasal dari turunan pertama atau lebih kelas lainnya)dan Polymorphism (kemampuan objek berubah menjadi objek yang lain).
Sekarang kita bahas tentang kedua konsep tersebut di atas:

Enheritance
Yang ini intinya adalah mengembangkan class yang sudah ada. Jadi kita gak perlu ngebentuk dari awal lagi, class yang sudah ada bisa dimodifikasi
atau ditambah fungsinya sesuai dengan kebutuhan. Ada yang bisa ditambah ada yang dimodifikasi. Dulu mobil remote kontrol tanpa kabel hanya ada satu tombol. bila dipencet mobilnya akan maju, dan kalo gak dipencet mobilnya muter-muter terus searah jarum jam. Sekarang bisa bergerak sesuai keinginan kita.
Contoh lain adalah tentang televisi. Dulu fungsi jam tangan hanya nonton sinetron saja, tapi sekarang fungsinya sudah nambah, dari yang bisa untuk alarm sampai untuk main game playstation.
Sekarang contoh yang dimodifikasi. Jika dulu perseneling mobil hanya manual sekarang sudah ada yang otomatis.
Jadi, dengan inheritance semua perubahan itu gak ngerubah bulat-bulat objek yang ada, tetapi hanya menambah dan memodifikasi dengan mempertahankan objek (class) awalnya.
Contoh bagaimana memodifikasi mobil menjadi mobil Balap dengan mewariskan atribut dan method class mobil kepada class mobil balap:

class Mobil{
int kecepatan=0;
void tambahKecepatan(int pertambahanKecepatan){
kecepatan=kecepatan+pertambahanKecepatan;
System.out.println("Kecepatan:"+kecepatan);
}

class MobilBalap extendsMobil{
int setGigi;
public void setGigi(int jumlahGigi){
setGigi = jumlahGigi;
System.out.println("Gigi Perseneling:" + setGigi);
}
}

Polymorphism
Merupakan inti dari OOP. Sebab dengan satu baris perintah kita bisa menggunakannya untuk berbagai keperluan, fungsi itu akan menyesuaikan sendiri ke pemanggilnya. Ilustrasinya adalah tombol play. Dimana-mana tombol play fungsinya sama, untuk menjalankan. Coba liat, padahal kan beda cara kerja tombol play di vcd, tape recorder, dan radio.
Setelah melihat diberbagai referensi pun gak ada yang ngasih contoh yang mudah dipahami. Hanya itu contoh yang paling mudah dipahami. Inti Polymorphism adalah objek yang kita gunakan ini bisa berubah sesuai dengan kondisi yang terjadi. Jadi kita tidak perlu nulisin kode program panjang-panjang.
Mungkin dengan contoh polymorphism di bawah ini anda bisa ada gambaran.

class Mobil{
String Warna;
int TahunProduksi;
public Mobil( String Warna, int TahunProduksi) {
this.Warna = Warna;
this.TahunProduksi = TahunProduksi;
}
public void info(){
System.out.println("WARNA : " + this.Warna );
System.out.println("TAHUN PRODUKSI : " + this.TahunProduksi );
}
}
public class MobilKonstruktor{
public static void main(String[] arg){
Mobil mobilku = new Mobil("PINK", 2008);
mobilku.info();
}}

Encapsulation
Enkapsulasi atau pengkapsulan pada intinya adalah kita gak perlu tau apa sih yang ada dalam objek itu (class), yang kita butuhkan adalah apa kegunaan, bagaimana cara memakainya dan apa yang akan terjadi. Ilustrasinya adalah motor. Gimana cara ngidupin motor? masukin kunci, tekan tombol starter dan gas atau kalo gak ada dienkol aja. Mudah bukan? Kita gak perlu tahu apa sih yang terjadi sebenarnya pas kita mencet starter atau engkol, taunya motor hidup dan bisa dijalankan. Ilustrasi lainnya adalah remote control tanpa kabel pada mobil-mobilan. Kalian kan gak perduli kerja remote control itu yang sebenarnya, yang penting begitu dihidupin dan dan stiknya digerakin ke atas dia bakal maju. Begitu digerakin ke kanan, dia bakal belok, dst.
Contoh terakhir adalah Televisi. Ini juga penjelasan yang paling mudah dipahami. Taukan fungsi televisi? betul, buat nonton sinetron. Pas beli televisi kita hanya memilih tampilan dan kualitas yang bagus, itu yang terpenting. Masa bodo dengan cara mesin rangkaian digital yang bekerja di dalam televisi itu.
Gimana ngertikan konsep Encapsulation? intinya kita hanya perlu tau apa kegunaannya, gimana cara memakainya dan hasilnya apa. Dan saya belum bisa ngasih contoh coding-nya karena materi dari Pak Romi belum nyampe sini ;)

Ok dech, itu teori yang bisa saya tulis, mudah-mudahan ada gambaran tentang OOP walaupun sedikit :D (Oleh: Vidila Rosalina)

Kamis, 06 November 2008

OOP vs Prosedural


Membahas masalah konsep OOP, akan mudah dipahami kalau kita membandingkannya dengan konsep pemrograman yang sebelumnya sudah ada, yaitu pemrograman prosedural. Walaupun sebenarnya paling tidak enak kalau dibanding-bandingkan, mengingat pengalaman saya ketika ibu saya membanding-bandingkan antara saya dengan kakak sepupu saya, rasanya saya menjadi sangat tidak nyaman sekali, dan pasti jawaban saya adalah "saya ya saya, dia ya dia, jangan menyuruh saya seperti dia", tapi sebenarnya dibalik semua itu ibu saya memiliki maksud yang sangat mulia yaitu supaya saya selalu berevolusi untuk menjadi manusia yang lebih baik.

Konsep OOP atau Object Oriented Programming adalah konsep bahasa pemrogramman dengan pendekatan terhadap solusi permasalahan dimana seluruh perhitungan dilakukan di dalam konteks object. Dalam pemrogramman prosedural, programmer merancang program dalam konsep terpisah. Fungsi-fungsi yang didefinisikan merupakan bentuk abstrak yang berada diluar entitas / bagian yang saling terkait.

Untuk membuat aplikasi Perpustakaan misalnya, pemrogramman prosedural akan membawa programmer merancang program dalam fungsi-fungsi tertentu. Aplikasi untuk input data master, aplikasi untuk input data transaksi, aplikasi untuk laporan dan seterusnya. Tidak ada yang salah dalam konsep ini, hanya saja konsep OOP yang datang belakangan memberikan paradigma baru dalam memandang persoalan.

Alih-alih memandang suatu fungsi secara terpisah, Konsep OOP menekankan paradigma object dan class. Entitas dan suatu bagian dalam sistem dipandang sebagai satu object tertentu, yang punya kelakuan (behaviour) dan kondisi tertentu. Dengan demikian, sistem yang dibangun akan berupa gabungan object-object yang saling terkait satu dengan yang lain seperti halnya di dunia nyata.

Paradigma ini membawa keuntungan karena sistem yang dibangun bersifat modular. Bisa dibentuk dari gabungan banyak object atau bisa juga beberapa object atau hanya satu object. Jika ada masalah di satu object, object tersebut bisa dipisahkan agar tidak mengganggu object lain.

Bagaimana desain object oriented berbeda dengan kode prosedural yang lebih tradisional? Akan sangat mudah untuk mengatakan bahwa perbedaan utamanya adalah kode berorientasi obyek memiliki object di dalamnya. Ini tidak betul. Dalam PHP kita akan sering menemukan kode prosedural menggunakan obyek. Kita juga mungkin sering melihat class-class yang mengandung kode prosedural di dalamnya. Keberadaan class tidak menjamin adanya desain berorientasi obyek.

Satu perbedaan utama antara kode berorientasi obyek dengan kode prosedural dapat dilihat dari bagaimana tanggung jawab (responsibility) didistribusikan. Kode prosedural akan berupa urut-urutan perintah dan method calls. Kode pemanggil (controlling code) cenderung bertanggung jawab untuk meng-handle pengecekan kondisi (if, then, else dst). Kontrol top-down ini -dalam pengembangan aplikasi– dapat menghasilkan duplikasi kode dan saling ketergantungan lintas (antar) proyek. Kode berorientasi obyek mencoba untuk meminimalisasi ketergantungan ini dengan cara memindahakan responsibility untuk meng-handle tugas-tugas dari client code ke dalam obyek-obyek di dalam sistem.

Meskipun banyak yang berpendapat bahwa premis dasar OOP setiap program bisa dipecah menjadi objek - objek yang saling berinteraksi tidak terlalu baik untuk menyelesaikan masalah yang secara natural bersifat algoritmik, tapi harus kita akui bersama bahwa bagaimanapun juga kelemahan OOP tidak berarti jika dibandingkan dengan kelebihannya. lha ya iyalah masa ya iya dong ;)

Senin, 03 November 2008

Oprah Winfrey: Berlari Mengejar Mimpi



Jangan bayangkan Oprah Winfrey dengan berlian gemerlap memandu acara bincang-bincang televisi yang tetap populer hingga tahun ke-24 penayangannya dan disiarkan di 122 negara. Jangan gambarkan ia sebagai perempuan selebriti terkaya meski menyumbang lebih dari 50 juta USD bagi sekolah dan perempuan miskin di Amerika Serikat dan Afrika. Jangan lihat keberhasilannya mempengaruhi senat AS untuk membuat UU Perlindungan Anak dan jangan lihat keberhasilannya membujuk orang untuk memilih Barack Obama sebagai Presiden AS. Tapi lihatlah dia sebagai perempuan lajang dengan masa lalu yang sangat pilu. Lahir di luar nikah, tumbuh dalam masa deskriminasi ras masih dominan, dilecehkan dan diperkosa hingga punya anak pada usia 14 tahun. Beruntung dia sangat menyukai sekolah-sesuatu yang melepaskannya dari penderitaan. Seperti kisah hidupnya yang ditulis dalam tiga bukunya Up-Close: Oprah Winfrey (Ilene Cooper,2007), Finding Oprah's Roots Finding Your Own (Henry Louis Gates,2007), dan Oprah Winfrey (Wil Mara,2005). Tentang bukunya ini dia mengatakan "Bukan derita yang saya bagi tapi cara berlari mengejar mimpi".

Lahir di Kosciusko, Attalla Country, Mississippi pada 29 Januari 1954. Ayahnya Vernon Winfrey (21) seorang tentara asal Carroll Country yang saat itu sedang bertugas di Fort Rucker, Alabama. Ibunya Vernita Lee (18) asal Kosciusko, keduanya tidak menikah. Vernon baru tahu kelahiran anaknya dari guntingan iklan yang dikirimkan Vernita kepadanya disertai pesan "Kirimkan Pakaian Bayi". Kehidupan begitu sulit, Vernita bekerja sebagai tukang cuci sehingga si bayi Oprah dititipkan kepada neneknya Hattie Mae. Nenek Hattie Mae inilah yang rajin mengajari Oprah membaca. Sampai ketika masuk TK Oprah terkejut karena di kelas tidak ada yang bisa membaca dan menulis seperti dirinya hingga dia menulis surat kepada gurunya, "Dear Miss Newe, kelas ini tidak cocok untukku karena aku sudah bisa baca dan tahu kata-kata sulit seperti elephant dan hippopotamus", esoknya oprah pindah ke kelas 1, ketika tahun ajaran berakhir kepala sekolah menyarankan dia lompat ke kelas 3.
Saat usia 9 tahun, seorang sepupu berusia 19 tahun memperkosanya. Ia tidak berani berontak, apalagi berpikir tentang pertanggung jawaban. Ia diberikan es krim untuk tutup mulut dan selama belasan tahun dia bungkam. Tapi pelaku tidak berhenti pada saudara sepupu, Oprah menjadi sasaran banyak laki-laki hingga diusianya yang baru 14 tahun dia mendapati perutnya membesar, dia hamil "Ini pelajaran yang amat berharga" Oprah mengingat kata-kata ayahnya "Kamu mau membiarkan dirimu hancur?, Tuhan sedang menguji, ia memberimu kesempatan kedua dan kamu harus mengambilnya, kembalilah ke sekolah biarkan anakmu kami urus". Tapi Tuhan berkehendak lain bayi laki-laki yang lahir prematur tersebut meninggal diusia 2 minggu. Dan Oprah pun kembali ke bangku sekolah tanpa ada yang tahu tentang kehamilan dan persalinannya.

Tahun 1983, ketika baru lulus dari Tennesse University Oprah lolos audisi sebagai pemandu acara A.M. Chicago dan hanya terhitung beberapa minggu setelah tayang perdana acara tersebut sukses. Januari 1985 tayang A.M. Chicago ditambah 60 menit dan diganti Oprah Winfrey Show. Sukses makin digenggam, kekayaan terus berkembang tapi Oprah tak pernah bisa menutupi naluri dasarnya untuk membantu orang, ia mendirikan Oprah Winfrey Foundation yang berfokus pada pemberdayaan anak-anak dan perempuan. Oprah tak pernah ragu menyumbang. ia percaya bahwa makin banyak memberi makin dilimpahi rejeki dan memang terbukti, shownya meraih rating tertinggi selama lebih dari 20 tahun dan kini tayang di 22 negara. Berkali-kali meraih piala Grammy dan pelbagai gelar kehormatan. Rumahnya di Pantai Santa Barbara, California dibeli tahun 2003 seharga 54 juta USD disebut sebagai transaksi properti termahal saat itu.
Di tahun ke 20 penayangannya ia membahas mengenai lagu pembukaan The Oprah Winfrey Show 1996-1997 yang berjudul Run On yang diilhami oleh spirit orang Afrika-Amerika dalam memahami rasa cinta, impian-impian, dan kejayaan. "Dengan pemahaman yang benar atas penderitaan, membalasnya dengan kerja keras, bekerja penuh cinta, semua bisa kita raih. Ayo berlarilah bersama saya!". (oleh Vidila Rosalina dicukil dari buku Up Close: Oprah Winfrey)