Anda di halaman 1dari 90

D K IKTAT ULIAH D K IKTAT ULIAH

L A OGIKA LGORITMA
Disusun oleh:
Candra Mecca Sufyana

LOGIKA ALGORITMA

I. Pendahuluan
Algoritma adalah jantung ilmu komputer atau informatika, karena banyak cabang
ilmu komputer yang diacu dalam terminologi algoritma. Oleh karena itu, alangkah baiknya
kita mengetahui karakteristik komputer dan hubunganya dengan algoritma secara umum.
Karateristik komputer secara umum:
Komputer terdiri dari rangkaian elektronik IC, Kawat Tembaga, mainboard, dll
Terdiri dari ribuan transistor (tergabung dalam IC) yang berisikan gerbang-gerbang logika
(AND,OR, NAND, NOR, dll)
Eksekusi dipicu dari adanya masukan (input) listrik berkisar 5 volt dan berupa TRUE /
FLASE
Aliran data berupa digit biner 1 dan 0, yang tersusun sesuai instruksi
Instruksi dibuat secara sistematis dan hirarkis, serta masuk akal (sesuai logika)
Agar instruksi dapat dimengerti dan bisa menghasilkan keluaran (output) sesuai
keinginan maka terdapat beberapa hal yang harus diperhatikan, yaitu:
Harus ada instruksi yang dimengerti oleh komputer
Komputer hanya terdiri dari rangkaian elektronik, karena itu hanya mengerti nilai 1 dan 0
Nilai 1 dan 0, dapat berupa rangkaian instruksi jika disusun dengan susunan yang
sistematis dan masuk akal untuk menyelesaikan masalah tertentu
Susunan masuk akal dikenal dengan istilah urutan instruksi bahasa yang dikenal oleh
komputer.
Karena itu pasti komputer punya bahasa, dan kita harus membuat bahasa yang
dimengerti oleh komputer.
Bahasa tersebut dikenal dengan istilah bahasa pemrograman.
Program komputer harus dibuat dengan urutan logika yang benar dan sesuai dengan
masalah yang ingin diselesaikan.


II. Definisi Logika & Algoritma
Logika dan algoritma merupakan kedua kata yang saling berhubungan satu dengan
yang lainya. Algoritma adalah sebuah istilah yang diadakan untuk menyelesaikan masalah
yang logis artinya masalah yang diuntai dalam bentuk pernyataan-pernyataan logika. Sehingga,
seyogyanya dengan hanya menyebutkan algoritma, secara implisit kita juga sudah berbicara
mengenai logika. Walaupun algoritma adalah jantung ilmu komputer, namun, jangan
beranggapan algoritma selalu identik dengan ilmu komputer saja. Dalam kehidupan sehari-
haripun banyak terdapat proses yang dinyatakan dalam suatu algoritma. Seperti contoh
sederhana ialah membuat mie rebus dan menjalankan motor. Susunan :
Cara Membuat mie rebus
Ambil Mie
Nyalakan kompor
Ambil wadah dan isi air
Panaskan air hingga mendidih
Masukkan Mie kedalam wadah
Aduk hingga matang
Angkat dan sajikan
Cara menjalankan sepeda motor
Masukkan kunci
Nyalakan starter motor
Panaskan mesin terlebih dahulu
Masukkan gigi
Tancap gas perlahan-lahan
Motor berjalan


Urutan logika untuk
menyelesaikan masalah tertentu
Algoritma

Instruksi yang dikenal oleh
komputer

Istilah
Diterjemahkan
oleh bahasa
pemrograman
Contoh :
PASCAL, C,
DELPHI, dll

Contoh tersebut memperlihatkan suatu masalah, masalah adalah pertanyaan atau
tugas yang kita cari jawabanya, yakni dalam hal ini adalah bagaimana cara membuat mie dan
menjalankan sepeda motor, kemudian kita mencari solusi berupa berbagai langkah
pernyataan yang masing-masing pernyataan disebut dengan parameter, dan keseluruhan dari
parameter tersebut disebut dengan instansi masalah. Sedangakan jawaban dari instansi
masalah tersebut, kita sebut dengan solusi. Jadi, dari pengertian diatas, kita dapat
menyimpulkan bahwa algoritma secara luas adalah prosedur yang berisi langkah-langkah
penyelesaian masalah. Kita lihat contoh selanjutnya:

Bagaimana caranya agar mobil dan pengemudi sampai di tujuan
Dari gambar ilustrasi
Berapa kemungkinan penyelesaian jalan yang dilalui ?
Anggap satu kemungkinan yang dipilih, tuliskan tahapan yang harus dilalui
Dari tahapan yang dibuat apakah menyelesaikan masalah ?
Dari pertanyaan yang diajukan, ada suatu hipotesa :
Untuk menyelesaikan suatu permasalahan pasti harus memiliki alur yang jelas dan tepat.
Dari alur yang dibuat pasti susunan / tahapan tersusun secara sistematis dan hirarkis
Susunan sistematis dan hirarkis pasti dapat menyelesaikan masalah tertentu
Keyakinan yang didapat :
Setiap menyelesaikan masalah harus menggunakan cara-cara sistematis dan terstruktur.
Cara-cara tersebut harus bisa dituliskan secara benar dan masuk akal. (Metode Ilmiah)
Simpulan :
Algoritma : urutan-urutan logis dari suatu pernyataan untuk menyelesaikan kasus /
masalah tertentu
Beberapa contoh diatas diharapkan memberikan pengertian tentang definisi
algoritma secara luas dalam kasus kehidupan sehari-hari, yang berhubungan dengan masalah,
parameter, instansi masalah yang berupa prosedur berisi langkah-langkah logis untuk
menghasilkan solusi sebagai jawaban atas permasalahan.
Secara spesifik, algoritma yang akan dibahas dalam mata kuliah ini adalah algoritma
yang berhubungan dengan komputer atau mesin yang sering disebut algoritma pemograman.
Kalau kita berbicara tentang algoritma pemograman maka terdapat dua pembelajaran penting
yang mesti dipahami yaitu memprogram dan bahasa pemograman.
Belajar Memprogram
Belajar memprogram belajar bahasa pemrograman
Belajar memprogram: belajar tentang strategi pemecahan masalah, metodologi dan
sistematikanya kemudian menuliskannya dalam notasi yang disepakati bersama
Belajar memprogram: bersifat pemahaman persoalan, analisis dan sintesis
Belajar memprogram, titik berat: designer program
Belajar Bahasa Pemrograman
Belajar bahasa pemrograman : belajar memakai suatu bahasa pemrograman, aturan
sintaks, tatacara untuk memanfaatkan instruksi yang spesifik untuk setiap bahasa
Belajar bahasa pemrograman , titik berat : coder
Jenjang bahasa pemrograman
Bahasa mesin (bahasa yang dikenal oleh mesin)
Bahasa assembler (bahasa yang disusun oleh bahasa mesin)
Bahasa menengah (bahasa yang disusun oleh kumpulan bahasa assembler atau bahasa mesin)
Bahasa tingkat tinggi (bahasa terstruktur yang disusun oleh bahasa menengah dan assembler)
Bahasa berorientasi objek (bahasa yang disusun menurut objek-objek, setiap objek dibuat oleh
suatu bahasa pemrograman tertentu)

Bahasa bertujuan sebagai alat komunikasi dengan lawan bicara, sehingga dalam bahasa
pemograman berarti bagaimana cara kita (manusia) berkomunikasi dengan mesin (komputer).
Nah, dalam menciptakan komunikasi yang baik diperlukan adanya pengertian dan
pemahaman tentang bagaimana cara berpikir lawan bicara kita dalam hal ini adalah komputer.
Bagaimana komputer berpikir ?
Komputer tidak dapat berfikir secara simultan terhadap sejumlah perintah
Komputer membaca kumpulan perintah secara serial mulai dari baris pertama hingga
baris terakhir yang prioritasnya tidak dapat dipertukarkan
Variabel tidak dapat dipergunakan secara terbalik
Sebagai contoh, silakan simak dan jawab kasus-kasus aritmetik berikut ini:
x = 10
y = x + z
z = 20

x = 10
x = 20
y = x
y = x * 2

10 = x
z = 20
y = x + z

x = 10
z = 20
x + z = y

x = 10
z = 20
y = x + z*2 - x*x

Berapakah y menurut anda (berfikir simultan) ?
Berapakah y menurut komputer (berfikir serial) ?

Dari berbagai contoh konsep diatas dapat disimpulkan bahwasanya algoritma
pemograman adalah Aliran pemikiran manusia yang simultan dituangkan ke dalam aliran
pemikiran komputer yang serial dalam bentuk tahap-tahap pemikiran yang sistematis dan logis.
Sstematis berarti teratur menurut sstem untuk menyelesaikan masalah.
Logis berarti sesuai dengan logika atau masuk akal. Perhatikan contoh berikut:
Ada 2 buah teko masing-masing berkapasitas 4 galon (teko A) dan 3 galon (teko B).
Tidak ada tanda yang menunjukkan batas ukuran pada kedua teko tersebut.
Ada sebuah pompa air yang akan digunakan untuk mengisikan air pada kedua teko
tersebut.
Permasalahannya: Bagaimanakah kita dapat mengisikan tepat 2 galon air ke dalam teko
yang berkapasitas 4 galon?


Penyelesaian: masalah ini mempunyai banyak kemungkinan penyelesaian. Salah satu
penyelesaian secara algoritmanya adalah:
1. Isi penuh teko A dengan air ( teko A berisi 4 galon air )
2. Tuangkan air dari teko A ke dalam teko B ( teko A berisi 1 galon air dan teko B berisi
3 galon air )
3. Buang seluruh air yang ada pada teko B ( teko B kosong )
4. Tuangkan air sisa yang berisi 1 galon pada teko A ke teko B ( teko A kosong dan
teko B berisi 1 galon air)
5. Isi penuh kembali galon A ( teko A terisi penuh 4 galon )
6. Tuangkan ke teko B yang sedang berisi 1 galon air hingga penuh ( sehingga teko A
dapat berisi 2 galon )
Contoh diatas adalah sebuah kasus logika yang dapat diselesaikan dengan algoritma yang
sistematis artinya urutanya benar dan sesuai, selain itu juga logis, artinya berbagi
parameternya mewujudkan instansi masalah yang memberikan solusi yang tepat

III. Sejarah Algoritma
Ditinjau dari asal usul katanya kata Algoritma sendiri mempunyai sejarah yang aneh.
Orang hanya menemukan kata Algorism yang berarti proses menghitung dengan angka arab.
Anda dikatakan Algorist jika anda menghitung menggunakan Angka Arab. Para ahli bahasa
berusaha menemukan asal kata ini namun hasilnya kurang memuaskan. Akhirnya para ahli
sejarah matematika menemukan asal kata tersebut yang berasal dari nama penulis buku arab
yang terkenal yaitu Abu Jafar Muhammad Ibnu Musa Al-Khuwarizmi. Al-Khuwarizmi
dibaca orang barat menjadi Algorism.
Al-Khuwarizmi menulis buku yang berjudul Kitab Al Jabar Wal Muqabala yang artinya
Buku pemugaran dan pengurangan (The book of restoration and reduction). Dari judul buku itu
kita juga memperoleh akar kata Aljabar (Algebra). Perubahan kata dari Algorism menjadi
3 galon
(teko B)
4 galon
(teko A)
Air
tak terbatas
Algorithm muncul karena kata Algorism sering dikelirukan dengan Arithmetic, sehingga akhiran
sm berubah menjadithm.
Karena perhitungan dengan angka Arab sudah menjadi hal yang biasa. Maka lambat
laun kata Algorithm berangsur-angsur dipakai sebagai metode perhitungan (komputasi) secara
umum, sehingga kehilangan makna kata aslinya. Dalam Bahasa Indonesia, kata Algorithm
diserap menjadi Algoritma.
Algoritma pertama kali digunakan (1950) oleh Euclid seorang matematikawan
Yunani, dalam bukunya yang berjudul Element yang didalamnya terdapat algoritma
Euclidean (Euclid algorithm), yang menuliskan langkah-langkah untuk menemukan common
great divisor (gcd), atau kita lebih mengenalnya dengan istilah faktor persekutuan terbesar
(FPB), dari dua buah bilangan bulat positif, m dan n.
Misalnya, m = 80 dan n =12. Semua faktor pembagi 80 adalah: 1, 2, 4, 5, 8, 10, 16, 20, 40, 80
Semua faktor pembagi 12 adalah 1, 2, 3, 4, 6, 12
Maka gcd (80,12) = 4. Langkah-langkah dengan menggunakan algoritma Euclidean adalah:
80 dibagi 12 hasilnya = 6, sisa 8
12 dibagi 8 hasilnya = 1, sisa 4
8 dibagi 4 hasilnya = 2, sisa 0
Pengertianya yaitu, karena pembagian terakhir menghasilkan 0, maka sisa pembagian terakhir
sebelum 0, yaitu 4, menjadi nilai gcd nya, yakni gcd(80,12).

ALGORITMA Euclidean:
{ Diberikan dua buah bilangan bulat positif, m dan n, (m n). algoritma Euclidean
mencari gcd dari kedua bilangan tersebut }
1. Jika n = 0 maka
m adalah jawabanya;
stop.
tetapi jika n 0
lanjutkan ke langkah 2
2. Bagilah m dengan n dan misalkan r adalah sisanya.
3. Ganti nilai m dengan nilai n dan nilai n dengan nilai r, lalu kembali ke
langkah 1

Menurut Donald E. Knuth dalam bukunya yang berjudul The Art of Computer
Programming, sebauah algoritma harus mempunyai lima unsur penting, yakni:
1. Finiteness: algoritma harus memiliki titik berhenti (stopping role).
2. Definiteness: Setiap langkah harus didefinisikan secara tepat, tidak boleh membingungkan
(ambiguous)
3. Input: Sebuah algoritma memiliki nol atau lebih input yang diberikan kepada algoritma
sebelum dijalankan
4. Output: Sebuah algoritma memiliki satu atau lebih output, yang biasanya bergantung
kepada input
5. Effectiveness: Setiap algoritma diharapkan miliki sifat efektif.

STUDI TENTANG ALGORITMA
Hal-hal yang akan dipelajari mengenai studi algoritma yaitu :
Bagaimana Merencanakannya: Merupakan suatu studi tentang teknik variasi design.
Bagaimana Menyatakannya: Menyatakannya dengan singkat, dibuat dalam bahasa
pemrograman yang terstruktur, misalnya Pascal, Bahasa C
Bagaimana Validitasnya: Memenuhi kebutuhan yang diinginkan, dan perhitungannya /
solusinya selalu benar untuk semua kemungkinan input yang legal.
Bagaimana Menganalisisnya: Perbandingan dari waktu perhitungan dan banyaknya
storage / memori yang digunakan (efisiensi)
Bagaimana Menguji suatu program : dilakukan pengujian terhadap kebenaran algoritma

Pemrograman Prosedural
Algoritma berisi urutan langkah-langkah penyelesaian masalah. Ini berarti Algoritma
adalah proses yang prosedural. Definisi Prosedural menurut Kamus Besar Bahasa Indonesia :
1. Tahap-tahap kegiatan untuk menyelesaikan suatu aktivitas.
2. Metode langkah demi langkah secara eksak dalam memecahkan suatu masalah.
Pada pemrograman prosedural, program dibedakan antara bagian data dengan bagian
instruksi. Bagian instruksi terdiri atas runtutan (sequence) instruksi yang dilaksanakan satu per
satu secara berurutan oleh pemroses. Alur pelaksanaan instruksi dapat berubah karena
adanya pencabangan kondisional. Data yang disimpan di dalam memori dimanipulasi oleh
instrusi secara beruntun atau prosedural. Paradigma pemrograman seperti ini dinamakan
pemrograman prosedural.
Bahasa-bahasa tingkat tinggi seperti Cobol, Basic, Pascal, Fortran dan C mendukung
kegiatan pemrograman procedural, karena itu mereka dinamakan juga bahasa procedural.
Selain paradigma pemrograman procedural, ada lagi paradigma yang lain yaitu pemrograman
berorientasi objek (Object Oriented Programming). Paradigma pemrograman ini merupakan trend
baru dan sangat populr akhir-akhir ini. Paradigma pemrograman yang lain adalah
pemrograman fungsional, pemrogramn deklaratif dan pemrograman konkuren. Pada
kesempatan ini penulis hanya menyajikan paradigma pemrograman procedural saja.

