27
Modul Tutorial Algoritma dan Pemrograman Bahasa Pemrograman : C++ Software : Microsoft Visual Studio 2010 Oleh : Faisal Khalid Annisa Permatasari Vivi Mulya Ningsih JURUSAN SISTEM INFORMASI UNIVERSITAS ANDALAS

Modul Algoritma dan Pemrograman

  • Upload
    fwzakiy

  • View
    75

  • Download
    8

Embed Size (px)

DESCRIPTION

Algoritma adalah urutan langkah-langkah untuk memecahkan suatu masalah. Algoritmamerupakan deretan instruksi yang jelas untuk memecahkan masalah, yaitu untuk memperolehkeluaran yang diinginkan dari suatu masukan dalam jumlah yang terbatas. Algoritma dapatdituliskan dengan banyak cara, mulai dari menggunakan bahasa alami yang digunakan seharihari, simbol grafik bagan alir, sampai menggunakan bahasa pemograman seperti bahasa Catau C++.

Citation preview

Page 1: Modul Algoritma dan Pemrograman

Modul Tutorial

Algoritma dan Pemrograman

Bahasa Pemrograman : C++

Software : Microsoft Visual Studio 2010

Oleh :

Faisal Khalid

Annisa Permatasari

Vivi Mulya Ningsih

JURUSAN SISTEM INFORMASI

UNIVERSITAS ANDALAS

Page 2: Modul Algoritma dan Pemrograman

2

1. Pengenalan

a. Pengenalan Algoritma

b. Pseudo Code

c. Pengenalan C++

d. Operator

e. Tipe Data

2. Percabangan

a. If Else

b. Case

3. Perulangan

a. While Do

b. Do While / Repeat...Until

c. For

4. Array dan Matriks

a. Pengenalan Matriks

b. Operasi Matriks

5. Pencarian

a. Pencarian Beruntun

b. Pencarian Bagi Dua

6. Pengurutan

a. Pengurutan Bubble Sort

b. Pengurutan Seleksi

c. Pengurutan Sisip

d. Pengurutan Shell

7. Kentang

Page 3: Modul Algoritma dan Pemrograman

3

BAGIAN 1

PENGENALAN

A. Pengenalan Algoritma

Algoritma adalah urutan langkah-langkah untuk memecahkan suatu masalah. Algoritma

merupakan deretan instruksi yang jelas untuk memecahkan masalah, yaitu untuk memperoleh

keluaran yang diinginkan dari suatu masukan dalam jumlah yang terbatas. Algoritma dapat

dituliskan dengan banyak cara, mulai dari menggunakan bahasa alami yang digunakan sehari-

hari, simbol grafik bagan alir, sampai menggunakan bahasa pemograman seperti bahasa C

atau C++.

Contoh :

Masalah

Diberikan setumpuk tugas mahasiswa (50 orang) di ruang dosen yang tersusun secara acak.

Pada setiap tugas terdapat nomor bp mahasiswa. Bagaimana mengurutkan tugas berdasarkan

nomor bp mahasiswa?

Langkah-langkah

1. Cari BP dengan nomor terkecil

2. Tempatkan tugas tersebut pada posisi paling atas

3. Cari BP dengan nomor kecil berikutnya

4. Tempatkan tugas dibawah tugas yang pertama

5. Cari BP dengan nomor kecil berikutnya

6. Tempatkan tugas dibawah tugas yang kedua

7. ........

8. Cari BP dengan nomor kecil berikutnya

9. Tempatkan tugas dibawah tugas yang ke-48

(tersisa satu tugas, tidak perlu diurutkan lagi)

Langkah-langkah tersebut adalah algoritma, algoritma mengurutkan nomor bp pada tugas

mahasiswa (algoritma pengurutan). Langkah-langkah tersebut bisa ditulis lebih rinci lagi.

Seperti bagaimana langkah-langkah mencari nomor bp terkecil? Bagaimana membandingkan

nomor bp satu dengan yang lainnya, bagaimana menempatkan nilai terkecil pada posisi yang

seharusnya, dan sebagainya.

Page 4: Modul Algoritma dan Pemrograman

4

B. Pseudo Code

Pseudo code merupakan notasi algoritmik yang mudah dibaca dan ditranslasikan ke dalam

bahasa pemrograman. Notasi pseudo code ini memiliki korespondensi dengan notasi bahasa

pemrograman sehingga proses penerjemahan dari pseudo code ke bahasa program menajdi

lebih mudah.

Contoh:

[1] Sebuah pernyataan dalam notasi deskriptif

Tulis nilai X dan Y

[2] Pada Pseudo Code menjadi :

Write (X,Y)

