Kamis, 21 Februari 2013

bubble sorting

Diberi nama “Bubble” karena proses pengurutan secara berangsur angsur bergerak/berpindah ke posisinya yang tepat, seperti gelembung yang keluar dari sebuah gelas bersoda.
Bubble Sort mengurutkan data dengan cara membandingkan elemen sekarang dengan elemen berikutnya.Jika elemen sekarang lebih besardari elemen berikutnya maka kedua elemen tersebut ditukar (untuk pengurutan ascending).
Jika elemen sekarang lebih kecildari elemen berikutnya, maka kedua elemen tersebut ditukar (untuk pengurutan descending).Algoritma ini seolah-olah menggeser satu per satu elemen dari kanan ke kiri atau kiri ke kanan, tergantung jenis pengurutannya. Ketika satu proses telah selesai, maka bubble sort akan mengulangi proses, demikianseterusnya.
Bubble sort berhenti jika seluruh array telah diperiksa dan tidak ada pertukaran lagi yang bisa dilakukan, serta tercapai perurutan yang telah diinginkan.
Contoh pengurutan data yang dilakukan dengan metode Bubble Sort sebagai berikut:
Proses 1:
22 10 15 3 8 2
22 10 15 3 2 8
22 10 15 2 3 8
22 10 2 15 3 8
22 2 10 15 3 8
2 22 10 15 3 8
Pengecekandimulaidari data yang paling akhir, kemudiandibandingkandengan data di depannya, jika data di depannyalebihbesarmakaakanditukar.
Proses 2:
2 22 10 15 3 8
2 22 10 15 3 8
2 22 10 3 15 8
2 22 3 10 15 8
2 3 22 10 15 8
Pengecekandilakukansampaidengan data ke-2 karena data pertamapastisudah paling kecil.
Proses 3:
2 3 22 10 15 8
2 3 22 10 8 15
2 3 22 8 10 15
2 3 8 22 10 15
Proses 4:
2 3 8 22 10 15
2 3 8 22 10 15
2 3 8 10 22 15
Proses 5:
2 3 8 10 22 15
2 3 8 10 15 22
Pengurutan berhenti.

berikut programnya c++ bubble sort:
#include <iostream.h>
#include <conio.h>
#include <stdlib.h>

bubble_acak()
{
    clrscr();
    int arr[1000];
    int x, i; //untuk array
   int s, t, temp; //untuk sorting

   //input jumlah data yang diproses
   cout<<"angka yang akan dimasukkan : "; cin>>x;

   //input nilai masing" array
   srand(time(NULL));
   for (i=0; i<x; i++)
      arr[i] = rand() %1000;

   //output nilai" array
   clrscr();
   cout<<"====== array ======"<<endl<<endl;
    cout<<"angka angkanya :"<<endl;
   for (i=0; i<x; i++)
      cout<<arr[i]<<", ";


   //sorting
   cout<<endl<<endl<<endl<<endl;
   cout<<"====== sorting ======"<<endl<<endl;
   s = 0;
   for (s=0; s<x; s++)
       {
      for (t = s+1; t<x; t++)
         {
              if (arr[s]>arr[t])
             {
               temp = arr[s];
                    arr[s] = arr[t];
                 arr[t] = temp;
             }
         }
      }
   cout<<"setelah sorting :"<<endl;
   for (i=0; i<x; i++)
      cout<<arr[i]<<", ";

   getch();
}


