Senin, 23 Mei 2011

Pengurutan

Metode Penyisipan Langsung (Straight Insertion Sort)

Proses pengurutan dengan metode penyisipan langsung dapat dijelaskan sebagai berikut :

Data dicek satu per satu mulai dari yang kedua sampai dengan yang terakhir. Apabila

ditemukan data yang lebih kecil daripada data sebelumnya, maka data tersebut disisipkan pada posisi yang sesuai. Akan lebih mudah apabila membayangkan pengurutan kartu.Pertama-tama anda meletakkan kartu-kartu tersebut di atas meja, kemudian melihatnya dari kiri ke kanan. Apabila kartu di sebelah kanan lebih kecil daripada kartu di sebelah kiri, maka ambil kartu tersebut dan sisipkan di tempat yang sesuai. Algoritma penyisipan langsung dapat dituliskan sebagai berikut :

1 i ← 1

2 selama (i < N) kerjakan baris 3 sampai dengan 9

3 x ← Data[i]

4 j ← i – 1

5 selama (x < Data[j]) kerjakan baris 6 dan 7

6 Data[j + 1] ← Data[j]

7 j ← j – 1

8 Data[j+1] ← x

9 i ← i + 1

Metode Penyisipan Biner (Binary Insertion Sort)

Metode ini merupakan pengembangan dari metode penyisipan langsung. Dengan cara penyisipan langsung, perbandingan selalu dimulai dari elemen pertama (data ke-0), sehingga untuk menyisipkan elemen ke i kita harus melakukan perbandingan sebanyak i- 1 kali. Ide dari metode ini didasarkan pada kenyataan bahwa pada saat menggeser data ke-i, data ke 0 s/d i-1 sebenarnya sudah dalam keadaan terurut.pada saat i=4, data ke 0 s/d 3 sudah dalam keadaan urut : 3, 9, 12, 35. Dengan demikian posisi dari data ke-i sebenarnya dapat ditentukan dengan pencarian biner. Misalnya pada saat i = 7, data yang akan dipindah adalah 15 sedangkan data di sebelah kiri 15 adalah sebagai berikut :

Pertama-tama dicari data pada posisi paling tengah diantara data diatas. Data yang terletak di tengah adalah data ke-3, yaitu 12. Karena 12 < 15, berarti 15 harus disisipkan di sebelah kanan 12. Oleh karena itu, proses pencarian dlanjutkan lagi untuk data berikut

Dari hasil ini, didapat data tengahnya adalah data 23. Karena 15 < 23, berarti 15 harus disisipkan di sebelah kiri 23. Proses dilanjutkan kembali untuk data

Karena 17 > 15, berarti 15 harus disisipkan di sebelah kiri 17 Algoritma penyisipan biner dapat dituliskan sebagai berikut :

1 i ← 1

2 selama (i < N) kerjakan baris 3 sampai dengan 14

3 x ← Data[i]

4 l ← 0

5 r ← i – 1

6 selama (l<=r) kerjakan baris 7 dan 8

7 m ← (l + r) / 2

8 jika (x < Data[m]) maka r ← m – 1, jika tidak l ← m + 1

9 j ← i – 1

10 selama ( j >=l) kerjakan baris 11 dan 12

11 Data[j+1] ← Data[j]

12 j ← j – 1

13 Data[l] ← x

14 I ← i + 1

Metode Seleksi (Selection Sort)

Metode seleksi melakukan pengurutan dengan cara mencari data yang terkecil kemudian menukarkannya dengan data yang digunakan sebagai acuan atau sering dinamakan pivot. Proses pengurutan dengan metode seleksi dapat dijelaskan sebagai berikut : langkah pertama dicari data terkecil dari data pertama sampai data terakhir. Kemudian data terkecil ditukar dengan data pertama. Dengan demikian, data pertama sekarang mempunyai nilai paling kecil dibanding data yang lain. Langkah kedua, data terkecil kita cari mulai dari data kedua sampai terakhir. Data terkecil yang kita peroleh ditukar dengan data kedua dan demikian seterusnya sampai semua elemen dalam keadaan terurutkan. Algoritma seleksi dapat dituliskan sebagai berikut :

