Anda di halaman 1dari 85

KATA PENGANTAR

Puji syukur kehadirat Allah subhanahu wata’ala atas Rahmat


dan HidayahNya Penysun dapat menyelesaikan penyusunan Buku Ajar
Mata Kulialh Logika dan Algoritma ini. Penyusun menyadari, bahwa
tanpa bimbingan dan bantuan dari berbagai pihak, sulit rasanya
penyusun dapat menyelesaikan penyusunan prangkat pembelajaran ini.
Oleh karena itu penyusun mengucapkan banyak terima kasih kepada:
1. Rektor Universitas Ibrahimy Sukorejo Situbondo.
2. Civitas akademika Fakultas Sains dan Teknologi Universitas
Ibrahimy Sukorejo Situbondo yang telah memberikan kesempatan,
dukungan kepada penyusun Buku Ajar untuk melaksanakan
perkuliahan di Fakultas Sains dan teknologi. Semoga kebaikan dan
bantuan beliau diberikan balasan oleh Allah SWT dengan balasan
yang terbaik.
3. Rekan-rekan dosen Fakultas Sains dan Teknologi Universitas
Ibrahimy yang turut membantu atas terselesaikannya buku ajar ini,
keluarga serta semua pihak yang selalu memberikan dukungan dan
do’a. Semoga amal baik yang telah diberikan kepada penyusun
mendapatkan balasan yang terbaik dari Allah SWT.
Penyusun menyadari bahwa buku ajar ini masih jauh dari
harapan. Oleh karena itu, saran dan kritik yang konstruktif sangat
diharapkan demi penyempurnaan laporan ini. Akhir kata, semoga
perangkat pembelajaran ini dapat memberikan manfaat, walaupun
sekecil dzarrah untuk meningkatkan kualitas pendidikan di Indonesia.

Situbondo, Agustus 2018


Penyusun

Abd. Ghofur, M.Kom.

Logika dan Algoritma Pemrograman - ii - Fak. Saintek Universitas Ibrahimy


DAFTAR ISI

Halaman Cover ................................................................. i


Kata Pengantar.................................................................. ii
Daftar Isi........................................................................... iii
BAB 1 : Pengertian Dasar Logika Dan Algoritma ........... 1
BAB 2 : Konsep Algoritma .............................................. 8
BAB 3 : Konsep Tipe Data............................................... 11
BAB 4 : Diagram Alur / Flowchart .................................. 22
BAB 5 : Looping (Perulangan)......................................... 29
BAB 6 : Struktur Rekursif ................................................ 33
BAB 7 : Larik (Array) ...................................................... 40
BAB 8 : Sorting Metode Devide And Conquer ................ 46
BAB 9 : Algoritma Searching........................................... 76
Daftar Pustaka

Logika dan Algoritma Pemrograman - iii - Fak. Saintek Universitas Ibrahimy


BAB 1
Pengertian Dasar Logika Dan Algoritma

Sejarah Algoritma
Asal kata Algoritma berasal dari nama Abu Ja’far Mohammed Ibn Musa
al-Khowarizmi, ilmuan Persia yang menulis kitab al jabr w’al-muqabala
(rules of restoration and reduction) sekitar tahun 825 M
A. Algoritma
 Urutan langkah-langkah untuk memecahkan masalah
 Urutan logis pengambilan putusan untuk memecahkan masalah
urutan langkah logis, berarti algoritma harus mengikuti suatu
urutan tertentu, tidak boleh melompat-lompat.
 Alur pemikiran dalam menyelesaikan suatu pekerjaan yang
dituangkan secara tertulis.
Alur pikiran yang artinya algoritma seseorang dapat berbeda dari
algoritma orang lain.
tertulis, yang artinya dapat berupa kalimat, gambar, atau tabel
tertentu.

Dalam bidang komputer, algoritma sangat diperlukan dalam


menyelesaikan berbagai masalah pemrograman, terutama dalam
komputasi numeris. Tanpa algoritma yang dirancang baik maka
proses pemrograman akan menjadi salah, rusak, atau lambat dan
tidak efisien.

Note:
Algoritma Di butuhkan untuk memerintah computer mengambil langkah-
langkah tertentu untuk menyelesaikan masalah

Algoritma  Pemrograman  Program

Agar algoritma dapat memerintah (diproses) komputer, maka dirubah


menjadi bentuk program (melalui proses pemrograman).

Penulisan Algoritma :
1. Menggunakan bahasa natural (Bahasa manusia: Indonesia, Inggris)
Kelemahannya masih sering membingungkan (ambigu) / sulit
dipahami.
2. Menggunakan Flowchart

Logika dan Algoritma Pemrograman -1 Fak. Saintek Universitas Ibrahimy


Baik karena alur algoritma dapat dilihat secara visual, tetapi repot
pembuatannya jika algoritma panjang
3. Menggunakan Pseudocode
Sudah dekat dengan bahasa pemrograman, tetapi sulit dimengerti
oleh orang yang belum tahu pemrograman
B. Tahap Analisa Algoritma
1. Bagaimana merencanakan algoritma
Dengan Mendefinisikan masalah.
Contoh : Permasalahan menghitung luas lingkaran,
dengan data yang diketahui adalah diameter lingkaran.
Rumus : ∏ . r2 dengan Phi = 3.14 atau 22/7.
2. Bagaimana menyatakan suatu algoritma (menulis algoritma)
Dengan flowchart / diagram alir
Program Flowchart
Yaitu bagan yang menggambarkan urutan logika dari suatu
prosedur pemecahan masalah.
1. Simbol yang digunakan :
2. menunjukkan awal dan akhir dari program
3. memberikan niai awal pada suatu variabel atau counter
4. menunjukkan pengolahan aritmatika dan pemindahan
data
5. menunjukkan proses input
atau output
6. untuk mewakili operasi
perbandingan logika
7. proses yang ditulis sebagai sub
program, yaitu prosedur/
fungsi
8. penghubung pada halaman
yang sama
9. p
enghubung pada halaman
yang berbeda

Logika dan Algoritma Pemrograman -2 Fak. Saintek Universitas Ibrahimy


Contoh :

Atau flowchart yang dibuat dengan program raptor

Dengan psudocode
Logika dan Algoritma Pemrograman -3 Fak. Saintek Universitas Ibrahimy
suatu cara penulisan algoritma agar ide dan logika dari algoritma
dapat disampaikan/diekspresikan menggunakan gaya bahasa
pemrograman pemrograman tertentu.

Dengan statement program /penggalan program :


Dari algoritama yang telah dibuta dapat diterjemahkan ke dalam
Statemen program C++ sebagai berikut :
1 #include <iostream>
2
3 using namespace std;
4
5 int main()
6 {
7 float phi = 3.14;
8 float Diameter, Radius, Luas_Lingkaran;
9 cout << "Masukkan Nilai Diameter : ";
10 cin >> Diameter;
11 Radius = Diameter / 2;
12 Luas_Lingkaran = phi * Radius * Radius;
13 cout << "Luas Lingkaran adalah : " <<
14 Luas_Lingkaran;
15 return 0;
}

3. Bagaimana validitas suatu algoritma


4. Bagaimana menganalisa suatu algoritma
5. Bagaimana menguji program dari suatu algoritma

Studi Kasus :
Buatlah Algoritma untuk memilih bilangan terbesar dari 3 buah bilangan
?

 Dengan Bahasa Natural


1. Memasukkan bilangan pertama
2. Memasukkan bilangan kedua
3. Memasukkan bilangan ketiga
4. Ambil bilangan pertama dan set maks sama dengan bilangan
pertama
5. Ambil bilangan kedua dan bandingkan dengan maks

Logika dan Algoritma Pemrograman -4 Fak. Saintek Universitas Ibrahimy


6. Apa bila bilangan kedua lebih besar dari maks, set maks sama
dengan bilangan kedua
7. Ambil blangan ketiga dan bandingan dengan maks
8. Apabila bilangan ketiga lebih besar dari maks, set maks sama
dengan bilangan ketiga
9. Variabel maks berisi bilangan terbesar
10. Tampilkan hasil bilangan terbesar
11. Selesai

 Dengan Flowchart

 Dengan Pseudo-code

Input (Bilangan_pertama)
Logika dan Algoritma Pemrograman -5 Fak. Saintek Universitas Ibrahimy
Input (Bilangan_kedua)
Input (Bilangan_ketiga)
maks  bilangan_pertama
if (maks < bilangan_kedua) then
maks  bilangan_kedua
if (maks < bilangan_ketiga) then
maks  bilangan_ketiga
output (maks)
End.

 Dengan Bahasa Pemrogaraman C++


