Rabu, 29 Oktober 2008

Pemrograman : Jurus dan algoritma
Monday, October 18 2004 @ 03:07 AM UTC
Contributed by: Kocil

Setelah tahu bahwa dalam memrogram BAHAN kita adalah DATA, kini saatnya bicara bagaimana mengolahnya.

Secara umum, untuk mengolah data hanya ada empat JURUS.

1. Operasi
2. Pengulangan
3. Pencabangan
4. Subrutin

Tapi kalau dibandingkan dengan bela-diri, itu seperti bilang kalau jurus mengalahkan lawan itu cuma tangkis, pukul, tendang dan banting. Disuruh berantem beneran, mana cukup teori segitu. Kapan mesti mukul atau nendang kan ada seninya sendiri. Belum kalau musuhnya balas mukul. Iya nggak ?

Makanya silat, karate dan lain-lain terus mengajarkan dua hal: variasi dan rangkaian. Variasi itu misalnya, kalau mukul bisa pakai tinju, telapak tangan, atau totokan, biasanya tergantung perguruan (beda antara perisai diri, tapak suci, setia hati, merpati putih, bangau putih, taji malela, dll). Sementara itu rangkaian adalah urut-urutan tangkis, pukul dan tendang yang kalau dikerjakan dengan cepat dan akurat, musuh bisa koit. Malah konon, para samurai Jepang cuma belajar satu dua rangkaian saja, di ulang-ulang tiap hari sampai tingkat "tidak mikir". Begitu ada musuh, bat bet bat bet. Musuh mati, atau diri sendiri mati

Memrogram resikonya tidak sampai mati, paling komputernya hung. Tapi mirip-mirip beladiri, tiap jurus punya variasi. Nah variasi ini sangat tergantung pada bahasa. Misalnya saja bahasa C. Untuk pengulangan ada 3 variasi (semua contoh ini mencetak angka 1-10 ke layar):

1.

// pengulanngan pakai cacahan
for (i:=1; 10>=i; i++) {
printf("%d/n", i);
};

2.

// pengulangan test didepan
i=1;
while (10 >= i) {
printf("%d/n", i);
i++
};

3.

// pengulangan test dibelakang
i = 1;
do {
printf("%d/n", i);
i++;
} while (10 >= i );

Sementara itu bahasa lain bisa punya jumlah variasi yang berbeda, dan yang lebih sering, syntax-nya beda. Perhatikan pengulangan di Pascal sebagai berikut:

1.

for i:=1 to 10 do begin
writeln(i);
end;

2.

i:=1;
while (10 >= i) do begin
write(i);
i=i+1;
end;

3.

i := 1;
repeat
writeln(i);
i=i+1;
until (i>10);

Lihat, bagaimana untuk melakukan hal yang sama, Pascal dan C punya cara tulis yang berbeda. Bikin frustasi saja. Kenapa sih sok bikin cara yang unik, nggak mau sama ?

Well, banyak yang sepaham dengan anda kok. Lihat banyak bahasa sekarang (Perl, PHP, Java) pilih pakai syntax yang mirip C saja. Dalam hal ini, sebaiknya anda bersikap bijak. Bahasa itu cuma kembangan. Esensinya adalah, ya itu tadi: tangkis pukul tendang. Eh, maksud saya: operasi, pengulangan, pencabangan, subrutin.

Sekarang soal rangkaian. Hmmm .... ini rada susah dan biasanya tidak ada di manual bahasa pemrogaman. Bayangkan buat beladiri, anda diserang musuh. Rangkaian jurus apa yang kalau dilakukan musuh akan kalah tapi kita sendiri tidak cedera. Misal musuh serang pakai pukulan ke kepala. Kita musti berkelit sambil tangkis, lalu pukul kipasan ke muka lawan buat tipuan, padahal sebenarnya dilanjutkan putar badan sapuan bawah ke kaki lawan, setelah lawan jatuh terus loncat kebadan lawan dan piting lehernya, krek !!! Uh ... teori. Bagaimana kalau waktu disapu musuhnya tidak jatuh malah kitanya diinjak ? Makanya para suhu beladiri itu mesti semedi dulu 40 hari 40 malam buat mikir rangkaian ampuh.

Beruntung para pemrogram, lawannya cuma DATA yang nggak bakal balas mukul. Selalu nurut apa kata pemrogram, mau ditambah dikurang dibolak-balik bahkan dihapus. Mari kita lihat beberapa contoh rangkaian sederhana. Oh ya, kata keren buat rangkaian jurua memrogram adalah ALGORITMA.