Notasi write berarti nilai x dicetak ke piranti keluaran. Pada pseudo code tidak dibahas secara

detail tentang penulisan program, seperti titik koma, jumlah bilangan, tipe bilangan, dan

sebagainya. Hal-hal teknis tersebut dilakukan pada saat translasi notasi algoritmik tersebut ke

notasi pemrograman.

C. Pengenalan C++

Setiap program C++ mempunyai bentuk umum seperti di bawah, yaitu:

# prepocessor directive

void main()

{

// Batang Tubuh Program Utama

}

Penjelasan :

1. Include

Include adalah salah satu pengarah prepocessor directive yang tersedia pada C++.

Preprocessor selalu dijalankan terlebih dahulu pada saat proses kompilasi terjadi. Bentuk

umumnya :

# include <nama_file>

tidak diakhiri dengan tanda semicolon, karena bentuk tersebut bukanlah suatu bentuk

pernyataan, tetapi merupakan prepocessor directive. Baris tersebut menginstrusikan kepada

kompiler yang menyisipkan file lain dalam hal ini file yang berakhiran .h(file header) yaitu

file yang berisi sebagai deklarasi, contoh:

- # include <iostream.h> : diperlukan pada program yang melibatkan objek cout

- # include <conio.h> : diperlukan bila melibatkan clrscr(),yaitu perintah untuk

membersihkan layar.

Page 5: Modul Algoritma dan Pemrograman

5

- # include <iomanip.h> : diperlukan bila melibatkan setw() yang bermanfaat untuk

mengatur lebar dari suatu tampilan data.

- # include <math.h> : diperlukan pada program yang menggunkan operasi sqrt ()

yang bermanfaat untuk operasi matematika kuadrat.

2. Fungsi main ()

Fungsi ini menjadi awal dan akhir eksekusi program C++. main adalah nama judul fungsi.

Melihat bentuk seperti itu dapat kita ambil kesimpulan bahwa batang tubuh program utama

berada didalam fungsi main( ). Berarti dalam setiap pembuatan program utama, maka dapat

dipastikan seorang pemrogram menggunakan minimal sebuah fungsi.

3. Komentar

Komentar tidak pernah dicompile oleh compiler. Dalam C++ terdapat 2 jenis komentar,

yaitu:

Jenis 1 : /* Komentar anda diletakkan di dalam ini

Bisa mengapit lebih dari satu baris */

Jenis 2 : // Komentar anda diletakkan disini ( hanya bisa perbaris )

4. Tanda Semicolon

Tanda semicolon “ ; ” digunakan untuk mengakhiri sebuah pernyataan. Setiap pernyataan

harus diakhiri dengan sebuah tanda semicolon.

5. Mengenal cout(dibaca : C out)

Pernyataan cout merupakan sebuah objek di dalam C++, yang digunakan untuk mengarahkan

data ke dalam standar output (cetak pada layar).

Contoh :

#include <iostream.h>

Void main()

{

Cout << "Saya mahasiswa Sistem Informasi";

}

Tanda “ << “ merupakan sebuah operator yang disebut operator “penyisipan/peletakan”.

D. Operator

Operator adalah simbol yang biasa dilibatkan dalam program untuk melakukan sesuatu

operasi atau manipulasi.

Page 6: Modul Algoritma dan Pemrograman

6

1. Operator Penugasan

Operator Penugasan (Assignment operator) dalam bahasa C++ berupa tanda sama dengan

(“=”). Contoh :

nilai = 80;

A = x * y;

Penjelasan :

variable “nilai” diisi dengan 80 dan variable “A” diisi dengan hasil perkalian antara x dan y

2. Operator Aritmatika

3. Operator Hubungan (Perbandingan)

Operator Hubungan digunakan untuk membandingkan hubungan antara dua buah operand

(sebuah nilai atau variable). Operator hubungan dalam bahasa C++.

Operator Arti Contoh

== Sama dengan (bukan assignment) x= =y Apakah x sama dengan y

!= Tidak sama dengan x != y Apakah x tidak sama dengan y

> Lebih besar x > y Apakah x lebih besar dari y

< Lebih kecil x < y Apakah x lebih kecil dari y

>= Lebih besar atau sama dengan dengan x >= y Apakah x lebih dari sama

dengan y

<= Lebih kecil atau sama dengan x <= y Apakah x kurang dari sama

dengan y

4. Operator Naik Dan Turun ( Increment Dan Decrement )

Operator increment a++ , Operator decrement a --

Operator logika digunakan untuk menghubungkan dua atau lebih ungkapan menjadi sebuah

ungkapan berkondisi. Hasil keluaran dari operator logika adalah 0 dan 1. 0 jika keluarannya

