28 Nov 2014

Konsep Dasar Algoritma


 Pengertian Umum Algoritma
Pada prinsipnya seluruh aspek kehidupan kita dipenuhi oleh berbagai permasalahan. Setiap orang tentunya berupaya menyelesaikan masalah. Untuk menyelesaikan masalahdilakukan berbagai langkah. Misalnya, jika seseorang ingin kuliah di suatu perguruan tinggi maka yang ia lakukan tentunya mendaftar ke perguruan tinggi dimaksud, kemudian mengikuti tesnya, dan jika lulus ia melakukan pendaftaran ulang, dan seterusnya. Jika seseorang ingin memiliki SIM ia tentunya akan mendatangi kantor polisi, kemudian mengambil formulir pendaftaran, mengisi data,  membayar sejumlah uang, mengerjakan tes, sampai pemotretan, dan seterusnya. Demikian pula halnya jika seseorang hendak menikmati mie instan, memiliki rumah, memiliki KTP, atau  mengganti ban bocor, semuanya memiliki kesamaan : memerlukan langkah-langkah penyelesaian masalah.
Semua yang kita lakukan seperti contoh di atas pada dasarnya adalah proses. Menjadi mahasiswa, memiliki SIM, membangun rumah dan menikmati mie instan tidak dapat terjadi begitu saja tanpa proses. Proses merupakan serangkaian tindakan (aksi) dilakukan untuk mencapai suatu tujuan. Jadi proses adalah nama lain dari langkah-langkah penyelesaian masalah.
Langkah-langkah ini berjalan dengan urutan tertentu. Anda tidak bisa memiliki KTM (kartu tanda mahasiswa) sebelum anda membayar biaya kuliah. Anda tidak bisa membayar mendaftar ulang sebelum anda dinyatakan lulus dalam tes. Berarti urutan dalam langkah-langkah tersebut merupakan hal yang penting untuk menentukan keberhasilan meyelesaikan masalah. Langkah-langkah penyelesaian masalah dengan urutan tertentu ini kita sebut dengan algoritma. Ini adalah pengertian umumnya.
Baiklah, untuk jelasnya kita coba mendefinisikan sebuah masalah dan langkah-langkah penyelesaiannya atau algoritmanya. Misalnya, kita memiliki masalah tentang bagaimana cara agar bisa kuliah di suatu perguruan tinggi. Langkah apa yang harus dilakukan dan bagaimana urutannya. Salah satu solusinya dapat dijabarkan sebagai berikut.
  1. Mulai
  2. Memilih perguruan tinggi
  3. Mengisi formulir pendaftaran
  4. Mengikuti tes masuk
  5. Jika lulus tes, lakukan lanjut ke 6. Jika tidak lanjut ke 8
  6. Mendaftar ulang/bayar SPP
  7. Ambil KTM
  8. Selesai
Anda bisa lihat bahwa untuk bisa mencapai tujuan (menjadi mahasiswa) anda harus melewati beberapa tahapan tertentu. Perhatikan langkah-langkah menjadi mahasiswa berikut ini
  1. Mulai
  2. Mengikuti tes masuk
  3. Memilih perguruan tinggi
  4. Mengisi formulir pendaftaran
  5. Membayar SPP
  6. Jika lulus tes, lanjut ke 3. Jika tidak lanjut ke 8
  7. Ambil KTM
  8. Selesai
Bagaimana menurut anda langkah-langkah di atas? Kacau sekali, bukan? Urut-urutannya tidak tertata dengan benar. Kita sebut langkah-langkah tersebut di atas tidak logis, artinya ia tidak sesuai dengan kaidah berpikir yang benar. Dengan demikian, langkah-langkah penyelesaian masalah tidak akan memberikan solusi jika urutannya tidak tertata dengan benar. Namun demikian, perlu diingat bahwa bisa jadi suatu persoalan dapat diselesaikan dengan beragam langkah dan urutan. Misalnya, untuk membuat mie instan dapat dilakukan dengan langkah
  1. Mulai
  2. Merebus air
  3. Memasukkan mie ke dalam air yang mendidih
  4. Menuangkan mie yang telah matang ke dalam mangkok
  5. Masukkan bumbu masak
  6. Aduk sampai rata
  7. Selesai