1 #include <iostream>
2
3 using namespace std;
4
5 int main()
6 {
7 int Bilangan_pertama, Bilangan_kedua,
8 Bilangan_ketiga, maks;
9
10 cout << "Masukkan bilangan yang pertama : ";
11 cin >> Bilangan_pertama;
12 cout << "Masukkan bilangan yang kedua : ";
13 cin >> Bilangan_kedua;
14 cout << "Masukkan bilangan ketiga : ";
15 cin >> Bilangan_ketiga;
16
17 maks = Bilangan_pertama;
18 if (maks < Bilangan_kedua) {
19 maks = Bilangan_kedua;
20 }
21 if (maks < Bilangan_ketiga) {
22 maks = Bilangan_ketiga;
23 }
24 cout << "Bilangan terbesar adalah : " << maks;
25 return 0;
}

C. Tahap Proses Uji Algoritma


1. Pengujian Tahap Debuging
Untuk mengecek kesalahan program, Baik sintaksis maupun logika.
2. Pengujian tahap profiling.
Untuk menentukan waktu tempuh dan banyak nya memori program
yang digunakan.
D. Analisis Algoritma

Logika dan Algoritma Pemrograman -6 Fak. Saintek Universitas Ibrahimy


Untuk melihat effisiensi dan efektifitas dari suatu algoritma, dapat dilihat
dari:
1. Waktu Tempuh dari Suatu Algoritma
2. Jumlah memori yang digunakan

E. Sifat-sifat Algoritma
Aspek Penting Algoritma :
1. Finite  algoritma harus berhenti setelah mengerjakan sejumlah
langkah terbatas
2. Definite  setiap langkah didefinisikan secara tepat, tidak boleh
membingungkan (ambigu)
3. Input  sebuah algoritma memiliki nol/lebih input sebelum
dijalankan
4. Output  algoritma memiliki satu/lebih output, yang biasanya
bergantung kepada input
5. Effective setiap algoritma diharapkan memiliki sifat efektif. (setiap
langkah harus sederhana
dan sehingga dapat dikerjakan dalam waktu yang masuk
akal)

Langkah-langkah yang membentuk suatu algoritma dapat dibagi