salah dan 1 jika keluarannya benar.

Operator Deskripsi Contoh

&& Logic AND M && n

|| Logic OR M || n

! Logic NOT !m

Operator Deskripsi Contoh

+ Penjumlahan ( Add ) m + n

- Pengurangan ( Substract ) m – n

* Perkalian ( Multiply ) m * n

% Sisa Pembagian Integer ( Modulus ) m % n

/ Pembagian ( Divide ) m / n

- Negasi ( Negate ) -m

Page 7: Modul Algoritma dan Pemrograman

7

E. Tipe Data

Tipe data adalah kumpulan dari huruf, angka, simbol yang berfungsi untuk menyimpan nilai

di memori komputer. Tipe data yang sering digunakan dalam program antara lain:

o Byte adalah bilangan bulat yang berkapasitas (0..255) digit.

o Shortinteger adalah bilangan bulat yang berkapasitas (– 128..127) digit.

o Word adalah bilangan bulat yang berkapasitas (0..65535) digit.

o Integer adalah bilangan bulat yang berkapasitas (-32768..32767)digit.

o LongInteger adalah bilangan bulat yang berkapasitas (-2147483648.. 2147483647.

o Real adalah bilangan decimal yang berkapasitas (2,9X10-39..1,7X1038) digit.

o Single adalah bilangan decimal yang berkapasitas (1,5X10-45..3,4X1038) digit.

o Double adalah bilangan decimal yang berkapasitas (5,0X10 -324 .. 1,7X10380) digit.

o Extended adalah bilangan decimal yang berkapasitas (3,4X10 -4932 .. 1,1X104932)

digit.

o Char adalah huruf yang berkapasitas 1 huruf atau character.

o String adalah huruf yang berkapasitas 2 milyar huruf.

Page 8: Modul Algoritma dan Pemrograman

8

BAGIAN 2

PERCABANGAN

A. If…Else

Syntax penulisannya :

If (Kondisi-1)

Then ( Statement – 1 )

Else if ( Kondisi – 2 )

Then ( Statement – 2 )

Else if ( Kondisi – 3 )

Then ( Statement – 3 )

Else ( Statement – n )

End if

Contoh :

Buatlah algoritma dalam bentuk Pseudeu Code untuk menghitung Nilai Akhir Mahasiswa.

Dengan Ketentuan NIM, Nama Mahasiswa, Alamat Mahasiswa, Jurusan, Nilai UAS, Nilai

UTS, Nilai Quiz dan Nilai Tugas.

Untuk mencari Nilai Akhir Adalah 40% * Nilai Uas ditambah 30% * Nilai UTS ditambah

20% * Nilai Quiz ditambah 10% * Nilai Tugas.

Nilai Akhir ditentukan oleh Nilai Grade.

Jika Nilai Akhir > 85 maka Nilai Grade = ‘A’

Jika Nilai Akhir > 75 maka Nilai Grade = ‘B’

Jika Nilai Akhir > 65 maka Nilai Grade = ‘C’

Jika Nilai Akhir > 55 maka Nilai Grade = ‘D’

Jika Nilai Akhir < 55 maka Nilai Grade = ‘E’

Cara penyelesaiannya :

Input : [ Nim, Nama, Alamat, Jurusan, N_UAS, N_UTS, NQ, NT ]

Proses : [ Na = (0,4*N_UAS)+(0,3*N_UTS)+(0,2*NQ)+(0,1*NT)

Jika Na > 85 maka NG = ‘A’

Jika Na > 75 maka NG = ‘B’

Jika Na > 65 maka NG = ‘C’

Jika Na > 55 maka NG = ‘D’

Jika Na < 55 maka NG = ‘E’ ]

Output : [ NIM, Nama, Alamat, Jurusan, N_UAS, N_UTS, NQ, NT, Na,

NG ]

Algoritma Name : < Menghitung_Nilai_Akhir_Mahasiswa >

Var

NIM, Nama, Alamat, Jurusan : String;

N_Uas, N_Uts, NQ, NT : Byte/ Integer;

Na : Real;

Page 9: Modul Algoritma dan Pemrograman

9

NG : Char;

Begin

Read[Input ]

Na = (0,4*N_UAS)+(0,3*N_UTS)+(0,2*NQ)+(0,1*NT);

If Na > 85

Then NG=’A’

Else If Na > 75

Then NG=’B’

Else If Na > 65

Then NG=’C’

Else If Na > 55

Then NG=’D’

Then NG=’E’

End IF

Write [ Output ]

End

B. Case

Syntax penulisannya :

Case ( Nama Variabel ) of

Kondisi -1 : Statement – 1

Kondisi -2 : Statement – 2

Kondisi -3 : Statement – 3

Kondisi -n : Statement – n

End Case

Contoh Kasus :

Buatlah Algoritma dalam bentuk Pseudeu Code untuk menghitung Upah Karyawan. Dengan

Ketentuan NIK, Nama Karyawan, Alamat Karyawan, Gol, Jam Kerja.

Jika Gol = 1 maka Uang Harian = 20000 dan Uang Lembur = 10000

Jika Gol = 2 maka Uang Harian = 15000 dan Uang Lembur = 7500

Jika Gol = 3 maka Uang Harian = 10000 dan Uang Lembur = 5000

Uang Lembur dihitung jika Jam Kerjanya lebih dari 8 Jam. Tunjangan = 4% * Uang Harian

dan Upah = Uang Harian ditambah Uang Lembur + Tunjangan.

Cara penyelesaiannya :

Input : [ NIK, Nama, Alamat, Gol, JK ]

Proses : [ Jika Gol = 1 maka UH = 20000 dan UL = 10000

Jika Gol = 2 maka UH = 15000 dan UL = 7500

Jika Gol = 3 maka UH = 10000 dan UL = 5000

Jika JK > 8 maka Lembur = (JK-8) * UL

Jika JK <= 8 maka Lembur = 0;

Tunj = 0,04 * UH

Upah = UH + Lembur + Tunj ]

Output : [ NIK, Nama, Alamat, Gol, JK, UH, UL, Lembur, Tunj,

Upah ]

Algoritma Name : < Menghitung_Upah_Karyawan >

Page 10: Modul Algoritma dan Pemrograman

10

Var

NIK, Nama, Alamat : String;

JK, Gol : Integer;

UH : Longint;

UL, Lembur, Upah, Tunj : Real;

Begin

Read [ Input ]

Case Gol Of

1 : UH = 20000; UL = 10000; 2 : UH = 15000; UL = 7500; 3 : UH = 10000; UL = 5000;

End Case

If JK > 8

Then Lembur = ( JK – 8 ) * UL;

Else Lembur = 0;

End If

Tunj = 0,04 * UH;

Upah = UH + Lembur + Tunjangan ;

Write [ Output ]

End

Page 11: Modul Algoritma dan Pemrograman

11

BAGIAN 3

PERULANGAN

A. While..Do

Proses pengulangan yang menggunakan kondisi ( <, >, <=, >=, = ). Proses pengulangan

berlangsung jika kondisinya benar.

Syntax penulisannya :

Nama variable = Index awal;

While ( kondisi ) do

Begin

Read [ Input ]

Statement;

Increment;

End

End While

Contoh Kasus :

Buatlah Algoritma dalam Pseudeu Code untuk menghitung 2 Luas Persegi Panjang. Dengan

Ketentuan Panjang, Lebar. Untuk mencari Luas adalah panjang kali lebar.

Cara penyelesaiannya :

Input : [ P, L ]

Proses : [ Pengulangan sampai dengan 2 kali

Luas = P * L ]

Output : [ P, L, Luas ]

Algoritma Name : < Perhitungan_Matematika >

Var

P, L, Luas : real;

I : Integer;

Begin

I=0;

While I<2 do

Begin

Read [ Input ]

Luas = P * L;

I = I + 1;

End

End While

Write [ Output ]

End

B. Do…While / Repeat...until

Proses pengulangan kebalikan dari While do. Dan tidak perlu menggunakan Begin dan End.

Syntax penulisannya :

Page 12: Modul Algoritma dan Pemrograman

12

Nama variable = Index awal;

Repeat

Read [ Input ]

Statement;

Increment;

Until (Kondisi)

Atau..

Nama variable = Index awal;

Do

Read [ Input ]

Statement;

Increment;

While (Kondisi)

Contoh Kasus :

Buat Algoritma dalam bentuk Pseudeu Code untuk menghitung 3 Data Kredit Nasabah Bank.

Dengan Ketentuan No Nasabah, Nama Nasabah, Alamat Nasabah, Besar Pinjaman, Suku

Bunga, Lama Pinjaman. Untuk mencari bunga adalah Besar pinjaman dikali Lama pinjaman

dikali Suku Bunga. Nilai Pengembalian adalah Besar pinjaman ditambah Bunga.

Cara penyelesaiannya :

Input : [ No_Nasabah, Nama, Alamat, BP, LP, SB ]

Proses : [ Pengulangan sampai dengan 3 Kali

B = BP * LP * SB

NP = BP + B ]

Output : [ No_Nasabah, Nama, Alamat, BP, LP, SB, B, NP ]

Algoritma Name: < Data_Kredit_Nasabah_Bank >

Var

No_Nasabah, Nama, Alamat : String;

LP, I : Integer;

BP : Longint;

B, SB, NP : Real;

Begin

I=0;

Repeat

Read [ Input ]

B = BP * LP * SB;

NP = BP + B;

I = I + 1;

Until ( I<3 )

Write [ Output ]

End

C. For

Proses pengulangan yang menggunakan increment ( Pencacah Naik ).

Syntax penulisannya :

Page 13: Modul Algoritma dan Pemrograman

13

For nama variable = indek awal to indek akhir do

Begin

Read [ Input ]

Statement

End

End For

Catatan : Untuk nama variable kita bisa menggunakan huruf a sampai z tapi yang sering

digunakan adalah huruf I, J, X, Y.

Contoh Kasus :

Buat Algoritma dalam bentuk Pseudeu Code untuk menghitung 3 Data Kredit Nasabah Bank.

Dengan Ketentuan No Nasabah, Nama Nasabah, Alamat Nasabah, Besar Pinjaman, Suku

Bunga, Lama Pinjaman. Untuk mencari bunga adalah Besar pinjaman dikali Lama pinjaman

dikali Suku Bunga. Nilai Pengembalian adalah Besar pinjaman ditambah Bunga.

Cara penyelesaiannya :

Input : [ No_Nasabah, Nama, Alamat, BP, LP, SB ]

Proses : [ Pengulangan sampai dengan 3 Kali

B = BP * LP * SB

NP = BP + B ]

Output : [ No_Nasabah, Nama, Alamat, BP, LP, SB, B, NP ]

Algoritma Name: < Data_Kredit_Nasabah_Bank >

Var

No_Nasabah, Nama, Alamat : String;

LP, I : Integer;

BP : Longint;

B, SB, NP : Real;

Begin

For I=1 to 3 do

Begin

Read [ Input ]

B = BP * LP * SB;

NP = BP + B;

End

End For

Write [ Output ]

End

Page 14: Modul Algoritma dan Pemrograman

14

BAGIAN 4

ARRAY dan MATRIKS

A. Pengenalan Matriks dan Array

Matriks adalah struktur penyimpanan data di dalam memori utama yang setiap individu

elemennya diacu dengan menggunakan dua buah indeks (yaitu indeks baris dan indeks

kolom). Array adalah matriks satu dimensi dengan satu buah indeks.

Konsep umum matriks :

1. Kumpulan elemen yang bertipe sama. Tipe elemen dapat berupa tipe dasar (integer,

real, boolean, char, dan string), atau tipe terstruktur seperti record.

2. Setiap elemen data dapat diakses secara langsung jika indeksnya (baris dan kolom)

diketahui, indeks menyatakan posisi relatif di dalam kumpulannya

3. Merupakan struktur data paling statis, artinya jumlah elemennya sudah dideklarasikan

terlebih dahulu dan tidak dapat diubah selama pelaksanaan program

Jika indeks baris dinyatakan dengan i dan indeks kolom dinyatakan dengan j, maka notasi

algoritmik untuk mengacu elemen pada baris i dan kolom j adalah :

Nama_matriks[i,j]

Contoh Matris M dengan notasi setiap elemen-elemennya dalam dilihat pada gambar :

1 2 3

1

2

3

M[1,1] M[1,2] M[1,3]

M[2,1] M[2,2] M[2,3]

M[3,1] M[3,2] M[3,3]

B. Operasi Matriks

Pada umumnya algoritma operasi matriks adalah memanipulasi elemen-elemen matriks.

Operasi matriks adalah proses beruntun (sekuensial). Setiap elemmen matriks dikunjungi dan

dilakukan aksi terhadap elemen tersebut. Setiap matriks yang akan digunakan perlu

didefiniskan dahulu (deklarasi matriks) :

Const Nbar = 20

Const Nkol = 20

Page 15: Modul Algoritma dan Pemrograman

15

Karena secara logic elemen matriks disusun dalam susunan baris dan kolom, maka

pemrosesan matriks dilakukan per baris dan per kolom. Karena ada dua buah indeks, maka

kita harus memutuskan indeks mana yang nilainya tetap selama indeks lain dijalankan,. Cara

umum adalah menelusuri matriks baris per baris, yang pada setiap baris melakukan proses

terhadap elemen pada setiap kolomnya.

Contoh :

1. Menulis Matriks

DEKLARASI

i : integer {indeks baris}

j : integer {indeks kolom}

ALGORITMA

For i =1 to Nbar do

For j=1 to Nko do

Write(M(i,j))

EndFor

Endfor

2. Penjumlahan dua matriks

Penjumlahan dua matriks A dan B menghasilkan matriks C hanya dapat dilakukan bila

ukuran matriks A sama dengan matriks B.

ALGORITMA

For i =1 to Nbar do

For j=1 to Nko do

C[i,j] = A[i,j] + B[i,j]

EndFor

Endfor

3. Mencari elemen terbesar di dalam matriks

Elemen maksimum matriks dapat dicari dengan menelusuri semua elemen matriks, mulai

dari elemen A[1,1] hingga A[Nbar, Nkol].

ALGORITMA

Maks = -9999 {diasumsikan -9999 sebagai nilai maksimum sementara}

For i =1 to Nbar do

For j=1 to Nkol do

If A[i,j] >> Maks then

Maks = A[i,j]

endif

EndFor

Endfor

Page 16: Modul Algoritma dan Pemrograman

16

BAGIAN 5

PENCARIAN

A. Pencarian Beruntun

Proses membandingkan nilai yang dicari dengan setiap elemen array satu per satu secara

beruntun sampai nilai yang dicari ditemukan atau semua elemen telah diperiksa. Contoh:

17 3 19 18 7 4

0 1 2 3 4 5

- Mencari nilai 18

Nilai 18 ditemukan pada posisi ke-3 setelah memeriksa elemen: 17,3,19,18

- Mencari nilai 45

Nilai 45 tidak ditemukan setelah memeriksa elemen: 17,3,19,18,7,4

1. Algoritma

2. Visual C++ Windows Form

a. Program

1) Deklarasi variabel (bagian namespace)