bubble_manual()
{
    clrscr();
    int arr[1000];
    int x, i; //untuk array
   int s, t, temp; //untuk sorting

   //input jumlah data yang diproses
   cout<<"angka yang akan dimasukkan : "; cin>>x;

   //input nilai masing" array
   for (i=0; i<x; i++)
       {
      cout<<"masukkan angka ke-"<<i<<" : ";
      cin>>arr[i];
      }

   //output nilai" array
   clrscr();
   cout<<"====== array ======"<<endl<<endl;
    cout<<"angka angkanya :"<<endl;
   for (i=0; i<x; i++)
      cout<<arr[i]<<", ";


   //sorting
   cout<<endl<<endl<<endl<<endl;
   cout<<"====== sorting ======"<<endl<<endl;
   s = 0;
   for (s=0; s<x; s++)
       {
      for (t = s+1; t<x; t++)
         {
              if (arr[s]>arr[t])
             {
               temp = arr[s];
                    arr[s] = arr[t];
                 arr[t] = temp;
             }
         }
      }
   cout<<"setelah sorting :"<<endl;
   for (i=0; i<x; i++)
      cout<<arr[i]<<", ";

   //mission complete
   getch();
}


main ()
{
    int pilih;
   char ulang;

   do
   {
      clrscr ();
       cout<<"tekan 1 : bilangan yang disorting dimasukan secara acak"<<endl;
       cout<<"tekan 2 : bilangan yang disorting dimasukan secara manual"<<endl;
       cout<<"masukkan pilihan : "; cin>>pilih;

      switch (pilih)
      {
          case 1:
             bubble_acak();
         break;

         case 2:
             bubble_manual();
         break;

         default:
            clrscr();
            cout<<"\"maaf\""<<endl;
             cout<<"\"pilihan yang dimasukkan salah\"";
         break;
      }
      cout<<endl<<endl<<"tekan \"Y\" lalu \"ENTER\" untuk ulang ---> "; cin>>ulang;
   }
   while (ulang=='Y');
}

ARRAY 1 DAN 2 DIMENSI


Larik

Dari Wikipedia bahasa Indonesia, ensiklopedia bebas
Larik (Bahasa Inggrisarray), dalam ilmu komputer, adalah suatu tipe data terstruktur yang dapat menyimpan banyak data dengan suatu nama yang sama dan menempati tempat di memori yang berurutan (kontigu) serta bertipe data sama pula.
Larik dapat diakses berdasarkan indeksnya. Indeks larik umumnya dimulai dari 0 dan ada pula yang dimulai dari angka bukan 0. Pengaksesan larik biasanya dibuat dengan menggunakan perulangan (looping).

Larik Satu Dimensi

Larik satu dimensi merupakan jenis larik dasar dan jenis larik yang paling sering digunakan, pemakaian larik satu dimensi terutama dipakai dalam tipe data string (terutama dalam bahasa Bahasa pemrograman C).

Larik Dua Dimensi

Larik dua dimensi merupakan tipe larik yang lain. Larik dua dimensi sering dipakai untuk merepresentasikan tabel dan matriks dalam pemrograman.

[sunting]Larik dalam beberapa bahasa pemrograman

[sunting]Bahasa Pascal

Larik dalam bahasa Pascal dapat didefinisikan dengan indeks awal dan indeks akhirnya.
Contoh:
program larik;
var arr: array[1..10] of integer;  //larik dengan indeks awal 1 dan indeks akhir 10
begin
  arr[1] := 5; //memasukkan nilai ke indeks 1
  writeln(arr[i]); //mencetak angka 5
end.

[sunting]Bahasa C

Larik dalam bahasa C selalu dimulai dari indeks 0. Larik dapat didefinisikan secara statik atau dinamik. Jika didefinisikan statik, ukuran larik akan tetap dari awal program hingga akhir program. Jika didefinisikan dinamik, ukuran larik dapat berubah selama program berjalan karena memesan tempat pada memori heap. Proses pemesanan tempat pada memori disebut dengan alokasi. Sedangkan proses pembebasan memori yang sudah dipesan disebut dengan dealokasi.
Contoh larik statik:
#include <stdio.h>
int main(){
  int arr[10]; //indeks awal 0 dan indeks akhir 9
  arr[0] = 5;
  printf("%d\n", arr[0]);
}
Contoh larik dinamik:
#include <malloc.h>
int main(){
  int * arr;
  arr = (int *) malloc(10 * sizeof(int)); //memesan 10 tempat pada memori
  arr[0] = 5;
  free(arr);                              //menghancurkan larik. Memori pada heap dibebaskan
  arr = (int *) malloc(5 * sizeof(int));  //memesan 5 tempat baru pada memori
  free(arr);                              //di akhir program jangan lupa untuk menghancurkan larik dinamik
}

