Jumat, 11 April 2014

Algoritma dan Pemrograman (REKURSIF)

Selamat malam semua, kali ini eta mau berbagi mengenai...




REKURSIF



Rekursif merupakan salah satu metode algoritma yang kerap digunakan dalam membuat perulangan, seperti halnya iterasi for, repeat .. until, do.. while, dan lainnya. Perbedaannya terletak dalam sifatnya yang memanggil dirinya sendiri, baik secara langsung ataupun melalui metode yang lainnya. Ciri masalah yang dapat diselesaikan secara rekursif adalah masalah itu dapat direduksi menjadi satu atau lebih masalah-masalah serupa yang lebih kecil.
Secara umum metode algoritma rekursif terdiri atas dua komponen utama, yaitu:
  1. Bagian induksi, merupakan satu atau lebih kasus yang menyelesaikan masalah serupa namun dengan ukuran data ataupun metode yang lebih sederhana.
  2. Bagian penyetop, merupakan satu atau lebih kasus yang paling sederhana dan solusinya tidak perlu lagi terjadi rekursi.
Supaya tidak terjadi rekursif yang tak berhingga, setiap langkah rekursif haruslah mengarah ke kasus penyetop. Cara bekerja algoritma rekursif ini adalah ketika sebuah metode rekursif dipanggil S(n), maka aksi ini akan di push ke stack yang ada di dalam register. Demikian pula ketika S(n) memanggil S(n-1) hingga S(k) yang merupakan komponen penyetop dipanggil maka barulah isi stack di TOP.
algoritma rekursif 
 
Dalam kehidupan sehari-hari banyak terdapat objek yang rekursif, contohnya yaitu: 
Daun Pakis, yang dibentuk oleh ranting-ranting daun yang mempunyai pola yang mirip dengan daun pakis itu sendiri. Setiap ranting daun disusun lagi oleh ranting daun dengan pola yang mirip. 
Selain itu, hal yang sama juga tampak pada Pohon Cemara.
Objek rekursif yang khas seperti Daun Pakis dan Pohon Cemara tersebut disebut Fraktal.

- Definisi rekursif diturunkan secara matematik. 
- Definisi yang tidak formal menyatakan bahwa sebuah objek dikatakan rekursif jika ia didefinisikan menjadi lebih sederhana dalam terminologi dirinya sendiri.




Perhatikan bahwa sebelum melakukan penambahan program, lakukanlah pemanggilan fungsi rekursif terlebih dahulu sampai fungsi rekursif mengembalikan nilai pasti ([Math Processing Error]). Setelah menghilangkan semua pemanggilan fungsi, penambahan baru dilakukan, mulai dari nilai kembalian dari fungsi yang paling terakhir. 

Dengan melihat kemiripan cara kerja serta kode dari fungsi faktorial dan kali, kita dapat melihat bagaimana fungsi rekursif memiliki dua ciri khas:
  1. Fungsi rekursif selalu memiliki kondisi yang menyatakan kapan fungsi tersebut berhenti. Kondisi ini harus dapat dibuktikan akan tercapai, karena jika tidak tercapai maka kita tidak dapat membuktikan bahwa fungsi akan berhenti, yang berarti algoritma kita tidak benar.
  2. Fungsi rekursif selalu memanggil dirinya sendiri sambil mengurangi atau memecahkan data masukan setiap panggilannya. Hal ini penting diingat, karena tujuan utama dari rekursif ialah memecahkan masalah dengan mengurangi masalah tersebut menjadi masalah-masalah kecil.

ANALISIS ALGORITMA REKURSIF

Referensi:
Rizki. (5 September 2012). Mengenal Algoritma Rekursif. http://rizki.info/2012/09/05/mengenal-algoritma-rekursif/. 11 April 2014
Munir, Rinaldi. (2011). Algoritma dan Pemrograman Dalam Bahasa Pascal dan C. Edisi Revisi. Bandung: Informatika.
Bertzzie. Rekursif-Dasar Analisis Algoritma. http://bertzzie.com/knowledge/analisis-algoritma/Rekursif.html#. 11 April 2014

Selasa, 04 Maret 2014

SELECTION SORT

Lanjutan yang kemarin yaa..


2. SELECTION SORT
Metode ini memiliki konsep memilih data yang maksimum / minimum dari suatu kumpulan data larik L, lalu menempatkan data tersebut ke elemen paling akhir atau paling awal sesuai pengurutan yang diinginkan. Data maksimum / minimum yang diperoleh, diasingkan ke tempat lain, dan tidak diikutsertakan pada proses pencarian data maksimum / minimum berikutnya.


Algoritma Selection Sort beroperasi sebagai berikut :
1. Temukan nilai yang paling minimum (atau sesuai keinginan) di dalam struktur data. Jika ascending, maka yang harus ditemukan adalah nilai yang paling minimum. Jika descending, maka yang harus ditemukan adalah nilai yang paling maksimum.
2. Tukar nilai tersebut dengan nilai pada posisi pertama di bagian struktur data yang belum diurutkan.
3. Ulangi langkah di atas untuk bagian struktur data yang tersisa.


Contoh Program Selection Sort C++ (Ascending):
#include <iostream>
#include <conio.h>

using namespace std;

int data[10],data2[10];
int n;

void swap(int a,int b)
{
    int swap;
    swap = data[b];
    data[b] = data[a];
    data[a] = swap;
}

void Input()
{
    cout<<"Masukkan jumlah data yang diinginkan : ";
    cin>>n;
    for(int i=0;i<n;i++)
    {
        cout<<"Masukkan data ke-"<<(i+1)<<" : ";
        cin>>data[i];
        data2[i] = data[i];
    }
    cout<<endl;
}

void Tampil()
{
    for(int i=0;i<n;i++)
    {
        cout<<data[i]<<" ";
    }
    cout<<endl;
}

void Selection_Sort()
{
    for(int i=1;i<n;i++)
    {
        for(int j=n-1;j>=i;j--)
        {
            if(data[j]<data[j-1]) swap(j,j-1);
        }
    }
    cout<<endl;
}

int main()
{
    cout<<"---------------------------------------------"<<endl;
    cout<<"SELECTION SORT C++"<<endl;
    cout<<"---------------------------------------------"<<endl<<endl;
        Input();
    cout<<"Selection Sort : ";
        Tampil();
        Selection_Sort();
    cout<<"Hasil Pengurutan Selection Sort : ";
        Tampil();
    cout<<"---------------------------------------------"<<endl;

    getch();
}

Output Setelah di Run :



Referensi:
Munir, Rinaldi. (2011). Algoritma dan Pemrograman Dalam Bahasa Pascal dan C. Edisi Revisi. Bandung: Informatika.
Krisna, Putu. (23 May 2012). Sorting-Program Bubble Sort. http://belajarohbelajar.blogspot.com/2012/05/program-bubble-sort.html. 20 Februari 2014
Nurhayati, OD. (2010). Algoritma dan Pemrograman Sorting dan Searching. http://eprints.undip.ac.id/19736/1/sorting.pdf. 20 Februari 2014
Susanto, Ilham. (3 April 2013). Analisa Algoritma | Bubble Sort. http://buublesort.blogspot.com/2013/04/analisa-algoritma.html. 20 Februari 2014
Tunk, Tunk. (22 November 2013). Sekedar Berbagi. http://aina-tunk.blogspot.com/. 20 Februari 2014
Santoso, Rachmat. (3 May 2013). Algoritma Sorting (Algoritma dan Struktur Data). http://rachmatsn.blogspot.com/2013/05/algoritma-sorting-algoritma-dan.html. 20 Februari 2014

Jumat, 21 Februari 2014

Definisi Sorting (Pengurutan) dan BUBBLE SORT

SORTING (PENGURUTAN)
-> Sorting (pengurutan) adalah proses mengatur sekumpulan objek menurut urutan atau susunan tertentu. 

