Jumat, 11 April 2014

REKURSIF


Rekursif adalah suatu fungsi yang didalamnya memanggil fungsinya sendiri. Untuk tata cara penggunaannya sama dengan Fungsi pada umumnya. Rekursif lebih efisien dari pada perulangan, karena script akan terlihat lebih terstruktur dan mudah dimengerti.

Perhatikan contoh persoalan dibawah ini :
       long int faktorial (long int a)
{
       if (a==1  a==0)
       {
            return (1);
       }
       else if (a>1)
       {
            return (a*faktorial (a-1));
       }
       else
      {
           return (0);
      }
}


Fungsi diatas adalah fungsi untuk mencari nilai faktorial dari angka yang dilambangkan dengan long int a. Mengapa fungsi diatas termasuk Rekursif? Karena didalam code tersebut fungsi faktorial memanggil dirinya sendiri pada saat pemanggilan angka berikutnya faktorial (a-1).
Misal angka  yang diinputkan adalah 4 maka faktorial (a-1) = 3. dan perulangan itu akan berhenti jika tidak memenuhi syarat lagi.

Contoh program rekursif:
 

1. Rekursif pembalik kata

#include<stdio.h>
#define MAX 100

void rekursif_angka_terbalik(int);
main()
{
int i,j,jml=0;
char bil[MAX];

printf("\n=======================");
printf("\n=NAMA    : M. Nico S     =");
printf("\n=NIM    : 09031281320019=");
printf("\n=KELAS    : SI 2 B   =");
printf("\n=======================");
printf("\n");
printf("\n^_^Program Pembalik Angka^_^");
printf("\n");
printf("\nMasukkan bilangan yang akan dibalik kawan= ");
gets(bil);

for (i=0;bil[i];i++)

jml=jml++;
printf("\n");
printf("Maka hasilnya adalah= ");

for(j=jml-1;j>=0;j--)

printf("%c",bil[j]);

printf("\n");
}



