Home

Get cash from your website. Sign up as affiliate

28 Juni 2009

searching

MySpace

>> apa itu searching???
Searching adalah pencarian informasi dalam suatu aplikasi, dengan suatu kunci( key )

>>metode searching
:: Metode Pencarian Beruntun (Sequential Search)
:: Metode Pencarian Bagi dua (Binary Search)

>>metode pencarian beruntun (sequential search)
- merupakan pencarian sederhana, dari awal sampai akhir
- pencarian dilakukan mulai dari elemen pertama sampai elemen ditemukan, atau sampai elemen terakhir
- kemungkinan terburuknya adalah jika data yang dicariterletak di indeks array terakhir sehingga waktu yang dibutuhkan untuk pencarian data sangat lama

contoh program :
void main()
{
clrscr();
int data[7] = {7,17,27,77,57,78,47}
int cari, index;
int ketemu=0;
cout<<"masukkan data yang ingin dicari = ";
cin>>cari;
for( int i=0; i<7; i++)
{
if( data[i] == cari )
{
ketemu=1;
index=i;
break;
}
}
if( ketemu == 1)
{
cout<<"data ada!!!"<cout<<"data ada di index ke-"<}
else cout<<"data tidak ada!!!"<getch();
}

>>Metode Pencarian Bagi dua (Binary Search)
- data yang ada harus diurutkan terlebih dahulu berdasarkan suatu urutan tertentu yaang dijadiktan kunci pencarian
- aadalah tekndik pencarian data dengan cara membagi data menjadi dua bagian setiap kali terjadi proses pengurutan
- prinsip pencarian biner adalah :
:: data diambil dari posisi 1 sampai posisi akhir n
:: kemudian cari posisi data tengah dengan rumus ( posisi awal + posisi akhir) / 2
:: data yang dicari dibandingkan dengan data yang di tengah, apakah sama atau
lebih kecil atau lebih besar
:: jika lebi besar, maka proses pencarian dicari dengan posisi awal adalah posisi
tengah + 1
:: jika posisi lebih kecil, maka proses pencarian dicari dengan posisi akhir
adalah posisi tengah - 1
:: jika data sama, berarti ketemu
- Metode ini lebih cepat dibandingkan metode pencarian beruntun.

contoh program :

int data[7] = {7,17,27,77,57,78,47}

int binary_search(int cari)
{
int index;
int l,r,m;
int n = 7;
l = 0;
r = n-1;
int ketemu = 0;
while(l<=r && ketemu==0)
{
m = (l+r)/2;
if(data[m] == cari)
{
ketemu = 1;
index = m;
cout<<"Data terletak di index ke- "< cout< break;
}
else
if (cari < data[m])
r = m-1;
else l = m+1;
}
if(ketemu == 1) return 1; else return 0;
}

void main()
{
clrscr();
int cari, hasil,index;
cout<<"masukkan data yang ingin dicari =";
cin>>cari;
hasil = binary_search(cari);
if(hasil == 1)
{
cout<<"Data ada!"<
}
else
if(hasil == 0)
cout<<"Data tidak ada!"< getch();
}

11 Juni 2009

soRTing

MySpace


Sorting adalah proses menyusun kembali data yang sebelumnya telah disusun dengan suatu pola tertentu ataupun secara acak, sehingga menjadi tersusun secara teratur menurut aturan tertentu.

Pada umumnya ada 2 macam pengurutan, yaitu:
* Pengurutan secara ascending (urut naik)
* Pengurutan secara descending (urut turun)

Jenis – jenis sorting ada 5 yaitu :

(-) bUBBlE sort

(-) Exchange Sort

(-) sELection sort

(-) inSert soRt

(-) Quick SorT


a). BUBBLE SORT

:: metode paling sederhana dalam mengurutkan data

:: tapi kinerja paling buruk jika data dalam jumlah besar

:: terdapat istilah descending ( dari besar ke kecil ) dan ascending ( dari kecil ke besar )

:: pengurutan dilakukan dengan membandingkan setiap elemen yang terletak setelah posisinya

:: contoh program :

void bubble_sort1 ( int data [ ] )