menjadi 3 kelompok proses:
1. Sequence Process  instruksi dikerjakan secara berurutan satu
persatu dimulai dari langkah pertama sampai terakhir.
2. Selection Process  instruksi pemilihan proses (percabangan),
sehingga apabila memenuhi persyaratan tertentu maka instruksi
akan dikerjakan.
Contoh : jika pembayaran tunai diberi diskon 10%
Jika dilakukan secara redit maka diskon 0 %.
(dalam pernyataan diatas, hanya boleh melakukan 1
instruksi dari 2 alternatif instruksi.
3. Iteration Process  suatu instruksi yang dikerjakan berulang-ulang
selama beberapa kali selama masih memenuhi suatu kondisi.

Tugas 1 :
Buatlah algoritma (dengan bahasa natural, Flowchart, pseudocode, dan
program C++):
1. Menampilkan bilangan ganjil dari 1 sampai dengan 10.
2. Menghitung jumlah deret : 1 + 2 + 3 + 4 + .... + N
N = jumlah maksimum suatu nilai yang dimasukkan.

Logika dan Algoritma Pemrograman -7 Fak. Saintek Universitas Ibrahimy


BAB 2
Konsep Algoritma
KONSEP ALGORITMA

Studi Kasus:

Algoritma TUKAR ISI BEJANA

A B

Diberikan dua buah bejana A dan B,


bejana A berisi larutan berwarna merah,
bejana B berisi larutan berwarna biru.
Pertukarkan isi kedua bejana itu sedemikian sehingga bejana A berisi
larutan
berwarna biru dan bejana B berisi larutan berwarna merah.

algoritma :
Tuangkan larutan dari bejana A ke dalam bejana B
Tuangkan larutan dari bejana B ke dalam bejana A.

Apakah cara di atas BENAR ?


Apakah hasil yang didapat sesuai dengan penyelesaian masalah?
Apa hasil yang didapat ?

Algoritma TUKAR ISI BEJANA di atas tidak menghasilkan pertukaran yang


benar.
Langkah di atas tidak logis, hasil pertukaran yang terjadi adalah percampuran
kedua larutan tersebut.

Penyelesaian :
Logika dan Algoritma Pemrograman -8 Fak. Saintek Universitas Ibrahimy
Untuk mempertukarkan isi duah bejana, diperlukan sebuah bejana tambahan
sebagai tempat penampungan sementara, misalnya bejana C.

A B C

Algoritma yang menghasikan pertukaran yang benar sebagai berikut:


1. Tuangkan larutan dari bejana A ke dalam bejana C.
2. Tuangkan larutan dari bejana B ke dalam bejana A.
3. Tuangkan larutan dari bejana C ke dalam bejana B.

TUGAS 2 :

1. Seorang Petani akan berpergian ke kota dengan membawa seekor


kambing, Anjing dan Rumput Yang ketiganya memliki berat yang tidak
jauh berbeda, ditengah jalan petani harus menyebrangi sungai dengan
menggunakan perahu dan untuk melaluinya petani tersebut tidak
diperbolehkan membawa sekaligus bawaannya mengingat kapasitas
kekuatan perahu tersebut, dan untuk melaluinya petani harus membawa
satu persatu bawaannya. Ditanya: berapa kali petani tersebut harus
melalui sungai dengan memperhatikan bahwa kambing makan rumput,
anjing makan kambing ?.
Buatlah Algoritma Dengan Bahasa Natural dan flowchart dokumen Dari
Cerita di atas!

2. Bagaimana caranya untuk menyeberangkan tiga orang missionaris yang


sedang dikejar oleh Tiga orang kanibal ke sisi pulau yang ada
diseberangnya
Dengan catatan : Bila misionarisnya Lebih sedikit dari dari kanibal, maka
misionaris tersebut akan dimakannya.
Buatlah Algoritma Dengan Bahasa Natural dan flowchart dokumen Dari
Cerita di atas!

3. Seorang siswa mendaftar santri baru pada bagian registrasi, setelah


menyelesaikan penulisan biodata santri, siswa tersebut di diperkenankan
untuk pindah ke bagian seleksi untuk diuji baca alQur’an, jika ujian

Logika dan Algoritma Pemrograman -9 Fak. Saintek Universitas Ibrahimy


alQur’an lulus maka siswa tersebut melanjutkan ke bagian asrama untuk
menentukan asrama, jika ujian alqur’an tidak lulus maka siswa tersebut
berstatus waiting list (daftar tunggu ) dan bisa kembali 1 minggu
setelahnya.
Dari cerita di atas lakukan analisa dan buatlah :
a. Flowchart Proses
b. Flowchart Dokumen
c. Flowchart dengan program Raptor!
d. Program dengan bahasa C++

Logika dan Algoritma Pemrograman - 10 Fak. Saintek Universitas Ibrahimy


BAB 3
Konsep Tipe Data
Bahasa Pemrograman C++
TIPE DATA
1. Tipe data Sederhana
Tipe data yang umum digunakan dalam bahasa pemrograman C++ diataranya
adalah :
a. Tipe data angka
Untuk tipe data data angka memiliki nilai dan panjang field yang berbeda
- Integer (int) : “merupakan tipe data yang digunakan untk meyimpan
nilai dengan bilangan bulat positif tanpa titik decimal pada bilangan
tersebut, misalnya 1, 2, 3 ... dst”
1. Dengan nilai konstata misalnya
Int x = 5;
2. Dengan data inputan
int x ;
- Floating point : “Merupakan tipe data yang digunakan untuk
menyimpan data angka dengan nilai pecahan misalnya 27.72; 54.36
dst” namun pada floating point kita dapat mengenal macam-
macamnya dan mengetahui panjang field yang tersimpan pada
masing-masing tipe datanya
- Tpe data floating point terbagi atas :
1. Float : “merupakan tipe data yang menyimpan nilai pecahan
penyimpanan data 4-8 bytes”
2. Double dan long : “merupakan tipe data yang menyimpan nilai 8
byte”.
Cara mendeklarasikannya yaitu :
1. Dengan nilai konstan
float x = 3.12;
double x = 3.122222;
2. Dengan nilai inputan
float x;
doubel x;
b. Tipe data karakter : “merupakan tipe data yang digunakan untuk
menyimpan nilai karakter (1 buah huruf)”
Cara mendeklarasikannya adalah :
char nilai = ‘A’;
c. Tipe data string : “merupakan tipe data yang menyimpan nilai dari
gabungan beberapa karakter”
Logika dan Algoritma Pemrograman - 11 Fak. Saintek Universitas Ibrahimy
Cara mendeklarasikannya adalah :
char Kota (10);

SUPLEMEN

MENGENAL PEMROGRAMAN C++


Secara ringkas, struktur bahasa C++ dapat terdiri dari:
1. Header
2. Program utama
- deklarasi label
- definisi konstanta
- definisi tipe
- deklarasi variabel
- deklarasi prosedur
- deklarasi fungsi
3. Bagian Pernyataan (statetement program/baris perintah)

#include <iostream> {header}


using namespace std; {standar c++}
int main() { Penanda program utama}
{
Tempat instruksi/perintah
}

a. Deklarasi variabel
Untuk membuat variabel/pengenal/indentifier pada yaitu dengan
menuliskan nama variabel dan tipe datanya pada bagian deklarasi
variabel
Format penulisan: [tipe_data nama_identifier ; ]
contoh :

int i = 1;
char nama[10];
bool Jenis_kelamin=true;
float Luas,Panjang,Lebar;
double luas;

Logika dan Algoritma Pemrograman - 12 Fak. Saintek Universitas Ibrahimy


b. Operator Aritmatika
Operator aritmatik yang dipakai dalam C++ adalah :
+ tambah

- kurang

* kali

/ bagi

% modulus

Operator-operator di atas dikenal sebagai binary operators artinya


operator-operator ini memerlukan dua operan. Operator +, -, * dan / telah
jelas artinya, yang perlu dijelaskan adalah operator modulus (%),
operator ini dipakai untuk mencari sisa dan pembagian antar bilangan
bulat, misalnya 20 % 8 menghasilkan 4 karena sisa pembagian dari 20
dibagi 8 adalah 4. Operator + dan – dapat dipakai sebagai unary operator,
artinya operator-operator ini hanya memerlukan satu operan saja. Suatu
variabel dapat dinyatakan positip atau negatip dengan unary operator +
atau -, misalnya:

a = -25;

b = +25;

c = -a+b; .

Suatu ekpresi dapat mengandung lebih dari satu jenis operator, C++
mengartikannya berdasar order of precedence dari operator-operator
tersebut. Order of precedence dari operator menunjukkan hirarki
matematis dari suatu operator misalnya:

2 + 3 * 2;

C++ akan menghitung 3*2 dulu karena operator kali (*) hirarkinya lebih
tinggi dari operator + sehingga ekpresi di atas hasilnya adalah 8, bukan
10. Untuk operator aritmatik order of precedence-nya yang tinggi adalah
kali (*), bagi (/) dan modulus (%) sedang yang rendah adalah tambah (+)
dan kurang (-),Jadi C++ selalu melakukan kali, bagi dan modulus lalu
Logika dan Algoritma Pemrograman - 13 Fak. Saintek Universitas Ibrahimy
diikuti tambah dan kurang. Operator-operator dalam C++ terdistribusi
dalam 15 hirarki precedence yang dapat dilihat pada tabel di bawah ini.

Tabel Precedence dari Operator dalam C++


Precedence
Symbol Description Associativity
Level

++ Prefex increment
– Prefex decrement
Function call and
()
1 subexpression Left to right
[] Array subscript
-> Structure pointer
. Structure member
! Logical negation
~ 1’s complement
- Unary negation
+ Unary plus
2 Right to left
(type) Type cast
* Pointer deference
& Address of
Sizeof Size of
* Multiplication
3 / Division Left to right
% Modulus
+ Addtion
4 Left to right
- Subtraction
<< Bitwise left shift
5 Left to right
>> Bitwise right right shift
< Less than
<= Less than or equal to
6 Left to right
> Greater than
>= Greater than or equal
Logika dan Algoritma Pemrograman - 14 Fak. Saintek Universitas Ibrahimy
to
== Equal test
7 Left to right
!= Not equal to
8 & Bitwise AND Left to right

Precedence
Symbol Description Associativity
Level

9 ^ Bitwise exclusive OR Left to right


10 | Bitwise inclusive OR Left to right
11 && Logical AND Left to right
12 || Logical inclusive OR Left to right
13 ?: Conditional test Left to right
= Assigment
+= Compound add
-= Compound substract
*= Compound multiply
/= Compound divide
%= Compound modulus
Compound bitwise left
<<=
shift
14 Left to right
Compound bitwise
>>=
right shift
Compound bitwise
&=
AND
Compound bitwise
^=
exclusive OR
Compound bitwise
|=
inclusive OR
, Sequence point
15 ++ Postfix increment Left to right
– Postfix decrement

Logika dan Algoritma Pemrograman - 15 Fak. Saintek Universitas Ibrahimy


Berdasar table of precedence di atas assignment berlipat banyak dapat
dimengerti dengan mudah, misalnya :

A = b = c = d = e = 100;

dalam hal ini assosiativitasnya adalah dari kanan ke kin, jadi 100
dipasangkan di variabel e, lalu dari variabel e ke variabel d demikian
seterusnya sampai akhirnya n, sehingga setelah selesai dieksekusi
variabel-variabel a, b, c, d, e mempunyai nilai 100. Bahkan kita dapat
menulis ekpresi sebagai berikut :

x = 5 + (y = 9 – z);

Order of precedence dari operator dapat di bypass dengan tanda


kurung,karena tingkatan precedence dari tanda kurung adalah di atas
operator kali, bagi dan modulus sehingga ekpresi tadijika ditulis (2+3)*2
akan menghasilkan 10. Contoh lain adalah :

Contoh program berikut ini menjelaskan pemakaian tanda kurung untuk


mencari rata-rata:

1 //C1_2.CPP
2 #include <iostream>
3 #include <iomanip>
4 Using namespace std;
5
6 main()
7 {
8 float nilai_1, nilai_2, nilai_3, rata2;

Logika dan Algoritma Pemrograman - 16 Fak. Saintek Universitas Ibrahimy


9 nilai_1 = 85.0;
10 nilai_2 = 80.0;
11 nilai_3 = 75.0;
12
// rata2 = nilai_1 + nilai_2 + nilai_3 /
13
3.0;
/* Perhatikan tanda kurung diperlukan untuk
14
mengubah
order of precedence supaya rata-ratanya
15
benar */
16 rata2 = (nilai_1 + nilai_2 + nilai_3) / 3.0;
cout << “Rata-rata nilai adalah : ” <<
17
setprecision(2) << rata2;
18 return 0;
19 }

Operator-operator aritmatik ini dapat digabungkan untuk membentuk


operator gabungan (compound operator). Dari tabel of precedence
tampak bahwa tingkatan precedence dari operator gabungan ini rendah
sehingga pada suatu ekpresi yang mengandung banyak operator,
operator gabungan ini pada umumnya dievaluasi pada saat-saat akhir.
Contoh pemakaian operator gabungan:

Operator Contoh Ekivalen


+= bonus += 500; bonus = bonus + 500;
-= budget -= 50; budget = budget •- 50;
*= gaji *= 1.2; gaji=gaji * 1.2;
/= faktor/= 50; faktor= faktor/.50;
%= jml_hari %=7; jml_hari =jml_hari % 7;

Contoh program berikut ini akan memperjelas pengertian mengenai


operator gabungan dan tingkatan precedence nya.

1 // C2_2.CPP
2 #include <iostream>

Logika dan Algoritma Pemrograman - 17 Fak. Saintek Universitas Ibrahimy


3 using namespace std;
4
5 main()
6 {
7 int i = 4;
8 int j = 8;
9 int k = 12;
10 int jwb;
11 jwb = i + j;
12 cout << jwb << " n "; //12
13 jwb += k;
14 cout << jwb << " n "; //24
15 jwb /= 3;
16 cout << jwb << " n "; //8
17 jwb -= 5;
18 cout << jwb << " n "; //3
19 jwb *= 2;
20 cout << jwb << " n "; //6
21 jwb %= 4;
22 cout << jwb << " n "; //2
23
24 jwb *= 5+3;
25 cout << jwb << " n "; //16
26 jwb += 4-2;
27 cout << jwb << " n "; //18
28 return 0;
29 }

Pada suatu ekpresi dalam C++ tipe data tidak harus sama. Kalau suatu
bilangan bulat ditambah dengan suatu bilangan pecahan maka C++ akan
mengkonversi tipe yang lebih kecil ke tipe yang lebih besar. Konversi ini,
yang hanya bersifat sementara pada saat ekpresi dievalusi saja, pada umumnya
akan memberikan hasil yang lebih teliti. Jika konversi dilakukan sebaliknya
maka terjadi pemotongan pada tipe data yang lebih besar sehingga mengurangi
Logika dan Algoritma Pemrograman - 18 Fak. Saintek Universitas Ibrahimy
ketelitian. Konversi yang bersifat otomatis ini dapat di bypass dengan type
casting, yaitu kita memaksa compiler untuk mengkonversi menjadi tipe data
yang kita inginkan. Tipe data yang di type cast ini berubah menjadi tipe baru
hanya pada saat ekpresi dievaluasi, jadi sifatnya sementara. Format dari suatu
type cast adalah:

(tipe data) ekspresi

dalam hal ini tipe data adalah tipe data yang ada di C++, dan ekspresi dapat
berupa variabel, konstanta atau kombinasinya. Program berikut ini memakai
suatu type cast untuk menghitung bunga pinjaman.

1 #include <iostream>
2 #include <iomanip>
3
4 using namespace std;
5
6 main ()
7 {
8 int jml_hari =45;
9 float jml_pinjaman = 2000000.00;
10 float bunga_tahunan = 0.155;
11 float bunga_harian, bunga_pinjaman;
12
// Type cast jumlah hari dalam 1 tahun
13
menjadi tipe float
14 bunga_harian = bunga_tahunan / (float)365;
//Karena jml_hari adalah integer,
15
konversikan menjadi float
bunga_pinjaman =jml_pinjaman * bunga_harian
16
* (float)jml_hari;
17 jml_pinjaman += bunga_pinjaman;
cout << "Total piutang anda adalah "<<
18 setiosflags(ios::fixed) << setprecision(2) <<
jml_pinjaman;
19
20 return 0;

Logika dan Algoritma Pemrograman - 19 Fak. Saintek Universitas Ibrahimy


21 }

c. Operator pemberi nilai (assignment operator)

Menggunakan sintax : “ = “ (dua sama dengan)


contoh:

LUAS = PANJANG * LEBAR


(hasil perkalian PANJANG * LEBAR dimasukan kedalam variabel LUAS)

d. Pernyataan masukan dan keluaran

CIN

Digunakan untuk meminta masukan dari papan ketik untuk diolah computer.
CIN >> nama;  memasukan nilai ke variabel

COUT

Digunakan untuk menampilkan data ke layar.

COUT << “Halo”; menampilkan string halo


COUT << nama; menampilkan isi variable nama.

Untuk pindah baris dibawahnya dapat digunakan “\n”

Contoh Program :

1 #include <iostream>
2
3 using namespace std;
4
5 int main()
6 {
7 char x;
8 char i[20],j[20],k[20],l[20];
9 float nilai1, nilai2;
10 int hasil;
11 double hasil1;
12 float hasil2;
13
14 cout << "Inputkan nilai 1 : ";
15 cin >> nilai1;
16 cout << "Inputkan Nilai 2 : ";
Logika dan Algoritma Pemrograman - 20 Fak. Saintek Universitas Ibrahimy
17 cin >> nilai2;
18 cout << "Inputkan sebuah huruf : ";
19 cin >> x;
20 cout << "Inputkan Nama Anda : ";
21 cin >> i;
22 cout << "Masukkan Kelas anda : ";
23 cin >> j;
24 cout << "Masukkan No.Telp/HP Anda : ";
25 cin >> k;
26 cout << " Masukkan Alamat Anda : ";
27 cin >> l;
28 //memproses perkalian, penjumlahan dan
pengurangan
29 hasil = nilai1 * nilai2;
30 hasil1 = nilai1 + nilai2;
31 hasil2 = nilai1-nilai2;
32 //mencetak hasil operator matematika
33 cout << "Hasil perkalian adalah : " <<
hasil << "\n";
34 cout << "Hasil penjumlahan adalah : " <<
hasil1 << "\n";
35 cout << "Hasil Pengurangan adalah : " <<
hasil2 << "\n";
36 return 0;
37 }

Logika dan Algoritma Pemrograman - 21 Fak. Saintek Universitas Ibrahimy


BAB 4
Diagram Alur / Flowchart

Flowchart
Flowchart adalah representasi grafik dari langkah-langkah yang
harus diikuti dalam menyelesaikan suatu permasalahan yang
terdiri atas sekumpulan simbol, dimana masing-masing simbol
merepresentasikan suatu kegiatan tertentu.
Flowchart diawali dengan penerimaan input, pemrosesan input,
dan diakhiri dengan penampilan output.
bagan yang menggambarkan urutan logika dari suatu prosedur
pemecahan masalah.
suatu diagram yang menggambarkan susunan logika suatu
program

Simbol yang digunakan :


menunjukkan awal dan akhir dari
program
memberikan niai awal pada suatu
variabel atau counter
menunjukkan pengolahan aritmatika
dan pemindahan data
menunjukkan proses input atau
output
untuk mewakili operasi perbandingan
logika
proses yang ditulis sebagai sub
program, yaitu prosedur/ fungsi
penghubung pada halaman yang sama
penghubung pada halaman yang berbeda
Logika dan Algoritma Pemrograman - 22 Fak. Saintek Universitas Ibrahimy
Simbol Flowchart dan fungsinya :

Flowchart terdiri dari 3 struktur :


1. Struktur Squence /sederhana
Diagram yang alurnya mengalir secara berurutan dari ataske bawah
atau dengan kata lain tidak adanya percabangan atau pengulangan

Logika dan Algoritma Pemrograman - 23 Fak. Saintek Universitas Ibrahimy


Flowchart dengan struktur yang beurutan  alirannya dari atas
kebawah secara berurutan.

Contoh : flowchart dari algoritma mencari luas persegi panjang, Luas


Lingkaran.

2. Struktur Branching
Diagram yg alurnya terjadi/terdapat alih kontrol berupa percabangan.
Flowchart dengan stuktur percabangan  digunakan untuk meyeleksi
kondisi dan menentukan pilihan proses selanjutnya.
contoH : flowchart dari algoritma menentukan apakah bilangan yang
dimasukan ganjil atau genap.

3. Struktur looping

Logika dan Algoritma Pemrograman - 24 Fak. Saintek Universitas Ibrahimy


Flowchart dengan Struktur perulangan  digunakan untuk
mengulangi langkah-langkah sebelumnya sampai suatu kondisi
terpenuhi.
Contoh:
flowchart dari algoritma untuk menampilkan bilangan ganjil dibawah
nilai 10.  sehingga proses mencetak bilangan tersebut akan
dilakukan sampai kondisi terpenuhi yaitu 10.

Catatan: Flowchart yang dibuat bisa juga merupakan gabungan dari


ketiga struktur diatas.

VARIABEL
Variabel, sebagai tempat untuk menyimpan suatu nilai yang sejenis.
Terdiri dari nama dari variable itu sendiri dan nilai yang disimpan.
variabel / Peubah  suatu nilai yg dapat berubah harganya.

Contoh pemberian nilai ke variabel :

A=5  variabel A diberi nilai 5.

Logika dan Algoritma Pemrograman - 25 Fak. Saintek Universitas Ibrahimy


A=B  variabel A diberi nilai sama dengan nilai variabel B.

variabel B sudah memiliki nilai sebelumnya

A = A +1  variabel A dirubah isinya dengan variabel A yang dijumlahkan


dengan 1. (proses increament)

Jenis variabel terbagi atas :

1. Variabel numerik  berisi angka numerik /bilangan


2. Variabel String  berisi karakter.

STRUKTUR BRANCHING /Percabangan


1. Bersyarat
Diagram yg alurnya ada/banyak terjadi alih kontrol berupa
percabangan & terjadi apabila kita dihadapkan pada suatu Kondisi
dengan dua pilihan BENAR/ SALAH
Struktur :
If then
If then else
If then elseif
Case of.
2. Tidak Bersyarat
Struktur : GOTO

Studi kasus
Buat diagram alur untuk masalah menghitung temperatur dalam derajat
Fahrenhait yang diubah ke dalam derajat Celcius & Reamur.

Logika dan Algoritma Pemrograman - 26 Fak. Saintek Universitas Ibrahimy


Dengan rumus :

C= 5 (F-32) R= 4 (F-32)

9 9

Derajat Celsius (°C) adalah suatu satuan ukur suhu yang mendapatkan
namanya dari ahli astronomi Anders Celsius (1701–1744), yang
pertama kali mengusulkannya pada tahun 1742. Skala suhu celsius
didesain supaya titik beku air berada pada 0 derajat dan titik didih pada
100 derajat di tekanan atmosferik standar.
Fahreheit adalah salah satu skala temperatur selain Celsius dan kelvin.
Nama Fahrenheit diambil dari ilmuwan Jerman yang bernama Gabriel
Fahrenheit (1686-1736). Dalam skala ini, titik beku air adalah 32 derajat
Fahrenheit (ditulis 32°F) dan titik didih air adalah 212 derajat
Fahrenheit. Negatif 40 derajat Fahreheit sama dengan negatif 40
derajat Celsius.

mulai

C = 5/9*(F-32)

R = 4/9 *(F-32)

C,R

selesai

Logika dan Algoritma Pemrograman - 27 Fak. Saintek Universitas Ibrahimy


A. Soal Latihan :
1. Buatlah Algoritma untuk konversi jam ke menit dengan
masukannya jam .
2. Algoritma untuk menghitung jumlah yang harus dibayar oleh
pembeli dari sejumlah barang yang dibeli, setelah
mendapatkan diskon 10% dengan syarat jumlah total
pembelian > Rp. 1.500.000,-

B. Soal Latihan
Tersedia potongan Program berikut ini :
If (A>B) {
Perintah 1
}
Else If ((A< B) or (C>B)) {
Perintah 2
}
Else {
perintah 3
}

Buatlah bentuk Flowchart dari potongan Program diatas.

Logika dan Algoritma Pemrograman - 28 Fak. Saintek Universitas Ibrahimy


BAB 5
Looping (Perulangan)

Suatu algoritma memiliki struktur


sequence/berurutan
branching/percabangan
looping/perulangan.

Struktur looping digunakan untuk mengulangi langkah-langkah


sebelumnya yang telah dikerjakan, kondisi perulangan dilakukan sampai
suatu kondisi berhenti terpenuhi.

Proses Perulangan digunakan contohnya untuk membuat algortima :


“menampilkan bilangan berurutan dari 1 sampai dengan 10”
“menampilkan deret : 3, 7, 11, 15 …… N, sampai sejumlah N”
“menampilkan bilangan dari 10 sampai dengan 1 “

Dari algoritma diatas dipilih algortima pertama.


Proses perulangan akan dilakukan yaitu :
mencetak bilangan dari 1 -10
melakukan proses increament (penambahan bilangan dengan 1)
proses perulangan ini akan dilakukan sampai kondisi terakhir yaitu
mencetak bilangan 10.

Buat Flowchart algoritma diatas ?


Logika dan Algoritma Pemrograman - 29 Fak. Saintek Universitas Ibrahimy
Bentuk umum proses perulangan:
Tips:

Dalam membuat algoritma (contoh:


menggunakan flowchart. Sebelum
mulai membuat flowchart terlebih dahulu kita
identifikasi kira-kira ada berapa
variabel/peubah yang digunakan dalam
proses pembuatan algoritma.
Bil=1
Bila sebuah rumus : luas = panjang x
lebar
PUT Bil Maka bila dibuat algoritmanya maka
nanti terdapat 3 buah variabel yang
akan digunakan.

Bil <=10 ya Bil := Bil+1

Tidak

selesai

1. while [ kondisi ] { [……….] }


2. for (kondisi) { [……….] }
 for (int i=1;i<5;i++) {statemen} -> [nilai awal] to [nilai akhir]
 for (int i=5;i=1;i--) {statemen} -> [nilai akhir] to [nilai awal]
 Nested for (perulangan for bersarang)

Perulangan Statement dan contoh program


while do: while (kondisi) {
Evaluasi kondisi (statement)
Logika dan Algoritma Pemrograman - 30 Fak. Saintek Universitas Ibrahimy
dilakukan di bagian }
awal Contoh:
i = 1;
while (i<=10) {
cout << i << “ ”;;
i++;
}
hasil : 1 2 3 4 5 6 7 8 9 10
for..loop: for (kondisi) {
Perulangan dengan [Statement]
increment nilai }
Contoh:
for (int i=1;i<=10;i++) {
cout << i << “ ”;
}

hasil : 1 2 3 4 5 6 7 8 9 10
Nested Loop for for (int i=1; i<=10; i++) {

cout << "\n" << i << "


";

for (int j=11; j<=15;


j++) {

cout << j << " ";

Dari soal berikut Buatlah Flowchart dan program c++:


1. Menentukan suatu bil. bulat positif merupakan bil.genap/ganjil.

Logika dan Algoritma Pemrograman - 31 Fak. Saintek Universitas Ibrahimy


2. Mencetak deret angkat 1, 3, 5, 7..N dimana nilai maksimal
diinputkan.

Logika dan Algoritma Pemrograman - 32 Fak. Saintek Universitas Ibrahimy


BAB 6
Struktur Rekursif

Rekursif adalah suatu proses yang bisa memanggil dirinya sendiri.


Perulangan Rekursif dan Perulangan Iteratif.
Perulangan rekursif merupakan salah satu metode didalam
pemrograman yang mana dalam sebuah fungsi terdapat intruksi
yang memanggil fungsi itu sendri, atau lebih sering disebut
memanggil dirinya sendiri.

Perulangan iteratif merupakan perulangan yang melakukan proses


perulangan terhadap sekelompok intruksi. Perulangan dilakukan
dalam batasan syarat tertentu. Ketika syarat tersebut tidak
terpenuhi lagi maka perulangan aka terhenti.

Persamaan :

1. Iteratif dan rekursif merupakan metode atau teknik didalam


perulangan (looping)
2. Sama-sama memiliki bagian yang berfungsi sebagai batas dalam
sebuah perulangan

Perbedaan :

Iteratif dalam melakukan perulangan membutuhkan suatu instruksi


program seperti for dan while do, sedangkan rekursi tidak memakai
instruksi program seperti itu. Cukup dengan fungsi tersebut.

#include <iostream>
using namespace std;

int rekursif(int f)  nama fungsi: rekursif.


Logika dan Algoritma Pemrograman - 33 Fak. Saintek Universitas Ibrahimy
{
rekursif;  fungsi bernama
rekursif ini dikatakan
Sebagai fungsi rekursi
karena dia memanggil
Dirinya sendiri
}
int main()
{
int x;
rekursif(x);
return 0;
}
Pada contoh diatas: sebuah fungsi/prosedur adalah
sebuah proses.
Contoh fungsi rekursif diatas adalah sebuah
proses, dan didalam fungsi rekursif tersebut
terdapat perintah/proses yang
mengerjakan/memanggil proses rekursif (memanggil
dirinya sendiri),sehingga fungsi/prosedur
rekursif ini dinamakan fungsi rekursi.
Pada contoh diatas proses rekursi ini tidak
memiliki batas berhenti.
Untuk mengetahui contoh fungsi rekursif ini
silahkan melihat pada slide perkuliahan.

Catatan: Fungsi/prosedur dalam sebuah bahasa pemrograman disebut


juga subrutin/sub program.
Subprogram ini berisi perintah –perintah khusus yang sering
digunakan untuk proses pemrograman. Sehingga untuk
menghindari penulisan kode program yang sering digunakan
maka dibuatlah fungsi (subprogram).
Cara untuk menggunakan subprogram yaitu dengan
memanggil nama_fungsi tersebut melalui blok program
utama.
Logika dan Algoritma Pemrograman - 34 Fak. Saintek Universitas Ibrahimy
Contoh pemanggilan terdapat pada program faktorial.

FUNGSI FAKTORIAL

0! = 1

N! = N x (N-1)! Untuk N > 0

Nama fungsi:
#include <iostream> faktorial
using namespace std;

int rekursiffaktorial(int f)
{
Memanggil dirinya
if (f == 0){ sendiri
return 1;
}
Else {
return f * rekursiffaktorial(f - 1);
}
1. Cara menggunakan
} fungsi yaitu dengan
memanggil nama
fungsi tersebut dari
int main() program blok utama

Logika dan Algoritma Pemrograman - 35 Fak. Saintek Universitas Ibrahimy


int x;
cout << "Masukan Angka yang akan
difaktorialkan : ";
cin >> x;
cout << x <<"! = " << rekursiffaktorial(x);
return 0;
}
2. Karena fungsi factorial ini
merupakan fungsi rekursif
maka ketika dijalankan akan
terjadi proses perulangan .

MENARA HANOI

Tujuan permainan ini adalah memindahkan n buah piringan dari tonggak


asal A melalui tonggak bantu B menuju tonggak tujuan C. dengan aturan
piring yang lebuh kecil tidak boleh berada dipiringan yang lebih besar.

Logika dan Algoritma Pemrograman - 36 Fak. Saintek Universitas Ibrahimy


A B C

Bayangkan keadaan berikut:


Ada 3 tiang (a, b, c) tempat piringan dengan ukuran yang bervariasi dapat
ditumpuk. Pada mulanya semua piringan ada di “a”. Tugasnya adalah
Memindah semua piringan ke “c” dengan aturan sbb:

• pada satu saat hanya boleh memindah 1 piringan


• setiap perpindahan berupa pengambilan piringan teratas dari satu
tiang dan memasukannya ketiang lain, diatas piringan lain yang
mungkin sudah ada pada tiang tersebut.
• Tidak boleh meletakan piringan diatas piringan lain yang lebih kecil.
(piringan yang lebih besar tidak boleh berada di atas piringan yang
lebih kecil).
• pada setiap akhir pemindahan semua piringan harus berada di tiang

Untuk Penyelesaian masalah kita daftarkan terlebih dahulu langkah-


langkah penyelesaiannya:
a. ketika kondisi piringan  N= 1
Piringan 1 dipindahkan dari A ke C.
b. N =2
 Pindahkan piringan 1 dari A ke B
 Pindahkan piringan 2 dari A ke C
 Pindahkan piringan 1 dari B ke C

Dari langkah – langkah penyelesaian diatas, maka dapat disimpulkan :

Logika dan Algoritma Pemrograman - 37 Fak. Saintek Universitas Ibrahimy


Untuk memindahkan piringan dari tonggak asal (A) ke tonggak tujuan
(C) maka piringan ke N harus berada di tonggak tujuan (C).
Sedangkan piringan ke 1 sampai dengan (N-1) harus berada ditonggak
bantu(B).
Setelah piringan ke 1 s/d N-1 berada di B, Kemudian pindahkan
piringan ke 1 sampai dengan N-1 dari tonggak bantu (B) ke tonggak
tujuan (C).

Untuk menyelesaikan masalah tersebut dapat digunakan algoritma


Rekursif :

#include <iostream>

using namespace std;

hanoi(int piringan, char dari, char bantu, char


ke)
{
if(piringan>0)
{
hanoi(piringan-1, dari, ke, bantu);
cout << "Pindahkan piringan " << piringan
<< " dari " << dari << " ke " << ke << "\n";
hanoi(piringan-1, bantu, dari, ke);
}
}
int main()
{
int piringan;
cout << "Berapa banyak piringan ? : ";
cin >> piringan;
cout << "\n";
hanoi(piringan, 'A', 'B', 'C');

return 0;
}
Logika dan Algoritma Pemrograman - 38 Fak. Saintek Universitas Ibrahimy
Hasil :
Jumlah Piringan = 3
. Pindahkan piringan ke 1 dari A ke C
. Pindahkan piringan ke 2 dari A ke B
. Pindahkan piringan ke 1 dari C ke B
. Pindahkan piringan ke 3 dari A ke C
. Pindahkan piringan ke 1 dari B ke A
. Pindahkan piringan ke 2 dari B ke C
. Pindahkan piringan ke 1 dari A ke C

Logika dan Algoritma Pemrograman - 39 Fak. Saintek Universitas Ibrahimy


BAB 7
Larik (Array)

Pengertian array

Array merupakan kumpulan elemen data yang terdiri dari elemen baris
dan kolom dengan tipe data sejenis. Array yang akan dibahas adalah :

a. Array 1 dimensi
b. Array 2 dimensi Elemen array

a. Array 1 dimensi
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 Indeks array

5 6 7 8 9 10

Larik dimensi 1  larik yang memiliki 1 index

Bentuk umum dari Array 1 dimensi adalah :

Tipe_data nama_array elemen_array;

Pada contoh deklarasi array tersebut adalah :


Logika dan Algoritma Pemrograman - 40 Fak. Saintek Universitas Ibrahimy
1. Tipe data yang digunakan adalah : integer
2. Nama array : Angka
3. Banyak elemen Array adalah : 10 Data Elemen Array

Contoh :
#include <iostream>

using namespace std;

int main()
{
int Angka[10];
int i;
cout << "Menggunakan Array 1 dimensi";
cout <<"\n\n";
for (i=0;i<10;i++) {
cout << "Input data Array " << i << " : ";
cin >> Angka[i];
}
Cout << “\n\nMenampilkan Array 1 dimensi \n”;
for (i=0;i<10;i++) {
cout << "\nArray ke- " << i << " Adalah =>
" << Angka[i];

}
return 0;
}

b. Array 2 Dimensi
Larik Dimensi 2 atau lebih  larik yang memiliki indek > 1. (larik
dengan banyak dimensi)

Bentuk Umum Array 2 dimensi

Logika dan Algoritma Pemrograman - 41 Fak. Saintek Universitas Ibrahimy


Tipe_data nama_array Banyak_elemen_baris
Banyak_elemen_kolom;

Contoh :

Int matrix[2][2];

Salah satu implemantasi array 2 dimensi ini digunakan untuk


membuat program MATRIK (Aljabar Linear).

Contoh Matrik dengan ordo 2 x 2

1 5
A=
2 4

Terlihat pada contoh deklarasi tipe data : Integer, Nama Array: Matrix,
jumlah elemen baris: 2 dan jumlah elemen kolom : 2.

#include <iostream>

using namespace std;

int main()
{
int matrix[2][2];
int i,j;

//Input Array menggunakan perulangan


for (i=0;i<=1;i++) {
for (j=0;j<=1;j++) {
Logika dan Algoritma Pemrograman - 42 Fak. Saintek Universitas Ibrahimy
cout << "Inputkan nilai pada baris ke
" << i << " Kolom ke " << j << " : ";
cin >> matrix[i][j];
}
}
// Mencetak Array
for (i=0;i<=1;i++) {
for (j=0;j<=1;j++) {
cout << matrix[i][j] << " ";
}
cout << "\n";
}
return 0;
}

Latihan

Diberikan matriks A sebagai berikut :

1 0 0 1

1 1 0 1

1 0 1 1

1 0 0 1

Buatlah flowchart dan program menggunakan c++ untuk membuat matrik


di atas.

Jawab
#include <iostream>

using namespace std;

int main()
{

Logika dan Algoritma Pemrograman - 43 Fak. Saintek Universitas Ibrahimy


int A[4][4];
int i,j;

//Input Array menggunakan perulangan


for (i=0;i<=3;i++) {
for (j=0;j<=3;j++) {
if (i==j){
A[i][j]=1;
}
else if (j==0 or j==3) {
A[i][j]=1;
}
else { A[i][j]=0;}
}
}
// Mencetak Array
for (i=0;i<=3;i++) {
for (j=0;j<=3;j++) {
if (j == 3) {
cout << "" << A[i][j] << " \n";
}
else {
cout << A[i][j] << " ";
}
}
}
return 0;
}

TUGAS

Diberikan matriks A sebagai berikut :

1 1 1 1 1

1 0 0 0 1

1 0 0 0 1

1 1 1 1 1
Logika dan Algoritma Pemrograman - 44 Fak. Saintek Universitas Ibrahimy
Buatlah flowchart menggunakan raptor dan program menggunakan c++
untuk membuat matrik di atas.

Logika dan Algoritma Pemrograman - 45 Fak. Saintek Universitas Ibrahimy


BAB 8
Sorting 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
(descending).
 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 Operasi Pemindahan Data

1. Selection Sort (Metode Seleksi).


Tehnik pengurutan dengan cara pemilihan elemen dengan memilih
elemen data terkecil utk kemudian dibandingkan & ditukarkan
dengan elemen pada data awal, dst s/d seluruh elemen shg akan
menghasilkan pola data yg telah disort.
Logika dan Algoritma Pemrograman - 46 Fak. Saintek Universitas Ibrahimy
 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]).

29 27 10 8 76 21

1. memilih elemen terkecil,


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

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

Logika dan Algoritma Pemrograman - 47 Fak. Saintek Universitas Ibrahimy


Ilustrasi Algoritma Selection Sort

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

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

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

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

Logika dan Algoritma Pemrograman - 48 Fak. Saintek Universitas Ibrahimy


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

8 10 21 27 29 76

ontoh implementasi dalam bahasa C++ adalah sebagai berikut

/*selection Sort*/
#include <iostream>
#include <iomanip>

using namespace std;


int selectionsort (int array[], const int size)
{
int i, j, kecil, temp;
for (i=0; i<size; i++)
{
kecil=i;
for (j=i; j<size; j++)
{
if (array[kecil]>array[j]) {
kecil = j;
}
}
temp = array[i];
array[i] = array[kecil];
array[kecil] = temp;
}
}
Logika dan Algoritma Pemrograman - 49 Fak. Saintek Universitas Ibrahimy
int main()
{
int NumList[10];
int N;
cout<<"Masukkan jumlah data = ";
cin>>N;
for(int i=0;i<N;i++)
{
cout<<"Masukkan data ke-"<<(i+1)<<" = ";
cin>>NumList[i];
}

cout<<"\n\n";
selectionsort(NumList,N);

cout<<"Data setelah diurutkan:\n";


for (int i=0; i<N; i++) {
cout<<setw(3)<<NumList[i]<<"\n\n";
}
return 0;
}

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
Logika dan Algoritma Pemrograman - 50 Fak. Saintek Universitas Ibrahimy
Algoritma Bubble Sort

1. Pengecekan mulai dari data ke-1 sampai data ke-n


2. Bandingkan data ke-n dengan data sebelumnya (n-1)
3. Jika lebih kecil maka pindahkan bilangan tersebut dengan bilangan yg
ada didepannya ( sebelumnya ) satu persatu (n-1,n-2,n-3,....dst)
4. Jika lebih besar maka tidak terjadi pemindahan
5. Ulangi langkah 2 dan 3 s/d sort optimal.

Analogi :
 Larik dengan urut menaik, elemen larik yang berharga paling kecil
diapungkan , artinya diangkat ke atas (atau ke ujung kiri larik)
melalui proses pertukaran.
 Proses pengapungan ini dilakukan sebanyak N-1 langkah dengan N
adalah ukuran larik.
 Pada akhir setiap langkah ke-I, larik L[1..N] akan terdiri atas
dua bagian yaitu bagian yang sudah terurut, yaitu L[1..I] dan
bagian yang belum terurut L[I+1..N]. Setelah langkah terakhir,
diperoleh larik L[1..N] yang terurut menaik.

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

Logika dan Algoritma Pemrograman - 51 Fak. Saintek Universitas Ibrahimy


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

Logika dan Algoritma Pemrograman - 52 Fak. Saintek Universitas Ibrahimy


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

Elemen sudah urut dan proses sorting selesai

Contoh 2 :

Logika dan Algoritma Pemrograman - 53 Fak. Saintek Universitas Ibrahimy


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

Logika dan Algoritma Pemrograman - 54 Fak. Saintek Universitas Ibrahimy


Contoh Program Buble Sort
#include <iostream>

using namespace std;

int data[10],data2[10];
int n;
void tukar(int a,int b)
{
int t;
t = data[b];
data[b] = data[a];
data[a] = t;
}
void Input()
{
cout<<"Masukkan jumlah data = ";
cin>>n;
for(int i=0;i<n;i++)
{
cout<<"Masukkan data ke-"<<(i+1)<<" = ";
cin>>data[i]; data2[i] = data[i];
}
cout<<endl;
}
void Tampil()
{
for(int i=0;i<n;i++)
{
cout<<data[i]<<" ";
}
cout<<endl;
}
void bubble_sort()
{
for(int i=1;i<n;i++)
{
for(int j=n-1;j>=i;j--){

Logika dan Algoritma Pemrograman - 55 Fak. Saintek Universitas Ibrahimy


if(data[j]<data[j-1]) {
tukar(j,j-1);
}
}
Tampil();
}
cout<<endl;
}
main()
{
cout<<"Fungsi Bubble Sort"<<endl;
Input();

cout<<"Proses Bubble Sort"<<endl;


Tampil();

bubble_sort();
return 0;
}

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

Logika dan Algoritma Pemrograman - 56 Fak. Saintek Universitas Ibrahimy


Analogi :

 Mengurutkan satu set kartu dari kartu yang bernilai paling kecil hingga
yang paling besar.
 Seluruh kartu diletakkan pada meja, kita sebut meja pertama, disusun
dari kiri ke kanan dan atas ke bawah.
 Kemudian pada meja kedua tempat meletakkan kartu yang diurutkan.
 Ambil kartu pertama yang terletak pada pojok kiri atas meja pertama
dan letakkan pada meja kedua.
 Ambil kartu kedua dari meja pertama, bandingkan dengan kartu yang
berada pada meja kedua, kemudian letakkan pada urutan yang sesuai
setelah perbandingan.
 Proses tersebut akan berlangsung hingga seluruh kartu pada meja
pertama telah diletakkan berurutan pada meja kedua.

Contoh :
Jika sudah terurut 3,6,9, dan selanjutnya belum terurut 5,7,2,....
5 akan disisipkan di antara 3 dan 6, sehingga menjadi 3,5,6,9.
7 akan disisipkan di antara 6 dan 9, sehingga menjadi 3,5,6,7,9.
2 akan disisipkan sebelum 3, sehingga menjadi 2,3,5,6,7,9.

Contoh :

Logika dan Algoritma Pemrograman - 57 Fak. Saintek Universitas Ibrahimy


METODE DEVIDE AND CONQUER

Devide and Qonquer adalah metode pemecahan masalah yang bekerja


dengan membagi masalah/problem menjadi beberapa sub-masalah/sub-
problem yang lebih kecil, kemudian menyhelesaikan masing-masing sub-
masalah secara independen dan akhirnya menggabungkan solusi masing-
masing sub masalah sehingga menjadi solusi masalah semula.

Masalah sub masalah 1 Sub solusi 1 Solusi masalah


Sub masalah 2 sub solusi 2
Sub-masalah 3 Sub solusi 3

Algortima devide and conquer menawarkan penyederhanaan masalah


dengan pendekatan 3 langkah masalah:

 pembagian masalah menjadi sekecil mungkin


 penyelesaian masalah-masalah yang dikecilkan
 penggabungan solusi untuk mendapatkan solusi optimal secara
keseluruhan.

Tipe algoritma yang mengimplementasikan/kategori D&C antara lain


merge sort

4. Metode Merge Sort


Merge sort adalah algoritma yang digunakan untuk menyusun list yang
diberikan dengan cara membagi list yang diberikan menjadi dua bagian
yang lebih kecil. Kedua list yang baru ini kemudian akan disusun secara
terpisah. Setelah kedua buah list tersusun, maka akan dibentuk list baru
yang merupakan hasil penggabungan dua buah list sebelumnya

Konsep :

Logika dan Algoritma Pemrograman - 58 Fak. Saintek Universitas Ibrahimy


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: | list2:
3 4 9 | 2 5

List baru: 1 2
list 1: | list 2:
3 4 9 | 5

List baru: 1 2 3
list 1: | list 2:
4 9 | 5

List baru: 1 2 3 4
list1: | list 2: 9 | 5

List baru: 1 2 3 4 5
Logika dan Algoritma Pemrograman - 59 Fak. Saintek Universitas Ibrahimy
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).

