Disusun Untuk Memenuhi Tugas Mata Kuliah Algoritma dan Pemograman Komputer
Disusun Oleh
SISKA DEWI TITANIA SITUMORANG 4192421027
JURUSAN FISIKA
FAKULTAS MATEMATIKA DAN ILMU PENGETAHUAN ALAM
UNIVERSITAS NEGERI MEDAN
2021
KATA PENGANTAR
Puji dan Syukur kita panjatkan atas kehadirat Tuhan Yang Maha Esa karena dengan
Rahmat dan Penyertaan-Nya, kami masih bisa menyelesaikan tugas Critical Book Review ini
dengan baik yang mana untuk memenuhi tugas dari mata kuliah Algoritma dan
pemrograman. Terima kasih juga kami ucapkan kepada pihak-pihak yang membantu dalam
mengerjakan tugas ini, terutama kepada Dosen Pengampu yaitu Bapak Drs.Juniar
Hutahaean,M.Si
Adapun ulasan-ulasan yang kami peroleh dari buku yang berjudul “Algoritma dan
Pemograman” mulai dari Ringkasan Buku, serta Kesimpulan dan Saran dari buku tersebut.
Terlepas dari itu semua, kami juga menyadari bahwa tugas Critical Book Report yang kami
kerjakan ini masih ada kekurangan dan kesalahan baik dari segi penyusunan kalimat maupun
pembahasan materi nya serta jauh dari kata sempurna.
Oleh karena itu, kami sangat berharap kepada Saudara-Saudari sekalian yang
membaca Tugas ini dengan senang hati kami menerima dan membutuhkan saran, kritik serta
ide-ide dari pembaca sekalian. Demikianlah kata pengantar dari kami, jika ada kesalahan
mohon dimaafkan. Sekian dan Terimakasih.
Penulis
DAFTAR ISI
KATA PENGANTAR................................................................................................................i
DAFTAR ISI..............................................................................................................................ii
BAB I PENDAHULUAN..........................................................................................................1
1.1. Latar Belakang................................................................................................................1
1.2 Tujuan Penulisan..............................................................................................................1
1.3 Manfaat Penulisan............................................................................................................1
BAB II RINGKASAN ISI BUKU.............................................................................................2
BABIII PEMBAHASAN ………………….………………………………………………32
3.1 Kelebihan Buku ………………………………………………………………………32
3.2 Kelemahan Buku………………………………………………………………………32
BAB IV PENUTUP.................................................................................................................33
4.1 Kesimpulan....................................................................................................................33
4.2 Saran...............................................................................................................................33
DAFTAR PUSTAKA..............................................................................................................34
BAB I
PENDAHULUAN
1.1. Latar Belakang
Penulis membuat critical book Review ini dikarenakan penulis ingin
menambahpengetahuan dan wawasan tentang isi dari buku yang penulis kritik dan juga
penulisdapat membandingkan buku-buku yang berhubungan dengan algoritma
pemogramankomputer . saya sengaja memilih buku visual basic ini supaya penulis lebih
memahamilagi tentang materi pada mata kuliah algoritma
1.2 Tujuan Penulisan
Adapun tujuan penulisan makalah ini ialah :
Buku Utama
1. Judul : Pemograman Berorientasi pada Objek dengan Borland C++
2. Edisi : Edisi Pertama
3. Pengarang : Kartono Susanto
4. Penerbit : Andi Offset
5. Kota Terbit : Yogyakarta
6. Tahun Terbit : 1995
7. ISBN : 979-533-265-1
8. Halaman : 417 halaman
BAB 1
PRODUSER
1. Pendefinisian Prosedur
Pendefinisian prosedur artinya menuliskan nama prosedur, mendeklrasikan nama-
nama konstanta, peubah dan tipe jika ada), dan menjabarkan rangkaian aksi yang dilakukan.
Pada dasarnya, struktur prosedur sama dengan struktur algoritma yang sudah Anda kenal,
yaitu: ada bagian judul (header) yang terdiri atas nama prosedur dan deklarasi parameter (jika
ada), bagian deklarasi untuk mengumumkan nama-nama, dan bagian algoritma yang disebut
badan prosedur. Setiap prosedur mempunyai nama yang unik. Nama prosedur sebaiknya
diawali dengan kata kerja karena prosedur berisi suatu aktivitas, misalnya hitung luas, tukar,
carimaks,inisialisasi, aktif menu, dan lain sebagainya.
2. Pemanggilan Prosedur
Produser bukan program yang berdiri sendiri, jadi ia tidak dapat dieksekusi secara
langsung. Ini berarti, instruksi-instruksi didalam prosedur baru dapat dilaksanakan hanya bila
prosedur tersebut diakses. Prosedur diakses dengan cara memanggil namanya dari program
pemanggil ( misalnya dari program utama atau dari modul program lainnya). Jika prosedur
tanpa parameter, maka pemanggilannya cukup dengan namanya saja .
3. Nama Global, Nama Lokal, dan Lingkup
Nama-nama (konstanta, peubah, tipe, dan lain-lain) yang di deklarasikan di dalam
prosedur ( termasuk parameter, jika ada) hanya “dikenal” di dalam badan prosedur
bersangkutan. Nama-nama yang dideklarasikan di dalampedur tersebut dikatakan lingkupnya
(scope) lokal". Nama-nama local hanya berlaku di dalam prosedur yang melingkupinya saja.
4. Parameter
Parameter adalah data masukan untuk subprogram yang nantinya akan diproses lebih
lanjut dalam subprogram tersebut.
Parameter sebuah fungsi adalah variabel yang menyertai fungsi tersebut baik saat deklarasi
maupun saat pemanggilan fungsi. Dalam bahasa C dikenal dua jenis parameter, yaitu
parameter formal dan aktual. Parameter formal adalah parameter yang berupa variabel yang
ada dalam definisi fungsi saat dideklarasikan. Sedangkan parameter aktual adalah parameter
yang bisa berupa variabel atau konstanta yang dipakai saat pemanggilan fungsi.
Parameter formal sebuah fungsi harus berupa variabel karena dia bersifat kerangka yang
nanti nilainya bisa berubah selama proses program. Tata cara penulisan parameter formal
tampak jelas pada saat pembahasan tentang prototipe fungsi.
BAB 2
FUNGSI
1. Definisi Fungsi
Fungsi adalah upa-program yang memberikan/mengembalikan (return) sebuah nilai dari
tipe tertentu (tipe dasar atau tipe bentukan). Definisi fungsi di dalam program bersesuaian
dengan definisi fungsi di dalam matematika.
2. Pendefinisian Fungsi
Sebagaimana halnya pada prosedur, struktur fungsi sama dengan struktur
algoritma yang sudah Anda kenal: ada bagian header yang berisi nama fungsi (beserta
parameter masukan, jika ada) dan spesifikasi tentang fungsi tersebut, bagian deklarasi,
dan badan fungsi. Tipe menspesifikasikan tipe nilai yang diberikan oleh fungsi. Nilai
yang diberikan oleh fungsi dapat bertipe dasar maupun bertipe bentukan. Parameter
formal selalu berjenis parameter masukan sehingga deklarasi nama parameter selalu
diawali dengan kata input. Sebagaimana halnya pada prosedur, parameter fungsi pada
fungsi tidak selalu harus ada. Semua nama peubah/konstanta yang hanya berlaku di dalam
fungsi saja diumumkan di bagian deklarasi.
3. Pemanggilan Fungsi
Fungsi diakses dengan cara memangil namanya dari program pem diikuti dengan
daftar parameter aktual (bila ada). Karena fi menghasilkan nilai, maka nilai tersebut dapat
dieprlakukan dengan cara. Pertama, nilai yang dikembalikan oleh fungsi ditampung di dal
sebuah peubah yang bertipe sama dengan tipe fungsi.
Pemilihan apakah sebuah modul direalisasikan sebagai fun atau prosedur bergantung pada
kebutuhan dan seni memprogram.
Mengubah fungsi menjadi prosedur Sebuah fungsi dapat dikonversi sebagai prosedur
dengan cara menyatakan nilai yang dikembalikan (return value) oleh fungsi tersebut
sebagai parameter keluaran pada prosedur. Sebagai contoh, tinjau kembali fungsi
Maks untuk menentukan bilangan terbesar di antara dua buah bilangan.
Mengubah fungsi menjadi prosedur Prosedur yang mempunyai satu buah parameter
keluaran dapat ditulis sebagai fungsi dengan cara menyatakan parameter keluaran
sebagai nilai yang dikembalikan oleh fungsi.
BAB 3
LARIK
1. Apakah Larik Itu?
Larik adalah struktur data yang menyimpan sekumpulan elemen var bertipe sama,
setiap elemen diakses langsung melalui indeksnya. Indel larik haruslah tipe data yang
menyatakan keterurutan, misalnya integer atan karakter. Sebuah larik yang bernama A
dengan delapan buah elemen dan dibayangkan secara lojik sebagai sekumpulan kotak yang
terurut ha tersusun secara vertikal atau horizontal) seperti yang diperlihatkan pada Gambar
12.1. Tiap kotak pada larik tersebut diberi indeks 1, 2, 3, .., 8. Seti elemen larik ditulis dengan
notasi: A[1], A[2], A[3], A[4], A[5], A[6], A[7], A[8]
2. Mendeklarasikan Larik
Larik adalah struktur data yang statis, artinya jumlah elemen larik harus Larik
iketahui sebelum program dieksekusi. Jumlah elemen larik tidak sadan diubah, ditambah,
atau dikurangi selama pelaksanaan program. dap jeklarasikan larik di dalam bagian deklarasi
berarti: Mendefinisikan banyaknya elemen larik (ukuran larik), dan mendefinisikan tipe
elemen larik.
3. Pemrosesan Larik
Elemen larik tersusun di memori secara beruntun (sekuensial). Karena itu, Bmennya
diproses secara beruntun melalui indeksnya yang terurut. Memproses larik artinya
mengunjungi (traversal) setiap elemen larik dan memanipulasi dinilai di dalamnya.
Kunjungan dimulai dari elemen pertama larik, berturut-turut pada elemen berikutnya, sampai
elemen terakhir dicapai, yaitu elemen dengan indeks terbesar.
4. Ukuran Efektif Larik
Di bawah ini diberikan beberapa algoritma pemrosesan larik yang disajikan dalam
bentuk prosedur. Larik yang digunakan adalah larik yang bernama A dan bertipe integer.
Kita asumsikan ukuran maksimum elemen larik adalah 100, dan ukuran efektif larik yang
digunakan kita simpan di dalam peubah n. Selain itu, skema yang digunakan menggunakan
struktur FOR, dan pada masalah tertentu menggunakan struktur WHILE.
5. Menginisialisasi Larik
Menginisialisasi larik adalah memberikan nilai awal untuk seluruh elemen etapi hal ini
bukan keharusan, bergantung pada permasalahan yang akan edangkan pada larik karakter,
“mengosongkan" larik berarti mengisi elemen Jarik atau mungkin sebagian saja. Inisialisasi
larik mungkin diperlukan, isalnya "mengosongkan" elemen larik sebelum dipakai untuk
proses tertentu, dipecahkan. "Mengosongkan" larik bertipe numerik dapat dilakukan dengan
seluruh elemen dengan nol (atau nilai lainnya, bergantung kebutuhan), k dengan spasi atau
karakter kosong (null).
BAB 4
MATRIKS
1. Definisi Matriks
Matriks adalah struktur penyimpanan data didalam memori utama yang setiap
individu elemennya diacu dengan menggunakan dua buah indeks (yang biasanya
dikonotasikan dengan indeks baris dan indeks kolom). Sebagaiman pada larik, didalam buku
ini kita menggambarkan matriks sebagai sekempulan kotak yang tersusun belajar pada setiap
baris dan kolom.susunan bujursangkar seperti itu sering dinamakan juga grid. Matriks yang
terdiri dari 5 buah baris matriks tersebut dengan indeks 1 2 3 4 dan5 , sedangkan kolom
matriks diacu dengan indeks 1 2 3 dan 4. Elemen yang diarsir menyatakan elemen pada baris
ke-2 dan kolom ke-3. Karena adanya dua buah indeks tersebut.matriks disebut juga larik
dwimantra (Matra= dimension)
Meskipun matriks merupakan larik dwimatra, namun representasinya di apa yang
dimaksud dengan baris di sini adalah kelompok 4 buah elemen). Angka 1, 2, 3, dan 4
menyatakan indeks elemen relatif pada setiap "baris" Karena matriks sebenarnya adalah larik,
maka konsep umum dari larik juga berlaku untuk matriks yaitu:
1. Kumpulan elemen yang bertipe sama. Tipe elemen matriks dapat berupa tipe dasar
(integer, real, boolean, char, dan string), atau tipe tersrtuktur seperti record.
2. Setiap elemen data dapat diakses secara langsung jika indeksnya (baris di dalam
kumpulannya. Sekolom) diketahui, yang dalam hal ini indeks menyatakan posisi relatif
didalam kumupulan
3. merupakan struktur data yang statis artinya jumlah elemenya sudah dideklarasikan terlebih
dahulu dan tidak bisa diubah selama upakan struktur data yang statis, artinya jumlah
elemennya sudah pelaksanaan program.
struktur matriks praktis untuk dipakai (pengaksesannya cepat karena ng melalui
indeksnya, tetapi memakan banyak tempat di memori. sebesar 200000 byte! Inva matriks
integer berukuran 100 x 100, membutuhkan 10000 x lebar hert. Jika satu representasi integer
= 2 byte, maka dibutuhkan memori.
2. Pendeklarasian Matriks
Selum matriks digunakan untuk menyimpan data, terlebih dahulu matriks
dideklarasikan. Mendeklarasikan matriks artinya menentukan nama ks. tipe data, dan
ukurannya. Pendeklarasian matriks di dalam teks ima ditulis di dalam bagian DEKLARASI.
Kata kunci yang dipakai
Ada beberapa cara pendeklarasian matriks :
1. Sebagai nama peubah
2. Sebagai tipe
3. Mendefinisikan ukuran maksimum matriks sebagai sebuah konstanta.
Dengan mendeklarasikan matriks ukuran maksimum di atas (Algorit 14.3), ukuran
matriks yang dibutuhkan dapat ditentukan pelaksanaan algoritma, asalkan jumlah baris dan
jumlah kolom- ditentukan tidak melebihi ukuran maksimum matriks nbarismaks dan
nkolommaks).
3. Pemrosesan Matriks
BAB 6
Algoritma Pencarian
Pencarian (searching) merupakan proses yang fundamental dalam pengolahan data.
Proses pencarian adalah menemukan nilai (data) tertentu di dalam sekumpulan data yang
bertipe sama (baik bertipe dasar atau bertipe bentukan). Sebagai contoh, untuk mengubah
(update) data tertentu, langkah pertama yang harus dilakukan adalah mencari keberadaan data
tersebut di dalam kumpulannya. Jika data yang dicari ditemukan, maka data tersebut dapat
diubah nilainya dengan data yang baru. Aktivitas awal yang sama juga dilakukan pada proses
penambahan (insert) data baru. Proses penambahan data dimulai dengan mencari apakah data
yang akan ditambahkan sudah terdapat di dalam kumparan. Jika sudah ada dan
mengasumsikan tidak boleh ada duplikasi data maka data tersebut tidak perlu ditambakan,
tetapi jika belum ada, maka tambahkan.
1. Spesifikasi Masalah
Pencarian Pertama-tama kita menspesifikasikan masalah pencarian di dalam larik. Di
dalam elemen yang bertipe sama dengan elemen larik L. Carilah x di dalam larik I. Diberikan
larik L yang sudah terdefinisi elemen-elemennya, dan x adalah Hasil atau keluaran dari
persoalan pencarian dapat bermacam-macam, Pencarian hanya untuk memeriksa keberadaan
x. Keluaran yang diinginkan misalnya pesan (message) bahwa x ditemukan atau tidak
ditemukan di dalam larik.
Contoh:
a. Hasil pencarian adalah indeks elemen larik. Jika x ditemukan, maka indeks dalam larik L,
maka index elemen larik tempat x berada diisikan ke dalam idx. Jika x tidak terdapat di
dalam larik L, maka idx diisi dengan harga khusus, misalnya -1.
Misalkan X = 68, maka idx = 7, dan bila x = 100, maka idx = -1
b. Hasil pencarian adalah sebuah nilai boolean yang menyatakan status hasil pencarian. Jika s
ditemukan, maka sebuah peubah bertipe boolean misalnya "ketemu", diisi dengan nilai true,
sebaliknya "ketemu" diisi dengan nilai false. Hasil pencarian ini selanjutnya disimpulkan
pada bagian pemanggilan prosedur.
Contoh: Perhatikan larik L di atas:
Misalkan x = 68, maka ketemu = true, dan bila x = 100, maka ketemu false.
Untuk kedua macam keluaran b dan c di atas, kita mengonsult pencarian setelah proses
pencarian selesai dilakukan, bergantung kebutuhan. Misalnya menampilkan pesan bahwa x
ditemukan (atau ditemukan) atau memanipulasi nilai x.
2. Algoritma Pencarian Beruntun
Algoritma pencarian yang yang paling sederhana, yaitu metode pencarian beruntun
(sequential search). Nama lain algoritma pencarian beruntun adalah pencarian lurus (linear
search). Pada dasarnya, algoritma pencarian beruntun adalah proses membandingkan Setiap
elemen larik satu per satu secara berurutan, pai elemen yang dicari ditemukan, atau seluruh
elemen sudah diperiksa. mulai dari elemen pertama,
Terdapat dua versi algoritma pencarian beruntun. Pada algoritma sedangkan algoritma
versi kedua, aksi perbandingan dilakukan di dalam pertama, aksi perbandingan dilakukan
sebagai kondisi pengulangan, badan pengulangan. Versi pertama tidak menggunakan peubah
boolean dalam proses pencarian, sedangkan versi kedua menggunakan peubah boolean.
Untuk masing-masing versi kita tuliskan dua macam algoritmanya berdasarkan hasil yang
diinginkan: indeks larik atau nilai boolean.
Kinerja Algoritma Pencarian Beruntun
Secara umum, algoritma pencarian beruntun berjalan lambat. Waktu pencarian
sebanding dengan jumlah elemen larik. Misalkan larik berukuran n elemen. Maka, pada kasus
di mana x tidak terdapat di dalam larik atau ditemukan pada elemen yang terakhir, kita harus
melakukan perbandingan dengan seluruh elemen larik, yang berarti jumlah perbandingan
yang terjadi sebanyak n kali. Kita katakan bahwa waktu pencarian dengan algoritma 100.000
buah elemen, maka kita harus melakukan perbandingan sebanyak 100.000 buah elemen.
Andaikan satu operasi perbandingan elemen larik membutuhkan waktu o.01 detik, maka
untuk 100.000 buah perbandingan diperlukan waktu sebesar 1000 detik atau 16,7 menit.
Semakin banyak elemen larik, semakin lama pula waktu pencariannya. Karena itulah
algoritma pencarian beruntun tidak bagus untuk volume data yang besar.
3. Algoritma Pencarian Bagidua
Pencarian pada data yang terurut menunjukkan kinerja yang lebih baik daripada
pencarian pada data yang belum terurut. Hal ini, sudah kita bicarakan pada metode pencarian
beruntun untuk data yang sudah terurut. Data yang terurut banyak ditemukan di dalam
kehidupan sehari-hari. Data nomor telepon di dalam buku telepon misalnya, sudah terurut
berdasarkan nama/instansi pelanggan telepon A sampai Z. Data karyawan diurut berdasarkan
nomor induknya dari nomor kecil ke nomor besar. Data mahasiswa diurut berdasarkan NIM
(Nomor AS 2, dan sebagainya.
Terdapat algoritma pencarian pada data terurut yang paling mangkus (efficient), yaitu
algoritma pencarian bagidua atau pencarian biner (binary search). Algoritma ini digunakan
untuk kebutuhan pencarian dengan waktu yang cepat. Sebenarnya, dalam kehidupan sehari-
hari kir sering menerapkan pencarian bagidua. Untuk mencari arti kata terte dalam kamus
misalnya kamus bahasa Inggris), kita tidak membuka 1 itu dari halaman awal sampai
halaman akhir satu per satu, namun kita mencarinya dengan cara membelah atau membagi
dua buku itu. Jika kata yang dicari tidak terletak di halaman pertengahan itu, kita mencari lagi
di belahan bagian kiri atau belahan bagian kanan dengan cara membagi dua belahan yang
dimaksud. Begitu seterusnya sampai kata yang dicari ditemukan. Hal ini hanya bisa
dilakukan jika kata-kata di dalam kamus sudah terurut.
Prinsip pencarian dengan membagi data atas dua bagian mengilhani algoritma
pencarian bagidua. Data yang disimpan di dalam larik harus sudah terurut. Untuk
memudahkan pembahasan, selanjutnya kita misalkan elemen larik sudah terurut menurun.
Dalam proses pencarian, kita memerlukan dua buah indeks larik, yaitu indeks terkecil dan
indeks terbesar. Kita menyebut indeks terkecil sebagai indek ujung kiri lirik dan terbesar
sebagai indeks ujung kanan larik. Istilah "kiri" dan "kanan" dinyatakan
dengan membayangkan elemen larik terentang horizontal.
Buku Pembanding
1. Judul : Algoritma dan Pemograman Dalam Bahasa
Pascal Dan C
2. Pengarang : Renaldi Munir dan Leony Lidya
3. Penerbit : Informatika
4. Kota Terbit : Bandung
5. Tahun Terbit : 2003
6. ISBN : 602-1514-91-7
7. Halaman : 682 halaman
BAB I PENCARIAN
Pencarian (searching) merupakan proses yang fundamental dalam pemrograman,
Proses pencarian adalah menemukan nilai (data) tertentu di dalam sekumpulan nilai yang
bertipe sama (tipe dasar atau tipe bentukan). Algoritma pencarian yang akan dibahas dimulai
dari algoritma yang paling sederhana (pencarian beruntun) sampai pada algoritma pencarian
yang lebih “maju" yaitu pencarian bagidua.
1.1 Tinjauan Singkat Larik
Di dalam Buku 1 kita sudah membahas mengenai larik. Di sini kita tinjau (review)
kembali sekilas tentang larik. Larik merupakan tipe data terstruktur. Sebuah larik dapat
diumpamakan sebagai sekumpulan kotak yang menyimpan sekumpulan elemen bertipe sama
secara berturutan (sequential) di dalam memori utama komputer.
Setiap elemen larik data diacu melalui indeksnya. Karena elemen disimpan secara
berturutan, indeks larik haruslah suatu tipe yang juga mempunyai keterurutan (ada suksesor
dan ada predesesor), misalnya integer, karakter, atau tipe data enumerasi. Jika indeksnya
adalah integer maka keterurutan indeks sesuai dengan urutan integer. Jika indeks larik adalah
karakter maka keterurutan indeks sesuai dengan urutan karakter. Jika indeks larik adalah
suatu enumerasi maka keterurutan indeks sesuai dengan urutan elemen dalam enumerasi
tersebut. Tiap elemen larik langsung diakses dengan menspesifikasikan nama larik berikut
indeksnya. Pendefinisikan larik (nama dan tipenya) di dalam bagian deklarasi (dengan
mengambil contoh larik pada Gambar 1.1) adalah sebagai berikut
Di dalam Buku 2 ini, algoritma pencarian elemen tertentu di dalam larik akan dibahas
lebih mendalam. Karena larik adalah struktur internal (yaitu, terdapat di dalam memori
utama), maka pencarian elemen di dalam larik disebut juga pencarian internal. Ada internal
berarti ada eksternal. Sekadar pengetahuan saja, pencarian eksternal adalah pencarian
terhadap sekumpulan data yang disimpan di dalam memori sekunder seperti tape atau disk.
Pencarian eksternal dilakukan jika data yang disimpan sangat besar sehingga tidak
muat jika akan disalin ke dalam memori. Pada pencarian secara eksternal, pencarian yang
sesungguhnya tetap dilakukan di dalam memori utama. Caranya adalah dengan membagi
sekumpulan data yang terdapat di dalam arsip menjadi beberapa blok data sedemikian rupa
sehingga setiap blok mempunyai ukuran yang tidak lebih besar dari ukuran memori yang
tersedia. Setiap blok kemudian disalin ke dalam memori utama dan elemennya diperiksa satu
persatu.
1.2 Definisi Persoalan Pencarian di dalam Larik
Mula-mula kita harus mendefinisikan persoalan pencarian di dalam larik. Di dalam Bab ini
kita mendefinisikan persoalan pencarian sebagai berikut:
Hasil atau keluaran dari persoalan pencarian dapat bermacam-macam, bergantung pada
kebutuhan yang diinginkan, misalnya
a. Pesan bahwa X ditemukan atau tidak ditemukan di dalam larik.
write(X, ‘ditemukan!’) atau write(X, ‘tidak ditemukan’ )
b. Indeks elemen larik
Jika X ditemukan, maka simpan indeks larik tempat X ditemukan ke dalam peubah IDX. Jika
X tidak terdapat di dalam larik L, IDX diisi dengan harga 0.
c. Peubah boolean _.
Jika X ditemukan, maka sebuah peubah boolean, misalnya “ketemu”, diisi dengan nilai true,
sebaliknya “ketemu” diisi dengan nilai false.
Algoritma pencarian yang akan dibahas di dalam Bab ini adalah:
1. Pencarian beruntun (sequential search).
2. Pencarian bagidua (binary search).
1.3 Pencarian Beruntun ( Sequential Search }
Di dalam Buku 1 kita telah mempelajari algoritma pencarian yang paling sederhana,
yaitu pencarian beruntun. Di dalam Bab ini kita kemukakan kembali pencarian beruntun.
Pada dasarnya, pencarian beruntun adalah proses membandingkan setiap elemen larik satu
per satu secara beruntun, mulai dari elemen pertama, sampai elemen yang dicari ditemukan,
atau seluruh elemen sudah diperiksa.
1.4 Pencarian Bagidua € Simary Search }
Pencarian bagidua atau pencarian biner (binary search) adalah metode pencarian yang
diterapkan pada sekumpulan data yang sudah terurut (terurut menaik atau terurut nmenurun).
Metode ini digunakan untuk kebutuhan pencarian dengan waktu yang cepat. Data yang
terurut adalah syarat mutlak penerapan algoritma pencarian bagidua. Memang, syarat ini pula
yang merupakan kelemahan algoritma pencarian bagidua, berbeda pada pencarian beruntun
yang dapat diterapkan baik pada data terurut maupun pada data yang tidak terurut. Namun,
sebenarnya data yang sudah terurut banyak ditemukan di dalam kehidupan sehari-hari. Data
nomor telepon di buku telepon misalnya, sudah terurut berdasarkan nama/instansi pelanggan
telepon dari A sampai Z. Salah satu keuntungan data yang terurut adalah memudahkan
pencarian, yang dalam hal ini menggunakan pencarian bagidua. Sebenarnya, dalam
kehidupan sehari-hari kita sering menerapkan pencarian bagidua. Untuk mencari arti kata
tertentu di dalam kamus (misalnya kamus Bahasa Inggris), kita tidak membuka kamus itu
dari halaman awal sampai halaman akhir satu per satu, namun kita mencarinya dengan cara
membelah atau membagi dua buku itu.
1.5 Algoritma Pencarian pada Larik Terstruktur
Algoritma pencarian yang dibahas sebelum ini menggunakan larik dengan elemen-
elemen bertipe sederhana. Pada kebanyakan kasus, elemen larik sering bertipe terstruktur.
Contoh, TabMhs adalah sebuah larik yang elemennya menyatakan nilai ujian seorang
mahasiswa untuk suatu mata kuliah (MK) yang ia ambil. Data setiap mahasiswa adalah NIM
(Nomor Induk Mahasiswa), nama mahasiswa, mata kuliah yang ia ambil, dan nilai mata
kuliah tersebut.
1.6 Algoritma Pencarian Beruntun atau Pencarian Bag dua
Sebagai perbandingan antara algoritma pencarian beruntun dengan pencarian bagidua,
tinjaulah kasus X tidak ditemukan di dalam larik. Misalkan, untuk larik yang berukuran N
elemen:
™ algoritma pencarian beruntun melakukan pembandingan elemen_larik sebanyak N kali,
™ algoritma pencarian bagidua melakukan pembandingan sebanyak "1og(N) kali.
Karena “log(N) < N untuk N yang besar, maka algoritma pencarian bagidua lebih cepat
daripada algoritma pencarian beruntun. Karena itu, algoritma pencarian bagidua lebih disukai
untuk mencari data pada sekumpulan harga yang sudah terurut ketimbang algoritma
pencarian beruntun. Namun untuk data yang tidak terurut, kita hanya dapat menggunakan
algoritma pencarian beruntun.
1.7 Algoritma Pencarian Beruntun dan Pencarian Bagi dua dalam Bahasa PASCAL
dan Bahasa 6
Dengan andaian bahwa pembaca sudah memahami konversi dari notasi algoritmik ke notasi
bahasa PASCAL dan bahasa C (lihat Buku 1), di bawah ini disajikan algoritma pencarian
yang telah dikemukakan di atas dalam kedua bahasa tersebut.
BAB II PENGURUTAN
Di dalam Bab 1 kita sudah mempelajari salah satu algoritma pencarian, yaitu
algoritma pencarian bagidua. Algoritma pencarian tersebut mensyaratkan elemen larik harus
sudah lebih dahulu sebelum proses pencarian dilakukan. Bagaimana cara mengurutkan
elemen Jarik tidak dijelaskan di dalam Bab | tersebut. Di dalam Bab 2 ini kita akan
mempelajari beberapa algoritma pengurutan data. Sampai saat ini sudah terdapat puluhan
algoritma pengurutan, namun tidak semua algoritma pengurutan akan dikemukakan di sini.
Hanya beberapa pengurutan sederhana yang akan dijelaskan. Kelak algoritma pengurutan
yang lebih rumit akan diberikan pada pembahasan algoritma tingkat lanjut pada seri buku
algoritma yang lain.
2.1 Definisi Pengurutan
Pengurutan (sorting) adalah proses mengatur sekumpulan obyek menurut urutan atau susunan
tertentu [WIR76]. Urutan obyek tersebut dapat menaik (ascending) atau menurun
(descending). Bila N buah obyek (atau data) disimpan di dalam Jarik L, maka pengurutan
menaik berarti menyusun elemen larik sedemikian sehingga: L{1] <L[2] $ L[3] s... < L[N]
Sedangkan pengurutan menurun berarti menyusun elemen larik sedemkian sehingga:
L{1] 2 L[2] 2>L[3] 2... 2 L[N]
Data yang diurut dapat berupa data bertipe dasar atau tipe rekaman. Jika data bertipe
rekaman, maka harus dijelaskan berdasarkan field apa data tersebut diurutkan. Field yang
dijadikan dasar pengurutan dikenal sebagai field kunci. Di bawah ini beberapa contoh data
yang terurut
(i) 23, 27, 45, 67, 100, 130, 501
(data integer terurut menaik)
(ii) 50.27, 31.009, 20.3, 19.0, -5.2, -10.9
(data rii] terurut menurun)
Pengurutan memang sangat relevan dan merupakan aktivitas yang sangat penting
berkaitan dengan pemrosesan data, Bahkan pengurutan telah banyak dilakukan dengan
bantuan alat. Misalnya di kantor pos, penyortiran surat berkode pos dilakukan terotomatisasi
dengan menggunakan mesin penyortir. Adanya kebutuhan terhadap proses pengurutan
memunculkan bermacam-macam metode pengurutan yang bertujuan untuk mendapatkan
metoda pengurutan yang optimal dalam beberapa hal.
2.2 Pengurutan Internal dan Pengurutan Eksternal
Seperti halnya pada pencarian, pengurutan juga ada yang internal dan eksternal.
1. Pengurutan intemal, yaitu pengurutan terhadap sekumpulan data yang disimpan di dalam
memori utama komputer. Umumnya struktur internal yang dipakai untuk pengurutan internal
adalah larik, sehingga pengurutan internal disebut juga pengurutan larik.
2. Pengurutan eksternal, yaitu pengurutan data yang disimpan di dalam memori sekunder,
biasanya data bervolume besar sehingga tidak mampu dimuat semuanya dalam memori
komputer, disebut juga pengurutan arsip (file), karena struktur eskternal yang dipakai adalah
arsip.
Banyak algoritma pengurutan yang telah ditulis orang. Hal ini menunjukkan bahwa
persoalan pengurutan adalah persoalan yang kaya dengan solusi algoritmik. Algoritma
pengurutan yang telah dikenal secara luas antara lain : Bubble Sort, Selection Sort (Maximum
Sort dan Minimum Sort), Insertion Son, Heap Sort, Shell Sort, Quick Sort, Merge Sort, Radix
Sort, Tree Sort, SSO Weis
Munculnya algoritma pengurutan yang bermacam-macam itu menunjukkan bahwa
kajianmengenai pengurutan menarik penelitian banyak ilmuwan komputer. Penelitian
tersebut pada intinya berusaha menemukan algoritma pengurutan yang lebih cepat, karena
dari hari ke hari dirasakan pentingnya algoritma pengurutan yang cepat seiring semakin
besarnya volume data yang dikelola.
Di dalam Bab ini kita hanya membahas tiga buah algoritma pengurutan sederhana dan
mendasar, yaitu:
1. Algoritma Pengurutan Gelembung (Bubble Sort)
2. Algoritma Pengurutan Pilih (Selection Sort)
3. Algoritma Pengurutan Sisip (/nsertion Sort)
2.3 Pengurutan Gelembung
Metode pengurutan gelembung (bubble sort) diinspirasi oleh gelembung sabun yang
berada di atas permukaan air. Karena berat jenis gelembung sabun lebih ringan daripada berat
jenis air, maka gelembung sabun selalu terapung ke atas permukaan. Secara umum, benda-
benda yang berat akan terbenam dan benda-benda yang ringan akan terapung ke atas
permukaan.
Prinsip pengapungan di atas juga digunakan pada pengurutan gelembung. Apabila
kita menginkan larik terurut menaik, maka elemen larik yang berharga paling kecil
"diapungkan", artinya diangkat ke “tas” (atau ke ujung kiri larik) melalui proses pertukaran.
Proses pengapungan ini dilakukan sebanyak N-1 langkah (pass) dengan N adalah ukuran
larik. Pada akhir setiap langkah ke-I, larik L[1..N] akan terdiri atas dua bagian yaitu bagian
yang sudah terurut, yaitu L[1..I], dan bagian yang belum terurut, L{I+1..N] (Gambar 2.1).
Setelah langkah terakhir, diperoleh larik L[1..N] yang terurut menaik.
2.4. Komentar Mengenal Pangurutan Pilih
Dibanding dengan pengurutan gelembung, pengurutan pilih memiliki kinerja yang lebih baik.
Operasi pertukaran hanya sekali saja dilakukan pada setiap pass sehingga waktu pengurutan
dapat dikurangi.
2.5 Pengurutan Sisip
Dari namanya, pengurutan sisip (insertion sort) adalah metode pengurutan dengan cara
menyisipkan elemen larik pada posisi yang tepat. Pencarian posisi yang tepat dilakukan
dengan melakukan pencarian beruntun di dalam larik. Selama pencarian posisi yang tepat
dilakukan pergeseran elemen larik. Algoritma pengurutan ini tepat untuk persoalan
menyisipkan elemen baru ke dalam sekumpulan elemen yang sudah terurut.
2.6 Algoritma Pengurutan dalam Bahasa PASCAL dan Bahasa C
Dengan andaian bahwa pembaca sudah memahami konversi dari notasi algoritmik ke notasi
bahasa PASCAL dan bahasa C (lihat Buku 1), di bawah ini disajikan algoritma pengurutan
yang telah dikemukakan di atas dalam kedua bahasa tersebut.
Masih banyak matriks lain yang terdapat di dalam bidang matematika, seperti matriks
transformasi, matriks permutasi, dan sebagainya. Tidak hanya pada bidang matematika,
matriks juga digunakan secara luas pada bidang lainnya. Di dalam Bab 3 ini kita akan
mempelajari struktur matriks dan beberapa algoritma pemrosesan matriks.
3.1 Definisi Matriks
Matriks adalah struktur penyimpanan data di dalam memori utama yang setiap
individu elemennya diacu dengan menggunakan dua buah indeks (yang biasanya
dikonotasikan dengan baris dan kolom). Sebagaimana halnya pada larik, di dalam buku ini
kita menggambarkan matriks sebagai sekumpulan kotak bujursangkar yang tersusun berjajar
pada setiap baris dan setiap kolom. Susunan bujursangkar seperti itu sering dinamakan juga
grid.
Gambar 3.1 memperlihatkan matriks yang terdiri dari 5 buah baris dan 4 buah kolom.
Angka 1, 2, 3, 4 (dan 5) menyatakan indeks baris dan indeks kolom. Elemen yang diarsir
menyatakan elemen pada baris ke-2 dan kolom ke-3 . Karena adanya dua buah indeks
tersebut, matriks disebut juga larik dwimatra (matra = dimension). Istilah “dwimatra”, “baris”
dan “kolom” hanyalah untuk memudahkan pengertian kita memahami struktur lojik matriks,
sebab representasi matriks di dalam memori utama komputer tetap sebagai deretan sel yang
terletak berturutan sebagaimana pada larik biasa.
Seperti halnya pada larik biasa, pemrosesan matriks dilakukan secara beruntun
(sequential), Namun karena secara lojik elemen matriks disusun dalam baris dan kolom,
maka pemrosesan matriks juga dilakukan per baris dan per kolom. Karena ada dua buah
indeks, maka harus diputuskan indeks mana yang “nilainya tetap” selama indeks yang lain
“dijalankan”. Cara pemrosesan yang umum adalah menelusuri matriks baris per baris, yang
pada setiap baris melakukan proses terhadap elemen pada setiap kolomnya (kita namakan
pemrosesan “per baris per kolom”). Karena itu, algoritma pemrosesan matriks membutuhkan
kalang bersarang (nested loop), satu kalang untuk tiap matra. Kalang terluar digunakan untuk
memproses baris, sedangkan kalang terdalam untuk memproses kolom-kolom pada baris
yang sedang diacu.
Arah Beruntun
Arsip Beruntun
Memori utama komputer tidak menyimpan informasi secara permanen . begitu komputer
dimatikan, akan informasi yang dimasukkan di dalam memori utama komputer pun hilang.
agar informasi tetap dapat digunakan dan dimanipulasi di lain waktu , maka informasi
tersebut harus disimpan di dalam media penyimpanan permanen yang itu sering dinamakan
juga memori sekunder komputer. media penyimpanan yang sudah dikenal adalah disk
(seperti disket , hard disk, CD dan Tab )
Berbeda dengan memori utama ke memori sekunder dapat menyimpan data dalam jumlah
yang sangat besar. teknologi media penyimpanan saat ini sudah berhasil membuat disk
dengan kapasitas sampai orde GB . sementara memori utama baru dapat menampung
informasi dalam orde MB. hanya saja , pengaksesan informasi di dalam media penyimpanan
sekunder relatif lebih lambat daripada pengaksesan di memori utama.
Informasi yang disimpan di dalam media penyimpanan sekunder dikelompokkan dalam
bentuk arsip (file). Satu buah arsip atau lebih menyimpan informasi berkategori sama.
Misalnya, data karyawan disimpan di dalam arsip karyawan, data properti barang
disimpan di dalam arsip properti, data keuangan disimpan di dalam arsip keuangan, dan
sebagainya. Setiap arsip dikenali melalui namanya sehingga dua buah arsip atau lebih
tidak boleh mempunyai nama yang sama, dengan kata lain nama arsip harus unik.
Struktur arsip memungkinkan kita menyimpan data secara permanen dan mengaksesnya
kembali bila perlu. Banyak aplikasi yang membutuhkan kemampuan ini.
4.1. Definisi Arsip Beruntun
Arsip beruntun adalah sekumpulan rekaman bertipe sama yang yang diakses secara
berurutan mulai dari rekaman pertama sampai dengan rekaman yang terakhir. Rekaman di
dalam arsip beruntun diakses satu per satu, rekaman demi rekaman, secara searah. Gambar
4.1 memperlihatkan gambaran lojik pengaksesan arsip beruntun. Setiap kotak pada gambar
tersebut menyatakan sebuah rekaman. Untuk mengatasi masalah ini, maka suatu arsip
beruntun selalu mempunyai sebuah rekaman fiktif yang berfungsi sebagai "tanda" akhir
arsip. Bila pembacaan arsip menemui tanda tersebut, maka pemrosesan arsip dihentikan.
Untuk selanjutnya, rekaman fiktif tersebut kita namakan TANDA. Program pembacaan
rekaman harus dapat mengenali TANDA. Fungsi TANDA pada arsip sama dengan fungsi
karakter"." pada pita karakter. Seperti yang sudah kita pelajari dalam Buku 1, pembacaan
pita berakhir bila karakter titik telah dibaca, yang berarti ujung pita telah dicapai.
Skema pembacaan arsip beruntun dengan penanganan kasus arsip kosong. Misalnya
kalau arsip kosong dituliskan pesan bahwa “arsip kosong” atau pesan lainnya.
Skema pemrosesan beruntun tanpa penanganan kasus kosong. Tidak ada aksi apa
pun yang dilakukan bila arsip kosong. Jika arsip kosong, maka proses pembacaan
dihentikan.
4.6. Contoh Kasus: Pengelolaan Data Mahasiswa
Sebuah arsip beruntun KULIAH akan diisi data nilai seluruh mata kuliah yamg diambil
mahasiswa pada satu semester. Satu orang mahasiwa dapat memiliki beberapa buah nilai
karena dalam satu semester ia mengambil beberapa mata kuliah dan setiap mahasiswa
tidak sama mata kuliahnya. Rekaman dengan NIM yang sama disimpan berturutan.
BAB 5 SENARAL
Senarai digunakan untuk menyimpan sekumpulan data yang bertipe sama
(bilangan,
string atau tipe terstruktur). Secara teoritis, jumlah elemen senarai tidak terbatas, tetapi
seacra fisik hanya dibatasi oleh jumlah memori yang masih tersedia. Setiap elemen di
dalam senarai mempunyai keterurutan tertentu (ada elemen predesesor atau elemen
pendahulunya, dan ada suksesor atau elemen berikutnya).
Elemen pada senarai terurut secara lojik. Untuk mengurutkan data secara lojik pada
senarai digunakan alamat yang berisi alamat elemen berikutnya dalam urutan sehingga
membentuk suatu rangkaian lojik yang menghubungkan elemen senarai yang satu dengan
elemen senarai yang lainnya. Oleh sebab itu senarai disebut juga dengan senarai berkait
(linked list atau linkage list). Sebuah senarai mempunyai dua bagian. Bagian pertama
adalah Kepala (head). Kepala senarai terutama digunakan untuk menyimpan alamat elemen
pertama atau elemen elemen terakhir sebuah senarai. Bagian kedua dari senarai adalah
badan senarai. Badan senarai berisi kumpulan elemen senarai. Jumlah elemen senarai tidak
dibatasi tetapi disesuaikan dengan jumlah elemen aktual yang diperlukan selama kapasitas
memori memungkinkan.
5.1. Definisi Senarai
Konsep senarai berasal dari bidang matematika. Secara
matematis, senarai adalah barisan
nol atau lebih elemen yang bertipe sama [AHO87).
Dalam matematika, senarai
dinyatakan sebagai runtunan elemen yang dipisahkan dengan tanda koma, yaitu:
yang dalam hal ini, n > 0, dan setiap ai dari tipe tertentu. Dengan n > 0, berarti a, adalah
elemen pertama senarai, dan An, adalah elemen terakhir senarai. Banyaknya elemen dalam
senarai adalah n dan disebut dengan panjang senarai.
Setiap elemen di dalam senarai mempunyai predesesor dan suksesor, a; adalah predeseor
dj+1, dan a; adalah suksesor dj-i. Kita katakan bahwa elemen a; berada pada indeks posisi
i. Elemen pertama, a, tidak mempunyai predesesor, begitu juga elemen terakhir, an, tidak
mempunyai suksesor. Pada contoh 1 di atas, 89 adalah elemen ke-empat yang berada pada
indeks posisi 4, predesesornya adalah 67, dan suksesornya 12. Panjang senarai adalah
enam. Elemen pada badan senarai terdiri dari dua bagian yaitu bagian informasi atau data
dan bagian alamat. Dalam notasi algoritmik, tipe elemen senarai dinyatakan sebagai tipe
terstruktur sebagai berikut:
type ElmSenarai : record <Info : TipeInfo, Next : Alamat>
5. 2. Penelusuran Senarai
Senarai adalah sekumpulan elemen yang nantinya perlu diproses. Operasi yang
mendasari pemrosesan senarai adalah penelusuran senarai, yaitu mengunjungi elemen
senarai satu per satu dan melakukan proses terhadap elemen tersebut. Penelusuran senarai
dimulai dari elemen pertama sampai dengan elemen terakhir (atau sampai elemen tertentu
yang diinginkan). Seperti yang sudah dijelaskan, senarai dikenali dari alamat elemen
pertamanya. Bila alamat elemen pertama diketahui, maka alamat elemen lainnya dapat
diketahui dengan mengikuti field Next. Penelusuran senarai berakhir bila Next berharga
Nil.
Terdapat dua skema umum yang digunakan dalam menelusuri elemen-elemen
senarai. Skema pertama melakukan suatu aksi khusus apabila senarai kosong, sedangkan
skema yang kedua tidak. Skema pertama menggunakan struktur pengulangan REPEAT-
UNTIL, sedangkan skema kedua menggunakan struktur pengulangan WHILE-DO.
4.2 Saran
Saran saya sebagai penulis ialah, bahwa setidaknya kita harus selalu konsisten dalam
belajar agar dapat bersaing di era globalisasi.
DAFTAR PUSTAKA
Munir, R.dan Lidya, L. 2003. Algoritma dan Pemograman dalam Bahasa Pascal dan C.
Bandung: Informatika.
Susanto, Kartono. 1995. Pemrograman Berorientasi Objek. Yogyakarta : Andi Offset.