// ALGORITMA SEQUENCE (URUTAN)
void main()
{
int a=10;
int b=20;
int c=30;

printf("%d/n", a);
printf("%d/n", b);
printf("%d/n", c);
}


Macam mana bah !!! Program kayak begitu dibilang algoritma ??? Well, algoritma itu rangkaian jurus pemrograman yang secara sistematis memecahkan masalah. Kalau memang masalahnya adalah cetak a, lalu b, lalu c, algoritmanya ya seperti itu. Dan jangan salah, algoritma SEQUENCE ini adalah paling dasar yang pasti ada di setiap program. Cuma saking sederhananya banyak orang meremehkan. Padahal kalau tidak hati-hati, program anda bisa salah seperti ini:

// ALGORITMA SEQUENCE (URUTAN)
void main()
{
int a=10;
int b=20;
int c=30;

printf("%d/n", a);
printf("%d/n", c);
printf("%d/n", b);
}

Memalukan, tapi ada saja lho bug gara-gara cuma salah urutan begitu.

Kalau masalahnya kompleks, algoritmanya tentu tidak sederhana itu. Berita bagusnya, SATU ALGORITMA bisa dipakai untuk BANYAK MASALAH serupa. Selain algoritma SEQUENCE, menurut dosen algoritma saya, cuma ada 9 algoritma dasar lainnya (total 10 algoritma dasar). Algoritma lain, adalah kombinasi dari 10 ALGORITMA dasar tersebut. Dosen saya yang bilang, "Pahami ke-10 algoritma dasar ini. Setiap masalah, setelah diurai pasti akan pakai salah satu dari mereka. Kalau sampai ada program tidak mirip algoritma dasar tersebut, programnya pasti salah, kusut, atau tidak efisien !"

Sebelum jadi anak sekolah, saya sendiri adalah hacker otodidak. Belajarnya dari buku-buku praktis bangsa bikin games, virus, crack, dll (maklum, darah muda :). Hanya berbekal bakat dan nekad saja saya bikin program dan merangkai jurus-jurus if, for, while, dll. Jadi dan jalan sih programmnya. Tapi Setelah mendapat pencerahan dari dosen, baru mendadak saya tersadar. Betapa enaknya memrogram kalau tahu ALGORITMA standard.

IMHO, untuk menulis program:

* Kita HARUS TAHU jurus minimal operasi, pengulangan, pencabangan, dan subrutin. Cuma program super sederhana saja yang tidak pakai keempatnya
* Kita TIDAK PERLU TAHU semua variasi jurus. Kalau tahu banyak variasi, biasanya program akan jadi lebih singkat ditulis. Tapi jalannya program masih mirip-mirip saja.Untuk meningkatkan ilmu anda soal ini, baca manual bahasa ybs.
* Kita SEBAIKNYA TAHU algoritma standar. Menulis program tanpa belajar algoritma itu mungkin, apalagi kalau anda memang punya bakat. Tapi bedanya pemrogram yang tahu algoritma dengan yang tidak, nampak seperti bedanya suhu beladiri dengan okem. Yang satu teratur, yang lainnya ngawur asal tubruk (walau belum tentu si okem bakal kalah !). Jadi, silahkan tingkatkan ilmu algoritma anda. Baca buku-buku bangsa Knuth, Djikstra, atau Wirth. Kalau kebetulan anda di Bandung, cari mahasiswa Informatika ITB. Dosen saya yang baik itu memberi bahan kuliahnya dan bebas di-foto copy.

Hanya saja, teman-teman yang jam terbang memrogrammnya masih rendah bilang kalau belajar algoritma itu susah. Yang sudah pengalaman, dengan cepat menerima kebenaran algoritma dasar tersebut dan memakainya untuk meningkatkan skill memrogammnya. Maka saya ragu mau kasih saran. Enak belajar algoritma dulu, atau asal tabrak saja dulu, algoritma gimana engke.

Sekian dulu artikelnya. Anda mungkin kecewa sebab tidak mendetail. Yah ... panjang. Bayangkan, ada 4 jurus, tiap jurus punya 2 s/d 5 variasai. Terus ada 10 algoritma dasar. Jadi ... ngak janji ;-)

NOTE pada listing program:
Karena bug geeklog soal backslash, backslash-n ditulis /n

Tidak ada komentar:

¾