Logika dan Algoritma Pemrograman - 60 Fak. Saintek Universitas Ibrahimy


3).

4).

5).

Logika dan Algoritma Pemrograman - 61 Fak. Saintek Universitas Ibrahimy


6).

7).

8).

9).

Logika dan Algoritma Pemrograman - 62 Fak. Saintek Universitas Ibrahimy


10).

11).

12).

Logika dan Algoritma Pemrograman - 63 Fak. Saintek Universitas Ibrahimy


13).

14).

Logika dan Algoritma Pemrograman - 64 Fak. Saintek Universitas Ibrahimy


15).

16).

Logika dan Algoritma Pemrograman - 65 Fak. Saintek Universitas Ibrahimy


17).

18).

Logika dan Algoritma Pemrograman - 66 Fak. Saintek Universitas Ibrahimy


19).

20).

21).

Logika dan Algoritma Pemrograman - 67 Fak. Saintek Universitas Ibrahimy


22).

23).

24).

Logika dan Algoritma Pemrograman - 68 Fak. Saintek Universitas Ibrahimy


25).

26).

Logika dan Algoritma Pemrograman - 69 Fak. Saintek Universitas Ibrahimy


27).

28).

Logika dan Algoritma Pemrograman - 70 Fak. Saintek Universitas Ibrahimy


29).

30).

Logika dan Algoritma Pemrograman - 71 Fak. Saintek Universitas Ibrahimy


31).

32).

Logika dan Algoritma Pemrograman - 72 Fak. Saintek Universitas Ibrahimy


33).

34).

35).

Logika dan Algoritma Pemrograman - 73 Fak. Saintek Universitas Ibrahimy


36).

37).

38).

39).

Logika dan Algoritma Pemrograman - 74 Fak. Saintek Universitas Ibrahimy


40).

Logika dan Algoritma Pemrograman - 75 Fak. Saintek Universitas Ibrahimy


BAB 9
Algoritma Searching
Pengertian Algoritma Searching

Searching merupakan proses dasar dalam pengolahan data. Yaitu


untuk menemukan nilai tertentu dalam sekumpulan data yang
bertipe sama. Algoritma searching dijelaskan secara luas sebagai
algoritma yang menerima masukan berupa sebuah masalah dan
menghasilkan sebuah solusi untuk masalah tersebut. Algoritma
searching menerima sebuah argument kunci dan dengan langkah-
langkah tertentu akan mencari rekaman dengan kunci tersebut.
Setelah melakukan proses pencarian, akan diperoleh salah satu dari
dua kemungkinan, yaitu data yang dicari ditemukan atau tidak
ditemukan.

Macam-macam Algoritma Searching

1. Pencarian Beruntun (Sequential Search)

Konsep

a) Membandingkan setiap elemen larik satu per satu secara urut


(beruntun), mulai dari elemen pertama sampai dengan elemen yang
terakhir sampai data ditemukan atau tidak ditemukan.
b) Proses pencarian akan dihentikan jika data yang dicari sudah
ditemukan.
c) Merupakan metode yang paling sederhana
d) Kelemahan pada kasus ini adalah, untuk N elemen data harus
dilakukan pencarian sebanyak N kali pula.

Algoritma

Logika dan Algoritma Pemrograman - 76 Fak. Saintek Universitas Ibrahimy


Algoritma pencarian beruntun 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 dak i ← i + 1
(5) jika (ketemu) maka i adalah indeks dari data yang dicari, jika data
tidak ditemukan.

Contoh

Pemcarian angka
1. #include <iostream>
using namespace std;
2.
3. int main()
4. {
5. cout<<"====== PROGRAM SEQUENTIAL SEARCH
========"<<endl<<endl;
6.
7. int n,bil_cari,Data[100];
8. int i,ketemu;
9.
cout<<" Inputan Jumlah Data Dalam Array : ";
10. cin>>n;
11. cout<<endl;
12. for(int c=0; c<n; c++)
{
13. cout<<" Elemen Data Array Ke - "<<c<<" =
14. "; cin>>Data[c];
15. }
16. i=0;
cout<<" \n\n Inputkan Bilangan Yang Dicari =
17. "; cin>>bil_cari;
18. ketemu = 0;
19.
while((i<n) && (ketemu==0))
20.
{
Logika dan Algoritma Pemrograman - 77 Fak. Saintek Universitas Ibrahimy
21. if(Data[i] == bil_cari)
{
22.
ketemu=1;
cout<<" \n Pencarian sequential
23. "<<bil_cari<<" Ada Pada Indeks ke - " <<i;
24. }
else
25. i=i+1;
26. }
27. if(ketemu == 1)
28. cout<<"\n Data ditemukan!!! "<<endl;
else
29. cout<<"\n Data tidak
30. ditemukan!!!"<<endl;
31. return 0;
}
32.
33.

Pencarian Huruf
1 #include <iostream>
2 using namespace std;
3 int main()
4 {
5 char bil_cari,Data[10];
6 int i,n,ketemu;
7
cout<<"======PROGRAM SEQUENTIAL
8 SEARCH========"<<endl<<endl;
9
10 cout<<" Inputan Jumlah Data Dalam Array : ";
11 cin>>n;
12 cout<<endl;
for(int c=0; c<n; c++)
13 {
14 cout<<" Elemen Data Array Ke - "<<c<<" =
15 "; cin>>Data[c];
16 }

Logika dan Algoritma Pemrograman - 78 Fak. Saintek Universitas Ibrahimy


17 i=0;
18 cout<<" \n\n Inputkan Bilangan Yang Dicari =
"; cin>>bil_cari;
19 ketemu = 0;
20
21 while((i<10) && (ketemu==0))
22 {
23 if(Data[i] == bil_cari)
{
24 ketemu=1;
25 cout<<" \n Pencarian sequential
26 "<<bil_cari<<" Ada Pada Indeks ke - " <<i;
27 }
28 else
i=i+1;
29 }
30 if(ketemu == 1)
31 cout<<"\n Data Ditemukan!!! "<<endl;
32 else
33 cout<<"\n Data tidak tidak
ditemukan!!!"<<endl;
}

Dari program di atas, terlihat bahwa dilakukan perulangan untuk


mengakses semua elemen array data satu per satu berdasarkan
indeksnya.

a) Program menggunakan sebuah variable flag yang berguna


untuk menandai ada atau tidaknya data yang dicari dalam array
data. Hanya bernilai 1 atau 0.
b) Flag pertama kali diinisialisasi dengan nilai 0.
c) Jika ditemukan, maka flag akan diset menjadi 1, jika tidak ada
maka flag akan tetap bernilai 0.
d) Semua elemen array data akan dibandingkan satu per satu
dengan data yang dicari dan diinputkan oleh user.

2. Pencarian Bagi Dua (Binary Search)


Logika dan Algoritma Pemrograman - 79 Fak. Saintek Universitas Ibrahimy
Konsep

(a) Merupakan metode pencarian pada data terurut yang paling


efisien.
(b) Metode ini digunakan untuk kebutuhan pencarian dengan waktu
yang cepat.
(c) Prinsip pencarian dengan membagi data atas dua bagian
mengilhami metode ini. data yang disimpan didalam larik harus
sudah terurut.

Algoritma

Algoritma pencarian biner dapat dituliskan sebagai berikut:

(a) L ← 0
(b) R ← N – 1
(c) Ketemu ← false
(d) Selama (L <= R) dan (tidak ketemu) kerjakan baris 5 sampai
dengan 8
(e) m ← (L + R) / 2
(f) jika (Data[m]) maka ketemu ← true
(g) jika (x < Data[m]) maka R ← m – 1
(h) jika (x > Data[m]) maka L ← m + 1
(i) jika (ketemu) maka m adalah indeks dari data yang dicari, jika
tidak maka data tidak ditemukan.

Contoh

1 #include <iostream>
2
using namespace std;
3
4 int main ()
5 {
int arr[100],awal,tengah,akhir,i,n,num;
Logika dan Algoritma Pemrograman - 80 Fak. Saintek Universitas Ibrahimy
6 cout << "\nMasukkan Jumlah data : ";
7 cin >> n;
cout << "\nMasukkan data yang sudah terurut : "
8 << endl;
9 for (i=0;i<n;i++) {
10 cout << "Masukkan data ke- "<< i+1 << " :
11 ";
12 cin >> arr[i];
cout << endl;
13 }
14
15 //inisialiasi nilai awal dan akhir
16 awal = 0;
17 akhir = n-1;
18 cout << "\nMasukkan angka yang dicari : ";
19 cin >> num;
20
21 while (awal <= akhir) {
22 //menentukan tengah
tengah = (awal+akhir)/2;
23
24 //jika nilai ditemukan di tengah,maka
25 tampilkan posisi dan keluar
26 if(arr[tengah] == num) {
27 cout << "\nAngka ditemukan pada posisi
: " << (tengah+1);
28 return(0);
29 } else if (num > arr[tengah]) {
30 awal=tengah+1;
31 } else if (num < arr[tengah]) {
32 akhir=tengah-1;
}
33 }
34 cout << "Angka tidak ditemukan!";
35 return 0;
}

Logika dan Algoritma Pemrograman - 81 Fak. Saintek Universitas Ibrahimy


DAFTAR PUSTAKA

1. Materi Kuliah Algoritma : Budi Rahardjo (ITB), 2013


2. Budi Raharjo, 2014, Materi Kuliah Logika dan Algoritma, Institut
Teknologi Bandung
3. Fauziah, 2016, Aplikatif Logika & Algoritma (dengan c++, C# dan Java),
Yogyakarta, Teknosain.
4. http://informatika.web.id/operator-aritmatik-pada-c.htm, di akses
pada : 19 November 2017

Logika dan Algoritma Pemrograman - 82 Fak. Saintek Universitas Ibrahimy

Anda mungkin juga menyukai