modul logika_ algoritma

90
D K IKTAT ULIAH D K IKTAT ULIAH L A OGIKA LGORITMA Disusun oleh: Candra Mecca Sufyana

Upload: candra-mecca-sufyana

Post on 26-Dec-2015

549 views

Category:

Documents


13 download

DESCRIPTION

Secara spesifik, algoritma 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.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 terbalialgoritma 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 masalahPenasaran tentang algoritma pemograman… Belajar lebih lanjut yuk ….. bisa download di modul ini

TRANSCRIPT

Page 1: Modul Logika_ Algoritma

D KIKTAT ULIAHD KIKTAT ULIAH

L AOGIKA LGORITMA

Disusun oleh:

Candra Mecca Sufyana

Page 2: Modul Logika_ Algoritma

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.

Page 3: Modul Logika_ Algoritma

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

Page 4: Modul Logika_ Algoritma

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)

Page 5: Modul Logika_ Algoritma

• 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).

Page 6: Modul Logika_ Algoritma

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?

Page 7: Modul Logika_ Algoritma

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 Ja’far 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

Page 8: Modul Logika_ Algoritma

Algorithm muncul karena kata Algorism sering dikelirukan dengan Arithmetic, sehingga akhiran

–sm berubah menjadi–thm.

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

Page 9: Modul Logika_ Algoritma

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

Page 10: Modul Logika_ Algoritma

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.

Page 11: Modul Logika_ Algoritma

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

Page 12: Modul Logika_ Algoritma

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

Page 13: Modul Logika_ Algoritma

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 proses…SAMPAI 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

Page 14: Modul Logika_ Algoritma

� 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

Page 15: Modul Logika_ Algoritma

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

Page 16: Modul Logika_ Algoritma

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.

Page 17: Modul Logika_ Algoritma

Selalu dimulai dengan

BEGIN:

Begin

Input/output

Jangan lupa garis

Mungkin anda ingin berkomunikasi dengan pemakai

Input / Output

Begin

End

Page 18: Modul Logika_ Algoritma

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

Page 19: Modul Logika_ Algoritma

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}

Page 20: Modul Logika_ Algoritma

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

Page 21: Modul Logika_ Algoritma

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.

UUmmuurr << 3300 ddaann

nniillaaii >> 6600

CCaappeegg ttiiddaakk ddiitteerriimmaa

Capeg diterima

TT

FF

Page 22: Modul Logika_ Algoritma

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

UUssiiaa>>6600 AAttaauu

MMKK>>2255

MMeennddaappaatt ttuunnjjaannggaann ppeennssiiuunn

TTiiddaakk mmeennddaappaatt ttuunnjjaannggaann ppeennssiiuunn

TT

FF

Page 23: Modul Logika_ Algoritma

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

Page 24: Modul Logika_ Algoritma

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 1038 6 byte

single 1.5 x 10-45 … 3.4 x 1038 4 byte

double 5.0 x 10-324 … 1.7 x 10308 8 byte

extended 3.4 x 10-4932 … 1.1 x 104932 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:

Page 25: Modul Logika_ Algoritma

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

Page 26: Modul Logika_ Algoritma

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

Page 27: Modul Logika_ Algoritma

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.

Page 28: Modul Logika_ Algoritma

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

Page 29: Modul Logika_ Algoritma

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 ---- pajakpajakpajakpajak

Tunjangan karyawan dihitung 20 % dari gaji pokok, sedangkan pajak adalah 15 % dari gaji

pokok ditambah tunjangan. Nama karyawan dan gaji bersih sebagai outputnya.

Penyelesaian

PROGRAMPROGRAMPROGRAMPROGRAM Gaji_Bersih_KaryawanGaji_Bersih_KaryawanGaji_Bersih_KaryawanGaji_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 }

DEKLARASIDEKLARASIDEKLARASIDEKLARASI

constconstconstconst PersenTunjangan = 0.2PersenTunjangan = 0.2PersenTunjangan = 0.2PersenTunjangan = 0.2

constconstconstconst PersenPajak = 0.15PersenPajak = 0.15PersenPajak = 0.15PersenPajak = 0.15

NamaKaryawan = NamaKaryawan = NamaKaryawan = NamaKaryawan = stringstringstringstring

GajiPokok,tunjangan,pajak,GajiBersih : GajiPokok,tunjangan,pajak,GajiBersih : GajiPokok,tunjangan,pajak,GajiBersih : GajiPokok,tunjangan,pajak,GajiBersih : realrealrealreal

DESKRIPSIDESKRIPSIDESKRIPSIDESKRIPSI

readreadreadread (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 ---- pajakpajakpajakpajak

write(NamaKaryawan, GajiBersih) write(NamaKaryawan, GajiBersih) write(NamaKaryawan, GajiBersih) write(NamaKaryawan, GajiBersih)

Page 30: Modul Logika_ Algoritma

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

Page 31: Modul Logika_ Algoritma

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:

”” AAkkssii 11 aakkaann ddiikkeerr jjaakkaann jj iikkaa kkoonnddiiss ii ddaallaamm kkeeaaddaaaann bbeennaarr//tt rruuee ddaann sseebbaall iikknnyyaa jj iikkaa kkoonnddiiss ii ssaallaahh//ffaallssee mmaakkaa ppeerrnnyyaattaaaann--22 aattaauu aakkssii 22 yyaanngg aakkaann ddiikkeerr jjaakkaann..””

”” AAkkssii 11 aakkaann ddiikkeerr jjaakkaann jj iikkaa kkoonnddiissii11 ddaallaamm kkeeaaddaaaann bbeennaarr//tteerrppeennuuhhii ,, jj iikkaa kkoonnddiissii22 mmaakkaa aakkssii 22 aakkaann ddiikkeerr jjaakkaann ddaann jj iikkaa tt iiddaakk aaddaa kkoonnddiissii yyaanngg mmeemmeennuuhhii mmaakkaa aakkssii33 yyaanngg ddiikkeerr jjaakkaann””

Page 32: Modul Logika_ Algoritma

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

Page 33: Modul Logika_ Algoritma

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 for…do, repeat…until dan while…do.

Perulangan for…do adalah perulangan dengan penghitung (counter), perulangan repeat…until

adalah perulangan dengan syarat akhir sedang perulangan while…do 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}

Page 34: Modul Logika_ Algoritma

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.

Page 35: Modul Logika_ Algoritma

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.

Page 36: Modul Logika_ Algoritma

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}

Page 37: Modul Logika_ Algoritma

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}

Page 38: Modul Logika_ Algoritma

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

Page 39: Modul Logika_ Algoritma

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 :

Page 40: Modul Logika_ Algoritma

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

Page 41: Modul Logika_ Algoritma

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)

Page 42: Modul Logika_ Algoritma

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}

Page 43: Modul Logika_ Algoritma

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

Page 44: Modul Logika_ Algoritma

Contoh lain:

Diketahui bahwa s = ln r, sehingga r = eS , Tulislah ekspresi aritmetika tersebut dalam bentuk

function, yang didefinisikan sebagai berikut :

!.......

!3!2!1!0

3210

k

ssssse

ks +++++=

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

sr dihitung dengan fungsi Pangkat

r! dihitung dengan fungsi Faktorial

function Pangkat(input a : real, input n: integer) ← real { Mengembalikan nilai perpangkatan sr } 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

Page 45: Modul Logika_ Algoritma

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 sr } 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

Page 46: Modul Logika_ Algoritma

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.

Page 47: Modul Logika_ 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 = ‘.’}

Page 48: Modul Logika_ Algoritma

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 t ipe 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 ….).

Page 49: Modul Logika_ Algoritma

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

Page 50: Modul Logika_ Algoritma

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

Page 51: Modul Logika_ Algoritma

{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

Page 52: Modul Logika_ Algoritma

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)

Page 53: Modul Logika_ Algoritma

{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

Page 54: Modul Logika_ Algoritma

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;

=

mnmm

n

n

aaa

aaa

aaa

A

....

::::

....

.....

21

22221

11211

A=

Page 55: Modul Logika_ Algoritma

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[ 1…Nbar, 1…Nkol ] 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

300

050

002

100

010

001

Page 56: Modul Logika_ Algoritma

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

++++

=

+

hdgc

fbea

hg

fe

dc

ba

=

+

67

74

14

13

53

61

Page 57: Modul Logika_ Algoritma

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

Page 58: Modul Logika_ Algoritma

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; }

Page 59: Modul Logika_ Algoritma

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

Page 60: Modul Logika_ Algoritma

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

Page 61: Modul Logika_ Algoritma

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.

Page 62: Modul Logika_ Algoritma

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

Page 63: Modul Logika_ Algoritma

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.

Page 64: Modul Logika_ Algoritma

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

Page 65: Modul Logika_ Algoritma

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:

Page 66: Modul Logika_ Algoritma

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

Page 67: Modul Logika_ Algoritma

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.

Page 68: Modul Logika_ Algoritma

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.

Page 69: Modul Logika_ Algoritma

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]).

Page 70: Modul Logika_ Algoritma

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

Page 71: Modul Logika_ Algoritma

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;

Page 72: Modul Logika_ Algoritma

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.

Page 73: Modul Logika_ Algoritma

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

Page 74: Modul Logika_ Algoritma

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

Page 75: Modul Logika_ Algoritma

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

Page 76: Modul Logika_ Algoritma

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.

Page 77: Modul Logika_ Algoritma

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

Page 78: Modul Logika_ Algoritma

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

Page 79: Modul Logika_ Algoritma

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

Page 80: Modul Logika_ Algoritma

4).

5).

6).

7).

8).

Page 81: Modul Logika_ Algoritma

9).

10).

11).

12).

13).

Page 82: Modul Logika_ Algoritma

14).

15).

16).

17).

18).

Page 83: Modul Logika_ Algoritma

19).

20).

21).

22).

23).

Page 84: Modul Logika_ Algoritma

24).

25).

26).

27).

Page 85: Modul Logika_ Algoritma

28).

29).

30).

31).

Page 86: Modul Logika_ Algoritma

32).

33).

34).

35).

36).

Page 87: Modul Logika_ Algoritma

37).

38).

39).

Page 88: Modul Logika_ Algoritma

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 !

Page 89: Modul Logika_ Algoritma

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

Page 90: Modul Logika_ Algoritma

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