Atau langkah ini
  1. Mulai
  2. Merebus air
  3. Memasukkan mie ke dalam air yang mendidih
  4. Masukkan bumbu masak
  5. Aduk sampai rata
  6. Menuangkan mie yang telah matang ke dalam mangkok
  7. Selesai
Bagaimana menurut anda kedua langkah di atas? Tentunya keduanya berbeda, tetapi kedua cara tersebut dapat menyelesaikan persoalan yang sama. Dengan demikian, sebuah persoalan dapat diselesaikan dengan berbagai macam cara. Hal yang sama akan anda temukan dalam membuat sebuah program. Seringkali kita temukan begitu banyak cara untuk menyelesaikan sebuah persoalan. Hal itu bisa saja selama tujuan yang diinginkan dapat tercapai.
Barangkali ada yang bertanya, bukankan pernyataan-pernyataan algoritma di atas memiliki sub aksi yang lebih kecil? Misalnya, aksi merebus air bisa jadi terdiri dari beberapa aksi, seperti : mengambil panci, meletakkan panci di bawah keran, kemudian membuka keran. Jika telah cukup, matikan keran, lalu letakkan panci di atas kompor, lalu hidupkan kompor, dan seterusnya. Bahkan sub pernyataan dari merebus air pun jika diurai lebih dalam akan terdiri dari beberapa sub pernyataan lebih banyak lagi.
Betul, demikian adanya. Namun, jika kita terus menuliskan semua sub pernyataan tersebut, bisa tak hingga banyaknya. Dalam hal ini ada banyak hal yang kita anggap sudah cukup mewakili atau jelas dengan satu pernyataan aksi saja. Misalnya, untuk menyatakan semua proses yang terjadi dalam aksi merebus air seperti yang telah disebutkan di atas, cukup diwakili oleh satu pernyataan yaitu : merebus air.
Bagaimana ukurannya apakah suatu pernyataan aksi sudah dianggap jelas atau belum? Hal ini bisa jadi sangat subyektif. Ia sangat tergantung kepada siapa instruksi itu diberikan. Jika instruksi “memasak rendang” diberikan kepada seseorang yang baru belajar memasak, rincian instruksinya haruslah cukup mendetail. Tetapi bagi seorang koki yang sudah berpengalaman, satu instruksi “memasak rendang” sudah cukup baginya tanpa harus dirinci lebih jauh.
Seperti telah dijelaskan sebelumnya algoritma secara umum berhubungan dengan semua langkah-langkah penyelesaian masalah dengan urutan tertentu. Tetapi istilah algoritma saat ini lebih sering dikaitkan dengan pemrograman komputer sehingga dikenal algoritma pemrograman. Pada dasarnya algoritma pemrograman merupakan kerangka dari program komputer.
Dalam konteks pemrograman komputer terdapat banyak definisi algoritma. Sebenarnya tidak ada definisi algoritma yang baku. Namun secara sederhana algoritma (dalam kaitannya dengan pemrograman) dapat kita definisikan sebagai urutan langkah berhingga untuk menyelesaikan masalah matematika dan logika. Dengan pengertian itu dapat kita simpulkan bahwa
  1. Algoritma adalah kumpulan langkah, artinya algoritma merupakan proses di dalam  penyelesaian masalah.
  2. Langkah-langkah dalam algoritma berhingga banyaknya, artinya langkah-langkah tersebut memiliki akhir. Algoritma tanpa akhir, bukanlah termasuk algoritma karena tidak akan memberikan solusi apapun.
  3. Digunakan untuk menyelesaikan masalah matematika dan logika, artinya tidak semua masalah bisa diselesaikan dengan algoritma. Algoritma hanya bisa digunakan untuk menyelesaikan suatu masalah jika masalah tersebut dapat diterjemahkan ke dalam bahasa logika dan matematika.