Masalah pengurutan dapat ditulis menjadi 2 jenis, yaitu:
1. Ascending (Tersusun / terurut secara menaik)
Diberikan larik L dengan n elemen yang sudah terdefinisi elemen-elemennya.
Urutan larik tersebut sehingga tersusun secara menaik (dari urutan nilai terkecil ke urutan nilai terbesar), yaitu: L[0] L[1] L[2] ... L[n-1]
2. Descending (Tersusun / terurut secara menurun)
Diberikan larik L dengan n elemen yang sudah terdefinisi elemen-elemennya.
Urutan larik tersebut sehingga tersusun secara menurun (dari urutan nilai terbesar ke urutan nilai terkecil), yaitu: L[0] L[1] L[2] ... L[n-1]

Contoh data yang belum terurut : 70, 12, 45, 10, 11, 60, 13, 33, 50
Ascending = 10, 11, 12, 13, 33, 45, 50, 60, 70
Descending = 70, 60, 50, 45, 33, 13, 12, 11, 10

*Pengurutan dikatakan STABIL, jika dua atau lebih data yang sama (identik) tetap pada urutan yang sama setelah pengurutan. Misalnya didalam sekelompok data integer berikut terdapat 3 buah nilai 12 (diberi tanda petik ', '', ''' untuk mengidentifikasi urutannya.
Contoh : 70, 12', 45, 10, 12'', 60, 12''', 33, 50
Dikatakan STABIL jika hasil pengurutannya menjadi : 10, 12', 12'', 12''', 33, 45, 50, 60, 70
Dikatakan TIDAK STABIL jika hasil pengurutannya menjadi : 10, 12'', 12', 12''', 33, 45, 50, 60, 70

ALGORITMA SORTING (PENGURUTAN)
-----------------------------------------------------------
Macam-macam algoritma sorting (pengurutan), yaitu:
1. Bubble Sort
2. Selection Sort
3. Insertion Sort
4. Heap Sort
5. Shell Sort
6. Quick Sort
7. Merge Sort
8. Radix Sort
9. Tree Sort 

Tetapi kali ini eta hanya akan membahas Bubble Sort saja, karena itulah tugas yang harus dikumpul kali ini *hahaha*

1. BUBBLE SORT
Diberi nama "bubble" karena proses pengurutan secara berangsur-angsur bergerak / berpindah ke posisinya yang tepat, seperti gelembung yang keluar dari sebuah gelar bersoda. 

Bubble Sort mengurutkan data dengan cara membandingkan elemen sekarang dengan elemen berikutnya. 
- Jika elemen sekarang lebih besar dari elemen berikutnya maka kedua elemen tersebut ditukar (untuk pengurutan ascending). 
- Jika elemen sekarang lebih kecil dari elemen berikutnya, maka kedua elemen tersebut ditukar (untuk pengurutan descending).

Algoritma ini seolah-olah menggeser satu per satu elemen dari kanan ke kiri atau dari kiri ke kanan, tergantung jenis pengurutannya. Ketika satu proses telah selesai, maka bubble sort akan mengulangi proses, demikian seterusnya.

Bubble Sort berhenti jika seluruh array telah diperiksa dan tidak ada pertukaran lagi yang bisa dilakukan, serta tercapainya perurutan yang telah diinginkan.

Algoritma Bubble Sort beroperasi sebagai berikut :
1. Membandingkan data ke-i dengan data ke-(i+1) (tepat bersebelahan). Jika tidak sesuai maka tukar (data ke-i = data ke-(i+1) dan data ke-(i+1) = data ke-i). Apa maksudnya tidak sesuai? Jika kita menginginkan algoritma menghasilkan data dengan urutan ascending (A-Z), kondisi tidak sesuai adalah data ke-i > data ke-i+1, dan sebaliknya untuk urutan descending (A-Z), data ke-i < data ke-i+1.
2. Membandingkan data ke-(i+1) dengan data ke-(i+2). Kita melakukan pembandingan ini sampai data terakhir. Contoh: 1 dengan 2; 2 dengan 3; 3 dengan 4; 4 dengan 5 … ; n-1 dengan n.
3. Selesai satu proses, yang dimana kita sudah selesai membandingkan antara (n-1) dengan n. Setelah selesai satu proses, kita lanjutkan lagi proses berikutnya sesuai dengan aturan ke-1. Mulai dari data ke-1 dengan data ke-2, dan seterusnya.
4. Proses akan berhenti jika tidak ada pertukaran dalam satu proses.

Contoh Program Bubble Sort C++ (Ascending):
#include <iostream>
#include <conio.h>

using namespace std;

int data[10],data2[10];
int n;

void swap(int a,int b)
{
    int swap;
    swap = data[b];
    data[b] = data[a];
    data[a] = swap;
}

void Input()
{
    cout<<"Masukkan jumlah data yang diinginkan : ";
    cin>>n;
    for(int i=0;i<n;i++)
    {
        cout<<"Masukkan data ke-"<<(i+1)<<" : ";
        cin>>data[i];
        data2[i] = data[i];
    }
    cout<<endl;
}

void Tampil()
{
    for(int i=0;i<n;i++)
    {
        cout<<data[i]<<" ";
    }
    cout<<endl;
}

void Bubble_Sort()
{
    for(int i=1;i<n;i++)
    {
        cout<<"Proses ke-"<<(i+1)<<" : ";
        for(int j=n-1;j>=i;j--)
        {
            if(data[j]<data[j-1]) swap(j,j-1);
        }
        Tampil();
    }
    cout<<endl;
}

int main()
{
    cout<<"------------------------------------------"<<endl;
    cout<<"BUBBLE SORT C++"<<endl;
    cout<<"------------------------------------------"<<endl<<endl;
        Input();
    cout<<"Bubble Sort : ";
        Tampil();
        Bubble_Sort();
    cout<<"Hasil Pengurutan Bubble Sort : ";
        Tampil();
    cout<<"------------------------------------------"<<endl;

    getch();
}


Output Setelah di Run : 



Referensi:
Munir, Rinaldi. (2011). Algoritma dan Pemrograman Dalam Bahasa Pascal dan C. Edisi Revisi. Bandung: Informatika.
Krisna, Putu. (23 May 2012). Sorting-Program Bubble Sort. http://belajarohbelajar.blogspot.com/2012/05/program-bubble-sort.html. 20 Februari 2014
Nurhayati, OD. (2010). Algoritma dan Pemrograman Sorting dan Searching. http://eprints.undip.ac.id/19736/1/sorting.pdf. 20 Februari 2014
Susanto, Ilham. (3 April 2013). Analisa Algoritma | Bubble Sort. http://buublesort.blogspot.com/2013/04/analisa-algoritma.html. 20 Februari 2014
Tunk, Tunk. (22 November 2013). Sekedar Berbagi. http://aina-tunk.blogspot.com/. 20 Februari 2014
Santoso, Rachmat. (3 May 2013). Algoritma Sorting (Algoritma dan Struktur Data). http://rachmatsn.blogspot.com/2013/05/algoritma-sorting-algoritma-dan.html. 20 Februari 2014

Kamis, 06 Februari 2014

Program Searching Array C++

Proses pencarian (searching) merupakan proses menemukan nilai (data) tertentu di dalam sekumpulan data yang bertipe sama (baik bertipe dasar atau bertipe bentukan).
Algoritma pencarian yang paling sederhana terbagi menjadi 2, yaitu:
1. Sequential Search (Pencarian Beruntun)
2. Binary Search (Pencarian Bagi Dua)
Kali ini akan membahas pencarian (searching) data di dalam larik atau yang disebut "Array" secara beruntun (Sequential Search). Dinamakan pencarian beruntun karena prosesnya membandingkan setiap elemen larik satu per satu secara beruntun, mulai dari elemen pertama, sampai elemen yang dicari ditemukan atau seluruh elemen sudah diperiksa.

#include <iostream>
using namespace std;

int main()

{
    cout<<"Program Searching C++\n\n";
    int a[10], indeks_larik[10], i, jumlah, n;
    jumlah=0;

    for(i=0;i<10;i++)
    {
        cout<<"Masukkan data di indeks ke-"<<i<<" : ";
        cin>>a[i];
    }
        cout<<"\nMasukkan nilai yang akan dicari : ";
        cin>>n;

    for(i=0;i<10;i++)
    {
        if (a[i]==n)
        {indeks_larik[jumlah]=i; jumlah++;}
    }
        cout<<"Data yang bernilai "<<n<<", jumlahnya ada : "<<jumlah<<endl;

    cout<<"Data tersebut terdapat di : \n";
    for(i=0;i<jumlah;i++)
    {
        cout<<"Indeks ke-";
        cout<<indeks_larik[i]<<endl;
    }

    return 0;
}


Referensi:
Munir, Rinaldi. (2011). Algoritma dan Pemrograman Dalam Bahasa Pascal dan C. Edisi Revisi. Bandung: Informatika.

Minggu, 02 Februari 2014

TIPS BELAJAR GITAR BAGI PEMULA

Halo selamat siang!!
Hari ini eta mau berbagi pengalaman yaa, lebih tepatnya sih pengalaman pribadi..

Bingung judulnya apaan, yang pasti ini berhubungan dengan alat musik yaitu GITAR :)
Mungkin "Tips Belajar Gitar Bagi Pemula" kali yaaa.. haha

Cerita sedikit, dulu sekitar kelas 2 atau 3 smp ya, bisa jadi kelas 1 smp, gitar yang ada dirumah jarang dimainkan, karenaa............ "nggak bisa".
Tapi, entah kenapa ada saatnya eta pengen bisa main gitar. Yang awalnya belajar dengan sendirinya, lalu dibantu papa untuk belajar petikannya juga dan sampai pada akhirnya bisa main gitar :)
Kalian bisa denger permainan gitarnya di soundcloud eta, ini linknya:
https://soundcloud.com/maretaputriviani

Ini tips belajar gitar untuk pemula dari eta :)
1. Kalian harus punya gitar yaa haha
2. Setel gitarnya (Stem Gitar), yang gunanya untuk menyamakan tinggi/rendahnya nada dengan nada dasar gitar agar enak didengar pada saat memainkannya dengan sebuah lagu. Biasanya di aplikasi android ada yang namanya "Guitar Tuner (Free)" atau bisa cari di google untuk aplikasi lain yang berhubungan dengan stem gitar. Sebelum kalian stem gitarnya, kalian harus tau nada-nada dasar gitar ditiap senar.
E = Senar ke-1 dipetik tanpa ditekan.
B = Senar ke-2 dipetik tanpa ditekan.
G = Senar ke-3 dipetik tanpa ditekan.
D = Senar ke-4 dipetik tanpa ditekan.
A = Senar ke-5 dipetik tanpa ditekan.
E = Senar ke-6 dipetik tanpa ditekan.
(NOTE: Senar ke-1 itu senar yang paling bawah dan senar ke-6 itu senar yang paling atas)
*Cara stemnya tinggal diputar senar gitarnya perlahan sampai nadanya terdengar sama seperti di guitar tuner. (Diputar ke kiri, nadanya akan semakin tinggi dan diputar ke kanan, nadanya akan semakin rendah)
3. Apapun yang bisa dilakukan dengan sendirinya silahkan dilakukan, CONTOHNYA: search/cari kunci atau chord gitar yang mudah terlebih dahulu, misalnya kunci A, Am, D, Dm, C, E, Em, G. Menurut eta itu kunci awal yang mudah untuk dipelajari. Usahakan ketika kita menekan senar, jari-jari kita tidak menyentuh senar yang lain, karena itu akan mempengaruhi bunyinya.
Eta sudah buat panduan/petunjuk untuk kunci atau chord gitarnya agar lebih mudah dimengerti seperti gambar dibawah ini:


4. Carilah sebuah lagu yang kunci atau chord gitarnya mudah.
*Saran: Dulu, waktu pertama kali eta belajar gitar, eta coba lagu Adele-Someone Like You yang kunci gitarnya G, D, Em, C.
5. Pelajari kunci atau chord tersebut secara rutin, karena untuk mendapatkan hasil yang maksimal harus ada usaha maksimal juga dong :) Oh iya, jangan pernah nyerah untuk main gitar, karena kemampuan setiap orang berbeda-beda, ada yang langsung bisa dan ada juga yang butuh waktu lama untuk bisa :) Kemarin, awal eta belajar gitar juga nggak langsung bisa, diujung jari-jari yang digunakan untuk menekan gitar terasa sakit. Tapi, lama kelamaan sudah terbiasa.
Intinya "Rutin"!
-Rutin untuk bolak-balik kunci, misalnya dari kunci A, ke kunci C, terus kembali lagi ke kunci A dan seterusnya. Jika sudah lancar, cobalah dengan kunci yang lainnya. Secara tidak langsung, kita sudah belajar untuk melancarkan perpindahan dari kunci gitar yang satu ke kunci gitar yang lain.
-Rutin untuk menghafal kunci gitar. Kalau lupa, search lagi. Lupa lagi? search lagi dan seterusnya.
-Rutin untuk mencoba lagu-lagu yang lain agar pengetahuan tentang kunci atau chord gitar kita bertambah.
-Rutin untuk mencari dan mempelajari kunci-kunci yang lain, termasuk kunci yang agak susah dan kunci yang sering disebut "Kunci Gantung".
-Rutin search/cari tutorial gitar di youtube, biar tambah mantepp :)

