Anda di halaman 1dari 189

PERTEMUAN I

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,

Suatu Algoritma yg terbaik (The Best) : “ Suatu


algoritma harus menghasilkan output yg tepat guna
(efektif) dlm waktu yg relatif singkat & penggunaan
memori yg relatif sedikit (efesien) dgn langkah yg
berhingga & prosedurnya berakhir baik dlm keadaan
dip’oleh suatu solusi ataupun tdk ada solusinya. “
Contoh :
Sebuah prosedur ketika akan mengirimkan surat kepada
teman:
1. Tulis surat pada secarik kertas surat
2. Ambil sampul surat atau amplop
3. Masukkan surat ke dalam amplop
4. Tutup amplop surat dengan lem perekat
5. Tulis alamat surat yg dituju, jika tdk ingat, lebih dahulu
ambil buku alamat & cari alamat yg dituju, lalu tulis
alamat tsb pd amplop surat.
6. Tempelkan perangko pada amplop surat
7. Bawa surat ke kantor pos utk diserahkan pd pegawai
pos atau menuju ke bis surat untuk memasukkan surat
ke dlm kotak/bis surat.
Sebuah prosedur untuk masalah menentukan akar
kuadrat dari suatu bilangan Bulat Positif yg di Input:
Baca bilangan Bulat Positif yg diinput, sebut saja
sebagai A
1. Dinyatakan Nilai B adalah 0
2. Hitung Nilai C yg berisikan Nilai B dikalikan
Nilai B
3. Jika Nilai C sama dengan Nilai A, maka Nilai
B adalah Akar dari Nilai A, lalu stop.
4. Jika tidak, maka Nilai B akan bertambah 1
5. Kembali ke langkah pada No. 3
TAHAPAN ANALISA ALGORITMA
1. Bagaimana merencanakan suatu algoritma.
2. Bagaimana menyatakan suatu algoritma

a. Dengan bahasa semu (pseudocode).


Contoh :
Untuk menghitung Luas Segi tiga :
1. Masukan Nilai Alas
2. Masukan Nilai Tinggi
3. Hitung Luas =( Alas * Tinggi ) / 2
4. Cetak Luas
b. Dengan diagram alur atau flowchat
Contoh :
Start

Masukan
Alas

Masukan
Tinggi

Luas = (Alas * Tinggi)/2

Cetak
Luas

Stop
c. Dengan Statement program / penggalan
Program

Contoh (menggunakan C++):


cin >> Alas ; untuk input data
cin >> Tinggi;
Luas = (Alas * Tinggi)/2 ; proses
cout << Luas; untuk output data
3. Bagaimana validitas suatu algoritma.
4. Bagaimana Menganalisa suatu Algoritma.
5. Bagaimana Menguji Program dari suatu
Algoritma.

Tahap Proses uji Algoritma :


a. Fase Debugging
yaitu fase dari proses program eksekusi yang akan
melakukan koreksi terhadap kesalahan.
b. Fase Profilling
yaitu fase yang akan bekerja jika program tersebut
sudah benar (telah melewati fase debugging).
Analisis Suatu Algoritma
(Untuk melihat faktor efesiensi & efektifitas dari
algoritma tersebut), Dapat dilakukan terhadap suatu
algoritma dengan melihat pada :
a. Waktu Tempuh (Running Time) dr suatu
Algortima.
Hal-hal yg dpt mempengaruhi drpd waktu tempuh
adalah :
1. Banyaknya langkah.
2. Besar dan jenis input data.
3. Jenis Operasi.
4. Komputer dan kompilator

b. Jumlah Memori Yang Digunakan.


Sifat - Sifat Algoritma

1. Banyaknya Langkah Instruksi Harus Berhingga,


2. Langkah atau Instruksi harus Jelas,
3. Proses harus Jelas dan mempunyai batasan,
4. Input dan Output harus mempunyai Batasan,
5. Efektifitas,
6. Adanya Batasan Ruang Lingkup,
Latihan :
(Gunakan Bahasa sehari-hari / Pseudocode )

1. Buat algoritma untuk mengirim email kepada teman


dengan asumsi sudah mempunyai alamat email.
2. Buat algoritma untuk meminjam buku di
perpustakaan
3. Buat algoritma pada saat membeli buku di toko
buku
PERTEMUAN 2

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?

2. Diketahui Algoritma P=10, P=P+1 dan Q = P


Berapakan Nilai P dan Q ? ……………

3. Diketahui 3 variabel peubah P,Q dan R. Agar isi Q


ditaruh di P, isi R ditaruh di Q dan isi P ditaruh di R,
maka Algoritma yang dapat ditulis adalah : ……….

4. Diketahui 2 peubah K = 10 dan L = 20. Buat Algoritma


untuk mempertukarkan isi K dan L. : ……………
ANALISA ALGORITMA
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 jembatan dengan
memperhatikan bahwa kambing makan rumput, anjing
makan kambing ?

Visualisasi ( klik disini )


2. Bagaimana caranya untuk menyeberangkan
tiga orang rahib 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.

Visualisasi ( Klik disini )


3. Ada sebuah keluarga terdiri dari 5 orang akan
menyeberang melewati jembatan pada malam hari
dengan bantuan lampu yang hanya bisa bertahan 30
detik
Dengan catatan :
Setiap orang mempunyai kecepatan yang berbeda-
beda ( 1,3,6,8 dan 12 detik). Apabila yang melewati
jembatan ada 2 orang maka kecepatannya akan
dihitung berdasarkan yang paling lambat