Komputer adalah alat bantu manusia untuk menyelesaikan masalah. Untuk bisa membantu manusia, komputer harus diberi instruksi. Instruksi itu dikenal dengan program. Namun demikian untuk memberi instruksi kepada komputer tidak sama dengan memberi instruksi kepada manusia. Komputer memiliki ”logika berpikirnya” sendiri yang berbeda dengan manusia. Oleh karena itu untuk bisa memberi instruksi kepada komputer, manusia harus bisa memberi instruksi yang mampu ”dipahami” komputer.
Algoritma adalah cara manusia untuk merangkai instruksi yang akan diberikan kepada komputer. Itu sebabnya semua orang yang belajar pemrograman komputer sangat dianjurkan memahami dulu algoritma. Pemahaman terhadap algoritma sangat penting untuk melatih calon pemrogram berpikir secara terstruktur dan sistematis. Kemampuan berpikir terstruktur dan sistematis akan sangat membantu dalam memudahkan pencarian solusi dengan cara yang sesederhana mungkin. Pemrogram yang buruk adalah pemrogram yang meskipun mampu membuat program dan memecahkan masalahnya, namun programnya tidak terstruktur dengan baik. Programer jenis ini akan menulis 100 baris instruksi program untuk menyelesaikan persoalan yang sebenarnya bisa diselesaikan dengan 20 atau 30 baris instruksi saja. 
Pada dasarnya suatu instruksi manusia baru bisa dikerjakan jika komputer telah memahaminya. Karena komputer tidak mengerti bahasa manusia, maka manusialah yang harus mengerti bahasa komputer supaya dapat memberi instruksi kepada komputer. Jadi memprogram pada dasarnya adalah proses memberi instruksi kepada komputer untuk menyelesaikan sebuah persoalan. Kumpulan instruksi yang diberikan manusia inilah yang disebut dengan program komputer.
Bahasa yang dipahami komputer adalah bahasa mesin. Pada mulanya manusia memberi instruksi kepada komputer langsung menggunakan bahasa mesin. Karena pemberian instruksi ini dianggap kurang efisien dan rumit, maka diciptakanlah media perantara untuk menerjemahkan komunikasi manusia dengan komputer. Media perantara itu disebut dengan bahasa pemrograman.
Bahasa pemrograman yang umum dikenal digolongkan ke dalam dua kelompok yaitu compiler dan interpreter. Cara kerja compiler dan interpreter sebenarnya berbeda tapi memiliki kesamaan fungsi yaitu menerjemahkan instruksi manusi ke dalam bahasa mesin.
Bahasa pemrograman yang paling awal adalah bahasa pemrograman asembler yang pertama kali diperkenalkan sekitar tahun 1950an. Bahasa asembler juga dikenal sebagai bahasa tingkat rendah (low level language). Dengan menggunakan bahasa asembler, instruksi-intruksi dibuat menjadi lebih mudah dan sederhana.
Seiring dengan makin meningkatnya kompleksitas masalah yang ditangani oleh komputer, manusia membutuhkan bahasa pemrograman yang lebih sederhana. Para ahli kemudian menciptakan bahasa pemrograman yang lebih mudah pemberian instruksinya sehingga lahirlah bahasa pemrograman tingkat tinggi (high level language). Yang termasuk dalam kelompok ini diantaranya adalah bahasa pemrograman Pascal, Fortran, C, Cobol, Basic, dll.
Kelebihan bahasa tingkat tinggi dibanding bahasa tingkat rendah adalah instruksinya yang semakin sederhana dan mudah dipahami. Sepuluh baris instruksi dalam bahasa tingkat rendah bisa jadi dapat dituliskan dalam dua tiga baris bahasa tingkat tinggi. Selain itu bahasa tingkat tinggi dapat digunakan dalam arsitektur komputer yang berbeda-beda, suatu hal yang tidak dapat dilakukan oleh bahasa tingkat rendah. Namun demikian, bahasa tingkat tinggi juga memiliki kelemahan yaitu boros penggunaan memori dibandingkan bahasa pemrograman tingkat rendah.
Bekerja dengan bahasa pemrograman tingkat tinggi ibarat memberi instruksi kepada koki yang sudah terlatih. Cukup dengan satu atau beberapa instruksi saja, sang koki sudah tahu apa yang yang harus dikerjakannya. Sebaliknya, bekerja dengan bahasa pemrograman tingkat rendah ibarat memberi instruksi kepada seorang calon koki yang masih belum mahir sehingga instruksi harus diberikan secara lebih terperinci.
Ditinjau dari mekanisme penerjemahannya, bahasa pemrograman tingkat tinggi dapat kita bagi dua kelompok : interpreter dan kompilator. Interpreter adalah bahasa pemrograman tingkat tinggi yang menerjemahkan setiap baris perintah dan langsung mengeksekusinya. Cara kerjanya seperti penerjemah turis asing yang mengartikan kalimat demi kalimat.
Cara yang berbeda dilakukan oleh kompilator. Pada kompilator, semua instruksi diterjemahkan dulu ke dalam bahasa mesin, baru setelah itu dieksekusi. Cara kerjanya mirip seperti penerjemahan buku dimana penerjemah menerjemahkan buku tersebut sampai tuntas, barulah setelah itu disajikan kepada pembaca.
Interpreter dan kompilator masing-masing memiliki keuntungan dan kerugian. Kelebihan interpreter adalah pengembangan program lebih cepat, tidak perlu melakukan kompilasi yang mungkin butuh waktu lama, namun kerugiannya setiap kali program perlu dijalankan, interpreter harus bekerja lagi, sehingga kecepatan eksekusi program menjadi kurang jika dibanding dengan kompilator.
Sebaliknya penggunaan kompilator memungkinkan kita membentuk program yang dapat langsung dijalankan dengan cepat (karena sudah dalam bahasa mesin), namun dibutuhkan waktu yang relatif lama dalam pengembangan programnya.
Instruksi algoritma pemrograman dapat dinyatakan dalam dua cara : dengan teks dan diagram alir (flowchart). Algoritma teks adalah algoritma yang dinyatakan dengan aksara / huruf (dan angka) yang yang lazim kita kenal selama ini. Algoritma ini juga dikenal dengan istilah pseudocode. Penulisan algoritma ini bersifat bebas (tidak baku), yang penting harus mudah dipahami oleh pembacanya. Berikut ini adalah contoh algoritma yang menghitung dan menampilkan hasil penjumlahan dua buah bilangan yang ditulis dengan teks umum.
  1. Mulai
  2. Baca bilangan a dan b
  3. Hitung a ditambah b, simpan pada c
  4. Tulis nilai c
  5. Selesai