IV. Struktur Dasar Algorima
Seperti yang dijelaskan sebelumnya, algoritma berisi tahapan-tahapan pemikiran
yang sistematis dan logis. tahapan-tahapan pemikiran tersebut dideskripsikan dalam bentuk
langkah-langkah pelaksanaan suatu proses. Setiap langkah di dalam algoritma tersebut
dinyatakan dalam sebuah bentuk pernyataan (statement) atau istilah lainya adalah instruksi.
Dan program adalah kumpulan instruksi atau perintah yang disusun sedemikian rupa
sehingga mempunyai urutan nalar yang tepat untuk menyelesaikan suatu persoalan. (Menurut
P. Insap Santosa). Sebuah pernyataan berisi aksi (action) yang dilakukan, artinya bila
pernyataan dieksekusi (run) oleh pemroses, maka aksi yang bersesuaian dengan pernyataan
akan dikerjakan. Sebagai contoh, misalkan dalam algoritma terdapat pernyataan:
Tulis Piksi Ganesha is good Tulis Piksi Ganesha is good Tulis Piksi Ganesha is good Tulis Piksi Ganesha is good
Maka pernyataan tesebut dalam bentuk instruksi Tulis yang menggambarkan aksi menulis
pesan Piksi Ganesha is good. Contoh lainya:
Jika kamu = menarik maka tulis saya tertarik Jika kamu = menarik maka tulis saya tertarik Jika kamu = menarik maka tulis saya tertarik Jika kamu = menarik maka tulis saya tertarik
Terdiri dari dua aksi, yaitu membandingkan nilai variable kamu dengan menarik, dan aksi
tulis pesan saya tertarik , jika perbandingan itu benar.
Di dalam algoritma pun dikenal banyak bentuk pernyataan, seperti pernyataan ekspresi,
pernyataan pemilihan, pernyataan pengulangan, pernyataan prosedur, dll.


Konstruksi Dasar
Sebuah algoritma dapat dibangun dari tiga buah konstruksi dasar, yaitu runtunan,
pemilihan, dan pengulangan.








1. Runtunan (Sequence).
Sebuah runtunan terdiri dari satu atau lebih 'instruksi'. Tiap-tiap instruksi
dilaksanakan secara berurutan sesuai dengan urutan penulisannya. Sebuah instruksi baru bisa
dilaksanakan setelah instruksi sebelumnya selesai dilaksanakan. Urutan instruksi
menentukan keadaan akhir algoritma. Kalau urutannya diubah, kemungkinan besar hasil
akhirnya akan berubah.
Misal:
Seorang ibu berbelanja di mall. Dia melewati beberapa tokoyaitu toko perhiasan, took
baju, toko sepatu, dan toko tas. Ketika itu dia iseng! belilah dia satu set perhiasan mas.
Namun setelah berjalan beberapa meter dia berjumpa dengan toko tas. Karena dia
sadar kalau dirinya membutuhkan tas baru, dia akan menyesal dengan mengatakan
"seandainya toko perhiasan tadi ada setelah toko tas"
Itulah runtunan/runtutan yang menentukan keadaan akhir dari suatu proses
algoritma (contoh diatas ibu itu akhirnya beli perhiasan mas), jika runtunan tersebut dirubah bias
menyebabkan hasil tidak sama (ibu itu bisa tidak beli perhiasan mas).
Ada dua buah bejana, A dan B; bejana A berisi larutan kopi, bejana B berisi larutan
susu. Pertukarkan kedua isi bejana itu, sehingga A berisi larutan susu, dan B berisi
larutan kopi. Tidak boleh jadi kopi susu.
Bagaimana Algoritmanya? Jawabannya: ada tiga langkah, yaitu:

Runtunan
Pemilihan Pengulangan
1. Tuangkan larutan dari bejana A ke dalam bejana C. (cuci bersih dulu bejana A kalo bisa)
2. Tuangkan larutan dari bejana B ke dalam bejana A. (cuci juga bejana B)
3. Tuangkan larutan dari bejana C ke dalam bejana B. Selesai.....
Maka tidak jadi kopi susu, kecuali di minum isi kedua bejana itu dan mencampurnya
di perut.Dari langkah diatas diperlukan suatu bejana bantu yaitu bejana C, dalam Algoritma
variabel bantu tersebut diperbolehkan dan sangat dianjurkan untuk mempermudah suatu
penyelesaian proses.

2. Pemilihan ( Selection )
Dalam sebuah instruksi dikerjakan setelah 'kondisi' tertentu terpenuhi. Dalam
peristiwa sehari-hari sering disebut JIKA . MAKA .. , Misal :
JIKA mengantuk MAKA tidur
JIKA lapar MAKA makan
JIKA nilai jelek MAKA tidak lulus
Dalam bahasa pemrograman, ini dikenal dengan "if" dan "then". Kondisi adalah
persyaratan yang dapat dinilai benar atau salah sehingga akan memunculkan 'aksi' yang
berbeda dengan 'kondisi' yang berbeda. Misal :
'if' Widi memperoleh juara kelas 'then' ayah akan memberi hadiah
'if' Jalan Dago macet 'then' ambil alternatif Jalan Dipati Ukur
Struktur pemilihan 'if-then' hanya memberikan satu pilihan aksi bila kondisi dipenuhi atau
bernilai benar dan tidak memberikan aksi lain bila kondisi salah. Bentuk pemilihan yang lebih
umum adalah memilih satu dari dua aksi bergantung pada nilai kondisinya, seperti:
'if' hari hujan 'then' pergilah dengan naik taxi 'else' pergilah dengan naik motor
Bisa di jelaskan JIKA hari hujan MAKA pergilah dengan naik taksi JIKA TIDAK pergilah
dengan naik motor. Di sini secara logika jika kondisi 'hari hujan' benar, maka aksi 'pergi naik
taxi' dilakukan. Sebaliknya jika kondisi 'hari hujan' bernilai salah, maka aksi 'pergi naik motor'
akan dilaksanakan. Secara garis besar struktur pemilihan ini adalah :
IF kondisi THEN
Proses1
ELSE
Proses2
END IF
3. Pengulangan (Repetition)
Salah satu kegunaan pemrograman adalah untuk memudahkan pekerjaan yang harus
dilakukan berulang-ulang tanpa lelah. Ada cerita yang dialami oleh seorang anak SMA yang,
pernah suatu hari dihukum guru karena tertidur dikelas pada jam pelajaran terakhir. Dimana
hukumannya menulis kalimat "saya berjanji tidak akan tidur di kelas lagi" sebanyak 300 kali. Tapi
untungnya guru tersebut ini tidak menjelaskan dimana harus menulisnya. Kesokan harinya
terpaksa merengek ke kakanya untuk dibolehkan membawa laptop kesayangan saya ke
sekolah. Sebelumnya pada malam harinya sudah membuat program kecil untuk mengulang
tulisan "saya berjanji tidak akan tidur di kelas lagi" sebanyak apapun yang di inginkan.
Akhirnya guru tersebut itu cuman bisa geleng kepala. Algoritma pengulangan tersebut dapat
dianalogikan dengan kalimat ULANG prosesSAMPAI kondisi tertentu.. atau
SAMPAI kondisi tertentu Lakukan proses PENGULANGAN
Dalam contoh cerita diatas bias di tuliskan algoritmanya sbb :
repeat 300 times
Tulis: saya berjanji tidak akan tidur di kelas lagi
Atau : for i = 1:100
Tulis: saya berjanji tidak akan tidur di kelas lagi

Paradigma pemograman

Pemrograman Prosedural
Berdasarkan urutan-urutan, sekuensial
Program adalah suatu rangkaian prosedur untuk memanipulasi data.
Prosedur merupakan kumpulan instruksi yang dikerjakan secara berurutan.
Harus mengingat prosedur mana yang sudah dipanggil dan apa yang sudah
diubah.
Pemrograman Fungsional
Berdasarkan teori fungsi matematika
Fungsi merupakan dasar utama program.
Pemrograman Terstruktur
Secara berurutan dan terstrukrtur.
Program dapat dibagai-bagi menjadi prosedur dan fungsi.
Contoh: PASCAL dan C
Pemrograman Modular
Pemrograman ini membentuk banyak modul.
Modul merupakan kumpulan dari prosedur dan fungsi yang berdiri sendiri
Sebuah program dapat merupakan kumpulan modul-modul.
Contoh: MODULA-2 atau ADA
Pemrograman Berorientasi Obyek
Pemrograman berdasarkan prinsip obyek, dimana obyek memiliki
data/variabel/property dan method/event/prosedur yang dapat dimanipulasi
Contoh: C++, Object Pascal, dan Java.
Pemrograman Berorientasi Fungsi
Pemrograman ini berfokus pada suatu fungsi tertentu saja. Sangat tergantung
pada tujuan pembuatan bahasa pemrograman ini.
Contoh: SQL (Structured Query Language), HTML, XML dan lain-lain.
Pemrograman Deklaratif
Pemrograman ini mendeskripsikan suatu masalah dengan pernyataan
daripada memecahkan masalah dengan implementasi algoritma.
Contoh: PROLOG

Klasifikasi Algoritma

1. Ditinjau dari Implementasi :
Recursion or iteration: merupakan algoritma yang dapat memanggil dirinya
sendiri sampai kondisi yang ditentukan dipenuhi, dikenal dengan
functional programming
Logical: suatu algoritma yang dapat dilihat sebagai deduksi lojik terkontrol.
Serial atau parallel atau distributed: algoritma yang biasanya dieksekusi dengan
asumsi satu instruksi pada suatu waktu.
Deterministic or non-deterministic: algoritma deterministik menyelesaikan
masalah dengan keputusan yang tepat pada setiap tahapannya,
sedangkan algoritma non-deterministic menyelesaikan masalah
dengan perkiraan.
Exact atau approximate: mencari suatu perkiraan yang bisa menghampiri solusi
yang benar. Biasa digunakan pada deterministik atau strategi random.
2. Ditinjau dari Paradigma perancangan:
Divide and conquer, Dynamic programming, The greedy method, Linear
programming, Reduction, Search and enumeration, The probabilistic and heuristic
paradigm (Probabilistic algorithms, Genetic algorithms, Heuristic algorithms)
3. Ditinjau dari Kajian Studi :
search algorithms, sorting algorithms, merge algorithms, numerical algorithms,
graph algorithms, string algorithms, computational geometric algorithms,
combinatorial algorithms, machine learning, cryptography, data compression
algorithms parsing techniques
4. Ditinjau dari Kompleksitas:
Algoritma efesien
5. Ditinjau dari Computing Power :
polynomial time , primitive recursive functions



V. Notasi Algoritmik
French,C.S. (1984) menyatakan sejumlah konsep yang mempunyai relevansi dengan
masalah rancangan program yaitu kemampuan komputer, kesulitan dan ketepatan.
Penerapan dari konsep tersebut biasanya digunakan dalam rancangan algoritma. Dalam
merancang sebuah algoritma, Fletcher (1991) memberikan beberapa cara atau metode yaitu
kumpulan perintah, ekspresi, tabel instruksi, program komputer, kode semu dan flow chart,
sedangkan Knuth (1973) menyarankan algoritma fundamental. Sebenarnya, tidak ada notasi
yang standar untuk menuliskan notasi algoritma sebagaimana pada notasi bahasa
pemograman. Namun, terdapat beberapa notasi algorima berikut ini:
1. Bahasa Natural :
digunakan untuk membuat algoritma yang komplek atau algoritma teknik.
2. Pseudocode
Pseu : menyerupai, code : kode. Susunan yang padat dan merupakan algoritma informal
untuk deskripsi high-level dengan menggunakan struktur konvensi bahasa pemrograman,
tetapi dalam penulisan tidak memperhatikan pemakaian subrutin (prosedur) , deklarasi
varabel dan kode sistem khusus. Artinya, sudah lebih dekat ke bahasa pemrograman,
namun sulit dimengerti oleh orang yang tidak mengerti pemrograman.
Tidak ada aturan standar penulisan pseudocode. Contoh: menghitung luas segitiga yang
diketahui alas dan tingginya
o input alas
o input tinggi
o luas * (alas * tinggi)
o write ( luas)
3. flow chart (diagram alir)
representasi algoritma dengan skema atau langkah proses yang ditunjukan dengan
berbagai macam bentuk dan dikaitkan dengan arah panah. Dapat membantu
programmer maupun orang lain dalam memahami alur program (apa saja input, proses
dan output dari program). Bagus secara visual akan tetapi repot kalau algoritmanya
panjang.


Selalu dimulai dengan
BEGIN:



Begin
Input/output
Jangan lupa garis
Mungkin anda ingin
berkomunikasi
dengan pemakai
Input / Output
Begin
End


Contoh flowchart dalam menuliskan algoritma menghitung luas segitiga:




Notasi Algoritma Independen Terhadap Bahasa Pemrograman Dan
Mesin Komputer
Notasi Algoritma dapat diterjemahkan ke dalam berbagai bahasa pemrograman.
Analoginya sama dengan resep membuat kue. Sebuah resep dapat ditulis dalam bahasa
apapun. Bahasa Jepang, Inggris, Perancis, Indonesia, dan lain sebagainya. Apapun bahasanya,
kue yang dihasilkan tetap sama asalkan semua aturan pada resep diikuti. Mengapa demikian ?
Karena setiap juru masak (sebagai pemroses) dapat melakukan operasi dasar yang sama,
seperti mengocok telur, menimbang berat gula, dan lain sebagainya.
Begin
Input
Proses
Output End
Anda dapat menampilkan
hasil di output
Begin
Input
Proses
Proses
Anda dpt melakukan
perhitungan di dlm proses
Start
input alas
input tinggi
luas * (alas * tinggi)
print luas
End
Algoritma luas segitiga
Menghitung luas segitiga bila diketahui
alas dan tingginya

input alas
input tinggi
luas * (alas * tinggi)
print luas
Demikian juga halnya dengan komputer. Meskipun setiap komputer berbeda
teknologinya, tetapi secara umum semua komputer dapat melakukan operasi-operasi dasar
dalam pemrograman seperti operasi pembacaan data, operasi perbandingan, operasi
aritmatika, dan sebagainya. Perkembangan teknologi komputer tidak mengubah operasi-
operasi dasar it, yang berubah hanyalah kecepatan, biaya, atau tingkat ketelitian. Pada sisi lain
setiap program dalam bahasa tingkat tinggi selalu diterjemahkan kedalam bahasa mesin
sebelum akhirnya dikerjakan oleh CPU. Setiap instruksi dalam bahasa mesin menyajikan
operasi dasar yang sesuai, dan menghasilkan efek netto yang sama pada setiap komputer.

Struktur Teks Algoritma

Judul algoritma
Bagian yang terdiri atas nama algoritma dan penjelasan (spesifikasi) tentang algoritma
tersebut. Nama sebaiknya singkat dan menggambarkan apa yang dilakukan oleh algoritma
tersebut. Sebagai contoh:
PROGRAM menghitung_luas_segitiga
{ Program untuk menghitung luas sebuah segitiga dari masukkan berupa
alas dan tinggi }
Deklarasi
Bagian untuk mendefinisikan semua nama yang digunakan di dalam program. Nama
tersebut dapat berupa nama tetapan, peubah, tipe, prosedur dan fungsi. Contoh:
DEKLARASI
{ nama konstanta }
Const Npeg = 100 {jumlah pegawai}
Const phi = 3.14 {nilai }
{ nama tipe }
type Titik : record < x: int, y: int > { absis, ordinat }
{ nama peubah }
c : char {karakter yang dibaca}
Q : titik {titik koordinat}

Deskripsi (Algoritma)
Bagian ini berisi uraian langkah-langkah penyelesaian masalah yang ditulis dengan
menggunakan notasi yang akan dijelaskan selanjutnya yaitu instruksi-instruksi algoritmik yang
biasanya ditulis dalam notasi pseudecode.
Sebagai contoh secara keseluruhan membuat luas dan keliling lingkaran:
PROGRAM Luas_Kell_Lingkaran {<- ini judul algoritma}
{menghitung luas dan keliling lingkaran untuk ukuran jari-jari tertentu. Algoritma
menerima masukan jari-jari lingkaran, menghitung luas dan kelilingnya, dan
mencetak luas dan keliling lingkaran ke piranti keluaran}
DEKLARASI :
const phi = 3.14
R : real {jari-jari lingkaran}
Luas : real {luas lingkaran}
Keliling : real {keliling lingkaran}
DESKRIPSI :
read (R)
Luas = phi * R *R
Keliling = 2 * phi * R
write(luas, keliling)


VI. Tipe, Operator, dan Ekspresi
Pada dasarnya, suatu program komputer ialah memanipulasi objek (data) di dalam
memori. Objek tersebut terdiri dari Peubah (variable) dan konstanta (constant). Operator
menspesifikasikan operasi apa yang dapat dilakukan terhadap Peubah dan konstanta.
Ekspresi mengkombinasikan peubah dan konstanta untuk menghasilkan nilai baru. Tipe
sebuah objek akan menentukan himpunan nilai yang dapat dimilikinya dan operasi yang
dilakukan pada objek tersebut.
Tipe dibedakan atas tipe dasar dan tipe bentukan.


Tipe Dasar
1. Bilangan Lojik (Logic)
Nama tipe: boolean
Ranah nilai: hanya mengenal dua buah nilai: benar (true) da salah (false). Atau dinyakan
bernilai 1 jika pernyataan benar dan bernilai 0 jika pernyataan salah.
Konstanta: True dan False
Operasi
Operasi yang dilakukan adalah operasi boolean yang menghasilkan nilai true dan false.
Operator yang digunakan adalah not, and, or, dan xor.
Hubungan DAN (AND)
Merupakan hubungan antar kondisi yang mensyaratkan kedua kondisi terpenuhi. Bernilai
benar jika kedua pernyataan bernilai benar Contoh :
Untuk menentukan penerimaan calon pegawai ditentukan kriteria sebagai:
Umur dibawah 30 tahun
Nilai test lebih besar dari 60

Hubungan Atau (OR)
Merupakan hubungan antar kondisi yang mensyaratkan hanya salah satu kondisi yang
terpenuhi. Bernilai salah jika kedua pernyataan bernilai salah Contoh: Tunjangan pensiun
diberikan kepada pegawai yang berusia lebih dari 60 tahun. Untuk pegawai yang mempunyai
masa kerja lebih dari 25 tahun juga mendapat
tunjangan tersebut.
U Um mu ur r < < 3 30 0
d da an n
n ni il la ai i > > 6 60 0
C Ca ap pe eg g t ti id da ak k d di it te er ri im ma a
Capeg diterima
T T
F F


xor akan bernilai benar bila kedua pernyataan saling berlawanan.

2. Bilangan Bulat
Bilangan bulat adalah bilangan yang tidak mengandung pecahan desimal.
Nama tipe: Integer
Ranah nilai: Secara teoritis, rentang nilainya adalah dari minus tak hingga sampai plus tidak
berhingga. Namun, di dalam komputer tipe integer ini mempunyai nilai yang terbatas
bergantung pada mesin (komputer) dan kompilator yang digunakan. Kompilator
menyediakan lima macam tipe untuk integer, yaitu byte, shortint, word, integer, dan longint.
Tipe Rentang Nilai Format
Byte 0 ... 255 Unsigned 8-bit
shortint -128 ... 127 signed 8-bit
word 0 65535 Unsigned 16-bit
integer -32768 32767 signed 16-bit
longint -2147483648 2147483647 signed 32-bit

Pemilihan implementasi bilangan bulat ke dalam tipe-tipe integer yang berbeda lebih
disebabkan pada faktor penghematan memori. Sebagai contoh, tipe word hanya
membutuhkan 2 byte memori, sedangkan integer membutuhkan 4 byte memori.
Tipe bilangan bulat adalah tipe yang memiliki keterurutan, artinya nilai sebelumnya
(predecessor) dan nilai sesudahnya (successor) dapat ditentukan. Contohnya predecessor 9
(a) adalah 8 (a-1), dan successornya adalah 10 (a+1).
U Us si ia a> >6 60 0
A At ta au u
M MK K> >2 25 5
M Me en nd da ap pa at t
t tu un nj ja an ng ga an n p pe en ns si iu un n
T Ti id da ak k m me en nd da ap pa at t
t tu un nj ja an ng ga an n p pe en ns si iu un n
T T
F F
Konstanta: konstanta bertipe bilangan bulat harus ditulis tanpa mengandung pecahan
desimal. Misalnya 77 -33 1986 10 1
Operasi:
Operasi yang dilakukan adalah operasi aritmetika dan operasi perbandingan.
a. Operasi aritmetika
Operasi aritmetika terhadap bilangan bulat dengan sembarang operator aritmetika
menghasilkan nilai yang bertipe bilangan bulat pula. Operator aritmetika yang didefinisikan
pada bilangan bulat adalah:

Operator Operation
+ Addition (tambah)
- Subtraction (kurang)
* Multiplication (kali)
/ Division (bagi)
div Integer division
mod Remainder (sisa hasil bagi)

Objek yang dioperasikan disebut operand. Misalnya, pada x + y, masing-masing x dan y
adalah operand.
b. Operasi perbandingan
Operasi perbandingan terhadap salah satu operator relasional menghasilkan nilai bolean (true
atau false). Operador perbandingan untuk bilangan bulat adalah:

Operator Operation
= Sama dengan
< Lebih kecil
Lebih kecil atau sama dengan
> Lebih besar
Lebih besar atau sama dengan
1 Tidak sama dengan

3. Bilangan Riil
Bilangan bulat adalah bilangan yang mengandung pecahan desimal.
Nama tipe: real ( beberapa literatur juga menyebutnya folating point )
Ranah nilai: Secara teoritis, rentang nilainya adalah dari minus tak hingga sampai plus tidak
berhingga. Namun, di dalam komputer tipe integer ini mempunyai nilai yang terbatas
bergantung pada mesin (komputer) dan kompilator yang digunakan. Kompilator
menyediakan empat macam tipe yaitu real, single, double, dan extended.

Tipe Rentang Nilai Format
real 2.9 x 10
-39
1.7 x 10
38
6 byte
single 1.5 x 10
-45
3.4 x 10
38
4 byte
double 5.0 x 10
-324
1.7 x 10
308
8 byte
extended 3.4 x 10
-4932
1.1 x 10
4932
10 byte

Konstanta: konstanta bertipe bilangan riil harus ditulis dengan pecahan desimal.
Misalnya 0.77 -33.99 1986.101 8.12+E3 .2
Operasi:
Operasi yang dilakukan adalah operasi aritmetika dan operasi perbandingan.
a. Operasi aritmetika
Operasi aritmetika terhadap bilangan riil dengan sembarang operator aritmetika
menghasilkan nilai yang bertipe bilangan riil pula. Operator aritmetika yang didefinisikan
pada bilangan riil adalah:
Operator Operation
+ Addition (tambah)
- Subtraction (kurang)
* Multiplication (kali)
/ Division (bagi)

b. Operasi perbandingan
Operasi perbandingan terhadap salah satu operator relasional menghasilkan nilai bolean (true
atau false). Operador perbandingan untuk bilangan bulat adalah:
Operator Operation
= Sama dengan
< Lebih kecil
Lebih kecil atau sama dengan
> Lebih besar
Lebih besar atau sama dengan
Tidak sama dengan

Contoh: 0.0007 < 0.7 (hasil : false)
812.03 > 11.01986 (hasil: true)
8.9 89.0 (hasil: true)

4. Karakter
Nama tipe: char
Ranah nilai: Ranah karakter adalah semua alfabet (a ... z, A ... Z), angka (0 ... 9),
karakter khusus (.^, @, #, $, %, & dll), tanda baca (!, ?, ., : dll), operator
aritmetika (*, /, +, -). Daftar yang lengkap terdapat pada tabel ASCII.
Konstanta: konstanta karakter harus diapit oleh tanda petik tunggal.
Contoh: M e c C a 7 $
Harus diperhatikan yaitu 7 adalah karakter sedangkan 7 adalah integer!
Operasi:
Operasi yang dilakukan adalah operasi perbandingan. Yang berlaku yaitu:
Operator Operation
= Sama dengan
< Lebih kecil
Lebih kecil atau sama dengan
> Lebih besar
Lebih besar atau sama dengan
Tidak sama dengan

Contoh: c = c (True) ; T = t (false) ; m < z (true
Tipe karakter adalah tipe yang memiliki keterurutan, artinya nilai sebelumnya (predecessor)
dan nilai sesudahnya (successor) dapat ditentukan.

5. String
String adalah untaian karakter dengan panjang tertentu. String sebenarnya bukan tipe dasar
murni, namun karena sering digunakan dalam pemograman, maka string diperlakukan
sebagai tipe dasar.
Nama tipe: string
Ranah nilai: Ranah nilai untuk tipe string adalah deretan karakter yang telah didefinisikan
pada ranah karakter.
Konstanta: Semua konstanta string harus diapit oleh tanda petik tunggal. Contoh:
logika algoritma, BANDUNG, PIKSI GANESHA, D5709um
String kosong adalah string yang panjangnya nol, antara lain, string kosong sama dengan
karakter kosong.
Operasi: Operasi terhadap data bertipe string didefinisikan dua macam:
a. Operasi penyambungan
Operator: +, yang dimaksudkan disini yaitu penyambungan. Contoh:
Manajemen + informatika = Manajemen informatika
1 + 2 = 12 dan 110 + 1986 = 1101986
b. Operasi Perbandingan
Contoh:
pqrs = pqr (false)
simkuring < SIMKURING (true)
String yang disusun atas gabungan numerik dan abjad disebut alfanumerik. Misalnya:
D5709UM .
Tipe Bentukan
Tipe bentukan adalah tipe yang didefinisikan sendiri oleh pemogram. Tipe bentukan disusun
oleh satu atau lebih tipe dasar. Ada dua macam tipe bentukan:
1. Tipe dasar yang diberi nama dengan nama tipe baru.
2. Tipe terstruktur
1. Tipe dasar yang diberi nama dengan nama tipe baru
Pemberian nama baru biasanya digunakan oleh pemogram dengan alasan agar lebih familiar
dan lebih mudah diintrepertasi oleh orang yang membaca teks algoritma.
Kata kunci untuk pembuatan nama baru ini adalah type. Aspek ranah nilai, konstanta, dan
operasi beserta operatornya terhadap tipe baru tersebut tidak berubah, tetap sama dengan
tipe dasar aslinya.
Contoh : type BilanganDesimal : real
BilanganDesimal adalah tipe bilangan riil yang sama saja dengan tipe real. Apabila kita
mempunyai sebuah peubah yang bernama p dan bertipe BilanganDesimal, peubah p tersebut
sama saja dengan bertipe real.

2. Tipe terstruktur
Tipe terstruktur adalah tipe yang berbentuk rekaman (record). Rekaman disusun oleh satu
atau lebih field. Tiap field menyimpan data dari tipe dasar tertentu atau dari tipe bentukan
lain yang sudah didefinisikan sebelumnya. Nama rekaman ditentukan oleh pemrogram.
field 1 field 2 field 3 ................... field N
Contoh:
1. Bilangan kompleks adalah bilangan yang terdiri dari bilangan riil dan bilangan imaginer
yang dinyatakan dengan a+bi, dengan a dan b riil sedangkan 1 = i . Misalnya 7.0 + 2.6 i.
Bilangan kompleks itu dapat dinyatakan sebagai tipe rekaman dengan a dan b sebagai nama
fieldnya.
a b
Cara menuliskan tipe kompleks:
type Kompleks : record <a : real, b: real>
jika dideklarasikan m adalah peubah bertipe kompleks, maka cara mengacu tiap field pada m
adalah: m.a ; m.b
Secara keseluruhan dapat didefinisikan sebagai berikut:
Nama tipe : Kompleks
Ranah nilai : (real, real)
Contoh konstanta : <7.0 , 2.6> yang menandakan 7.0 + 2.6 i.
Operasi : operasi aritmetika bilangan riil terhadap a dan b
Operasi perbandingan terhadap masing-masing field.
2. NilMhs adalah nama tipe terstruktur yang menyatakan nilai ujian seorang mahasiswa
untuk suatu mata kuliah (MK) yang ia ambil. Data setiap mahasiswa adalah NIM (Nomor
Induk Mahasiswa), nama mahasiswa, kode mata kuliah yang ia ambil, dan nilai mata kuliah.
NIM NamaMhs KodeMK Nilai

Cara menuliskan tipe NilaiMhs:
Type NilaiMhs : record
< NIM : integer , { Nomor Induk Mahasiswa }
NamaMhs : string , { nama mahsiswa }
KodeMK : string , { kode mata kuliah }
Nilai : char , { indeks nilai }
>
Aturan Penamaan:
1. Nama harus dimulai dengan huruf alfabet, tidak boleh dimulai dengan angka, spasi, atau
karakter khusus lainya.
2. Huruf besar atau kecil tidak dibedakan.
3. Karakter penyusun nama hanya boleh huruf alfabet, angka, dan _.
4. Nama tidak boleh mengandung operator aritmetika, operator relasional, tanda baca, dan
karakter khusus lainya.
5. Karakter dalam nama tidak boleh dipisah dengan spasi.
6. Panjang nama tidak dibatasi.

Ekspresi
1. Ekspresi Aritmetik adalah ekspresi yang baik operand-nya bertipe numerik dan hasilnya
juga bertipe numerik. Contoh: f g * h atau l = ( u + v ) div 7.
2. Ekspresi Relasional adalah ekspresi dengan operator =, <, >, , , dan not, or, and,
dan xor. Contoh: not ada (hasil : false) , x < 7 ( hasil: false), dll
3. Ekspresi String adalah ekspresi dengan operator + (operaor penyambungan).



VII. Runtunan
Algoritma merupakan runtunan (sequence) satu ataulebih instruksi, yang berarti bahwa:
1. Tiap instruksi dikerjakan satu per satu
2. Tiap instruksi dilaksanakan tepat sekali, tidak ada yang diulang
3. Urutan instruksi yang dilaksanakan pemroses sama dengan urutan instruksi sebagaimana
yang tertulis di dalam teks algoritma.
4. Akhir dari instruksi terakhir merupakan akhir algoritma.
Contoh kasus runtunan:
Tulislah algoritma yang membaca nama karyawan dan gaji pokok bulananya dan menghitung
gaji bersih karyawan tersebut. Gaji bersihnya tersebut adalah:
Gaji bersih = gaji pokok + tunjangan Gaji bersih = gaji pokok + tunjangan Gaji bersih = gaji pokok + tunjangan Gaji bersih = gaji pokok + tunjangan - -- - pajak pajak pajak pajak
Tunjangan karyawan dihitung 20 % dari gaji pokok, sedangkan pajak adalah 15 % dari gaji
pokok ditambah tunjangan. Nama karyawan dan gaji bersih sebagai outputnya.
Penyelesaian
PROGRAM PROGRAM PROGRAM PROGRAM Gaji_Bersih_Karyawan Gaji_Bersih_Karyawan Gaji_Bersih_Karyawan Gaji_Bersih_Karyawan
{ Menghitung gaji bersih karyawan dengan masukkan nama karyawan { Menghitung gaji bersih karyawan dengan masukkan nama karyawan { Menghitung gaji bersih karyawan dengan masukkan nama karyawan { Menghitung gaji bersih karyawan dengan masukkan nama karyawan
dan gaji pokok bulananya. Gaji bersih = gaji pokok + tunjangan dan gaji pokok bulananya. Gaji bersih = gaji pokok + tunjangan dan gaji pokok bulananya. Gaji bersih = gaji pokok + tunjangan dan gaji pokok bulananya. Gaji bersih = gaji pokok + tunjangan - -- - pajak. pajak. pajak. pajak.
Tunjangandihitung 20 % dari gaji pokok, Tunjangandihitung 20 % dari gaji pokok, Tunjangandihitung 20 % dari gaji pokok, Tunjangandihitung 20 % dari gaji pokok, sedangkan pajak adalah 15 % dari sedangkan pajak adalah 15 % dari sedangkan pajak adalah 15 % dari sedangkan pajak adalah 15 % dari
gaji pokok ditambah tunjangan } gaji pokok ditambah tunjangan } gaji pokok ditambah tunjangan } gaji pokok ditambah tunjangan }
DEKLARASI DEKLARASI DEKLARASI DEKLARASI
const const const const PersenTunjangan = 0.2 PersenTunjangan = 0.2 PersenTunjangan = 0.2 PersenTunjangan = 0.2
const const const const PersenPajak = 0.15 PersenPajak = 0.15 PersenPajak = 0.15 PersenPajak = 0.15
NamaKaryawan = NamaKaryawan = NamaKaryawan = NamaKaryawan = string string string string
GajiPokok,tunjangan,pajak,GajiBersih : GajiPokok,tunjangan,pajak,GajiBersih : GajiPokok,tunjangan,pajak,GajiBersih : GajiPokok,tunjangan,pajak,GajiBersih : real real real real
DESKRIPSI DESKRIPSI DESKRIPSI DESKRIPSI
read read read read (NamaKaryawan, GajiPokok) (NamaKaryawan, GajiPokok) (NamaKaryawan, GajiPokok) (NamaKaryawan, GajiPokok)
tunjangan tunjangan tunjangan tunjangan PersenTunjangan * GajiPokok PersenTunjangan * GajiPokok PersenTunjangan * GajiPokok PersenTunjangan * GajiPokok
pajak pajak pajak pajak PersenPajak * (GajiPokok + tunjangan) PersenPajak * (GajiPokok + tunjangan) PersenPajak * (GajiPokok + tunjangan) PersenPajak * (GajiPokok + tunjangan)
GajiBersih GajiBersih GajiBersih GajiBersih GajiPokok + tunjangan GajiPokok + tunjangan GajiPokok + tunjangan GajiPokok + tunjangan - -- - pajak pajak pajak pajak
write(NamaKaryawan, GajiBersih) write(NamaKaryawan, GajiBersih) write(NamaKaryawan, GajiBersih) write(NamaKaryawan, GajiBersih)
VIII. Pemilihan
Seringkali suatu instruksi hanya bisa dikerjakan jika ia memenuhi suatu persyaratan
tertentu. Oleh karena itu, komputer tidak lagi mengerjakan instruksi secara sekuensial seperti
pada runtunan, namun berdasarkan syarat yang dipenuhi yang terdapat pada struktur
pemilihan. Mari kita lihat contoh demi contoh pada setiap kasusnya.
Satu kasus





Contoh: Menentukan bilangan genap

Program genap
Deklarasi
x : integer
Deskripsi
read (x)
if x mod 2 = 0 then
write (genap)
endif

Atau contoh lainya:
IF nilai = A OR nilai = B THEN
write (Dapat mengikuti tes asisten)
ENDIF



Pernyataan atau aksi akan
dikerjakan jika kondisi bernilai
benar dan jika salah maka aksi
atau pernyataan tidak dikerjakan
then
Dua Kasus





Contoh: Menentukan tahun kabisat
Program : TahunKabisat
Deklarasi
tahun = integer
Deskripsi
read (tahun)
if tahun mod 4 = 0 then
write ( tahun kabisat )
else
write ( bukan tahun kabisat )
endif

Tiga Kasus atau lebih



Contoh: Untuk proses jual beli dengan diskon dan hadiah sebagai berikut:
A Ak ks si i 1 1 a ak ka an n d di ik ke er rj ja ak ka an n j ji ik ka a
k ko on nd di is si i d da al la am m k ke ea ad da aa an n
b be en na ar r/ /t tr ru ue e d da an n s se eb ba al li ik kn ny ya a j ji ik ka a
k ko on nd di is si i s sa al la ah h/ /f fa al ls se e m ma ak ka a
p pe er rn ny ya at ta aa an n- -2 2 a at ta au u a ak ks si i 2 2 y ya an ng g
a ak ka an n d di ik ke er rj ja ak ka an n. .
A Ak ks si i 1 1 a ak ka an n d di ik ke er rj ja ak ka an n
j ji ik ka a k ko on nd di is si i1 1 d da al la am m
k ke ea ad da aa an n b be en na ar r/ /t te er rp pe en nu uh hi i, ,
j ji ik ka a k ko on nd di is si i2 2 m ma ak ka a a ak ks si i 2 2
a ak ka an n d di ik ke er rj ja ak ka an n d da an n j ji ik ka a
t ti id da ak k a ad da a k ko on nd di is si i y ya an ng g
m me em me en nu uh hi i m ma ak ka a a ak ks si i3 3
y ya an ng g d di ik ke er rj ja ak ka an n
IF beli>=100000 THEN
Output(Diskon 10%)
ELSE
IF beli>=50000 THEN
Output(Bonus piring)
ELSE
IF beli>=10000 THEN
Output(Bonus gelas)
ELSE
Output(Tak ada bonus)
ENDIF
ENDIF
ENDIF
Struktur case
Struktur kondisi Case digunakan untuk penyeleksian kondisi dengan kemungkinan yang
terjadi cukup banyak. Penyederhanaan bentuk if-then-else.
Struktur ini akan melaksanakan salah satu dari beberapa pernyataan case tergantung nilai
kondisi yang ada
Struktur ini Alternatif penggunaan nested conditional

IX. Pengulangan

Perulangan (iterasi) adalah proses yang berulang. Iterasi selalu ada dalam bahasa
pemrograman apapun, karena disinilah letak kelebihan komputer dibanding manusia, yaitu
mampu melakukan hal yang sama berulang kali tanpa kesalahan akibat bosan atau lelah.
Dengan perulangan, program menjadi lebih pendek dan sederhana. Dalam Pascal dikenal tiga
macam perintah (statement) perulangan, yaitu statement fordo, repeatuntil dan whiledo.
Perulangan fordo adalah perulangan dengan penghitung (counter), perulangan repeatuntil
adalah perulangan dengan syarat akhir sedang perulangan whiledo adalah perulangan
dengan syarat awal. Didalam algoritma, pengulangan (repetition/loop) dapat dilakukan
sejumlah kali, atau sampai kondisi berhenti pengulangan tercapai.
Struktur pengulangan terdiri atas dua bagian :
Kondisi pengulangan, yaitu ekspresi boolean yang harus dipenuhi untuk
melaksanakan pengulangan.
Badan pengulangan, yaitu satu atau lebih aksi yang akan diulang.
Bagian lain yang menyertai pengulangan yaitu :
Inisialisasi, yaitu aksi yang dilakukan sebelum pengulangan dilakukan pertama kali.
Terminasi, yaitu aksi yang dilakukan setelah pengulangan selesai dilaksanakan.

Struktur WHILE DO
Bentuk umum struktur WHILE DO adalah :
While <kondisi> do
AKSI
Endwhile
Penjelasan :
Aksi (atau runtunan aksi) akan dilaksanakan berulangkali sepanjang <kondisi> boolean
masih tetap bernilai true. Jika <kondisi> bernilai false, badan pengulangan tidak akan
dilaksanakan. Pengulangan selesai.
Contoh :
Misalkan kita ingin mencetak tulisan PIKSI sebanyak 3 kali. Maka algoritmanya adalah :
Algoritma Cetak_Banyak_Hallo
{Mencetak kata PIKSI sebanyak 3 kali}
DEKLARASI
k : integer {pencacah pengulangan}
DESKRIPSI
k 1 {inisialisasi}
While k 3 do
write(PIKSI)
k k + 1
endwhile {kondisi berhenti : k > 3}
Keterangan :
Pada mulanya, k diisi dengan nilai 1. Sebelum memasuki badan pengulangan, kondisi k 3
diperiksa apakah bernilai true. Karena 1 3 bernilai true, maka pernyataan write(PIKSI)
dilaksanakan, sehingga keluaran yang tercetak PIKSI Demikian seterusnya sebanyak 3 kali.
Setiap kali badan pengulangan dimasuki, nilai k bertambah 1 sampai nilai k = 4. karena 4 >
10 maka kondisi pengulangan k 3 bernilai false. Pengulangan dihentikan. Jadi keluaran
algoritma tersebut adalah :
PIKSI
PIKSI
PIKSI

Struktur REPEAT UNTIL
Bentuk umum struktur REPEAT UNTIL adalah :
Repeat
AKSI
until <kondisi>
Penjelasan :
Notasi ini mendasarkan pengulangan pada kondisi berhenti. Aksi didalam badan
pengulangan diulang sampai kondisi boolean bernilai true, dengan kata lain, jika kondisi
berhenti masih salah, pengulangan masih terus dilakukan. Karena pengulangan harus
berhenti, maka di dalam badan pengulangan harus ada aksi yang mengubah harga kondisi.
Perbedaan mendasar dengan struktuw WHILE DO adalah aksi dilaksanakan minimal 1
kali, karena kondisi pengulangan diperiksa pada akhir struktur.

Contoh :
Misalkan kita ingin mencetak tulisan PIKSI sebanyak 3 kali. Maka algoritmanya adalah :
Algoritma Cetak_Banyak_Hallo
{Mencetak kata PIKSI sebanyak 3 kali}
DEKLARASI
k : integer {pencacah pengulangan}
DESKRIPSI
k 1 {inisialisasi}
Repeat
write(PIKSI)
k k + 1
endwhile k > 3 {kondisi berhenti : k > 3}

Struktur FOR
Struktur for digunakan untuk menghasilkan pengulangan sejumlah kali tanpa
penggunaan kondisi apapun. Struktur ini menyebabkan aksi diulangi sejumlah kali (tertentu)
Bentuk umum struktur FOR ada 2 macam yaitu :
a. FOR menaik (ascending)
For peubah nilai_awal to nilai_akhir do
AKSI
Endfor
Keterangan :
Peubah haruslah bertipe sederhana kecuali tipe real
Nilai_awal harus lebih kecil atau sama dengan nilai_akhir. Jika nilai_awal lebih besar
dari nilai_akhir, maka badan pengulangan tidak dimasuki.
Pada awalnya peubah diinisialisasi dengan nilai_awal. Nilai peubah secara otomatis
bertambah satu setiap kali aksi pengulangan dimasuki, sampai akhirnya nilai peubah
sama dengan nilai_akhir.
Jumlah pengulangan yang terjasi adalah nilai_akhir nilai_akhir + 1.


Algoritma Cetak_Banyak_Hallo
{Mencetak kata HALLO sebanyak 3 kali}
DEKLARASI
k : integer {pencacah pengulangan}
DESKRIPSI
k 1 {inisialisasi}
for k: 1 to 3 do
write(PIKSI)
endfor {kondisi berhenti}

b. FOR menurun (descending)
For peubah nilai_akhir downto nilai_awal do
AKSI
Endfor
Keterangan :
Peubah haruslah bertipe sederhana kecuali tipe real
Nilai_akhir harus lebih besar atau sama dengan nilai_awal. Jika nilai_akhir lebih besar
dari nilai_awal, maka badan pengulangan tidak dimasuki.
Pada awalnya peubah diinisialisasi dengan nilai_akhir. Nilai peubah secara otomatis
berkurang satu setiap kali aksi diulangi, sampai akhirnya nilai peubah sama dengan
nilai_awal.
Jumlah pengulangan yang terjadi adalah nilai_awal nilai_akhir + 1.
Algoritma Cetak_Banyak_Hallo
{Mencetak kata HALLO sebanyak 3 kali}
DEKLARASI
k : integer {pencacah pengulangan}
DESKRIPSI
k 1 {inisialisasi}
for k : 3 downto 0 do
write(HALLO)
endfor {kondisi berhenti}
X. Pengantar Pemograman Modular
Dalam suatu pengembangan perangkat lunak, pemrograman adalah salah satu tahap
untuk mengimplementasikan penyelesaian masalah tertentu dengan suatu bahasa
pemrograman. Penyusunan program yang terstruktur merupakan salah satu syarat program
yang baik. Terstruktur berarti memiliki rancangan yang sistematis, mudah dibaca, dan mudah
dibetulkan jika ada kesalahan serta mempunyai alur yang jelas. Salah satu metode penyusunan
program terstruktur adalah pemrograman modular
Jadi, Pemrograman Modular adalah suatu teknik pemrograman di mana program
yang biasanya cukup besar dibagi-bagi menjadi beberapa bagian program yang lebih kecil.
dan sederhana. Keuntungannya yaitu, program lebih pendek, mudah dibaca dan dimengerti,
mudah, didokumentasi, mengurangi kesalahan dan mudah mencari kesalahan, kesalahan yang
terjadi bersifat lokal. Terdapat dua bentuk teknik pemograman modular (sub-program /
upa-program) yaitu prosedur dan fungsi.

1. PROSEDUR
Prosedur adalah modul program yang mengerjakan tugas atau aktivitas yang spesifik
dan menghasilkan efek netto dengan membandingkan keadaan awal dan keadaan akhir pada
pelaksanaan sebuah prosedur.
Mendefinisikan Prosedur
Pada dasarnya, struktur prosedur sama dengan struktur algoritma. Setiap prosedur
mempunyai nama unik dan sebaiknya nama prosedur diawali dengan keta kerja. Notasi
algoritmik yang digunakan untuk mendefinisikan struktur prosedur (tanpa parameter) adalah:
Procedure Nama_Prosedur
{Spesifikasi prosedur, berisi penjelasan tentang yang dilakukan prosedur}
{K.awal : keadaan sebelum prosedur dilaksanakan}
{K.akhir : keadaan setelah prosedur dilaksanakan }
DEKLARASI
{semua nama yang dipakai dalam prosedur dan hanya berlaku lokal di dalam prosedur
didefinisikan}
DESKRIPSI
{badan prosedur berisi kumpulan instruksi}

Contoh: Buat prosedur untuk mencetak string GANESHA ke piranti keluaran :
Procedure Cetak_ GANESHA
{mencetak string GANESHA ke piranti keluaran}
{K.awal : sembarang}
{K.akhir : string GANESHA tercetak}
DEKLARASI
{tidak ada}
DESKRIPSI
Write(GANESHA)

Pemanggilan Prosedur
Prosedur bukan program yang berdiri sendiri, ia tidak dapat dieksekusi secara
langsung tetapi harus diakses dengan cara memanggil namanya dari program pemanggil
(program utama atau modul program lain). Didalam program pemanggil, kita harus
mendeklarasikan purwarupa (prototype) prosedur di dalam bagian DEKLARASI. Purwarupa
prosedur hanya berisi bagian header prosedur. Tujuan pendeklarasian purwarupa prosedur
adalah supaya program pemanggil mengenal nama prosedur tersebut serta cara
mengaksesnya.
Contoh : Program utama untuk memanggil prosedur Cetak_ GANESHA
Algoritma Hallo
{Program utama untuk mencetak string GANESHA}
DEKLARASI
Procedure Cetak_ GANESHA
{mencetak string GANESHA ke piranti keluaran}
DESKRIPSI
Cetak_ GANESHA {panggil prosedur Cetak_ GANESHA }

Nama Global dan Nama Lokal
Nama-nama (tetapan, peubah, tipe, dll) yang dideklarasikan di dalam bagian DEKLARASI
prosedur hanya dikenal di dalam nama prosedur yang bersangkutan yang disebut bersifat
lokal. Sedangkan nama-nama yang dideklarasikan di dalam program utama dikatakan bersifat
global. Nama yang dideklarasikan di dalam prosedur dan di dalam program utama mungkin
saja sama, namun sifat lokal dan globalnya tetap tidak berubah. Nama peubah yang
dideklarasikan di dalam program utama dan juga dideklarasikan di dalam prosedur, maka di
dalam prosedur nama tersebut adalah peubah lokal, dan di luar prosedur ia berlaku sebagai
peubah global.

Parameter
Penggunaan parameter menawarkan mekanisme pertukaran informasi, tiap item data
ditransfer antara parameter aktual dan parameter formal yang bersesuaian. Parameter aktual
adalah parameter yang disertakan pada waktu pemanggilan, sedangkan parameter formal
adalah parameter yang dideklarasikan di dalam bagian header prosedur itu sendiri. Notasi
algoritmik yang digunakan untuk mendefinisikan struktur prosedur dengan parameter adalah:
Procedure Nama_Prosedur(daftar parameter format)
{spesifikasi prosedur, berisi penjelasan tentang yang dilakukan oleh
prosedur ini}
{K.awal : keadaan sebelum prosedur dilaksanakan}
{K.akhir : keadaan setelah prosedur dilaksanakan }
DEKLARASI
{semua nama yang dipakai dalam prosedur dan hanya berlaku lokal di dalam prosedur
didefinisikan}
DESKRIPSI
{badan prosedur berisi kumpulan instruksi}

Aturan penting yang harus diamati adalah :
Jumlah parameter aktual pada pemanggilan prosedur harus sama dengan jumlah
parameter formal pada deklarasi prosedurnya.
Tiap parameter aktual harus bertipe sama dengan tipe parameter formal yang
bersesuaian.
Tiap parameter aktual harus diekspresikan dalam cara yang taat asas dengan parameter
formal yang bersesuaian, bergantung pada jenis parameter formal. Berdasarkan maksud
penggunaannya, terdapat tiga jenis parameter formal yang disertakan dalam prosedur
yaitu :

Parameter Masukan
Pada parameter masukan, nilai (value) parameter aktual akan diisikan (assign) ke
dalam parameter formal yang bersesuaian. Nilai ini digunakan di dalam badan prosedur yang
bersangkutan yang dinyatakan oleh parameter masukan tidak dapat dikirim dalam arah
sebaliknya. Perubahan nilai parameter di dalam badan prosedur tidak mengubah nilai
parameter aktual, Karena yang dipentingkan adalah nilainya, maka nama parameter aktual
boleh berbeda dengan nama parameter formal yang bersesuaian.
Parameter Keluaran
Bila prosedur menghasilkan satu atau lebih nilai yang digunakan oleh program
pemanggil, maka nilai keluaran ditampung di dalam parameter keluaran. Bila prosedur yang
mengandung parameter keluaran dipanggil, maka nama parameter aktual didalam program
pemanggil menggantikan nama parameter formal yang bersesuaian di dalam prosedur.
Parameter keluaran dideklarasikan di dalam header prosedur, sebagaimana paramater
masukan, tetapi parameter keluaran harus dideklarasikan dengan kata kunci output seperti
contoh berikut :
Procedure Satu(input x : integer, output y : real)
{contoh prosedur dengan parameter formal berjenis parameter masukan}
{K.awal : nilai x sudah terdefinisi}
{K.akhir : di dalam prosedur, nilai x ditambah satu, lalu hasilnya dikalikan 10, disimpan ke
dalam y}
DEKLARASI
{tidak ada}
DESKRIPSI
x x + 1
y x * 10
Parameter Masukan/Keluaran
Pada kebanyakan aplikasi, informasi harus dikirim dalam dua arah, sehingga prosedur
juga harus dapat mengakomodasi baik masukan dari dan keluaran ke blok program
pemanggil. Untuk menghadapi hal itulah kita bisa menggunakan parameter
masukan/keluaran. Dengan menggunakan parameter masukan/keluaran, bila parameter
aktual diubah nilainya di dalam badan prosedur, maka sesudah pemanggilan prosedur nilai
parameter aktual di titik pemanggilannya juga berubah.

Deklarasi parameter masukan/keluaran di dalam header prosedur, tetapi harus dideklarasikan
dengan kata kunci input/output. Perhatikan contoh dibawah ini:
Procedure Dua(input/output x,y : integer)
{menambahkan nilai x dengan 2 dan mengurangi nilai y dengan 2}
{K.awal : x dan y sudah berisi nilai}
{K.akhir : nilai x bertambah2, nilai y berkurang 2, lalu dicetak ke piranti keluaran}
DEKLARASI
{tidak ada}
DESKRIPSI
x x + 3
y y 2
write(nilai x dan y diakhir prosedur dua : )
write( x = , x)
write( y = , y)

Algoritma ABC
{program yang memperlihatkan efek penggunaan parameter masukan}
DEKLARASI
a, b : integer
Procedure Dua(input/output x,y : integer)
{menambahkan nilai x dengan 2 dan mengurangi nilai y dg 2}
DESKRIPSI
a 15
b 10
write(nilai a dan b sebelum pemanggilan : )
write( a = , a)
write( b = , b)
Dua
write(nilai a dan b sesudah pemanggilan : )
write( a = , a)
write( b = , b)
Hasil dari algoritma tersebut adalah :
nilai a dan b sebelum pemanggilan :
a = 15
b = 10
nilai x dan y diakhir prosedur tiga:
a = 17
b = 8
nilai a dan b sesudah pemanggilan :
a = 17
b = 8

2. FUNGSI
Fungsi adalah modul program yang memberikan/mengambalikan sebuah nilai yang
bertipe sederhana (integer, real, boolean, dan string). Sebagaimana halnya dengan prosedur,
fungsi diakses dengan memanggil namanya. Selain itu, fungsi juga dapat mengandung daftar
parameter formal. Jenis parameter pada fungsi adalah paramater masukan. Jenis parameter
masukan pada fungsi disebabkan oleh kenyataan bahwa parameter pada fungsi merupakan
masukan yang digunakan oleh fungsi tersebut untuk menghasilkan nilai.

Mendefinisikan Fungsi
Struktur fungsi sama saja dengan struktur algoritma biasanya berikut ini :
Function Nama_Fungsi(input daftar parameter format) tipe hasil
{spesifikasi fungsi, menjelaskan apa yang dilakukan dan yang dikembalikan oleh fungsi ini}
DEKLARASI
{semua nama yang dipakai dalam algoritma fungsi dideklarasikan disini. Nama yang
dideklarasikan di dalam DEKLARASI lokal hanya dikenal dan dipakai di dalam fungsi ini
saja}
DESKRIPSI
{badan fungsi berisi kumpulan instruksi-instruksi untuk menghasilkan nilai yang akan
dikembalikan oleh fungsi}, Return hasil {pengembalian nilai yang dihasilkan fungsi}

Pemanggilan Fungsi
Fungsi diakses dengan cara memanggil namanya dari program pemanggil diikuti
dengan daftar parameter aktual, karena fungsi menghasilkan nilai maka nilai tersebut dapat
ditampung dalam sebuah peubah yang bertipe sama dengan tipe fungsi, atau nilai yang
diberikan oleh fungsi langsung dimanipulasi. Parameter aktual dapat berupa tetapan, nama
tetapan, atau nama peubah asalkan sudah terdefinisi tipe dan harganya.
Contoh : Buatkan fungsi untuk menentukan apakah sebuah bilangan bulat merupakan
bilangan genap atau ganjil ?
Function Genap(input n : integer) boolean
{mengembalikan niai true jika n adalah bilangan genap dan false jika
sebaliknya}
DEKLARASI
DESKRIPSI
return (n mod 2 = 0)
Program Pemanggil :
Algoritma Genap_Ganjil
{program utama menentukan apakah sebulah bilangan genap atau ganjil ?}
DEKLARASI
bil : integer
Function Genap(input n : integer) boolean
{mengembalikan niai true jika n adalah bilangan genap dan false jika
sebaliknya}
DESKRIPSI
read(bil)
if Genap (bil) then
write(n, adalah bilangan genap)
else
write(n, adalah bilangan ganjil)
endif



Contoh lain:
Diketahui bahwa s = ln r, sehingga r = e
S
, Tulislah ekspresi aritmetika tersebut dalam bentuk
function, yang didefinisikan sebagai berikut :
!
.......
! 3 ! 2 ! 1 ! 0
3 2 1 0
k
s s s s s
e
k
s
+ + + + + =
Hampiri nilai e
-w
dengan deret sampai 15 buah suku ( k = 15 ).
Penghampiran nilai exp (x) membutuhkan perhitungan pangkat pada bagian pembilang dan
faktorial pada bagian penyebut.
Tiap suku dapat dinyatakan dalam bentuk
! r
s
r
, r = 0, 1, 2, ., n
Jadi, jumlah deret adalah N N +
! r
s
r
, yang dalam hal ini:
N diinisialisasi dengan 0
s
r
dihitung dengan fungsi Pangkat
r! dihitung dengan fungsi Faktorial

function Pangkat(input a : real, input n: integer) real
{ Mengembalikan nilai perpangkatan s
r
}
DEKLARASI
P : real
i : integer
ALGORITMA
P 1
for i 1 to n do
p p * a
endfor
return p


function Fak(input a : real, input n: integer) integer
{ Mengembalikan nilai r!

}
DEKLARASI
i,f : integer
ALGORITMA
f 1
for i 1 to n do
f f * i
endfor
return f


function Exp(input x : real) real
{ Mengembalikan nilai exp(x)

}
DEKLARASI
const n : integer = 10
s : real
r : integer
function Pangkat(input a : real, input n: integer) real
{ Mengembalikan nilai perpangkatan s
r
}
function Exp(input x : real) real
{ Mengembalikan nilai exp(x)

}
ALGORITMA
N 0
for r 0 to n do
N N + Pangkat (s,r)/Fak (r)
endfor
return N


Buatlah algoritma yang meniru mekanisme pembacaan sandi-lewat (password) untuk masuk
ke sebuah sistem (ATM, server, reaktor nuklir, dsb). Apabila sandi-lewat yang dibaca salah,
maka pembacaan sandi-lewat hanya boleh diulang maksimum 3 kali. Sandi lewat yang benar
disimpan di dalam algoritma sebagai konstanta.
PROGRAM PemeriksaanKebenaranSandiLewat
{ Memeriksa kebenaran sandi-lewat. sandi-lewat dibaca di piranti keluar. Pemasukan sandi-
lewat dapat diulang lagi sampai maksimal 3 kali }
DEKLARASI
SandiLewat : string
Sah : Boolean
i : integer
function Valid(input p : string) Boolean
{ true jika password p benar, atau false jika tidak }
ALGORITMA
i 1
sah Boolean
repeat
read(SandiLewat)
if Valid(SandiLewat) then
sah true
else
i i + 1
endif
until (sah) or ( i>3 )
if not sah then
write ( sandi lewat salah)
endif
PEMROSESAN TEKS

Tiap-tiap data dalam runtunan diakses satu per satu dari awal sampai akhir. Diakses
artinya data tersebut dicapai lalu diproses bergantung pada proses yang diinginkan. Model
pengaksesan data yang tersusun secara beruntun dinamakan model pengaksesan beruntun.
SUSUNAN TEKS
Arsip teks untuk selanjutnya kita sebut saja teks adalah arsip yang terdiri dari deretan
karakter. Untaian karakter itu dapat membentuk sebuah kata. Yang dimaksud dengan kata
adalah kelompok karakter yang dipidahkan dengan kelompok lain dengan satu atau lebih
spasi. Dalam meninjau model pengaksesan beruntun pada teks, kita tidak memandang
sebuah teks disusun oleh baris-baris teks tetapi lebih condong menyerupai sebuah pita yang
birisi runtunan karakter-karakter. Suatu teks P didefinisikan di dalam bagian deklarasi yaitu:
DEKLARASI P : text {P adalah peubah teks}
TANDA AKHIR TEKS
Pemrosesan teks yang sama adalah proses pembacaan. Karena teks berisi runtunan
karakter, maka pembacaan teks adalah membaca karakter demi karakter secara beruntun,
mulai dari awal teks sampai akhir teks. Akhir teks ditandai dengan sebuah karakter khusus
(kita definisikan karakter .), bila pembacaan teks bertemu dengan titik maka proses
pembacaan teks dihentikan.
DEFINISI TEKS KOSONG
Pemrosesan teks selalu mempertimbangkan keadaan awal teks, yaitu kosong atau
tidak kosong. Sebuah teks mungkin saja kosong. Sebuah arsip yang hanya berisi spasi tidak
dapat disebut kosong, karena kita telah membuat perjanjian bahwa sembarang tekas harus
diakhiri dengan karakter titik, maka teks kosong adalah teks yang hanya berisi karakter titik.
PEMBACAAN TEKS
Pembacaan teks dimulai dari awal teks, dengan mengaikan ada sebuah pointer yang
menunjuk ke karakter yang akan dibaca. Setiap kali karakter yang ditunjuk oleh pointer
selesai dibaca, pointer berpindah secara otomatis ke karakter berikutnya. Karakter yang
sedang ditunjuk oleh pointer selesai dibaca, pointer berpindah secara otomatis ke karakter
berikutnya. Karakter yang sedang ditunjuk oleh pinter dinyatakan di dalam peubah C. Nama
peubah C didefinisikan di dalam bagian DEKLARASI program utama, sehingga ia dikenal di
seluruh bagian algoritma termasuk prosedur dan fungsi yang dipakai oleh algoritma.
DEKLARASI
C : char {karakter yang sedang ditunjuk oleh pointer baca}
Didefinisikan Reset_Teks adalah prosedur universal untuk teks. Reset_Teks menyebabkan
pointer akan menunjuk pada karakter pertama di teks. Jika teks kosong, pointer menunjuk
karakter titik.
Procedure Reset_Teks
{Menyiapkan teks pada posisi awal}
{K.awal : sembarang}
{K.akhir : pointer menunjuk pada karakter pertama di dalam teks. Akibat pemanggilan
prosedur ini, pointer menunjuk ke karakter pertama teks. Karakter yang ditunjuk mungkin
.}. Notasi yang digunakan untuk membaca karakter dari teks P adalah : Read(P;C)
{membaca karakter yang ditunjuk oleh pointer baca dari teks P. Karakter yang dibaca
disimpan di dalam pubah C}
Contoh :
Menghitung banyaknya karakter di dalam pita (tidak termasuk karakter .). Buatkan prosedur
untuk persoalan diatas !
Solusi :
Procedure Hitung_Banyak_Karakter(output n : integer)
{Menghitung banyaknya karakter di dalam teks}
{K.awal : sembarang}
{K.akhir : n berisi banyaknya karakter di dalam teks }
DEKLARASI
{tidak ada}
DESKRIPSI
n 0
Reset_Teks
Read(P;C)
While C . do
n n + 1
Read(P,C) {baca karakter berikutnya}
Endwhile {C = .}

L A R I K (ARRAY)

Sebuah peubah atau tetapan hanya menyimpan sebuah nilai dari tipe tertentu. Ia
tidak dapat menyimpan beberapa buah nilai yang bertipe sejenis. Dalam kegiatan
pemrograman, sekumpulan data yang bertipe sama perlu disimpan sementara di dalam
memori komputer untuk sewaktu-waktu dimanipulasi. Bila kumpulan data disimpan secara
beruntun di dalam memori, maka tiap elemen data dapat diacu dengan menggunakan indeks.
Indeks menyatakan posisi data relative di dalam kumpulannya struktur penyimpanan data
seperti itu dinamakan dengan larik (array), atau sering disebut juga tabel, vektor atau peubah
majemuk.
DEFINISI LARIK
Larik adalah struktur data yang menyimpan sekumpulan elemen yang bertipe sama,
setiap elemen diakses langsung melalui endeksnya. Indeks larik haruslah tipe data yang
menyatakan keterurutan, misalnya integer atau karakter. Misalnya larik yang bernama A
dengan delapan buah elemen dapat dibayangkan secara lojik sebagai sekumpulan kota yang
terurut (vertika atau horizontal). Tiap kotak pada larik tersebut diberi indeks integer 1, 2, 3,
.... 8. Tiap elemen larik ditulis dengan notasi :
A[1], A[2], A[3], A[4], A[5], A[6], A[7], A[8]
Angka didalam kurung siku menyatakan indeks larik. Setiap elemen larik menyimpan sebuah
nilai. Karena seluruh elemen larik bertipe sama, maka nilai yang disimpan oleh setiap elemen
juga harus bertipe sama.
Bentuk umum :
Nama _larik:array[tipe indeks] of tipe larik
Ciri-ciri Array :
- setiap elemen data array diacu melalui indeksnya
- karena elemen disimpan secara berurutan , indek array harus lah suatu tipe yang
mempunyai keterurutan (ada suksesor dan predecessor).
Contoh bertipe data : integer, karakter atau tipe data enumerasi.
Jika indeks integer maka keterturutan indeks sesuai dengan urutan integer
(0,1,2,3,4,5,6,..)
Jika indeks Karakter maka keterturutan indeks sesuai dengan urutan karakter
(a,b,c,d,e .).

contoh : x:array[1..11] of integer;
var gaji:array[5..10] of char;

MENDEFINISIKAN LARIK DALAM DEKLARASI
Larik adalah struktur data yang statik, artinya jumlah elemen larik harus sudah
diketahui sebelum program dieksekusi. Jumlah elemen larik tidak dapat diubah, ditambah,
atau dikurangi selama pelaksanaan program. Mendefinisikan larik di dalam bagian
DEKLARASI berarti :
Mendefinisikan banyaknya elemen larik
Mendefinisikan tipe elemen larik
Mendefinisikan banyaknya elemen larik berarti memesan sejumlah tempat di memori.
Memori mengalokasikan sejumlah lokasi memori sebanyak elemen larik yang bersangkutan.
Tipe elemen larik dapat bertipe sederhana (integer, real, char, boolean, string), tipe
terstruktur (tipe bentukan seperti record) atau bahkan bertipe larik. Contoh mendefinisikan
larik di dalam bagian deklarasi :
Sebagai Peubah
DEKLARASI
L : array[1..50] of integer
Nama_mhs : array[a..j] of string
Nilai_ujian : array[0..74] of real
Sebagai Tipe Baru
DEKLARASI
Type TabInt : array[1..100] of integer
P : TabInt
Mendefinisikan Ukuran Maksimum Elemen Larik Sebagai Sebuah Tetapan
20 11 12 11 1 1 0 3 2 6 9
1 2 3 4 5 6 7 8 9 10 11

m a u $ * 1
5 6 7 8 9 10

Indeks array
Elemen array
DEKLARASI
Const Nmaks = 1000
Type TabInt : array[1..Nmaks] of integer
P : TabInt
DEKLARASI
Harga_barang : array[1..N] of real
DEKLARASI
Const N = 15
Harga_barang : array[1..N] of real

CARA MENGACU ELEMEN LARIK
Cara mengacu elemen larik diacu melalui indeksnya. Nilai indeks harus terdefinisi. Dengan
mengacu pada larik yang sudah didefinisikan sebelum ini, maka contoh-contoh cara mengacu
elemen larik adalah :
L[4] {mengacu elemen keempat dari larik L}
Nama_mhs[b] {mengacu elemen kedua dari larik nama_mhs}
P[k] {mengacu elemen ke k dari larik P, asalkan nilai k sudah terdefinisi}
Harga_barang[i+1] {mengacu elemen ke i dari larik harga_kompuetr, asalkan nilai I sudah
terdefinisi}
Contoh memanipulasi atau menggunakan elemen larik :
L[4] 10 {mengisi elemen ke 4 dari larik L dengan nilai 10}
Read(P[k]) {membaca elemen ke k dari larik P}
If harga_barang[t] < 10000 then
Write(harga murah)
Else

PEMROSESAN LARIK
Elemen larik tersusun secara beruntun, karena itu elemennya diproses secara
beruntun melalui indeks yang terurut, asalkan indeks tersebut sudah terdefinisi. Pemrosesan
beruntun pada larik adalah pemrosesan mulai dari elemen pertama larik. Skema umum
algoritma memproses larik disebut juga skema mengunjungi (transversal) larik, berikut :
Procedure Skema_Umum_Pemrosesan_Larik
{Memproses setiap elemen larik secara beruntun, mulai dari indeks terkecil sampai indeks
terbesar}
DEKLARASI
Const Nmaks = 100 {banyak elemen larik}
Type larik : array[1..Nmaks] of integer
A : larik
K : integer {indeks larik}
DESKRIPSI
for i 1 to N do
proses a[i]
Endfor
Proses adalah aksi yang dilakukan terhadap elemen larik. Proses dapat berupa aksi pengisian
nilai, pembacaan, penulisan atau manipulasi lainnya.
Menginisialisasi Larik
Menginisialisasi larik adalah memberikan harga awal untuk seluruh elemen larik.
Inisialisasi kadang-kadang diperlukan misalnya mengosongkan elemen larik sebelum dipakai
untuk proses tertentu. Mengosongkan larik bertipe numerik dapat berupa pengisian elemen
larik dengan nol, sedangkan pada larik karakter, mengosongkan larik berarti mengisi elemen
larik dengan spasi atau karakter kosong. Nol atau spasi bukanlah satu-satunya nilai yang
dipakai untuk inisialisasi.
Contoh :
a. menginisialisasi elemen larik A[1], A[2], ...A[N] dengan nilai nol
Procedure InisialisasiA(output A : larik)
{menginisialisasi setiap elemen larik A dengan nol}
{K.awal : larik A belum terdefinisi nilai elemen-elemennya}
{K.akhir : seluruh elemen larik A bernilai nol}
DEKLARASI
K : integer {pencatat indeks larik}
DESKRIPSI
for K 1 to Nmaks do
A[K] 0
Endfor
b. menginisialisasi elemen larik A[1], A[2], ...A[N] masing-masing dengan nilai 1, 2, ..N
Procedure inisialisasiB(output A : larik)
{menginisialisasi setiap elemen larik A[K] dengan nilai k = 1 , 2 ...N}
{K.awal : larik A belum terdefinisi nilai elemen-elemennya}
{K.akhir : setelah inisialisasi A[1]=1, A[2]=2,..., A[N]=N }
DEKLARASI
K : integer {pencatat indeks larik}
DESKRIPSI
for K 1 to Nmaks do
A[K] K
Endfor

Mengisi Elemen Larik dari Piranti Masukan
Selain dengan pengisian nilai, elemen larik dapat diisi nilai yang dibaca dari piranti masukan
dengan perintah read seperti contoh berikut :
Procedure Baca_Larik(output A : larik)
{mengisi elemen larik A[1..N] dengan nilai yang dibaca dari piranti masukan}
{K.awal : larik A belum terdefinisi nilai elemen-elemennya, N sudah berisi jumlah elemen
efektif}
{K.akhir : setelah pembacaan, sebanyak N buah elemen larik A berisi nilai-nilai yang dibaca
dari piranti masukan}
DEKLARASI
K : integer {pencatat indeks larik}
DESKRIPSI
for K 1 to N do
read(A[K])
Endfor

Menulis Elemen Larik ke Piranti Keluaran
Menulis elemen larik dapat dicetak ke piranti keluaran dengan perintah print, seperti pada
contoh prosedur berikut :
Procedure Tulis_larik(input A : larik, input N : integer)
{mencetak elelemen larik A[1..N] ke piranti keluaran}
{K.awal : N sudah terdefinisi ukuran larik yang terpakai. Elemen larik A[1..N] sudah
terdefinisi nilai elemen-elemennya}
{K.akhir : diakhir prosedur, sebanyak N buah elemen larik A tersetak nilainya ke piranti
keluaran}
DEKLARASI
K : integer {pencatat indeks larik}
DESKRIPSI
for K 1 to N do
write(A[K])
Endfor

LARIK 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, nama
mahasiswa, mata kuliah yang diambil dan nilai mata kuliah. Maka algoritmanya sebagai
berikut :
Algoritma Baca_Larik_Mahasiswa
{mengisi elemen larik mahasiswa dengan data yang dibaca dari piranti masukan}
DEKLARASI
Const Nmaks = 100
Type mahasiswa : record <NIM : integer
NamaMhs : string
KodeMK : string
Nilai : char >
TabMhs : array[1..Nmaks] of mahasiswa
K : integer
N : integer
DESKRIPSI
Read(N)
for K 1 to N do
read(TabMhs[K].NIM)
read(TabMhs[K].NamaMhs)
read(TabMhs[K].KodeMK)
read(TabMhs[K].Nilai)
Endfor

MATRIKS

Definisi dan Notasi Matriks
Untuk deklarasi Array 2 dimensi:
nama array=array[tipeindeks1,tipeindeks2] of tipe array
contoh : A : array[1..3,1..2] of byte;
Salah satu implemantasi array 2 dimensi ini digunakan untuk membuat program MATRIK.
Beberapa pengertian tentang matriks :
1. Matriks adalah himpunan skalar (bilangan riil atau kompleks) yang disusun atau dijajarkan
secara empat persegi panjang menurut baris-baris dan kolom-kolom.
2. Matriks adalah jajaran elemen (berupa bilangan) berbentuk empat persegi panjang.
3. Matriks adalah suatu himpunan kuantitas-kuantitas (yang disebut elemen), disusun dalam
bentuk persegi panjang yang memuat baris-baris dan kolom-kolom.
Notasi yang digunakan:
Matrix A berukuran (ordo) m x n




Contoh Matrik dengan ordo 2 x 2
1 5
2 4
Matrik A diatas adalah matrik dengan ordo 2x2 sehingga matrik tersebut memiliki elemen :
A[1,1] = 1, A[1,2] = 5, A[2,1]= 2 dan A[2,2]=4.
Untuk membuat deklarasi tipe array dari kasus diatas (dalam Bahasa Pascal) :
Var A : array [1..2,1..2] of integer;

=
mn m m
n
n
a a a
a a a
a a a
A
....
: : : :
....
.....
2 1
2 22 21
1 12 11
A=
Untuk mengisi elemen matrik A diatas :
A[1,1] := 1;
A[1,2] := 5;
A[2,1] := 2;
A[2,2] := 4;
Jenis-jenis Matriks:
(i) MATRIKS NOL, adalah matriks yang semua elemennya nol. Sifat-sifat :
A+0=A, jika ukuran matriks A = ukuran matriks 0
A*0=0, begitu juga 0*A=0.
(ii) MATRIKS BUJURSANGKAR, adalah matriks yang jumlah baris dan jumlah kolomnya
sama. Barisan elemen a11, a22, a33, .ann disebut diagonal utama dari matriks bujursangkar
A tersebut.
(iii) MATRIKS DIAGONAL, adalah matriks bujursangkar yang semua elemen diluar
diagonal utamanya nol.


iv) MATRIKS SATUAN/IDENTITY, adalah matriks diagonal yang semua elemen
diagonalnya adalah 1.


Menulis Matriks
Menulis matriks artinya mencetak elemen-elemen matriks ke piranti keluaran (misalnya ke
layar peraga/printer) dengan asumsi bahwa elemen matriks sudah terdefinisi nilainya.
Procedure TulisMatriks (input M : MatriksInt, input Nbar, Nkol : integer)
{ Mencetak elemen matriks M[ 1Nbar, 1Nkol ] ke piranti keluaran. }
{ K. Awal : elemen-elemen matriks sudah terdefinisi harganya }
{ K. Akhir : seluruh elemen matriks tertulis di piranti keluaran }
DEKLARASI
i : integer (indeks baris)
j : integer (indeks kolom)
ALGORITMA
for i 1 to Nbar do
for j 1 to Nkol do
write (M[i,j])
endfor
endfor

3 0 0
0 5 0
0 0 2

1 0 0
0 1 0
0 0 1
Penjumlahan dua Matriks
Syarat : Dua matriks berordo sama dapat dijumlahkan. Contoh:





Contoh algoritmanya:
Buatlah procedure pengurangan dua buah matriks M dan N yang menghasilkan matriks L,
hanya dapat dilakukan bila ukuran matriks M dan N sama dan kedua matriks tersebut
telah terdefinisi nilai-nilainya. Matriks L akan berukuran sama dengan matriks M dan N
Pengurangan tersebut didefinisikan sebagai berikut :
L[i,j] = M[i,j] + N[i,j] , untuk semua i dan j
Procedure JumlahDuaMatriks (input A, B : MatriksInt, input Nbar, Nkol : integer)
output: C : Matriks
{ Menjumlahkan matriks A dan B, yaitu A + B = C }
{ K. Awal : elemen-elemen matriks sudah terdefinisi elemen-elemenya }
{ K. Akhir : seluruh elemen matriks C tertulis di piranti keluaran }
DEKLARASI
i : integer (indeks baris)
j : integer (indeks kolom)
ALGORITMA
for i 1 to Nbar do
for j 1 to Nkol do
C [ i , j ] A[ i , j ] + B[ i , j ]
endfor
endfor




+ +
+ +
=

h d g c
f b e a
h g
f e
d c
b a

6 7
7 4
1 4
1 3
5 3
6 1
ALGORITMA PENCARIAN (SEARCHING)

Dalam kehidupan sehari-hari sebenarnya kita sering melakukan pencarian data.
Sebagai contoh, jika kita menggunakan Kamus untuk mencari kata-kata dalam Bahasa Inggris
yang belum diketahui terjemahannya dalam Bahasa Indonesia. Contoh lain saat kita
menggunakan buku telepon untuk mencari nomor telepon teman atau kenalan dan masih
banyak contoh yang lain. Pencarian data sering juga disebut table look-up atau storage and
retrieval information adalah suatu proses untuk mengumpulkan sejumlah informasi di dalam
pengingat komputer dan kemudian mencari kembali informasi yang diperlukan secepat
mungkin. Algoritma pencarian (searching algorithm) adalah algoritma yang menerima sebuah
argumen kunci dan dengan langkah-langkah tertentu akan mencari rekaman dengan kunci
tersebut. Setelah proses pencarian dilaksanakan, akan diperoleh salah satu dari dua
kemungkinan, yaitu data yang dicari ditemukan (successful) atau tidak ditemukan (unsuccessful).
Metode pencarian data dapat dilakukan dengan dua cara yaitu pencarian internal
(internal searching) dan pencarian eksternal (external searching). Pada pencarian internal, semua
rekaman yang diketahui berada dalam pengingat komputer sedangakan pada pencarian
eksternal, tidak semua rekaman yang diketahui berada dalam pengingat komputer, tetapi ada
sejumlah rekaman yang tersimpan dalam penyimpan luar misalnya pita atau cakram magnetis.
Selain itu metode pencarian data juga dapat dikelompokaN menjadi pencarian statis (static
searching) dan pencarian dinamis (dynamic searching). Pada pencarian statis, banyaknya
rekaman yang diketahui dianggap tetap, pada pencarian dinamis, banyaknya rekaman yang
diketahui bisa berubah-ubah yang disebabkan oleh penambahan atau penghapusan suatu
rekaman. Ada dua macam teknik pencarian yaitu pencarian sekuensial dan pencarian biner.
Perbedaan dari dua teknik ini terletak pada keadaan data. Pencarian sekuensial digunakan
apabila data dalam keadaan acak atau tidak terurut. Sebaliknya, pencarian biner digunakan
pada data yang sudah dalam keadaan urut.

Pencarian Berurutan (Sequential Searching)
Pencarian berurutan sering disebut pencarian linear merupakan metode pencarian
yang paling sederhana. Pencarian berurutan menggunakan prinsip sebagai berikut : data yang
ada dibandingkan satu per satu secara berurutan dengan yang dicari sampai data tersebut
ditemukan atau tidak ditemukan. Pada dasarnya, pencarian ini hanya melakukan pengulangan
dari 1 sampai dengan jumlah data. Pada setiap pengulangan, dibandingkan data ke-i dengan
yang dicari. Apabila sama, berarti data telah ditemukan. Sebaliknya apabila sampai akhir
pengulangan tidak ada data yang sama, berarti data tidak ada. Pada kasus yang paling buruk,
untuk N elemen data harus dilakukan pencarian sebanyak N kali pula. Contoh:
13 16 14 21 76 21

Nilai yang dicari: 21
Maka elemen yang diperiksa : 13 16 14 21
Index ketemu : 4

Nilai yang dicari: 13
Maka elemen yang diperiksa : 13
Index ketemu : 1

Nilai yang dicari: 15
Maka elemen yang diperiksa : 13 16 14 21 76 21
Index ketemu : 0

Algoritma pencarian berurutan dapat dituliskan sebagai berikut :
1. i 0
2. ketemu false
3. Selama (tidak ketemu) dan (i <= N) kerjakan baris 4
4. Jika (Data[i] = x) maka ketemu true, jika tidak i i + 1
5. Jika (ketemu) maka i adalah indeks dari data yang dicari, jika tidak data tidak ditemukan
Di bawah ini merupakan fungsi untuk mencari data menggunakan pencarian sekuensial.

int SequentialSearch(int x)
{
int i = 0;
bool ketemu = false;
while ((!ketemu) && (i < Max)){
81
if(Data[i] == x)
ketemu = true;
else
i++;
}
if(ketemu)
return i;
else
return -1;
}
Fungsi diatas akan mengembalikan indeks dari data yang dicari. Apabila data tidak ditemukan
maka fungsi diatas akan mengembalikan nilai 1.

Pencarian Biner (Binary Search)
Salah satu syarat agar pencarian biner dapat dilakukan adalah data sudah dalam
keadaan urut. Dengan kata lain, apabila data belum dalam keadaan urut, pencarian biner
tidak dapat dilakukan. Dalam kehidupan sehari-hari, sebenarnya kita juga sering
menggunakan pencarian biner. Misalnya saat ingin mencari suatu kata dalam kamus Prinsip
dari pencarian biner dapat dijelaskan sebagai berikut :
Konsep Pencarian Binary/Bagi Dua
Pilih Indek Kiri (Low) dan Indek Kanan (High)
Langkah 1:
Bagi dua elemen larik pada elemen tengah.
Elemen tengah adalah elemen dengan indek middle=(low+high) div 2.
Elemen tengah (middle), akan membagi array menjadi 2 bagian yaitu:
Bagian kiri, dengan index LARIK[Low .. middle-1]
Bagian Kanan, dengan index LARIK[middle+1..High]
Langkah 2:
Periksa apakah LARIK[middle] = X , pencarian akan dihentikan sebab X sudah
ditemukan
Jika LARIK[middle] <> X, maka kita tentukan pencarian akan dilakukan disebelah kiri atau
kanan.
Jika LARIK[middle] < X, maka pencarian dilakukan dibagian kiri LARIK
Jika LARIK[middle] > X, maka pencarian dilakukan di bagian kanan LARIK
Langkah 3:
Ulangi langkah 1 sampai dengan X ditemukan, atau low > high (menentukan ukuran larik
sudah 0).

Ilustrasi Pencarian Bagi Dua.
81 76 21 18 16 13 10 7
1 2 3 4 5 6 7 8
Low High

1. Misalkan elemen yang dicari adalah X=18.
Langkah 1:
Low = 1 dan High = 8
Elemen tengah Middle = (1+8) div 2 = 9 div 2 = 4

81 76 21 18 16 13 10 7
1 2 3 4 5 6 7 8
Low Middle High
Langkah 2:
Larik[4] = X ? (18 = 18) true X ditemukan, pencarian dihentikan.
2. Misalkan elemen yang dicari adalah X=16.
ITERASI 1
Langkah 1:
Low = 1 dan High = 8
Elemen tengah Middle = (1+8) div 2 = 9 div 2 = 4
81 76 21 18 16 13 10 7
1 2 3 4 5 6 7 8
Low Middle High
kiri kanan

Langkah 2:
Larik[4] = X ? (18 = 16) FALSE, sehingga diputuskan pencarian di kiri atau dikanan.
Jika Larik[4] > 16 ?, (18 > 16) TRUE, lakukan pencarian disebelah kanan dengan Low
= middle+1 4+1 = 5 dan High = 8, Tetap.
16 13 10 7
5 6 7 8
low High

ITERASI 2
Langkah 1:
Low = 5 dan High=8
Elemen tengah Middle = (5+8) div 2 = 13 div 2 = 6
16 13 10 7
5 6 7 8
low middle High

Langkah 2:
Larik[6] = X ? (13 = 16) FALSE, sehingga diputuskan pencarian di kiri atau dikanan.
Jika Larik[6] > 16 ?, (13 > 16) FALSE, lakukan pencarian disebelah KIRI dengan Low
= 5 (TETAP) dan High = middle-1 = 5
16
5
Low/high
ITERASI 3
Langkah 1:
Low = 5 dan High=5
Elemen tengah Middle = (5+5) div 2 = 10 div 2 = 5
16
5
middle
Langkah 2:
Larik[5] = X ? (16 = 16) TRUE (X ditemukan , pencarian dihentikan)
3. Misalkan elemen yang dicari X=100.
Gambarkan langkah-langkah penyelesaiannya?

Dari ilustrasi diatas dapat dibuat algoritma sebagai berikut: (dengan data urut descending)
1. Masukan Bil yang dicari X
2. tentukan low=1 dan high = N
3. Tentukan nilai tengah : middle = (low + high) div 2
4. Cek, jika LARIK[middle] = X maka Nilai X yang dicari ditemukan, kelangkah 8
5. jika LARIK[middle] > X maka low=middle+1, kelangkah 7
6. jika LARIK[middle] < X maka high=middle-1, kelangkah 7
7. Jika low > high, bil X tidak ditemukan dan kelangkah 8, jika tidak kelangkah 3.
8. selesai.





Di bawah ini merupakan fungsi untuk mencari data menggunakan pencarian biner.
int BinarySearch(int x)
{
int L = 0, R = Max-1, m;
bool ketemu = false;
while((L <= R) && (!ketemu))
{
m = (L + R) / 2;
if(Data[m] == x)
ketemu = true;
else if (x < data[m])
R = m - 1;
else
L = m + 1;
}
if(ketemu)
return m;
else
return -1;
}
Fungsi diatas akan mengembalikan indeks dari data yang dicari. Apabila data tidak ditemukan
maka fungsi diatas akan mengembalikan nilai 1. Jumlah pembandingan minimum pada
pencarian biner adalah 1 kali, yaitu apabila data yang dicari tepat berada di tengah-tengah.
Jumlah pembandingan maksimum yang dilakukan dengan pencarian biner dapat dicari
menggunakan rumus logaritma, yaitu : C = 2log(N)
Tehnik Pencarian Nilai MAXMIN :
Tehnik StaritMAXMIN
Tehnik D and C
Teknik yangt digunakan untuk mencari nilai maksimum dan minimum dari sekumpulan nilai.
1. Tehnik Pencarian MAXMIN
Searching dengan Tehnik STRAITMAXMIN
Waktu tempuh yang digunakan untuk menyelesaikan pencarian hinggan
mendapatkan solusi yang optimal terbagi atas :
a. Best Case
b. Average Case
c. worst Case


Algoritma dari Proses Pencarian adalah (ada pada slide):
1. Masukan N, tentukan i=1.
2. Tentukan max dan min = A[i]
3. i = 2
4. Jika i<= N maka kelangkah 5, jika tidak kelangkah 8
5. jika A[i] > max maka max=A[i] dan kelangkah 7
6. jika tidak maka (jika A[i] < min maka min = A[i].
7. i = i+1, ulangi langkah 4.
8. cetak max dan min
program straitmaxmin;
var
i,N:integer;
max,min : integer;
A : array[1..10] of integer;
begin
write('masukan N = '); readln(N);
for i:=1 to N do
readln(A[i]);

max := A[1]; min := A[1];

for i:=2 to N do
if A[i] > max then max:=A[i]
else if A[i] < min then min := A[i];

writeln;
writeln('nilai max min= ',max:3, min:3);
end.
masukan N = 5
2
5
1
6
4

nilai max min = 6 1
-----------------
masukan N = 6
7
5
3
9
6
2

nilai max min = 9 2

Searching dengan teknik D and C.


METODE GREEDY

Metode Greedy digunakan untuk memecahkan persoalan optimasi.
Persoalan optimasi adalah persoalan mencari solusi optimum
Persoalan optimasi ada 2 Maksimasi
Minimasi
Contoh Masalah Optimasi:
Penukaran Uang
Diberikan uang senilai A. Tukar A dengan koin-koin uang yang ada.
Berapakah jumlah minimum koin yang diperlukan untuk penukaran uang tersebut.

Persoalan Minimasi.
Contoh 1: tersedia banyak koin 1, 5, 10, 25
32 = 1 + 1 + + 1 (32 koin)
32 = 5 + 5 + 5 + 5 + 10 + 1 + 1 (7 koin)
32 = 10 + 10 + 10 + 1 + 1 (5 koin)
Minimum: 32 = 25 + 5 + 1 + 1 (4 koin)
Greedy = rakus, tamak
Algoritma greedy membentuk solusi langkah per langkah (step by step).
Pada setiap langkah terdapat banyak pilihan yang perlu dieksplorasi.
Sehingga, pada setiap langkah harus dibuat keputusan yang terbaik dalam menentukan
pilihan.
(keputusan yang telah diambil pada suatu langkah tidak dapat diubah lagi pada langkah
selanjutnya).
Pada setiap langkah membuat pilihan optimum lokal
Dengan harapan bahwa langkah sisanya mengarah kesolusi optimum global.
Metode Greedy digunakan dalam menyelesaikan masalah
Optimal Storage on Tapes Problem
Knapsack Problem
Minimum Spanning Tree Problem
Shortest Path Problem

Penjelasan Storage on Tape Problen ada pada SLIDE.
Knapsack Problem
Knapsack dapat diartikan sebagai karung, kantung, atau buntilan.
Karung digunakan untuk memuat sesuatu.
Dan tentunya tidak semua objek dapat ditampung di dalam karung. Karung tersebut
hanya dapat menyimpan beberapa objek dengan total ukurannya (weight) lebih kecil atau
sama dengan ukuran kapasitas karung.
Setiap objek itupun tidak harus kita masukkan seluruhnya. Tetapi bisa juga sebagian saja.
knapsack 0/1, yaitu suatu objek diambil seluruh bagiannya atau tidak sama sekali.
Setiap objek mempunyai nilai keuntungan atau yang disebut dengan profit.
Tujuan ingin mendapatkan profit yang maksimal. Untuk mendapatkan profit
maksimal Belum tentu menggunakan banyak objek yang masuk akan
menguntungkan. Bisa saja hal yang sebaliknya yang terjadi.
Cara terbaik agar menguntungkan : bukan hanya dari hasilnya optimal tetapi juga banyaknya
langkah yang dibutuhkan
Knapsack 0/1
Diberikan n buah objek dan sebuah knapsack dengan kapasitas bobot W. Setiap objek
memiliki properti bobot (weigth) wi dan keuntungan(profit) pi. persoalan adalah memilih
memilih objek-objek yang dimasukkan ke dalam knapsack sedemikian sehingga
memaksimumkan keuntungan. Total bobot objek yang dimasukkan ke dalam
knapsack tidak boleh melebihi kapasitas knapsack.
Solusi persoalan dinyatakan sebagai vektor n-tupel:
X = {x1, x2, , xn}
xi = 1 jika objek ke-i dimasukkan ke dalam knapsack,
xi = 0 jika objek ke-i tidak dimasukkan.
Persoalan 0/1 Knapsack dapat kita pandang : sebagai mencari himpunan bagian
(subset) dari keseluruhan objek yang muat ke dalam knapsack dan memberikan total
keuntungan terbesar.
Penyelesaian dengan Greedy:

1. Greedy by Profit
Pada setiap langkah Knapsack diisi dengan obyek yang mempunyai keuntungan terbesar.
Strategi ini mencoba memaksimumkan keuntungan dengan memilih objek yang paling
menguntungkan terlebih dahulu. Pertama kali dilakukan adalah menurutkan secara
menurun obyek-obyek berdasarkan profitnya . Kemudian obyek-obyek yang dapat
ditampung oleh knapsack diambil satu persatu sampai knapsack penuh atau (sudah tidak
ada obyek lagi yang bisa dimasukan).
Data awal :
w1 = 2; p1 = 12
w2 = 5; p2 = 15
w3 = 10; p3 = 50
w4 = 5; p4 = 10
Kapasitas knapsack W = 16

2. Greedy by Wight
Pada setiap langkah, knapsack diisi dengan objek yang mempunyai berat paling ringan.
Strategi ini mencoba memaksimumkan keuntungan dengan memasukan sebanyak
mungkin objek kedalam knapsack.
Pertama kali yang dilakukan adalah mengurutkan secara menaik objek-objek berdasarkan
weight-nya. Kemudian obyek-obyek yang dapat ditampung oleh knapsack diambil satu
persatu sampai knapsack penuh atau (sudah tidak ada obyek lagi yang bisa dimasukan).
Data awal :
w1 = 6; p1 = 12
w2 = 5; p2 = 15
w3 = 10; p3 = 50
w4 = 5; p4 = 10
Kapasitas knapsack W = 16

3. Greedy By Density
Pada setiap langkah, knapsack diisi dengan obyek yang mempunyai densitas terbesar
(perbandingan nilai dan berat terbesar). Strategi ini mencoba memaksimumkan
keuntungan dengan memilih objek yang mempunyai keuntungan per unit berat terbesar.
Pertama kali yang dilakukan adalah mencari nilai profit per unit/ density dari tiap-tiap
objek. Kemudian obyek-obyek diurutkan berdasarkan densitasnya. Kemudian obyek-
obyek yang dapat ditampung oleh knapsack diambil satu persatu sampai knapsack penuh
atau (sudah tidak ada obyek lagi yang bisa dimasukan).

Perbandingan hasil:

Penggunaan 3 strategi diatas tidak menjamin akan memberikan solusi optimal.

CONTOH 2:
Kapasitas M=20, dengan jumlah barang =3
Berat Wi masing-masing barang (W1,W2,W3) (18,15,,10)
Nilai Profit masing-masing barang (P1,P2,P3) (25,24,15)
Pilih Barang dengan nilai profit maksimal
P1=25 x1=1. batas atas nilai
P2=24 x2=2/15.
P3=15 x3 =0. batas bawah nilai.
Pilih barang dengan berat minimal
W1 = 18 x1=0. batas bawah
W2=15 x2 = 2/3
W3=10 x3=1. batas atas.
Pilih barang dengan menghitung perbandingan yang terbesar dari profit dibagi Berat (Pi/Wi)
diurut secara tidak naik.
P1/w1=25/18 (1.38) x1=0. karena terkecil x1=0
P2/w2=24/ 15 (1.6) x2=1. karena terbesar x2=1
P3/w3=15/10 (1.5) x3=1/2 dicari dengan fungsi pembatas x3=1/2.
Buat Tabel
Solusi (x1,x2,x3) wixi pixi
Pi max 1,2/15,0 20 28.2
Wi min 0,2/3,1 20 31.0
Pi/Wi max 0,1,1/2 20 31.5
Nilai profit maksimal = 31.5.












METODE DEVIDE AND CONQUER

Pengurutan (Sorting).
proses mangatur sekumpulan obyek/data menurut urutan atau susunan tertentu.
Urutan obyek/data tersebut dapat menaik (ascending) atau menurun (desencending).
Data yang diurutkan dapat berupa data bertipe dasar atau data bertipe struktur
Data yang sudah terurut memiliki keuntungan yaitu Mempercepat proses pencarian data.
Metode Pengurutan
Algoritma pengurutan / sorting bermacam-macam dan setiap algoritma ini memiliki kinerja
yang berbeda-beda. Berikut ini macam-macam algoritma pengurutan:
1. Metode Selection Sort
2. Metode Buble Sort
3. Metode Merge Sort
4. Metode Quick Sort
5. Metode Insertion
Hal yg mempengaruhi Kecepatan Algoritma Sorting adalah Jumlah Operasi Perbandingan &
Jumlah OperasiPemindahan Data

1. Selection Sort (Metode Seleksi).
Tehnik pengurutan dengan cara pemilihan elemen dgn memilih elemen data terkecil utk
kemudian dibandingkan & ditukarkan dgn elemen pd data awal, dst s/d seluruh elemen
shg akan menghasilkan pola data yg telah disort.
Merupakan kombinasi antara sorting dan searching
Untuk setiap proses, akan dicari elemen-elemen yang belum diurutkan yang memiliki
nilai terkecil atau terbesar akan dipertukarkan ke posisi yang tepat di dalam array.
Misalnya untuk putaran pertama, akan dicari data dengan nilai terkecil dan data ini
akan ditempatkan di indeks terkecil (data[0]), pada putaran kedua akan dicari data
kedua terkecil, dan akan ditempatkan di indeks kedua (data[1]).


Ilustrasi Algoritma Selection Sort



29 27 10 8 76 21

2. data pertama ditukar
dengan elemen yang
paling kecil.
1. memilih elemen terkecil,
membandingkan dan
menukarkan dengan dengan
data awal yang bernilai lebih
besar.

29 27 10 8 76 21
1 2 3 4 5 6

Set Index awal = 1
Index terkecil = 4 8
Tukar index 1dengan 4

8 27 10 29 76 21
1 2 3 4 5 6

Set Index awal = 2
index terkecil = 3 10
Tukar index 2 dengan 3

8 10 27 29 76 21
1 2 3 4 5 6

Set Index awal = 4
index terkecil = 6 27
Tukar index 4 dengan 6

8 10 21 29 76 27
1 2 3 4 5 6

Set Index awal = 3
index terkecil = 6 21
Tukar index 3 dengan 6
Set Index awal = 5
index terkecil = 6 29
Tukar index 5 dengan 6

8 10 21 27 76 29
1 2 3 4 5 6

Index awal = 6 Selesai
Data sudah terurut secara
ascending

8 10 21 27 29 76
1 2 3 4 5 6

ALGORITMA SELECTION SORT.
1. Pengecekan dimulai data ke-1 sampai dengan data ke-n
2. Tentukan bilangan dengan Index terkecil dari data bilangan tersebut
3. Tukar bilangan dengan Index terkecil tersebut dengan bilangan pertama ( I = 1 ) dari
data bilangan tersebut
4. Lakukan langkah 2 dan 3 untuk bilangan berikutnya ( I= I+1 ) sampai didapatkan
urutan yg optimal
PENULISAN ALGORITMA KE DALAM PROGRAM
Algoritma metode seleksi :
- langkah 0 : Baca vector yang akan diurutkan (dalam program utama)
- langkah 1 : Kerjakan langkah 2 sampai 4 untuk i = 1 sampai N -1
- langkah 2 : Tentukan awal = i , kerjakan langkah 3 untuk j = i +1 sampai N
- langkah 3 : (Mencari data terkecil)
Tes : apakah A[awal] > A[j], jika ya maka ubah awal = j
- langkah 4 : Tukarkan nilai A[awal] dengan A[i]
- langkah 5 : selesai
program pascal;
uses crt;
VAR
Data : array[1..10] of integer;
i,j,n,bantu : integer;
BEGIN
clrscr;
Writeln('Masukkan data anda !');writeln;
Write('jumlah data anda ? ');readln(n);
writeln('Mulai memasukan data ');
for i:=1 to n do
begin
Write('Data ke-',i,' = ');
readln(data[i]);
end;
for i:=1 to N-1 do
for j := i+1 to N do
begin
if data[i] > data[j] then
begin
Bantu := data[i];
data[i] := data[j];
data[j] := Bantu;
end;
end;
for i:=1 to n do
write('(',data[i],'),');
readln;
end.
Hasil program
Masukkan data anda !
jumlah data anda ? 5
Mulai memasukan data
Data ke-1 = 4
Data ke-2 = 6
Data ke-3 = 2
Data ke-4 = 8
Data ke-5 = 5
(2),(4),(5),(6),(8),
2. Metode Bubble Sort (Gelembung)
Teknik yang diinspirasi oleh gelembung sabun yang berada dipermukaan air. Karena
berat jenis gelembung lebih ringan dari pada air, maka gelembung akan naik keatas.
(benda yang berat akan terbenam, benda ringan terapung).
Elemen data yang paling kecil diapungkan
diangkat keatas melalui proses
pertukaran.
Bubble Sort mengurutkan data dengan
cara membandingkan elemen sekarang
dengan elemen berikutnya
Algoritma Bubble Sort
1. Pengecekan mulai dari data ke-1 sampai data ke-n
2. Bandingkan data ke-n dengan data sebelumnya (n-1)
3. Jika lebih kecil maka pindahkan bilangan tersebut dengan bilangan yg ada didepannya
( sebelumnya ) satu persatu (n-1,n-2,n-3,....dst)
4. Jika lebih besar maka tidak terjadi pemindahan
5. Ulangi langkah 2 dan 3 s/d sort optimal.
Analogi :
Larik dengan urut menaik, elemen larik yang berharga paling kecil diapungkan,
artinya diangkat ke atas (atau ke ujung kiri larik) melalui proses pertukaran.
Proses pengapungan ini dilakukan sebanyak N-1 langkah 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]. Setelah langkah terakhir, diperoleh larik L[1..N] yang terurut menaik.


25 27 10 8 76 21
1 2 3 4 5 6

Langkah 1: Index ke n = 6 sampai ke 2.
Index 6 21 76
Index (n-1) = 5 8 21 76
Index = 4 8 10 21 76
Index = 3 8 27 10 21 76
Index = 2 8 25 27 10 21 76


8 25 27 10 21 76
1 2 3 4 5 6

Langkah 2: Index ke n = 6 sampai ke 3
Index 6 21 76
Index (n-1) = 5 10 21 76
Index = 4 10 27 21 76
Index = 3 10 25 27 21 76


8 10 25 27 21 76
1 2 3 4 5 6

Langkah 3: Index ke n = 6 sampai ke 4.
Index 6 21 76
Index (n-1) = 5 21 27 76
Index = 4 21 25 27 76


Contoh 2 :









8 10 21 25 27 76
1 2 3 4 5 6

Langkah 4: Index ke n = 6 sampai ke 5.
Index 6 27 76
Index (n-1) = 5 25 27 76


8 10 21 25 27 76
1 2 3 4 5 6

Langkah 5: Index ke n = 6 .
Index 6 27 76


8 10 21 25 27 76
1 2 3 4 5 6

Elemen sudah urut dan proses sorting selesai
Contoh 3 :

Bubble Sort Disebut juga dengan metode Penukaran (Exchange Sort), yaitu metoda yang
mendasarkan pada penukaran elemen untuk mencapai keadaan urut yang diinginkan.
Algoritma Metode gelembung :
- langkah 0 : Baca vector yang akan diurutkan (dalam program utama)
- langkah 1 : Kerjakan langkah 2 untuk i = 1 sampai N-1
- langkah 2 : Kerjakan langkah 3 untuk j = 1 sampai N- i
- langkah 3 : Tes apakah A[j] > A[j +1] ? Jika ya, tukarkan nilai kedua elemen ini
- langkah 4 : Selesai
Contoh Program Buble Sort
program pascal;
uses crt;

VAR
Data : array[1..10] of integer;
i,j,n,bantu : integer;

BEGIN
clrscr;
Writeln('Masukkan data anda !');writeln;
Write('jumlah data anda ? ');readln(n);
writeln('Mulai memasukan data ');

for i:=1 to n do
begin
Write('Data ke-',i,' = ');
readln(data[i]);
end;
for i:=1 to N-1 do
for j := 1 to N-i do
begin

if data[j] > data[j+1] then
begin
Bantu := data[j];
data[j] := data[j+1];
data[j+1] := Bantu;
end;
end;

for i:=1 to n do
write('(',data[i],'),');

readln;
end.
Hasil :
Masukkan data anda !

jumlah data anda ? 5
Mulai memasukan data
Data ke-1 = 5
Data ke-2 = 3
Data ke-3 = 6
Data ke-4 = 2
Data ke-5 = 3
(2),(3),(3),(5),(6),
3. Metode INSERTION SORT (Sisip)

Algoritma ini dianalogikan seperti mengurutkan kartu,
selembar demi selembar kartu diambil dan disisipkan (insert)
ke tempat yang seharusnya.
Pengurutan dimulai dari data ke-2 sampai dengan data
terakhir, jika ditemukan data yang lebih kecil, maka akan
ditempatkan (diinsert) diposisi yang seharusnya.
Pada penyisipan elemen, maka elemen-elemen lain akan
bergeser ke belakang
Analogi :
mengurutkan satu set kartu dari kartu yang bernilai paling kecil hingga yang paling
besar.
Seluruh kartu diletakkan pada meja, kita sebut meja pertama, disusun dari kiri ke
kanan dan atas ke bawah.
Kemudian pada meja kedua tempat meletakkan kartu yang diurutkan.
Ambil kartu pertama yang terletak pada pojok kiri atas meja pertama dan letakkan
pada meja kedua.
Ambil kartu kedua dari meja pertama, bandingkan dengan kartu yang berada pada
meja kedua, kemudian letakkan pada urutan yang sesuai setelah perbandingan.
Proses tersebut akan berlangsung hingga seluruh kartu pada meja pertama telah
diletakkan berurutan pada meja kedua.
Contoh :
Jika sudah terurut 3,6,9, dan selanjutnya belum terurut 5,7,2,....
5 akan disisipkan di antara 3 dan 6, sehingga menjadi 3,5,6,9.
7 akan disisipkan di antara 6 dan 9, sehingga menjadi 3,5,6,7,9.
2 akan disisipkan sebelum 3, sehingga menjadi 2,3,5,6,7,9.

Contoh :

METODE DEVIDE AND CONQUER
Devide and Qonquer adalah metode pemecahan masalah yang bekerja dengan membagi
masalah/problem menjadi beberapa sub-masalah/sub-problem yang lebih kecil, kemudian
menyhelesaikan masing-masing sub-masalah secara independen dan akhirnya
menggabungkan solusi masing-masing sub masalah sehingga menjadi solusi masalah semula.
Masalah sub masalah 1 Sub solusi 1 Solusi masalah
Sub masalah 2 sub solusi 2
Sub-masalah 3 Sub solusi 3
Algortima devide and conquer menawarkan penyederhanaan masalah dengan pendekatan 3
langkah masalah:
pembagian masalah menjadi sekecil mungkin
penyelesaian masalah-masalah yang dikecilkan
penggabungan solusi untuk mendapatkan solusi optimal secara keseluruhan.
tipe algoritma yang mengimplementasikan/kategori D&C antara lain merge sort
4. Metode Merge Sort
Merge sort adalah algoritma yang digunakan untuk menyusun list yang diberikan dengan cara
membagi list yang diberikan menjadi dua bagian yang lebih kecil. Kedua list yang baru ini
kemudian akan disusun secara terpisah. Setelah kedua buah list tersusun, maka akan dibentuk
list baru yang merupakan hasil penggabungan dua buah list sebelumnya
Konsep :
1). Array yang belum terurut, dibagi menjadi separuh
Proses diulang terus sampai ditemukan bagian terkecil
2). Hasil dari setiap proses digabungkan :
membandingkan elemen pertama dari setiap bagian
hapus elemen terkecil dan letakan pada hasil
Ulangi semua proses sampai semua elemen terurut
3 9 4 1 5 2
List diatas dibagi menjadi dua bagian:
list 1: | list 2:
3 9 4 | 1 5 2
Kedua list yang baru disusun sendiri-sendiri menjadi:
list 1: | list 2:
3 4 9 | 1 2 5
Setelah itu dubentuk list baru yang merupakan gabungan kedua list tadi:
List baru:
1
list 1: | list 2:
3 4 9 | 2 5
List baru:
1 2
list 1: | list 2:
3 4 9 | 5
List baru:
1 2 3
list 1: | list 2:
4 9 | 5
List baru:
1 2 3 4
list 1: | list 2:
9 | 5
List baru:
1 2 3 4 5
list 1: | list 2:
9 | kosong
List baru:
1 2 3 4 5 9
list 1: | list 2:
kosong | kosong
Dan akhirnya akan didapat list yang sudah tersusun:
List:
1 2 3 4 5 9
Contoh 2
Contoh : data berikut ini akan diurutkan

