http://blog.uad.ac.id/afandi/2008/11/06/binary-search/
Algoritma Binary Search
Jika kita mempunyai sebuah file dari record-record yang telah dijalankan,
kita dapat melanjutkan menghapuskan memory pemeriksaan yang diperlukan
untuk mendapatkan kembali sebuah record yang telah dipakai oleh suatu teknik
binary search.
Suatu binary search dibandingkan dengan kunci dari pencarian record dengan
record tengah dari sebuah file. Kemudian masing-masing pencarian record
yang telah ditempatkan atau setengah dari file yang telah dihilangkan dengan
pertimbangan yang lebih lanjut. Dalam kasus yang sebelumnya, proses pemban-
dingan dari record tengah dilanjutkan dalam record-record selanjutnya.
Jika kita harus menghilangkan bagian atas dari sebuah file termasuk
record yang telah dibandingkan berlawanan. Selanjutnya jika kita harus
menghilangkan bagian bawah dari sebuah file termasuk record yang telah
dibandingkan berlawanan. Dalam pengulangan proses dari pembandingan
berlawanan dari record tengah, kita akhirnya akan menempatkan record yang
kita inginkan atau menentukan bahwa itu tidak ada dalam file ketika tidak
ada record-record selanjutnya.
Algorithm 2.1
Binary Search.
Terendah = 1.
Tertinggi = n.
While terendah < tertinggi do.
Tengah = (terendah + tertinggi) / 2.
if nilai kunci = nilai (tengah). Then data ditemukan.
Else if nilai kunci > nilai (tengah). Then terendah = tengah + 1.
Else tertinggi = tengah - 1.
end
end
end
Mari kita amati sebuah contoh dari suatu binary search yang telah disajikan terhadap suatu file dari record-record yang telah disusun secara urut. Dalam contoh ini, kita mencari record-record dengan kunci 39, dimana berindikasikan record yang terbaru yang telah dibandingkan berlawanan dari tanda kurung besar membatasi record yang masih dibawah pertimbangan.
Contoh 1
Di bawah ini adalah kunci–kunci carilah kunci 39 dengan mengunakan algorithm Binary Search.
[13, 16, 18, 27, 28, 29, 38, 39, 53].
1 2 3 4 5 6 7 8 9
File ini dinamakan File Sequential (secara berurutan).
Cara penyelesaian.
Bila di cari kunci 39 maka ;
Bila terendah = 1, dan tertinggi = 9,
maka 1 + 9 = 10 , lalu 10 / 2 = 5.
1. Nomor urut 5, adalah kunci 28 , tapi 28 < 39,
[13, 16, 18, 27, 28, 29, 38, 39, 53].
maka terendah = 5 , dan tertinggi = 9,
maka : 5 + 9 = 14
14 / 2 = 7.
2. Nomor urut 7 adalah 38 , tapi 38 < 39,
[13, 16, 18, 27, 28, 29, 38, 39, 53].
maka terendah = 8, dan tertinggi = 9, (karena mid + 1 jadi 7+1=8)
maka : 8 + 9 = 17
17 / 2 = 8,5 => 8,5 ≈ 8
Note: kl mengambil kebawah, haruskonsisten untuk jawaban selanjutnya jika ada kasus yg sama juga harus kebawah
3. Nomor urut 8 adalah kunci 39 , dimana kunci 39 = 39.
[13, 16, 18, 27, 28, 29, 38, 39, 53]
Contoh 2
Ada 2000 kunci Mahasiswa AKAKOM dengana mengunakan Algoritma Binary Search. Carilah kunci 1345
Cara penyelesaian.
1. pergi ke tengah yaitu ; record dengan kunci 1000.
2. pergi ke record tengah pada separuh bagian ke-dua yaitu ; record sementara (1001+2000)/2 ketemu 1500, maka Record yang di cari ada diantara 1001- 1500.
3. pergi ke bagian tengah antara (1001+1499)/2, yaitu ; record 1250. Record yang dicari 1345 > 1250 berarti ada di antara 1250 - 1499.
4. pergi ke bagian tengah antara (1251+1499)/2 , yaitu ; 1375. Record yang di cari 1345 < 1375 , berarti ada di antara 1251 – 1274.
5. pergi ke bagian tengah antara (1251+1374)/2 atau 1312,5. Record yang di cari 1345 > 1312 , berarti ada di antara 1313 – 1374.
6. pergi ke-bagian tengah antara (1313+1374)/2 atau 1343,5. Record yang di cari 1345 > 1343, berarti ada di antara 1344 –1374.
7. pergi ke-bagian tengah antara (1344+1374)/2 atau 1359. Record yang di cari 1345 < 1359, berarti ada di antara 1334 – 1358.
8. pergi ke-bagian tengah antara (1344+1358)/2 atau 1351. Record yang di cari 1345 < 1351, berarti ada di antara 1344 – 1350.
9. pergi ke-bagian tengah antara (1344+1350)/2, atau 1347. Record yang di cari 1345 < 1347, berarti ada di antara 1344 – 1346.
10. pergi ke bagian tengah antara (1344+1346)/2, atau 1345. Record yang di cari1345 = 1345, ketemu.
Contoh 3
Dari data berikut gunakanlah metode binary search
Cari nomer kunci dari 232 , sedangkan jumlah seluruh mahasiswa sebanyak 700 orang.
Pembahasaan :
(1 + 700)/2 = 350
angka 350 lebih besar dari 232, maka kita harus mencarinya kembali.
(1+ 349)/2 = 175
angka 175 lebih kecil dari 232, maka kita akan mencari kembali
(176 + 349)/2 = 262
angka 362 lebih besar dari 232, maka kita akan melakukan pencarian lagi.
(176 + 261)/2 = 218
angka 218 lebih kecil dari 232 maka dicari lagi
(219 + 261)/2 = 240
angka 240 lebih besar dari 232, maka akan dicari lagi
(219 + 239)/2 = 229
angka 229 lebih kecil dari 232, maka akan dicari lagi
(230 + 239)/2 = 234
angka 234 lebih besar dari 232, maka akan dicari lagi
(230 + 233)/2 = 231
angka 231 lebih kecil dari 232, maka
(232 + 233)/2 = 232
sudah ditemukan
contoh 4
Di bawah ini adalah kunci–kunci carilah kunci 17 dan 39 dengan mengunakan algorithm Binary Search.
[13, 16, 18, 27, 28, 29, 38, 39, 53].
Jawab :
File ini dinamakan File Sequential (secara berurutan).
Cara penyelesaian.
Bila di cari kunci 39 maka
Bila terendah = 1, dan tertinggi = 9,
maka 1 + 9 = 10 , lalu 10 / 2 = 5
1· Nomor urut 5, adalah kunci 28 , tapi 28 < 39,
[13, 16, 18, 27, 28, 29, 38, 39, 53].
maka terendah = 6, dan tertinggi = 9
maka 6 + 9 = 15 lalu 15 / 2 = 7
2· Nomor urut 7 adalah 38 , tapi 38 < 39,
[13, 16, 18, 27, 28, 29, 38, 39, 53].
maka terendah = 8, dan tertinggi = 9,
maka 8 + 9 = 17, lalu 17 / 2 = 8.
3· Nomor urut 8 adalah kunci 39 , dimana kunci 39 = 39.
[13, 16, 18, 27, 28, 29, 38, 39, 53]
Contoh 5
Dari daftar kunci berikut
2,5,11,12,14,19,30,32,41,42,47,49,51,52
Dicari suatu kunci 12 dan 42, tentukan pencarian tersebut dengan metode binary search
Cara penyelesaian.
Jika kita hendak mencari suatu kunci dari daftar berikut maka terlebih dahulu kita harus mengetahui daftar tertinggi dan daftar terendah jadi langkah pertama yang harus di ambil, yaitu :
1· mencari kunci dari angka 12 maka :
nilai terendah = 1 dan nilai tertinggi = 14
maka 1 + 14 = 15, lalu 15/2 = 7,5
2· karena nomer urut 7 adalah 30, maka 30 > 12
[2, 5, 11, 12, 14, 19, 30, 32, 41, 42, 47, 49, 51, 52,]
maka didapat nilai terendah = 1, dan nilai tertinggi adalah = 7
sehingga didapat : 1 + 6 = 7, lalu 7 / 2 = 3.
3· karena nomer urut dari nomer 3 adalah 11, maka 11 < 12
[2, 5, 11, 12, 14, 19, 30, 32, 41, 42, 47, 49, 51, 52,]
maka didapat nilai terendah = 4, dan nilai tertinggi adalah = 6
sehingga didapat : 4 + 6 = 10, lalu 10 / 2 = 5.
4· karena nomer urut dari nomer 5 adalah 14, maka 14 > 12
[2, 5, 11, 12, 14, 19, 30, 32, 41, 42, 47, 49, 51, 52,]
maka didapat nilai terendah = 4, dan nilai tertinggi adalah = 4
sehingga didapat : 4 + 4 = 8, lalu 8 / 2 = 4.
nomer 4 adalah kunci dari nomer 12, dimana kunci 12 = 12. ketemu
Untuk mencari kunci nomer 42 dengan methode Binary Search, maka :
1. dari daftar dibawah ini dapat kita lihat bahwa :
[2, 5, 11, 12, 14, 19, 30, 32, 41, 42, 47, 49, 51, 52,]
didapat nilai terendah = 1, dan nilai tertinggi = 14
hingga di dapat : 1 + 14 = 15, lalu 15 / 2 = 7,5
2. karena nomer urut 7 adalah 30, dan 30 < 42
[2, 5, 11, 12, 14, 19, 30, 32, 41, 42, 47, 49, 51, 52,]
maka di dapat nilai terendah = 8, dan nilai tertinggi = 14
jadi 8 + 14 =22, lalu 22/2 =11
3. karena nomer urut 11 adalah 47, dan 47 > 42
[2, 5, 11, 12, 14, 19, 30, 32, 41, 42, 47, 49, 51, 52,]
maka di dapat nilai terendah = 8, dan nilai tertinggi = 10
jadi 8 + 10 =18, lalu 18/2 =9
4. karena nomer urut 9 adalah 41, dan 41 < 42
[2, 5, 11, 12, 14, 19, 30, 32, 41, 42, 47, 49, 51, 52,]
maka di dapat nilai terendah = 10, dan nilai tertinggi = 10
jadi 10 + 10 =20, lalu 20/2 =10
nomer 10 adalah kunci dari nomer 42, dimana kunci 42 = 42, ketemu
Minggu, 30 Mei 2010
ALGORITMA PENCARIAN BINER
mita.staff.gunadarma.ac.id/Downloads/files/.../BINARY-SEARCH.doc - Mirip
ALGORITMA PENCARIAN BINER (BINARY SEARCH)
Pencarian Biner (Binary Search) pada array yang sudah terurut
Pencarian Biner (Binary Search) dilakukan untuk :
♪ memperkecil jumlah operasi pembandingan yang harus dilakukan antara data yang dicari dengan data yang ada di dalam tabel, khususnya untuk jumlah data yang sangat besar ukurannya.
♪ Prinsip dasarnya adalah melakukan proses pembagian ruang pencarian secara berulang-ulang sampai data ditemukan atau sampai ruang pencarian tidak dapat dibagi lagi (berarti ada kemungkinan data tidak ditemukan).
♪ Syarat utama untuk pencarian biner adalah data di dalam tabel harus sudah terurut, misalkan terurut menaik.
ALGORITMA
Kamus
Const N : integer = 8 { misalkan jumlah elemen array maksimum = 8 }
Type A = array [ 1 ..... N ] of integer
Cari, BatasAtas, BatasBawah, Tengah : Integer
Ketemu : boolean
ALGORITMA
Input (cari) { meminta nilai data yang akan dicari}
BatasAtas 1 { indeks array dimulai dari 1 }
BatasBawah N
Ketemu False
While (BatasAtas < BatasBawah) and (not ketemu) do
Tengah (BatasAtas + BatasBawah) div 2
If A [Tengah] = cari then
Ketemu true
Else
If ( A [Tengah] < cari ) then { cari di bagian kanan }
BatasAtas Tengah + 1
Else
BatasBawah Tengah – 1 { cari di bagian kiri }
Endif
Endif
EndWhile
If (ketemu) then
Output ( ‘Data berada di index nomor’, Tengah )
Else Output ( ‘Data tidak ditemukan’ )
Endif
Contoh Nilai-Nilai data yang sudah terurut :
A 2 5 8 12 15 25 37 57
1 2 3 3 5 6 7 8
Kasus 1 : cari = 12
Loop pertama : Tengah = (BatasAtas + BatasBawah) div 2 = (1 + 8) div 2 = 4
A [Tengah] = A [4] = 12, berarti loop pertama data langsung ditemukan
Kasus 2 : cari = 15
Loop pertama : Tengah = (BatasAtas + BatasBawah) div 2 = (1 + 8) div 2 = 4
A [Tengah] = A [4] = 12 < cari = 15, berarti BatasAtas = Tengah + 1 = 4 + 1 = 5
Loop kedua : Tengah = (BatasAtas + BatasBawah) div 2 = (5 + 8) div 2 = 6
A [Tengah] = A [6] = 25 > cari = 15, berarti BatasBawah = Tengah - 1 = 6 - 1 = 5
Loop ketiga : Tengah = (BatasAtas + BatasBawah) div 2 = (5 + 5) div 2 = 5
A [Tengah] = A [5] = 15, berarti setelah loop ketiga, data ditemukan
Kasus 3 : cari = 10
Loop pertama : Tengah = (BatasAtas + BatasBawah) div 2 = (1 + 8) div 2 = 4
A [Tengah] = A [4] = 12 > cari = 10, berarti BatasBawah = Tengah - 1 = 4 - 1 = 3
Loop kedua : Tengah = (BatasAtas + BatasBawah) div 2 = (1 + 3) div 2 = 2
A [Tengah] = A [2] = 5 < cari = 10, berarti BatasAtas = Tengah + 1 = 2 + 1 = 3
Loop ketiga : Tengah = (BatasAtas + BatasBawah) div 2 = (3 + 3) div 2 = 3
A [Tengah] = A [3] = 8, berarti setelah loop ketiga, data tidak ditemukan
Untuk jumlah data sebanyak n, maka proses pembandingan maksimal sebanyak ( log n ) kali. Untuk contoh di atas, jumlah data 8, maka proses pembandingan maksimal sebanyak 3 kali.
ALGORITMA PENCARIAN BINER (BINARY SEARCH)
Pencarian Biner (Binary Search) pada array yang sudah terurut
Pencarian Biner (Binary Search) dilakukan untuk :
♪ memperkecil jumlah operasi pembandingan yang harus dilakukan antara data yang dicari dengan data yang ada di dalam tabel, khususnya untuk jumlah data yang sangat besar ukurannya.
♪ Prinsip dasarnya adalah melakukan proses pembagian ruang pencarian secara berulang-ulang sampai data ditemukan atau sampai ruang pencarian tidak dapat dibagi lagi (berarti ada kemungkinan data tidak ditemukan).
♪ Syarat utama untuk pencarian biner adalah data di dalam tabel harus sudah terurut, misalkan terurut menaik.
ALGORITMA
Kamus
Const N : integer = 8 { misalkan jumlah elemen array maksimum = 8 }
Type A = array [ 1 ..... N ] of integer
Cari, BatasAtas, BatasBawah, Tengah : Integer
Ketemu : boolean
ALGORITMA
Input (cari) { meminta nilai data yang akan dicari}
BatasAtas 1 { indeks array dimulai dari 1 }
BatasBawah N
Ketemu False
While (BatasAtas < BatasBawah) and (not ketemu) do
Tengah (BatasAtas + BatasBawah) div 2
If A [Tengah] = cari then
Ketemu true
Else
If ( A [Tengah] < cari ) then { cari di bagian kanan }
BatasAtas Tengah + 1
Else
BatasBawah Tengah – 1 { cari di bagian kiri }
Endif
Endif
EndWhile
If (ketemu) then
Output ( ‘Data berada di index nomor’, Tengah )
Else Output ( ‘Data tidak ditemukan’ )
Endif
Contoh Nilai-Nilai data yang sudah terurut :
A 2 5 8 12 15 25 37 57
1 2 3 3 5 6 7 8
Kasus 1 : cari = 12
Loop pertama : Tengah = (BatasAtas + BatasBawah) div 2 = (1 + 8) div 2 = 4
A [Tengah] = A [4] = 12, berarti loop pertama data langsung ditemukan
Kasus 2 : cari = 15
Loop pertama : Tengah = (BatasAtas + BatasBawah) div 2 = (1 + 8) div 2 = 4
A [Tengah] = A [4] = 12 < cari = 15, berarti BatasAtas = Tengah + 1 = 4 + 1 = 5
Loop kedua : Tengah = (BatasAtas + BatasBawah) div 2 = (5 + 8) div 2 = 6
A [Tengah] = A [6] = 25 > cari = 15, berarti BatasBawah = Tengah - 1 = 6 - 1 = 5
Loop ketiga : Tengah = (BatasAtas + BatasBawah) div 2 = (5 + 5) div 2 = 5
A [Tengah] = A [5] = 15, berarti setelah loop ketiga, data ditemukan
Kasus 3 : cari = 10
Loop pertama : Tengah = (BatasAtas + BatasBawah) div 2 = (1 + 8) div 2 = 4
A [Tengah] = A [4] = 12 > cari = 10, berarti BatasBawah = Tengah - 1 = 4 - 1 = 3
Loop kedua : Tengah = (BatasAtas + BatasBawah) div 2 = (1 + 3) div 2 = 2
A [Tengah] = A [2] = 5 < cari = 10, berarti BatasAtas = Tengah + 1 = 2 + 1 = 3
Loop ketiga : Tengah = (BatasAtas + BatasBawah) div 2 = (3 + 3) div 2 = 3
A [Tengah] = A [3] = 8, berarti setelah loop ketiga, data tidak ditemukan
Untuk jumlah data sebanyak n, maka proses pembandingan maksimal sebanyak ( log n ) kali. Untuk contoh di atas, jumlah data 8, maka proses pembandingan maksimal sebanyak 3 kali.
Selasa, 25 Mei 2010
Algoritma Divide dan Conquer
mita.staff.gunadarma.ac.id/Downloads/files/14268/Divide%26Conquer.doc
Algoritma Divide dan Conquer
Pemrogram bertanggung jawab atas implementasi solusi. Pembuatan program akan menjadi lebih sederhana jika masalah dapat dipecah menjadi sub masalah - sub masalah yang dapat dikelola.
Penyelesaian masalah dengan komputer berhadapan dengan 4 hal, yaitu :
1. Pemahaman keterhubungan elemen-elemen data yang relevan terhadap solusi secara menyeluruh.
2. Pengambilan keputusan mengenai operasi-operasi yang dilakukan terhadap elemen-elemen data.
3. Perancangan representasi elemen-elemen data di memori sehingga memenuhi kriteria berikut:
a. Memenuhi keterhubungan logik antara elemen-elemen data.
b. Operasi-operasi terhadap elemen-elemen data dapat dilakukan secara mudah dan efisien.
4. Pengambilan keputusan mengenai mengenai bahasa pemrograman terbaik untuk menerjemahkan solusi persoalan menjadi program.
STRATEGI DIVIDE DAN CONQUER
Metode
Strategi Divide dan Conquer memecah masalah menjadi submasalah-submasalah independen yang lebih kecil sehingga solusi submasalah-submasalah dapat diperoleh secara mudah, solusi submasalah-submasalah digabung menjadi solusi seluruh masalah.
Skema umum algoritma divide dan conquer
Procedure DNC ( i,j : integer )
Var K : integer ;
If SMALL (i,j) then SOLVE (i,j)
Else begin
K : = DIVIDE (i,j)
COMBINE (DNC(i,k),DNC(k+1,j))
End if
Keterangan :
1. SMALL adalah fungsi yang mengirim BOOLEAN, menentukan apakah ukuran telah cukup kecil sehingga solusi dapat diperoleh. Ukuran dinyatakan sebagai telah berukuran kecil bergantung masalah.
2. DIVIDE adalah fungsi membagi menjadi 2 bagian pada posisi K. Biasanya bagian berukuran sama.
3. COMBINE adalah fungsi menggabungkan solusi X dan Y submasalah. Solusi diperoleh dengan memanggil prosedur rekursif DNC.
Jika ukuran kedua submasalah sama, waktu komputasi DNC dideskripsikan hubungan rekuren berikut :
T(n) = g (n), n kecil
2 T (n/2) + f (n), selainnya
dimana :
• T(n) adalah waktu untuk DNC dengan n masukan,
• g(n) adalah waktu komputasi jawaban secara langsung untuk masukan kecil dan
• f(n) adalah waktu COMBINE.
Untuk algoritma divide dan conquer yang menghasilkan submasalah-submasalah dengan tipe masalah yang sama dengan masalah awal, sangat alami untuk mendeskripsikan algoritma secara rekursi. Kemudian untuk meningkatkan efisiensi dilakukan penerjemahan menjadi bentuk iterasi.
Pemakaian teknik Divide dan Conquer banyak digunakan dalam menyelesaikan berbagai macam persoalan, antara lain :
1. Searching
2. Sorting
Binary Search (Pencarian Biner) dapat dilakukan jika data sudah dalam keadaan urut. Dengan kata lain, apabila data belum dalam keadaan urut, pencarian biner tidak dapat dilakukan. Dalam kehidupan sehari-hari, sebenarnya kita juga sering menggunakan pencarian biner. Misalnya saat ingin mencari suatu kata dalam kamus.
Prinsip dari pencarian biner dapat dijelaskan sebagai berikut :
1. Mula-mula diambil posisi awal = 1 dan posisi akhir = N
2. Cari posisi data tengah dengan rumus (posisi awal + posisi akhir) / 2
3. Data yang dicari dibandingkan dengan data tengah.
4. Jika lebih kecil, proses dilakukan kembali tetapi posisi akhir dianggap sama dengan posisi tengah – 1.
5. Jika lebih besar, proses dilakukan kembali tetapi posisi awal dianggap sama dengan posisi tengah + 1.
6. Demikian seterusnya sampai data tengah sama dengan yang dicari.
Untuk lebih jelasnya, perhatikan contoh berikut. Misalkan kita ingin mencari 17 pada sekumpulan data berikut :
3
9
11
12
15
17
23
31
35
awal tengah akhir
1. Mula–mula dicari data tengah, dengan rumus (1+ 9) / 2 = 5.
2. Berarti data tengah adalah data ke-5, yaitu 15.
3. Data yang dicari, yaitu 17, dibandingkan dengan data tengah ini.
4. Karena 17 > 15, berarti proses dilanjutkan tetapi kali ini posisi awal dianggap sama dengan posisi tengah + 1 atau 6.
3
9
11
12
15
17
23
31
35
awal tengah akhir
1. Data tengah yang baru didapat dengan rumus (6 + 9) / 2 = 7. Berarti data tengah yang baru adalah data ke-7, yaitu 23.
2. Data yang dicari, yaitu 17 dibandingkan dengan data tengah ini.
3. Karena 17 < 23, berarti proses dilanjutkan tetapi kali ini posisi akhir dianggap sama dengan posisi tengah – 1 atau 6.
3
9
11
12
15
17
23
31
35
awal = akhir
1. Data tengah yang baru didapat dengan rumus (6 + 6) / 2 = 6. Berarti data tengah yang baru adalah data ke-6, yaitu 17.
2. Data yang dicari dibandingkan dengan data tengah ini dan ternyata sama. Jadi data ditemukan pada indeks ke-6.
3. Bagaimana jika data yang dicari tidak ada, misalnya 16?
4. Pencarian biner ini akan berakhir jika data ditemukan atau posisi awal lebih besar dari posisi akhir.
5. Jika posisi awal sudah lebih besar daripada posisi akhir berarti data tidak ditemukan.
Untuk lebih jelasnya perhatikan proses pencarian 16 pada data di atas. Prosesnya hampir sama dengan pencarian 17. Tetapi setelah posisi awal = posisi akhir = 6, proses masih dilanjutkan lagi dengan posisi awal = 6 dan posisi akhir = 5
3
9
11
12
15
17
23
31
35
akhir awal
Disini dapat dilihat bahwa posisi awal lebih besar daripada posisi akhir, yang artinya data tidak ditemukan.
Secara umum, algoritma pencarian biner dapat dituliskan sebagai berikut :
1. l ← 1.
2. r ← N.
3. ketemu ← false.
4. selama ( l < = r ) dan (not ketemu) kerjakan baris 5 sampai dengan 8.
5. m ← ( l + r ) / 2
6. Jika ( Data [m] = x ) maka ketemu ← true.
7. Jika ( x < Data [m] ) maka r ← m – 1.
8. Jika ( x > Data [m] ) maka l ← m + 1.
9. If (ketemu) maka m adalah indeks dari data yang dicari, jika tidak data tidak ditemukan.
Berikut ini adalah contoh fungsi untuk mencari data menggunakan pencarian biner.
Function BinarySearch (x: word) : integer;
var
l, r, m : word;
ketemu : boolean;
begin
l : = 1;
r : = N;
ketemu : = false;
while (1 <= r ) and ( not ketemu ) do
begin
m : = (1 + r ) div 2;
if (Data [m] = x ) then
Ketemu := true
else if (x < Data [m] ) then
r : = m – 1
else
l : = m + 1;
end;
if ( ketemu ) then
BinarySearch : = m
else
BinarySearch : = -1;
end;
Fungsi di atas akan mengembalikan indeks dari data yang dicari. Apabila data tidak ditemukan, maka yang yang dikembalikan adalah –1.
Jumlah pembandingan minimum pada pencarian biner adalah 1 kali, yaitu bila data yang dicari tepat berada di tengah-tengah. Jumlah pembandingan maksimum yang dilakukan dengan pencarian biner dapat dicari dengan rumus logaritma, yaitu : C = ²log (N)
Metode Quick atau yang sering disebut juga metode partisi diperkenalkan pertama kali oleh C. A. R. Hoare pada tahun 1962. Pada metode quick, jarak dari kedua elemen yang ditukarkan dibuat cukup besar dengan tujuan untuk mempertinggi efektivitasnya. Hal ini mengingat metode gelembung yang menggunakan jarak cukup dekat ternyata kurang efektif.
Proses pengurutan dengan metode quick dapat dijelaskan sebagai berikut : mula-mula dipilih data tertentu yang dinamakan pivot, misalnya x. Pivot ini harus diletakkan pada posisi ke-j sedemikian hingga data antara 1 sampai dengan (j – 1) lebih kecil daripada x; sedangkan data pada posisi ke-(j+1) sampai dengan N lebih besar daripada x. Cara pengaturannya adalah menukarkan data di antara posisi 1 sampai dengan (j – 1) yang lebih besar daripada x dengan data di antara posisi (j + 1) sampai dengan N yang lebih kecil daripada x.
Algoritma penyisipan langsung sendiri dapat dituliskan sebagai berikut:
1. x ← Data [( L + R) / 2)].
2. i ← L
3. j ← R
4. Selama ( i < = j ) kerjakan baris 5 sampai dengan 12.
5. Selama ( Data [ i ] < x ) kerjakan i ← i + 1
6. Selama ( Data [ j ] > x ) kerjakan i ← j - 1
7. Jika (i < = j ) maka kerjakan baris 8 sampai dengan 10; jika tidak kerjakan baris 11.
8. Tukar Data [ i ] dengan Data [ j ].
9. i ← i + 1
10. j ← j - 1
11. Jika ( L < j ) kerjakan lagi baris 1 dengan R = j.
12. Jika ( i < R ) kerjakan lagi baris 1 dengan L = i.
Jika suatu barisan yang terdiri dari n elemen yang ditempatkan dalam suatu array dan urutan yang diinginkan adalah urutan yang tidak turun (non decreasing) maka dapat digunakan metode Quick Sort yang dengan teknik Divide and Conquer.
Adapun algoritma Quick Sort tersebut terdiri dari dua prosedur yaitu prosedur PARTITION dan prosedur QUICKSORT. Berikut ini disajikan algoritma Quick Sort yang dimaksud, yaitu :
PROCEDURE QUICKSORT(p,q)
IF p < q then j q + 1
CALL PARTITION(p,j)
CALL QUICKSORT(p,j-1)
CALL QUICKSORT(j+1,q)
END IF
END QUICKSORT
PROCEDURE PARTITION(m,p)
INTEGER m,p,i ; GLOBAL A(m-1,p)
V A(m) ; i m
LOOP
LOOP i i + 1 UNTIL A( i ) > = V REPEAT
LOOP p p - 1 UNTIL A( p ) < = V REPEAT
IF i < p THEN CALL INTERCHANGE (A(i),A(p))
ELSE EXIT
END IF
REPEAT
A(m) A(p)
A(p) V
END PARTITION
Contoh :
Suatu Array A terdiri dari 9 elemen, yaitu :
A(1) = 65 A(4) = 80 A(7) = 60
A(2) = 70 A(5) = 85 A(8) = 50
A(3) = 75 A(6) = 60 A(9) = 45
Elemen-elemen tersebut akan disusun secara tidak turun berdasarkan algoritma Quick Sort.
Jalannya proses pada algoritma tersebut disajikan dalam bentuk tabel sebagai berikut :
1 2 3 4 5 6 7 8 9 10 i p
65 70 75 80 85 60 55 50 45 2 9
65 45 75 80 85 60 55 50 70 3 8
65 45 50 80 85 60 55 75 70 4 7
65 45 50 55 85 60 80 75 70 5 6
65 45 50 55 60 85 80 75 70 6 5
1 2 3 4 5 6 7 8 9 10 i p
65 45 50 55 60 85 80 75 70 6 9
65 45 50 55 60 70 80 75 85 7 8
65 45 50 55 60 70 75 80 85 8 7
Dan seterusnya
EXIT
Analisisnya :
Hitung jumlah dari perbandingan-perbandingan elemennya dalam hal ini disimpan dalam variable C(n) dan kita asumsikan bahwa :
• n elemen yang disortir berbeda,
• proses pembagian (partisi) elemen V dalam prosedur PARTITION dilakukan dengan proses seleksi secara acak.
Worst Case dari C(n) dinotasikan dengan Cw(n). C(n) di dalam setiap pemanggilan prosedur PARTITION maksimum sebesar ( p – q + 1 ) kali.
Misalkan r adalah jumlah kumulatif dari elemen-elemen di dalam seluruh pemanggilan prosedur PARTITION pada setiap tingkat dari teknik rekursif tersebut. Pada tingkat pertama terjadi pemanggilan prosedur PARTITION sebanyak satu (1) kali yakni CALL PARTITION ( 1, n + 1 ) dan nilai r = n. Pada tingkat kedua terjadi pemanggilan prosedur PARTITION paling banyak dua (2) kali dan nilai r = n – 1, dan seterusnya dengan cara yang sama pada tingkat berikutnya. Dengan demikian dari proses tersebut diperoleh Cw(n) akan sama dengan jumlah seluruh tingkat (r) dan nilai r berkisar didalam interval [ 2 , n ].
Jadi kompleksitas waktunya (Worst Case) = Cw (n ) = O ( n² ) dan
Average Case = CA(n) = O ( n log n ).
Algoritma Divide dan Conquer
Pemrogram bertanggung jawab atas implementasi solusi. Pembuatan program akan menjadi lebih sederhana jika masalah dapat dipecah menjadi sub masalah - sub masalah yang dapat dikelola.
Penyelesaian masalah dengan komputer berhadapan dengan 4 hal, yaitu :
1. Pemahaman keterhubungan elemen-elemen data yang relevan terhadap solusi secara menyeluruh.
2. Pengambilan keputusan mengenai operasi-operasi yang dilakukan terhadap elemen-elemen data.
3. Perancangan representasi elemen-elemen data di memori sehingga memenuhi kriteria berikut:
a. Memenuhi keterhubungan logik antara elemen-elemen data.
b. Operasi-operasi terhadap elemen-elemen data dapat dilakukan secara mudah dan efisien.
4. Pengambilan keputusan mengenai mengenai bahasa pemrograman terbaik untuk menerjemahkan solusi persoalan menjadi program.
STRATEGI DIVIDE DAN CONQUER
Metode
Strategi Divide dan Conquer memecah masalah menjadi submasalah-submasalah independen yang lebih kecil sehingga solusi submasalah-submasalah dapat diperoleh secara mudah, solusi submasalah-submasalah digabung menjadi solusi seluruh masalah.
Skema umum algoritma divide dan conquer
Procedure DNC ( i,j : integer )
Var K : integer ;
If SMALL (i,j) then SOLVE (i,j)
Else begin
K : = DIVIDE (i,j)
COMBINE (DNC(i,k),DNC(k+1,j))
End if
Keterangan :
1. SMALL adalah fungsi yang mengirim BOOLEAN, menentukan apakah ukuran telah cukup kecil sehingga solusi dapat diperoleh. Ukuran dinyatakan sebagai telah berukuran kecil bergantung masalah.
2. DIVIDE adalah fungsi membagi menjadi 2 bagian pada posisi K. Biasanya bagian berukuran sama.
3. COMBINE adalah fungsi menggabungkan solusi X dan Y submasalah. Solusi diperoleh dengan memanggil prosedur rekursif DNC.
Jika ukuran kedua submasalah sama, waktu komputasi DNC dideskripsikan hubungan rekuren berikut :
T(n) = g (n), n kecil
2 T (n/2) + f (n), selainnya
dimana :
• T(n) adalah waktu untuk DNC dengan n masukan,
• g(n) adalah waktu komputasi jawaban secara langsung untuk masukan kecil dan
• f(n) adalah waktu COMBINE.
Untuk algoritma divide dan conquer yang menghasilkan submasalah-submasalah dengan tipe masalah yang sama dengan masalah awal, sangat alami untuk mendeskripsikan algoritma secara rekursi. Kemudian untuk meningkatkan efisiensi dilakukan penerjemahan menjadi bentuk iterasi.
Pemakaian teknik Divide dan Conquer banyak digunakan dalam menyelesaikan berbagai macam persoalan, antara lain :
1. Searching
2. Sorting
Binary Search (Pencarian Biner) dapat dilakukan jika data sudah dalam keadaan urut. Dengan kata lain, apabila data belum dalam keadaan urut, pencarian biner tidak dapat dilakukan. Dalam kehidupan sehari-hari, sebenarnya kita juga sering menggunakan pencarian biner. Misalnya saat ingin mencari suatu kata dalam kamus.
Prinsip dari pencarian biner dapat dijelaskan sebagai berikut :
1. Mula-mula diambil posisi awal = 1 dan posisi akhir = N
2. Cari posisi data tengah dengan rumus (posisi awal + posisi akhir) / 2
3. Data yang dicari dibandingkan dengan data tengah.
4. Jika lebih kecil, proses dilakukan kembali tetapi posisi akhir dianggap sama dengan posisi tengah – 1.
5. Jika lebih besar, proses dilakukan kembali tetapi posisi awal dianggap sama dengan posisi tengah + 1.
6. Demikian seterusnya sampai data tengah sama dengan yang dicari.
Untuk lebih jelasnya, perhatikan contoh berikut. Misalkan kita ingin mencari 17 pada sekumpulan data berikut :
3
9
11
12
15
17
23
31
35
awal tengah akhir
1. Mula–mula dicari data tengah, dengan rumus (1+ 9) / 2 = 5.
2. Berarti data tengah adalah data ke-5, yaitu 15.
3. Data yang dicari, yaitu 17, dibandingkan dengan data tengah ini.
4. Karena 17 > 15, berarti proses dilanjutkan tetapi kali ini posisi awal dianggap sama dengan posisi tengah + 1 atau 6.
3
9
11
12
15
17
23
31
35
awal tengah akhir
1. Data tengah yang baru didapat dengan rumus (6 + 9) / 2 = 7. Berarti data tengah yang baru adalah data ke-7, yaitu 23.
2. Data yang dicari, yaitu 17 dibandingkan dengan data tengah ini.
3. Karena 17 < 23, berarti proses dilanjutkan tetapi kali ini posisi akhir dianggap sama dengan posisi tengah – 1 atau 6.
3
9
11
12
15
17
23
31
35
awal = akhir
1. Data tengah yang baru didapat dengan rumus (6 + 6) / 2 = 6. Berarti data tengah yang baru adalah data ke-6, yaitu 17.
2. Data yang dicari dibandingkan dengan data tengah ini dan ternyata sama. Jadi data ditemukan pada indeks ke-6.
3. Bagaimana jika data yang dicari tidak ada, misalnya 16?
4. Pencarian biner ini akan berakhir jika data ditemukan atau posisi awal lebih besar dari posisi akhir.
5. Jika posisi awal sudah lebih besar daripada posisi akhir berarti data tidak ditemukan.
Untuk lebih jelasnya perhatikan proses pencarian 16 pada data di atas. Prosesnya hampir sama dengan pencarian 17. Tetapi setelah posisi awal = posisi akhir = 6, proses masih dilanjutkan lagi dengan posisi awal = 6 dan posisi akhir = 5
3
9
11
12
15
17
23
31
35
akhir awal
Disini dapat dilihat bahwa posisi awal lebih besar daripada posisi akhir, yang artinya data tidak ditemukan.
Secara umum, algoritma pencarian biner dapat dituliskan sebagai berikut :
1. l ← 1.
2. r ← N.
3. ketemu ← false.
4. selama ( l < = r ) dan (not ketemu) kerjakan baris 5 sampai dengan 8.
5. m ← ( l + r ) / 2
6. Jika ( Data [m] = x ) maka ketemu ← true.
7. Jika ( x < Data [m] ) maka r ← m – 1.
8. Jika ( x > Data [m] ) maka l ← m + 1.
9. If (ketemu) maka m adalah indeks dari data yang dicari, jika tidak data tidak ditemukan.
Berikut ini adalah contoh fungsi untuk mencari data menggunakan pencarian biner.
Function BinarySearch (x: word) : integer;
var
l, r, m : word;
ketemu : boolean;
begin
l : = 1;
r : = N;
ketemu : = false;
while (1 <= r ) and ( not ketemu ) do
begin
m : = (1 + r ) div 2;
if (Data [m] = x ) then
Ketemu := true
else if (x < Data [m] ) then
r : = m – 1
else
l : = m + 1;
end;
if ( ketemu ) then
BinarySearch : = m
else
BinarySearch : = -1;
end;
Fungsi di atas akan mengembalikan indeks dari data yang dicari. Apabila data tidak ditemukan, maka yang yang dikembalikan adalah –1.
Jumlah pembandingan minimum pada pencarian biner adalah 1 kali, yaitu bila data yang dicari tepat berada di tengah-tengah. Jumlah pembandingan maksimum yang dilakukan dengan pencarian biner dapat dicari dengan rumus logaritma, yaitu : C = ²log (N)
Metode Quick atau yang sering disebut juga metode partisi diperkenalkan pertama kali oleh C. A. R. Hoare pada tahun 1962. Pada metode quick, jarak dari kedua elemen yang ditukarkan dibuat cukup besar dengan tujuan untuk mempertinggi efektivitasnya. Hal ini mengingat metode gelembung yang menggunakan jarak cukup dekat ternyata kurang efektif.
Proses pengurutan dengan metode quick dapat dijelaskan sebagai berikut : mula-mula dipilih data tertentu yang dinamakan pivot, misalnya x. Pivot ini harus diletakkan pada posisi ke-j sedemikian hingga data antara 1 sampai dengan (j – 1) lebih kecil daripada x; sedangkan data pada posisi ke-(j+1) sampai dengan N lebih besar daripada x. Cara pengaturannya adalah menukarkan data di antara posisi 1 sampai dengan (j – 1) yang lebih besar daripada x dengan data di antara posisi (j + 1) sampai dengan N yang lebih kecil daripada x.
Algoritma penyisipan langsung sendiri dapat dituliskan sebagai berikut:
1. x ← Data [( L + R) / 2)].
2. i ← L
3. j ← R
4. Selama ( i < = j ) kerjakan baris 5 sampai dengan 12.
5. Selama ( Data [ i ] < x ) kerjakan i ← i + 1
6. Selama ( Data [ j ] > x ) kerjakan i ← j - 1
7. Jika (i < = j ) maka kerjakan baris 8 sampai dengan 10; jika tidak kerjakan baris 11.
8. Tukar Data [ i ] dengan Data [ j ].
9. i ← i + 1
10. j ← j - 1
11. Jika ( L < j ) kerjakan lagi baris 1 dengan R = j.
12. Jika ( i < R ) kerjakan lagi baris 1 dengan L = i.
Jika suatu barisan yang terdiri dari n elemen yang ditempatkan dalam suatu array dan urutan yang diinginkan adalah urutan yang tidak turun (non decreasing) maka dapat digunakan metode Quick Sort yang dengan teknik Divide and Conquer.
Adapun algoritma Quick Sort tersebut terdiri dari dua prosedur yaitu prosedur PARTITION dan prosedur QUICKSORT. Berikut ini disajikan algoritma Quick Sort yang dimaksud, yaitu :
PROCEDURE QUICKSORT(p,q)
IF p < q then j q + 1
CALL PARTITION(p,j)
CALL QUICKSORT(p,j-1)
CALL QUICKSORT(j+1,q)
END IF
END QUICKSORT
PROCEDURE PARTITION(m,p)
INTEGER m,p,i ; GLOBAL A(m-1,p)
V A(m) ; i m
LOOP
LOOP i i + 1 UNTIL A( i ) > = V REPEAT
LOOP p p - 1 UNTIL A( p ) < = V REPEAT
IF i < p THEN CALL INTERCHANGE (A(i),A(p))
ELSE EXIT
END IF
REPEAT
A(m) A(p)
A(p) V
END PARTITION
Contoh :
Suatu Array A terdiri dari 9 elemen, yaitu :
A(1) = 65 A(4) = 80 A(7) = 60
A(2) = 70 A(5) = 85 A(8) = 50
A(3) = 75 A(6) = 60 A(9) = 45
Elemen-elemen tersebut akan disusun secara tidak turun berdasarkan algoritma Quick Sort.
Jalannya proses pada algoritma tersebut disajikan dalam bentuk tabel sebagai berikut :
1 2 3 4 5 6 7 8 9 10 i p
65 70 75 80 85 60 55 50 45 2 9
65 45 75 80 85 60 55 50 70 3 8
65 45 50 80 85 60 55 75 70 4 7
65 45 50 55 85 60 80 75 70 5 6
65 45 50 55 60 85 80 75 70 6 5
1 2 3 4 5 6 7 8 9 10 i p
65 45 50 55 60 85 80 75 70 6 9
65 45 50 55 60 70 80 75 85 7 8
65 45 50 55 60 70 75 80 85 8 7
Dan seterusnya
EXIT
Analisisnya :
Hitung jumlah dari perbandingan-perbandingan elemennya dalam hal ini disimpan dalam variable C(n) dan kita asumsikan bahwa :
• n elemen yang disortir berbeda,
• proses pembagian (partisi) elemen V dalam prosedur PARTITION dilakukan dengan proses seleksi secara acak.
Worst Case dari C(n) dinotasikan dengan Cw(n). C(n) di dalam setiap pemanggilan prosedur PARTITION maksimum sebesar ( p – q + 1 ) kali.
Misalkan r adalah jumlah kumulatif dari elemen-elemen di dalam seluruh pemanggilan prosedur PARTITION pada setiap tingkat dari teknik rekursif tersebut. Pada tingkat pertama terjadi pemanggilan prosedur PARTITION sebanyak satu (1) kali yakni CALL PARTITION ( 1, n + 1 ) dan nilai r = n. Pada tingkat kedua terjadi pemanggilan prosedur PARTITION paling banyak dua (2) kali dan nilai r = n – 1, dan seterusnya dengan cara yang sama pada tingkat berikutnya. Dengan demikian dari proses tersebut diperoleh Cw(n) akan sama dengan jumlah seluruh tingkat (r) dan nilai r berkisar didalam interval [ 2 , n ].
Jadi kompleksitas waktunya (Worst Case) = Cw (n ) = O ( n² ) dan
Average Case = CA(n) = O ( n log n ).
Senin, 22 Maret 2010
Penyiram tanaman otomatis dengan PLC
di ambil dari jurnal 8-penyiram-otomatis-PLC
BAB III
PENYIRAMAN TANAMAN OTOMATIS MENGGUNAKAN PLC
PERANCANGAN
3.1 CARA KERJA SISTEM OTOMATIS PENYIRAMAN TANAMAN
Penyiram tanaman otomatis ini di fungsikan untuk mengetahui apakah kondisi tanah pada tanaman kering atau basah, jika kondisi tanaman ini kering maka sensor tembaga akan member informasi kepada relay kepada suatu alat PLC (Programmable Logic Control), dimana PLC akan member informasi kepada Relay untuk membuka katup valve dan mengaliri air utuk menyiram tanaman tersebut.
Ketika kondisi tanah ini basah, maka sensor akan mengirim informasi kepada PLC untuk membrikan informasi ke relay, sehingga relay secara otomatis menutup valve, karena kondisi tanah sudah basah. Transistor difungsikan sebagai saklar dimana TR1 akan dikendalikan (diaktifkan) melalui basis, ketika tegangan dikaki basis melampaui tegangan saturasi maka TR1 akan aktif dan arus akan mengalir dari kaki C ke kaki E. Tegangan di kaki basis TR1 didapat dari rangkaian pembagi tegangan antara VR1 dan sensor (elektroda).
Ketika sensor tembaga dalam kondisi basah maka nilai resistansinya akan lebih kecil di bandingkan dengan nilai resistansi pada VR1
Sedangkan VR1 difungsikan untuk kalibrasi (penentu titik kelembapan yang di inginkan). Ketika kondisi tanah basah, maka perbandingan resistensi sensor lebih kecil dari resistensi VR1 sehingga tegangan di kaki basis di bawah nilai tegangan saturasi sehingga TR1 akan OFF. Ketika kondisi tanah kering maka perbandingan resistensi sensor lebih besar dari pada resistensi VR1, sehingga tegangan pada kaki basis melebihi tegangan saturasi sehingga TR1 pada kondisi ON sehingga arus akan mengalir dari kaki colector ke kaki basis.
Ketika TR1 aktif (on) maka tegangan pada basis TR2 akan melebihi tegangan saturasi dan TR2 akan hidup. Ketika TR2 hidup maka arus akan mengalir dari kaki collector ke kali emitor TR2 yang melebihi kaki-kaki relay. Karena relay dialiri arus maka relay akan on dan hal ini akan menswitch relay pada kondisi NC. Kondisi relay ini digunakan untuk menghidupkan (memberi inputan) pada PLC.
3.1.1 Cara Kerja PLC (Programmable Logic Control)
PLC adalah suatu peranti elektronik yang dapat dirancang agar dapat beroperasi secara digital dengan menggunakan memori sebagai media penyimpanan instruksi untuk menjalankan fungsi-fungsi logika, seperti fungsi pencacah, fungsi urutan proses, fungsi pewaktu, fungsi aritmetika, dan fungsi lain yang dapat diprogram. Pembuatan program dapat dilakukan dengan 2 (dua) cara yaitu melalui PLC langsung dan melalui komputer. Bila program dibuat melalui komputer, maka perlu dipindahkan ke PLC untuk dapat dijalankan.
Perangkat lunak untuk membuat program PLC melalui komputer dapat menggunakan LOGO!soft. Dengan LOGO!soft, program dapat dibuat dan dilihat hasilnya berupa simulasi dan lebih mudah untuk diperbaiki atau untuk pengembangan. Jika sudah selesai, program dapat ditranfer ke PLC dan siap dijalankan.
Pada PLC, untuk menghubungkan dengan peralatan lainnya diperlukan pengalamatan yang tepat. Pola pengalamatan untuk input, output dan blok-blok internal memiliki perbedaan berdasarkan jenis PLC. PLC yang digunakan pada otomatisasi penyiraman bibit ini adalah Siemens, pola pengalamatan yang digunakan adalah sebagai
berikut :
- Input : I1, I2, I3, …
- Output : Q1, Q2, Q3, …
- Internal Relay : M1, M2, …
- Timer : T ON1, T ON2, T ON3, T OFF1, T OFF2, T OFF3
Pada PLC Siemens bahasa pemrograman yang digunakan adalah FBD (Function Block Diagram). FBD merupakan bahasa pemrograman yang berupa blok-blok gerbang logika untuk menggambarkan rangkaian yang di buat.
3.1.2 Cara Kerja Sensor Tembaga
Sensor adalah alat yang digunakan untuk mendeteksi dan sering berfungsi untuk mengukur magnitude sesuatu. Dengan menggunakan sensor kita dapat mengubah mekanis, magnetis, panas, cahaya dan kimia menjadi tegangan dan arus listrik. Sensor yang digunakan pada otomatisasi penyiraman bibit ini adalah sensor kelembaban tanah.
Sensor (elektroda) akan membaca nilai resistansi tanah yang di ukur. Ketika kelembaban tanah tinggi (basah) maka nilai resistansi tanah akan turun (rendah) dan ketika kondisi tanah kering maka nilai resistensinya tinggi. Perubahan nilai resistensi dari tanah ini yang dimanfaatkan untuk merubah menjadi tegangan.
3.3.2 Cara Kerja PLC
PLC bekerja berdasarkan input / masukan dari sensor dan program yang telah dibuat. Sensor akan memberikan masukan berupa arus yang dihubungkan ke input (I1). Keluaran dari PLC (Q1) akan dihubungkan ke relay untuk menghidupkan atau mematikan pompa air. Keluaran dari PLC (Q1) akan dihasilkan program PLC berdasarkan masukan / input dari I1 dan masukan dalam program.
3.3.3 Cara Kerja Relay
Relay bekerja berdasarkan masukan yang diperoleh dari keluaran PLC. Jika keluaran dari PLC (Q1) berupa kondisi logika 1, maka arus listrik akan mengalir ke lilitan kumparan pada batang magnet yang ada di relay. Hal ini akan menyebabkan induksi dan menggerakkan poros sehingga terjadi kontak (saklar dalam kondisi on).
BAB III
PENYIRAMAN TANAMAN OTOMATIS MENGGUNAKAN PLC
PERANCANGAN
3.1 CARA KERJA SISTEM OTOMATIS PENYIRAMAN TANAMAN
Penyiram tanaman otomatis ini di fungsikan untuk mengetahui apakah kondisi tanah pada tanaman kering atau basah, jika kondisi tanaman ini kering maka sensor tembaga akan member informasi kepada relay kepada suatu alat PLC (Programmable Logic Control), dimana PLC akan member informasi kepada Relay untuk membuka katup valve dan mengaliri air utuk menyiram tanaman tersebut.
Ketika kondisi tanah ini basah, maka sensor akan mengirim informasi kepada PLC untuk membrikan informasi ke relay, sehingga relay secara otomatis menutup valve, karena kondisi tanah sudah basah. Transistor difungsikan sebagai saklar dimana TR1 akan dikendalikan (diaktifkan) melalui basis, ketika tegangan dikaki basis melampaui tegangan saturasi maka TR1 akan aktif dan arus akan mengalir dari kaki C ke kaki E. Tegangan di kaki basis TR1 didapat dari rangkaian pembagi tegangan antara VR1 dan sensor (elektroda).
Ketika sensor tembaga dalam kondisi basah maka nilai resistansinya akan lebih kecil di bandingkan dengan nilai resistansi pada VR1
Sedangkan VR1 difungsikan untuk kalibrasi (penentu titik kelembapan yang di inginkan). Ketika kondisi tanah basah, maka perbandingan resistensi sensor lebih kecil dari resistensi VR1 sehingga tegangan di kaki basis di bawah nilai tegangan saturasi sehingga TR1 akan OFF. Ketika kondisi tanah kering maka perbandingan resistensi sensor lebih besar dari pada resistensi VR1, sehingga tegangan pada kaki basis melebihi tegangan saturasi sehingga TR1 pada kondisi ON sehingga arus akan mengalir dari kaki colector ke kaki basis.
Ketika TR1 aktif (on) maka tegangan pada basis TR2 akan melebihi tegangan saturasi dan TR2 akan hidup. Ketika TR2 hidup maka arus akan mengalir dari kaki collector ke kali emitor TR2 yang melebihi kaki-kaki relay. Karena relay dialiri arus maka relay akan on dan hal ini akan menswitch relay pada kondisi NC. Kondisi relay ini digunakan untuk menghidupkan (memberi inputan) pada PLC.
3.1.1 Cara Kerja PLC (Programmable Logic Control)
PLC adalah suatu peranti elektronik yang dapat dirancang agar dapat beroperasi secara digital dengan menggunakan memori sebagai media penyimpanan instruksi untuk menjalankan fungsi-fungsi logika, seperti fungsi pencacah, fungsi urutan proses, fungsi pewaktu, fungsi aritmetika, dan fungsi lain yang dapat diprogram. Pembuatan program dapat dilakukan dengan 2 (dua) cara yaitu melalui PLC langsung dan melalui komputer. Bila program dibuat melalui komputer, maka perlu dipindahkan ke PLC untuk dapat dijalankan.
Perangkat lunak untuk membuat program PLC melalui komputer dapat menggunakan LOGO!soft. Dengan LOGO!soft, program dapat dibuat dan dilihat hasilnya berupa simulasi dan lebih mudah untuk diperbaiki atau untuk pengembangan. Jika sudah selesai, program dapat ditranfer ke PLC dan siap dijalankan.
Pada PLC, untuk menghubungkan dengan peralatan lainnya diperlukan pengalamatan yang tepat. Pola pengalamatan untuk input, output dan blok-blok internal memiliki perbedaan berdasarkan jenis PLC. PLC yang digunakan pada otomatisasi penyiraman bibit ini adalah Siemens, pola pengalamatan yang digunakan adalah sebagai
berikut :
- Input : I1, I2, I3, …
- Output : Q1, Q2, Q3, …
- Internal Relay : M1, M2, …
- Timer : T ON1, T ON2, T ON3, T OFF1, T OFF2, T OFF3
Pada PLC Siemens bahasa pemrograman yang digunakan adalah FBD (Function Block Diagram). FBD merupakan bahasa pemrograman yang berupa blok-blok gerbang logika untuk menggambarkan rangkaian yang di buat.
3.1.2 Cara Kerja Sensor Tembaga
Sensor adalah alat yang digunakan untuk mendeteksi dan sering berfungsi untuk mengukur magnitude sesuatu. Dengan menggunakan sensor kita dapat mengubah mekanis, magnetis, panas, cahaya dan kimia menjadi tegangan dan arus listrik. Sensor yang digunakan pada otomatisasi penyiraman bibit ini adalah sensor kelembaban tanah.
Sensor (elektroda) akan membaca nilai resistansi tanah yang di ukur. Ketika kelembaban tanah tinggi (basah) maka nilai resistansi tanah akan turun (rendah) dan ketika kondisi tanah kering maka nilai resistensinya tinggi. Perubahan nilai resistensi dari tanah ini yang dimanfaatkan untuk merubah menjadi tegangan.
3.3.2 Cara Kerja PLC
PLC bekerja berdasarkan input / masukan dari sensor dan program yang telah dibuat. Sensor akan memberikan masukan berupa arus yang dihubungkan ke input (I1). Keluaran dari PLC (Q1) akan dihubungkan ke relay untuk menghidupkan atau mematikan pompa air. Keluaran dari PLC (Q1) akan dihasilkan program PLC berdasarkan masukan / input dari I1 dan masukan dalam program.
3.3.3 Cara Kerja Relay
Relay bekerja berdasarkan masukan yang diperoleh dari keluaran PLC. Jika keluaran dari PLC (Q1) berupa kondisi logika 1, maka arus listrik akan mengalir ke lilitan kumparan pada batang magnet yang ada di relay. Hal ini akan menyebabkan induksi dan menggerakkan poros sehingga terjadi kontak (saklar dalam kondisi on).
bahasa pemrograman C++
di ambil dari
http://kazekage08suna.blogspot.com/2010/03/normal-0-false-false-false-en-us-x-none.html
1. PENGANTAR C ++
C++ diciptakan oleh Bjarne Stroustrup di laboratorium Bell pada awal tahun 1980-an, sebagai pengembangan dari bahasa C dan Simula. Saat ini, C++ merupakan salah satu bahasa yang paling populer untuk pengembangan softwareberbasis OOP. Kompiler untuk C++ telah banyak beredar di pasaran. Software developer yang paling diminati adalah Borland Inc. dan Microsoft Corp. Produk dari Borland untuk kompiler C++ adalah Turbo C++, Borland C++, Borland C++ Builder. Sedangkan dari Microsoft adalah Ms. Visual C++. Walaupun banyak kompiler yang tersedia, namun pada intinya bahasa pemrograman yang dipakai adalah C++.
Sebelum mulai melakukan kode program, sebaiknya diingat bahwa C++ bersifat “case sensitive”, yang artinya huruf besar dan huruf kecil dibedakan.
2. STRUKTUR BAHASA C++
Cara terbaik untuk balajar bahasa pemrograman adalah dengan langsung
mempraktikannya. Cobalah contoh program berikut :
// program pertamaku
#include
int main ()
{
cout << "Selamat Belajar C++";
return 0;
}
Program di atas, misalnya dapat disimpan dengan nama latih1.cpp. Cara untuk
menyimpan dan mengkompile program berbeda-beda, tergantung kompiler yang
dipakai.
Ketika di-run, maka di layar akan muncul sebuah tulisan “Selamat Belajar
C++”. Contoh di atas, adalah sebuah contoh program sederhana menggunakan
C++. Namun, penggalan program tersebut telah menyertakan sintak-sintak dasar
bahasa C++. Sintak dasar tersebut, akan kita bahas satu per satu:
// program pertamaku
merupakan sebuah baris komentar. Semua baris, yang ditandai dengan dua
buah tanda slash (//), akan dianggap sebagai baris komentar dan tidak akan
berpengaruh pada hasil. Biasanya, baris komentar dipakai oleh programmer
untuk memberikan penjelasan tentang program.
Baris komentar dalam C++, selain ditandai dengan (//) juga dapat ditandai
dengan (/*….*/)
Perbedaan mendasar dari keduanya adalah :
// baris komentar
/* blok komentar */
#include
pernyataan yang diawali dengan tanda (#) merupakan pernyataan untuk
menyertakan preprocessor. Pernyataan ini bukan untuk dieksekusi. #include
berarti memerintahkan kompiler untuk menyertakan file
header iostream.h. Dalam file header ini, terdapat beberapa fungsi standar
yang dipakai dalam proses input dan output. Seperti misalnya perintah cout
yang dipakai dalam program utama.
int main ()
baris ini menandai dimulainya kompiler akan mengeksekusi program. Atau
dengan kata lain, pernyataan main sebagai penanda program utama. Adalah
suatu keharusan, dimana sebuah program yang ditulis dalam bahasa C++
memiliki sebuah main.
main diikuti oleh sebuah tanda kurung () karena main merupakan sebuah
fungsi. Dalam bahasa C++ sebuah fungsi harus diikuti dengan tanda (), yang
nantinya dapat berisi argumen. Dan sintak formalnya, sebuah fungsi dimulai
dengan tanda {}, seperti dalam contoh program.
cout << "Selamat Belajar C++";
perintah ini merupakan hal yang akan dieksekusi oleh compiler dan
merupakan perintah yang akan dikerjakan. cout termasuk dalam file iostream.
cout merupakan perintah untuk menampilkan ke layer.
Perlu diingat, bahwa setiap pernyataan dalam C++ harus diakhiri dengan tanda
semicolon (;) untuk memisahkan antara pernyataan satu dengan pernyataan
lainnya.
return 0;
pernyataan return akan menyebabkan fungsi main() menghentikan program
dan mengembalikan nilai kepada main. Dalam hal ini, yang dikembalikan
adalah nilai 0. Mengenai pengembalian nilai, akan dijelaskan nanti mengenai
Fungsi dalam C++.
Coba tambahkan sebaris pernyataan lagi, sehingga program contoh di atas akan
menjadi seperti berikut:
// latihan keduaku
#include
int main ()
{
cout << "Selamat Belajar C++";
cout << "di kampusku";
return 0;
}
Maka perintah cout yang kedua akan menampilkan sebuah kalimat lagi di layar,
dengan tulisan “di kampusku”.
Referensi : kuliah.stikom-bali.ac.id/410207/ModulAlgo&struk_Cpp_.pdf,
www.indowebster.com/Pengantar_Algoritma_Pemrograman_Komputer.html,
usupress.usu.ac.id/files/Algoritma%20dan%20Pemrograman;...Final.pdf,
ugpedia.gunadarma.ac.id/pdf.php?cat=18&id=245&lang=id.
http://kazekage08suna.blogspot.com/2010/03/normal-0-false-false-false-en-us-x-none.html
1. PENGANTAR C ++
C++ diciptakan oleh Bjarne Stroustrup di laboratorium Bell pada awal tahun 1980-an, sebagai pengembangan dari bahasa C dan Simula. Saat ini, C++ merupakan salah satu bahasa yang paling populer untuk pengembangan softwareberbasis OOP. Kompiler untuk C++ telah banyak beredar di pasaran. Software developer yang paling diminati adalah Borland Inc. dan Microsoft Corp. Produk dari Borland untuk kompiler C++ adalah Turbo C++, Borland C++, Borland C++ Builder. Sedangkan dari Microsoft adalah Ms. Visual C++. Walaupun banyak kompiler yang tersedia, namun pada intinya bahasa pemrograman yang dipakai adalah C++.
Sebelum mulai melakukan kode program, sebaiknya diingat bahwa C++ bersifat “case sensitive”, yang artinya huruf besar dan huruf kecil dibedakan.
2. STRUKTUR BAHASA C++
Cara terbaik untuk balajar bahasa pemrograman adalah dengan langsung
mempraktikannya. Cobalah contoh program berikut :
// program pertamaku
#include
int main ()
{
cout << "Selamat Belajar C++";
return 0;
}
Program di atas, misalnya dapat disimpan dengan nama latih1.cpp. Cara untuk
menyimpan dan mengkompile program berbeda-beda, tergantung kompiler yang
dipakai.
Ketika di-run, maka di layar akan muncul sebuah tulisan “Selamat Belajar
C++”. Contoh di atas, adalah sebuah contoh program sederhana menggunakan
C++. Namun, penggalan program tersebut telah menyertakan sintak-sintak dasar
bahasa C++. Sintak dasar tersebut, akan kita bahas satu per satu:
// program pertamaku
merupakan sebuah baris komentar. Semua baris, yang ditandai dengan dua
buah tanda slash (//), akan dianggap sebagai baris komentar dan tidak akan
berpengaruh pada hasil. Biasanya, baris komentar dipakai oleh programmer
untuk memberikan penjelasan tentang program.
Baris komentar dalam C++, selain ditandai dengan (//) juga dapat ditandai
dengan (/*….*/)
Perbedaan mendasar dari keduanya adalah :
// baris komentar
/* blok komentar */
#include
pernyataan yang diawali dengan tanda (#) merupakan pernyataan untuk
menyertakan preprocessor. Pernyataan ini bukan untuk dieksekusi. #include
berarti memerintahkan kompiler untuk menyertakan file
header iostream.h. Dalam file header ini, terdapat beberapa fungsi standar
yang dipakai dalam proses input dan output. Seperti misalnya perintah cout
yang dipakai dalam program utama.
int main ()
baris ini menandai dimulainya kompiler akan mengeksekusi program. Atau
dengan kata lain, pernyataan main sebagai penanda program utama. Adalah
suatu keharusan, dimana sebuah program yang ditulis dalam bahasa C++
memiliki sebuah main.
main diikuti oleh sebuah tanda kurung () karena main merupakan sebuah
fungsi. Dalam bahasa C++ sebuah fungsi harus diikuti dengan tanda (), yang
nantinya dapat berisi argumen. Dan sintak formalnya, sebuah fungsi dimulai
dengan tanda {}, seperti dalam contoh program.
cout << "Selamat Belajar C++";
perintah ini merupakan hal yang akan dieksekusi oleh compiler dan
merupakan perintah yang akan dikerjakan. cout termasuk dalam file iostream.
cout merupakan perintah untuk menampilkan ke layer.
Perlu diingat, bahwa setiap pernyataan dalam C++ harus diakhiri dengan tanda
semicolon (;) untuk memisahkan antara pernyataan satu dengan pernyataan
lainnya.
return 0;
pernyataan return akan menyebabkan fungsi main() menghentikan program
dan mengembalikan nilai kepada main. Dalam hal ini, yang dikembalikan
adalah nilai 0. Mengenai pengembalian nilai, akan dijelaskan nanti mengenai
Fungsi dalam C++.
Coba tambahkan sebaris pernyataan lagi, sehingga program contoh di atas akan
menjadi seperti berikut:
// latihan keduaku
#include
int main ()
{
cout << "Selamat Belajar C++";
cout << "di kampusku";
return 0;
}
Maka perintah cout yang kedua akan menampilkan sebuah kalimat lagi di layar,
dengan tulisan “di kampusku”.
Referensi : kuliah.stikom-bali.ac.id/410207/ModulAlgo&struk_Cpp_.pdf,
www.indowebster.com/Pengantar_Algoritma_Pemrograman_Komputer.html,
usupress.usu.ac.id/files/Algoritma%20dan%20Pemrograman;...Final.pdf,
ugpedia.gunadarma.ac.id/pdf.php?cat=18&id=245&lang=id.
Senin, 08 Maret 2010
valve solinoid

What is a Solenoid Valve?
A solenoid valve is an electromechanical device used for controlling liquid or gas flow. The solenid valve is controlled by electrical current, which is run through a coil. When the coil is energized, a magnetic field is created, causing a plunger inside the coil to move. Depending on the design of the valve, the plunger will either open or close the valve. When electrical current is removed from the coil, the valve will return to its de-energized state.
In direct-acting solenoid valves, the plunger directly opens and closes an orifice inside the valve. In pilot-operated valves (also called the servo-type), the plunger opens and closes a pilot orifice. The inletline pressure, which is led through the pilot orifice, opens and closes the valve seal.
The most common solenoid valve has two ports: an inlet port and an outlet port. Advanced desigs may have three or more ports. Some designs utilize a manifold-type design.
Solenoid valves make automation of fluid and gas control possible. Modern solenoid valves offer fast operation, high reliability, long service life, and compact design.
tugas portofolio Algoritma
1) Basis step 4^n -1 habis dibagi 3untuk setiap bilangan bulat
S(1) = benar n>=1
S(n) = s(1)
4^n-1 = 4^1 – 1 , habis dibagi 3 (benar)
2) Inductive step
S(k) = benar
S(n) = S(k)
n=k
4^n – 1 = 4^k – 1 ……..(1)
S(k+1) = benar
S(n) = S(k+1)
n=k+1
4^n -1 = 4^k – 1
= 4^k * 4 -1
= 4 * 4^k – 1
S(k), S(k=1) = benar
3*4^k + 4^k – 1 …….( habis dibagi 3 ) berarti (benar)
S(1) = benar n>=1
S(n) = s(1)
4^n-1 = 4^1 – 1 , habis dibagi 3 (benar)
2) Inductive step
S(k) = benar
S(n) = S(k)
n=k
4^n – 1 = 4^k – 1 ……..(1)
S(k+1) = benar
S(n) = S(k+1)
n=k+1
4^n -1 = 4^k – 1
= 4^k * 4 -1
= 4 * 4^k – 1
S(k), S(k=1) = benar
3*4^k + 4^k – 1 …….( habis dibagi 3 ) berarti (benar)
Langganan:
Postingan (Atom)