Kamis, 21 Februari 2013

Sub Program


1. Prosedure
Prosedure adalah bagian dari suatu program yang disusun secara terpisah untuk melakukan suatu tugas khusus/fungsi tertentu.
Pada dasarnya ada dua macam bentuk prosedur yaitu Subrutin (subprogram) dan Fungsi.
Subrutin (Subprogram) adalah bagian dari program yang dibuat terpisah untuk melaksanakan sabagian dari tugas yang harus diselesaikan oleh suatu program. Pada umumnya yang dikenal dengan nama “prosedur” sebenarnya adalah ”subprogram”.
Fungsi adalah bagian dari program yang dibuat terpisah untuk melaksanakan fungsi tertentu yang menghasilkan suatu nilai untuk dikembalikan ke program utama.
  
Manfaat pembuatan prosedur :
a.  Modularisasi
     Suatu program yang besar dan kompleks dapat dibagi kedalam beberapa prosedure sehingga setiap prosedure merupakan bagian yang mudah dikerjakan.
b.  Simplifikasi
     Dalam suatu program, sering diperlukan suatu tugas yang harus dikerjakan berulang-ulang dengan nilai-nilai variabel yang berbeda-beda. Agar tidak merepotkan maka tugas ini cukup ditulis sekali saja dalam bentuk prosedur yang kemudian dipanggil berulang-ulang sesuai kebutuhan.
Bentuk Umum Prosedur (Subprogram)
     Prosedur nama_prosedur
   {spesifikasi dari prosedur, keadaan awal sebelum prosedur dilaksanakan dan juga keadaaan akhir setelah prosedur dilaksanakan}
   Deklarasi
   {Deklarasi variabel-variabel prosedur}

   Deskripsi
   {Deskripsi dari tugas-tugas prosedur}
  
   Penggunaan prosedur pada suatu program menyebabkan munculnya dua kategori variabel yaitu :
a.  Variabel Lokal
   yaitu variabel yang hanya dikenal dan berlaku dalam suatu  prosedur saja.
b.Variabel Global
   yaitu variabel yang berlaku di semua bagian program dan di semua prosedur.
   Semua variabel yang didefinisikan pada deklarasi suatu prosedur adalah variabel lokal, dan variabel-variabel yang didefinisikan pada deklarasi algoritma utama adalah variabel global
    
    Ketika suatu prosedur dipanggil maka pada hakikatnya bisa dilakukan pertukaran data antara program utama dan prosedur. Pertukaran ini dilakukan melalui parameter.
Parameter terbagi atas 2 macam :
a.  Parameter Aktual
     Adalah parameter yang disertakan pada saat prosedur dipangggil untuk dilaksanakan, sering disebut argumen.
b.  Parameter Formal
     Adalah parameter yang dituliskan pada definisi suatu prosedur/fungsi.
    
   
     Ada 3 jenis parameter formal, yaitu :
a.  Parameter Masukan (Input):
     Parameter yang menerima nilai dari parameter aktual
b.  Parameter Keluaran (Output) :
     Parameter yang menyerahkan nilai ke parameter aktual
c.  Parameter masukan dan keluaran (Input-Output) :
     Parameter yang menerima nilai dari parameter aktual untuk diproses dalam prosedur kemudian diserahkan kembali ke parameter aktual setelah selesai.


      
2.     Fungsi
Fungsi pada hakekatnya serupa dengan prosedur dalam pelaksanaannya, tetapi harus mengembalikan suatu nilai ke program yang menggunakan fungsi. Prosedur hanya bisa mengembalikan nilai melalui parameter input-output (in-out).
Bentuk umum :
    Fungsi nama_fungsi (parameter formal) à tipe_hasil
    {spesifikasi fungsi}
    Deklarasi
          {variabel lokal}
    Deskripsi
          {langkah/proses yang dilakukan oleh fungsi}
          ……….
          ……….
          {pengembalian nilai}
          return hasil
Contoh 1 : Contoh melaksanakan fungsi matematika
                  f(x) = x2+8x+10