[sunting]Bahasa Java

Dalam bahasa Java tipe data larik direpresentasikan sebagai sebuah objek khusus. Karena itu pada bahasa Java larik yang dibuat selalu bersifat dinamik. Namun walaupun bersifat dinamik, larik pada bahasa Java tidak perlu dihancurkan karena proes penghancuran dilakukan secara otomatis melalui suatu prosedur yang disebut dengan Pengumpulan sampah (Inggris: Garbage Collecting).
Sama seperti bahasa C, indeks larik selalu dimulai dari 0.
Contoh:
public class larik {  
  public static void main(String args[]) {
    int[] arr = new arr[10];
    arr[0] = 5;
    System.out.println(arr[0]); 
  }  
}

[sunting]PHP

Sama seperti di JAVA larik di PHP juga merupakan sebuah object lebih tepatnya lagi map terorder. Ada dua tipe larik di PHP, indexed array (simple array) dan associated array (key=>value array). Di PHP, element larik bisa berupa string, Bilangan, boolean, dan semua tipe data primitive lainnya, termasuk larik juga bisa menjadi element larik lainnya.
Cara medefinisikan larik:
#mendefinisikan array kosong 
$larik = array();
Contoh indexed array (simple array):
$jam = array(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12);
$hari = array('senin', 'selasa', 'selasa', 'rabu', 'kamis', 'jumat', 'sabtu');
Contoh associated array:
$bulan = array('1'=>'January', '2'=>'February', '3'=>'Maret', '4'=>'April');

$komponenKalender = array(
  'bulan'=> array(1, 2, 3, 4, 5, 6, 7, 8, 9 ,10 , 11, 12),
  'hari' => array('senin', 'selasa', 'selasa', 'rabu', 'kamis', 'jumat', 'sabtu')
);

Struktur algoritma


Struktur Dasar Algoritma

 | 30 Mar ’09 1 Comment
CategoryPemrograman
Setelah konstruksi dasar pembentuk algoritma, sekarang kita lihat bagaimana struktur dasar dari teks algoritma. Sehingga dengan mengikuti struktur tersebut kita dapat menyusun algoritma-algoritma tertentu untukmenyelesaikan masalah dengan efektif.
Algoritma disusun oleh 3 bagian (blok) yang biasanya selalu ada dalam sebuah algoritma. 3 bagian itu adalah :
  1. bagian judul (header)
  2. bagian deklarasi (declaration)
  3. bagian algoritma (sebagian menyebutnya dengan deskripsi)
Ketiga bagian tersebut secara umum ditunjukkan dalam notasi algoritmik seperti di bawah.
PROGRAM nama program
{berisi judul algoritma, singkat dan jelas}
DEKLARASI
{sebagai tempat untuk mengenalkan nama atau variabel apa saja yang digunakan dan tipe datanya serta prosedur dan fungsi yang dipakai}
ALGORITMA :
{berisi langkah-langkah penyelesaian masalah}
Pada setiap bagian sebaiknya diberikan komentar untuk memperjelas maksud dari pernyataan tersebut. Untuk komentar, penulisannya diapit oleh tanda kurung kurawal { dan }. Dengan komentar, algoritma yang kita buat menjadi lebih dimengerti dan dipahami, dan komentar ini tidak akan dieksekusi karena akan dilewati saja oleh program. :-D Namanya juga komentar…
Bagian Judul (header)
Sesuai bagiannya, kita perlu memberi judul terhadap algoritma yang kita buat. Judul sebaiknya singkat, dan jelas serta menggambarkan apa yang dilakukan oleh program. Di bawah judul, sebaiknya juga diberikan komentar singkat tentang masalah yang ingin diselesaikan itu, dan bagaimana masukan dan keluarannya.
Contohnya :
PROGRAM ucapan selamat datang
{program untuk menampilkan ucapan selamat datang kepada pengguna dengan masukan nama pengguna}
Bagian Deklarasi (declaration)
Digunakan untuk memperkenalkan semua variabel atau nama-nama yang akan terlibat dalam algoritma termasuk tipe data dan sebagainya. Apapun nama dan variabel yang digunakan dalam algoritma harus di ‘umumkan’ terlebih dahulu di bagian deklarasi ini, jika tidak, algoritma (dan program) tidak akan bisa menyelesaikan masalah. Justru malah menjadi masalah :-D :-D
Contoh deklarasi adalah :
DEKLARASI
nama : string
usia : integer
Nama atau variabel adalah satu kesatuan leksikal, sehingga nama tidak boleh mengandung spasi, tanda baca, tanda operator dan sebagainya kecuali tanda “_” (garis bawah). Pada algoritma, tidak dibedakan antara huruf besar (kapital) atau huruf kecil, semuanya dianggap sama. Lebih jelasnya akan kita lihat pada posting berikutnya…
Bagian Algoritma (deskripsi)
Bagian ini adalah inti dari program untuk menyelesaikan masalah. Berisi instruksi-instruksi untuk pemecahan masalah dengan menggunakan notasi pseudo-code. Tidak perlu berpanjang lebar, kita lihat saja contohnya.
ALGORITMA :
read(namausia)
write(‘Selamat Datang ‘, nama)
write(‘Usia Anda sekarang adalah ‘, usia, ‘tahun’)
Nah, kalau ketiga bagian di atas digabungkan menjadi 1 kesatuan algoritma akan menjadi :
PROGRAM ucapan selamat datang
{program untuk menampilkan ucapan selamat datang kepada pengguna dengan masukan nama pengguna}
DEKLARASI
nama : string
usia : integer
ALGORITMA :
read(namausia)
write(‘Selamat Datang ‘, nama)
write(‘Usia Anda sekarang adalah ‘, usia, ‘tahun’)

Runtunan


Seleksi dengan algoritma pengurutan

Satu algoritma seleksi yang sederhana dan digunakan secara luas adalah memanfaatkan algoritma pengurutan pada list, kemudian mengekstrak elemen ke-k. Ini adalah contoh reduksi satu permasalahan ke dalam permasalahan lain. Hal ini bermanfaat ketika kita ingin melakukan banyak seleksi terhadap sebuah list tunggal, dimana kasus ini membutuhkan hanya satu operasi pengurutan di awal yang membutuhkan waktu yang lama (expensive), yang diikuti oleh banyak operasi ekstraksi yang sebentar (Cheap). Ketika kita hanya ingin melakukan satu seleksi, atau ketika kita ingin selalu mengubah list di antara tiap seleksi, metode ini dapat jadi lebih lama (costly), biasanya membutuhkan paling sedikit O(n log n) waktu, dimana n adalah panjang dari list.

[sunting]Algoritma minimum/maksimum linear

Kasus terburuk algoritma linear untuk menemukan minimum atau maksimum adalah sangat jelas; kita menyimpan dua peubah, satu mengacu ke indeks dari elemen minimum/maksimum yang didapatkan sementara, dan satu lagi menyimpan nilainya. Bersamaan dengan kita memindai list tersebut, kita perbarui kedua peubah tersebut jika kita menemukan sebuah elemen yang sesuai:
 function minimum(a[1..n])
     minIndex := 1
     minValue := a[1]
     for i from 2 to n
         if a[i] < minValue
             minIndex := i
             minValue := a[i]
     return minValue
 function maximum(a[1..n])
     maxIndex := 1
     maxValue := a[1]
     for i from 2 to n
         if a[i] > maxValue
             maxIndex := i
             maxValue := a[i]
     return maxValue