Visualisasi ( Klik disini )


4. Bagaimana caranya untuk memindahkan katak dari
sisi kanan ke sisi kiri dan sebaliknya. Catatan :
pemindahan dilakukan hanya bisa melewati 1 katak

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.

Buatlah pseudocode untuk menukarkan isi kedua bejana


itu sedemikian sehingga bejana A berisi larutan berwarna
biru dan bejana B berisi larutan berwarna merah.

Bejana A Bejana B
Keadaan Awal Sebelum Pertukaran:

PROSES

Keadaan Akhir Setelah Pertukaran:


PERTEMUAN 3

KONSEP TIPE DATA


KONSEP TIPE DATA C++
Pembagian tipe data :
I. Tipe Sederhana (simple type)
• Int,Bool,Char
• Tipe Float
II. Tipe String
• Operasi string
III. Tipe Terstruktur (structured type)
• Array, Struct
Variabel & Konstanta :
Variabel :
• Untuk menyimpan suatu nilai, dan nilai yang ada
padanya dapat diubah selama eksekusi berlangsung.
• Penamaan variabel bersifat case sensitive (huruf
besar & huruf kecil dianggap berbeda).
• Harus dideklarasikan dahulu sebelum digunakan
Contoh : int alas, tinggi ;
variabel

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

Contoh : float phi;


const phi=3.14;
I. Tipe Data sederhana pada C++
1. Tipe int :
tipe data yang nilainya tidak memiliki titik desimal.

Type Batas nilai Ukuran Memori


Short int -32768....32767 2 Byte

Int - 32768 ... 32767 2 Byte

Long - 2147483678 ... 4 Byte


2147283647
Unsigned 0-65535 2 Byte
integer
2. Tipe float:
tipe data yang nilainya merupakan pecahan
(memiliki titik desimal).

Type Batas nilai Format

float 3.4E-38 s/d 3.4E+38 unsigned 32 bit

double 1.7E-308 s/d 1.7E+308 unsigned 64 bit

Long double 3.4E-4932 s/d 1.1E+4932 unsigned 80 bit


Operator ARTI
Aritmatik &
Matematik
pow pemangkatan
sqrt Menghitung akar
% Sisa hasil bagi (modulus)
* , / Perkalian, Pembagian

+ , - 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.

Contoh dalam penggalan program c++:


Cout<<“Masukan Kata ? “;gets(kata);
Strcpy(copy,kata);
Cout<<“Hasilnya ? “<<copy;
2. Strcat()
untuk menggabungkan nilai string.

Contoh dlm penggalan program c++:


Cout<<“Kata Pertama ? “;gets(a);
Cout<<“Kata Kedua ? “;cin(b);
Strcat(a,b);
Cout<<“Hasil Gabungan : “<<a;
3. Strcmp()
untuk membandingkan 2 nilai string.

Contoh dalam penggalan program c++:


