YayBlogger.com
BLOGGER TEMPLATES

Kamis, 13 Desember 2012

ASD - ADT Array 1 Dimensi


Laporan
Algoritma dan Struktur Data
ADT Array 1 Dimensi


Oleh 


Nama          : Gusnia Syukriyawati
NIM            : 115090607111036
Asisten        : 1. Eka Mahargiyak
                    : 2. Ahmad Azeri


Program Teknologi Informatika dan Ilmu Komputer
Universitas Brawijaya
Malang
2012




BAB I
Pendahuluan

I.1 Dasar Teori
Deskripsi Array

Program mendefinisikan array sebagai barisan lokasi memori berturutan. Definisi ini kurang tepat karena karena terjadi keracuan antar tipe data abstrak (ADT) dan respresentasinya. Memang benar array hampir selalu diimplementasikan menggunakan memori berurutan tapi tidak selalu demikian. Semua elemen array adalah tilpe sama. Array cocok untuk organisasi kumpulan data homogen.  

Secara intuitif, ADT array adalah kumpulan pasangan indeks dan nilai 
(indekx/value paris). Untuk array, maka terdapat dua operasi, yaitu :  
1.  Operasi untuk mengambil (RETRIEVE) nilai  
2.  Operasi untuk mrnyimpan (STORE) nilai

ADT Array
Sintaks umum deklarasi array sebagai berikut :  
Type var-name [ ] ; 
Atau  
Type [ ] var-name ;
Type mendeklarasikan tipe basis array. Tipe basis menentukan tipe data elemen pembentukan array. Tipe array menentukan tipe data yang dimuat array.  

Berikut adalah contoh deklarasi array di Java :  
Int numbers [ ] ; 
Char [ ] letters ; 
Long agrid [ ] [ ] ;  

Pada Java, kita tidak perlu menspesifikasi ukuran array saat deklarasi. 
Ukuran array ditentukan dengan dua cara :  
1.  Mendaftarkan item-item array saat deklarasi, atau  
2.  Menyatakan ukuran secara eksplisit saat menciptakan menggunakan operator new. 

Keuntungan lain adalah menempatkan kurang siku deklarasi array, sehingga dapat menempatkan kurung siklus setelah tipe atau setelah indentifier.  Berikut ini contoh deklari array dengan memberikan daftar item dan menspesifikasi ukuran menggunakan operator new.  
Int primes = {2, 3, 5, 7, 11, 13} ; 
Char alphabet [ ] = new char [26] 

Proses untuk memperoleh array adalah dua langkah, yaitu :  
1.  Deklarasi variabel dengan tipe yang dikehendaki  
2.  Alokasi memori mengguankan operator new dan memberikan ke variabel.  

Di Java, semua array dialokasikan secara dinamis jika konsep alokasi dinamis ini tidak akrab bagi anda maka jangan khawatir karena konsep array dinamis lebih mudah dan ampuh dalam memperlakukan array.  Setelah mengalokasikan array, kita dapat mengakses elemen spesifik di array dengan menspesifikasikan indeks di kurung siku. Di Java indeks array dimulai dengan nol.

Pemeriksaan Batas   
Java memeriksa batas array secara ketat sehingga menjamin tidak ada usaha menyimpan atau mengacu nilai luar array. Sistem run-time Java melakukan pemeriksaan untuk menjamin indeks berada di range yang benar. Di java, array multidimensi adalah array dari array. Pendekatan ini terlihat dan bertindak seperti array multidimensi biasa, namun terdapat menspesifikasi masing-masing indeks tambahan menggunakan himpunan kurung kurawal lain.  
Kelebihan pengalokasian masing-masing dimensi secara manual adalah  tidak perlu mengalokasikan jumlah elemen yang sama untuk masing-masing dimensi. Karena array multidimensi array dari array maka panjang masing-masing array dapat dikendalikan.

Array 1 Dimensi  
Array dimensi satu disebut juga dengan vector, adalah sebuah array yang terdiri dari sejumlah elemen data, dan poisis setiap elemen ditentukan oleh sebuah subskrib. Setiap array harus dideklarasikan terlebih dahulu, hal ini digunakan untuk mengalokasikan ruang memori yang akan digunakan dan juga menentukan tipe data dari elemen
Deklarasi Array satu dimensi
tipe_data nama_var_array[ukuran];