2) Menampilkan data ke listBox (bagian Form1_Load)

for(i=0;i<=n-1;i++){

listBox1->Items->Add(data[i]);

}

int i,x;

int n=6;

int data[6]={17,3,19,18,7,4};

bool ketemu;

int i; //posisi (index) elemen array

int x; //nilai yang dicari

int n; //jumlah elemen array

int data[6]={17,3,19,18,7,4};

boolean ketemu;

read x;

i=0;

ketemu=false;

while ((i<=n-1) and (ketemu==false)){ //n-1:posisi maksimum

if(data[i]==x){

ketemu=true;

}

else{

i++;

}

}

Page 17: Modul Algoritma dan Pemrograman

17

3) Pencarian beruntun(bagian button1_Click)

b. Hasil

3. Latihan

a. Buatlah algoritma dan program visual c++ windows form untuk pencarian

beruntun pada array dari elemen posisi akhir sampai dengan posisi ke-0.

B. Pencarian Bagi Dua

Pencarian bagi dua hanya bisa digunakan pada array yang memiliki data yang sudah

terurut.

x = Int32::Parse(textBox1->Text);

i = 0;

ketemu = false;

while((i<=n-1) & (ketemu==false)){

if(data[i]==x){

ketemu=true;

MessageBox::Show("Angka "+x+" pada index ke-"+i);

}

else{

i++;

}

}