Fungsi F (input real x) àreal
{menghitung nilai fungsi f(x)=x^2+8x+10}
Deklarasi
        real y;
Deskripsi
        yß x*x + 8*x + 10;
        return y;

Macam - Macam Sorting


Sorting adalah proses menyusun elemen – elemen dengan tata urut tertentu dan proses tersebut terimplementasi dalam bermacam aplikasi. Kita ambil contoh pada aplikasi perbankan. Aplikasi tersebut mampu menampilkan daftar account yang aktif. Hampir seluruh pengguna pada sistem akan memilih tampilan daftar berurutan secara ascending demi kenyamanan dalam penelusuran data.
Beberapa macam algoritma sorting telah dibuat karena proses tersebut sangat mendasar dan sering digunakan. Oleh karena itu, pemahaman atas algoritma – algoritma yang ada sangatlah berguna.
Macam – macam sorting adalah sebagai berikut
1.   Insertion sort.
2.   Selection sort.
3.   Marge Sort.
4.   Quick Sort.

2.2 Insertion Sort
Salah satu algoritma sorting yang paling sederhana adalah insertion sort. Ide dari algoritma ini dapat dianalogikan seperti mengurutkan kartu. Penjelasan berikut ini menerangkan bagaimana algoritma insertion sort bekerja dalam pengurutan kartu. Anggaplah anda ingin mengurutkan satu set kartu dari kartu yang bernilai paling kecil hingga yang paling besar. Seluruh kartu diletakkan pada meja, sebutlah meja ini sebagai meja pertama, disusun dari kiri ke kanan dan atas ke bawah. Kemudian kita mempunyai meja yang lain, meja kedua, dimana kartu yang diurutkan akan diletakkan. Ambil kartu pertama yang terletak pada pojok kiri atas meja pertama dan letakkan pada meja kedua. Ambil kartu kedua dari meja pertama, bandingkan dengan kartu yang berada pada meja kedua, kemudian letakkan pada urutan yang sesuai setelah perbandingan. Proses tersebut akan berlangsung hingga seluruh kartu pada meja pertama telah diletakkan berurutan pada meja kedua.
Contoh :
Jika sudah terurut 3,6,9, dan selanjutnya belum terurut 5, 7, 2,....
5 akan disisipkan di antara 3 dan 6, sehingga menjadi 3, 5, 6, 9.
7 akan disisipkan di antara 6 dan 9, sehingga menjadi 3, 5, 6, 7, 9.
2 akan disisipkan sebelum 3, sehingga menjadi 2, 3, 5, 6, 7, 9.
Alagoritma :
void insertionSort(Object array[], int startIdx, int endIdx) {
for (int i = startIdx; i < endIdx; i++) {
int k = i;
for (int j = i + 1; j < endIdx; j++) {
if (((Comparable) array[k]).compareTo(array[j])>0) {
k = j;
}
}
swap(array[i],array[k]);
}
}
2.3 Selection Sort
Jika anda diminta untuk membuat algoritma sorting tersendiri, anda mungkin akan menemukan sebuah algoritma yang mirip dengan selection sort. Layaknya insertion sort, algoritma ini sangat rapat dan mudah untuk diimplementasikan.
Mari kita kembali menelusuri bagaimana algoritma ini berfungsi terhadap satu paket kartu. Asumsikan bahwa kartu tersebut akan diurutkan secara ascending. Pada awalnya, kartu  tersebut akan disusun secara linier pada sebuah meja dari kiri ke kanan, dan dari atas ke bawah. Pilih nilai kartu yang paling rendah, kemudian tukarkan posisi kartu ini dengan kartu yang terletak pada pojok kiri atas meja. Lalu cari kartu dengan nilai paling rendah diantara sisa kartu yang tersedia. Tukarkan kartu yang baru saja terpilih dengan kartu pada posisi kedua. Ulangi langkah – langkah tersebut hingga posisi kedua sebelum posisi terakhir dibandingkan dan dapat digeser dengan kartu yang bernilai lebih rendah. Ide utama dari algoritma selection sort adalah memilih elemen dengan nilai paling rendah dan menukar elemen yang terpilih dengan elemen ke-i. Nilai dari i dimulai dari 1 ke n, dimana n adalah jumlah total elemen dikurangi 1.

