Modul Algoritma Dan Pemrograman
Modul Algoritma Dan Pemrograman
Oleh :
Faisal Khalid
Annisa Permatasari
Vivi Mulya Ningsih
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
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 seharihari, 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)
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>
- # include <conio.h>
membersihkan layar.
4
- # include <iomanip.h>
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.
D. Operator
Operator adalah simbol yang biasa dilibatkan dalam program untuk melakukan sesuatu
operasi atau manipulasi.
5
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
Operator
Deskripsi
+
Penjumlahan ( Add )
Pengurangan ( Substract )
*
Perkalian ( Multiply )
Contoh
m+n
mn
m*n
%
/
-
m%n
m/n
-m
Arti
Sama dengan (bukan assignment)
Tidak sama dengan
Lebih besar
Lebih kecil
Lebih besar atau sama dengan
<=
Contoh
x= =y Apakah x sama dengan y
x != y Apakah x tidak sama dengan y
x > y Apakah x lebih besar dari y
x < y Apakah x lebih kecil dari y
dengan x >= y Apakah x lebih dari sama
dengan y
x <= y Apakah x kurang dari sama
dengan y
Contoh
M && n
M || n
!m
6
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.
BAGIAN 2
PERCABANGAN
A. IfElse
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;
8
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
Kondisi -2 :
Statement
Kondisi -3 :
Statement
Kondisi -n :
Statement
End Case
1
2
3
n
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 >
9
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
10
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. DoWhile / Repeat...until
Proses pengulangan kebalikan dari While do. Dan tidak perlu menggunakan Begin dan End.
Syntax penulisannya :
11
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 :
12
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
B, SB, NP
: Longint;
: Real;
Begin
For I=1 to 3 do
Begin
Read [ Input ]
B = BP * LP * SB;
NP = BP + B;
End
End For
Write [ Output ]
End
13
BAGIAN 4
ARRAY dan MATRIKS
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
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
14
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
15
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
0
3 19 18
1 2 3
7
4
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
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++;
}
}
Program
1) Deklarasi variabel (bagian namespace)
int i,x;
int n=6;
int data[6]={17,3,19,18,7,4};
bool ketemu;
16
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.
Contoh:
Array di bawah ini memiliki data yang sudah terurut menurun. Nilai yang dicari adalah 18.
Indeks yang digunakan:
-
19
i=0
18
1
17
2
7
3
4
3
4 j=5
Langkah-langkah:
-
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)
18
1. Algoritma
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;
}
}
}
Program
1) Deklarasi variabel (bagian namespace)
int i,j,k,x;
int n=6;
int data[6]={3,4,7,17,18,19};
bool ketemu;
19
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");
}
b.
Hasil
3. Latihan
Buatlah algoritma dan program visual c++ windows form untuk pencarian bagi dua
pada array dengan data terurut menaik.
20
BAGIAN 6
PENGURUTAN
1. Algoritma
int
int
int
int
int
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;
}
}
}
Program
1) Deklarasi variabel (bagian namespace)
int data[100];
int lastIndex=-1;
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]);
}
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:
-
Cari elemen terbesar (maks) mulai dari elemen ke-0 sampai elemen kelastIndex
1. Algoritma
int
int
int
int
int
int
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;
}
}
Program
1) Deklarasi variabel (bagian namespace)
int data[100];
int lastIndex=-1;
23
b.
Hasil
3. Latihan
a.
Buatlah algoritma dan program visual c++ windows form untuk pengurutan:
-
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.
y = data[i]
24
1. Algoritma
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;
}
Program
1) Deklarasi variabel (bagian namespace)
int data[100];
int lastIndex=-1;
25
b.
Hasil
3. Latihan
Buatlah algoritma dan program visual c++ windows form untuk pengurutan sisip
menurun.
26
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.
27