Anda di halaman 1dari 69

MODUL

LOGIKA ALGORITMA

Disusun Oleh:
Feri Prasetyo H.
i
Page

i
Kata Pengantar

Puji Syukur kehadirat Tuhan Yang Maha Esa karena atas limpahan rahmat-Nya
sehingga kami dapat menyelesaikan modul Logika Algoritma Untuk Masiswa
semester 1 matakuliah Logika dan Algoritma. Saat ini banyak berkembang
berkembang bahasa-bahasa pemrograman tingkat tinggi yang pemakaiannya sudah
sangat mudah, namu sebagai seorang yang memehami bahasa pemrograman harus
mengikuti kedah bahasa pemrograman agar dapat memahami konsep pregram
dengan baik dan benar. Modul Logika Dan Algoritma ini sangat penting bagi
mahasiswa program studi Manajemen Informatika khususnya, karena menjadi
dasar bagi mahasiswa untuk mempelajari bahasa pemrograman. Pada modul ini
diberikan contoh-contoh kasus untuk mempermudah memahami konsep.
Kami menyadari masih banyak kekurangan dalam penyusunan modul ini.
Oleh karena itu, kami sangat mengharapkan kritik dan saran demi perbaikan dan
kesempurnaan modul ini.
Kami mengucapkan terima kasih kepada berbagai pihak yang telah
membantu proses penyelesain modul ini, Semoga modul ini dapat bermanfaat bagi
kita semua, khususnya para peserta didik.

Penulis

Feri Prasetyo H.

ii
Daftar Isi

Kata Pengantar .................................................................................................................... ii

Bab 1 ................................................................................................................................... 1

Logika .................................................................................................................................... 1

Algoritma ............................................................................................................................... 1

Algoritma Dalam Pemrograman ............................................................................................ 2

Kriteria Pemmilihan Algoritma ............................................................................................... 3

Contoh Lankah langkah Algoritma ......................................................................................... 3

Menyatakan Algoritma ............................................................................................................ 5

Sifat sifat Algoritma ................................................................................................................. 6

Latihan Soal Bab 1 ................................................................................................................... 7

Bab 2 ....................................................................................................................................... 8

Struktur Data ........................................................................................................................... 8

Pembagian Data ...................................................................................................................... 9

Contoh Tipe data Yang lain ..................................................................................................... 10

Tipe data terstruktur ............................................................................................................... 13

Variabel .................................................................................................................................. 13

Operator .................................................................................................................................. 15

Bab 3 ....................................................................................................................................... 19

Diagram Alur ......................................................................................................................... 19

Simbol Diagram Alur ............................................................................................................... 19

Struktur Flowchart ................................................................................................................. 21


iii

Bab 4 ........................................................................................................................................ 22
Page

iii
Percabagngan if ...................................................................................................................... 22

Percabagngan if else ............................................................................................................. 23

Nested if ................................................................................................................................ 23

If majemuk ........................................................................................................................... 24

switch - case ...................................................................................................................... 25

BAB 5 ...................................................................................................................................... 25

Perulangan for .................................................................................................................... 25

While ................................................................................................................................... 28

Break .................................................................................................................................... 29

Bab 6 .................................................................................................................................... 30

Rekursift .............................................................................................................................. 31

Deret fibonancy .................................................................................................................. 32

Menara Hanoi ...................................................................................................................... 32

Bab 7 ..................................................................................................................................... 35

Array ...................................................................................................................................... 35

Pendeklarasian aray dimensi Satu ......................................................................................... 37

Array Berdimensi dua .......................................................................................................... 43

Bab 8 ..................................................................................................................................... 50

Algoritma Devide And Conquer Dengan Sorting ................................................................... 50

Pengunaan D and C pada Sorting .......................................................................................... 51

.Bubble Sort ........................................................................................................................ 51

Selection Sort ...................................................................................................................... 52

Merge Sort .......................................................................................................................... 53

Bab 9 ..................................................................................................................................... 54

iv
Algoritma Devide And Conquer Dengan Searching ................................................................ 54

Tehnik Pencarian Tunggal ....................................................................................................... 54

Linear/Sequential Search ....................................................................................................... 54

Binary Search ......................................................................................................................... 54

Tehnik Pencarian MAXMIN ...................................................................................................... 54

Bab 10 ...................................................................................................................................... 57

Metode Gredi .......................................................................................................................... 57

Optimal On Tape Storage Problem .......................................................................................... 57

Knapsack Problem .................................................................................................................... 58

Minimum Spanning Tree Problem ............................................................................................. 60

Shortest Path Problem ............................................................................................................... 61

Metode Gredi Model pewarnaan .............................................................................................. 61

Referensi .................................................................................................................................... 64

v
Page

v
1|P ag e

BAB I

Logika Algoritma

A. LogikA

Logika berasal dari kata Yunani kuno (logos) Merupakan Cabang Dari Ilmu filsafat ilmu
logika (ilmu pengetahuan) yang mempelajari kecakapan untuk berpikir secara lurus, tepat, dan
teratur

Dikenalkan pertama kali Oleh Aristoteles Aristoteles, adalah seorang filsuf Yunani, murid dari
Plato dan guru dari Alexander yang Agung. Ia menulis tentang berbagai subyek yang berbeda,
termasuk fisika, metafisika, puisi, logika, retorika, politik, pemerintahan, etnis, biologi dan
zoologi

Definisi Logika

1. penalaran atau bentuk pemikiran.


2. ilmu yang memberikan prinsip-prinsip yang harus diikuti agar dapat berfikir valid menurut
aturan yang berlaku
B. Algoritma

Diperkenalkan Oleh Ahli Matematika : Abu Ja’far Muhammad Ibnu Musa Al Khawarizmi Seorang
ilmuan Persia yang menulis kitab al jabr w’al muqabala (rules of restoration and reduction)
sekitar tahun 825 M dalam ilmuan barat di kenal dengan algorism. Kemudian dalam bahasa
Indonesia konsep ini menjadi algoritma, suatu metode, tahapan untuk mencari pemecahan sustu
permasalahan. Algoritma membantu membuat kerangka berfikir secara logis dan sistematis
dengan membuat beberapa konsep perencanaan, untuk menyelesaikan beberapa masalah yang
di hadapi

 Definisi Algoritma
1. Langkah - langkah yang dilakukan agar solusi masalah dapat diperoleh.
2. Suatu prosedur yang merupakan urutan langkahlangkah yg berintegrasi.
3. Suatu metode khusus yang digunakan untuk menyelesaikan suatu masalah yang nyata

 Tahapan penyelesaian masalah: Masalah  Algoritma  Penyelesaian


2|P ag e

Dalam Pemrogaman Komputer


Masalah : Masalah merupakan kejadian yang dialami oleh seseorang dalam kehidupan sehari
hari. Misal Maslah Untuk Menghitung luas Persegi panjang
Model : Sedangkan model merupakan desain yang dilakukan untuk dapat menyelesaikan
masalah misal: rumus menghitung persegi panjang adalah Panjang x Lebar
Algoritma : Algoritma merupakan langkah langkah/ urutan/ prosedur penyelesaian
masalahpermasalahan menghitung persegi panjang dengan menentukan “Input”
(nilai awal dri panjang dan lebar) ”Proses” (Luas persegi panjang x lebar) 
“output” (hasil dari proses)
Program : Sedangkan program merupakan aplikasi untuk menjalankan algoritmaMisal
menjalankan algoritma tersebut dengan Bahasa pemrograman C++

#include <stdio.h>
# include <conio.h>
#include <iostream.h>
Main()
{
int P, L, Luas;
clrscr;
cout<<"Program"<< endl;
cout<<"*menghitung L.persegi.P*"<<end1;
cout<<"\n nilai Panjang=";cin>>P;
cout<<"\n nilai Lebar=";cin>>L;
L=P*L;
cout<<"\n nilai Luas="<<L;
<getch();
}

Eksekusi : merupakan menjalankan/membuat masalah tersebut agar terselesaikan dengan


cara melakukan eksekusi langkah langkah algoritma tersebut
Hasil : Sedangkan hasil merupakan tujuan utama algoritma sebagai tahapan bahwa
algoritma telah selesai dan berakhir
3|P ag e

 Beberapa kriteria pemilihan algoritma


1. Ada Output: Algoritma harus mempunyai output yang merupakan solusi dari masalah
yang sedang diselesaikan. Dengan demikian argoritma akan berhenti dengan
memberikan hasil jika sudah menjalankan semua kriteria dan prosedur
2. Efektifitas dan Efisiens

Efektif → algoritma menghasilkan solusi yang sesuai dengan masalah yang diselesaikan
(tepat guna).

Efisiensi → jika waktu proses algoritma relatif lebih singkat dan penggunaan memori
komputernya lebih sedikit

3. Jumlah Langkahnya Berhingga : Pada hal ini Barisan instruksi yang dibuat harus dalam
suatu urutan tertentu atau harus berhingga berhingga dapat dikatakan bahawa jika
terjadi suatu kendalan atau kondisi yang berbedaakan melakukan kegitan baru arau
mengikuti kegiatan yang ada, agar masalah yang dihadapi dapat diselesaikan dengan
tidak memerlukan waktu relatif lama.

4. Berakhir : semua Proses penyelesaian masalah harus berhenti dan berakhir dengan hasil
akhir yang merupakan solusinya atau berupa informasi yang tidak diketemukan solusinya.
SEMI ALGORITMA, yaitu suatu prosedur yang hanya akan berhenti jika mempunyai atau
menghasilkan solusi, sedangkan jika tidak menghasilkan solusi, maka prosedur tersebut
akan berjalan tanpa henti.

5. Terstruktur: Urutan langkah-langkah harus disusun sedemikian rupa agar proses


penyelesaian tidak berbelit-belit dan bagian proses dapat dibedakan dengan jelas mana
bagian input, proses dan output sehingga memudahkan user melakukan pemeriksaan
ulang

Contoh :

Urutan langkah langkah untuk menghitung luas persegi panjang

a. Diketahui sebuah persegi panjang memilik Panjang dan Lebar


b. Hitunglah Luas Persegi panjang dengan Rumus Panjang x Lebar
c. Tampilkan hasilnya
d. Ingin menghitung lagi kembali ke A
e. Selesai

 Analisis Algoritma
Analisis algoritma merupakan prosedur dari beberapa kriteria yang berlaku pada lagoritma
itu sendiri yaitu berupa beberapa tahapan antara lain:

a. Merencanakan algoritma:
Merencanakan algoritma dengan cara Menentukan beberapa model atau desain sebagai
penyelesaian dari suatu masalah untuk mendapat sebuah solusi yan mungkin. Dengan
demikian, akan banyak terdapat variasi desain atau model yang dapat diambil yang terbaik.
4|P ag e

b. Validitas suatu algoritma


Yakni jika penyelesaian memenuhi solusi yang sebenarnya dan berakhir dengan baik, dapat
diartinkan solusi yang didapat merupakan penyelesaian suatu masalah dan bukannya
membuat masalah baru sehingga membuat proses semakin bertambah dan berhingga tanpa
penyelesaian masalah.

c. Bagaimana menganalisa suatu algoritma


Caranya melihat running time atau waktu tempuh yang digunakan dalam menyelesaikan
masalah serta jumlah memori yang digunakan dalam penyelesaian masalah tersebut.

 Waktu Tempuh (Running Time) dari suatu Algortima.


Hal-hal yang dapat mempengaruhi daripada waktu tempuh adalah :

1. Banyaknya langkah: Makin banyak langkah atau instruksi yang digunakan, maka makin
lama waktu tempuh yang dibutuhkan dalam proses tersebut.

2. Besar dan jenis input data: Jika jenis data adalah tingkat ketelitian tunggal (Single
precision), maka waktu tempuh akan menjadi relatif lebih cepat dibandingkan dengan
tingkat ketelitian ganda(double precesion).

3. Jenis Operasi: Sebagai contoh, operasi perkalian atau pembagian akan memakan waktu
lebih lama dibandingkan operasi penjumlahan atau pengurangan.