char sa[]="Logika";
char sb[]="Logika Algoritma";
char sc[]="Logika Algoritma & Pemprograman";
/*Melakukan perbandingan terhadap dua string
dan penampilan nilainya*/
printf("Nilai Yang dibandingkan sa,sb :
%d\n",strcmp(sa,sb));
printf("Nilai Yang dibandingkan sa,sc :
%d\n",strcmp(sa,sc));
printf("Nilai Yang dibandingkan sb,sa :
%d\n",strcmp(sb,sa));
getch();
return 0;
}
4. Strlen()
untuk mengetahui panjang nilai string

Contoh dalam penggalan program c++:


cout<<"Masukkan Kata = ";
gets(angka);
cout<<"Panjang Kata yang telah diinput = ";
cout<<strlen(angka);
5. Strchr ()
untuk mencari nilai karakter dalam string.

Contoh dalam penggalan program C++:


int main(void){
char str [100]="Aisyah Zahra";
char karakter='Z';
char *hasil;
hasil=strchr(str,karakter);
printf("Hasil Peubah :%s\n",hasil);
printf("Karakter %c ditemukan pada indeks ke-
%d",karakter,(hasil-str));
getch();
return 0; }
III. Tipe Terstruktur
bermanfaat untuk mengelompokkan sejumlah data
dengan tipe data yang berlainan.
Contoh :
struct data_pegawai
{
int nip;
char nama[25];
char alamat[40];
}
Contoh program sederhana :
#include <conio.h>
#include <iostream.h>
#include <math.h>
void main()
{
int x,y,z;
clrscr();
cout <<“\n input nilai X=“; cin >> x;
cout <<“\n input nilai Y=“; cin >> y;
z = x + y;
cout <<“\n hasil penjumlahan =“ << z;
getch();
}
Tugas kelompok (max 5 orang):
Membuat program sederhana dengan menggunakan C++
• Menghitung Luas segitiga
• Menghitung Luas Persegi Panjang
• Menghitung Luas Bujur Sangkar

Catatan :
- Pergunakan fungsi cin dan cout atau scanf dan printf
- Tampilkan NIM, Nama & Kelas pada program tersebut
- Listing progam & output dicetak
PERTEMUAN 4

DIAGRAM ALUR (FLOWCHART)


DIAGRAM ALUR (FLOWCHART)
DIAGRAM ALUR (FLOWCHART)
Flowchart adalah suatu diagram yang menggambarkan susunan logika
suatu program.
Simbol simbol yang digunakan adalah sebagai berikut :

Proses/prosessing, satu atau beberapa


himpunan penugasan yang akan dilaksanakan
secara berurutan.

Input / Output data yg akan dibaca & dimasukan


ke dalam memori komputer dari suatu alat input

Terminal, berfungsi sebagai awal (berisi ‘Start’)


sebagai akhir (berisi ‘End’) dari suatu proses
alur.
Decision (kotak keputusan) berfungsi utk
memutuskan arah/percabangan yg diambil
sesuai dgn kondisi yg dipenuhi, yaitu
Benar/Salah. (dibahas dalam struktur
branching).

Subroutine digunakan untuk menjalankan


proses suatu bagian (sub program)
atau prosedur.

Preparation digunakan untuk pemberian


harga awal.
Connector/penghubung, digunakan untuk
menghubungkan diagram alur yang terputus
dimana bagian tersebut masih berada pada
halaman yang sama.

On page Connector, Untuk menghubungkan


sambungan dari bagian flowchart yang terputus
dimana sambungannya berada pada halaman
lain.

Flowline, menunjukkan bagian arah instruksi


dijalankan
Diagram Alur untuk Program Komputer.

Pada dasarnya suatu program komputer


umumnya terdiri atas :
1. Pembacaan / pemasukan data ke dalam
komputer
2. Melakukan komputasi/perhitungan
terhadap data tersebut
3. Mengeluarkan / mencetak/ menampilkan
hasilnya.
Flowchart terdiri dari tiga struktur :
1. Stuktur squence / Struktur sederhana
Contoh :
2. Struktur Branching
Contoh :

y
t
3. Stuktur Looping
Contoh :
Catatan :
Ketiga struktur diatas dapat digunakan secara
bersamaan pada satu diagram alur.

Memberi harga kepada suatu Variabel (Cara I)


Suatu variabel dapat diartikan sebagai suatu nilai yg
dapat
berubah harganya.

Contoh menggambarkan pemberian harga suatu


variabel :
X=5 variabel X diberi harga sebesar 5
Kotak proses/penugasan dpt berfungsi antara
lain untuk :
Variabel C diberi harga sebesar harga var.
P dikurangi harga var. Q (dlm hal ini,
C= P - Q harga variabel P & Q harus sudah ada)

Harga yg terbaru dari variabel N adalah harga


N=N+1 lama dari variabel N ditambah 1 (atau dengan
kata lain, harga variabel N bertambah 1)

Harga yg baru dari var. S adalah harga


lama S ditambah dengan harga variabel T.
S =S + T
Jenis variabel terbagi atas 2 macam, yaitu :
Variabel Numerik/bil.,
Variabel untai kata/string,
Memberi harga kepada suatu variabel (Cara II)
Dgn menggunakan kotak masukan/baca/input/read,
STRUKTUR SQUENCE / STRUKTUR SEDERHANA
Diagram yang alurnya mengalir secara berurutan dari atas
ke bawah atau dengan kata lain tidak adanya percabangan
atau pengulangan .

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

(2) dstnya... Jadi yang akan tercetak adalah harga-harga 4,9,16,


... dst
Bentuk umum penulisan proses LOOP :

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)

pemberian nilai awal mengatur naik/turun


Contoh :

for (a =0; a<=10; ++a) perulangan positif (+1)


for (a =0; a<=10; a+=2) perulangan positif (+2)

for (a=10; a>=0; --a) perulangan negatif


Listing for Menurun: Listing for Menaik:
#include <stdio.h> #include <stdio.h>
#include <conio.h> #include <conio.h>
#include <iostream.h> #include <iostream.h>
main() main()
{ {
int i; int i;
for (i=10; i>0; i--) for (i=0; i<10; ++i)
cout<<"\n bilangan: "<<i; cout<<"\n bilangan: "<<i;
getch(); } getch(); }
Output : Output :
Nested For
Perulangan for di dalam perulangan for lainnya.
Bentuk Umum :
For (inisialisasi; syarat pengulangan; pengubah nilai)
{
For (inisialisasi; syarat pengulangan; pengubah nilai)
{
perintah ;
}
}
Contoh Program Menggunakan Nested-For:
#include <stdio.h>
#include <conio.h>
#include <iostream.h> Outputnya:
main()
{ int i, j;
for (i=1; i<=5; i++)
{ cout<<endl;
for (j=1; j<=i; j++)
cout<<"*";}
getch(); }
Perintah BREAK;
berfungsi untuk keluar dari suatu loop for, do...while,
while.
Bentuk Umumnya adalah:
{
......
......
break;
......
......
}
.......
Buatlah Flowchart dan program untuk menginput sejumlah
Bilangan integer satu per satu dan menghitung totalnya.
Inputan akan berhenti apabila nilai yang diinput lebih besar
dari 100. Kemudian mencetak total dan proses selesai.
Hasil Outputnya adalah sbb:

Flowchart dan programnya


Listing Program, sbb:
#include <stdio.h>
#include <conio.h>
void main()
{ int n, t;
t=0;
while (1)
{ scanf("%i",&n);
t=t+n;
if (t >= 100)
break; }
printf("%i",t);
getch(); }

Perhatikan: nilai kondisi pada while (1), karena menurut bahasa


C nilai tersebut bernilai True. Looping akan dikerjakan terus
sampai dipaksa keluar oleh instruksi break;
Perintah Continue:
digunakan untuk mengarahkan jalannya program ke iterasi
(proses)
berikutnya pada loop yang sama.
Bentuk umumnya adalah:
while (kondisi)
{
......
......
Continue;
......
......
}
......
Contoh: Buatlah Algoritma dan program untuk mencetak
bilangan 0 - 6, ketika proses pencetakan bilangan pada 4, maka
bilangan ini dilewati. hasil outputnya adalah: 0,1,2,3,5,6.
Algoritmanya adalah sebagai berikut:
1. Tentukan nilai awal, batas akhir dan pertambahan nilai
2. Lakukan pengulangan sesuai dengan langkah 1
3. Jika dalam pengulangan bilangan yang ditampilkan sama
dengan 4, maka pengulangan berhenti dan dilanjutkan ke
bilangan selanjutnya.
4. Cetak bilangan
5. Jika dalam pengulangan bilangan yang akan ditampilkan
sama dengan 6, maka pengulangan dihentikan
Adapun Programnya sebagai berikut:
#include <stdio.h>
#include <conio.h>
main()
{ int i;
for (i=0; i<10; ++i)
{ if (i==4) continue;
printf("bilangan : %d \n",i);
if (i==6) break;
} getch();
}
Output Program :
Tugas
1.Buatlah Algoritma dan program untuk menentukan total pembelian
minuman apabila diberlakukan ketentuan berikut ini:

Kode Minuman diinputkan. Apabila total pembelian melebihi 100000,


maka akan mendapatkan potongan sebanyak 15%, sebaliknya jika
kurang dari 100000 tidak mendapatkan potongan
2.Buatlah algoritma dan program untuk menentukan
sisa hasil pembagian antara bilangan yang dimasukkan
dengan bilangan pembagi. Apabila sisa baginya=0 maka
dicetak tidak ada dan jika ada sisa baginya ditampilkan.
PERTEMUAN 6

STRUKTUR REKURSIF
STRUKTUR REKURSIF

Rekursif adalah suatu proses yang bisa memanggil dirinya


sendiri.

Contoh konsep penggunaan Rekursif


Masalah : Memotong Roti tawar tipis-tipis sampai habis
Algoritma :
1.Jika roti sudah habis atau potongannya sudah paling
tipis maka pemotongan roti selesai.
2.Jika roti masih bisa dipotong, potong tipis dari tepi roti
tersebut, lalu lakukan prosedur 1 dan 2 untuk sisa
potongannya.
Contoh Fungsi Rekursif

a. Fungsi pangkat
b. Faktorial
c. Fibonancy
d. Menara Hanoi
Fungsi Pangkat
Menghitung 10 pangkat n dengan menggunakan konsep
rekursif.

Secara Notasi pemrograman dapat ditulis :


10 0 = 1 …………………………..(1 )
10 n = 10 * 10 n-1 .....................................( 2 )

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

Scr notasi pemrograman dapat ditulis sebagai :


FAKT (0) = 1 .............................................. (1)
FAKT(N) = N * FAKT (N-1).................................... (2)

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!

Scr rekursif nilai dr 4! Dpt dihitung kembali dgn 4 *


3!,
shg 5! Menjadi :5! = 5 * 4 * 3!

Scr rekursif nilai dr 3! Dpt dihitung kembali dgn 3 *


2!, shg 5! Menjadi : 5! = 5 * 4 * 3 * 2!

Scr rekursif nilai dr 2! Dpt dihitung kembali dgn 2 *


1, shg 5! Menjadi : 5! = 5 * 4 * 3 * 2 * 1 = 120.
Contoh Listing Faktorial
#include <iostream.h>
#include <iomanip.h>
Unsigned long faktorial (unsigned long);
Int main()
{
for (int i=0; i:<=10; i++)
cout << setw(2) << i << “! Faktorial(i) << endl;
return 0;
}
// recursive definition of function factorial
Unsigned long factorial (unsigned long number)
{
if (number <=1) // base case
return 1;
else
return number * factorial(number – 1);
}
Fibonancy
Deret Fibonancy : 0,1,1,2,3,5,8,13,.........

Secara notasi pemrograman dapat ditulis sebagai :


Fibo (1) = 0 & Fibo (2) = 1 ....................................... (1)
Fibo (N) = Fibo (N-1) + Fibo (N-2) ................................. (2)

Contoh :
Fibo(5) = Fibo(4) + Fibo(3)
Fibo(4) = Fibo(3) + Fibo(2)
Fibo(3) = Fibo(2) + Fibo(1)

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

Jika n=1, maka langsung pindahkan saja piringan dr tiang A


ke tiang C & selesai.
Pindahkan n-1 piringan yg paling atas dr tiang A ke tiang B.
Pindahkan piringan ke n (piringan terakhir) dr tiang A
ketiang C
Pindahkan n-1 piringan dari tiang B ke tiang C.
Langkah pemindahan tsb diatas dpt diubah
dengan notasi sbb:

Menara (n,asal,bantu,tujuan)

Utk jml piringan n>1 dpt dibagi menjadi 3 notasi


penyelesaian
Menara (n-1, Asal,Tujuan, Bantu);
Menara (n, Asal, Bantu, Tujuan); atau Asal Tujuan;
Menara (n-1, Bantu, Asal, Tujuan);
Langkah Pemindahan Piringan MENARA(1,A,C,B) ....... A
B
MENARA(2,A,B,C) A C ......... A
C
MENARA(1,B,A,C) ........B
C
MENARA(3,A,C,B) A B .......................…………...................… A
B
MENARA(1,C,B,A) .......C A
MENARA(2,C,A,B)C B ........................ C B
MENARA(1,A,C,B) ................ A
B
MENARA A C ..........……..........................................................A C
(4,A,B,C) MENARA(1,B,A,C) ...... B C
MENARA(2,B,C,A) B A ........B
A
MENARA(1,C,B,A) ....... C A
MENARA(3,B,A,C) B C ......................................... B C
MENARA(1,A,C,B) ........ A
B
MENARA(2,A,B,C) A C ............... A
C
MENARA(1,B,A,C) ........ B C
Ilustrasi diatas menghasilkan 15 langkah penyelesaian
dari permasalahan konsep menara Hanoi dgn jumlah
piringan sebanyak 4 buah18

Rumus Langkah Pemindahan :

2N - 1

N = Jumlah Piringan
PERTEMUAN 9

LARIK ATAU ARRAY


LARIK ATAU ARRAY
adalah tipe terstruktur yang terdiri dari
sejumlah komponen yang mempunyai tipe
data yang sama.
Variabel Array terdiri dari :
1. Array Berdimensi Satu
2. Array Berdimensi Dua
1. Array Berdimensi Satu
Bentuk Umum :
Tipe_Data Nama_Variabel [ukuran]

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]

Hasil Tabel Tabel[1][0] Tabel[1][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

Perintah pokok yg digunakan pd pengisian


matriks A adalah :

A[i,j] = 1, jika i <=j , A[i,j] = 0, jika i > j


Latihan :
1. Diberikan matriks A sebagai berikut :
1 2 3 4
0 2 3 4
0 0 3 4
0 0 0 4

Perintah pokok yg digunakan pd pengisian


matriks A adalah :
2. Diberikan matriks A sebagai berikut :
1 0 0 0
2 2 0 0
3 3 3 0
4 4 4 4

Perintah pokok yg digunakan pd


pengisian matriks A adalah .
3. Diberikan matriks A sebagai berikut :
1 0 0 0
0 1 0 0
0 0 1 0
0 0 0 1

Perintah pokok yg digunakan pd pengisian

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

Algoritma di atas akan menghasilkan nilai .....


5. Diberikan algoritma sbb, diketahui nilai dari array
x[0]=10, x[1]=12, x[2]=12, x[3]=10 dan y[0]=2,
y[1]=3, y[2]=4, y[3]=5

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;

Maka nilai hasil dari algoritma diatas adalah......


Tugas Kelompok (max 5 orang)
Buatlah program dengan menggunakan C++
1. Penjumlahan dua buah matriks
2. Pengurangan dua buah matriks
Ket :
• Masing-masing kelompok dapat memilih salah satu
dari program di atas.
• Listing program & output dicetak
• Nama, Nim dan Kelas dicetak di listing program
PERTEMUAN 10

METODE DIVIDE AND


CONQUER
• Bentuk Umum Proses Metode D And C dpt
dilihat sbb : n input

n input I n input II n input III n input K

Subproblem I Subprob. II Subprob. III Subprob. K

Subsolusi I Subsolusi II Subsolusi III Subsolusi K

Solusi Optimal
SORTING
1. Metode Selection Sort
2. Metode Buble Sort
3. Metode Merge Sort
4. Metode Quick Sort
5. Metode Insertion.

Hal yg mempengaruhi Kecepatan Algoritma Sort :


Jumlah Operasi Perbandingan & Jumlah Operasi
Pemindahan Data
SELECTION SORT

Tehnik pengurutan dgn cara pemilihan


elemen atau proses kerja dgn memilih
elemen data terkecil utk kemudian
dibandingkan & ditukarkan dgn elemen pd
data awal, dst s/d seluruh elemen shg akan
menghasilkan pola data yg telah disort.
Prinsip Kerja dari Teknik Selection Sort ini
adalah :

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.
Contoh : 22 10 15 3 8 2

Iterasi 1
1 2 3 4 5 6
Langkah 1 : 22 10 15 3 8 2
Langkah 2 : 22 10 15 3 8
2
Langkah 3 : 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 .

Lakukan Iterasi selanjutnya sampai iterasi


ke-6
BUBBLE SORT
Tehnik Sort yg bekerja dgn menggunakan prinsip
gelembung (bubble) udara yg akan bergerak
naik ke atas secara satuper satu.
Prinsip Kerja dari Bubble Sort adalah :
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.
Contoh : 22 10 15 3 8 2

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:

Sumber: Struktur Data (Insap Santosa, 2006 hal: 337-340)


INSERTION SORT
Prinsip dasar Insertion adalah secara berulang-ulang
menyisipkan / memasukan setiap elemen. ke dlm
posisinya / tempatnya yg benar.
1. Prinsip Kerja Insertion Sort adalah
2. Pengecekan mulai dari data ke-1 sampai data ke-n
3. Bandingkan data ke-I ( I = data ke-2 s/d data ke-n )
4. Bandingkan data ke-I tersebut dengan data
sebelumnya (I-1), Jika lebih kecil maka data
tersebut dapat disisipkan ke data awal sesuai dgn
posisisi yg seharusnya
5. Lakukan langkah 2 dan 3 untuk bilangan
berikutnya ( I= I+1 ) sampai didapatkan urutan yg
optimal.
Contoh : 22 10 15 3 8 2
Iterasi 1
1 2 3 4 5 6
Langkah 1: 22 10 15 3 8 2
Langkah 2: 22 10 15 3 8 2
Langkah 3: 10 22 15 3 8 2
Langkah 4: Ulangi langkah 2 dan 3
Iterasi 2

Langkah 1: 10 22 15 3 8 2
Langkah 2: 10 22 15 3 8 2
Langkah 3: 10 15 22 3 8 2
Langkah 4: Ulangi langkah 2 dan 3

Lakukan Iterasi selanjutnya sampai iterasi


ke- 6
Catatan : Setiap ada pemindahan, maka elemen.
Yang sudah ada akan di insert sehingga akan
bergeser kebelakang.
MERGE SORT
Prinsip Kerja Merge Sort adalah :
• Kelompokan deret bilangan kedalam 2 bagian,
4 bagian, 8 bagian, ......dst (2n)
• Urutkan secara langsung bilangan dalam
kelompok tsb.
• Lakukan langkah diatas untuk kondisi bilangan
yg lain sampai didapatkan urutan yg optimal .
Contoh : 22 10 15 3 8 2

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

Iterasi 2
Langkah 1 : 10 22 3 15 2 8
Langkah 2 : 3 10 15 22 2 8
Iterasi 3

Langkah 1 :3 10 15 22 2 8

Langkah 2 :2 3 8 10 15 22
PERTEMUAN 11

TEHNIK SEARCHING
TEHNIK SEARCHING

Tehnik Pencarian :
1. Tehnik Pencarian Tunggal :
a. Tehnik Sequential Search / Linier Search
b. Tehnik Binary Search

2. Tehnik Pencarian Nilai MAXMIN :


a. Tehnik StraitMAXMIN
b. Tehnik D and C
1. Tehnik Pencarian Tunggal :

a. Linear/Sequential Search ( Untuk data yg


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

Digunakan mencari sebuah data pd himp.data-


data yg tersusun secara urut, yaitu data yg
telah diurutkan dr besar ke kecil/sebaliknya.
Proses dilaksanakan pertama kali pd bgn
tengah dr elemen himpunan, jk data yg dicari
ternyata < elemen bagian atasnya, maka
pencarian dilakukan dr bagian tengah ke
bawah.
Algoritma :
1. Low = 1 , High = N
2. Ketika Low <= High Maka kerjakan langkah No .3,
Jika tidak Maka kerjakan langkah No.7
3. Tentukan Nilai Tengah dengan rumus
mid = ( Low + High ) Div 2
4. Jika X < Nil. Tengah Maka High = Mid –1
5. Jika X > Nil. Tengah Maka Low = Mid +1
6. Jika X = Nil. Tengah Maka Nil. Tengah = Nil. Yg
dicari
7. Jika X > High Maka Pencarian GAGAL
2. Tehnik Pencarian MAXMIN
Searcing dengan Tehnik STRAITMAXMIN

Menentukan / mencari elemen max & min.


Pada Himpunan yg berbentuk array linear.
Waktu tempuh/time complexity yg digunakan
untuk menyelesaikan pencarian hingga
mendapatkan solusi yg optimal terbagi atas
best case,average case dan worst case.
Algoritma untuk mencari elemen MaxMin :
PROCEDURE
STRAITMAXMIN(A,n,i,max,min)
int i,n, A [n], max,min
max min A[0]
FOR i 1 To n
IF A[i] > max; max A[i];
ELSE IF A[i] < min ; min A[i] ENDIF
ENDIF
REPEAT
END STRAITMAXMIN
BEST CASE
• Keadaan yg tercapai jika elemen pada
himpunan A disusun secara increasing
(menaik). Dengan perbandingan waktu n - 1
kali satuan operasi.

• Contoh : Terdapat himp.A yg berisi 4 buah


bilangan telah disusun secara increasing
dengan A[0] = 2, A[1] = 4, A[2]=5, A[3]=10.
Tentukan / cari Bilangan Max&Min serta
jumlah operasi perbandingan yg dilakukan.
• Penyelesaian
untuk masalah tersebut dapat digunakan
procedure STRAITMAXMIN yg menghasilkan
bilangan Min=2 & bilangan Max=10,
Operasi perbandingan data mencari bilangan
MaxMin dari himpunan tersebut (n-1) =3 kali
operasi perbandingan.
WORST CASE
• Terjadi jika elemen dalam himp. disusun
secara decreasing (menurun). Dengan.
Oprasi perbandingan sebanyak 2(n-1)
kali satuan operasi.
• Contoh : Mencari elemen MaxMin &
jumlah oprasi perbandingan yg dilakukan
terhadap himp.A yg disusun decreasing.
A[0]=80, A[1]=21, A[2]=6, A[3]=-10
Penyelesaian
• untuk masalah tersebut dengan proses
STRAITMAXMIN adalah elemen
max=80 & elemen min=-10, Operasi.
perbandingan untuk elemen Maxmin
tersebut adalah 2(4-1) = 6 kali satuan
operasi.
AVERAGE CASE
• Jika pencarian elemen MaxMin dilakukan pada
elemen dalam himpunan yg tersusun secara
acak (tidak decreasing/tidak increasing).
Jumlah oprasi. Perbandingan yg dilakukan
adalah rata-rata waktu tempuh best case &
worst case, yaitu ½ [ (n-1) + 2(n-1) ] = ( 3n/2 -1
) kali.

• Contoh, Pada himpuan A yg berisi { 5,-4, 9,7 }


dilakukan pencarian elemen max & min
dengan menggunakan proses
STRAITMAXMIN. Berapa elemen maxmin yg
didapatkan & jumlah oprasi perbandingan yg
dilakukan.
• Penyelesaiannya :
Elemen max=9, & elemen min=-4.
Jumlah operasi perbandingan adalah ( 3.
4/2 - 1) = 5 kali satuan operasi.
Searching dengan Tehnik DANDC
• Dengan Prinsip Dasar Metode Devide &
akan dapat dipecahkan suatu
permasalahan proses Searching elemen
Max&Min dengan teknik DANC
• Contoh : Tentukan elemen MaxMin suatu
array A yg terdiri 9 bil. :
A[1] = 22, A[4] = -8, A[7] = 17
A[2] = 13, A[5] = 15, A[8] = 31
A[3] = -5, A[6] = 60, A[9] = 47
Penyelesaian :

1,9

1,5 6,9

1,3 4,5 6,7 8,9

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

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

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

1,9 60,-8
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 :

Untuk menyeselesaikan suatu permasalahan dgn


n input data yg terdiri dari beberapa fungsi
pembatas & 1 fungsi tujuan yg diselesaikan dgn
memilih beberapa solusi yg mungkin (feasible
solution/feasible sets), yaitu bila telah memenuhi
fungsi tujuan/obyektif.
Metode GREEDY digunakan dlm penyelesaian
masalah - masalah :
1. Optimal On Tape Storage Problem
2. Knapsack Problem
3. Minimum Spanning Tree Problem
4. Shortest Path Problem.
1. Optimal Storage On Tapes Problem
Permasalahan Bagamana mengoptimalisasi
storage/memory dalam komputer agar data yg
disimpan dapat termuat dgn optimal.

Misalkan terdapat n program. yg akan disimpan


didalam pita (tape).Pita tsb mempunyai panjang
maks. sebesar L, masing2 prg. yg akan
disimpan mempunyai panjang L1,L2,L3 ...,Ln.
Cara penyimpanan adalah penyimpanan secara
terurut (sequential).
L1 L2 L3 ... Ln
Persoalan = Bagamana susunan penyimpanan
program2 tersebut sehingga
L1 + L2 + L3 + ... + Ln = L ?

Pemecahannya = jika program.2 tersebut disimpan dlm


Order, dimisalkan adalah Order I, yaitu : j
sama dengan Σ tik maka akan didapat
k=1
n
Mean Retrieval Time (MRT) = Σ tj /n
j=1

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

Fungsi tujuan = fungsi utama/obyektif = fungsi yg mjd


penyelesaian permasalahan dgn mendptkan solusi yg
optimal.

Solusi dimaksud = menemukan nilai/profit yg maks.


utk jml obyek yg dimuat dlm ransel shg sesuai
kapasitas.
n
Fungsi Tujuan Maksimum : ∑ Pi Xi
I=1
Fungsi pembatas = fungsi subyektif = fungsi yg
bertujuan untuk memberikan batas maks. dr setiap obyek
untuk dapat dimuat dalam ransel sehingga kapasitasnya
tdk melebihi dr jumlah maks.daya tampung ransel.
n
Fungsi Pembatas : ∑ Wi Xi ≤ M
i=1
dimana : 0 ≤ Xi ≤ 1; Pi >0;Wi>0

Catatan : karena dengan menggunakan Matematikan


sangat sulit dan rumit maka tidak dibahas lebih
mendalam.
Penyelesaian Dengan Kriteria Greedy.
Konsep dr kriteria yg ditawarkan oleh metode
Greedy yaitu :
Pilih obyek (barang) dengan nilai Pi maximal atau
terbesar
Pilih obyek (barang) dengan berat Wi minimal
dahulu.
Pilih obyek (barang) dgn perbandingan nilai &
berat yaitu Pi/Wi yang terbesar.
Penyelesaiannya : Dengan Kriteria
Greedy.
Diketahui bahwa kapasitas M = 20kg ,
Dengan jumlah barang n=3
Berat Wi masing-masing barang
(W1, W2, W3) = (18, 15, 10)
Nilai Pi masing-masing barang
(P1, P2, P3) = (25, 24, 15)
Pilih barang dengan Nilai Profit Maksimal
P1 = 25 X1 = 1, dimisalkan sebagai
batas atas nilai
P2 = 24 X2 = 2/15, dihitung dengan
Fungsi Pembatas
P3 = 15 X3 = 0, dimisalkan sebagai
batas bawah nilai
Pilih barang dengan Berat Minimal
W1 = 18 X1 = 0, sebagai batas bawah
W2 = 15 X2 = 2/3,dihitung dgn Fungsi Pembatas
W3 = 10 X3 = 1, sebagai batas atas
Pilih barang dgn menghitung perbandingan yg
terbesar dr Profit dibagi Berat (Pi/Wi) yg diurut
secara tidak naik, yaitu :

P1/W1 = 25/18 karena terkecil maka X1 = 0


P2/W2 = 24/15 karena terbesar maka X2 = 1
P3/W3 = 15/10 dengan Fungsi pembatas
X3 = 1/2.
Dibuatkan tabel berdasarkan elemen dr
ke-3 kriteria metode Greedy

Solusi ke (X1,X2,X3) ∑ WiXi ∑PiXi

Pi Max ( 1, 2/15, 0) 20 28.2

( 0, 2/3, 1) 20 31.0
Wi Min
Pi/Wi max ( 0, 1, 1/2 ) 20 31.5

Nilai profit maksimal = 31.5 dengan komposisi


yang sama
Pertemuan 13

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.

Diket. bhw kapasitas M = 20kg, dgn jmlh brg n=3


Berat Wi masing2 brg = (W1, W2, W3) = (18, 15, 10)
Nilai Pi masing2 brg = (P1, P2, P3) = (25, 24, 15)
Lakuk’ p’urutan scr tdk naik thdp hasil Pi/Wi, misalnya :

P1/Wi 25/18 = 1,39 menjadi urutan ke 3


P2/W2 24/15 = 1,60 menjadi urutan ke 1
P3/W3 15/10 = 1.50 menjadi urutan ke 2
Sehingga m’hasilk’ pola urutan data yg baru,yaitu
W1,W2,W3 15, 10, 18 dan P1,P2,P3 24, 15, 25
Lalu data2 tsb diinputk’ pd Alg. Greedy, terjadi proses :

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)

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


24.1+ 15.1/2 + 18.0 = 24 + 7.5 = 31.5
PROBLEMA DAN MODEL GRAPH DALAM METODE
GREEDY ( Lanjutan )
1. TRAVELLING SALESMAN
Untuk menentukan waktu perjalanan seorang
salesman seminimal mungkin.
Permasalahan:
Setiap minggu sekali, seorang petugas kantor
telepon berkeliling untuk mengumpulkan coin-coin
pada telepon umum yang dipasang diberbagai
tempat. Berangkat dari kantornya, ia mendatangi
satu demi satu telepon umum tersebut dan akhirnya
kembali ke kantor lagi. Masalahnya ia menginginkan
suatu rute perjalanan dengan waktu minimal.
MODEL GRAPH :

8 7 10
1 2
12 9
11 9
11 5 10
8 3
4

Misalnya : Kantor pusat adalah simpul 1 dan misalnya


ada 4 telepon umum, yg kita nyatakan sebagai simpul 2,
3, 4 dan 5 dan bilangan pada tiap-tiap ruas menunjukan
waktu ( dalam menit ) perjalanan antara 2 simpul .
Langkah penyelesaian :
1. Dimulai dari simpul yg diibaratkan sebagai
kantor pusat yaitu simpul 1 .
2.Dari simpul 1 pilih ruas yg memiliki waktu yg
minimal.
3. Lakukan terus pada simpul – simpul yg lainnya
tepat satu kali yg nantinya Graph akan
membentuk Graph tertutup karena perjalanan
akan kembali ke kantor pusat.
4. Problema diatas menghasilkan waktu
minimalnya adalah 45 menit dan diperoleh
perjalanan sbb :
Problema diatas menghasilkan waktu minimalnya
adalah 45 menit dan diperoleh perjalanan sbb :
7

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

Kriteria2 dr spanning tree, yakni :


1. Setiap ruas pada graph harus terhubung (conected)
2. Setiap ruas pd graph hrs mpy nilai (label graph)
3. Setiap ruas pd graph tdk mpy arah (graph tdk berarah)
Proses Total minimum cost terbentuknya graph dgn
tahapan sbb:
• Dari graph yg tetbentuk, apakah memenuhi kriteria
MST.
• Lakukan secara urut dr simpul ruas awal s/d ruas
akhir
• Pada setiap simpul ruas perhatikan nilai/cost dr
tiap-tiap ruas
• Ambil nilai yg paling kecil (jarak tertpendek setiap
ruas).
• Lanjutkan s/d semua simpul ruas tergambar pd
spanning tree
• Jumlahkan nilai/cost yg dipilih tadi.
10
1 2
45 50
30
40
4 35 3
25
20 5
55
15
6
3. SHORTEST PATH PROBLEM
Permasalahan : menghitung jalur terpendek dr sbh graph
berarah.
Kriteria utk permasalahan jalur terpendek/SP problem tsb :
1. Setiap ruas pd graph hrs mpy nilai (label graph)
2. Setiap ruas pd graph tdk hrs terhubung (unconnected)
3. Setiap ruas pd graph tsb hrs mempunyai arah (graph
berarah).
45

A 50 B 10 E

10 20 15 20 35

30

C D F
15 3
Penyelesaian:

Jalur Panjang jarak


A–C 10
A–C–D 25
A–C–D–B 45
A–E 45
PROBLEMA DAN MODEL GRAPH DALAM METODE
GREEDY

1. PEWARNAAN ( COLORING )

Problema pemberian warna kepada semua


simpul, sedemikian sehingga 2 simpul yang
berdampingan ( ada ruas menghubungkan
ke dua simpul tersebut ) mempunyai warna
yang berbeda .Banyak warna yang
dipergunkan , diminta seminimal mungkin
Contoh : C

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

5. Tentukan pembagian masing –masing simpul yang


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

6.Dari langkah ke 5 diperoleh 3 fase, sehingga bisa kita


simpulkan keseluruhan situasi dan hasilnya dapat
dinyatakan dengan :
Fase 1:

HIJAU AC, AD, AB, BC, ED

MERAH BD, EB, EC

Fase 2:

HIJAU BD, EB, AB, BC, ED

MERAH AC, AD, EC


Fase 3 :

HIJAU EC, AB, BC, ED

MERAH AC, AD, BD, EB


pErTeMuAn
pErTeMuAn
pErTeMuAn
pErTeMuAn
pErTeMuAn
pErTeMuAn
pErTeMuAn pErTeMuAn
pErTeMuAn pErTeMuAn
pErTeMuAn pErTeMuAn

LOGIKA DAN ALGORITMA

Anda mungkin juga menyukai