if(ketemu==false){

MessageBox::Show("Angka "+x+" tidak ditemukan");

}

Page 18: Modul Algoritma dan Pemrograman

18

Contoh:

Array di bawah ini memiliki data yang sudah terurut menurun. Nilai yang dicari adalah 18.

Indeks yang digunakan:

- i adalah indeks terkecil/kiri.

- j adalah indeks terbesar/kanan.

- k adalah indeks elemen tengah.

19 18 17 7 4 3

i=0 1 2 3 4 j=5

Langkah-langkah:

- Jumlahkan i dan j lalu dibagi 2 untuk mendapatkan nilai k.

i=0 dan j=5 maka k=(0+5)/2=2

- Kemudian bandingkan elemen indeks k dengan nilai yang dicari.

Array[2]==18? Tidak

- Jika nilai yang dicari ditemukan, pencarian berhenti. Jika tidak, pembandingan

dilanjutkan untuk menentukan apakah pencarian dilakukan pada bagian kanan atau kiri.

Array[2]>18? Tidak

- Jika iya, pencarian dilakukan pada bagian kanan (i=k+1 dan j tetap). Jika tidak, pencarian

dilakukan pada bagian kiri (i tetap dan j=k-1).

i=0 dan j=2-1=1

- Ulangi langkah 1-3 hingga nilai ditemukan atau i>j (nilai tidak ditemukan).

