PENGANTAR
1. A. Pengertian Algoritma & Pemrograman
2. 1. Algoritma
Asal usul kata
algoritma dapat Anda baca dalam buku
“The Art of Computer Programming Second Edition Volume I”
yang ditulis oleh Donald E. Knuth (1973, p1- )
Menurut Donald E.
Knuth (1973,p4), algoritma dalam penger tian
modern mempunyai kemiripan dengan istilah resep , proses, metode, teknik, prosedur, rutin . Algor itma
adalah sekumpulan aturan-aturan berhingga yang
memberikan sederetan operasi-operasi untuk menyelesaikan suatu jenis
masalah yang khusus. Menurut Rinaldi Munir, algoritma
adalah urutan langkah-langkah logis penyelesaian masalah yang
disusun secara sistematis. Berdasarkan dua pengertian algoritma di atas, dapat
disimpulkan bahwa algor itma merupakan suatu istilah yang luas, yang tidak
hanya berkaitan dengan dunia komputer.
1. 2. Pemrograman
Pemrograman berasal dar i kata program yang diberi awalan pe– dan
akhiran –an. Dalam buku ini, program berarti progr am komputer. Pengertian program computer menurut John M. Zelle, Ph.D.
dalam bukunya yang berjudul “Python Programming: An
Introduction to Computer Science” (2002, p1)
adalah sekumpulan instruksi langkah per langkah yang member
itahukan mengenai yang harus dilakukan computer secara tepat. Pemrograman adalah segala
kegiatan pembuatan program computer.
Kemudian terdapat pula
istilah bahasa
pemrograman yang berarti bahasa yang
digunakan dalam pembuatan program komputer. Berdasarkan pengertian
algor itma dan pemrograman, maka dapat dikatakan
bahwa progr am merupakan hasil penerapan
dari algoritma- algoritma. Akan tetapi, dalam
buku ini tidak dibahas materi mengenai
pembuatan program komputer. Buku ini memfokuskan
teknik-teknik pembuatan algoritma itu sendir i.
Nama mata kuliah Algor itma dan Pemrogr aman dalam hal ini berarti
mempelajari pembuatan algoritma- algoritma yang dapat diterapkan dalam
pemrograman.
1. B. Tipe-tipe Algoritma Berdasarkan Format
Penulisan
Algoritma adalah
independen terhadap bahasa pemr ograman tertentu,
artinya algoritma yang telah dibuat tidak
boleh hanya dapat diterapkan pada bahasa pemrograman
tertentu. Penulisan algoritma tidak ter ikat
pada suatu aturan tertentu, tetapi harus jelas maksudnya
untuk tiap langkah algoritmanya. Namun pada dasar nya algoritma dibagi menjadi
beberapa macam berdasarkan for mat penulisannya, yaitu:
1. 1. Deskriptif
Algoritma bertipe deskr
iptif maksudnya adalah algoritma yang ditulis
dalam bahasa manusia sehari- hari (misalnya bahasa Indonesia atau bahasa
Inggris) dan dalam bentuk kalimat. Setiap langkah
algoritmanya diterangkan dalam satu atau beberapa
kalimat.
Sebagai contoh misalnya algoritma
menentukan bilangan terbesar dari 3 bilangan berikut ini:
Algoritma
Menentukan_bilangan_terbesar_dari_3_bilangan
§
Meminta input 3 bilangan dari user, misalkan bilangan
a, b, dan c.
§
Apabila bilangan a lebih besar
dari b maupun c, maka bilangan a merupakan
bilangan terbesar.
§
Jika tidak (bilangan a tidak
lebih besar dari b atau c) berarti
bilangan a sudah pasti bukan bilangan
terbesar. Kemungkinannya tinggal bilangan b atau
c. Apabila bilangan b lebih besar
dari c, maka b merupakan bilangan terbesar.
Sebaliknya apabila bilangan b tidak lebih besar dari c, maka
bilangan c merupakan yang terbesar.
§
Selesai.
1. 2. Flow Chart (Diagram Alir)
Selain dalam bentuk tulisan, algoritma
juga dapat ditulis dalam bentuk diagram- diagram dengan anak panah
sebagai penunjuk urutan langkah algoritmanya. Algor itma yang ditulis dengan
simbol-simbol demikian yang dinamakan flow chart .
Mengenai lambang- lambang
yang digunakan akan dibahas pada bagian
selanjutnya. Sekarang diberikan suatu contoh algoritma menentukan bilangan
terbesar dar i 3 bilangan seperti yang dicontohkan sebelumnya, tetapi ditulis
dalam bentuk flow chart.
1. 3. Pseudocode
Pseudo berarti imitasi dan code ber arti kode
yang dihubungkan dengan instruksi yang ditulis dalam
bahasa komputer (kode bahasa pemrograman).
Apabila diterjemahkan secar a bebas, maka
pseudocode berarti tiruan atau imitasi dari
kode bahasa pemrograman. Pada dasarnya, pseudocode
merupakan suatu bahasa yang memungkinkan programmer
untuk berpikir terhadap per masalahan yang harus dipecahkan tanpa harus
memikirkan syntax dar
i bahasa pemrogr aman yang tertentu. Tidak
ada aturan penulisan syntax di
dalam pseudocode. Jadi pseudocode digunakan untuk
menggambarkan logika urut-urutan dari program tanpa memandang bagaimana bahasa
pemrogramannya.
Walaupun pseudocode tidak ada aturan
penulisan syntax, di dalam buku ini akan diberikan suatu
aturan-aturan penulisan syntax yang cukup seder hana
agar pembaca dapat lebih mudah dalam mempelajari
algoritma-algor itma yang ada di dalam buku
ini. Pseudocode yang ditulis di dalam
buku ini akan menyerupai (meniru) syntax- syntax
dalam bahasa Pascal. Namun dibuat sesederhana mungkin sehingga tidak akan
ada kesulitan bagi pembaca untuk memahami
algoritma- algor itma dalam buku ini walaupun pembaca belum
pernah mempelajar i bahasa Pascal.
Contoh algoritma
menentukan bilangan terbesar dar i tiga
bilangan yang ditulis dalam bentuk pseudocode bergaya buku ini.
01| ALGORITMA Menentukan_terbesar_dari_3_bilangan
02| Deklarasi:
03| a,b,c, terbesar : integer
04|
05| Deskripsi:
06| Read(a,b,c)
07| If (a>b) and (a>c) then
08| Terbesar a
09| Else
10| If b>c then
11|
Terbesar b
12| Else
13|
Terbesar c
14| Endif
15| Endif
16| Write(terbesar)
1. C. Flow Chart (Diagram Alir)
2. 1. Pengertian
Diagram alir atau flow chart adalah
suatu bagan yang menggambarkan arus logika dar i data yang akan dipr oses
dalam suatu program dari awal sampai akhir. Diagram alir terdiri dar i
simbol-simbol yang mewakili fungsi-fungsi langkah program dan garis alir (flow
lines) menunjukkan urutan dari simbol-simbol yang akan diker jakan.
1. 2. Simbol-simbol Flow Chart
1. Simbol terminal
(terminator )
digunakan untuk menunjukkan awal dan
akhir algoritma
1. Simbol persiapan
(preparation)
digunakan untuk memberikan nilai awal
suatu variabel atau suatu counter
1. Simbol proses
(process)
digunakan untuk proses
perhitungan aritmatika atau proses pemindahan data
1. Simbol Data (data)
digunakan untuk
menunjukkan proses input maupun output data.
1. Simbol Keputusan
(decision)
digunakan untuk
pengambilan keputusan dua jalur atau lebih dalam
flow chart.
1. Simbol Penghubung
(on-page refer ence)
digunakan untuk menunjukkan
hubungan arus flow chart yang terputus, tetapi masih dalam
halaman yang sama.
1. Simbol Penghubung
Halaman Lain (off- page reference)
digunakan untuk menunjukkan hubungan
arus flow chart yang terputus yang berada di halaman lain.
1. 3. Bentuk-bentuk Dasar Struktur Logika
Flow Chart
1. Runtunan (Sequence
Structure)
1. Pemilihan/Percabangan
IF (Selection Structure)
1. Pengulangan FOR (FOR
Loop Structur e)
Pengertian ALGORITMA
Algoritma
Diagram
Alur sering digunakan untuk menggambarkan sebuah algoritma.
Dalam
matematika dan komputasi, algoritma merupakan kumpulan perintah untuk
menyelesaikan suatu masalah. Perintah-perintah ini dapat diterjemahkan secara
bertahap dari awal hingga akhir. Masalah tersebut dapat berupa apa saja, dengan
catatan untuk setiap masalah, ada kriteria kondisi awal yang harus dipenuhi
sebelum menjalankan algoritma. Algoritma akan dapat selalu berakhir untuk semua
kondisi awal yang memenuhi kriteria, dalam hal ini berbeda dengan heuristik.
Algoritma sering mempunyai langkah pengulangan (iterasi) atau memerlukan
keputusan (logika Boolean dan perbandingan) sampai tugasnya selesai.
Desain
dan analisis algoritma adalah suatu cabang khusus dalam ilmu komputer yang
mempelajari karakteristik dan performa dari suatu algoritma dalam menyelesaikan
masalah, terlepas dari implementasi algoritma tersebut. Dalam cabang disiplin
ini algoritma dipelajari secara abstrak, terlepas dari sistem komputer atau
bahasa pemrograman yang digunakan. Algoritma yang berbeda dapat diterapkan pada
suatu masalah dengan kriteria yang sama.
Kompleksitas
dari suatu algoritma merupakan ukuran seberapa banyak komputasi yang dibutuhkan
algoritma tersebut untuk menyelesaikan masalah. Secara informal, algoritma yang
dapat menyelesaikan suatu permasalahan dalam waktu yang singkat memiliki
kompleksitas yang rendah, sementara algoritma yang membutuhkan waktu lama untuk
menyelesaikan masalahnya mempunyai kompleksitas yang tinggi.
Sejarah
istilah "algoritma"Kata algoritma berasal dari latinisasi nama
seorang ahli matematika dari Uzbekistan Al Khawārizmi (hidup sekitar abad
ke-9), sebagaimana tercantum pada terjemahan karyanya dalam bahasa latin dari
abad ke-12 "Algorithmi de numero Indorum". Pada awalnya kata
algorisma adalah istilah yang merujuk kepada aturan-aturan aritmetis untuk
menyelesaikan persoalan dengan menggunakan bilangan numerik arab (sebenarnya
dari India, seperti tertulis pada judul di atas). Pada abad ke-18, istilah ini
berkembang menjadi algoritma, yang mencakup semua prosedur atau urutan langkah
yang jelas dan diperlukan untuk menyelesaikan suatu permasalahan.
Jenis-jenis Algoritma
Terdapat
beragam klasifikasi algoritma dan setiap klasifikasi mempunyai alasan
tersendiri. Salah satu cara untuk melakukan klasifikasi jenis-jenis algoritma
adalah dengan memperhatikan paradigma dan metode yang digunakan untuk mendesain
algoritma tersebut. Beberapa paradigma yang digunakan dalam menyusun suatu
algoritma akan dipaparkan dibagian ini. Masing-masing paradigma dapat digunakan
dalam banyak algoritma yang berbeda.
Divide and Conquer, paradigma untuk membagi suatu permasalahan besar
menjadi permasalahan-permasalahan yang lebih kecil. Pembagian masalah ini
dilakukan terus menerus sampai ditemukan bagian masalah kecil yang mudah untuk
dipecahkan. Singkatnya menyelesaikan keseluruhan masalah dengan membagi masalah
besar dan kemudian memecahkan permasalahan-permasalahan kecil yang terbentuk.
Dynamic programming, paradigma pemrograman dinamik akan sesuai jika
digunakan pada suatu masalah yang mengandung sub-struktur yang optimal (, dan
mengandung beberapa bagian permasalahan yang tumpang tindih . Paradigma ini
sekilas terlihat mirip dengan paradigma Divide and Conquer, sama-sama mencoba
untuk membagi permasalahan menjadi sub permasalahan yang lebih kecil, tapi
secara intrinsik ada perbedaan dari karakter permasalahan yang dihadapi.
Metode serakah. Sebuah algoritma serakah mirip dengan sebuah
Pemrograman dinamik, bedanya jawaban dari submasalah tidak perlu diketahui
dalam setiap tahap;
dan
menggunakan pilihan "serakah" apa yang dilihat terbaik pada saat itu.
Sekilas
tentang Algortima Komputer
Orang yang telah terbiasa “bergaul” dengan komputer menggunakan satu bahasa pemrograman tertentu (tingkat mahir), biasanya tidak lagi memerlukan kertas coret-coretan untuk membuat suatu program komputer. Namun bagi pemula, pembelajar, atau yang belum mahir, diperlukan kertas coret-coretan tersebut. Kertas coret-coretan itu akan digunakan untuk menyusun algoritma (langkah-langkah penyelesaian masalah), flowcharting (alur logika perintah, yang merupakan aplikasi dari algoritma), maupun menuliskan perintah sesuai dengan kaidah dari bahasa pemrograman yang akan digunakannya. Sewaktu menyusun algoritma, kita tidak perlu tahu (atau tidak perlu. menyesuaikan dengan) bahasa pemrograman yang nanti akan kita gunakan. Hal utama yang kita pikirkan adalah kaidah (hirarki) dari komputer itu sendiri,
yaitu input-proses-output. Input adalah data yang harus ada (sudah ada/ sudah tersedia), yang dapat diproses dengan aturan-aturan tertentu untuk menghasilkan output seperti yang dikehendaki. Data yang ada harus logis (masuk akal) bahwa “ia” dapat diproses untuk menghasilkan output. “Bambang Wahyudi, SKom., MMSI”
Orang yang telah terbiasa “bergaul” dengan komputer menggunakan satu bahasa pemrograman tertentu (tingkat mahir), biasanya tidak lagi memerlukan kertas coret-coretan untuk membuat suatu program komputer. Namun bagi pemula, pembelajar, atau yang belum mahir, diperlukan kertas coret-coretan tersebut. Kertas coret-coretan itu akan digunakan untuk menyusun algoritma (langkah-langkah penyelesaian masalah), flowcharting (alur logika perintah, yang merupakan aplikasi dari algoritma), maupun menuliskan perintah sesuai dengan kaidah dari bahasa pemrograman yang akan digunakannya. Sewaktu menyusun algoritma, kita tidak perlu tahu (atau tidak perlu. menyesuaikan dengan) bahasa pemrograman yang nanti akan kita gunakan. Hal utama yang kita pikirkan adalah kaidah (hirarki) dari komputer itu sendiri,
yaitu input-proses-output. Input adalah data yang harus ada (sudah ada/ sudah tersedia), yang dapat diproses dengan aturan-aturan tertentu untuk menghasilkan output seperti yang dikehendaki. Data yang ada harus logis (masuk akal) bahwa “ia” dapat diproses untuk menghasilkan output. “Bambang Wahyudi, SKom., MMSI”
Dan Apa
sech manfaatnya belajar Algoritma Komputer??? sangat banyak sekali…!!! setiap
apapun yang kita kerjakan pasti mengunakan algortima tanpa kita sadari… Semisal:
Sebuah truk mengangkut Batu 10 Ton, dengan kecepatan 100 km/jam. berapa waktu
yang di perlukan untuk menempuh jarak 500 KM ??
hal ini sebetulnya sangat mudah… cuman kalau kategori yang di butuhkan banyak, atau inputnya sangat banyak.. kalau tidak menggunakan Media komputer kita sangat kwalahan… oleh karena itu kita beljar memahami algoritma alur dari permasalahan di atas lalu kita terapkan dalam dalam program komputer. dan menggunakan Bahasa Pemrogaman.
hal ini sebetulnya sangat mudah… cuman kalau kategori yang di butuhkan banyak, atau inputnya sangat banyak.. kalau tidak menggunakan Media komputer kita sangat kwalahan… oleh karena itu kita beljar memahami algoritma alur dari permasalahan di atas lalu kita terapkan dalam dalam program komputer. dan menggunakan Bahasa Pemrogaman.
PERLUNYA
PERINTAH BAHASA PEMROGRAMAN DI DALAM ALGORITMA
Meskipun
sudah dikatakan, bahwa sewaktu kita menyusun algoritma kita tidak perlu tahu
bahasa pemrograman apa yang akan digunakan kelak, namun, untuk penulisan
algoritma yang lebih efisien dan efektif, maka penggunaan sebagian perintah
yang ada di dalam bahasa pemrograman perlu dilakukan juga.
Adapun perintah bahasa pemrograman yang paling sering digunakan untuk menyusun algoritma adalah bahasa pemrogrman yang terstrukutur, seperti
Pascal, C, SNOBOL, PL/1, dan sebagainya. Misalkan saja, untuk contoh berikut ini :
Langkah 1 : Beri nilai 10 ke variabel S
Maka, akan lebih mudah jika ditulis sebagai :
Langkah 1 : S := 10;
Belum lagi jika algoritma yang ditulis harus melakukan perulangan langkah
ke langkah-langkah sebelumnya (looping).
10 Mulai I:= 1;
11 Lakukan perbandingan data ke I dengan data ke I+1
12 Jika data ke I+1 lebih kecil, maka tukar tempat keduanya
13 Tambahkan I dengan 1
14 Lakukan langkah 11 hingga langkah 13 selama nilai I < 10
15 selesai
Tentu akan lebih ringkas jika kita tulis (perintah BASIC) :
10 For I= 1 to 10
20 If A(i) > A(I+1) then SWAP A(i), A(j)
30 next
40 end
Jadi terlihat, jika algoritma tersebut sederhana, maka penyusunan algoritma akan sama dengan penyusunan sebuah program (karena semua perintahnya
sudah sesuai dengan kaidah penulisan di bahasa pemrogramannya). Apakah semuanya akan demikian ?. Tentu saja tidak, misalkan, kita diminta untuk menentukan bilangan terkecil dari seratus buah bilangan yang akan dimasukkan ke komputer, ini masih dapat langsung dibuatkan programnya. Algoritma (program)nya bisa kita susun sebagai berikut :
1 DIM A(100)
2 FOR M = 1 TO 100
3 INPUT A(M) : NEXT : KECIL = A(1)
4 FOR M = 2 TO 100
5 IF KECIL > A(M) THEN X = KECIL: KECIL = A(M) : A(M) = X
6 NEXT : PRINT KECIL : END
Tetapi, misalkan jika kita diminta untuk mengalihkan notasi infix menjadi postfix melalui stack, hal itu sulit untuk dilakukan.
Algoritmanya bisa menggunakan gabungan kalimat dengan bahasapemrograman, berikut contoh penggalannya.
Contoh :
1. Asumsi : deretan notasi infix dimasukkan ke dalam sebuah variabel array
bernilai string, nama variabelnya D
2. S adalah variabel string untuk menyimpan susunan data di dalam stack
3. H adalah variabel string untuk menyimpan hasil
4. P = banyaknya elemen array
5. For I = 1 to p
If top(s) = empty then
{top(s) adalah posisi atas stack)
if D(i) = operand then
H = D(i)
Else
S = S + D(i)
Top(s) = D(i)
Endif
Else
If D(i) = operator then
If derajat D(i) > derajat Top(s) then
…
…
.. .
…
Jadi, terdapat beberapa kata yang tidak dapat dijabarkan langsung ke dalam bahasa pemrograman. Misalkan, kata Top(s), empty, operand, operator,
dan derajat.
Adapun perintah bahasa pemrograman yang paling sering digunakan untuk menyusun algoritma adalah bahasa pemrogrman yang terstrukutur, seperti
Pascal, C, SNOBOL, PL/1, dan sebagainya. Misalkan saja, untuk contoh berikut ini :
Langkah 1 : Beri nilai 10 ke variabel S
Maka, akan lebih mudah jika ditulis sebagai :
Langkah 1 : S := 10;
Belum lagi jika algoritma yang ditulis harus melakukan perulangan langkah
ke langkah-langkah sebelumnya (looping).
10 Mulai I:= 1;
11 Lakukan perbandingan data ke I dengan data ke I+1
12 Jika data ke I+1 lebih kecil, maka tukar tempat keduanya
13 Tambahkan I dengan 1
14 Lakukan langkah 11 hingga langkah 13 selama nilai I < 10
15 selesai
Tentu akan lebih ringkas jika kita tulis (perintah BASIC) :
10 For I= 1 to 10
20 If A(i) > A(I+1) then SWAP A(i), A(j)
30 next
40 end
Jadi terlihat, jika algoritma tersebut sederhana, maka penyusunan algoritma akan sama dengan penyusunan sebuah program (karena semua perintahnya
sudah sesuai dengan kaidah penulisan di bahasa pemrogramannya). Apakah semuanya akan demikian ?. Tentu saja tidak, misalkan, kita diminta untuk menentukan bilangan terkecil dari seratus buah bilangan yang akan dimasukkan ke komputer, ini masih dapat langsung dibuatkan programnya. Algoritma (program)nya bisa kita susun sebagai berikut :
1 DIM A(100)
2 FOR M = 1 TO 100
3 INPUT A(M) : NEXT : KECIL = A(1)
4 FOR M = 2 TO 100
5 IF KECIL > A(M) THEN X = KECIL: KECIL = A(M) : A(M) = X
6 NEXT : PRINT KECIL : END
Tetapi, misalkan jika kita diminta untuk mengalihkan notasi infix menjadi postfix melalui stack, hal itu sulit untuk dilakukan.
Algoritmanya bisa menggunakan gabungan kalimat dengan bahasapemrograman, berikut contoh penggalannya.
Contoh :
1. Asumsi : deretan notasi infix dimasukkan ke dalam sebuah variabel array
bernilai string, nama variabelnya D
2. S adalah variabel string untuk menyimpan susunan data di dalam stack
3. H adalah variabel string untuk menyimpan hasil
4. P = banyaknya elemen array
5. For I = 1 to p
If top(s) = empty then
{top(s) adalah posisi atas stack)
if D(i) = operand then
H = D(i)
Else
S = S + D(i)
Top(s) = D(i)
Endif
Else
If D(i) = operator then
If derajat D(i) > derajat Top(s) then
…
…
.. .
…
Jadi, terdapat beberapa kata yang tidak dapat dijabarkan langsung ke dalam bahasa pemrograman. Misalkan, kata Top(s), empty, operand, operator,
dan derajat.