tipe_data : menyatakan jenis tipe data elemen larik (int, char, float, dll)
nama_var_array : menyatakan nama variabel yang dipakai.
ukuran : menunjukkan jumlah maksimal elemen larik.

Array 1 dimensi sesungguhnya senarai variabel bertipe serupa. Pertama buat lebih dulu varibel array dari tipe yang dikehendaki.  Int monthDays [ ] ; Tanda [] disebut juga “elemen yang ke- „. Misalnya kondisi[0] berarti elemen yang ke nol. Array yang sudah dipesan, misalnya 10 tempat tidak harus diisi semuanya, bisa saja hanya diisi 5 elemen saja, baik secara berurutan maupun tidak. Namun pada kondisi yang tidak sepenuhnya terisi tersebut, tempat pemesanan di memori tetap sebanyak 10 tempat, jadi tempat yang tidak terisi tetap akan terpesan dan dibiarkan kosong.



Meski deklarasi telah menetapkan monthDays adalah variabel array, namun sesungguhnya tidak ada array yang diciptakan. Nilai monthDays dengan array bilangan bulat actual dan fisik, kita harus melakukan alokasi menggunakan operator new ( ). Operator new ( ) meruapkan operator khusus untuk mengalokasikan memori.
Bentuk umum new untuk array 1 dimensi sebagai berikut :  
Array-var = new type [size] 

Type menspesifikasi tipe data yang dialokasikan, size menspesifikasi jumlah elemen, dan array-var adalah ama variabel. Untuk menggunakan new, kita harus menspesifikasi tipe dan jumlah elemen.  
Perhatiakn contoh berikut :
Month_days = new int [12] 
Setelah pernyataan dieksekusi, month_days akan emngacu ke array berisi 
12 bilangan int. kedua belas angka tersebut dinisialisasi dengan nol. 

Bentuk umum new ( ) untuk array 1 dimensi sebagai berikut :  
Array-var = new ( ) type {size}  

Disini, type menspesifikasi tipe data yang dialokasikan, size menspesifikasi jumlah elemen array, dan array-var adalah variabel array. Untuk menggunakan new ( ), pertama harus menspesifikasi tipe dan jumlah elemen untuk dialokasikan. Elemen-elemen di array yang dialokasikan dengan new ( ) akan secara otomatis diinisialisasi ke nol.  

Perhatikan contoh berikut :  

montDays = new ( ) int [12] ;  

Setelah pertanyaan diatas dieksekusi, monthDays akan mengacu ke array  berisi 12 bilangan int, kedua belas angka tersebut diibisialisasi dengan nol.

Untuk memberikan nilai 29 ke elemen kedua dari month_days, kita menggunakan perintah berikut  :
Month_days [1] = 29 ;  

Berikut ini adalah menampilkan nilai yang disimpan di indeks 3 yaitu elemen ke-4 :  
System. Out. printInt (month_days [3]).





BAB II
Pembahasan

II.1 Source Code
No
Larik.java

package Array1D;
public class Larik {
       //data (struktur data)
       private int size;
       private int [] itemDt;
       private int n;
       private int temp;
       private int hasil;
      
       //method
       public void buatLarik(int n){
              this.size = n ;
              this.itemDt = new int[this.size];
       }
       public Larik(int n){
              buatLarik(n);
       }
       public int getSize(){
              return this.size;
       }
       public Larik(int[]dt){
              buatLarik (dt.length);
              for (int i = 0; i<dt.length;i++)
                     isiItem(i,dt[i]);
       }
       public void isiItem(int id, int dt){
              this.itemDt[id]=dt;
       }
      
       public void cetak (String komentar){
              System.out.println(komentar);
              for (int i=0; i<this.size;i++){
                     System.out.print(this.itemDt[i]+ " ");
              }
              System.out.println();
       }
      
       public int findBesar(){
              int besar = this.itemDt[0];
              for(int i = 1; i<this.size;i++){
                     if(besar<this.itemDt[i]){
                           besar=this.itemDt[i];
                     }
              }
              return besar;
       }
      
       /**
        * program ini mencari posisi suatu data tertentu di larik
        */
       public int getPosisi(int dtCari){
              int pos = -99;
              boolean ketemu = false;
              int i =0;
              while(!ketemu && i<this.size){
                     if(dtCari == this.itemDt[i]){
                           ketemu = true;
                           pos=i;
                     }
                     i++;
              }
              return pos;
       }
      
       private int getPosMax(int id){
              int max = this.itemDt[id];
              int posMax = id;
              for (int i = id +1; i<size; i++){
                     if(max<=this.itemDt[i]){
                           max=this.itemDt[i];
                           posMax=i;
                     }
              }
              return posMax;
       }
      
       private int getPosMin(int id){
              int min = this.itemDt[id];
              int posMin = id;
              for (int i = id +1; i<size; i++){
                     if(min>=this.itemDt[i]){
                           min=this.itemDt[i];
                           posMin=i;
                     }
              }
              return posMin;
       }
      
       public int PencarianBiner(int dtCari, int awal, int akhir){
              int pos=-99;
              int tengah = (awal+akhir)/2;
              if(dtCari<this.itemDt[tengah])
                     return PencarianBiner(dtCari, awal, tengah);
              else if(dtCari>this.itemDt[tengah])
                     return PencarianBiner(dtCari, tengah+1, akhir);
              else if(dtCari==this.itemDt[tengah])
                     return tengah;
              else return pos;
       }
       /**
        * program untuk mengcopi suatu larik
        * mulai dari posisi k sebanyak n item hasilnya
        * dikeluarkan sebagai array baru
        */
       public Larik copyLarik(int k, int n){
              Larik lHasil = null;
              if(n<=this.size-k){
                     lHasil = new Larik(n);
                     int j = 0;
                     for(int i = k; i<k+n; i++){
                           lHasil.isiItem(j++, this.itemDt[i]);
                     }
              }
              return lHasil;
       }

      public void findPosGenap (int x1, int x2){
              Larik lsort = copyLarik(0, size);
             
              int a= lsort.getPosisi(x1);
              int b= lsort.getPosisi(x2);
              int fpg = -1;

              for (int i = a; i< b;i++){
                     if (lsort.itemDt[i] % 2==0){
                           fpg = i;
                           System.out.print(fpg +" ");
                     }
              }     
       }
       /**
        * pilihan 0: diurutkan dari kecil ke besar
        * lain nya: urutkan dari besar ke kecil
        * Algoritma pengurutan selection sort
        */
       public Larik SelectionSort(int pilihan){
              Larik lsort= copyLarik(0,size);
              for (int i = 0; i<lsort.getSize();i++){
                     int posData=0;
                     if(pilihan==0)
                           posData = lsort.getPosMin(i);
                     else
                           posData = lsort.getPosMax(i);
                     int dt1 = lsort.itemDt[i];
                     int dt2 = lsort.itemDt[posData];
                     lsort.itemDt[i]=dt2;
                     lsort.itemDt[posData]=dt1;
              }
              return lsort;
       }
      
       private static void BubleSort(int[] dtArray) {
               int i,j,k,temp;
               for(i=1; i < dtArray.length - 1; i++){
                      System.out.println("Cara Buble Sort ke - "+ i);
                      
                      for(j=dtArray.length-1;j >=i; j--){
                            if(dtArray[j-1] > dtArray[j]){
                                   temp = dtArray[j];
                                   dtArray[j] = dtArray[j-1];
                                   dtArray[j-1] = temp;
                            }
                            
                            for(k=0;k < dtArray.length; k++){
                                   System.out.print(dtArray[k]+"\t");
                            }
                            System.out.println();
                      }
        }
       }
             
       public static void main (String[] args){
              int []A = {2,34,5,7,10};
              Larik lA = new Larik(A);  
             
              lA.cetak("Sebelum di sorting : ");
              System.out.println();
             
              System.out.println("Sorting bubble Sort ");
              System.out.println();
              BubleSort(A);
              System.out.println();
      
              System.out.println("Pos genap [index]:");
              lA.findPosGenap(2, 7);
      
       }


No
Larik2.java

  
package Array1D;

public class Larik2 {
      //data (struktur data)
      private int size;
      private double []itemDt;
     
      /**
       * Contructor untuk membuat ADT larik dari suatu array
       * @param A : array bertype int
       */
      public Larik2(double []A){
            this.size = A.length;
            this.itemDt = new double[this.size];
            for (int i=0; i<this.size; i++){
                  this.itemDt[i] = A[i];
            }
      }
            /**
       * fungsi untuk mendapatkan ukuran larik
       * @return size dari larik
       */
      public int getSize(){
            return this.size;
      }
      /**
       * fungsi untuk mendapatkan item ke i dari suatu larik
       * @param i : posisi item
       * @return item larik
       */
      public double getItem(int i){
            return this.itemDt[i];
      }
      /**
       * Konstruktor Larik2
       */
      public Larik2 (int y ) {
            larikSize(y);
            }
      /**
       * Membuat size larik
       */
      public void larikSize (int y) {
            this.size = y;
            this.itemDt = new double [this.size];
      }    
      /**
       * fungsi static untuk menyambung dua buah larik 11 dan 12
       * @param l1 : Larik
       * @param l2 : Larik
       * @return Larik
       */
      public static Larik2 sambung (Larik2 l1, Larik2 l2){
                  // Lengkapi bagian ini
                  Larik2 Larik = new Larik2(l1.getSize()+l2.getSize());
                  int j = 0;
                  for (int i = 0; i<Larik.getSize();i++){
                        if (i < l1.getSize()){
                              Larik.isiItem(i, l1.getItem(i));
                        }else{
                              while (j<l2.getSize()){
                                    Larik.isiItem(i, l2.getItem(j));
                                    i++;j++;
                              }
                        }
                  }
                  return Larik;
            }
      /**
       * procedure untuk isiItem suatu larik
       * @param id : indeks larik
       * @param id : item data yang akan disisipkan
       */
      public void isiItem (int id, double dt){
            this.itemDt[id] = dt;
      }
     
      /**
       * procedure cetak suatu array
       * @param komentar : String
       */
      public void cetak (String komentar){
            System.out.println(komentar);
            for (int i=0; i<this.size; i++){
                  System.out.printf("%.2f ",this.itemDt[i]);
            }
            System.out.println();
      }
      /**
       * fungsi untuk mendapatkan nilai terbesar dari suatu larik
       * @return : item terbesar dari larik
       */
      public double findBesar(){
            double besar = this.itemDt[0];
            for (int i=1; i<this.size; i++){
                  if (besar < this.itemDt[i]){
                        besar = this.itemDt[i];
                  }
            }
            return besar;
      }
      /**
       * fungsi untuk mencari posisi suatu data tertentu di array
       * @param dtCari: data yang akan dicari
       * @return posisiData
       */
      public int getPosisi (double dtCari){
            int pos = -99;
            boolean ketemu = false;
            int i =0;
            while (!ketemu && i<this.size){
                  if (dtCari == this.itemDt[i]){
                        ketemu = true;
                        pos = i;
                  }
                  i++;
            }
            return pos;
      }
      /**
       * fungsi static untuk mencopy isi suatu larik l
       * @param k : posis awal
       * @param n : jumlah item yang akan dicopy
       * @param l : larik asal
       * @return Larik hasil copy
       */
      public static Larik2 copyLarik(int k, int n, Larik2 l){
            //lengkapi bagian ini
            Larik2 hasil = null;
            if (n <= l.getSize()-k){
                  hasil = new Larik2(n);
                  int j = 0;
                  for (int i=k; i<k+n; i++){
                        hasil.isiItem(j++, l.getItem(i));
                  }
            }
            return hasil;
      }
      /**
       * fungsi untuk mencari posisi terbesar duatu data
       * suatu posisi awal sampai akhir
       * @param awal : posisi awal
       * @param akhir : posisi akhir
       * @return posisi data tebesar
       */
      public int getPosBesar(int awal, int akhir){
            int posBesar = -1;
            double itemBesar;
            if (awal <= akhir){
                  posBesar = awal;
                  itemBesar = this.getItem(awal);
                  for (int i=awal+1; i<akhir; i++){
                        double nilaiItem = this.getItem(i);
                        if (itemBesar < nilaiItem){
                              itemBesar = nilaiItem;
                              posBesar=i;
                        }
                  }
            }
            return posBesar;
      }
      /**'
       * fungsi untuk mencari posisi data terkecil suatu array
       * mulai dari posisi awal sampai posisi akhir
       * @param awal : posisi awal
       * @param akhir : posisi akhir
       * @return posisi data terkecil
       */
      public int getPosKecil(int awal, int akhir){
            //lengkapi bagian ini
            int posKecil = -1;
            double itemKecil;
            if (awal <= akhir){
                  posKecil = awal;
                  itemKecil = this.getItem(awal);
                  for (int i=awal+1; i<akhir; i++){
                        double nilaiItem = this.getItem(i);
                        if (itemKecil > nilaiItem){
                              itemKecil = nilaiItem;
                              posKecil=i;
                        }
                  }
            }
            return posKecil;
      }
     
      /**
       * fungsi pengurutan suatu larik lAsaldimana kondisi awal lAsal
       * akan tetap setelah proses pengurutan
       * @param lAsal : Array asal yana akan diurutkan
       * @param status : 0-> urut dari kecil ke besar
       *                         1-> urut dari besar ke kecil
       * @return Array baru hasil pengurutan
       */
     
      public static Larik2 SelectionSort (Larik2 lAsal, int status){
            int n = lAsal.getSize();
            Larik2 lhasil = Larik2.copyLarik(0, n, lAsal);
            if (status == 0 ) { //urutkan data dari kecil ke besar
                  for (int i=0; i<n; i++){
                        int posKecil = lhasil.getPosKecil(i, n);
                        double itemKecil = lhasil.getItem(posKecil);
                        double itemI = lhasil.getItem(i);
                        lhasil.isiItem(i, itemKecil);
                        lhasil.isiItem(posKecil, itemI);
                  }
            } else {//urutkan data dari besar ke kecil
                  for (int i=0; i<n; i++){
                        int posBesar = lhasil.getPosBesar(i, n);
                        double itemBesar = lhasil.getItem(posBesar);
                        double itemI = lhasil.getItem(i);
                        lhasil.isiItem(i, itemBesar);
                        lhasil.isiItem(posBesar, itemI);
                  }
            }
            return lhasil;
      }
     
      public static double LarikKaliLarik (Larik2 A, Larik2 B){
            double hasil = 0;
            if (A.getSize() == B.getSize()){
                  for (int i = 0; i<A.getSize();i++){
                        hasil += A.getItem(i)*B.getItem(i);
                  }
            }
            return hasil;
      }

      public static void main (String [] args){
            //implementasi untuk ADT_Larik
            double []A= {3,4,1,10,5,2,10,20,16};
            double []B= {4,3,1,11,7};
            Larik2 L1 = new Larik2 (A);
            Larik2 L2 = new Larik2 (B);
           
            L1.cetak("Isi Larik L1");
            L2.cetak("\nIsi Larik L2");
           
            Larik2 L3 = Larik2.sambung (L1, L2);
            L3.cetak("\nL3 = gabungan dari L1 dan L2");
           
            Larik2 L4 = Larik2.copyLarik(0, L1.getSize(), L1);
            L1.cetak("\nIsi larik L1");
            L4.cetak("\nL4 Copy dari L1");
           
            Larik2 L5 = Larik2.SelectionSort(L1, 0);
            L5.cetak("\nL5 Hasil pengurutan dari kecil -> besar");
           
            Larik2 L6 = Larik2.SelectionSort(L1, -1);
            L6.cetak("\nL6 Hasil pengurutan dari besar -> kecil");
           
            L1.cetak("\nIsi Larik L1");
            double hasil = Larik2.LarikKaliLarik(L1, L4);
            System.out.printf("HASIL KALI L1*L4 = %.3f\n", hasil);
      }
}







II.2 Output
Larik.java 


BAB III
Penutup

III.1 Kesimpulan
1.      Array  dapat  digunakan untuk  menyimpan  banyak  data yang  mempunyai tipe  data sejenis. 
2.      Data yang jenisnya berbeda tidak dapat ditempatkan pada satu array yang sama.
3.      Umumnya indeks array diawalidari indeks ke-0, sehingga jika ingin mengakses data ke-1 pada array bisa kita aksesmenggunakan indeks data ke-0 pada array dan seterusnya
4.      Sebelum menggunakan array, perlu membuatnya dan mendeklaraskannya terlebih dahulu.
5.      Array satu Dimensi mempunyai 1 nama tetapi memiliki banyak tempat dan setiap tempat harus dibedakan, untuk membedakannya dibutuhkan penunjuk, pentunjuk dapat berupa karakter(char) atau integer.
6.      Array yang sudah disimpan dalam penunjuk yang sama(berbentuk indeks), maka isinya tidak akan hilang kecuali indeksnya diisi oleh nilai yang lain.

III.2 Saran
1.      Mengajarkan materi secara bertahap hingga mahasiswa mengerti.
2.      Menerangkan dan membahas tugas yang sudah di kumpulkan jika masih ada yang belum dimengerti.


Daftar Pustaka

2.      http://allaboutalgoritma.blogspot.com/2010/02/array-1-dimensi-dalam-java.html

2 komentar: