[SOBN] Pemrograman dan Algoritma

Tutorial Pemrograman dan Algoritma ini adalah kelanjutan dari tutorial sebelumnya, Bagaimana Komputer Bekerja. Selain membaca tutorial sebelumnya, ada baiknya membaca blogpost yang dapat menjadi suplemen tambahan untuk memahami perhitungan yang dilakukan oleh komputer, Teori Dasar Sistem Digital Dan Sistem Bilangan Dan Kode. Kedua bacaan tersebut dapat memberikan dasar bagi pemahaman yang menyeluruh untuk seri tutorial "Semua Orang Bisa Ngoding" ini.

Berikut ini adalah outline tutorial Pemrograman dan Algoritma:

  1. Definisi Algoritma
  2. Langkah-langkah Pengembangan Algoritma
  3. Membuat Flow Chart
  4. Contoh Algoritma dengan Flow Chart
  5. Menulis Pseudo Code
  6. Contoh Algoritma dengan Psedo Code
  7. Membuat Algoritma Yang Baik
  8. Teorema Program Terstruktur

 

Apa Itu Alogritma?

Jika berbicara mengenai algoritma, tidak bisa lepas dari penemunya, yaitu Muhammad bin Musa Al-Khawarizmi. Beliau juga adalah penemu angka 0 yang membuat matematika sangat berkembang dan maju dan juga Aljabar. Oleh karena itu dapat dikatakan Beliau adalah peletak pondasi ilmu matematika modern. Kali ini, kita membahas salah satu penemuan Beliau, yaitu Algoritma. Algoritma adalah suatu cara/prosedur/formula untuk menyelesaikan suatu masalah dengan melakukan serangkaian aksi tertentu. Kata ini identik dengan dunia komputer yang memang menggunakannya sebagai ilmu fundamental. Tetapi jika dilihat dari definisinya, algoritma ini dapat diaplikasikan dalam segala bidang, bahkan secara tidak sadar dalam kehidupan sehari-hari kita menerapkan hal ini. Berikut ini video penjelasan yang menarik dari Khan Academy.

Sehingga mulai hilangkan gambaran mengerikan yang kalian miliki tentang algoritma setiap kalian mendengar kata ini. Makna kata ini sesederhana katanya itu sendiri. Mempelajari algoritma ini dan menerapkannya dalam kehidupan sehari-hari dapat membangun pemikiran yang taktis yang dapat membantu kita menyelesaikan berbagai masalah, sehingga kita dapat bertindak lebih logis dan tidak mudah panik. Selalu ingat, setiap masalah pasti ada penyelesaiannya, entah itu sederhana atau rumit, tetapi pada akhirnya pasti akan terselesaikan. Ilmu algoritma ini adalah alat yang sangat ampuh. Perhatikan contoh no.1 tentang alogritma berikut ini.

contoh1_sc

Apa yang kalian dapatkan dari contoh no.1 di atas? Jika kalian tidak melihat inti dari contoh di atas, biar saya yang memberitahu. Contoh no.1 di atas adalah salah satu hal paling sederhana dari penerapan algoritma. Konsep dasar pengembangan algoritma adalah seperti yang ditunjukan pada gambar dibawah ini. Dalam pemrograman, secara keseluruhan tahapan-tahapan pengembangan algoritma seperti yang ditunjukan oleh gambar berikut ini:

Berdasarkan contoh di atas, masalah utamannya adalah LFR-robot harus bergerak sejauh 1000px ke arah kanan. Proses penyelesaiannya adalah kalian membuat LFR-robot bergerak ke kanan dengan menekan tombol Maju, sebanyak 50 kali agar jarak 1000px tercapai. Solusi yang dihasilkan adalah setelah kalian menekan tombol Maju 50 kali, LFR-robot mencapai jarak 1000px yang diinginkan. Kemudian setelah sampai pada titik 1000px, muncul alert yang memberikan masalah baru, yaitu mengembalikan LFR-robot ke titik awal. Proses penyelesaiannya adalah kalian menekan tombol Mundur sebanyak 50 kali. Solusi yang dihasilkan adalah kembalinya LFR-robot ke titik awal. Sederhana sekali bukan? Kenapa saya tetap menjelaskan hal yang paling sederhana seperti ini? Karena masih banyak programmer yang tidak benar-benar menerapkan hal ini. Jika mereka diberikan suatu permasalahan mereka langusng mengerjakannya di komputer di dalam IDE (Integrated Development Environtment) tanpa benar-benar memikirkan penyelesainnya seperti apa. Mereka akan melakukan trial and error. Hal ini memang tidak masalah sebenarnya bagi para programmer karena kodingannya masih dapat di-edit, hanya saja akan lebih baik jika diberikan suatu permasalahan, dipikirkan dulu dengan baik langkah penyelesainnya yang tepat seperti apa dengan menggunakan pulpen dan kertas, kemudian jika sudah yakin algoritma yang dibuat benar, baru buat kodinganya di IDE. Hal ini walaupun terlihat buang-buang tenaga tapi sebenarnya tidak, justru lebih menghemat tenaga dan waktu dibandingkan dengan langsung melakukan trial and error. Masalah menggunakan trial and error jika kalian menggunakannya dalam masalah di dunia nyata, apalagi pada pekerjaan lain dengan jabatan yang cukup tinggi, katakanlah seorang manager. Jika seorang manager melakukan trial and error untuk menyelesaikan suatu masalah pada department-nya. Saya jamin dia akan langsung dipecat, karena tidak efisien, menghabiskan banyak waktu dan tentunya dana perusahaan yang membuat perusahaan tersebut rugi. Baiklah sekarang kita akan masuk lebih dalam ke dunia pemrograman. Bagaimana pengembangan konsep algoritma saat diterapkan dalam dunia pemrograman?

