fiqih. Diberdayakan oleh Blogger.

algoritma

Edisi 2
Oleh :
FAKULTAS SAINS DAN TEKNOLOGI
UNIVERSITAS IBRAHIMY SUKOREJO SITUBONDO
2018
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 langkahlangkah

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 : ∏ . r
2
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
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#include <iostream>
using namespace std;
int main
(
)
{
float phi = 3.14;
float Diameter, Radius, Luas_Lingkaran;
cout << "Masukkan Nilai Diameter : ";
cin >> Diameter;
Radius = Diameter / 2;
Luas_Lingkaran = phi * Radius * Radius;
cout << "Luas Lingkaran adalah : " <<
Luas_Lingkaran;
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
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
#include <iostream>
using namespace std;
int main
(
)
{
int
Bilangan_pertama,
Bilangan_kedua,
Bilangan_ketiga, maks;
cout << "Masukkan bilangan yang pertama : ";
cin >> Bilangan_pertama;
cout << "Masukkan bilangan yang kedua : ";
cin >> Bilangan_kedua;
cout << "Masukkan bilangan ketiga : ";
cin >> Bilangan_ketiga;
maks = Bilangan_pertama;
if
(maks < Bilangan_kedua
) {
maks = Bilangan_kedua;
}
if
(maks < Bilangan_ketiga
) {
maks = Bilangan_ketiga;
}
cout << "Bilangan terbesar adalah : " << maks;
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 macammacamnya
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
Level
Symbol
Description
Associativity
++
Prefex increment

Prefex decrement
(
)
Function call and
subexpression
1
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
*
3
Multiplication
Left to right
/
Division
%
Modulus
+
4
Addtion
Left to right
-
Subtraction
<<
5
Bitwise left shift
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
==
7
Equal test
Left to right
!=
Not equal to
8
&
Bitwise AND
Left to right
Precedence
Level
Symbol
Description
Associativity
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
,
15
Sequence point
Left to right
++
Postfix increment

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
13
// rata2 = nilai_1 + nilai_2 + nilai_3 /
3.0;
14
/* Perhatikan tanda kurung diperlukan untuk
mengubah
15
order of precedence supaya rata-ratanya
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
13
// Type cast jumlah hari dalam 1 tahun
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
F
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:
Evaluasi kondisi
while
(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:
Perulangan dengan
increment nilai
for
(kondisi
) {
[Statement]
}
Contoh:
for
(int i=1;i<=10;i++
) {
cout << i << “ ”;
}
hasil : 1 2 3 4 5 6 7 8 9 10
for
(int i=1; i<=10; i++
Nested Loop for
) {
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:
faktorial
#include <iostream>
using namespace std;
int rekursiffaktorial
(int f
)
{
if
(f == 0
){
Memanggil dirinya
sendiri
return 1;
}
Else {
return f * rekursiffaktorial
(f - 1
);
}
}
int main
(
)
1. Cara menggunakan
fungsi yaitu dengan
memanggil nama
fungsi tersebut dari
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 langkahlangkah
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
Indeks array
m
a
u
$
*
1
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
2 4
A=
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
2. data pertama ditukar
dengan elemen yang
paling kecil.
1. memilih elemen terkecil,
membandingkan dan
menukarkan dengan dengan
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
Ilustrasi Algoritma Selection Sort
Logika dan Algoritma Pemrograman
- 47
Fak. Saintek Universitas Ibrahimy
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 27 29
76
Logika dan Algoritma Pemrograman
- 48
Fak. Saintek Universitas Ibrahimy
8
10 21 29 76 27
1
2
3
4
5
6
8
10
21
27 76 29
1
2
3
4
5
6
Contoh 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/subproblem

yang lebih kecil, kemudian menyhelesaikan masing-masing submasalah

secara independen dan akhirnya menggabungkan solusi masingmasing
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 langkahlangkah

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.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
#include <iostream>
using namespace std;
int main
(
)
{
cout<<"====== PROGRAM SEQUENTIAL SEARCH
========"<<endl<<endl;
int n,bil_cari,Data[100];
int i,ketemu;
cout<<" Inputan Jumlah Data Dalam Array : ";
cin>>n;
cout<<endl;
for
(int c=0; c<n; c++
)
{
cout<<" Elemen Data Array Ke - "<<c<<" =
"; cin>>Data[c];
}
i=0;
cout<<"
\n
\n Inputkan Bilangan Yang Dicari =
"; cin>>bil_cari;
ketemu = 0;
while
(
(i<n
) &&
(ketemu==0
)
)
{
Logika dan Algoritma Pemrograman
- 77
Fak. Saintek Universitas Ibrahimy
21.
22.
if
(Data[i] == bil_cari
)
{
ketemu=1;
cout<<"
\n Pencarian sequential
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
"<<bil_cari<<" Ada Pada Indeks ke - " <<i;
}
else
i=i+1;
}
if
(ketemu == 1
)
cout<<"
\n Data ditemukan!!! "<<endl;
else
cout<<"
\n Data tidak
ditemukan!!!"<<endl;
return 0;
}
Pencarian Huruf
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#include <iostream>
using namespace std;
int main
(
)
{
char bil_cari,Data[10];
int i,n,ketemu;
cout<<"======PROGRAM SEQUENTIAL
SEARCH========"<<endl<<endl;
cout<<" Inputan Jumlah Data Dalam Array : ";
cin>>n;
cout<<endl;
for
(int c=0; c<n; c++
)
{
cout<<" Elemen Data Array Ke - "<<c<<" =
"; cin>>Data[c];
}
Logika dan Algoritma Pemrograman
- 78
Fak. Saintek Universitas Ibrahimy
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
i=0;
cout<<"
\n
\n Inputkan Bilangan Yang Dicari =
"; cin>>bil_cari;
ketemu = 0;
while
(
(i<10
) &&
(ketemu==0
)
)
{
if
(Data[i] == bil_cari
)
{
ketemu=1;
cout<<"
\n Pencarian sequential
"<<bil_cari<<" Ada Pada Indeks ke - " <<i;
}
else
i=i+1;
}
if
(ketemu == 1
)
cout<<"
\n Data Ditemukan!!! "<<endl;
else
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
2
3
4
5
#include <iostream>
using namespace std;
int main
(
)
{
int arr[100],awal,tengah,akhir,i,n,num;
Logika dan Algoritma Pemrograman
- 80
Fak. Saintek Universitas Ibrahimy
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
cout << "
\nMasukkan Jumlah data : ";
cin >> n;
cout << "
\nMasukkan data yang sudah terurut : "
<< endl;
for
(i=0;i<n;i++
) {
cout << "Masukkan data ke- "<< i+1 << " :
";
cin >> arr[i];
cout << endl;
}
//inisialiasi nilai awal dan akhir
awal = 0;
akhir = n-1;
cout << "
\nMasukkan angka yang dicari : ";
cin >> num;
while
(awal <= akhir
) {
//menentukan tengah
tengah =
(awal+akhir
)/2;
//jika nilai ditemukan di tengah,maka
tampilkan posisi dan keluar
if
(arr[tengah] == num
) {
cout << "
\nAngka ditemukan pada posisi
: " <<
(tengah+1
);
return
(0
);
} else if
(num > arr[tengah]
) {
awal=tengah+1;
} else if
(num < arr[tengah]
) {
akhir=tengah-1;
}
}
cout << "Angka tidak ditemukan!";
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
Share on Google Plus

About fiqihhariansyah

This is a short description in the author block about the author. You edit it by entering text in the "Biographical Info" field in the user admin panel.

0 komentar:

Posting Komentar