k=(0+1)/2=0

Array[0]==18? Tidak

Array[0]>18? Iya

i=0+1=1 dan j=1

k=(1+1)/2=1

Array[0]==18? Iya (Data ditemukan)

Page 19: Modul Algoritma dan Pemrograman

19

1. Algoritma

2. Visual C++ Windows Form

a. Program

1) Deklarasi variabel (bagian namespace)

2) Menampilkan data ke listBox (bagian Form1_Load)

3) Pencarian bagi dua (bagian button1_Click)

for(i=0;i<=n-1;i++){

listBox1->Items->Add(data[i]);

}

int i,j,k,x;

int n=6;

int data[6]={3,4,7,17,18,19};

bool ketemu;

int i; //index terkecil(kiri)

int j; //index terbesar (kanan)

int k; //index elemen tengah

int x; //nilai yang dicari

int n; //jumlah elemen array

int data[6]={19,18,17,7,4,3};

boolean ketemu;

read x;

i=0;

j=n-1;

ketemu=false;

while ((i<=j) and (ketemu==false)){

k=(i+j)/2;

if(data[k]==x){

ketemu=true;

}

else{

if(data[k]>x){

i=k+1;

}

else{

j=k-1;

}

}

}

Page 20: Modul Algoritma dan Pemrograman