Dari gambar diagram diatas terlihat bahwa definisi dasar algoritma juga tetap berlaku, hanya saja bentuk penyelesaian masalahnya yang berbeda. Untuk membuat algoritma, kebnayakan orang menggunakan Flow Chart, karena pada dasarnya informasi yang berupa gambar lebih dapat dipahami oleh manusia dan bersifat univerasal. Flow Chart adalah diagram yang membentuk alur penyelesaian (sekuensial) suatu masalah. Terdapat contoh Flow Chart pada gambar ke dua di atas. Bentuk-bentuk dasar Flow Chart adalah sebagai berikut.

Dari contoh no.1 di atas, jika kita membuat Flow Chart nya, sebagai berikut:

Bagian yang berada di dalam kotak bergaris putus-putus adalah program yang utama. Keadaan tombol Reset bukan bagian dari program utama, sebab apa pun kondisi utama yang sedang berjalan, ketika tombol Reset ditekan, kondisi program akan kebali ke awal (initial condition). Pada bagian program utama, setelah initial condition, maka yang harus ditekan adalah tombol Maju. Keadaan tombol ini dipantau berulang kali sampai robot berpindah 50 langkah. Setelah mencapai target tersebut ada alert yang memberikan masalah baru, yaitu kembali ke titik awal. Jika pengguna tidak mau melakukannya, itu adalah akhir dari program. Jika pengguna ingin melakukannya, maka keadaan tombol Mundur dipantau sampai target terpenuhi. Sebenarnya program contoh no.1 tidak benar-benar menunggu keadaan setiap tombol, karena konsep yang digunakan adalah object oriented programming (OOP), program untuk contoh no.1 dibuat dengna menggunakan JavaScript agar dapat menjalankan animasi dengan baik pada web browser, kita akan membahas tentang OOP pada tutorial yang lain. Tetapi karena digunakan untuk menjelaskan pemrograman yang sekuensial, maka kita anggap saja seperti itu. Ada alat yang lain untuk mengembangkan algoritma, yaitu pseudo code. Pseudo artinya tiruan, jadi pseudo code adalah baris kode tiruan yang merepresentasikan baris kode yang asli. Bahasa pemrgoraman dibangun menggunakan syntax dalam bahasa inggris, contohnya print, if...else, for, do...while, try...catch, dll. Dalam pseudo code kalian dapat menggunakan bahasa apapun yang merepresentasikan syntax-syntax tersebut, contohnya dalam bahasa indonesia cetak, jika...atau, lakukan...selama, coba...tangkap, dll. Berikut ini contoh pseudo code dari program contoh no.1:

Start
Deklarasi variabel:
imgObj=null;
MajuObj = null;
MundurObj = null;
rightMax ='1000px';
jumlah_maju = 0;
jumlah_mundur = 0;

fungsi init(){
               imgObj = document.getElementById('robotImage');
               imgObj.style.position= 'relative'; 
               imgObj.style.left = '0px'; 
                MajuObj = document.getElementById('LangkahMaju');
                MajuObj.innerHTML=jumlah_maju++;
                MundurObj = document.getElementById('LangkahMundur');
                MundurObj.innerHTML=jumlah_mundur++;
}
            
fungsi maju(){
                jika (imgObj.style.left == rightMax){
                    alert("Terima kasih! Sekarang, bantu aku kembali ke titik awal dengan menekan tombol mundur!");
                } atau {
                    imgObj.style.left = parseInt(imgObj.style.left) + 20 + 'px'; 
                    MajuObj.innerHTML=jumlah_maju++;
                }
}
          