2. Rekursif  rumus bangun ruang
#include <iostream.h>
#include <conio.h>
void main()
{

int pilihan;
float Lsegitiga,Ksegitiga,Lpersegi,Kpersegi,Lpersegipanjang,Kpersegipanjang,Llingkaran,Klingkaran,Vkubus,LPkubus,Vbalok,LPbalok,Vbola,LPbola,Vlimassegiempat,LPlimassegiempat,Vtabung,LPtabung ;
float a, t, s, p, l, r, phi,sAB,sBC,sCA;
char ulang;
do
{

cout<<"(c) Created 2009 by dsuryanta.Inc"<<endl<<endl;
cout<<"Menu Utama"<<endl;
cout<<"1. Menghitung Luas & Keliling Segitiga"<<endl;
cout<<"2. Menghitung Luas & Keliling Bujursangkar"<<endl;
cout<<"3. Menghitung Luas & Keliling Persegipanjang"<<endl;
cout<<"4. Menghitung Luas & Keliling Lingkaran"<<endl;
cout<<"5. Menghitung Volum & Luas Permukaan Kubus"<<endl;
cout<<"6. Menghitung Volum & Luas Permukaan Balok"<<endl;
cout<<"7. Menghitung Volum & Luas Permukaan Bola"<<endl;
cout<<"8. Menghitung Volum & Luas Permukaan Limas Segi Empat"<<endl;
cout<<"9. Menghitung Volum & Luas Permukaan Tabung"<<endl;
cout<<"10. Exit"<<endl;
cout<<endl<<endl;
cout<<"Pilihan anda : ";cin>>pilihan;
switch (pilihan)
{
case 1 :
cout<<"Menghitung Luas Segitiga"<<endl;
cout<<"Menghitung Keliling Segitiga"<<endl;
cout<<"Masukkan alas segitiga : ";cin>>a;
cout<<"Masukkan tinggi segitiga : ";cin>>t;
cout<<"Masukkan sisi AB segitiga : ";cin>>sAB;
cout<<"Masukkan sisi BC segitiga : ";cin>>sBC;
cout<<"Masukkan sisi CA segitiga : ";cin>>sCA;
Lsegitiga = 0.5*a*t;
Ksegitiga = sAB+sBC+sCA;
cout<<"Luas segitiga adalah : "<<Lsegitiga<<endl;
cout<<"Keliling segitiga adalah : "<<Ksegitiga<<endl;
break;
case 2 :
cout<<"Menghitung Luas Bujursangkar"<<endl;
cout<<"Menghitung Keliling Bujursangkar"<<endl;
cout<<"Masukkan sisi persegi : ";cin>>s;
Lpersegi = s*s;
Kpersegi = 4*s;
cout<<"Luas bujursangkar : "<<Lpersegi<<endl;
cout<<"Keliling bujursangkar : "<<Kpersegi<<endl;
break;
case 3 :
cout<<"Menghitung Luas Persegipanjang"<<endl;
cout<<"Menghitung Keliling Persegipanjang"<<endl;
cout<<"Masukkan panjang : ";cin>>p;
cout<<"Masukkan lebar : ";cin>>l;
Lpersegipanjang = p*l;
Kpersegipanjang = (p+l)*2;
cout<<"Luas Persegipnjng: "<<Lpersegipanjang<<endl;
cout<<"Keliling Persegipnjng: "<<Kpersegipanjang<<endl;
break;
case 4 :
cout<<"Menghitung Luas Lingkaran"<<endl;
cout<<"Menghitung Keliling Lingkaran"<<endl;
cout<<"Masukkan jari-jari lingkaran : ";cin>>r;
phi = 3.14;
Llingkaran = phi*r*r;
Klingkaran = phi*(r+r);
cout<<"Luas lingkaran adalah : "<<Llingkaran<<endl;
cout<<"Keliling lingkaran adalah : "<<Klingkaran<<endl;
break;
case 5 :
cout<<"Menghitung Volum Kubus"<<endl;
cout<<"Menghitung Luas Permukaan Kubus"<<endl;
cout<<"Masukkan sisi kubus : ";cin>>s;
Vkubus = s*s*s;
LPkubus = 6*s;
cout<<"Volum kubus adalah : "<<Vkubus<<endl;
cout<<"Luas permukaan kubus adalah : "<<LPkubus<<endl;
break;
case 6 :
cout<<"Menghitung Volum Balok"<<endl;
cout<<"Menghitung Luas Permukaan Balok"<<endl;
cout<<"Masukkan panjang balok : ";cin>>p;
cout<<"Masukkan lebar balok : ";cin>>l;
cout<<"Masukkan tinggi balok : ";cin>>t;
Vbalok = p*l*t;
LPbalok = (2*p*l)+(2*p*t)+(2*l*t);
cout<<"Volum balok adalah : "<<Vbalok<<endl;
cout<<"Luas permukaan balok adalah : "<<LPbalok<<endl;
break;
case 7 :
cout<<"Menghitung Volum Bola"<<endl;
cout<<"Menghitung Luas Permukaan Bola"<<endl;
cout<<"Masukkan jari jari bola : ";cin>>r;
cout<<"Masukkan tinggi bola : ";cin>>t;
phi = 3.14;
Vbola = 4/3*phi*r*t*t*t;
LPbola = 4*phi*r*r;
cout<<"Volum bola adalah : "<<Vbola<<endl;
cout<<"Luas permukaan bola adalah : "<<LPbola<<endl;
break;
case 8 :
cout<<"Menghitung Volum Limas Segi Empat"<<endl;
cout<<"Menghitung Luas Permukaan Limas Segi Empat"<<endl;
cout<<"Masukkan panjang limas segi empat : ";cin>>p;
cout<<"Masukkan lebar limas segi empat : ";cin>>l;
cout<<"Masukkan tinggi limas segi empat : ";cin>>t;
Vlimassegiempat = (p*l*t)*1/3;
LPlimassegiempat = ((p+l)*t)+(p*l);
cout<<"Volum limas segi empat adalah : "<<Vlimassegiempat<<endl;
cout<<"Luas permukaan limas segi empat adalah : "<<LPlimassegiempat<<endl;
break;
case 9 :
cout<<"Menghitung Volum Tabung"<<endl;
cout<<"Menghitung Luas Permukaan Tabung"<<endl;
cout<<"Masukkan jari jari tabung : ";cin>>r;
cout<<"Masukkan tinggi tabung : ";cin>>t;
phi = 3.14;
Vtabung = phi*r*r*t;
LPtabung = (2*phi*r)*(r*t);
cout<<"Volum tabung adalah : "<<Vtabung<<endl;
cout<<"Luas permukaan tabung adalah : "<<LPtabung<<endl;
break;
case 10 :
cout<<"Exitâ?¦"<<endl;
break;
default:
cout<<"Menu tidak tersediaâ?¦"<<endl;
break;
}
cout<<"Kembali ke Menu Utama (y/n)?";cin>>ulang;
}while(ulang == 'y');
}


3. Rekursif segitiga siku-siku terbalik

#include <iostream>
#include <conio.h>
#include <stdio.h>   
using namespace std;

void rekursif(int argc, char *argv[])
{

int t,y,x;

cout << "Masukkan tinggi segitiga : ";
cin  >> t;
cout << "----------------------------\n";
   
for(y=1;y<=t;y++)
{
    cout<<" ";
for(x=1;x<=y;x++)
{
cout << "*";
}
cout << " " << endl;
}

cout<<endl<<endl;
system("PAUSE");
return EXIT_SUCCESS;
}


4. Rekursif menetukan nilai segitiga

#include <stdio.h>
#include <conio.h>

int main(){
    int i,j,
         sudut[3];
    for (i=0;i<3;i++){
        printf("Sudut ke - %d : ",i+1);
        scanf("%d",&sudut[i]);
    }
    int sum;
    bool samaKaki  = false;
    for (i=0;i<3;i++){
        sum = 0;
        for (j=0;j<3;j++){
            if (j != i)  {
                sum += sudut[j];
            }
        }
        if (sudut[i] == sum){
             printf("Segitiga Sama Kaki");
             samaKaki = true;
        }
    }
    if (! samaKaki){
        printf("Bukan segitiga sama kaki");
    }
    getch();
    return 0;
}

oK!! sMOGA BERMNFAAT..,, AMIEN



Jumat, 07 Maret 2014

SELECTION SORT

SELECTION SORT :

Pengertian Selection Sort

Selection Sort merupakan salah satu algoritma pengurutan yang sederhana yaitu
bekerja dengan terlebih dahulu menemukan elemen (terkecil atau terbesar) menggunakan scan linear dan swapping ke posisi pertama dalam daftar,
kemudian menemukan elemen (terkecil atau terbesar) kedua dengan menukarkan elemen yang tersisa dan sebagainya.
Selection sort terbagi atas dua bagian adalam pengerjaannya yaitu dengan mencari nilai minimum (ascending) atau maksimum (descending) dalam sebuah list.


Kekurangan dan kelebihan Selection Sort
Setiap metode pengerjaan pastilah memiliki kekurangan dan kelebihannya dalam prosesnya,
seperti halnya lebih cepat namun tidak praktis ataupun lebih lama namun prosesnya sangat praktis.
Begitupun dengan algoritma Selection Sort yang memiliki kekurangan dan kelebihan dalam proses pengerjannya.

Kelebihan Selection Sort :

a) Algoritma ini sangat rapat dan mudah untuk diimplementasikan.
b) Mempercepat pencarian
c) Mudah menentukan data maksimum /minimum.
d) Mudah menggabungkannya kembali.
e) Kompleksitas selection sort relatif lebih kecil.

Kekurangan Selection Sort :

a) Membutuhkan method tambahan
b) Sulit untuk digabungkan kembali
c) Perlu dihindari untuk penggunaan data lebih dari 1000 tabel, karena akan menyebabkan kompleksitas yang lebih tinggi dan kurang praktis

Contoh Program Selection Sort :


#include <iostream>
#include <iomanip>
#include <conio.h>
using namespace std;

int selectionsort (int array[], const int size)
 {
 int i, j, kecil, temp;
 for (i=0; i<size; i++)
 {
 kecil=i;
 for (j=i; j<size; j++)
 {
 if (array[kecil]>array[j])
 {kecil = j;}
 }
 temp = array [i];
 array[i] = array[kecil];
 array[kecil] = temp;

 }
 }
int main()
{
    cout <<" \t\t\t***** Assalamualaikum wr.wb ***** \n\n";
    cout <<" \t\t\t***** M.Nico Saputra ***** \n\n";
    cout <<" \t\t\t***** Sistem Informasi 2B  Fakultas Ilmu Komputer ***** \n\n";
    cout <<" \t\t\t***** Program Selection Sort ***** \n\n";
   int NumList[5] = {7, 77, 39, 24, 21};
 int temp;
 cout<<"Data sebelum diurutkan: \n\n";
 for (int d=0; d<5; d++)
 {

 cout<<setw(3)<<NumList[d];
 }

 cout<<"\n\n";
 selectionsort(NumList,5);

 cout<<"Data setelah diurutkan:\n\n";
 for (int iii=0; iii<5; iii++)
 cout<<setw(3)<<NumList[iii]<<endl<<endl;
 getche ();
}


Outputnya adalah :

Data sebelum diurutkan ;

7, 77, 39, 24, 21

Data setelah diurutkan :

7, 21, 24, 39, 77




















Sabtu, 22 Februari 2014

Bubble Sort

Bubble Sort

A.  Pengertian Bubble Sort

Bubble Sort adalah salah satu algoritma untuk sorting data, atau kata lainnya mengurutkan data dari yang terbesar ke yang terkecil atau sebaliknya (Ascending atau Descending).
Bubble sort (metode gelembung) adalah metode/algoritma pengurutan dengan dengan cara melakukan penukaran data dengan tepat disebelahnya secara terus menerus sampai bisa dipastikan dalam satu iterasi tertentu tidak ada lagi perubahan. Jika tidak ada perubahan berarti data sudah terurut. Disebut pengurutan gelembung karena masing-masing kunci akan dengan lambat menggelembung ke posisinya yang tepat.
        Metode pengurutan gelembung (Bubble Sort) diinspirasikan oleh gelembung sabun yang berada dipermukaan air. Karena berat jenis gelembung sabun lebih ringan daripada berat jenis air, maka gelembung sabun selalu terapung ke atas permukaan. Prinsip di atas dipakai pada pengurutan gelembung.