1 i ← 0

2 selama (i < N-1) kerjakan baris 3 sampai dengan 9

3 k ← i

4 j ← i + 1

5 Selama (j < N) kerjakan baris 6 dan 7

6 Jika (Data[k] > Data[j]) maka k ← j

7 j ← j + 1

8 Tukar Data[i] dengan Data[k]

9 i ← i + 1

Metode Shell (Shell Sort)

Metode ini disebut juga dengan metode pertambahan menurun (diminishing increment). Metode ini dikembangkan oleh Donald L. Shell pada tahun 1959, sehingga sering disebut dengan Metode Shell Sort. Metode ini mengurutkan data dengan cara membandingkan suatu data dengan data lain yang memiliki jarak tertentu, kemudian dilakukan penukaran bila diperlukan Proses pengurutan dengan metode Shell dapat dijelaskan sebagai berikut :

Pertama-tama adalah menentukan jarak mula-mula dari data yang akan dibandingkan,

yaitu N / 2. Data pertama dibandingkan dengan data dengan jarak N / 2. Apabila data pertama lebih besar dari data ke N / 2 tersebut maka kedua data tersebut ditukar. Kemudian data kedua dibandingkan dengan jarak yang sama yaitu N / 2. Demikian seterusnya sampai seluruh data dibandingkan sehingga semua data ke-j selalu lebih kecil daripada data ke-(j + N / 2). Pada proses berikutnya, digunakan jarak (N / 2) / 2 atau N / 4. Data pertama dibandingkan dengan data dengan jarak N / 4. Apabila data pertama lebih besar dari data ke N / 4 tersebut maka kedua data tersebut ditukar. Kemudian data kedua dibandingkan dengan jarak yang sama yaitu N / 4. Demikian seterusnya sampai seluruh data dibandingkan sehingga semua data ke-j lebih kecil daripada data ke-(j + N / 4). Pada proses berikutnya, digunakan jarak (N / 4) / 2 atau N / 8. Demikian seterusnya sampai jarak yang digunakan adalah 1. Algoritma metode Shell dapat dituliskan sebagai berikut :

1 Jarak ← N

2 Selama (Jarak > 1) kerjakan baris 3 sampai dengan 9

3 Jarak ← Jarak / 2. Sudah ← false

4 Kerjakan baris 4 sampai dengan 8 selama Sudah = false

5 Sudah ← true

6 j ← 0

7 Selama (j < N – Jarak) kerjakan baris 8 dan 9

