Anda di halaman 1dari 34

Critical Book Review

Disusun Untuk Memenuhi Tugas Mata Kuliah Algoritma dan Pemograman Komputer

Dosen Pengampu : Drs.Juniar Hutahaean, M.Si

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.

Medan, Maret 2021

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 :

 Untuk mengetahui isi dari buku yang di riview


 Untuk mengetahui perbandingan antara buku utama dan buku pembanding

1.3 Manfaat Penulisan


Adapun manfaat makalah saya ini ialah :
 Mengetahui hasil review dari buku utama dan buku pembanding
 Menambah wawasan terhadap pengetahuan tentang algoritma.
BAB II
RINGKASAN ISI BUKU

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

Algoritma pemrosesan matriks pada umumnya adalah memanipulasi elemen- elemen


matriks. Pemrosesan matriks adalah proses berurutan (sekuensial). elemen tersebut. Elemen
matriks "dikunjungi" (traversal) lalu dilakukan aksi terhadap Elemen tersebut.
Di dalam upabab ini diberikan beberapa contoh algoritma pemrosesan teks. Untuk semua
algoritma yang diberikan, kita sepakati menggunakan.
Karena secara lojik elemen matriks disusun dalam susunan baris dan kolom, maka
pemrosesan matriks dilakukan per baris dan per kolom. Karena ada dua buah indeks, maka
kita harus memutuskan indeks mana vang "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 ada dua indeks, maka algoritma pemrosesan
matriks umumnya kalang bersarang (nested loop), satu kalang untuk tiap indeks. Kalang
terluar digunakan untuk memproses baris, sedangkan kalang terdalam untuk memproses
kolom-kolom pada baris yang sedang diacu.
Algoritma pemrosesan baris per kolom per baris :
1. Pengisian matriks tanpa petunjuk pembacaan
2. Pengisian matriks dengan menggunakan petunjuk pembaca
3. Menulis matriks
4. Penjumlahan dua buah matriks

4. Translasi Notasi Algoritmik Matriks Ke Dalam Bahasa Pascal Dan Bahasa C


Dibawah ini dituliskan beberapa algoritma pemrosesan matriks yang sudah dijelaskan
pada bagian sebelum ini dan sekarang diterjemahkan ke dalam bahasa pascal dan bahasa c.
1. Membaca matriks
2. Menulis matriks
3. Penjumlahan duah buah 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.

BAB III MATRIKS


Elemen dari tipe terstruktur seperti larik dapat distrukturkan lagi. Sebuah larik yang
setiap elemennya adalah larik lagi disebut matriks (matrix) [WIR76]. Matriks sudah dikenal
secara luas dalam berbagai bidang ilmu, terutama dalam bidang matematika. Matriks
identitas adalah contoh matriks yang dikenal secara umum, karena semua elemen
diagonalnya 1, yang lainnya 0,
lazim ditulis dalam bentuk persamaan matriks Ax = b, yang dalam hal ini A adalah
matriks koefisien dari ruas kiri persamaan, x adalah matriks kolom peubah dan b adalah
matrik kolom ruas kanan persamaan:

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.

Gambar 3.1 Matriks yang terdiri atas 5 baris dan 4 kolom.


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 acak (random) jika indeksnya (baris dan kolom)
diketahui, yang dalam hal ini indeks menyatakan posisi relatif di dalam kumpulannya.
3. Merupakan struktur data yang statik, artinya jumlah elemennya sudah ditentukan terlebih
dahulu di dalam kamus dan tidak bisa diubah selama pelaksanaan program.
Elemen matriks diacu dengan indeks baris dan indeks kolom. Jika indeks baris dinyatakan
dengan i dan indeks kolom dinyatakan dengan j, maka notasi algoritmik untuk mengacu
elemen pada baris i dan kolom j adalah nama_matriks[i, j]
Jika matriks pada Gambar 3.1 bernama M, maka elemen yang diarsir pada gambar itu adalah
M[2, 3]. Cara mengacu dengan peubah indeks hanya benar apabila nilai dari peubah indeks
tersebut sudah terdefinisi, misalnya M[p, 2], M(1, k], M[p, 9] hanya benar dengan syarat p, k,
dan q sudah terdefinisi nilainya.
Matriks pada Gambar 3.1 dapat digambarkan kembali dengan notasi setiap elemen-
elemennya pada Gambar 3.2.

Gambar 3.2 Matriks M dengan notasi setiap elemen-elemennya.


3.2 Penyimpanan Matriks di dalam Memori
Meskipun matriks merupakan larik dwimatra, namun representasinya di dalam
memori tetap sebagai deretan sel berturutan. Gambar 3.3 memperlihatkan representasi
matriks berukuran 4 x 4 di dalam memori. Angka 1, 2, 3, dan 4 menyatakan indeks elemen
relatif pada setiap “baris” (apa yang dimaksud dengan baris di sini adalah kelompok 4 buah
elemen).

Gambar 3.3 Representasi matriks 4 x 4 di dalam memori.


3.3 Pendeklarasian Matriks
Sebelum matriks digunakan untuk menyimpan data, terlebih dahulu matriks harus
dideklarasikan. Mendeklarasikan matriks artinya menentukan nama matriks, tipe datanya, dan
ukuran matriks. Pendeklarasian matriks di dalam teks algoritma ditulis di dalam bagian
DEKLARASI.
3.4 Pemrosesan Matriks
Algoritma pemrosesan matriks pada umumnya adalah manipulasi terhadap elemen-
elemen matriks. Memproses matriks artinya mengunjungi atau menelusuri setiap elemen
matriks dan melakukan aksi terhadap elemen tersebut. Di dalam upabab ini diberikan
beberapa contoh algoritma pemrosesan matriks. Untuk semua algoritma yang diberikan, kita
menggunakan deklarasi matriks sebagai berikut di bawah ini:

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.

4.3. Perintah Baku untuk Arsip Beruntun


Perintah baku untuk pengelolaan arsip beruntun adalah berupa prosedur atau fungsi yang
telah tersedia sehingga dapat langsung digunakan oleh pemrogram. Penggunaan perintah
dasar dilakukan dengan memanggil prosedur yang dimaksud. Pemrogram harus
mengetahui purwarupa (prototype) prosedur yang mendeskripsikan parameter dan keadaan
awal dan keadaan akhir prosedur. Perintah baku yang sudah tersedia untuk pengelolaan
arsip beruntun adalah:
4.4. Membuat Arsip Beruntun
Langkah pertama dalam membuat arsip adalah menyiapkan arsip untuk perekaman
(menggunakan perintah OPEN dengan Kode = 2). Langkah kedua adalah membaca data
yang akan direkam (misalnya pembacaan dari piranti masukan), barulah kemudian
menuliskan data tersebut ke dalam arsip (perintah WRITE). Jika sebuah arsip sudah
selesai diisi, arsip tersebut ditutup dengan perintah CLOSE.
4.5. Membaca Arsip Beruntun
Proses pembacaan arsip beruntun merupakan pencerminan dari proses pembuatan arsip.
Langkah pertama pertama dalam membaca arsip adalah menyiapkan arsip untuk pembacaan
(menggunakan perintah OPEN dengan Kode = 1). Terdapat dua skema umum pembacaan
arsip beruntun. Skema pertama menangani kasus arsip kosong secara khusus, sedangkan
skema kedua tidak. Skema mana di antara skema
1 dan skema 2 ini yang dipakai, bergantung pada spesifikasi persoalannya.

 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.

4.7. Menyalin Arsip


Rekaman di dalam suatu arsip dapat disalin (copy) ke sebuah arsip baru. Penyalinan dapat
dilakukan terhadap seluruh rekaman atau hanya rekaman tertentu saja. Di bawah ini kita
menuliskan dua buah algoritma penyalinan arsip. Algoritma pertama menyalin seluruh
rekaman MHSI ke arsip MHS2, sedangkan algoritma kedua hanya menyalin data
mahasiswa yang lulus pada suatu tahap pendidikan (seorang mahasiswa dikatakan lulus
bila IPK-nya di atas 2.0).

4.7. Penggabungan Arsip


Penggabungan arsip (merging) adalah menyalin rekaman yang disimpan di dalam dua
buah arsip berbeda ke dalam sebuah arsip baru. Penggabungan dapat dilakukan untuk
arsip yang belum terurut (berdasarkan field kunci tertentu) atau untuk arsip yang sudah
terurut. Cara penggabungan yang paling sederhana adalah penggabungan yang dilakukan
dengan meletakkan seluruh rekaman arsip yang kedua setelah rekaman terakhir arsip
pertama (concate). Cara penggabungan ini –lebih tepat disebut penyambungan- dilakukan
jika arsip yang dihasilkan tidak mesti terurut .

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.

 Skema pemerosesan beruntun 1


 Skema pemerosesan beruntun 2

5.3. Operasi-operasi Dasar pada Senarai


Operasi-operasi dasar pada senarai secara garis besar membuat operasi-operasi yang
sering atau umumnya diperlukan dalam pemrosesan senarai. Operasi-operasi dasar ini
dapat dikelompokkan menjadi beberapa kelompok bedasarkan fungsinya yaitu :
1. Membuat Senarai (create)
2. Memeriksa Status (state)
3. Penghapusan (remove)
4. Penambahan elemen baru (add)
5. Penyisipan (insertion)
6. Mengambil/Mengedit Informasi Elemen Senarai
(retrieval/modification)
7. Iterasi (iteration)
8. Pencarian (searching)
Pengelompokkan di atas mengacu pada pengelompokkan oleh kompilator
berorientasi
objek yang menyediakan template class untuk tipe bentukan senarai sepeti Visual C++,
dan Visual Basic.

 Membuat Senarai Kosong


Contoh skema pemrosesan beruntun yang dikemukakan sebelum ini mengandaikan
bahwa senarai sudah terdefinisi, yaitu, mungkin kosong atau tidak kosong. Jika
tidak
kosong, senarai minimal terdiri dari satu buah elemen. Pembentukan senarai selalu
dimulai dengan membuat senarai kosong, untuk selanjutnya senarai kosong ini siap
ditambah elemen-elemennya dengan operasi penyisipan.
 Memeriksa Status ( State ]
Terdapat dua operasi pemeriksaan yang sering digunakan dalam pemrosesan
senarai yaitu memeriksa apakah sebuah senarai kosong (empty) dan menghitung
jumlah elemen
senarai.
 Penghapusan ( Remove )
Seringkali elemen dihapus dari senarai karena tidak diperlukan lagi. Elemen yang
dihapus
mungkin terletak di Kepala, di tengah, atau di akhir senarai. Yang harus
diperhatikan,
akibat penghapusan mungkin menyebabkan senarai menjadi kosong, yaitu untuk
senarai
yang hanya terdiri dari satu elemen. Bila senarai menjadi kosong, maka alamat
elemen
pertama menjadi Nil. Terdapat beberapa operasi penghapusan yaitu pengahapusan
elemen yang di kepala, penghapusan elemen terakhir (ekor) dan penghapusan
elemen berdasarkan indeks posisi tertentu (elemen ke - k).
 Penambahan Elemen Baru Add )
Penambahan elemen dapat dilakukan di Kepala atau sesudah elemen terakhir (ekor).
Pada penambahan ini yang harus diperhatikan adalah apakah senarai dalam keadaan
kosong atau tidak.
 Menambah Elemen di Kepala
 Menambah Elemen setelah elemen akhir
 Penyisipan Elemen
Penyisipan di tengah senarai berarti menambahkan sebuah elemen yang alamatnya P
sesudah elemen lain yang alamatnya PredP. Sesudah operasi penyisipan, PredP
menjadi elemen predeseor P. Tidak ada perubahan alamat elemen pertama senarai S
akibat penyisipan tersebut. Penyisipan hanya dapat dilakukan jika senarai tidak
kosong.

 Mengambil Informasi Elemen Senarai ( Retrieval )


Pengambilan informasi elemen (info) kadang-kadang diperlukan untuk proses lebih
lanjut. Pengambilan informasi dapat dilakukan terhadap elemen pada Kepala,
elemen
terakhir dan elemen pada indeks posisi tertentu.
 Mengambil informasi elemen pertama
 Mengambil informasi elemen terakhir
 Mengambil informasi elemen ke – k
 Mengedit informasi
 Iterasi (literation)
Kelompok operasi pada iterasi ini berguna untuk penelusuran senarai berkait secara
beruntun. Operasi-operasi tersebut akan dikelola sebagai sekelompok fungsi yang
mengembalikan alamat, meliputi operasi untuk mendapatkan alamat elemen
pertama
(Kepala), alamat elemen terakhir (Ekor) dan alamat elemen suksesor sebuah
elemen.
Dalam pembahasan konsep lojik senarai ini manfaat fungsi-fungsi ini tidak
kelihatan
karena alamat bisa langsung diperoleh dari notasi (kecuali alamat elemen terakhir).
5.4. Operasi – Operasi Sineral

5.5. Operasi Terhadap Dua Buah Senarai