Meskipun penulisan algoritma teks sebenarnya tidaklah baku, namun dalam buku ini teknis penulisannya sengaja agak dibakukan agar proses konversi algoritma ke bahasa program menjadi lebih mudah. Format dan instruksi algoritma teks standar yang kita pakai di sini dibuat mirip dengan yang ada pada bahasa pemrograman Pascal. Jadi, pengertian baku di sini sebenarnya tidaklah bersifat mutlak, tetapi sebagai pendekatan saja agar lebih tidak kesulitan saat mengkonversi algoritma ke dalam bahasa pemrograman Pascal.
Format algoritma yang kita bakukan ini terdiri dari tiga bagian (sama dengan format penulisan dalam Pascal) :
1.      Bagian Nama : bagian yang menuliskan nama algoritma serta keterangan lain perihal algoritma tersebut
2.      Bagian deklarasi : bagian yang mendefinisikan konstanta dan variabel objek yang terlibat dalam algoritma tersebut
3.      Bagian dekripsi (badan algoritma) : adalah bagian yang merupakan langkah-langkah penyelesaian masalah.
Jika penulisan algoritma penjumlahan dua bilangan di atas kita bakukan dengan pendekatan bahasa Pascal maka penulisannya menjadi seperti berikut
Algoritma Jumlah
{Bagian Nama}
Deklarasi                       a,b,c:integer
{Bagian deklarasi}



Jika algoritma di atas kita konversi ke dalam bahasa pemrograman Pascal maka dapat ditulis :
Program Jumlah;
{Bagian Nama}
Var
     a,b,c: real;
{Bagian deklarasi}
Begin          
     Readln(a,b);
     c:=a+b;
     Write(c);
End;
{Bagian deskripsi}
Untuk sementara penulisan algoritma kita batasi pada bagian nama algoritma dan bagian deskripsi saja, sedangkan untuk bagian deklarasi akan dibahas secara detail setelah masuk ke dalam pemrograman Turbo Pascal.    







Membaca Data (Input)
Masukan atau input adalah perintah menyimpan suatu nilai ke dalam suatu variabel melalui piranti masukan (keyboard, mouse, scanner, dll). Kata perintahnya dalam algoritma standar adalah read atau readln (pemakaian readln lebih banyak digunakan didalam program Pascal)
Bentuk umum perintahnya adalah:
read (argumen1, argumen2,...)
Argumen dalam hal ini adalah media penyimpanan nilai input tersebut, yaitu variabel. Banyaknya bisa satu atau lebih. Berikut ini adalah contoh perintah input dalam bentuk teks standar dan umum.





Menampilkan Keluaran (Output)
Keluaran atau output adalah proses menampilkan nilai pada media keluaran. Media keluaran pada komputer dapat berupa layar monitor, printer, ploter, speaker, dll. Namun dalam konteks ini media keluaran yang kita maksud adalah layar/monitor komputer. Format penulisan perintahnya secara umum adalah
write(argumen1, argumen2, ...)

atau di dalam Turbo Pascal kita terkadang juga menggunakan perintah ini :
writeln(argumen1, argumen2,...)
Banyaknya argumen dapat lebih dari satu. Bentuknya bisa berupa nilai, variabel, konstanta, dan ekspresi.





Berikut ini adalah beberapa contoh lain ekspresi output.
Teks Umum
Teks Algoritma Standar
Keterangan
Keluaran
Tampilkan nilai ‘Halo’
write (‘Halo’)
Perintah menampilkan tulisan (string) ‘Halo’. Perhatikan, penulisan nilai string selalu diapit oleh tanda (‘)
Halo
Tampilkan nilai variabel temperatur
write (temp)
Perintah menampilkan nilai yang terkandung pada variabel temp. Misalnya , temp = 25
25
Tampilkan nilai a dan b secara horizontal
write (a, b)
Perintah menampilkan nilai a dengan b. Misalnya nilai a=7, dan b =11
7   11
Tampilkan hasil penjumlahan a dengan b
write(a+b)
Perintah menampilkan hasil operasi penjumlahan variabel a dengan b. Misalnya a=7, dan b =11
18
Tampilkan nilai 100
write (100)
Perintah menampilkan nilai numerik 100
100








Operasi
Dalam algoritma kita seringkali melakukan berbagai operasi matematika dan logika. Inilah sebenarnya yang dimaksud dengan pengolahan atau manipulasi data komputer, yaitu proses operasi matematika dan logika. Ada banyak bentuk operasi matematika dan logika.Salah satunya adalah operasi aritmetika seperti : menambah, mengurang, mengali dan membagi.
Hasil perhitungan ini biasanya kita simpan ke dalam sebuah variabel. Perintah menyimpan nilai dalam suatu variabel ini disebut dengan operasi penugasan (assignment). Misal, jika kita mengalikan dua variabel a dan b, sedang hasilnya kita simpan pada c, maka penulisan operasi penugasannya
     c ß a * b
Perintah di atas dibaca : ‘Kalikan a dengan b, simpan pada c’. Simbol a, b, dan c kita sebut dengan operan sedangkan tanda ß dan * masing-masing kita sebut dengan operator penugasan dan operator perkalian. Kita tidak menggunakan simbol ‘=’, tetapi ‘ß’, untuk menunjukkan bahwa hasil perhitungan di kanan disimpan pada variabel yang ada di kiri.



Contoh.
Jika kita hendak mengitung hasil perkalian dua buah bilangan, maka kita tulis algoritmanya :
deskripsi
read(a,b)
cßa*b
write(c)