{

for ( int i=1 ; i

{

for ( int j=n-1 ; j>=i ; j-- )

{

if ( data[ j ] < style=""> // ascending

}

}

}

void bubble_sort2 ( int data [ ] )

{

for ( int i=1 ; i<6>

{

for ( int j=0 ; j<6-i>

{

if ( data[ j ] > data[ j+1] tukar ( &data[ j ],&data[ j+1] ); // descending

}

}

}

b). EXCHANGE SORT

:: sangat mirip dengan bubble sort, perbedaanny hanya dalam hal bagaimana membandingkan antar elemennya

:: exchange sort membandingkan suatu elemen dengan elemen lainnya dalam array tsb, dan melakukan pertukaran elemen jika perlu, jadi ada elemen yang selalu menjadi elemen pusat ( pivot )

:: contoh program :

void exchange_sort ( int data [ ] )

{

for ( int i=0 ; i

{

for ( int j=i+1 ; j

{

if ( data[ i ] < style="">

}

}

}

c). SELECTION SORT

:: Kombinasi sorting dan searching.


:: Metode sorting ini menggunakan ide menemukan data dengan nilai terbesar dalam array lalumemindahkannya ke bagian akhir array ( jika array harus dalam urutan dari kecil ke besar ). Jikaterbesar sudah berada di posisi yang benar, kita bisa menerapkan hal yang sama untuk data yang tersisa lainnya. Yaitu, menemukan data terbesar berikutnya dan memindahkan ke bagian akhir
:: Selama proses, pembandingan dan pengubahan hanya dilakukan pada indeks pembanding saja, pertukaran data secara fisik terjadi pada akhir proses. data

:: Contoh fungsi selection sort :


void selection_sort( )

{

int pos,i,j;

for( i=0; i

{

pos = i;

for( j=i+1; j

{

if( data[ j ] < pos =" j">

}

if(pos!=i) tukar(pos,i) ;

}

d) INSERTION SORT

:: Metode sorting ini bisa diterapkan dalam menjaga array dalam urutan tertentu. Misalkan kita memiliki array yang telah tersortir dan kita ingin memasukkan sebuah data ke dalam array. Jika kita ingin memastikan bahwa array yang telah berubah tersebut masih tetap dalam urutan tertentu, maka data baru harus dimasukkan dalam posisi tertentu yang tepat, misalnya semua data yang memiliki nilai lebih kecil berada sebelumnya dan data yang lebih besar berada di posisi sesudahnya. Ini berarti memindahkan setiap data yang lebih besar satu elemen ke kanan, sehingga terbentuk sebuah ruang kosong untuk elemen baru ini

:: Misal ascending : pengurutan dimulai dari data ke-2 sampai dengan data terakhir, jika ditemukan data yang lebih kecil, maka akan dimasukkan di posisi yang seharusnya.
:: Pada penyisipan elemen, maka elemen-elemen lain akan bergeser ke belakang.
:: Contoh program insertion sort :

void insertion_sort( )

{

int temp, i, j;

for(i=1;i

{

temp = data[ i ] ;

j =i-1;

while( data[ j ] > temp && j>=0 )

{

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

j--;

}

data[ j+1] = temp ;

}

e). QUICK SORT

:: Merupakan metode sorting yang paling cepat ( saat ini tercepat ).


:: Quick sort adalah sebuah algoritma rekursif


:: Algoritma Quicksort didasarkan pada sebuah ide yang sederhana : Diberikan sebuah

array, pilih data manapun dari array. Data yang dipilih tersebut selanjutnya kita sebut

pivot. ( Dalam praktek kali ini, kita akan gunakan data pertama dari array ) Pindah semua data yang lebih kecil dari pivot ke bagian awal list, dan pindahkan semua data yang lebih besar dari pivot ke akhir dari list. Sekarang, taruh pivot diantara dua kumpulan data tadi. Posisi pivot tersebutsudah tidak akan dipindah-pindah lagi. Kita sebut prosedur tersebut QuicksortStep


:: QuicksortStep tidak rekursif, ia hanya digunakan sebagai subroutine oleh Quicksort.

Dengan subroutine QuicksortStep ini, Quicksort menjadi mudah. Algoritma Quicksort

70 untuk melakukan sorting pada sebuah array menerapkan QuicksortStep pada array,

kemudian menerapkan Quicksort secara rekursif pada data yang berada di sebelah kiri

dan sebelah kanan pivot


:: contoh program :


void QuickSort ( int L,int R )

{

int I , j ;

int mid ;

i = L ;

j = R ;

mid = data[ (L+R) / 2] ;

do

{

while( data[ I ] <>

while( data[ j ] > mid ) j--;

if( i <=j )

{

tukar( i,j );

i++;

j--;

}

}

while( i

if( L <>

if( i > R ) QuickSort( i,R );

}


10 Juni 2009

contoh program sorting komplit

MySpace

CONTOH PROGRAM SORTING KOMPLIT ( bubble sort, exchange sort, selection sort, insert sort dan Quick sort ) >>>

int data [100], data2 [100];

int n;

void tukar ( int a, int b )

{

int t;

t = data[b];

data[b] = data[a];

data[a] = t;

}

void input()

{

cout<<"Masukkan Jumlah Data = "; cin>>n;

for(int i=0;i

{

cout<<"Masukkan Data ke-"<<(i+1)<<" = ";

cin>>data[i];

data2[i] = data[i];

}

}

void Tampil()

{

cout<<"Data : "<

for(int i=0;i

{

cout<

}

cout<

}

void AcakLagi()

{

for(int i=0;i

{

data[i] = data2[i];

}

cout<<"Data sudah teracak!"<

}

void buble_sort()

{

for (int i=1;i

{

for(int j=n-1;j>=i;j--)

{

if(data[j]

}

}

cout<<"buble sort selesai!"<

}

void exchange_sort()

{

for(int i=0;i

{

for(int j=(i+1);j

{

if(data[i] > data[j]) tukar(i,j);

}

}

cout<<"exchange sort selesai!"<

}

void selection_sort()

{

int pos,i,j;

for(i=0;i

{

pos = i;

for(j=i+1;j

{

if(data[j] < pos =" j;

}

if(pos!=i) tukar(pos,i);

}

cout<<"selection sort selesai!"<

}

void insertion_sort()

{

int temp,i,j;

for(i=1;i

{

temp = data[i];

j =i-1;

while(data[j]>temp && j>=0)

{

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

j--;

}

data[j+1] = temp;

}

cout<<"insertion sort selesai!"<

}

void QuickSort (int L,int R)

{

int i,j;

int mid;

i = L;

j = R;

mid = data[(L+R) / 2];

do

{

while(data[i] <>

while(data[j] > mid) j--;

if(i <=j)

{

tukar(i,j);

i++;

j--;

};

}

while(i

if(L <>

if(i > R) QuickSort(i,R);

}

void main()

{

int pil;

clrscr();

do

{

clrscr();

cout<<"Program Sorting Komplit"<

cout<<"++++++++++++++++++++"<

cout<<"1.Input data"<

cout<<"2.Bubble sort"<

cout<<"3.Exchange sort"<

cout<<"4.Selection sort"<

cout<<"5.Insertion sort"<

cout<<"6.Quick sort"<

cout<<"7.Tampilkan data"<

cout<<"8.Acak lagi"<

cout<<"9.Exit"<

cout<<"pilihan = "; cin>>pil;

switch(pil)

{

case 1: input(); break;

case 2: buble_sort(); break;

case 3: exchange_sort(); break;

case 4: selection_sort(); break;

case 5: insertion_sort(); break;

case 6: QuickSort(0,n-1); break;

case 7: Tampil(); break;

case 8: AcakLagi();break;

}

getch();

} while(pil!=9);

}

LinKed LisT

MySpace

>> APA ITU LINKED LIST ??
Linked list adalah salah satu struktur data dasar yg sangat fundamental dlm bidang ilmu komputer. Dengan membuat linked list maka programmer dapat menyimpan datanya kapan pun dibutuhkan. Linked list mirip dengan array, kecuali pada linked list data yg ingin disimpan dapat dialokasikan secara dinamis pada saat peng-operasian program ( run- time )

Pada array, apabila programmer ingin menyimpan data, programmer diharuskan untuk mendefinisikan besar array terlebih dahulu, seringkali programmer mengalokasikan array yg sangat besar( misalnya 100 ). hal ini tidak efektif karena sering kali yang dipakai tidak sebesar itu. dan apabila programmer ingin menyimpan data lebih dari seratus data, maka hal itu tidak dapat dimungkinkan karena sifat array yang statis. Linked list adalah salah satu struktur data yang mampu menutupi kelemahan tersebut.

Secara umum linked list tersusun atas sejumlah bagian - bagian data yg lebih kecil yang terhubung ( biasanya pointer . Linked list dapat divisualisasikan seperti kereta. Bagian kepala linked list adalah mesin kereta, data yg disimpan adalah gerbong dan pengait antar gerbong adalh pointer.
------- ------- -------
mesin data data
------- ------- -------
kepala ---> pointer ---> pointer--
------- ------- -------

programmer membaca data menyerupai kondektur yang ingin memeriksa karcis penumpang. Programmer menyusuri linked list melalui kepalanya, berlanjut ke gerbong ( data )dan seterusnya sampai gerbong terakhir. Dengan linked list programmer harus menyusuri data sebanyak n terlebih dahulu.
jadii... inti dari linked list adalah proses ( tambah, edit, hapus ) dari gerbong / node dan bagaimana menyambungkan antar gerbong node tersebut.

>> ARRAY vs LINKED LIST!!!
ARRAY

- Statis
- penambahan / penghapusan data
terbatas
- penghapusan array tidak mungkin
- random acces

LINKED LIST
- dinamis
- penambahan / penghapusan data terbatas
- penghapusan array mudah
- sequential access

-------------------------------------------------------------------------

>> GERBONG ( NODE )
gerbong ( node ) pada Linked list terdiri dari dua komponen utama, yaitu :
1. data ( bisa berupa satu atau beberapa elemen data )
2. pointer yang menunjuk ke node lain
contoh ->

struct node
{
char nama[35];
char telepon[15];
node *lanjutan;
};

pada contoh ini, struktur node berisi nama dan telepon serta sebuah pointer ( bernama lanjutan )yang menunjuk ke struktur node.

>> KELAS LINKED LIST
implementasi dari daftar linked list dinyatakan dengan kelas bernama Senarai. Deklarasinya ->

class senarai
{
private :
node *pertama;
node *pendahulu;
node *cari (char *nama);
public :
node();
~node();
int tambah (char *nama, char *telepon);
void tampil (char *nama);
int hapus (char *nama);
};

pada kelas di atas terdapat dua anggota data private bernama pertama dan pendahulu.

a) pointer pertama digunakan untuk menunjuk node terkiri dalam linked list.
pointer ini selalu menunjuk node terbaru. pointer ini akan diinisialisasi bernilai
NULL oleh konstruktor
b) pointer pendahulu digunakan untuk kepentingan penghapusan node

pada bagian private juga terdapat fungsi anggota bernama cari(), fungsi ini dikhususkan untuk diakses secara internal oleh kelas node.

Fungsi yang dikhususkan untuk diakses oleh pihak luar kelas node, yaitu :
a) tambah()
fungsi ini untuk menambahkan data ( membentuk node baru )
b) tampil()
fungsi ini untuk menampilkan seluruh data pada linked list
c) hapus()
fungsi ini digunakan untuk menghapus seluruh node berdasarkan suatu nama

masi pengen lanjutin baca??? buka aja blog archive -> Lanjutan Linked List
okay...
oia,. isi bLog ini adalah gabungan dari :
~ modul algoritma dan struktur data II (dri asdos yande yang baik hati..)
~ buku pemprograman C++, karya AbduL Kadir, penerBit Andi Yogyakarta
yud, silahkan lanjutin baca-nyaaaa.....
met baca" yaaah... ^o^


" kritik dan saran bisa tmn2 kirimkan ke emailQ -> aqsukapizza@gmail.com

semangat!!! semangat!!!

thankz for visited!!! muuuaaach..

LanJutan Linked List

MySpace

>> KONSTRUKTOR
pada saat suatu obyek diciptakan, konstruktor melakukan tindakan yaitu membuat pointer pertama bernilai NULL.Langkah ini untuk menyatakan bahwa belum ada node yang terbentuk (digunakan untuk membuat suatu list kosong). Definisi dari konstruktor Senarai :

senarai :: senarai()
{
pertama = NULL;
}


>> DESTRUKTOR
Pada saat daur hidup suatu obyek berakhir, destruktor berfungsi untuk menghapus seluruh node pada Linked List. Langkahny sbb :

senarai : : senarai()
{
//hapus seluruh node
node *node_dihapus;
while (pertama !=NULL)
{
node_dihapus = pertama;
pertama = pertama -> lanjutan;
delete node_dihapus;
}
}

Langkahnya adalah dengan menggeser pointer pertama ke setiap node. Untuk menggeser pointer yang menunjuk ke suatu node menuju ke node berikutnya, diperlukan perintah :

pertama = pertama ->lanjutan;

Pointer pertama diisi dengan nilai dari pointer lanjutan yang ditunjuk oleh pertama
perintahnya :

node_dihapus = pertama;

Digunakan untuk mengingat posisi yang ditunjuk pertama, sebelum italic;">pertama digeser menunjuk ke node berikutnya, kemudian :
lanjutan
delete node_dihapus
menyebabkabkan node dihapus!!!


>> MENAMBAH NODE
Mekanisme penambahan node :
1. Langkah awal
sebuah pointer baru ( menunjuk ke node baru ) mula - mula diciptakan terlebih
dahulu
2. Langkah penambahan
~ mengalokasikan node baru ke heap dan kemudian ditunjuk oleh pointer baru
~ data nama dan telepon diisikan ke node yang tercipta
~ pointer lanjutan pada node yang ditunjuk oleh baru diatur agar menunjuk ke node yang ditunjuk oleh pointer pertama
~ pointer pertama diatur agar menunjuk ke node yang ditunjuk oleh baru

definisi fungsi yang bertindak untuk menambah data adalah, sbb :

int senarai : : tambah(char *nama, char *telepon)
{
node "baru;
baru = new node;
if(baru)
{
baru ->lanjutan = pertama;
strcpy (baru ->nama, nama);
strcpy (baru ->telepon, telepon);
pertama = baru ; // sekarang pertama menunjuk baru
return (1);
}
else
return (0);
}

Fungsi di atas memberikan nilai balik sama dengan 1 kalau node baru berhasil diciptakan. Sekiranya pada saat hendak mencitakan node di heap ternyata memori habis, fungsi ini memberikan nilai balik berupa ()


>> MENGHAPUS NODE

Sebagai suatu struktur data yang dinamis, operasi penghapusan suatu node juga dapat dilaksanakan pada Linked List. OPerasi ini memungkinkan suatu memori yang ditempati data yang tidak terpakai lagi bisa digunakan oleh data yang lain di suatu saat nanti

Pada operasi penghapusan suatu node, ada 2 kondisi :
1. node yang akan dihapus merupakan node yang tidak memiliki pendahulu, yaitu node yang ditunjuk oleh pointer pertama
2. node yang akan dihapus memiliki node pendahulu ( bukan node yang ditunjuk oleh pertama )

int senarai :: hapus (char *nama )
{
node *posisi_data;
posisi_data = cari (nama);
if (posisi_data == NULL)
return (0); // data tak ada
else
(
if (pendahulu == NULL)
{
// node yang akan dihapus adalah node pertama
pertama = pertama ->lanjutan;
}
else
{
// bukan node pertama yang akan dihapus
pendahulu -> lanjutan = posisi_data -> lanjutan;
}
delete posisi_data;
}
return (1);
}

.. pada kondisi pertama, penghapusan dilakukan dengan mula - mula mengatur pointer pertama agar menunjuk node yang ditunjuk oleh pointer lanjutan milik node yang ditunjuk oleh pertama dengan perintah : pertama -> lanjutan;
kemudian node yang ditunjuk oleh posisi_data dihapus dengan delete

..pada kondisi kedua,mula” pointer lanjutan milik node yg ditunjuk oleh pointer pendahulu digeser akn menunjuk node yg ditunjuk oleh pointer lanjutan milik node yg ditunjuk oleh posisi_data.
Perintahnya :
pendahulu -> lanjutan = posisi_data -> lanjutan ;

kemudian diikuti dgn penghapusan node yg ditunjuk oleh posisi_data

09 Juni 2009

Tips memahami Linked List

MySpace
Tips memahami link list

Tips ini aQ dapetin dari iseng" browsing di om GoogLe...trs nemu deh tips ini salah satu web someone in google...

TIPS 1.
Pahami konsep dasar Linked List.
Singkat cerita, linked list (LL) adalah identik dengan array/ larik. LL merupakan struktur data yang bisa menyimpan rangkaian data secara dinamis. Dinamis karena bisa ditambah dan dikurangi sesuai kebutuhan program. Dengan demikian ketika kita bicara linked list maka bayangkan bahwa ia secara fisik hampir sama ilustrasinya dengan tipe data array, yaitu deretan kotak elemen yang memanjang. Bedanya, klo array itu kotaknya berdempetan, sedangkan linked list kotak-kotaknya (node/simpul) nanti terhubung dengan minimal sebuah garis panah (pointer).


TIPS 2.
Gambar dulu ilustrasinya.
LL itu abstrak, namun bisa kita buat gambaran prosesnya. Bagian yang paling rumit dalam LL adalah merangkai simpul satu dengan simpul lainnya sehingga terbentuklah LL dan menjamin masih terhubungnya seluruh rangkaian node meskipun terjadi penambahan node baru maupun penghapusan node lama di posisi manapun (depan, belakang atau tengah). Untuk itu sebelum kita menulis baris perintah code program untuk operasi-operasi LL alangkah lebih baiknya jika kita awali dengan menggambarkan dulu ilustrasinya. Baik untuk kondisi LL masih baru berupa satu node, dua node maupun banyak node. Selain itu juga ketika LL dalam mode operasi penambahan maupun penghapusan node. Pastikan kita sudah menggambarkan dengan benar tentang perubahan-perubahan terhadap kondisi panah penghubung. Sebelumnya begini, setelah proses jadi begitu. Misal, yang semula bernilai NULL alias nggak kemana-mana, setelah penambahan menjadi terhubung ke simpul terdepan.
baru->next = head;
Atau bisa juga misalnya yang semula menunjuk ke simpul X berubah dialihkan menunjuk ke simpul Y karena simpul X akan dihapus, dst.
if (temp->next == X)
{
temp->next = Y;
free(X);
}
Jadi ilustrasikan dulu skema prosesnya, baru tuliskan codingnya.

TIPS 3. Jangan takut mencoba.
Practice make perfect. Silahkan dicoba berbagai macam skenario yang mungkin terjadi. Tambah di depan, tambah di belakang atau sisipkan di tengah. Hapus simpul di tengah, hapus simpul yang di belakang sendiri atau hapus simpul yang terdepan. Bagaimana pula klo LL-nya adalah Double, artinya punya dua pointer (panah penghubung) sehingga sebuah simpul bisa membaca simpul berikutnya dan juga simpul sebelumnya. Silahkan dicoba itu semua. Siapkan selembar kertas untuk menggambarkan ilustrasi prosesnya. Pasti akan asyik dan menarik

02 Juni 2009

cara nambahin emoticons di PLurk & Blog

huaaaaaheeeem...Waiting Yoyo monkey Pictures, Images and Photos
sambil ngantuk aq buat blog ini...hehehe
tadi abis kena " shock therapy " sieh!!!
rushie mw sharing ke temen" semua cara nambahin emoticons di Plurk & di Blog...
carany gampang banged koq..

::untuk di PLurk, klik disini untuk liat emoticons nya.. trs pilih salah satu and copy direct linkny and paste in ur PLurk

:: untuk di blog, carany sama kayak yang di plurk.. cuma yang di copy itu "HTML CODE" nya, trs paste di postingan di blog ato di "about me"

huuum.. gampang kaaaaan...
so, met mencoba!!!
semangad!!!