2.4 Quick Sort
   Quicksort ditemukan oleh C.A.R Hoare. Seperti pada merge sort, algoritma ini juga berdasar pada pola divide-and-conquer. Berbeda dengan merge sort, algoritma ini hanya mengikuti langkah – langkah sebagai berikut :


1. Divide
Memilah rangkaian data menjadi dua sub-rangkaian A[p…q-1] dan A[q+1…r] dimana setiap elemen A[p…q-1] adalah kurang dari atau sama dengan A[q] dan setiap elemen pada A[q+1…r] adalah lebih besar atau sama dengan elemen pada A[q]. A[q] disebut sebagai elemen pivot. Perhitungan pada elemen q merupakan salah satu bagian dari prosedur pemisahan.
2. Conquer
Mengurutkan elemen pada sub-rangkaian secara rekursif Pada algoritma quicksort, langkah ”kombinasi” tidak di lakukan karena telah terjadi pengurutan elemen – elemen pada sub-array
Algoritma :
void quickSort(Object array[], int leftIdx, int rightIdx) {
int pivotIdx;
/* Kondisi Terminasi */
if (rightIdx > leftIdx) {
pivotIdx = partition(array, leftIdx, rightIdx);
quickSort(array, leftIdx, pivotIdx-1);
quickSort(array, pivotIdx+1, rightIdx);
}
}
2.5 Marge Sort
Sebelum mendalami algoritma merge sort, mari kita mengetahui garis besar dari konsep divide and conquer karena merge sort mengadaptasi pola tersebut.
Pola Divide and Conquer
Beberapa algoritma mengimplementasikan konsep rekursi untuk menyelesaikan permasalahan. Permasalahan utama kemudian dipecah menjadi sub-masalah, kemudian solusi dari sub-masalah akan membimbing menuju solusi permasalahan utama.
Pada setiap tingkatan rekursi, pola tersebut terdiri atas 3 langkah.
1. Divide
Memilah masalah menjadi sub masalah

2. Conquer
Selesaikan sub masalah tersebut secara rekursif. Jika sub-masalah tersebut cukup ringkas dan sederhana, pendekatan penyelesaian secara langsung akan lebih efektif
3. Kombinasi
Mengkombinasikan solusi dari sub-masalah, yang akan membimbing menuju penyelesaian atas permasalahan utama
Memahami Merge Sort
Seperti yang telah dijelaskan sebelumnya, Merge sort menggunakan pola divide and conquer. Dengan hal ini deskripsi dari algoritma dirumuskan dalam 3 langkah berpola divide-and-conquer. Berikut menjelaskan langkah kerja dari Merge sort.
1. Divide
Memilah elemen – elemen dari rangkaian data menjadi dua bagian.
2. Conquer
Conquer setiap bagian dengan memanggil prosedur merge sort secara
rekursif
3. Kombinasi
Mengkombinasikan dua bagian tersebut secara rekursif untuk mendapatkan rangkaian data berurutan. Proses rekursi berhenti jika mencapai elemen dasar. Hal ini terjadi bilamana bagian yang akan diurutkan menyisakan tepat satu elemen. Sisa pengurutan satu elemen tersebut menandakan bahwa bagian tersebut telah terurut sesuai rangkaian.
Algoritma
void mergeSort(Object array[], int startIdx, int endIdx) {
if (array.length != 1) {
//Membagi rangkaian data, rightArr dan leftArr
mergeSort(leftArr, startIdx, midIdx);
mergeSort(rightArr, midIdx+1, endIdx);
combine(leftArr, rightArr);

Array


     Array adalah suatu variabel yang terdiri dari sekumpulan data dimana data-data tersebut mempunyai tipe data yang sama. Setiap data disimpan dalam alamat memori yang berbeda-beda dan disebut dengan
elemen array. Setiap elemen mempunyai nilai indek sesuai dengan urutannya. Melalui indek inilah kita dapat mengakses data-data tersebut. Indek dari elemen array ini, baik dalam bahasa C++ maupun Java dimulai dari 0, bukan 1 seperti dalam bahasa Pascal. Array dideklarasikan dengan tanda [ ] (bracket), baik dalam bahasa C++ dan Java.

  • Array Satu Dimensi
Array satu dimensi adalah suatu array yang terdiri dari 1 subskrip array, yaitu jumlah data maksimum.
Bentuk umum :
Tipe_data nama_array[jumlah_maks_data];
Contoh :
int Nilai[5];        nilai [1]   nilai [2]      nilai [3]       nilai [4]     nilai [5]
70
80
82
60
75
Catatan :
String juga sebenarnya merupakan array yang bertipe karakter. Jumlah elemen array menyatakan jumlah string.
  • Array Dua Dimensi
Array dua dimensi adalah suatu  array yang terdiri dari 2 subskrip, yaitu jumlah elemen baris dan jumlah  elemen kolom.
Bentuknya dapat berupa matriks atau tabel.
Deklarasi array :
Tipe_array nama_array[baris][kolom];
Cara mengakses array :
Untuk mengakses array, misalnya kita ingin mengisi elemen array baris 2 kolom 3 dengan 10 maka perintahnya adalah sbb :
X[1][2] = 10
Untuk mengisi dan menampilkan isi elemen array ada dua cara yaitu :
Row Major Order (secara baris per baris)
Column Major Order (secara kolom per kolom)
  • Array Multidimensi
Array multidimensi adalah suatu array yang mempunyai subskrip lebih dari dua. Bentuk pendeklarasian array sama saja dengan array dimensi satu maupun array dimensi .



Bagian - Bagian Algoritma


Bagian – Bagian Algoritma
HEADER adalah bagian algoritma yang terdiri dari nama dan penjelasan (spesifikasi) tentang algoritma tersebut.
·        Terdiri dari nama dan penjelasan (spesifikasi) algoritma.
·        Nama yang digunakan sebaiknya singkat (namun cukup informatif).
·        Biasanya di bawah nama diberi spesifikasi algoritma. Algoritma yang akan ditulis nantinya

DEKLARASI adalah tempat untuk mendefinisikan nama
tipe, nama konstanta, nama informasi/peubah (nama variabel),
nama fungsi (sekaligus spesifikasinya) dan nama prosedur
(sekaligus spesifikasinya)
1 .  Merupakan tempat untuk mendefinisikan berbagai macam nama, yaitu:
ü  nama tipe
ü nama konstanta
ü nama peubah (nama variabel)
ü nama fungsi, sekaligus spesifikasinya
ü nama prosedur, sekaligus spesifikasinya
2. Semua nama tersebut baru dapat digunakan jika telah didefinisikan di dalam DEKLARASI. Penulisan sekumpulan nama dalam DEKLARASI sebaiknya dikelompokkan menurut jenis nama tersebut.
3. Ketentuan-ketentuan dalam pendefinisian nama-nama:
ü nama peubah belum terdefinisi harganya ketika didefinisikan.
ü Pendefinisian konstanta sekaligus juga memberikan harganya.
ü Pendefinisian nama fungsi sekaligus juga dengan domain dan range serta
ü spesifikasinya.
ü Pendefinisian nama prosedur sekaligus juga dengan pendefinisian parameter
(jika ada) dan spesifikasi prosedur (kondisi .awal, kondisi akhir dan proses yang dilakukan).

DESKRIPSI merupakan uraian langkah-langkah penyelesaian
masalah. Setiap langkah algoritma dibaca dengan urutan dari
“atas” ke “bawah”. Urutan penulisan ini akan menentukan
urutan pelaksanaan perintah.