1). Divide/membagi data yang tidak terurut menjadi dua bagian
2). Ulangi sampai setiap array hanya memiliki sebuah data
3). Lakukan merge untuk memperoleh data terurut
1).

2).

3).

4).

5).

6).

7).

8).

9).

10).

11).

12).

13).

14).

15).

16).

17).

18).

19).

20).

21).

22).

23).

24).

25).

26).

27).

28).

29).

30).

31).

32).

33).

34).

35).

36).

37).

38).

39).
















LATIHAN -LATIHAN:
Di Negara kita (Indonesia) warga Negara berumur 17 tahun sudah diharuskan
mempunyai KTP, ada anak bernama Dina dimana 2 hari lagi dia berumur 17 tahun dan
dia akan mencari KTP yang akan digunakan juga untuk mencari SIM A. Maka secara
algoritma dengan bantuan notasi-notasi pemrograman , bagaimana/langkah apa supaya
Dina bias mendapatkan KTP dan SIM.
Menghitung banyaknya komisi yang diterima seorang salesman berdasarkan jumlah
penjualan yang dicapainya. Salesman itu mendapat komisi 10% dari hasil penjualannya.
Masukan algoritma adalah nama salesman dan jumlah penjualan yang dicapainya.
Tampilkan ke piranti keluaran nama salesman dan besar komisi yang diperolehnya.
Misalkan kita ingin mencetak angka 1, 2, ..., 50 di layar, dengan satu angka pada setiap
baris. Buatkan algoritmanya dengan struktur pengulangan while do, repeat until dan
for.
Misalkan kita ingin mencetak angka 1, 2, ..., N di layar, dengan satu angka pada setiap
baris, yang dalam hal ini N dibaca dari piranti masukkan. Buatkan algoritmanya dengan
struktur pengulangan while do, repeat until dan for.
Hitung jumlah angka dari 1 sampai N. nilai N dibaca dari papan kunci. Misalkan N = 5,
maka 1 + 2 + 3 + 4 + 5 = 15. Buatkan algoritmanya dengan struktur pengulangan while
do, repeat until dan for.
Data bilangan dibaca dari papan kunci. Nilai rat-rata adalah jumlah seluruh bilangan
debagi dengan banyak bilangan. Misalkan ada 5 buah data bilangan, yaitu 12, 10, 6, 2, 4
maka rata-ratanya adalah (12 + 10 + 6 + 2 + 4 )/5 = 34/5 = 6,8.
Hitung rata-rata dari sejumlah data bilangan bulat tersebut. Buatkan algoritmanya dengan
struktur pengulangan while do, repeat until dan for.
Buatkan prosedur dan program pemanggilnya untuk menukarkan dua buah nilai di
dalam peubah A dan B !
Buatkan fungsi dan program pemanggilnya untuk menentukan nilai terbesar antara
dua buah peubah bilangan bulat A dan B ! Nilai terbesar merupakan keluaran dari
prosedur.
Buatkan fungsi dan program pemanggilnya untuk menentukan sebuah tahun kabisat
atau bukan kabisat !
Buatkan fungsi dan program pemanggilnya untuk mengembalikan angka romawi untuk
angka arab yang diberikan ( hanya untuk angka arab dari 1 sampai 10) !
Buatlah fungsi untuk menampilkan tulisan Algoritma dan Pemrograman sebanyak 30
kali! Ubahlah menjadi sebanyak n kali!
Buatlah fungsi untuk menjumlahkan dua buah bilangan Tambahkanlah: mengurangi,
membagi, mengkali dua buah bilangan
Buatlah fungsi untuk menentukan bilangan terkecil dari 3 buah bilangan yangdiinputkan
Buatlah fungsi untuk mengubah nilai ke huruf (A,B, C, D, dan E)
Buatlah fungsi untuk mengubah bilangan pecahan ke bilangan bulat!
Buatlah fungsi untuk menjumlahkan deret: 1+3+5+7+ +n
Buatlah algoritma untuk menghitung konversi suhu.dari Celcius menjadi Reamurdan
Farenheit. Input: suhu dalam Celcius Proses: R = 4/5 * C dan F = 9/5 * C + 32
Output: suhu dalam Reamur dan Farenheit
Buatlah algoritma untuk mencari sisi miring dari suatu segitiga siku-siku, jika
diketahui panjang sisi yang membentuk sudut siku-siku. Input: a dan b, yaitu panjang
sisi pembentuk sudut siku-siku Proses: c = a2 + b2 Ouput: sisi miring (c)
Buatlah algoritma untuk menentukan suatu bilangan adalah bilangan prima.
Buatlah fungsi algoritma pencarian berurutan dengan menggunakan struktur
data single linked list. Sebutkan keuntungan dari penggunaan struktur data single linked
list ini dibandingkan dengan menggunakan array
Buatlah fungsi untuk menyisipkan (insert) data pada algoritma pencarian berurutan
apabila data tersebut tidak ditemukan. Data baru diletakkan pada posisi terakhir.
Implementasikan fungsi ini dengan menggunakan struktur data array dan single linked
list.
Buatlah fungsi algoritma pencarian biner dengan menggunakan struktur data single
linked list
Buatlah fungsi untuk menyisipkan (insert) data pada algoritma pencarian biner apabila
data tersebut tidak ditemukan. Data baru disisipkan pada posisi yang tepat sehingga
kumpulan data tersebut tetap terurut. Implementasikan fungsi ini dengan menggunakan
struktur data array dan single linked list.


Daftar Pustaka dan Referensi yang bisa digunakan
Antonie Pranata, Algoritma dan Pemrograman, J&J Learning Yogyakarta, 2000
Donald Knuth, The Art Of Computer Programming, Volume 1 / Fundamental Algorithms,
2nd edition, Addison Wesley
Iwan Binanto, Konsep Bahasa Pemrograman, Penerbit Andi Yogyakarta, 2005
Jogianto H.M, Konsep Dasar Pemrograman Bahasa C, Penerbit Andi, 2000
Rinaldi Munir, Algoritma dan Pemograman dengan bahasa pascal dan C, Penerbit
informatika, 2009
Moh. Sjukani, Algoritma dan Struktur Data dengan C, C++, dan Java, Mitra Wacana Media, 2005
Simon Harris and James Ross, Beginning Algorithms, Willey Publishing Inc, 2006
Thomas H. Cormen et.al, Introduction to Algorithms Second Edition, MIT Press, McGraw-Hill
Book Company, 2001
Thompson Susabda Ngoen, Pengantar Algoritma dengan Bahasa C, Penerbit Salemba
Teknika, 2004
Pengantar Algoritma dan Pemrograman, www.ilmukomputer.com,Alex Budiyanto

Anda mungkin juga menyukai