Lalu, "Yakin"!
Main gitar itu susah susah gampang, dibilang susah tapi nggak terlalu susah, dibilang gampang juga enggak. Intinya jangan dianggap terlalu gampang dan jangan dianggap terlalu susah :)
Yakinlah terhadap diri sendiri, yakinlah kalau kita bisa! Yakinlah dan tetap belajar!

Dan jangan lupa, "Enjoy"!
Berusahalah enjoy terhadap permainan gitarmu, nikmatilah tiap alunan nada yang keluar dari permainan gitarmu, karenaa..... akan lebih enak "taste" atau rasanya ketika mendengar seseorang bermain gitar dengan "feeling", dibandingkan dengan seseorang yang tidak punya feeling terhadap permainannya.

*Apabila kita sudah bisa memainkan gitar/rutin belajar gitar, pada saatnya nanti kita tidak perlu lagi melihat untuk melakukan perpindahan kunci, karena jari-jari kita/tangan kita akan dengan sendirinya/otomatis berpindah :) dan itu sangaaaaatttt menyenangkaaannnn!!!

Oh iyaa, eta juga punya sedikit info tentang CAPO GITAR nih bagi yang belum tau/belum menggunakannya..


SEMOGA DAPAT MEMBERIKAN MOTIVASI UNTUK KALIAN SEMUA :)
-SELAMAT MENCOBA!!-
By: Eta

Jumat, 31 Januari 2014

Fungsi, Prosedur dan Array

Fungsi dan Prosedur
Array
Array (larik) adalah suatu tipe data terstruktur yang dapat menyimpan banyak data dengan suatu nama dan tipe data yang sama serta menempati tempat di memori yang berbeda yang disebut elemen.

Setiap elemen mempunyai nilai indeks sesuai dengan urutannya, melalui indeks inilah kita dapat mengakses data-data tersebut. Indeks dari elemen array ini dimulai dari 0, bukan 1. Array dideklarasikan dengan tanda [ ] (bracket) yang digunakan untuk menunjukkan elemen array.