fungsi mundur(){
              jika (imgObj.style.left == '0px'){
                alert("LFR-robot ada di titik awal, bantu dia bergerak ke arah kanan dengan menekan tombol maju!");
              } atau {
                imgObj.style.left = parseInt(imgObj.style.left) - 20 + 'px';
                MundurObj.innerHTML=jumlah_mundur++;
              }
}
          
fungsi fungsireset(){
              imgObj.style.left = '0px';
            jumlah_maju = 0;
            jumlah_mundur = 0;
              MajuObj.innerHTML=jumlah_maju++;
              MundurObj.innerHTML=jumlah_mundur++;
}

window.onload= panggil fungsi init;
End

Bagian awal program adalah deklarasi variabel-variabel yang akan digunakan selama program berjalan. Hal ini mutlak dilakukan. Pada saat pendeklarasian, sebenernya kita memerintahkan unit pemrosesan untuk mengalokasikan sejumlah memory untuk menampung nilai dari variabel-variabel yang kita deklarasikan. Nilainya bermacam-macam tergantung dari tipe data variabelnya. Tentang tipe data ini akan dibahas pada tutorial mengenai bahasa pemrograman. Sebagai permulaan kita akan menggunakan bahasa Assembly dan C untuk mempelajari seri tutorial Semua Orang Bisa Nogding ini. Hal ini bertujuan untuk menguatkan logika dan pemahaman, agar saat mempelajari bahasa pemrogramam yang lain (high level programming language) tidak terlalu mengalami kesulitan karena pada dasarnya sama walaupun beberapa konsepnya pasti berbeda. Sedikit penjelasan mengenai klasifikasi bahasa pemrograman. Bahasa pemrograman pada umumnya terbagi menjadi low level programming language, mixed-level programming language dan high level programming language. Ada juga yang membaginya dengan sangat terperinci seperti yang dijelaskan oleh wikipedia pada tautan ini. Low level programming language adalah bahasa yang mendekati bahasa digunakan mesin untuk beroperasi yaitu bahasa Mesin (machine code) yang berbentuk sekuensial data 0 dan 1. Bahasa Assembly ini level abstraksinya berada 1 level di atas bahasa Mesin. Lalu satu level di atasnya lagi ada bahasa C, kemudian diatasnya lagi ada C++, C#, Objective-C, dll. Semakin tinggi level abstaraksi suatu bahasa pemrograman bentuk syntax dan strukturnya semakin mendekati bahasa manusia (natural language). Bahasa-bahasa yang level abstraksinya diatas bahasa Mesin pada akhirnya akan diubah (di-compile) ke dalam bahasa Mesin dengan menggunakan compiler agar dimengeri oleh mesin. Kembali lagi ke pembahasan mengenai pseudo code di atas, setelah mendeklarasikan variabel-variabel berikutnya adalah mendefinisikan fungsi-fungsi yang akan digunakan. Pada pemrograman sekuensial cara kerja fungsi mirip dengan interrupt pada bahasa Assembly. Program mengeksekusi baris kode secara sekuensial (berurutan) dari yang paling atas, kemudian jika bertemu dengan fungsi, jalur eksekusi program utama akan di-hold, pengkesekusian program akan mengerjakan baris-baris kode pada fungsi jika sudah, akan kembali lagi ke jalur eksekusi program utama yang di-hold tadi. Fungsi dapat memberikan nilai balik (return value) atau tidak. Pada OOP seperti JavaScript, fungsi-fungsi dieksekusi berdasarkan objek yang dipilih oleh pengguna. Contohnya, seperti tombol Maju yang jika ditekan akan mengeksekusi fungsi maju(), tombol Mundur yang akan mengeksekusi tombol mundur() dan tombol Reset yang akan mengeksekusi fungsi fungsireset(). Tidak usah pusing menenai OOP, ini hanya sebuah penjelasan tambahan pada tutorial kali ini, bukan yang utama. Yang utama adalah kalian paham mengenai sequential programming dan pengembangan algoritmanya. Sebuah algoritma yang baik adalah yang memenuhi syarat-syarat berikut ini:

  1. Memiliki alur logika yang tepat untu memecahkan masalah yang diberikan.
  2. Menghasilkan hasil (output) yang tepat, yang memiliki waktu pengerjaan yang paling efisien. To the point, tidak berputar-putar.
  3. Ditulis dengan bahasa yang jelas dan terstruktur dengan baik agar mudah dipahami, baik oleh pembuat algoritmanya ataupun orang lain.
  4. Mudah untuk diimplementasikan pada bahasa pemrograman yang sebenarnya.
  5. Semua langkah pengerjaan dan operasi-operasi yang dilakukan dijelaskan dengan baik, ada permulaan dan akhirannya.

Teorema Program Terstruktur