20

b. Hasil

3. Latihan

Buatlah algoritma dan program visual c++ windows form untuk pencarian bagi dua

pada array dengan data terurut menaik.

x = Int32::Parse(textBox1->Text);

i = 0;

j = n-1;

ketemu = false;

while((i<=j) & (ketemu==false)){

k=(i+j)/2;

if(data[k]==x){

ketemu=true;

MessageBox::Show("Angka "+x+" pada index ke-"+i);

}

else{

if(data[k]> x){

i=k+1;

}

else{

j=k-1;

}

}

}

if(ketemu==false){

MessageBox::Show("Angka "+x+" tidak ditemukan");

}

Page 21: Modul Algoritma dan Pemrograman

21

BAGIAN 6

PENGURUTAN

A. Pengurutan Bubble Sort (Apung)

Pengurutan ini menggunakan prinsip pengapungan. Jika ingin array terurut menaik, nilai

paling kecil diangkat ke “atas” (kiri) melalui proses pertukaran. Langkah-langkah

pengurutan apung menaik:

- Untuk setiap i=0,1,2,...,lastIndex-1, lakukan:

o Mulai dari elemen k=lastIndex,lastIndex-1,..,i+1, lakukan:

Bandingkan array[k] dengan array[k-1]

Pertukarkan array[k] dengan array[k-1] jika array[k]< array[k-1]

1. Algoritma

2. Visual C++ Windows Form

a. Program

1) Deklarasi variabel (bagian namespace)

2) Memasukkan data (bagian button1_Click)

3) Pengurutan apung menaik (bagian button2_Click)

int x = Int32::Parse(textBox1->Text);

listBox1->Items->Add(x);

lastIndex++;

data[lastIndex]=x;

int data[100];

int lastIndex=-1;

int i; //pencacah untuk jumlah langkah

int k; //pencacah untuk pengapungan tiap langkah

int lastIndex;

int data[100];

int temp; //variabel penyimpanan data sementara

for(i=0;i<=lastIndex-1;i++){

for(k=lastIndex; k>=i+1;k--){

if(data[k]<data[k-1]){

temp=data[k];

data[k]=data[k-1];

data[k-1]=temp;

}

}

}

Page 22: Modul Algoritma dan Pemrograman

22

b. Hasil

3. Latihan

a. Buatlah algoritma dan program visual c++ windows form untuk pengurutan

apung menurun (dari besar ke kecil).

B. Pengurutan Seleksi

Pengurutan ini disebut pengurutan seleksi karena memilih elemen maksimum/minimum

dari array kemudian ditempatkan di awal atau di akhir array. Langkah-langkah

pengurutan seleksi maksimum menaik:

- Untuk setiap pass i=0,1,2,…,lastIndex-1, lakukan:

o Mulai dari elemen k=lastIndex,lastIndex-1,..,i+1, lakukan:

Cari elemen terbesar (maks) mulai dari elemen ke-0 sampai elemen ke-

lastIndex

Pertukarkan maks dengan elemen ke-lastIndex

Kurangi lastIndex satu (karena elemen ke-lastIndex sudah terurut)

listBox2->Items->Clear();

int i,k,temp;

for(i=0;i<=lastIndex-1;i++){

for(k=lastIndex; k>=i+1;k--){

if(data[k]<data[k-1]){

temp=data[k];

data[k]=data[k-1];

data[k-1]=temp;

}

}

}

for(i=0;i<=lastIndex;i++){

listBox2->Items->Add(data[i]);

}

Page 23: Modul Algoritma dan Pemrograman

23

1. Algoritma

2. Visual C++ Windows Form

a. Program

1) Deklarasi variabel (bagian namespace)

2) Memasukkan data (bagian button1_Click)

3) Pengurutan seleksi maksimum menaik (bagian button2_Click)

listBox2->Items->Clear();

int i,j,imaks,temp;

