PENGERTIAN DASAR
LOGIKA DAN ALGORITMA
PENGERTIAN DASAR
LOGIKA
Diperkenalkan pertama kali oleh Aristoteles (384-322 SM)
ALGORITMA
Diperkenalkan Oleh Ahli Matematika : Abu Ja’far
Muhammad Ibnu Musa Al Khawarizmi.
Seorang ilmuan Persia yang menulis kitab al jabr w’al
muqabala (rules of restoration and reduction) sekitar
tahun 825 M
Definisi Logika
1. penalaran atau bentuk pemikiran.
2. ilmu yang memberikan prinsip-prinsip yang harus
diikuti agar dapat berfikir valid menurut aturan yang
berlaku.
Definisi Algoritma
1. Langkah - langkah yang dilakukan agar solusi
masalah dapat diperoleh.
2. Suatu prosedur yang merupakan urutan langkah-
langkah yg berintegrasi.
3. Suatu metode khusus yang digunakan untuk
menyelesaikan suatu masalah yang
nyata.(Webster Dictionary)
TAHAP PENYELESAIAN MASALAH
Masalah
Analisis Model
Algoritma Analisis
Analisis Program
Eksekusi
Data
Hasil
Kriteria Pemilihan Algoritma.
1. Ada Output,
2. Efektifitas dan Efesiensi,
3. Jumlah Langkahnya Berhingga,
4. Berakhir, ( SEMI ALGORITMA )
5. Terstruktur,
Masukan
Alas
Masukan
Tinggi
Cetak
Luas
Stop
c. Dengan Statement program / penggalan
Program
KONSEP ALGORITMA
Konsep ALGORITMA
1. ALGORITMA PE-UBAH
Adalah Variabel yang nilainya BUKAN konstanta (selalu
berubah – sesuai dengan kondisi Variabel terKINI)
Sintaks : P=Q
Algoritma : P Q
Arti : Bahwa Nilai P diberi harga Nilai Q
Nilai P akan SAMA DENGAN nilai Q, & Nilai Q TETAP
2. ALGORITMA PERTUKARAN
Berfungsi mempertukarkan masing-masing isi Variabel
sedemikian sehingga Nilai dari tiap Variabel akan
berubah/bertukar
Contoh Soal:
1. Diketahui P=0, Q=5 dan R=10.
Diberikan Algoritma P=Q,Q=R, mk Nilai P,Q,R
sekarang?
Visualisasi
5. Berapa banyaknya garis minimal untuk menutup
seluruh titik-titik yang ada dibawah ini dengan syarat
bahwa untuk membuat garis tersebut tidak boleh
terputus :
a.
b.
c.
d.
6. Algoritma Pertukaran Isi Bejana
Diberikan dua buah bejana, A dan B; bejana A berisi larutan
berwarna merah, bejana B berisi larutan berwarna biru.
Bejana A Bejana B
Keadaan Awal Sebelum Pertukaran:
PROSES
tipe data
Konstanta :
Sebuah variabel dengan tipe data tertentu dan
memiliki nilai data yang akan selalu tetap di dalam
program.
+ , - Penjumlahan,
Pengurangan
Operator Keterangan
= Sama dengan (assignment)
!= Tidak sama dengan
> Lebih besar
< Lebih kecil
== Sama dengan (bukan assignment)
>= Lebih besar atau sama dengan
<= Lebih kecil atau sama dengan
3. Tipe Bool
nilai pengambilan suatu keputusan pada program, tipe
ini mempunyai 2 nilai yaitu benar(T) atau salah (F).
Operator yg digunakan AND, OR atau NOT.
Input NOT (!) AND (&&) OR (||)
A B C !A !B !C A&&B&&C A||B||C
0 0 0 1 1 1 0 0
0 0 1 1 1 0 0 1
0 1 0 1 0 1 0 1
0 1 1 1 0 0 0 1
1 0 0 0 1 1 0 1
1 0 1 0 1 0 0 1
1 1 0 0 0 1 0 1
1 1 1 0 0 0 1 1
4. Tipe Char
digunakan untuk menampung data sebuah karakter.
untuk menuliskan tipe char, karakter perlu ditulis di
dalam tanda petik tunggal ( ‘ )
Contoh :
‘A’ karakter berupa huruf A
‘1’ karakter berupa angka 1
‘*’ karakter simbol *
II. Tipe String
merupakan sekumpulan dari beberapa karakter, yang
banyaknya berubah-ubah sesuai kebutuhan,besarnya 1
s/d 255 karakter.
Pemberian nilai String diapit dengan tanda petik ganda (“)
Bentuk umum penulisan tipe data ini adalah :
tipe_data pengenal [panjang] ;
pengenal = nama variabel
panjang = bilangan bulat yg menunjukan
jumlah karakter
Contoh : char nama[15] ;
Fungsi pada Operasi STRING
1. Strcpy()
untuk menyalin nilai string.
Catatan :
- Pergunakan fungsi cin dan cout atau scanf dan printf
- Tampilkan NIM, Nama & Kelas pada program tersebut
- Listing progam & output dicetak
PERTEMUAN 4
y
t
3. Stuktur Looping
Contoh :
Catatan :
Ketiga struktur diatas dapat digunakan secara
bersamaan pada satu diagram alur.
Input Keterangan :
A
1. Masukan Nilai Variable A
A=A*2 mis : 3
2. Proses A dengan A*2
Cetak A 3. Cetak hasil proses diatas
A=A*2 yg menghasilkan A=6
END
STRUKTUR BRANCHING (Percabangan)
A. Bersyarat
1. IF
2. IF......ELSE
3. NESTED IF atau IF ELSE Majemuk
4. SWITCH.....CASE
B. Tidak Bersyarat
Goto
A. Bersyarat
1. IF
Diagram yg alurnya ada/banyak terjadi alih kontrol
berupa percabangan & terjadi apabila kita dihadapkan
pada suatu Kondisi dengan dua pilihan BENAR/ SALAH.
Bentuk Umum :
if (kondisi)
pernyataan ;
Struktur Branching/percabangan:
y
t
2. IF ...... ELSE
Bentuk umum :
if (kondisi)
perintah1;
else
perintah 2;
Diagram alur dr pemakaian IF......ELSE sbb:
kondisi y
t
Perintah 1
Perintah 2
3. Nested IF
Pernyataan if yang berada dalam pernyataan if yang lain
Bentuk umum :
if (syarat)
if (syarat)
....perintah;
else
....perintah;
else
if (syarat)
....perintah;
else
....perintah;
IF.....ELSE Majemuk (bertingkat)
If-else majemuk mirip dengan nested if. Keuntungan
penggunaan if-else majemuk adalah bentuk penulisan
yang lebih sederhana.
Bentuk umum :
if (syarat) kondisi1 perintah
{
... Perintah;
}
kondisi2 perintah
else if (syarat)
{
... Perintah;
} kondisi3 perintah
else
{
... Perintah; perintah
}
4. Switch Case
untuk menangani pengambilan keputusan yang melibatkan
sejumlah atau banyak alternatif.
Bentuk Umum :
switch (ekspresi integer atau karakter)
{
case konstanta1:
...perintah;
break;
case konstanta2:
...perintah;
break;
default :
...perintah;
break;
}
B. Tidak Bersyarat
Go To
Bentuk umum :
goto label;
Contoh :
Hitung : statement;
statement;
statement;
statement;
Goto hitung;
Latihan :
Tentukan Output dari Flowchart dibawah ini :
START
START
INPUT X
INPUT
A
X=2*X
INPUT
B
X=X+7
Cetak ‘A
Y lebih
X=5*X
A>B besar’
?
X=X+5
T
X=X+10 Cetak ‘B
lebih
CETAK X besar’
END
END
TUGAS KELOMPOK (Max 5 orang) dibuat
menggunakan Microsoft Office Visio
1. Buatlah Flowchartnya dari pseudocode berikut ini:
a. Masukan kode barang
b. Masukan harga barang
c. Masukan Jumlah barang
d. Hitung bayar = harga * Jumlah barang
e. Jika bayar >= 100.000 maka diberikan discount
10%, selain dari itu tidak mendapat discount
f. Hitung total bayar = bayar - discount
g. Cetak total bayar
2. Buatlah Flowchartnya dari pseudocode berikut ini:
a. Diketahui phi=3.14
b. Masukan nilai jari-jari (r)
c. Hitung Keliling = 2 * phi * r
d. Cetak Keliling
e. Ingin menghitung kembali? Jika Ya maka kembali ke
proses awal, jika Tidak maka program berhenti.
3. Buatlah Flowchartnya dari pseudocode berikut ini:
a. Masukan pilihan
b. Jika pilihan=1 maka menu=“nasi goreng”
jika pilihan=2 maka menu=“mie goreng”
jika pilihan=3 maka menu=“capcay”
c. Cetak menu
d. Ingin pilih kembali? Jika Ya maka kembali ke proses
awal, jika Tidak maka program berhenti.
PERTEMUAN 5
STRUKTUR LOOPING
Pemutaran kembali, terjadi ketika mengalihkan arus diagram
alur kembali ke atas, shg bbrp alur berulang bbrp kali.
(1)Variabel A diberi harga 1
A 1 (2)Var. A berubah hrg menjadi 2
A A+1 (3)Var. B diberi hrg sebesar hrg A
dikalikan hrg A
B A*A
(4)Harga B dicetak
Kembali lg? Lalu ke (2), (3),(4) & kembali lagi ke
1. Statement While
2. Statement Do.....While
3. Statement FOR
a. Statement FOR Positif
b. Statement FOR Negatif
c. Statement FOR bersarang ( Nested Loop )
1. Statement While
Perulangan akan terus dilaksanakan selama
syarat tersebut terpenuhi.
Bentuk Umum :
while (syarat)
pernyataan ;
atau
while (syarat)
{
pernyataan; pernyataan;
}
Contoh 1:
Int bil=1;
While(bil<=5)
cout<<bil;
++bil; bil = bil+1
Output : 1 2 3 4 5
Contoh 2: Buatlah algoritma dan program untuk menampilkan
angka 10
sampai 1 dengan pengurangan 1.
Maka algoritmanya adalah sebagai berikut:
1. Tentukan nilai awal
2. Lakukan proses pengulangan selama i>0
3. Cetak bilangan
4. Ulangi langkah 2 sampai batas akhir
Adapun programnya sebagai berikut:
#include <stdio.h>
main()
{ int i;
i=10;
while (i>0)
{
printf (" %d\n ",i);
I = I - 1;
} }
2. Statement Do.....While
Perulangan akan dilaksanakan terlebih dahulu dan
pengujian perulangan dilakukan belakangan.
Bentuk Umum :
do
pernyataan;
while (syarat);
Atau
do
{
pernyataan; pernyataan;
}
while (syarat)
Contoh 1 :
Int bil=2;
Do
cout<<bil;
bil+=2;
While (bil<=10);
Output : 2 4 6 8 10
Contoh 2: Buatlah Algoritma dan program untuk menampilkan
kata AMIK BSI sebanyak 15 kali dengan penambahan 1.
Maka algoritmanya adalah sebagai berikut:
1. Tentukan nilai awal perhitungan = 0
2. Lakukan pengulangan
3. Cetak tulisan
4. Nilai perhitungan bertambah 1
5. Ulangi langkah 3 sampai nilai perhitungan kurang dari 15
Adapun programnya sebagai berikut:
#include <stdio.h>
main()
{ int counter;
counter =0;
do
{
printf ("C++ \n");
counter++;
}
while (counter < 15);
}
3. Statement For
Bentuk Umum :
For (inisialisasi; syarat pengulangan; pengubah nilai)
STRUKTUR REKURSIF
STRUKTUR REKURSIF
a. Fungsi pangkat
b. Faktorial
c. Fibonancy
d. Menara Hanoi
Fungsi Pangkat
Menghitung 10 pangkat n dengan menggunakan konsep
rekursif.
Contoh :
10 3 = 10 * 10 2
10 2 = 10 * 10 1
10 1 = 10 * 10 0
10 0 = 1
Faktorial
0! = 1
N! = N x (N-1)! Untuk N > 0
Contoh :
FAKT(5) = 5 * FAKT(4)
FAKT(4) = 4 * FAKT(3)
FAKT(3) = 3 * FAKT(2)
FAKT(2) = 2 * FAKT(1)
FAKT(1) = 1 * FAKT(0)
Nilai Awal
Misal :
hitung 5!, maka dapat dilakukan secara rekursif
dgn cara :
5! = 5 * 4!
Contoh :
Fibo(5) = Fibo(4) + Fibo(3)
Fibo(4) = Fibo(3) + Fibo(2)
Fibo(3) = Fibo(2) + Fibo(1)
Nilai Awal
Deret Fibonancy
A[1] = 1;
A[2] = 2;
For (i=3; i<=10; i++)
{
A[i] = A[i-1] + A[i-2];
}
Konsep Menara Hanoi
A B C
Tiang Asal Tiang Bantuan Tiang Tujuan
Menara (n,asal,bantu,tujuan)
2N - 1
N = Jumlah Piringan
PERTEMUAN 9
Contoh:
int nilai [6];
jumlah elemen
nama array
tipe data elemen array
2. Array Berdimensi Dua
Bentuk Umum :
Tipe_Data Nama_Variabel [index-1] [index-2]
Contoh:
int nilai [2] [3] ;
jumlah kolom
jumlah baris
nama array
tipe data elemen array
Contoh I :
int i, j ;
int tabel [3] [2] ;
for (i=0; i<=2 ; i++)
{
for (j=0; j<=1 ; j++)
{
cout<< “data ke - ”<< i << j<<endl;
cout<< “nilai =“ ;
cin>> tabel [ i ] [ j ];
}
} Tabel[0][0] Tabel[0][1]
Tabel[2][0] Tabel[2][1]
Contoh II :
Diberikan matriks A sebagai berikut :
1 1 1 1
0 1 1 1
0 0 1 1
0 0 0 1
matriks A adalah :
4. Diberikan algoritma sbb :
int i ;
int nilai[4];
for(i=0;i<=3;i++)
{
a[i] = 2 * i + 1;
cout<<a[i];
}
int i;
int x[4], y[4];
float hasil ;
hasil=0;
for(i=0; i<=3; i++)
hasil = hasil + x[i] / y[i];
cout<<“hasil=“<<hasil;
Solusi Optimal
SORTING
1. Metode Selection Sort
2. Metode Buble Sort
3. Metode Merge Sort
4. Metode Quick Sort
5. Metode Insertion.
Iterasi 1
1 2 3 4 5 6
Langkah 1 : 22 10 15 3 8 2
Langkah 2 : 22 10 15 3 8
2
Langkah 3 : 2 10 15 3 8 22
Langkah 4 : Ulangi langkah 2 dan 3 .
Iterasi 2
Langkah 1: 2 10 15 3 8 22
Langkah 2: 2 10 15 3 8 22
Langkah 3: 2 3 15 10 8 22
Langkah 4: Ulangi langkah 2 dan 3 .
terasi 1
1 2 3 4 5 6
Langkah 1 : 22 10 15 3 8 2
Langkah 2 : 22 10 15 3 8 2
Langkah 3 : 22 10 15 3 2 8
Langkah 4 : Ulangi langkah 2 dan 3
Hasil iterasi 1 : 2 22 10 15 3 8
Iterasi 2
Langkah 1 : 2 22 10 15 3 8
Langkah 2 : 2 22 10 15 3 8
- 8>3, maka 8 tidak pindah,
untuk selanjutnya bandingkan
data sebelunya yaitu 3.
Langkah 3 : 2 22 10 3 15 8
Langkah 4 : Ulangi langkah 2 dan 3
Hasil Iterasi 2 : 2 3 22 10 15 8
Lakukan Iterasi selanjutnya sampai iterasi ke- 6
QuickSort
Metode QuickSort sering disebut metode partition
exchange sort, Diperkenalkan oleh C.A.R. Hoare. Pada
metode ini jarak kedua elemen yang akan ditukarkan
nilainya ditentukan cukup besar.
Misal ada N elemen dalam keadaan urut turun, adalah
mungkin untuk mengurutkan N elemen tersebut dengan
N/2 kali, yakni pertama kali menukarkan elemen paling kiri
dengan paling kanan, kemudian secara bertahap menuju
ke elemen yang ada di tengah. Tetapi hal ini hanya bisa
dilakukan jika kita tahu pasti bahwa urutannya adalah urut
turun.
Secara garis besar metode ini dijelaskan sebagai berikut,
misal kita akan mengurutkan vektor A yang mempunyai N
elemen. Kita pilih sembarang dari vektor tersebut, biasanya
elemen pertama misalnya X. kemudian semua elemen
tersebut disusun dengan menempatkan X pada posisi J
sedemikian rupa sehingga elemen ke 1 sampai ke j-1
mempunyai nilai lebih kecil dari X dan elemen ke J+1
sampai ke N mempunyai nilai lebih besar dari X. Dengan
demikian kita mempunyai dua buah subvektor, subvektor
pertama nilai elemennya lebih keci dari X, subvektor kedua
nilai elemennya lebih besar dari X.
Pada langkah berikutnya, proses diatas diulang pada
kedua subvektor, sehingga kita akan mempunyai empat
subvektor. Proses diatas diulang pada setiap subvektor
sehingga seluruh vektor semua elemennya menjadi
terurutkan.
Contoh:
Langkah 1: 10 22 15 3 8 2
Langkah 2: 10 22 15 3 8 2
Langkah 3: 10 15 22 3 8 2
Langkah 4: Ulangi langkah 2 dan 3
Iterasi 1
1 2 3 4 5 6
Langkah 1 : 22 10 15 3 8 2
Langkah 2 : 10 22 3 15 2 8
Iterasi 2
Langkah 1 : 10 22 3 15 2 8
Langkah 2 : 3 10 15 22 2 8
Iterasi 3
Langkah 1 :3 10 15 22 2 8
Langkah 2 :2 3 8 10 15 22
PERTEMUAN 11
TEHNIK SEARCHING
TEHNIK SEARCHING
Tehnik Pencarian :
1. Tehnik Pencarian Tunggal :
a. Tehnik Sequential Search / Linier Search
b. Tehnik Binary Search
1,9
1,5 6,9
1,2 3,3
Lalu Proses tree call dr setiap elemen yg ditunjuk pada
bagan tree tersebut diatas. Dengan cara, membalik
terlebih dahulu posisi tree dr bawah ke atas. Lalu
mengisinya dengan elemen-elemnnya sesuai dengan
bagan tree. Perhatikan bagan tree call ini :
1,2 22,13 3,3 -5,-5
6,9 60,17
1,5 22,-8
1,9 60,-8
PERTEMUAN 12
METODE GREEDY
METODE GREEDY
Untuk mendapatkan solusi optimal dr
permasalahan yg mempunyai dua kriteria
yaitu Fungsi Tujuan/Utama & nilai
pembatas (constrain)
Proses Kerja Metode Greedy :
n j
dan Optimal Storage = D(I) = Σ Σ lik
j=1
k=1
Contoh,
Misal terdapat 3 buah prg.(n=3) yg masing2
mpy panjang prg. (I1,I2,I3)=(5,10,3).
Tentukan urutan penyimpanannya scr
berurutan (sequential) agar optimal....!
Penyelesaiannya :
Dari 3 program tersebut akan didapat 6
buah kemungkinan order, yg didapat dr
nilai faktorial 3 3! (ingat faktorial n!).
ORDERING D(I)
1,2,3 5 + (5+10) + (5+10+3) = 38
1,3,2 5 + (5+3) + (5+3+10) = 31
2,1,3 10 + (10+5) + (10+5+3) = 43
2,3,1 10 + (10+3) + (10+3+5) = 41
3,1,2 3 + (3+5) + (3+5+10) = 29
3,2,1 3 + (3+10) + (3+10+5) = 34
Dari tabel tersebut, didapat Susunan /
order yg optimal,sbb :
susunan pertama untuk program ke tiga
susunan kedua untuk program kesatu
susunan ketiga untuk program kedua
METODE GREEDY (lanjutan)
2. KNAPSACK Problem
Kasus : Terdapat n obyek (Xi;i=1,2,3,....n)
yang masing-masing mempunyai berat
(weight)/ Wi & masing-masing memiliki nilai
(profit)/Pi yg berbeda-beda.
Masalah :
Bagamana obyek-obyek tersebut dimuat /
dimasukan kedalam ransel (knapsack) yg
mempunyai kapasitas maks. = M. Sehingga
timbul permasalahan sbb:
Bagaimana memilih obyek yg akan dimuat dr
n obyek yg ada sehingga nilai obyek termuat
jumlahnya sesuai dgn kapasitas(≤ M)
Jika semua obyek harus dimuat kedalam
ransel maka berapa bagian dr setiap obyek yg
ada dapat dimuat kedalam ransel sedemikian
shg nilai kum. maks. & sesuai dgn kapasitas
ransel ?
Penyelesaian Knapsack Problem :
1. Dengan Secara Matematika
2. Dengan Kriteria Greedy.
3. Dengan Algoritma Pemrograman Greedy.
Penyelesaian Knapsack Dengan Secara
Matematika
( 0, 2/3, 1) 20 31.0
Wi Min
Pi/Wi max ( 0, 1, 1/2 ) 20 31.5
Penyelesaian Dengan
Algoritma Pemrograman
Greedy.
Pertemuan 13
Penyelesaian Dengan Algoritma Pemrograman Greedy.
Algoritma GREEDY KNAPSACK.
PROCEDURE GREEDY KNAPSACK ( W, x, n)
float W[n], x[n], M, isi;
Int i, n;
x(1 : 1) 0 ; isi M;
FOR i 1 TO n
{
IF W[i] > M ; EXIT ENDIF
x[i] 1
isi isi – W[i]
}
IF i ≤ n ; x[i] isi / W[i] ENDIF
END_GREEDY KNAPSACK
Efektif jk data (Pi/Wi) disusun scr non decreasing dahulu.
Penyelesaiannya : Dengan Algoritma Prg. Greedy.
x(1:n) 0 ; isi 20 ; i = 1
W(i) > isi ? 15 > 20 ? kondisi SALAH
x(1) = 1 b’arti bhw brg tsb dpt dimuat seluruhnya.
Isi = 20 - 15 kapasitas ransel b’kurang dgn sisa 5kg
i =2
W(2) > isi ?? 10 > 5 ?? kondisi BENAR
x(2)=5/10=1/2 benda 10kg hanya dpt dimuat 1/2 bgn
yaitu 5 kg.
i=3
Endif diakhiri krn ransel sdh penuh (max =20kg)
8 7 10
1 2
12 9
11 9
11 5 10
8 3
4
1 2
12
8 5
10
4 3
8
2. MINIMUM SPANNING TREE
Kasus MST Problem = m’cari min.biaya (cost) spanning
tree dr setiap ruas (edge) graph yg m’btk pohon (tree).
Solusi dr p’masalah’ ini :
a. Dgn memilih ruas suatu graph yg memenuhi kriteria dr
optimisasi yg m’hasilk’ biaya min.
b. Penambah’ dr setiap ruas pd seluruh ruas yg m’btk
graph akan m’hasilk’ nilai/biaya yg kecil (minimum
cost).
A 50 B 10 E
10 20 15 20 35
30
C D F
15 3
Penyelesaian:
1. PEWARNAAN ( COLORING )
D
B
E
A
Permasalahan :
Menentukan pola lampu lalulintas dengan jumlah
fase minimal, dan pada setiap fase tidak ada perjalanan
yang saling melintas . Perjalanan yang diperbolehkan
adalah : A ke B, A ke C, A ke D, B ke C, B ke D, E ke B,
E ke C dan E ke D
Langkah-langkah penyelesaian masalah :
1. Tentukan simpul dari perjalanan yang diperbolehkan
( untuk peletakan simpulnya bebas )
2.Tentukan ruas untuk menghubungkan 2 simpul yg
menyatakan 2 perjalanan yg saling melintas
AC BD EB
AB BC EC
AD
ED
3. Beri warna pada setiap simpul dengan warna
warna baru.
- Bila Simpul berdampingan maka berilah warna
lain.
- Bila simpul tidak bedampingan maka berilah
warna yang sama
H
P AC BD EB H
AB BC EC M
AD
P ED
4. Kita lihat Bahwa simpul AB , BC dan ED tidak
dihubungkan oleh suatu ruas jadi untuk simpul tersebut
tidak pernah melintas perjalanan-perjalanan lain dan
simpul tersebut selalu berlaku lampu hijau
Fase 2: