Modul Algoritma dan Pemrograman
description
Transcript of 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
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
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.
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.
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.
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
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.
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;
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 >
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
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 :
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 :
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
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
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
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++;
}
}
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");
}
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)
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;
}
}
}
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");
}
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;
}
}
}
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]);
}
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;
}
}
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]
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;
}
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]);
}
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.