Sebagai catatan, kemungkinan akan terdapat banyak elemen minimum atau maksimum. Oleh karena pembandingan di atas adalah kaku (strict), algoritma tersebut menemukan elemen minimum dengan indeks yang minimum. Dengan memanfaatkan pembandingan tak kaku (non-strict) (≤ and ≥), kita akan menemukan elemen minimum dengan indeks maksimum.
Jika kita ingin menemukan kedua elemen minimum dan maksimuam bersamaan, perbaikan kecil dapat dilakukan dengan sepasang pembandingan, yaitu membandingkan elemen ganjil dan genap pada setiap pasang dan membandingkannya dengan elemen maksimum dan minimum.

[sunting]Algoritma seleksi umum nonlinear

Dengan memakai ide yang sama yang digunakan dalam algoritma minimum/maksimum, kita dapat mengkonstruksi sebuah algoritma sederhana tapi tidak efisien untuk menemukan item terkecil ke-k atau terbesar ke-k, yang membutuhkan waktu O(kn), yang efektif untuk k yang kecil. Untuk memperolehnya, kita cukup menemukan nilai paling ekstrem dan memindahnya ke bagian awal sampai kita mendapatkan indeks yang diinginkan. Hal ini dapat dilihat sebagai pengurutan seleksi yang tidak lengkap. Berikut ini adalah algoritma berbasis minimum:
 function select(a[1..n], k)
     for i from 1 to k
         minIndex = i
         minValue = a[i]
         for j = i+1 to n
             if a[j] < minValue
                 minIndex = j
                 minValue = a[j]
         swap a[i] and a[minIndex]
     return a[k]
Keuntungan lain dari metode ini adalah:
  • Setelah mengetahui lokasi elemen terkecil ke-j, waktu yang dibutuhkan hanya O(j + (k-j)2) untuk menemukan elemen terkecil ke-k, atau hanya O(k) untuk k ≤ j.
  • Metode ini dapat dilakukan dengan struktur data list berkait, dimana list terbut berbasis partisi yang membutuhkan pengaksesan acak.

PENGULANGAN

PENGULANGAN
Pengulangan Dengan For…Next
Pengulangan proses menggunakan For…Next adalah bentuk pengulangan
terkendali dengan variabel kendali yang terus berjalan maju atau mundur. Format
penulisan pengulangan ini adalah sebagai berikut:
For variabel = nilai_awal To nilai_akhir [Step langkah]
<Proses dalam pengulangan>
Next variable
Contoh 1:
Untuk menentukan barisan bilangan 1, 2, 3, …., 10 maka bilangan mempunyai nilai
awal = 1, nilai akhir=10 dan step antar bilangan = 1, sehingga bisa ditulis dengan
For bilangan=1 To 10 Step 1
<Proses untuk barisan bilangan>
Next bilangan
Karena step=1, maka secara default tidak perlu dituliskan sehingga  perintahnya bias
ditulis dengan:
For bilangan=1 To 10
<Proses untuk barisan bilangan>
Next bilangan
Contoh Aplikasi 5.1:
Untuk menampilkan barisan bilangan 1 sampai dengan N, dengan N dimasukkan.
Hasil barisan ditampilkan pada Label.
(1) Buat project baru. Pada form, isi property [Name] dengan formLatihan51
(2) Tambahkan komponen-komponen: 1 label, 1 textbox, 1 buah listBox dan 1
command button

(3) Untuk label1, isi property [Caption] dengan ”N=”. Untuk textbox1,
kosongkan property [Text]. Untuk command1, isi property [Caption] dengan
Barisan. Atur posisi masing-masing komponen seperti gambar berikut :






Runtunan




Algoritma merupakan runtunan satu atau lebih instruksi yang berarti bahwa :
– Tiap instruksi dikerjakan satu per satu.
– Tiap instruksi dilaksanakan tepat sekali, tidakada instruksi yang diulang.
– Urutan instruksi yang dilaksanakan pemroses
sama dengan urutan instruksi sebagai tertulis di dalam teks algoritma.
– Akhir dari instruksi terakhir merupakan akhir
algoritma.Pengaruh Urutan Instruksi
• Urutan instruksi dalam algoritma adalah penting. Urutan instruksi menunjukkan urutan logika penyelesaian masalah.
• Urutan instruksi yang berbeda mungkin
tidak ada pengaruh terhadap solusi
persoalan, tetapi mungkin juga
menghasilkan keluaran yang berbeda,
tergantung pada masalahnya,



Contoh kasus 1
Urutan instruksi tidak berpengaruh terhadap solusi persoalan.
• Dibaca dua buah nilai integer dari keyboard, A dan B.
• Hitung jumlah keduanya dan hasil kali keduanya
• Cetak hasil jumlah dan kali ke piranti keluaran.Algoritma Runtunan_1
di baca dua buah bilangan integer kemudian hitung penjumlahan dan perkalian dua buah bilangan tersebut, dan tampilkan hasilnya ke layar.


Deklarasi :
A, B, C, D : integer
Deskripsi :
read (A, B) {1}
C - A + B {2}
D - A * B {3}
write (C, D) {4}
Hasil algoritma di atas sama jika urutan no. 2 dan 3 diubah (ditukarkan) sebagai berikut :
Algoritma Runtunan_2
{di baca dua buah bilangan integer kemudian
hitung penjumlahan dan perkalian dua buah
bilangan tersebut, dan tampilkan hasilnya ke layar}
Deklarasi :
A, B, C, D : integer
Deskripsi :
read (A, B) {1}
D - A * B {3}
C - A + B {2}
write (C, D) {4}
 Contoh kasus 2
• Urutan instruksi berpengaruh terhadap solusi persoalan.Algoritma Runtunan_3
Contoh algoritma yang menghasilkan keluaran yang berbeda jika urutan instruksi diubah
Deklarasi :
A, B : integer
Deskripsi :
A-10 {1}
A- 2*A {2}
B- A {3}
write (B) {4}Algoritma Runtunan_4
Contoh algoritma yang menghasilkan keluaran yang berbeda jika urutan instruksi diubah
Deklarasi :
A, B : integer
Deskripsi :
A-10 {1}
B- A {3}
A- 2*A {2}
write (B)



Rabu, 20 Februari 2013

Variable!


Pengertian Variable

Variabel adalah suatu tempat untuk menampung data yang nilainya selalu berubah.
Sedangkan, Konstanta adalah suatu tempat untuk menampung data yang nilainya selalu tetap dan tidak pernah berubah.
Variabel digunakan sebagai tempat penyimpanan data sementara. Data yang disimpan dalam variabel akan hilang setelah program selesai dieksekusi. Untuk penyimpanan data yang permanen, kita dapat menyimpan data di database atau di disk.
Variabel di dalam PHP diawali dengan tanda $. Untuk dapat menggunakan variabel, ada dua langkah yang harus dilakukan, deklarasi dan inisialisasi.
Cara mendeklarasikan variable
Deklarasi variabel bisa disebut juga memperkenalkan atau mendaftarkan variabel ke dalam program. Dalam php, deklarasi variabel seringkali digabung dengan inisialisasi. Variabel dalam PHP dinyatakan dengan awalan $.
Contoh :
$var_angka1
$var_angka2
$var_hasil
Inisialisasi variable
Inisialisasi variabel adalah mengisi nilai untuk pertama kalinya ke dalam variabel.
Contoh inisialisasi :
$nama = “Heru Widayat”;
$jumlah = 3;
$harga = 500;

Aturan pemberian nama variabel :

  • Dimulai dengan tanda $
  • Karakter pertama harus huruf atau garis bawah ( _ )
  • Karakter berikutnya boleh huruf, angka, atau garis bawah
  • Tidak boleh menggunakan spasi
  • Tidak boleh menggunakan karakter-karakter khusus (seperti : +, -, *, /, <, >, dll)