Algoritma bubble sort adalah salah satu algoritma pengurutan yang paling simple, baik dalam hal pengertian maupun penerapannya. Ide dari algoritma ini adalah mengulang proses pembandingan antara tiap-tiap elemen
array dan menukarnya apabila urutannya salah. Pembandingan elemen-elemen ini akan terus diulang hingga tidak perlu dilakukan penukaran lagi. Algoritma
ini termasuk dalam golongan algoritma comparison sort, karena menggunakan perbandingan dalam operasi antar elemennya. Berikut ini adalah gambaran dari algoritma bubble sort. Misalkan kita mempunyai sebuah array dengan.  Elemen-elemen “4 2 5 3 9”. Proses yang akan terjadi apabila digunakan algoritma bubblesort adalah sebagai berikut.

Pass pertama
(4 2 5 3 9) menjadi (2 4 5 3 9)
(2 4 5 3 9) menjadi (2 4 5 3 9)
(2 4 5 3 9) menjadi (2 4 3 5 9)
(2 4 3 5 9) menjadi (2 4 3 5 9)
Pass kedua
(2 4 3 5 9) menjadi (2 4 3 5 9)
(2 4 3 5 9) menjadi (2 3 4 5 9)
(2 3 4 5 9) menjadi (2 3 4 5 9)
(2 3 4 5 9) menjadi (2 3 4 5 9)
Pass ketiga
(2 3 4 5 9) menjadi (2 3 4 5 9)
(2 3 4 5 9) menjadi (2 3 4 5 9)
(2 3 4 5 9) menjadi (2 3 4 5 9)
(2 3 4 5 9) menjadi (2 3 4 5 9)


Dapat dilihat pada proses di atas, sebenarnya pada pass kedua, langkah kedua, array telah terurut. Namun algoritma tetap dilanjutkan hingga pass kedua berakhir. Pass ketiga dilakukan karena definisi terurut dalam algoritma bubblesort adalah tidak ada satupun penukaran pada suatu pass, sehingga pass ketiga dibutuhkan untuk memverifikasi keurutan array tersebut.

B.      Algoritma Bubble Sort

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 algoritme 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).
2.    Membandingkan data ke-(i+1) dengan data ke-(i+2). Kita melakukan pembandingan ini sampai data terakhir. Contoh: 1 dgn 2; 2 dgn 3; 3 dgn 4; 4 dgn 5 … ; n-1 dgn n.
3.    Selesai satu iterasi, adalah jika kita sudah selesai membandingkan antara (n-1) dgn n. Setelah selesai satu iterasi kita lanjutkan lagi iterasi berikutnya sesuai dengan aturan ke-1. mulai dari data ke-1 dgn data ke-2, dst.
4.    Proses akan berhenti jika tidak ada pertukaran dalam satu iterasi.

Contoh Kasus Bubble Sort :

Misalkan kita punya data seperti ini: 6, 4, 3, 2 dan kita ingin mengurutkan data ini (ascending) dengan menggunakan bubble sort. Berikut ini adalah proses yang terjadi:
Iterasi ke-1: 4, 6, 3, 2 :: 4, 3, 6, 2 :: 4, 3, 2, 6 (ada 3 pertukaran)
Iterasi ke-2: 3, 4, 2, 6 :: 3, 2, 4, 6 :: 3, 2, 4, 6 (ada 2 pertukaran)
Iterasi ke-3: 2, 3, 4, 6 :: 2, 3, 4, 6 :: 2, 3, 4, 6 (ada 1 pertukaran)
Iterasi ke-4: 2, 3, 4, 6 :: 2, 3, 4, 6 :: 2, 3, 4, 6 (ada 0 pertukaran) -> proses selesai

     C.      Kompleksitas Algoritma Bubble Sort


Kompleksitas Algoritma Bubble Sort dapat dilihat dari beberapa jenis kasus, yaitu worst-case, average-case, dan best-case.

Kondisi Best-Case


Dalam kasus ini, data yang akan disorting telah terurut sebelumnya, sehingga proses perbandingan hanya dilakukan sebanyak (n-1) kali, dengan satu kali pass.
Proses perbandingan dilakukan hanya untuk memverifikasi keurutan data. Contoh Best-Case dapat dilihat pada pengurutan data “1 2 3 4” di bawah ini.

Pass Pertama
(1 2 3 4) menjadi (1 2 3 4)
(1 2 3 4) menjadi (1 2 3 4)
(1 2 3 4) menjadi (1 2 3 4)

Dari proses di atas, dapat dilihat bahwa tidak terjadi penukaran posisi satu kalipun, sehingga tidak dilakukan pass selanjutnya. Perbandingan elemen dilakukan sebanyak tiga kali. Proses perbandingan pada kondisi ini hanya dilakukan sebanyak (n-1) kali. Persamaan Big-O yang diperoleh dari proses ini adalah O(n). Dengan kata lain, pada kondisi Best-Case algoritma Bubble Sort termasuk pada algoritma
lanjar.


  Kondisi Worst-Case
 Dalam kasus ini, data terkecil berada pada ujung array. Contoh Worst-Case dapat dilihat pada pengurutan data “4 3 2 1” di bawah ini

Pass Pertama
(4 3 2 1) menjadi (3 4 2 1)
(3 4 2 1) menjadi (3 2 4 1)
(3 2 4 1) menjadi (3 2 1 4)
Pass Kedua
(3 2 1 4) menjadi (2 3 1 4)
(2 3 1 4) menjadi (2 1 3 4)
(2 1 3 4) menjadi (2 1 3 4)
Pass Ketiga
(2 1 3 4) menjadi (1 2 3 4)
(1 2 3 4) menjadi (1 2 3 4)
(1 2 3 4) menjadi (1 2 3 4)
Pass Keempat
(1 2 3 4) menjadi (1 2 3 4)
(1 2 3 4) menjadi (1 2 3 4)
(1 2 3 4) menjadi (1 2 3 4)

Dari langkah pengurutan di atas, terlihat bahwa setiap kali melakukan satu pass, data terkecil akan bergeser ke arah awal sebanyak satu step. Dengan kata lain, untuk menggeser data terkecil dari urutan keempat menuju urutan pertama, dibutuhkan pass sebanyak tiga kali, ditambah satu

kali pass untuk memverifikasi. Sehingga jumlah proses pada kondisi best case dapat dirumuskan sebagai berikut. Jumlah proses = n2+n (3)
Dalam persamaan (3) di atas, n adalah jumlah elemen yang akan diurutkan. Sehingga notasi Big-O yang didapat adalah O(n2). Dengan kata lain, pada kondisi worst-case, algoritma Bubble Sort termasuk dalam kategori algoritma kuadratik.

  Kondisi Average-Case
 Pada kondisi average-case, jumlah pass ditentukan dari elemen mana yang mengalami penggeseran ke kiri paling banyak. Hal ini dapat ditunjukkan oleh proses pengurutan suatu array, misalkan saja (1 8 6 2). Dari (1 8 6 2), dapat dilihat bahwa yang akan mengalami proses penggeseran paling banyak adalah elemen 2, yaitu sebanyak dua kali.

Pass Pertama
(1 8 6 2) menjadi (1 8 6 2)
(1 8 6 2) menjadi (1 6 8 2)
(1 6 8 2) menjadi (1 6 2 8)
Pass Kedua
(1 6 2 8) menjadi (1 6 2 8)
(1 6 2 8) menjadi (1 2 6 8)
(1 2 6 8) menjadi (1 2 6 8)
Pass Ketiga
(1 2 6 8) menjadi (1 2 6 8)
(1 2 6 8) menjadi (1 2 6 8)
(1 2 6 8) menjadi (1 2 6 8)

Dari proses pengurutan di atas, dapat dilihat bahwa untuk mengurutkan diperlukan dua buah passing, ditambah satu buah passing untuk memverifikasi. Dengan kata lain, jumlah proses perbandingan dapat dihitung sebagai berikut. Jumlah proses = x2+x (4) Dalam persamaan (4) di atas, x adalah jumlah penggeseran terbanyak. Dalam hal ini, x tidak pernah lebih besar dari n, sehingga x dapat dirumuskan sebagai
Dari persamaan (4) dan (5) di atas, dapat disimpulkan bahwa notasi
big-O nya adalah O(n2). Dengan kata lain, pada kondisi average case algoritma Bubble Sort termasuk dalam algoritma kuadratik.

D.      Implementasi dalam Pseudo-Code
Setiap algoritma akan memiliki implementasi yang berbeda, tergantung dari bahasa program yang dipakai. Oleh karena itu berikut ini adalah pseudo-code dari algoritma bubblesort, untuk memudahkan implementasi bubblesort pada bahasa apapun.

procedure bubbleSort( A : list of
sortable items ) defined as:
do
swapped := false
for each i in 0 to length(A) - 2

inclusive do:
if A[i] > A[i+1] then
swap( A[i], A[i+1] )
swapped := true
end if
end for
while swapped
end procedure

E.       Kelebihan dan Kelemahan Bubble Sort

Kelebihan :
•      Metode Buble Sort merupakan metode yang paling simpel
•      Metode Buble Sort mudah dipahami algoritmanya

Kelemahan:
Meskipun simpel metode Bubble sort  merupakan metode pengurutan yang paling tidak efisien.  Kelemahan buble sort adalah pada saat mengurutkan data yang sangat besar akan mengalami kelambatan luar biasa, atau dengan kata lain kinerja memburuk cukup signifikan ketika data yang diolah jika  data cukup banyak. Kelemahan lain adalah jumlah pengulangan akan tetap sama jumlahnya walaupun data sesungguhnya sudah cukup terurut. Hal ini disebabkan setiap data dibandingkan dengan setiap data yang lain untuk menentukan posisinya.

Contoh penerapan Algoritma Bubble Sort dalam Bahasa C ( Code Blocks ) :

#include <stdio.h>
#include <conio.h>
#define n 5
void main()
{
 int A[n] = {13,12,9,5,18,};
        int X, I, K;
        printf("Sebelum di-sort\n");
        for (I=0; I <= n-1; I++)
            printf("%3i", A[I]);
        printf("\n");

        K=0;
        while(K<=n-2)
        {
            I=0;
            while(I<=n-2 - K)
            {
                if (A[I] > A[I+1])
                {
                    X = A[I];
                    A[I] = A[I+1];
                    A[I+1] = X;                }
                I++;
            }
            K++;
        }
        printf("Sesudah di-sort\n");
        for (I=0; I<= n-1; I++)
            printf("%3d", A[I]);

    return 0;
Outputnya adalah :

Sebelum di-sort :  13, 12, 9, 5, 18


Sesudah di-sort : 5, 9, 12, 13, 18



Contoh penerapan Algoritma Bubble Sort dalam PHP :
1.  <?php
2.  define ("n", 7);
3.  $A = array(15,10,7,22,17,5,12);
4.  echo "<h1>Sebelum di-sort</h1>";
5.  for ($I=0; $I <= n-1; $I++)
6.      echo "$A[$I] ";
7.  
8.  $K=0;
9.  while($K<=n-2)
10.{
11.    $I=0;
12.    while($I<=n-2 - $K)
13.    {
14.        if ($A[$I] > $A[$I+1])
15.        {
16.            $X = $A[$I];
17.            $A[$I] = $A[$I+1];
18.            $A[$I+1] = $X;
19.        }
20.        $I++;
21.    }
22.    $K++;
23.}
24.echo "<h1>Sesudah di-sort</h1>";
25.for ($I=0; $I<= n-1; $I++)
26.    echo "$A[$I] ";
27.?>

Sabtu, 15 Februari 2014

Program Sequential search pada C++

Contoh Programnya :

#include <iostream>
#include <conio.h>
using namespace std;


int main()
{
    int i;
    int cari,ketemu;
    int A[100] ;

    cout<<"Program Searching\n";
    cout<<"Masukkan 7 buah data : \n\n";
    for (i=1;i<=7;i++)
    {
        cout<<"Masukkan data ke-"<<i<<endl;
        cin>>A[i];
    }
    cout<<endl;
    cout<<"input bilangan yang dicari :";
    cin>>cari;

    ketemu=0;
    for(i=0;i<=7;i++)
    {
        if (A[i]==cari)
        {
            ketemu=1;
            cout<<"Data ditemukan pada indeks ke-"<<i;
        }
    }

    if (ketemu==0){
        cout<<"Data tidak ditemukan";
        }

        getch();

}



Program searching :
Masukkan 7 buah data :

Masukkan data ke- 1 :  14

Masukkan data ke- 2 : 12

Masukkan data ke- 3 : 17 

Masukkan data ke- 4 : 16

Masukkan data ke- 5 : 14 

Masukkan data ke- 6 : 14

Masukkan data ke- 7 : 13


Input bilangan yang dicari : 14


Data ditemukan pada indeks ke-1,   data ditemukan pada indeks ke-5, dan data ditemukan pada indeks ke-6.





Sabtu, 08 Februari 2014

Algoritma dan Pemrograman

1.  Apakah Itu Algoritma

Ditinjau dari asal-usul katanya, kata Algoritma sendiri mempunyai sejarah yang aneh. Orang hanya menemukan kata algorism yang berarti proses menghitung dengan angka arab. Anda dikatakan algorist jika Anda menghitung menggunakan angka arab. Para ahli bahasa berusaha menemukan asal kata ini namun hasilnya kurang memuaskan. Akhirnya para ahli sejarah matematika menemukan asal kata tersebut yang berasal dari nama penulis buku arab yang terkenal yaitu Abu Ja’far Muhammad Ibnu Musa Al-Khuwarizmi. Al-Khuwarizmi dibaca orang barat menjadi Algorism. Al-Khuwarizmi menulis buku yang berjudul Kitab Al Jabar Wal-Muqabala yang artinya “Buku pemugaran dan pengurangan” (The book of restoration and reduction). Dari judul buku itu kita juga memperoleh akar kata “Aljabar” (Algebra). Perubahan kata dari algorism menjadi algorithm muncul karena kata algorism sering dikelirukan dengan arithmetic, sehingga akhiran –sm berubah menjadi –thm. Karena perhitungan dengan angka Arab sudah menjadi hal yang biasa, maka lambat laun kata algorithm berangsur-angsur dipakai sebagai metode perhitungan (komputasi) secara umum, sehingga kehilangan makna kata aslinya. Dalam bahasa Indonesia, kata algorithm diserap menjadi algoritma.

2.  Definisi Algoritma
“Algoritma adalah urutan langkah-langkah logis penyelesaian masalah yang disusun secara sistematis dan logis”. Kata logis merupakan kata kunci dalam algoritma. Langkah-langkah dalam algoritma harus logis dan harus dapat ditentukan bernilai salah atau benar. Dalam beberapa konteks, algoritma adalah spesifikasi urutan langkah untuk melakukan pekerjaan tertentu. Pertimbangan dalam pemilihan algoritma adalah, pertama, algoritma haruslah benar. Artinya algoritma akan memberikan keluaran yang dikehendaki dari sejumlah masukan yang diberikan. Tidak peduli sebagus apapun algoritma, kalau memberikan keluaran yang salah, pastilah algoritma tersebut bukanlah algoritma yang baik.
Pertimbangan kedua yang harus diperhatikan adalah kita harus mengetahui seberapa baik hasil yang dicapai oleh algoritma tersebut. Hal ini penting terutama pada algoritma untuk menyelesaikan masalah yang memerlukan aproksimasi hasil (hasil yang hanya berupa pendekatan). Algoritma yang baik harus mampu memberikan hasil yang sedekat mungkin dengan nilai yang sebenarnya.

Ketiga adalah efisiensi algoritma. Efisiensi algoritma dapat ditinjau dari 2 hal yaitu efisiensi waktu dan memori. Meskipun algoritma memberikan keluaran yang benar (paling mendekati), tetapi jika kita harus menunggu berjam-jam untuk mendapatkan keluarannya, algoritma tersebut biasanya tidak akan dipakai, setiap orang menginginkan keluaran yang cepat. Begitu juga dengan memori, semakin besar memori yang terpakai maka semakin buruklah algoritma tersebut. Dalam kenyataannya, setiap orang bisa membuat algoritma yang berbeda untuk menyelesaikan suatu permasalahan, walaupun terjadi perbedaan dalam menyusun algoritma, tentunya kita mengharapkan keluaran yang sama. Jika terjadi demikian, carilah algoritma yang paling efisien dan cepat.

3.  Beda Algoritma dan Program
Program adalah kumpulan pernyataan komputer, sedangkan metode dan tahapan sistematis dalam program adalah algoritma. Program ditulis dengan menggunakan bahasa pemrograman. Jadi bisa disebut bahwa program adalah suatu implementasi dari bahasa pemrograman. Beberapa pakar memberi formula bahwa :
Program = Algoritma + Bahasa (Struktur Data)
Bagaimanapun juga struktur data dan algoritma berhubungan sangat erat pada sebuah program. Algoritma yang baik tanpa pemilihan struktur data yang tepat akan membuat program menjadi kurang baik, demikian juga sebaliknya.
Pembuatan algoritma mempunyai banyak keuntungan di antaranya :
Pembuatan atau penulisan algoritma tidak tergantung pada bahasa pemrograman manapun, artinya penulisan  algoritma independen dari bahasa pemrograman dan komputer yang melaksanakannya.
Notasi algoritma dapat diterjemahkan ke dalam berbagai bahasa pemrograman.
Apapun bahasa pemrogramannya, output yang akan dikeluarkan sama karena algoritmanya sama.

Beberapa hal yang perlu diperhatikan dalam membuat algoritma :

Teks algoritma berisi deskripsi langkah-langkah penyelesaian masalah. Deskripsi tersebut dapat ditulis dalam notasi apapun asalkan mudah dimengerti dan dipahami.
Tidak ada notasi yang baku dalam penulisan teks algoritma seperti notasi bahasa pemrograman. Notasi yang digunakan dalam menulis algoritma disebut notasi algoritmik.
Setiap orang dapat membuat aturan penulisan dan notasi algoritmik sendiri.
 Hal ini dikarenakan teks algoritma tidak sama dengan teks program. Namun, supaya notasi algoritmik mudah ditranslasikan ke dalam notasi bahasa pemrograman tertentu, maka sebaiknya notasi algoritmik tersebut berkorespondensi dengan notasi bahasa pemrograman secara umum.

Notasi algoritmik bukan notasi bahasa pemrograman, karena itu pseudocode dalam notasi algoritmik tidak dapat dijalankan oleh komputer. Agar dapat dijalankan oleh komputer, pseudocode dalam notasi algoritmik harus ditranslasikan atau diterjemahkan ke dalam notasi bahasa pemrograman yang dipilih. 
Perlu diingat bahwa orang yang menulis program sangat terikat dalam aturan tata bahasanya dan spesifikasi mesin yang menjalannya.
Algoritma sebenarnya digunakan untuk membantu kita dalam mengkonversikan suatu permasalahan ke dalam bahasa pemrograman.

Algoritma merupakan hasil pemikiran konseptual, supaya dapat dilaksanakan oleh komputer, algoritma harus ditranslasikan ke dalam notasi bahasa pemrograman. Ada beberapa hal yang harus diperhatikan pada translasi tersebut, yaitu :

a.  Pendeklarasian variabel
Untuk mengetahui dibutuhkannya pendeklarasian variabel dalam penggunaan bahasa pemrograman apabila    tidak semua bahasa pemrograman membutuhkannya.

b.  Pemilihan tipe data
Apabila bahasa pemrograman yang akan digunakan membutuhkan pendeklarasian variabel maka perlu hal ini dipertimbangkan pada saat pemilihan tipe data.

c.  Pemakaian instruksi-instruksi
Beberapa instruksi mempunyai kegunaan yang sama tetapi masing-masing memiliki kelebihan dan kekurangan yang berbeda.

d.  Aturan sintaksis
Pada saat menuliskan program kita terikat dengan aturan sintaksis dalam bahasa pemrograman yang akan digunakan.

e.  Tampilan hasil
Pada saat membuat algoritma kita tidak memikirkan tampilan hasil yang akan disajikan. Hal-hal teknis ini diperhatikan ketika mengkonversikannya menjadi program.

f.  Cara pengoperasian compiler atau interpreter.
Bahasa pemrograman yang digunakan termasuk dalam kelompok compiler atau interpreter.

Perbedaan Fungsi dan Prosedur

Seperti yang kita tau bahwa dalam bahasa pemrograman apapun pastilah memiliki istilah yang disebut dengan function dan procedure. Tidak peduli kamu menggunakan bahasa pemrograman apapun, seperti Java, C++, Visual Basic, dan bahasa pemrograman lainnya, pastilah mengenal kedua istilah ini. Lalu apa yang membedakan antara functiond dan procedure, dan kapan kita perlu menggunakan function dan kapan kita perlu menggunakan procedure ?

Oke saya akan mencoba membahasnya. Perbedaan antara function dan procedure adalah : kalau function dia akan mengembalikan suatu nilai pada  pemanggilnya, sedangkan kalau procedure dia tidak akan mengembalikan nilai apapun pada fungsi pemanggilnya. Untuk lebih jelasnya saya akan memberikan contoh studi kasus program untuk menghitung luas persegi panjang dalam bahasa Java. Berikut ini merupakan source code procedure yang digunakan untuk menghitung luas persegi panjang

public void HitungLuasPersegiPanjang(int p, int l)
{
int luasPersegiPanjang;

luasPersegiPanjang = p * l;

System.out.println(“Luas persegi panjang = ” + ” ” + luasPersegiPanjang);
}

Berikut ini merupakan source code function untuk menghitung luas persegi panjang

public int HitungLuasPersegiPanjang(int p, int l)
{
int luasPersegiPanjang;

luasPersegiPanjang = p * l;
return luasPersegiPanjang;
}

Perhatikan kata yang saya cetak tebal baik pada source code procedure maupun source code function. Seperti yang telah disebutkan diatas bahwa procedure tidak mengembalikan suatu nilai apapun pada fungsi pemanggilnya sehingga tipe data yang digunakan adalah void. Sedangkan tipe data yang digunakan pada function adalah tipe data sesuai dengan nilai yang dikembalikan. Pada kasus ini tipe data yang digunakan untuk menghitung luas persegi panjang adalah integer (dideklarasikan sebagai int di Java).  Perbedaan berikutnya, kalau pada function terdapat statement return yang berguna untuk mengembalikan nilai pada pemanggilnya. Sedangkan pada procedure tidak terdapat statement return. Pada procedure HitungLuasPersegiPanjang, setelah nilai luas persegi panjang didapatkan, maka nilai luasnya akan langsung dicetak. Hal ini ditandai dengan statement System.out.println. Perbedaan berikutnya adalah cara pemanggilan. Untuk procedure pemanggilan dilakukan dengan memanggil nama procedurenya saja. Untuk function pemanggilan harus menggunakan variabel untuk menampung nilai yang dikembalikan oleh function. Untuk lebih jelasnya coba perhatikan cara pemanggilan procedure dan function dibawah ini

Cara memanggil procedure

HitungLuasPersegiPanjang(p, l);

Cara memanggil function

luas = HitungLuasPersegiPanjang(p, l);

Untuk pemanggilan procedure cukup dituliskan nama procedurenya, yaitu HitungLuasPersegiPanjang lengkap dengan parameter procedurenya yaitu p, dan l. Sedangkan untuk memanggil function HitungLuasPersegiPanjang, maka nilai luas persegi panjang yang dikembalikan oleh function ini harus  ditampung terlebih dahulu di variabel yang bernama luas. Dimana variabel ini harus memiliki tipe data yang sama dengan tipe data function, yaitu integer. Nama function harus ditulis lengkap dengan parameter functionnya, yaitu p dan l.

Kapan waktunya kita menggunakan fungsi dan prosedur ?. Anda dapat menggunakan fungsi apabila anda membuat suatu method yang perlu mengembalikan nilai pada pemanggilnya. Sedangkan kamu perlu menggunakan procedure apabila method tersebut tidak perlu untuk mengembalikan nilai ke pemanggilnya. Pada contoh kasus HitungLuasPersegiPanjang ini method yang lebih cocok dipakai adalah function daripada procedure. Hal ini disebabkan karena method ini digunakan untuk menghitung luas persegi panjang, dimana nilai yang perlu dikembalikan pada fungsi pemanggilnya adalah nilai luas persegi panjang.