Algoritma dan struktur data adalah dua konsep dasar yang sangat penting dalam
bidang pemrograman. Belajar memprogram pada dasarnya adalah belajar mendesain dan
menganalisis algoritma beserta memilih struktur data yang sesuai dengan permasalahan yang
akan dicari solusinya. Akan tetapi, di lingkungan akademis bidang ilmu informatika, belajar
memprogram seringkali langsung dikaitkan dengan belajar sebuah atau bahkan beberapa
bahasa pemrograman. Padahal, belajar memprogram dan belajar bahasa pemrograman adalah
dua hal yang berbeda bila dilihat dari segi obyek utama pembelajaran.
Belajar memprogram bisa dilakukan lebih awal, terlepas dari pengetahuan akan
sebuah bahasa pemrograman. Yang menjadi obyek pembelajaran adalah metode-metode
pemecahan masalah, merepresentasikan masalah tersebut dengan suatu struktur data dan
dengan kerangka-kerangka dasar sebuah program. Sedangkan ketika kita sudah mulai belajar
bahasa pemrograman, yang menjadi obyek utama pembelajaran adalah penguasaan perintah-
perintah (syntax) beserta seluruh aturan-aturan penulisan kode program dalam bahasa
pemrograman tersebut yang akan kita gunakan untuk mengimplementasikan algoritma kita.
Untuk menuliskan suatu algoritma, kita harus menggunakan alat / metode / notasi
bantu sebagai pengganti dari perintah-perintah (syntax) dari bahasa pemrograman, sehingga
tetap dijamin adanya kesepahaman antara pembuat algoritma dan pembaca algoritma.
Misalnya, dalam kuliah-kuliah pemrograman, pihak pengajar dan mahasiswa harus
menyepakati lebih awal notasi apa yang akan digunakan untuk mengkomunikasikan
algoritma-algoritma yang ada selama proses belajar mengajar.
Kata kunci definisi algoritma : urutan, langkah, masalah, solusi, logis, sistematis.
Algoritma bisa didefinisikan sebagai langkah-langkah yang logis dan sistematis untuk
menemukan solusi dari suatu masalah. Solusi dari suatu masalah dalam pengertian yang lebih
luas bisa diartikan sebagai tujuan akhir yang ingin dicapai dari suatu kondisi awal yang ada.
Bila kita ingin mendaftar segala kemungkinan yang ada dan yang mungkin terjadi
dalam algoritma membuat teh tersebut, maka sangat memungkinkan kita akan memperoleh
algoritma-algoritma yang berbeda yang tak terhingga banyaknya.
Untuk itulah kita harus mengenal tiga komponen penting dalam algoritma, yaitu :
Ketiga komponen tersebut harus didefinisikan secara eksplisit, detail dan selengkap
mungkin, sehingga dapat menghasilkan algoritma yang valid dan tangguh. Khusus untuk
pendefinisian Constraint dan Assumption, penulis algoritma memang memiliki wewenang
untuk memberikan batasan-batasan dan asumsi baru dalam algoritmanya, akan tetapi harus
tetap dalam kerangka logis yang wajar (batasan dan asumsi yang beralasan).
Sebaiknya tidak usah berpikir panjang lebar untuk menjawab pertanyaan tersebut.
Karena memang tidak akan pernah ada jawaban yang pasti dan paling benar. Satu hal yang
dapat kita lakukan hanyalah membedakan apa yang dapat dilakukan komputer dan apa yang
dapat dilakukan oleh manusia. Komputer adalah sebuah mesin yang dapat melakukan
perhitungan dengan cepat dan dapat mengingat banyak hal dalam kurun waktu yang lama.
Jadi komputer memiliki kemampuan menghitung, mengingat dan menyimpan informasi jauh
di atas kemampuan rata-rata manusia. Akan tetapi, seluruh perhitungan dan proses
manajemen informasi yang harus dilakukan komputer adalah atas perintah manusia. Ide
solusi dari suatu permasalahan yang berbentuk sebuah algoritma diberikan oleh manusia,
untuk dieksekusi oleh komputer. Jadi mana yang lebih pintar ? Yang mampu menghitung
cepat dan mengingat banyak hal (Hardware), atau yang mampu memberikan ide solusi untuk
algoritma (Brainware) ? Terserah Anda ! Satu hal yang pasti adalah, keduanya harus bekerja
sama (Software) untuk benar-benar mencapai dan menemukan solusi yang diinginkan.
Notasi Algoritmik
Notasi algoritmik dianggap perlu untuk menjembatani keragaman dan kompleksitas bahasa
sehingga mahasiswa mampu melakukan ‘abstraksi’. Notasi ini akan merangkum semua
konsep pemrograman prosedural yang harus dapat dengan mudah dituliskan di atas kertas.
Notasi ini lebih berorientasi kepada detail design dibandingkan coding. Notasi ini hanyalah
alat untuk menuangkan rancangan secara prosedural yang selanjutnya dengan mudah dapat
ditranslasi menjadi salah satu program dalam bahasa tertentu. Suatu saat, jika pemrogram
menghadapi dunia profesional yang membutuhkan hasil yang siap pakai, notasi dapat
disesuaikan dan dibuat lebih dekat dengan bahasa pemrograman yang dipakai.
Judul
{judul bisa berupa sebuah program, function atau procedure}
{berikan spesifikasi algoritma, penjelasan singkat dan jelas tentang
algoritma yang ditulis}
kamus
{deklarasi variabel, definisi konstanta, definisi type, dan spesifikasi fungsi atau prosedur lain
yang digunakan}
x : integer {contoh deklarasi variabel}
L : real
T : array[1..10] of integer {contoh deklarasi array}
type point : <absis : integer, ordinat : integer> {contoh definisi
type}
P : point
constant phi : real = 3.14 {contoh definisi konstanta}
function Luas(r : integer) -> real {contoh spesifikasi fungsi}
{menghitung luas lingkaran dengan jari-jari r}
algoritma
{pada bagian ini, seluruh teks diluar tanda kurung kurawal adalah
teks algoritmik}
x 5 {contoh notasi pengisian nilai ke variabel}
read(T[1]) {contoh input dari user dan akses elemen array}
write(x) {contoh memberikan output untuk user}
x x + T[1] {contoh operasi aritmetika}
P.absis x {contoh akses komponen type bentukan}