Sepanjang penjelasan di atas saya beberapa kali menyebutkan tentang sequential programming. Itu adalah bagian dari Teorema Program Terstruktur. Pada intinya, teorema ini menjelaskan tentang kendali alur program (program control flow). Ada 3 hal yang menjadi pengendali alur program yaitu, Sequence (urutan), Selection (pemilihan) dan Repetition (pengulangan). Pada dasarnya bahasa pemrograman memiliki baris kode yang ditulis dari atas sampai bawah secara berurutan dan akan dikerjakan sesuai dengan urutan yang dibuat oleh programmer. Bahkan pada OOP, teorema ini, khususnya Sequence tetap berlaku. Saya sudah banyak menyebutkan hal ini pada penjelasan di atas, ini lah yang disebut Sequence. Berikutnya adalah pemilihan, Selection. Dalam bahasa pemrograman syntax yang termasuk dalam teorema ini disebut conditional syntax, yaitu if...else, if...else if...else, switch...case, match...with, dsb. Teorma ini memberikan pilihan blok kode yang berbeda yang akan dieksekusi berdasarkan hasil dari kondisi yang disyaratkan, seperi jika hasil kondisinya benar maka eksekusi blok kode yang berada di dalam kurung kurawal if, jika salah eksekusi blok kode yang berada di dalam kurung kurawal else. Terakhir ada pengulangan, Repetition. Pengulangan berfungsi untuk mengerjakan suatu blok baris kode yang harus dikerjakan selama syarat yang diberikan belum terpenuhi. Jika syarat sudah terpenuhi maka pengulangan ini akan berhenti bekerja dan meneruskan pengerjaan baris kode berikutnya. Dalam bahasa pemrgoraman syntax yang melakukan hal ini disebut sytax-loop. Syntax yang termasuk dalam kategori ini adalah for, while, do...while, dsb. Karena pada penjelasan sebelumnya tidak ada contoh penggunaan pengulangan ini maka akan saya berikan contohnya. Saya ambil contoh dari potongan program contoh no.1 yang akan saya modifikasi, tombol Maju akan saya jadikan tombol Mulai, yang akan memerintahkan robot untuk terus bergerak selama belum mencapai titik 1000px.

function mulai(){
   while('1000px' > imgObj.style.left){
      imgObj.style.left = parseInt(imgObj.style.left) + 20 + 'px';
   }
}

Rangkuman

Poin Outline Tutorial Penjelasan
Definisi Algoritma Algoritma adalah suatu cara/prosedur/formula untuk menyelesaikan suatu masalah dengan melakukan serangkaian aksi tertentu.
Langkah-langkah Pengembangan Algoritma Mendefinisikan Masalah, Mengerjakan Pemecahan Masalah, Menghasilkan Solusi
Membuat Flow Chart http://luthfifr.com/wp-content/uploads/2016/12/algoritma_flowchart.jpg
Contoh Algoritma dengan Flow Chart http://luthfifr.com/wp-content/uploads/2016/12/algoritma_contoh1.jpg
Menulis Pseudo Code Pseudo artinya tiruan, jadi pseudo code adalah baris kode tiruan yang merepresentasikan baris kode yang asli.
Contoh Algoritma dengan Psedo Code Contoh ada diatas
Membuat Algoritma Yang Baik Memiliki alur logika yang tepat untu memecahkan masalah yang diberikan; Menghasilkan hasil (output) yang tepat, yang memiliki waktu pengerjaan yang paling efisien. To the point, tidak berputar-putar; Ditulis dengan bahasa yang jelas dan terstruktur dengan baik agar mudah dipahami, baik oleh pembuat algoritmanya ataupun orang lain;Mudah untuk diimplementasikan pada bahasa pemrograman yang sebenarnya; Semua langkah pengerjaan dan operasi-operasi yang dilakukan dijelaskan dengan baik, ada permulaan dan akhirannya.
Teorema Program Terstruktur Teorema ini menjelaskan tentang kendali alur program (program control flow). Ada 3 hal yang menjadi pengendali alur program yaitu, Sequence (urutan), Selection (pemilihan) dan Repetition (pengulangan).

Apa lagi selanjutnya?

Pilihan 1

Tetap ikuti seri tutorial Semua Orang Bisa Ngoding ini sampai selesai. Baca tutorial berikutnya, yaitu ... .

Pilihan 2

Baca lebih banyak referensi mengenai dasar pemrograman dan algoritma. Baca juga tentang Bahasa Assembly dan C.

Pilihan 3

Pilihan terakhir kalian adalah "cukup tau aja", move on with whatever you're doing before reading this articles, tell your friends, family dan whoever you want about this. Explore tutorial saya yang lain atau lihat-lihat blog post-nya.

Share this post to the world:
Facebooktwittergoogle_pluspinterestlinkedinFacebooktwittergoogle_pluspinterestlinkedin

Leave a Reply

Your email address will not be published. Required fields are marked *