Operasi dasar yang telah dijelaskan di atas hanya dilakukan terhadap satu buah
senarai.
Kadang-kadang diperlukan juga operasi terhadap dua buah senarai atau lebih. Di sini akan
dikemukakan dua buah operasi saja, pertama menyambung (concat) dua kedua
membandingkan (compare) dua buah senarai.
BAB 6 ; RERRESENTASI FISIK DAN VARIASI SENARAL
6.1. Representasi Fisik Senarai Berkait
Senarai berkait yang telah kita pelajari pada bab 5 ini masih dalam dataran konseptual
sehingga belum bisa diprogram dengan komputer. Kita belum mempersoalkan “rupa” fisik
senarai itu, yaitu, representasinya di dalam memori.
Ada dua pilihan representasi fisik untuk senarai berkait: pointer dan larik. Dengan
representasi fisik yang pertama, alokasi memori untuk elemen senarai dilakukan secara
dinamis selama pelaksanaan program. Artinya, jika elemen baru dibutuhkan, memori untuk
elemen yang baru dialokasikan (selama memori yang tersedia masih mencukupi), dan bila
elemen senarai tidak diperlukan lagi, memori yang dipakai oleh elemen tersebut
dikembalikan lagi ke sistem (yang dimaksud sistem di sini adalah memory manager yang
terdapat pada sistem operasi).
Representasi fisik yang kedua umumnya digunakan bila bahasa pemrograman tidak
mempunyai tipe data pointer. Representasi fisik dengan larik bersifat statis. Kita harus
mendeklarasikan jumlah maksimum elemen larik untuk kebutuhan senarai yang kita
definisikan.
6.1.1. Tipe Pointer
Pointer adalah tipe dasar yang ranah nilainya adalah alamat di memori komputer.
Nama tipe : pointer Ranah nilai i alamat sel memori komputer
Tetapan : Satu-satunya tetapan adalah Nil, yang menunjukkan alamat tidak
terdefinisi.
Operator : operator perbandingan yang menghasilkan nilai boolean, yaitu operator
(sama dengan) dan # (tidak sama dengan)
Memori terdiri atas sekumpulan sel, dan setiap sel mempunyai alamat. Alamat yang
dimaksud adalah alamat fisik (berupa angka-angka dalam sistem heksadesimal). Dalam
pemrograman, pemogram tidak berhubungan langsung dengan alamat fisik karena sulit
diingat. Karena itu, pemrogram mendefinisikan nama untuk lokasi memori yang
menyimpan suatu nilai. Sebagai contoh, X adalah nama yang didefinisikan bertipe
integer:
X adalah peubah yang menyimpan harga bertipe integer. Pemrogram tidak peduli di sel
memori mana harga tersebut, namun agar sel memori dikenali, pemrogram memberi nama
sel memori tersebut dengan X. Sistemlah yang mengatur alamat fisik sel memori yang
diberi nama X itu (Gambar 6.1).
6.1.2. Representasi Senarai Berkait dengan Pointer
Representasi fisik dengan tipe pointer dapat dituliskan (dalam notasi algoritmik, Pascal
dan C) sebagai berikut :
Variasi Senarai
Terdapat beberapa jenis atau tipe senarai, yang secara umum dibedakan oleh :
1.
Alamat elemen pada Kepala (tipe kepala), ada yang hanya menyimpan alamat
elemen pertama (biasanya disebut dengan senarai dengan satu kepala), ada yang
menyimpan alamat elemen pertama dan sekaligus alamat elemen terakhir (biasanya
disebut dengan senarai dengan dua kepala). Pemilihan tipe kepala tergantung cara
akses terhadap badan senarai, jika pengaksesan badan senarai lebih banyak
dilakukan melalui elemen pertama maka pada Kepala cukup disimpan alamat
elemen pertama saja (tipe satu kepala), tetapi jika pengaksesan langsung melalui
elemen terakhir juga sering diperlukan maka dipilih tipe senarai dengan dua kepala
untuk mempercepat akses.
2.
Jumlah pointer pada setiap elemen senarai, tedapat senarai dengan satu (single)
penunjuk dan senarai dengan dua (double) penunjuk, disebut juga senarai dengan
penunjuk ganda. Pengelolaan senarai dengan satu penunjuk lebih mudah tetapi
mempunyai keterbatasan dalam mode pengaksesan elemen yaitu mode akses arah
maju (cara akses dengan menelusuri alamat suksesor) saja. Sebaliknya pengelolaan
senarai dengan penunjuk ganda lebih sulit tetapi akses elemen lebih fleksibel, dapat
mode akses arah maju (cara akses dengan menelusuri alamat suksesor) dan dapat
mode akses arah mundur (cara akses dengan menelusuri alamat predesor).
3.
Spesifikasi pointer pada elemen pertama atau elemen terakhir, dibedakan atas
senarai linear (yang badan senarainya membentuk garis), senarai sirkuler (yang
badan senarainya membentuk lingkaran). Pada senarai linear, alamat suksesor
elemen terakhir berisi suatu alamat yang tidak terdefinisi (nil) dan ada juga yang
berisi alamat elemen terakhir itu sendiri. Pada senarai sirkuler, alamat suksesor
elemen terakhir berisi alamat elemen pertama yang berarti elemen pertama sekaligus
merupakan suksesor elemen terakhir.

6.2 Variasi Senarai


Terdapat beberapa jenis atau tipe senarai, yang secara umum dibedakan oleh :
1. Alamat elemen pada Kepala (tipe kepala), ada yang hanya menyimpan alamat
elemen pertama (biasanya disebut dengan senarai dengan satu kepala), ada yang
menyimpan alamat elemen pertama dan sekaligus alamat elemen terakhir (biasanya
disebut dengan senarai dengan dua kepala). Pemilihan tipe kepala tergantung cara
akses terhadap badan senarai, jika pengaksesan badan senarai lebih banyak
dilakukan melalui elemen pertama maka pada Kepala cukup disimpan alamat
elemen pertama saja (tipe satu kepala), tetapi jika pengaksesan langsung melalui
elemen terakhir juga sering diperlukan maka dipilih tipe senarai dengan dua kepala
untuk mempercepat akses.
2. Jumlah pointer pada setiap elemen senarai, tedapat senarai dengan satu (single)
penunjuk dan senarai dengan dua (double) penunjuk, disebut juga senarai dengan
penunjuk ganda. Pengelolaan senarai dengan satu penunjuk lebih mudah tetapi
mempunyai keterbatasan dalam mode pengaksesan elemen yaitu mode akses arah
maju (cara akses dengan menelusuri alamat suksesor) saja. Sebaliknya pengelolaan
senarai dengan penunjuk ganda lebih sulit tetapi akses elemen lebih fleksibel, dapat
mode akses arah maju (cara akses dengan menelusuri alamat suksesor) dan dapat
mode akses arah mundur (cara akses dengan menelusuri alamat predesor).
3. Spesifikasi pointer pada elemen pertama atau elemen terakhir, dibedakan atas
senarai linear (yang badan senarainya membentuk garis), senarai sirkuler (yang
badan senarainya membentuk lingkaran). Pada senarai linear, alamat suksesor
elemen terakhir berisi suatu alamat yang tidak terdefinisi (nil) dan ada juga yang
berisi alamat elemen terakhir itu sendiri. Pada senarai sirkuler, alamat suksesor
elemen terakhir berisi alamat elemen pertama yang berarti elemen pertama sekaligus
merupakan suksesor elemen terakhir.
6.3. Variasi Senarai : Senarai dengan Penunjuk Ganda.
Senarai dengan pointer ganda dipilih bila banyak operasi yang memerlukan
predesesor. Sebagaimana telah kita pelajari, untuk menghapus elemen senarai perlu alamat
predesesornya, begitu juga untuk menyisipkan elemen. Untuk menghindari pencarian
predesesor, maka pada setiap elemen ditambahkan field baru yaitu field Prev. Field Prev
berisi alamat predesesor. Penambahan field baru ini menambah kebutuhan memori dan
membuat operasi terhadap senarai menjadi lebih kompleks.
BAB III
PEMBAHASAN
3.1 Kelebihan Buku
1.Penjelasan pokok pembahasan yang terdapat pada buku utama dan buku pembanding
dibahas secara lengkap
2.Buku utama dan pembanding sangat bagus untuk digunakan dalam bahan ajar
3.2 Kelemahan Buku
1.Buku utama hanya mengajarkan tentang teori saja tidak ada rumus dalam ringkasan buku
utama
2.Buku pembanding terlalu memaparkan materi yang sangat luas sehingga sangat sulit
untuk dipahami karena cakupan nya sangat luas dan rumit menurut saya
BAB IV
PENUTUP
4.1 Kesimpulan
Imperative program beranalogi dibawah bahasa pemograman yang memacu atau
berorientasi pada objek objek system informasi yang mengarah pada system informasi.
Pembuatan program program komputer dengan penguasaan data yang ada pada bahasa
pemograman untuk dikuasai agar menjadi seorang programmer handal. Beberapa sub dari
bidang pemograman imperative diantaranya adalah variable dan penugasan ; perintah tidak
struktur ; perintah tidak terstruktur ; subprogram, prosedur dan fungsi; dan penanganan
eksepsi. Mengenali dan memberi contoh variable dan penguasaaanya, mengenali bentuk
perintah tidak terstruktur, mengenali bentuk perintah terstruktur, dapat menjelaskan bentuk-
bentuk struktur control,dapat menuliskan subprogram, prosedur, dan fungsi, dan dapat
mengenali serta menjelaskan beberapa bentuk eksepsi dan penangananya.

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.

Anda mungkin juga menyukai