for(i=lastIndex;i>=1;i--){

imaks=0;

for(j=1; j<=i;j++){

if(data[j]>data[imaks]){

imaks=j;

}

temp=data[imaks];

data[imaks]=data[i];

data[i]=temp;

}

}

for(i=0;i<=lastIndex;i++){

listBox2->Items->Add(data[i]);

}

int x = Int32::Parse(textBox1->Text);

listBox1->Items->Add(x);

lastIndex++;

data[lastIndex]=x;

int data[100];

int lastIndex=-1;

int i; //pencacah untuk jumlah langkah

int j; //pencacah untuk mencari nilai maksimum

int imaks;

int lastIndex;

int data[100];

int temp; //variabel penyimpanan data sementara

for(i=lastIndex;i>=1;i--){

imaks=0;

for(j=1; j<=i;j++){

if(data[j]>data[imaks]){

imaks=j;

}

temp=data[imaks];

data[imaks]=data[i];

data[i]=temp;

}

}

Page 24: Modul Algoritma dan Pemrograman

24

b. Hasil

3. Latihan

a. Buatlah algoritma dan program visual c++ windows form untuk pengurutan:

- Seleksi maksimum menurun

- Seleksi minimum menaik

- Seleksi minimum menurun

C. Pengurutan Sisip

Pengurutan sisip dilakukan dengan cara menyisipkan elemen array pada posisi yang

tepat. Pencarian posisi yang tepat dilakukan dengan menyisir array. Selama penyisiran

dilakukan pergeseran elemen array.

Langkah-langkah pengurutan sisip menaik:

- Untuk setiap pass i=1,2,…,lastIndex, lakukan:

o y = data[i]

o sisipkan y pada tempat yang sesuai di antara data[0]…data[i]

Page 25: Modul Algoritma dan Pemrograman

25

1. Algoritma

2. Visual C++ Windows Form

a. Program

1) Deklarasi variabel (bagian namespace)

2) Memasukkan data (bagian button1_Click)

int x = Int32::Parse(textBox1->Text);

listBox1->Items->Add(x);

lastIndex++;

data[lastIndex]=x;

int data[100];

int lastIndex=-1;

int i; //pencacah untuk jumlah langkah

int j; //pencacah untuk penelusuran larik

int y; //variabel bantu agar data[i] tidak ditimpa selama pergeseran

int lastIndex;

int data[100];

boolean ketemu;

for(i=1;i<=lastIndex;i++){

y=data[i];

j=i-1;

ketemu=false;

while((j>=0)&(ketemu==false)){

if(y<data[j]){

data[j+1]=data[j];

j--;

}

else{

ketemu=true;

}

}

data[j+1] = y;

}

Page 26: Modul Algoritma dan Pemrograman

26

3) Pengurutan sisip menaik (bagian button2_Click)

b. Hasil

3. Latihan

Buatlah algoritma dan program visual c++ windows form untuk pengurutan sisip

menurun.

listBox2->Items->Clear();

int i,j,y;

bool ketemu;

for(i=1;i<=lastIndex;i++){

y=data[i];

j=i-1;

ketemu=false;

while((j>=0)&(ketemu==false)){

if(y<data[j]){

data[j+1]=data[j];

j--;

}

else{

ketemu=true;

}

}

data[j+1] = y;

}

for(i=0;i<=lastIndex;i++){

listBox2->Items->Add(data[i]);

}

Page 27: Modul Algoritma dan Pemrograman

27

BAGIAN 7

LATIHAN

Restoran Kentang

Buatlah sebuah restoran kentang dimana :

1. Restoran bisa dibuka apabila kentang digudang tidak lebih sedikit dari 2 Ton.

2. Pemesanan dapat dilakukan apabila telah terdapat kentang yang terkupas sebesar 50

Kg.

3. Kentang yang sudah dikupas diurut dengan kondisi

a. Besar ke kecil

i. Menggunakan algoritma bubble sort.

ii. Menggunakan algoritma seleksi.

iii. Menggunakan algoritma sisip.

b. Kecil ke besar

i. Menggunakan algoritma bubble sort.

ii. Menggunakan algoritma seleksi.

iii. Menggunakan algoritma sisip.

4. Apabila tamu datang dicari bangku yang kosong, dengan menggunakan :

a. Algoritma pencarian beruntun

b. Algoritma bagi dua

5. Cara pengambilan kentang adalah

1. Kentang yang diambil adalah kentang yang beratnya mendekati dari kentang yang

diminta.

2. Kentang diambil dari atas

3. Kentang diambil dari bawah.

6. Silahkan tambahkan kondisi yang dianggap perlu tanpa mengurangi kondisi

sebelumnya.