8 Jika (Data[j] > Data[j + Jarak] maka tukar Data[j], Data[j + Jarak]. Sudah ← true

9 j ← j + 1

Reference : http://lecturer.eepis-its.edu/

Senin, 25 April 2011

pentingnya algoritma pada kehidupan sehari-hari

Dewasa ini, komputer digunakan di hampir semua bidang kehidupan manusia, mulai dari pendidikan, bisnis, sampai dengan permainan. Berbicara tentang komputer tidak lepas dari pemrogaman komputer. Hal ini karena komputer pada dasarnya merupakan mesin yang tidak bisa apa-apa. Kita harus memberikan serangkaian instruksi kepada komputer agar mesin ‘pintar’ ini dapat memecahkan suatu masalah. Langkah-langkah yang perlu dilakukan dalam memberikan instruksi kepada komputer untuk memecahkan masalah inilah yang dinamakan pemrogaman komputer.
Adapun langkah-langkah pemrogaman komputer adalah sebagi berikut: mendefinisikan masalah, menentukan solusi, memilih algoritma, menulis program, menguji program, menulis dokumentasi, serta merawat program.
Sebelum membuat program, hendaknya kita membuat Flow Chart atau Pseudocode, sehingga memudahkan kita untuk memahami algoritma serta memudahkan kita dalam membuat program. Program yang ditulis juga harus jelas, nyata, dan komplit.

Pengertian Algoritma

Algoritma adalah suatu prosedur yang tepat untuk memecahkan masalah dengan menggunakan bantuan komputer serta menggunakan suatu bahasa pemrogaman tertentu seperti bahasa Pascal, Visual Basic, Java, dan masih banyak lagi bahasa yang lain.Pranata (2002:8) dalam kehidupan sehari-hari, sebenarnya kita juga menggunakan algoritma untuk melaksanakan sesuatu. Sebagai contoh, ketika kita menulis surat, maka kita perlu melakukan beberapa langkah sebagai berikut:

1. Mempersiapkan kertas dan amplop.
2. Mempersiapkan alat tulis, seperti pena atau pensil.
3. Mulai menulis.
4. Memasukkan kertas ke dalam amplop.
5. Pergi ke kantor pos untuk mengeposkan surat tersebut.
B. Fungsi Algoritma

Dengan algoritma, kita dapat mengatasi masalah dari yang sederhana sampai yang kompleks sekalipun. Namun, seorang user harus mampu membuat suatu program dengan menggunakan bahasa yang difahami oleh komputer. Sebelum disajikan dalam bentuk bahasa pemrogaman, sebaiknya kita membuat diagram alir (Flow Chart) dan Pseudocode. Hal ini dimaksudkan agar dapat mempermudah kerja atau mempermudah dalam membuat program. Selain itu, algoritma dapat mengatasi masalah logika dan masalah matematika dengan cara berurutan, tetapi kadang-kadang algoritma tidak selalu berurutan, hal ini dikenal dengan proses percabangan

Kata Logis merupakan kata kunci dalam Algoritma. Langkah-langkah dalam Algoritma harus logis dan harus dapat ditentukan bernilai salah atau benar.

Melaksanakan Algoritma berarti mengerjakan langkah-langkah di dalam Algoritma
tersebut. Pemroses mengerjakan proses sesuai dengan algoritma yang diberikan kepadanya.
Juru masak membuat kue berdasarkan resep yang diberikan kepadanya, pianis memainkan lagu berdasarkan papan not balok. Karena itu suatu Algoritma harus dinyatakan dalam bentuk yang dapat dimengerti oleh pemroses. Jadi suatu pemroses harus :
1. Mengerti setiap langkah dalam Algoritma
2. Mengerjakan operasi yang bersesuaian dengan langkah tersebut.

Referensi :
http://rudystrong.wordpress.com/2010/03/04/algoritma-dalam-kehidupan-sehari/
http://www.indogamers.com/showthread.php?t=199791&page=1

Jumat, 22 April 2011

Rekursi

Rekursi adalah konsep pengulangan yang penting dalam ilmu komputer. Konsep
ini dapat digunakan untuk merumuskan solusi sederhana dalam sebuah permasalahan
yang sulit untuk diselesaikan secara iteratif dengan menggunakan loop for, while do.
Pada saat tertentu konsep ini dapat digunakan untuk mendefinisikan permasalahan
dengan konsisten dan sederhana. Pada saat yang lain, rekursi dapat membantu untuk
mengekspresikan algoritma dalam sebuah rumusan yang menjadikan tampilan algoritma
tersebut mudah untuk dianalisa.

Rekursi Dasar
Rekursi mempunyai arti suatu proses yang bias memanggil dirinya sendiri. Dalam
sebuah rekursi sebenarnya tekandung pengertian sebuah prosedur atau fungsi.
Perbedaannya adalah bahwa rekursi bisa memanggil dirinya sendiri, kalau prosedur atau
fungsi harus diipanggil melalui pemanggil prosedur atau fungsi.
Untuk memulai bahasan rekursi, kita membahas sebuah masalah sederhana yang
kemungkinan kita tidak berpikir untuk menyelesaikan dengan cara rekursif. Yaitu
permasalahan faktorial, yang mana kita menghitung hasil faktorial dari sebuah bilangan,
yaitu n. Faktorial dari n (ditulis n!), adalah hasil kali dari bilangan tersebut dengan
bilangan di bawahnya, di bawahnya hingga bilangan 1. Sebagai contoh, 4! = (4)(3)(2)(1).
Salah satu cara untuk menghitung adalah dengan menggunakan loop, yang mengalikan
masing-masing bilangan dengan hasil sebelumnya. Penyelesaian dengan cara ini
dinamakan iteratif, yang mana secara umum dapat didefinisikan sebagai berikut:
39
n! = (n)(n-1)(n-2) … (1)
Cara lain untuk menyelesaikan permasalahan di atas adalah dengan cara rekursi, dimana
n! adalah hasil kali dari n dengan (n-1)!. Untuk menyelesaikan (n-1)! adalah sama
dengan n!, sehingga (n-1)! adalah n-1dikalikan dengan (n-2)!, dan (n-2)! adalah n-2
dikalikan dengan (n-3)! dan seterusnya sampai dengan n = 1, kita menghentikan
penghitungan n! Cara rekursif untuk permasalahan ini, secara umum dapat kita detailkan
sebagai berikut:
1 jika n=0, n=1
F(n) =
nF(n-1) jika n>1
Pada Gambar 5.1 dibawah ini digambarkan penghitungan 4! dengan menerapkan
konsep rekursi. Dalam gambar tersebut juga digambarkan dua fase dasar dari sebuah
proses rekursi: fase awal dan fase balik. Dalam fase awal, masing-masing proses
memanggil dirinya sendiri. Fase awal ini berhenti ketika pemanggilan telah mencapai
kondisi terminal. Sebuah kondisi teminate adalah kondisi dimana sebuah fungsi rekursi
kembali dari pemanggilan, artinya fungsi tersebut sudah tidak memanggil dirinya sendiri
dan kembali pada sebuah nilai. Sebagai contoh, dalam penghitungan faktorial dari n,
kondisi terminal adalah n = 1, n = 0. Untuk setiap fungsi rekursi, minimal harus ada satu
kondisi terminal. Setelah fase awal selesai, kemudian proses melanjutkan pada fase balik,
dimana fungsi sebelumnya akan dikunjungi lagi dalam fase balik ini. Fase ini berlanjut
sampai pemanggilan awal, hingga secara lengkap proses telah berjalan.
Gambar 5.1 Proses Komputasi Secara Rekursif dari 4!
F(4)=4x F(3) fase awal
F(3)=3x F(2) .
F(2)=2x F(1) .
F(1)=1 kondisi terminal
F(2)=(2)x(1) fase balik
F(3)=(3)x(2) .
F(4)=(4)x (6) .
24 rekursi lengkap
40
Dalam Program 5.1 ditampilkan sebuah fungsi dalam C, fact_rec, dengan
parameter sebuah bilangan n dan menghitung faktorial secara rekursi. Fungsi tersebut
bekerja sebagai berikut. Jika n kurang dari 0, maka fungsi kembali ke 0, menunjukkan
kesalahan. Jika n = 0 atau 1, fungsi kembali ke 1 karena 0! dan 1! hasilnya 1. Dan ini
adalah kondisi terminal. Selainnya itu, fungsi kembali dengan hasil n kali factorial dari n-1.
Faktorial dari n-1 adalah penghitungan kembali secara rekursif dengan memanggil fact
lagi. Perhatikan persamaan dari definisi rekursi dengan implementasi di bawah ini.
int fact_rec(int n)
{
/************************************************************
* Menghitung sebuah faktorial secara rekursif *
************************************************************/
if (n < 0)
return 0;
else if (n == 0)
return 1;
else if (n == 1)
return 1;
else
return n * fact(n-1);
}
Referensi : lecturer.eepis-its.edu/.../Data%20Structure%20-%20Bab%205.pdf

Subrutin

PROSEDURDANFUNGSI
Berikut ini adalah sintak penulisan prosedur secara umum:

Procedurnama_prosedur(parameter1;parameter2;…)
Begin
(pernyataan-pernyataan)
End.
Berikutiniadalahsintakpenulisanfungsisecaraumum:
function nama_fungsi(perameter1;parameter2;….).
tipe_kembalian
begin
(pernyataan-pernyataan)
end;
Nama procedure dan Nama_fungsi merupakan nama yang anda berikan ke prosedur atau fungsi.
Tipe kembalian adalah tipe data dari nilai yang dikembalikan oleh fungsi.
Parameter1,parameter2…… adalah merupakan informasi yang diberikan ke prosedur atau fungsi.
Berikut adalah sebuah contoh prosedur dengan nama procedurku dan sebuah fungsi dengan nama fungsiku:
Procedure prosedurku;
Begin
(pernyataan-pernyataan);
End;
Fungction fungsiku : integer;
Begin
(pernyataan-pernyataan);
End;
Kedua subrutin diatas belum memiliki paramter CONTOHSUBRUTINYANGMEMILIKIPARAMETER
Perhatikandalammemberikanparameter, andaharusmenentukantipeparameter :

procedurcoba(b : string);
begin
(pernyataan-pernyataan);
end;
Berikutadalahcontohprosedurdanfungsidenganbeberpaparameter, masing-masingperameterdipisahkandengantandatitikkoma(;)

procedure cobalagi(b:string ; x:string );
begin
(pernyataan-pernyataan)
end;
Untuk beberapa parameter dengan tipe yang sama, anda cukup menuliskan tipe satu kali, tetapi masing-masing parameter dipisahkan dengan tanda (,) contoh ;
function lagilagicoba (I,j : longint); longint;
begin
(pernyataan-pernyataan)

Referensi : teguh-cahyono.blog.unsoed.ac.id/files/2010/04/BAB-VII-subritun.pdf

pengulangan

MATERI 4

Pengulangan

Digunakan untuk mengulang suatu perintah sebanyak yang diinginkan tanpa harus menulis ulang. Bahasa PHP mengenal tiga jenis perintah pengulangan, yaitu:

1. for

Digunakan untuk mengulangi perintah dengan jumlah pengulangan yang sudah diketahui. Pada perintah ini tidak perlu menuliskan suatu kondisi untuk diuji. Kita hanya perlu menuliskan nilai awal dan akhir variabel penghitung. Nilai variabel

penghitung akan secara otomatis bertambah atau berkurang tiap kali sebuah pengulangan dilaksanakan. Sintaks penulisannya sebagai berikut :

for (nilai_awal; nilai_akhir; penambahan/penurunan)

{

pernyataan yang akan dijalankan

}

contoh struktur pengulangan dengan for

struktur pengulangan dengan for

for($i=3; $i<= 7; $i++)

{

print(" Indonesia Tanah Airku
");

}

?>

2. while

Perintah ini digunakan untuk mengulangi suatu perintah sampai jumlah tertentu. Pengulangan akan terus berjalan selama kondisi masih bernilai benar. Sintaks penulisannya sebagai berikut :

while (kondisi)

{

pernyataan yang akan dijalankan

}

contoh struktur pengulangan dengan while

struktur pengulangan dengan while

$i=1;

while ($i <= 5) {

print("$i
");

$i++;

}

?>

3. Pernyataan for bersarang

Kita juga bisa menuliskan pernyataan for di dalam
penyataan for. Kontruksi semacam ini sering disebut
dengan penyataan for bersarang. Perhatikan contoh
berikut:
for x := 1 to 3 do
for y :=1 to 2 do
writeln (x, ‘ ‘ y);
Kalang for yang luar (dengan pencacah variabel x)
akan menjalankan kalang yang dalam (dengan pencacah
10 9 8 7 6 5 4 3 2 1
Modul Pemrograman Komputer Dasar, Universitas Muhammadiyah Yogyakarta, 2006 44
y) sebanyak 3 kali. Dan pada setiap pengulangan di
layar akan dituliskan nilai x dan y. Berikut ini
adalah keluaran dari program di atas:
1 1
1 2
2 1
2 2
3 1
3 2
Pada saat x bernilai 1, y diulang sebanyak 2 kali.
Jadi pada layar akan tertulis 1 1 dan 1 2. Demikian
juga pada saat x bernilai 2, y diulang sebanyak 2
kali. Jadi pada layar akan tertulis 2 1 dan 2 2. Hal
yang sama terjadi pada saat x bernilai 3, y diulang
sebanyak 2 kali. Sehingga pada layar tertulis 3 1
dan 3 2.

4. Pernyataan repeat-until

Pernyataan repeat...until hampir sama dengan pernyataan while...do, tetapi dengan pernyataan repeat, akan terjadi paling tidak akan terjadi satu kali eksekusi statemen. Logika dari struktur ini adalah seperti berikut:

Sedangkan sintax-nya adalah sebagai berikut:

repeat
:
:
perintah;
:
:
until ;

dalam hal ini, kita tidak perlu menggunakan begin...end karena pernyataan di antara repeat...until diperlakukan oleh PASCAL sebagai sebuah blok.
contoh:

program REPEAT_UNTIL_DEMO ;
uses wincrt;
const

PI = 3.14;
var

XL, Frequency, Inductance : real ;
begin

Inductance := 1.0;
Frequency := 100.00;
Repeat
XL := 2 * PI * Frequency * Inductance;
writeln('XL at ',Frequency,' hertz = ', XL );
Frequency := Frequency + 100.00 ;
until Frequency = 1000.00 ;

end.

Referensi :

http://amiroh.web.id/Tutorial/Pascal/repeat%20until.htm

http://latifrudianto.blogspot.com/2010/10/b-pernyataan-for-bersarang.html

percabangan

MATERI 4

Struktur Percabangan

Percabangan (decision control / branching) adalah suatu kontrol untuk pengecekan yang dilakukan sebelum statemen-statemen dalam sebuah blok PL/SQL dieksekusi. Statemen-statemen tersebut hanya akan dilakukan apabilakondisi yang didefinikan terpenuhi (bernilai TRUE). Dan sebaliknya, statemen-statemen tersebut tidak akan dieksekusi apabila kondisi tidak terpenuhi(bernilai FALSE).Selain definisi di atas, percabangan juga bisa dikatakan sebagai pemilihan: blok PL/SQL akan memilih statemen-statemen yang akan dieksekusiberdasarkan kondisi yang terpenuhi.

Secara garis besar, terdapat dua cara untuk melakukan percabangan,yaitu dengan menggunakan statemen IF dan statemen CASE.

Pernyataan if …else

Struktur percabangan jenis ini sedikit lebih kompleks bila dibandingkan dengan struktur yang hanya memiliki satu buah kondisi.

Contoh strukturnya :

if (kondisi)

{statemen_jika_kondisi_terpenuhi;}

else

{statemen_jika_kondisi_tidak_terpenuhi;}

Pernyataan if …else if

Percabangan jenis ini merupakan perluasan dari struktur percabangan dengan satu dan dua kondisi.

Contoh strukturnya :

if (kondisi_1)

{statemen_jika_kondisi_1_terpenuhi;}

else if (kondisi_2)

{statemen_jika_kondisi_2_terpenuhi;}

else

{statemen_jika_semua_kondisi_diatas_tdk_terpenuhi;}

Pernyataan case

Alternatif dari pernyataan IF untuk masalah dengan pilihan ganda

Semua masalah yang bisa CASE pasti bisa ditangani oleh IF, tetapi tidak sebaliknya

Bentuk:

SELECT CASE

CASE

[CASE

[CASE ELSE]

END SELECT


tri_s.staff.gunadarma.ac.id/Downloads/.../4.+Teknik+percabangan.pdf

elearning.amikom.ac.id/.../20110328_Part%204%20(Selection%20%20Percabangan).ppt