4. Komputer dan kompilator: hal terakhir yang mempengaruhi waktu tempuh suatu proses
algoritma adalah komputer dan kompilatornya, walaupun sebenarnya faktor ini diluar
tahap rancangan atau tahap pembuatan algoritma yang efisien. Algoritma dibuat untuk
mencapai waktu tempuh yang seefektif dan seefisien mungkin, tetapi kesemuanya itu
akan sangat bergantung pada kemampuan komputer yang tentunya harus sesuai dengan
jumlah program atau langkah yang diperlukan oleh algoritma, begitu juga dengan
kompilator tersebut

 Jumlah Memori Yang digunakan: banyaknya langkah yang digunakan dan jenis variabel data
yang dipakai dalam suatu algoritma akan sangat mempengaruhi penggunaan memori. Dalm
hal ini, diharapkan dapat memperkirakan seberapa banyak kebutuhan memori yang
diperlukan selama proses berlangsung hingga proses selesai dikerjakan. Dengan demikian,
dapat disiapkan storage yang memadai agar proses suatu algoritma berjalan tanpa ada
hambatan atau kekurangan memori

d. Menguji program dari suatu algoritma: Yaitu dengan cara menyajikannya dalam salah satu
bahasa pemrogramana, misalnya BASIC, PASCAL, FORTRAN, dBase, C++ atau yang lainnya.
Dalam proses, uji program oleh komputer akan melalui beberapa tahap yaitu:

1. Fase Debugging, yaitu fase dari suatu proses program eksekusi yang akan melakukan
koreksi terhadap kesalahan program. Yang dimaksud disni adalah error atau salah dalam
penulisan program baik logika maupun sintaksnya.
5|P ag e

2. Fase Profilling, yaitu fase yang akan bekerja jika program tersebut sudah benar atau telah
melalui proses pada fase debugging. Fase ini bekerja untuk melihat dan mengukur waktu
tempuh atau running time yang diperlukan serta jumlah memori/storage yang digunakan
dalam menyelesaikan suatu algoritma

e. Menyatakan algoritma
1. Menyatakan Algoritma dengan Bahasa sehari hari
Contoh : untuk menghitung luas persegi panjang:
a. Tentukan nilai panjang
b. Tentukan nilai Lebar
c. Hitung Luas persegi panjang dengan rumus = Panjang x Lebar
d. Cetak luas Persegi panjang

2. Dengan Mengunakan diagram alur


Dalam algoritma pengunaan diagram alur berfungsi sebagai penggambaran alur suatu
kegiatan yang digambarkan dengan sismbol symbol tertentu dimana setiap symbol
memiliki tugas, fungsi dan makna dan tujuan tertentu. Contoh flowchart untuk
menghitung luas persegi panjang.

Mulai

Input Panjang

Input Lebar

Hitung Luas: PxL

Cetak Luas

Hitung Ya
lagi?

Tidak

Selesai
6|P ag e

Diagram alur atau flowchat merupakan menggambaran langkah langkah denga


menggunakan symbol flowchart simol flowchart akan di bahas lebih detail pada bab 4
Diagram Alur

3. Dengan Statemen penggalan program C++

#include <stdio.h>
# include <conio.h>
#include <iostream.h>
Main()
{
int P, L, Luas;
clrscr;
cout<<"Program"<< endl;
cout<<"*menghitung L.persegi.P*"<<end1;
cout<<"\n nilai Panjang=";cin>>P;
cout<<"\n nilai Lebar=";cin>>L;
L=P*L;
cout<<"\n nilai Luas="<<L;
<getch();
}

 Sifat-Sifat Algoritma
1. Banyaknya langkah instruksi harus berhingga: pelaksanaan sebuah algoritma yang
terprogram haruslah dapat diakhiri atau diselesaikan melalui sejumlah langkah operasional
yang berhingga. Jika tidak demikian, kita tidak akan dapat mengharapkan bahwa pelaksaan
algoritma tersebut dapat menghasilkan suatu solusi yang baik.

2. Langkah atau instruksi harus jelas: artinya bahwa penulisa setiap langkah yang terdapat
didalam sebuah algoritma harus memiliki arti yang khusus atau spesifik sehingga dapat
dibedakan antara penulisan langkah untuk komputer(program/pemrograman) dengan
penulisan langkah bagi manusia(pesudocode). Manusia akan lebih mudah memahami
algoritma yang terdiri atas simbol-simbol(Contoh: pembuatan algoritma dengan diagram
alur/flowchart) sedangkan komputer hanya membutuhkan sebuah penulisan algoritma
dengan kode-kode yang dituangkan dalam bahasa yang dimengerti oleh komputer itu
sendiri(bahasa pemrograman).

3. Proses harus jelas dan mempunyai batasan: rangkaian suatu proses yang berisi langkah-
langkah instruksi dari suatu algoritma yang akan dilaksanakn harus ditetapkan dengna jelas,
baik dan pasti sebab sebuah algoritma harus memiliki instruksi dasar tertentu dimana setiap
instruksi harus memiliki unsur pelaksana yang berfungsi sebagai pemroses data yang akan
dimasukkan dalam sebuah komputer. Dengan demikian, sebuah algoritma harus ditulis
dengan jelas tentang batasa-batasan proses yang akan dilaksanakan oleh komputer.

4. Input dan Output harus mempunyai batasan: input merupakan data yang dimasukkan ke
dalam algoritma yang untuk kemudian akan dilaksanakan oleh komputer. Dengan begitu,
input yang diberikan harus sesuai dengan jenis dari bahasa pemrograman yang digunakan,
sedangkan ouput merupakan hasil yang diperoleh dari pekerjaan yang dilaksanakan
komputer untuk kepentingan user yang merupakan pihak diluar komputer. Algoritma harus
7|P ag e

menghasilkan output karena merupaka solusi yang diharapkan dari suatu masalah yang
timbul.

5. Efektifitas: instruksi yang diberikan pada komputer agar hanya menjalankan atau
melaksanakan proses yang mampu dilaksanakannya. Yang dimaksud mampu adalah bahwa
suatu algoritma atau instruksi-instruksi dalam sebuah program hanya akan dapat
dilaksanakan jika informasi yang diberikan oleh instruksi-instruksi tersebut lengkap, benar
dan jelas.

6. Adanya Batasan Ruang Lingkup: Suatu Algoritma yang baik adalah algoritma yang hanya
ditujukan bagi suatu masalah tertentu saja untuk mrnyelesaikan hingga berakhir.

Latihan :

1. Jelaskan lankah langkah pengujian sebuah algoritna beserta contohnya?...

2. Buatlah algoritma pertukaran untuk mempertukarkan 2 jenis benda dan jelaskan dengan
sebuah contoh?...
8|P ag e

BAB 2

Struktur Data

A. Struktur Data
Struktur data merupakan suatu bentuk pengelolaan mengenai data agar data dapat dipergunakan
dan diolah secara lebih efisien dan efektif. Dalam beberapa bahasa pemrograman, istilah struktur
data seringkali ditampilkan secaa fisik dalam bentuk tabel (biasanya pada bahasa
pemrograman/pengelolaan database berbasis visual), namun pada beberapa bahasa pemrograman
yang tidak berbasis visual, strutkur data lebih berupa pengelolaan data dengan aturan-aturan
tertentu

B. Tipe Data
Tipe data adalah jenis data yang mempunyai batasan tempat dan karakteristik sesuai dengan
interprestasi data dan dapat diolah oleh komputer untuk memenuhi kebutuhan dalam pemrograman
komputer.

Dalam setiap Bahasa pemrogaman mempunyai sekumpulan tipe data primitive atau disebut tipe data
yang menjadi bawaan Bahasa tersebut (built in) dan ada juga yang menyediakan beberapa fasilitas
untuk programmer agar dapat mendefinisikan tipe data baru.

C. Tingkatan Spesifikasi Tipe data


Dalam beberapa Bahasa pemrogaman memiliki dua tingkatan yaitu spesifikasi dan implementasi,
elemen dasar spesifikasi tipe data adalah:
1. Atribut atribut yang membedakan objek data dengan tipe tersebut
2. Nilai nilai yang mungkin dimiliki oleh objek data dengan tipe data
3. Operasi operasi yang dimungkinkan untuk memanipulasi objek data dengan tipe tersebut

D. Elemen Spesifikasi Tipe data


Sedangkan elemen dasar implementasi sebuah tipe data adalah:
1. Representasi penyimpanan yang digunakan untuk mewakili objek objek data dengan tipe
tersebut pada penyimpanan computer selama program dijalankan
2. Alat dimana operasi yang di definisikan untuk tipe data itu direpresentasikan dengan
algoritma algoritma dan prosedur prosedur yang memanipulasi representasi penyimapana
yang dipilih untuk objek data tersebut

Setiap Bahasa pemrogaman memiliki tipe data elementernya seperti integer, bolean, char dan
enumerasi (terbilang). Sedangkan objek data yang merupakan kumpulan dari objek objek data yang
lain disebut objek data terstruktur atau struktur data. Strutur data juga dapat di definisikan suatu
kumpulan objek objek data yang memiliki aturan kemudian digolongkan berdasarkan operasi untuk
memanipulasikanya. Komponenya dapat berupa objek data elementer atau objek data terstruktur
seperti array, record, list, stack, queue, tree, file berkas, set himpunan.
9|P ag e

E. Pembagian data

1. Tipe data sederhana: adalah tipe data yang sudah ada dan dijadikan standar dalam bahasa
pemrograman tertentu. Isi dari tipe data sederhana ini adalah data-data tunggal berikut
contoh tipedata sederhana dalam pemrogaman C++

Char : Digunakan untuk menampung data sebuah karakter. untuk menuliskan tipe char,
karakter perlu ditulis didalam tanda petik tunggal ( ‘ )

Contoh :

‘A’  karakter berupa huruf A

‘1’  karakter berupa angka 1

‘*’  karakter simbol *

Integer : Tipe Integer (int) adalah tipe data yang nilainya tidak mempunyai

titik desimal, contoh: 1, 10, 15

Float : Tipe Float adalah bilangan yang mengandung pecahan desimal, misalnya: 3.65,
2.60240000E-6, dan lain-lain. Notasi E artinya perpangkatan sepuluh.2.60240000E-6 artinya
2.60240000E X 10-6

Tipe Data Tambahan, yang dimiliki oleh Borland C++, adalah : Unsigned digunakan bila data
yang digunakan hanya data yang positif saja.
10 | P a g e

Ada juga tipedata yang disebut dengan bolean atau bool, Merupakan jenis Data yang hanya
memiliki 2nilai, yakni benar (true) dan salah (false) yang juga diwujudkan sebagai 1 dan 0.
Jenis Data tersebut terutama sekali dipakai untuk menunjukkan Kondisi yang memerlukan
keputusan untuk kelanjutan proses. Tipe Data tersebut dapat dimanfaatkan untuk mewakili
suatu obyek yang memiliki nilai binary. Penerapannya dengan menggunakan operator and,
or, dan not.

Implementasi tipe data bool dengan operator AND, OR atau NOT. 0 = False; 1 = True

Penggunaan AND
#include<stdio.h>
#include<conio.h>
#include<iostream.h>
main( )
{
float a, b, c, d, e, f, g, h;
clrscr( );
cout<<"Masukan Nilai A = "; cin>>a;
cout<<"Masukan Nilai B = "; cin>>b;
cout<<"Masukan Nilai C = "; cin>>c;
// Proses
d = a + 4 < 10;
e = b > a + 5;
f = c - 3 >= 4;
g = d && e && f;
cout<<endl<<endl;
cout<<"Program Ekspresi AND"<<endl<<endl;
cout<<"Hasil dari d = a + 4 < 10 adalah " <<d<<endl;
cout<<"Hasil dari e = b > a + 5 adalah " <<e<<endl;
cout<<"Hasil dari f = c - 3 >= 4 adalah " <<f;
cout<<endl<<endl;
cout<<"Hasil dari g = d && e && f adalah " <<g;
cout<<endl;
getch( );
}
11 | P a g e

Penggunaan NOT
#include <stdio.h>
#include <conio.h>
#include<iostream.h>
main( )
{
int a, b, c;
clrscr( );
cout<<"Masukan Nilai A = ";
cin>>a;
/* Proses */
b = (a + 4 < 10);
c = !(b);
cout<<endl<<"Program Ekspresi NOT "<<endl;
cout<<"Nilai A = "<<a<<endl;
cout<<"Nilai b = (a + 4 < 10) = "<<b<<endl;
cout<<"Nilai c = !(b) = "<<c;
getch( );
}

Penggunaan OR
#include<stdio.h>
#include<conio.h>
#include<iostream.h>
main()
{
float a, b, c, d, e, f, g, h;
clrscr( );
cout<<"Masukan Nilai A = "; cin>>a;
cout<<"Masukan Nilai B = "; cin>>b;
cout<<"Masukan Nilai C = "; cin>>c;
d = a + 5 > 10;
e=b>5+a;
f = c - 4 <= 7;
g = d || e || f;
cout<<endl<<endl;
cout<<"Program Ekspresi OR"<<endl<<endl;
cout<<"Hasil dari d = a + 5 > 10 adalah " <<d<<endl;
cout<<"Hasil dari e = b > 5 + a adalah " <<e<<endl;
cout<<"Hasil dari f = c - 4 <= 7 adalah " <<f;
cout<<endl<<endl;
cout<<"Hasil dari g = d || e || f adalah " <<g;
cout<<endl;
getch( );
}
12 | P a g e

2. Hanya sekedar contoh beberapa tipe data yang lain


Tipe data Composite: Tipe Data Komposit merupakan tipe data yang dapat menampung
banyak nilai, antara lain sebagai berikut.

a. Array
Array atau sering disebut sebagai larik, adalah tipe data yang sudah terstruktur dengan baik,
meskipun masih sederhana. Array mampu menyimpan sejumlah data dengan tipe yang sama
(homogen) dalam sebuah variabel. Sebagai ilustrasi, array mampu menampung banyak data
namun dengan satu tipe data yang sama, misalnya integer saja. Setiap lokasi data array diberi
nomor indeks yang berfungsi sebagai alamat dari data tersebut.

Contoh
Sebuah larik A dengan delapan buah elemen, notasi penulisannya :
A[1], A[2], A[3], A[4], A[5], A[6], A[7], A[8]
Angka didalam tanda kurung siku menyatakan indeks larik.

b. Record atau struct


Seperti halnya Array, Record atau Struct juga termasuk tipe data komposit. Record dikenal
dalam bahasa Pascal/Delphi sedangkan Struct dikenal dalam bahasa C++. Berbeda dengan
array, tipe data record mampu menampung banyak data dengan tipe data berbeda-beda
(heterogen). Misalnya, satu bagian integer, satu bagian lagi character, dan bagian lainnya
Boolean. Biasanya record digunakan untuk menampung data suatu obyek. Misalnya, siswa
memiliki nama, alamat, usia, tempat lahir, dan tanggal lahir. Nama akan menggunakan tipe
data string, alamat bertipe data string, usia bertipe data single (numeric), tempat lahir
bertipe data string, dan tanggal lahir bertipe data date. Berikut ini contoh pengunaan record
dalam Delphi. bermanfaat untuk mengelompokkan sejumlah data dengan tipe data yang
berlainan.

Contoh :
struct data_pegawai
{ int nip;
char nama[25];
char alamat[40]; }

c. Image
Image, atau gambar, atau citra, merupakan tipe data grafik. Misalnya grafik perkembangan
jumlah siswa SMK, foto keluarga kita, video perjalanan, dan lain-lain. Pada bahasa-bahasa
pemrograman modern terutama yang berbasis visual, tipe data ini telah didukung dengan
sangat baik.

d. Date Time
Nilai data untuk tanggal (date) dan waktu (time) secara internal disimpan dalam format yang
spesifik. Variabel atau konstanta yang dideklarasikan dengan tipe data Date dapat digunakan
untuk menyimpan, baik tanggal maupun jam. Tipe data ini masuk dalam kelompok tipe data
composite, karena merupakan bentukan dari beberapa tipe data.
13 | P a g e

e. Object
Tipe data object digunakan untuk menyimpan nilai yang berhubungan dengan obyek-obyek
yang disediakan oleh Visual Basic, Delphi, dan bahasa pemrograman lain yang berbasis GUI.
Sebagai contoh, apabila mempunyai form yang memiliki control Command button, yang kita
beri nama Command1.

f. Subrange
Tipe data subrange merupakan tipe data bilangan yang mempunyai jangkauan nilai tertentu
sesuai dengan yang ditetapkan programmer. Biasanya, tipe data ini mempunyai nilai batas
minimum dan nilai batas maksimum. Tipe data ini didukung dengan sangat baik dalam
Delphi.
g. Enumerasi
Tipe data ini merupakan tipe data yang mempunyai elemen-elemen yang harus disebut satu
persatu, dan bernilai konstanta integer sesuai dengan urutannya. Nilai konstanta integer
elemen ini diwakili oleh suatu nama variable yang ditulis di dalam kurung. Tipe data ini juga
dijumpai pada Delphi, dan bahasa pemrograman deklaratif seperti SQL.

3. Tipe Data Terstruktur


A. Tipe Data String
Merupakan suatu data yang menyimpan array (larik), sebagai contoh 'ABCDEF' merupakan
sebuah konstanta string yang berisikan 6 byte karakter. Ukuran Tempat untuk tipe data ini
adalah 2 s/d 256 byte, dengan jumlah elemen 1 s/d 255.
B. Tipe Data Set
Sebuah set merupakan suatu himpunan yang berisi nilai (anggota). Set merupakan Tipe data
yang khusus untuk Pascal. Set dalam pemrograman sangat mirip dengan himpunan dalam
ilmu matematika.

F. Variabel
Fungsi Variabel :
• Untuk menyimpan suatu nilai, dan nilai yang ada padanya dapat diubah selama eksekusi
berlangsung.
• Penamaan variabel bersifat case sensitive (huruf besar & huruf kecil dianggap berbeda).
• Harus dideklarasikan dahulu sebelum digunakan

Dalam pemberian nama variabel, mempunyai ketentuan-ketentuan antara lain :


1. Tidak boleh ada spasi ( contoh : gaji bersih ) dan dapat menggunakan tanda garis bawah ( _ )
sebagai penghubung (contoh : gaji_bersih).
2. Tidak boleh diawali oleh angka dan menggunakan operator aritmatika.

Variabel, dibagi menjadi dua jenis kelompok, yaitu :


a. Variabel Numerik : Variabel numerik ini dibagi menjadi menjadi 3 (tiga) macam :
1. Bilangan Bulat atau Integer
2. Bilangan Desimal Berpresisi Tunggal atau Floating Point.
3. Bilangan Desimal Berpresisi Ganda atau Double Precision.
14 | P a g e

b. Variabel Text
1. Character ( Karakter Tunggal )
2. String ( Untuk Rangkaian Karakter )

Deklarasi Variabel
Adalah proses memperkenalkan variabel kepada Borland C++ dan pendeklarasian tersebut
bersifat mutlak karena jikatidak diperkenalkan terlebih dahulu maka Borland C++ tidak menerima
variabel tersebut.

Deklarasi Variabel ini meliputi tipe variabel, seperti integer atau character dan nama variabel itu
sendiri. Setiap kali pendeklarasian variabel harus diakhiri oleh tanda titik koma ( ;).

Contoh : int Panjang, Lebar;

Merupakan variabel

Merupakan tipe data mengunakan tipedata “integer”

char nama_mahasiswa[20];

Merupakan variabel

Merupakan tipe data mengunakan tipedata “Char”

G. Konstanta
Konstanta : Sebuah variabel dengan tipe data tertentu dan memiliki nilai data yang akan selalu tetap
di dalam program.

Secara garis besar konstanta dapat dibagi menjadi dua bagian, yaitu:
1. Konstanta Bilangan
konstanta bilangan dibagi menjadi tiga kelompok, antara lain:
a. Konstanta Bilangan Bulat (Integer). Adalah bilangan yang tidak mengandung nilai
desimal. Ini merupakan nilai default pada konstanta bilangan. Contoh : 1, 2, 3, 100
b. Konstanta Desimal Berpresisi Tunggal ( Floating Point) Konstanta Floating Point,
mempunyai bentuk penulisan, yaitu :
- Bentuk Desimal ( contoh : 5.57 )
- Bentuk Eksponensial / Bilangan Berpangkat ( contoh : 4.22e3 4.22 x 103)s
15 | P a g e

c. Konstanta Desimal Berpresisi Ganda ( Double Precision) Konstanta Double Precision,


pada prinsipnya sama seperti Konstanta Floating Point, tetapi Konstanta Double
Precision mempunyai daya tampung data lebih besar.

2. Konstanta Teks
Konstanta Teks dibagi menjadi dua kelompok, antara lain;
a. Data Karakter (Character). Data karakter hanya terdiri dari sebuah karakter saja yang
diapit oleh tanda kutip tunggal ( ‘ ). Data karakter dapat berbentuk abjad ( huruf
besar atau kecil ), angka, notasi atau simbol. Contoh : ‘Y’ ‘y’ ‘9’ ‘&’ dan lain-lain.
b. Data Teks (String). Data String merupakan rangkaian dari beberapa karakter yang
diapit oleh tanda kutip ganda ( “ ). Contoh : “Virusland”, “Jakarta”, “AMIK BSI”, “Y” dan
lain-lain.

Bentuk deklarasi konstanta diawali dengan reserved word const.


Contoh : float phi;
const phi=3.14;

H. Operator
Operator merupakan simbol atau karakter yang biasa dilibatkan dalam program, yang digunakan
untuk melakukan sesuatu operasi atau manipulasi, seperti penjumlahan, pengurangan dan lain-lain.

Operator mempunyai sifat sebagai berikut:


1. Unary : Sifat Unary pada operator adalah hanya melibatkan sebuah operand pada suatu
operasi aritmatik Contoh : -5
2. Binary : Sifat Binary pada operator adalah melibatkan dua buah operand pada suatu
operasi aritmatik Contoh : 4 + 8
3. Ternary : Sifat Tenary pada operator adalah melibatkan tiga buah operand pada suatu
operasi aritmatik Contoh : (10 % 3) + 4 + 2

Operator Aritmatika : Operator untuk operasi aritmatika yang tergolong sebagai operator binary

Operator yang tergolong sebagai operator Unary, adalah

Hierarki Operator Aritmatika.


Didalam suatu ekspresi aritmatika, selalu menjumpai beberapa operator aritmatika yang
berbeda yang dapat digunakan secara bersamaan. Urutan operator aritmatika sebagai berikut :
16 | P a g e

Contoh Penggunaan Operator dalam C++

#include <stdio.h>
#include <conio.h>
#include <iostream.h>
main( )
{
int a, b;
clrscr( );
a = 8 + 2 * 3 / 6;
b = (8 + 2) * 3 / 6;
cout<<" A = 8 + 2 * 3 / 6"<<endl;
cout<<" B = (8 + 2) * 3 /6"<<endl;
cout<<endl;
cout<<" Hasil dari A = "<<a<<endl;
printf(" Hasil dari B = %i ",b);
getch( );
}

Operator penambahan dan pengurangan


A = A + 1 atau A = A - 1;disederhanakan menjadi A ++ atau A--Operator “ ++ “ atau “ -- “ dapat
diletakan didepan atau di belakang variabel.

Keterangan :
1. Penambahan: menambahkan 1 ke nilai variable, prefix (++A)atau postfix (A ++)
2. Pengurangan: mengurangkan 1 ke nilai variabel, prefix (--A) atau postfix (A --)

Kedua bentuk penulisan operator ini mempunyai arti yang berbeda.


a. Jika diletakan didepan variabel, maka proses penambahan atau pengurangan akan dilakukan
sesaat sebelum atau langsung pada saat menjumpai ekspresi ini, sehingga nilai variabel tadi
akan langsung berubah begitu ekspresi ini ditemukan, sedangkan
b. Jika diletakan dibelakang variabel, maka proses penambahan atau pengurangan akan
dilakukan setelah ekspresi ini dijumpai atau nilai variabel akan tetap pada saat ekspresi
ini ditemukan.
17 | P a g e

Pengunaan notasi di depan variabel


#include <stdio.h>
#include <conio.h>
main( )
{
int a = 10, b = 5;
clrscr( );
printf("Nilai A = %d", a);
printf("\nNilai ++A = %d", ++a);
printf("\nNilai B = %d", b);
printf("\nNilai --B = %d", --b);
getch( );
}

Hasilnya:
NIlai A = 10
Nilai ++A = 11
Nilai B = 5
Nilai –B = 4

Pengunaan notasi di belakang variabel


#include<stdio.h>
#include<conio.h>
#include<iostream.h>
main( )
{
int a = 10, b = 5;
clrscr( );
printf("Nilai A = %d", a);
printf("\nNilai ++A = %d", a++);
printf("\nNilai A = %d", a);
printf("\nNilai B = %d", b);
printf("\nNilai --B = %d", b--);
printf("\nNilai B = %d", b);
getch( );
}

Hasilnya:
NIlai A = 10
Nilai ++A = 11
NIlai A = 11
Nilai B = 5
Nilai - -B = 5
Nilai B = 4

Operator relasi
18 | P a g e

Operator Relasi digunakan untuk membandingkan dua buah nilai. Hasil perbandingan operator
ini menghasilkan nilai numerik 1 (True) atau 0 (False).

#include <stdio.h>
#include <conio.h>
#include <iostream.h>
main( )
{
float a, b, c, d, e, f, x, y;
clrscr( );
cout<<"Masukan Nilai X = "; cin>>x;
cout<<"Masukan Nilai Y = "; cin>>y;
a = x = = y;
b = x != y;
c = x > y;
d = x < y;
e = x >= y;
f = x <= y;
cout<<endl;
cout<<"Hasil dari "<<x<<" == "<<y<<" = "<<a<<endl;
cout<<"Hasil dari "<<x<<" != "<<y<<" = "<<b<<endl;
cout<<"Hasil dari "<<x<<" > "<<y<<" = "<<c<<endl;
cout<<"Hasil dari "<<x<<" < "<<y<<" = "<<d<<endl;
cout<<"Hasil dari "<<x<<" >= "<<y<<" = "<<e<<endl;
cout<<"Hasil dari "<<x<<" <= "<<y<<" = "<<f<<endl;
getch( );
}

Operator Bitwise
Operator ini digunakan untuk memanipulasi data dalam bentuk bit. Borland C++ menyediakan
enam buah operator bitwise.
19 | P a g e

BAB 3

Diagram Alur

Diagram alur atau flowchart merupakan pengambaran dari algoritma yang berupa bentuk sisbol
symbol yang mererasikan dari setiap langkah langkah. Dalam penggambaran diagram alur terdapat
symbol symbol yang memiliki kegunaan masing masing. Flowchart diawali dengan penerimaan
input, pemrosesan input, dan diakhiri dengan penampilan output.

Diagram Alur untuk Program Komputer Pada dasarnya suatu program computer umumnya terdiri
atas :
1. Pembacaan / pemasukan data ke dalam computer
2. Melakukan komputasi/perhitungan terhadap data tersebut
3. Mengeluarkan / mencetak/ menampilkan hasilnya.

Simbol diagram ALur


Simbol keterangan
Simbol proses yang di gunakan untuk memproses berupa himpunan
penugasan yang di gunakan secara berurutan

Input / Output data yg akan dibaca & dimasukan ke dalam memori


komputer dari suatu alat input

Decision (kotak keputusan) berfungsi utk memutuskan arah/


percabangan yg diambil sesuai dgn kondisi yg dipenuhi, yaitu
Benar/Salah

Flowline, menunjukkan bagian arah instruksi dijalankan

Subroutine digunakan untuk menjalankan proses suatu bagian (sub


program) atau prosedur.

Connector/penghubung, digunakan untuk menghubungkan diagram


alur yang terputus dimana bagian tersebut masih berada pada halaman
yang sama
Preparation digunakan untuk pemberian harga awal

Terminal, berfungsi sebagai awal (berisi ‘Start’) sebagai akhir (berisi


‘End’) dari suatu proses alur.
20 | P a g e

On page Connector, Untuk menghubungkan sambungan dari bagian


flowchart yang terputus dimana sambungannya berada pada halaman
lain.

Pedoman-Pedoman dalam Membuat Diagram Alir (Flowchart)


Bila seorang analis dan programmer akan membuat flowchart, ada beberapa petunjuk yang harus
diperhatikan, seperti :

1. Flowchart digambarkan dari halaman atas ke bawah dan dari kiri ke kanan.
2. Aktivitas yang digambarkan harus didefinisikan secara hati-hati dan definisi ini harus dapat
dimengerti oleh pembacanya.
3. Kapan aktivitas dimulai dan berakhir harus ditentukan secara jelas.
4. Setiap langkah dari aktivitas harus diuraikan dengan menggunakan deskripsi kata kerja
misalkan
5. Setiap langkah dari aktivitas harus berada pada urutan yang benar.
6. Lingkup dan range dari aktifitas yang sedang digambarkan harus ditelusuri dengan hati-hati.
Percabangan-percabangan yang memotong aktivitas yang sedang digambarkan tidak perlu
digambarkan pada flowchart yang sama. Simbol konektor harus digunakan dan
percabangannya diletakan pada halaman yang terpisah atau hilangkan seluruhnya bila
percabangannya tidak berkaitan dengan sistem.
7. Gunakan simbol-simbol flowchart yang standar

Ada beberapa jenis flowchart diantaranya:

1. Bagan alir sistem (systems flowchart).


2. Bagan alir dokumen (document flowchart).
3. Bagan alir skematik (schematic flowchart).
4. Bagan alir program (program flowchart).
5. Bagan alir proses (process flowchart).

System Flowchart

System flowchart dapat didefinisikan sebagai bagan yang menunjukkan arus pekerjaan secara
keseluruhan dari sistem. Bagan ini menjelaskan urut-urutan dari prosedur-prosedur yang ada di
dalam sistem. Bagan alir sistem menunjukkan apa yang dikerjakan di sistem.

Document Flowchart

Bagan alir dokumen (document flowchart) atau disebut juga bagan alir formulir (form flowchart)
atau paperwork flowchart merupakan bagan alir yang menunjukkan arus dari laporan dan formulir
termasuk tembusan-tembusannya.

Schematic Flowchart
21 | P a g e

Bagan alir skematik (schematic flowchart) merupakan bagan alir yang mirip dengan bagan alir sistem,
yaitu untuk menggambarkan prosedur di dalam sistem. Perbedaannya adalah, bagan alir skematik
selain menggunakan simbol-simbol bagan alir sistem, juga menggunakan gambar-gambar komputer
dan peralatan lainnya yang digunakan. Maksud penggunaan gambar-gambar ini adalah untuk
memudahkan komunikasi kepada orang yang kurang paham dengan simbol-simbol bagan alir.
Penggunaan gambar-gambar ini memudahkan untuk dipahami, tetapi sulit dan lama
menggambarnya.

Program Flowchart

Bagan alir program (program flowchart) merupakan bagan yang menjelaskan secara rinci langkah-
langkah dari proses program. Bagan alir program dibuat dari derivikasi bagan alir sistem.
Bagan alir program dapat terdiri dari dua macam, yaitu bagan alir logika program (program logic
flowchart) dan bagan alir program komputer terinci (detailed computer program flowchart). Bagan
alir logika program digunakan untuk menggambarkan tiap-tiap langkah di dalam program komputer
secara logika. Bagan alat- logika program ini dipersiapkan oleh analis sistem. Gambar berikut
menunjukkan bagan alir logika program. Bagan alir program komputer terinci (detailed computer
program flow-chart) digunakan untuk menggambarkan instruksi-instruksi program komputer secara
terinci. Bagan alir ini dipersiapkan oleh pemrogram.

Process Flowchart

Bagan alir proses (process flowchart) merupakan bagan alir yang banyak digunakan di teknik
industri. Bagan alir ini juga berguna bagi analis sistem untuk menggambarkan proses dalam suatu
prosedur.

Struktur Flowchart
1. Sederhana
Struktur sederhana merupakan Diagram yang alurnya mengalir secara berurutan dari atas ke
bawah atau dengan kata lain tidak adanya percabangan atau pengulangan.
Missal menghitung luas persegi panjang
22 | P a g e

BAB 4
Percabangan

Percabangan
Struktur percabangan merupakan struktur Diagram flowchart yang alurnya terjadi/terdapat
alih kontrol berupa percabangan. Flowchart dengan stuktur percabangan digunakan untuk
meyeleksi kondisi dan menentukan pilihan proses selanjutnya.

Percabangan if
Percabangan if juga digunakan untuk memecahkan masalah untuk pengambilan keputusan di
antara banyaknya pernyataan yang ada, bentuk dari struktur percabangan if yaitu pernyataan
if, if-else, nested if dan if-else majemuk

a. Percabangan if
Bentuk penulisan :

if (kondisi)
{
...pernyataan;
}
23 | P a g e

b. Percabangan if - else
Pergertian dari pernyataan if-else adalah jika kondisi bernilai benar maka pernyataan-
1 akan dikerjakan dan jika kondisi bernilai salah maka pernyataan-2 akan dikerjakan.
Bentuk penulisan :

if (kondisi)
{
...pernyataan-1;
}
else
{
...pernyataan-2;
}

c. Nested if
Pergertian dari pernyataan nested if adalah pernyataan if berada di dalam
pernyataan if yang lainnya.
Bentuk penulisan :

if (syarat)
{
24 | P a g e

if (syarat)
...perintah;
else
...perintah
}
else
{
if (syarat)
...perintah;
else
...perintah;
}

If majemuk
Pernyataan if-else majemuk sebenarnya serupa dengan nested if hanya saja penulisannya yang lebih
sederhana.
Bentuk penulisan :

if (syarat)
{
...perintah;
...perintah;
}
else if (syarat)
{
...perintah;
...perintah;
}
else
{
...perintah;
...perintah;
}

switch - case
Bentuk dari switch - case merupakan pernyataan yang dirancangan khusus untuk menangani
pengambilan keputusan yang melibatkan sejumlah atau banyak alternatif penyelesaian.
Pernyataan switch - caseini memiliki kegunaan sama seperti if – else bertingkat, tetapi
penggunaannya untuk memeriksa data yang bertipe karakteratau integer. Bentuk penulisan
perintah ini sebagai berikut:

Switch (ekspresi ionteger atau karakter)


{
Case Konstanta -1:
25 | P a g e

…… Perintah ;
…… Perintah ;
Break;
Case Konstanta -2:
…… Perintah ;
…… Perintah ;
Break;
Default:
…… Perintah ;
…… Perintah ;
}

Setiap pilihan akan dijalankan jika syarat nilai konstanta tersebut dipenuhi dan defaultakan
dijalankan jika semua cabang diatasnya tidak terpenuhi. Pernyataan break menunjukan bahwa
perintah siap keluar dari switch. Jika pernyataan ini tidak ada, maka program akan diteruskan
ke pilihan-pilihan yang lainnya

BAB 5

Perulangan (Looping)

Perulangan adala suatu kegiatan melakukan kegiatan yang serupa secara ber ulang ulang sebanyak
beberapakali sesuai dengan perin tah yang harus di kerjakan.
Secara umum terdiri dari dua bagian, yaitu:

1. Kondisi pengulangan, yaitu ekspresi boolean yang harus dipenuhi untuk melaksanakan
pengulangan.
2. Badan (body) pengulangan, yaitu bagian algoritma yang diulang. Dua bagian yang ada pada
struktur pengulangan, adalah:
- Inisialisasi, yaitu aksi yang dilakukan sebelum pengulangan dilakukan pertama kali.
- Terminasi, yaitu aksi yang dilakukan setelah pengulangan selesai dilaksanakan.

Missal: mesin foto copy akan melakukan pencetakan sebanyak li buah maka mesin tersebut tidak
akan berhenti sebelum mencetak lima lembar

Contoh beberapa penggunaan perulangan :


a. Penggunaan For
Penggunaan for terbagi atas dua yaitu secara menaik dapat dikatakan bertmbah dan secara
menurun dapat dikatakan berkurang
26 | P a g e

Pendeklarasian for :

For (inisialisasi; syarat pengulangan; pengubah nilai pecahan)


{
Pernyataan/perintah;
Pernyataan/perintah;
}

Atau dapat juga seperti ini:

for(a = 1; a <= 10; ++a)


{
Pernyataan/perintah;
Pernyataan/perintah;
}

Kegunaan dari masing-masing argumen for diatas adalah :


• Inisialisasi: merupakan bagian untuk memberikan nilai awal untuk variabelvariabel
tertentu.
• Syarat Pengulangan: memegang kontrol terhadap pengulangan, karena bagian ini yang
akan menentukan suatu perulangan diteruskan atau dihentikan.
• Pengubah Nilai Pencacah:mengatur kenaikan atau penurunan nilai pencacah.

#include<stdio.h>
#include<conio.h>
#include<iostream.h>
main( )
{
int a;
clrscr( );
for(a = 1; a <= 10; ++a)
cout<<a;
getch( );
}

output

For menurun
Seperti dijelaskan diatas for menurun berarti for yang nilainya berumah menjadi nilai terkecil
sesuai dengan kondisi perintah yang dilakukan.
Pendeklarasian for menurun :
27 | P a g e

For (inisialisasi; syarat pengulangan; pengubah nilai pecahan)


{
Pernyataan/perintah;
Pernyataan/perintah;
}

Atau dapat juga seperti ini:

for(a = 10; a >= 1; --a)


{
Pernyataan/perintah;
Pernyataan/perintah;
}
Penggalan program for menurun:
# include <stdio.h>
# include <conio.h>
#include<iostream.h>
main( )
{
int a;
clrscr( );
for(a = 10; a >= 1; --a)
cout<<a;
getch( );
}

output

Nested for
Nested for merupakan for didalam for biasa disebut dengan istilah for bersarang.
Pendeklarasianya sebagai berikut:
for( inisialisasi; syarat pengulangan; pengubah nilaipencacah )
{
pernyataan / perintah;
}

Atau sebagai berikut


for(a = 1; a <= 5; a++)
{
pernyataan / perintah;
}

#include<stdio.h>
28 | P a g e

#include<conio.h>
main( )
{
int a, b;
clrscr( );
for(a = 1; a <= 5; a++)
{
printf("\n");
for(b = a; b <= 5; b++)
printf(" %d ",a);
}
getch();
}

output

C. while
Bentuk perulangan while dikendalikan oleh syarat tertentu, yaitu perulangan akan terus
dilaksanakan selama syarat tersebut terpenuhi.

Pendeklarasian while sebagai berikut:

while ( syarat )
{
Pernyataan / perintah ;
Pernyataan / perintah ;
}

Satu hal kunci yang membedakan struktur WHILE dengan FOR, adalah di dalam perulangan FOR
kondisi akhir perulangan harus sudah diketahui pada awal program. Namun dalam perulangan
WHILE, kita bisa membuat perulangan yang nilai akhir atau kondisinya belum diketahui pada saat
perulangan dimulai
#include <stdio.h>
#include <conio.h>
main( )
{
int bil=2;
clrscr( );
29 | P a g e

while(bil<=10)
{
printf(" %d ",bil);
bil+=2;
}
getch( );
}

Do while
Pernyataan perulangan do - while merupakan bentuk perulangan yang melaksanakan perulangan
terlebih dahulu dan pengujian perulangan dilakukan dibelakang

do
{
Pernyataan / perintah ;
Pernyataan / perintah ;
}
while ( syarat );

contoh program
#include <stdio.h>
#include <conio.h>
main( )
{
int bil=2;
clrscr( );
do
{
printf(" %d ",bil);
bil+=2;
}
while(bil<=10);
getch( );
}

D. Break
30 | P a g e

Pernyataan break telah dibahas pada pernyataan pengambilan keputusan switch. Pernyataan
break ini berfungsi untuk keluar dari struktur switch. Selain itu pernyataan breakberfungsi keluar
dari perulangan ( for, while dan do-while). Jika pernyataan break dikerjakan, maka eksekusi akan
dilanjutkan ke pern yataan yang terletak sesudah akhir dari badan perulangan ( loop )

#include <stdio.h>
#include <conio.h>
main( )
{
int bil = 1;
clrscr( );
do
{
if (bil >= 6)
break;
printf(" %d ",bil);
}
while(bil++);
getch( );
}

BAB 6

Rekursif

Rekursif adalah suatu proses yang bisa memanggil dirinya


sendiri. Secara tidak sadar dalam kehidupan sehari hari
kita selalu mengunakan rekursif baik secara tidak sadar
atau pun secara
sadar,
pemangilan yang
kita lakukan
misalnya saat kita
bercermin (kita
akan memangil diri kita sendiri), atau saat kita meotong
sebuah roti hingga porongan terakhir (kita akan memangil
potongan yang sama hingga roti tidak dapat di potong
kembali) dan lain lain contoh rekursif yang kita lakukan
dalam kehidupan sehari hari tanpa kita sadari.
31 | P a g e

A. Deret fibonancy

Penemu bilangan Fibonacci adalah Leonardo da Pisa atau Leonardo Pisano (1175-1250). Beliau adalah
seorang matematikawan Italia, yang juga dikenal sebagai Fibonacci yang juga memiliki peran dalam
mengenalkan sistem penulisan dan perhitungan bilangan Arab ke dunia Eropa. Leonardo adalah
orang yang memperkenalkan deret. Setelah meninggal, ia sering disebut sebagai Fibonacci (dari kata
filius Bonacci, anak dari Bonacci). Ayahnya bernama William atau dikenal sebagai Bonacci. Untuk itu
Leonardo memiliki julukan Fibonacci yang berasal dari kata Filius Bonacci yang artinya anak dari
Bonacci

Deret Fibonaccy adalah deret dimana nilai suku ke n merupakan jumlah nilai suku ke n-1 dan suku ke
n-2. Untuk suku n > 2, Suku pertama (n=1) nilainya adalah 1, dan suku ke dua (n=2) nilainya = 1

Hasil deret fibonaccy adalah sebagai berikut: Deret Fibonaccy : 0,1,1,2,3,5,8,13,.........

Secara notasi pemrograman dapat ditulis sebagai :


Fibo (1) = 0 & Fibo (2) = 1 ....................................... (1)
Fibo (N) = Fibo (N-1) + Fibo (N-2) ................................. (2)
Contoh :
Fibo(5) = Fibo(4) + Fibo(3)
Fibo(4) = Fibo(3) + Fibo(2)
Fibo(3) = Fibo(2) + Fibo(1)

#include <iostream.h>
int suku, a, b, c;
int main()
{
cout<<"Membuat Deret Fibonacci\n";
cout<<"Masukkan nilai suku ke-: ";cin>>suku;
cout<<"Bilangannya adalah: \n";
a=0;b=1;
cout<<a<<endl<<b<<endl;
for(int i=3; i<=suku; i++)
{
c = a + b;
a = b;
b = c;
cout<<c<<endl;
}
return 0;
}

B. Menara Hanoi
32 | P a g e

0 A (asal) B (Bantu) C
(Tujuan)

1 A (asal) B (Bantu) C
(Tujuan)

2 A (asal) B (Bantu) C
(Tujuan)

3 A (asal) B (Bantu) C
(Tujuan)

4 A (asal) B (Bantu) C
(Tujuan)
33 | P a g e

5 A (asal) B (Bantu) C
(Tujuan)

6 A (asal) B (Bantu) C (Tujuan)

7 A (asal) B (Bantu) C (Tujuan)

Dari contoh diatas dapat diambil kesimpulan , untuk memindahkan N piringan dari tonggak asal (A)
ke tonggak tujuan (C) maka piringan ke N harus berada di tonggak tujuan (C) , sedangkan piringan ke
1 sampai (N - 1) harus berada di tonggak bantu (B). Setelah piringan ke 1 sampai (N-1) berada pada
tonggak bantu (B) , kemudian pindahkan piringan ke 1 sampai (n-1) tersebut dari tonggak bantu (B)
ke tonggak tujuan (C) Nah bagaimana caranya membawa piringan ke 1 sampai (N-1) dari tonggak asal
ke tonggak bantu (B) , caranya sama saja yaitu dengan memindahkan piringan ke (n-1) dari tonggak
asal (A) ke tonggak tujuan yang pada saat ini berada pada tonggak (B) sedangkan piringan dari 1
sampai ke (N-2) dipindahkan ke tonggak bantu yang saat ini berada di tonggak (C) , Setelah piringan
ke 1 sampai (N-2) berada pada tonggak bantu (C) , kemudian pindahkan piringan ke 1 sampai (N-2) ke
tonggak tujuan (B) dan seterusnya.Metode penyelesaian permainan Hanoi diatas sering disebut
sebagai metode back tracking , jadi solusi dicari dengan cara mundur ke belakang dahulu , baru
kemudian solusi bisa di temukan .

Permasalahannya bagai mana jika terdapat lebih dari 3 piringan cakram:

1. Berapa langkah minimal yang diperlukan untuk memindahkan 2, 3, 4, 5 atau 6 cakram dari tiang
awal ke tiang lainnya ? ( cakram yang kecil selalu berada di atas )

2. Dengan menentukan pola permasalahan di atas, tentukan rumus untuk menentukan banyak
langkah minimal untuk menyusun n lempengan.

Tabel hasil:
34 | P a g e

Banyak
Banyak cakram
perpindahan Dugaan pola
(n)
minimal(L)

1 L1=1 2-1= 2 1 -1
2 L2=3 4-1= 2 2 -1
3 L3=7 8-1= 2 3 -1
4 L4=15 16-1= 2 4 -1
5 L5=31 32-1= 2 5 -1
. . .

. . .

. . .

n 2 n -1

Catatan:

Tidak boleh meletakan piringan yang lebih kecil di bawah piringan yang lebih besar

#include <stdio.h>
#include <conio.h>

void hanoi(int piringan, char dari, char bantu, char ke)


{
if(piringan>0)
{
hanoi(piringan-1, dari, ke, bantu);
printf("Pindahkan piringan %d dari %c ke %c\n",piringan, dari,
ke);
hanoi(piringan-1, bantu, dari, ke);
}
}

void main()
{
int piringan;
printf("Berapa banyak piringan ? ");scanf("%d", &piringan);
printf("\n");
hanoi(piringan, 'A', 'B', 'C');
getch();
35 | P a g e

BAB 7

ARRAY

Array
Array atau larik dalam bahasa indonesia ada juga yang menyebut matriks merupakan sekumpulan
variable yang memiliki nama sama tapi nama tersebut dibedakan oleh suatu indeks. bukanlah tipe
data dasar seperti integer atau boolen, Menggunakan array akan memudahkan dalam membuat
kelompok data, serta menghemat penulisan dan penggunaan variabel.

Merupakan alokasi memori statis. mengalokasikan memori untuk tipe data yang sama secara
berurutan. berisi beberapa nilai jenis yang sama. Hal ini juga menyimpan nilai-nilai dalam memori
pada ukuran tetap.

Array juga merupakan struktur data yang statis yang mempunyai 1 nama tetapi memiliki banyak
tempat. Setiap tempat harus dibedakan, untuk membedakannya dibutuhkan penunjuk, pentunjuk
dapat berupa karakter(char) atau integer. Sekali disimpan dalam penunjuk yang sama(berbentuk
indeks), maka isinya tidak akan hilang kecuali indeksnya diisi oleh nilai yang lain, dengan kata lain kita
dapat menempatkan 5 nilai yang bertype int tanpa harus mendeklarasikan 5 variabel yang berbeda
36 | P a g e

untuk masing-masing nilai. Sebagai gantinya kita dapat menggunakan array untuk menyimpan kelima
nilai tersebut

Karaktersitik Array :
1. mempunyai batasan dari pemesanan alokasi memory (bersifat statis)
2. mempunyai type data sama (homogen)
3. dapat di akses secara acak.
4. berurutan (terstruktur)

Array dideklarasikan dengan tanda [ ] (bracket), baik dalam bahasa C++ dan Java. Tanda [ ] disebut
juga “elemen yang ke- ...“. Misalnya kondisi[0] berarti array kondisi elemen yang ke nol. Bentuk
umum dari tipe data array adalah:

Contoh:
tipe_data nama_array[jumlah_elemen]

A[1], A[2], A[3], A[4], A[5], A[6]

untuk mengisi elemen array misal A[1]:=1;.Sifat Array Array merupakan struktur data yang statis,
yaitu jumlah elemen yang ada harus ditentukan terlebih dahulu dan tak bisa di ubah saat program
berjalan Untuk memasukkan data ke dalam array, sintak yang digunakan adalah :

Memasukan Nilai ke Array


Untuk memasukan nilai kedalam elemen array, dengan cara menyebutkan index untuk elemen array
tersebut. Index dimulai dari index ke 0, bukan dari index ke 1.

a[nomor_elemen] = data;

a[0] = 5;
37 | P a g e

a[1] = 6;
a[2] = 7;
dan seterusnya.

Pada C/C++, array merupakan pointer Yang mempunyai alokasi memori tetap (pointer
constant).

Akses elemen suatu berarti: array bersifat random, artinya dapat dimulai dari mana saja dan
tidak harus dari elemen pertamanya. Elemen-elemen array tersusun secara berderet dan dapat
diakses secara random di dalam memori

Keuntungan
1. penggunaan array sebagai tipe data dibandingkan dengan penggunaan tipe data yang lain
adalah kemampuannya yang dapat mengumpulkan beberapa data yang bertipe sama dalam
satu variabel, sehingga dalam pembuatan program yang terdiri dari beberapa tipe yang sama,
tidak membutuhkan banyak variabel.

Kelemahan array adalah sebagai berikut:


Array mempunyai fleksibilitas rendah, karena array mempunyai batasan sebagai berikut:
1. Array harus bertipe homogen. Kita tidak dapat mempunyai array dimana satu elemen adalah
karakter, elemen lain bilangan, dan elemen lain adalah tipe-tipe lain
2. Kebanyakan bahasa pemrograman mengimplementasikan array statik yang sulit diubah
ukurannya di waktu eksekusi. Bila penambahan dan pengurangan terjadi terus-menerus

Variable array terdiri dari:


1. Array Berdimensi 1
2. Array Berdimensi 2

Pendeklarasian aray dimensi Satu

Untuk memasukan nilai kedalam elemen array, dengan cara menyebutkan index untuk elemen array
tersebut. Index dimulai dari index ke 0, bukan dari index ke 1.

A[nomor_elemen] = data;

#include <iostream.h>
#include <conio.h>
void main()
{
clrscr ();
int A[5];
int i;

for(i=0;i<5 br="" i=""> {


cout<<"Masukkan Data "<>A[i];
}
38 | P a g e

for(i=0;i<5 br="" i="">{


cout< "<} getch () ;
}

Mengakses elemen array dengan linear search

Pada araay 1 dimensi untuk mengakses aray harus terdefinisi terlebih dahulu sebelum aksi
pengaksesan dilaksanakan. Elemen array yang tersusun secara berurutan mulai dari elemen pertama
hingga elemen terakhir.
Missal ada sebuah aray A dengan indek = [55,10,12,8,0,9,124,25,70,30] untuk mengakase aray
tersebut dengan sistem linear search mencari mulai dari data awal hingga data akhir, missal yang di
cari adalah angka 9 maka di a akan mencari mulai dari data pertama hingga data berikutnya sehingga
di padat kan bahwa data 9 berada pada array ke 5

#include <iostream.h>
#include <conio.h>
int linear_search(int [], int, int);
main()
{
clrscr();
const int array_size=10;
int array[array_size]={55,10,12,8,0,9,124,25,70,30};
cout<<"============== Linear Search ==========================="<<endl;
cout<<"========================================================"<<endl;
gotoxy(1,24);
cout<<"========================================================";
gotoxy(1,5);
cout<<" Isi dari array adalah : "<<endl;
cout<<"\n Array : "<<"\t\t Data : "<<endl;
for(int count=0; count < array_size; count++)
{
cout<<"\t"<<" array ["<<count<<"]"<<"\t\t";
cout<<array[count]<<endl; }
int searching_element=0;
int flag=0;
cout<<"\n\n Masukan data yang Anda cari : ";
cin>>searching_element;
flag=linear_search(array,array_size,searching_element);
39 | P a g e

if (flag != -1)
cout<<"\n Data tersebut ditemukan pada posisi : array ["<<flag<<"]";
else
cout<<"\n Data tersebut tidak ditemukan ";
getch();
return 0;
}
/********** Definisi Fungsi ******************/
int linear_search(int array[], int array_size, int element)
{
int flag=1;
for (int count=0; count<array_size; count++)
{
if (element == array[count])
{
flag=count; break; }
}
return flag;
}

Array Berdimensi Satu


Elemen-elemen array dapat diakses oleh program menggunakan suatu indeks tertentu. Pengaksesan
elemen array dapat dilakukan berurutan atau random berdasarkan indeks tertentu secara langsung.
Pengisian dan pengambilan nilai pada indeks tertentu dapat dilakukan dengan mengeset nilai atau
menampilkan nilai pada indeks yang dimaksud. Array satu dimensi juga disebut array dimensi satu
atau biasa juga disebut Vektor karena hanya memiliki satu arah

/* ---------------------------------- */
/* Inisialisasi Array Dimensi 1 */
/* ---------------------------------- */
#include <conio.h>
#include <iostream.h>
main( )
{
char hari[7][10] =
40 | P a g e

{"Minggu","Senin","Selasa","Rabu","Kamis","jum'at","Sabtu"};
clrscr( );
cout<<"Nama-nama hari:"<<endl;
cout<<hari[0]<<endl<<hari[1]<<endl<<hari[2]<<endl<<hari[3]
<<endl<<hari[4]<<endl;
getch();
}

Penerapan dari array berdimensi satu dapat digunakan untuk mencari bilangan dari
sejumlah data yang ada. Pencarian bilangan disini akan menggunakan teknik linear search

Data sudah ditentukan terlebih dahulu untuk memudahkan model pencarian beserta
lokasi indeks dari data yang dicari, Apabila data ditemukan akan menginformasikan letak
indeksnya.

#include <iostream>
int a[10],jumlah=10;
41 | P a g e

bool cari(int cariData,int nElemen) {


int i;
for(i=0; i<nElemen; i++) {
if(a[i] == cariData)
break;
}
if(i == nElemen) return false;
else return true;
}
void input(int data,int i) {
a[i] = data;
}
void hapus(int data,int nElemen) {
int i;
for(i=0; i<nElemen; i++) {
if( data == a[i] )
break;
}
if(i==nElemen)
cout << "Data "
<< data << " tidak terhapus (tidak ada)" << endl;
else {
for(int j=i;
j<nElemen-1; j++) {
a[j] = a[j+1];
}
cout << "Data " << data
<< " dihapus" << endl;
}
}
void tampil(int nElemen) {
for(int i=0; i<nElemen; i++)
cout << a[i] << " ";
cout << endl;
42 | P a g e

}
void main() {
int data;
for(int i=0; i<jumlah; i++){
cout << "a[" << i << "] = ";
cin >> data;
input(data,i);
}
tampil(jumlah);
int cariData = 12;
if (cari(cariData,jumlah)==false)
cout << "Data " << cariData
<< " tidak ditemukan " << endl;
else
cout << "Data " << cariData
<< " ditemukan" << endl;
hapus(89,jumlah);
jumlah--;
hapus(0,jumlah);
jumlah--;
tampil(jumlah);
}

/* ---------------------------- */
/* Program Array Satu Dimensi */
/* ---------------------------- */
#include<conio.h>
#include<stdio.h>
#include<iostream.h>
#include<iomanip.h>
main( )
43 | P a g e

{
int i;
char nama[5][20];
float nilai1[5];
float nilai2[5];
float hasil[5];
clrscr( );
for(i=1;i<=2;i++)
{
cout<<"Data Ke - "<<i<<endl;
cout<<"Nama Siswa : "; gets(nama[i]);
cout<<"Nilai MidTest : "; cin>>nilai1[i];
cout<<"Nilai Final : "; cin>>nilai2[i];
hasil[i] = (nilai1[i] * 0.40)+ (nilai2[i] * 0.60);
cout<<endl;
}
cout<<"------------------------------------------"<<endl;
cout<<"No. Nama Siswa Nilai Nilai ";
cout<<"Hasil"<<endl;
cout<<" MidTest Final ";
cout<<"Ujian"<<endl;
cout<<"------------------------------------------"<<endl;
for(i=1;i<=2;i++)
{
cout<<setiosflags(ios::left)<<setw(4)<<i;
cout<<setiosflags(ios::left)<<setw(10)<<nama[i];
cout<<setprecision(2)<<" "<<nilai1[i];
cout<<setprecision(2)<<" "<<nilai2[i];
cout<<setprecision(2)<<" "<<hasil[i]<<endl;
}
cout<<"------------------------------------------"<<endl;
getch();
}
44 | P a g e

Array berdimensi 2

Array dua dimensi sering kali digambarkan/dianalogikan sebagai sebuah matriks atau bentuk grid.
Jika array berdimensi satu hanya terdiri dari 1 baris dan banyak kolom, array berdimensi dua terdiri
dari banyak baris dan banyak kolom yang bertipe sama.
45 | P a g e

Array dua dimensi merupakan array yang terdiri dari M buah baris dan N buah kolom. Bentuknya
dapat berupa matriks atau tabel.

Contong penggambaran Array dimensi 2 dengan ukuran 2x3 yang berarta memiliki 2 baris dan 3
kolom

#include <conio.h>
#include <iostream.h>
main()
{
char nama[2][3][10]={{"Pak","BU","Mas"},
{"Andi","Budi","Carli"}};
clrscr();
cout<<nama[0][0]<<ends<<nama[1][0]<<endl;
cout<<nama[0][1]<<ends<<nama[1][2]<<endl;
cout<<nama[0][2]<<ends<<nama[1][1]<<endl;
getch();
}

/* -------------------- */
/* Array Dimensi 2 */
46 | P a g e

/* -------------------- */
#include<conio.h>
#include<stdio.h>
#include<iostream.h>
#include<iomanip.h>
main()
{
int i, j;
int data_jual[4][4];
clrscr();
for(i=1;i<=3;i++)
{
for(j=1;j<=3;j++)
{
cout<<"Data Ke - "<<i<<" "<<j<<endl;
cout<<"Jumlah Penjulan : ";
cin>>data_jual[i][j];
}
}
cout<<"Data Penjualan Pertahun"<<endl;
cout<<"-----------------------"<<endl;
cout<<"NO 2007 2008 2093"<<endl;
cout<<"-----------------------"<<endl;
for(i=1;i<=3;i++) {
cout<<setiosflags(ios::left)<<setw(5)<<i;
for(j=1;j<=3;j++)
{
cout<<setiosflags(ios::right)<<setw(4);
cout<<data_jual[i][j];
cout<<" ";
}
cout<<endl;
}
cout<<"-----------------------"<<endl;
getch( );
}
47 | P a g e

Array dimensi 2 penjumlahan 2 buah matrik


48 | P a g e
49 | P a g e
50 | P a g e

BAB 8

Algoritma Devide And Conquer Dengan Sorting

 Divide : Membagi masalah menjadi beberapa upa-masalah yang memiliki kemiripan dengan
masalah semula namun berukuran lebih kecil ( idealnya berukuran hampir sama ).

 Conquer : Memecahkan ( menyelesaikan ) masing-masing upa-masalah ( secara rekursif ).

 Combine : Menggabungkan solusi masing-masing upa-masalah sehingga membentuk solusi


masalah semula.

Algoritma Divide and Conquer merupakan algoritma yang berprinsip memecah-mecah permasalahan
yang terlalu besar menjadi beberapa bagian kecil sehingga lebih mudah untuk diselesaikan

Ada 4 hal penting yang harus dipahami dalam strategi ini :


branching factor, balance, data dependence of divide function dan sequentiality.

1. Branching Factor
Branching factor dalam algoritma divide and conquer adalah jumlah dari subproblem yang akan
dibagi dari sebuah problem awal. Ini adalah langkah nyata dari algoritma divide and conquer, didalam
proses pembagian yang sebenarnya, jumlah dari branching factor harus 2 atau lebih, karena jika tidak
problem tidak bisa dibagi. Banyak jenis algoritma ini termasuk pula algoritma komputasi geometric
yang memiliki branching factor berjumlah 2

2.Balance
Sebuah algoritma divide and conquer dikatakan balance jika problem awal dibagi menjadi sub-sub
problem dengan ukuran yang sama. Yang artinya jumlah dari keseluruhan ukuran subproblem sama
dengan ukuran problem awal (initial problem). Algoritma Mergesort dan binary tree, dan sama
halnya dengan algoritma reduksi & prefix sum adalah beberapa contoh algoritma divide and conquer
yang seimbang (balance).

3. Data Dependence of Divide Function


Algoritma divide and conquer memiliki sebuah fungsi pembagian terhadap data yang memiliki
ketergantungan, artinya jika ukuran relatif dari sebuah Pseudocode untuk model algoritma n-way
divide and conquer subproblem tergantung pada proses input datanya. Ini adalah salah satu ciri dari
algoritma yang tidak seimbang, salah satu contohnya adalah algoritma quicksort yang akan membagi
subproblem dengan fungsi data-dependent divide.

4. Control Parallelism or Sequentiality


Algoritma divide and conquer dikatakan berurutan (sequential) jika subproblem dieksekusi sesuai
dengan perintah program.
51 | P a g e

Pengunaan D and C pada Sorting

Sorting atau biasa banyak orang yang mengatakan dengan istilah Pengurutan, pengurutan
merupakan sebuah proses yang biasa dilakukan dalam pengolahan data memilih beberapa data
untuk dapat di urutkan. Pengurutan Atau sorting di analogokan sebagai sebuah kegiatan yang
mencari beberapa datad alam suatu tempat penyimpanan, dengan urutan tertentu baik urut menaik
(ascending) dari nilai terkecil sampai dengan nilai terbesar, atau urut menurun (descending) dari nilai
terbesar sampai dengan nilai terkecil

Terdapat dua macam pengurutan:

 Pengurutan internal (internal sort), yaitu pengurutan terhadap sekumpulan data yang
disimpan dalam media internal komputer yang dapat diakses setiap elemennya secara
langsung. Dapat dikatakan sebagai pengurutan tabel
 Pengurutan eksternal (external sort), yaitu pengurutan data yang disimpan dalam memori
sekunder, biasanya data bervolume besar sehingga tidak mampu untuk dimuat semuanya
dalam memori.

Algoritma pengurutan internal yang utama antara lain:

1.Bubble Sort

Prinsip Kerja dari Bubble Sort adalah :

a. Pada Penyeleksian ini Pengecekan mulai dari data ke-1 sampai data ke-n
b. Tahap Berikutnya Bandingkan data ke-n dengan data sebelumnya (n-1)
c. Jika Pada data berikutnya lebih kecil maka pindahkan bilangan tersebut dengan
bilangan yg ada didepannya (sebelumnya) secara satupersatu (n-1,n-2,n-3,....dst)
d. Jika ditemukan data lebih besar maka tidak terjadi pemindahan
e. Silahkan di Ulangi langkah berikutnya hinga menjadi sort optimal

Contoh diketahui terdapat data sebagai berikut : 10 5 20 6 8 5 3 4

Langkah ke 1 : 10 7 20 6 8 5 3 4
10 7 20 6 8 3 5 4
10 7 20 6 3 8 5 4
10 7 20 3 6 8 5 4
10 7 3 20 6 8 5 4
10 3 7 20 6 8 5 4
3 10 7 20 6 8 5 4

Langkah ke 2 : 3 10 7 20 6 8 5 4
3 10 7 20 6 8 4 5
3 10 7 20 6 4 8 5
3 10 7 20 4 6 8 5
3 10 7 4 20 6 8 5
3 10 4 7 20 6 8 5
52 | P a g e

3 4 10 7 20 6 8 5

Langkah ke 3 : 3 4 10 7 20 6 8 5
3 4 10 7 20 6 5 8
3 4 10 7 20 5 6 8
3 4 10 7 5 20 6 8
3 4 10 5 7 20 6 8
3 4 5 10 7 20 6 8

Langkah ke 4 : 3 4 5 10 7 20 6 8
3 4 5 10 7 6 20 8
3 4 5 10 6 7 20 8
3 4 5 6 10 7 20 8

Langkah ke 5 : 3 4 5 6 10 7 20 8
3 4 5 6 7 10 20 8

Langkah ke 6 : 3 4 5 6 7 10 20 8
3 4 5 6 7 10 8 20
3 4 5 6 7 8 10 20

2.Selection Sort

Prinsip kerja selection short sebagai berikut,

a. Pengecekan dimulai data ke-1 sampai dengan data ke-n


b. Tentukan bilangan dengan Index terkecil dari data bilangan tersebut
c. Tukar bilangan dengan Index terkecil tersebut dengan bilangan pertama ( I = 1 ) dari
data bilangan tersebut
d. Lakukan langkah 2 dan 3 untuk bilangan berikutnya ( I= I+1 ) sampai didapatkan
urutan yg optimal
 Contoh diketahui terdapat data sebagai berikut : 10 5 20 6 8 5 3 4

Langkah ke : 10 7 20 6 8 5 3 4
Langkah ke 1 : 3 10 7 20 6 8 5 4
Langkah ke 2 : 3 4 10 7 20 6 8 5
Langkah ke 3 : 3 4 6 10 7 20 8 5

Ulangi langkah berikutnya hingga semua terurut.

3.Insertion Sort

1. Prinsip Kerja Insertion Sort adalah


2. Pengecekan mulai dari data ke-1 sampai data ke-n
3. Bandingkan data ke-I ( I = data ke-2 s/d data ke-n )
4. Bandingkan data ke-I tersebut dengan data sebelumnya (I-1), Jika lebih kecil maka data
tersebut dapat disisipkan ke data awal sesuai dgn posisisi yg seharusnya
53 | P a g e

Lakukan langkah 2 dan 3 untuk bilangan berikutnya ( I= I+1 ) sampai didapatkan urutan
yg optimal.

Contoh : 22 10 15 3 8 2
Iterasi 1
1 2 3 4 5 6
Langkah 1: 22 10 15 3 8 2
Langkah 2: 22 10 15 3 8 2
Langkah 3: 10 22 15 3 8 2
Langkah 4: Ulangi langkah 2 dan 3
Iterasi 2
Langkah 1: 10 22 15 3 8 2
Langkah 2: 10 22 15 3 8 2
Langkah 3: 10 15 22 3 8 2
Langkah 4: Ulangi langkah 2 dan 3
Lakukan Iterasi selanjutnya sampai iterasi
ke- 6
Catatan : Setiap ada pemindahan, maka elemen. Yang sudah ada akan di insert sehingga
akan bergeser kebelakang.

3. Merge Sort

Prinsip Kerja Merge Sort adalah :

• Kelompokan deret bilangan kedalam 2 bagian, 4 bagian, 8 bagian, ......dst  (2n)


• Urutkan secara langsung bilangan dalam kelompok tsb.
• Lakukan langkah diatas untuk kondisi bilangan yg lain sampai didapatkan urutan yg
optimal .

Contoh : 22 10 15 3 8 2
Iterasi 1
1 2 3 4 5 6
Langkah 1 : 22 10 15 3 8 2
Langkah 2 : 10 22 3 15 2 8

Iterasi 2
Langkah 1 : 10 22 3 15 2 8
Langkah 2 : 3 10 15 22 2 8
Iterasi 3
Langkah 1 : 3 10 15 22 2 8
Langkah 2 : 2 3 8 10 15 22
54 | P a g e

BAB 9

Algoritma Devide And Conquer Dengan Searching

1. Tehnik Pencarian Tunggal :

a. Linear/Sequential Search ( Untuk data yg belum terurut / yg sudah terurut )


Pencarian yg dimulai dari record-1 diteruskan ke
record selanjutnya yaitu record-2, ke-3,..., sampai
diperoleh isi record sama dengan informasi yg
dicari
Algoritma :
1. Tentukan I = 1
2. Ketika Nilai (I) <> X Maka Tambahkan I = I +1
3. Ulangi langkah No. 2 sampai Nilai(I) = X
4.Jika Nilai (I) = N+1 Maka Cetak “Pencarian Gagal” selain itu Cetak “ Pencarian Sukses “

b. Binary Search ( Untuk data yg sudah terurut )

Digunakan mencari sebuah data pd himp.data-data yg tersusun secara urut, yaitu


data yg telah diurutkan dr besar ke kecil/sebaliknya. Proses dilaksanakan pertama kali pd
bgn tengah dr elemen himpunan, jk data yg dicari ternyata < elemen bagian atasnya, maka
pencarian dilakukan dr bagian tengah ke bawah.

Algoritma Binary Search

1. Low = 1 , High = N
2. Ketika Low <= High Maka kerjakan langkah No .3, Jika tidak Maka kerjakan langkah No.7
3. Tentukan Nilai Tengah dengan rumus
mid = ( Low + High ) Div 2
4. Jika X < Nil. Tengah Maka High = Mid –1
5. Jika X > Nil. Tengah Maka Low = Mid +1
6. Jika X = Nil. Tengah Maka Nil. Tengah = Nil. Yg dicari
7. Jika X > High Maka Pencarian GAGAL

2. Tehnik Pencarian MAXMIN

Searcing dengan Tehnik STRAITMAXMIN

Menentukan / mencari elemen max & min. Pada Himpunan yg berbentuk array linear.
Waktu tempuh/time complexity yg digunakan untuk menyelesaikan pencarian hingga
mendapatkan solusi yg optimal terbagi atas best case,average case dan worst case.

Algoritma untuk mencari elemen MaxMin :

PROCEDURE STRAITMAXMIN(A,n,i,max,min)
int i,n, A [n], max,min
55 | P a g e

max  min  A[0]


FOR i  1 To n
IF A[i] > max; max  A[i];
ELSE IF A[i] < min ; min  A[i] ENDIF
ENDIF
REPEAT
END STRAITMAXMIN

BEST CASE
• Keadaan yg tercapai jika elemen pada himpunan A disusun secara increasing (menaik).
Dengan perbandingan waktu n - 1 kali satuan operasi.
• Contoh : Terdapat himp.A yg berisi 4 buah bilangan telah disusun secara increasing dengan
A[0] = 2, A[1] = 4, A[2]=5, A[3]=10. Tentukan / cari Bilangan Max&Min serta jumlah operasi
perbandingan yg dilakukan.
untuk masalah tersebut dapat digunakan procedure STRAITMAXMIN yg menghasilkan
bilangan Min=2 & bilangan Max=10,
Operasi perbandingan data mencari bilangan MaxMin dari himpunan tersebut (n-1) =3 kali
operasi perbandingan.

WORST CASE
• Terjadi jika elemen dalam himp. disusun secara decreasing (menurun). Dengan. Oprasi
perbandingan sebanyak 2(n-1) kali satuan operasi.
• Contoh : Mencari elemen MaxMin & jumlah oprasi perbandingan yg dilakukan terhadap
himp.A yg disusun decreasing.
A[0]=80, A[1]=21, A[2]=6, A[3]=-10

Penyelesaian
• untuk masalah tersebut dengan proses STRAITMAXMIN adalah elemen max=80 & elemen
min=-10, Operasi. perbandingan untuk elemen Maxmin tersebut adalah 2(4-1) = 6 kali satuan
operasi.

AVERAGE CASE

• Jika pencarian elemen MaxMin dilakukan pada elemen dalam himpunan yg tersusun secara
acak (tidak decreasing/tidak increasing). Jumlah oprasi. Perbandingan yg dilakukan adalah
rata-rata waktu tempuh best case & worst case, yaitu ½ [ (n-1) + 2(n-1) ] = ( 3n/2 -1 ) kali.

• Contoh, Pada himpuan A yg berisi { 5,-4, 9,7 } dilakukan pencarian elemen max & min dengan
menggunakan proses STRAITMAXMIN. Berapa elemen maxmin yg didapatkan & jumlah oprasi
perbandingan yg dilakukan.

Penyelesaiannya :
Elemen max=9, & elemen min=-4. Jumlah operasi perbandingan adalah ( 3. 4/2 - 1) = 5 kali
satuan operasi.

Searching dengan Tehnik DANDC


56 | P a g e

• Dengan Prinsip Dasar Metode Devide & akan dapat dipecahkan suatu permasalahan proses
Searching elemen Max&Min dengan teknik DANC
• Contoh : Tentukan elemen MaxMin suatu array A yg terdiri 9 bil. :
A[1] = 22, A[4] = -8, A[7] = 17
A[2] = 13, A[5] = 15, A[8] = 31
A[3] = -5, A[6] = 60, A[9] = 47

1,9
1 ,5 6,9
1,3 4,5 6,7 8,9
1,2 3,3
Lalu Proses tree call dr setiap elemen yg ditunjuk pada bagan tree tersebut diatas. Dengan
cara, membalik terlebih dahulu posisi tree dr bawah ke atas. Lalu mengisinya dengan
elemen-elemnnya sesuai dengan bagan tree. Perhatikan bagan tree call ini :

1,2 22,13 3,3 -5,-5

1,3 22,-5 4,5 -8,15 6,7 60,17 8,9 31,47

6,9 60,17
1,5 22,-8

1,9 60,-8
57 | P a g e

BAB 10

Metode Gredi

Di gunakan Untuk mendapatkan solusi optimal dr permasalahan yg mempunyai dua kriteria yaitu
Fungsi Tujuan/Utama & nilai pembatas (constrain)

Untuk menyeselesaikan suatu permasalahan dgn n input data yg terdiri dari beberapa fungsi
pembatas & 1 fungsi tujuan yg diselesaikan dgn memilih beberapa solusi yg mungkin (feasible
solution/feasible sets), yaitu bila telah memenuhi fungsi tujuan/obyektif.

1. Optimal On Tape Storage Problem


Permasalahan Bagamana mengoptimalisasi storage/memory dalam komputer agar data yg
disimpan dapat termuat dgn optimal.
Misalkan terdapat n program. yg akan disimpan didalam pita (tape).Pita tsb mempunyai
panjang maks. sebesar L, masing2 prg. yg akan disimpan mempunyai panjang L1,L2,L3 ...,Ln.
Cara penyimpanan adalah penyimpanan secara terurut (sequential).
Persoalan = Bagamana susunan penyimpanan program2 tersebut sehingga
L1 + L2 + L3 + ... + Ln = L ?
Pemecahannya = jika program.2 tersebut disimpan dlm Order, dimisalkan adalah Order I, yaitu : j
sama dengan  tik maka akan didapat k=1

Misal terdapat 3 buah prg.(n=3) yg masing2 mpy panjang prg. (I1,I2,I3)=(5,10,3). Tentukan urutan
penyimpanannya scr berurutan (sequential) agar optimal....!

Dari 3 program tersebut akan didapat 6 buah kemungkinan order, yg didapat dr nilai faktorial 3
3! (ingat faktorial n!).

Dari tabel tersebut, didapat Susunan /

order yg optimal,sbb :

 susunan pertama untuk program ke tiga


 susunan kedua untuk program kesatu
 susunan ketiga untuk program kedua
58 | P a g e

2. Knapsack Problem

Contoh : sebuah Tas dimana Terdapat n obyek (Xi;i=1,2,3,....n) objek di sini biasa diasumsikan
sebuah benda, yang masing-masing mempunyai berat (weight)/ Wi & masing-masing
memiliki nilai (profit)/Pi yg berbeda-beda.

Permasalahn yang terjadi , Bagamana obyek-obyek tersebut dimuat / dimasukan kedalam


ransel (knapsack) yg mempunyai kapasitas maks. = M. Sehingga timbul permasalahan sbb:

Bagaimana memilih obyek yg akan dimuat dr n obyek yg ada sehingga nilai obyek termuat
jumlahnya sesuai dgn kapasitas( M)

Jika semua obyek harus dimuat kedalam ransel maka berapa bagian dr setiap obyek yg ada
dapat dimuat kedalam ransel sedemikian shg nilai kum. maks. & sesuai dgn kapasitas ransel ?
Penyelesaian Dengan Kriteria Greedy.

Konsep dr kriteria yg ditawarkan oleh metode Greedy yaitu :


Pilih obyek (barang) dengan nilai Pi maximal atau terbesar
Pilih obyek (barang) dengan berat Wi minimal dahulu.
Pilih obyek (barang) dgn perbandingan nilai & berat yaitu Pi/Wi yang terbesar.

Diketahui bahwa kapasitas M = 20kg ,


Dengan jumlah barang n=3
Berat Wi masing-masing barang
(W1, W2, W3) = (18, 15, 10)
Nilai Pi masing-masing barang
(P1, P2, P3) = (25, 24, 15)

Pilih barang dengan Nilai Profit Maksimal

P1 = 25  X1 = 1, dimisalkan sebagai (batas atas nilai)


P2 = 24  X2 = 2/15, dihitung dengan Fungsi Pembatas
P3 = 15  X3 = 0, dimisalkan sebagai (batas bawah nilai)

Pilih barang dengan Berat Minimal


W1 = 18  X1 = 0, sebagai batas bawah
W2 = 15  X2 = 2/3,dihitung dgn Fungsi Pembatas
W3 = 10  X3 = 1, sebagai batas atas

Pilih barang dgn menghitung perbandingan yg terbesar dr Profit dibagi Berat (Pi/Wi) yg diurut
secara tidak naik, yaitu :
P1/W1 = 25/18  karena terkecil maka X1 = 0
P2/W2 = 24/15  karena terbesar maka X2 = 1
P3/W3 = 15/10 dengan Fungsi pembatas X3 = 1/2.
59 | P a g e

Nilai profit maksimal = 31.5 dengan komposisi yang sama

Penyelesaian Dengan Algoritma Pemrograman Greedy.


Algoritma GREEDY KNAPSACK.
PROCEDURE GREEDY KNAPSACK ( W, x, n)
float W[n], x[n], M, isi;
Int i, n;
x(1 : 1)  0 ; isi  M ;
FOR i  1 TO n
{
IF W[i] > M ; EXIT ENDIF
x[i]  1
isi  isi – W[i]
}
IF i  n ; x[i]  isi / W[i] ENDIF
END_GREEDY KNAPSACK
Efektif jk data (Pi/Wi) disusun scr non decreasing dahulu.

Penyelesaiannya : Dengan Algoritma Prg. Greedy.


Diket. bhw kapasitas M = 20kg, dgn jmlh brg n=3
Berat Wi masing2 brg = (W1, W2, W3) = (18, 15, 10)
Nilai Pi masing2 brg = (P1, P2, P3) = (25, 24, 15)
Lakuk’ p’urutan scr tdk naik thdp hasil Pi/Wi, misalnya :
P1/Wi  25/18 = 1,39 menjadi urutan ke 3
P2/W2  24/15 = 1,60 menjadi urutan ke 1
P3/W3  15/10 = 1.50 menjadi urutan ke 2
Sehingga m’hasilk’ pola urutan data yg baru,yaitu
W1,W2,W3  15, 10, 18 dan P1,P2,P3  24, 15, 25

Data tersebut di inputkan kedalam algoritma terjadi proses sebagai berikut :


x(1:n)  0 ; isi  20 ; i = 1
W(i) > isi ?  15 > 20 ?  kondisi SALAH
x(1) = 1  b’arti bhw brg tsb dpt dimuat seluruhnya.
Isi = 20 - 15 kapasitas ransel b’kurang dgn sisa 5kg i =2
W(2) > isi ??  10 > 5 ??  kondisi BENAR
x(2)=5/10=1/2benda 10kg hanya dpt dimuat 1/2 bgn
yaitu 5 kg.
i=3
Endif  diakhiri krn ransel sdh penuh (max =20kg)
60 | P a g e

Profit nilai yang didapat adalah : P1 + P2 + P3 yaitu:


24.1+ 15.1/2 + 18.0 = 24 + 7.5 = 31.5

3. Minimum Spanning Tree Problem

Kasus MST Problem = mencari minimum.biaya (cost) spanning tree dr setiap ruas (edge) graph
yang membentuk sebuah pohon (tree).
Solusi dr p’masalah’ ini :
a. Dengan memilih ruas suatu graph yang memenuhi kriteria dr optimisasi yang
menghasilkan biaya min.
b. penambahan dari setiap ruas pada seluruh ruas yang membentuk graph akan
menghasilkan nilai/biaya yg kecil (minimumcost).
Kriteria2 dr spanning tree, yakni :
1. Setiap ruas pada graph harus terhubung (conected)
2. Setiap ruas pd graph hrs mpy nilai (label graph)
3. Setiap ruas pd graph tdk mpy arah (graph tdk berarah)

Proses Total minimum cost terbentuknya graph dgn


tahapan sbb:
1. Dari graph yg tetbentuk, apakah memenuhi kriteria MST.
2. Lakukan secara urut dr simpul ruas awal s/d ruas akhir
3. Pada setiap simpul ruas perhatikan nilai/cost dr tiap-tiap ruas
4. Ambil nilai yg paling kecil (jarak tertpendek setiap ruas).
5. Lanjutkan s/d semua simpul ruas tergambar pd spanning tree
6. Jumlahkan nilai/cost yg dipilih tadi.

1 10 2

45 50
30
40
4 3
35
25
5
20

55
6 15
61 | P a g e

4. Shortest Path Problem.

Permasalahan : menghitung jalur terpendek dr sbh graph berarah.


Kriteria utk permasalahan jalur terpendek/SP problem tsb :
1. Setiap ruas pd graph hrs mpy nilai (label graph)
2. Setiap ruas pd graph tdk hrs terhubung (unconnected)
3. Setiap ruas pd graph tsb hrs mempunyai arah (graph berarah).

45
B E
A 50 10

10 20 15 20 35
30
C D F
15 3

5.Metode Gredi Model pewarnaan

Problema pemberian warna kepada semua simpul, sedemikian sehingga 2 simpul yang berdampingan
( ada ruas menghubungkan ke dua simpul tersebut ) mempunyai warna yang berbeda . Banyak
warna yang dipergunkan , diminta seminimal mungkin

Contoh

Menentukan pola lampu lalulintas dengan jumlah fase minimal, dan pada setiap fase tidak ada
perjalanan yang saling melintas . Perjalanan yang diperbolehkan adalah : A ke B, A ke C, A ke D, B ke
C, B ke D, E ke B, E ke C dan E ke D
62 | P a g e

Langkah-langkah penyelesaian masalah :


1.Tentukan simpul dari perjalanan yang diperbolehkan ( untuk peletakan simpulnya bebas )
2.Tentukan ruas untuk menghubungkan 2 simpul yg menyatakan 2 perjalanan yg saling melintas

3. Beri warna pada setiap simpul dengan warna


warna baru.
- Bila Simpul berdampingan maka berilah warna lain.
- Bila simpul tidak bedampingan maka berilah warna yang sama
63 | P a g e

4. Kita lihat Bahwa simpul AB , BC dan ED tidak dihubungkan oleh suatu ruas jadi untuk simpul
tersebut tidak pernah melintas perjalanan-perjalanan lain dan simpul tersebut selalu berlaku
lampu hijau

5. Tentukan pembagian masing –masing simpul yang sudah diberikan warna.


Putih = ( AC, AD )
Hitam = ( BD, EB )
Merah = ( EC )
Pembagian simpul berdasarkan simpul yang tidak langsung berhubungan seminimal mungkin ( BISA
DILAKUKAN DENGAN BEBERAPA KEMUNGKINAN )

Dari langkah ke 5 diperoleh 3 fase, sehingga bisa kita simpulkan keseluruhan situasi dan hasilnya
dapat dinyatakan dengan :

Fase 1

Fase 2

Fase 3
64 | P a g e

Referensi

Al Fatta, Hanif, S.k om. 2006. Dasar PemrogramanC++. Andi Offset. Yogyakarta

Frieyadie. 2006. Panduan Pemrograman C++. Andi Offset. Yogyakarta

Kadir, Abdul. 2001. Pemrograman C++ menggunakan turbo C++ dan borland C++. Andi Offset.
Yogyakarta.

Nugroho, Adi, ST., MMSI. Pemrograman Berorientasi Objek. Informatika. Bandung

Jan Hendrik Rapar. 1996. Pengantar Logika. Asas-asas penalaran sistematis. Yogyakarta: Penerbit
Kanisius. ISBN 979-497-676-8
Raharjo, Budi. 2004. Mengungkap Rahasia pemrograman dalam C++. Informatika. Bandung

Tim Penyusun Komisi Manajemen Informatika Akademi Manajemen Informatika Dan Komputer BSI
2014

Sismoro heri dan Kussrini Iskandar 2094. Struktur data dan Pemrogaman dengan Pascal. Andi offset
yogjakarta.
Tim Penyusun Komisi Manajemen Informatika Akademi Manajemen Informatika Dan Komputer BSI
2014
Yulikuspartono, S.Kom,2003, Pengantar Logika dan Algoritma, Andi Offset, Yogyakarta

Yulikuspartono, S.Kom,2003, Pengantar Logika dan Algoritma, Andi Offset, Yogyakarta

http://www.web-games-online.com/towers-of-hanoi/index.php

Anda mungkin juga menyukai